Remove list, use single listener for storage cache listener
This commit is contained in:
@@ -4,6 +4,7 @@ import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IStackList;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
@@ -48,11 +49,11 @@ public interface IStorageCache<T> {
|
||||
void remove(@Nonnull T stack, int size);
|
||||
|
||||
/**
|
||||
* Adds a listener to be called when this storage cache changes.
|
||||
* Sets a listener to be called when this storage cache changes.
|
||||
*
|
||||
* @param listener the listener
|
||||
* @param listener the listener, or null when no listener is needed
|
||||
*/
|
||||
void addListener(BiConsumer<T, Integer> listener);
|
||||
void setListener(@Nullable BiConsumer<T, Integer> listener);
|
||||
|
||||
/**
|
||||
* Resorts the storages in this cache according to their priority.
|
||||
|
||||
@@ -11,7 +11,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.LinkedList;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.function.BiConsumer;
|
||||
@@ -20,7 +20,8 @@ public class StorageCacheFluid implements IStorageCache<FluidStack> {
|
||||
private INetwork network;
|
||||
private CopyOnWriteArrayList<IStorage<FluidStack>> storages = new CopyOnWriteArrayList<>();
|
||||
private IStackList<FluidStack> list = API.instance().createFluidStackList();
|
||||
private List<BiConsumer<FluidStack, Integer>> listeners = new LinkedList<>();
|
||||
@Nullable
|
||||
private BiConsumer<FluidStack, Integer> listener;
|
||||
|
||||
public StorageCacheFluid(INetwork network) {
|
||||
this.network = network;
|
||||
@@ -58,7 +59,9 @@ public class StorageCacheFluid implements IStorageCache<FluidStack> {
|
||||
if (!rebuilding) {
|
||||
network.sendFluidStorageDeltaToClient(stack, size);
|
||||
|
||||
listeners.forEach(l -> l.accept(stack, size));
|
||||
if (listener != null) {
|
||||
listener.accept(stack, size);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,13 +70,15 @@ public class StorageCacheFluid implements IStorageCache<FluidStack> {
|
||||
if (list.remove(stack, size)) {
|
||||
network.sendFluidStorageDeltaToClient(stack, -size);
|
||||
|
||||
listeners.forEach(l -> l.accept(stack, -size));
|
||||
if (listener != null) {
|
||||
listener.accept(stack, -size);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addListener(BiConsumer<FluidStack, Integer> listener) {
|
||||
listeners.add(listener);
|
||||
public void setListener(@Nullable BiConsumer<FluidStack, Integer> listener) {
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -11,7 +11,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.LinkedList;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.function.BiConsumer;
|
||||
@@ -20,7 +20,8 @@ public class StorageCacheItem implements IStorageCache<ItemStack> {
|
||||
private INetwork network;
|
||||
private CopyOnWriteArrayList<IStorage<ItemStack>> storages = new CopyOnWriteArrayList<>();
|
||||
private IStackList<ItemStack> list = API.instance().createItemStackList();
|
||||
private List<BiConsumer<ItemStack, Integer>> listeners = new LinkedList<>();
|
||||
@Nullable
|
||||
private BiConsumer<ItemStack, Integer> listener;
|
||||
|
||||
public StorageCacheItem(INetwork network) {
|
||||
this.network = network;
|
||||
@@ -60,7 +61,9 @@ public class StorageCacheItem implements IStorageCache<ItemStack> {
|
||||
if (!rebuilding) {
|
||||
network.sendItemStorageDeltaToClient(stack, size);
|
||||
|
||||
listeners.forEach(l -> l.accept(stack, size));
|
||||
if (listener != null) {
|
||||
listener.accept(stack, size);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,13 +72,15 @@ public class StorageCacheItem implements IStorageCache<ItemStack> {
|
||||
if (list.remove(stack, size)) {
|
||||
network.sendItemStorageDeltaToClient(stack, -size);
|
||||
|
||||
listeners.forEach(l -> l.accept(stack, -size));
|
||||
if (listener != null) {
|
||||
listener.accept(stack, -size);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addListener(BiConsumer<ItemStack, Integer> listener) {
|
||||
listeners.add(listener);
|
||||
public void setListener(@Nullable BiConsumer<ItemStack, Integer> listener) {
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -14,15 +14,16 @@ import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
public class StorageCacheItemPortable implements IStorageCache<ItemStack> {
|
||||
private IPortableGrid portableGrid;
|
||||
private IStackList<ItemStack> list = API.instance().createItemStackList();
|
||||
private List<BiConsumer<ItemStack, Integer>> listeners = new LinkedList<>();
|
||||
@Nullable
|
||||
private BiConsumer<ItemStack, Integer> listener;
|
||||
|
||||
public StorageCacheItemPortable(IPortableGrid portableGrid) {
|
||||
this.portableGrid = portableGrid;
|
||||
@@ -46,7 +47,9 @@ public class StorageCacheItemPortable implements IStorageCache<ItemStack> {
|
||||
if (!rebuilding) {
|
||||
portableGrid.getWatchers().forEach(w -> RS.INSTANCE.network.sendTo(new MessageGridItemDelta(null, stack, size), (EntityPlayerMP) w));
|
||||
|
||||
listeners.forEach(l -> l.accept(stack, size));
|
||||
if (listener != null) {
|
||||
listener.accept(stack, size);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,13 +58,15 @@ public class StorageCacheItemPortable implements IStorageCache<ItemStack> {
|
||||
if (list.remove(stack, size)) {
|
||||
portableGrid.getWatchers().forEach(w -> RS.INSTANCE.network.sendTo(new MessageGridItemDelta(null, stack, -size), (EntityPlayerMP) w));
|
||||
|
||||
listeners.forEach(l -> l.accept(stack, -size));
|
||||
if (listener != null) {
|
||||
listener.accept(stack, -size);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addListener(BiConsumer<ItemStack, Integer> listener) {
|
||||
listeners.add(listener);
|
||||
public void setListener(@Nullable BiConsumer<ItemStack, Integer> listener) {
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -8,18 +8,17 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
public class ItemHandlerStorage implements IItemHandler, BiConsumer<ItemStack, Integer> {
|
||||
public class ItemHandlerStorage implements IItemHandler {
|
||||
private IStorage<ItemStack> storage;
|
||||
private IStorageCache<ItemStack> storageCache;
|
||||
private ItemStack[] storageCacheData;
|
||||
|
||||
public ItemHandlerStorage(IStorage<ItemStack> storage, IStorageCache<ItemStack> storageCache) {
|
||||
this.storage = storage;
|
||||
this.storageCache = storageCache;
|
||||
|
||||
invalidate();
|
||||
storageCache.setListener((stack, size) -> invalidate(storageCache));
|
||||
|
||||
invalidate(storageCache);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -51,12 +50,7 @@ public class ItemHandlerStorage implements IItemHandler, BiConsumer<ItemStack, I
|
||||
return 64;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accept(ItemStack stack, Integer amount) {
|
||||
invalidate();
|
||||
}
|
||||
|
||||
private void invalidate() {
|
||||
private void invalidate(IStorageCache<ItemStack> storageCache) {
|
||||
this.storageCacheData = storageCache.getList().getStacks().toArray(new ItemStack[0]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,13 +186,12 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid,
|
||||
}
|
||||
|
||||
cache.invalidate();
|
||||
cache.setListener(null);
|
||||
|
||||
if (storage == null) {
|
||||
itemHandler = null;
|
||||
} else {
|
||||
itemHandler = new ItemHandlerStorage(storage, cache);
|
||||
|
||||
cache.addListener(itemHandler);
|
||||
}
|
||||
|
||||
if (world != null) {
|
||||
|
||||
Reference in New Issue
Block a user