Fixed performance issue with Controllers turning off and on and Interfaces, fixes #1384

This commit is contained in:
raoulvdberge
2017-07-28 22:10:05 +02:00
parent 51527d6af3
commit 283135f7e7
15 changed files with 113 additions and 53 deletions

View File

@@ -6,6 +6,8 @@
- Fixed more crashes relating to scrollbar in GUIs (raoulvdberge) - Fixed more crashes relating to scrollbar in GUIs (raoulvdberge)
- Fixed crash with Detector (raoulvdberge) - Fixed crash with Detector (raoulvdberge)
- Fixed bug where pattern create button wasn't visible when grid tabs were selected (raoulvdberge) - Fixed bug where pattern create button wasn't visible when grid tabs were selected (raoulvdberge)
- Fixed performance issue with Controllers turning off and on and Interfaces (raoulvdberge)
- Fixed Interfaces exposing network inventory don't hide storages that are disconnected (raoulvdberge)
- A Solderer with Speed Upgrades is now 2 times faster (raoulvdberge) - A Solderer with Speed Upgrades is now 2 times faster (raoulvdberge)
### 1.5.13 ### 1.5.13

View File

@@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.api.network;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
import java.util.Collection; import java.util.Collection;
import java.util.function.Consumer;
/** /**
* Represents a graph of all the nodes connected to a network. * Represents a graph of all the nodes connected to a network.
@@ -13,6 +14,13 @@ public interface INetworkNodeGraph {
*/ */
void rebuild(); void rebuild();
/**
* Adds a runnable that is run after the graph is rebuilt.
*
* @param action the action to run
*/
void schedulePostRebuildAction(Consumer<INetwork> action);
/** /**
* @return a collection of all connected nodes * @return a collection of all connected nodes
*/ */

View File

