Posted April 30, 20196 yr Hello! I'm trying to make a packet when the player press his jump keybind. I have a custom item that allow you to double jump when equipped in a Bauble Slot (Belt slot). Everything seems to work, i only need to know when the player press space when he's not touching the ground. I already saw the Forge Doc about SimpleImpl, but i don't really get it.. Do i need 3 class? PacketHandler, MyMessage and MyMessageHandler? (I guess i can rename the Messages classes) Here's the item im making : Spoiler boolean usedDoubleJump = false; public void onWornTick(ItemStack itemstack, EntityLivingBase player) { World world = player.world; if(!player.onGround) { if(/*player press space &&*/!usedDoubleJump) { usedDoubleJump = true; player.motionY = 0.42D; player.fallDistance = 0; } } else if(usedDoubleJump) {usedDoubleJump = false;} } Can you guys give me examples?
April 30, 20196 yr What version About Me Spoiler My Discord - Cadiboo#8887 My Website - Cadiboo.github.io My Mods - Cadiboo.github.io/projects My Tutorials - Cadiboo.github.io/tutorials Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support. When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible. Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)
April 30, 20196 yr Author I pretty much copied Botania's PacketHandler and PacketJump that looks pretty strange but i think that's pretty much what i want, and it's not doing anything so it might be outdated, or i did something wrong
May 1, 20196 yr Author Is this outdated? https://gist.github.com/CatDany/4a3df7fcb3c8270cf70b If i get it, after doing this i just have to put the condition before sending the packet right? Like in useExemple
May 1, 20196 yr Author Okay so here's what i did. Every println are showing up in the console, which mean everything is working, but the player.motionY = 0.42D; (Inside PacketJump) is not happening, and i don't have any errors. I think it might be a side problem, but i don't see how i can fix it ClientProxy : Spoiler @Override public void preInit(FMLPreInitializationEvent event) { MinecraftForge.EVENT_BUS.register(new KeyPressHandler()); } KeyPressHandler : Spoiler @SideOnly(Side.CLIENT) public class KeyPressHandler { @SubscribeEvent public void onKeyPress(InputEvent.KeyInputEvent event) { EntityPlayerSP player = Minecraft.getMinecraft().player; World world = player.world; if (Minecraft.getMinecraft().gameSettings.keyBindJump.isPressed() && !player.onGround) { IMessage jumpmsg = new PacketJump.JumpMessage(player.getEntityId()); PacketHandler.INSTANCE.sendToServer(jumpmsg); System.out.println("Jump Packet sent. Player : " + player); return; } } } PacketHandler : Spoiler public class PacketHandler { public static final SimpleNetworkWrapper INSTANCE = NetworkRegistry.INSTANCE.newSimpleChannel(Reference.MOD_ID.toLowerCase()); public static void init() { registerMessage(PacketJump.class, PacketJump.JumpMessage.class); } private static int nextPacketId = 0; private static void registerMessage(Class packet, Class message) { INSTANCE.registerMessage(packet, message, nextPacketId, Side.CLIENT); INSTANCE.registerMessage(packet, message, nextPacketId, Side.SERVER); nextPacketId++; } } PacketJump : Spoiler public class PacketJump implements IMessageHandler<PacketJump.JumpMessage, IMessage> { @Override public IMessage onMessage(JumpMessage message, MessageContext ctx) { EntityPlayer playerID = (ctx.side.isClient() ? Minecraft.getMinecraft().player : ctx.getServerHandler().player); EntityPlayer player = (EntityPlayer)playerID.world.getEntityByID(message.playerid); boolean usedDoubleJump = false; ItemStack belt = BaublesApi.getBaublesHandler(player).getStackInSlot(3); if(!belt.isEmpty() && belt.getItem() instanceof CloudInJar && !usedDoubleJump) { usedDoubleJump = true; player.motionY = 0.42D; player.fallDistance = 0; System.out.println("Added motionY to " + player); } return null; } public static class JumpMessage implements IMessage { int playerid; public JumpMessage() {} public JumpMessage(int playerid) { this.playerid = playerid; } @Override public void fromBytes(ByteBuf buf) { this.playerid = ByteBufUtils.readVarInt(buf, 4); } @Override public void toBytes(ByteBuf buf) { ByteBufUtils.writeVarInt(buf, playerid, 4); } } } The console output when i press space while in the air : Spoiler [15:23:06] [main/INFO] [STDOUT]: [com.seynox.seynoxstuffmod.util.handlers.KeyPressHandler:onKeyPress:28]: Jump Packet sent. Player : EntityPlayerSP['Player644'/79, l='MpServer', x=601.12, y=83.25, z=648.43] [15:23:06] [Netty Server IO #1/INFO] [STDOUT]: [com.seynox.seynoxstuffmod.network.PacketJump:onMessage:33]: Added motionY to EntityPlayerMP['Player644'/79, l='border', x=601.12, y=83.25, z=648.43]
May 1, 20196 yr I know it seems counter-intuitive but player motion must be changed on the client, the server doesn't actually control it.
May 1, 20196 yr You can get rid of your client proxy and use @EventBusSubscriber(modid = YourMod.MODID, value = Side.CLIENT) with static methods in your class About Me Spoiler My Discord - Cadiboo#8887 My Website - Cadiboo.github.io My Mods - Cadiboo.github.io/projects My Tutorials - Cadiboo.github.io/tutorials Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support. When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible. Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)
May 1, 20196 yr Author 6 hours ago, V0idWa1k3r said: I know it seems counter-intuitive but player motion must be changed on the client, the server doesn't actually control it. How can i make the client execute player.motionY? world.isRemote isnt working here
May 2, 20196 yr Author I just tried the mod on server, and it's crashing about the EntityPlayerSP Spoiler Caused by: java.lang.NoClassDefFoundError: net/minecraft/client/entity/EntityPlayerSP at java.lang.Class.getDeclaredConstructors0(Native Method) ~[?:1.8.0_211] at java.lang.Class.privateGetDeclaredConstructors(Unknown Source) ~[?:1.8.0_211] at java.lang.Class.getConstructor0(Unknown Source) ~[?:1.8.0_211] at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_211] at net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper.instantiate(SimpleNetworkWrapper.java:166) ~[SimpleNetworkWrapper.class:?] at net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper.registerMessage(SimpleNetworkWrapper.java:159) ~[SimpleNetworkWrapper.class:?] at com.seynox.adventum.network.PacketHandler.registerMessage(PacketHandler.java:21) ~[PacketHandler.class:?] at com.seynox.adventum.network.PacketHandler.init(PacketHandler.java:14) ~[PacketHandler.class:?] at com.seynox.adventum.Adventum.init(Adventum.java:42) ~[Adventum.class:?] How can i make this thread-safe?
May 2, 20196 yr 5 minutes ago, Seynox said: How can i make this thread-safe? This isn’t about thread safety, this is physical sides. Read https://mcforge.readthedocs.io/en/latest/concepts/sides/. Post your packet class About Me Spoiler My Discord - Cadiboo#8887 My Website - Cadiboo.github.io My Mods - Cadiboo.github.io/projects My Tutorials - Cadiboo.github.io/tutorials Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support. When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible. Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)
May 2, 20196 yr Author 3 minutes ago, Cadiboo said: Post your packet class PacketHandler : Spoiler public class PacketHandler { public static final SimpleNetworkWrapper INSTANCE = NetworkRegistry.INSTANCE.newSimpleChannel(Reference.MODID.toLowerCase()); public static void init() { registerMessage(PacketJump.class, PacketJump.JumpMessage.class); } private static int nextPacketId = 0; private static void registerMessage(Class packet, Class message) { INSTANCE.registerMessage(packet, message, nextPacketId, Side.CLIENT); INSTANCE.registerMessage(packet, message, nextPacketId, Side.SERVER); nextPacketId++; } } JumpPacket : Spoiler public class PacketJump implements IMessageHandler<PacketJump.JumpMessage, IMessage> { @Override public IMessage onMessage(JumpMessage message, MessageContext ctx) { EntityPlayer playerID = (ctx.side.isClient() ? Minecraft.getMinecraft().player : ctx.getServerHandler().player); EntityPlayer player = (EntityPlayer)playerID.world.getEntityByID(message.playerid); boolean usedDoubleJump = false; ItemStack belt = BaublesApi.getBaublesHandler(player).getStackInSlot(3); if(!belt.isEmpty() && belt.getItem() instanceof CloudInJar && !usedDoubleJump) { usedDoubleJump = true; player.fallDistance = 0; } return null; } public static class JumpMessage implements IMessage { int playerid; public JumpMessage() {} public JumpMessage(int playerid) { this.playerid = playerid; } @Override public void fromBytes(ByteBuf buf) { this.playerid = ByteBufUtils.readVarInt(buf, 4); } @Override public void toBytes(ByteBuf buf) { ByteBufUtils.writeVarInt(buf, playerid, 4); } } }
May 2, 20196 yr Author 5 minutes ago, diesieben07 said: Why do you check the side in onMessage? Your messages should usually only go one way. You cannot access client-only classes from common code (such as your IMessageHandler). You need to encapsulate such access using the @SidedProxy system Can you give me an exemple? I have no idea how i can do this
May 2, 20196 yr Author 30 minutes ago, diesieben07 said: https://mcforge.readthedocs.io/en/latest/concepts/sides/#sidedproxy Fixed! Thanks you
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.