Add new inventory listener system

This commit is contained in:
raoulvdberge
2019-10-17 17:17:53 +02:00
parent f893122b98
commit ad800fbd1a
35 changed files with 276 additions and 282 deletions

View File

@@ -15,7 +15,8 @@ import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.FluidStorageCache;
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.ItemStorageCache; import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.ItemStorageCache;
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory; import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.tile.ExternalStorageTile; import com.raoulvdberge.refinedstorage.tile.ExternalStorageTile;
import com.raoulvdberge.refinedstorage.tile.config.*; import com.raoulvdberge.refinedstorage.tile.config.*;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
@@ -45,8 +46,8 @@ public class ExternalStorageNetworkNode extends NetworkNode implements IStorageP
private static final String NBT_TYPE = "Type"; private static final String NBT_TYPE = "Type";
private static final String NBT_FLUID_FILTERS = "FluidFilters"; private static final String NBT_FLUID_FILTERS = "FluidFilters";
private BaseItemHandler itemFilters = new BaseItemHandler(9, new NetworkNodeListener(this)); private BaseItemHandler itemFilters = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
private FluidInventory fluidFilters = new FluidInventory(9, new NetworkNodeListener(this)); private FluidInventory fluidFilters = new FluidInventory(9).addListener(new NetworkNodeFluidInventoryListener(this));
private int priority = 0; private int priority = 0;
private int compare = IComparer.COMPARE_NBT; private int compare = IComparer.COMPARE_NBT;

View File

@@ -18,7 +18,8 @@ import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.FilterItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.FilterItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.validator.ItemValidator; import com.raoulvdberge.refinedstorage.inventory.item.validator.ItemValidator;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.item.PatternItem; import com.raoulvdberge.refinedstorage.item.PatternItem;
import com.raoulvdberge.refinedstorage.tile.config.IType; import com.raoulvdberge.refinedstorage.tile.config.IType;
import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; import com.raoulvdberge.refinedstorage.tile.data.TileDataManager;
@@ -89,40 +90,14 @@ public class GridNetworkNode extends NetworkNode implements IGridNetworkAware, I
private ICraftingRecipe currentRecipe; private ICraftingRecipe currentRecipe;
private CraftingInventory matrix = new CraftingInventory(craftingContainer, 3, 3); private CraftingInventory matrix = new CraftingInventory(craftingContainer, 3, 3);
private CraftResultInventory result = new CraftResultInventory(); private CraftResultInventory result = new CraftResultInventory();
private BaseItemHandler processingMatrix = new BaseItemHandler(9 * 2, new NetworkNodeListener(this)); private BaseItemHandler processingMatrix = new BaseItemHandler(9 * 2).addListener(new NetworkNodeInventoryListener(this));
private FluidInventory processingMatrixFluids = new FluidInventory(9 * 2, FluidAttributes.BUCKET_VOLUME * 64, new NetworkNodeListener(this)); private FluidInventory processingMatrixFluids = new FluidInventory(9 * 2, FluidAttributes.BUCKET_VOLUME * 64).addListener(new NetworkNodeFluidInventoryListener(this));
private boolean reading; private boolean reading;
private Set<ICraftingGridListener> craftingListeners = new HashSet<>(); private Set<ICraftingGridListener> craftingListeners = new HashSet<>();
private BaseItemHandler patterns = new BaseItemHandler(2, new NetworkNodeListener(this)) { private BaseItemHandler patterns = new BaseItemHandler(2) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
ItemStack pattern = getStackInSlot(slot);
if (slot == 1 && !pattern.isEmpty()) {
boolean isPatternProcessing = PatternItem.isProcessing(pattern);
if (isPatternProcessing && isProcessingPattern()) {
for (int i = 0; i < 9; ++i) {
processingMatrix.setStackInSlot(i, PatternItem.getInputSlot(pattern, i));
processingMatrixFluids.setFluid(i, PatternItem.getFluidInputSlot(pattern, i));
}
for (int i = 0; i < 9; ++i) {
processingMatrix.setStackInSlot(9 + i, PatternItem.getOutputSlot(pattern, i));
processingMatrixFluids.setFluid(9 + i, PatternItem.getFluidOutputSlot(pattern, i));
}
} else if (!isPatternProcessing && !isProcessingPattern()) {
for (int i = 0; i < 9; ++i) {
matrix.setInventorySlotContents(i, PatternItem.getInputSlot(pattern, i));
}
}
}
}
@Override @Override
public int getSlotLimit(int slot) { public int getSlotLimit(int slot) {
return slot == 1 ? 1 : super.getSlotLimit(slot); return slot == 1 ? 1 : super.getSlotLimit(slot);
@@ -142,10 +117,36 @@ public class GridNetworkNode extends NetworkNode implements IGridNetworkAware, I
return stack; return stack;
} }
}.addValidator(new ItemValidator(RSItems.PATTERN)); }
.addValidator(new ItemValidator(RSItems.PATTERN))
.addListener(new NetworkNodeInventoryListener(this))
.addListener(((handler, slot, reading) -> {
ItemStack pattern = handler.getStackInSlot(slot);
if (slot == 1 && !pattern.isEmpty()) {
boolean isPatternProcessing = PatternItem.isProcessing(pattern);
if (isPatternProcessing && isProcessingPattern()) {
for (int i = 0; i < 9; ++i) {
processingMatrix.setStackInSlot(i, PatternItem.getInputSlot(pattern, i));
processingMatrixFluids.setFluid(i, PatternItem.getFluidInputSlot(pattern, i));
}
for (int i = 0; i < 9; ++i) {
processingMatrix.setStackInSlot(9 + i, PatternItem.getOutputSlot(pattern, i));
processingMatrixFluids.setFluid(9 + i, PatternItem.getFluidOutputSlot(pattern, i));
}
} else if (!isPatternProcessing && !isProcessingPattern()) {
for (int i = 0; i < 9; ++i) {
matrix.setInventorySlotContents(i, PatternItem.getInputSlot(pattern, i));
}
}
}
}));
private List<IFilter> filters = new ArrayList<>(); private List<IFilter> filters = new ArrayList<>();
private List<IGridTab> tabs = new ArrayList<>(); private List<IGridTab> tabs = new ArrayList<>();
private FilterItemHandler filter = new FilterItemHandler(filters, tabs, new NetworkNodeListener(this)); private FilterItemHandler filter = (FilterItemHandler) new FilterItemHandler(filters, tabs).addListener(new NetworkNodeInventoryListener(this));
private final GridType type; private final GridType type;

View File

