Posted November 23, 201410 yr I have created a gui for a block I made that only needs to transfer 1 integer worth of information over to the server and client tile entities. I thought that using IMessage and IMessageHandler would be useful in syncing the two tile entities but when I send the message it calls and index of -1 and won't send... Here is my code: Block class: package com.gavincraft.blocks; import java.util.Random; import com.gavincraft.main.GavinCraft; import com.gavincraft.tileentity.TileEntityAdvancedCatapult; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class AdvancedCatapult extends BlockContainer { private boolean activeState = false; public AdvancedCatapult(boolean active) { super(Material.piston); this.setStepSound(soundTypePiston); this.activeState=active; } public boolean canConnectRedstone(IBlockAccess world, int x, int y, int z, int side){ return true; } public void onBlockAdded(World world, int x, int y, int z) { if (!world.isRemote) { if (this.activeState && !world.isBlockIndirectlyGettingPowered(x, y, z)) { world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world)); } else if (!this.activeState && world.isBlockIndirectlyGettingPowered(x, y, z)) { world.setBlock(x, y, z, GavinCraft.active_advanced_catapult, 1, 2); this.activeState = true; } } } public void updateTick(World world, int x, int y, int z, Random p_149674_5_) { if (!world.isRemote && this.activeState && !world.isBlockIndirectlyGettingPowered(x, y, z)) { world.setBlock(x, y, z, GavinCraft.advanced_catapult, 0, 2); this.activeState = false; } if(!world.isRemote && this.activeState && world.isBlockIndirectlyGettingPowered(x, y, z)){ world.setBlock(x, y, z, GavinCraft.active_advanced_catapult, 1, 2); this.activeState = true; } this.setLightLevel(world.getLightBrightness(x, y+1, z)); } public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { if (!world.isRemote) { if (this.activeState && !world.isBlockIndirectlyGettingPowered(x, y, z)) { world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world)); } else if (!this.activeState && world.isBlockIndirectlyGettingPowered(x, y, z)) { world.setBlock(x, y, z, GavinCraft.active_advanced_catapult, 1, 2); this.activeState = true; } } } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int metadata, float what, float are, float these ){ TileEntity tileEntity = world.getTileEntity(x, y, z); if (player.isSneaking()||tileEntity == null){ return false; } player.openGui(GavinCraft.instance, 20, world, x, y, z); return true; } public int tickRate(World world) { return activeState?1:2; } @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityAdvancedCatapult(); } } TileEntity class: package com.gavincraft.tileentity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; public class TileEntityAdvancedCatapult extends TileEntity { public int strength = 0; public void updateEntity(){ EntityPlayer person = (EntityPlayer) this.worldObj.getClosestPlayer(this.xCoord, this.yCoord, this.zCoord, 2); if (person != null && ((int)(Math.abs(person.posX-(person.posX<0?1:0)))) == Math.abs(xCoord) && person.posY -1 == yCoord && ((int)(Math.abs(person.posZ-(person.posZ<0?1:0)))) == Math.abs(zCoord)){ if (this.worldObj.getBlock(xCoord, yCoord, zCoord).tickRate(this.worldObj)==1){ person.velocityChanged=true; person.setVelocity(0, strength/10, 0); } } } public void readFromNBT(NBTTagCompound tag){ super.readFromNBT(tag); strength = tag.getInteger("strength"); } public void writeToNBT(NBTTagCompound tag){ super.writeToNBT(tag); tag.setInteger("strength", strength); } } IMessage class: package com.gavincraft.packet; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import cpw.mods.fml.common.network.simpleimpl.IMessage; public class PacketAdvancedCatapult implements IMessage { public int strength; public int xPos; public int yPos; public int zPos; public PacketAdvancedCatapult(int var1, int x, int y, int z){ strength = var1; xPos = x; yPos = y; zPos = z; } public PacketAdvancedCatapult(){} @Override public void fromBytes(ByteBuf buf) { strength = buf.getInt(0); xPos = buf.getInt(0); yPos = buf.getInt(0); zPos = buf.getInt(0); System.out.println("message decoded"); } @Override public void toBytes(ByteBuf buf) { buf.setInt(0, strength); buf.setInt(0, xPos); buf.setInt(0, yPos); buf.setInt(0, zPos); System.out.println("message coded"); } } IMessageHandler class: package com.gavincraft.packet.handler; import com.gavincraft.packet.PacketAdvancedCatapult; import com.gavincraft.tileentity.TileEntityAdvancedCatapult; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; public class PacketHandlerAdvancedCatapult implements IMessageHandler<PacketAdvancedCatapult, IMessage> { public PacketHandlerAdvancedCatapult(){} @Override public IMessage onMessage(PacketAdvancedCatapult message, MessageContext ctx) { System.out.println("message received"); TileEntityAdvancedCatapult entity = (TileEntityAdvancedCatapult) ctx.getServerHandler().playerEntity.worldObj.getTileEntity(message.xPos, message.yPos, message.zPos); System.out.println("entity set"); entity.strength = message.strength; return null; } } [/spoiler] Gui class: package com.gavincraft.gui; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import com.gavincraft.main.GavinCraft; import com.gavincraft.packet.PacketAdvancedCatapult; import com.gavincraft.tileentity.TileEntityAdvancedCatapult; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiScreenDemo; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.PacketBuffer; import net.minecraft.network.play.client.C17PacketCustomPayload; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; public class GuiAdvancedCatapult extends GuiScreen { public static final int GUI_ID = 20; private static final ResourceLocation resource = new ResourceLocation("textures/gui/demo_background.png"); private int strength; private ItemStack item; private NBTTagCompound nbt; private EntityPlayer player; private World worldObj; private int xPos; private int yPos; private int zPos; public GuiAdvancedCatapult(EntityPlayer entityPlayer, ItemStack itemStack, World world, int x, int y, int z){ worldObj = world; xPos = x; yPos = y; zPos = z; item = itemStack; player = entityPlayer; if (item.hasTagCompound()){ NBTTagCompound nbt = item.getTagCompound(); strength = nbt.getInteger("strength"); }else{ nbt = new NBTTagCompound(); strength = 0; } } public void drawScreen(int par1, int par2, float par3) { this.mc.renderEngine.bindTexture(new ResourceLocation("gavincraft:/textures/gui/advancedcatapultgui.png")); this.drawDefaultBackground(); int k = (this.width - 248) / 2 + 10; int l = (this.height - 166) / 2 + 8; this.fontRendererObj.drawString("Advanced Catapult", k, l, 2039583); this.fontRendererObj.drawString(String.valueOf(this.strength), k+100, l+66, 2039583); super.drawScreen(par1, par2, par3); } public void drawDefaultBackground() { super.drawDefaultBackground(); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(resource); int i = (this.width - 248) / 2; int j = (this.height - 166) / 2; this.drawTexturedModalRect(i, j, 0, 0, 248, 166); } public void initGui() { this.buttonList.clear(); byte b0 = -16; this.buttonList.add(new GuiButton(1, this.width / 2 - 116, this.height / 2 + b0, 40, 20, "+1")); this.buttonList.add(new GuiButton(2, this.width / 2 - 71, this.height / 2 + b0, 40, 20, "+10")); this.buttonList.add(new GuiButton(3, this.width / 2 + 31, this.height / 2 + b0, 40, 20, "-10")); this.buttonList.add(new GuiButton(4, this.width / 2 + 76, this.height / 2 + b0, 40, 20, "-1")); this.buttonList.add(new GuiButton(5, this.width / 2 - 116, this.height / 2 + 62 + b0, 100, 20, "Confirm")); } protected void actionPerformed(GuiButton button){ switch (button.id){ case 1:{ this.strength++; if (this.strength>100) this.strength=100; this.updateScreen(); break; } case 2:{ this.strength+=10; if (this.strength>100) this.strength=100; this.updateScreen(); break; } case 3:{ this.strength-=10; if (this.strength<0) this.strength=0; this.updateScreen(); break; } case 4:{ this.strength--; if (this.strength<0) this.strength=0; this.updateScreen(); break; } case 5:{ this.mc.displayGuiScreen((GuiScreen)null); this.mc.setIngameFocus(); } } } public void onGuiClosed(){ nbt.setInteger("strength", this.strength); if (this.item.hasTagCompound()){ System.out.println("has tag compound"); NBTTagCompound nbttagcompound = this.item.getTagCompound(); nbttagcompound.setInteger("strength", this.strength); }else{ this.item.setTagInfo("strength", this.nbt); } GavinCraft.channel.sendToServer(new PacketAdvancedCatapult(strength, xPos, yPos, zPos)); } } my common proxy class package com.gavincraft.main; import com.gavincraft.gui.GuiAdvancedCatapult; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import cpw.mods.fml.common.network.IGuiHandler; public class CommonProxy implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { if (ID == GuiAdvancedCatapult.GUI_ID){ return new GuiAdvancedCatapult(player, new ItemStack(Item.getItemFromBlock(world.getBlock(x, y, z)), 1), world, x, y, z); } return null; } } finally the main class: package com.gavincraft.main; import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import com.gavincraft.blocks.AdjustmentCore; import com.gavincraft.blocks.AdvancedCatapult; import com.gavincraft.blocks.BigSpring; import com.gavincraft.blocks.CamoflageCore; import com.gavincraft.blocks.Casing; import com.gavincraft.blocks.Catapult; import com.gavincraft.blocks.Coil; import com.gavincraft.blocks.Core; import com.gavincraft.blocks.EnderShard; import com.gavincraft.blocks.OpenBook; import com.gavincraft.blocks.ReinforcedCasing; import com.gavincraft.blocks.SemiSolidFloor; import com.gavincraft.blocks.ShockAbsorber; import com.gavincraft.blocks.Spring; import com.gavincraft.blocks.TeleportCore; import com.gavincraft.creativeTabs.GavinCraftTab; import com.gavincraft.tileentity.TileEntityOpenBook; import com.gavincraft.tileentity.TileEntitySemiSolidFloor; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; @Mod(modid = GavinCraft.MODID, version = GavinCraft.VERSION) public class GavinCraft { @Instance(GavinCraft.MODID) public static GavinCraft instance; @SidedProxy(clientSide="com.gavincraft.main.ClientProxy", serverSide="com.gavincraft.main.ServerProxy") public static ServerProxy serverProxy; public static CreativeTabs gavinCraftTab = new GavinCraftTab(CreativeTabs.getNextID(), "Gavin Craft"); public static SimpleNetworkWrapper channel; public static final String MODID = "gavincraft"; public static final String VERSION = "0.0.0"; public static Block catapult = new Catapult(false).setCreativeTab(gavinCraftTab).setBlockName("Catapult"); public static Block active_catapult = new Catapult(true).setBlockName("Catapult"); public static Item spring = new Spring().setCreativeTab(gavinCraftTab).setUnlocalizedName("Spring").setTextureName("gavincraft:spring"); public static Item coil = new Coil().setCreativeTab(gavinCraftTab).setUnlocalizedName("Coil").setTextureName("gavincraft:coil"); public static Block casing = new Casing().setCreativeTab(gavinCraftTab).setBlockName("Casing").setBlockTextureName("gavincraft:casing"); public static Item big_spring = new BigSpring().setUnlocalizedName("Big_Spring").setCreativeTab(gavinCraftTab).setTextureName("gavincraft:big spring"); public static Block reinforced_casing = new ReinforcedCasing().setBlockName("Reinforced_Casing").setCreativeTab(gavinCraftTab).setBlockTextureName("gavincraft:reinforced casing"); public static Block shock_absorber = new ShockAbsorber().setBlockName("Shock_Absorber").setCreativeTab(gavinCraftTab).setBlockTextureName("gavincraft:shockabsorber"); public static Item teleport_core = new TeleportCore().setUnlocalizedName("Teleport_Core").setCreativeTab(gavinCraftTab).setTextureName("gavincraft:teleport core"); public static Block open_book = new OpenBook().setBlockName("Open_Book").setCreativeTab(gavinCraftTab); public static Block semi_solid_floor = new SemiSolidFloor().setBlockName("Semi-Solid_Floor").setCreativeTab(gavinCraftTab).setBlockTextureName("gavincraft:semisolidfloor"); public static Item ender_shard = new EnderShard().setUnlocalizedName("Ender_Shard").setCreativeTab(gavinCraftTab).setTextureName("gavincraft:ender shard"); public static Item core = new Core().setUnlocalizedName("Core").setCreativeTab(gavinCraftTab).setTextureName("gavincraft:core"); public static Item camoflage_core = new CamoflageCore().setUnlocalizedName("Camoflage_Core").setCreativeTab(gavinCraftTab).setTextureName("gavincraft:camoflage core"); public static Block advanced_catapult = new AdvancedCatapult(false).setBlockName("Advanced_Catapult").setCreativeTab(gavinCraftTab); public static Block active_advanced_catapult = new AdvancedCatapult(true).setBlockName("Advanced_Catapult"); public static Item adjustment_core = new AdjustmentCore().setUnlocalizedName("Adjustment_Core").setCreativeTab(gavinCraftTab); @EventHandler public void preInit(FMLPreInitializationEvent event){ serverProxy.registerRenderThings(); channel = NetworkRegistry.INSTANCE.newSimpleChannel(GavinCraft.MODID); channel.registerMessage(com.gavincraft.packet.handler.PacketHandlerAdvancedCatapult.class, com.gavincraft.packet.PacketAdvancedCatapult.class, 0, Side.SERVER); GameRegistry.registerBlock(catapult, "catapult"); GameRegistry.registerItem(spring, "Spring"); GameRegistry.registerItem(coil, "Coil"); GameRegistry.registerBlock(casing, "Casing"); GameRegistry.registerItem(big_spring, "Big_Spring"); GameRegistry.registerBlock(reinforced_casing, "Reinforced_Casing"); GameRegistry.registerBlock(shock_absorber, "Shock_Absorber"); GameRegistry.registerItem(teleport_core, "Teleport_Core"); GameRegistry.registerBlock(open_book, "Open Book"); GameRegistry.registerBlock(semi_solid_floor, "Semi-Solid_Floor"); GameRegistry.registerTileEntity(TileEntityOpenBook.class, "Open_Book"); GameRegistry.registerBlock(active_catapult, "Active_Catapult"); GameRegistry.registerItem(ender_shard, "Ender_Shard"); GameRegistry.registerItem(core, "Core"); GameRegistry.registerItem(camoflage_core, "Camoflage_Core"); GameRegistry.registerBlock(advanced_catapult, "Advanced_Catapult"); GameRegistry.registerBlock(active_advanced_catapult, "Active_Advanced_Catapult"); GameRegistry.registerItem(adjustment_core, "Adjustment_Core"); GameRegistry.addRecipe(new ItemStack(Blocks.vine), new Object[]{ "xxx", "xyx", "xxx", 'x', Items.wheat, 'y', Blocks.dirt}); GameRegistry.addRecipe(new ItemStack(GavinCraft.coil, 9), new Object[]{ "xxx", "x x", "xxx", 'x', Items.iron_ingot}); GameRegistry.addRecipe(new ItemStack(GavinCraft.spring), new Object[]{ "xxx", 'x', GavinCraft.coil}); GameRegistry.addRecipe(new ItemStack(GavinCraft.casing, 2), new Object[]{ "xxx", "xyx", "xxx", 'x', Blocks.stone, 'y', Items.iron_ingot}); GameRegistry.addRecipe(new ItemStack(GavinCraft.catapult), new Object[]{ "xxx", "yzy", "ywy", 'x', Blocks.piston, 'y', GavinCraft.casing, 'z', GavinCraft.spring, 'w', Items.redstone}); GameRegistry.addRecipe(new ItemStack(GavinCraft.big_spring, 2), new Object[]{ "xxx", "yyy", "xxx", 'x', Items.gold_ingot,'y', GavinCraft.spring}); GameRegistry.addRecipe(new ItemStack(GavinCraft.reinforced_casing, 2), new Object[]{ "yxy", "x x", "yxy", 'x', GavinCraft.casing, 'y', Blocks.obsidian}); GameRegistry.addRecipe(new ItemStack(GavinCraft.shock_absorber), new Object[]{ "xxx", "yyy", "xxx", 'x', Blocks.wool, 'y', GavinCraft.spring}); GameRegistry.addRecipe(new ItemStack(GavinCraft.teleport_core, 1), new Object[]{ "xyx", "yzy", "xyx", 'x', Items.glowstone_dust, 'y', GavinCraft.casing, 'z', GavinCraft.core}); GameRegistry.addRecipe(new ItemStack(GavinCraft.semi_solid_floor, 1), new Object[]{ "xwx", "zuz", "xyx", 'x', GavinCraft.casing, 'y', GavinCraft.teleport_core, 'z', Items.iron_ingot, 'w', GavinCraft.shock_absorber, 'u', GavinCraft.camoflage_core}); GameRegistry.addRecipe(new ItemStack(GavinCraft.ender_shard, , new Object[]{ "x", 'x', Items.ender_pearl }); GameRegistry.addRecipe(new ItemStack(GavinCraft.core, 1), new Object[]{ "xyx", "yzy", "xyx", 'x', Items.redstone, 'y', GavinCraft.ender_shard, 'z', GavinCraft.casing }); GameRegistry.addRecipe(new ItemStack(GavinCraft.camoflage_core, 1), new Object[]{ " x ", "yzw", " u ", 'x',new ItemStack(Items.dye, 1, 1), 'y', new ItemStack(Items.dye, 1, 2), 'z', GavinCraft.core, 'w', new ItemStack(Items.dye, 1, 4), 'u', new ItemStack(Items.dye, 1, 0) }); GameRegistry.addRecipe(new ItemStack(GavinCraft.adjustment_core, 1), new Object[]{ "xyx", "yzy", "xyx", 'x', GavinCraft.coil, 'y', GavinCraft.spring, 'z', GavinCraft.core }); GameRegistry.addRecipe(new ItemStack(GavinCraft.advanced_catapult, 1), new Object[]{ " x ", "yzy", "ywy", 'x', GavinCraft.catapult, 'y', GavinCraft.reinforced_casing, 'z', GavinCraft.big_spring, 'w', GavinCraft.adjustment_core }); } @EventHandler public void load(FMLInitializationEvent event){ NetworkRegistry.INSTANCE.registerGuiHandler(instance, new CommonProxy()); GameRegistry.registerTileEntity(com.gavincraft.tileentity.TileEntitySemiSolidFloor.class, "Semi_Solid_Floor_Tile_Entity"); GameRegistry.registerTileEntity(com.gavincraft.tileentity.TileEntityCatapult.class, "Catapult_Tile_Entity"); GameRegistry.registerTileEntity(com.gavincraft.tileentity.TileEntityAdvancedCatapult.class, "Advanced_Catapult_Tile_Entity"); } @EventHandler public void postinit(FMLPostInitializationEvent event){ } } and here is the error log that I am getting. io.netty.handler.codec.DecoderException: java.lang.NullPointerException: Undefined message for discriminator -1 in channel gavincraft at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?] at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?] at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:?] at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:?] at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?] at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?] at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) [NetworkSystem.class:?] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) [MinecraftServer.class:?] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [integratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?] Caused by: java.lang.NullPointerException: Undefined message for discriminator -1 in channel gavincraft at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:73) ~[FMLIndexedMessageToMessageCodec.class:?] at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?] at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?] ... 13 more [18:11:10] [server thread/ERROR] [FML]: SimpleChannelHandlerWrapper exception io.netty.handler.codec.DecoderException: java.lang.NullPointerException: Undefined message for discriminator -1 in channel gavincraft at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?] at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?] at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:?] at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:?] at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?] at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?] at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) [NetworkSystem.class:?] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) [MinecraftServer.class:?] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [integratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?] Caused by: java.lang.NullPointerException: Undefined message for discriminator -1 in channel gavincraft at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:73) ~[FMLIndexedMessageToMessageCodec.class:?] at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?] at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?] ... 13 more [18:11:10] [server thread/ERROR] [FML]: There was a critical exception handling a packet on channel gavincraft io.netty.handler.codec.DecoderException: java.lang.NullPointerException: Undefined message for discriminator -1 in channel gavincraft at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?] at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?] at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) ~[DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) ~[DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) ~[DefaultChannelPipeline.class:?] at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) ~[EmbeddedChannel.class:?] at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?] at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?] at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) [NetworkSystem.class:?] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) [MinecraftServer.class:?] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [integratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?] Caused by: java.lang.NullPointerException: Undefined message for discriminator -1 in channel gavincraft at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:73) ~[FMLIndexedMessageToMessageCodec.class:?] at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?] at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?] ... 13 more If you need any additional info please let me know.
November 23, 201410 yr Author For some reason the rest of the message didn't add Gui class: package com.gavincraft.gui; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import com.gavincraft.main.GavinCraft; import com.gavincraft.packet.PacketAdvancedCatapult; import com.gavincraft.tileentity.TileEntityAdvancedCatapult; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiScreenDemo; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.PacketBuffer; import net.minecraft.network.play.client.C17PacketCustomPayload; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; public class GuiAdvancedCatapult extends GuiScreen { public static final int GUI_ID = 20; private static final ResourceLocation resource = new ResourceLocation("textures/gui/demo_background.png"); private int strength; private ItemStack item; private NBTTagCompound nbt; private EntityPlayer player; private World worldObj; private int xPos; private int yPos; private int zPos; public GuiAdvancedCatapult(EntityPlayer entityPlayer, ItemStack itemStack, World world, int x, int y, int z){ worldObj = world; xPos = x; yPos = y; zPos = z; item = itemStack; player = entityPlayer; if (item.hasTagCompound()){ NBTTagCompound nbt = item.getTagCompound(); strength = nbt.getInteger("strength"); }else{ nbt = new NBTTagCompound(); strength = 0; } } public void drawScreen(int par1, int par2, float par3) { this.mc.renderEngine.bindTexture(new ResourceLocation("gavincraft:/textures/gui/advancedcatapultgui.png")); this.drawDefaultBackground(); int k = (this.width - 248) / 2 + 10; int l = (this.height - 166) / 2 + 8; this.fontRendererObj.drawString("Advanced Catapult", k, l, 2039583); this.fontRendererObj.drawString(String.valueOf(this.strength), k+100, l+66, 2039583); super.drawScreen(par1, par2, par3); } public void drawDefaultBackground() { super.drawDefaultBackground(); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(resource); int i = (this.width - 248) / 2; int j = (this.height - 166) / 2; this.drawTexturedModalRect(i, j, 0, 0, 248, 166); } public void initGui() { this.buttonList.clear(); byte b0 = -16; this.buttonList.add(new GuiButton(1, this.width / 2 - 116, this.height / 2 + b0, 40, 20, "+1")); this.buttonList.add(new GuiButton(2, this.width / 2 - 71, this.height / 2 + b0, 40, 20, "+10")); this.buttonList.add(new GuiButton(3, this.width / 2 + 31, this.height / 2 + b0, 40, 20, "-10")); this.buttonList.add(new GuiButton(4, this.width / 2 + 76, this.height / 2 + b0, 40, 20, "-1")); this.buttonList.add(new GuiButton(5, this.width / 2 - 116, this.height / 2 + 62 + b0, 100, 20, "Confirm")); } protected void actionPerformed(GuiButton button){ switch (button.id){ case 1:{ this.strength++; if (this.strength>100) this.strength=100; this.updateScreen(); break; } case 2:{ this.strength+=10; if (this.strength>100) this.strength=100; this.updateScreen(); break; } case 3:{ this.strength-=10; if (this.strength<0) this.strength=0; this.updateScreen(); break; } case 4:{ this.strength--; if (this.strength<0) this.strength=0; this.updateScreen(); break; } case 5:{ this.mc.displayGuiScreen((GuiScreen)null); this.mc.setIngameFocus(); } } } public void onGuiClosed(){ nbt.setInteger("strength", this.strength); if (this.item.hasTagCompound()){ System.out.println("has tag compound"); NBTTagCompound nbttagcompound = this.item.getTagCompound(); nbttagcompound.setInteger("strength", this.strength); }else{ this.item.setTagInfo("strength", this.nbt); } GavinCraft.channel.sendToServer(new PacketAdvancedCatapult(strength, xPos, yPos, zPos)); } } my common proxy class package com.gavincraft.main; import com.gavincraft.gui.GuiAdvancedCatapult; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import cpw.mods.fml.common.network.IGuiHandler; public class CommonProxy implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { if (ID == GuiAdvancedCatapult.GUI_ID){ return new GuiAdvancedCatapult(player, new ItemStack(Item.getItemFromBlock(world.getBlock(x, y, z)), 1), world, x, y, z); } return null; } } finally the main class: package com.gavincraft.main; import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import com.gavincraft.blocks.AdjustmentCore; import com.gavincraft.blocks.AdvancedCatapult; import com.gavincraft.blocks.BigSpring; import com.gavincraft.blocks.CamoflageCore; import com.gavincraft.blocks.Casing; import com.gavincraft.blocks.Catapult; import com.gavincraft.blocks.Coil; import com.gavincraft.blocks.Core; import com.gavincraft.blocks.EnderShard; import com.gavincraft.blocks.OpenBook; import com.gavincraft.blocks.ReinforcedCasing; import com.gavincraft.blocks.SemiSolidFloor; import com.gavincraft.blocks.ShockAbsorber; import com.gavincraft.blocks.Spring; import com.gavincraft.blocks.TeleportCore; import com.gavincraft.creativeTabs.GavinCraftTab; import com.gavincraft.tileentity.TileEntityOpenBook; import com.gavincraft.tileentity.TileEntitySemiSolidFloor; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; @Mod(modid = GavinCraft.MODID, version = GavinCraft.VERSION) public class GavinCraft { @Instance(GavinCraft.MODID) public static GavinCraft instance; @SidedProxy(clientSide="com.gavincraft.main.ClientProxy", serverSide="com.gavincraft.main.ServerProxy") public static ServerProxy serverProxy; public static CreativeTabs gavinCraftTab = new GavinCraftTab(CreativeTabs.getNextID(), "Gavin Craft"); public static SimpleNetworkWrapper channel; public static final String MODID = "gavincraft"; public static final String VERSION = "0.0.0"; public static Block catapult = new Catapult(false).setCreativeTab(gavinCraftTab).setBlockName("Catapult"); public static Block active_catapult = new Catapult(true).setBlockName("Catapult"); public static Item spring = new Spring().setCreativeTab(gavinCraftTab).setUnlocalizedName("Spring").setTextureName("gavincraft:spring"); public static Item coil = new Coil().setCreativeTab(gavinCraftTab).setUnlocalizedName("Coil").setTextureName("gavincraft:coil"); public static Block casing = new Casing().setCreativeTab(gavinCraftTab).setBlockName("Casing").setBlockTextureName("gavincraft:casing"); public static Item big_spring = new BigSpring().setUnlocalizedName("Big_Spring").setCreativeTab(gavinCraftTab).setTextureName("gavincraft:big spring"); public static Block reinforced_casing = new ReinforcedCasing().setBlockName("Reinforced_Casing").setCreativeTab(gavinCraftTab).setBlockTextureName("gavincraft:reinforced casing"); public static Block shock_absorber = new ShockAbsorber().setBlockName("Shock_Absorber").setCreativeTab(gavinCraftTab).setBlockTextureName("gavincraft:shockabsorber"); public static Item teleport_core = new TeleportCore().setUnlocalizedName("Teleport_Core").setCreativeTab(gavinCraftTab).setTextureName("gavincraft:teleport core"); public static Block open_book = new OpenBook().setBlockName("Open_Book").setCreativeTab(gavinCraftTab); public static Block semi_solid_floor = new SemiSolidFloor().setBlockName("Semi-Solid_Floor").setCreativeTab(gavinCraftTab).setBlockTextureName("gavincraft:semisolidfloor"); public static Item ender_shard = new EnderShard().setUnlocalizedName("Ender_Shard").setCreativeTab(gavinCraftTab).setTextureName("gavincraft:ender shard"); public static Item core = new Core().setUnlocalizedName("Core").setCreativeTab(gavinCraftTab).setTextureName("gavincraft:core"); public static Item camoflage_core = new CamoflageCore().setUnlocalizedName("Camoflage_Core").setCreativeTab(gavinCraftTab).setTextureName("gavincraft:camoflage core"); public static Block advanced_catapult = new AdvancedCatapult(false).setBlockName("Advanced_Catapult").setCreativeTab(gavinCraftTab); public static Block active_advanced_catapult = new AdvancedCatapult(true).setBlockName("Advanced_Catapult"); public static Item adjustment_core = new AdjustmentCore().setUnlocalizedName("Adjustment_Core").setCreativeTab(gavinCraftTab); @EventHandler public void preInit(FMLPreInitializationEvent event){ serverProxy.registerRenderThings(); channel = NetworkRegistry.INSTANCE.newSimpleChannel(GavinCraft.MODID); channel.registerMessage(com.gavincraft.packet.handler.PacketHandlerAdvancedCatapult.class, com.gavincraft.packet.PacketAdvancedCatapult.class, 0, Side.SERVER); GameRegistry.registerBlock(catapult, "catapult"); GameRegistry.registerItem(spring, "Spring"); GameRegistry.registerItem(coil, "Coil"); GameRegistry.registerBlock(casing, "Casing"); GameRegistry.registerItem(big_spring, "Big_Spring"); GameRegistry.registerBlock(reinforced_casing, "Reinforced_Casing"); GameRegistry.registerBlock(shock_absorber, "Shock_Absorber"); GameRegistry.registerItem(teleport_core, "Teleport_Core"); GameRegistry.registerBlock(open_book, "Open Book"); GameRegistry.registerBlock(semi_solid_floor, "Semi-Solid_Floor"); GameRegistry.registerTileEntity(TileEntityOpenBook.class, "Open_Book"); GameRegistry.registerBlock(active_catapult, "Active_Catapult"); GameRegistry.registerItem(ender_shard, "Ender_Shard"); GameRegistry.registerItem(core, "Core"); GameRegistry.registerItem(camoflage_core, "Camoflage_Core"); GameRegistry.registerBlock(advanced_catapult, "Advanced_Catapult"); GameRegistry.registerBlock(active_advanced_catapult, "Active_Advanced_Catapult"); GameRegistry.registerItem(adjustment_core, "Adjustment_Core"); GameRegistry.addRecipe(new ItemStack(Blocks.vine), new Object[]{ "xxx", "xyx", "xxx", 'x', Items.wheat, 'y', Blocks.dirt}); GameRegistry.addRecipe(new ItemStack(GavinCraft.coil, 9), new Object[]{ "xxx", "x x", "xxx", 'x', Items.iron_ingot}); GameRegistry.addRecipe(new ItemStack(GavinCraft.spring), new Object[]{ "xxx", 'x', GavinCraft.coil}); GameRegistry.addRecipe(new ItemStack(GavinCraft.casing, 2), new Object[]{ "xxx", "xyx", "xxx", 'x', Blocks.stone, 'y', Items.iron_ingot}); GameRegistry.addRecipe(new ItemStack(GavinCraft.catapult), new Object[]{ "xxx", "yzy", "ywy", 'x', Blocks.piston, 'y', GavinCraft.casing, 'z', GavinCraft.spring, 'w', Items.redstone}); GameRegistry.addRecipe(new ItemStack(GavinCraft.big_spring, 2), new Object[]{ "xxx", "yyy", "xxx", 'x', Items.gold_ingot,'y', GavinCraft.spring}); GameRegistry.addRecipe(new ItemStack(GavinCraft.reinforced_casing, 2), new Object[]{ "yxy", "x x", "yxy", 'x', GavinCraft.casing, 'y', Blocks.obsidian}); GameRegistry.addRecipe(new ItemStack(GavinCraft.shock_absorber), new Object[]{ "xxx", "yyy", "xxx", 'x', Blocks.wool, 'y', GavinCraft.spring}); GameRegistry.addRecipe(new ItemStack(GavinCraft.teleport_core, 1), new Object[]{ "xyx", "yzy", "xyx", 'x', Items.glowstone_dust, 'y', GavinCraft.casing, 'z', GavinCraft.core}); GameRegistry.addRecipe(new ItemStack(GavinCraft.semi_solid_floor, 1), new Object[]{ "xwx", "zuz", "xyx", 'x', GavinCraft.casing, 'y', GavinCraft.teleport_core, 'z', Items.iron_ingot, 'w', GavinCraft.shock_absorber, 'u', GavinCraft.camoflage_core}); GameRegistry.addRecipe(new ItemStack(GavinCraft.ender_shard, , new Object[]{ "x", 'x', Items.ender_pearl }); GameRegistry.addRecipe(new ItemStack(GavinCraft.core, 1), new Object[]{ "xyx", "yzy", "xyx", 'x', Items.redstone, 'y', GavinCraft.ender_shard, 'z', GavinCraft.casing }); GameRegistry.addRecipe(new ItemStack(GavinCraft.camoflage_core, 1), new Object[]{ " x ", "yzw", " u ", 'x',new ItemStack(Items.dye, 1, 1), 'y', new ItemStack(Items.dye, 1, 2), 'z', GavinCraft.core, 'w', new ItemStack(Items.dye, 1, 4), 'u', new ItemStack(Items.dye, 1, 0) }); GameRegistry.addRecipe(new ItemStack(GavinCraft.adjustment_core, 1), new Object[]{ "xyx", "yzy", "xyx", 'x', GavinCraft.coil, 'y', GavinCraft.spring, 'z', GavinCraft.core }); GameRegistry.addRecipe(new ItemStack(GavinCraft.advanced_catapult, 1), new Object[]{ " x ", "yzy", "ywy", 'x', GavinCraft.catapult, 'y', GavinCraft.reinforced_casing, 'z', GavinCraft.big_spring, 'w', GavinCraft.adjustment_core }); } @EventHandler public void load(FMLInitializationEvent event){ NetworkRegistry.INSTANCE.registerGuiHandler(instance, new CommonProxy()); GameRegistry.registerTileEntity(com.gavincraft.tileentity.TileEntitySemiSolidFloor.class, "Semi_Solid_Floor_Tile_Entity"); GameRegistry.registerTileEntity(com.gavincraft.tileentity.TileEntityCatapult.class, "Catapult_Tile_Entity"); GameRegistry.registerTileEntity(com.gavincraft.tileentity.TileEntityAdvancedCatapult.class, "Advanced_Catapult_Tile_Entity"); } @EventHandler public void postinit(FMLPostInitializationEvent event){ } } and here is the error log that I am getting. io.netty.handler.codec.DecoderException: java.lang.NullPointerException: Undefined message for discriminator -1 in channel gavincraft at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?] at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?] at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:?] at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:?] at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?] at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?] at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) [NetworkSystem.class:?] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) [MinecraftServer.class:?] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [integratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?] Caused by: java.lang.NullPointerException: Undefined message for discriminator -1 in channel gavincraft at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:73) ~[FMLIndexedMessageToMessageCodec.class:?] at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?] at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?] ... 13 more [18:11:10] [server thread/ERROR] [FML]: SimpleChannelHandlerWrapper exception io.netty.handler.codec.DecoderException: java.lang.NullPointerException: Undefined message for discriminator -1 in channel gavincraft at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?] at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?] at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:?] at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:?] at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?] at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?] at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) [NetworkSystem.class:?] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) [MinecraftServer.class:?] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [integratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?] Caused by: java.lang.NullPointerException: Undefined message for discriminator -1 in channel gavincraft at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:73) ~[FMLIndexedMessageToMessageCodec.class:?] at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?] at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?] ... 13 more [18:11:10] [server thread/ERROR] [FML]: There was a critical exception handling a packet on channel gavincraft io.netty.handler.codec.DecoderException: java.lang.NullPointerException: Undefined message for discriminator -1 in channel gavincraft at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?] at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?] at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) ~[DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) ~[DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) ~[DefaultChannelPipeline.class:?] at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) ~[EmbeddedChannel.class:?] at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?] at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?] at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) [NetworkSystem.class:?] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) [MinecraftServer.class:?] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [integratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?] Caused by: java.lang.NullPointerException: Undefined message for discriminator -1 in channel gavincraft at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:73) ~[FMLIndexedMessageToMessageCodec.class:?] at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?] at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?] ... 13 more If you need any additional info please let me know.
November 23, 201410 yr I'd use the built in tile entity packet handling. Not near my code, so if I forget to post, PM me.
November 23, 201410 yr Hi The problem is that you're using getInt() and setInt() in your message fromBytes and toBytes. (Have a look at the javadoc for those two methods to see why they're wrong) Use readInt and writeInt instead. -TGG
November 23, 201410 yr Author Thank you guys so much for your help. My tileentity saves the data now to the server using a combination of the two ideas Unfortunately whenever I change the redstone state of the block, the tile entity data for the block disappears. I am using the same methods for using redstone as the redstone lamp uses. Does anyone know of a way of keeping the same tile entity data with that block when replacing the block? Here are the classes that I changed for anyone interested in how I solved the previous problem. Tile Entity Class: package com.gavincraft.tileentity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; public class TileEntityAdvancedCatapult extends TileEntity { public int strength = 0; public void updateEntity(){ EntityPlayer person = (EntityPlayer) this.worldObj.getClosestPlayer(this.xCoord, this.yCoord, this.zCoord, 2); if (person != null && ((int)(Math.abs(person.posX-(person.posX<0?1:0)))) == Math.abs(xCoord) && person.posY -1 == yCoord && ((int)(Math.abs(person.posZ-(person.posZ<0?1:0)))) == Math.abs(zCoord) && this.strength!=9){ if (this.worldObj.getBlock(xCoord, yCoord, zCoord).tickRate(this.worldObj)==1){ person.velocityChanged=true; person.setVelocity(0, (double)strength/10, 0); } } } public void readFromNBT(NBTTagCompound tag){ super.readFromNBT(tag); strength = tag.getInteger("strength"); } public void writeToNBT(NBTTagCompound tag){ super.writeToNBT(tag); tag.setInteger("strength", strength); } @Override public Packet getDescriptionPacket(){ System.out.println("sending description packet"); System.out.println(this.strength); NBTTagCompound syncData = new NBTTagCompound(); this.writeToNBT(syncData); return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, syncData); } @Override public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt){ System.out.println("received description packet"); readFromNBT(pkt.func_148857_g()); System.out.println(this.strength); } } IMessage Class: package com.gavincraft.packet; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import cpw.mods.fml.common.network.simpleimpl.IMessage; public class PacketAdvancedCatapult implements IMessage { public int strength; public int xPos; public int yPos; public int zPos; public PacketAdvancedCatapult(int var1, int x, int y, int z){ strength = var1; xPos = x; yPos = y; zPos = z; } public PacketAdvancedCatapult(){} @Override public void fromBytes(ByteBuf buf) { strength = buf.readInt(); xPos = buf.readInt(); yPos = buf.readInt(); zPos = buf.readInt(); System.out.println("message decoded"); } @Override public void toBytes(ByteBuf buf) { buf.writeInt(strength); buf.writeInt(xPos); buf.writeInt(yPos); buf.writeInt(zPos); System.out.println("message coded"); } } Gui Class: package com.gavincraft.gui; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import com.gavincraft.main.GavinCraft; import com.gavincraft.packet.PacketAdvancedCatapult; import com.gavincraft.tileentity.TileEntityAdvancedCatapult; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiScreenDemo; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.NetHandlerPlayServer; import net.minecraft.network.PacketBuffer; import net.minecraft.network.play.client.C17PacketCustomPayload; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; public class GuiAdvancedCatapult extends GuiScreen { public static final int GUI_ID = 20; private static final ResourceLocation resource = new ResourceLocation("textures/gui/demo_background.png"); private int strength; private TileEntityAdvancedCatapult tile; public GuiAdvancedCatapult(TileEntity entity){ tile = (TileEntityAdvancedCatapult)entity; strength = tile.strength; } public void drawScreen(int par1, int par2, float par3) { this.mc.renderEngine.bindTexture(new ResourceLocation("gavincraft:/textures/gui/advancedcatapultgui.png")); this.drawDefaultBackground(); int k = (this.width - 248) / 2 + 10; int l = (this.height - 166) / 2 + 8; this.fontRendererObj.drawString("Advanced Catapult", k, l, 2039583); this.fontRendererObj.drawString(String.valueOf(this.strength), k+100, l+66, 2039583); super.drawScreen(par1, par2, par3); } public void drawDefaultBackground() { super.drawDefaultBackground(); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(resource); int i = (this.width - 248) / 2; int j = (this.height - 166) / 2; this.drawTexturedModalRect(i, j, 0, 0, 248, 166); } public void initGui() { this.buttonList.clear(); byte b0 = -16; this.buttonList.add(new GuiButton(1, this.width / 2 - 116, this.height / 2 + b0, 40, 20, "+1")); this.buttonList.add(new GuiButton(2, this.width / 2 - 71, this.height / 2 + b0, 40, 20, "+10")); this.buttonList.add(new GuiButton(3, this.width / 2 + 31, this.height / 2 + b0, 40, 20, "-10")); this.buttonList.add(new GuiButton(4, this.width / 2 + 76, this.height / 2 + b0, 40, 20, "-1")); this.buttonList.add(new GuiButton(5, this.width / 2 - 116, this.height / 2 + 62 + b0, 100, 20, "Confirm")); } protected void actionPerformed(GuiButton button){ switch (button.id){ case 1:{ this.strength++; if (this.strength>100) this.strength=100; this.updateScreen(); break; } case 2:{ this.strength+=10; if (this.strength>100) this.strength=100; this.updateScreen(); break; } case 3:{ this.strength-=10; if (this.strength<0) this.strength=0; this.updateScreen(); break; } case 4:{ this.strength--; if (this.strength<0) this.strength=0; this.updateScreen(); break; } case 5:{ this.mc.displayGuiScreen((GuiScreen)null); this.mc.setIngameFocus(); } } } public void onGuiClosed(){ tile.strength = this.strength; GavinCraft.channel.sendToServer(new PacketAdvancedCatapult(strength, tile.xCoord, tile.yCoord, tile.zCoord)); System.out.println(tile.getWorldObj().isRemote); } }
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.