aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/covers/CoverPump.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common/covers/CoverPump.java')
-rw-r--r--src/main/java/gregtech/common/covers/CoverPump.java331
1 files changed, 331 insertions, 0 deletions
diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java
new file mode 100644
index 0000000000..99d39dccad
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/CoverPump.java
@@ -0,0 +1,331 @@
+package gregtech.common.covers;
+
+import java.util.Arrays;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidHandler;
+
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+
+import gregtech.api.gui.modularui.CoverUIBuildContext;
+import gregtech.api.gui.modularui.GTUITextures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IMachineProgress;
+import gregtech.api.util.CoverBehavior;
+import gregtech.api.util.GTUtility;
+import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget;
+
+public class CoverPump extends CoverBehavior {
+
+ public final int mTransferRate;
+
+ public CoverPump(int aTransferRate, ITexture coverTexture) {
+ super(coverTexture);
+ this.mTransferRate = aTransferRate;
+ }
+
+ @Override
+ public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity,
+ long aTimer) {
+ return false;
+ }
+
+ @Override
+ public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable,
+ ICoverable aTileEntity, long aTimer) {
+ if ((aCoverVariable % 6 > 1) && ((aTileEntity instanceof IMachineProgress))) {
+ if (((IMachineProgress) aTileEntity).isAllowedToWork() != aCoverVariable % 6 < 4) {
+ return aCoverVariable;
+ }
+ }
+
+ if (aTileEntity instanceof IFluidHandler current) {
+ final IFluidHandler toAccess = aTileEntity.getITankContainerAtSide(side);
+ if (toAccess == null) return aCoverVariable;
+
+ transferFluid(current, toAccess, side, aCoverVariable % 2 == 0);
+ }
+ return aCoverVariable;
+ }
+
+ protected void transferFluid(IFluidHandler current, IFluidHandler toAccess, ForgeDirection side, boolean export) {
+ IFluidHandler source = export ? current : toAccess;
+ IFluidHandler dest = export ? toAccess : current;
+ ForgeDirection drainSide = export ? side : side.getOpposite();
+ GTUtility.moveFluid(source, dest, drainSide, mTransferRate, this::canTransferFluid);
+ }
+
+ protected boolean canTransferFluid(FluidStack fluid) {
+ return true;
+ }
+
+ @Override
+ public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity,
+ EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 12;
+ if (aCoverVariable < 0) {
+ aCoverVariable = 11;
+ }
+ switch (aCoverVariable) {
+ case 0 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("006", "Export"));
+ case 1 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("007", "Import"));
+ case 2 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("008", "Export (conditional)"));
+ case 3 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("009", "Import (conditional)"));
+ case 4 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("010", "Export (invert cond)"));
+ case 5 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("011", "Import (invert cond)"));
+ case 6 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("012", "Export allow Input"));
+ case 7 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("013", "Import allow Output"));
+ case 8 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("014", "Export allow Input (conditional)"));
+ case 9 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("015", "Import allow Output (conditional)"));
+ case 10 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("016", "Export allow Input (invert cond)"));
+ case 11 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("017", "Import allow Output (invert cond)"));
+ }
+ return aCoverVariable;
+ }
+
+ @Override
+ public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot,
+ ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot,
+ ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid,
+ ICoverable aTileEntity) {
+ if ((aCoverVariable > 1) && ((aTileEntity instanceof IMachineProgress))) {
+ if (((IMachineProgress) aTileEntity).isAllowedToWork() != aCoverVariable % 6 < 4) {
+ return false;
+ }
+ }
+ return (aCoverVariable >= 6) || (aCoverVariable % 2 != 0);
+ }
+
+ @Override
+ public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid,
+ ICoverable aTileEntity) {
+ if ((aCoverVariable > 1) && ((aTileEntity instanceof IMachineProgress))) {
+ if (((IMachineProgress) aTileEntity).isAllowedToWork() != aCoverVariable % 6 < 4) {
+ return false;
+ }
+ }
+ return (aCoverVariable >= 6) || (aCoverVariable % 2 == 0);
+ }
+
+ @Override
+ public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return 1;
+ }
+
+ // GUI stuff
+
+ @Override
+ public boolean hasCoverGUI() {
+ return true;
+ }
+
+ @Override
+ public ModularWindow createWindow(CoverUIBuildContext buildContext) {
+ return new PumpUIFactory(buildContext).createWindow();
+ }
+
+ private class PumpUIFactory extends UIFactory {
+
+ private static final int startX = 10;
+ private static final int startY = 25;
+ private static final int spaceX = 18;
+ private static final int spaceY = 18;
+
+ private CoverDataFollowerToggleButtonWidget<ISerializableObject.LegacyCoverData> mBlockWidget = null;
+ private CoverDataFollowerToggleButtonWidget<ISerializableObject.LegacyCoverData> mAllowWidget = null;
+
+ public PumpUIFactory(CoverUIBuildContext buildContext) {
+ super(buildContext);
+ }
+
+ @SuppressWarnings("PointlessArithmeticExpression")
+ @Override
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ builder.widget(
+ new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>(
+ this::getCoverData,
+ this::setCoverData,
+ CoverPump.this,
+ (id, coverData) -> !getClickable(id, convert(coverData)),
+ (id, coverData) -> new ISerializableObject.LegacyCoverData(
+ getNewCoverVariable(id, convert(coverData))))
+ .addToggleButton(
+ 0,
+ CoverDataFollowerToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_EXPORT)
+ .addTooltip(GTUtility.trans("006", "Export"))
+ .setPos(spaceX * 0, spaceY * 0))
+ .addToggleButton(
+ 1,
+ CoverDataFollowerToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_IMPORT)
+ .addTooltip(GTUtility.trans("007", "Import"))
+ .setPos(spaceX * 1, spaceY * 0))
+ .addToggleButton(
+ 2,
+ CoverDataFollowerToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_CHECKMARK)
+ .addTooltip(GTUtility.trans("224", "Always On"))
+ .setPos(spaceX * 0, spaceY * 1))
+ .addToggleButton(
+ 3,
+ CoverDataFollowerToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_USE_PROCESSING_STATE)
+ .addTooltip(GTUtility.trans("343", "Use Machine Processing State"))
+ .setPos(spaceX * 1, spaceY * 1))
+ .addToggleButton(
+ 4,
+ CoverDataFollowerToggleButtonWidget.ofDisableable(),
+ widget -> widget
+ .setStaticTexture(GTUITextures.OVERLAY_BUTTON_USE_INVERTED_PROCESSING_STATE)
+ .addTooltip(GTUtility.trans("343.1", "Use Inverted Machine Processing State"))
+ .setPos(spaceX * 2, spaceY * 1))
+ .addToggleButton(5, CoverDataFollowerToggleButtonWidget.ofDisableable(), widget -> {
+ mAllowWidget = widget;
+ widget.setTextureGetter(i -> {
+ ISerializableObject.LegacyCoverData coverData = getCoverData();
+ return coverData == null || coverData.get() % 2 == 0
+ ? GTUITextures.OVERLAY_BUTTON_ALLOW_INPUT
+ : GTUITextures.OVERLAY_BUTTON_ALLOW_OUTPUT;
+ })
+ .dynamicTooltip(() -> {
+ ISerializableObject.LegacyCoverData coverData = getCoverData();
+ return Arrays.asList(
+ coverData == null || coverData.get() % 2 == 0
+ ? GTUtility.trans("314", "Allow Input")
+ : GTUtility.trans("312", "Allow Output"));
+ })
+ .setPos(spaceX * 0, spaceY * 2);
+ })
+ .addToggleButton(6, CoverDataFollowerToggleButtonWidget.ofDisableable(), widget -> {
+ mBlockWidget = widget;
+ widget.setTextureGetter(i -> {
+ ISerializableObject.LegacyCoverData coverData = getCoverData();
+ return coverData == null || coverData.get() % 2 == 0
+ ? GTUITextures.OVERLAY_BUTTON_BLOCK_INPUT
+ : GTUITextures.OVERLAY_BUTTON_BLOCK_OUTPUT;
+ })
+ .dynamicTooltip(() -> {
+ ISerializableObject.LegacyCoverData coverData = getCoverData();
+ return Arrays.asList(
+ coverData == null || coverData.get() % 2 == 0
+ ? GTUtility.trans("313", "Block Input")
+ : GTUtility.trans("311", "Block Output"));
+ })
+ .setPos(spaceX * 1, spaceY * 2);
+ })
+ .setPos(startX, startY))
+ .widget(
+ new TextWidget(GTUtility.trans("229", "Export/Import")).setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 3, 4 + startY + spaceY * 0))
+ .widget(
+ new TextWidget(GTUtility.trans("230", "Conditional")).setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 3, 4 + startY + spaceY * 1))
+ .widget(TextWidget.dynamicString(() -> {
+ ISerializableObject.LegacyCoverData coverData = getCoverData();
+ return coverData == null || coverData.get() % 2 == 0 ? GTUtility.trans("344", "Input Blocking")
+ : GTUtility.trans("344.1", "Output Blocking");
+ })
+ .setSynced(false)
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 3, 4 + startY + spaceY * 2));
+ }
+
+ private int getNewCoverVariable(int id, int coverVariable) {
+ switch (id) {
+ case 0 -> {
+ if (mBlockWidget != null) {
+ mBlockWidget.notifyTooltipChange();
+ }
+ if (mAllowWidget != null) {
+ mAllowWidget.notifyTooltipChange();
+ }
+ return coverVariable & ~0x1;
+ }
+ case 1 -> {
+ if (mBlockWidget != null) {
+ mBlockWidget.notifyTooltipChange();
+ }
+ if (mAllowWidget != null) {
+ mAllowWidget.notifyTooltipChange();
+ }
+ return coverVariable | 0x1;
+ }
+ case 2 -> {
+ if (coverVariable > 5) return 0x6 | (coverVariable & ~0xE);
+ return (coverVariable & ~0xE);
+ }
+ case 3 -> {
+ if (coverVariable > 5) return 0x8 | (coverVariable & ~0xE);
+ return 0x2 | (coverVariable & ~0xE);
+ }
+ case 4 -> {
+ if (coverVariable > 5) return 0xA | (coverVariable & ~0xE);
+ return (0x4 | (coverVariable & ~0xE));
+ }
+ case 5 -> {
+ if (coverVariable <= 5) return coverVariable + 6;
+ }
+ case 6 -> {
+ if (coverVariable > 5) return coverVariable - 6;
+ }
+ }
+ return coverVariable;
+ }
+
+ private boolean getClickable(int id, int coverVariable) {
+ if (coverVariable < 0 | 11 < coverVariable) return false;
+ return switch (id) {
+ case 0, 1 -> (0x1 & coverVariable) != id;
+ case 2 -> (coverVariable % 6) >= 2;
+ case 3 -> (coverVariable % 6) < 2 | 4 <= (coverVariable % 6);
+ case 4 -> (coverVariable % 6) < 4;
+ case 5 -> coverVariable < 6;
+ case 6 -> coverVariable >= 6;
+ default -> false;
+ };
+ }
+ }
+}