@@ -6,7 +6,8 @@ import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory; import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.item.UpgradeItem; import com.raoulvdberge.refinedstorage.item.UpgradeItem;
import com.raoulvdberge.refinedstorage.tile.DiskDriveTile; import com.raoulvdberge.refinedstorage.tile.DiskDriveTile;
import com.raoulvdberge.refinedstorage.tile.ImporterTile; import com.raoulvdberge.refinedstorage.tile.ImporterTile;
@@ -35,10 +36,10 @@ public class ImporterNetworkNode extends NetworkNode implements IComparable, IWh
private static final String NBT_TYPE = "Type"; private static final String NBT_TYPE = "Type";
private static final String NBT_FLUID_FILTERS = "FLuidFilters"; private static final String NBT_FLUID_FILTERS = "FLuidFilters";
private BaseItemHandler itemFilters = new BaseItemHandler(9, new NetworkNodeListener(this)); private BaseItemHandler itemFilters = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
private FluidInventory fluidFilters = new FluidInventory(9, new NetworkNodeListener(this)); private FluidInventory fluidFilters = new FluidInventory(9).addListener(new NetworkNodeFluidInventoryListener(this));
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, new NetworkNodeListener(this), UpgradeItem.Type.SPEED, UpgradeItem.Type.STACK); private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4, UpgradeItem.Type.SPEED, UpgradeItem.Type.STACK).addListener(new NetworkNodeInventoryListener(this));
private int compare = IComparer.COMPARE_NBT; private int compare = IComparer.COMPARE_NBT;
private int mode = IWhitelistBlacklist.BLACKLIST; private int mode = IWhitelistBlacklist.BLACKLIST;

View File

@@ -8,7 +8,8 @@ import com.raoulvdberge.refinedstorage.container.slot.filter.FilterSlot;
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory; import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.item.UpgradeItem; import com.raoulvdberge.refinedstorage.item.UpgradeItem;
import com.raoulvdberge.refinedstorage.tile.TileConstructor; import com.raoulvdberge.refinedstorage.tile.TileConstructor;
import com.raoulvdberge.refinedstorage.tile.config.IComparable; import com.raoulvdberge.refinedstorage.tile.config.IComparable;
@@ -50,10 +51,10 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable,
private static final int BASE_SPEED = 20; private static final int BASE_SPEED = 20;
private BaseItemHandler itemFilters = new BaseItemHandler(1, new NetworkNodeListener(this)); private BaseItemHandler itemFilters = new BaseItemHandler(1).addListener(new NetworkNodeInventoryListener(this));
private FluidInventory fluidFilters = new FluidInventory(1, new NetworkNodeListener(this)); private FluidInventory fluidFilters = new FluidInventory(1).addListener(new NetworkNodeFluidInventoryListener(this));
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, new NetworkNodeListener(this)/* TODO, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING, ItemUpgrade.TYPE_STACK*/); private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4 /* TODO, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING, ItemUpgrade.TYPE_STACK*/).addListener(new NetworkNodeInventoryListener(this));
private int compare = IComparer.COMPARE_NBT; private int compare = IComparer.COMPARE_NBT;
private int type = IType.ITEMS; private int type = IType.ITEMS;

View File

@@ -10,7 +10,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.validator.PatternItemValidator; import com.raoulvdberge.refinedstorage.inventory.item.validator.PatternItemValidator;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.item.UpgradeItem; import com.raoulvdberge.refinedstorage.item.UpgradeItem;
import com.raoulvdberge.refinedstorage.util.StackUtils; import com.raoulvdberge.refinedstorage.util.StackUtils;
import com.raoulvdberge.refinedstorage.util.WorldUtils; import com.raoulvdberge.refinedstorage.util.WorldUtils;
@@ -59,11 +59,15 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
private static final String NBT_LOCKED = "Locked"; private static final String NBT_LOCKED = "Locked";
private static final String NBT_WAS_POWERED = "WasPowered"; private static final String NBT_WAS_POWERED = "WasPowered";
private BaseItemHandler patternsInventory = new BaseItemHandler(9, new NetworkNodeListener(this)) { private BaseItemHandler patternsInventory = new BaseItemHandler(9) {
@Override @Override
protected void onContentsChanged(int slot) { public int getSlotLimit(int slot) {
super.onContentsChanged(slot); return 1;
}
}
.addValidator(new PatternItemValidator(world))
.addListener(new NetworkNodeInventoryListener(this))
.addListener((handler, slot, reading) -> {
if (!reading) { if (!reading) {
if (!world.isRemote) { if (!world.isRemote) {
invalidate(); invalidate();
@@ -73,17 +77,11 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
network.getCraftingManager().rebuild(); network.getCraftingManager().rebuild();
} }
} }
} });
@Override
public int getSlotLimit(int slot) {
return 1;
}
}.addValidator(new PatternItemValidator(world));
private List<ICraftingPattern> patterns = new ArrayList<>(); private List<ICraftingPattern> patterns = new ArrayList<>();
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, new NetworkNodeListener(this)/* TODO, ItemUpgrade.TYPE_SPEED*/); private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4 /* TODO, ItemUpgrade.TYPE_SPEED*/).addListener(new NetworkNodeInventoryListener(this));
// Used to prevent infinite recursion on getRootContainer() when there's e.g. two crafters facing each other. // Used to prevent infinite recursion on getRootContainer() when there's e.g. two crafters facing each other.
private boolean visited = false; private boolean visited = false;

View File

@@ -7,7 +7,8 @@ import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory; import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.tile.TileDestructor; import com.raoulvdberge.refinedstorage.tile.TileDestructor;
import com.raoulvdberge.refinedstorage.tile.config.IComparable; import com.raoulvdberge.refinedstorage.tile.config.IComparable;
import com.raoulvdberge.refinedstorage.tile.config.IType; import com.raoulvdberge.refinedstorage.tile.config.IType;
@@ -51,10 +52,10 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I
private static final int BASE_SPEED = 20; private static final int BASE_SPEED = 20;
private BaseItemHandler itemFilters = new BaseItemHandler(9, new NetworkNodeListener(this)); private BaseItemHandler itemFilters = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
private FluidInventory fluidFilters = new FluidInventory(9, new NetworkNodeListener(this)); private FluidInventory fluidFilters = new FluidInventory(9).addListener(new NetworkNodeFluidInventoryListener(this));
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, new NetworkNodeListener(this)/* TODO, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_SILK_TOUCH, ItemUpgrade.TYPE_FORTUNE_1, ItemUpgrade.TYPE_FORTUNE_2, ItemUpgrade.TYPE_FORTUNE_3*/); private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4).addListener(new NetworkNodeInventoryListener(this)/* TODO, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_SILK_TOUCH, ItemUpgrade.TYPE_FORTUNE_1, ItemUpgrade.TYPE_FORTUNE_2, ItemUpgrade.TYPE_FORTUNE_3*/);
private int compare = IComparer.COMPARE_NBT; private int compare = IComparer.COMPARE_NBT;
private int mode = IWhitelistBlacklist.BLACKLIST; private int mode = IWhitelistBlacklist.BLACKLIST;

View File

