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