Fixes #629
This commit is contained in:
		| @@ -47,7 +47,7 @@ public class NetworkNodeGraph implements INetworkNodeGraph { | |||||||
|             if (tile != null && !tile.isInvalid()) { |             if (tile != null && !tile.isInvalid()) { | ||||||
|                 if (tile instanceof TileController) { |                 if (tile instanceof TileController) { | ||||||
|                     removeOtherController(world, pos); |                     removeOtherController(world, pos); | ||||||
|                 } else { |                 } else if (tile.hasCapability(NETWORK_NODE_PROXY_CAPABILITY, side)) { | ||||||
|                     INetworkNodeProxy otherNodeProxy = NETWORK_NODE_PROXY_CAPABILITY.cast(tile.getCapability(NETWORK_NODE_PROXY_CAPABILITY, side)); |                     INetworkNodeProxy otherNodeProxy = NETWORK_NODE_PROXY_CAPABILITY.cast(tile.getCapability(NETWORK_NODE_PROXY_CAPABILITY, side)); | ||||||
|                     INetworkNode otherNode = otherNodeProxy.getNode(); |                     INetworkNode otherNode = otherNodeProxy.getNode(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -30,9 +30,6 @@ public abstract class NetworkNode implements INetworkNode, INetworkNeighborhoodA | |||||||
|  |  | ||||||
|     private boolean active; |     private boolean active; | ||||||
|  |  | ||||||
|     public NetworkNode() { |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public NetworkNode(INetworkNodeHolder holder) { |     public NetworkNode(INetworkNodeHolder holder) { | ||||||
|         this.holder = holder; |         this.holder = holder; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -1,10 +1,15 @@ | |||||||
| package com.raoulvdberge.refinedstorage.apiimpl.network.node; | package com.raoulvdberge.refinedstorage.apiimpl.network.node; | ||||||
|  |  | ||||||
| import com.raoulvdberge.refinedstorage.RS; | import com.raoulvdberge.refinedstorage.RS; | ||||||
|  | import com.raoulvdberge.refinedstorage.tile.INetworkNodeHolder; | ||||||
|  |  | ||||||
| public class NetworkNodeCable extends NetworkNode { | public class NetworkNodeCable extends NetworkNode { | ||||||
|     public static final String ID = "cable"; |     public static final String ID = "cable"; | ||||||
|  |  | ||||||
|  |     public NetworkNodeCable(INetworkNodeHolder holder) { | ||||||
|  |         super(holder); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public int getEnergyUsage() { |     public int getEnergyUsage() { | ||||||
|         return RS.INSTANCE.config.cableUsage; |         return RS.INSTANCE.config.cableUsage; | ||||||
|   | |||||||
| @@ -1,10 +1,15 @@ | |||||||
| package com.raoulvdberge.refinedstorage.apiimpl.network.node; | package com.raoulvdberge.refinedstorage.apiimpl.network.node; | ||||||
|  |  | ||||||
| import com.raoulvdberge.refinedstorage.RS; | import com.raoulvdberge.refinedstorage.RS; | ||||||
|  | import com.raoulvdberge.refinedstorage.tile.INetworkNodeHolder; | ||||||
|  |  | ||||||
| public class NetworkNodeNetworkReceiver extends NetworkNode { | public class NetworkNodeNetworkReceiver extends NetworkNode { | ||||||
|     public static final String ID = "network_receiver"; |     public static final String ID = "network_receiver"; | ||||||
|  |  | ||||||
|  |     public NetworkNodeNetworkReceiver(INetworkNodeHolder holder) { | ||||||
|  |         super(holder); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public int getEnergyUsage() { |     public int getEnergyUsage() { | ||||||
|         return RS.INSTANCE.config.networkReceiverUsage; |         return RS.INSTANCE.config.networkReceiverUsage; | ||||||
|   | |||||||
| @@ -24,7 +24,6 @@ import net.minecraft.nbt.NBTTagCompound; | |||||||
| import net.minecraft.tileentity.TileEntity; | import net.minecraft.tileentity.TileEntity; | ||||||
| import net.minecraftforge.fluids.FluidStack; | import net.minecraftforge.fluids.FluidStack; | ||||||
| import net.minecraftforge.fluids.capability.IFluidHandler; | import net.minecraftforge.fluids.capability.IFluidHandler; | ||||||
| import net.minecraftforge.fluids.capability.IFluidTankProperties; |  | ||||||
| import net.minecraftforge.items.IItemHandler; | import net.minecraftforge.items.IItemHandler; | ||||||
| import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; | import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; | ||||||
|  |  | ||||||
| @@ -188,29 +187,27 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP | |||||||
|         itemStorages.clear(); |         itemStorages.clear(); | ||||||
|         fluidStorages.clear(); |         fluidStorages.clear(); | ||||||
|  |  | ||||||
|         TileEntity facing = holder.world().getTileEntity(holder.pos().offset(holder.getDirection())); |         TileEntity facing = getFacingTile(); | ||||||
|  |  | ||||||
|         if (type == IType.ITEMS) { |         if (type == IType.ITEMS) { | ||||||
|             if (facing instanceof IDrawerGroup) { |             if (facing instanceof IDrawerGroup) { | ||||||
|                 itemStorages.add(new StorageItemDrawerGroup(this, (IDrawerGroup) facing)); |                 itemStorages.add(new StorageItemDrawerGroup(this, () -> (IDrawerGroup) getFacingTile())); | ||||||
|             } else if (facing instanceof IDrawer) { |             } else if (facing instanceof IDrawer) { | ||||||
|                 itemStorages.add(new StorageItemDrawer(this, (IDrawer) facing)); |                 itemStorages.add(new StorageItemDrawer(this, () -> (IDrawer) getFacingTile())); | ||||||
|             } else if (facing instanceof IDeepStorageUnit) { |             } else if (facing instanceof IDeepStorageUnit) { | ||||||
|                 itemStorages.add(new StorageItemDSU(this, (IDeepStorageUnit) facing)); |                 itemStorages.add(new StorageItemDSU(this, () -> (IDeepStorageUnit) getFacingTile())); | ||||||
|             } else if (!(facing instanceof TileNode)) { |             } else if (!(facing instanceof TileNode)) { | ||||||
|                 IItemHandler itemHandler = RSUtils.getItemHandler(facing, holder.getDirection().getOpposite()); |                 IItemHandler itemHandler = RSUtils.getItemHandler(facing, holder.getDirection().getOpposite()); | ||||||
|  |  | ||||||
|                 if (itemHandler != null) { |                 if (itemHandler != null) { | ||||||
|                     itemStorages.add(new StorageItemItemHandler(this, itemHandler)); |                     itemStorages.add(new StorageItemItemHandler(this, () -> RSUtils.getItemHandler(getFacingTile(), holder.getDirection().getOpposite()))); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } else if (type == IType.FLUIDS) { |         } else if (type == IType.FLUIDS) { | ||||||
|             IFluidHandler fluidHandler = RSUtils.getFluidHandler(facing, holder.getDirection().getOpposite()); |             IFluidHandler fluidHandler = RSUtils.getFluidHandler(facing, holder.getDirection().getOpposite()); | ||||||
|  |  | ||||||
|             if (fluidHandler != null) { |             if (fluidHandler != null) { | ||||||
|                 for (IFluidTankProperties property : fluidHandler.getTankProperties()) { |                 fluidStorages.add(new StorageFluidExternal(this, () -> RSUtils.getFluidHandler(getFacingTile(), holder.getDirection().getOpposite()))); | ||||||
|                     fluidStorages.add(new StorageFluidExternal(this, fluidHandler, property)); |  | ||||||
|                 } |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -13,19 +13,22 @@ import net.minecraftforge.fluids.capability.IFluidTankProperties; | |||||||
|  |  | ||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
| import javax.annotation.Nullable; | import javax.annotation.Nullable; | ||||||
|  | import java.util.function.Supplier; | ||||||
|  |  | ||||||
| public class StorageFluidExternal implements IStorage<FluidStack> { | public class StorageFluidExternal implements IStorage<FluidStack> { | ||||||
|     private FluidStack cache; |     private FluidStack cache; | ||||||
|  |  | ||||||
|     private NetworkNodeExternalStorage externalStorage; |     private NetworkNodeExternalStorage externalStorage; | ||||||
|     private IFluidHandler handler; |     private Supplier<IFluidHandler> handlerSupplier; | ||||||
|  |  | ||||||
|     public StorageFluidExternal(NetworkNodeExternalStorage externalStorage, IFluidHandler handler, IFluidTankProperties properties) { |     public StorageFluidExternal(NetworkNodeExternalStorage externalStorage, Supplier<IFluidHandler> handlerSupplier) { | ||||||
|         this.externalStorage = externalStorage; |         this.externalStorage = externalStorage; | ||||||
|         this.handler = handler; |         this.handlerSupplier = handlerSupplier; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private IFluidTankProperties getProperties() { |     private IFluidTankProperties getProperties() { | ||||||
|  |         IFluidHandler handler = handlerSupplier.get(); | ||||||
|  |  | ||||||
|         return handler.getTankProperties().length != 0 ? handler.getTankProperties()[0] : null; |         return handler.getTankProperties().length != 0 ? handler.getTankProperties()[0] : null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -42,7 +45,7 @@ public class StorageFluidExternal implements IStorage<FluidStack> { | |||||||
|     @Override |     @Override | ||||||
|     public FluidStack insert(@Nonnull FluidStack stack, int size, boolean simulate) { |     public FluidStack insert(@Nonnull FluidStack stack, int size, boolean simulate) { | ||||||
|         if (getProperties() != null && IFilterable.canTakeFluids(externalStorage.getFluidFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack) && getProperties().canFillFluidType(stack)) { |         if (getProperties() != null && IFilterable.canTakeFluids(externalStorage.getFluidFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack) && getProperties().canFillFluidType(stack)) { | ||||||
|             int filled = handler.fill(RSUtils.copyStackWithSize(stack, size), !simulate); |             int filled = handlerSupplier.get().fill(RSUtils.copyStackWithSize(stack, size), !simulate); | ||||||
|  |  | ||||||
|             if (filled == size) { |             if (filled == size) { | ||||||
|                 return null; |                 return null; | ||||||
| @@ -60,7 +63,7 @@ public class StorageFluidExternal implements IStorage<FluidStack> { | |||||||
|         FluidStack toDrain = RSUtils.copyStackWithSize(stack, size); |         FluidStack toDrain = RSUtils.copyStackWithSize(stack, size); | ||||||
|  |  | ||||||
|         if (API.instance().getComparer().isEqual(getContents(), toDrain, flags)) { |         if (API.instance().getComparer().isEqual(getContents(), toDrain, flags)) { | ||||||
|             return handler.drain(toDrain, !simulate); |             return handlerSupplier.get().drain(toDrain, !simulate); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return null; |         return null; | ||||||
|   | |||||||
| @@ -10,25 +10,28 @@ import net.minecraftforge.items.ItemHandlerHelper; | |||||||
| import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; | import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; | ||||||
|  |  | ||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
|  | import java.util.function.Supplier; | ||||||
|  |  | ||||||
| public class StorageItemDSU extends StorageItemExternal { | public class StorageItemDSU extends StorageItemExternal { | ||||||
|     private NetworkNodeExternalStorage externalStorage; |     private NetworkNodeExternalStorage externalStorage; | ||||||
|     private IDeepStorageUnit unit; |     private Supplier<IDeepStorageUnit> dsuSupplier; | ||||||
|  |  | ||||||
|     public StorageItemDSU(NetworkNodeExternalStorage externalStorage, IDeepStorageUnit unit) { |     public StorageItemDSU(NetworkNodeExternalStorage externalStorage, Supplier<IDeepStorageUnit> dsuSupplier) { | ||||||
|         this.externalStorage = externalStorage; |         this.externalStorage = externalStorage; | ||||||
|         this.unit = unit; |         this.dsuSupplier = dsuSupplier; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public int getCapacity() { |     public int getCapacity() { | ||||||
|         return unit.getMaxStoredCount(); |         return dsuSupplier.get().getMaxStoredCount(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public NonNullList<ItemStack> getStacks() { |     public NonNullList<ItemStack> getStacks() { | ||||||
|         if (unit.getStoredItemType() != null && unit.getStoredItemType().getCount() > 0) { |         IDeepStorageUnit dsu = dsuSupplier.get(); | ||||||
|             return NonNullList.withSize(1, unit.getStoredItemType().copy()); |  | ||||||
|  |         if (dsu.getStoredItemType() != null && dsu.getStoredItemType().getCount() > 0) { | ||||||
|  |             return NonNullList.withSize(1, dsu.getStoredItemType().copy()); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return RSUtils.emptyNonNullList(); |         return RSUtils.emptyNonNullList(); | ||||||
| @@ -36,10 +39,12 @@ public class StorageItemDSU extends StorageItemExternal { | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) { |     public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) { | ||||||
|  |         IDeepStorageUnit dsu = dsuSupplier.get(); | ||||||
|  |  | ||||||
|         if (IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { |         if (IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { | ||||||
|             if (unit.getStoredItemType() != null) { |             if (dsu.getStoredItemType() != null) { | ||||||
|                 if (API.instance().getComparer().isEqualNoQuantity(unit.getStoredItemType(), stack)) { |                 if (API.instance().getComparer().isEqualNoQuantity(dsu.getStoredItemType(), stack)) { | ||||||
|                     if (getStored() + size > unit.getMaxStoredCount()) { |                     if (getStored() + size > dsu.getMaxStoredCount()) { | ||||||
|                         int remainingSpace = getCapacity() - getStored(); |                         int remainingSpace = getCapacity() - getStored(); | ||||||
|  |  | ||||||
|                         if (remainingSpace <= 0) { |                         if (remainingSpace <= 0) { | ||||||
| @@ -47,20 +52,20 @@ public class StorageItemDSU extends StorageItemExternal { | |||||||
|                         } |                         } | ||||||
|  |  | ||||||
|                         if (!simulate) { |                         if (!simulate) { | ||||||
|                             unit.setStoredItemCount(unit.getStoredItemType().getCount() + remainingSpace); |                             dsu.setStoredItemCount(dsu.getStoredItemType().getCount() + remainingSpace); | ||||||
|                         } |                         } | ||||||
|  |  | ||||||
|                         return ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace); |                         return ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace); | ||||||
|                     } else { |                     } else { | ||||||
|                         if (!simulate) { |                         if (!simulate) { | ||||||
|                             unit.setStoredItemCount(unit.getStoredItemType().getCount() + size); |                             dsu.setStoredItemCount(dsu.getStoredItemType().getCount() + size); | ||||||
|                         } |                         } | ||||||
|  |  | ||||||
|                         return null; |                         return null; | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } else { |             } else { | ||||||
|                 if (getStored() + size > unit.getMaxStoredCount()) { |                 if (getStored() + size > dsu.getMaxStoredCount()) { | ||||||
|                     int remainingSpace = getCapacity() - getStored(); |                     int remainingSpace = getCapacity() - getStored(); | ||||||
|  |  | ||||||
|                     if (remainingSpace <= 0) { |                     if (remainingSpace <= 0) { | ||||||
| @@ -68,13 +73,13 @@ public class StorageItemDSU extends StorageItemExternal { | |||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                     if (!simulate) { |                     if (!simulate) { | ||||||
|                         unit.setStoredItemType(stack.copy(), remainingSpace); |                         dsu.setStoredItemType(stack.copy(), remainingSpace); | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                     return ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace); |                     return ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace); | ||||||
|                 } else { |                 } else { | ||||||
|                     if (!simulate) { |                     if (!simulate) { | ||||||
|                         unit.setStoredItemType(stack.copy(), size); |                         dsu.setStoredItemType(stack.copy(), size); | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                     return null; |                     return null; | ||||||
| @@ -87,15 +92,17 @@ public class StorageItemDSU extends StorageItemExternal { | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) { |     public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) { | ||||||
|         if (API.instance().getComparer().isEqual(stack, unit.getStoredItemType(), flags)) { |         IDeepStorageUnit dsu = dsuSupplier.get(); | ||||||
|             if (size > unit.getStoredItemType().getCount()) { |  | ||||||
|                 size = unit.getStoredItemType().getCount(); |         if (API.instance().getComparer().isEqual(stack, dsu.getStoredItemType(), flags)) { | ||||||
|  |             if (size > dsu.getStoredItemType().getCount()) { | ||||||
|  |                 size = dsu.getStoredItemType().getCount(); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             ItemStack stored = unit.getStoredItemType(); |             ItemStack stored = dsu.getStoredItemType(); | ||||||
|  |  | ||||||
|             if (!simulate) { |             if (!simulate) { | ||||||
|                 unit.setStoredItemCount(stored.getCount() - size); |                 dsu.setStoredItemCount(stored.getCount() - size); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             return ItemHandlerHelper.copyStackWithSize(stored, size); |             return ItemHandlerHelper.copyStackWithSize(stored, size); | ||||||
| @@ -106,7 +113,9 @@ public class StorageItemDSU extends StorageItemExternal { | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public int getStored() { |     public int getStored() { | ||||||
|         return unit.getStoredItemType() != null ? unit.getStoredItemType().getCount() : 0; |         IDeepStorageUnit dsu = dsuSupplier.get(); | ||||||
|  |  | ||||||
|  |         return dsu.getStoredItemType() != null ? dsu.getStoredItemType().getCount() : 0; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|   | |||||||
| @@ -11,39 +11,40 @@ import net.minecraft.util.NonNullList; | |||||||
| import net.minecraftforge.items.ItemHandlerHelper; | import net.minecraftforge.items.ItemHandlerHelper; | ||||||
|  |  | ||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
|  | import java.util.function.Supplier; | ||||||
|  |  | ||||||
| public class StorageItemDrawer extends StorageItemExternal { | public class StorageItemDrawer extends StorageItemExternal { | ||||||
|     private NetworkNodeExternalStorage externalStorage; |     private NetworkNodeExternalStorage externalStorage; | ||||||
|     private IDrawer drawer; |     private Supplier<IDrawer> drawerSupplier; | ||||||
|  |  | ||||||
|     public StorageItemDrawer(NetworkNodeExternalStorage externalStorage, IDrawer drawer) { |     public StorageItemDrawer(NetworkNodeExternalStorage externalStorage, Supplier<IDrawer> drawerSupplier) { | ||||||
|         this.externalStorage = externalStorage; |         this.externalStorage = externalStorage; | ||||||
|         this.drawer = drawer; |         this.drawerSupplier = drawerSupplier; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public int getCapacity() { |     public int getCapacity() { | ||||||
|         return drawer.getMaxCapacity(); |         return drawerSupplier.get().getMaxCapacity(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public NonNullList<ItemStack> getStacks() { |     public NonNullList<ItemStack> getStacks() { | ||||||
|         return getStacks(drawer); |         return getStacks(drawerSupplier.get()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) { |     public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) { | ||||||
|         return insert(externalStorage, drawer, stack, size, simulate); |         return insert(externalStorage, drawerSupplier.get(), stack, size, simulate); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) { |     public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) { | ||||||
|         return extract(drawer, stack, size, flags, simulate); |         return extract(drawerSupplier.get(), stack, size, flags, simulate); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public int getStored() { |     public int getStored() { | ||||||
|         return drawer.getStoredItemCount(); |         return drawerSupplier.get().getStoredItemCount(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|   | |||||||
| @@ -7,20 +7,23 @@ import net.minecraft.util.NonNullList; | |||||||
|  |  | ||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
| import javax.annotation.Nullable; | import javax.annotation.Nullable; | ||||||
|  | import java.util.function.Supplier; | ||||||
|  |  | ||||||
| public class StorageItemDrawerGroup extends StorageItemExternal { | public class StorageItemDrawerGroup extends StorageItemExternal { | ||||||
|     private NetworkNodeExternalStorage externalStorage; |     private NetworkNodeExternalStorage externalStorage; | ||||||
|     private IDrawerGroup drawers; |     private Supplier<IDrawerGroup> groupSupplier; | ||||||
|  |  | ||||||
|     public StorageItemDrawerGroup(NetworkNodeExternalStorage externalStorage, IDrawerGroup drawers) { |     public StorageItemDrawerGroup(NetworkNodeExternalStorage externalStorage, Supplier<IDrawerGroup> groupSupplier) { | ||||||
|         this.externalStorage = externalStorage; |         this.externalStorage = externalStorage; | ||||||
|         this.drawers = drawers; |         this.groupSupplier = groupSupplier; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public NonNullList<ItemStack> getStacks() { |     public NonNullList<ItemStack> getStacks() { | ||||||
|         NonNullList<ItemStack> stacks = NonNullList.create(); |         NonNullList<ItemStack> stacks = NonNullList.create(); | ||||||
|  |  | ||||||
|  |         IDrawerGroup drawers = groupSupplier.get(); | ||||||
|  |  | ||||||
|         for (int i = 0; i < drawers.getDrawerCount(); ++i) { |         for (int i = 0; i < drawers.getDrawerCount(); ++i) { | ||||||
|             if (drawers.isDrawerEnabled(i)) { |             if (drawers.isDrawerEnabled(i)) { | ||||||
|                 stacks.addAll(StorageItemDrawer.getStacks(drawers.getDrawer(i))); |                 stacks.addAll(StorageItemDrawer.getStacks(drawers.getDrawer(i))); | ||||||
| @@ -34,6 +37,8 @@ public class StorageItemDrawerGroup extends StorageItemExternal { | |||||||
|     public int getStored() { |     public int getStored() { | ||||||
|         int stored = 0; |         int stored = 0; | ||||||
|  |  | ||||||
|  |         IDrawerGroup drawers = groupSupplier.get(); | ||||||
|  |  | ||||||
|         for (int i = 0; i < drawers.getDrawerCount(); ++i) { |         for (int i = 0; i < drawers.getDrawerCount(); ++i) { | ||||||
|             if (drawers.isDrawerEnabled(i)) { |             if (drawers.isDrawerEnabled(i)) { | ||||||
|                 stored += drawers.getDrawer(i).getStoredItemCount(); |                 stored += drawers.getDrawer(i).getStoredItemCount(); | ||||||
| @@ -52,6 +57,8 @@ public class StorageItemDrawerGroup extends StorageItemExternal { | |||||||
|     public int getCapacity() { |     public int getCapacity() { | ||||||
|         int capacity = 0; |         int capacity = 0; | ||||||
|  |  | ||||||
|  |         IDrawerGroup drawers = groupSupplier.get(); | ||||||
|  |  | ||||||
|         for (int i = 0; i < drawers.getDrawerCount(); ++i) { |         for (int i = 0; i < drawers.getDrawerCount(); ++i) { | ||||||
|             if (drawers.isDrawerEnabled(i)) { |             if (drawers.isDrawerEnabled(i)) { | ||||||
|                 capacity += drawers.getDrawer(i).getMaxCapacity(); |                 capacity += drawers.getDrawer(i).getMaxCapacity(); | ||||||
| @@ -66,6 +73,8 @@ public class StorageItemDrawerGroup extends StorageItemExternal { | |||||||
|     public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) { |     public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) { | ||||||
|         ItemStack remainder = stack; |         ItemStack remainder = stack; | ||||||
|  |  | ||||||
|  |         IDrawerGroup drawers = groupSupplier.get(); | ||||||
|  |  | ||||||
|         for (int i = 0; i < drawers.getDrawerCount(); ++i) { |         for (int i = 0; i < drawers.getDrawerCount(); ++i) { | ||||||
|             if (drawers.isDrawerEnabled(i)) { |             if (drawers.isDrawerEnabled(i)) { | ||||||
|                 remainder = StorageItemDrawer.insert(externalStorage, drawers.getDrawer(i), stack, size, simulate); |                 remainder = StorageItemDrawer.insert(externalStorage, drawers.getDrawer(i), stack, size, simulate); | ||||||
| @@ -86,6 +95,8 @@ public class StorageItemDrawerGroup extends StorageItemExternal { | |||||||
|     public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) { |     public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) { | ||||||
|         int toExtract = size; |         int toExtract = size; | ||||||
|  |  | ||||||
|  |         IDrawerGroup drawers = groupSupplier.get(); | ||||||
|  |  | ||||||
|         ItemStack result = null; |         ItemStack result = null; | ||||||
|  |  | ||||||
|         for (int i = 0; i < drawers.getDrawerCount(); ++i) { |         for (int i = 0; i < drawers.getDrawerCount(); ++i) { | ||||||
|   | |||||||
| @@ -9,15 +9,16 @@ import net.minecraftforge.items.IItemHandler; | |||||||
| import net.minecraftforge.items.ItemHandlerHelper; | import net.minecraftforge.items.ItemHandlerHelper; | ||||||
|  |  | ||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
|  | import java.util.function.Supplier; | ||||||
|  |  | ||||||
| public class StorageItemItemHandler extends StorageItemExternal { | public class StorageItemItemHandler extends StorageItemExternal { | ||||||
|     private NetworkNodeExternalStorage externalStorage; |     private NetworkNodeExternalStorage externalStorage; | ||||||
|     private IItemHandler handler; |     private Supplier<IItemHandler> handlerSupplier; | ||||||
|     private AccessType lockedAccessType = AccessType.INSERT_EXTRACT; |     private AccessType lockedAccessType = AccessType.INSERT_EXTRACT; | ||||||
|  |  | ||||||
|     public StorageItemItemHandler(NetworkNodeExternalStorage externalStorage, IItemHandler handler) { |     public StorageItemItemHandler(NetworkNodeExternalStorage externalStorage, Supplier<IItemHandler> handlerSupplier) { | ||||||
|         this.externalStorage = externalStorage; |         this.externalStorage = externalStorage; | ||||||
|         this.handler = handler; |         this.handlerSupplier = handlerSupplier; | ||||||
|  |  | ||||||
|         if (externalStorage.getFacingTile().getBlockType().getUnlocalizedName().equals("tile.ExtraUtils2:TrashCan")) { |         if (externalStorage.getFacingTile().getBlockType().getUnlocalizedName().equals("tile.ExtraUtils2:TrashCan")) { | ||||||
|             lockedAccessType = AccessType.INSERT; |             lockedAccessType = AccessType.INSERT; | ||||||
| @@ -26,11 +27,13 @@ public class StorageItemItemHandler extends StorageItemExternal { | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public int getCapacity() { |     public int getCapacity() { | ||||||
|         return handler.getSlots() * 64; |         return handlerSupplier.get().getSlots() * 64; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public NonNullList<ItemStack> getStacks() { |     public NonNullList<ItemStack> getStacks() { | ||||||
|  |         IItemHandler handler = handlerSupplier.get(); | ||||||
|  |  | ||||||
|         NonNullList<ItemStack> stacks = NonNullList.withSize(handler.getSlots(), ItemStack.EMPTY); |         NonNullList<ItemStack> stacks = NonNullList.withSize(handler.getSlots(), ItemStack.EMPTY); | ||||||
|  |  | ||||||
|         for (int i = 0; i < handler.getSlots(); ++i) { |         for (int i = 0; i < handler.getSlots(); ++i) { | ||||||
| @@ -43,6 +46,8 @@ public class StorageItemItemHandler extends StorageItemExternal { | |||||||
|     @Override |     @Override | ||||||
|     public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) { |     public ItemStack insert(@Nonnull ItemStack stack, int size, boolean simulate) { | ||||||
|         if (IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { |         if (IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { | ||||||
|  |             IItemHandler handler = handlerSupplier.get(); | ||||||
|  |  | ||||||
|             return ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), simulate); |             return ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), simulate); | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -55,6 +60,8 @@ public class StorageItemItemHandler extends StorageItemExternal { | |||||||
|  |  | ||||||
|         ItemStack received = null; |         ItemStack received = null; | ||||||
|  |  | ||||||
|  |         IItemHandler handler = handlerSupplier.get(); | ||||||
|  |  | ||||||
|         for (int i = 0; i < handler.getSlots(); ++i) { |         for (int i = 0; i < handler.getSlots(); ++i) { | ||||||
|             ItemStack slot = handler.getStackInSlot(i); |             ItemStack slot = handler.getStackInSlot(i); | ||||||
|  |  | ||||||
| @@ -82,6 +89,8 @@ public class StorageItemItemHandler extends StorageItemExternal { | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public int getStored() { |     public int getStored() { | ||||||
|  |         IItemHandler handler = handlerSupplier.get(); | ||||||
|  |  | ||||||
|         int size = 0; |         int size = 0; | ||||||
|  |  | ||||||
|         for (int i = 0; i < handler.getSlots(); ++i) { |         for (int i = 0; i < handler.getSlots(); ++i) { | ||||||
|   | |||||||
| @@ -6,6 +6,6 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCable; | |||||||
| public class TileCable extends TileNode { | public class TileCable extends TileNode { | ||||||
|     @Override |     @Override | ||||||
|     public INetworkNode createNode() { |     public INetworkNode createNode() { | ||||||
|         return new NetworkNodeCable(); |         return new NetworkNodeCable(this); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -6,6 +6,6 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeNetworkRe | |||||||
| public class TileNetworkReceiver extends TileNode { | public class TileNetworkReceiver extends TileNode { | ||||||
|     @Override |     @Override | ||||||
|     public INetworkNode createNode() { |     public INetworkNode createNode() { | ||||||
|         return new NetworkNodeNetworkReceiver(); |         return new NetworkNodeNetworkReceiver(this); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 raoulvdberge
					raoulvdberge