Skip to content

Commit d488197

Browse files
committed
Add support for Forge's new IItemHandler to inventory tiles
1 parent 01d1d17 commit d488197

3 files changed

Lines changed: 67 additions & 22 deletions

File tree

build.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
mod_version=0.1.1
22
minecraft_version=1.8.9
3-
forge_version=11.15.0.1661
4-
cyclopscore_version=0.4.3-203
3+
forge_version=11.15.0.1716
4+
cyclopscore_version=0.4.3-217
55
release_type=release

src/main/java/org/cyclops/structuredcrafting/Reference.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public final class Reference {
1919
// MOD ID's
2020
public static final String MOD_FORGE = "Forge";
2121
public static final String MOD_FORGE_VERSION = "@FORGE_VERSION@";
22-
public static final String MOD_FORGE_VERSION_MIN = "11.14.3.1487";
22+
public static final String MOD_FORGE_VERSION_MIN = "11.15.0.1716";
2323
public static final String MOD_CYCLOPSCORE = "cyclopscore";
2424
public static final String MOD_CYCLOPSCORE_MINVERSION = "@CYCLOPSCORE_VERSION@";
2525
public static final String MOD_CYCLOPSCORE_VERSION_MIN = "0.1.1";

src/main/java/org/cyclops/structuredcrafting/craft/provider/InventoryItemStackProvider.java

Lines changed: 64 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@
22

33
import net.minecraft.inventory.IInventory;
44
import net.minecraft.item.ItemStack;
5+
import net.minecraft.tileentity.TileEntity;
56
import net.minecraft.util.BlockPos;
67
import net.minecraft.util.EnumFacing;
78
import net.minecraft.world.World;
9+
import net.minecraftforge.common.capabilities.Capability;
10+
import net.minecraftforge.items.CapabilityItemHandler;
11+
import net.minecraftforge.items.IItemHandler;
812
import org.apache.commons.lang3.tuple.Pair;
913
import org.cyclops.cyclopscore.helper.InventoryHelpers;
1014
import org.cyclops.cyclopscore.helper.TileHelpers;
@@ -25,54 +29,95 @@ protected Pair<Integer, ItemStack> getFirstItem(IInventory inventory, EnumFacing
2529
return null;
2630
}
2731

32+
protected Pair<Integer, ItemStack> getFirstItem(IItemHandler itemHandler, EnumFacing side) {
33+
for(int slot = 0; slot < itemHandler.getSlots(); slot++) {
34+
ItemStack itemStack = itemHandler.getStackInSlot(slot);
35+
if(itemStack != null) {
36+
return Pair.of(slot, itemStack);
37+
}
38+
}
39+
return null;
40+
}
41+
2842
@Override
2943
public boolean isValidForResults(World world, BlockPos pos, EnumFacing side) {
44+
IItemHandler itemHandler = TileHelpers.getCapability(world, pos, side, CapabilityItemHandler.ITEM_HANDLER_CAPABILITY);
3045
IInventory inventory = TileHelpers.getSafeTile(world, pos, IInventory.class);
31-
return inventory != null;
46+
return itemHandler != null || inventory != null;
3247
}
3348

3449
@Override
3550
public boolean hasItemStack(World world, BlockPos pos, EnumFacing side) {
3651
IInventory inventory = TileHelpers.getSafeTile(world, pos, IInventory.class);
37-
return inventory != null && getFirstItem(inventory, side) != null;
52+
IItemHandler itemHandler = TileHelpers.getCapability(world, pos, side, CapabilityItemHandler.ITEM_HANDLER_CAPABILITY);
53+
return (itemHandler != null && getFirstItem(itemHandler, side) != null)
54+
|| (inventory != null && getFirstItem(inventory, side) != null);
3855
}
3956

4057
@Override
4158
public ItemStack getItemStack(World world, BlockPos pos, EnumFacing side) {
59+
IItemHandler itemHandler = TileHelpers.getCapability(world, pos, side, CapabilityItemHandler.ITEM_HANDLER_CAPABILITY);
4260
IInventory inventory = TileHelpers.getSafeTile(world, pos, IInventory.class);
43-
return getFirstItem(inventory, side).getRight();
61+
return itemHandler != null ? getFirstItem(itemHandler, side).getRight() : getFirstItem(inventory, side).getRight();
4462
}
4563

4664
@Override
4765
public void reduceItemStack(World world, BlockPos pos, EnumFacing side) {
48-
IInventory inventory = TileHelpers.getSafeTile(world, pos, IInventory.class);
49-
Pair<Integer, ItemStack> result = getFirstItem(inventory, side);
50-
ItemStack newItemStack = result.getRight().copy();
51-
newItemStack.stackSize--;
52-
if(newItemStack.stackSize <= 0) {
53-
newItemStack = null;
66+
IItemHandler itemHandler = TileHelpers.getCapability(world, pos, side, CapabilityItemHandler.ITEM_HANDLER_CAPABILITY);
67+
if(itemHandler != null) {
68+
for(int slot = 0; slot < itemHandler.getSlots(); slot++) {
69+
if(itemHandler.extractItem(slot, 1, false) != null) {
70+
break;
71+
}
72+
}
73+
} else {
74+
IInventory inventory = TileHelpers.getSafeTile(world, pos, IInventory.class);
75+
Pair<Integer, ItemStack> result = getFirstItem(inventory, side);
76+
ItemStack newItemStack = result.getRight().copy();
77+
newItemStack.stackSize--;
78+
if (newItemStack.stackSize <= 0) {
79+
newItemStack = null;
80+
}
81+
inventory.setInventorySlotContents(result.getLeft(), newItemStack);
5482
}
55-
inventory.setInventorySlotContents(result.getLeft(), newItemStack);
5683
}
5784

5885
@Override
5986
public boolean addItemStack(World world, BlockPos pos, EnumFacing side, ItemStack itemStack) {
60-
IInventory inventory = TileHelpers.getSafeTile(world, pos, IInventory.class);
61-
for(int slot = 0; slot < inventory.getSizeInventory(); slot++) {
62-
if(InventoryHelpers.addToSlot(inventory, slot, itemStack)) {
63-
return true;
87+
IItemHandler itemHandler = TileHelpers.getCapability(world, pos, side, CapabilityItemHandler.ITEM_HANDLER_CAPABILITY);
88+
if(itemHandler != null) {
89+
for(int slot = 0; slot < itemHandler.getSlots(); slot++) {
90+
if(itemHandler.insertItem(slot, itemStack, false) == null) {
91+
return true;
92+
}
93+
}
94+
} else {
95+
IInventory inventory = TileHelpers.getSafeTile(world, pos, IInventory.class);
96+
for (int slot = 0; slot < inventory.getSizeInventory(); slot++) {
97+
if (InventoryHelpers.addToSlot(inventory, slot, itemStack)) {
98+
return true;
99+
}
64100
}
65101
}
66102
return false;
67103
}
68104

69105
@Override
70106
public boolean setItemStack(World world, BlockPos pos, EnumFacing side, ItemStack itemStack) {
71-
IInventory inventory = TileHelpers.getSafeTile(world, pos, IInventory.class);
72-
Pair<Integer, ItemStack> result = getFirstItem(inventory, side);
73-
if(result != null) {
74-
inventory.setInventorySlotContents(result.getLeft(), itemStack);
75-
return true;
107+
IItemHandler itemHandler = TileHelpers.getCapability(world, pos, side, CapabilityItemHandler.ITEM_HANDLER_CAPABILITY);
108+
if(itemHandler != null) {
109+
for(int slot = 0; slot < itemHandler.getSlots(); slot++) {
110+
if(itemHandler.insertItem(slot, itemStack, false) == null) {
111+
return true;
112+
}
113+
}
114+
} else {
115+
IInventory inventory = TileHelpers.getSafeTile(world, pos, IInventory.class);
116+
Pair<Integer, ItemStack> result = getFirstItem(inventory, side);
117+
if (result != null) {
118+
inventory.setInventorySlotContents(result.getLeft(), itemStack);
119+
return true;
120+
}
76121
}
77122
return false;
78123
}

0 commit comments

Comments
 (0)