
dark2222
Forge Modder-
Posts
111 -
Joined
-
Last visited
Converted
-
Gender
Undisclosed
dark2222's Achievements

Creeper Killer (4/8)
4
Reputation
-
[1.8] [Solved] NullPointerException network problem
dark2222 replied to dark2222's topic in Modder Support
The NullPointerException where only happening for the second client connected to the server. -
[1.8] [Solved] NullPointerException network problem
dark2222 replied to dark2222's topic in Modder Support
thanks it works now but would that not mean that the first player also should return NullPointerException? also where can I find some doc on the IThreadListener? can't hurt to read up on it -
I've made a test package to learn IMessage and IMessage handler and it works fine if i play singleplayer and multiplayer but when I try to connect with a second player LAN or server the second player will get a NullPointerException when i try to find the player Here's the package and handler public class TestPacket implements IMessage{ private int test; public TestPacket() {} public TestPacket(int test) { this.test = test; } @Override public void toBytes(ByteBuf buf) { buf.writeInt(test); } @Override public void fromBytes(ByteBuf buf) { test = buf.readInt(); } public static class Handler implements IMessageHandler<TestPacket,IMessage>{ @Override public IMessage onMessage(TestPacket message, MessageContext ctx) { LogHelper.info(message.test); if(ctx.side.isClient()){ EntityPlayer player = (EntityPlayer) Minecraft.getMinecraft().theWorld.getEntityByID(message.test); player.addChatComponentMessage(new ChatComponentText("Awesome!")); } return null; } } } how i make the network channel @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { ConfigurationHandler.init(event.getSuggestedConfigurationFile()); FMLCommonHandler.instance().bus().register(new ConfigurationHandler()); MinecraftForge.EVENT_BUS.register(new RegisterEvent()); Network = NetworkRegistry.INSTANCE.newSimpleChannel(Reference.NETWORKCHANNEL); Network.registerMessage(TestPacket.Handler.class,TestPacket.class, 0,Side.CLIENT); } The package gets send on PlayerLoggedInEvent @SubscribeEvent public void onEntityJoinWorld(PlayerEvent.PlayerLoggedInEvent event) { BloodCore.get(event.player).SyncWithServer(); } What it calls in my IEEP public void SyncWithServer(){ VampireMain.Network.sendTo(new TestPacket(player.getEntityId()),(EntityPlayerMP) player); } Here's the Log from the second client https://gist.github.com/anonymous/674535f7e4ca01055389
-
oh.. i thought that the commonProxy got run server and client side, just trying to keep the code clean. Never mind i moved everything from the preinit method back but the client still have the problem of return NullPointerException client log after login to server https://gist.github.com/anonymous/6a67c1f2464f5eeb9e33 method called by package @Override public void syncWithServerHandler(int currentBlood,int level,int type) { EntityPlayer player = Minecraft.getMinecraft().thePlayer; BloodCore bloodCore = BloodCore.get(player); bloodCore.setCurrentBlood(currentBlood); bloodCore.setVampireLevel(level); bloodCore.setVampireType(type); } current preInit @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { network = NetworkRegistry.INSTANCE.newSimpleChannel(Referance.MODID); network.registerMessage(syncWithServer.Handler.class, syncWithServer.class, 0, Side.CLIENT); VampireRegister.registerVampire(new BloodVampire()); ConfigurationHandler.init(ConfigFile); FMLCommonHandler.instance().bus().register(new ConfigurationHandler()); } the event that starts it all @SubscribeEvent public void onEntityJoinWorld(EntityJoinWorldEvent event){ if (!event.entity.worldObj.isRemote && event.entity instanceof EntityPlayer) { BloodCore.get((EntityPlayer) event.entity).syncWithServer(); } } the syncWithServer method public void syncWithServer() { if(!player.worldObj.isRemote) vampiric.network.sendTo(new syncWithServer(this.CurrentBlood,this.VampireLevel,this.VampireType,this.player.getDisplayName().getUnformattedText()),(EntityPlayerMP) player); } can it be a 1.8 forge bug?
-
i register the IEEP in EntityConstruction event @SubscribeEvent public void handleConstruction(EntityEvent.EntityConstructing event) { if (event.entity instanceof EntityPlayer && BloodCore.get((EntityPlayer) event.entity) == null) { BloodCore.register((EntityPlayer) event.entity); } } and it calls this method public static void register(EntityPlayer player) { player.registerExtendedProperties(BloodCore.PROP_NAME, new BloodCore(player)); } and my eventHandler are registered by my commonProxy public void preInit(){ ConfigurationHandler.init(ConfigFile); FMLCommonHandler.instance().bus().register(new ConfigurationHandler()); } @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { network = NetworkRegistry.INSTANCE.newSimpleChannel(Referance.MODID); network.registerMessage(syncWithServer.Handler.class, syncWithServer.class,0, Side.CLIENT); proxy.preInit(); proxy.registerVampires(); }
-
ok... but why does it return null (nullExeption) when i then try to use it with my IExtendedEntity... then? this is what the onMessage calls @Override public void syncWithServerHandler(int currentBlood,int level,int type) { EntityPlayer player = Minecraft.getMinecraft().thePlayer; BloodCore bloodCore = BloodCore.get(player); <----- NullPointerException here when trying to connect to server bloodCore.setCurrentBlood(currentBlood); bloodCore.setVampireLevel(level); bloodCore.setVampireType(type); } the Bloodcore.get method looks like this public static BloodCore get(EntityPlayer player) {return (BloodCore) player.getExtendedProperties(PROP_NAME);}
-
ah, ok didn't think i should register it there but there are sometimes java just confuses me --EDIT Minecraft.getMinecraft.thePlayer still returns null --EDIT ok if i make it print to console it does not return null then it return EntityPlayerSP witch is a bit problematic for my get method in a IExtendedEntity... only accepts EntityPlayer and if i try to convert it to a EntityPlayer EntityPlayer player = (EntityPlayer) Minecraft.getMinecraft.thePlayer; idea says (EntityPlayer) are not in use/necessary.
-
i'm trying to sync some numbers from server to client but i need to now the player before i can set the numbers public static class Handler implements IMessageHandler<syncWithServer,IMessage> { @Override public IMessage onMessage(syncWithServer message, MessageContext ctx) { EntityPlayer player = ctx.getServerHandler().playerEntity.worldObj.getPlayerEntityByName(message.player); BloodCore bloodCore = BloodCore.get(player); bloodCore.setCurrentBlood(message.currentBlood); bloodCore.setVampireLevel(message.level); bloodCore.setVampireType(message.type); return null; } } with this as the code i get this error message https://gist.github.com/anonymous/e497758f2a16710a720d when this happens the client does not crash it just say a fatal error has occured, this connection is terminated. I've also try'ed to get the player client side (the handler is client sided) but when i do that the server crashes on startup this is how i register the packets and made the network channel (yes it is in preinit) network = NetworkRegistry.INSTANCE.newSimpleChannel(Referance.MODID); network.registerMessage(syncWithServer.Handler.class, syncWithServer.class,0, Side.CLIENT); my packet class itself public class syncWithServer implements IMessage{ int currentBlood,level,type; String player; public syncWithServer() {} public syncWithServer(int currentBlood,int level,int type, String player) { this.currentBlood = currentBlood; this.level = level; this.type = type; this.player = player; } @Override public void toBytes(ByteBuf buf) { buf.writeInt(currentBlood); buf.writeInt(level); buf.writeInt(type); ByteBufUtils.writeUTF8String(buf,player); } @Override public void fromBytes(ByteBuf buf) { this.currentBlood = buf.readInt(); this.level = buf.readInt(); this.type = buf.readInt(); } public static class Handler implements IMessageHandler<syncWithServer,IMessage> { @Override public IMessage onMessage(syncWithServer message, MessageContext ctx) { EntityPlayer player = ctx.getServerHandler().playerEntity.worldObj.getPlayerEntityByName(message.player); BloodCore bloodCore = BloodCore.get(player); bloodCore.setCurrentBlood(message.currentBlood); bloodCore.setVampireLevel(message.level); bloodCore.setVampireType(message.type); return null; } } }
-
i try'ed that and only one of the 3 apis i wan't to use worked what i want to use is ae2, buildcraft, thaumcraft 4 the weird part is that for those apis that don't work (the way the tutorial says how to do) i can't see the classes but the folders are there http://puu.sh/atLSI/397da42ea8.PNG