Posted January 2, 201411 yr I've got an item that writes to NBT while held on each Item update tick, but I only want it to update if no gui screens are open. player.openContainer is never null; in normal gameplay ContainerPlayer is constantly open, which also happens to be open when the player's normal inventory is open. FMLClientHandler.instance().getClient().inGameHasFocus would seem like a good choice, and it works when only running the regular client, but this crashes if run on the server (obviously) and I can't just run the Item update on the client side. So it would seem this option is not SMP compatible. Am I just failing to see how to use these to solve my problem, or are there any other options that are SMP compatible? http://i.imgur.com/NdrFdld.png[/img]
January 2, 201411 yr Check for gui on client side, then send a packet with enough data to perform the item NBT update on server side. You'll have to build a IPacketHandler for this.
January 3, 201411 yr Author That's what my plan is, I was just hoping that I may have overlooked something that would obviate the need for an extra packet. It just seems like something that should be easily detectable with an instance of the player, even the server side version, but I have combed through the available methods and fields multiple times and come up with nada. Thanks, though. http://i.imgur.com/NdrFdld.png[/img]
January 3, 201411 yr Just switch it. Just make the oposite is happen when a gui is open^^" And ask Draco's how he did that (and i know he did that) his runes give special abilities and if you open a gui they disable the effects. I hope it helps
January 4, 201411 yr Author Thanks for the idea, but I just ended up using a packet: // this is in the Item's onUpdate method: if (isHeld) { if (entity instanceof EntityPlayer) { if (world.isRemote && Minecraft.getMinecraft().currentScreen == null) { PacketDispatcher.sendPacketToServer(new BombTickPacket().makePacket()); } } else { tickBomb(stack, world, entity); } } else { stack.getTagCompound().setInteger("time", 0); } As you can see, when held by a player, it does nothing if on the server side; instead, it checks for an open screen on the client side and if there isn't one, sends a packet telling the server to 'tick' the bomb, which is a method that has the same stuff that used to be in the onUpdate method. It's a simple solution to a simple problem; I was just wondering if there wasn't another way to do it is all. http://i.imgur.com/NdrFdld.png[/img]
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.