@@ -5,7 +5,6 @@ import com.raoulvdberge.refinedstorage.api.util.IStackList;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.List; import java.util.List;
import java.util.function.BiConsumer;
/** /**
* This holds all stacks from all the connected storages from a {@link INetwork}. * This holds all stacks from all the connected storages from a {@link INetwork}.
@@ -52,14 +51,14 @@ public interface IStorageCache<T> {
* *
* @param listener the listener * @param listener the listener
*/ */
void addListener(BiConsumer<T, Integer> listener); void addListener(Runnable listener);
/** /**
* Removes a listener from the storage cache. * Removes a listener from the storage cache.
* *
* @param listener the listener * @param listener the listener
*/ */
void removeListener(BiConsumer<T, Integer> listener); void removeListener(Runnable listener);
/** /**
* Resorts the storages in this cache according to their priority. * Resorts the storages in this cache according to their priority.

View File

@@ -2,6 +2,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.network;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.raoulvdberge.refinedstorage.RSBlocks; import com.raoulvdberge.refinedstorage.RSBlocks;
import com.raoulvdberge.refinedstorage.api.network.INetwork;
import com.raoulvdberge.refinedstorage.api.network.INetworkNodeGraph; import com.raoulvdberge.refinedstorage.api.network.INetworkNodeGraph;
import com.raoulvdberge.refinedstorage.api.network.INetworkNodeVisitor; import com.raoulvdberge.refinedstorage.api.network.INetworkNodeVisitor;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
@@ -16,16 +17,16 @@ import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import java.util.ArrayDeque; import java.util.*;
import java.util.Collection; import java.util.function.Consumer;
import java.util.Queue;
import java.util.Set;
import static com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy.NETWORK_NODE_PROXY_CAPABILITY; import static com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy.NETWORK_NODE_PROXY_CAPABILITY;
public class NetworkNodeGraph implements INetworkNodeGraph { public class NetworkNodeGraph implements INetworkNodeGraph {
private TileController controller; private TileController controller;
private Set<INetworkNode> nodes = Sets.newConcurrentHashSet(); private Set<INetworkNode> nodes = Sets.newConcurrentHashSet();
private Set<Consumer<INetwork>> postRebuildActions = new HashSet<>();
private boolean rebuilding = false;
public NetworkNodeGraph(TileController controller) { public NetworkNodeGraph(TileController controller) {
this.controller = controller; this.controller = controller;
@@ -41,6 +42,8 @@ public class NetworkNodeGraph implements INetworkNodeGraph {
return; return;
} }
rebuilding = true;
Operator operator = new Operator(); Operator operator = new Operator();
BlockPos controllerPos = controller.getPos(); BlockPos controllerPos = controller.getPos();
@@ -66,9 +69,23 @@ public class NetworkNodeGraph implements INetworkNodeGraph {
node.onDisconnected(controller); node.onDisconnected(controller);
} }
postRebuildActions.forEach(a -> a.accept(controller));
postRebuildActions.clear();
if (!operator.newNodes.isEmpty() || !operator.previousNodes.isEmpty()) { if (!operator.newNodes.isEmpty() || !operator.previousNodes.isEmpty()) {
controller.getDataManager().sendParameterToWatchers(TileController.NODES); controller.getDataManager().sendParameterToWatchers(TileController.NODES);
} }
rebuilding = false;
}
@Override
public void schedulePostRebuildAction(Consumer<INetwork> action) {
if (rebuilding) {
postRebuildActions.add(action);
} else {
action.accept(controller);
}
} }
@Override @Override

View File

@@ -7,6 +7,7 @@ import com.raoulvdberge.refinedstorage.api.storage.AccessType;
import com.raoulvdberge.refinedstorage.api.storage.IStorage; import com.raoulvdberge.refinedstorage.api.storage.IStorage;
import com.raoulvdberge.refinedstorage.api.storage.IStorageProvider; import com.raoulvdberge.refinedstorage.api.storage.IStorageProvider;
import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheFluid;
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageDiskFluid; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageDiskFluid;
import com.raoulvdberge.refinedstorage.block.BlockFluidStorage; import com.raoulvdberge.refinedstorage.block.BlockFluidStorage;
import com.raoulvdberge.refinedstorage.block.FluidStorageType; import com.raoulvdberge.refinedstorage.block.FluidStorageType;
@@ -117,7 +118,7 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage,
public void onConnectedStateChange(INetwork network, boolean state) { public void onConnectedStateChange(INetwork network, boolean state) {
super.onConnectedStateChange(network, state); super.onConnectedStateChange(network, state);
network.getFluidStorageCache().invalidate(); network.getNodeGraph().schedulePostRebuildAction(StorageCacheFluid.INVALIDATE);
} }
@Override @Override

View File

@@ -23,11 +23,24 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable {
private ItemHandlerBase importItems = new ItemHandlerBase(9, new ItemHandlerListenerNetworkNode(this)); private ItemHandlerBase importItems = new ItemHandlerBase(9, new ItemHandlerListenerNetworkNode(this));
private ItemHandlerBase exportSpecimenItems = new ItemHandlerBase(9, new ItemHandlerListenerNetworkNode(this)); private ItemHandlerBase exportSpecimenItems = new ItemHandlerBase(9, new ItemHandlerListenerNetworkNode(this)) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
if (network != null) {
if (!isEmpty() && itemsStorage != null) {
removeItemStorage(network);
} else if (isEmpty() && itemsStorage == null) {
createItemStorage(network);
}
}
}
};
private ItemHandlerBase exportItems = new ItemHandlerBase(9, new ItemHandlerListenerNetworkNode(this)); private ItemHandlerBase exportItems = new ItemHandlerBase(9, new ItemHandlerListenerNetworkNode(this));
private IItemHandler items = new ItemHandlerProxy(importItems, exportItems); private IItemHandler items = new ItemHandlerProxy(importItems, exportItems);
private ItemHandlerInterface itemsNetwork; private ItemHandlerInterface itemsStorage;
private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, new ItemHandlerListenerNetworkNode(this), ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK, ItemUpgrade.TYPE_CRAFTING); private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, new ItemHandlerListenerNetworkNode(this), ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK, ItemUpgrade.TYPE_CRAFTING);
@@ -122,17 +135,25 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable {
protected void onConnectedStateChange(INetwork network, boolean state) { protected void onConnectedStateChange(INetwork network, boolean state) {
super.onConnectedStateChange(network, state); super.onConnectedStateChange(network, state);
if (state) { if (state && exportSpecimenItems.isEmpty()) {
itemsNetwork = new ItemHandlerInterface(network, network.getItemStorageCache(), importItems); createItemStorage(network);
} else if (itemsStorage != null) {
network.getItemStorageCache().addListener(itemsNetwork); removeItemStorage(network);
} else if (itemsNetwork != null) {
network.getItemStorageCache().removeListener(itemsNetwork);
itemsNetwork = null;
} }
} }
private void createItemStorage(INetwork network) {
itemsStorage = new ItemHandlerInterface(network, network.getItemStorageCache(), importItems);
network.getItemStorageCache().addListener(itemsStorage);
}
private void removeItemStorage(INetwork network) {
network.getItemStorageCache().removeListener(itemsStorage);
itemsStorage = null;
}
@Override @Override
public int getCompare() { public int getCompare() {
return compare; return compare;
@@ -204,8 +225,8 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable {
return exportItems; return exportItems;
} }
public IItemHandler getItemsOrNetworkItems() { public IItemHandler getItemsOrStorage() {
return (itemsNetwork != null && exportSpecimenItems.isEmpty()) ? itemsNetwork : items; return itemsStorage != null ? itemsStorage : items;
} }
public IItemHandler getItems() { public IItemHandler getItems() {

View File

@@ -7,6 +7,7 @@ import com.raoulvdberge.refinedstorage.api.storage.AccessType;
import com.raoulvdberge.refinedstorage.api.storage.IStorage; import com.raoulvdberge.refinedstorage.api.storage.IStorage;
import com.raoulvdberge.refinedstorage.api.storage.IStorageProvider; import com.raoulvdberge.refinedstorage.api.storage.IStorageProvider;
import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheItem;
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageDiskItem; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageDiskItem;
import com.raoulvdberge.refinedstorage.block.BlockStorage; import com.raoulvdberge.refinedstorage.block.BlockStorage;
import com.raoulvdberge.refinedstorage.block.ItemStorageType; import com.raoulvdberge.refinedstorage.block.ItemStorageType;
@@ -114,7 +115,7 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto
public void onConnectedStateChange(INetwork network, boolean state) { public void onConnectedStateChange(INetwork network, boolean state) {
super.onConnectedStateChange(network, state); super.onConnectedStateChange(network, state);
network.getItemStorageCache().invalidate(); network.getNodeGraph().schedulePostRebuildAction(StorageCacheItem.INVALIDATE);
} }
@Override @Override

View File

@@ -6,6 +6,8 @@ import com.raoulvdberge.refinedstorage.api.storage.*;
import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiStorage; import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiStorage;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode;
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheFluid;
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheItem;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode;
@@ -132,8 +134,8 @@ public class NetworkNodeDiskDrive extends NetworkNode implements IGuiStorage, IS
public void onConnectedStateChange(INetwork network, boolean state) { public void onConnectedStateChange(INetwork network, boolean state) {
super.onConnectedStateChange(network, state); super.onConnectedStateChange(network, state);
network.getItemStorageCache().invalidate(); network.getNodeGraph().schedulePostRebuildAction(StorageCacheItem.INVALIDATE);
network.getFluidStorageCache().invalidate(); network.getNodeGraph().schedulePostRebuildAction(StorageCacheFluid.INVALIDATE);
WorldUtils.updateBlock(world, pos); WorldUtils.updateBlock(world, pos);
} }

View File

@@ -9,6 +9,8 @@ import com.raoulvdberge.refinedstorage.api.storage.IStorageProvider;
import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiStorage; import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiStorage;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode;
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheFluid;
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheItem;
import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy; import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy;
import com.raoulvdberge.refinedstorage.integration.storagedrawers.StorageItemItemRepository; import com.raoulvdberge.refinedstorage.integration.storagedrawers.StorageItemItemRepository;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
@@ -224,8 +226,8 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP
} }
} }
network.getItemStorageCache().invalidate(); network.getNodeGraph().schedulePostRebuildAction(StorageCacheItem.INVALIDATE);
network.getFluidStorageCache().invalidate(); network.getNodeGraph().schedulePostRebuildAction(StorageCacheFluid.INVALIDATE);
} }
@Override @Override

View File

@@ -13,13 +13,15 @@ import javax.annotation.Nonnull;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.BiConsumer; import java.util.function.Consumer;
public class StorageCacheFluid implements IStorageCache<FluidStack> { public class StorageCacheFluid implements IStorageCache<FluidStack> {
public static final Consumer<INetwork> INVALIDATE = n -> n.getFluidStorageCache().invalidate();
private INetwork network; private INetwork network;
private CopyOnWriteArrayList<IStorage<FluidStack>> storages = new CopyOnWriteArrayList<>(); private CopyOnWriteArrayList<IStorage<FluidStack>> storages = new CopyOnWriteArrayList<>();
private IStackList<FluidStack> list = API.instance().createFluidStackList(); private IStackList<FluidStack> list = API.instance().createFluidStackList();
private List<BiConsumer<FluidStack, Integer>> listeners = new LinkedList<>(); private List<Runnable> listeners = new LinkedList<>();
public StorageCacheFluid(INetwork network) { public StorageCacheFluid(INetwork network) {
this.network = network; this.network = network;
@@ -47,6 +49,8 @@ public class StorageCacheFluid implements IStorageCache<FluidStack> {
} }
} }
listeners.forEach(Runnable::run);
network.sendFluidStorageToClient(); network.sendFluidStorageToClient();
} }
@@ -56,9 +60,9 @@ public class StorageCacheFluid implements IStorageCache<FluidStack> {
if (!rebuilding) { if (!rebuilding) {
network.sendFluidStorageDeltaToClient(stack, size); network.sendFluidStorageDeltaToClient(stack, size);
}
listeners.forEach(l -> l.accept(stack, size)); listeners.forEach(Runnable::run);
}
} }
@Override @Override
@@ -66,17 +70,17 @@ public class StorageCacheFluid implements IStorageCache<FluidStack> {
if (list.remove(stack, size)) { if (list.remove(stack, size)) {
network.sendFluidStorageDeltaToClient(stack, -size); network.sendFluidStorageDeltaToClient(stack, -size);
listeners.forEach(l -> l.accept(stack, -size)); listeners.forEach(Runnable::run);
} }
} }
@Override @Override
public void addListener(BiConsumer<FluidStack, Integer> listener) { public void addListener(Runnable listener) {
listeners.add(listener); listeners.add(listener);
} }
@Override @Override
public void removeListener(BiConsumer<FluidStack, Integer> listener) { public void removeListener(Runnable listener) {
listeners.remove(listener); listeners.remove(listener);
} }

View File

@@ -13,13 +13,15 @@ import javax.annotation.Nonnull;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.BiConsumer; import java.util.function.Consumer;
public class StorageCacheItem implements IStorageCache<ItemStack> { public class StorageCacheItem implements IStorageCache<ItemStack> {
public static final Consumer<INetwork> INVALIDATE = network -> network.getItemStorageCache().invalidate();
private INetwork network; private INetwork network;
private CopyOnWriteArrayList<IStorage<ItemStack>> storages = new CopyOnWriteArrayList<>(); private CopyOnWriteArrayList<IStorage<ItemStack>> storages = new CopyOnWriteArrayList<>();
private IStackList<ItemStack> list = API.instance().createItemStackList(); private IStackList<ItemStack> list = API.instance().createItemStackList();
private List<BiConsumer<ItemStack, Integer>> listeners = new LinkedList<>(); private List<Runnable> listeners = new LinkedList<>();
public StorageCacheItem(INetwork network) { public StorageCacheItem(INetwork network) {
this.network = network; this.network = network;
@@ -49,6 +51,8 @@ public class StorageCacheItem implements IStorageCache<ItemStack> {
} }
} }
listeners.forEach(Runnable::run);
network.sendItemStorageToClient(); network.sendItemStorageToClient();
} }
@@ -58,9 +62,9 @@ public class StorageCacheItem implements IStorageCache<ItemStack> {
if (!rebuilding) { if (!rebuilding) {
network.sendItemStorageDeltaToClient(stack, size); network.sendItemStorageDeltaToClient(stack, size);
}
listeners.forEach(l -> l.accept(stack, size)); listeners.forEach(Runnable::run);
}
} }
@Override @Override
@@ -68,17 +72,17 @@ public class StorageCacheItem implements IStorageCache<ItemStack> {
if (list.remove(stack, size)) { if (list.remove(stack, size)) {
network.sendItemStorageDeltaToClient(stack, -size); network.sendItemStorageDeltaToClient(stack, -size);
listeners.forEach(l -> l.accept(stack, -size)); listeners.forEach(Runnable::run);
} }
} }
@Override @Override
public void addListener(BiConsumer<ItemStack, Integer> listener) { public void addListener(Runnable listener) {
listeners.add(listener); listeners.add(listener);
} }
@Override @Override
public void removeListener(BiConsumer<ItemStack, Integer> listener) { public void removeListener(Runnable listener) {
listeners.remove(listener); listeners.remove(listener);
} }

View File

@@ -17,12 +17,11 @@ import javax.annotation.Nonnull;
import java.util.Collections; import java.util.Collections;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.function.BiConsumer;
public class StorageCacheItemPortable implements IStorageCache<ItemStack> { public class StorageCacheItemPortable implements IStorageCache<ItemStack> {
private IPortableGrid portableGrid; private IPortableGrid portableGrid;
private IStackList<ItemStack> list = API.instance().createItemStackList(); private IStackList<ItemStack> list = API.instance().createItemStackList();
private List<BiConsumer<ItemStack, Integer>> listeners = new LinkedList<>(); private List<Runnable> listeners = new LinkedList<>();
public StorageCacheItemPortable(IPortableGrid portableGrid) { public StorageCacheItemPortable(IPortableGrid portableGrid) {
this.portableGrid = portableGrid; this.portableGrid = portableGrid;
@@ -36,6 +35,8 @@ public class StorageCacheItemPortable implements IStorageCache<ItemStack> {
portableGrid.getStorage().getStacks().forEach(list::add); portableGrid.getStorage().getStacks().forEach(list::add);
} }
listeners.forEach(Runnable::run);
portableGrid.getWatchers().forEach(this::sendUpdateTo); portableGrid.getWatchers().forEach(this::sendUpdateTo);
} }
@@ -45,9 +46,9 @@ public class StorageCacheItemPortable implements IStorageCache<ItemStack> {
if (!rebuilding) { if (!rebuilding) {
portableGrid.getWatchers().forEach(w -> RS.INSTANCE.network.sendTo(new MessageGridItemDelta(null, stack, size), (EntityPlayerMP) w)); portableGrid.getWatchers().forEach(w -> RS.INSTANCE.network.sendTo(new MessageGridItemDelta(null, stack, size), (EntityPlayerMP) w));
}
listeners.forEach(l -> l.accept(stack, size)); listeners.forEach(Runnable::run);
}
} }
@Override @Override
@@ -55,17 +56,17 @@ public class StorageCacheItemPortable implements IStorageCache<ItemStack> {
if (list.remove(stack, size)) { if (list.remove(stack, size)) {
portableGrid.getWatchers().forEach(w -> RS.INSTANCE.network.sendTo(new MessageGridItemDelta(null, stack, -size), (EntityPlayerMP) w)); portableGrid.getWatchers().forEach(w -> RS.INSTANCE.network.sendTo(new MessageGridItemDelta(null, stack, -size), (EntityPlayerMP) w));
listeners.forEach(l -> l.accept(stack, -size)); listeners.forEach(Runnable::run);
} }
} }
@Override @Override
public void addListener(BiConsumer<ItemStack, Integer> listener) { public void addListener(Runnable listener) {
listeners.add(listener); listeners.add(listener);
} }
@Override @Override
public void removeListener(BiConsumer<ItemStack, Integer> listener) { public void removeListener(Runnable listener) {
listeners.remove(listener); listeners.remove(listener);
} }

View File

@@ -8,9 +8,8 @@ import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.function.BiConsumer;
public class ItemHandlerInterface implements IItemHandler, BiConsumer<ItemStack, Integer> { public class ItemHandlerInterface implements IItemHandler, Runnable {
private INetwork network; private INetwork network;
private IStorageCache<ItemStack> storageCache; private IStorageCache<ItemStack> storageCache;
private IItemHandler importItems; private IItemHandler importItems;
@@ -69,7 +68,7 @@ public class ItemHandlerInterface implements IItemHandler, BiConsumer<ItemStack,
} }
@Override @Override
public void accept(ItemStack stack, Integer amount) { public void run() {
invalidate(); invalidate();
} }

View File

@@ -8,9 +8,8 @@ import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.function.BiConsumer;
public class ItemHandlerStorage implements IItemHandler, BiConsumer<ItemStack, Integer> { public class ItemHandlerStorage implements IItemHandler, Runnable {
private IStorage<ItemStack> storage; private IStorage<ItemStack> storage;
private IStorageCache<ItemStack> storageCache; private IStorageCache<ItemStack> storageCache;
private ItemStack[] storageCacheData; private ItemStack[] storageCacheData;
@@ -52,7 +51,7 @@ public class ItemHandlerStorage implements IItemHandler, BiConsumer<ItemStack, I
} }
@Override @Override
public void accept(ItemStack stack, Integer amount) { public void run() {
invalidate(); invalidate();
} }

View File

@@ -22,7 +22,7 @@ public class TileInterface extends TileNode<NetworkNodeInterface> {
@Override @Override
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) { public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(getNode().getItemsOrNetworkItems()); return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(getNode().getItemsOrStorage());
} }
return super.getCapability(capability, facing); return super.getCapability(capability, facing);