From 218084d8cbbb4178e0fef05b570f662d42504070 Mon Sep 17 00:00:00 2001 From: evgengoldwar <69961523+evgengoldwar@users.noreply.github.com> Date: Wed, 29 May 2024 15:16:57 +0400 Subject: Concrete backfiller - Added the ability to fill liquid (#2623) * lang file * sa * Update GT_MetaTileEntity_ConcreteBackfillerBase.java remove star imports * Restore original logic * Save and load NBT --------- Co-authored-by: Martin Robertz --- .../GT_MetaTileEntity_ConcreteBackfillerBase.java | 93 +++++++++++++++++++++- 1 file changed, 89 insertions(+), 4 deletions(-) (limited to 'src/main/java/gregtech/common') diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java index e520b87e43..3ad37f4c37 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java @@ -5,15 +5,25 @@ import static gregtech.api.enums.GT_HatchElement.InputBus; import static gregtech.api.enums.GT_HatchElement.InputHatch; import static gregtech.api.enums.GT_HatchElement.Maintenance; import static gregtech.api.enums.GT_Values.VN; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; import java.util.List; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.StatCollector; +import net.minecraftforge.fluids.IFluidBlock; import com.google.common.collect.ImmutableList; import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; import com.gtnewhorizons.modularui.common.widget.SlotWidget; @@ -21,6 +31,8 @@ import com.gtnewhorizons.modularui.common.widget.TextWidget; import gregtech.api.GregTech_API; import gregtech.api.enums.Materials; +import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.widgets.GT_LockedWhileActiveButton; import gregtech.api.interfaces.IHatchElement; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.recipe.check.CheckRecipeResultRegistry; @@ -35,6 +47,20 @@ public abstract class GT_MetaTileEntity_ConcreteBackfillerBase extends GT_MetaTi /** Used to drive the readout in the GUI for the backfiller's current y-level. */ private int clientYHead; + protected boolean mLiquidEnabled = true; + + private static boolean isWater(Block aBlock) { + return aBlock == Blocks.water || aBlock == Blocks.flowing_water; + } + + private static boolean isLava(Block aBlock) { + return aBlock == Blocks.lava || aBlock == Blocks.flowing_lava; + } + + private static boolean isFluid(Block aBlock) { + return isWater(aBlock) || isLava(aBlock) || aBlock instanceof IFluidBlock; + } + public GT_MetaTileEntity_ConcreteBackfillerBase(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional); initRecipeResults(); @@ -49,6 +75,18 @@ public abstract class GT_MetaTileEntity_ConcreteBackfillerBase extends GT_MetaTi addResultMessage(STATE_UPWARD, true, "backfiller_working"); } + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("liquidenabled", mLiquidEnabled); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("liquidenabled")) mLiquidEnabled = aNBT.getBoolean("liquidenabled"); + } + protected GT_Multiblock_Tooltip_Builder createTooltip(String aStructureName) { String casings = getCasingBlockItem().get(0) .getDisplayName(); @@ -132,11 +170,20 @@ public abstract class GT_MetaTileEntity_ConcreteBackfillerBase extends GT_MetaTi private boolean isRefillableBlock(int aX, int aY, int aZ) { IGregTechTileEntity aBaseTile = getBaseMetaTileEntity(); - if (!aBaseTile.getBlock(aX, aY, aZ) - .isAir(aBaseTile.getWorld(), aX, aY, aZ) || aBaseTile.getBlock(aX, aY, aZ) - .getMaterial() - .isSolid()) + Block aBlock = aBaseTile.getBlock(aX, aY, aZ); + if (!aBlock.isAir(aBaseTile.getWorld(), aX, aY, aZ)) { + if (mLiquidEnabled) { + if (!isFluid(aBlock)) { + return false; + } + } else { + return false; + } + } + if (aBlock.getMaterial() + .isSolid()) { return false; + } return GT_Utility .setBlockByFakePlayer(getFakePlayer(aBaseTile), aX, aY, aZ, GregTech_API.sBlockConcretes, 8, true); } @@ -177,4 +224,42 @@ public abstract class GT_MetaTileEntity_ConcreteBackfillerBase extends GT_MetaTi .widget(new FakeSyncWidget.IntegerSyncer(this::getYHead, newInt -> clientYHead = newInt)) .widget(new FakeSyncWidget.IntegerSyncer(() -> workState, newInt -> workState = newInt)); } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + final int BUTTON_Y_LEVEL = 91; + + builder.widget( + new GT_LockedWhileActiveButton(this.getBaseMetaTileEntity(), builder) + .setOnClick((clickData, widget) -> mLiquidEnabled = !mLiquidEnabled) + .setPlayClickSound(true) + .setBackground(() -> { + if (mLiquidEnabled) { + return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED, + GT_UITextures.OVERLAY_BUTTON_LIQUIDMODE }; + } + return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, + GT_UITextures.OVERLAY_BUTTON_LIQUIDMODE_OFF }; + }) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer(() -> mLiquidEnabled, newBoolean -> mLiquidEnabled = newBoolean), + builder, + (widget, val) -> widget.notifyTooltipChange()) + .dynamicTooltip( + () -> ImmutableList.of( + StatCollector.translateToLocal( + mLiquidEnabled ? "GT5U.gui.button.liquid_filling_ON" + : "GT5U.gui.button.liquid_filling_OFF"))) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(new Pos2d(100, BUTTON_Y_LEVEL)) + .setSize(16, 16)); + int left = 98; + for (ButtonWidget button : getAdditionalButtons(builder, buildContext)) { + button.setPos(new Pos2d(left, BUTTON_Y_LEVEL)) + .setSize(16, 16); + builder.widget(button); + left += 18; + } + } } -- cgit