From 7effae7780b5e942a4e8b30f601abf09238ebf2e Mon Sep 17 00:00:00 2001 From: Zorbatron Date: Sat, 15 Jun 2024 14:46:08 -0400 Subject: [PATCH 01/13] Switch to MUI2 and allow on/off on item --- .../MetaTileEntityPassthroughHatchItem.java | 130 +++++++++++++++--- .../resources/assets/gregtech/lang/en_us.lang | 4 + 2 files changed, 113 insertions(+), 21 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index febd79c80d6..9803ece2a7b 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -1,20 +1,19 @@ package gregtech.common.metatileentities.multi.multiblockpart; +import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.impl.ItemHandlerProxy; import gregtech.api.capability.impl.NotifiableItemStackHandler; -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.ModularUI; -import gregtech.api.gui.widgets.SlotWidget; import gregtech.api.items.itemhandlers.GTItemStackHandler; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.IPassthroughHatch; import gregtech.api.metatileentity.multiblock.MultiblockAbility; +import gregtech.api.mui.GTGuiTextures; +import gregtech.api.mui.GTGuis; import gregtech.client.renderer.texture.Textures; import net.minecraft.client.resources.I18n; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -29,9 +28,23 @@ import codechicken.lib.render.CCRenderState; import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Matrix4; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.widget.IWidget; +import com.cleanroommc.modularui.factory.PosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.BoolValue; +import com.cleanroommc.modularui.value.sync.BooleanSyncValue; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.SyncHandlers; +import com.cleanroommc.modularui.widgets.ItemSlot; +import com.cleanroommc.modularui.widgets.SlotGroupWidget; +import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Column; +import com.cleanroommc.modularui.widgets.layout.Grid; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.List; public class MetaTileEntityPassthroughHatchItem extends MetaTileEntityMultiblockPart implements IPassthroughHatch, @@ -42,8 +55,11 @@ public class MetaTileEntityPassthroughHatchItem extends MetaTileEntityMultiblock private IItemHandler importHandler; private IItemHandler exportHandler; + private boolean workingEnabled; + public MetaTileEntityPassthroughHatchItem(ResourceLocation metaTileEntityId, int tier) { super(metaTileEntityId, tier); + this.workingEnabled = true; initializeInventory(); } @@ -68,9 +84,19 @@ private int getInventorySize() { @Override public void update() { super.update(); - if (!getWorld().isRemote && getOffsetTimer() % 5 == 0) { - pushItemsIntoNearbyHandlers(getFrontFacing().getOpposite()); // outputs to back - pullItemsFromNearbyHandlers(getFrontFacing()); // inputs from front + if (workingEnabled) { + if (!getWorld().isRemote && getOffsetTimer() % 5 == 0) { + pushItemsIntoNearbyHandlers(getFrontFacing().getOpposite()); // outputs to back + pullItemsFromNearbyHandlers(getFrontFacing()); // inputs from front + } + } + } + + public void setWorkingEnabled(boolean workingEnabled) { + this.workingEnabled = workingEnabled; + World world = getWorld(); + if (world != null && !world.isRemote) { + writeCustomData(GregtechDataCodes.WORKING_ENABLED, buf -> buf.writeBoolean(workingEnabled)); } } @@ -99,32 +125,90 @@ protected IItemHandlerModifiable createImportItemHandler() { return new NotifiableItemStackHandler(this, getInventorySize(), getController(), false); } + /* + * @Override + * protected ModularUI createUI(EntityPlayer entityPlayer) { + * int rowSize = (int) Math.sqrt(getInventorySize()); + * return createUITemplate(entityPlayer, rowSize) + * .build(getHolder(), entityPlayer); + * } + * + * private ModularUI.Builder createUITemplate(EntityPlayer player, int rowSize) { + * ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 18 + 18 * rowSize + 94) + * .label(6, 6, getMetaFullName()); + * + * for (int y = 0; y < rowSize; y++) { + * for (int x = 0; x < rowSize; x++) { + * int index = y * rowSize + x; + * builder.widget(new SlotWidget(itemStackHandler, index, + * (88 - rowSize * 9 + x * 18), 18 + y * 18, true, true) + * .setBackgroundTexture(GuiTextures.SLOT)); + * } + * } + * return builder.bindPlayerInventory(player.inventory, GuiTextures.SLOT, 7, 18 + 18 * rowSize + 12); + * } + */ + @Override - protected ModularUI createUI(EntityPlayer entityPlayer) { - int rowSize = (int) Math.sqrt(getInventorySize()); - return createUITemplate(entityPlayer, rowSize) - .build(getHolder(), entityPlayer); + public boolean usesMui2() { + return true; } - private ModularUI.Builder createUITemplate(EntityPlayer player, int rowSize) { - ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 18 + 18 * rowSize + 94) - .label(6, 6, getMetaFullName()); + @Override + public ModularPanel buildUI(PosGuiData guiData, GuiSyncManager guiSyncManager) { + int rowSize = (int) Math.sqrt(getInventorySize()); + + guiSyncManager.registerSlotGroup("item_inv", rowSize); + + int backgroundWidth = Math.max( + 9 * 18 + 18 + 14 + 5, // Player Inv width + rowSize * 18 + 14); // Bus Inv width + int backgroundHeight = 18 + 18 * rowSize + 94; - for (int y = 0; y < rowSize; y++) { - for (int x = 0; x < rowSize; x++) { - int index = y * rowSize + x; - builder.widget(new SlotWidget(itemStackHandler, index, - (88 - rowSize * 9 + x * 18), 18 + y * 18, true, true) - .setBackgroundTexture(GuiTextures.SLOT)); + List> widgets = new ArrayList<>(); + for (int i = 0; i < rowSize; i++) { + widgets.add(new ArrayList<>()); + for (int j = 0; j < rowSize; j++) { + widgets.get(i) + .add(new ItemSlot() + .slot(SyncHandlers.itemSlot(itemStackHandler, i * rowSize + j) + .slotGroup("item_inv") + .accessibility(true, true))); } } - return builder.bindPlayerInventory(player.inventory, GuiTextures.SLOT, 7, 18 + 18 * rowSize + 12); + + BooleanSyncValue workingStateValue = new BooleanSyncValue(() -> workingEnabled, val -> workingEnabled = val); + guiSyncManager.syncValue("working_state", workingStateValue); + + return GTGuis.createPanel(this, backgroundWidth, backgroundHeight) + .child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5)) + .child(SlotGroupWidget.playerInventory().left(7).bottom(7)) + .child(new Grid() + .top(18).height(rowSize * 18) + .minElementMargin(0, 0) + .minColWidth(18).minRowHeight(18) + .alignX(0.5f) + .matrix(widgets)) + .child(new Column() + .pos(backgroundWidth - 7 - 18, backgroundHeight - 18 * 4 - 7 - 5) + .width(18).height(18 * 4 + 5) + .child(GTGuiTextures.getLogo(getUITheme()).asWidget().size(17).top(18 * 3 + 5)) + .child(new ToggleButton() + .top(18 * 2) + .value(new BoolValue.Dynamic(workingStateValue::getBoolValue, + workingStateValue::setBoolValue)) + .overlay(GTGuiTextures.BUTTON_ITEM_OUTPUT) + .tooltipBuilder(t -> t.setAutoUpdate(true) + .addLine(workingStateValue.getBoolValue() ? + IKey.lang("gregtech.gui.item_passthrough.enabled") : + IKey.lang("gregtech.gui.item_passthrough.disabled"))))); } @Override public NBTTagCompound writeToNBT(NBTTagCompound tag) { super.writeToNBT(tag); tag.setTag("Inventory", itemStackHandler.serializeNBT()); + tag.setBoolean("workingEnabled", workingEnabled); return tag; } @@ -132,6 +216,10 @@ public NBTTagCompound writeToNBT(NBTTagCompound tag) { public void readFromNBT(NBTTagCompound tag) { super.readFromNBT(tag); this.itemStackHandler.deserializeNBT(tag.getCompoundTag("Inventory")); + // Passthrough hatches before this change won't have workingEnabled at all, so we need to check if it exists + if (tag.hasKey("workingEnabled")) { + this.workingEnabled = tag.getBoolean("workingEnabled"); + } } @Override diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 639b092efac..cc868d54a83 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -5533,6 +5533,10 @@ gregtech.gui.config_slot.auto_pull_managed=§4Disabled:§7 Managed by Auto-Pull gregtech.gui.me_bus.extra_slot=Extra Slot/n§7Put extra items for recipes here, like Molds or Lenses gregtech.gui.me_bus.auto_pull_button=Click to toggle automatic item pulling from ME gregtech.gui.alarm.radius=Radius: +gregtech.gui.item_passthrough.enabled=Item Passthough Enabled +gregtech.gui.item_passthrough.disabled=Item Passthough Disabled +gregtech.gui.fluid_passthrough.enabled=Fluid Passthough Enabled +gregtech.gui.fluid_passthrough.disabled=Fluid Passthough Disabled ore.spawnlocation.name=Ore Spawn Information From 51e882ecaab1f5ac2a3019d7e34eb26430495f11 Mon Sep 17 00:00:00 2001 From: Zorbatron Date: Sat, 15 Jun 2024 14:48:07 -0400 Subject: [PATCH 02/13] Fogor to remove commented out code --- .../MetaTileEntityPassthroughHatchItem.java | 24 ------------------- 1 file changed, 24 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index 9803ece2a7b..95c05e3ff06 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -125,30 +125,6 @@ protected IItemHandlerModifiable createImportItemHandler() { return new NotifiableItemStackHandler(this, getInventorySize(), getController(), false); } - /* - * @Override - * protected ModularUI createUI(EntityPlayer entityPlayer) { - * int rowSize = (int) Math.sqrt(getInventorySize()); - * return createUITemplate(entityPlayer, rowSize) - * .build(getHolder(), entityPlayer); - * } - * - * private ModularUI.Builder createUITemplate(EntityPlayer player, int rowSize) { - * ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 18 + 18 * rowSize + 94) - * .label(6, 6, getMetaFullName()); - * - * for (int y = 0; y < rowSize; y++) { - * for (int x = 0; x < rowSize; x++) { - * int index = y * rowSize + x; - * builder.widget(new SlotWidget(itemStackHandler, index, - * (88 - rowSize * 9 + x * 18), 18 + y * 18, true, true) - * .setBackgroundTexture(GuiTextures.SLOT)); - * } - * } - * return builder.bindPlayerInventory(player.inventory, GuiTextures.SLOT, 7, 18 + 18 * rowSize + 12); - * } - */ - @Override public boolean usesMui2() { return true; From 1fcbcbebbb99c69573ff1eed33ac3534002cc3c1 Mon Sep 17 00:00:00 2001 From: Zorbatron Date: Sat, 15 Jun 2024 15:05:49 -0400 Subject: [PATCH 03/13] Allow soft malleting and controller covers (fluid UI unfinished) --- .../MetaTileEntityPassthroughHatchFluid.java | 106 +++++++++++++----- .../MetaTileEntityPassthroughHatchItem.java | 13 ++- 2 files changed, 90 insertions(+), 29 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index 84c388dece1..8177579dbdb 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -1,21 +1,21 @@ package gregtech.common.metatileentities.multi.multiblockpart; +import gregtech.api.capability.GregtechDataCodes; +import gregtech.api.capability.GregtechTileCapabilities; +import gregtech.api.capability.IControllable; import gregtech.api.capability.impl.FilteredFluidHandler; import gregtech.api.capability.impl.FluidHandlerProxy; import gregtech.api.capability.impl.FluidTankList; import gregtech.api.capability.impl.NotifiableItemStackHandler; -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.ModularUI; -import gregtech.api.gui.widgets.TankWidget; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.IPassthroughHatch; import gregtech.api.metatileentity.multiblock.MultiblockAbility; +import gregtech.api.mui.GTGuis; import gregtech.client.renderer.texture.Textures; import net.minecraft.client.resources.I18n; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -29,13 +29,19 @@ import codechicken.lib.render.CCRenderState; import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Matrix4; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.factory.PosGuiData; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widgets.SlotGroupWidget; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; public class MetaTileEntityPassthroughHatchFluid extends MetaTileEntityMultiblockPart implements IPassthroughHatch, - IMultiblockAbilityPart { + IMultiblockAbilityPart, + IControllable { private static final int TANK_SIZE = 16_000; @@ -44,8 +50,11 @@ public class MetaTileEntityPassthroughHatchFluid extends MetaTileEntityMultibloc private IFluidHandler importHandler; private IFluidHandler exportHandler; + private boolean workingEnabled; + public MetaTileEntityPassthroughHatchFluid(ResourceLocation metaTileEntityId, int tier) { super(metaTileEntityId, tier); + this.workingEnabled = true; initializeInventory(); } @@ -69,12 +78,26 @@ protected void initializeInventory() { @Override public void update() { super.update(); - if (!getWorld().isRemote && getOffsetTimer() % 5 == 0) { - pushFluidsIntoNearbyHandlers(getFrontFacing().getOpposite()); // outputs to back - pullFluidsFromNearbyHandlers(getFrontFacing()); // inputs from front + if (workingEnabled) { + if (!getWorld().isRemote && getOffsetTimer() % 5 == 0) { + pushFluidsIntoNearbyHandlers(getFrontFacing().getOpposite()); // outputs to back + pullFluidsFromNearbyHandlers(getFrontFacing()); // inputs from front + } + } + } + + public void setWorkingEnabled(boolean workingEnabled) { + this.workingEnabled = workingEnabled; + World world = getWorld(); + if (world != null && !world.isRemote) { + writeCustomData(GregtechDataCodes.WORKING_ENABLED, buf -> buf.writeBoolean(workingEnabled)); } } + public boolean isWorkingEnabled() { + return this.workingEnabled; + } + @Override public void renderMetaTileEntity(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline) { super.renderMetaTileEntity(renderState, translation, pipeline); @@ -100,34 +123,55 @@ protected IItemHandlerModifiable createImportItemHandler() { return new NotifiableItemStackHandler(this, TANK_SIZE, getController(), false); } + /* + * @Override + * protected ModularUI createUI(EntityPlayer entityPlayer) { + * int rowSize = (int) Math.sqrt(getTier() + 1); + * return createUITemplate(entityPlayer, rowSize) + * .build(getHolder(), entityPlayer); + * } + * + * private ModularUI.Builder createUITemplate(EntityPlayer player, int rowSize) { + * ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 18 + 18 * rowSize + 94) + * .label(6, 6, getMetaFullName()); + * + * for (int y = 0; y < rowSize; y++) { + * for (int x = 0; x < rowSize; x++) { + * int index = y * rowSize + x; + * builder.widget( + * new TankWidget(fluidTankList.getTankAt(index), 89 - rowSize * 9 + x * 18, 18 + y * 18, 18, 18) + * .setBackgroundTexture(GuiTextures.FLUID_SLOT) + * .setContainerClicking(true, true) + * .setAlwaysShowFull(true)); + * } + * } + * return builder.bindPlayerInventory(player.inventory, GuiTextures.SLOT, 7, 18 + 18 * rowSize + 12); + * } + */ + @Override - protected ModularUI createUI(EntityPlayer entityPlayer) { + public boolean usesMui2() { + return true; + } + + @Override + public ModularPanel buildUI(PosGuiData guiData, GuiSyncManager guiSyncManager) { int rowSize = (int) Math.sqrt(getTier() + 1); - return createUITemplate(entityPlayer, rowSize) - .build(getHolder(), entityPlayer); - } - - private ModularUI.Builder createUITemplate(EntityPlayer player, int rowSize) { - ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 18 + 18 * rowSize + 94) - .label(6, 6, getMetaFullName()); - - for (int y = 0; y < rowSize; y++) { - for (int x = 0; x < rowSize; x++) { - int index = y * rowSize + x; - builder.widget( - new TankWidget(fluidTankList.getTankAt(index), 89 - rowSize * 9 + x * 18, 18 + y * 18, 18, 18) - .setBackgroundTexture(GuiTextures.FLUID_SLOT) - .setContainerClicking(true, true) - .setAlwaysShowFull(true)); - } - } - return builder.bindPlayerInventory(player.inventory, GuiTextures.SLOT, 7, 18 + 18 * rowSize + 12); + int backgroundWidth = Math.max( + 9 * 18 + 18 + 14 + 5, // Player Inv width + rowSize * 18 + 14); // Bus Inv width + int backgroundHeight = 18 + 18 * rowSize + 94; + + return GTGuis.createPanel(this, backgroundWidth, backgroundHeight) + .child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5)) + .child(SlotGroupWidget.playerInventory().left(7).bottom(7)); } @Override public NBTTagCompound writeToNBT(NBTTagCompound tag) { super.writeToNBT(tag); tag.setTag("FluidInventory", fluidTankList.serializeNBT()); + tag.setBoolean("workingEnabled", workingEnabled); return tag; } @@ -135,6 +179,10 @@ public NBTTagCompound writeToNBT(NBTTagCompound tag) { public void readFromNBT(NBTTagCompound tag) { super.readFromNBT(tag); this.fluidTankList.deserializeNBT(tag.getCompoundTag("FluidInventory")); + // Passthrough hatches before this change won't have workingEnabled at all, so we need to check if it exists + if (tag.hasKey("workingEnabled")) { + this.workingEnabled = tag.getBoolean("workingEnabled"); + } } @Override @@ -174,6 +222,8 @@ public T getCapability(Capability capability, EnumFacing side) { } else if (side == getFrontFacing().getOpposite()) { return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(exportHandler); } else return null; + } else if (capability == GregtechTileCapabilities.CAPABILITY_CONTROLLABLE) { + return GregtechTileCapabilities.CAPABILITY_CONTROLLABLE.cast(this); } return super.getCapability(capability, side); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index 95c05e3ff06..204105ad2d1 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -1,6 +1,8 @@ package gregtech.common.metatileentities.multi.multiblockpart; import gregtech.api.capability.GregtechDataCodes; +import gregtech.api.capability.GregtechTileCapabilities; +import gregtech.api.capability.IControllable; import gregtech.api.capability.impl.ItemHandlerProxy; import gregtech.api.capability.impl.NotifiableItemStackHandler; import gregtech.api.items.itemhandlers.GTItemStackHandler; @@ -48,7 +50,8 @@ import java.util.List; public class MetaTileEntityPassthroughHatchItem extends MetaTileEntityMultiblockPart implements IPassthroughHatch, - IMultiblockAbilityPart { + IMultiblockAbilityPart, + IControllable { private ItemStackHandler itemStackHandler; @@ -92,6 +95,12 @@ public void update() { } } + @Override + public boolean isWorkingEnabled() { + return this.workingEnabled; + } + + @Override public void setWorkingEnabled(boolean workingEnabled) { this.workingEnabled = workingEnabled; World world = getWorld(); @@ -240,6 +249,8 @@ public T getCapability(Capability capability, EnumFacing side) { } else if (side == getFrontFacing().getOpposite()) { return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(exportHandler); } else return null; + } else if (capability == GregtechTileCapabilities.CAPABILITY_CONTROLLABLE) { + return GregtechTileCapabilities.CAPABILITY_CONTROLLABLE.cast(this); } return super.getCapability(capability, side); } From c58f4f0b3ec46ab4d95758e130079722e2f5dd7a Mon Sep 17 00:00:00 2001 From: Zorbatron Date: Sat, 15 Jun 2024 15:52:16 -0400 Subject: [PATCH 04/13] Fluid passthrough UI shows fluid, but not fully interactable --- .../MetaTileEntityPassthroughHatchFluid.java | 44 ++++++++++++++++++- .../MetaTileEntityPassthroughHatchItem.java | 14 +++--- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index 8177579dbdb..c0daff5fe1f 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -12,6 +12,7 @@ import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.IPassthroughHatch; import gregtech.api.metatileentity.multiblock.MultiblockAbility; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.client.renderer.texture.Textures; @@ -30,13 +31,21 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Matrix4; import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.factory.PosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.value.BoolValue; +import com.cleanroommc.modularui.value.sync.BooleanSyncValue; import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.widgets.FluidSlot; import com.cleanroommc.modularui.widgets.SlotGroupWidget; +import com.cleanroommc.modularui.widgets.ToggleButton; +import com.cleanroommc.modularui.widgets.layout.Column; +import com.cleanroommc.modularui.widgets.layout.Grid; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.List; public class MetaTileEntityPassthroughHatchFluid extends MetaTileEntityMultiblockPart implements IPassthroughHatch, @@ -157,14 +166,47 @@ public boolean usesMui2() { @Override public ModularPanel buildUI(PosGuiData guiData, GuiSyncManager guiSyncManager) { int rowSize = (int) Math.sqrt(getTier() + 1); + int backgroundWidth = Math.max( 9 * 18 + 18 + 14 + 5, // Player Inv width rowSize * 18 + 14); // Bus Inv width int backgroundHeight = 18 + 18 * rowSize + 94; + List> widgets = new ArrayList<>(); + for (int i = 0; i < rowSize; i++) { + widgets.add(new ArrayList<>()); + for (int j = 0; j < rowSize; j++) { + widgets.get(i) + .add(new FluidSlot().syncHandler(fluidTankList.getTankAt(i * rowSize + j)) + .background(GTGuiTextures.FLUID_SLOT) + .alwaysShowFull(true)); + } + } + BooleanSyncValue workingStateValue = new BooleanSyncValue(() -> workingEnabled, val -> workingEnabled = val); + guiSyncManager.syncValue("working_state", workingStateValue); + return GTGuis.createPanel(this, backgroundWidth, backgroundHeight) .child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5)) - .child(SlotGroupWidget.playerInventory().left(7).bottom(7)); + .child(SlotGroupWidget.playerInventory().left(7).bottom(7)) + .child(new Column() + .pos(backgroundWidth - 7 - 18, backgroundHeight - 18 * 4 - 7 - 5) + .width(18).height(18 * 4 + 5) + .child(GTGuiTextures.getLogo(getUITheme()).asWidget().size(17).top(18 * 3 + 5)) + .child(new ToggleButton() + .top(18 * 2) + .value(new BoolValue.Dynamic(workingStateValue::getBoolValue, + workingStateValue::setBoolValue)) + .overlay(GTGuiTextures.BUTTON_FLUID_OUTPUT) + .tooltipBuilder(t -> t.setAutoUpdate(true) + .addLine(workingStateValue.getBoolValue() ? + IKey.lang("gregtech.gui.fluid_passthrough.enabled") : + IKey.lang("gregtech.gui.fluid_passthrough.disabled"))))) + .child(new Grid() + .top(18).height(rowSize * 18) + .minElementMargin(0, 0) + .minColWidth(18).minRowHeight(18) + .alignX(0.5f) + .matrix(widgets)); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index 204105ad2d1..2823084ea12 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -168,12 +168,6 @@ public ModularPanel buildUI(PosGuiData guiData, GuiSyncManager guiSyncManager) { return GTGuis.createPanel(this, backgroundWidth, backgroundHeight) .child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5)) .child(SlotGroupWidget.playerInventory().left(7).bottom(7)) - .child(new Grid() - .top(18).height(rowSize * 18) - .minElementMargin(0, 0) - .minColWidth(18).minRowHeight(18) - .alignX(0.5f) - .matrix(widgets)) .child(new Column() .pos(backgroundWidth - 7 - 18, backgroundHeight - 18 * 4 - 7 - 5) .width(18).height(18 * 4 + 5) @@ -186,7 +180,13 @@ public ModularPanel buildUI(PosGuiData guiData, GuiSyncManager guiSyncManager) { .tooltipBuilder(t -> t.setAutoUpdate(true) .addLine(workingStateValue.getBoolValue() ? IKey.lang("gregtech.gui.item_passthrough.enabled") : - IKey.lang("gregtech.gui.item_passthrough.disabled"))))); + IKey.lang("gregtech.gui.item_passthrough.disabled"))))) + .child(new Grid() + .top(18).height(rowSize * 18) + .minElementMargin(0, 0) + .minColWidth(18).minRowHeight(18) + .alignX(0.5f) + .matrix(widgets)); } @Override From 6f417886581ba99fe8e1605f2f002695f556f18d Mon Sep 17 00:00:00 2001 From: Zorbatron Date: Sat, 15 Jun 2024 16:07:20 -0400 Subject: [PATCH 05/13] Add more fail safes for passthrough hatches placed in world before this update --- .../MetaTileEntityPassthroughHatchFluid.java | 28 ++----------------- .../MetaTileEntityPassthroughHatchItem.java | 2 ++ 2 files changed, 4 insertions(+), 26 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index c0daff5fe1f..cae59cf8267 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -132,32 +132,6 @@ protected IItemHandlerModifiable createImportItemHandler() { return new NotifiableItemStackHandler(this, TANK_SIZE, getController(), false); } - /* - * @Override - * protected ModularUI createUI(EntityPlayer entityPlayer) { - * int rowSize = (int) Math.sqrt(getTier() + 1); - * return createUITemplate(entityPlayer, rowSize) - * .build(getHolder(), entityPlayer); - * } - * - * private ModularUI.Builder createUITemplate(EntityPlayer player, int rowSize) { - * ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 18 + 18 * rowSize + 94) - * .label(6, 6, getMetaFullName()); - * - * for (int y = 0; y < rowSize; y++) { - * for (int x = 0; x < rowSize; x++) { - * int index = y * rowSize + x; - * builder.widget( - * new TankWidget(fluidTankList.getTankAt(index), 89 - rowSize * 9 + x * 18, 18 + y * 18, 18, 18) - * .setBackgroundTexture(GuiTextures.FLUID_SLOT) - * .setContainerClicking(true, true) - * .setAlwaysShowFull(true)); - * } - * } - * return builder.bindPlayerInventory(player.inventory, GuiTextures.SLOT, 7, 18 + 18 * rowSize + 12); - * } - */ - @Override public boolean usesMui2() { return true; @@ -224,6 +198,8 @@ public void readFromNBT(NBTTagCompound tag) { // Passthrough hatches before this change won't have workingEnabled at all, so we need to check if it exists if (tag.hasKey("workingEnabled")) { this.workingEnabled = tag.getBoolean("workingEnabled"); + } else if (!tag.hasKey("workingEnabled")) { + this.workingEnabled = true; } } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index 2823084ea12..ce3ea9a9793 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -204,6 +204,8 @@ public void readFromNBT(NBTTagCompound tag) { // Passthrough hatches before this change won't have workingEnabled at all, so we need to check if it exists if (tag.hasKey("workingEnabled")) { this.workingEnabled = tag.getBoolean("workingEnabled"); + } else if (!tag.hasKey("workingEnabled")) { + this.workingEnabled = true; } } From 4af7d84a27744fe0c2658d323b92b0db7b3bdd11 Mon Sep 17 00:00:00 2001 From: Zorbatron Date: Tue, 18 Jun 2024 03:28:09 -0400 Subject: [PATCH 06/13] Change order of code to make it more closely align with existing code --- .../multiblockpart/MetaTileEntityPassthroughHatchFluid.java | 4 ++-- .../multiblockpart/MetaTileEntityPassthroughHatchItem.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index cae59cf8267..469b5a65186 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -87,8 +87,8 @@ protected void initializeInventory() { @Override public void update() { super.update(); - if (workingEnabled) { - if (!getWorld().isRemote && getOffsetTimer() % 5 == 0) { + if (!getWorld().isRemote && getOffsetTimer() % 5 == 0) { + if (workingEnabled) { pushFluidsIntoNearbyHandlers(getFrontFacing().getOpposite()); // outputs to back pullFluidsFromNearbyHandlers(getFrontFacing()); // inputs from front } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index ce3ea9a9793..958d00ae87e 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -87,8 +87,8 @@ private int getInventorySize() { @Override public void update() { super.update(); - if (workingEnabled) { - if (!getWorld().isRemote && getOffsetTimer() % 5 == 0) { + if (!getWorld().isRemote && getOffsetTimer() % 5 == 0) { + if (workingEnabled) { pushItemsIntoNearbyHandlers(getFrontFacing().getOpposite()); // outputs to back pullItemsFromNearbyHandlers(getFrontFacing()); // inputs from front } From f546b7011603d2ccaea5e926f4e3a2cf8def71a3 Mon Sep 17 00:00:00 2001 From: Zorbatron Date: Wed, 18 Sep 2024 22:29:59 -0400 Subject: [PATCH 07/13] Change to work with latest mui2 --- .../multiblockpart/MetaTileEntityPassthroughHatchFluid.java | 4 ++-- .../multiblockpart/MetaTileEntityPassthroughHatchItem.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index 469b5a65186..60243e48784 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -36,7 +36,7 @@ import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.BoolValue; import com.cleanroommc.modularui.value.sync.BooleanSyncValue; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.PanelSyncManager; import com.cleanroommc.modularui.widgets.FluidSlot; import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.ToggleButton; @@ -138,7 +138,7 @@ public boolean usesMui2() { } @Override - public ModularPanel buildUI(PosGuiData guiData, GuiSyncManager guiSyncManager) { + public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) { int rowSize = (int) Math.sqrt(getTier() + 1); int backgroundWidth = Math.max( diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index 958d00ae87e..d9adcfa66ba 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -36,7 +36,7 @@ import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.BoolValue; import com.cleanroommc.modularui.value.sync.BooleanSyncValue; -import com.cleanroommc.modularui.value.sync.GuiSyncManager; +import com.cleanroommc.modularui.value.sync.PanelSyncManager; import com.cleanroommc.modularui.value.sync.SyncHandlers; import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.SlotGroupWidget; @@ -140,7 +140,7 @@ public boolean usesMui2() { } @Override - public ModularPanel buildUI(PosGuiData guiData, GuiSyncManager guiSyncManager) { + public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) { int rowSize = (int) Math.sqrt(getInventorySize()); guiSyncManager.registerSlotGroup("item_inv", rowSize); From 09bd1297f9e54884cbee614039ffc6a447141161 Mon Sep 17 00:00:00 2001 From: Zorbatron Date: Thu, 19 Sep 2024 12:09:05 -0400 Subject: [PATCH 08/13] Use GTFluidSlot instead of FluidSlot (has syncing issue) --- .../MetaTileEntityPassthroughHatchFluid.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index 60243e48784..465e491e463 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -1,5 +1,7 @@ package gregtech.common.metatileentities.multi.multiblockpart; +import com.cleanroommc.modularui.widgets.FluidSlot; + import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IControllable; @@ -15,6 +17,7 @@ import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.client.renderer.texture.Textures; +import gregtech.common.mui.widget.GTFluidSlot; import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; @@ -37,7 +40,6 @@ import com.cleanroommc.modularui.value.BoolValue; import com.cleanroommc.modularui.value.sync.BooleanSyncValue; import com.cleanroommc.modularui.value.sync.PanelSyncManager; -import com.cleanroommc.modularui.widgets.FluidSlot; import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.ToggleButton; import com.cleanroommc.modularui.widgets.layout.Column; @@ -150,12 +152,11 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) for (int i = 0; i < rowSize; i++) { widgets.add(new ArrayList<>()); for (int j = 0; j < rowSize; j++) { - widgets.get(i) - .add(new FluidSlot().syncHandler(fluidTankList.getTankAt(i * rowSize + j)) - .background(GTGuiTextures.FLUID_SLOT) - .alwaysShowFull(true)); + widgets.get(i).add(new GTFluidSlot().syncHandler(fluidTankList.getTankAt(i * rowSize + j)) + .background(GTGuiTextures.FLUID_SLOT)); } } + BooleanSyncValue workingStateValue = new BooleanSyncValue(() -> workingEnabled, val -> workingEnabled = val); guiSyncManager.syncValue("working_state", workingStateValue); From a5d4ea47b4abda541d3aa595ddb3362fd260bd79 Mon Sep 17 00:00:00 2001 From: Zorbatron Date: Thu, 19 Sep 2024 12:27:07 -0400 Subject: [PATCH 09/13] Change NBT loading --- .../MetaTileEntityPassthroughHatchFluid.java | 12 +++++------- .../MetaTileEntityPassthroughHatchItem.java | 10 +++++----- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index 465e491e463..3f6a5de2c93 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -1,7 +1,5 @@ package gregtech.common.metatileentities.multi.multiblockpart; -import com.cleanroommc.modularui.widgets.FluidSlot; - import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IControllable; @@ -188,7 +186,7 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) public NBTTagCompound writeToNBT(NBTTagCompound tag) { super.writeToNBT(tag); tag.setTag("FluidInventory", fluidTankList.serializeNBT()); - tag.setBoolean("workingEnabled", workingEnabled); + tag.setBoolean("WorkingEnabled", workingEnabled); return tag; } @@ -196,10 +194,10 @@ public NBTTagCompound writeToNBT(NBTTagCompound tag) { public void readFromNBT(NBTTagCompound tag) { super.readFromNBT(tag); this.fluidTankList.deserializeNBT(tag.getCompoundTag("FluidInventory")); - // Passthrough hatches before this change won't have workingEnabled at all, so we need to check if it exists - if (tag.hasKey("workingEnabled")) { - this.workingEnabled = tag.getBoolean("workingEnabled"); - } else if (!tag.hasKey("workingEnabled")) { + // Passthrough hatches before this change won't have WorkingEnabled at all, so we need to check if it exists + if (tag.hasKey("WorkingEnabled")) { + this.workingEnabled = tag.getBoolean("WorkingEnabled"); + } else { this.workingEnabled = true; } } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index d9adcfa66ba..4d8245f284e 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -193,7 +193,7 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) public NBTTagCompound writeToNBT(NBTTagCompound tag) { super.writeToNBT(tag); tag.setTag("Inventory", itemStackHandler.serializeNBT()); - tag.setBoolean("workingEnabled", workingEnabled); + tag.setBoolean("WorkingEnabled", workingEnabled); return tag; } @@ -201,10 +201,10 @@ public NBTTagCompound writeToNBT(NBTTagCompound tag) { public void readFromNBT(NBTTagCompound tag) { super.readFromNBT(tag); this.itemStackHandler.deserializeNBT(tag.getCompoundTag("Inventory")); - // Passthrough hatches before this change won't have workingEnabled at all, so we need to check if it exists - if (tag.hasKey("workingEnabled")) { - this.workingEnabled = tag.getBoolean("workingEnabled"); - } else if (!tag.hasKey("workingEnabled")) { + // Passthrough hatches before this change won't have WorkingEnabled at all, so we need to check if it exists + if (tag.hasKey("WorkingEnabled")) { + this.workingEnabled = tag.getBoolean("WorkingEnabled"); + } else { this.workingEnabled = true; } } From a1937455cb88f1ef89a5c949829374c8e15cb8a9 Mon Sep 17 00:00:00 2001 From: Zorbatron Date: Thu, 19 Sep 2024 12:39:51 -0400 Subject: [PATCH 10/13] Make the ui smaller --- .../MetaTileEntityPassthroughHatchFluid.java | 29 +++++++------------ .../MetaTileEntityPassthroughHatchItem.java | 29 +++++++------------ 2 files changed, 22 insertions(+), 36 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index 3f6a5de2c93..23498acc430 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -40,7 +40,6 @@ import com.cleanroommc.modularui.value.sync.PanelSyncManager; import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.ToggleButton; -import com.cleanroommc.modularui.widgets.layout.Column; import com.cleanroommc.modularui.widgets.layout.Grid; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -141,9 +140,7 @@ public boolean usesMui2() { public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) { int rowSize = (int) Math.sqrt(getTier() + 1); - int backgroundWidth = Math.max( - 9 * 18 + 18 + 14 + 5, // Player Inv width - rowSize * 18 + 14); // Bus Inv width + int backgroundWidth = 9 * 18 + 14; int backgroundHeight = 18 + 18 * rowSize + 94; List> widgets = new ArrayList<>(); @@ -161,25 +158,21 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) return GTGuis.createPanel(this, backgroundWidth, backgroundHeight) .child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5)) .child(SlotGroupWidget.playerInventory().left(7).bottom(7)) - .child(new Column() - .pos(backgroundWidth - 7 - 18, backgroundHeight - 18 * 4 - 7 - 5) - .width(18).height(18 * 4 + 5) - .child(GTGuiTextures.getLogo(getUITheme()).asWidget().size(17).top(18 * 3 + 5)) - .child(new ToggleButton() - .top(18 * 2) - .value(new BoolValue.Dynamic(workingStateValue::getBoolValue, - workingStateValue::setBoolValue)) - .overlay(GTGuiTextures.BUTTON_FLUID_OUTPUT) - .tooltipBuilder(t -> t.setAutoUpdate(true) - .addLine(workingStateValue.getBoolValue() ? - IKey.lang("gregtech.gui.fluid_passthrough.enabled") : - IKey.lang("gregtech.gui.fluid_passthrough.disabled"))))) .child(new Grid() .top(18).height(rowSize * 18) .minElementMargin(0, 0) .minColWidth(18).minRowHeight(18) .alignX(0.5f) - .matrix(widgets)); + .matrix(widgets)) + .child(new ToggleButton() + .top(18 * 2).left(18 * 8 + 7) + .value(new BoolValue.Dynamic(workingStateValue::getBoolValue, + workingStateValue::setBoolValue)) + .overlay(GTGuiTextures.BUTTON_FLUID_OUTPUT) + .tooltipBuilder(t -> t.setAutoUpdate(true) + .addLine(workingStateValue.getBoolValue() ? + IKey.lang("gregtech.gui.fluid_passthrough.enabled") : + IKey.lang("gregtech.gui.fluid_passthrough.disabled")))); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index 4d8245f284e..f259fdce204 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -41,7 +41,6 @@ import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.SlotGroupWidget; import com.cleanroommc.modularui.widgets.ToggleButton; -import com.cleanroommc.modularui.widgets.layout.Column; import com.cleanroommc.modularui.widgets.layout.Grid; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -145,9 +144,7 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) guiSyncManager.registerSlotGroup("item_inv", rowSize); - int backgroundWidth = Math.max( - 9 * 18 + 18 + 14 + 5, // Player Inv width - rowSize * 18 + 14); // Bus Inv width + int backgroundWidth = 9 * 18 + 14; int backgroundHeight = 18 + 18 * rowSize + 94; List> widgets = new ArrayList<>(); @@ -168,25 +165,21 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) return GTGuis.createPanel(this, backgroundWidth, backgroundHeight) .child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5)) .child(SlotGroupWidget.playerInventory().left(7).bottom(7)) - .child(new Column() - .pos(backgroundWidth - 7 - 18, backgroundHeight - 18 * 4 - 7 - 5) - .width(18).height(18 * 4 + 5) - .child(GTGuiTextures.getLogo(getUITheme()).asWidget().size(17).top(18 * 3 + 5)) - .child(new ToggleButton() - .top(18 * 2) - .value(new BoolValue.Dynamic(workingStateValue::getBoolValue, - workingStateValue::setBoolValue)) - .overlay(GTGuiTextures.BUTTON_ITEM_OUTPUT) - .tooltipBuilder(t -> t.setAutoUpdate(true) - .addLine(workingStateValue.getBoolValue() ? - IKey.lang("gregtech.gui.item_passthrough.enabled") : - IKey.lang("gregtech.gui.item_passthrough.disabled"))))) .child(new Grid() .top(18).height(rowSize * 18) .minElementMargin(0, 0) .minColWidth(18).minRowHeight(18) .alignX(0.5f) - .matrix(widgets)); + .matrix(widgets)) + .child(new ToggleButton() + .top(18 * 4).left(18 * 8 + 7) + .value(new BoolValue.Dynamic(workingStateValue::getBoolValue, + workingStateValue::setBoolValue)) + .overlay(GTGuiTextures.BUTTON_ITEM_OUTPUT) + .tooltipBuilder(t -> t.setAutoUpdate(true) + .addLine(workingStateValue.getBoolValue() ? + IKey.lang("gregtech.gui.item_passthrough.enabled") : + IKey.lang("gregtech.gui.item_passthrough.disabled")))); } @Override From 071b4ea43e49f08acf1ee5810edc641263227376 Mon Sep 17 00:00:00 2001 From: Zorbatron Date: Thu, 19 Sep 2024 12:40:54 -0400 Subject: [PATCH 11/13] Add TODOs for the name label --- .../multiblockpart/MetaTileEntityPassthroughHatchFluid.java | 1 + .../multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index 23498acc430..0edd3f9158d 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -155,6 +155,7 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) BooleanSyncValue workingStateValue = new BooleanSyncValue(() -> workingEnabled, val -> workingEnabled = val); guiSyncManager.syncValue("working_state", workingStateValue); + // TODO: Change the position of the name when it's standardized. return GTGuis.createPanel(this, backgroundWidth, backgroundHeight) .child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5)) .child(SlotGroupWidget.playerInventory().left(7).bottom(7)) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index f259fdce204..08d1d9a79fb 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -162,6 +162,7 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) BooleanSyncValue workingStateValue = new BooleanSyncValue(() -> workingEnabled, val -> workingEnabled = val); guiSyncManager.syncValue("working_state", workingStateValue); + // TODO: Change the position of the name when it's standardized. return GTGuis.createPanel(this, backgroundWidth, backgroundHeight) .child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5)) .child(SlotGroupWidget.playerInventory().left(7).bottom(7)) From 38394fe8fe2e71dc6f9fcb55e38979ec6c1fcd04 Mon Sep 17 00:00:00 2001 From: Zorbatron <46525467+Zorbatron@users.noreply.github.com> Date: Tue, 29 Oct 2024 12:06:17 -0400 Subject: [PATCH 12/13] Resolve review --- .../MetaTileEntityPassthroughHatchFluid.java | 24 ++++++++++++------- .../MetaTileEntityPassthroughHatchItem.java | 24 ++++++++++++------- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index 0edd3f9158d..6cd2bb4772b 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -20,6 +20,7 @@ import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; @@ -35,7 +36,6 @@ import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.factory.PosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.value.BoolValue; import com.cleanroommc.modularui.value.sync.BooleanSyncValue; import com.cleanroommc.modularui.value.sync.PanelSyncManager; import com.cleanroommc.modularui.widgets.SlotGroupWidget; @@ -153,9 +153,6 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) } BooleanSyncValue workingStateValue = new BooleanSyncValue(() -> workingEnabled, val -> workingEnabled = val); - guiSyncManager.syncValue("working_state", workingStateValue); - - // TODO: Change the position of the name when it's standardized. return GTGuis.createPanel(this, backgroundWidth, backgroundHeight) .child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5)) .child(SlotGroupWidget.playerInventory().left(7).bottom(7)) @@ -167,8 +164,7 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) .matrix(widgets)) .child(new ToggleButton() .top(18 * 2).left(18 * 8 + 7) - .value(new BoolValue.Dynamic(workingStateValue::getBoolValue, - workingStateValue::setBoolValue)) + .value(workingStateValue) .overlay(GTGuiTextures.BUTTON_FLUID_OUTPUT) .tooltipBuilder(t -> t.setAutoUpdate(true) .addLine(workingStateValue.getBoolValue() ? @@ -191,8 +187,6 @@ public void readFromNBT(NBTTagCompound tag) { // Passthrough hatches before this change won't have WorkingEnabled at all, so we need to check if it exists if (tag.hasKey("WorkingEnabled")) { this.workingEnabled = tag.getBoolean("WorkingEnabled"); - } else { - this.workingEnabled = true; } } @@ -238,4 +232,18 @@ public T getCapability(Capability capability, EnumFacing side) { } return super.getCapability(capability, side); } + + @Override + public void writeInitialSyncData(PacketBuffer buf) { + super.writeInitialSyncData(buf); + + buf.writeBoolean(workingEnabled); + } + + @Override + public void receiveInitialSyncData(PacketBuffer buf) { + super.receiveInitialSyncData(buf); + + this.workingEnabled = buf.readBoolean(); + } } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index 08d1d9a79fb..834a3fea5ef 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -18,6 +18,7 @@ import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; @@ -34,7 +35,6 @@ import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.factory.PosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.value.BoolValue; import com.cleanroommc.modularui.value.sync.BooleanSyncValue; import com.cleanroommc.modularui.value.sync.PanelSyncManager; import com.cleanroommc.modularui.value.sync.SyncHandlers; @@ -160,9 +160,6 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) } BooleanSyncValue workingStateValue = new BooleanSyncValue(() -> workingEnabled, val -> workingEnabled = val); - guiSyncManager.syncValue("working_state", workingStateValue); - - // TODO: Change the position of the name when it's standardized. return GTGuis.createPanel(this, backgroundWidth, backgroundHeight) .child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5)) .child(SlotGroupWidget.playerInventory().left(7).bottom(7)) @@ -174,8 +171,7 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) .matrix(widgets)) .child(new ToggleButton() .top(18 * 4).left(18 * 8 + 7) - .value(new BoolValue.Dynamic(workingStateValue::getBoolValue, - workingStateValue::setBoolValue)) + .value(workingStateValue) .overlay(GTGuiTextures.BUTTON_ITEM_OUTPUT) .tooltipBuilder(t -> t.setAutoUpdate(true) .addLine(workingStateValue.getBoolValue() ? @@ -198,8 +194,6 @@ public void readFromNBT(NBTTagCompound tag) { // Passthrough hatches before this change won't have WorkingEnabled at all, so we need to check if it exists if (tag.hasKey("WorkingEnabled")) { this.workingEnabled = tag.getBoolean("WorkingEnabled"); - } else { - this.workingEnabled = true; } } @@ -250,4 +244,18 @@ public T getCapability(Capability capability, EnumFacing side) { } return super.getCapability(capability, side); } + + @Override + public void writeInitialSyncData(PacketBuffer buf) { + super.writeInitialSyncData(buf); + + buf.writeBoolean(workingEnabled); + } + + @Override + public void receiveInitialSyncData(PacketBuffer buf) { + super.receiveInitialSyncData(buf); + + this.workingEnabled = buf.readBoolean(); + } } From 3bd472842209fc3676dda723c9ecd1202427f2cf Mon Sep 17 00:00:00 2001 From: Zorbatron <46525467+Zorbatron@users.noreply.github.com> Date: Tue, 21 Jan 2025 19:02:40 -0500 Subject: [PATCH 13/13] Address review --- .../MetaTileEntityPassthroughHatchFluid.java | 8 ++++---- .../MetaTileEntityPassthroughHatchItem.java | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index 6cd2bb4772b..5305afee5e5 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -166,10 +166,10 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) .top(18 * 2).left(18 * 8 + 7) .value(workingStateValue) .overlay(GTGuiTextures.BUTTON_FLUID_OUTPUT) - .tooltipBuilder(t -> t.setAutoUpdate(true) - .addLine(workingStateValue.getBoolValue() ? - IKey.lang("gregtech.gui.fluid_passthrough.enabled") : - IKey.lang("gregtech.gui.fluid_passthrough.disabled")))); + .tooltip(t -> t.setAutoUpdate(true)) + .tooltipBuilder(t -> t.addLine(workingStateValue.getBoolValue() ? + IKey.lang("gregtech.gui.fluid_passthrough.enabled") : + IKey.lang("gregtech.gui.fluid_passthrough.disabled")))); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index 834a3fea5ef..7f9e5dc3b1c 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -173,10 +173,10 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) .top(18 * 4).left(18 * 8 + 7) .value(workingStateValue) .overlay(GTGuiTextures.BUTTON_ITEM_OUTPUT) - .tooltipBuilder(t -> t.setAutoUpdate(true) - .addLine(workingStateValue.getBoolValue() ? - IKey.lang("gregtech.gui.item_passthrough.enabled") : - IKey.lang("gregtech.gui.item_passthrough.disabled")))); + .tooltip(t -> t.setAutoUpdate(true)) + .tooltipBuilder(t -> t.addLine(workingStateValue.getBoolValue() ? + IKey.lang("gregtech.gui.item_passthrough.enabled") : + IKey.lang("gregtech.gui.item_passthrough.disabled")))); } @Override