This commit is contained in:
raoulvdberge
2016-12-22 03:40:32 +01:00
parent cc41c0d7d9
commit 278c96d984
12 changed files with 92 additions and 55 deletions

View File

@@ -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();

View File

@@ -30,9 +30,6 @@ public abstract class NetworkNode implements INetworkNode, INetworkNeighborhoodA
private boolean active;
public NetworkNode() {
}
public NetworkNode(INetworkNodeHolder holder) {
this.holder = holder;
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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())));
}
}

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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);
}
}

View File

@@ -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);
}
}