diff options
author | Martin Robertz <dream-master@gmx.net> | 2023-02-20 08:18:37 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-20 08:18:37 +0100 |
commit | 27ec4f3f5bf29da94e0d24dbfc4671beb7724c8e (patch) | |
tree | 4c6c5a8854a1eba8a72e26a476bf804386a31064 | |
parent | f1f15c9297538e07f79944fe434aad33c4da193f (diff) | |
parent | 5847ecfd38737ad49e483c1d8b197f27f89124b5 (diff) | |
download | GT5-Unofficial-27ec4f3f5bf29da94e0d24dbfc4671beb7724c8e.tar.gz GT5-Unofficial-27ec4f3f5bf29da94e0d24dbfc4671beb7724c8e.tar.bz2 GT5-Unofficial-27ec4f3f5bf29da94e0d24dbfc4671beb7724c8e.zip |
Merge pull request #163 from GTNewHorizons/fix/ender-fluid-link-network
Use ModularUI method for sending Ender Fluid Link Cover message
3 files changed, 34 insertions, 215 deletions
diff --git a/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java b/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java index 105452f3d2..1f53928360 100644 --- a/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java +++ b/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java @@ -4,7 +4,6 @@ import static com.github.technus.tectech.Reference.MODID; import com.github.technus.tectech.mechanics.data.ChunkDataMessage; import com.github.technus.tectech.mechanics.data.PlayerDataMessage; -import com.github.technus.tectech.mechanics.enderStorage.EnderLinkCoverMessage; import com.github.technus.tectech.mechanics.pipe.PipeActivityMessage; import com.github.technus.tectech.mechanics.spark.RendererMessage; @@ -30,11 +29,5 @@ public class NetworkDispatcher extends eu.usrv.yamcore.network.PacketDispatcher registerMessage(PlayerDataMessage.ClientHandler.class, PlayerDataMessage.PlayerDataData.class); registerMessage(RendererMessage.ClientHandler.class, RendererMessage.RendererData.class); - - registerMessage(EnderLinkCoverMessage.ServerHandler.class, EnderLinkCoverMessage.EnderLinkCoverQuery.class); - registerMessage( - EnderLinkCoverMessage.ServerUpdateHandler.class, - EnderLinkCoverMessage.EnderLinkCoverUpdate.class); - registerMessage(EnderLinkCoverMessage.ClientHandler.class, EnderLinkCoverMessage.EnderLinkCoverData.class); } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkCoverMessage.java b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkCoverMessage.java deleted file mode 100644 index e1484d566f..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkCoverMessage.java +++ /dev/null @@ -1,136 +0,0 @@ -package com.github.technus.tectech.mechanics.enderStorage; - -import static com.github.technus.tectech.mechanics.enderStorage.EnderWorldSavedData.bindEnderLinkTag; -import static com.github.technus.tectech.mechanics.enderStorage.EnderWorldSavedData.getEnderLinkTag; -import static com.github.technus.tectech.thing.cover.GT_Cover_TM_EnderFluidLink.setEnderLinkTag; - -import java.io.*; -import java.util.Arrays; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.fluids.IFluidHandler; - -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; -import eu.usrv.yamcore.network.server.AbstractServerMessageHandler; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import io.netty.buffer.ByteBuf; - -public class EnderLinkCoverMessage implements IMessage { - - EnderLinkTankWithTag messageData; - - public EnderLinkCoverMessage() {} - - @Override - public void fromBytes(ByteBuf pBuffer) { - try { - // I'd love to know why I need to offset by one byte for this to work - byte[] boop = pBuffer.array(); - boop = Arrays.copyOfRange(boop, 1, boop.length); - InputStream is = new ByteArrayInputStream(boop); - ObjectInputStream ois = new ObjectInputStream(is); - Object data = ois.readObject(); - messageData = (EnderLinkTankWithTag) data; - } catch (Exception ignore) {} - } - - @Override - public void toBytes(ByteBuf pBuffer) { - try { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream(baos); - oos.writeObject(messageData); - oos.flush(); - InputStream is = new ByteArrayInputStream(baos.toByteArray()); - pBuffer.writeBytes(is, baos.toByteArray().length); - } catch (Exception ignore) {} - } - - public static class EnderLinkCoverQuery extends EnderLinkCoverMessage { - - public EnderLinkCoverQuery() {} - - public EnderLinkCoverQuery(EnderLinkTag tag, IFluidHandler fluidHandler) { - messageData = new EnderLinkTankWithTag(tag, fluidHandler); - } - } - - public static class EnderLinkCoverUpdate extends EnderLinkCoverMessage { - - public EnderLinkCoverUpdate() {} - - public EnderLinkCoverUpdate(EnderLinkTag tag, IFluidHandler fluidHandler) { - messageData = new EnderLinkTankWithTag(tag, fluidHandler); - } - } - - public static class EnderLinkCoverData extends EnderLinkCoverMessage { - - public EnderLinkCoverData() {} - - public EnderLinkCoverData(EnderLinkTag tag, IFluidHandler fluidHandler) { - messageData = new EnderLinkTankWithTag(tag, fluidHandler); - } - } - - public static class ServerHandler extends AbstractServerMessageHandler<EnderLinkCoverQuery> { - - @Override - public IMessage handleServerMessage(EntityPlayer pPlayer, EnderLinkCoverQuery pMessage, MessageContext pCtx) { - IMessage reply = null; - if (pMessage.messageData != null) { - reply = new EnderLinkCoverData( - getEnderLinkTag(pMessage.messageData.getFluidHandler()), - pMessage.messageData.getFluidHandler()); - } - return reply; - } - } - - public static class ServerUpdateHandler extends AbstractServerMessageHandler<EnderLinkCoverUpdate> { - - @Override - public IMessage handleServerMessage(EntityPlayer pPlayer, EnderLinkCoverUpdate pMessage, MessageContext pCtx) { - if (pMessage.messageData != null) { - EnderLinkTag tag = pMessage.messageData.getTag(); - IFluidHandler handler = pMessage.messageData.getFluidHandler(); - if (tag.getUUID() == null) { - bindEnderLinkTag(handler, tag); - } else if (handler instanceof BaseMetaTileEntity) { - BaseMetaTileEntity baseTile = (BaseMetaTileEntity) handler; - if (tag.getUUID().equals(baseTile.getOwnerUuid())) { - bindEnderLinkTag(handler, tag); - } - } - } - return null; - } - } - - public static class ClientHandler extends AbstractClientMessageHandler<EnderLinkCoverData> { - - @Override - public IMessage handleClientMessage(EntityPlayer pPlayer, EnderLinkCoverData pMessage, MessageContext pCtx) { - if (pMessage.messageData != null) { - setEnderLinkTag(pMessage.messageData.getTag()); - } - return null; - } - } - - private static class EnderLinkTankWithTag extends EnderLinkTank { - - private final EnderLinkTag tag; - - public EnderLinkTankWithTag(EnderLinkTag tag, IFluidHandler fluidHandler) { - super(fluidHandler); - this.tag = tag; - } - - public EnderLinkTag getTag() { - return tag; - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_EnderFluidLink.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_EnderFluidLink.java index 53500c683e..8baabd7683 100644 --- a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_EnderFluidLink.java +++ b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_EnderFluidLink.java @@ -11,9 +11,8 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidHandler; -import com.github.technus.tectech.loader.NetworkDispatcher; -import com.github.technus.tectech.mechanics.enderStorage.EnderLinkCoverMessage; import com.github.technus.tectech.mechanics.enderStorage.EnderLinkTag; +import com.github.technus.tectech.mechanics.enderStorage.EnderWorldSavedData; import com.gtnewhorizons.modularui.api.math.Alignment; import com.gtnewhorizons.modularui.api.math.Color; import com.gtnewhorizons.modularui.api.screen.ModularWindow; @@ -24,6 +23,7 @@ import eu.usrv.yamcore.auxiliary.PlayerChatHelper; import gregtech.api.gui.modularui.GT_CoverUIBuildContext; import gregtech.api.gui.modularui.GT_UITextures; import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Utility; import gregtech.api.util.ISerializableObject; @@ -35,18 +35,9 @@ public class GT_Cover_TM_EnderFluidLink extends GT_CoverBehavior { private static final int L_PER_TICK = 8000; private static final int IMPORT_EXPORT_MASK = 0b0001; private static final int PUBLIC_PRIVATE_MASK = 0b0010; - private static EnderLinkTag tag = new EnderLinkTag("", null); // Client-Sided public GT_Cover_TM_EnderFluidLink() {} - public static void setEnderLinkTag(EnderLinkTag inputTag) { - if (inputTag != null) { - tag = inputTag; - // Hacky Way to update the gui - GUI_INSTANCE.resetTextField(); - } - } - private void transferFluid(IFluidHandler source, byte sSide, IFluidHandler target, byte tSide, int amount) { FluidStack fluidStack = source.drain(ForgeDirection.getOrientation(sSide), amount, false); @@ -116,8 +107,6 @@ public class GT_Cover_TM_EnderFluidLink extends GT_CoverBehavior { // region GUI - private static EnderFluidLinkUIFactory GUI_INSTANCE; - @Override public boolean hasCoverGUI() { return true; @@ -148,8 +137,6 @@ public class GT_Cover_TM_EnderFluidLink extends GT_CoverBehavior { private static final int IMPORT_BUTTON_ID = 2; private static final int EXPORT_BUTTON_ID = 3; - private TextFieldWidget frequencyField; - public EnderFluidLinkUIFactory(GT_CoverUIBuildContext buildContext) { super(buildContext); } @@ -157,31 +144,29 @@ public class GT_Cover_TM_EnderFluidLink extends GT_CoverBehavior { @SuppressWarnings("PointlessArithmeticExpression") @Override protected void addUIWidgets(ModularWindow.Builder builder) { - NetworkDispatcher.INSTANCE.sendToServer( - new EnderLinkCoverMessage.EnderLinkCoverQuery(tag, (IFluidHandler) getUIBuildContext().getTile())); - GUI_INSTANCE = this; - frequencyField = new TextFieldWidget() { - - @Override - public void onRemoveFocus() { - super.onRemoveFocus(); - try { - String string = getText(); - tag = new EnderLinkTag(string, tag.getUUID()); - NetworkDispatcher.INSTANCE.sendToServer( - new EnderLinkCoverMessage.EnderLinkCoverUpdate( - tag, - (IFluidHandler) getUIBuildContext().getTile())); - } catch (NumberFormatException ignored) {} - resetTextField(); + TextFieldWidget frequencyField = new TextFieldWidget(); + builder.widget(frequencyField.setGetter(() -> { + ICoverable te = getUIBuildContext().getTile(); + if (!frequencyField.isClient() && te instanceof IFluidHandler) { + return EnderWorldSavedData.getEnderLinkTag((IFluidHandler) te).getFrequency(); } - }; - - builder.widget( - frequencyField.setTextColor(Color.WHITE.dark(1)).setTextAlignment(Alignment.CenterLeft) - .setFocusOnGuiOpen(true) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) - .setPos(START_X + SPACE_X * 0, START_Y + SPACE_Y * 0).setSize(SPACE_X * 5 - 8, 12)) + return ""; + }).setSetter(val -> { + ICoverable te = getUIBuildContext().getTile(); + if (!frequencyField.isClient() && te instanceof IFluidHandler) { + UUID uuid; + if (testBit(convert(getCoverData()), PUBLIC_PRIVATE_MASK)) { + uuid = getUUID(); + if (!(te instanceof IGregTechTileEntity)) return; + if (!uuid.equals(((IGregTechTileEntity) te).getOwnerUuid())) return; + } else { + uuid = null; + } + EnderWorldSavedData.bindEnderLinkTag((IFluidHandler) te, new EnderLinkTag(val, uuid)); + } + }).setTextColor(Color.WHITE.dark(1)).setTextAlignment(Alignment.CenterLeft).setFocusOnGuiOpen(true) + .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) + .setPos(START_X + SPACE_X * 0, START_Y + SPACE_Y * 0).setSize(SPACE_X * 5 - 8, 12)) .widget( new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( this::getCoverData, @@ -237,59 +222,36 @@ public class GT_Cover_TM_EnderFluidLink extends GT_CoverBehavior { new TextWidget(GT_Utility.trans("229", "Import/Export")) .setDefaultColor(COLOR_TEXT_GRAY.get()) .setPos(START_X + SPACE_X * 2, 4 + START_Y + SPACE_Y * 3)); - - resetTextField(); } private int getNewCoverVariable(int id, int coverVariable) { - int tempCoverVariable = coverVariable; switch (id) { case PUBLIC_BUTTON_ID: case PRIVATE_BUTTON_ID: - tempCoverVariable = toggleBit(tempCoverVariable, PUBLIC_PRIVATE_MASK); - switchPrivatePublic(tempCoverVariable); - break; + return toggleBit(coverVariable, PUBLIC_PRIVATE_MASK); case IMPORT_BUTTON_ID: case EXPORT_BUTTON_ID: - tempCoverVariable = toggleBit(tempCoverVariable, IMPORT_EXPORT_MASK); + return toggleBit(coverVariable, IMPORT_EXPORT_MASK); } - return tempCoverVariable; + return coverVariable; } private boolean getClickable(int id, int coverVariable) { - boolean canBeClicked = false; switch (id) { case PUBLIC_BUTTON_ID: - canBeClicked = testBit(coverVariable, PUBLIC_PRIVATE_MASK); - break; + return testBit(coverVariable, PUBLIC_PRIVATE_MASK); case PRIVATE_BUTTON_ID: - canBeClicked = !testBit(coverVariable, PUBLIC_PRIVATE_MASK); - break; + return !testBit(coverVariable, PUBLIC_PRIVATE_MASK); case IMPORT_BUTTON_ID: - canBeClicked = testBit(coverVariable, IMPORT_EXPORT_MASK); - break; + return testBit(coverVariable, IMPORT_EXPORT_MASK); case EXPORT_BUTTON_ID: - canBeClicked = !testBit(coverVariable, IMPORT_EXPORT_MASK); + return !testBit(coverVariable, IMPORT_EXPORT_MASK); } - return canBeClicked; - } - - private void resetTextField() { - frequencyField.setText(tag.getFrequency()); + return false; } - private void switchPrivatePublic(int coverVar) { - UUID ownerUUID; - if (testBit(coverVar, PUBLIC_PRIVATE_MASK)) { - ownerUUID = getUIBuildContext().getPlayer().getUniqueID(); - } else { - ownerUUID = null; - } - EnderLinkTag newTag = new EnderLinkTag(tag.getFrequency(), ownerUUID); - NetworkDispatcher.INSTANCE.sendToServer( - new EnderLinkCoverMessage.EnderLinkCoverUpdate( - newTag, - (IFluidHandler) getUIBuildContext().getTile())); + private UUID getUUID() { + return getUIBuildContext().getPlayer().getUniqueID(); } } } |