aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorevgengoldwar <69961523+evgengoldwar@users.noreply.github.com>2024-05-29 15:16:57 +0400
committerGitHub <noreply@github.com>2024-05-29 13:16:57 +0200
commit218084d8cbbb4178e0fef05b570f662d42504070 (patch)
treea5b82a95ffac76ee4349dec99830d961be4f5c8b
parenta2b27b63e4c79410f5c10e3109457a008a965a8b (diff)
downloadGT5-Unofficial-218084d8cbbb4178e0fef05b570f662d42504070.tar.gz
GT5-Unofficial-218084d8cbbb4178e0fef05b570f662d42504070.tar.bz2
GT5-Unofficial-218084d8cbbb4178e0fef05b570f662d42504070.zip
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 <dream-master@gmx.net>
-rw-r--r--src/main/java/gregtech/api/gui/modularui/GT_UITextures.java6
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java93
-rw-r--r--src/main/resources/assets/gregtech/lang/en_US.lang2
-rw-r--r--src/main/resources/assets/gregtech/textures/gui/overlay_button/LiquidMode.pngbin0 -> 216 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/gui/overlay_button/LiquidMode_off.pngbin0 -> 213 bytes
5 files changed, 97 insertions, 4 deletions
diff --git a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
index b200e16d47..54666567db 100644
--- a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
+++ b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
@@ -392,6 +392,12 @@ public class GT_UITextures {
public static final UITexture OVERLAY_BUTTON_HOURGLASS = UITexture
.fullImage(GregTech.ID, "gui/overlay_button/hourglass");
+ public static final UITexture OVERLAY_BUTTON_LIQUIDMODE = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/LiquidMode");
+
+ public static final UITexture OVERLAY_BUTTON_LIQUIDMODE_OFF = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/LiquidMode_off");
+
/**
* Can adjust size as needed.
*/
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;
+ }
+ }
}
diff --git a/src/main/resources/assets/gregtech/lang/en_US.lang b/src/main/resources/assets/gregtech/lang/en_US.lang
index d9b23a951c..b8ababd05e 100644
--- a/src/main/resources/assets/gregtech/lang/en_US.lang
+++ b/src/main/resources/assets/gregtech/lang/en_US.lang
@@ -405,6 +405,8 @@ GT5U.type_filter.representation_slot.tooltip.1=§7Right click to cycle back
GT5U.type_filter.representation_slot.tooltip.2=§7Click with an item to set filter
GT5U.gui.select.current=Current:
+GT5U.gui.button.liquid_filling_OFF=§7Liquid Filling: §4OFF
+GT5U.gui.button.liquid_filling_ON=§7Liquid Filling: §aON
GT5U.gui.button.power_switch=Power Switch
GT5U.gui.button.voiding_mode=Voiding Mode:
GT5U.gui.button.voiding_mode_none=§7Void Nothing
diff --git a/src/main/resources/assets/gregtech/textures/gui/overlay_button/LiquidMode.png b/src/main/resources/assets/gregtech/textures/gui/overlay_button/LiquidMode.png
new file mode 100644
index 0000000000..c5933b7026
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/gui/overlay_button/LiquidMode.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/gui/overlay_button/LiquidMode_off.png b/src/main/resources/assets/gregtech/textures/gui/overlay_button/LiquidMode_off.png
new file mode 100644
index 0000000000..bd56f87eca
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/gui/overlay_button/LiquidMode_off.png
Binary files differ