Posted May 23, 20196 yr Hello, I am currently making an item that has the energy capability and is supposed to show it's current energy level in a durability bar, however this durability bar is only updated when the item is charged fully or when I press the right mouse button. I suspect that I need to send a packet to synchronize the energy level with the client, but I am not sure how I could convert the itemstack to bytes. I also don't understand why it even updates the durability bar at all if it needs a packet (maybe the onrightclick method updates the itemstack ?). Here is the code for the durability bar: Spoiler @Override public boolean showDurabilityBar(ItemStack itemStack) { return true; } @Override public double getDurabilityForDisplay(ItemStack stack) { if(stack.hasCapability(CapabilityEnergy.ENERGY,null)) { EnergyStorage stackenergy = (EnergyStorage) stack.getCapability(CapabilityEnergy.ENERGY,null); double e = stackenergy.getEnergyStored(); return 1.0-((double)(e / (double)capacity)); } return 1.0; } This is the code for the onRightClick-Method: Spoiler @Override public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) { ItemStack stack = playerIn.getHeldItem(handIn); NBTTagCompound nbt; if(playerIn.getHeldItem(handIn) == null) return ActionResult.newResult(EnumActionResult.FAIL, null); if(stack.hasTagCompound()) { nbt = stack.getTagCompound(); if(stack.getTagCompound().hasKey("fill") && nbt.getBoolean("fill")) { nbt.setBoolean("fill",false); } else { nbt.setBoolean("fill",true); } } else { nbt = new NBTTagCompound(); nbt.setBoolean("fill",true); } stack.setTagCompound(nbt); return ActionResult.newResult(EnumActionResult.SUCCESS, stack); } Thank you for your help!
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.