Send over deltas instead of resending the entire storage every time
This commit is contained in:
@@ -46,7 +46,6 @@ public final class RefinedStorage {
|
|||||||
public static RefinedStorage INSTANCE;
|
public static RefinedStorage INSTANCE;
|
||||||
|
|
||||||
public List<ItemStack> items = new ArrayList<ItemStack>();
|
public List<ItemStack> items = new ArrayList<ItemStack>();
|
||||||
public long lastItemUpdate;
|
|
||||||
|
|
||||||
public int cableRfUsage;
|
public int cableRfUsage;
|
||||||
public int constructorRfUsage;
|
public int constructorRfUsage;
|
||||||
|
@@ -135,6 +135,14 @@ public interface INetworkMaster {
|
|||||||
*/
|
*/
|
||||||
void sendStorageToClient(EntityPlayerMP player);
|
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.
|
* Pushes an item to this network.
|
||||||
*
|
*
|
||||||
|
@@ -60,7 +60,7 @@ public class GroupedStorage implements IGroupedStorage {
|
|||||||
if (RefinedStorageUtils.compareStackNoQuantity(otherStack, stack)) {
|
if (RefinedStorageUtils.compareStackNoQuantity(otherStack, stack)) {
|
||||||
otherStack.stackSize += stack.stackSize;
|
otherStack.stackSize += stack.stackSize;
|
||||||
|
|
||||||
network.sendStorageToClient();
|
network.sendStorageDeltaToClient(stack, stack.stackSize);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -68,7 +68,7 @@ public class GroupedStorage implements IGroupedStorage {
|
|||||||
|
|
||||||
stacks.put(stack.getItem(), stack.copy());
|
stacks.put(stack.getItem(), stack.copy());
|
||||||
|
|
||||||
network.sendStorageToClient();
|
network.sendStorageDeltaToClient(stack, stack.stackSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -83,7 +83,7 @@ public class GroupedStorage implements IGroupedStorage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
network.sendStorageToClient();
|
network.sendStorageDeltaToClient(stack, -stack.stackSize);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
59
src/main/java/refinedstorage/network/MessageGridDelta.java
Executable file
59
src/main/java/refinedstorage/network/MessageGridDelta.java
Executable file
@@ -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<MessageGridDelta, IMessage> {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
@@ -12,14 +12,14 @@ import refinedstorage.api.network.INetworkMaster;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class MessageGridItems implements IMessage, IMessageHandler<MessageGridItems, IMessage> {
|
public class MessageGridUpdate implements IMessage, IMessageHandler<MessageGridUpdate, IMessage> {
|
||||||
private INetworkMaster network;
|
private INetworkMaster network;
|
||||||
private List<ItemStack> items = new ArrayList<ItemStack>();
|
private List<ItemStack> items = new ArrayList<ItemStack>();
|
||||||
|
|
||||||
public MessageGridItems() {
|
public MessageGridUpdate() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageGridItems(INetworkMaster network) {
|
public MessageGridUpdate(INetworkMaster network) {
|
||||||
this.network = network;
|
this.network = network;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,10 +28,8 @@ public class MessageGridItems implements IMessage, IMessageHandler<MessageGridIt
|
|||||||
int items = buf.readInt();
|
int items = buf.readInt();
|
||||||
|
|
||||||
for (int i = 0; i < items; ++i) {
|
for (int i = 0; i < items; ++i) {
|
||||||
int size = buf.readInt();
|
|
||||||
|
|
||||||
ItemStack stack = ByteBufUtils.readItemStack(buf);
|
ItemStack stack = ByteBufUtils.readItemStack(buf);
|
||||||
stack.stackSize = size;
|
stack.stackSize = buf.readInt();
|
||||||
|
|
||||||
this.items.add(stack);
|
this.items.add(stack);
|
||||||
}
|
}
|
||||||
@@ -41,16 +39,15 @@ public class MessageGridItems implements IMessage, IMessageHandler<MessageGridIt
|
|||||||
public void toBytes(ByteBuf buf) {
|
public void toBytes(ByteBuf buf) {
|
||||||
buf.writeInt(network.getStorage().getStacks().size());
|
buf.writeInt(network.getStorage().getStacks().size());
|
||||||
|
|
||||||
for (ItemStack item : network.getStorage().getStacks()) {
|
for (ItemStack stack : network.getStorage().getStacks()) {
|
||||||
buf.writeInt(item.stackSize);
|
ByteBufUtils.writeItemStack(buf, stack);
|
||||||
ByteBufUtils.writeItemStack(buf, item);
|
buf.writeInt(stack.stackSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IMessage onMessage(MessageGridItems message, MessageContext ctx) {
|
public IMessage onMessage(MessageGridUpdate message, MessageContext ctx) {
|
||||||
RefinedStorage.INSTANCE.items = message.items;
|
RefinedStorage.INSTANCE.items = message.items;
|
||||||
RefinedStorage.INSTANCE.lastItemUpdate = System.currentTimeMillis();
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
@@ -55,7 +55,8 @@ public class CommonProxy {
|
|||||||
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingStart.class, MessageGridCraftingStart.class, id++, Side.SERVER);
|
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingStart.class, MessageGridCraftingStart.class, id++, Side.SERVER);
|
||||||
RefinedStorage.NETWORK.registerMessage(MessageGridPatternCreate.class, MessageGridPatternCreate.class, id++, Side.SERVER);
|
RefinedStorage.NETWORK.registerMessage(MessageGridPatternCreate.class, MessageGridPatternCreate.class, id++, Side.SERVER);
|
||||||
RefinedStorage.NETWORK.registerMessage(MessageCraftingMonitorCancel.class, MessageCraftingMonitorCancel.class, id++, Side.SERVER);
|
RefinedStorage.NETWORK.registerMessage(MessageCraftingMonitorCancel.class, MessageCraftingMonitorCancel.class, id++, Side.SERVER);
|
||||||
RefinedStorage.NETWORK.registerMessage(MessageGridItems.class, MessageGridItems.class, id++, Side.CLIENT);
|
RefinedStorage.NETWORK.registerMessage(MessageGridUpdate.class, MessageGridUpdate.class, id++, Side.CLIENT);
|
||||||
|
RefinedStorage.NETWORK.registerMessage(MessageGridDelta.class, MessageGridDelta.class, id++, Side.CLIENT);
|
||||||
|
|
||||||
NetworkRegistry.INSTANCE.registerGuiHandler(RefinedStorage.INSTANCE, new GuiHandler());
|
NetworkRegistry.INSTANCE.registerGuiHandler(RefinedStorage.INSTANCE, new GuiHandler());
|
||||||
|
|
||||||
|
@@ -38,7 +38,8 @@ import refinedstorage.block.EnumControllerType;
|
|||||||
import refinedstorage.container.ContainerController;
|
import refinedstorage.container.ContainerController;
|
||||||
import refinedstorage.container.ContainerGrid;
|
import refinedstorage.container.ContainerGrid;
|
||||||
import refinedstorage.item.ItemPattern;
|
import refinedstorage.item.ItemPattern;
|
||||||
import refinedstorage.network.MessageGridItems;
|
import refinedstorage.network.MessageGridDelta;
|
||||||
|
import refinedstorage.network.MessageGridUpdate;
|
||||||
import refinedstorage.tile.IConnectionHandler;
|
import refinedstorage.tile.IConnectionHandler;
|
||||||
import refinedstorage.tile.ISynchronizedContainer;
|
import refinedstorage.tile.ISynchronizedContainer;
|
||||||
import refinedstorage.tile.TileBase;
|
import refinedstorage.tile.TileBase;
|
||||||
@@ -391,7 +392,16 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendStorageToClient(EntityPlayerMP player) {
|
public void sendStorageToClient(EntityPlayerMP player) {
|
||||||
RefinedStorage.NETWORK.sendTo(new MessageGridItems(this), player);
|
RefinedStorage.NETWORK.sendTo(new MessageGridUpdate(this), player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendStorageDeltaToClient(ItemStack stack, int delta) {
|
||||||
|
for (EntityPlayer player : worldObj.playerEntities) {
|
||||||
|
if (isWatchingGrid(player)) {
|
||||||
|
RefinedStorage.NETWORK.sendTo(new MessageGridDelta(stack, delta, RefinedStorageUtils.getPatternFromNetwork(this, stack) != null), (EntityPlayerMP) player);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isWatchingGrid(EntityPlayer player) {
|
private boolean isWatchingGrid(EntityPlayer player) {
|
||||||
|
@@ -106,6 +106,6 @@ public class WirelessGrid implements IGrid {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isConnected() {
|
public boolean isConnected() {
|
||||||
return System.currentTimeMillis() - RefinedStorage.INSTANCE.lastItemUpdate < 1000;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user