diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorageCacheListener.java b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorageCacheListener.java index c630656ad..732029baf 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorageCacheListener.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/IStorageCacheListener.java @@ -1,6 +1,10 @@ package com.raoulvdberge.refinedstorage.api.storage; +import net.minecraft.item.ItemStack; +import org.apache.commons.lang3.tuple.Pair; + import javax.annotation.Nonnull; +import java.util.List; /** * Listens for storage cache changes. @@ -25,4 +29,6 @@ public interface IStorageCacheListener { * @param size the size, negative if the amount decreases */ void onChanged(@Nonnull T stack, int size); + + void onChangedBulk(@Nonnull List> stacks); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheItem.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheItem.java index d3e7c3120..920fad09d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheItem.java @@ -81,7 +81,11 @@ public class StorageCacheItem implements IStorageCache { @Override public synchronized void flush() { if (!batchedChanges.isEmpty()) { - batchedChanges.forEach(c -> listeners.forEach(l -> l.onChanged(c.getKey(), c.getValue()))); + if(batchedChanges.size() > 1) { + listeners.forEach(l -> l.onChangedBulk(batchedChanges)); + } else { + batchedChanges.forEach(c -> listeners.forEach(l -> l.onChanged(c.getKey(), c.getValue()))); + } batchedChanges.clear(); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheListenerGridFluid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheListenerGridFluid.java index fd412087c..a6a216226 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheListenerGridFluid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheListenerGridFluid.java @@ -8,8 +8,10 @@ import com.raoulvdberge.refinedstorage.network.MessageGridFluidDelta; import com.raoulvdberge.refinedstorage.network.MessageGridFluidUpdate; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraftforge.fluids.FluidStack; +import org.apache.commons.lang3.tuple.Pair; import javax.annotation.Nonnull; +import java.util.List; public class StorageCacheListenerGridFluid implements IStorageCacheListener { private EntityPlayerMP player; @@ -34,4 +36,11 @@ public class StorageCacheListenerGridFluid implements IStorageCacheListener> stacks) { + for(Pair stack : stacks) { + onChanged(stack.getLeft(), stack.getRight()); + } + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheListenerGridItem.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheListenerGridItem.java index 9784467a2..19b218e37 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheListenerGridItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheListenerGridItem.java @@ -8,8 +8,10 @@ import com.raoulvdberge.refinedstorage.network.MessageGridItemDelta; import com.raoulvdberge.refinedstorage.network.MessageGridItemUpdate; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; +import org.apache.commons.lang3.tuple.Pair; import javax.annotation.Nonnull; +import java.util.List; public class StorageCacheListenerGridItem implements IStorageCacheListener { private EntityPlayerMP player; @@ -34,4 +36,9 @@ public class StorageCacheListenerGridItem implements IStorageCacheListener> stacks) { + RS.INSTANCE.network.sendTo(new MessageGridItemDelta(network, network.getItemStorageTracker(), stacks), player); + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheListenerGridPortable.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheListenerGridPortable.java index 951b16ae0..c6bff599f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheListenerGridPortable.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheListenerGridPortable.java @@ -10,8 +10,10 @@ import com.raoulvdberge.refinedstorage.util.StackUtils; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.network.ByteBufUtils; +import org.apache.commons.lang3.tuple.Pair; import javax.annotation.Nonnull; +import java.util.List; public class StorageCacheListenerGridPortable implements IStorageCacheListener { private IPortableGrid portableGrid; @@ -49,4 +51,9 @@ public class StorageCacheListenerGridPortable implements IStorageCacheListener> stacks) { + RS.INSTANCE.network.sendTo(new MessageGridItemDelta(null, portableGrid.getItemStorageTracker(), stacks), player); + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheListenerGridPortableFluid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheListenerGridPortableFluid.java index a67daeebd..9953349a0 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheListenerGridPortableFluid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheListenerGridPortableFluid.java @@ -10,8 +10,10 @@ import com.raoulvdberge.refinedstorage.util.StackUtils; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.common.network.ByteBufUtils; +import org.apache.commons.lang3.tuple.Pair; import javax.annotation.Nonnull; +import java.util.List; public class StorageCacheListenerGridPortableFluid implements IStorageCacheListener { private IPortableGrid portableGrid; @@ -54,4 +56,11 @@ public class StorageCacheListenerGridPortableFluid implements IStorageCacheListe public void onChanged(@Nonnull FluidStack stack, int size) { RS.INSTANCE.network.sendTo(new MessageGridFluidDelta(null, portableGrid.getFluidStorageTracker(), stack, size), player); } + + @Override + public void onChangedBulk(@Nonnull List> stacks) { + for(Pair stack : stacks) { + onChanged(stack.getLeft(), stack.getRight()); + } + } }