Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Westlifers

Members
  • Joined

  • Last visited

  1. ADD: I found that this packet is actually sent but ctx.get().enqueueWork didn't work. The program stucks there: public boolean handle(Supplier<NetworkEvent.Context> ctx) { System.out.println("h232323"); ctx.get().enqueueWork(() -> { ServerLevel level = Objects.requireNonNull(ctx.get().getSender()).getLevel(); System.out.println("hiiiiiiiiiii"); level.getCapability(LevelCapabilityProvider.LEVEL_CAPABILITY).ifPresent(cap -> { System.out.println("set"); ClientLevelData.setMap(cap.getClassMap()); }); }); System.out.println("11111"); ctx.get().setPacketHandled(true); return true; } will only print "h232323".
  2. Hi, I'm new to modding, and I'm trying to validate wether a string is in a list. However, the list is in ServerLevel's capability and I can't validata it directly on client. Later I came up with this idea: whenever I need this list, I may send a packet from client to sever, and inside the handler I send another packet to client, which synchronize the list to client. (I came up with this while watching this vedio: The problem is: packet from client to server works perfectly(I've done this several times before so I got some experience) BUT packet from server to client doesn't work. Packet from client to server: public class RequestSyncLevelDataS2CPacket { public RequestSyncLevelDataS2CPacket() { } public RequestSyncLevelDataS2CPacket(FriendlyByteBuf buf) { } public void toBytes(FriendlyByteBuf buf) { } public void handle(Supplier<NetworkEvent.Context> ctx) { ctx.get().enqueueWork(() -> { System.out.println("sent"); ModMessages.sendToPlayer(new SyncLevelDataS2CPacket(), ctx.get().getSender()); }); } } Packet from server to client: public class SyncLevelDataS2CPacket { public SyncLevelDataS2CPacket() { } public SyncLevelDataS2CPacket(FriendlyByteBuf buf) { } public void toBytes(FriendlyByteBuf buf) { } public boolean handle(Supplier<NetworkEvent.Context> ctx) { ctx.get().enqueueWork(() -> { ServerLevel level = ctx.get().getSender().getLevel(); System.out.println("hiiiiiiiiiii"); level.getCapability(LevelCapabilityProvider.LEVEL_CAPABILITY).ifPresent(cap -> { System.out.println("set"); ClientLevelData.setMap(cap.getClassMap()); }); }); ctx.get().setPacketHandled(true); return true; } } AND below is my ClientLevelData, where I store the map(this map has the list I want) public class ClientLevelData { private static Map<String, List<String>> map; public static void setMap(Map<String, List<String>> map) { ClientLevelData.map = map; } public static Map<String, List<String>> getMap() { return map; } } I do registered these packets like this: net.messageBuilder(SyncLevelDataS2CPacket.class, id(), NetworkDirection.PLAY_TO_CLIENT) .decoder(SyncLevelDataS2CPacket::new) .encoder(SyncLevelDataS2CPacket::toBytes) .consumerMainThread(SyncLevelDataS2CPacket::handle) .add(); net.messageBuilder(RequestSyncLevelDataS2CPacket.class, id(), NetworkDirection.PLAY_TO_SERVER) .decoder(RequestSyncLevelDataS2CPacket::new) .encoder(RequestSyncLevelDataS2CPacket::toBytes) .consumerMainThread(RequestSyncLevelDataS2CPacket::handle) .add(); other packets all work perfectly. and I tried not using RequestSyncLevelDataS2CPacket, and found that whatever way of sending SyncLevelDataS2CPacket will fail. I get no print from it. I'm really confused.

Important Information

By using this site, you agree to our Terms of Use.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.