Posted August 28, 20196 yr I have a tileEntity with 1 inventory slot with a max stacksize of 1. I'm trying to make it so that, when rightclicked, the item in your hand will be inserted into the slot or when already full, the item in the slot will be extracted into your inventory. I've got it working for the most part, but when I test it sometimes it works and sometimes not. I tried debugging it and it turns out that onBlockActivated sometimes fires 2 times, so it inserts and then extracts immediately. How do I fix this / stop this from happening? Spoiler @Override public boolean onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { if (worldIn.isRemote) return true; if (!(worldIn.getTileEntity(pos) instanceof QuernTileEntity)) return false; LazyOptional<IItemHandler> handler = worldIn.getTileEntity(pos).getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, hit.getFace()); handler.ifPresent(inv -> { ItemStack heldItem = player.getHeldItem(handIn).copy(); heldItem.setCount(1); if (inv.insertItem(0, heldItem, true).isEmpty() && !heldItem.isEmpty()) { player.getHeldItem(handIn).shrink(1); inv.insertItem(0, heldItem, false); } else if (!inv.extractItem(0, 1, true).isEmpty()) { ItemStack extractedItem = inv.extractItem(0, 1, true); ItemHandlerHelper.giveItemToPlayer(player, extractedItem); inv.extractItem(0, 1, false); } }); return true; }
August 28, 20196 yr Author Thank you. Fixed it by checking if the hand used is the active hand and now it works.
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.