@@ -6,7 +6,8 @@ import com.raoulvdberge.refinedstorage.api.network.INetwork;
import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory; import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.tile.TileDetector; import com.raoulvdberge.refinedstorage.tile.TileDetector;
import com.raoulvdberge.refinedstorage.tile.config.IComparable; import com.raoulvdberge.refinedstorage.tile.config.IComparable;
import com.raoulvdberge.refinedstorage.tile.config.IType; import com.raoulvdberge.refinedstorage.tile.config.IType;
@@ -37,8 +38,8 @@ public class NetworkNodeDetector extends NetworkNode implements IComparable, ITy
private static final String NBT_TYPE = "Type"; private static final String NBT_TYPE = "Type";
private static final String NBT_FLUID_FILTERS = "FluidFilters"; private static final String NBT_FLUID_FILTERS = "FluidFilters";
private BaseItemHandler itemFilters = new BaseItemHandler(1, new NetworkNodeListener(this)); private BaseItemHandler itemFilters = new BaseItemHandler(1).addListener(new NetworkNodeInventoryListener(this));
private FluidInventory fluidFilters = new FluidInventory(1, new NetworkNodeListener(this)); private FluidInventory fluidFilters = new FluidInventory(1).addListener(new NetworkNodeFluidInventoryListener(this));
private int compare = IComparer.COMPARE_NBT; private int compare = IComparer.COMPARE_NBT;
private int type = IType.ITEMS; private int type = IType.ITEMS;

View File

@@ -6,7 +6,8 @@ import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory; import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.item.UpgradeItem; import com.raoulvdberge.refinedstorage.item.UpgradeItem;
import com.raoulvdberge.refinedstorage.tile.TileExporter; import com.raoulvdberge.refinedstorage.tile.TileExporter;
import com.raoulvdberge.refinedstorage.tile.config.IComparable; import com.raoulvdberge.refinedstorage.tile.config.IComparable;
@@ -32,10 +33,10 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy
private static final String NBT_TYPE = "Type"; private static final String NBT_TYPE = "Type";
private static final String NBT_FLUID_FILTERS = "FluidFilters"; private static final String NBT_FLUID_FILTERS = "FluidFilters";
private BaseItemHandler itemFilters = new BaseItemHandler(9, new NetworkNodeListener(this)); private BaseItemHandler itemFilters = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
private FluidInventory fluidFilters = new FluidInventory(9, new NetworkNodeListener(this)); private FluidInventory fluidFilters = new FluidInventory(9).addListener(new NetworkNodeFluidInventoryListener(this));
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, new NetworkNodeListener(this)/* TODO, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING, ItemUpgrade.TYPE_STACK*/); private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4 /* TODO, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING, ItemUpgrade.TYPE_STACK*/).addListener(new NetworkNodeInventoryListener(this));
private int compare = IComparer.COMPARE_NBT; private int compare = IComparer.COMPARE_NBT;
private int type = IType.ITEMS; private int type = IType.ITEMS;

View File

