diff options
author | miozune <miozune@gmail.com> | 2023-05-28 18:21:42 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-28 11:21:42 +0200 |
commit | 9af741164c5b59c4d884aba48ebeab7db5442d63 (patch) | |
tree | 5bbbbb5feb67db85aefd5f21fd885a1a0ab71c78 /src/main/java/gregtech/api/multitileentity/multiblock/base | |
parent | 24ad01683a084bebd26152b803ee19bffe78213c (diff) | |
download | GT5-Unofficial-9af741164c5b59c4d884aba48ebeab7db5442d63.tar.gz GT5-Unofficial-9af741164c5b59c4d884aba48ebeab7db5442d63.tar.bz2 GT5-Unofficial-9af741164c5b59c4d884aba48ebeab7db5442d63.zip |
Add new mode for void protection & implement it for more multis (#2024)
* Void protection improvements
* Rename methods: isXXXButtonEnabled -> supportsXXX
* Adjust texture for forbidden
* Add MultiBlockFeatureSupportDumpers
* Fix oversight in PCBFactory
* Revert void protection support for PA
* Rename class: ControllerWithButtons -> ControllerWithOptionalFeatures
Diffstat (limited to 'src/main/java/gregtech/api/multitileentity/multiblock/base')
-rw-r--r-- | src/main/java/gregtech/api/multitileentity/multiblock/base/ComplexParallelController.java | 12 | ||||
-rw-r--r-- | src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java | 262 |
2 files changed, 82 insertions, 192 deletions
diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/ComplexParallelController.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/ComplexParallelController.java index 3839c949db..808c16a200 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/base/ComplexParallelController.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/ComplexParallelController.java @@ -1,7 +1,5 @@ package gregtech.api.multitileentity.multiblock.base; -import static mcp.mobius.waila.api.SpecialChars.*; - import java.util.ArrayList; import java.util.List; import java.util.stream.LongStream; @@ -123,7 +121,7 @@ public abstract class ComplexParallelController<T extends ComplexParallelControl boolean result = processingLogic.setInputItems(index, getInputItems(index)) .setInputFluids(index, getInputFluids(index)) .setTileEntity(this) - .setVoidProtection(index, isVoidProtectionEnabled(index)) + .setVoidProtection(index, isVoidProtectionEnabledForItem(index), isVoidProtectionEnabledForFluid(index)) .setEut(index, getEutForComplexParallel(index)) .setPerfectOverclock(hasPerfectOverclock()) .process(index); @@ -181,8 +179,12 @@ public abstract class ComplexParallelController<T extends ComplexParallelControl return getInputFluids(); } - protected boolean isVoidProtectionEnabled(int index) { - return !voidExcess; + protected boolean isVoidProtectionEnabledForItem(int index) { + return protectsExcessItem(); + } + + protected boolean isVoidProtectionEnabledForFluid(int index) { + return protectsExcessFluid(); } protected boolean hasPerfectOverclock() { diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java index 5bec3f1752..afc456f41a 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java @@ -25,7 +25,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.ForgeDirection; @@ -52,17 +51,15 @@ import com.gtnewhorizon.structurelib.structure.IStructureElementChain; import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; import com.gtnewhorizon.structurelib.util.Vec3Impl; import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; -import com.gtnewhorizons.modularui.api.drawable.UITexture; import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; import com.gtnewhorizons.modularui.api.forge.ListItemHandler; +import com.gtnewhorizons.modularui.api.math.Pos2d; import com.gtnewhorizons.modularui.api.screen.*; +import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; import com.gtnewhorizons.modularui.common.widget.Scrollable; @@ -76,11 +73,12 @@ import gnu.trove.list.array.TIntArrayList; import gregtech.api.enums.GT_Values; import gregtech.api.enums.GT_Values.NBT; import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SoundResource; import gregtech.api.enums.TextureSet; +import gregtech.api.enums.VoidingMode; import gregtech.api.fluid.FluidTankGT; import gregtech.api.gui.modularui.GT_UITextures; import gregtech.api.interfaces.IDescribable; +import gregtech.api.interfaces.modularui.ControllerWithOptionalFeatures; import gregtech.api.logic.PowerLogic; import gregtech.api.logic.ProcessingLogic; import gregtech.api.logic.interfaces.PowerLogicHost; @@ -105,8 +103,9 @@ import mcp.mobius.waila.api.IWailaDataAccessor; /** * Multi Tile Entities - or MuTEs - don't have dedicated hatches, but their casings can become hatches. */ -public abstract class Controller<T extends Controller<T>> extends MultiTileBasicMachine implements IAlignment, - IConstructable, IMultiBlockController, IDescribable, IMTE_AddToolTips, ISurvivalConstructable { +public abstract class Controller<T extends Controller<T>> extends MultiTileBasicMachine + implements IAlignment, IConstructable, IMultiBlockController, IDescribable, IMTE_AddToolTips, + ISurvivalConstructable, ControllerWithOptionalFeatures { public static final String ALL_INVENTORIES_NAME = "all"; @@ -132,7 +131,7 @@ public abstract class Controller<T extends Controller<T>> extends MultiTileBasic private String inventoryName; private String tankName; protected boolean separateInputs = false; - protected boolean voidExcess = false; + protected VoidingMode voidingMode = supportsVoidProtection() ? VoidingMode.VOID_NONE : VoidingMode.VOID_ALL; protected boolean batchMode = false; protected boolean recipeLock = false; /** If this is set to true, the machine will get default WAILA behavior */ @@ -207,7 +206,7 @@ public abstract class Controller<T extends Controller<T>> extends MultiTileBasic saveUpgradeInventoriesToNBT(nbt); saveUpgradeTanksToNBT(nbt); - nbt.setBoolean(NBT.VOID_EXCESS, voidExcess); + nbt.setString(NBT.VOIDING_MODE, voidingMode.name); nbt.setBoolean(NBT.SEPARATE_INPUTS, separateInputs); nbt.setBoolean(NBT.RECIPE_LOCK, recipeLock); nbt.setBoolean(NBT.BATCH_MODE, batchMode); @@ -296,7 +295,7 @@ public abstract class Controller<T extends Controller<T>> extends MultiTileBasic loadUpgradeInventoriesFromNBT(nbt); loadUpgradeTanksFromNBT(nbt); - voidExcess = nbt.getBoolean(NBT.VOID_EXCESS); + voidingMode = VoidingMode.fromName(nbt.getString(NBT.VOIDING_MODE)); separateInputs = nbt.getBoolean(NBT.SEPARATE_INPUTS); recipeLock = nbt.getBoolean(NBT.RECIPE_LOCK); batchMode = nbt.getBoolean(NBT.BATCH_MODE); @@ -1781,7 +1780,7 @@ public abstract class Controller<T extends Controller<T>> extends MultiTileBasic .withOffset(2, 4)) .addTooltip(getLocalName()) .setPos(20 * (page - 1), -20)) - .addPage(createMainPage().setSize(getGUIWidth(), getGUIHeight())); + .addPage(createMainPage(builder).setSize(getGUIWidth(), getGUIHeight())); if (hasItemInput()) { tabs.addTabButton( new TabButton(page++) @@ -1864,33 +1863,25 @@ public abstract class Controller<T extends Controller<T>> extends MultiTileBasic builder.widget(tabs); } - protected MultiChildWidget createMainPage() { + protected MultiChildWidget createMainPage(IWidgetBuilder<?> builder) { MultiChildWidget page = new MultiChildWidget(); page.addChild( new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) .setPos(7, 4) .setSize(160, 75)) - .addChild(createButtons()); + .addChild(createButtons(builder)); return page; } - protected MultiChildWidget createButtons() { + protected MultiChildWidget createButtons(IWidgetBuilder<?> builder) { MultiChildWidget buttons = new MultiChildWidget(); buttons.setSize(16, 167) .setPos(7, 86); - buttons.addChild(createPowerSwitchButton()) - .addChild(new FakeSyncWidget.BooleanSyncer(this::isAllowedToWork, val -> { - if (val) enableWorking(); - else disableWorking(); - })) - .addChild(createVoidExcessButton()) - .addChild(new FakeSyncWidget.BooleanSyncer(() -> voidExcess, val -> voidExcess = val)) - .addChild(createInputSeparationButton()) - .addChild(new FakeSyncWidget.BooleanSyncer(() -> separateInputs, val -> separateInputs = val)) - .addChild(createBatchModeButton()) - .addChild(new FakeSyncWidget.BooleanSyncer(() -> batchMode, val -> batchMode = val)) - .addChild(createLockToSingleRecipeButton()) - .addChild(new FakeSyncWidget.BooleanSyncer(() -> recipeLock, val -> recipeLock = val)); + buttons.addChild(createPowerSwitchButton(builder)) + .addChild(createVoidExcessButton(builder)) + .addChild(createInputSeparationButton(builder)) + .addChild(createBatchModeButton(builder)) + .addChild(createLockToSingleRecipeButton(builder)); return buttons; } @@ -1966,195 +1957,92 @@ public abstract class Controller<T extends Controller<T>> extends MultiTileBasic .setPos(52, 7); } - protected ButtonWidget createPowerSwitchButton() { - ButtonWidget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (isAllowedToWork()) { - disableWorking(); - } else { - enableWorking(); - } - }) - .setPlayClickSoundResource( - () -> isAllowedToWork() ? SoundResource.GUI_BUTTON_UP.resourceLocation - : SoundResource.GUI_BUTTON_DOWN.resourceLocation); - button.setBackground(() -> { - List<UITexture> ret = new ArrayList<>(); - ret.add(GT_UITextures.BUTTON_STANDARD); - if (isAllowedToWork()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_POWER_SWITCH_ON); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_POWER_SWITCH_OFF); - } - return ret.toArray(new IDrawable[0]); - }) - .setPos(144, 0) - .setSize(16, 16); - button.addTooltip(StatCollector.translateToLocal("GT5U.gui.button.power_switch")) - .setTooltipShowUpDelay(TOOLTIP_DELAY); - return button; - } - - protected ButtonWidget createVoidExcessButton() { - ButtonWidget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (isVoidExcessButtonEnabled()) { - voidExcess = !voidExcess; - } - }) - .setPlayClickSound(true); - button.setBackground(() -> { - List<UITexture> ret = new ArrayList<>(); - ret.add(GT_UITextures.BUTTON_STANDARD); - if (isVoidExcessButtonEnabled()) { - if (isVoidExcessEnabled()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_VOID_EXCESS_ON); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_VOID_EXCESS_OFF); - } - } else { - if (isVoidExcessEnabled()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_VOID_EXCESS_ON_DISABLED); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_VOID_EXCESS_OFF_DISABLED); - } - } - return ret.toArray(new IDrawable[0]); - }) - .setPos(54, 0) - .setSize(16, 16); - button.addTooltip(StatCollector.translateToLocal("GT5U.gui.button.void_excess")) - .setTooltipShowUpDelay(TOOLTIP_DELAY); - return button; + @Override + public Pos2d getPowerSwitchButtonPos() { + return new Pos2d(144, 0); } - protected boolean isVoidExcessEnabled() { - return voidExcess; + @Override + public boolean supportsVoidProtection() { + return true; } - protected boolean isVoidExcessButtonEnabled() { - return true; + @Override + public VoidingMode getVoidingMode() { + return voidingMode; } - protected ButtonWidget createInputSeparationButton() { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (isInputSeparationButtonEnabled()) { - separateInputs = !separateInputs; - } - }) - .setPlayClickSound(true) - .setBackground(() -> { - List<UITexture> ret = new ArrayList<>(); - ret.add(GT_UITextures.BUTTON_STANDARD); - if (isInputSeparationButtonEnabled()) { - if (isInputSeparationEnabled()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_INPUT_SEPARATION_ON); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_INPUT_SEPARATION_OFF); - } - } else { - if (isInputSeparationEnabled()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_INPUT_SEPARATION_ON_DISABLED); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_INPUT_SEPARATION_OFF_DISABLED); - } - } - return ret.toArray(new IDrawable[0]); - }) - .setPos(36, 0) - .setSize(16, 16); - button.addTooltip(StatCollector.translateToLocal("GT5U.gui.button.input_separation")) - .setTooltipShowUpDelay(TOOLTIP_DELAY); - return (ButtonWidget) button; + @Override + public void setVoidingMode(VoidingMode mode) { + this.voidingMode = mode; } - protected boolean isInputSeparationEnabled() { - return separateInputs; + @Override + public Pos2d getVoidingModeButtonPos() { + return new Pos2d(54, 0); } - protected boolean isInputSeparationButtonEnabled() { + @Override + public boolean supportsInputSeparation() { return true; } - protected ButtonWidget createBatchModeButton() { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (isBatchModeButtonEnabled()) { - batchMode = !batchMode; - } - }) - .setPlayClickSound(true) - .setBackground(() -> { - List<UITexture> ret = new ArrayList<>(); - ret.add(GT_UITextures.BUTTON_STANDARD); - if (isBatchModeButtonEnabled()) { - if (isBatchModeEnabled()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_BATCH_MODE_ON); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_BATCH_MODE_OFF); - } - } else { - if (isBatchModeEnabled()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_BATCH_MODE_ON_DISABLED); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_BATCH_MODE_OFF_DISABLED); - } - } - return ret.toArray(new IDrawable[0]); - }) - .setPos(18, 0) - .setSize(16, 16); - button.addTooltip(StatCollector.translateToLocal("GT5U.gui.button.batch_mode")) - .setTooltipShowUpDelay(TOOLTIP_DELAY); - return (ButtonWidget) button; + @Override + public boolean isInputSeparationEnabled() { + return separateInputs; + } + + @Override + public void setInputSeparation(boolean enabled) { + this.separateInputs = enabled; + } + + @Override + public Pos2d getInputSeparationButtonPos() { + return new Pos2d(36, 0); } - protected boolean isBatchModeButtonEnabled() { + @Override + public boolean supportsBatchMode() { return true; } - protected boolean isBatchModeEnabled() { + @Override + public boolean isBatchModeEnabled() { return batchMode; } - protected ButtonWidget createLockToSingleRecipeButton() { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (supportsSingleRecipeLocking()) { - recipeLock = !recipeLock; - } - }) - .setPlayClickSound(true) - .setBackground(() -> { - List<UITexture> ret = new ArrayList<>(); - ret.add(GT_UITextures.BUTTON_STANDARD); - if (supportsSingleRecipeLocking()) { - if (isRecipeLockingEnabled()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_RECIPE_LOCKED); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_RECIPE_UNLOCKED); - } - } else { - if (isRecipeLockingEnabled()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_RECIPE_LOCKED_DISABLED); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_RECIPE_UNLOCKED_DISABLED); - } - } - return ret.toArray(new IDrawable[0]); - }) - .setPos(0, 0) - .setSize(16, 16); - button.addTooltip(StatCollector.translateToLocal("GT5U.gui.button.lock_recipe")) - .setTooltipShowUpDelay(TOOLTIP_DELAY); - return (ButtonWidget) button; + @Override + public void setBatchMode(boolean mode) { + this.batchMode = mode; } - protected boolean supportsSingleRecipeLocking() { + @Override + public Pos2d getBatchModeButtonPos() { + return new Pos2d(18, 0); + } + + @Override + public boolean supportsSingleRecipeLocking() { return false; } - protected boolean isRecipeLockingEnabled() { + @Override + public boolean isRecipeLockingEnabled() { return recipeLock; } @Override + public void setRecipeLocking(boolean enabled) { + this.recipeLock = enabled; + } + + @Override + public Pos2d getRecipeLockingButtonPos() { + return new Pos2d(0, 0); + } + + @Override public ModularWindow createWindowGUI(UIBuildContext buildContext) { return createWindow(buildContext); } |