diff --git a/src/main/java/com/glodblock/github/client/gui/GuiLevelMaintainer.java b/src/main/java/com/glodblock/github/client/gui/GuiLevelMaintainer.java index 1fae007a..48e806f1 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiLevelMaintainer.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiLevelMaintainer.java @@ -122,7 +122,6 @@ public class GuiLevelMaintainer extends AEBaseGui implements INEIGuiHandler { @Override public void initGui() { super.initGui(); - TileLevelMaintainer tile = this.cont.getTile(); for (int i = 0; i < TileLevelMaintainer.REQ_COUNT; i++) { component[i] = new Component( new Widget( @@ -140,14 +139,6 @@ public class GuiLevelMaintainer extends AEBaseGui implements INEIGuiHandler { new GuiFCImgButton(guiLeft + 9, guiTop + 20 + 19 * i, "DISABLE", "DISABLE", false), new FCGuiLineField(fontRendererObj, guiLeft + 47, guiTop + 33 + 19 * i, 125), this.buttonList); - - if (tile.requests[i] == null) continue; - component[i].setEnable(tile.requests[i].isEnable()); - component[i].setState(tile.requests[i].getState()); - component[i].getQty().textField.setText(String.valueOf(tile.requests[i].getQuantity())); - component[i].getBatch().textField.setText(String.valueOf(tile.requests[i].getBatchSize())); - component[i].getQty().validate(); - component[i].getBatch().validate(); } if (this.icon != null) { this.originalGuiBtn = new GuiTabButton( @@ -159,8 +150,6 @@ public class GuiLevelMaintainer extends AEBaseGui implements INEIGuiHandler { this.originalGuiBtn.setHideEdge(13); this.buttonList.add(originalGuiBtn); } - - FluidCraft.proxy.netHandler.sendToServer(new CPacketLevelMaintainer()); } @Override @@ -178,11 +167,7 @@ public class GuiLevelMaintainer extends AEBaseGui implements INEIGuiHandler { mc.getTextureManager().bindTexture(TEX_BG); drawTexturedModalRect(offsetX, offsetY, 0, 0, 176, ySize); - TileLevelMaintainer tile = this.cont.getTile(); for (int i = 0; i < TileLevelMaintainer.REQ_COUNT; i++) { - if (tile.requests[i] != null) { - this.component[i].setState(tile.requests[i].getState()); - } this.component[i].draw(); } } @@ -346,6 +331,11 @@ public class GuiLevelMaintainer extends AEBaseGui implements INEIGuiHandler { component[index].getBatch().validate(); } + public void updateComponent(int index, LevelState state) { + if (index < 0 || index >= TileLevelMaintainer.REQ_COUNT) return; + component[index].setState(state); + } + private class Component { public boolean isEnable = false; diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerLevelMaintainer.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerLevelMaintainer.java index 3130c16e..81ab4629 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/ContainerLevelMaintainer.java +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerLevelMaintainer.java @@ -5,9 +5,11 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; +import com.glodblock.github.FluidCraft; import com.glodblock.github.common.tile.TileLevelMaintainer; import com.glodblock.github.inventory.AeItemStackHandler; import com.glodblock.github.inventory.slot.SlotFluidConvertingFake; +import com.glodblock.github.network.SPacketLevelMaintainerGuiUpdate; import appeng.api.config.SecurityPermissions; import appeng.container.AEBaseContainer; @@ -19,6 +21,10 @@ public class ContainerLevelMaintainer extends AEBaseContainer { private final TileLevelMaintainer tile; private final SlotFluidConvertingFake[] requestSlots = new SlotFluidConvertingFake[TileLevelMaintainer.REQ_COUNT]; + private static final int UPDATE_INTERVAL = 20; + private boolean isFirstUpdate = true; + private int updateCount = UPDATE_INTERVAL; + public ContainerLevelMaintainer(InventoryPlayer ipl, TileLevelMaintainer tile) { super(ipl, tile); this.tile = tile; @@ -79,8 +85,23 @@ public class ContainerLevelMaintainer extends AEBaseContainer { @Override public void detectAndSendChanges() { + super.detectAndSendChanges(); + if (Platform.isClient()) { + return; + } + this.verifyPermissions(SecurityPermissions.BUILD, false); - super.detectAndSendChanges(); + if (this.updateCount++ >= UPDATE_INTERVAL) { + this.updateGui(); + } + } + + public void updateGui() { + FluidCraft.proxy.netHandler.sendTo( + new SPacketLevelMaintainerGuiUpdate(this.tile.requests, !this.isFirstUpdate), + (EntityPlayerMP) this.getInventoryPlayer().player); + this.isFirstUpdate = false; + this.updateCount = 0; } } diff --git a/src/main/java/com/glodblock/github/network/CPacketLevelMaintainer.java b/src/main/java/com/glodblock/github/network/CPacketLevelMaintainer.java index 6f959109..7c5732c5 100644 --- a/src/main/java/com/glodblock/github/network/CPacketLevelMaintainer.java +++ b/src/main/java/com/glodblock/github/network/CPacketLevelMaintainer.java @@ -2,7 +2,6 @@ package com.glodblock.github.network; import javax.annotation.Nullable; -import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.container.ContainerLevelMaintainer; import cpw.mods.fml.common.network.simpleimpl.IMessage; @@ -17,18 +16,14 @@ public class CPacketLevelMaintainer implements IMessage { Batch, Enable, Disable, - UPDATE, } private Action action; private long size; private int slotIndex; - public CPacketLevelMaintainer() { - this.action = Action.UPDATE; - this.slotIndex = 0; - this.size = 0; - } + @SuppressWarnings("unused") + public CPacketLevelMaintainer() {} public CPacketLevelMaintainer(Action action, int slotIndex) { this.action = action; @@ -67,8 +62,8 @@ public class CPacketLevelMaintainer implements IMessage { case Batch -> clm.getTile().updateBatchSize(message.slotIndex, message.size); case Enable -> clm.getTile().updateStatus(message.slotIndex, false); case Disable -> clm.getTile().updateStatus(message.slotIndex, true); - case UPDATE -> FluidCraft.proxy.netHandler.sendTo(new SPacketLevelMaintainerGuiUpdate(clm.getTile().requests), ctx.getServerHandler().playerEntity); } + clm.updateGui(); } return null; } diff --git a/src/main/java/com/glodblock/github/network/SPacketLevelMaintainerGuiUpdate.java b/src/main/java/com/glodblock/github/network/SPacketLevelMaintainerGuiUpdate.java index f0e8c5c6..4ca244d7 100644 --- a/src/main/java/com/glodblock/github/network/SPacketLevelMaintainerGuiUpdate.java +++ b/src/main/java/com/glodblock/github/network/SPacketLevelMaintainerGuiUpdate.java @@ -17,12 +17,15 @@ import io.netty.buffer.ByteBuf; public class SPacketLevelMaintainerGuiUpdate implements IMessage { private Info[] infoList; + private boolean onlyState; @SuppressWarnings("unused") public SPacketLevelMaintainerGuiUpdate() {} - SPacketLevelMaintainerGuiUpdate(RequestInfo[] requests) { + public SPacketLevelMaintainerGuiUpdate(RequestInfo[] requests, boolean onlyState) { this.infoList = new Info[REQ_COUNT]; + this.onlyState = onlyState; + for (int i = 0; i < REQ_COUNT; i++) { if (requests[i] == null) { this.infoList[i] = null; @@ -39,13 +42,19 @@ public class SPacketLevelMaintainerGuiUpdate implements IMessage { @Override public void fromBytes(ByteBuf buf) { this.infoList = new Info[REQ_COUNT]; + this.onlyState = buf.readBoolean(); + for (int i = 0; i < REQ_COUNT; i++) { if (buf.readBoolean()) { - this.infoList[i] = new Info( - buf.readLong(), - buf.readLong(), - buf.readBoolean(), - LevelState.values()[buf.readInt()]); + if (this.onlyState) { + this.infoList[i] = new Info(LevelState.values()[buf.readInt()]); + } else { + this.infoList[i] = new Info( + buf.readLong(), + buf.readLong(), + buf.readBoolean(), + LevelState.values()[buf.readInt()]); + } } else { this.infoList[i] = null; } @@ -54,12 +63,15 @@ public class SPacketLevelMaintainerGuiUpdate implements IMessage { @Override public void toBytes(ByteBuf buf) { + buf.writeBoolean(this.onlyState); for (Info info : this.infoList) { buf.writeBoolean(info != null); if (info == null) continue; - buf.writeLong(info.quantity); - buf.writeLong(info.batchSize); - buf.writeBoolean(info.enable); + if (!this.onlyState) { + buf.writeLong(info.quantity); + buf.writeLong(info.batchSize); + buf.writeBoolean(info.enable); + } buf.writeInt(info.state.ordinal()); } } @@ -77,6 +89,13 @@ public class SPacketLevelMaintainerGuiUpdate implements IMessage { this.enable = enable; this.state = state; } + + Info(LevelState state) { + this.quantity = 0; + this.batchSize = 0; + this.enable = false; + this.state = state; + } } public static class Handler implements IMessageHandler { @@ -89,7 +108,11 @@ public class SPacketLevelMaintainerGuiUpdate implements IMessage { for (int i = 0; i < REQ_COUNT; i++) { Info info = message.infoList[i]; if (info == null) continue; - gui.updateComponent(i, info.quantity, info.batchSize, info.enable, info.state); + if (message.onlyState) { + gui.updateComponent(i, info.state); + } else { + gui.updateComponent(i, info.quantity, info.batchSize, info.enable, info.state); + } } }