@@ -10,7 +10,8 @@ import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
import com.raoulvdberge.refinedstorage.inventory.fluid.ProxyFluidHandler; import com.raoulvdberge.refinedstorage.inventory.fluid.ProxyFluidHandler;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.item.UpgradeItem; import com.raoulvdberge.refinedstorage.item.UpgradeItem;
import com.raoulvdberge.refinedstorage.tile.TileFluidInterface; import com.raoulvdberge.refinedstorage.tile.TileFluidInterface;
import com.raoulvdberge.refinedstorage.tile.config.IType; import com.raoulvdberge.refinedstorage.tile.config.IType;
@@ -55,10 +56,10 @@ public class NetworkNodeFluidInterface extends NetworkNode {
private ProxyFluidHandler tank = new ProxyFluidHandler(tankIn, tankOut); private ProxyFluidHandler tank = new ProxyFluidHandler(tankIn, tankOut);
private BaseItemHandler in = new BaseItemHandler(1, new NetworkNodeListener(this)).addValidator(stack -> !StackUtils.getFluid(stack, true).getValue().isEmpty()); private BaseItemHandler in = new BaseItemHandler(1).addListener(new NetworkNodeInventoryListener(this)).addValidator(stack -> !StackUtils.getFluid(stack, true).getValue().isEmpty());
private FluidInventory out = new FluidInventory(1, TANK_CAPACITY, new NetworkNodeListener(this)); private FluidInventory out = new FluidInventory(1, TANK_CAPACITY).addListener(new NetworkNodeFluidInventoryListener(this));
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, new NetworkNodeListener(this)/* TODO, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK, ItemUpgrade.TYPE_CRAFTING*/); private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4 /* TODO, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK, ItemUpgrade.TYPE_CRAFTING*/).addListener(new NetworkNodeInventoryListener(this));
public NetworkNodeFluidInterface(World world, BlockPos pos) { public NetworkNodeFluidInterface(World world, BlockPos pos) {
super(world, pos); super(world, pos);

View File

@@ -9,7 +9,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.storage.externalstorage.ItemExter
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.ProxyItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.ProxyItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.item.UpgradeItem; import com.raoulvdberge.refinedstorage.item.UpgradeItem;
import com.raoulvdberge.refinedstorage.tile.config.IComparable; import com.raoulvdberge.refinedstorage.tile.config.IComparable;
import com.raoulvdberge.refinedstorage.tile.config.IType; import com.raoulvdberge.refinedstorage.tile.config.IType;
@@ -29,14 +29,14 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable {
private static final String NBT_COMPARE = "Compare"; private static final String NBT_COMPARE = "Compare";
private BaseItemHandler importItems = new BaseItemHandler(9, new NetworkNodeListener(this)); private BaseItemHandler importItems = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
private BaseItemHandler exportFilterItems = new BaseItemHandler(9, new NetworkNodeListener(this)); private BaseItemHandler exportFilterItems = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
private BaseItemHandler exportItems = new BaseItemHandler(9, new NetworkNodeListener(this)); private BaseItemHandler exportItems = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
private IItemHandler items = new ProxyItemHandler(importItems, exportItems); private IItemHandler items = new ProxyItemHandler(importItems, exportItems);
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, new NetworkNodeListener(this)/* TODO, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK, ItemUpgrade.TYPE_CRAFTING*/); private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4).addListener(new NetworkNodeInventoryListener(this)/* TODO, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK, ItemUpgrade.TYPE_CRAFTING*/);
private int compare = IComparer.COMPARE_NBT; private int compare = IComparer.COMPARE_NBT;

View File

@@ -5,7 +5,7 @@ import com.raoulvdberge.refinedstorage.RSItems;
import com.raoulvdberge.refinedstorage.api.util.Action; import com.raoulvdberge.refinedstorage.api.util.Action;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.validator.ItemValidator; import com.raoulvdberge.refinedstorage.inventory.item.validator.ItemValidator;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.util.StackUtils; import com.raoulvdberge.refinedstorage.util.StackUtils;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
@@ -19,12 +19,11 @@ import javax.annotation.Nullable;
public class NetworkNodeNetworkTransmitter extends NetworkNode { public class NetworkNodeNetworkTransmitter extends NetworkNode {
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "network_transmitter"); public static final ResourceLocation ID = new ResourceLocation(RS.ID, "network_transmitter");
private BaseItemHandler networkCard = new BaseItemHandler(1, new NetworkNodeListener(this)) { private BaseItemHandler networkCard = new BaseItemHandler(1)
@Override .addValidator(new ItemValidator(RSItems.NETWORK_CARD))
protected void onContentsChanged(int slot) { .addListener(new NetworkNodeInventoryListener(this))
super.onContentsChanged(slot); .addListener((handler, slot, reading) -> {
ItemStack card = handler.getStackInSlot(slot);
ItemStack card = getStackInSlot(slot);
if (card.isEmpty()) { if (card.isEmpty()) {
receiver = null; receiver = null;
@@ -36,8 +35,7 @@ public class NetworkNodeNetworkTransmitter extends NetworkNode {
if (network != null) { if (network != null) {
network.getNodeGraph().invalidate(Action.PERFORM, network.world(), network.getPosition()); network.getNodeGraph().invalidate(Action.PERFORM, network.world(), network.getPosition());
} }
} });
}.addValidator(new ItemValidator(RSItems.NETWORK_CARD));
private BlockPos receiver; private BlockPos receiver;
private int receiverDimension; private int receiverDimension;

View File

@@ -9,7 +9,7 @@ import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.apiimpl.network.security.SecurityCard; import com.raoulvdberge.refinedstorage.apiimpl.network.security.SecurityCard;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.validator.ItemValidator; import com.raoulvdberge.refinedstorage.inventory.item.validator.ItemValidator;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.item.SecurityCardItem; import com.raoulvdberge.refinedstorage.item.SecurityCardItem;
import com.raoulvdberge.refinedstorage.util.StackUtils; import com.raoulvdberge.refinedstorage.util.StackUtils;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@@ -31,11 +31,10 @@ public class NetworkNodeSecurityManager extends NetworkNode implements ISecurity
private List<ISecurityCard> cards = new ArrayList<>(); private List<ISecurityCard> cards = new ArrayList<>();
private ISecurityCard globalCard; private ISecurityCard globalCard;
private BaseItemHandler cardsInv = new BaseItemHandler(9 * 2, new NetworkNodeListener(this)) { private BaseItemHandler cardsInv = new BaseItemHandler(9 * 2)
@Override .addValidator(new ItemValidator(RSItems.SECURITY_CARD))
protected void onContentsChanged(int slot) { .addListener(new NetworkNodeInventoryListener(this))
super.onContentsChanged(slot); .addListener(((handler, slot, reading) -> {
if (!world.isRemote) { if (!world.isRemote) {
invalidate(); invalidate();
} }
@@ -43,9 +42,11 @@ public class NetworkNodeSecurityManager extends NetworkNode implements ISecurity
if (network != null) { if (network != null) {
network.getSecurityManager().invalidate(); network.getSecurityManager().invalidate();
} }
} }));
}.addValidator(new ItemValidator(RSItems.SECURITY_CARD));
private BaseItemHandler editCard = new BaseItemHandler(1, new NetworkNodeListener(this)).addValidator(new ItemValidator(RSItems.SECURITY_CARD)); private BaseItemHandler editCard = new BaseItemHandler(1)
.addValidator(new ItemValidator(RSItems.SECURITY_CARD))
.addListener(new NetworkNodeInventoryListener(this));
public NetworkNodeSecurityManager(World world, BlockPos pos) { public NetworkNodeSecurityManager(World world, BlockPos pos) {
super(world, pos); super(world, pos);

View File

@@ -6,7 +6,7 @@ import com.raoulvdberge.refinedstorage.api.util.Action;
import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.tile.config.IComparable; import com.raoulvdberge.refinedstorage.tile.config.IComparable;
import com.raoulvdberge.refinedstorage.tile.config.RedstoneMode; import com.raoulvdberge.refinedstorage.tile.config.RedstoneMode;
import com.raoulvdberge.refinedstorage.util.StackUtils; import com.raoulvdberge.refinedstorage.util.StackUtils;
@@ -31,14 +31,13 @@ public class NetworkNodeStorageMonitor extends NetworkNode implements IComparabl
private static final String NBT_COMPARE = "Compare"; private static final String NBT_COMPARE = "Compare";
private BaseItemHandler itemFilter = new BaseItemHandler(1, new NetworkNodeListener(this)) { private BaseItemHandler itemFilter = new BaseItemHandler(1)
@Override .addListener(new NetworkNodeInventoryListener(this))
public void onContentsChanged(int slot) { .addListener((handler, slot, reading) -> {
super.onContentsChanged(slot); if (!reading) {
WorldUtils.updateBlock(world, pos); WorldUtils.updateBlock(world, pos);
} }
}; });
private Map<String, Pair<ItemStack, Long>> deposits = new HashMap<>(); private Map<String, Pair<ItemStack, Long>> deposits = new HashMap<>();

View File

@@ -4,7 +4,7 @@ import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.network.IWirelessTransmitter; import com.raoulvdberge.refinedstorage.api.network.IWirelessTransmitter;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.item.UpgradeItem; import com.raoulvdberge.refinedstorage.item.UpgradeItem;
import com.raoulvdberge.refinedstorage.util.StackUtils; import com.raoulvdberge.refinedstorage.util.StackUtils;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
@@ -19,7 +19,7 @@ import javax.annotation.Nullable;
public class NetworkNodeWirelessTransmitter extends NetworkNode implements IWirelessTransmitter { public class NetworkNodeWirelessTransmitter extends NetworkNode implements IWirelessTransmitter {
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "wireless_transmitter"); public static final ResourceLocation ID = new ResourceLocation(RS.ID, "wireless_transmitter");
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, new NetworkNodeListener(this)/* TODO , ItemUpgrade.TYPE_RANGE*/); private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4 /* TODO , ItemUpgrade.TYPE_RANGE*/).addListener(new NetworkNodeInventoryListener(this));
public NetworkNodeWirelessTransmitter(World world, BlockPos pos) { public NetworkNodeWirelessTransmitter(World world, BlockPos pos) {
super(world, pos); super(world, pos);

View File

@@ -14,7 +14,8 @@ import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.ItemStorageCache;
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory; import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.validator.StorageDiskItemValidator; import com.raoulvdberge.refinedstorage.inventory.item.validator.StorageDiskItemValidator;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.tile.DiskDriveTile; import com.raoulvdberge.refinedstorage.tile.DiskDriveTile;
import com.raoulvdberge.refinedstorage.tile.config.*; import com.raoulvdberge.refinedstorage.tile.config.*;
import com.raoulvdberge.refinedstorage.util.AccessTypeUtils; import com.raoulvdberge.refinedstorage.util.AccessTypeUtils;
@@ -66,15 +67,20 @@ public class DiskDriveNetworkNode extends NetworkNode implements IStorageProvide
private int ticksSinceBlockUpdateRequested; private int ticksSinceBlockUpdateRequested;
private boolean blockUpdateRequested; private boolean blockUpdateRequested;
private BaseItemHandler disks = new BaseItemHandler(8, new NetworkNodeListener(this)) { private BaseItemHandler itemFilters = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
@Override private FluidInventory fluidFilters = new FluidInventory(9).addListener(new NetworkNodeFluidInventoryListener(this));
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
private IStorageDisk[] itemDisks = new IStorageDisk[8];
private IStorageDisk[] fluidDisks = new IStorageDisk[8];
private BaseItemHandler disks = new BaseItemHandler(8)
.addValidator(new StorageDiskItemValidator())
.addListener(new NetworkNodeInventoryListener(this))
.addListener((handler, slot, reading) -> {
if (!world.isRemote) { if (!world.isRemote) {
StackUtils.createStorages( StackUtils.createStorages(
(ServerWorld) world, (ServerWorld) world,
getStackInSlot(slot), handler.getStackInSlot(slot),
slot, slot,
itemDisks, itemDisks,
fluidDisks, fluidDisks,
@@ -87,18 +93,11 @@ public class DiskDriveNetworkNode extends NetworkNode implements IStorageProvide
network.getFluidStorageCache().invalidate(); network.getFluidStorageCache().invalidate();
} }
if (!isReading()) { if (!reading) {
WorldUtils.updateBlock(world, pos); WorldUtils.updateBlock(world, pos);
} }
} }
} });
}.addValidator(new StorageDiskItemValidator());
private BaseItemHandler itemFilters = new BaseItemHandler(9, new NetworkNodeListener(this));
private FluidInventory fluidFilters = new FluidInventory(9, new NetworkNodeListener(this));
private IStorageDisk[] itemDisks = new IStorageDisk[8];
private IStorageDisk[] fluidDisks = new IStorageDisk[8];
private AccessType accessType = AccessType.INSERT_EXTRACT; private AccessType accessType = AccessType.INSERT_EXTRACT;
private int priority = 0; private int priority = 0;

View File

@@ -13,7 +13,9 @@ import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.ProxyItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.ProxyItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.validator.StorageDiskItemValidator; import com.raoulvdberge.refinedstorage.inventory.item.validator.StorageDiskItemValidator;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.item.UpgradeItem;
import com.raoulvdberge.refinedstorage.tile.TileDiskManipulator; import com.raoulvdberge.refinedstorage.tile.TileDiskManipulator;
import com.raoulvdberge.refinedstorage.tile.config.IComparable; import com.raoulvdberge.refinedstorage.tile.config.IComparable;
import com.raoulvdberge.refinedstorage.tile.config.IType; import com.raoulvdberge.refinedstorage.tile.config.IType;
@@ -28,8 +30,6 @@ import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld; import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.fluids.FluidAttributes; import net.minecraftforge.fluids.FluidAttributes;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fml.LogicalSide;
import net.minecraftforge.fml.common.thread.EffectiveSide;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.IItemHandlerModifiable;
import net.minecraftforge.items.wrapper.CombinedInvWrapper; import net.minecraftforge.items.wrapper.CombinedInvWrapper;
@@ -58,7 +58,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
private IStorageDisk<ItemStack>[] itemDisks = new IStorageDisk[6]; private IStorageDisk<ItemStack>[] itemDisks = new IStorageDisk[6];
private IStorageDisk<FluidStack>[] fluidDisks = new IStorageDisk[6]; private IStorageDisk<FluidStack>[] fluidDisks = new IStorageDisk[6];
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, new NetworkNodeListener(this)/* TODO, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK*/) { private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4, UpgradeItem.Type.SPEED, UpgradeItem.Type.STACK) {
@Override @Override
public int getStackInteractCount() { public int getStackInteractCount() {
int count = super.getStackInteractCount(); int count = super.getStackInteractCount();
@@ -69,17 +69,16 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
return count; return count;
} }
}; }.addListener(new NetworkNodeInventoryListener(this));
private BaseItemHandler inputDisks = new BaseItemHandler(3, new NetworkNodeListener(this)) { private BaseItemHandler inputDisks = new BaseItemHandler(3)
@Override .addValidator(new StorageDiskItemValidator())
protected void onContentsChanged(int slot) { .addListener(new NetworkNodeInventoryListener(this))
super.onContentsChanged(slot); .addListener((handler, slot, reading) -> {
if (!world.isRemote) {
if (EffectiveSide.get() == LogicalSide.SERVER) { // TODO: correct?
StackUtils.createStorages( StackUtils.createStorages(
(ServerWorld) world, (ServerWorld) world,
getStackInSlot(slot), handler.getStackInSlot(slot),
slot, slot,
itemDisks, itemDisks,
fluidDisks, fluidDisks,
@@ -89,18 +88,16 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
WorldUtils.updateBlock(world, pos); WorldUtils.updateBlock(world, pos);
} }
} });
}.addValidator(new StorageDiskItemValidator());
private BaseItemHandler outputDisks = new BaseItemHandler(3, new NetworkNodeListener(this)) { private BaseItemHandler outputDisks = new BaseItemHandler(3)
@Override .addValidator(new StorageDiskItemValidator())
protected void onContentsChanged(int slot) { .addListener(new NetworkNodeInventoryListener(this))
super.onContentsChanged(slot); .addListener(((handler, slot, reading) -> {
if (!world.isRemote) {
if (EffectiveSide.get() == LogicalSide.SERVER) { // TODO: correct?
StackUtils.createStorages( StackUtils.createStorages(
(ServerWorld) world, (ServerWorld) world,
getStackInSlot(slot), handler.getStackInSlot(slot),
3 + slot, 3 + slot,
itemDisks, itemDisks,
fluidDisks, fluidDisks,
@@ -110,8 +107,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
WorldUtils.updateBlock(world, pos); WorldUtils.updateBlock(world, pos);
} }
} }));
}.addValidator(new StorageDiskItemValidator());
private ProxyItemHandler disks = new ProxyItemHandler(inputDisks, outputDisks); private ProxyItemHandler disks = new ProxyItemHandler(inputDisks, outputDisks);
@@ -119,8 +115,8 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
super(world, pos); super(world, pos);
} }
private BaseItemHandler itemFilters = new BaseItemHandler(9, new NetworkNodeListener(this)); private BaseItemHandler itemFilters = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
private FluidInventory fluidFilters = new FluidInventory(9, new NetworkNodeListener(this)); private FluidInventory fluidFilters = new FluidInventory(9).addListener(new NetworkNodeFluidInventoryListener(this));
@Override @Override
public int getEnergyUsage() { public int getEnergyUsage() {

View File

@@ -14,7 +14,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode;
import com.raoulvdberge.refinedstorage.apiimpl.storage.FluidStorageType; import com.raoulvdberge.refinedstorage.apiimpl.storage.FluidStorageType;
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.FluidStorageCache; import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.FluidStorageCache;
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory; import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener;
import com.raoulvdberge.refinedstorage.tile.FluidStorageTile; import com.raoulvdberge.refinedstorage.tile.FluidStorageTile;
import com.raoulvdberge.refinedstorage.tile.config.IAccessType; import com.raoulvdberge.refinedstorage.tile.config.IAccessType;
import com.raoulvdberge.refinedstorage.tile.config.IComparable; import com.raoulvdberge.refinedstorage.tile.config.IComparable;
@@ -49,7 +49,7 @@ public class FluidStorageNetworkNode extends NetworkNode implements IStorageScre
private static final String NBT_FILTERS = "Filters"; private static final String NBT_FILTERS = "Filters";
public static final String NBT_ID = "Id"; public static final String NBT_ID = "Id";
private FluidInventory filters = new FluidInventory(9, new NetworkNodeListener(this)); private FluidInventory filters = new FluidInventory(9).addListener(new NetworkNodeFluidInventoryListener(this));
private FluidStorageType type; private FluidStorageType type;

View File

@@ -14,7 +14,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode;
import com.raoulvdberge.refinedstorage.apiimpl.storage.ItemStorageType; import com.raoulvdberge.refinedstorage.apiimpl.storage.ItemStorageType;
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.ItemStorageCache; import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.ItemStorageCache;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.tile.StorageTile; import com.raoulvdberge.refinedstorage.tile.StorageTile;
import com.raoulvdberge.refinedstorage.tile.config.IAccessType; import com.raoulvdberge.refinedstorage.tile.config.IAccessType;
import com.raoulvdberge.refinedstorage.tile.config.IComparable; import com.raoulvdberge.refinedstorage.tile.config.IComparable;
@@ -49,7 +49,7 @@ public class StorageNetworkNode extends NetworkNode implements IStorageScreen, I
private static final String NBT_MODE = "Mode"; private static final String NBT_MODE = "Mode";
public static final String NBT_ID = "Id"; public static final String NBT_ID = "Id";
private BaseItemHandler filters = new BaseItemHandler(9, new NetworkNodeListener(this)); private BaseItemHandler filters = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
private final ItemStorageType type; private final ItemStorageType type;

View File

@@ -134,8 +134,7 @@ public class CrafterManagerContainer extends BaseContainer {
if (newContainerData == null) { // We're only resizing, get the previous inventory... if (newContainerData == null) { // We're only resizing, get the previous inventory...
dummy = dummyInventories.get(category.getKey()); dummy = dummyInventories.get(category.getKey());
} else { } else {
dummyInventories.put(category.getKey(), dummy = new BaseItemHandler(category.getValue(), slot -> { dummyInventories.put(category.getKey(), dummy = new BaseItemHandler(category.getValue()) {
}) {
@Override @Override
public int getSlotLimit(int slot) { public int getSlotLimit(int slot) {
return 1; return 1;

View File

@@ -1,23 +1,23 @@
package com.raoulvdberge.refinedstorage.inventory.fluid; package com.raoulvdberge.refinedstorage.inventory.fluid;
import com.raoulvdberge.refinedstorage.inventory.listener.InventoryListener;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import java.util.ArrayList;
import java.util.function.Consumer; import java.util.List;
public class FluidInventory { public class FluidInventory {
private static final String NBT_SLOT = "Slot_%d"; private static final String NBT_SLOT = "Slot_%d";
private final List<InventoryListener<FluidInventory>> listeners = new ArrayList<>();
private FluidStack[] fluids; private FluidStack[] fluids;
private int maxAmount; private int maxAmount;
private boolean empty = true; private boolean empty = true;
@Nullable public FluidInventory(int size, int maxAmount) {
protected Consumer<Integer> listener;
public FluidInventory(int size, int maxAmount, @Nullable Consumer<Integer> listener) {
this.fluids = new FluidStack[size]; this.fluids = new FluidStack[size];
for (int i = 0; i < size; ++i) { for (int i = 0; i < size; ++i) {
@@ -25,15 +25,16 @@ public class FluidInventory {
} }
this.maxAmount = maxAmount; this.maxAmount = maxAmount;
this.listener = listener;
}
public FluidInventory(int size, @Nullable Consumer<Integer> listener) {
this(size, Integer.MAX_VALUE, listener);
} }
public FluidInventory(int size) { public FluidInventory(int size) {
this(size, Integer.MAX_VALUE, null); this(size, Integer.MAX_VALUE);
}
public FluidInventory addListener(InventoryListener<FluidInventory> listener) {
listeners.add(listener);
return this;
} }
public int getSlots() { public int getSlots() {
@@ -54,19 +55,13 @@ public class FluidInventory {
} }
public void setFluid(int slot, @Nonnull FluidStack stack) { public void setFluid(int slot, @Nonnull FluidStack stack) {
if (stack == null) {
throw new IllegalArgumentException("Stack can't be null");
}
if (stack.getAmount() > maxAmount) { if (stack.getAmount() > maxAmount) {
throw new IllegalArgumentException("Fluid size is invalid (given: " + stack.getAmount() + ", max size: " + maxAmount + ")"); throw new IllegalArgumentException("Fluid size is invalid (given: " + stack.getAmount() + ", max size: " + maxAmount + ")");
} }
fluids[slot] = stack; fluids[slot] = stack;
if (listener != null) { listeners.forEach(l -> l.onChanged(this, slot, false));
listener.accept(slot);
}
updateEmptyState(); updateEmptyState();
} }

View File

@@ -8,15 +8,15 @@ import net.minecraftforge.fluids.FluidStack;
public class FluidInventoryFilter extends FluidInventory { public class FluidInventoryFilter extends FluidInventory {
public FluidInventoryFilter(ItemStack stack) { public FluidInventoryFilter(ItemStack stack) {
super(27, Integer.MAX_VALUE, null); super(27, Integer.MAX_VALUE);
this.listener = slot -> { this.addListener((handler, slot, reading) -> {
if (!stack.hasTag()) { if (!stack.hasTag()) {
stack.setTag(new CompoundNBT()); stack.setTag(new CompoundNBT());
} }
stack.getTag().put(FilterItem.NBT_FLUID_FILTERS, writeToNbt()); stack.getTag().put(FilterItem.NBT_FLUID_FILTERS, writeToNbt());
}; });
if (stack.hasTag() && stack.getTag().contains(FilterItem.NBT_FLUID_FILTERS)) { if (stack.hasTag() && stack.getTag().contains(FilterItem.NBT_FLUID_FILTERS)) {
readFromNbt(stack.getTag().getCompound(FilterItem.NBT_FLUID_FILTERS)); readFromNbt(stack.getTag().getCompound(FilterItem.NBT_FLUID_FILTERS));

View File

@@ -7,15 +7,15 @@ import net.minecraftforge.fluids.FluidStack;
public class FluidInventoryFilterIcon extends FluidInventory { public class FluidInventoryFilterIcon extends FluidInventory {
public FluidInventoryFilterIcon(ItemStack stack) { public FluidInventoryFilterIcon(ItemStack stack) {
super(1, Integer.MAX_VALUE, null); super(1, Integer.MAX_VALUE);
this.listener = slot -> { this.addListener((handler, slot, reading) -> {
if (!stack.hasTag()) { if (!stack.hasTag()) {
stack.setTag(new CompoundNBT()); stack.setTag(new CompoundNBT());
} }
FilterItem.setFluidIcon(stack, getFluid(slot)); FilterItem.setFluidIcon(stack, getFluid(slot));
}; });
FluidStack icon = FilterItem.getFluidIcon(stack); FluidStack icon = FilterItem.getFluidIcon(stack);
if (icon != null) { if (icon != null) {

View File

@@ -1,28 +1,24 @@
package com.raoulvdberge.refinedstorage.inventory.item; package com.raoulvdberge.refinedstorage.inventory.item;
import com.raoulvdberge.refinedstorage.inventory.listener.InventoryListener;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.ItemStackHandler;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate; import java.util.function.Predicate;
// TODO Builder system for server and clientside listeners.
public class BaseItemHandler extends ItemStackHandler { public class BaseItemHandler extends ItemStackHandler {
private final Consumer<Integer> listener; private final List<InventoryListener<BaseItemHandler>> listeners = new ArrayList<>();
private final List<Predicate<ItemStack>> validators = new ArrayList<>(); private final List<Predicate<ItemStack>> validators = new ArrayList<>();
private boolean empty = true; private boolean empty = true;
private boolean reading; private boolean reading;
public BaseItemHandler(int size, @Nullable Consumer<Integer> listener) { public BaseItemHandler(int size) {
super(size); super(size);
this.listener = listener;
} }
public BaseItemHandler addValidator(Predicate<ItemStack> validator) { public BaseItemHandler addValidator(Predicate<ItemStack> validator) {
@@ -31,6 +27,12 @@ public class BaseItemHandler extends ItemStackHandler {
return this; return this;
} }
public BaseItemHandler addListener(InventoryListener<BaseItemHandler> listener) {
listeners.add(listener);
return this;
}
@Override @Override
@Nonnull @Nonnull
public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) {
@@ -51,11 +53,8 @@ public class BaseItemHandler extends ItemStackHandler {
protected void onContentsChanged(int slot) { protected void onContentsChanged(int slot) {
super.onContentsChanged(slot); super.onContentsChanged(slot);
if (!reading && listener != null) {
listener.accept(slot);
}
this.empty = stacks.stream().allMatch(ItemStack::isEmpty); this.empty = stacks.stream().allMatch(ItemStack::isEmpty);
this.listeners.forEach(l -> l.onChanged(this, slot, reading));
} }
@Override @Override
@@ -72,8 +71,4 @@ public class BaseItemHandler extends ItemStackHandler {
public void setReading(boolean reading) { public void setReading(boolean reading) {
this.reading = reading; this.reading = reading;
} }
public boolean isReading() {
return reading;
}
} }

View File

@@ -16,22 +16,20 @@ import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fml.LogicalSide; import net.minecraftforge.fml.LogicalSide;
import net.minecraftforge.fml.common.thread.EffectiveSide; import net.minecraftforge.fml.common.thread.EffectiveSide;
import javax.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.Consumer;
public class FilterItemHandler extends BaseItemHandler { public class FilterItemHandler extends BaseItemHandler {
private List<IFilter> filters; private List<IFilter> filters;
private List<IGridTab> tabs; private List<IGridTab> tabs;
public FilterItemHandler(List<IFilter> filters, List<IGridTab> tabs, @Nullable Consumer<Integer> listener) { public FilterItemHandler(List<IFilter> filters, List<IGridTab> tabs) {
super(4, listener); super(4);
this.addValidator(new ItemValidator(RSItems.FILTER));
this.filters = filters; this.filters = filters;
this.tabs = tabs; this.tabs = tabs;
this.addValidator(new ItemValidator(RSItems.FILTER));
} }
@Override @Override

View File

@@ -4,12 +4,9 @@ import com.raoulvdberge.refinedstorage.inventory.item.validator.UpgradeItemValid
import com.raoulvdberge.refinedstorage.item.UpgradeItem; import com.raoulvdberge.refinedstorage.item.UpgradeItem;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import javax.annotation.Nullable;
import java.util.function.Consumer;
public class UpgradeItemHandler extends BaseItemHandler { public class UpgradeItemHandler extends BaseItemHandler {
public UpgradeItemHandler(int size, @Nullable Consumer<Integer> listener, UpgradeItem.Type... supportedUpgrades) { public UpgradeItemHandler(int size, UpgradeItem.Type... supportedUpgrades) {
super(size, listener); super(size);
for (int i = 0; i < supportedUpgrades.length; ++i) { for (int i = 0; i < supportedUpgrades.length; ++i) {
addValidator(new UpgradeItemValidator(supportedUpgrades[i])); addValidator(new UpgradeItemValidator(supportedUpgrades[i]));

View File

@@ -0,0 +1,5 @@
package com.raoulvdberge.refinedstorage.inventory.listener;
public interface InventoryListener<T> {
void onChanged(T handler, int slot, boolean reading);
}

View File

@@ -0,0 +1,19 @@
package com.raoulvdberge.refinedstorage.inventory.listener;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
public class NetworkNodeFluidInventoryListener implements InventoryListener<FluidInventory> {
private INetworkNode node;
public NetworkNodeFluidInventoryListener(INetworkNode node) {
this.node = node;
}
@Override
public void onChanged(FluidInventory handler, int slot, boolean reading) {
if (!reading) {
node.markDirty();
}
}
}

View File

@@ -0,0 +1,19 @@
package com.raoulvdberge.refinedstorage.inventory.listener;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
public class NetworkNodeInventoryListener implements InventoryListener<BaseItemHandler> {
private INetworkNode node;
public NetworkNodeInventoryListener(INetworkNode node) {
this.node = node;
}
@Override
public void onChanged(BaseItemHandler handler, int slot, boolean reading) {
if (!reading) {
node.markDirty();
}
}
}

View File

@@ -1,18 +0,0 @@
package com.raoulvdberge.refinedstorage.inventory.listener;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
import java.util.function.Consumer;
public class NetworkNodeListener implements Consumer<Integer> {
private INetworkNode node;
public NetworkNodeListener(INetworkNode node) {
this.node = node;
}
@Override
public void accept(Integer slot) {
node.markDirty();
}
}

View File

@@ -0,0 +1,19 @@
package com.raoulvdberge.refinedstorage.inventory.listener;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import net.minecraft.tileentity.TileEntity;
public class TileInventoryListener implements InventoryListener<BaseItemHandler> {
private TileEntity tile;
public TileInventoryListener(TileEntity tile) {
this.tile = tile;
}
@Override
public void onChanged(BaseItemHandler handler, int slot, boolean reading) {
if (!reading) {
tile.markDirty();
}
}
}

View File

@@ -1,18 +0,0 @@
package com.raoulvdberge.refinedstorage.inventory.listener;
import net.minecraft.tileentity.TileEntity;
import java.util.function.Consumer;
public class TileListener implements Consumer<Integer> {
private TileEntity tile;
public TileListener(TileEntity tile) {
this.tile = tile;
}
@Override
public void accept(Integer slot) {
tile.markDirty();
}
}

View File

@@ -47,18 +47,14 @@ public class WirelessFluidGrid implements IGridNetworkAware {
private List<IFilter> filters = new ArrayList<>(); private List<IFilter> filters = new ArrayList<>();
private List<IGridTab> tabs = new ArrayList<>(); private List<IGridTab> tabs = new ArrayList<>();
private FilterItemHandler filter = new FilterItemHandler(filters, tabs, null) { private FilterItemHandler filter = (FilterItemHandler) new FilterItemHandler(filters, tabs)
@Override .addListener(((handler, slot, reading) -> {
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
if (!stack.hasTag()) { if (!stack.hasTag()) {
stack.setTag(new CompoundNBT()); stack.setTag(new CompoundNBT());
} }
StackUtils.writeItems(this, 0, stack.getTag()); StackUtils.writeItems(handler, 0, stack.getTag());
} }));
};
public WirelessFluidGrid(ItemStack stack) { public WirelessFluidGrid(ItemStack stack) {
/* TODO this.networkDimension = ItemWirelessFluidGrid.getDimensionId(stack); /* TODO this.networkDimension = ItemWirelessFluidGrid.getDimensionId(stack);

View File

@@ -47,18 +47,14 @@ public class WirelessGrid implements IGridNetworkAware {
private List<IFilter> filters = new ArrayList<>(); private List<IFilter> filters = new ArrayList<>();
private List<IGridTab> tabs = new ArrayList<>(); private List<IGridTab> tabs = new ArrayList<>();
private FilterItemHandler filter = new FilterItemHandler(filters, tabs, null) { private FilterItemHandler filter = (FilterItemHandler) new FilterItemHandler(filters, tabs)
@Override .addListener((handler, slot, reading) -> {
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
if (!stack.hasTag()) { if (!stack.hasTag()) {
stack.setTag(new CompoundNBT()); stack.setTag(new CompoundNBT());
} }
StackUtils.writeItems(this, 0, stack.getTag()); StackUtils.writeItems(handler, 0, stack.getTag());
} });
};
public WirelessGrid(ItemStack stack) { public WirelessGrid(ItemStack stack) {
/* TODO this.networkDimension = ItemWirelessGrid.getDimensionId(stack); /* TODO this.networkDimension = ItemWirelessGrid.getDimensionId(stack);

View File

@@ -79,26 +79,21 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer
private List<IFilter> filters = new ArrayList<>(); private List<IFilter> filters = new ArrayList<>();
private List<IGridTab> tabs = new ArrayList<>(); private List<IGridTab> tabs = new ArrayList<>();
private FilterItemHandler filter = new FilterItemHandler(filters, tabs, null) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
private FilterItemHandler filter = (FilterItemHandler) new FilterItemHandler(filters, tabs)
.addListener((handler, slot, reading) -> {
if (!stack.hasTag()) { if (!stack.hasTag()) {
stack.setTag(new CompoundNBT()); stack.setTag(new CompoundNBT());
} }
StackUtils.writeItems(this, 0, stack.getTag()); StackUtils.writeItems(handler, 0, stack.getTag());
} });
};
private BaseItemHandler disk = new BaseItemHandler(1, slot -> {
}) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
if (/*TODO FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER*/false) { private BaseItemHandler disk = new BaseItemHandler(1)
ItemStack diskStack = getStackInSlot(slot); .addValidator(new StorageDiskItemValidator())
.addListener(((handler, slot, reading) -> {
if (!player.world.isRemote) {
ItemStack diskStack = handler.getStackInSlot(slot);
if (diskStack.isEmpty()) { if (diskStack.isEmpty()) {
storage = null; storage = null;
@@ -131,10 +126,9 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer
cache.invalidate(); cache.invalidate();
} }
StackUtils.writeItems(this, 4, stack.getTag()); StackUtils.writeItems(handler, 4, stack.getTag());
} }
} }));
}.addValidator(new StorageDiskItemValidator());
public PortableGrid(PlayerEntity player, ItemStack stack) { public PortableGrid(PlayerEntity player, ItemStack stack) {
this.player = player; this.player = player;

View File

@@ -37,7 +37,7 @@ import com.raoulvdberge.refinedstorage.block.enums.PortableGridType;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.FilterItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.FilterItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.validator.StorageDiskItemValidator; import com.raoulvdberge.refinedstorage.inventory.item.validator.StorageDiskItemValidator;
import com.raoulvdberge.refinedstorage.inventory.listener.TileListener; import com.raoulvdberge.refinedstorage.inventory.listener.TileInventoryListener;
import com.raoulvdberge.refinedstorage.screen.BaseScreen; import com.raoulvdberge.refinedstorage.screen.BaseScreen;
import com.raoulvdberge.refinedstorage.screen.grid.GridScreen; import com.raoulvdberge.refinedstorage.screen.grid.GridScreen;
import com.raoulvdberge.refinedstorage.tile.BaseTile; import com.raoulvdberge.refinedstorage.tile.BaseTile;
@@ -139,17 +139,16 @@ public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid,
private List<IFilter> filters = new ArrayList<>(); private List<IFilter> filters = new ArrayList<>();
private List<IGridTab> tabs = new ArrayList<>(); private List<IGridTab> tabs = new ArrayList<>();
private FilterItemHandler filter = new FilterItemHandler(filters, tabs, new TileListener(this));
private BaseItemHandler disk = new BaseItemHandler(1, new TileListener(this)) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
private FilterItemHandler filter = (FilterItemHandler) new FilterItemHandler(filters, tabs).addListener(new TileInventoryListener(this));
private BaseItemHandler disk = new BaseItemHandler(1)
.addValidator(new StorageDiskItemValidator())
.addListener(new TileInventoryListener(this))
.addListener((handler, slot, reading) -> {
if (world != null && !world.isRemote) { if (world != null && !world.isRemote) {
loadStorage(); loadStorage();
} }
} });
}.addValidator(new StorageDiskItemValidator());
@Nullable @Nullable
private IStorageDisk storage; private IStorageDisk storage;