Posted June 27, 20196 yr I've been recently working on a custom crafting table that uses energy, and is a tile entity. I'm trying to add custom recipes, but i'm not sure how. I'm stuck on how to detect if there are the correct items in the correct slots. I was also following along with MCJTY's modding tutorial for 1.12.2. Link to the video: Here are my classes: Tile Entity class: public class TileTestCraftingBench extends TileEntity implements ITickable { private static final int INPUT_SLOTS = 9; private static final int OUTPUT_SLOTS = 1; static final int SIZE = INPUT_SLOTS + OUTPUT_SLOTS; public static final int MAX_PROGRESS = ConfigHandler.MAX_CUTTER_PROGRESS; private int progress = 0; @Override public void update() { if (!world.isRemote) { } } public int getProgress() { return progress; } public void setProgress(int progress) { this.progress = progress; } private ItemStackHandler inputHandler = new ItemStackHandler(INPUT_SLOTS) { @Override protected void onContentsChanged(int slot) { // We need to tell the tile entity that something has changed so // that the chest contents is persisted TileBlackHoleCompactor.this.markDirty(); } }; private ItemStackHandler outputHandler = new ItemStackHandler(OUTPUT_SLOTS) { @Override protected void onContentsChanged(int slot) { // We need to tell the tile entity that something has changed so // that the chest contents is persisted TileBlackHoleCompactor.this.markDirty(); } }; private CombinedInvWrapper combinedHandler = new CombinedInvWrapper(inputHandler, outputHandler); @Override public void readFromNBT(NBTTagCompound compound) { super.readFromNBT(compound); if (compound.hasKey("itemsIn")) { inputHandler.deserializeNBT((NBTTagCompound) compound.getTag("itemsIn")); } if (compound.hasKey("itemsOut")) { outputHandler.deserializeNBT((NBTTagCompound) compound.getTag("itemsOut")); } progress = compound.getInteger("progress"); } @Override public NBTTagCompound writeToNBT(NBTTagCompound compound) { super.writeToNBT(compound); compound.setTag("itemsIn", inputHandler.serializeNBT()); compound.setTag("itemsOut", outputHandler.serializeNBT()); compound.setInteger("progress", progress); return compound; } public boolean canInteractWith(EntityPlayer playerIn) { // If we are too far away from this tile entity you cannot use it return !isInvalid() && playerIn.getDistanceSq(pos.add(0.5D, 0.5D, 0.5D)) <= 64D; } @Override public boolean hasCapability(Capability<?> capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { return true; } return super.hasCapability(capability, facing); } @Override public <T> T getCapability(Capability<T> capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { if (facing == null) { return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(combinedHandler); } else if (facing == EnumFacing.UP) { return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(inputHandler); } else { return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(outputHandler); } } return super.getCapability(capability, facing); } } Container Class: public class ContainerTestBench extends Container { private TileTestCraftingBench te; public ContainerTestBench(IInventory playerInventory, TileTestCraftingBench te) { this.te = te; addOwnSlots(); addPlayerSlots(playerInventory); } private void addPlayerSlots(IInventory playerInventory) { // Slots for the main inventory for (int row = 0; row < 3; ++row) { for (int col = 0; col < 9; ++col) { int x = 10 + col * 18; int y = row * 18 + 70; this.addSlotToContainer(new Slot(playerInventory, col + row * 9 + 10, x, y)); } } // Slots for the hotbar for (int row = 0; row < 9; ++row) { int x = 10 + row * 18; int y = 58 + 70; this.addSlotToContainer(new Slot(playerInventory, row, x, y)); } } private void addOwnSlots() { IItemHandler itemHandler = this.te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); int x = 64; int y = 9; int slotIndex = 0; addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex++, x, y)); x +=18; addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex++, x, y)); x +=18; addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex++, x, y)); x = 64; y = 27; addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex++, x, y)); x +=18; addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex++, x, y)); x +=18; addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex++, x, y)); x = 64; y = 45; addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex++, x, y)); x +=18; addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex++, x, y)); x +=18; addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex++, x, y)); x = 136; y = 27; addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex++, x, y)); } @Override public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) { ItemStack itemstack = ItemStack.EMPTY; Slot slot = this.inventorySlots.get(index); if (slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); if (index < TileTestCraftingBench.SIZE) { if (!this.mergeItemStack(itemstack1, TileTestCraftingBench.SIZE, this.inventorySlots.size(), true)) { return ItemStack.EMPTY; } } else if (!this.mergeItemStack(itemstack1, 0, TileTestCraftingBench.SIZE, false)) { return ItemStack.EMPTY; } if (itemstack1.isEmpty()) { slot.putStack(ItemStack.EMPTY); } else { slot.onSlotChanged(); } } return itemstack; } @Override public boolean canInteractWith(EntityPlayer playerIn) { return te.canInteractWith(playerIn); } } Any help would be greatly appreciated! Edited July 9, 20196 yr by TesterTesting135 Additional info
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.