From 9ddf0ae639fecb723b4c76d8bb70733d6d6bb02d Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 22 May 2016 16:33:55 +0200 Subject: [PATCH] Add capability handlers --- .../inventory/BasicItemHandler.java | 8 +++++ .../inventory/SoldererItemHandler.java | 34 +++++++++++++++++++ .../jei/GridRecipeTransferHandler.java | 3 +- .../refinedstorage/tile/TileConstructor.java | 17 ++++++++++ .../refinedstorage/tile/TileDestructor.java | 17 ++++++++++ .../refinedstorage/tile/TileDiskDrive.java | 17 ++++++++++ .../refinedstorage/tile/TileExporter.java | 17 ++++++++++ .../refinedstorage/tile/TileImporter.java | 17 ++++++++++ .../refinedstorage/tile/TileInterface.java | 1 + .../tile/TileWirelessTransmitter.java | 17 ++++++++++ .../TileProcessingPatternEncoder.java | 17 ++++++++++ .../tile/solderer/TileSolderer.java | 18 ++++++++++ 12 files changed, 182 insertions(+), 1 deletion(-) create mode 100755 src/main/java/refinedstorage/inventory/SoldererItemHandler.java diff --git a/src/main/java/refinedstorage/inventory/BasicItemHandler.java b/src/main/java/refinedstorage/inventory/BasicItemHandler.java index 8a86ceb23..f33ee25eb 100755 --- a/src/main/java/refinedstorage/inventory/BasicItemHandler.java +++ b/src/main/java/refinedstorage/inventory/BasicItemHandler.java @@ -15,6 +15,14 @@ public class BasicItemHandler extends ItemStackHandler { this.validators = validators; } + public TileEntity getTile() { + return tile; + } + + public IItemValidator[] getValidators() { + return validators; + } + public BasicItemHandler(int size, IItemValidator... validators) { this(size, null, validators); } diff --git a/src/main/java/refinedstorage/inventory/SoldererItemHandler.java b/src/main/java/refinedstorage/inventory/SoldererItemHandler.java new file mode 100755 index 000000000..e273e18aa --- /dev/null +++ b/src/main/java/refinedstorage/inventory/SoldererItemHandler.java @@ -0,0 +1,34 @@ +package refinedstorage.inventory; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; + +public class SoldererItemHandler extends BasicItemHandler { + private EnumFacing side; + + public SoldererItemHandler(BasicItemHandler parent, EnumFacing side) { + super(parent.getSlots(), parent.getTile(), parent.getValidators()); + + this.side = side; + } + + @Override + public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + if (((side == EnumFacing.NORTH || side == EnumFacing.EAST) && slot == 0) || + ((side == EnumFacing.SOUTH || side == EnumFacing.WEST) && slot == 2) || + (side == EnumFacing.UP && slot == 1)) { + return super.insertItem(slot, stack, simulate); + } + + return stack; + } + + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + if (side == EnumFacing.DOWN && slot == 3) { + return super.extractItem(slot, amount, simulate); + } + + return null; + } +} diff --git a/src/main/java/refinedstorage/jei/GridRecipeTransferHandler.java b/src/main/java/refinedstorage/jei/GridRecipeTransferHandler.java index a8480c971..84d96db74 100755 --- a/src/main/java/refinedstorage/jei/GridRecipeTransferHandler.java +++ b/src/main/java/refinedstorage/jei/GridRecipeTransferHandler.java @@ -48,8 +48,9 @@ public class GridRecipeTransferHandler implements IRecipeTransferHandler { for (int i = 0; i < possibleItems.size(); ++i) { if (i >= 5) { - break; // max 5 possible items + break; // Max 5 possible items to avoid reaching max network packet size } + NBTTagCompound tag = new NBTTagCompound(); possibleItems.get(i).writeToNBT(tag); tags.appendTag(tag); diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index fad760975..d323457b0 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -7,8 +7,11 @@ import net.minecraft.inventory.Container; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; import net.minecraft.util.SoundCategory; import net.minecraft.util.math.BlockPos; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; @@ -136,4 +139,18 @@ public class TileConstructor extends TileMachine implements ICompareConfig { public IItemHandler getDroppedItems() { return upgrades; } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return (T) upgrades; + } + + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } } diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index 803bff8c7..7359e39ae 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -8,7 +8,10 @@ import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; @@ -151,4 +154,18 @@ public class TileDestructor extends TileMachine implements ICompareConfig, IMode public IItemHandler getDroppedItems() { return upgrades; } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return (T) upgrades; + } + + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } } diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index 4a3ac76f2..0ab007550 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -4,6 +4,9 @@ import io.netty.buffer.ByteBuf; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; @@ -245,4 +248,18 @@ public class TileDiskDrive extends TileMachine implements IStorageProvider, ISto public IItemHandler getDroppedItems() { return disks; } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return (T) disks; + } + + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } } diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index ce9b016f0..a677c5fbc 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -4,6 +4,9 @@ import io.netty.buffer.ByteBuf; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorageItems; @@ -134,4 +137,18 @@ public class TileExporter extends TileMachine implements ICompareConfig { public IItemHandler getDroppedItems() { return upgrades; } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return (T) upgrades; + } + + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } } diff --git a/src/main/java/refinedstorage/tile/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index 83cfa4634..21c0d05ad 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -4,6 +4,9 @@ import io.netty.buffer.ByteBuf; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; @@ -144,4 +147,18 @@ public class TileImporter extends TileMachine implements ICompareConfig, IModeCo public IItemHandler getDroppedItems() { return upgrades; } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return (T) upgrades; + } + + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } } diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index ff99cfe9e..01388832a 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -14,6 +14,7 @@ import refinedstorage.inventory.BasicItemValidator; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; +// @TODO: Write a capability handler for this public class TileInterface extends TileMachine implements ICompareConfig { public static final String NBT_COMPARE = "Compare"; diff --git a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java index 6cf68a0f8..a4ddf39ea 100755 --- a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java @@ -2,6 +2,9 @@ package refinedstorage.tile; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; @@ -55,4 +58,18 @@ public class TileWirelessTransmitter extends TileMachine { public IItemHandler getDroppedItems() { return upgrades; } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return (T) upgrades; + } + + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } } diff --git a/src/main/java/refinedstorage/tile/autocrafting/TileProcessingPatternEncoder.java b/src/main/java/refinedstorage/tile/autocrafting/TileProcessingPatternEncoder.java index 2c97cc2a0..72e1eb74a 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/TileProcessingPatternEncoder.java +++ b/src/main/java/refinedstorage/tile/autocrafting/TileProcessingPatternEncoder.java @@ -2,6 +2,9 @@ package refinedstorage.tile.autocrafting; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; @@ -81,4 +84,18 @@ public class TileProcessingPatternEncoder extends TileBase { public IItemHandler getDroppedItems() { return patterns; } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return (T) patterns; + } + + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } } diff --git a/src/main/java/refinedstorage/tile/solderer/TileSolderer.java b/src/main/java/refinedstorage/tile/solderer/TileSolderer.java index 1258cb2b9..df2eb94f6 100755 --- a/src/main/java/refinedstorage/tile/solderer/TileSolderer.java +++ b/src/main/java/refinedstorage/tile/solderer/TileSolderer.java @@ -3,13 +3,17 @@ package refinedstorage.tile.solderer; import io.netty.buffer.ByteBuf; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; import refinedstorage.container.ContainerSolderer; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.BasicItemValidator; +import refinedstorage.inventory.SoldererItemHandler; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.TileMachine; @@ -187,4 +191,18 @@ public class TileSolderer extends TileMachine { return dummy; } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return (T) new SoldererItemHandler(items, facing); + } + + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } }