aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/covers/CoverDoesWork.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common/covers/CoverDoesWork.java')
-rw-r--r--src/main/java/gregtech/common/covers/CoverDoesWork.java252
1 files changed, 252 insertions, 0 deletions
diff --git a/src/main/java/gregtech/common/covers/CoverDoesWork.java b/src/main/java/gregtech/common/covers/CoverDoesWork.java
new file mode 100644
index 0000000000..1575f243ab
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/CoverDoesWork.java
@@ -0,0 +1,252 @@
+package gregtech.common.covers;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+
+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 CoverDoesWork extends CoverBehavior {
+
+ private static int FLAG_INVERTED = 0x1;
+ private static int FLAG_PROGRESS = 0x2;
+ private static int FLAG_ENABLED = 0x4;
+
+ public CoverDoesWork(ITexture coverTexture) {
+ super(coverTexture);
+ }
+
+ @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 ((aTileEntity instanceof IMachineProgress)) {
+ IMachineProgress mProgress = (IMachineProgress) aTileEntity;
+ boolean inverted = isFlagSet(aCoverVariable, FLAG_INVERTED);
+ int signal = 0;
+
+ if (isFlagSet(aCoverVariable, FLAG_ENABLED)) {
+ signal = inverted == mProgress.isAllowedToWork() ? 0 : 15;
+ } else if (isFlagSet(aCoverVariable, FLAG_PROGRESS)) {
+ signal = inverted == (mProgress.getMaxProgress() == 0) ? 0 : 15;
+ } else {
+ int tScale = mProgress.getMaxProgress() / 15;
+
+ if (tScale > 0 && mProgress.hasThingsToDo()) {
+ signal = inverted ? (15 - mProgress.getProgress() / tScale) : (mProgress.getProgress() / tScale);
+ } else {
+ signal = inverted ? 15 : 0;
+ }
+ }
+
+ aTileEntity.setOutputRedstoneSignal(side, (byte) signal);
+ } else {
+ aTileEntity.setOutputRedstoneSignal(side, (byte) 0);
+ }
+ return aCoverVariable;
+ }
+
+ @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)) % 6;
+ if (aCoverVariable < 0) {
+ aCoverVariable = 5;
+ }
+ switch (aCoverVariable) {
+ case 0 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("018", "Normal"));
+ // Progress scaled
+ case 1 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("019", "Inverted"));
+ // ^ inverted
+ case 2 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("020", "Ready to work"));
+ // Not Running
+ case 3 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("021", "Not ready to work"));
+ // Running
+ case 4 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("028", "Machine Enabled"));
+ // Enabled
+ case 5 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("029", "Machine Disabled"));
+ // Disabled
+ }
+ return aCoverVariable;
+ }
+
+ @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 letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid,
+ ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid,
+ 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 manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable,
+ ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return 5;
+ }
+
+ // GUI stuff
+
+ @Override
+ public boolean hasCoverGUI() {
+ return true;
+ }
+
+ @Override
+ public ModularWindow createWindow(CoverUIBuildContext buildContext) {
+ return new DoesWorkUIFactory(buildContext).createWindow();
+ }
+
+ private static boolean isFlagSet(int coverVariable, int flag) {
+ return (coverVariable & flag) == flag;
+ }
+
+ private class DoesWorkUIFactory 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;
+
+ public DoesWorkUIFactory(CoverUIBuildContext buildContext) {
+ super(buildContext);
+ }
+
+ @SuppressWarnings("PointlessArithmeticExpression")
+ @Override
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ builder
+ .widget(
+ new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>(
+ this::getCoverData,
+ this::setCoverData,
+ CoverDoesWork.this,
+ (id, coverData) -> isEnabled(id, convert(coverData)),
+ (id, coverData) -> new ISerializableObject.LegacyCoverData(
+ getNewCoverVariable(id, convert(coverData))))
+ .addToggleButton(
+ 0,
+ CoverDataFollowerToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_PROGRESS)
+ .setPos(spaceX * 0, spaceY * 0))
+ .addToggleButton(
+ 1,
+ CoverDataFollowerToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_CHECKMARK)
+ .setPos(spaceX * 1, spaceY * 0))
+ .addToggleButton(
+ 2,
+ CoverDataFollowerToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_POWER_SWITCH_ON)
+ .setPos(spaceX * 2, spaceY * 0))
+ .addToggleButton(
+ 3,
+ CoverDataFollowerToggleButtonWidget.ofRedstone(),
+ widget -> widget.setPos(spaceX * 0, spaceY * 1))
+ .setPos(startX, startY))
+ .widget(TextWidget.dynamicString(() -> {
+ int coverVariable = convert(getCoverData());
+
+ if (isFlagSet(coverVariable, FLAG_ENABLED)) {
+ return GTUtility.trans("271", "Machine enabled");
+ } else if (isFlagSet(coverVariable, FLAG_PROGRESS)) {
+ return GTUtility.trans("242", "Machine idle");
+ } else {
+ return GTUtility.trans("241", "Recipe progress");
+ }
+
+ })
+ .setSynced(false)
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 4 + startY + spaceY * 0))
+ .widget(
+ TextWidget
+ .dynamicString(
+ () -> isFlagSet(convert(getCoverData()), FLAG_INVERTED)
+ ? GTUtility.trans("INVERTED", "Inverted")
+ : GTUtility.trans("NORMAL", "Normal"))
+ .setSynced(false)
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 4 + startY + spaceY * 1));
+ }
+
+ private int getNewCoverVariable(int id, int coverVariable) {
+ switch (id) {
+ case 0 -> {
+ return (coverVariable & ~FLAG_ENABLED) & ~FLAG_PROGRESS;
+ }
+ case 1 -> {
+ return (coverVariable & ~FLAG_ENABLED) | FLAG_PROGRESS;
+ }
+ case 2 -> {
+ return (coverVariable & ~FLAG_PROGRESS) | FLAG_ENABLED;
+ }
+ case 3 -> {
+ if (isFlagSet(coverVariable, FLAG_INVERTED)) {
+ return coverVariable & ~FLAG_INVERTED;
+ } else {
+ return coverVariable | FLAG_INVERTED;
+ }
+ }
+ }
+ return coverVariable;
+ }
+
+ private boolean isEnabled(int id, int coverVariable) {
+ return switch (id) {
+ case 0 -> !isFlagSet(coverVariable, FLAG_PROGRESS) && !isFlagSet(coverVariable, FLAG_ENABLED);
+ case 1 -> isFlagSet(coverVariable, FLAG_PROGRESS);
+ case 2 -> isFlagSet(coverVariable, FLAG_ENABLED);
+ case 3 -> isFlagSet(coverVariable, FLAG_INVERTED);
+ default -> true;
+ };
+ }
+ }
+}