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.inventory.fluid.FluidInventory;
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.config.*;
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_FLUID_FILTERS = "FluidFilters";
private BaseItemHandler itemFilters = new BaseItemHandler(9, new NetworkNodeListener(this));
private FluidInventory fluidFilters = new FluidInventory(9, new NetworkNodeListener(this));
private BaseItemHandler itemFilters = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
private FluidInventory fluidFilters = new FluidInventory(9).addListener(new NetworkNodeFluidInventoryListener(this));
private int priority = 0;
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.FilterItemHandler;
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.tile.config.IType;
import com.raoulvdberge.refinedstorage.tile.data.TileDataManager;
@@ -89,40 +90,14 @@ public class GridNetworkNode extends NetworkNode implements IGridNetworkAware, I
private ICraftingRecipe currentRecipe;
private CraftingInventory matrix = new CraftingInventory(craftingContainer, 3, 3);
private CraftResultInventory result = new CraftResultInventory();
private BaseItemHandler processingMatrix = new BaseItemHandler(9 * 2, new NetworkNodeListener(this));
private FluidInventory processingMatrixFluids = new FluidInventory(9 * 2, FluidAttributes.BUCKET_VOLUME * 64, 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).addListener(new NetworkNodeFluidInventoryListener(this));
private boolean reading;
private Set<ICraftingGridListener> craftingListeners = new HashSet<>();
private BaseItemHandler patterns = new BaseItemHandler(2, new NetworkNodeListener(this)) {
@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));
}
}
}
}
private BaseItemHandler patterns = new BaseItemHandler(2) {
@Override
public int getSlotLimit(int slot) {
return slot == 1 ? 1 : super.getSlotLimit(slot);
@@ -142,10 +117,36 @@ public class GridNetworkNode extends NetworkNode implements IGridNetworkAware, I
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<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;

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.item.BaseItemHandler;
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.tile.DiskDriveTile;
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_FLUID_FILTERS = "FLuidFilters";
private BaseItemHandler itemFilters = new BaseItemHandler(9, new NetworkNodeListener(this));
private FluidInventory fluidFilters = new FluidInventory(9, new NetworkNodeListener(this));
private BaseItemHandler itemFilters = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(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 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.item.BaseItemHandler;
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.tile.TileConstructor;
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 BaseItemHandler itemFilters = new BaseItemHandler(1, new NetworkNodeListener(this));
private FluidInventory fluidFilters = new FluidInventory(1, new NetworkNodeListener(this));
private BaseItemHandler itemFilters = new BaseItemHandler(1).addListener(new NetworkNodeInventoryListener(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 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.UpgradeItemHandler;
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.util.StackUtils;
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_WAS_POWERED = "WasPowered";
private BaseItemHandler patternsInventory = new BaseItemHandler(9, new NetworkNodeListener(this)) {
private BaseItemHandler patternsInventory = new BaseItemHandler(9) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
public int getSlotLimit(int slot) {
return 1;
}
}
.addValidator(new PatternItemValidator(world))
.addListener(new NetworkNodeInventoryListener(this))
.addListener((handler, slot, reading) -> {
if (!reading) {
if (!world.isRemote) {
invalidate();
@@ -73,17 +77,11 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
network.getCraftingManager().rebuild();
}
}
}
@Override
public int getSlotLimit(int slot) {
return 1;
}
}.addValidator(new PatternItemValidator(world));
});
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.
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.item.BaseItemHandler;
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.config.IComparable;
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 BaseItemHandler itemFilters = new BaseItemHandler(9, new NetworkNodeListener(this));
private FluidInventory fluidFilters = new FluidInventory(9, new NetworkNodeListener(this));
private BaseItemHandler itemFilters = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(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 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.inventory.fluid.FluidInventory;
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.config.IComparable;
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_FLUID_FILTERS = "FluidFilters";
private BaseItemHandler itemFilters = new BaseItemHandler(1, new NetworkNodeListener(this));
private FluidInventory fluidFilters = new FluidInventory(1, new NetworkNodeListener(this));
private BaseItemHandler itemFilters = new BaseItemHandler(1).addListener(new NetworkNodeInventoryListener(this));
private FluidInventory fluidFilters = new FluidInventory(1).addListener(new NetworkNodeFluidInventoryListener(this));
private int compare = IComparer.COMPARE_NBT;
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.item.BaseItemHandler;
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.tile.TileExporter;
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_FLUID_FILTERS = "FluidFilters";
private BaseItemHandler itemFilters = new BaseItemHandler(9, new NetworkNodeListener(this));
private FluidInventory fluidFilters = new FluidInventory(9, new NetworkNodeListener(this));
private BaseItemHandler itemFilters = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(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 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.item.BaseItemHandler;
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.tile.TileFluidInterface;
import com.raoulvdberge.refinedstorage.tile.config.IType;
@@ -55,10 +56,10 @@ public class NetworkNodeFluidInterface extends NetworkNode {
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 FluidInventory out = new FluidInventory(1, TANK_CAPACITY, new NetworkNodeListener(this));
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).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) {
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.ProxyItemHandler;
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.tile.config.IComparable;
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 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 exportItems = new BaseItemHandler(9, new NetworkNodeListener(this));
private BaseItemHandler exportFilterItems = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
private BaseItemHandler exportItems = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
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;

View File

@@ -5,7 +5,7 @@ import com.raoulvdberge.refinedstorage.RSItems;
import com.raoulvdberge.refinedstorage.api.util.Action;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
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 net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
@@ -19,12 +19,11 @@ import javax.annotation.Nullable;
public class NetworkNodeNetworkTransmitter extends NetworkNode {
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "network_transmitter");
private BaseItemHandler networkCard = new BaseItemHandler(1, new NetworkNodeListener(this)) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
ItemStack card = getStackInSlot(slot);
private BaseItemHandler networkCard = new BaseItemHandler(1)
.addValidator(new ItemValidator(RSItems.NETWORK_CARD))
.addListener(new NetworkNodeInventoryListener(this))
.addListener((handler, slot, reading) -> {
ItemStack card = handler.getStackInSlot(slot);
if (card.isEmpty()) {
receiver = null;
@@ -36,8 +35,7 @@ public class NetworkNodeNetworkTransmitter extends NetworkNode {
if (network != null) {
network.getNodeGraph().invalidate(Action.PERFORM, network.world(), network.getPosition());
}
}
}.addValidator(new ItemValidator(RSItems.NETWORK_CARD));
});
private BlockPos receiver;
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.inventory.item.BaseItemHandler;
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.util.StackUtils;
import net.minecraft.item.ItemStack;
@@ -31,11 +31,10 @@ public class NetworkNodeSecurityManager extends NetworkNode implements ISecurity
private List<ISecurityCard> cards = new ArrayList<>();
private ISecurityCard globalCard;
private BaseItemHandler cardsInv = new BaseItemHandler(9 * 2, new NetworkNodeListener(this)) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
private BaseItemHandler cardsInv = new BaseItemHandler(9 * 2)
.addValidator(new ItemValidator(RSItems.SECURITY_CARD))
.addListener(new NetworkNodeInventoryListener(this))
.addListener(((handler, slot, reading) -> {
if (!world.isRemote) {
invalidate();
}
@@ -43,9 +42,11 @@ public class NetworkNodeSecurityManager extends NetworkNode implements ISecurity
if (network != null) {
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) {
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.apiimpl.API;
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.RedstoneMode;
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 BaseItemHandler itemFilter = new BaseItemHandler(1, new NetworkNodeListener(this)) {
@Override
public void onContentsChanged(int slot) {
super.onContentsChanged(slot);
private BaseItemHandler itemFilter = new BaseItemHandler(1)
.addListener(new NetworkNodeInventoryListener(this))
.addListener((handler, slot, reading) -> {
if (!reading) {
WorldUtils.updateBlock(world, pos);
}
};
});
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.inventory.item.BaseItemHandler;
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.util.StackUtils;
import net.minecraft.nbt.CompoundNBT;
@@ -19,7 +19,7 @@ import javax.annotation.Nullable;
public class NetworkNodeWirelessTransmitter extends NetworkNode implements IWirelessTransmitter {
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) {
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.item.BaseItemHandler;
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.config.*;
import com.raoulvdberge.refinedstorage.util.AccessTypeUtils;
@@ -66,15 +67,20 @@ public class DiskDriveNetworkNode extends NetworkNode implements IStorageProvide
private int ticksSinceBlockUpdateRequested;
private boolean blockUpdateRequested;
private BaseItemHandler disks = new BaseItemHandler(8, new NetworkNodeListener(this)) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
private BaseItemHandler itemFilters = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
private FluidInventory fluidFilters = new FluidInventory(9).addListener(new NetworkNodeFluidInventoryListener(this));
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) {
StackUtils.createStorages(
(ServerWorld) world,
getStackInSlot(slot),
handler.getStackInSlot(slot),
slot,
itemDisks,
fluidDisks,
@@ -87,18 +93,11 @@ public class DiskDriveNetworkNode extends NetworkNode implements IStorageProvide
network.getFluidStorageCache().invalidate();
}
if (!isReading()) {
if (!reading) {
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 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.UpgradeItemHandler;
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.config.IComparable;
import com.raoulvdberge.refinedstorage.tile.config.IType;
@@ -28,8 +30,6 @@ import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.fluids.FluidAttributes;
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.IItemHandlerModifiable;
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<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
public int getStackInteractCount() {
int count = super.getStackInteractCount();
@@ -69,17 +69,16 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
return count;
}
};
}.addListener(new NetworkNodeInventoryListener(this));
private BaseItemHandler inputDisks = new BaseItemHandler(3, new NetworkNodeListener(this)) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
if (EffectiveSide.get() == LogicalSide.SERVER) { // TODO: correct?
private BaseItemHandler inputDisks = new BaseItemHandler(3)
.addValidator(new StorageDiskItemValidator())
.addListener(new NetworkNodeInventoryListener(this))
.addListener((handler, slot, reading) -> {
if (!world.isRemote) {
StackUtils.createStorages(
(ServerWorld) world,
getStackInSlot(slot),
handler.getStackInSlot(slot),
slot,
itemDisks,
fluidDisks,
@@ -89,18 +88,16 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
WorldUtils.updateBlock(world, pos);
}
}
}.addValidator(new StorageDiskItemValidator());
});
private BaseItemHandler outputDisks = new BaseItemHandler(3, new NetworkNodeListener(this)) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
if (EffectiveSide.get() == LogicalSide.SERVER) { // TODO: correct?
private BaseItemHandler outputDisks = new BaseItemHandler(3)
.addValidator(new StorageDiskItemValidator())
.addListener(new NetworkNodeInventoryListener(this))
.addListener(((handler, slot, reading) -> {
if (!world.isRemote) {
StackUtils.createStorages(
(ServerWorld) world,
getStackInSlot(slot),
handler.getStackInSlot(slot),
3 + slot,
itemDisks,
fluidDisks,
@@ -110,8 +107,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
WorldUtils.updateBlock(world, pos);
}
}
}.addValidator(new StorageDiskItemValidator());
}));
private ProxyItemHandler disks = new ProxyItemHandler(inputDisks, outputDisks);
@@ -119,8 +115,8 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
super(world, pos);
}
private BaseItemHandler itemFilters = new BaseItemHandler(9, new NetworkNodeListener(this));
private FluidInventory fluidFilters = new FluidInventory(9, new NetworkNodeListener(this));
private BaseItemHandler itemFilters = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
private FluidInventory fluidFilters = new FluidInventory(9).addListener(new NetworkNodeFluidInventoryListener(this));
@Override
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.cache.FluidStorageCache;
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.config.IAccessType;
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";
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;

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.cache.ItemStorageCache;
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.config.IAccessType;
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";
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;

View File

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

View File

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

View File

@@ -8,15 +8,15 @@ import net.minecraftforge.fluids.FluidStack;
public class FluidInventoryFilter extends FluidInventory {
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()) {
stack.setTag(new CompoundNBT());
}
stack.getTag().put(FilterItem.NBT_FLUID_FILTERS, writeToNbt());
};
});
if (stack.hasTag() && stack.getTag().contains(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 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()) {
stack.setTag(new CompoundNBT());
}
FilterItem.setFluidIcon(stack, getFluid(slot));
};
});
FluidStack icon = FilterItem.getFluidIcon(stack);
if (icon != null) {

View File

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

View File

@@ -4,12 +4,9 @@ import com.raoulvdberge.refinedstorage.inventory.item.validator.UpgradeItemValid
import com.raoulvdberge.refinedstorage.item.UpgradeItem;
import net.minecraft.item.ItemStack;
import javax.annotation.Nullable;
import java.util.function.Consumer;
public class UpgradeItemHandler extends BaseItemHandler {
public UpgradeItemHandler(int size, @Nullable Consumer<Integer> listener, UpgradeItem.Type... supportedUpgrades) {
super(size, listener);
public UpgradeItemHandler(int size, UpgradeItem.Type... supportedUpgrades) {
super(size);
for (int i = 0; i < supportedUpgrades.length; ++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<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()) {
stack.setTag(new CompoundNBT());
}
StackUtils.writeItems(this, 0, stack.getTag());
}
};
StackUtils.writeItems(handler, 0, stack.getTag());
}));
public WirelessFluidGrid(ItemStack 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<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()) {
stack.setTag(new CompoundNBT());
}
StackUtils.writeItems(this, 0, stack.getTag());
}
};
StackUtils.writeItems(handler, 0, stack.getTag());
});
public WirelessGrid(ItemStack 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<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()) {
stack.setTag(new CompoundNBT());
}
StackUtils.writeItems(this, 0, stack.getTag());
}
};
private BaseItemHandler disk = new BaseItemHandler(1, slot -> {
}) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
StackUtils.writeItems(handler, 0, stack.getTag());
});
if (/*TODO FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER*/false) {
ItemStack diskStack = getStackInSlot(slot);
private BaseItemHandler disk = new BaseItemHandler(1)
.addValidator(new StorageDiskItemValidator())
.addListener(((handler, slot, reading) -> {
if (!player.world.isRemote) {
ItemStack diskStack = handler.getStackInSlot(slot);
if (diskStack.isEmpty()) {
storage = null;
@@ -131,10 +126,9 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer
cache.invalidate();
}
StackUtils.writeItems(this, 4, stack.getTag());
StackUtils.writeItems(handler, 4, stack.getTag());
}
}
}.addValidator(new StorageDiskItemValidator());
}));
public PortableGrid(PlayerEntity player, ItemStack stack) {
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.FilterItemHandler;
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.grid.GridScreen;
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<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) {
loadStorage();
}
}
}.addValidator(new StorageDiskItemValidator());
});
@Nullable
private IStorageDisk storage;