diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 8056de36a..8ff81833f 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -46,7 +46,6 @@ public final class RefinedStorage { public static RefinedStorage INSTANCE; public List items = new ArrayList(); - public long lastItemUpdate; public int cableRfUsage; public int constructorRfUsage; diff --git a/src/main/java/refinedstorage/api/network/INetworkMaster.java b/src/main/java/refinedstorage/api/network/INetworkMaster.java index c3e7ad226..326d24603 100755 --- a/src/main/java/refinedstorage/api/network/INetworkMaster.java +++ b/src/main/java/refinedstorage/api/network/INetworkMaster.java @@ -135,6 +135,14 @@ public interface INetworkMaster { */ void sendStorageToClient(EntityPlayerMP player); + /** + * Sends a storage change to the client. + * + * @param stack The stack + * @param delta The delta changed + */ + void sendStorageDeltaToClient(ItemStack stack, int delta); + /** * Pushes an item to this network. * diff --git a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java index a4fc48678..4ac38aeb8 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java @@ -60,7 +60,7 @@ public class GroupedStorage implements IGroupedStorage { if (RefinedStorageUtils.compareStackNoQuantity(otherStack, stack)) { otherStack.stackSize += stack.stackSize; - network.sendStorageToClient(); + network.sendStorageDeltaToClient(stack, stack.stackSize); return; } @@ -68,7 +68,7 @@ public class GroupedStorage implements IGroupedStorage { stacks.put(stack.getItem(), stack.copy()); - network.sendStorageToClient(); + network.sendStorageDeltaToClient(stack, stack.stackSize); } @Override @@ -83,7 +83,7 @@ public class GroupedStorage implements IGroupedStorage { } } - network.sendStorageToClient(); + network.sendStorageDeltaToClient(stack, -stack.stackSize); return; } diff --git a/src/main/java/refinedstorage/network/MessageGridDelta.java b/src/main/java/refinedstorage/network/MessageGridDelta.java new file mode 100755 index 000000000..f01e528f6 --- /dev/null +++ b/src/main/java/refinedstorage/network/MessageGridDelta.java @@ -0,0 +1,59 @@ +package refinedstorage.network; + +import io.netty.buffer.ByteBuf; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; +import net.minecraftforge.items.ItemHandlerHelper; +import refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageUtils; + +public class MessageGridDelta implements IMessage, IMessageHandler { + private ItemStack stack; + private int delta; + private boolean craftable; + + public MessageGridDelta() { + } + + public MessageGridDelta(ItemStack stack, int delta, boolean craftable) { + this.stack = stack; + this.delta = delta; + this.craftable = craftable; + } + + @Override + public void fromBytes(ByteBuf buf) { + stack = ByteBufUtils.readItemStack(buf); + delta = buf.readInt(); + craftable = buf.readBoolean(); + } + + @Override + public void toBytes(ByteBuf buf) { + ByteBufUtils.writeItemStack(buf, stack); + buf.writeInt(delta); + buf.writeBoolean(craftable); + } + + @Override + public IMessage onMessage(MessageGridDelta message, MessageContext ctx) { + for (ItemStack stack : RefinedStorage.INSTANCE.items) { + if (RefinedStorageUtils.compareStackNoQuantity(stack, message.stack)) { + if (stack.stackSize + message.delta == 0 && !message.craftable) { + RefinedStorage.INSTANCE.items.remove(stack); + } else { + stack.stackSize += message.delta; + } + + return null; + } + } + + RefinedStorage.INSTANCE.items.add(ItemHandlerHelper.copyStackWithSize(message.stack, message.delta)); + + return null; + } +} diff --git a/src/main/java/refinedstorage/network/MessageGridItems.java b/src/main/java/refinedstorage/network/MessageGridUpdate.java similarity index 66% rename from src/main/java/refinedstorage/network/MessageGridItems.java rename to src/main/java/refinedstorage/network/MessageGridUpdate.java index b718ce9de..9a91aac88 100755 --- a/src/main/java/refinedstorage/network/MessageGridItems.java +++ b/src/main/java/refinedstorage/network/MessageGridUpdate.java @@ -12,14 +12,14 @@ import refinedstorage.api.network.INetworkMaster; import java.util.ArrayList; import java.util.List; -public class MessageGridItems implements IMessage, IMessageHandler { +public class MessageGridUpdate implements IMessage, IMessageHandler { private INetworkMaster network; private List items = new ArrayList(); - public MessageGridItems() { + public MessageGridUpdate() { } - public MessageGridItems(INetworkMaster network) { + public MessageGridUpdate(INetworkMaster network) { this.network = network; } @@ -28,10 +28,8 @@ public class MessageGridItems implements IMessage, IMessageHandler