22
33import net .minecraft .inventory .IInventory ;
44import net .minecraft .item .ItemStack ;
5+ import net .minecraft .tileentity .TileEntity ;
56import net .minecraft .util .BlockPos ;
67import net .minecraft .util .EnumFacing ;
78import net .minecraft .world .World ;
9+ import net .minecraftforge .common .capabilities .Capability ;
10+ import net .minecraftforge .items .CapabilityItemHandler ;
11+ import net .minecraftforge .items .IItemHandler ;
812import org .apache .commons .lang3 .tuple .Pair ;
913import org .cyclops .cyclopscore .helper .InventoryHelpers ;
1014import 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