aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common')
-rw-r--r--src/main/java/gregtech/common/GT_Proxy.java21
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Arm.java350
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java158
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java153
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_DoesWork.java136
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java238
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java158
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_FluidLimiter.java101
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java399
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java237
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_ItemFilter.java159
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java363
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java238
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java214
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_PlayerDetector.java113
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Pump.java153
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java207
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Shutter.java131
-rw-r--r--src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java198
-rw-r--r--src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java101
-rw-r--r--src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java271
-rw-r--r--src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java88
-rw-r--r--src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessItemDetector.java200
-rw-r--r--src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessMaintenanceDetector.java105
-rw-r--r--src/main/java/gregtech/common/gui/GT_ContainerVolumetricFlask.java20
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_AdvDebugStructureWriter.java213
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_Boiler.java99
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_BronzeBlastFurnace.java31
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_ChestBuffer.java102
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_Filter.java138
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_IndustrialApiary.java249
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_InputBus_ME.java121
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_ItemDistributor.java83
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_MicrowaveEnergyTransmitter.java188
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java53
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_PrimitiveBlastFurnace.java37
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_QuantumChest.java70
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_Regulator.java177
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_SuperBuffer.java97
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_Teleporter.java190
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainerVolumetricFlask.java234
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_AdvDebugStructureWriter.java76
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_Boiler.java46
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_BronzeBlastFurnace.java47
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_ChestBuffer.java19
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_Filter.java19
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_FusionReactor.java96
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_IndustrialApiary.java174
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_InputBus_ME.java77
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_ItemDistributor.java21
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_MicrowaveEnergyTransmitter.java75
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_OutputHatch.java75
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_PrimitiveBlastFurnace.java81
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_QuantumChest.java46
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_RecipeFilter.java23
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_Regulator.java44
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_SuperBuffer.java19
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_Teleporter.java63
-rw-r--r--src/main/java/gregtech/common/gui/modularui/UIHelper.java222
-rw-r--r--src/main/java/gregtech/common/gui/modularui/uifactory/SelectItemUIFactory.java221
-rw-r--r--src/main/java/gregtech/common/gui/modularui/widget/AESlotWidget.java40
-rw-r--r--src/main/java/gregtech/common/gui/modularui/widget/CoverCycleButtonWidget.java89
-rw-r--r--src/main/java/gregtech/common/gui/modularui/widget/CoverDataControllerWidget.java138
-rw-r--r--src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_CycleButtonWidget.java38
-rw-r--r--src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_SlotWidget.java102
-rw-r--r--src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_TextFieldWidget.java110
-rw-r--r--src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_ToggleButtonWidget.java84
-rw-r--r--src/main/java/gregtech/common/gui/modularui/widget/DataControllerWidget.java162
-rw-r--r--src/main/java/gregtech/common/gui/modularui/widget/FluidDisplaySlotWidget.java474
-rw-r--r--src/main/java/gregtech/common/gui/modularui/widget/ItemWatcherSlotWidget.java47
-rw-r--r--src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java15
-rw-r--r--src/main/java/gregtech/common/items/GT_VolumetricFlask.java105
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java37
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java86
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java32
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java19
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java76
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java18
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java14
-rw-r--r--src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java114
-rw-r--r--src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Bronze.java19
-rw-r--r--src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Lava.java19
-rw-r--r--src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java31
-rw-r--r--src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar_Steel.java11
-rw-r--r--src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Steel.java19
-rw-r--r--src/main/java/gregtech/common/tileentities/debug/GT_MetaTileEntity_AdvDebugStructureWriter.java140
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java88
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java5
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_CuringOven.java28
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Disassembler.java12
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_IndustrialApiary.java359
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MicrowaveEnergyTransmitter.java109
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Miner.java26
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java22
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java109
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AssemblyLine.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BrickedBlastFurnace.java6
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BronzeBlastFurnace.java6
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Cleanroom.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DieselEngine.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ExtremeDieselEngine.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java111
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiFurnace.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilCracker.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java9
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PlasmaForge.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PrimitiveBlastFurnace.java99
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Bronze.java12
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Steel.java12
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Bronze.java12
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Steel.java12
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Bronze.java12
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Steel.java12
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Bronze.java14
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Steel.java14
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Bronze.java12
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Steel.java12
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Bronze.java12
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Steel.java12
-rw-r--r--src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java58
-rw-r--r--src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java203
133 files changed, 5327 insertions, 6300 deletions
diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java
index 8db4c21dde..37ad05530c 100644
--- a/src/main/java/gregtech/common/GT_Proxy.java
+++ b/src/main/java/gregtech/common/GT_Proxy.java
@@ -70,8 +70,6 @@ import gregtech.api.util.GT_Shapeless_Recipe;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.WorldSpawnedEventBuilder;
import gregtech.common.entities.GT_Entity_Arrow;
-import gregtech.common.gui.GT_ContainerVolumetricFlask;
-import gregtech.common.gui.GT_GUIContainerVolumetricFlask;
import gregtech.common.items.GT_MetaGenerated_Item_98;
import gregtech.common.items.GT_MetaGenerated_Tool_01;
import gregtech.common.misc.GlobalEnergyWorldSavedData;
@@ -646,6 +644,11 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
public int mTooltipShiftVerbosity = 3;
/**
+ * Which style to use for title tab on machine GUI? 0: text tab split-dark, 1: text tab unified, 2: item icon tab
+ */
+ public int mTitleTabStyle = 0;
+
+ /**
* Whether to show seconds or ticks on NEI
*/
public boolean mNEIRecipeSecondMode = true;
@@ -2241,10 +2244,6 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
@Override
public Object getServerGuiElement(int aID, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ) {
if (aID >= 1000) {
- int ID = aID - 1000;
- if (ID == 10) {
- return new GT_ContainerVolumetricFlask(aPlayer.inventory);
- }
return null;
}
TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
@@ -2253,7 +2252,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
return null;
}
IMetaTileEntity tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity();
- if (tMetaTileEntity != null) {
+ if (tMetaTileEntity != null && !tMetaTileEntity.useModularUI()) {
return tMetaTileEntity.getServerGUI(aID, aPlayer.inventory, (IGregTechTileEntity) tTileEntity);
}
}
@@ -2263,10 +2262,6 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
@Override
public Object getClientGuiElement(int aID, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ) {
if (aID >= 1000) {
- int ID = aID - 1000;
- if (ID == 10) {
- return new GT_GUIContainerVolumetricFlask(new GT_ContainerVolumetricFlask(aPlayer.inventory));
- }
return null;
}
TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
@@ -2277,7 +2272,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
byte side = (byte) (aID - GT_Proxy.GUI_ID_COVER_SIDE_BASE);
GT_CoverBehaviorBase<?> cover = tile.getCoverBehaviorAtSideNew(side);
- if (cover.hasCoverGUI()) {
+ if (cover.hasCoverGUI() && !cover.useModularUI()) {
return cover.getClientGUI(
side,
tile.getCoverIDAtSide(side),
@@ -2289,7 +2284,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
return null;
}
IMetaTileEntity tMetaTileEntity = tile.getMetaTileEntity();
- if (tMetaTileEntity != null) {
+ if (tMetaTileEntity != null && !tMetaTileEntity.useModularUI()) {
return tMetaTileEntity.getClientGUI(aID, aPlayer.inventory, tile);
}
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Arm.java b/src/main/java/gregtech/common/covers/GT_Cover_Arm.java
index fb556989c1..6a7711a242 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_Arm.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Arm.java
@@ -1,19 +1,22 @@
package gregtech.common.covers;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiFakeItemButton;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconButton;
-import gregtech.api.gui.widgets.GT_GuiIntegerTextBox;
+import com.gtnewhorizons.modularui.api.math.MathExpression;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import com.gtnewhorizons.modularui.common.widget.textfield.BaseTextFieldWidget;
+import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IMachineProgress;
-import gregtech.api.net.GT_Packet_TileEntityCover;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
-import net.minecraft.client.gui.GuiButton;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_TextFieldWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
+import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.tileentity.TileEntity;
@@ -28,6 +31,10 @@ public class GT_Cover_Arm extends GT_CoverBehavior {
protected static final int SLOT_ID_MIN = 0;
protected static final int CONVERTED_BIT = 0x80000000;
+ // This used to be translatable, but now that cover GUI is synced with server, having conflicting texts
+ // among players doesn't make sense.
+ private static final String ANY_TEXT = "Any";
+
/**
* @deprecated use {@link #GT_Cover_Arm(int aTickRate, ITexture coverTexture)} instead
*/
@@ -264,223 +271,182 @@ public class GT_Cover_Arm extends GT_CoverBehavior {
return this.mTickRate;
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) {
- return new GT_Cover_Arm.GUI(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
}
- private class GUI extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private GT_GuiIntegerTextBox intSlot, adjSlot;
- private GT_GuiFakeItemButton intSlotIcon, adjSlotIcon;
- private int coverVariable;
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new ArmUIFactory(buildContext).createWindow();
+ }
+
+ private class ArmUIFactory 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 final String ANY_TEXT = GT_Utility.trans("ANY", "Any");
-
- private boolean export;
- private int internalSlotID, adjacentSlotID;
- private final int maxIntSlot, maxAdjSlot;
-
- private final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GUI(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- export = (coverVariable & EXPORT_MASK) > 0;
- internalSlotID = (coverVariable & SLOT_ID_MASK);
- adjacentSlotID = (coverVariable >> 14) & SLOT_ID_MASK;
-
- new GT_GuiIconButton(this, 0, startX + spaceX * 0, startY + spaceY * 0, GT_GuiIcon.EXPORT)
- .setTooltipText(GT_Utility.trans("006", "Export"));
- new GT_GuiIconButton(this, 1, startX + spaceX * 1, startY + spaceY * 0, GT_GuiIcon.IMPORT)
- .setTooltipText(GT_Utility.trans("007", "Import"));
-
- intSlot =
- new GT_GuiIntegerTextBox(this, 2, startX + spaceX * 0, startY + spaceY * 1 + 2, spaceX * 2 + 5, 12);
- setBoxText(intSlot, internalSlotID - 1);
- intSlot.setMaxStringLength(6);
-
- adjSlot =
- new GT_GuiIntegerTextBox(this, 3, startX + spaceX * 0, startY + spaceY * 2 + 2, spaceX * 2 + 5, 12);
- setBoxText(adjSlot, adjacentSlotID - 1);
- adjSlot.setMaxStringLength(6);
-
- // intSlotIcon = new GT_GuiFakeItemButton(this, startX + spaceX * 8-4, startY + spaceY * 1,
- // GT_GuiIcon.SLOT_GRAY);
- // adjSlotIcon = new GT_GuiFakeItemButton(this, startX + spaceX * 8-4, startY + spaceY * 2,
- // GT_GuiIcon.SLOT_GRAY);
-
- if (super.tile instanceof TileEntity && !super.tile.isDead()) {
- maxIntSlot = tile.getSizeInventory() - 1;
-
- TileEntity adj = super.tile.getTileEntityAtSide(side);
- if (adj instanceof IInventory) maxAdjSlot = ((IInventory) adj).getSizeInventory() - 1;
- else maxAdjSlot = -1;
- } else {
- maxIntSlot = -1;
- maxAdjSlot = -1;
- }
- }
-
- @Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- if (export)
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("006", "Export"),
- startX + spaceX * 3,
- 4 + startY + spaceY * 0,
- textColor);
- else
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("007", "Import"),
- startX + spaceX * 3,
- 4 + startY + spaceY * 0,
- textColor);
-
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("254.1", "Internal slot#"),
- startX + spaceX * 3,
- 4 + startY + spaceY * 1,
- textColor);
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("255", "Adjacent slot#"),
- startX + spaceX * 3,
- 4 + startY + spaceY * 2,
- textColor);
- }
-
- @Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- intSlot.setFocused(true);
- updateButtons();
-
- // updateInventorySlots();
- }
+ private int maxSlot;
- @Override
- public void buttonClicked(GuiButton btn) {
- if (buttonClickable(btn.id)) {
- export = btn.id == 0;
- coverVariable = getNewCoverVariable();
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile));
- }
- updateButtons();
- }
-
- private void updateButtons() {
- GuiButton b;
- for (Object o : buttonList) {
- b = (GuiButton) o;
- b.enabled = buttonClickable(b.id);
- }
+ protected ArmUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
+ @SuppressWarnings("PointlessArithmeticExpression")
@Override
- public void onMouseWheel(int x, int y, int delta) {
- for (GT_GuiIntegerTextBox box : textBoxes) {
- if (box.isFocused()) {
- int step = Math.max(1, Math.abs(delta / 120));
- step = (isShiftKeyDown() ? 50 : isCtrlKeyDown() ? 5 : 1) * (delta > 0 ? step : -step);
- int maxSlot = box.id == 3 ? maxAdjSlot : maxIntSlot;
- int val = parseTextBox(box, maxSlot);
- if (val < 0) val = -1;
- val = val + step;
-
- if (maxSlot < val)
- if (maxSlot < 0) val = -1;
- else val = maxSlot;
- else if (val < SLOT_ID_MIN) val = -1;
-
- setBoxText(box, val);
- return;
- }
- }
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ maxSlot = getMaxSlot();
+ builder.widget(new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, GT_Cover_Arm.this)
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ coverData -> getFlagExport(convert(coverData)) > 0,
+ (coverData, state) -> {
+ if (state) {
+ return new ISerializableObject.LegacyCoverData(
+ convert(coverData) | EXPORT_MASK | CONVERTED_BIT);
+ } else {
+ return new ISerializableObject.LegacyCoverData(
+ convert(coverData) & ~EXPORT_MASK | CONVERTED_BIT);
+ }
+ },
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_EXPORT)
+ .addTooltip(GT_Utility.trans("006", "Export"))
+ .setPos(spaceX * 0, spaceY * 0))
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ coverData -> getFlagExport(convert(coverData)) == 0,
+ (coverData, state) -> {
+ if (state) {
+ return new ISerializableObject.LegacyCoverData(
+ convert(coverData) & ~EXPORT_MASK | CONVERTED_BIT);
+ } else {
+ return new ISerializableObject.LegacyCoverData(
+ convert(coverData) | EXPORT_MASK | CONVERTED_BIT);
+ }
+ },
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_IMPORT)
+ .addTooltip(GT_Utility.trans("007", "Import"))
+ .setPos(spaceX * 1, spaceY * 0))
+ .addFollower(
+ new CoverDataFollower_TextFieldWidget<>(),
+ coverData -> getTextFieldContent(getFlagInternalSlot(convert(coverData)) - 1),
+ (coverData, state) -> {
+ final int coverVariable = convert(coverData);
+ return new ISerializableObject.LegacyCoverData(getFlagExport(coverVariable)
+ | ((getIntFromText(state) + 1) & SLOT_ID_MASK)
+ | (getFlagAdjacentSlot(coverVariable) << 14)
+ | CONVERTED_BIT);
+ },
+ widget -> widget.setOnScrollText()
+ .setValidator(val -> {
+ final int valSlot = getIntFromText(val);
+ if (valSlot > -1) {
+ return TextFieldWidget.format.format(Math.min(valSlot, maxSlot));
+ } else {
+ return ANY_TEXT;
+ }
+ })
+ .setPattern(BaseTextFieldWidget.NATURAL_NUMS)
+ .setFocusOnGuiOpen(true)
+ .setPos(spaceX * 0, spaceY * 1 + 2)
+ .setSize(spaceX * 2 + 5, 12))
+ .addFollower(
+ new CoverDataFollower_TextFieldWidget<>(),
+ coverData -> getTextFieldContent(getFlagAdjacentSlot(convert(coverData)) - 1),
+ (coverData, state) -> {
+ final int coverVariable = convert(coverData);
+ return new ISerializableObject.LegacyCoverData(getFlagExport(coverVariable)
+ | getFlagInternalSlot(coverVariable)
+ | (((getIntFromText(state) + 1) & SLOT_ID_MASK) << 14)
+ | CONVERTED_BIT);
+ },
+ widget -> widget.setValidator(val -> {
+ final int valSlot = getIntFromText(val);
+ final int adjacentMaxSlot;
+ final ICoverable tile =
+ getUIBuildContext().getTile();
+ if (tile instanceof TileEntity && !tile.isDead()) {
+ TileEntity adj = tile.getTileEntityAtSide(
+ getUIBuildContext().getCoverSide());
+ if (adj instanceof IInventory)
+ adjacentMaxSlot = ((IInventory) adj).getSizeInventory() - 1;
+ else adjacentMaxSlot = -1;
+ } else {
+ adjacentMaxSlot = -1;
+ }
+ if (valSlot > -1) {
+ return TextFieldWidget.format.format(
+ Math.min(valSlot, adjacentMaxSlot));
+ } else {
+ return ANY_TEXT;
+ }
+ })
+ .setOnScroll((text, direction) -> {
+ final int val = getIntFromText(text);
+ int step = (GuiScreen.isShiftKeyDown()
+ ? 50
+ : GuiScreen.isCtrlKeyDown() ? 5 : 1)
+ * direction;
+ return TextFieldWidget.format.format(val + step);
+ })
+ .setPattern(BaseTextFieldWidget.NATURAL_NUMS)
+ .setPos(spaceX * 0, spaceY * 2 + 2)
+ .setSize(spaceX * 2 + 5, 12))
+ .setPos(startX, startY))
+ .widget(TextWidget.dynamicString(() -> (convert(getCoverData()) & EXPORT_MASK) > 0
+ ? GT_Utility.trans("006", "Export")
+ : GT_Utility.trans("007", "Import"))
+ .setSynced(false)
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 4 + startY + spaceY * 0))
+ .widget(new TextWidget(GT_Utility.trans("254.1", "Internal slot#"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 4 + startY + spaceY * 1))
+ .widget(new TextWidget(GT_Utility.trans("255", "Adjacent slot#"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 4 + startY + spaceY * 2));
}
- @Override
- public void applyTextBox(GT_GuiIntegerTextBox box) {
- int val = -1;
-
- if (box.id == 2) {
- val = parseTextBox(box, maxIntSlot);
- internalSlotID = val + 1;
- } else if (box.id == 3) {
- val = parseTextBox(box, maxAdjSlot);
- adjacentSlotID = val + 1;
+ private int getMaxSlot() {
+ final ICoverable tile = getUIBuildContext().getTile();
+ if (tile instanceof TileEntity && !tile.isDead()) {
+ return tile.getSizeInventory() - 1;
+ } else {
+ return -1;
}
-
- setBoxText(box, val);
- coverVariable = getNewCoverVariable();
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile));
- // updateInventorySlots();
}
- @Override
- public void resetTextBox(GT_GuiIntegerTextBox box) {
- int val = 0;
- if (box.id == 2) val = internalSlotID - 1;
- else if (box.id == 3) val = adjacentSlotID - 1;
- setBoxText(box, val);
+ private String getTextFieldContent(int val) {
+ return val < 0 ? ANY_TEXT : String.valueOf(val);
}
- private void setBoxText(GT_GuiIntegerTextBox box, int val) {
- box.setText(val < 0 ? ANY_TEXT : String.valueOf(val));
- }
-
- private int parseTextBox(GT_GuiIntegerTextBox box, int maxSlot) {
- String text = box.getText();
- if (text == null) return -1;
- text = text.trim();
- if (text.startsWith(ANY_TEXT)) text = text.substring(ANY_TEXT.length());
-
- if (text.isEmpty()) return -1;
-
- int val;
+ private int getIntFromText(String text) {
try {
- val = Integer.parseInt(text);
- } catch (NumberFormatException e) {
+ return (int) MathExpression.parseMathExpression(text, -1);
+ } catch (Exception e) {
return -1;
}
+ }
- if (maxSlot < val)
- if (maxSlot < 0) return -1;
- else return maxSlot;
- else if (val < SLOT_ID_MIN) return SLOT_ID_MIN;
- return val;
+ private int getFlagExport(int coverVariable) {
+ return coverVariable & EXPORT_MASK;
}
- private int getNewCoverVariable() {
- return (export ? EXPORT_MASK : 0)
- | ((adjacentSlotID & SLOT_ID_MASK) << 14)
- | (internalSlotID & SLOT_ID_MASK)
- | CONVERTED_BIT;
+ private int getFlagInternalSlot(int coverVariable) {
+ return coverVariable & SLOT_ID_MASK;
}
- private boolean buttonClickable(int id) {
- if (id == 0) return !export;
- return export;
+ private int getFlagAdjacentSlot(int coverVariable) {
+ return (coverVariable >> 14) & SLOT_ID_MASK;
}
}
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java b/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java
index d8f09619bc..ee0a740d68 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java
@@ -1,17 +1,17 @@
package gregtech.common.covers;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconButton;
-import gregtech.api.gui.widgets.GT_GuiIconCheckButton;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IMachineProgress;
-import gregtech.api.net.GT_Packet_TileEntityCover;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Utility;
-import net.minecraft.client.gui.GuiButton;
+import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid;
@@ -171,113 +171,103 @@ public class GT_Cover_ControlsWork extends GT_CoverBehavior {
return true;
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) {
- return new GT_Cover_ControlsWork.GUI(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
}
- private class GUI extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private int coverVariable;
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new ControlsWorkUIFactory(buildContext).createWindow();
+ }
+
+ private class ControlsWorkUIFactory 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 final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GUI(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- new GT_GuiIconButton(this, 0, startX + spaceX * 0, startY + spaceY * 0, GT_GuiIcon.REDSTONE_ON);
- new GT_GuiIconButton(this, 1, startX + spaceX * 0, startY + spaceY * 1, GT_GuiIcon.REDSTONE_OFF);
- new GT_GuiIconButton(this, 2, startX + spaceX * 0, startY + spaceY * 2, GT_GuiIcon.CROSS);
-
- new GT_GuiIconCheckButton(
- this, 3, startX + spaceX * 0, startY + spaceY * 3, GT_GuiIcon.CHECKMARK, GT_GuiIcon.CROSS)
- .setChecked(aCoverVariable > 2);
- }
-
- @Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.fontRendererObj.drawString(
- GT_Utility.trans("243", "Enable with Redstone"),
- 3 + startX + spaceX * 1,
- 4 + startY + spaceY * 0,
- textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("244", "Disable with Redstone"),
- 3 + startX + spaceX * 1,
- 4 + startY + spaceY * 1,
- textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("245", "Disable machine"),
- 3 + startX + spaceX * 1,
- 4 + startY + spaceY * 2,
- textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("507", "Safe Mode"), 3 + startX + spaceX * 1, 4 + startY + spaceY * 3, textColor);
+ public ControlsWorkUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
+ @SuppressWarnings("PointlessArithmeticExpression")
@Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- updateButtons();
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ builder.widget(new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>(
+ this::getCoverData,
+ this::setCoverData,
+ GT_Cover_ControlsWork.this,
+ (id, coverData) -> !getClickable(id, convert(coverData)),
+ (id, coverData) -> new ISerializableObject.LegacyCoverData(
+ getNewCoverVariable(id, convert(coverData))))
+ .addToggleButton(
+ 0,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_REDSTONE_ON)
+ .setPos(spaceX * 0, spaceY * 0))
+ .addToggleButton(
+ 1,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_REDSTONE_OFF)
+ .setPos(spaceX * 0, spaceY * 1))
+ .addToggleButton(
+ 2,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_CROSS)
+ .setPos(spaceX * 0, spaceY * 2))
+ .setPos(startX, startY))
+ .widget(new CoverDataControllerWidget<>(
+ this::getCoverData, this::setCoverData, GT_Cover_ControlsWork.this)
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofCheckAndCross(),
+ coverData -> convert(coverData) > 2,
+ (coverData, state) -> new ISerializableObject.LegacyCoverData(
+ adjustCoverVariable(state, convert(coverData))),
+ widget -> widget.setPos(spaceX * 0, spaceY * 3))
+ .setPos(startX, startY))
+ .widget(new TextWidget(GT_Utility.trans("243", "Enable with Redstone"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 0))
+ .widget(new TextWidget(GT_Utility.trans("244", "Disable with Redstone"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 1))
+ .widget(new TextWidget(GT_Utility.trans("245", "Disable machine"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 2))
+ .widget(new TextWidget(GT_Utility.trans("507", "Safe Mode"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 3));
}
- @Override
- public void buttonClicked(GuiButton btn) {
- if (getClickable(btn.id)) {
- int bID = btn.id;
- if (bID == 3) {
- ((GT_GuiIconCheckButton) btn).setChecked(!((GT_GuiIconCheckButton) btn).isChecked());
- } else {
- coverVariable = getNewCoverVariable(bID);
- }
- adjustCoverVariable();
- // TODO: Set lastPlayer;
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile));
- }
- updateButtons();
- }
-
- private void updateButtons() {
- GuiButton b;
- for (Object o : buttonList) {
- b = (GuiButton) o;
- b.enabled = getClickable(b.id);
+ private int getNewCoverVariable(int id, int coverVariable) {
+ if (coverVariable > 2) {
+ return id + 3;
+ } else {
+ return id;
}
}
- private int getNewCoverVariable(int id) {
- return id;
- }
-
- private boolean getClickable(int id) {
+ private boolean getClickable(int id, int coverVariable) {
return ((id != coverVariable && id != coverVariable - 3) || id == 3);
}
- private void adjustCoverVariable() {
- boolean safeMode = ((GT_GuiIconCheckButton) buttonList.get(3)).isChecked();
- if (safeMode && coverVariable < 2) {
+ private int adjustCoverVariable(boolean safeMode, int coverVariable) {
+ if (safeMode && coverVariable <= 2) {
coverVariable += 3;
}
if (!safeMode && coverVariable > 2) {
coverVariable -= 3;
}
+ return coverVariable;
}
}
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java b/src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java
index ebd87e85ab..dc3bcc4f7b 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java
@@ -2,17 +2,18 @@ package gregtech.common.covers;
import static gregtech.api.util.GT_Utility.moveMultipleItemStacks;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconButton;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IMachineProgress;
-import gregtech.api.net.GT_Packet_TileEntityCover;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Utility;
-import net.minecraft.client.gui.GuiButton;
+import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.fluids.Fluid;
@@ -184,88 +185,99 @@ public class GT_Cover_Conveyor extends GT_CoverBehavior {
return this.mTickRate;
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) {
- return new GT_Cover_Conveyor.GUI(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new ConveyorUIFactory(buildContext).createWindow();
}
- private class GUI extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private int coverVariable;
+ private class ConveyorUIFactory 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 final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GUI(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- GT_GuiIconButton b;
- b = new GT_GuiIconButton(this, 0, startX + spaceX * 0, startY + spaceY * 0, GT_GuiIcon.EXPORT)
- .setTooltipText(GT_Utility.trans("006", "Export"));
- b = new GT_GuiIconButton(this, 1, startX + spaceX * 1, startY + spaceY * 0, GT_GuiIcon.IMPORT)
- .setTooltipText(GT_Utility.trans("007", "Import"));
- b = new GT_GuiIconButton(this, 2, startX + spaceX * 0, startY + spaceY * 1, GT_GuiIcon.CHECKMARK)
- .setTooltipText(GT_Utility.trans("224", "Always On"));
- b = new GT_GuiIconButton(this, 3, startX + spaceX * 1, startY + spaceY * 1, GT_GuiIcon.REDSTONE_ON)
- .setTooltipText(GT_Utility.trans("225", "Active with Redstone Signal"));
- b = new GT_GuiIconButton(this, 4, startX + spaceX * 2, startY + spaceY * 1, GT_GuiIcon.REDSTONE_OFF)
- .setTooltipText(GT_Utility.trans("226", "Inactive with Redstone Signal"));
- b = new GT_GuiIconButton(this, 5, startX + spaceX * 0, startY + spaceY * 2, GT_GuiIcon.ALLOW_INPUT)
- .setTooltipText(GT_Utility.trans("227", "Allow Input"));
- b = new GT_GuiIconButton(this, 6, startX + spaceX * 1, startY + spaceY * 2, GT_GuiIcon.BLOCK_INPUT)
- .setTooltipText(GT_Utility.trans("228", "Block Input"));
- }
-
- @Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.fontRendererObj.drawString(
- GT_Utility.trans("229", "Import/Export"), startX + spaceX * 3, 3 + startY + spaceY * 0, textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("230", "Conditional"), startX + spaceX * 3, 3 + startY + spaceY * 1, textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("231", "Enable Input"), startX + spaceX * 3, 3 + startY + spaceY * 2, textColor);
- }
-
- @Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- updateButtons();
+ public ConveyorUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
+ @SuppressWarnings("PointlessArithmeticExpression")
@Override
- public void buttonClicked(GuiButton btn) {
- if (getClickable(btn.id)) {
- coverVariable = getNewCoverVariable(btn.id);
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile));
- }
- updateButtons();
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ builder.widget(new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>(
+ this::getCoverData,
+ this::setCoverData,
+ GT_Cover_Conveyor.this,
+ (id, coverData) -> !getClickable(id, convert(coverData)),
+ (id, coverData) -> new ISerializableObject.LegacyCoverData(
+ getNewCoverVariable(id, convert(coverData))))
+ .addToggleButton(
+ 0,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_EXPORT)
+ .addTooltip(GT_Utility.trans("006", "Export"))
+ .setPos(spaceX * 0, spaceY * 0))
+ .addToggleButton(
+ 1,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_IMPORT)
+ .addTooltip(GT_Utility.trans("007", "Import"))
+ .setPos(spaceX * 1, spaceY * 0))
+ .addToggleButton(
+ 2,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_CHECKMARK)
+ .addTooltip(GT_Utility.trans("224", "Always On"))
+ .setPos(spaceX * 0, spaceY * 1))
+ .addToggleButton(
+ 3,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_REDSTONE_ON)
+ .addTooltip(GT_Utility.trans("225", "Active with Redstone Signal"))
+ .setPos(spaceX * 1, spaceY * 1))
+ .addToggleButton(
+ 4,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_REDSTONE_OFF)
+ .addTooltip(GT_Utility.trans("226", "Inactive with Redstone Signal"))
+ .setPos(spaceX * 2, spaceY * 1))
+ .addToggleButton(
+ 5,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_ALLOW_INPUT)
+ .addTooltip(GT_Utility.trans("227", "Allow Input"))
+ .setPos(spaceX * 0, spaceY * 2))
+ .addToggleButton(
+ 6,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_BLOCK_INPUT)
+ .addTooltip(GT_Utility.trans("228", "Block Input"))
+ .setPos(spaceX * 1, spaceY * 2))
+ .setPos(startX, startY))
+ .widget(new TextWidget(GT_Utility.trans("229", "Import/Export"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 3 + startY + spaceY * 0))
+ .widget(new TextWidget(GT_Utility.trans("230", "Conditional"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 3 + startY + spaceY * 1))
+ .widget(new TextWidget(GT_Utility.trans("231", "Enable Input"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 3 + startY + spaceY * 2));
}
- private void updateButtons() {
- GuiButton b;
- for (Object o : buttonList) {
- b = (GuiButton) o;
- b.enabled = getClickable(b.id);
- }
- }
-
- private int getNewCoverVariable(int id) {
+ private int getNewCoverVariable(int id, int coverVariable) {
switch (id) {
case 0:
return coverVariable & ~0x1;
@@ -289,9 +301,8 @@ public class GT_Cover_Conveyor extends GT_CoverBehavior {
return coverVariable;
}
- private boolean getClickable(int id) {
+ private boolean getClickable(int id, int coverVariable) {
if (coverVariable < 0 | 11 < coverVariable) return false;
-
switch (id) {
case 0:
case 1:
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_DoesWork.java b/src/main/java/gregtech/common/covers/GT_Cover_DoesWork.java
index c37e4b5cbb..d755a115c4 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_DoesWork.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_DoesWork.java
@@ -1,17 +1,17 @@
package gregtech.common.covers;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconButton;
-import gregtech.api.gui.widgets.GT_GuiIconCheckButton;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IMachineProgress;
-import gregtech.api.net.GT_Packet_TileEntityCover;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Utility;
-import net.minecraft.client.gui.GuiButton;
+import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.fluids.Fluid;
@@ -135,108 +135,96 @@ public class GT_Cover_DoesWork extends GT_CoverBehavior {
return 5;
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) {
- return new GT_Cover_DoesWork.GUI(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new DoesWorkUIFactory(buildContext).createWindow();
}
- private class GUI extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private int coverVariable;
+ 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;
- private final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GUI(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- GuiButton b;
- b = new GT_GuiIconButton(this, 0, startX + spaceX * 0, startY + spaceY * 0, GT_GuiIcon.PROGRESS);
- b = new GT_GuiIconButton(this, 1, startX + spaceX * 1, startY + spaceY * 0, GT_GuiIcon.CHECKMARK);
- b = new GT_GuiIconCheckButton(
- this, 2, startX + spaceX * 0, startY + spaceY * 1, GT_GuiIcon.REDSTONE_ON, GT_GuiIcon.REDSTONE_OFF);
- }
-
- @Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- String s1, s2;
- if ((coverVariable & 0x2) > 0) s1 = GT_Utility.trans("242", "Machine idle");
- else s1 = GT_Utility.trans("241", "Recipe progress");
- if ((coverVariable & 0x1) > 0) s2 = GT_Utility.trans("INVERTED", "Inverted");
- else s2 = GT_Utility.trans("NORMAL", "Normal");
- this.fontRendererObj.drawString(s1, startX + spaceX * 3, 4 + startY + spaceY * 0, textColor);
- this.fontRendererObj.drawString(s2, startX + spaceX * 3, 4 + startY + spaceY * 1, textColor);
- }
-
- @Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- updateButtons();
+ public DoesWorkUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
+ @SuppressWarnings("PointlessArithmeticExpression")
@Override
- public void buttonClicked(GuiButton btn) {
- if (getClickable(btn.id)) {
- boolean state = false;
- if (btn.id == 2) state = ((GT_GuiIconCheckButton) btn).isChecked();
-
- coverVariable = getNewCoverVariable(btn.id, state);
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile));
- }
- updateButtons();
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ builder.widget(new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>(
+ this::getCoverData,
+ this::setCoverData,
+ GT_Cover_DoesWork.this,
+ (id, coverData) -> isEnabled(id, convert(coverData)),
+ (id, coverData) -> new ISerializableObject.LegacyCoverData(
+ getNewCoverVariable(id, convert(coverData))))
+ .addToggleButton(
+ 0,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_PROGRESS)
+ .setPos(spaceX * 0, spaceY * 0))
+ .addToggleButton(
+ 1,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_CHECKMARK)
+ .setPos(spaceX * 1, spaceY * 0))
+ .addToggleButton(
+ 2,
+ CoverDataFollower_ToggleButtonWidget.ofRedstone(),
+ widget -> widget.setPos(spaceX * 0, spaceY * 1))
+ .setPos(startX, startY))
+ .widget(TextWidget.dynamicString(() -> ((convert(getCoverData()) & 0x2) > 0)
+ ? GT_Utility.trans("242", "Machine idle")
+ : GT_Utility.trans("241", "Recipe progress"))
+ .setSynced(false)
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 4 + startY + spaceY * 0))
+ .widget(TextWidget.dynamicString(() -> ((convert(getCoverData()) & 0x1) > 0)
+ ? GT_Utility.trans("INVERTED", "Inverted")
+ : GT_Utility.trans("NORMAL", "Normal"))
+ .setSynced(false)
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 4 + startY + spaceY * 1));
}
- private void updateButtons() {
- GuiButton b;
- for (Object o : buttonList) {
- b = (GuiButton) o;
- if (b.id == 2) {
- ((GT_GuiIconCheckButton) b).setChecked((coverVariable & 0x1) > 0);
- } else {
- b.enabled = getClickable(b.id);
- }
- }
- }
-
- private int getNewCoverVariable(int id, boolean buttonState) {
+ private int getNewCoverVariable(int id, int coverVariable) {
switch (id) {
case 0:
return coverVariable & ~0x2;
case 1:
return coverVariable | 0x2;
case 2:
- if (buttonState) return coverVariable & ~0x1;
+ if ((coverVariable & 0x1) > 0) return coverVariable & ~0x1;
return coverVariable | 0x1;
}
return coverVariable;
}
- private boolean getClickable(int id) {
+ private boolean isEnabled(int id, int coverVariable) {
switch (id) {
case 0:
- return (coverVariable & 0x2) > 0;
- case 1:
return (coverVariable & 0x2) == 0;
+ case 1:
+ return (coverVariable & 0x2) > 0;
case 2:
- return true;
+ return (coverVariable & 0x1) > 0;
}
- return false;
+ return true;
}
}
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java
index c9e7ef363a..fbac598d19 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java
@@ -1,31 +1,31 @@
package gregtech.common.covers;
import com.google.common.io.ByteArrayDataInput;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconButton;
-import gregtech.api.gui.widgets.GT_GuiIconCheckButton;
-import gregtech.api.gui.widgets.GT_GuiIntegerTextBox;
+import com.gtnewhorizons.modularui.api.math.MathExpression;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicBatteryBuffer;
-import gregtech.api.net.GT_Packet_TileEntityCoverNew;
import gregtech.api.util.GT_CoverBehaviorBase;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_CycleButtonWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_TextFieldWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import io.netty.buffer.ByteBuf;
import java.util.function.Function;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
-import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.world.World;
import net.minecraftforge.fluids.Fluid;
public class GT_Cover_EUMeter extends GT_CoverBehaviorBase<GT_Cover_EUMeter.EUMeterData> {
@@ -208,15 +208,85 @@ public class GT_Cover_EUMeter extends GT_CoverBehaviorBase<GT_Cover_EUMeter.EUMe
}
@Override
- public Object getClientGUIImpl(
- byte aSide,
- int aCoverID,
- EUMeterData coverData,
- ICoverable aTileEntity,
- EntityPlayer aPlayer,
- World aWorld) {
- return new GUI(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new EUMeterUIFactory(buildContext).createWindow();
+ }
+
+ private class EUMeterUIFactory 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 EUMeterUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
+ }
+
+ @SuppressWarnings("PointlessArithmeticExpression")
+ @Override
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ final String INVERTED = GT_Utility.trans("INVERTED", "Inverted");
+ final String NORMAL = GT_Utility.trans("NORMAL", "Normal");
+
+ builder.widget(new CoverDataControllerWidget<>(
+ this::getCoverData, this::setCoverData, GT_Cover_EUMeter.this)
+ .addFollower(
+ new CoverDataFollower_CycleButtonWidget<>(),
+ coverData -> coverData.type.ordinal(),
+ (coverData, state) -> {
+ coverData.type = EnergyType.getEnergyType(state);
+ return coverData;
+ },
+ widget -> widget.setLength(EnergyType.values().length)
+ .addTooltip(state -> EnergyType.getEnergyType(state)
+ .getTooltip())
+ .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_CYCLIC)
+ .setPos(spaceX * 0, spaceY * 0))
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofRedstone(),
+ coverData -> coverData.inverted,
+ (coverData, state) -> {
+ coverData.inverted = state;
+ return coverData;
+ },
+ widget -> widget.addTooltip(0, NORMAL)
+ .addTooltip(1, INVERTED)
+ .setPos(spaceX * 0, spaceY * 1))
+ .addFollower(
+ new CoverDataFollower_TextFieldWidget<>(),
+ coverData -> String.valueOf(coverData.threshold),
+ (coverData, state) -> {
+ coverData.threshold = (long) MathExpression.parseMathExpression(state);
+ return coverData;
+ },
+ widget -> widget.setOnScrollNumbersLong(1000, 100, 100000)
+ .setNumbersLong(() -> 0L, () -> Long.MAX_VALUE)
+ .setFocusOnGuiOpen(true)
+ .setPos(spaceX * 0, spaceY * 2 + 2)
+ .setSize(spaceX * 8, 12))
+ .setPos(startX, startY))
+ .widget(TextWidget.dynamicString(() ->
+ getCoverData() != null ? getCoverData().type.getTitle() : "")
+ .setSynced(false)
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX, 4 + startY))
+ .widget(TextWidget.dynamicString(
+ () -> getCoverData() != null ? getCoverData().inverted ? INVERTED : NORMAL : "")
+ .setSynced(false)
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX, 4 + startY + spaceY))
+ .widget(new TextWidget(GT_Utility.trans("222.1", "Energy threshold"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX, startY + spaceY * 3 + 4));
+ }
}
+
// endregion
public static class EUMeterData implements ISerializableObject {
@@ -390,138 +460,4 @@ public class GT_Cover_EUMeter extends GT_CoverBehaviorBase<GT_Cover_EUMeter.EUMe
return values()[ordinal];
}
}
-
- private class GUI extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private final GT_GuiIconButton typeButton;
- private final GT_GuiIconCheckButton invertedButton;
- private final GT_GuiIntegerTextBox thresholdSlot;
- private final EUMeterData coverVariable;
-
- 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 final String INVERTED = GT_Utility.trans("INVERTED", "Inverted");
- private final String NORMAL = GT_Utility.trans("NORMAL", "Normal");
-
- private final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GUI(byte aSide, int aCoverID, EUMeterData aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- typeButton = new GT_GuiIconButton(this, 0, startX, startY, GT_GuiIcon.CYCLIC);
- invertedButton = new GT_GuiIconCheckButton(
- this,
- 2,
- startX,
- startY + spaceY,
- GT_GuiIcon.REDSTONE_ON,
- GT_GuiIcon.REDSTONE_OFF,
- INVERTED,
- NORMAL);
- thresholdSlot = new GT_GuiIntegerTextBox(this, 4, startX, startY + spaceY * 2 + 2, spaceX * 8, 12);
- }
-
- @Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.getFontRenderer().drawString(coverVariable.type.getTitle(), startX + spaceX, 4 + startY, textColor);
- this.getFontRenderer()
- .drawString(
- coverVariable.inverted ? INVERTED : NORMAL,
- startX + spaceX,
- 4 + startY + spaceY,
- textColor);
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("222.1", "Energy threshold"), startX, startY + spaceY * 3 + 4, textColor);
- }
-
- @Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- update();
- thresholdSlot.setFocused(true);
- }
-
- @Override
- public void buttonClicked(GuiButton btn) {
- if (btn == typeButton) {
- coverVariable.type = coverVariable.type.getNext();
- }
- if (btn == invertedButton) {
- coverVariable.inverted = !coverVariable.inverted;
- }
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
- update();
- }
-
- @Override
- public void onMouseWheel(int x, int y, int delta) {
- if (thresholdSlot.isFocused()) {
- long val = parseTextBox(thresholdSlot);
-
- long step = 1000;
- if (isShiftKeyDown()) {
- step *= 100;
- }
- if (isCtrlKeyDown()) {
- step /= 10;
- }
-
- try {
- val = Math.addExact(val, delta * step);
- } catch (ArithmeticException e) {
- val = Long.MAX_VALUE;
- }
- val = Math.max(0, val);
- thresholdSlot.setText(Long.toString(val));
- }
- }
-
- @Override
- public void applyTextBox(GT_GuiIntegerTextBox box) {
- if (box == thresholdSlot) {
- coverVariable.threshold = parseTextBox(thresholdSlot);
- }
-
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
- update();
- }
-
- @Override
- public void resetTextBox(GT_GuiIntegerTextBox box) {
- if (box == thresholdSlot) {
- thresholdSlot.setText(Long.toString(coverVariable.threshold));
- }
- }
-
- private void update() {
- invertedButton.setChecked(coverVariable.inverted);
- typeButton.setTooltipText(coverVariable.type.getTooltip());
- resetTextBox(thresholdSlot);
- }
-
- private long parseTextBox(GT_GuiIntegerTextBox box) {
- if (box == thresholdSlot) {
- String text = box.getText();
- if (text == null) {
- return 0;
- }
- long val;
- try {
- val = Long.parseLong(text.trim());
- } catch (NumberFormatException e) {
- return 0;
- }
- return Math.max(0, val);
- }
- throw new UnsupportedOperationException("Unknown text box: " + box);
- }
- }
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java b/src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java
index 8c52ade5d2..a2707043ef 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java
@@ -1,30 +1,29 @@
package gregtech.common.covers;
import com.google.common.io.ByteArrayDataInput;
+import com.gtnewhorizons.modularui.api.drawable.ItemDrawable;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
import cpw.mods.fml.common.network.ByteBufUtils;
-import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Textures;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconCheckButton;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
-import gregtech.api.net.GT_Packet_TileEntityCoverNew;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_CoverBehaviorBase;
import gregtech.api.util.GT_RenderingWorld;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import io.netty.buffer.ByteBuf;
import javax.annotation.Nonnull;
import net.minecraft.block.Block;
-import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
@@ -301,94 +300,91 @@ public abstract class GT_Cover_FacadeBase extends GT_CoverBehaviorBase<GT_Cover_
}
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- protected Object getClientGUIImpl(
- byte aSide,
- int aCoverID,
- FacadeData coverData,
- ICoverable aTileEntity,
- EntityPlayer aPlayer,
- World aWorld) {
- return new GT_Cover_FacadeBase.GUI(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new FacadeBaseUIFactory(buildContext).createWindow();
}
- private class GUI extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private FacadeData coverVariable;
+ private class FacadeBaseUIFactory 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 final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GUI(byte aSide, int aCoverID, FacadeData aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, aCoverVariable.mStack);
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- new GT_GuiIconCheckButton(
- this, 0, startX + spaceX * 0, startY + spaceY * 0, GT_GuiIcon.CHECKMARK, GT_GuiIcon.CROSS)
- .setChecked((coverVariable.mFlags & 0x1) == 0);
- new GT_GuiIconCheckButton(
- this, 1, startX + spaceX * 0, startY + spaceY * 1, GT_GuiIcon.CHECKMARK, GT_GuiIcon.CROSS)
- .setChecked((coverVariable.mFlags & 0x2) == 0);
- new GT_GuiIconCheckButton(
- this, 2, startX + spaceX * 0, startY + spaceY * 2, GT_GuiIcon.CHECKMARK, GT_GuiIcon.CROSS)
- .setChecked((coverVariable.mFlags & 0x4) == 0);
- new GT_GuiIconCheckButton(
- this, 3, startX + spaceX * 0, startY + spaceY * 3, GT_GuiIcon.CHECKMARK, GT_GuiIcon.CROSS)
- .setChecked((coverVariable.mFlags & 0x8) == 0);
+ public FacadeBaseUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
+ @SuppressWarnings("PointlessArithmeticExpression")
@Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.fontRendererObj.drawString(
- GT_Utility.trans("128", "Redstone"), 3 + startX + spaceX * 1, 4 + startY + spaceY * 0, textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("129", "Energy"), 3 + startX + spaceX * 1, 4 + startY + spaceY * 1, textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("130", "Fluids"), 3 + startX + spaceX * 1, 4 + startY + spaceY * 2, textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("131", "Items"), 3 + startX + spaceX * 1, 4 + startY + spaceY * 3, textColor);
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ builder.widget(new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>(
+ this::getCoverData,
+ this::setCoverData,
+ GT_Cover_FacadeBase.this,
+ this::isEnabled,
+ (id, coverData) -> {
+ coverData.mFlags = getNewCoverVariable(id, coverData);
+ return coverData;
+ })
+ .addToggleButton(
+ 0,
+ CoverDataFollower_ToggleButtonWidget.ofCheckAndCross(),
+ widget -> widget.setPos(spaceX * 0, spaceY * 0))
+ .addToggleButton(
+ 1,
+ CoverDataFollower_ToggleButtonWidget.ofCheckAndCross(),
+ widget -> widget.setPos(spaceX * 0, spaceY * 1))
+ .addToggleButton(
+ 2,
+ CoverDataFollower_ToggleButtonWidget.ofCheckAndCross(),
+ widget -> widget.setPos(spaceX * 0, spaceY * 2))
+ .addToggleButton(
+ 3,
+ CoverDataFollower_ToggleButtonWidget.ofCheckAndCross(),
+ widget -> widget.setPos(spaceX * 0, spaceY * 3))
+ .setPos(startX, startY))
+ .widget(new ItemDrawable(() -> getCoverData() != null ? getCoverData().mStack : null)
+ .asWidget()
+ .setPos(5, 5)
+ .setSize(16, 16))
+ .widget(TextWidget.dynamicString(() -> getCoverData() != null
+ ? getCoverData().mStack.getDisplayName()
+ : "")
+ .setSynced(false)
+ .setDefaultColor(COLOR_TITLE.get())
+ .setPos(25, 9))
+ .widget(new TextWidget(GT_Utility.trans("128", "Redstone"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 0))
+ .widget(new TextWidget(GT_Utility.trans("129", "Energy"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 1))
+ .widget(new TextWidget(GT_Utility.trans("130", "Fluids"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 2))
+ .widget(new TextWidget(GT_Utility.trans("131", "Items"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 3));
}
@Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- updateButtons();
- }
+ protected void addTitleToUI(ModularWindow.Builder builder) {}
- @Override
- public void buttonClicked(GuiButton btn) {
- if (getClickable(btn.id)) {
- coverVariable.mFlags = getNewCoverVariable(btn.id);
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
- }
- updateButtons();
- }
-
- private void updateButtons() {
- GT_GuiIconCheckButton b;
- for (Object o : buttonList) {
- b = (GT_GuiIconCheckButton) o;
- b.enabled = getClickable(b.id);
- b.setChecked((coverVariable.mFlags & (1 << b.id)) != 0);
- }
- }
-
- private int getNewCoverVariable(int id) {
+ private int getNewCoverVariable(int id, FacadeData coverVariable) {
switch (id) {
case 0:
return coverVariable.mFlags ^ 0x1;
@@ -402,8 +398,18 @@ public abstract class GT_Cover_FacadeBase extends GT_CoverBehaviorBase<GT_Cover_
return coverVariable.mFlags;
}
- private boolean getClickable(int id) {
- return coverVariable.mFlags >= 0 && coverVariable.mFlags <= 15;
+ private boolean isEnabled(int id, FacadeData coverVariable) {
+ switch (id) {
+ case 0:
+ return (coverVariable.mFlags & 0x1) > 0;
+ case 1:
+ return (coverVariable.mFlags & 0x2) > 0;
+ case 2:
+ return (coverVariable.mFlags & 0x4) > 0;
+ case 3:
+ return (coverVariable.mFlags & 0x8) > 0;
+ }
+ return false;
}
}
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_FluidLimiter.java b/src/main/java/gregtech/common/covers/GT_Cover_FluidLimiter.java
index 0dffd08c5e..b8200aeac6 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_FluidLimiter.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_FluidLimiter.java
@@ -1,15 +1,17 @@
package gregtech.common.covers;
import com.google.common.io.ByteArrayDataInput;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiIntegerTextBox;
+import com.gtnewhorizons.modularui.api.math.MathExpression;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
-import gregtech.api.net.GT_Packet_TileEntityCoverNew;
import gregtech.api.util.GT_CoverBehaviorBase;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_TextFieldWidget;
import io.netty.buffer.ByteBuf;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -17,7 +19,6 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidTankInfo;
@@ -168,82 +169,52 @@ public class GT_Cover_FluidLimiter extends GT_CoverBehaviorBase<GT_Cover_FluidLi
}
}
- /*
- GUI
- */
+ // GUI stuff
@Override
- protected Object getClientGUIImpl(
- byte aSide,
- int aCoverID,
- FluidLimiterData aCoverVariable,
- ICoverable aTileEntity,
- EntityPlayer aPlayer,
- World aWorld) {
- return new GUI(aSide, aCoverID, aCoverVariable, aTileEntity);
+ public boolean hasCoverGUI() {
+ return true;
}
@Override
- public boolean hasCoverGUI() {
+ public boolean useModularUI() {
return true;
}
- private static class GUI extends GT_GUICover {
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new FluidLimiterUIFactory(buildContext).createWindow();
+ }
+
+ private class FluidLimiterUIFactory 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 final byte side;
- private final int coverID;
- private final FluidLimiterData coverVariable;
- private final GT_GuiIntegerTextBox thresholdBox;
-
- private final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GUI(byte aSide, int aCoverID, FluidLimiterData aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- thresholdBox = new GT_GuiIntegerTextBox(this, 2, startX, startY + spaceY * 2 - 24, spaceX * 4 - 3, 12) {
- @Override
- public boolean validChar(char c, int key) {
- return super.validChar(c, key) || c == '-';
- }
- };
- }
-
- @Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.getFontRenderer().drawString("Percent threshold", startX, startY + spaceY * 2 - 35, textColor);
- }
- @Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- thresholdBox.setFocused(true);
- String text;
- text = this.coverVariable != null ? String.valueOf(Math.round(this.coverVariable.threshold * 100)) : "";
- thresholdBox.setText(text);
+ public FluidLimiterUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
@Override
- public void applyTextBox(GT_GuiIntegerTextBox box) {
- int percent;
- try {
- percent = Integer.parseInt(box.getText().trim());
- } catch (NumberFormatException ignored) {
- resetTextBox(thresholdBox);
- return;
- }
-
- if (percent > 100 || percent <= 0) return;
- this.coverVariable.threshold = percent / 100F;
-
- box.setText(String.valueOf(percent));
-
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ builder.widget(new CoverDataControllerWidget<>(
+ this::getCoverData, this::setCoverData, GT_Cover_FluidLimiter.this)
+ .addFollower(
+ new CoverDataFollower_TextFieldWidget<>(),
+ coverData -> String.valueOf(Math.round(coverData.threshold * 100)),
+ (coverData, val) -> {
+ coverData.threshold = (float) (MathExpression.parseMathExpression(val) / 100);
+ return coverData;
+ },
+ widget -> widget.setNumbers(0, 100)
+ .setFocusOnGuiOpen(true)
+ .setPos(startX, startY + spaceY * 2 - 24)
+ .setSize(spaceX * 4 - 3, 12)))
+ .widget(new TextWidget("Percent threshold")
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX, startY + spaceY * 2 - 35));
}
}
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java b/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java
index 2d6fc685c3..ad8f5bb2de 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java
@@ -1,27 +1,30 @@
package gregtech.common.covers;
import com.google.common.io.ByteArrayDataInput;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconButton;
-import gregtech.api.gui.widgets.GT_GuiIntegerTextBox;
+import com.gtnewhorizons.modularui.api.drawable.Text;
+import com.gtnewhorizons.modularui.api.math.MathExpression;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import com.gtnewhorizons.modularui.common.widget.textfield.BaseTextFieldWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IMachineProgress;
-import gregtech.api.net.GT_Packet_TileEntityCoverNew;
import gregtech.api.util.GT_CoverBehaviorBase;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_TextFieldWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import io.netty.buffer.ByteBuf;
+import java.util.concurrent.atomic.AtomicBoolean;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
-import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
@@ -253,23 +256,171 @@ public class GT_Cover_FluidRegulator extends GT_CoverBehaviorBase<GT_Cover_Fluid
return aCoverVariable.tickRate;
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- public Object getClientGUIImpl(
- byte aSide,
- int aCoverID,
- FluidRegulatorData coverData,
- ICoverable aTileEntity,
- EntityPlayer aPlayer,
- World aWorld) {
- return new GT_Cover_FluidRegulator.GUI(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new FluidRegulatorUIFactory(buildContext).createWindow();
+ }
+
+ private class FluidRegulatorUIFactory 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 FluidRegulatorUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
+ }
+
+ @SuppressWarnings("PointlessArithmeticExpression")
+ @Override
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ AtomicBoolean warn = new AtomicBoolean(false);
+
+ builder.widget(new CoverDataControllerWidget<>(
+ this::getCoverData, this::setCoverData, GT_Cover_FluidRegulator.this)
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ coverData -> coverData.speed >= 0,
+ (coverData, state) -> {
+ coverData.speed = Math.abs(coverData.speed);
+ return coverData;
+ },
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_EXPORT)
+ .addTooltip(GT_Utility.trans("006", "Export"))
+ .setPos(spaceX * 0, spaceY * 0))
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ coverData -> coverData.speed <= 0,
+ (coverData, state) -> {
+ coverData.speed = -Math.abs(coverData.speed);
+ return coverData;
+ },
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_IMPORT)
+ .addTooltip(GT_Utility.trans("007", "Import"))
+ .setPos(spaceX * 1, spaceY * 0))
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ coverData -> coverData.condition == Conditional.Always,
+ (coverData, state) -> {
+ coverData.condition = Conditional.Always;
+ return coverData;
+ },
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_CHECKMARK)
+ .addTooltip(GT_Utility.trans("224", "Always On"))
+ .setPos(spaceX * 0, spaceY * 1))
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ coverData -> coverData.condition == Conditional.Conditional,
+ (coverData, state) -> {
+ coverData.condition = Conditional.Conditional;
+ return coverData;
+ },
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_REDSTONE_ON)
+ .addTooltip(GT_Utility.trans("225", "Active with Redstone Signal"))
+ .setPos(spaceX * 1, spaceY * 1))
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ coverData -> coverData.condition == Conditional.Inverted,
+ (coverData, state) -> {
+ coverData.condition = Conditional.Inverted;
+ return coverData;
+ },
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_REDSTONE_OFF)
+ .addTooltip(GT_Utility.trans("226", "Inactive with Redstone Signal"))
+ .setPos(spaceX * 2, spaceY * 1))
+ .addFollower(
+ new CoverDataFollower_TextFieldWidget<>(),
+ coverData -> String.valueOf(coverData.speed),
+ (coverData, state) -> {
+ coverData.speed = (int) MathExpression.parseMathExpression(state);
+ return coverData;
+ },
+ widget -> widget.setOnScrollNumbersLong(1, 5, 50)
+ .setNumbersLong(val -> {
+ final int tickRate =
+ getCoverData() != null ? getCoverData().tickRate : 0;
+ final long maxFlow = (long) mTransferRate
+ * GT_Utility.clamp(tickRate, TICK_RATE_MIN, TICK_RATE_MAX);
+ warn.set(false);
+ if (val > maxFlow) {
+ val = maxFlow;
+ warn.set(true);
+ } else if (val < -maxFlow) {
+ val = -maxFlow;
+ warn.set(true);
+ }
+ return val;
+ })
+ .setPattern(BaseTextFieldWidget.WHOLE_NUMS)
+ .setFocusOnGuiOpen(true)
+ .setPos(spaceX * 0, spaceY * 2 + 2)
+ .setSize(spaceX * 4 - 3, 12))
+ .addFollower(
+ new CoverDataFollower_TextFieldWidget<>(),
+ coverData -> String.valueOf(coverData.tickRate),
+ (coverData, state) -> {
+ coverData.tickRate = (int) MathExpression.parseMathExpression(state);
+ return coverData;
+ },
+ widget -> widget.setOnScrollNumbersLong(1, 5, 50)
+ .setNumbersLong(val -> {
+ final int speed = getCoverData() != null ? getCoverData().speed : 0;
+ warn.set(false);
+ if (val > TICK_RATE_MAX) {
+ val = (long) TICK_RATE_MAX;
+ warn.set(true);
+ } else if (Math.abs(speed) > mTransferRate * val) {
+ val = (long) Math.min(
+ TICK_RATE_MAX,
+ (Math.abs(speed) + mTransferRate - 1) / mTransferRate);
+ warn.set(true);
+ } else if (val < TICK_RATE_MIN) {
+ val = 1L;
+ }
+ return val;
+ })
+ .setPattern(BaseTextFieldWidget.WHOLE_NUMS)
+ .setPos(spaceX * 5, spaceY * 2 + 2)
+ .setSize(spaceX * 2 - 3, 12))
+ .setPos(startX, startY))
+ .widget(new TextWidget(GT_Utility.trans("229", "Import/Export"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 4, 4 + startY + spaceY * 0))
+ .widget(new TextWidget(GT_Utility.trans("230", "Conditional"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 4, 4 + startY + spaceY * 1))
+ .widget(new TextWidget(GT_Utility.trans("208", " L"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 4, 4 + startY + spaceY * 2))
+ .widget(new TextWidget(GT_Utility.trans("209", " ticks"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 7, 4 + startY + spaceY * 2))
+ .widget(TextWidget.dynamicText(() -> {
+ FluidRegulatorData coverVariable = getCoverData();
+ if (coverVariable == null) return new Text("");
+ return new Text(String.format(
+ GT_Utility.trans("210", "Average: %.2f L/sec"),
+ coverVariable.tickRate == 0
+ ? 0
+ : coverVariable.speed * 20d / coverVariable.tickRate))
+ .color(warn.get() ? COLOR_TEXT_WARN.get() : COLOR_TEXT_GRAY.get());
+ })
+ .setSynced(false)
+ .setPos(startX + spaceX * 0, 4 + startY + spaceY * 3));
+ }
}
public enum Conditional {
@@ -397,214 +548,4 @@ public class GT_Cover_FluidRegulator extends GT_CoverBehaviorBase<GT_Cover_Fluid
this.condition = condition;
}
}
-
- private class GUI extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private GT_GuiIntegerTextBox tBox, lBox;
- private FluidRegulatorData coverVariable;
-
- 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 boolean warn = false;
-
- private final int textColor = this.getTextColorOrDefault("text", 0xFF555555),
- textColorValue = this.getTextColorOrDefault("value", 0xFFFF0000);
-
- public GUI(byte aSide, int aCoverID, FluidRegulatorData aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- new GT_GuiIconButton(this, 0, startX + spaceX * 0, startY + spaceY * 0, GT_GuiIcon.EXPORT)
- .setTooltipText(GT_Utility.trans("006", "Export"));
- new GT_GuiIconButton(this, 1, startX + spaceX * 1, startY + spaceY * 0, GT_GuiIcon.IMPORT)
- .setTooltipText(GT_Utility.trans("007", "Import"));
- new GT_GuiIconButton(this, 2, startX + spaceX * 0, startY + spaceY * 1, GT_GuiIcon.CHECKMARK)
- .setTooltipText(GT_Utility.trans("224", "Always On"));
- new GT_GuiIconButton(this, 3, startX + spaceX * 1, startY + spaceY * 1, GT_GuiIcon.REDSTONE_ON)
- .setTooltipText(GT_Utility.trans("225", "Active with Redstone Signal"));
- new GT_GuiIconButton(this, 4, startX + spaceX * 2, startY + spaceY * 1, GT_GuiIcon.REDSTONE_OFF)
- .setTooltipText(GT_Utility.trans("226", "Inactive with Redstone Signal"));
-
- tBox = new GT_GuiIntegerTextBox(this, 2, startX + spaceX * 0, startY + spaceY * 2 + 2, spaceX * 4 - 3, 12) {
- @Override
- public boolean validChar(char c, int key) {
- return super.validChar(c, key) || c == '-';
- }
- };
- tBox.setText(String.valueOf(this.coverVariable.speed));
- tBox.setMaxStringLength(10);
-
- lBox = new GT_GuiIntegerTextBox(this, 3, startX + spaceX * 5, startY + spaceY * 2 + 2, spaceX * 2 - 3, 12) {
- @Override
- public boolean validChar(char c, int key) {
- return super.validChar(c, key) || c == '-';
- }
- };
- lBox.setText(String.valueOf(this.coverVariable.tickRate));
- lBox.setMaxStringLength(4);
- }
-
- @Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("229", "Import/Export"),
- startX + spaceX * 4,
- 4 + startY + spaceY * 0,
- textColor);
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("230", "Conditional"),
- startX + spaceX * 4,
- 4 + startY + spaceY * 1,
- textColor);
- this.getFontRenderer()
- .drawString(GT_Utility.trans("208", " L"), startX + spaceX * 4, 4 + startY + spaceY * 2, textColor);
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("209", " ticks"), startX + spaceX * 7, 4 + startY + spaceY * 2, textColor);
- this.getFontRenderer()
- .drawString(
- String.format(
- GT_Utility.trans("210", "Average: %.2f L/sec"),
- coverVariable.tickRate == 0
- ? 0
- : coverVariable.speed * 20d / coverVariable.tickRate),
- startX + spaceX * 0,
- 4 + startY + spaceY * 3,
- warn ? textColorValue : textColor);
- }
-
- @Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- updateButtons();
- tBox.setFocused(true);
- }
-
- @Override
- public void buttonClicked(GuiButton btn) {
- if (!btn.enabled) return;
- switch (btn.id) {
- case 0:
- case 1:
- coverVariable.speed *= -1;
- for (GT_GuiIntegerTextBox box : textBoxes) {
- if (box.id == 2) {
- box.setText(String.valueOf(coverVariable.speed));
- }
- }
- break;
- case 2:
- case 3:
- case 4:
- coverVariable.condition = Conditional.VALUES[btn.id - 2];
- break;
- default:
- // not right, but we carry on
- return;
- }
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
- updateButtons();
- }
-
- @Override
- public void onMouseWheel(int x, int y, int delta) {
- for (GT_GuiIntegerTextBox box : textBoxes) {
- if (box.isFocused()) {
- int step = Math.max(1, Math.abs(delta / 120));
- step = (isShiftKeyDown() ? 50 : isCtrlKeyDown() ? 5 : 1) * (delta > 0 ? step : -step);
- long i;
- try {
- i = Long.parseLong(box.getText());
- } catch (NumberFormatException e) {
- return;
- }
- if (i > (Long.MAX_VALUE - 1000)) break;
-
- i = i + step;
- if (i <= 0) i = 0;
- box.setText(String.valueOf(i));
- break;
- }
- }
- }
-
- @Override
- public void applyTextBox(GT_GuiIntegerTextBox box) {
- long i;
- String s = box.getText().trim();
- try {
- i = Long.parseLong(s);
- } catch (NumberFormatException e) {
- resetTextBox(box);
- return;
- }
-
- warn = false;
- if (box.id == 2) {
- long maxFlow =
- (long) mTransferRate * GT_Utility.clamp(coverVariable.tickRate, TICK_RATE_MIN, TICK_RATE_MAX);
- if (i > maxFlow) {
- i = maxFlow;
- warn = true;
- } else if (i < -maxFlow) {
- i = -maxFlow;
- warn = true;
- }
- if (!warn && coverVariable.speed == i) return;
- coverVariable.speed = (int) i;
- } else if (box.id == 3) {
- if (i > TICK_RATE_MAX) {
- i = TICK_RATE_MAX;
- warn = true;
- } else if (Math.abs(coverVariable.speed) > mTransferRate * i) {
- i = Math.min(TICK_RATE_MAX, (Math.abs(coverVariable.speed) + mTransferRate - 1) / mTransferRate);
- warn = true;
- } else if (i < TICK_RATE_MIN) {
- i = 1;
- }
- if (!warn && coverVariable.tickRate == i) return;
- coverVariable.tickRate = (int) i;
- }
- box.setText(String.valueOf(i));
- updateButtons();
-
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
- }
-
- @Override
- public void resetTextBox(GT_GuiIntegerTextBox box) {
- if (box.id == 2) box.setText(String.valueOf(coverVariable.speed));
- else if (box.id == 3) box.setText(String.valueOf(coverVariable.tickRate));
- }
-
- private void updateButtons() {
- GuiButton b;
- for (Object o : buttonList) {
- b = (GuiButton) o;
- b.enabled = getClickable(b.id);
- }
- }
-
- private boolean getClickable(int id) {
- switch (id) {
- case 0:
- return coverVariable.speed < 0;
- case 1:
- return coverVariable.speed > 0;
- case 2:
- case 3:
- case 4:
- return coverVariable.condition != Conditional.VALUES[id - 2];
- }
- return false;
- }
- }
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java b/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java
index 6c1a1ae165..54872f849a 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java
@@ -3,26 +3,27 @@ package gregtech.common.covers;
import static gregtech.api.enums.GT_Values.E;
import com.google.common.io.ByteArrayDataInput;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiFakeItemButton;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconButton;
+import com.gtnewhorizons.modularui.api.ModularUITextures;
+import com.gtnewhorizons.modularui.api.forge.ItemStackHandler;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
-import gregtech.api.net.GT_Packet_TileEntityCoverNew;
import gregtech.api.util.GT_CoverBehaviorBase;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_SlotWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import io.netty.buffer.ByteBuf;
import javax.annotation.Nonnull;
-import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.world.World;
import net.minecraftforge.common.util.Constants.NBT;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
@@ -250,67 +251,136 @@ public class GT_Cover_Fluidfilter extends GT_CoverBehaviorBase<GT_Cover_Fluidfil
return 0;
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- protected Object getClientGUIImpl(
- byte aSide,
- int aCoverID,
- FluidFilterData coverData,
- ICoverable aTileEntity,
- EntityPlayer aPlayer,
- World aWorld) {
- return new GT_FluidFilterGUICover(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new FluidFilterUIFactory(buildContext).createWindow();
}
- private class GT_FluidFilterGUICover extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private final FluidFilterData coverVariable;
- private final GT_GuiFakeItemButton fluidFilterButton;
- protected String fluidFilterName;
+ private class FluidFilterUIFactory 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 final int textColor = this.getTextColorOrDefault("text", 0xFF555555),
- textColorTitle = this.getTextColorOrDefault("title", 0xFF222222);
-
- public GT_FluidFilterGUICover(
- byte aSide, int aCoverID, FluidFilterData aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- GT_GuiIconButton b;
- b = new GT_GuiIconButton(this, 0, startX + spaceX * 0, startY + spaceY * 0, GT_GuiIcon.IMPORT)
- .setTooltipText(GT_Utility.trans("232", "Filter Input"));
- b = new GT_GuiIconButton(this, 1, startX + spaceX * 1, startY + spaceY * 0, GT_GuiIcon.EXPORT)
- .setTooltipText(GT_Utility.trans("233", "Filter Output"));
- b = new GT_GuiIconButton(this, 2, startX + spaceX * 0, startY + spaceY * 2, GT_GuiIcon.BLOCK_INPUT)
- .setTooltipText(GT_Utility.trans("234", "Block Output"));
- b = new GT_GuiIconButton(this, 3, startX + spaceX * 1, startY + spaceY * 2, GT_GuiIcon.ALLOW_INPUT)
- .setTooltipText(GT_Utility.trans("235", "Allow Output"));
- b = new GT_GuiIconButton(this, 4, startX + spaceX * 0, startY + spaceY * 1, GT_GuiIcon.WHITELIST)
- .setTooltipText(GT_Utility.trans("236", "Whitelist Fluid"));
- b = new GT_GuiIconButton(this, 5, startX + spaceX * 1, startY + spaceY * 1, GT_GuiIcon.BLACKLIST)
- .setTooltipText(GT_Utility.trans("237", "Blacklist Fluid"));
-
- fluidFilterButton =
- new GT_GuiFakeItemButton(this, startX, startY + spaceY * 3 + 2, GT_GuiIcon.SLOT_DARKGRAY);
- fluidFilterButton.setMimicSlot(true);
+ public FluidFilterUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
+ }
+
+ @SuppressWarnings("PointlessArithmeticExpression")
+ @Override
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ builder.widget(new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>(
+ this::getCoverData,
+ this::setCoverData,
+ GT_Cover_Fluidfilter.this,
+ (id, coverData) -> !getClickable(id, coverData),
+ (id, coverData) -> {
+ coverData.mFilterMode = getNewFilterMode(id, coverData);
+ return coverData;
+ })
+ .addToggleButton(
+ 0,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_IMPORT)
+ .addTooltip(GT_Utility.trans("232", "Filter Input"))
+ .setPos(spaceX * 0, spaceY * 0))
+ .addToggleButton(
+ 1,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_EXPORT)
+ .addTooltip(GT_Utility.trans("233", "Filter Output"))
+ .setPos(spaceX * 1, spaceY * 0))
+ .addToggleButton(
+ 2,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_BLOCK_INPUT)
+ .addTooltip(GT_Utility.trans("234", "Block Output"))
+ .setPos(spaceX * 0, spaceY * 2))
+ .addToggleButton(
+ 3,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_ALLOW_INPUT)
+ .addTooltip(GT_Utility.trans("235", "Allow Output"))
+ .setPos(spaceX * 1, spaceY * 2))
+ .addToggleButton(
+ 4,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_WHITELIST)
+ .addTooltip(GT_Utility.trans("236", "Whitelist Fluid"))
+ .setPos(spaceX * 0, spaceY * 1))
+ .addToggleButton(
+ 5,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_BLACKLIST)
+ .addTooltip(GT_Utility.trans("237", "Blacklist Fluid"))
+ .setPos(spaceX * 1, spaceY * 1))
+ .addFollower(
+ new CoverDataFollower_SlotWidget<FluidFilterData>(new ItemStackHandler(), 0, true) {
+ @Override
+ protected void putClickedStack(ItemStack stack, int mouseButton) {
+ if (stack != null
+ && GT_Utility.getFluidFromContainerOrFluidDisplay(stack) == null)
+ return;
+ super.putClickedStack(
+ GT_Utility.getFluidDisplayStack(
+ GT_Utility.getFluidFromContainerOrFluidDisplay(stack),
+ false),
+ mouseButton);
+ }
+ },
+ this::getFluidDisplayItem,
+ (coverData, stack) -> {
+ if (stack == null) {
+ coverData.mFluidID = -1;
+ } else {
+ FluidStack fluid = GT_Utility.getFluidFromDisplayStack(stack);
+ if (fluid != null && fluid.getFluid() != null) {
+ coverData.mFluidID =
+ fluid.getFluid().getID();
+ }
+ }
+ return coverData;
+ },
+ widget -> widget.setBackground(ModularUITextures.FLUID_SLOT)
+ .setPos(0, spaceY * 3 + 2))
+ .setPos(startX, startY))
+ .widget(new TextWidget(GT_Utility.trans("238", "Filter Direction"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 2, 3 + startY + spaceY * 0))
+ .widget(new TextWidget(GT_Utility.trans("239", "Filter Type"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 2, 3 + startY + spaceY * 1))
+ .widget(new TextWidget(GT_Utility.trans("240", "Block Flow"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 2, 3 + startY + spaceY * 2))
+ .widget(TextWidget.dynamicString(() -> {
+ if (getCoverData() != null) {
+ ItemStack fluidDisplay = getFluidDisplayItem(getCoverData());
+ if (fluidDisplay != null) {
+ return fluidDisplay.getDisplayName();
+ }
+ }
+ return GT_Utility.trans("315", "Filter Empty");
+ })
+ .setSynced(false)
+ .setDefaultColor(COLOR_TITLE.get())
+ .setPos(startX + spaceX + 3, 4 + startY + spaceY * 3));
}
- private int getNewFilterMode(int id) {
+ private int getNewFilterMode(int id, FluidFilterData coverVariable) {
switch (id) {
case 0:
return (coverVariable.mFilterMode & 0x3);
@@ -328,7 +398,7 @@ public class GT_Cover_Fluidfilter extends GT_CoverBehaviorBase<GT_Cover_Fluidfil
return coverVariable.mFilterMode;
}
- private boolean getClickable(int id) {
+ private boolean getClickable(int id, FluidFilterData coverVariable) {
switch (id) {
case 0:
case 1:
@@ -343,62 +413,9 @@ public class GT_Cover_Fluidfilter extends GT_CoverBehaviorBase<GT_Cover_Fluidfil
return false;
}
- @Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.fontRendererObj.drawString(
- GT_Utility.trans("238", "Filter Direction"),
- startX + spaceX * 2,
- 3 + startY + spaceY * 0,
- textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("239", "Filter Type"), startX + spaceX * 2, 3 + startY + spaceY * 1, textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("240", "Block Flow"), startX + spaceX * 2, 3 + startY + spaceY * 2, textColor);
- this.fontRendererObj.drawSplitString(
- fluidFilterName, startX + spaceX + 3, 4 + startY + spaceY * 3, gui_width - 40, textColorTitle);
- }
-
- @Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- updateButtons();
- }
-
- @Override
- public void buttonClicked(GuiButton btn) {
- if (getClickable(btn.id)) {
- coverVariable.mFilterMode = (byte) getNewFilterMode(btn.id);
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
- }
- updateButtons();
- }
-
- private void updateButtons() {
- GT_GuiIconButton b;
- for (Object o : buttonList) {
- if (o instanceof GT_GuiIconButton) {
- b = (GT_GuiIconButton) o;
- b.enabled = getClickable(b.id);
- if (getClickable(1)) { // filtering input
- if (b.id == 2) b.setTooltipText(GT_Utility.trans("311", "Block Output"));
- else if (b.id == 3) b.setTooltipText(GT_Utility.trans("312", "Allow Output"));
- } else {
- if (b.id == 2) b.setTooltipText(GT_Utility.trans("313", "Block Input"));
- else if (b.id == 3) b.setTooltipText(GT_Utility.trans("314", "Allow Input"));
- }
- }
- }
- Fluid f = FluidRegistry.getFluid(coverVariable.mFluidID);
- if (f != null) {
- ItemStack item = GT_Utility.getFluidDisplayStack(f);
- if (item != null) {
- fluidFilterButton.setItem(item);
- fluidFilterName = item.getDisplayName();
- return;
- }
- }
- fluidFilterButton.setItem(null);
- fluidFilterName = GT_Utility.trans("315", "Filter Empty");
+ private ItemStack getFluidDisplayItem(FluidFilterData coverData) {
+ Fluid fluid = FluidRegistry.getFluid(coverData.mFluidID);
+ return GT_Utility.getFluidDisplayStack(fluid);
}
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_ItemFilter.java b/src/main/java/gregtech/common/covers/GT_Cover_ItemFilter.java
index 2fa545d76d..1580ac6ce5 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_ItemFilter.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_ItemFilter.java
@@ -4,30 +4,30 @@ import static gregtech.api.util.GT_Utility.intToStack;
import static gregtech.api.util.GT_Utility.moveMultipleItemStacks;
import com.google.common.io.ByteArrayDataInput;
+import com.gtnewhorizons.modularui.api.forge.ItemStackHandler;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
import cpw.mods.fml.common.network.ByteBufUtils;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiFakeItemButton;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconCheckButton;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
-import gregtech.api.net.GT_Packet_TileEntityCoverNew;
import gregtech.api.util.GT_CoverBehaviorBase;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_SlotWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import io.netty.buffer.ByteBuf;
import java.util.Collections;
import java.util.List;
import javax.annotation.Nonnull;
-import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
-import net.minecraft.world.World;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.fluids.Fluid;
@@ -194,23 +194,80 @@ public class GT_Cover_ItemFilter extends GT_CoverBehaviorBase<GT_Cover_ItemFilte
return 1;
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- protected Object getClientGUIImpl(
- byte aSide,
- int aCoverID,
- ItemFilterData aCoverVariable,
- ICoverable aTileEntity,
- EntityPlayer aPlayer,
- World aWorld) {
- return new GT_Cover_ItemFilter.GUI(aSide, aCoverID, aCoverVariable, aTileEntity);
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new ItemFilterUIFactory(buildContext).createWindow();
+ }
+
+ private class ItemFilterUIFactory 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 ItemFilterUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
+ }
+
+ @SuppressWarnings("PointlessArithmeticExpression")
+ @Override
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ ItemStackHandler filterInvHandler = new ItemStackHandler(1);
+ if (getCoverData() != null) {
+ filterInvHandler.setStackInSlot(0, setStackSize1(getCoverData().mFilter));
+ }
+ builder.widget(new CoverDataControllerWidget<>(
+ this::getCoverData, this::setCoverData, GT_Cover_ItemFilter.this)
+ .addFollower(
+ new CoverDataFollower_ToggleButtonWidget<>(),
+ coverData -> coverData.mWhitelist,
+ (coverData, state) -> {
+ coverData.mWhitelist = state;
+ return coverData;
+ },
+ widget -> widget.setToggleTexture(
+ GT_UITextures.OVERLAY_BUTTON_WHITELIST,
+ GT_UITextures.OVERLAY_BUTTON_BLACKLIST)
+ .addTooltip(0, GT_Utility.trans("124.1", "Blacklist Mode"))
+ .addTooltip(1, GT_Utility.trans("125.1", "Whitelist Mode"))
+ .setPos(spaceX * 0, spaceY * 0))
+ .addFollower(
+ new CoverDataFollower_SlotWidget<>(filterInvHandler, 0, true),
+ coverData -> setStackSize1(coverData.mFilter),
+ (coverData, stack) -> {
+ coverData.mFilter = setStackSize1(stack);
+ return coverData;
+ },
+ widget -> widget.setBackground(GT_UITextures.SLOT_DARK_GRAY)
+ .setPos(spaceX * 0, spaceY * 2))
+ .setPos(startX, startY))
+ .widget(new TextWidget(GT_Utility.trans("317", "Filter: "))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 0, 3 + startY + spaceY * 1))
+ .widget(new TextWidget(GT_Utility.trans("318", "Check Mode"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 2, 3 + startY + spaceY * 0));
+ }
+
+ private ItemStack setStackSize1(ItemStack stack) {
+ if (stack != null) {
+ stack.stackSize = 1;
+ }
+ return stack;
+ }
}
public static class ItemFilterData implements ISerializableObject {
@@ -262,68 +319,4 @@ public class GT_Cover_ItemFilter extends GT_CoverBehaviorBase<GT_Cover_ItemFilte
return this;
}
}
-
- private class GUI extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private final GT_GuiIconCheckButton btnMode;
- private final ItemFilterData coverVariable;
- private final GT_GuiFakeItemButton itemFilterButtons;
-
- 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 final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GUI(byte aSide, int aCoverID, ItemFilterData aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- btnMode = new GT_GuiIconCheckButton(
- this,
- 0,
- startX + spaceX * 0,
- startY + spaceY * 0,
- GT_GuiIcon.WHITELIST,
- GT_GuiIcon.BLACKLIST,
- GT_Utility.trans("125.1", "Whitelist Mode"),
- GT_Utility.trans("124.1", "Blacklist Mode"));
-
- itemFilterButtons =
- new GT_GuiFakeItemButton(this, startX + spaceX * 0, startY + spaceY * 2, GT_GuiIcon.SLOT_GRAY);
- itemFilterButtons.setMimicSlot(true);
- }
-
- @Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.fontRendererObj.drawString(
- GT_Utility.trans("317", "Filter: "), startX + spaceX * 0, 3 + startY + spaceY * 1, textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("318", "Check Mode"), startX + spaceX * 2, 3 + startY + spaceY * 0, textColor);
- }
-
- @Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- updateButtons();
- }
-
- @Override
- public void buttonClicked(GuiButton btn) {
- if (btn == btnMode) {
- coverVariable.mWhitelist = !coverVariable.mWhitelist;
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
- }
- updateButtons();
- }
-
- private void updateButtons() {
- btnMode.setChecked(coverVariable.mWhitelist);
- itemFilterButtons.setItem(coverVariable.mFilter);
- }
- }
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java
index c894857b32..6724e36975 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java
@@ -1,33 +1,34 @@
package gregtech.common.covers;
import com.google.common.io.ByteArrayDataInput;
+import com.gtnewhorizons.modularui.api.math.MathExpression;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import com.gtnewhorizons.modularui.common.widget.textfield.BaseTextFieldWidget;
+import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget;
import gregtech.api.GregTech_API;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiFakeItemButton;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconCheckButton;
-import gregtech.api.gui.widgets.GT_GuiIntegerTextBox;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.net.GT_Packet_TileEntityCoverNew;
import gregtech.api.util.GT_CoverBehaviorBase;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_TextFieldWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
+import gregtech.common.gui.modularui.widget.ItemWatcherSlotWidget;
import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME;
import gregtech.common.tileentities.storage.GT_MetaTileEntity_DigitalChestBase;
import io.netty.buffer.ByteBuf;
import javax.annotation.Nonnull;
-import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
-import net.minecraft.world.World;
import net.minecraftforge.fluids.Fluid;
public class GT_Cover_ItemMeter extends GT_CoverBehaviorBase<GT_Cover_ItemMeter.ItemMeterData> {
@@ -195,23 +196,144 @@ public class GT_Cover_ItemMeter extends GT_CoverBehaviorBase<GT_Cover_ItemMeter.
return 5;
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- protected Object getClientGUIImpl(
- byte aSide,
- int aCoverID,
- ItemMeterData coverData,
- ICoverable aTileEntity,
- EntityPlayer aPlayer,
- World aWorld) {
- return new GUI(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new ItemMeterUIFactory(buildContext).createWindow();
+ }
+
+ private class ItemMeterUIFactory 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 static final String ALL_TEXT = "All";
+
+ private int maxSlot;
+
+ public ItemMeterUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
+ }
+
+ @Override
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ final String INVERTED = GT_Utility.trans("INVERTED", "Inverted");
+ final String NORMAL = GT_Utility.trans("NORMAL", "Normal");
+
+ maxSlot = getMaxSlot();
+
+ builder.widget(new CoverDataControllerWidget<>(
+ this::getCoverData, this::setCoverData, GT_Cover_ItemMeter.this)
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofRedstone(),
+ coverData -> coverData.inverted,
+ (coverData, state) -> {
+ coverData.inverted = state;
+ return coverData;
+ },
+ widget -> widget.addTooltip(0, NORMAL)
+ .addTooltip(1, INVERTED)
+ .setPos(0, 0))
+ .addFollower(
+ new CoverDataFollower_TextFieldWidget<>(),
+ coverData -> getSlotTextFieldContent(coverData.slot),
+ (coverData, state) -> {
+ coverData.slot = getIntFromText(state);
+ return coverData;
+ },
+ widget -> widget.setOnScrollText()
+ .setValidator(val -> {
+ final int valSlot = getIntFromText(val);
+ if (valSlot > -1) {
+ return TextFieldWidget.format.format(Math.min(valSlot, maxSlot));
+ } else {
+ return ALL_TEXT;
+ }
+ })
+ .setPattern(BaseTextFieldWidget.NATURAL_NUMS)
+ .setFocusOnGuiOpen(true)
+ .setPos(0, spaceY + 2)
+ .setSize(spaceX * 2 + 5, 12))
+ .addFollower(
+ new CoverDataFollower_TextFieldWidget<>(),
+ coverData -> String.valueOf(coverData.threshold),
+ (coverData, state) -> {
+ coverData.threshold = (int) MathExpression.parseMathExpression(state);
+ return coverData;
+ },
+ widget -> widget.setOnScrollNumbers(1, 10, 64)
+ .setNumbers(0, getUpperBound())
+ .setPos(0, spaceY * 2 + 2)
+ .setSize(spaceX * 2 + 5, 12))
+ .setPos(startX, startY))
+ .widget(new ItemWatcherSlotWidget()
+ .setGetter(this::getTargetItem)
+ .setPos(startX + spaceX * 8 - 4, startY + spaceY))
+ .widget(TextWidget.dynamicString(
+ () -> getCoverData() != null ? getCoverData().inverted ? INVERTED : NORMAL : "")
+ .setSynced(false)
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 4 + startY))
+ .widget(new TextWidget(GT_Utility.trans("254", "Detect slot#"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 4 + startY + spaceY))
+ .widget(new TextWidget(GT_Utility.trans("221", "Item threshold"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, startY + spaceY * 2 + 4));
+ }
+
+ private int getMaxSlot() {
+ final ICoverable tile = getUIBuildContext().getTile();
+ if (tile instanceof TileEntity
+ && !tile.isDead()
+ && tile instanceof IGregTechTileEntity
+ && !(((IGregTechTileEntity) tile).getMetaTileEntity()
+ instanceof GT_MetaTileEntity_DigitalChestBase))
+ return Math.min(tile.getSizeInventory() - 1, SLOT_MASK - 1);
+ else return -1;
+ }
+
+ private int getIntFromText(String text) {
+ try {
+ return (int) MathExpression.parseMathExpression(text, -1);
+ } catch (Exception e) {
+ return -1;
+ }
+ }
+
+ private String getSlotTextFieldContent(int val) {
+ return val < 0 ? ALL_TEXT : String.valueOf(val);
+ }
+
+ private int getUpperBound() {
+ return maxSlot > 0 ? maxSlot * 64 : 999_999;
+ }
+
+ private ItemStack getTargetItem() {
+ ItemMeterData coverVariable = getCoverData();
+ if (coverVariable == null || coverVariable.slot < 0) {
+ return null;
+ }
+ ICoverable tile = getUIBuildContext().getTile();
+ if (tile instanceof TileEntity && !tile.isDead()) {
+ if (tile.getSizeInventory() >= coverVariable.slot) {
+ return tile.getStackInSlot(coverVariable.slot);
+ }
+ }
+ return null;
+ }
}
public static class ItemMeterData implements ISerializableObject {
@@ -273,205 +395,4 @@ public class GT_Cover_ItemMeter extends GT_CoverBehaviorBase<GT_Cover_ItemMeter.
return this;
}
}
-
- private class GUI extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private final GT_GuiIconCheckButton invertedButton;
- private final GT_GuiIntegerTextBox intSlot;
- private final GT_GuiFakeItemButton intSlotIcon;
- private final GT_GuiIntegerTextBox thresholdSlot;
- private final ItemMeterData coverVariable;
-
- private final int maxSlot;
-
- 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 final String ALL = GT_Utility.trans("ALL", "All");
- private final String INVERTED = GT_Utility.trans("INVERTED", "Inverted");
- private final String NORMAL = GT_Utility.trans("NORMAL", "Normal");
-
- private final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GUI(byte aSide, int aCoverID, ItemMeterData aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- invertedButton = new GT_GuiIconCheckButton(
- this, 0, startX, startY, GT_GuiIcon.REDSTONE_ON, GT_GuiIcon.REDSTONE_OFF, INVERTED, NORMAL);
-
- intSlot = new GT_GuiIntegerTextBox(this, 1, startX, startY + spaceY + 2, spaceX * 2 + 5, 12);
- intSlot.setMaxStringLength(6);
-
- // only shows if opened gui of block sadly, should've used container.
- intSlotIcon =
- new GT_GuiFakeItemButton(this, startX + spaceX * 8 - 4, startY + spaceY, GT_GuiIcon.SLOT_GRAY);
- intSlotIcon.setMimicSlot(true);
-
- if (tile instanceof TileEntity
- && !super.tile.isDead()
- && tile instanceof IGregTechTileEntity
- && !(((IGregTechTileEntity) tile).getMetaTileEntity()
- instanceof GT_MetaTileEntity_DigitalChestBase))
- maxSlot = Math.min(tile.getSizeInventory() - 1, SLOT_MASK - 1);
- else maxSlot = -1;
-
- intSlot.setEnabled(maxSlot >= 0);
-
- thresholdSlot = new GT_GuiIntegerTextBox(this, 2, startX, startY + spaceY * 2 + 2, spaceX * 2 + 5, 12);
- thresholdSlot.setMaxStringLength(6);
- }
-
- @Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.getFontRenderer()
- .drawString(coverVariable.inverted ? INVERTED : NORMAL, startX + spaceX * 3, 4 + startY, textColor);
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("254", "Detect slot#"),
- startX + spaceX * 3,
- 4 + startY + spaceY,
- textColor);
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("221", "Item threshold"),
- startX + spaceX * 3,
- startY + spaceY * 2 + 4,
- textColor);
- }
-
- @Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- update();
- if (intSlot.isEnabled()) intSlot.setFocused(true);
- }
-
- @Override
- public void buttonClicked(GuiButton btn) {
- coverVariable.inverted = !coverVariable.inverted;
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
- update();
- }
-
- @Override
- public void onMouseWheel(int x, int y, int delta) {
- if (intSlot.isFocused()) {
- int step = Math.max(1, Math.abs(delta / 120));
- step = (isShiftKeyDown() ? 50 : isCtrlKeyDown() ? 5 : 1) * (delta > 0 ? step : -step);
- int val = parseTextBox(intSlot);
-
- if (val < 0) val = -1;
-
- val = val + step;
-
- if (val < 0) val = -1;
- else if (val > maxSlot) val = maxSlot;
-
- intSlot.setText(val < 0 ? ALL : Integer.toString(val));
- } else if (thresholdSlot.isFocused()) {
- int val = parseTextBox(thresholdSlot);
-
- int step = 1;
- if (isShiftKeyDown()) {
- step *= 64;
- }
- if (isCtrlKeyDown()) {
- step *= 10;
- }
-
- val += step * Integer.signum(delta);
-
- val = GT_Utility.clamp(val, 0, getUpperBound());
- thresholdSlot.setText(Integer.toString(val));
- }
- }
-
- @Override
- public void applyTextBox(GT_GuiIntegerTextBox box) {
- if (box == intSlot) {
- coverVariable.slot = parseTextBox(box);
- } else if (box == thresholdSlot) {
- coverVariable.threshold = parseTextBox(thresholdSlot);
- }
-
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
- update();
- }
-
- @Override
- public void resetTextBox(GT_GuiIntegerTextBox box) {
- if (box == intSlot) {
- intSlot.setText(coverVariable.slot < 0 ? ALL : Integer.toString(coverVariable.slot));
- } else if (box == thresholdSlot) {
- thresholdSlot.setText(Integer.toString(coverVariable.threshold));
- }
- }
-
- private void update() {
- invertedButton.setChecked(coverVariable.inverted);
- resetTextBox(intSlot);
- resetTextBox(thresholdSlot);
-
- if (coverVariable.slot < 0) {
- intSlotIcon.setItem(null);
- return;
- }
- if (tile instanceof TileEntity && !super.tile.isDead()) {
- if (tile.getSizeInventory() >= coverVariable.slot) {
- ItemStack item = tile.getStackInSlot(coverVariable.slot);
- intSlotIcon.setItem(item);
- return;
- }
- }
- intSlotIcon.setItem(null);
- }
-
- private int parseTextBox(GT_GuiIntegerTextBox box) {
- if (box == intSlot) {
- String text = box.getText();
- if (text == null) return -1;
- text = text.trim();
- if (text.startsWith(ALL)) text = text.substring(ALL.length());
-
- if (text.isEmpty()) return -1;
-
- int val;
- try {
- val = Integer.parseInt(text);
- } catch (NumberFormatException e) {
- return -1;
- }
-
- if (val < 0) return -1;
- else if (maxSlot < val) return maxSlot;
- return val;
- } else if (box == thresholdSlot) {
- String text = box.getText();
- if (text == null) {
- return 0;
- }
-
- int val;
- try {
- val = Integer.parseInt(text.trim());
- } catch (NumberFormatException e) {
- return 0;
- }
-
- return GT_Utility.clamp(val, 0, getUpperBound());
- }
-
- throw new UnsupportedOperationException("Unknown text box: " + box);
- }
-
- private int getUpperBound() {
- return maxSlot > 0 ? maxSlot * 64 : 999_999;
- }
- }
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java
index f475debce7..62e560487b 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java
@@ -1,28 +1,27 @@
package gregtech.common.covers;
import com.google.common.io.ByteArrayDataInput;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconCheckButton;
-import gregtech.api.gui.widgets.GT_GuiIntegerTextBox;
+import com.gtnewhorizons.modularui.api.math.MathExpression;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.metatileentity.BaseMetaTileEntity;
-import gregtech.api.net.GT_Packet_TileEntityCoverNew;
import gregtech.api.util.GT_CoverBehaviorBase;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_TextFieldWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import gregtech.common.tileentities.storage.GT_MetaTileEntity_DigitalTankBase;
import io.netty.buffer.ByteBuf;
import java.util.Arrays;
import javax.annotation.Nonnull;
-import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
@@ -164,23 +163,85 @@ public class GT_Cover_LiquidMeter extends GT_CoverBehaviorBase<GT_Cover_LiquidMe
protected int getTickRateImpl(byte aSide, int aCoverID, LiquidMeterData aCoverVariable, ICoverable aTileEntity) {
return 5;
}
- /**
- * GUI Stuff
- */
+
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- public Object getClientGUIImpl(
- byte aSide,
- int aCoverID,
- LiquidMeterData coverData,
- ICoverable aTileEntity,
- EntityPlayer aPlayer,
- World aWorld) {
- return new GUI(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new LiquidMeterUIFactory(buildContext).createWindow();
+ }
+
+ private class LiquidMeterUIFactory 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 LiquidMeterUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
+ }
+
+ @SuppressWarnings("PointlessArithmeticExpression")
+ @Override
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ final String INVERTED = GT_Utility.trans("INVERTED", "Inverted");
+ final String NORMAL = GT_Utility.trans("NORMAL", "Normal");
+ final int maxCapacity;
+
+ if (getUIBuildContext().getTile() instanceof IFluidHandler) {
+ FluidTankInfo[] tanks =
+ ((IFluidHandler) getUIBuildContext().getTile()).getTankInfo(ForgeDirection.UNKNOWN);
+ maxCapacity =
+ Arrays.stream(tanks).mapToInt(tank -> tank.capacity).sum();
+ } else {
+ maxCapacity = -1;
+ }
+
+ builder.widget(new CoverDataControllerWidget<>(
+ this::getCoverData, this::setCoverData, GT_Cover_LiquidMeter.this)
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofRedstone(),
+ coverData -> coverData.inverted,
+ (coverData, state) -> {
+ coverData.inverted = state;
+ return coverData;
+ },
+ widget -> widget.addTooltip(0, NORMAL)
+ .addTooltip(1, INVERTED)
+ .setPos(spaceX * 0, spaceY * 0))
+ .addFollower(
+ new CoverDataFollower_TextFieldWidget<>(),
+ coverData -> String.valueOf(coverData.threshold),
+ (coverData, state) -> {
+ coverData.threshold = (int) MathExpression.parseMathExpression(state);
+ return coverData;
+ },
+ widget -> widget.setOnScrollNumbers(1000, 100, 100000)
+ .setNumbers(0, maxCapacity > 0 ? maxCapacity : Integer.MAX_VALUE)
+ .setFocusOnGuiOpen(true)
+ .setPos(spaceX * 0, spaceY * 1 + 2)
+ .setSize(spaceX * 4 + 5, 12))
+ .setPos(startX, startY))
+ .widget(TextWidget.dynamicString(
+ () -> getCoverData() != null ? getCoverData().inverted ? INVERTED : NORMAL : "")
+ .setSynced(false)
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 1, 4 + startY + spaceY * 0))
+ .widget(new TextWidget(GT_Utility.trans("222", "Fluid threshold"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 5 - 10, startY + spaceY * 1 + 4));
+ }
}
public static class LiquidMeterData implements ISerializableObject {
@@ -234,143 +295,4 @@ public class GT_Cover_LiquidMeter extends GT_CoverBehaviorBase<GT_Cover_LiquidMe
return this;
}
}
-
- private class GUI extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private final GT_GuiIconCheckButton invertedButton;
- private final GT_GuiIntegerTextBox thresholdSlot;
- private final LiquidMeterData coverVariable;
-
- private final int maxCapacity;
-
- 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 final String INVERTED = GT_Utility.trans("INVERTED", "Inverted");
- private final String NORMAL = GT_Utility.trans("NORMAL", "Normal");
-
- private final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GUI(byte aSide, int aCoverID, LiquidMeterData aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- invertedButton = new GT_GuiIconCheckButton(
- this,
- 0,
- startX + spaceX * 0,
- startY + spaceY * 0,
- GT_GuiIcon.REDSTONE_ON,
- GT_GuiIcon.REDSTONE_OFF,
- INVERTED,
- NORMAL);
- thresholdSlot =
- new GT_GuiIntegerTextBox(this, 2, startX + spaceX * 0, startY + spaceY * 1 + 2, spaceX * 4 + 5, 12);
-
- if (tile instanceof IFluidHandler) {
- FluidTankInfo[] tanks = ((IFluidHandler) tile).getTankInfo(ForgeDirection.UNKNOWN);
- maxCapacity =
- Arrays.stream(tanks).mapToInt(tank -> tank.capacity).sum();
- } else {
- maxCapacity = -1;
- }
- }
-
- @Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.fontRendererObj.drawString(
- coverVariable.inverted ? INVERTED : NORMAL,
- startX + spaceX * 1,
- 4 + startY + spaceY * 0,
- textColor);
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("222", "Fluid threshold"),
- startX + spaceX * 5 - 10,
- startY + spaceY * 1 + 4,
- textColor);
- }
-
- @Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- update();
- thresholdSlot.setFocused(true);
- }
-
- @Override
- public void buttonClicked(GuiButton btn) {
- coverVariable.inverted = !coverVariable.inverted;
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
- update();
- }
-
- @Override
- public void onMouseWheel(int x, int y, int delta) {
- if (thresholdSlot.isFocused()) {
- int val = parseTextBox(thresholdSlot);
-
- int step = 1000;
- if (isShiftKeyDown()) {
- step *= 100;
- }
- if (isCtrlKeyDown()) {
- step /= 10;
- }
-
- val += step * Integer.signum(delta);
- int upperBound = maxCapacity > 0 ? maxCapacity : Integer.MAX_VALUE;
- val = GT_Utility.clamp(val, 0, upperBound);
- thresholdSlot.setText(Integer.toString(val));
- }
- }
-
- @Override
- public void applyTextBox(GT_GuiIntegerTextBox box) {
- if (box == thresholdSlot) {
- coverVariable.threshold = parseTextBox(thresholdSlot);
- }
-
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
- update();
- }
-
- @Override
- public void resetTextBox(GT_GuiIntegerTextBox box) {
- if (box == thresholdSlot) {
- thresholdSlot.setText(Integer.toString(coverVariable.threshold));
- }
- }
-
- private void update() {
- invertedButton.setChecked(coverVariable.inverted);
- resetTextBox(thresholdSlot);
- }
-
- private int parseTextBox(GT_GuiIntegerTextBox box) {
- if (box == thresholdSlot) {
- String text = box.getText();
- if (text == null) {
- return 0;
- }
-
- int val;
- try {
- val = Integer.parseInt(text.trim());
- } catch (NumberFormatException e) {
- return 0;
- }
-
- int upperBound = maxCapacity > 0 ? maxCapacity : Integer.MAX_VALUE;
- return GT_Utility.clamp(val, 0, upperBound);
- }
-
- throw new UnsupportedOperationException("Unknown text box: " + box);
- }
- }
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java b/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java
index 2ea5a2c951..5dfb837499 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java
@@ -1,19 +1,19 @@
package gregtech.common.covers;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconCheckButton;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.items.GT_MetaGenerated_Tool;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
-import gregtech.api.net.GT_Packet_TileEntityCover;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Utility;
-import net.minecraft.client.gui.GuiButton;
+import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid;
@@ -192,122 +192,130 @@ public class GT_Cover_NeedMaintainance extends GT_CoverBehavior {
public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
return 60;
}
- /**
- * GUI Stuff
- */
+
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) {
- return new GUI(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
}
- private class GUI extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private int coverVariable;
-
- private final String[] tooltiptext = {
- GT_Utility.trans("056", "Emit if 1 Maintenance Needed"),
- GT_Utility.trans("058", "Emit if 2 Maintenance Needed"),
- GT_Utility.trans("060", "Emit if 3 Maintenance Needed"),
- GT_Utility.trans("062", "Emit if 4 Maintenance Needed"),
- GT_Utility.trans("064", "Emit if 5 Maintenance Needed"),
- GT_Utility.trans("066", "Emit if rotor needs maintenance low accuracy mod"),
- GT_Utility.trans("068", "Emit if rotor needs maintenance high accuracy mod"),
- };
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new NeedMaintainanceUIFactory(buildContext).createWindow();
+ }
- private final String[] buttontext = {
- GT_Utility.trans("247", "1 Issue"),
- GT_Utility.trans("248", "2 Issues"),
- GT_Utility.trans("249", "3 Issues"),
- GT_Utility.trans("250", "4 Issues"),
- GT_Utility.trans("251", "5 Issues"),
- GT_Utility.trans("252", "Rotor < 80%"),
- GT_Utility.trans("253", "Rotor < 100%"),
- GT_Utility.trans("INVERTED", "Inverted"),
- GT_Utility.trans("NORMAL", "Normal"),
- };
+ private class NeedMaintainanceUIFactory 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 final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GUI(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- GuiButton b;
- b = new GT_GuiIconCheckButton(this, 0, startX + spaceX * 0, startY + spaceY * 0, GT_GuiIcon.CHECKMARK, null)
- .setTooltipText(tooltiptext[0]);
- b = new GT_GuiIconCheckButton(this, 1, startX + spaceX * 0, startY + spaceY * 1, GT_GuiIcon.CHECKMARK, null)
- .setTooltipText(tooltiptext[1]);
- b = new GT_GuiIconCheckButton(this, 2, startX + spaceX * 0, startY + spaceY * 2, GT_GuiIcon.CHECKMARK, null)
- .setTooltipText(tooltiptext[2]);
- b = new GT_GuiIconCheckButton(this, 3, startX + spaceX * 0, startY + spaceY * 3, GT_GuiIcon.CHECKMARK, null)
- .setTooltipText(tooltiptext[3]);
- b = new GT_GuiIconCheckButton(
- this, 4, startX + spaceX * 4 + 4, startY + spaceY * 0, GT_GuiIcon.CHECKMARK, null)
- .setTooltipText(tooltiptext[4]);
- b = new GT_GuiIconCheckButton(
- this, 5, startX + spaceX * 4 + 4, startY + spaceY * 1, GT_GuiIcon.CHECKMARK, null)
- .setTooltipText(tooltiptext[5]);
- b = new GT_GuiIconCheckButton(
- this, 6, startX + spaceX * 4 + 4, startY + spaceY * 2, GT_GuiIcon.CHECKMARK, null)
- .setTooltipText(tooltiptext[6]);
- b = new GT_GuiIconCheckButton(
- this,
- 7,
- startX + spaceX * 4 + 4,
- startY + spaceY * 3,
- GT_GuiIcon.REDSTONE_ON,
- GT_GuiIcon.REDSTONE_OFF);
+ public NeedMaintainanceUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
+ @SuppressWarnings("PointlessArithmeticExpression")
@Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
-
- this.fontRendererObj.drawString(buttontext[0], startX + spaceX * 1, 4 + startY + spaceY * 0, textColor);
- this.fontRendererObj.drawString(buttontext[1], startX + spaceX * 1, 4 + startY + spaceY * 1, textColor);
- this.fontRendererObj.drawString(buttontext[2], startX + spaceX * 1, 4 + startY + spaceY * 2, textColor);
- this.fontRendererObj.drawString(buttontext[3], startX + spaceX * 1, 4 + startY + spaceY * 3, textColor);
- this.fontRendererObj.drawString(buttontext[4], startX + spaceX * 5 + 4, 4 + startY + spaceY * 0, textColor);
- this.fontRendererObj.drawString(buttontext[5], startX + spaceX * 5 + 4, 4 + startY + spaceY * 1, textColor);
- this.fontRendererObj.drawString(buttontext[6], startX + spaceX * 5 + 4, 4 + startY + spaceY * 2, textColor);
- // inverted normal
- String s2 = ((coverVariable & 0x1) > 0) ? buttontext[7] : buttontext[8];
- this.fontRendererObj.drawString(s2, startX + spaceX * 5 + 4, 4 + startY + spaceY * 3, textColor);
- }
-
- @Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- updateButtons();
- }
-
- @Override
- public void buttonClicked(GuiButton btn) {
- if (btn.id == 7 || !isEnabled(btn.id)) {
- coverVariable = getNewCoverVariable(btn.id, ((GT_GuiIconCheckButton) btn).isChecked());
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile));
- }
- updateButtons();
- }
-
- private void updateButtons() {
- for (Object o : buttonList)
- ((GT_GuiIconCheckButton) o).setChecked(isEnabled(((GT_GuiIconCheckButton) o).id));
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ final String[] tooltipText = {
+ GT_Utility.trans("056", "Emit if 1 Maintenance Needed"),
+ GT_Utility.trans("058", "Emit if 2 Maintenance Needed"),
+ GT_Utility.trans("060", "Emit if 3 Maintenance Needed"),
+ GT_Utility.trans("062", "Emit if 4 Maintenance Needed"),
+ GT_Utility.trans("064", "Emit if 5 Maintenance Needed"),
+ GT_Utility.trans("066", "Emit if rotor needs maintenance low accuracy mod"),
+ GT_Utility.trans("068", "Emit if rotor needs maintenance high accuracy mod"),
+ };
+
+ final String[] buttonText = {
+ GT_Utility.trans("247", "1 Issue"),
+ GT_Utility.trans("248", "2 Issues"),
+ GT_Utility.trans("249", "3 Issues"),
+ GT_Utility.trans("250", "4 Issues"),
+ GT_Utility.trans("251", "5 Issues"),
+ GT_Utility.trans("252", "Rotor < 80%"),
+ GT_Utility.trans("253", "Rotor < 100%"),
+ GT_Utility.trans("INVERTED", "Inverted"),
+ GT_Utility.trans("NORMAL", "Normal"),
+ };
+
+ builder.widget(new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>(
+ this::getCoverData,
+ this::setCoverData,
+ GT_Cover_NeedMaintainance.this,
+ (index, coverData) -> isEnabled(index, convert(coverData)),
+ (index, coverData) -> new ISerializableObject.LegacyCoverData(
+ getNewCoverVariable(index, convert(coverData))))
+ .addToggleButton(
+ 0,
+ CoverDataFollower_ToggleButtonWidget.ofCheck(),
+ widget -> widget.addTooltip(tooltipText[0]).setPos(spaceX * 0, spaceY * 0))
+ .addToggleButton(
+ 1,
+ CoverDataFollower_ToggleButtonWidget.ofCheck(),
+ widget -> widget.addTooltip(tooltipText[1]).setPos(spaceX * 0, spaceY * 1))
+ .addToggleButton(
+ 2,
+ CoverDataFollower_ToggleButtonWidget.ofCheck(),
+ widget -> widget.addTooltip(tooltipText[2]).setPos(spaceX * 0, spaceY * 2))
+ .addToggleButton(
+ 3,
+ CoverDataFollower_ToggleButtonWidget.ofCheck(),
+ widget -> widget.addTooltip(tooltipText[3]).setPos(spaceX * 0, spaceY * 3))
+ .addToggleButton(
+ 4,
+ CoverDataFollower_ToggleButtonWidget.ofCheck(),
+ widget -> widget.addTooltip(tooltipText[4]).setPos(spaceX * 4 + 4, spaceY * 0))
+ .addToggleButton(
+ 5,
+ CoverDataFollower_ToggleButtonWidget.ofCheck(),
+ widget -> widget.addTooltip(tooltipText[5]).setPos(spaceX * 4 + 4, spaceY * 1))
+ .addToggleButton(
+ 6,
+ CoverDataFollower_ToggleButtonWidget.ofCheck(),
+ widget -> widget.addTooltip(tooltipText[6]).setPos(spaceX * 4 + 4, spaceY * 2))
+ .addToggleButton(
+ 7,
+ CoverDataFollower_ToggleButtonWidget.ofRedstone(),
+ widget -> widget.setPos(spaceX * 4 + 4, spaceY * 3))
+ .setPos(startX, startY))
+ .widget(new TextWidget(buttonText[0])
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 1, 4 + startY + spaceY * 0))
+ .widget(new TextWidget(buttonText[1])
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 1, 4 + startY + spaceY * 1))
+ .widget(new TextWidget(buttonText[2])
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 1, 4 + startY + spaceY * 2))
+ .widget(new TextWidget(buttonText[3])
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 1, 4 + startY + spaceY * 3))
+ .widget(new TextWidget(buttonText[4])
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 5 + 4, 4 + startY + spaceY * 0))
+ .widget(new TextWidget(buttonText[5])
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 5 + 4, 4 + startY + spaceY * 1))
+ .widget(new TextWidget(buttonText[6])
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 5 + 4, 4 + startY + spaceY * 2))
+ .widget(TextWidget.dynamicString(
+ () -> isEnabled(7, convert(getCoverData())) ? buttonText[7] : buttonText[8])
+ .setSynced(false)
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 5 + 4, 4 + startY + spaceY * 3));
}
- private int getNewCoverVariable(int id, boolean checked) {
+ private int getNewCoverVariable(int id, int coverVariable) {
+ final boolean checked = (coverVariable & 0x1) > 0;
if (id == 7) {
if (checked) return coverVariable & ~0x1;
else return coverVariable | 0x1;
@@ -315,7 +323,7 @@ public class GT_Cover_NeedMaintainance extends GT_CoverBehavior {
return (coverVariable & 0x1) | (id << 1);
}
- private boolean isEnabled(int id) {
+ private boolean isEnabled(int id, int coverVariable) {
if (id == 7) return (coverVariable & 0x1) > 0;
return (coverVariable >>> 1) == id;
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_PlayerDetector.java b/src/main/java/gregtech/common/covers/GT_Cover_PlayerDetector.java
index a77119b413..7f9e2ae5b0 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_PlayerDetector.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_PlayerDetector.java
@@ -1,16 +1,16 @@
package gregtech.common.covers;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconCheckButton;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.net.GT_Packet_TileEntityCover;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Utility;
-import net.minecraft.client.gui.GuiButton;
+import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraftforge.fluids.Fluid;
@@ -149,81 +149,66 @@ public class GT_Cover_PlayerDetector extends GT_CoverBehavior {
public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
return 20;
}
- /**
- * GUI Stuff
- */
+
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) {
- return new GUI(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new PlayerDetectorUIFactory(buildContext).createWindow();
}
- private class GUI extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private int coverVariable;
+ private class PlayerDetectorUIFactory 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 final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GUI(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- new GT_GuiIconCheckButton(this, 0, startX + spaceX * 0, startY + spaceY * 0, GT_GuiIcon.CHECKMARK, null)
- .setTooltipText(GT_Utility.trans("068.1", "Emit if any Player is close"));
- new GT_GuiIconCheckButton(this, 1, startX + spaceX * 0, startY + spaceY * 1, GT_GuiIcon.CHECKMARK, null)
- .setTooltipText(GT_Utility.trans("069.1", "Emit if other Player is close"));
- new GT_GuiIconCheckButton(this, 2, startX + spaceX * 0, startY + spaceY * 2, GT_GuiIcon.CHECKMARK, null)
- .setTooltipText(GT_Utility.trans("070", "Emit if you are close"));
+ public PlayerDetectorUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
+ @SuppressWarnings("PointlessArithmeticExpression")
@Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.fontRendererObj.drawString(
- GT_Utility.trans("319", "Any player"), startX + spaceX * 1, 4 + startY + spaceY * 0, textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("320", "Other players"), startX + spaceX * 1, 4 + startY + spaceY * 1, textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("321", "Only owner"), startX + spaceX * 1, 4 + startY + spaceY * 2, textColor);
- }
-
- @Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- updateButtons();
- }
-
- @Override
- public void buttonClicked(GuiButton btn) {
- if (!isEnabled(btn.id)) {
- coverVariable = getNewCoverVariable(btn.id, ((GT_GuiIconCheckButton) btn).isChecked());
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile));
- }
- updateButtons();
- }
-
- private void updateButtons() {
- for (Object o : buttonList)
- ((GT_GuiIconCheckButton) o).setChecked(isEnabled(((GT_GuiIconCheckButton) o).id));
- }
-
- private int getNewCoverVariable(int id, boolean checked) {
- return id;
- }
-
- private boolean isEnabled(int id) {
- return coverVariable == id;
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ builder.widget(new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>(
+ this::getCoverData,
+ this::setCoverData,
+ GT_Cover_PlayerDetector.this,
+ (index, coverData) -> index == convert(coverData),
+ (index, coverData) -> new ISerializableObject.LegacyCoverData(index))
+ .addToggleButton(
+ 0, CoverDataFollower_ToggleButtonWidget.ofCheck(), widget -> widget.addTooltip(
+ GT_Utility.trans("068.1", "Emit if any Player is close"))
+ .setPos(spaceX * 0, spaceY * 0))
+ .addToggleButton(
+ 1, CoverDataFollower_ToggleButtonWidget.ofCheck(), widget -> widget.addTooltip(
+ GT_Utility.trans("069.1", "Emit if other Player is close"))
+ .setPos(spaceX * 0, spaceY * 1))
+ .addToggleButton(
+ 2, CoverDataFollower_ToggleButtonWidget.ofCheck(), widget -> widget.addTooltip(
+ GT_Utility.trans("070", "Emit if you are close"))
+ .setPos(spaceX * 0, spaceY * 2))
+ .setPos(startX, startY))
+ .widget(new TextWidget(GT_Utility.trans("319", "Any player"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 1, 4 + startY + spaceY * 0))
+ .widget(new TextWidget(GT_Utility.trans("320", "Other players"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 1, 4 + startY + spaceY * 1))
+ .widget(new TextWidget(GT_Utility.trans("321", "Only owner"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 1, 4 + startY + spaceY * 2));
}
}
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Pump.java b/src/main/java/gregtech/common/covers/GT_Cover_Pump.java
index db60cfa409..c15f7aec38 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_Pump.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Pump.java
@@ -1,16 +1,17 @@
package gregtech.common.covers;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconButton;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IMachineProgress;
-import gregtech.api.net.GT_Packet_TileEntityCover;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Utility;
-import net.minecraft.client.gui.GuiButton;
+import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
@@ -204,88 +205,99 @@ public class GT_Cover_Pump extends GT_CoverBehavior {
return 1;
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) {
- return new GT_PumpGUICover(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new PumpUIFactory(buildContext).createWindow();
}
- private class GT_PumpGUICover extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private int coverVariable;
+ 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 final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GT_PumpGUICover(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- GT_GuiIconButton b;
- b = new GT_GuiIconButton(this, 0, startX + spaceX * 0, startY + spaceY * 0, GT_GuiIcon.EXPORT)
- .setTooltipText(GT_Utility.trans("006", "Export"));
- b = new GT_GuiIconButton(this, 1, startX + spaceX * 1, startY + spaceY * 0, GT_GuiIcon.IMPORT)
- .setTooltipText(GT_Utility.trans("007", "Import"));
- b = new GT_GuiIconButton(this, 2, startX + spaceX * 0, startY + spaceY * 1, GT_GuiIcon.CHECKMARK)
- .setTooltipText(GT_Utility.trans("224", "Always On"));
- b = new GT_GuiIconButton(this, 3, startX + spaceX * 1, startY + spaceY * 1, GT_GuiIcon.REDSTONE_ON)
- .setTooltipText(GT_Utility.trans("225", "Active with Redstone Signal"));
- b = new GT_GuiIconButton(this, 4, startX + spaceX * 2, startY + spaceY * 1, GT_GuiIcon.REDSTONE_OFF)
- .setTooltipText(GT_Utility.trans("226", "Inactive with Redstone Signal"));
- b = new GT_GuiIconButton(this, 5, startX + spaceX * 0, startY + spaceY * 2, GT_GuiIcon.ALLOW_INPUT)
- .setTooltipText(GT_Utility.trans("227", "Allow Input"));
- b = new GT_GuiIconButton(this, 6, startX + spaceX * 1, startY + spaceY * 2, GT_GuiIcon.BLOCK_INPUT)
- .setTooltipText(GT_Utility.trans("228", "Block Input"));
- }
-
- @Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.fontRendererObj.drawString(
- GT_Utility.trans("229", "Import/Export"), startX + spaceX * 3, 3 + startY + spaceY * 0, textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("230", "Conditional"), startX + spaceX * 3, 3 + startY + spaceY * 1, textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("231", "Enable Input"), startX + spaceX * 3, 3 + startY + spaceY * 2, textColor);
- }
-
- @Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- updateButtons();
+ public PumpUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
+ @SuppressWarnings("PointlessArithmeticExpression")
@Override
- public void buttonClicked(GuiButton btn) {
- if (getClickable(btn.id)) {
- coverVariable = getNewCoverVariable(btn.id);
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile));
- }
- updateButtons();
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ builder.widget(new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>(
+ this::getCoverData,
+ this::setCoverData,
+ GT_Cover_Pump.this,
+ (id, coverData) -> !getClickable(id, convert(coverData)),
+ (id, coverData) -> new ISerializableObject.LegacyCoverData(
+ getNewCoverVariable(id, convert(coverData))))
+ .addToggleButton(
+ 0,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_EXPORT)
+ .addTooltip(GT_Utility.trans("006", "Export"))
+ .setPos(spaceX * 0, spaceY * 0))
+ .addToggleButton(
+ 1,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_IMPORT)
+ .addTooltip(GT_Utility.trans("007", "Import"))
+ .setPos(spaceX * 1, spaceY * 0))
+ .addToggleButton(
+ 2,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_CHECKMARK)
+ .addTooltip(GT_Utility.trans("224", "Always On"))
+ .setPos(spaceX * 0, spaceY * 1))
+ .addToggleButton(
+ 3,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_REDSTONE_ON)
+ .addTooltip(GT_Utility.trans("225", "Active with Redstone Signal"))
+ .setPos(spaceX * 1, spaceY * 1))
+ .addToggleButton(
+ 4,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_REDSTONE_OFF)
+ .addTooltip(GT_Utility.trans("226", "Inactive with Redstone Signal"))
+ .setPos(spaceX * 2, spaceY * 1))
+ .addToggleButton(
+ 5,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_ALLOW_INPUT)
+ .addTooltip(GT_Utility.trans("227", "Allow Input"))
+ .setPos(spaceX * 0, spaceY * 2))
+ .addToggleButton(
+ 6,
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_BLOCK_INPUT)
+ .addTooltip(GT_Utility.trans("228", "Block Input"))
+ .setPos(spaceX * 1, spaceY * 2))
+ .setPos(startX, startY))
+ .widget(new TextWidget(GT_Utility.trans("229", "Import/Export"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 3 + startY + spaceY * 0))
+ .widget(new TextWidget(GT_Utility.trans("230", "Conditional"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 3 + startY + spaceY * 1))
+ .widget(new TextWidget(GT_Utility.trans("231", "Enable Input"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 3, 3 + startY + spaceY * 2));
}
- private void updateButtons() {
- GuiButton b;
- for (Object o : buttonList) {
- b = (GuiButton) o;
- b.enabled = getClickable(b.id);
- }
- }
-
- private int getNewCoverVariable(int id) {
+ private int getNewCoverVariable(int id, int coverVariable) {
switch (id) {
case 0:
return coverVariable & ~0x1;
@@ -309,9 +321,8 @@ public class GT_Cover_Pump extends GT_CoverBehavior {
return coverVariable;
}
- private boolean getClickable(int id) {
+ private boolean getClickable(int id, int coverVariable) {
if (coverVariable < 0 | 11 < coverVariable) return false;
-
switch (id) {
case 0:
case 1:
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java
index f69050da14..f6e5381c74 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java
@@ -1,21 +1,19 @@
package gregtech.common.covers;
+import com.gtnewhorizons.modularui.api.math.MathExpression;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
import gregtech.api.GregTech_API;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconCheckButton;
-import gregtech.api.gui.widgets.GT_GuiIntegerTextBox;
-import gregtech.api.interfaces.IGuiScreen;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
-import gregtech.api.net.GT_Packet_WirelessRedstoneCover;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
-import net.minecraft.client.gui.GuiButton;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_TextFieldWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.Fluid;
public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior {
@@ -175,174 +173,77 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior {
public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
return 1;
}
- /**
- * GUI Stuff
- */
+
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) {
- return new GUI(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new RedstoneWirelessBaseUIFactory(buildContext).createWindow();
}
- private class GUI extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private GT_GuiIntegerTextBox fBox;
- private int coverVariable;
+ private class RedstoneWirelessBaseUIFactory 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 static final String guiTexturePath = "gregtech:textures/gui/GuiCoverLong.png";
-
- private final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GUI(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 250, 107, GT_Utility.intToStack(aCoverID));
- this.mGUIbackgroundLocation = new ResourceLocation(guiTexturePath);
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- fBox = new GT_GuiShortTextBox(this, 2, startX + spaceX * 0, startY + spaceY * 0 + 2, spaceX * 4 - 3, 12);
- fBox.setText(String.valueOf(coverVariable & PUBLIC_MASK));
- fBox.setMaxStringLength(12);
-
- GuiButton b;
- b = new GT_GuiIconCheckButton(
- this, 0, startX + spaceX * 0, startY + spaceY * 2, GT_GuiIcon.CHECKMARK, null);
+ public RedstoneWirelessBaseUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
@Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("246", "Frequency"),
- startX + spaceX * 4,
- 4 + startY + spaceY * 0,
- textColor);
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("602", "Use Private Frequency"),
- startX + spaceX * 1,
- startY + spaceY * 2 + 4,
- textColor);
- }
-
- @Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- fBox.setFocused(true);
- ((GT_GuiIconCheckButton) buttonList.get(0)).setChecked((coverVariable & CHECKBOX_MASK) > 0);
- }
-
- @Override
- public void onMouseWheel(int x, int y, int delta) {
- for (GT_GuiIntegerTextBox box : textBoxes) {
- if (box.isFocused()) {
- int step = Math.max(1, Math.abs(delta / 120));
- step = (isShiftKeyDown() ? 1000 : isCtrlKeyDown() ? 50 : 1) * (delta > 0 ? step : -step);
- long tCoverVariable;
- try {
- tCoverVariable = Long.parseLong(box.getText());
- } catch (NumberFormatException e) {
- return;
- }
- tCoverVariable = tCoverVariable + step;
- if (tCoverVariable > MAX_CHANNEL) tCoverVariable = MAX_CHANNEL;
- else if (tCoverVariable < 0) tCoverVariable = 0;
-
- box.setText(String.valueOf(tCoverVariable));
- return;
- }
- }
- }
-
- @Override
- public void applyTextBox(GT_GuiIntegerTextBox box) {
- int tPublicChannel;
- String s = box.getText().trim();
- try {
- tPublicChannel = Integer.parseInt(s);
- } catch (NumberFormatException e) {
- resetTextBox(box);
- return;
- }
-
- if (tPublicChannel > MAX_CHANNEL) tPublicChannel = MAX_CHANNEL;
- else if (tPublicChannel < 0) tPublicChannel = 0;
-
- int tCheckBoxValue = ((GT_GuiIconCheckButton) this.buttonList.get(0)).isChecked() ? CHECKBOX_MASK : 0;
-
- coverVariable = tCheckBoxValue | tPublicChannel;
-
- fBox.setText(Integer.toString(tPublicChannel));
- GT_Values.NW.sendToServer(
- new GT_Packet_WirelessRedstoneCover(side, coverID, tile, tPublicChannel, tCheckBoxValue));
+ protected int getGUIWidth() {
+ return 250;
}
+ @SuppressWarnings("PointlessArithmeticExpression")
@Override
- public void resetTextBox(GT_GuiIntegerTextBox box) {
- box.setText(String.valueOf(coverVariable & PUBLIC_MASK));
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ builder.widget(new CoverDataControllerWidget<>(
+ this::getCoverData, this::setCoverData, GT_Cover_RedstoneWirelessBase.this)
+ .addFollower(
+ new CoverDataFollower_TextFieldWidget<>(),
+ coverData -> String.valueOf(getFlagFrequency(convert(coverData))),
+ (coverData, text) -> new ISerializableObject.LegacyCoverData(
+ (int) MathExpression.parseMathExpression(text)
+ | getFlagCheckbox(convert(coverData))),
+ widget -> widget.setOnScrollNumbers()
+ .setNumbers(0, MAX_CHANNEL)
+ .setFocusOnGuiOpen(true)
+ .setPos(spaceX * 0, spaceY * 0 + 2)
+ .setSize(spaceX * 4 - 3, 12))
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofCheck(),
+ coverData -> getFlagCheckbox(convert(coverData)) > 0,
+ (coverData, state) -> new ISerializableObject.LegacyCoverData(
+ getFlagFrequency(convert(coverData)) | (state ? CHECKBOX_MASK : 0)),
+ widget -> widget.setPos(spaceX * 0, spaceY * 2))
+ .setPos(startX, startY))
+ .widget(new TextWidget(GT_Utility.trans("246", "Frequency"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 4, 4 + startY + spaceY * 0))
+ .widget(new TextWidget(GT_Utility.trans("602", "Use Private Frequency"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 1, startY + spaceY * 2 + 4));
}
- @Override
- public void buttonClicked(GuiButton btn) {
-
- final GT_GuiIconCheckButton tBtn = (GT_GuiIconCheckButton) btn;
-
- tBtn.setChecked(!tBtn.isChecked());
-
- int tPublicChannel = 0;
- String tText = fBox.getText().trim();
-
- if (tText.length() > 0) {
- tPublicChannel = Integer.parseInt(tText);
- }
-
- int tCheckBoxValue = tBtn.isChecked() ? CHECKBOX_MASK : 0;
-
- coverVariable = tCheckBoxValue | tPublicChannel;
-
- GT_Values.NW.sendToServer(
- new GT_Packet_WirelessRedstoneCover(side, coverID, tile, tPublicChannel, tCheckBoxValue));
+ private int getFlagFrequency(int coverVariable) {
+ return coverVariable & PUBLIC_MASK;
}
- private class GT_GuiShortTextBox extends GT_GuiIntegerTextBox {
-
- public GT_GuiShortTextBox(IGuiScreen gui, int id, int x, int y, int width, int height) {
- super(gui, id, x, y, width, height);
- }
-
- @Override
- public boolean textboxKeyTyped(char c, int key) {
- int tValue = 0;
-
- if (!super.textboxKeyTyped(c, key)) return false;
-
- int cursorPos = this.getCursorPosition();
-
- String tText = getText().trim();
- if (tText.length() > 0) {
- try {
- tValue = Integer.parseInt(tText);
- } catch (NumberFormatException ignored) {
- }
-
- if (tValue > MAX_CHANNEL) setText(String.valueOf(MAX_CHANNEL));
- else setText(String.valueOf(tValue));
-
- setCursorPosition(cursorPos);
- }
-
- return true;
- }
+ private int getFlagCheckbox(int coverVariable) {
+ return coverVariable & CHECKBOX_MASK;
}
}
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Shutter.java b/src/main/java/gregtech/common/covers/GT_Cover_Shutter.java
index 2b15359d64..6a3df96c5a 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_Shutter.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Shutter.java
@@ -1,17 +1,17 @@
package gregtech.common.covers;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconCheckButton;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IMachineProgress;
import gregtech.api.metatileentity.BaseMetaPipeEntity;
-import gregtech.api.net.GT_Packet_TileEntityCover;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Utility;
-import net.minecraft.client.gui.GuiButton;
+import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.fluids.Fluid;
@@ -149,93 +149,72 @@ public class GT_Cover_Shutter extends GT_CoverBehavior {
return 0;
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) {
- return new GUI(aSide, aCoverID, coverData, aTileEntity);
+ public boolean useModularUI() {
+ return true;
}
- private class GUI extends GT_GUICover {
- private final byte side;
- private final int coverID;
- private int coverVariable;
+ @Override
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new ShutterUIFactory(buildContext).createWindow();
+ }
+
+ private class ShutterUIFactory 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 final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- public GUI(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
- super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
-
- new GT_GuiIconCheckButton(this, 0, startX + spaceX * 0, startY + spaceY * 0, GT_GuiIcon.CHECKMARK, null);
- new GT_GuiIconCheckButton(this, 1, startX + spaceX * 0, startY + spaceY * 1, GT_GuiIcon.CHECKMARK, null);
- new GT_GuiIconCheckButton(this, 2, startX + spaceX * 0, startY + spaceY * 2, GT_GuiIcon.CHECKMARK, null);
- new GT_GuiIconCheckButton(this, 3, startX + spaceX * 0, startY + spaceY * 3, GT_GuiIcon.CHECKMARK, null);
+ public ShutterUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
+ @SuppressWarnings("PointlessArithmeticExpression")
@Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.fontRendererObj.drawString(
- GT_Utility.trans("082", "Open if work enabled"),
- 3 + startX + spaceX * 1,
- 4 + startY + spaceY * 0,
- textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("083", "Open if work disabled"),
- 3 + startX + spaceX * 1,
- 4 + startY + spaceY * 1,
- textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("084", "Only Output allowed"),
- 3 + startX + spaceX * 1,
- 4 + startY + spaceY * 2,
- textColor);
- this.fontRendererObj.drawString(
- GT_Utility.trans("085", "Only Input allowed"),
- 3 + startX + spaceX * 1,
- 4 + startY + spaceY * 3,
- textColor);
- }
-
- @Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- updateButtons();
- }
-
- @Override
- public void buttonClicked(GuiButton btn) {
- if (!isEnabled(btn.id)) {
- coverVariable = getNewCoverVariable(btn.id, ((GT_GuiIconCheckButton) btn).isChecked());
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile));
- }
- updateButtons();
- }
-
- private void updateButtons() {
- for (Object o : buttonList)
- ((GT_GuiIconCheckButton) o).setChecked(isEnabled(((GT_GuiIconCheckButton) o).id));
- }
-
- private int getNewCoverVariable(int id, boolean checked) {
- return id;
- }
-
- private boolean isEnabled(int id) {
- return coverVariable == id;
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ builder.widget(new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>(
+ this::getCoverData,
+ this::setCoverData,
+ GT_Cover_Shutter.this,
+ (index, coverData) -> index == convert(coverData),
+ (index, coverData) -> new ISerializableObject.LegacyCoverData(index))
+ .addToggleButton(
+ 0,
+ CoverDataFollower_ToggleButtonWidget.ofCheck(),
+ widget -> widget.setPos(spaceX * 0, spaceY * 0))
+ .addToggleButton(
+ 1,
+ CoverDataFollower_ToggleButtonWidget.ofCheck(),
+ widget -> widget.setPos(spaceX * 0, spaceY * 1))
+ .addToggleButton(
+ 2,
+ CoverDataFollower_ToggleButtonWidget.ofCheck(),
+ widget -> widget.setPos(spaceX * 0, spaceY * 2))
+ .addToggleButton(
+ 3,
+ CoverDataFollower_ToggleButtonWidget.ofCheck(),
+ widget -> widget.setPos(spaceX * 0, spaceY * 3))
+ .setPos(startX, startY))
+ .widget(new TextWidget(GT_Utility.trans("082", "Open if work enabled"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 0))
+ .widget(new TextWidget(GT_Utility.trans("083", "Open if work disabled"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 1))
+ .widget(new TextWidget(GT_Utility.trans("084", "Only Output allowed"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 2))
+ .widget(new TextWidget(GT_Utility.trans("085", "Only Input allowed"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 3));
}
}
}
diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java
index d3bf278a94..6b7c7f282e 100644
--- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java
+++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java
@@ -1,21 +1,22 @@
package gregtech.common.covers.redstone;
import com.google.common.io.ByteArrayDataInput;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconButton;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
-import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import io.netty.buffer.ByteBuf;
+import java.util.Arrays;
import java.util.UUID;
import javax.annotation.Nonnull;
-import net.minecraft.client.gui.GuiButton;
-import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.world.World;
public abstract class GT_Cover_AdvancedRedstoneReceiverBase
extends GT_Cover_AdvancedWirelessRedstoneBase<GT_Cover_AdvancedRedstoneReceiverBase.ReceiverData> {
@@ -34,18 +35,101 @@ public abstract class GT_Cover_AdvancedRedstoneReceiverBase
return createDataObject();
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
- public Object getClientGUIImpl(
- byte aSide,
- int aCoverID,
- ReceiverData aCoverVariable,
- ICoverable aTileEntity,
- EntityPlayer aPlayer,
- World aWorld) {
- return new ReceiverGUI(aSide, aCoverID, aCoverVariable, aTileEntity);
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new AdvancedRedstoneReceiverBaseUIFactory(buildContext).createWindow();
+ }
+
+ private class AdvancedRedstoneReceiverBaseUIFactory extends AdvancedWirelessRedstoneBaseUIFactory {
+
+ public AdvancedRedstoneReceiverBaseUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
+ }
+
+ @Override
+ protected int getFrequencyRow() {
+ return 0;
+ }
+
+ @Override
+ protected int getButtonRow() {
+ return 1;
+ }
+
+ @Override
+ protected boolean isShiftPrivateLeft() {
+ return false;
+ }
+
+ @Override
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ super.addUIWidgets(builder);
+ builder.widget(new TextWidget(GT_Utility.trans("335", "Gate Mode"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 5, 4 + startY + spaceY * 2));
+ }
+
+ @SuppressWarnings("PointlessArithmeticExpression")
+ @Override
+ protected void addUIForDataController(CoverDataControllerWidget<ReceiverData> controller) {
+ super.addUIForDataController(controller);
+ controller
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ coverData -> coverData.mode == GateMode.AND,
+ (coverData, state) -> {
+ coverData.mode = GateMode.AND;
+ return coverData;
+ },
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_GATE_AND)
+ .addTooltip(GT_Utility.trans("331", "AND Gate"))
+ .setPos(spaceX * 0, spaceY * 2))
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ coverData -> coverData.mode == GateMode.NAND,
+ (coverData, state) -> {
+ coverData.mode = GateMode.NAND;
+ return coverData;
+ },
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_GATE_NAND)
+ .addTooltip(GT_Utility.trans("332", "NAND Gate"))
+ .setPos(spaceX * 1, spaceY * 2))
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ coverData -> coverData.mode == GateMode.OR,
+ (coverData, state) -> {
+ coverData.mode = GateMode.OR;
+ return coverData;
+ },
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_GATE_OR)
+ .addTooltip(GT_Utility.trans("333", "OR Gate"))
+ .setPos(spaceX * 2, spaceY * 2))
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ coverData -> coverData.mode == GateMode.NOR,
+ (coverData, state) -> {
+ coverData.mode = GateMode.NOR;
+ return coverData;
+ },
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_GATE_NOR)
+ .addTooltip(GT_Utility.trans("334", "NOR Gate"))
+ .setPos(spaceX * 3, spaceY * 2))
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ coverData -> coverData.mode == GateMode.SINGLE_SOURCE,
+ (coverData, state) -> {
+ coverData.mode = GateMode.SINGLE_SOURCE;
+ return coverData;
+ },
+ widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_ANALOG)
+ .addTooltips(Arrays.asList(
+ "ANALOG Mode",
+ "Only use this mode with ONE transmitter in total,",
+ "no logic involved"))
+ .setPos(spaceX * 4, spaceY * 2));
+ }
}
public enum GateMode {
@@ -110,84 +194,4 @@ public abstract class GT_Cover_AdvancedRedstoneReceiverBase
return this;
}
}
-
- private static class ReceiverGUI extends WirelessGUI<ReceiverData> {
-
- private static final int gateModeButtonIdStart = 1;
-
- public ReceiverGUI(byte aSide, int aCoverID, ReceiverData aCoverVariable, ICoverable aTileEntity) {
- super(aSide, aCoverID, aCoverVariable, aTileEntity);
-
- new GT_GuiIconButton(
- this,
- gateModeButtonIdStart + 0,
- startX + spaceX * 0,
- startY + spaceY * 2,
- GT_GuiIcon.AND_GATE)
- .setTooltipText(GT_Utility.trans("331", "AND Gate"));
- new GT_GuiIconButton(
- this,
- gateModeButtonIdStart + 1,
- startX + spaceX * 1,
- startY + spaceY * 2,
- GT_GuiIcon.NAND_GATE)
- .setTooltipText(GT_Utility.trans("332", "NAND Gate"));
- new GT_GuiIconButton(
- this,
- gateModeButtonIdStart + 2,
- startX + spaceX * 2,
- startY + spaceY * 2,
- GT_GuiIcon.OR_GATE)
- .setTooltipText(GT_Utility.trans("333", "OR Gate"));
- new GT_GuiIconButton(
- this,
- gateModeButtonIdStart + 3,
- startX + spaceX * 3,
- startY + spaceY * 2,
- GT_GuiIcon.NOR_GATE)
- .setTooltipText(GT_Utility.trans("334", "NOR Gate"));
- new GT_GuiIconButton(
- this,
- gateModeButtonIdStart + 4,
- startX + spaceX * 4,
- startY + spaceY * 2,
- GT_GuiIcon.ANALOG_MODE)
- .setTooltipText(
- "ANALOG Mode", "Only use this mode with ONE transmitter in total,", "no logic involved");
- }
-
- @Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("335", "Gate Mode"),
- startX + spaceX * 5,
- 4 + startY + spaceY * 2,
- textColor);
- }
-
- @Override
- protected void update() {
- super.update();
- updateButtons();
- }
-
- private void updateButtons() {
- GuiButton button;
- for (int i = gateModeButtonIdStart; i < gateModeButtonIdStart + 5; ++i) {
- button = (GuiButton) this.buttonList.get(i);
- button.enabled = (button.id - gateModeButtonIdStart) != coverVariable.mode.ordinal();
- }
- }
-
- @Override
- public void buttonClicked(GuiButton btn) {
- if (btn.id >= gateModeButtonIdStart && btn.enabled) {
- coverVariable.mode = GateMode.values()[btn.id - gateModeButtonIdStart];
- }
-
- super.buttonClicked(btn);
- }
- }
}
diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java
index 2af243861a..c065c085b2 100644
--- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java
+++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java
@@ -1,22 +1,23 @@
package gregtech.common.covers.redstone;
import com.google.common.io.ByteArrayDataInput;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconCheckButton;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import io.netty.buffer.ByteBuf;
import java.util.Objects;
import java.util.UUID;
import javax.annotation.Nonnull;
-import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.world.World;
public abstract class GT_Cover_AdvancedRedstoneTransmitterBase<
T extends GT_Cover_AdvancedRedstoneTransmitterBase.TransmitterData>
@@ -126,69 +127,65 @@ public abstract class GT_Cover_AdvancedRedstoneTransmitterBase<
}
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
- public Object getClientGUIImpl(
- byte aSide,
- int aCoverID,
- TransmitterData aCoverVariable,
- ICoverable aTileEntity,
- EntityPlayer aPlayer,
- World aWorld) {
- return new TransmitterGUI<>(aSide, aCoverID, aCoverVariable, aTileEntity);
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new AdvancedRedstoneTransmitterBaseUIFactory(buildContext).createWindow();
}
- protected class TransmitterGUI<X extends TransmitterData> extends WirelessGUI<X> {
-
- private final GT_GuiIconCheckButton invertButton;
-
- private final String INVERTED = GT_Utility.trans("INVERTED", "Inverted");
- private final String NORMAL = GT_Utility.trans("NORMAL", "Normal");
-
- public TransmitterGUI(
- byte aSide, int aCoverID, X aCoverVariable, ICoverable aTileEntity, int frequencyRow, int buttonRow) {
- super(aSide, aCoverID, aCoverVariable, aTileEntity, frequencyRow, buttonRow, true);
- invertButton = new GT_GuiIconCheckButton(
- this,
- 1,
- startX + spaceX * 9,
- startY + spaceY * buttonRow,
- GT_GuiIcon.REDSTONE_ON,
- GT_GuiIcon.REDSTONE_OFF,
- INVERTED,
- NORMAL);
+ protected class AdvancedRedstoneTransmitterBaseUIFactory extends AdvancedWirelessRedstoneBaseUIFactory {
+
+ public AdvancedRedstoneTransmitterBaseUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
- public TransmitterGUI(byte aSide, int aCoverID, X aCoverVariable, ICoverable aTileEntity) {
- this(aSide, aCoverID, aCoverVariable, aTileEntity, 0, 1);
+ @Override
+ protected int getFrequencyRow() {
+ return 0;
}
@Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.getFontRenderer()
- .drawString(
- coverVariable.invert ? INVERTED : NORMAL,
- startX + spaceX * 10,
- 4 + startY + spaceY * buttonRow,
- textColor);
+ protected int getButtonRow() {
+ return 1;
}
@Override
- protected void update() {
- super.update();
- invertButton.setChecked(coverVariable.invert);
+ protected boolean isShiftPrivateLeft() {
+ return true;
}
@Override
- public void buttonClicked(GuiButton btn) {
- if (btn == invertButton) {
- coverVariable.invert = !coverVariable.invert;
- }
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ super.addUIWidgets(builder);
+ builder.widget(TextWidget.dynamicString(() -> {
+ T coverData = getCoverData();
+ if (coverData != null) {
+ return getCoverData().invert
+ ? GT_Utility.trans("INVERTED", "Inverted")
+ : GT_Utility.trans("NORMAL", "Normal");
+ } else {
+ return "";
+ }
+ })
+ .setSynced(false)
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 10, 4 + startY + spaceY * getButtonRow()));
+ }
- super.buttonClicked(btn);
+ @Override
+ protected void addUIForDataController(CoverDataControllerWidget<T> controller) {
+ super.addUIForDataController(controller);
+ controller.addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofRedstone(),
+ coverData -> coverData.invert,
+ (coverData, state) -> {
+ coverData.invert = state;
+ return coverData;
+ },
+ widget -> widget.addTooltip(0, GT_Utility.trans("NORMAL", "Normal"))
+ .addTooltip(1, GT_Utility.trans("INVERTED", "Inverted"))
+ .setPos(spaceX * 9, spaceY * getButtonRow()));
}
}
}
diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java
index a57b99fd83..c63f2f37d9 100644
--- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java
+++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java
@@ -1,32 +1,27 @@
package gregtech.common.covers.redstone;
import com.google.common.io.ByteArrayDataInput;
+import com.gtnewhorizons.modularui.api.math.MathExpression;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
import gregtech.api.GregTech_API;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUICover;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconCheckButton;
-import gregtech.api.gui.widgets.GT_GuiIntegerTextBox;
-import gregtech.api.interfaces.IGuiScreen;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
-import gregtech.api.net.GT_Packet_TileEntityCoverNew;
import gregtech.api.util.GT_CoverBehaviorBase;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_TextFieldWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import io.netty.buffer.ByteBuf;
-import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
import javax.annotation.Nonnull;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.Fluid;
public abstract class GT_Cover_AdvancedWirelessRedstoneBase<
@@ -219,225 +214,85 @@ public abstract class GT_Cover_AdvancedWirelessRedstoneBase<
}
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
public boolean hasCoverGUI() {
return true;
}
- protected abstract static class WirelessGUI<X extends WirelessData> extends GT_GUICover {
+ @Override
+ public boolean useModularUI() {
+ return true;
+ }
- protected final byte side;
- protected final int coverID;
- protected final GT_GuiIntegerTextBox frequencyBox;
- protected final GT_GuiIconCheckButton privateButton;
- protected final X coverVariable;
+ protected abstract class AdvancedWirelessRedstoneBaseUIFactory extends UIFactory {
protected static final int startX = 10;
protected static final int startY = 25;
protected static final int spaceX = 18;
protected static final int spaceY = 18;
- protected final int frequencyRow;
- protected final int buttonRow;
- private final int privateExtraColumn;
-
- protected final int textColor = this.getTextColorOrDefault("text", 0xFF555555);
-
- private static final String guiTexturePath = "gregtech:textures/gui/GuiCoverLong.png";
-
- public WirelessGUI(
- byte aSide,
- int aCoverID,
- X aCoverVariable,
- ICoverable aTileEntity,
- int frequencyRow,
- int buttonRow,
- boolean shiftPrivateLeft) {
- super(aTileEntity, 250, 107, GT_Utility.intToStack(aCoverID));
- this.mGUIbackgroundLocation = new ResourceLocation(guiTexturePath);
- this.side = aSide;
- this.coverID = aCoverID;
- this.coverVariable = aCoverVariable;
- this.frequencyRow = frequencyRow;
- this.buttonRow = buttonRow;
- this.privateExtraColumn = shiftPrivateLeft ? 1 : 5;
-
- frequencyBox =
- new GT_GuiShortTextBox(this, 0, 1 + startX, 2 + startY + spaceY * frequencyRow, spaceX * 5 - 4, 12);
- privateButton =
- new GT_GuiIconCheckButton(this, 0, startX, startY + spaceY * buttonRow, GT_GuiIcon.CHECKMARK, null);
- }
-
- public WirelessGUI(byte aSide, int aCoverID, X aCoverVariable, ICoverable aTileEntity) {
- this(aSide, aCoverID, aCoverVariable, aTileEntity, 0, 1, false);
+ public AdvancedWirelessRedstoneBaseUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
@Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("246", "Frequency"),
- startX + spaceX * 5,
- 4 + startY + spaceY * frequencyRow,
- textColor);
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("602", "Use Private Frequency"),
- startX + spaceX * privateExtraColumn,
- 4 + startY + spaceY * buttonRow,
- textColor);
+ protected int getGUIWidth() {
+ return 250;
}
@Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- update();
- frequencyBox.setFocused(true);
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ final int privateExtraColumn = isShiftPrivateLeft() ? 1 : 5;
+
+ CoverDataControllerWidget<T> dataController = new CoverDataControllerWidget<>(
+ this::getCoverData, this::setCoverData, GT_Cover_AdvancedWirelessRedstoneBase.this);
+ dataController.setPos(startX, startY);
+ addUIForDataController(dataController);
+
+ builder.widget(dataController)
+ .widget(new TextWidget(GT_Utility.trans("246", "Frequency"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 5, 4 + startY + spaceY * getFrequencyRow()))
+ .widget(new TextWidget(GT_Utility.trans("602", "Use Private Frequency"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * privateExtraColumn, 4 + startY + spaceY * getButtonRow()));
}
- protected void genericMouseWheel(
- GT_GuiIntegerTextBox box,
- int delta,
- int minValue,
- int maxValue,
- int baseStep,
- int ctrlStep,
- int shiftStep) {
- long step = Math.max(1, Math.abs(delta / 120));
- step = (isShiftKeyDown() ? shiftStep : isCtrlKeyDown() ? ctrlStep : baseStep) * (delta > 0 ? step : -step);
-
- long value = parseTextBox(box, minValue, maxValue) + step;
- if (value > maxValue) value = maxValue;
- else if (value < minValue) value = minValue;
-
- box.setText(Long.toString(value));
+ protected void addUIForDataController(CoverDataControllerWidget<T> controller) {
+ controller
+ .addFollower(
+ new CoverDataFollower_TextFieldWidget<>(),
+ coverData -> String.valueOf(coverData.frequency),
+ (coverData, state) -> {
+ coverData.frequency = (int) MathExpression.parseMathExpression(state);
+ return coverData;
+ },
+ widget -> widget.setOnScrollNumbers()
+ .setNumbers(0, Integer.MAX_VALUE)
+ .setFocusOnGuiOpen(true)
+ .setPos(1, 2 + spaceY * getFrequencyRow())
+ .setSize(spaceX * 5 - 4, 12))
+ .addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofCheck(),
+ coverData -> coverData.uuid != null,
+ (coverData, state) -> {
+ if (state) {
+ coverData.uuid =
+ getUIBuildContext().getPlayer().getUniqueID();
+ } else {
+ coverData.uuid = null;
+ }
+ return coverData;
+ },
+ widget -> widget.setPos(0, spaceY * getButtonRow()));
}
- protected void genericMouseWheel(GT_GuiIntegerTextBox box, int delta, int minValue, int maxValue) {
- genericMouseWheel(box, delta, minValue, maxValue, 1, 50, 1000);
- }
+ protected abstract int getFrequencyRow();
- @Override
- public void onMouseWheel(int x, int y, int delta) {
- if (frequencyBox.isFocused()) {
- genericMouseWheel(frequencyBox, delta, 0, Integer.MAX_VALUE);
- }
- }
+ protected abstract int getButtonRow();
- @Override
- public void applyTextBox(GT_GuiIntegerTextBox box) {
- if (box == frequencyBox) {
- coverVariable.frequency = parseTextBox(frequencyBox);
- }
-
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
- update();
- }
-
- @Override
- public void resetTextBox(GT_GuiIntegerTextBox box) {
- if (box == frequencyBox) {
- frequencyBox.setText(Integer.toString(coverVariable.frequency));
- }
- }
-
- protected void update() {
- privateButton.setChecked(coverVariable.uuid != null);
- resetTextBox(frequencyBox);
- }
-
- @Override
- public void buttonClicked(GuiButton btn) {
- if (btn == privateButton) {
- coverVariable.uuid = coverVariable.uuid == null
- ? Minecraft.getMinecraft().thePlayer.getUniqueID()
- : null;
- }
-
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
- update();
- }
-
- protected int parseTextBox(GT_GuiIntegerTextBox box, int min, int max) {
- String text = box.getText();
- if (text == null) {
- return 0;
- }
-
- long value;
- try {
- value = Long.parseLong(text.trim());
- } catch (NumberFormatException e) {
- return 0;
- }
-
- if (value >= max) return max;
- else if (value < min) return min;
- return (int) value;
- }
-
- protected int parseTextBox(GT_GuiIntegerTextBox box) {
- return parseTextBox(box, 0, Integer.MAX_VALUE);
- }
-
- protected class GT_GuiShortTextBox extends GT_GuiIntegerTextBox {
-
- private final int min;
- private final int max;
- private final Map<String, String> translation;
- private final Map<String, String> inverseTranslation;
-
- public GT_GuiShortTextBox(
- IGuiScreen gui,
- int id,
- int x,
- int y,
- int width,
- int height,
- int min,
- int max,
- Map<String, String> translate) {
- super(gui, id, x, y, width, height);
- this.min = min;
- this.max = max;
- this.translation = translate;
- this.inverseTranslation =
- translate.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey));
- }
-
- public GT_GuiShortTextBox(IGuiScreen gui, int id, int x, int y, int width, int height, int min, int max) {
- this(gui, id, x, y, width, height, min, max, new HashMap<>());
- }
-
- public GT_GuiShortTextBox(IGuiScreen gui, int id, int x, int y, int width, int height) {
- this(gui, id, x, y, width, height, 0, Integer.MAX_VALUE);
- }
-
- @Override
- public boolean textboxKeyTyped(char c, int key) {
- if (!super.textboxKeyTyped(c, key)) return false;
-
- String text = getText().trim();
- if (text.length() > 0) {
- setText(String.valueOf(parseTextBox(this, min, max)));
- }
-
- return true;
- }
-
- @Override
- public String getText() {
- String text = super.getText();
- return inverseTranslation.getOrDefault(text, text);
- }
-
- @Override
- public void setText(String text) {
- super.setText(translation.getOrDefault(text, text));
- }
- }
+ protected abstract boolean isShiftPrivateLeft();
}
}
diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java
index 772332820b..67b931dd99 100644
--- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java
+++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java
@@ -1,20 +1,23 @@
package gregtech.common.covers.redstone;
import com.google.common.io.ByteArrayDataInput;
-import gregtech.api.gui.widgets.GT_GuiIntegerTextBox;
+import com.gtnewhorizons.modularui.api.math.MathExpression;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
import gregtech.common.covers.GT_Cover_LiquidMeter;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_TextFieldWidget;
import io.netty.buffer.ByteBuf;
import java.util.UUID;
import javax.annotation.Nonnull;
-import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.world.World;
public class GT_Cover_WirelessFluidDetector
extends GT_Cover_AdvancedRedstoneTransmitterBase<GT_Cover_WirelessFluidDetector.FluidTransmitterData> {
@@ -114,72 +117,51 @@ public class GT_Cover_WirelessFluidDetector
}
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
- public Object getClientGUIImpl(
- byte aSide,
- int aCoverID,
- FluidTransmitterData aCoverVariable,
- ICoverable aTileEntity,
- EntityPlayer aPlayer,
- World aWorld) {
- return new FluidTransmitterGUI(aSide, aCoverID, aCoverVariable, aTileEntity);
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new WirelessFluidDetectorUIFactory(buildContext).createWindow();
}
- private class FluidTransmitterGUI extends TransmitterGUI<FluidTransmitterData> {
- private final GT_GuiIntegerTextBox thresholdBox;
-
- public FluidTransmitterGUI(
- byte aSide, int aCoverID, FluidTransmitterData aCoverVariable, ICoverable aTileEntity) {
- super(aSide, aCoverID, aCoverVariable, aTileEntity, 1, 2);
+ private class WirelessFluidDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory {
- thresholdBox = new GT_GuiShortTextBox(this, 1, 1 + startX, 2 + startY, spaceX * 5 - 4, 12);
+ public WirelessFluidDetectorUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
@Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.getFontRenderer()
- .drawString(GT_Utility.trans("222", "Fluid threshold"), startX + spaceX * 5, 4 + startY, textColor);
+ protected int getFrequencyRow() {
+ return 1;
}
@Override
- protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- update();
- thresholdBox.setFocused(true);
- }
-
- @Override
- public void onMouseWheel(int x, int y, int delta) {
- super.onMouseWheel(x, y, delta);
- if (thresholdBox.isFocused()) {
- genericMouseWheel(thresholdBox, delta, 0, Integer.MAX_VALUE);
- }
- }
-
- @Override
- public void applyTextBox(GT_GuiIntegerTextBox box) {
- if (box == thresholdBox) {
- coverVariable.threshold = parseTextBox(thresholdBox);
- }
-
- super.applyTextBox(box);
+ protected int getButtonRow() {
+ return 2;
}
@Override
- public void resetTextBox(GT_GuiIntegerTextBox box) {
- super.resetTextBox(box);
- if (box == thresholdBox) {
- thresholdBox.setText(Integer.toString(coverVariable.threshold));
- }
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ super.addUIWidgets(builder);
+ builder.widget(new TextWidget(GT_Utility.trans("222", "Fluid threshold"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 5, 4 + startY));
}
@Override
- protected void update() {
- super.update();
- resetTextBox(thresholdBox);
+ protected void addUIForDataController(CoverDataControllerWidget<FluidTransmitterData> controller) {
+ super.addUIForDataController(controller);
+ controller.addFollower(
+ new CoverDataFollower_TextFieldWidget<>(),
+ coverData -> String.valueOf(coverData.threshold),
+ (coverData, state) -> {
+ coverData.threshold = (int) MathExpression.parseMathExpression(state);
+ return coverData;
+ },
+ widget -> widget.setOnScrollNumbers()
+ .setNumbers(0, Integer.MAX_VALUE)
+ .setPos(1, 2)
+ .setSize(spaceX * 5 - 4, 12));
}
}
}
diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessItemDetector.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessItemDetector.java
index 46e428e1e9..620f0bc35e 100644
--- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessItemDetector.java
+++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessItemDetector.java
@@ -1,27 +1,31 @@
package gregtech.common.covers.redstone;
import com.google.common.io.ByteArrayDataInput;
-import gregtech.api.gui.widgets.GT_GuiFakeItemButton;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIntegerTextBox;
+import com.gtnewhorizons.modularui.api.forge.ItemStackHandler;
+import com.gtnewhorizons.modularui.api.math.MathExpression;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import com.gtnewhorizons.modularui.common.widget.textfield.BaseTextFieldWidget;
+import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
import gregtech.common.covers.GT_Cover_ItemMeter;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_TextFieldWidget;
+import gregtech.common.gui.modularui.widget.ItemWatcherSlotWidget;
import gregtech.common.tileentities.storage.GT_MetaTileEntity_DigitalChestBase;
import io.netty.buffer.ByteBuf;
-import java.util.Collections;
import java.util.UUID;
import javax.annotation.Nonnull;
-import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
-import net.minecraft.world.World;
public class GT_Cover_WirelessItemDetector
extends GT_Cover_AdvancedRedstoneTransmitterBase<GT_Cover_WirelessItemDetector.ItemTransmitterData> {
@@ -133,128 +137,126 @@ public class GT_Cover_WirelessItemDetector
}
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
@Override
- public Object getClientGUIImpl(
- byte aSide,
- int aCoverID,
- ItemTransmitterData aCoverVariable,
- ICoverable aTileEntity,
- EntityPlayer aPlayer,
- World aWorld) {
- return new ItemTransmitterGUI(aSide, aCoverID, aCoverVariable, aTileEntity);
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new WirelessItemDetectorUIFactory(buildContext).createWindow();
}
- private class ItemTransmitterGUI extends TransmitterGUI<ItemTransmitterData> {
- private final GT_GuiIntegerTextBox thresholdBox;
- private final GT_GuiIntegerTextBox slotBox;
-
- private final GT_GuiFakeItemButton fakeItemSlot;
+ private class WirelessItemDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory {
- private final int maxSlot;
+ private static final String ALL_TEXT = "All";
- public ItemTransmitterGUI(
- byte aSide, int aCoverID, ItemTransmitterData aCoverVariable, ICoverable aTileEntity) {
- super(aSide, aCoverID, aCoverVariable, aTileEntity, 0, 1);
+ private int maxSlot;
+ private final ItemStackHandler targetSlotHandler = new ItemStackHandler(1);
- if (tile instanceof TileEntity
- && !super.tile.isDead()
- && tile instanceof IGregTechTileEntity
- && !(((IGregTechTileEntity) tile).getMetaTileEntity()
- instanceof GT_MetaTileEntity_DigitalChestBase)) {
- maxSlot = tile.getSizeInventory() - 1;
- } else {
- maxSlot = -1;
- }
+ public WirelessItemDetectorUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
+ }
- thresholdBox = new GT_GuiShortTextBox(
- this, 1, 1 + startX, 2 + startY + spaceY * 2, spaceX * 5 - 4, 12, 0, getMaxCount());
- slotBox = new GT_GuiShortTextBox(
- this,
- 2,
- 1 + startX,
- 2 + startY + spaceY * 3,
- spaceX * 4 - 8,
- 12,
- -1,
- maxSlot,
- Collections.singletonMap("-1", "All"));
- fakeItemSlot =
- new GT_GuiFakeItemButton(this, startX + spaceX * 4 - 1, startY + spaceY * 3, GT_GuiIcon.SLOT_GRAY);
-
- slotBox.setEnabled(maxSlot >= 0);
- fakeItemSlot.setMimicSlot(true);
+ @Override
+ protected int getFrequencyRow() {
+ return 0;
}
@Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("221", "Item threshold"),
- startX + spaceX * 5,
- 4 + startY + spaceY * 2,
- textColor);
- this.getFontRenderer()
- .drawString(
- GT_Utility.trans("254.0", "Detect Slot"),
- startX + spaceX * 5,
- 4 + startY + spaceY * 3,
- textColor);
+ protected int getButtonRow() {
+ return 1;
}
@Override
- public void onMouseWheel(int x, int y, int delta) {
- super.onMouseWheel(x, y, delta);
- if (thresholdBox.isFocused()) {
- genericMouseWheel(thresholdBox, delta, 0, getMaxCount(), 1, 10, 64);
- } else if (slotBox.isFocused()) {
- genericMouseWheel(slotBox, delta, -1, maxSlot, 1, 5, 50);
- }
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ maxSlot = getMaxSlot();
+ super.addUIWidgets(builder);
+ builder.widget(new ItemWatcherSlotWidget()
+ .setGetter(this::getTargetItem)
+ .setPos(startX + spaceX * 4 - 1, startY + spaceY * 3))
+ .widget(new TextWidget(GT_Utility.trans("221", "Item threshold"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 5, 4 + startY + spaceY * 2))
+ .widget(new TextWidget(GT_Utility.trans("254.0", "Detect Slot"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * 5, 4 + startY + spaceY * 3));
}
@Override
- public void applyTextBox(GT_GuiIntegerTextBox box) {
- if (box == thresholdBox) {
- coverVariable.threshold = parseTextBox(thresholdBox, 0, getMaxCount());
- } else if (box == slotBox) {
- coverVariable.slot = parseTextBox(slotBox, -1, maxSlot);
+ protected void addUIForDataController(CoverDataControllerWidget<ItemTransmitterData> controller) {
+ super.addUIForDataController(controller);
+ controller
+ .addFollower(
+ new CoverDataFollower_TextFieldWidget<>(),
+ coverData -> String.valueOf(coverData.threshold),
+ (coverData, state) -> {
+ coverData.threshold = (int) MathExpression.parseMathExpression(state);
+ return coverData;
+ },
+ widget -> widget.setOnScrollNumbers(1, 10, 64)
+ .setNumbers(() -> 0, this::getMaxItemCount)
+ .setPos(1, 2 + spaceY * 2)
+ .setSize(spaceX * 5 - 4, 12))
+ .addFollower(
+ new CoverDataFollower_TextFieldWidget<>(),
+ coverData -> getSlotTextFieldContent(coverData.slot),
+ (coverData, state) -> {
+ coverData.slot = getIntFromText(state);
+ return coverData;
+ },
+ widget -> widget.setOnScrollText()
+ .setValidator(val -> {
+ final int valSlot = getIntFromText(val);
+ if (valSlot > -1) {
+ return TextFieldWidget.format.format(Math.min(valSlot, maxSlot));
+ } else {
+ return ALL_TEXT;
+ }
+ })
+ .setPattern(BaseTextFieldWidget.NATURAL_NUMS)
+ .setPos(1, 2 + spaceY * 3)
+ .setSize(spaceX * 4 - 8, 12));
+ }
+
+ private int getMaxSlot() {
+ final ICoverable tile = getUIBuildContext().getTile();
+ if (tile instanceof TileEntity
+ && !tile.isDead()
+ && tile instanceof IGregTechTileEntity
+ && !(((IGregTechTileEntity) tile).getMetaTileEntity()
+ instanceof GT_MetaTileEntity_DigitalChestBase)) {
+ return tile.getSizeInventory() - 1;
+ } else {
+ return -1;
}
+ }
- super.applyTextBox(box);
+ private int getMaxItemCount() {
+ return maxSlot > 0 ? maxSlot * 64 : Integer.MAX_VALUE;
}
- @Override
- public void resetTextBox(GT_GuiIntegerTextBox box) {
- super.resetTextBox(box);
- if (box == thresholdBox) {
- thresholdBox.setText(Integer.toString(coverVariable.threshold));
- } else if (box == slotBox) {
- slotBox.setText(Integer.toString(coverVariable.slot));
+ private int getIntFromText(String text) {
+ try {
+ return (int) MathExpression.parseMathExpression(text, -1);
+ } catch (Exception e) {
+ return -1;
}
}
- @Override
- protected void update() {
- super.update();
- resetTextBox(thresholdBox);
- resetTextBox(slotBox);
+ private String getSlotTextFieldContent(int val) {
+ return val < 0 ? ALL_TEXT : String.valueOf(val);
+ }
- if (coverVariable.slot >= 0
+ private ItemStack getTargetItem() {
+ final ICoverable tile = getUIBuildContext().getTile();
+ final ItemTransmitterData coverVariable = getCoverData();
+ if (coverVariable != null
+ && coverVariable.slot >= 0
&& tile instanceof TileEntity
&& !tile.isDead()
&& tile.getSizeInventory() >= coverVariable.slot) {
- ItemStack itemStack = tile.getStackInSlot(coverVariable.slot);
- fakeItemSlot.setItem(itemStack);
+ return tile.getStackInSlot(coverVariable.slot);
} else {
- fakeItemSlot.setItem(null);
+ return null;
}
}
-
- private int getMaxCount() {
- return maxSlot > 0 ? maxSlot * 64 : Integer.MAX_VALUE;
- }
}
}
diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessMaintenanceDetector.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessMaintenanceDetector.java
index 2505ce8d80..598e289c66 100644
--- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessMaintenanceDetector.java
+++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessMaintenanceDetector.java
@@ -1,8 +1,10 @@
package gregtech.common.covers.redstone;
import com.google.common.io.ByteArrayDataInput;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiIconCheckButton;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.ICoverable;
@@ -11,17 +13,15 @@ import gregtech.api.items.GT_MetaGenerated_Tool;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
import gregtech.api.util.ISerializableObject;
import gregtech.common.covers.GT_Cover_NeedMaintainance;
+import gregtech.common.gui.modularui.widget.CoverDataControllerWidget;
+import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget;
import io.netty.buffer.ByteBuf;
import java.util.UUID;
import javax.annotation.Nonnull;
-import net.minecraft.client.gui.GuiButton;
-import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.util.ResourceLocation;
-import net.minecraft.world.World;
public class GT_Cover_WirelessMaintenanceDetector
extends GT_Cover_AdvancedRedstoneTransmitterBase<
@@ -188,82 +188,65 @@ public class GT_Cover_WirelessMaintenanceDetector
}
}
- /**
- * GUI Stuff
- */
+ // GUI stuff
+
private static final String[] extraTexts = new String[] {
"No Issues", ">= 1 Issue", ">= 2 Issues", ">= 3 Issues",
">= 4 Issues", ">= 5 Issues", "Rotor < 80%", "Rotor < 100%"
};
@Override
- public Object getClientGUIImpl(
- byte aSide,
- int aCoverID,
- MaintenanceTransmitterData aCoverVariable,
- ICoverable aTileEntity,
- EntityPlayer aPlayer,
- World aWorld) {
- return new MaintenanceTransmitterGUI(aSide, aCoverID, aCoverVariable, aTileEntity);
+ public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) {
+ return new WirelessMaintenanceDetectorUIFactory(buildContext).createWindow();
}
- private class MaintenanceTransmitterGUI extends TransmitterGUI<MaintenanceTransmitterData> {
-
- private static final String guiTexturePath = "gregtech:textures/gui/GuiCoverBig.png";
- private static final int maintenanceButtonIdStart = 2;
-
- public MaintenanceTransmitterGUI(
- byte aSide, int aCoverID, MaintenanceTransmitterData aCoverVariable, ICoverable aTileEntity) {
- super(aSide, aCoverID, aCoverVariable, aTileEntity);
- this.mGUIbackgroundLocation = new ResourceLocation(guiTexturePath);
- this.gui_height = 143;
-
- for (int i = 0; i < 8; ++i) {
- new GT_GuiIconCheckButton(
- this,
- maintenanceButtonIdStart + i,
- startX + spaceX * (i % 2 == 0 ? 0 : 6),
- startY + spaceY * (2 + i / 2),
- GT_GuiIcon.CHECKMARK,
- null);
- }
+ private class WirelessMaintenanceDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory {
+
+ public WirelessMaintenanceDetectorUIFactory(GT_CoverUIBuildContext buildContext) {
+ super(buildContext);
}
@Override
- public void drawExtras(int mouseX, int mouseY, float parTicks) {
- super.drawExtras(mouseX, mouseY, parTicks);
- for (int i = 0; i < 8; ++i) {
- this.getFontRenderer()
- .drawString(
- extraTexts[i],
- startX + spaceX * (i % 2 == 0 ? 1 : 7),
- 4 + startY + spaceY * (2 + i / 2),
- textColor);
- }
+ protected int getGUIHeight() {
+ return 143;
}
@Override
- protected void update() {
- super.update();
- updateButtons();
+ protected int getFrequencyRow() {
+ return 0;
}
- private void updateButtons() {
- GT_GuiIconCheckButton button;
- for (int i = maintenanceButtonIdStart; i < maintenanceButtonIdStart + 8; ++i) {
- button = (GT_GuiIconCheckButton) this.buttonList.get(i);
- button.enabled = (button.id - maintenanceButtonIdStart) != coverVariable.mode.ordinal();
- button.setChecked(!button.enabled);
- }
+ @Override
+ protected int getButtonRow() {
+ return 1;
}
@Override
- public void buttonClicked(GuiButton btn) {
- if (btn.id >= maintenanceButtonIdStart && btn.enabled) {
- coverVariable.mode = MaintenanceMode.values()[btn.id - maintenanceButtonIdStart];
+ protected void addUIWidgets(ModularWindow.Builder builder) {
+ super.addUIWidgets(builder);
+ for (int i = 0; i < 8; i++) {
+ builder.widget(new TextWidget(extraTexts[i])
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(startX + spaceX * (i % 2 == 0 ? 1 : 7), 4 + startY + spaceY * (2 + i / 2)));
}
+ }
- super.buttonClicked(btn);
+ @Override
+ protected void addUIForDataController(CoverDataControllerWidget<MaintenanceTransmitterData> controller) {
+ super.addUIForDataController(controller);
+ for (int i = 0; i < 8; i++) {
+ final int index = i;
+ controller.addFollower(
+ CoverDataFollower_ToggleButtonWidget.ofDisableable(),
+ coverData -> coverData.mode == MaintenanceMode.values()[index],
+ (coverData, state) -> {
+ coverData.mode = MaintenanceMode.values()[index];
+ return coverData;
+ },
+ widget -> widget.setToggleTexture(
+ GT_UITextures.OVERLAY_BUTTON_CHECKMARK, GT_UITextures.TRANSPARENT)
+ .setPos(spaceX * (index % 2 == 0 ? 0 : 6), spaceY * (2 + index / 2)));
+ }
}
}
}
diff --git a/src/main/java/gregtech/common/gui/GT_ContainerVolumetricFlask.java b/src/main/java/gregtech/common/gui/GT_ContainerVolumetricFlask.java
deleted file mode 100644
index 2f8fd2a356..0000000000
--- a/src/main/java/gregtech/common/gui/GT_ContainerVolumetricFlask.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.common.items.GT_VolumetricFlask;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.Container;
-import net.minecraft.item.ItemStack;
-
-public final class GT_ContainerVolumetricFlask extends Container {
- ItemStack flask;
-
- public GT_ContainerVolumetricFlask(InventoryPlayer inventoryPlayer) {
- flask = inventoryPlayer.getCurrentItem();
- }
-
- @Override
- public boolean canInteractWith(EntityPlayer p) {
- return (flask != null) && (flask.stackSize > 0) && ((flask.getItem() instanceof GT_VolumetricFlask));
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_AdvDebugStructureWriter.java b/src/main/java/gregtech/common/gui/GT_Container_AdvDebugStructureWriter.java
deleted file mode 100644
index 15837364f5..0000000000
--- a/src/main/java/gregtech/common/gui/GT_Container_AdvDebugStructureWriter.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package gregtech.common.gui;
-
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-import gregtech.api.gui.GT_ContainerMetaTile_Machine;
-import gregtech.api.gui.GT_Slot_Holo;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.common.tileentities.debug.GT_MetaTileEntity_AdvDebugStructureWriter;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.ICrafting;
-import net.minecraft.inventory.Slot;
-import net.minecraft.item.ItemStack;
-
-public class GT_Container_AdvDebugStructureWriter extends GT_ContainerMetaTile_Machine {
- public short[] numbers = new short[6];
- public boolean transpose;
- public boolean showHighlightBox;
-
- public Slot printSlot;
- public Slot transposeSlot;
- public Slot highlightSlot;
-
- public GT_Container_AdvDebugStructureWriter(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(aInventoryPlayer, aTileEntity);
- }
-
- @Override
- public void addSlots(InventoryPlayer aInventoryPlayer) {
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 8, 5, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 8, 23, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 8, 41, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 8, 63, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 8, 81, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 8, 99, false, false, 1));
-
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 26, 5, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 26, 23, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 26, 41, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 26, 63, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 26, 81, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 26, 99, false, false, 1));
-
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 152, 5, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 152, 23, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 152, 41, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 152, 63, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 152, 81, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 152, 99, false, false, 1));
-
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 134, 5, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 134, 23, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 134, 41, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 134, 63, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 134, 81, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 134, 99, false, false, 1));
-
- printSlot = addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 12, 129, false, false, 1));
- transposeSlot = addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 33, 129, false, false, 1));
- highlightSlot = addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 54, 129, false, false, 1));
- }
-
- public boolean doesBindPlayerInventory() {
- return false;
- }
-
- @Override
- public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
- if (aSlotIndex < 0) {
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
- Slot tSlot = (Slot) inventorySlots.get(aSlotIndex);
- if (tSlot != null && mTileEntity.getMetaTileEntity() != null) {
- GT_MetaTileEntity_AdvDebugStructureWriter dsw =
- (GT_MetaTileEntity_AdvDebugStructureWriter) mTileEntity.getMetaTileEntity();
- if (dsw.numbers == null) {
- return null;
- }
- switch (aSlotIndex) {
- case 0:
- dsw.numbers[0] -= aShifthold == 1 ? 512 : 64;
- return null;
- case 1:
- dsw.numbers[1] -= aShifthold == 1 ? 512 : 64;
- return null;
- case 2:
- dsw.numbers[2] -= aShifthold == 1 ? 512 : 64;
- return null;
- case 3:
- dsw.numbers[3] -= aShifthold == 1 ? 512 : 64;
- return null;
- case 4:
- dsw.numbers[4] -= aShifthold == 1 ? 512 : 64;
- return null;
- case 5:
- dsw.numbers[5] -= aShifthold == 1 ? 512 : 64;
- return null;
- case 6:
- dsw.numbers[0] -= aShifthold == 1 ? 16 : 1;
- return null;
- case 7:
- dsw.numbers[1] -= aShifthold == 1 ? 16 : 1;
- return null;
- case 8:
- dsw.numbers[2] -= aShifthold == 1 ? 16 : 1;
- return null;
- case 9:
- dsw.numbers[3] -= aShifthold == 1 ? 16 : 1;
- return null;
- case 10:
- dsw.numbers[4] -= aShifthold == 1 ? 16 : 1;
- return null;
- case 11:
- dsw.numbers[5] -= aShifthold == 1 ? 16 : 1;
- return null;
- case 12:
- dsw.numbers[0] += aShifthold == 1 ? 512 : 64;
- return null;
- case 13:
- dsw.numbers[1] += aShifthold == 1 ? 512 : 64;
- return null;
- case 14:
- dsw.numbers[2] += aShifthold == 1 ? 512 : 64;
- return null;
- case 15:
- dsw.numbers[3] += aShifthold == 1 ? 512 : 64;
- return null;
- case 16:
- dsw.numbers[4] += aShifthold == 1 ? 512 : 64;
- return null;
- case 17:
- dsw.numbers[5] += aShifthold == 1 ? 512 : 64;
- return null;
- case 18:
- dsw.numbers[0] += aShifthold == 1 ? 16 : 1;
- return null;
- case 19:
- dsw.numbers[1] += aShifthold == 1 ? 16 : 1;
- return null;
- case 20:
- dsw.numbers[2] += aShifthold == 1 ? 16 : 1;
- return null;
- case 21:
- dsw.numbers[3] += aShifthold == 1 ? 16 : 1;
- return null;
- case 22:
- dsw.numbers[4] += aShifthold == 1 ? 16 : 1;
- return null;
- case 23:
- dsw.numbers[5] += aShifthold == 1 ? 16 : 1;
- return null;
-
- case 24:
- if (dsw.getBaseMetaTileEntity().isServerSide()) {
- dsw.printStructure(aPlayer);
- }
- return null;
- case 25:
- dsw.transpose = !dsw.transpose;
- return null;
- case 26:
- dsw.showHighlightBox = !dsw.showHighlightBox;
- return null;
- }
- }
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
-
- @Override
- public void detectAndSendChanges() {
- super.detectAndSendChanges();
- if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) {
- return;
- }
- GT_MetaTileEntity_AdvDebugStructureWriter dsw =
- (GT_MetaTileEntity_AdvDebugStructureWriter) mTileEntity.getMetaTileEntity();
- if (numbers != null) {
- System.arraycopy(dsw.numbers, 0, numbers, 0, dsw.numbers.length);
- }
-
- transpose = dsw.transpose;
- showHighlightBox = dsw.showHighlightBox;
-
- for (Object crafter : crafters) {
- ICrafting var1 = (ICrafting) crafter;
- if (numbers != null) {
- var1.sendProgressBarUpdate(this, 100, numbers[0]);
- var1.sendProgressBarUpdate(this, 101, numbers[1]);
- var1.sendProgressBarUpdate(this, 102, numbers[2]);
- var1.sendProgressBarUpdate(this, 103, numbers[3]);
- var1.sendProgressBarUpdate(this, 104, numbers[4]);
- var1.sendProgressBarUpdate(this, 105, numbers[5]);
- var1.sendProgressBarUpdate(this, 106, transpose ? 1 : 0);
- var1.sendProgressBarUpdate(this, 107, showHighlightBox ? 1 : 0);
- }
- }
- }
-
- @Override
- @SideOnly(Side.CLIENT)
- public void updateProgressBar(int par1, int par2) {
- super.updateProgressBar(par1, par2);
- if (par1 == 106) {
- transpose = par2 > 0;
- } else if (par1 == 107) {
- showHighlightBox = par2 > 0;
- } else {
- if (numbers != null && par1 >= 100 && par1 <= 105) {
- numbers[par1 - 100] = (short) par2;
- }
- }
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_Boiler.java b/src/main/java/gregtech/common/gui/GT_Container_Boiler.java
deleted file mode 100644
index a29e732f07..0000000000
--- a/src/main/java/gregtech/common/gui/GT_Container_Boiler.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package gregtech.common.gui;
-
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-import gregtech.api.gui.GT_ContainerMetaTile_Machine;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.common.tileentities.boilers.GT_MetaTileEntity_Boiler;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.ICrafting;
-import net.minecraft.inventory.Slot;
-
-public class GT_Container_Boiler extends GT_ContainerMetaTile_Machine {
- public int mWaterAmount = 0;
- public int mSteamAmount = 0;
- public int mProcessingEnergy = 0;
- public int mTemperature = 2;
-
- public GT_Container_Boiler(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(aInventoryPlayer, aTileEntity);
- }
-
- @Override
- public void addSlots(InventoryPlayer aInventoryPlayer) {
- addSlotToContainer(new Slot(this.mTileEntity, 2, 116, 62));
- addSlotToContainer(new Slot(this.mTileEntity, 0, 44, 26));
- addSlotToContainer(new Slot(this.mTileEntity, 1, 44, 62));
- addSlotToContainer(new Slot(this.mTileEntity, 3, 116, 26));
- }
-
- @Override
- public int getSlotCount() {
- return 4;
- }
-
- @Override
- public int getShiftClickSlotCount() {
- return 1;
- }
-
- @Override
- public void detectAndSendChanges() {
- super.detectAndSendChanges();
- if ((this.mTileEntity.isClientSide()) || (this.mTileEntity.getMetaTileEntity() == null)) {
- return;
- }
-
- // GT_MetaTileEntity_Boiler.getCapacity() is used for both water and steam capacity.
- int capacity = ((GT_MetaTileEntity_Boiler) this.mTileEntity.getMetaTileEntity()).getCapacity();
-
- this.mTemperature = ((GT_MetaTileEntity_Boiler) this.mTileEntity.getMetaTileEntity()).mTemperature;
- this.mProcessingEnergy = ((GT_MetaTileEntity_Boiler) this.mTileEntity.getMetaTileEntity()).mProcessingEnergy;
- this.mSteamAmount = (((GT_MetaTileEntity_Boiler) this.mTileEntity.getMetaTileEntity()).mSteam == null
- ? 0
- : ((GT_MetaTileEntity_Boiler) this.mTileEntity.getMetaTileEntity()).mSteam.amount);
- this.mWaterAmount = (((GT_MetaTileEntity_Boiler) this.mTileEntity.getMetaTileEntity()).mFluid == null
- ? 0
- : ((GT_MetaTileEntity_Boiler) this.mTileEntity.getMetaTileEntity()).mFluid.amount);
-
- this.mTemperature = Math.min(
- 54,
- Math.max(
- 0,
- this.mTemperature
- * 54
- / (((GT_MetaTileEntity_Boiler) this.mTileEntity.getMetaTileEntity()).maxProgresstime()
- - 10)));
- this.mSteamAmount = Math.min(54, Math.max(0, this.mSteamAmount * 54 / (capacity - 100)));
- this.mWaterAmount = Math.min(54, Math.max(0, this.mWaterAmount * 54 / (capacity - 100)));
- this.mProcessingEnergy =
- Math.min(14, Math.max(this.mProcessingEnergy > 0 ? 1 : 0, this.mProcessingEnergy * 14 / 1000));
-
- for (Object crafter : this.crafters) {
- ICrafting player = (ICrafting) crafter;
- player.sendProgressBarUpdate(this, 100, this.mTemperature);
- player.sendProgressBarUpdate(this, 101, this.mProcessingEnergy);
- player.sendProgressBarUpdate(this, 102, this.mSteamAmount);
- player.sendProgressBarUpdate(this, 103, this.mWaterAmount);
- }
- }
-
- @Override
- @SideOnly(Side.CLIENT)
- public void updateProgressBar(int id, int value) {
- super.updateProgressBar(id, value);
- switch (id) {
- case 100:
- this.mTemperature = value;
- break;
- case 101:
- this.mProcessingEnergy = value;
- break;
- case 102:
- this.mSteamAmount = value;
- break;
- case 103:
- this.mWaterAmount = value;
- }
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_BronzeBlastFurnace.java b/src/main/java/gregtech/common/gui/GT_Container_BronzeBlastFurnace.java
deleted file mode 100644
index ac2f18f561..0000000000
--- a/src/main/java/gregtech/common/gui/GT_Container_BronzeBlastFurnace.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.api.gui.GT_ContainerMetaTile_Machine;
-import gregtech.api.gui.GT_Slot_Output;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.Slot;
-
-public class GT_Container_BronzeBlastFurnace extends GT_ContainerMetaTile_Machine {
- public GT_Container_BronzeBlastFurnace(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(aInventoryPlayer, aTileEntity);
- }
-
- @Override
- public void addSlots(InventoryPlayer aInventoryPlayer) {
- addSlotToContainer(new Slot(this.mTileEntity, 0, 34, 16));
- addSlotToContainer(new Slot(this.mTileEntity, 1, 34, 34));
- addSlotToContainer(new GT_Slot_Output(this.mTileEntity, 2, 86, 25));
- addSlotToContainer(new GT_Slot_Output(this.mTileEntity, 3, 104, 25));
- }
-
- @Override
- public int getSlotCount() {
- return 4;
- }
-
- @Override
- public int getShiftClickSlotCount() {
- return 2;
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_ChestBuffer.java b/src/main/java/gregtech/common/gui/GT_Container_ChestBuffer.java
deleted file mode 100644
index afa22a738b..0000000000
--- a/src/main/java/gregtech/common/gui/GT_Container_ChestBuffer.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.api.gui.GT_ContainerMetaTile_Machine;
-import gregtech.api.gui.GT_Slot_Holo;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.tileentities.automation.GT_MetaTileEntity_ChestBuffer;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.Slot;
-import net.minecraft.item.ItemStack;
-
-public class GT_Container_ChestBuffer extends GT_ContainerMetaTile_Machine {
- public GT_Container_ChestBuffer(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(aInventoryPlayer, aTileEntity);
- }
-
- @Override
- public void addSlots(InventoryPlayer aInventoryPlayer) {
- for (int y = 0; y < 3; y++) {
- for (int x = 0; x < 9; x++) {
- addSlotToContainer(new Slot(this.mTileEntity, x + y * 9, 8 + x * 18, 5 + y * 18));
- }
- }
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 27, 8, 63, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 27, 26, 63, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 27, 44, 63, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 27, 62, 63, false, true, 1));
- }
-
- @Override
- public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
- if (aSlotIndex < 27) {
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
- Slot tSlot = (Slot) this.inventorySlots.get(aSlotIndex);
- if (tSlot != null) {
- if (this.mTileEntity.getMetaTileEntity() == null) {
- return null;
- }
- if (aSlotIndex == 27) {
- ((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bOutput =
- (!((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bOutput);
- if (((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bOutput) {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("116", "Emit Energy to Outputside"));
- } else {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("117", "Don't emit Energy"));
- }
- return null;
- }
- if (aSlotIndex == 28) {
- ((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull =
- (!((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull);
- if (((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull) {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("118", "Emit Redstone if no Slot is free"));
- } else {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("119", "Don't emit Redstone"));
- }
- return null;
- }
- if (aSlotIndex == 29) {
- ((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bInvert =
- (!((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bInvert);
- if (((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bInvert) {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("120", "Invert Redstone"));
- } else {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("121", "Don't invert Redstone"));
- }
- return null;
- }
- if (aSlotIndex == 30) {
- ((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bStockingMode =
- (!((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bStockingMode);
- if (((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bStockingMode) {
- GT_Utility.sendChatToPlayer(
- aPlayer,
- GT_Utility.trans(
- "217",
- "Stocking mode. Keeps this many items in destination input slots. This mode can be server unfriendly."));
- } else {
- GT_Utility.sendChatToPlayer(
- aPlayer,
- GT_Utility.trans(
- "218",
- "Transfer size mode. Add exactly this many items in destination input slots as long as there is room."));
- }
- return null;
- }
- }
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
-
- @Override
- public int getSlotCount() {
- return 27;
- }
-
- @Override
- public int getShiftClickSlotCount() {
- return 27;
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_Filter.java b/src/main/java/gregtech/common/gui/GT_Container_Filter.java
deleted file mode 100644
index d4aabe0cb4..0000000000
--- a/src/main/java/gregtech/common/gui/GT_Container_Filter.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.api.gui.GT_ContainerMetaTile_Machine;
-import gregtech.api.gui.GT_Slot_Holo;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.tileentities.automation.GT_MetaTileEntity_Filter;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.Slot;
-import net.minecraft.item.ItemStack;
-
-public class GT_Container_Filter extends GT_ContainerMetaTile_Machine {
- public GT_Container_Filter(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(aInventoryPlayer, aTileEntity);
- }
-
- @Override
- public void addSlots(InventoryPlayer aInventoryPlayer) {
- addSlotToContainer(new Slot(this.mTileEntity, 0, 98, 5));
- addSlotToContainer(new Slot(this.mTileEntity, 1, 116, 5));
- addSlotToContainer(new Slot(this.mTileEntity, 2, 134, 5));
- addSlotToContainer(new Slot(this.mTileEntity, 3, 98, 23));
- addSlotToContainer(new Slot(this.mTileEntity, 4, 116, 23));
- addSlotToContainer(new Slot(this.mTileEntity, 5, 134, 23));
- addSlotToContainer(new Slot(this.mTileEntity, 6, 98, 41));
- addSlotToContainer(new Slot(this.mTileEntity, 7, 116, 41));
- addSlotToContainer(new Slot(this.mTileEntity, 8, 134, 41));
-
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 9, 18, 6, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 10, 35, 6, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 11, 52, 6, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 12, 18, 23, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 13, 35, 23, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 14, 52, 23, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 15, 18, 40, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 16, 35, 40, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 17, 52, 40, false, true, 1));
-
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 8, 63, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 26, 63, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 44, 63, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 62, 63, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 80, 63, false, true, 1));
- }
-
- @Override
- public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
- if (aSlotIndex < 9) {
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
- Slot tSlot = (Slot) this.inventorySlots.get(aSlotIndex);
- if (tSlot != null) {
- if (this.mTileEntity.getMetaTileEntity() == null) {
- return null;
- }
- if (aSlotIndex < 18) {
- ItemStack tStack = aPlayer.inventory.getItemStack();
- if (tStack == null) {
- tStack = tSlot.getStack();
- if (aMouseclick == 0) {
- tSlot.putStack(null);
- } else if (tStack != null) {
- tStack = GT_Utility.copyAmountAndMetaData(tStack.stackSize, 32767, tStack);
- if (GT_Utility.isStackInvalid(tStack)) {
- tStack = null;
- }
- }
- } else {
- tSlot.putStack(GT_Utility.copyAmount(1L, new Object[] {tStack}));
- }
- return null;
- }
- if (aSlotIndex == 18) {
- ((GT_MetaTileEntity_Filter) this.mTileEntity.getMetaTileEntity()).bOutput =
- (!((GT_MetaTileEntity_Filter) this.mTileEntity.getMetaTileEntity()).bOutput);
- if (((GT_MetaTileEntity_Filter) this.mTileEntity.getMetaTileEntity()).bOutput) {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("116", "Emit Energy to Outputside"));
- } else {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("117", "Don't emit Energy"));
- }
- return null;
- }
- if (aSlotIndex == 19) {
- ((GT_MetaTileEntity_Filter) this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull =
- (!((GT_MetaTileEntity_Filter) this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull);
- if (((GT_MetaTileEntity_Filter) this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull) {
- GT_Utility.sendChatToPlayer(
- aPlayer, GT_Utility.trans("122", "Emit Redstone if slots contain something"));
- } else {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("123", "Don't emit Redstone"));
- }
- return null;
- }
- if (aSlotIndex == 20) {
- ((GT_MetaTileEntity_Filter) this.mTileEntity.getMetaTileEntity()).bInvert =
- (!((GT_MetaTileEntity_Filter) this.mTileEntity.getMetaTileEntity()).bInvert);
- if (((GT_MetaTileEntity_Filter) this.mTileEntity.getMetaTileEntity()).bInvert) {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("120", "Invert Redstone"));
- } else {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("121", "Don't invert Redstone"));
- }
- return null;
- }
- if (aSlotIndex == 21) {
- ((GT_MetaTileEntity_Filter) this.mTileEntity.getMetaTileEntity()).bInvertFilter =
- (!((GT_MetaTileEntity_Filter) this.mTileEntity.getMetaTileEntity()).bInvertFilter);
- if (((GT_MetaTileEntity_Filter) this.mTileEntity.getMetaTileEntity()).bInvertFilter) {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("124", "Invert Filter"));
- } else {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("125", "Don't invert Filter"));
- }
- return null;
- }
- if (aSlotIndex == 22) {
- ((GT_MetaTileEntity_Filter) this.mTileEntity.getMetaTileEntity()).bIgnoreNBT =
- (!((GT_MetaTileEntity_Filter) this.mTileEntity.getMetaTileEntity()).bIgnoreNBT);
- if (((GT_MetaTileEntity_Filter) this.mTileEntity.getMetaTileEntity()).bIgnoreNBT) {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("126", "Ignore NBT"));
- } else {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("127", "NBT has to match"));
- }
- return null;
- }
- }
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
-
- @Override
- public int getSlotCount() {
- return 9;
- }
-
- @Override
- public int getShiftClickSlotCount() {
- return 9;
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_IndustrialApiary.java b/src/main/java/gregtech/common/gui/GT_Container_IndustrialApiary.java
deleted file mode 100644
index 18cbee5d9c..0000000000
--- a/src/main/java/gregtech/common/gui/GT_Container_IndustrialApiary.java
+++ /dev/null
@@ -1,249 +0,0 @@
-package gregtech.common.gui;
-
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-import forestry.api.core.ForestryAPI;
-import forestry.api.core.IErrorState;
-import gregtech.api.gui.GT_ContainerMetaTile_Machine;
-import gregtech.api.gui.GT_Slot_Holo;
-import gregtech.api.gui.GT_Slot_Output;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.util.GT_ApiaryUpgrade;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_IndustrialApiary;
-import java.util.ArrayList;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.ICrafting;
-import net.minecraft.inventory.IInventory;
-import net.minecraft.inventory.Slot;
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.EnumChatFormatting;
-import net.minecraft.util.StatCollector;
-
-public class GT_Container_IndustrialApiary extends GT_ContainerMetaTile_Machine {
-
- GT_Slot_Holo slotItemTransferToggle;
- GT_Slot_Holo slotSpeedToggle;
- GT_Slot_Holo slotCancelProcess;
- Slot slotBattery;
- Slot slotSpecial;
- ArrayList<Slot> slotUpgrade;
-
- boolean mItemTransfer;
- boolean mStuttering;
-
- int mSpeed = 0; // scale 0 - 8
- boolean mLockedSpeed = true;
-
- ArrayList<String> mErrorStates = new ArrayList<>(50);
-
- public GT_Container_IndustrialApiary(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(aInventoryPlayer, aTileEntity);
- }
-
- @Override
- public void addSlots(InventoryPlayer aInventoryPlayer) {
- addSlotToContainer(slotItemTransferToggle = new GT_Slot_Holo(mTileEntity, 0, 8, 63, false, true, 1));
- addSlotToContainer(slotSpeedToggle = new GT_Slot_Holo(mTileEntity, 0, 26, 63, false, true, 1));
- addSlotToContainer(slotCancelProcess = new GT_Slot_Holo(mTileEntity, 0, 8, 27, false, true, 1));
- int tStartIndex = 5;
-
- addSlotToContainer(new ApiarySlot(this.mTileEntity, tStartIndex++, 37, 22));
- addSlotToContainer(new ApiarySlot(this.mTileEntity, tStartIndex++, 37, 42));
-
- slotUpgrade = new ArrayList<>(4);
- slotUpgrade.add(addSlotToContainer(new ApiarySlot(this.mTileEntity, tStartIndex++, 62, 24)));
- slotUpgrade.add(addSlotToContainer(new ApiarySlot(this.mTileEntity, tStartIndex++, 80, 24)));
- slotUpgrade.add(addSlotToContainer(new ApiarySlot(this.mTileEntity, tStartIndex++, 62, 42)));
- slotUpgrade.add(addSlotToContainer(new ApiarySlot(this.mTileEntity, tStartIndex++, 80, 42)));
-
- for (int i = 107; i <= 143; i += 18)
- for (int j = 6; j <= 42; j += 18)
- addSlotToContainer(new GT_Slot_Output(this.mTileEntity, tStartIndex++, i, j));
-
- addSlotToContainer(slotBattery = new Slot(mTileEntity, 1, 80, 63));
- addSlotToContainer(slotSpecial = new Slot(mTileEntity, 3, 125, 63));
- }
-
- @Override
- public ItemStack slotClick(int aSlotNumber, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
- if (mTileEntity.getMetaTileEntity() == null) return null;
- GT_MetaTileEntity_IndustrialApiary machine = getMachine();
- if (machine == null) return null;
- switch (aSlotNumber) {
- case 0:
- machine.mItemTransfer = !machine.mItemTransfer;
- return null;
- case 1:
- if (aMouseclick == 0) {
- if (machine.mLockedSpeed) return null;
- if (aShifthold == 0) {
- machine.mSpeed++;
- if (machine.mSpeed > machine.getMaxSpeed()) machine.mSpeed = 0;
- } else if (aShifthold == 1) {
- machine.mSpeed--;
- if (machine.mSpeed < 0) machine.mSpeed = machine.getMaxSpeed();
- }
- } else if (aMouseclick == 1) {
- machine.mLockedSpeed = !machine.mLockedSpeed;
- if (machine.mLockedSpeed) machine.mSpeed = machine.getMaxSpeed();
- }
- return null;
- case 2:
- machine.cancelProcess();
- detectAndSendChanges();
- return null;
- }
-
- if (!(aSlotNumber >= getSlotStartIndex() + 2 && aSlotNumber < getSlotStartIndex() + 2 + 4))
- return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
- if (aShifthold == 5) return null;
- if (aShifthold != 0) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
- if (aMouseclick > 1) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
- ItemStack s = aPlayer.inventory.getItemStack();
- if (s == null) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
- Slot slot = getSlot(aSlotNumber);
- ItemStack slotstack = slot.getStack();
- if (slotstack != null && !GT_Utility.areStacksEqual(slotstack, s)) return null; // super would replace item
- if (slotstack == null && !slot.isItemValid(s))
- return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
- if (!GT_ApiaryUpgrade.isUpgrade(s)) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
- int max = GT_ApiaryUpgrade.getUpgrade(s).getMaxNumber();
- if (slotstack != null) max = Math.max(0, max - slotstack.stackSize);
- max = Math.min(max, s.stackSize);
- if (max == 0) return null;
- if (aMouseclick == 1) max = 1;
- if (max == s.stackSize) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
- ItemStack newstack = s.splitStack(s.stackSize - max);
- ItemStack result = super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
- aPlayer.inventory.setItemStack(newstack);
- return result;
- }
-
- @Override
- public int getSlotStartIndex() {
- return 3;
- }
-
- @Override
- public int getSlotCount() {
- return 6 + 9 + 2;
- }
-
- @Override
- public int getShiftClickSlotCount() {
- return 6;
- }
-
- @Override
- public void detectAndSendChanges() {
- super.detectAndSendChanges();
- if ((this.mTileEntity.isClientSide()) || (this.mTileEntity.getMetaTileEntity() == null)) {
- return;
- }
-
- this.mSpeed = getMachine().mSpeed;
- this.mItemTransfer = getMachine().mItemTransfer;
- this.mStuttering = getMachine().mStuttering;
- this.mLockedSpeed = getMachine().mLockedSpeed;
-
- for (Object crafter : this.crafters) {
- ICrafting var1 = (ICrafting) crafter;
- var1.sendProgressBarUpdate(this, 100, this.mSpeed);
- var1.sendProgressBarUpdate(this, 101, this.mItemTransfer ? 1 : 0);
- var1.sendProgressBarUpdate(this, 102, 0);
- for (IErrorState s : getMachine().mErrorStates) var1.sendProgressBarUpdate(this, 103, s.getID());
- var1.sendProgressBarUpdate(this, 104, this.mStuttering ? 1 : 0);
- var1.sendProgressBarUpdate(this, 105, this.mLockedSpeed ? 1 : 0);
- }
- }
-
- @Override
- @SideOnly(Side.CLIENT)
- public void updateProgressBar(int par1, int par2) {
- super.updateProgressBar(par1, par2);
- switch (par1) {
- case 100:
- this.mSpeed = par2;
- break;
- case 101:
- this.mItemTransfer = par2 == 1;
- break;
- case 102:
- this.mErrorStates.clear();
- break;
- case 103:
- this.mErrorStates.add(EnumChatFormatting.RED
- + StatCollector.translateToLocal("for."
- + ForestryAPI.errorStateRegistry
- .getErrorState((short) par2)
- .getDescription()));
- break;
- case 104:
- this.mStuttering = par2 == 1;
- break;
- case 105:
- this.mLockedSpeed = par2 == 1;
- break;
- }
- }
-
- public GT_MetaTileEntity_IndustrialApiary getMachine() {
- return (GT_MetaTileEntity_IndustrialApiary) mTileEntity.getMetaTileEntity();
- }
-
- @Override
- public ItemStack transferStackInSlot(EntityPlayer aPlayer, int aSlotIndex) {
- Slot s = getSlot(aSlotIndex);
- if (s == null) return super.transferStackInSlot(aPlayer, aSlotIndex);
- if (!(s.inventory instanceof InventoryPlayer)) return super.transferStackInSlot(aPlayer, aSlotIndex);
- ItemStack aStack = s.getStack();
- if (aStack == null) return super.transferStackInSlot(aPlayer, aSlotIndex);
- if (!GT_ApiaryUpgrade.isUpgrade(aStack)) return super.transferStackInSlot(aPlayer, aSlotIndex);
- for (int i = getSlotStartIndex() + 2; i < getSlotStartIndex() + 2 + 4; i++) {
- Slot iSlot = getSlot(i);
- ItemStack iStack = iSlot.getStack();
- if (iStack == null) {
- if (!iSlot.isItemValid(aStack)) continue;
- } else {
- if (!GT_Utility.areStacksEqual(aStack, iStack)) continue;
- }
- int max = GT_ApiaryUpgrade.getUpgrade(aStack).getMaxNumber();
- if (iStack == null) {
- max = Math.min(max, aStack.stackSize);
- ItemStack newstack = aStack.splitStack(max);
- iSlot.putStack(newstack);
- } else {
- max = Math.max(0, max - iStack.stackSize);
- max = Math.min(max, aStack.stackSize);
- iStack.stackSize += max;
- aStack.stackSize -= max;
- iSlot.onSlotChanged();
- }
- if (aStack.stackSize == 0) s.putStack(null);
- else s.onSlotChanged();
- break;
- }
- return null;
- }
-
- private static class ApiarySlot extends Slot {
-
- public ApiarySlot(IInventory p_i1824_1_, int p_i1824_2_, int p_i1824_3_, int p_i1824_4_) {
- super(p_i1824_1_, p_i1824_2_, p_i1824_3_, p_i1824_4_);
- }
-
- @Override
- public boolean isItemValid(ItemStack p_75214_1_) {
- return this.inventory.isItemValidForSlot(this.getSlotIndex(), p_75214_1_);
- }
-
- @Override
- public void onSlotChanged() {
- super.onSlotChanged();
- ((GT_MetaTileEntity_IndustrialApiary) ((IGregTechTileEntity) this.inventory).getMetaTileEntity())
- .onInventoryUpdate(this.getSlotIndex());
- }
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_InputBus_ME.java b/src/main/java/gregtech/common/gui/GT_Container_InputBus_ME.java
deleted file mode 100644
index 58aff9ad08..0000000000
--- a/src/main/java/gregtech/common/gui/GT_Container_InputBus_ME.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package gregtech.common.gui;
-
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-import gregtech.api.gui.GT_ContainerMetaTile_Machine;
-import gregtech.api.gui.GT_Slot_Holo;
-import gregtech.api.gui.GT_Slot_Holo_ME;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_InputBus_ME;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.ICrafting;
-import net.minecraft.inventory.Slot;
-import net.minecraft.item.ItemStack;
-
-public class GT_Container_InputBus_ME extends GT_ContainerMetaTile_Machine {
- private static final int LEFT_OFFSET = 8;
- private static final int TOP_OFFSET = 10;
- private static final int SLOT_SIZE = 18;
- public static final int CIRCUIT_SLOT = 32;
-
- public GT_Container_InputBus_ME(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(aInventoryPlayer, aTileEntity);
- }
-
- @Override
- public void addSlots(InventoryPlayer aInventoryPlayer) {
- for (int y = 0; y < 4; ++y)
- for (int x = 0; x < 4; ++x)
- addSlotToContainer(new GT_Slot_Holo(
- this.mTileEntity,
- x + y * 4,
- LEFT_OFFSET + x * SLOT_SIZE,
- TOP_OFFSET + y * SLOT_SIZE,
- false,
- true,
- 1));
- for (int y = 0; y < 4; ++y)
- for (int x = 0; x < 4; ++x) {
- GT_Slot_Holo_ME slot = new GT_Slot_Holo_ME(
- this.mTileEntity,
- x + y * 4 + 16,
- LEFT_OFFSET + x * SLOT_SIZE + 90,
- TOP_OFFSET + y * SLOT_SIZE,
- false,
- true);
- addSlotToContainer(slot);
- }
- super.addSlots(aInventoryPlayer);
- }
-
- private boolean containsSuchStack(ItemStack tStack) {
- for (int i = 0; i < 16; ++i) {
- Slot tSlot = (Slot) this.inventorySlots.get(i);
- if (tSlot != null && GT_Utility.areStacksEqual(tSlot.getStack(), tStack, false)) return true;
- }
- return false;
- }
-
- private static final int PROGRESS_PACKET_INDEX_OFFSET = 200;
-
- @Override
- public void detectAndSendChanges() {
- super.detectAndSendChanges();
- if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) return;
- for (Object crafter : this.crafters) {
- ICrafting player = (ICrafting) crafter;
- for (int i = 0; i < 16; ++i) {
- ItemStack s = ((Slot) this.inventorySlots.get(i + 16)).getStack();
- if (s == null) continue;
- player.sendProgressBarUpdate(this, PROGRESS_PACKET_INDEX_OFFSET + 2 * i, s.stackSize & 65535);
- player.sendProgressBarUpdate(this, PROGRESS_PACKET_INDEX_OFFSET + 2 * i + 1, s.stackSize >>> 16);
- }
- }
- }
-
- @Override
- @SideOnly(Side.CLIENT)
- public void updateProgressBar(int id, int value) {
- super.updateProgressBar(id, value);
- if (id >= PROGRESS_PACKET_INDEX_OFFSET && id < (PROGRESS_PACKET_INDEX_OFFSET + 32)) {
- int index = (id - PROGRESS_PACKET_INDEX_OFFSET) / 2;
- ItemStack s = ((Slot) this.inventorySlots.get(index + 16)).getStack();
- if (s != null) {
- if ((id - PROGRESS_PACKET_INDEX_OFFSET) % 2 == 0) {
- s.stackSize &= 0xFFFF0000;
- s.stackSize += (value & 0xFFFF);
- } else {
- s.stackSize &= 0xFFFF;
- s.stackSize += value << 16;
- }
- }
- }
- }
-
- @Override
- public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
- if (aSlotIndex >= 0 && aSlotIndex < 16) {
- Slot tSlot = (Slot) this.inventorySlots.get(aSlotIndex);
- if (tSlot != null) {
- if (this.mTileEntity.getMetaTileEntity() == null) return null;
- ItemStack tStack = aPlayer.inventory.getItemStack();
- if (tStack == null) {
- tSlot.putStack(null);
- } else {
- if (containsSuchStack(tStack)) return null;
- tSlot.putStack(GT_Utility.copyAmount(1L, tStack));
- }
- if (mTileEntity.isServerSide()) {
- ItemStack newInfo = ((GT_MetaTileEntity_Hatch_InputBus_ME) mTileEntity.getMetaTileEntity())
- .updateInformationSlot(aSlotIndex, tStack);
- ((Slot) this.inventorySlots.get(aSlotIndex + 16)).putStack(newInfo);
- detectAndSendChanges();
- }
- return null;
- }
- }
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_ItemDistributor.java b/src/main/java/gregtech/common/gui/GT_Container_ItemDistributor.java
deleted file mode 100644
index 2de68c9752..0000000000
--- a/src/main/java/gregtech/common/gui/GT_Container_ItemDistributor.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.api.gui.GT_ContainerMetaTile_Machine;
-import gregtech.api.gui.GT_Slot_Holo;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.tileentities.automation.GT_MetaTileEntity_ItemDistributor;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.Slot;
-import net.minecraft.item.ItemStack;
-
-public class GT_Container_ItemDistributor extends GT_ContainerMetaTile_Machine {
- public GT_Container_ItemDistributor(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(aInventoryPlayer, aTileEntity);
- }
-
- @Override
- public void addSlots(InventoryPlayer aInventoryPlayer) {
- for (int y = 0; y < 3; y++) {
- for (int x = 0; x < 9; x++) {
- addSlotToContainer(new Slot(this.mTileEntity, x + y * 9, 8 + x * 18, 5 + y * 18));
- }
- }
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 27, 8, 63, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 27, 26, 63, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 27, 44, 63, false, true, 1));
- }
-
- @Override
- public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
- if (aSlotIndex < 27) {
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
- Slot tSlot = (Slot) this.inventorySlots.get(aSlotIndex);
- if (tSlot != null) {
- if (this.mTileEntity.getMetaTileEntity() == null) {
- return null;
- }
- if (aSlotIndex == 27) {
- ((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bOutput =
- (!((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bOutput);
- if (((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bOutput) {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("116", "Emit Energy to Outputside"));
- } else {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("117", "Don't emit Energy"));
- }
- return null;
- }
- if (aSlotIndex == 28) {
- ((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull =
- (!((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull);
- if (((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull) {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("118", "Emit Redstone if no Slot is free"));
- } else {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("119", "Don't emit Redstone"));
- }
- return null;
- }
- if (aSlotIndex == 29) {
- ((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bInvert =
- (!((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bInvert);
- if (((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bInvert) {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("120", "Invert Redstone"));
- } else {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("121", "Don't invert Redstone"));
- }
- return null;
- }
- }
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
-
- @Override
- public int getSlotCount() {
- return 27;
- }
-
- @Override
- public int getShiftClickSlotCount() {
- return 27;
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_MicrowaveEnergyTransmitter.java b/src/main/java/gregtech/common/gui/GT_Container_MicrowaveEnergyTransmitter.java
deleted file mode 100644
index bd6b917f1f..0000000000
--- a/src/main/java/gregtech/common/gui/GT_Container_MicrowaveEnergyTransmitter.java
+++ /dev/null
@@ -1,188 +0,0 @@
-package gregtech.common.gui;
-
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-import gregtech.api.gui.GT_ContainerMetaTile_Machine;
-import gregtech.api.gui.GT_Slot_Holo;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_MicrowaveEnergyTransmitter;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.ICrafting;
-import net.minecraft.inventory.Slot;
-import net.minecraft.item.ItemStack;
-
-public class GT_Container_MicrowaveEnergyTransmitter extends GT_ContainerMetaTile_Machine {
- public int mEgg = 0;
- public int mTargetD = 0;
- public int mTargetZ = 0;
- public int mTargetY = 0;
- public int mTargetX = 0;
-
- public GT_Container_MicrowaveEnergyTransmitter(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(aInventoryPlayer, aTileEntity);
- }
-
- @Override
- public void addSlots(InventoryPlayer aInventoryPlayer) {
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 8, 5, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 8, 23, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 8, 41, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 8, 59, false, false, 1));
-
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 26, 5, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 26, 23, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 26, 41, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 26, 59, false, false, 1));
-
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 152, 5, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 152, 23, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 152, 41, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 152, 59, false, false, 1));
-
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 134, 5, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 134, 23, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 134, 41, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 134, 59, false, false, 1));
- }
-
- @Override
- public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
- if (aSlotIndex < 0) {
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
- Slot tSlot = (Slot) this.inventorySlots.get(aSlotIndex);
- if ((tSlot != null) && (this.mTileEntity.getMetaTileEntity() != null)) {
- switch (aSlotIndex) {
- case 0:
- ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetX -=
- (aShifthold == 1 ? 512 : 64);
- return null;
- case 1:
- ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetY -=
- (aShifthold == 1 ? 512 : 64);
- return null;
- case 2:
- ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetZ -=
- (aShifthold == 1 ? 512 : 64);
- return null;
- case 3:
- ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetD -=
- (aShifthold == 1 ? 16 : 8);
- return null;
- case 4:
- ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetX -=
- (aShifthold == 1 ? 16 : 1);
- return null;
- case 5:
- ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetY -=
- (aShifthold == 1 ? 16 : 1);
- return null;
- case 6:
- ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetZ -=
- (aShifthold == 1 ? 16 : 1);
- return null;
- case 7:
- ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetD -=
- (aShifthold == 1 ? 4 : 1);
- return null;
- case 8:
- ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetX +=
- (aShifthold == 1 ? 512 : 64);
- return null;
- case 9:
- ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetY +=
- (aShifthold == 1 ? 512 : 64);
- return null;
- case 10:
- ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetZ +=
- (aShifthold == 1 ? 512 : 64);
- return null;
- case 11:
- ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetD +=
- (aShifthold == 1 ? 16 : 8);
- return null;
- case 12:
- ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetX +=
- (aShifthold == 1 ? 16 : 1);
- return null;
- case 13:
- ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetY +=
- (aShifthold == 1 ? 16 : 1);
- return null;
- case 14:
- ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetZ +=
- (aShifthold == 1 ? 16 : 1);
- return null;
- case 15:
- ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetD +=
- (aShifthold == 1 ? 4 : 1);
- return null;
- }
- }
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
-
- @Override
- public void detectAndSendChanges() {
- super.detectAndSendChanges();
- if ((this.mTileEntity.isClientSide()) || (this.mTileEntity.getMetaTileEntity() == null)) {
- return;
- }
- this.mTargetX = ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetX;
- this.mTargetY = ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetY;
- this.mTargetZ = ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetZ;
- this.mTargetD = ((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity()).mTargetD;
- this.mEgg = (((GT_MetaTileEntity_MicrowaveEnergyTransmitter) this.mTileEntity.getMetaTileEntity())
- .hasDimensionalTeleportCapability()
- ? 1
- : 0);
-
- for (Object crafter : this.crafters) {
- ICrafting aPlayer = (ICrafting) crafter;
- aPlayer.sendProgressBarUpdate(this, 100, this.mTargetX & 0xFFFF);
- aPlayer.sendProgressBarUpdate(this, 101, this.mTargetX >>> 16);
- aPlayer.sendProgressBarUpdate(this, 102, this.mTargetY & 0xFFFF);
- aPlayer.sendProgressBarUpdate(this, 103, this.mTargetY >>> 16);
- aPlayer.sendProgressBarUpdate(this, 104, this.mTargetZ & 0xFFFF);
- aPlayer.sendProgressBarUpdate(this, 105, this.mTargetZ >>> 16);
- aPlayer.sendProgressBarUpdate(this, 106, this.mTargetD & 0xFFFF);
- aPlayer.sendProgressBarUpdate(this, 107, this.mTargetD >>> 16);
- aPlayer.sendProgressBarUpdate(this, 108, this.mEgg);
- }
- }
-
- @Override
- @SideOnly(Side.CLIENT)
- public void updateProgressBar(int id, int value) {
- super.updateProgressBar(id, value);
- switch (id) {
- case 100:
- this.mTargetX = (this.mTargetX & 0xFFFF0000 | value & 0xFFFF);
- break;
- case 101:
- this.mTargetX = (this.mTargetX & 0xFFFF | value << 16);
- break;
- case 102:
- this.mTargetY = (this.mTargetY & 0xFFFF0000 | value & 0xFFFF);
- break;
- case 103:
- this.mTargetY = (this.mTargetY & 0xFFFF | value << 16);
- break;
- case 104:
- this.mTargetZ = (this.mTargetZ & 0xFFFF0000 | value & 0xFFFF);
- break;
- case 105:
- this.mTargetZ = (this.mTargetZ & 0xFFFF | value << 16);
- break;
- case 106:
- this.mTargetD = (this.mTargetD & 0xFFFF0000 | value & 0xFFFF);
- break;
- case 107:
- this.mTargetD = (this.mTargetD & 0xFFFF | value << 16);
- break;
- case 108:
- this.mEgg = value;
- }
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java b/src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java
deleted file mode 100644
index e42e145eb3..0000000000
--- a/src/main/java/gregtech/common/gui/GT_Container_OutputHatch.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.api.gui.GT_Container_BasicTank;
-import gregtech.api.gui.GT_Slot_Output;
-import gregtech.api.gui.GT_Slot_Render;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output;
-import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.Slot;
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.fluids.FluidStack;
-
-public class GT_Container_OutputHatch extends GT_Container_BasicTank {
-
- public GT_Container_OutputHatch(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(aInventoryPlayer, aTileEntity);
- }
-
- @Override
- public void addSlots(InventoryPlayer aInventoryPlayer) {
- addSlotToContainer(new Slot(mTileEntity, 0, 80, 17));
- addSlotToContainer(new GT_Slot_Output(mTileEntity, 1, 80, 53));
- addSlotToContainer(new GT_Slot_Render(mTileEntity, 2, 59, 42));
- addSlotToContainer(new GT_Slot_Render(mTileEntity, 3, 150, 42));
- }
-
- @Override
- public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
- if (aSlotIndex == 3 && aMouseclick < 2) {
- GT_MetaTileEntity_Hatch_Output tHatch = (GT_MetaTileEntity_Hatch_Output) mTileEntity.getMetaTileEntity();
- FluidStack tReadyLockFluid = GT_Utility.getFluidForFilledItem(aPlayer.inventory.getItemStack(), true);
- byte tMode = tHatch.getMode();
- // If player click the locker slot with empty or the same fluid cell, clear the lock fluid
- if (tReadyLockFluid == null
- || (tMode >= 8 && tReadyLockFluid.getFluid().getName().equals(tHatch.getLockedFluidName()))) {
- tHatch.setLockedFluidName(null);
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("300.1", "Fluid Lock Cleared."));
- tHatch.lockFluid(false);
- } else {
- tHatch.setLockedFluidName(tReadyLockFluid.getFluid().getName());
- GT_Utility.sendChatToPlayer(
- aPlayer,
- String.format(
- GT_Utility.trans("151.4", "Successfully locked Fluid to %s"),
- tReadyLockFluid.getLocalizedName()));
- tHatch.lockFluid(true);
- }
- }
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_PrimitiveBlastFurnace.java b/src/main/java/gregtech/common/gui/GT_Container_PrimitiveBlastFurnace.java
deleted file mode 100644
index e19b6167ec..0000000000
--- a/src/main/java/gregtech/common/gui/GT_Container_PrimitiveBlastFurnace.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.api.gui.GT_ContainerMetaTile_Machine;
-import gregtech.api.gui.GT_Slot_Output;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_PrimitiveBlastFurnace;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.Slot;
-
-public class GT_Container_PrimitiveBlastFurnace extends GT_ContainerMetaTile_Machine {
-
- public GT_Container_PrimitiveBlastFurnace(InventoryPlayer inventoryPlayer, IGregTechTileEntity tileEntity) {
- super(inventoryPlayer, tileEntity);
- }
-
- @Override
- public void addSlots(InventoryPlayer aInventoryPlayer) {
- for (int i = 0; i < GT_MetaTileEntity_PrimitiveBlastFurnace.INPUT_SLOTS; i++) {
- addSlotToContainer(new Slot(this.mTileEntity, i, 34, 16 + 18 * i));
- }
- for (int i = 0; i < GT_MetaTileEntity_PrimitiveBlastFurnace.OUTPUT_SLOTS; i++) {
- addSlotToContainer(new GT_Slot_Output(
- mTileEntity, GT_MetaTileEntity_PrimitiveBlastFurnace.INPUT_SLOTS + i, 86 + i * 18, 25));
- }
- }
-
- @Override
- public int getSlotCount() {
- return GT_MetaTileEntity_PrimitiveBlastFurnace.INPUT_SLOTS
- + GT_MetaTileEntity_PrimitiveBlastFurnace.OUTPUT_SLOTS;
- }
-
- @Override
- public int getShiftClickSlotCount() {
- return GT_MetaTileEntity_PrimitiveBlastFurnace.INPUT_SLOTS;
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_QuantumChest.java b/src/main/java/gregtech/common/gui/GT_Container_QuantumChest.java
deleted file mode 100644
index a072017d08..0000000000
--- a/src/main/java/gregtech/common/gui/GT_Container_QuantumChest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package gregtech.common.gui;
-
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-import gregtech.api.gui.GT_ContainerMetaTile_Machine;
-import gregtech.api.gui.GT_Slot_Output;
-import gregtech.api.gui.GT_Slot_Render;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.common.tileentities.storage.GT_MetaTileEntity_QuantumChest;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.ICrafting;
-import net.minecraft.inventory.Slot;
-
-public class GT_Container_QuantumChest extends GT_ContainerMetaTile_Machine {
-
- public int mContent = 0;
-
- public GT_Container_QuantumChest(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(aInventoryPlayer, aTileEntity);
- }
-
- @Override
- public void addSlots(InventoryPlayer aInventoryPlayer) {
- addSlotToContainer(new Slot(mTileEntity, 0, 80, 17));
- addSlotToContainer(new GT_Slot_Output(mTileEntity, 1, 80, 53));
- addSlotToContainer(new GT_Slot_Render(mTileEntity, 2, 59, 42));
- }
-
- @Override
- public void detectAndSendChanges() {
- super.detectAndSendChanges();
-
- if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) return;
- if (mTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_QuantumChest) {
- mContent = ((GT_MetaTileEntity_QuantumChest) mTileEntity.getMetaTileEntity()).mItemCount;
- } else {
- mContent = 0;
- }
-
- for (Object crafter : this.crafters) {
- ICrafting aPlayer = (ICrafting) crafter;
- aPlayer.sendProgressBarUpdate(this, 100, mContent & 65535);
- aPlayer.sendProgressBarUpdate(this, 101, mContent >>> 16);
- }
- }
-
- @Override
- @SideOnly(Side.CLIENT)
- public void updateProgressBar(int id, int value) {
- super.updateProgressBar(id, value);
- switch (id) {
- case 100:
- mContent = mContent & 0xffff0000 | value & 0x0000ffff;
- break;
- case 101:
- mContent = mContent & 0x0000ffff | value << 16;
- break;
- }
- }
-
- @Override
- public int getSlotCount() {
- return 2;
- }
-
- @Override
- public int getShiftClickSlotCount() {
- return 1;
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_Regulator.java b/src/main/java/gregtech/common/gui/GT_Container_Regulator.java
deleted file mode 100644
index 3079b40470..0000000000
--- a/src/main/java/gregtech/common/gui/GT_Container_Regulator.java
+++ /dev/null
@@ -1,177 +0,0 @@
-package gregtech.common.gui;
-
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-import gregtech.api.gui.GT_ContainerMetaTile_Machine;
-import gregtech.api.gui.GT_Slot_Holo;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.tileentities.automation.GT_MetaTileEntity_Regulator;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.ICrafting;
-import net.minecraft.inventory.Slot;
-import net.minecraft.item.ItemStack;
-
-public class GT_Container_Regulator extends GT_ContainerMetaTile_Machine {
- public int[] mTargetSlots = {0, 0, 0, 0, 0, 0, 0, 0, 0};
-
- public GT_Container_Regulator(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(aInventoryPlayer, aTileEntity);
- }
-
- @Override
- public void addSlots(InventoryPlayer aInventoryPlayer) {
- this.mTargetSlots = new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0};
-
- addSlotToContainer(new Slot(this.mTileEntity, 0, 8, 6));
- addSlotToContainer(new Slot(this.mTileEntity, 1, 26, 6));
- addSlotToContainer(new Slot(this.mTileEntity, 2, 44, 6));
- addSlotToContainer(new Slot(this.mTileEntity, 3, 8, 24));
- addSlotToContainer(new Slot(this.mTileEntity, 4, 26, 24));
- addSlotToContainer(new Slot(this.mTileEntity, 5, 44, 24));
- addSlotToContainer(new Slot(this.mTileEntity, 6, 8, 42));
- addSlotToContainer(new Slot(this.mTileEntity, 7, 26, 42));
- addSlotToContainer(new Slot(this.mTileEntity, 8, 44, 42));
-
- addSlotToContainer(new Slot(this.mTileEntity, 19, 44, 63));
-
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 9, 64, 7, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 10, 81, 7, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 11, 98, 7, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 12, 64, 24, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 13, 81, 24, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 14, 98, 24, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 15, 64, 41, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 16, 81, 41, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 17, 98, 41, false, true, 1));
-
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 119, 7, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 136, 7, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 153, 7, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 119, 24, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 136, 24, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 153, 24, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 119, 41, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 136, 41, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 153, 41, false, true, 1));
-
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 18, 8, 63, false, true, 1));
- }
-
- @Override
- public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
- if (aSlotIndex < 10) {
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
- Slot tSlot = (Slot) this.inventorySlots.get(aSlotIndex);
- if (tSlot != null) {
- if (this.mTileEntity.getMetaTileEntity() == null) {
- return null;
- }
- if (aSlotIndex == 28) {
- ((GT_MetaTileEntity_Regulator) this.mTileEntity.getMetaTileEntity()).bOutput =
- (!((GT_MetaTileEntity_Regulator) this.mTileEntity.getMetaTileEntity()).bOutput);
- if (((GT_MetaTileEntity_Regulator) this.mTileEntity.getMetaTileEntity()).bOutput) {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("116", "Emit Energy to Outputside"));
- } else {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("117", "Don't emit Energy"));
- }
- return null;
- }
- if ((aSlotIndex < 19)) {
- ItemStack tStack = aPlayer.inventory.getItemStack();
- if (tStack != null) {
- tSlot.putStack(GT_Utility.copyOrNull(tStack));
- } else if (tSlot.getStack() != null) {
- if (aMouseclick == 0) {
- tSlot.getStack().stackSize -= (aShifthold == 1 ? 8 : 1);
- if (tSlot.getStack().stackSize <= 0) {
- tSlot.putStack(null);
- }
- } else {
- tSlot.getStack().stackSize += (aShifthold == 1 ? 8 : 1);
- if (tSlot.getStack().stackSize > tSlot.getStack().getMaxStackSize()) {
- tSlot.getStack().stackSize = tSlot.getStack().getMaxStackSize();
- }
- }
- }
- return null;
- }
- if ((aSlotIndex < 28)) {
- ((GT_MetaTileEntity_Regulator) this.mTileEntity.getMetaTileEntity()).mTargetSlots[(aSlotIndex - 19)] =
- Math.min(
- 99,
- Math.max(
- 0,
- ((GT_MetaTileEntity_Regulator) this.mTileEntity.getMetaTileEntity())
- .mTargetSlots[(aSlotIndex - 19)]
- + (aMouseclick == 0 ? -1 : 1) * (aShifthold == 0 ? 1 : 16)));
- return null;
- }
- }
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
-
- @Override
- public void detectAndSendChanges() {
- super.detectAndSendChanges();
- if ((this.mTileEntity.isClientSide()) || (this.mTileEntity.getMetaTileEntity() == null)) {
- return;
- }
- this.mTargetSlots = new int[9];
- for (int i = 0; i < 9; i++) {
- this.mTargetSlots[i] = ((GT_MetaTileEntity_Regulator) this.mTileEntity.getMetaTileEntity()).mTargetSlots[i];
- }
- for (Object crafter : this.crafters) {
- ICrafting player = (ICrafting) crafter;
- for (int i = 0; i < 9; i++) {
- player.sendProgressBarUpdate(this, 100 + i, this.mTargetSlots[i]);
- }
- }
- }
-
- @Override
- @SideOnly(Side.CLIENT)
- public void updateProgressBar(int id, int value) {
- super.updateProgressBar(id, value);
- switch (id) {
- case 100:
- this.mTargetSlots[0] = value;
- break;
- case 101:
- this.mTargetSlots[1] = value;
- break;
- case 102:
- this.mTargetSlots[2] = value;
- break;
- case 103:
- this.mTargetSlots[3] = value;
- break;
- case 104:
- this.mTargetSlots[4] = value;
- break;
- case 105:
- this.mTargetSlots[5] = value;
- break;
- case 106:
- this.mTargetSlots[6] = value;
- break;
- case 107:
- this.mTargetSlots[7] = value;
- break;
- case 108:
- this.mTargetSlots[8] = value;
- }
- }
-
- @Override
- public int getSlotCount() {
- return 10;
- }
-
- @Override
- public int getShiftClickSlotCount() {
- return 10;
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_SuperBuffer.java b/src/main/java/gregtech/common/gui/GT_Container_SuperBuffer.java
deleted file mode 100644
index 0fda1a485f..0000000000
--- a/src/main/java/gregtech/common/gui/GT_Container_SuperBuffer.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.api.gui.GT_ContainerMetaTile_Machine;
-import gregtech.api.gui.GT_Slot_Holo;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.tileentities.automation.GT_MetaTileEntity_ChestBuffer;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.Slot;
-import net.minecraft.item.ItemStack;
-
-public class GT_Container_SuperBuffer extends GT_ContainerMetaTile_Machine {
- public GT_Container_SuperBuffer(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(aInventoryPlayer, aTileEntity);
- }
-
- @Override
- public void addSlots(InventoryPlayer aInventoryPlayer) {
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 256, 8, 63, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 256, 26, 63, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 256, 44, 63, false, true, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 256, 62, 63, false, true, 1));
- }
-
- @Override
- public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
- if (aSlotIndex < 0) {
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
- Slot tSlot = (Slot) this.inventorySlots.get(aSlotIndex);
- if (tSlot != null) {
- if (this.mTileEntity.getMetaTileEntity() == null) {
- return null;
- }
- if (aSlotIndex == 0) {
- ((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bOutput =
- (!((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bOutput);
- if (((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bOutput) {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("116", "Emit Energy to Outputside"));
- } else {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("117", "Don't emit Energy"));
- }
- return null;
- }
- if (aSlotIndex == 1) {
- ((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull =
- (!((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull);
- if (((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull) {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("118", "Emit Redstone if no Slot is free"));
- } else {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("119", "Don't emit Redstone"));
- }
- return null;
- }
- if (aSlotIndex == 2) {
- ((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bInvert =
- (!((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bInvert);
- if (((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bInvert) {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("120", "Invert Redstone"));
- } else {
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("121", "Don't invert Redstone"));
- }
- return null;
- }
- if (aSlotIndex == 3) {
- ((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bStockingMode =
- (!((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bStockingMode);
- if (((GT_MetaTileEntity_ChestBuffer) this.mTileEntity.getMetaTileEntity()).bStockingMode) {
- GT_Utility.sendChatToPlayer(
- aPlayer,
- GT_Utility.trans(
- "217",
- "Stocking mode. Keeps this many items in destination input slots. This mode can be server unfriendly."));
- } else {
- GT_Utility.sendChatToPlayer(
- aPlayer,
- GT_Utility.trans(
- "218",
- "Transfer size mode. Add exactly this many items in destination input slots as long as there is room."));
- }
- return null;
- }
- }
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
-
- @Override
- public int getSlotCount() {
- return 0;
- }
-
- @Override
- public int getShiftClickSlotCount() {
- return 0;
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_Container_Teleporter.java b/src/main/java/gregtech/common/gui/GT_Container_Teleporter.java
deleted file mode 100644
index 219391e662..0000000000
--- a/src/main/java/gregtech/common/gui/GT_Container_Teleporter.java
+++ /dev/null
@@ -1,190 +0,0 @@
-package gregtech.common.gui;
-
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-import gregtech.api.gui.GT_ContainerMetaTile_Machine;
-import gregtech.api.gui.GT_Slot_Holo;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Teleporter;
-import java.util.Iterator;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.ICrafting;
-import net.minecraft.inventory.Slot;
-import net.minecraft.item.ItemStack;
-
-public class GT_Container_Teleporter extends GT_ContainerMetaTile_Machine {
- public int mEgg = 0;
- public int mTargetD = 0;
- public int mTargetZ = 0;
- public int mTargetY = 0;
- public int mTargetX = 0;
-
- public GT_Container_Teleporter(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(aInventoryPlayer, aTileEntity);
- }
-
- @Override
- public void addSlots(InventoryPlayer aInventoryPlayer) {
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 8, 5, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 8, 23, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 8, 41, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 8, 59, false, false, 1));
-
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 26, 5, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 26, 23, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 26, 41, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 26, 59, false, false, 1));
-
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 152, 5, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 152, 23, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 152, 41, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 152, 59, false, false, 1));
-
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 134, 5, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 134, 23, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 134, 41, false, false, 1));
- addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 2, 134, 59, false, false, 1));
- }
-
- @Override
- public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
- if (aSlotIndex < 0) {
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
- Slot tSlot = (Slot) this.inventorySlots.get(aSlotIndex);
- if ((tSlot != null) && (this.mTileEntity.getMetaTileEntity() != null)) {
- switch (aSlotIndex) {
- case 0:
- ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetX -=
- (aShifthold == 1 ? 512 : 64);
- return null;
- case 1:
- ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetY -=
- (aShifthold == 1 ? 512 : 64);
- return null;
- case 2:
- ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetZ -=
- (aShifthold == 1 ? 512 : 64);
- return null;
- case 3:
- ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetD -=
- (aShifthold == 1 ? 16 : 8);
- return null;
- case 4:
- ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetX -=
- (aShifthold == 1 ? 16 : 1);
- return null;
- case 5:
- ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetY -=
- (aShifthold == 1 ? 16 : 1);
- return null;
- case 6:
- ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetZ -=
- (aShifthold == 1 ? 16 : 1);
- return null;
- case 7:
- ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetD -=
- (aShifthold == 1 ? 4 : 1);
- return null;
- case 8:
- ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetX +=
- (aShifthold == 1 ? 512 : 64);
- return null;
- case 9:
- ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetY +=
- (aShifthold == 1 ? 512 : 64);
- return null;
- case 10:
- ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetZ +=
- (aShifthold == 1 ? 512 : 64);
- return null;
- case 11:
- ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetD +=
- (aShifthold == 1 ? 16 : 8);
- return null;
- case 12:
- ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetX +=
- (aShifthold == 1 ? 16 : 1);
- return null;
- case 13:
- ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetY +=
- (aShifthold == 1 ? 16 : 1);
- return null;
- case 14:
- ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetZ +=
- (aShifthold == 1 ? 16 : 1);
- return null;
- case 15:
- ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetD +=
- (aShifthold == 1 ? 4 : 1);
- return null;
- }
- }
- return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
- }
-
- @Override
- public void detectAndSendChanges() {
- super.detectAndSendChanges();
- if ((this.mTileEntity.isClientSide()) || (this.mTileEntity.getMetaTileEntity() == null)) {
- return;
- }
- this.mTargetX = ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetX;
- this.mTargetY = ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetY;
- this.mTargetZ = ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetZ;
- this.mTargetD = ((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity()).mTargetD;
- this.mEgg = (((GT_MetaTileEntity_Teleporter) this.mTileEntity.getMetaTileEntity())
- .hasDimensionalTeleportCapability()
- ? 1
- : 0);
-
- Iterator playerIterator = this.crafters.iterator();
- while (playerIterator.hasNext()) {
- ICrafting player = (ICrafting) playerIterator.next();
- player.sendProgressBarUpdate(this, 100, this.mTargetX & 0xFFFF);
- player.sendProgressBarUpdate(this, 101, this.mTargetX >>> 16);
- player.sendProgressBarUpdate(this, 102, this.mTargetY & 0xFFFF);
- player.sendProgressBarUpdate(this, 103, this.mTargetY >>> 16);
- player.sendProgressBarUpdate(this, 104, this.mTargetZ & 0xFFFF);
- player.sendProgressBarUpdate(this, 105, this.mTargetZ >>> 16);
- player.sendProgressBarUpdate(this, 106, this.mTargetD & 0xFFFF);
- player.sendProgressBarUpdate(this, 107, this.mTargetD >>> 16);
- player.sendProgressBarUpdate(this, 108, this.mEgg);
- }
- }
-
- @Override
- @SideOnly(Side.CLIENT)
- public void updateProgressBar(int id, int value) {
- super.updateProgressBar(id, value);
- switch (id) {
- case 100:
- this.mTargetX = (this.mTargetX & 0xFFFF0000 | value & 0xFFFF);
- break;
- case 101:
- this.mTargetX = (this.mTargetX & 0xFFFF | value << 16);
- break;
- case 102:
- this.mTargetY = (this.mTargetY & 0xFFFF0000 | value & 0xFFFF);
- break;
- case 103:
- this.mTargetY = (this.mTargetY & 0xFFFF | value << 16);
- break;
- case 104:
- this.mTargetZ = (this.mTargetZ & 0xFFFF0000 | value & 0xFFFF);
- break;
- case 105:
- this.mTargetZ = (this.mTargetZ & 0xFFFF | value << 16);
- break;
- case 106:
- this.mTargetD = (this.mTargetD & 0xFFFF0000 | value & 0xFFFF);
- break;
- case 107:
- this.mTargetD = (this.mTargetD & 0xFFFF | value << 16);
- break;
- case 108:
- this.mEgg = value;
- }
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainerVolumetricFlask.java b/src/main/java/gregtech/common/gui/GT_GUIContainerVolumetricFlask.java
deleted file mode 100644
index 45df55cbe9..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainerVolumetricFlask.java
+++ /dev/null
@@ -1,234 +0,0 @@
-package gregtech.common.gui;
-
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.net.GT_Packet_UpdateItem;
-import gregtech.common.items.GT_VolumetricFlask;
-import java.text.DecimalFormat;
-import java.text.ParseException;
-import net.minecraft.client.gui.FontRenderer;
-import net.minecraft.client.gui.GuiButton;
-import net.minecraft.client.gui.GuiTextField;
-import net.minecraft.client.gui.inventory.GuiContainer;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.util.ResourceLocation;
-import org.lwjgl.opengl.GL11;
-
-@SideOnly(Side.CLIENT)
-public final class GT_GUIContainerVolumetricFlask extends GuiContainer {
- private static final ResourceLocation BACKGROUND =
- new ResourceLocation("gregtech:textures/gui/VolumetricFlask.png");
-
- private GuiIntegerBox amount;
- private GuiButton apply;
- private GuiButton plus1;
- private GuiButton plus10;
- private GuiButton plus100;
- private GuiButton plus1000;
- private GuiButton minus1;
- private GuiButton minus10;
- private GuiButton minus100;
- private GuiButton minus1000;
- private GT_ContainerVolumetricFlask container;
-
- public GT_GUIContainerVolumetricFlask(GT_ContainerVolumetricFlask container) {
- super(container);
- this.container = container;
- }
-
- @Override
- public void initGui() {
- super.initGui();
-
- buttonList.add(plus1 = new GuiButton(0, guiLeft + 20, guiTop + 26, 22, 20, "+1"));
- buttonList.add(plus10 = new GuiButton(0, guiLeft + 48, guiTop + 26, 28, 20, "+10"));
- buttonList.add(plus100 = new GuiButton(0, guiLeft + 82, guiTop + 26, 32, 20, "+100"));
- buttonList.add(plus1000 = new GuiButton(0, guiLeft + 120, guiTop + 26, 38, 20, "+1000"));
-
- buttonList.add(minus1 = new GuiButton(0, guiLeft + 20, guiTop + 75, 22, 20, "-1"));
- buttonList.add(minus10 = new GuiButton(0, guiLeft + 48, guiTop + 75, 28, 20, "-10"));
- buttonList.add(minus100 = new GuiButton(0, guiLeft + 82, guiTop + 75, 32, 20, "-100"));
- buttonList.add(minus1000 = new GuiButton(0, guiLeft + 120, guiTop + 75, 38, 20, "-1000"));
-
- buttonList.add(apply = new GuiButton(0, guiLeft + 128, guiTop + 51, 38, 20, "Accept"));
-
- amount = new GuiIntegerBox(
- fontRendererObj,
- guiLeft + 62,
- guiTop + 57,
- 59,
- fontRendererObj.FONT_HEIGHT,
- ((GT_VolumetricFlask) container.flask.getItem()).getMaxCapacity());
- amount.setEnableBackgroundDrawing(false);
- amount.setMaxStringLength(16);
- amount.setTextColor(16777215);
- amount.setVisible(true);
- amount.setFocused(true);
- amount.setText("1");
- System.out.println(((GT_VolumetricFlask) container.flask.getItem()).getCapacity(container.flask));
- amount.setText(String.valueOf(((GT_VolumetricFlask) container.flask.getItem()).getCapacity(container.flask)));
- }
-
- @Override
- protected final void drawGuiContainerBackgroundLayer(float f, int x, int y) {
- GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
- mc.getTextureManager().bindTexture(BACKGROUND);
- drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
-
- try {
- Long.parseLong(amount.getText());
- apply.enabled = (amount.getText().length() > 0);
- } catch (NumberFormatException e) {
- apply.enabled = false;
- }
-
- amount.drawTextBox();
- }
-
- @Override
- protected void keyTyped(char character, int key) {
- if (!checkHotbarKeys(key)) {
- if (key == 28) actionPerformed(apply);
- if (((key == 211)
- || (key == 205)
- || (key == 203)
- || (key == 14)
- || (character == '-')
- || (Character.isDigit(character)))
- && (amount.textboxKeyTyped(character, key))) {
- try {
- String out = amount.getText();
- boolean fixed = false;
- while ((out.startsWith("0")) && (out.length() > 1)) {
- out = out.substring(1);
- fixed = true;
- }
- if (fixed) {
- amount.setText(out);
- }
- if (out.isEmpty()) {
- out = "0";
- }
- long result = Long.parseLong(out);
- if (result < 0L) {
- amount.setText("1");
- }
-
- } catch (NumberFormatException ignored) {
- }
- } else {
- super.keyTyped(character, key);
- }
- }
- }
-
- @Override
- protected void actionPerformed(GuiButton btn) {
- try {
- if (btn == apply) {
- NBTTagCompound tag = new NBTTagCompound();
- tag.setInteger("cap", Integer.parseInt(amount.getText()));
- GT_Values.NW.sendToServer(new GT_Packet_UpdateItem(tag));
- mc.thePlayer.closeScreen();
- }
-
- } catch (NumberFormatException e) {
- amount.setText("1");
- }
-
- boolean isPlus = (btn == plus1) || (btn == plus10) || (btn == plus100) || (btn == plus1000);
- boolean isMinus = (btn == minus1) || (btn == minus10) || (btn == minus100) || (btn == minus1000);
-
- if ((isPlus) || (isMinus)) {
- addQty(getQty(btn));
- }
- }
-
- private void addQty(int i) {
- try {
- String out = amount.getText();
-
- boolean fixed = false;
- while ((out.startsWith("0")) && (out.length() > 1)) {
- out = out.substring(1);
- fixed = true;
- }
-
- if (fixed) {
- amount.setText(out);
- }
- if (out.isEmpty()) {
- out = "0";
- }
- long result = Integer.parseInt(out);
-
- if ((result == 1L) && (i > 1)) {
- result = 0L;
- }
- result += i;
- if (result < 1L) {
- result = 1L;
- }
- out = Long.toString(result);
- Integer.parseInt(out);
- amount.setText(out);
- } catch (NumberFormatException ignored) {
- }
- }
-
- protected int getQty(GuiButton btn) {
- try {
- DecimalFormat df = new DecimalFormat("+#;-#");
- return df.parse(btn.displayString).intValue();
- } catch (ParseException ignored) {
- }
-
- return 0;
- }
-
- public class GuiIntegerBox extends GuiTextField {
- private final int maxValue;
-
- public GuiIntegerBox(FontRenderer fontRenderer, int x, int y, int width, int height) {
- this(fontRenderer, x, y, width, height, Integer.MAX_VALUE);
- }
-
- public GuiIntegerBox(FontRenderer fontRenderer, int x, int y, int width, int height, int maxValue) {
- super(fontRenderer, x, y, width, height);
- this.maxValue = maxValue;
- }
-
- @Override
- public void writeText(String selectedText) {
- String original = getText();
- super.writeText(selectedText);
-
- try {
- int i = Integer.parseInt(getText());
- if (i > maxValue) {
- setText(String.valueOf(maxValue));
- } else if (i < 0) {
- setText("0");
- }
- } catch (NumberFormatException e) {
- setText(original);
- }
- }
-
- @Override
- public void setText(String s) {
- try {
- int i = Integer.parseInt(s);
- if (i > maxValue) {
- s = String.valueOf(maxValue);
- } else if (i < 0) {
- s = "0";
- }
- } catch (NumberFormatException e) {
- s = String.valueOf(maxValue);
- }
- super.setText(s);
- }
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_AdvDebugStructureWriter.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_AdvDebugStructureWriter.java
deleted file mode 100644
index 3ae07cef8e..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_AdvDebugStructureWriter.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package gregtech.common.gui;
-
-import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
-import static net.minecraft.util.StatCollector.translateToLocal;
-
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.gui.widgets.GT_GuiSlotTooltip;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import net.minecraft.entity.player.InventoryPlayer;
-
-public class GT_GUIContainer_AdvDebugStructureWriter extends GT_GUIContainerMetaTile_Machine {
-
- private static final String ADVDEBUGSTRUCTUREWRITER_PRINT_TOOLTIP =
- "GT5U.machines.advdebugstructurewriter.gui.print.tooltip";
- private static final String ADVDEBUGSTRUCTUREWRITER_TRANSPOSE_TOOLTIP =
- "GT5U.machines.advdebugstructurewriter.gui.transpose.tooltip";
- private static final String ADVDEBUGSTRUCTUREWRITER_HIGHLIGHT_TOOLTIP =
- "GT5U.machines.advdebugstructurewriter.gui.highlight.tooltip";
-
- public GT_GUIContainer_AdvDebugStructureWriter(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(
- new GT_Container_AdvDebugStructureWriter(aInventoryPlayer, aTileEntity),
- RES_PATH_GUI + "AdvDebugStructureWriter.png");
- }
-
- @Override
- protected void drawGuiContainerForegroundLayer(int par1, int par2) {
- if (mContainer != null) {
- GT_Container_AdvDebugStructureWriter dsw = (GT_Container_AdvDebugStructureWriter) mContainer;
- if (dsw.numbers == null) {
- return;
- }
- fontRendererObj.drawString(
- translateToLocal("GT5U.machines.advdebugstructurewriter.gui.origin"), 46, 8, 16448255);
- fontRendererObj.drawString("A: " + dsw.numbers[0], 46, 18, 16448255);
- fontRendererObj.drawString("B: " + dsw.numbers[1], 46, 26, 16448255);
- fontRendererObj.drawString("C: " + dsw.numbers[2], 46, 34, 16448255);
-
- fontRendererObj.drawString(
- translateToLocal("GT5U.machines.advdebugstructurewriter.gui.size"), 46, 60, 16448255);
- fontRendererObj.drawString("A: " + dsw.numbers[3], 46, 70, 16448255);
- fontRendererObj.drawString("B: " + dsw.numbers[4], 46, 78, 16448255);
- fontRendererObj.drawString("C: " + dsw.numbers[5], 46, 86, 16448255);
- }
- }
-
- @Override
- protected void setupTooltips() {
- addToolTip(new GT_GuiSlotTooltip(
- getContainer().printSlot, mTooltipCache.getData(ADVDEBUGSTRUCTUREWRITER_PRINT_TOOLTIP)));
- addToolTip(new GT_GuiSlotTooltip(
- getContainer().transposeSlot, mTooltipCache.getData(ADVDEBUGSTRUCTUREWRITER_TRANSPOSE_TOOLTIP)));
- addToolTip(new GT_GuiSlotTooltip(
- getContainer().highlightSlot, mTooltipCache.getData(ADVDEBUGSTRUCTUREWRITER_HIGHLIGHT_TOOLTIP)));
- }
-
- private GT_Container_AdvDebugStructureWriter getContainer() {
- return ((GT_Container_AdvDebugStructureWriter) this.mContainer);
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
- super.drawGuiContainerBackgroundLayer(par1, par2, par3);
- int x = (width - xSize) / 2;
- int y = (height - ySize) / 2;
- drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
- if (mContainer != null) {
- if (((GT_Container_AdvDebugStructureWriter) mContainer).transpose) {
- drawTexturedModalRect(x + 32, y + 128, 176, 0, 18, 18);
- }
- if (((GT_Container_AdvDebugStructureWriter) mContainer).showHighlightBox) {
- drawTexturedModalRect(x + 53, y + 128, 176, 18, 18, 18);
- }
- }
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_Boiler.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_Boiler.java
deleted file mode 100644
index ef7ed15720..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_Boiler.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import net.minecraft.entity.player.InventoryPlayer;
-
-public class GT_GUIContainer_Boiler extends GT_GUIContainerMetaTile_Machine {
-
- private final int textColor = this.getTextColorOrDefault("title", 0x404040);
-
- public GT_GUIContainer_Boiler(
- InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aTextureName) {
- super(new GT_Container_Boiler(aInventoryPlayer, aTileEntity), "gregtech:textures/gui/" + aTextureName);
- }
-
- @Override
- protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
- this.fontRendererObj.drawString("Boiler", 8, 4, textColor);
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float parTicks, int mouseX, int mouseY) {
- super.drawGuiContainerBackgroundLayer(parTicks, mouseX, mouseY);
- int x = (this.width - this.xSize) / 2;
- int y = (this.height - this.ySize) / 2;
- drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
- if (this.mContainer != null) {
- int tScale = ((GT_Container_Boiler) this.mContainer).mSteamAmount;
- if (tScale > 0) {
- drawTexturedModalRect(x + 70, y + 25 + 54 - tScale, 194, 54 - tScale, 10, tScale);
- }
- tScale = ((GT_Container_Boiler) this.mContainer).mWaterAmount;
- if (tScale > 0) {
- drawTexturedModalRect(x + 83, y + 25 + 54 - tScale, 204, 54 - tScale, 10, tScale);
- }
- tScale = ((GT_Container_Boiler) this.mContainer).mTemperature;
- if (tScale > 0) {
- drawTexturedModalRect(x + 96, y + 25 + 54 - tScale, 214, 54 - tScale, 10, tScale);
- }
- tScale = ((GT_Container_Boiler) this.mContainer).mProcessingEnergy;
- if (tScale > 0) {
- drawTexturedModalRect(x + 117, y + 44 + 14 - tScale, 177, 14 - tScale, 15, tScale + 1);
- }
- }
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_BronzeBlastFurnace.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_BronzeBlastFurnace.java
deleted file mode 100644
index b92f7e9243..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_BronzeBlastFurnace.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import net.minecraft.entity.player.InventoryPlayer;
-
-public class GT_GUIContainer_BronzeBlastFurnace extends GT_GUIContainerMetaTile_Machine {
-
- private final int textColor = this.getTextColorOrDefault("title", 0x404040);
-
- public GT_GUIContainer_BronzeBlastFurnace(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(
- new GT_Container_BronzeBlastFurnace(aInventoryPlayer, aTileEntity),
- "gregtech:textures/gui/BronzeBlastFurnace.png");
- }
-
- @Override
- protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
- this.fontRendererObj.drawString("Bronze Blast Furnace", 8, 4, textColor);
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float parTicks, int mouseX, int mouseY) {
- super.drawGuiContainerBackgroundLayer(parTicks, mouseX, mouseY);
- int x = (this.width - this.xSize) / 2;
- int y = (this.height - this.ySize) / 2;
- drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
- if ((this.mContainer != null) && (this.mContainer.mProgressTime > 0)) {
- drawTexturedModalRect(
- x + 58,
- y + 28,
- 176,
- 0,
- Math.max(
- 0,
- Math.min(
- 20,
- (this.mContainer.mProgressTime > 0 ? 1 : 0)
- + this.mContainer.mProgressTime
- * 20
- / (this.mContainer.mMaxProgressTime < 1
- ? 1
- : this.mContainer.mMaxProgressTime))),
- 11);
- }
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_ChestBuffer.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_ChestBuffer.java
deleted file mode 100644
index 2f993140ac..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_ChestBuffer.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import net.minecraft.entity.player.InventoryPlayer;
-
-public class GT_GUIContainer_ChestBuffer extends GT_GUIContainerMetaTile_Machine {
- public GT_GUIContainer_ChestBuffer(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(new GT_Container_ChestBuffer(aInventoryPlayer, aTileEntity), "gregtech:textures/gui/ChestBuffer.png");
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float parTicks, int mouseX, int mouseY) {
- super.drawGuiContainerBackgroundLayer(parTicks, mouseX, mouseY);
- int x = (this.width - this.xSize) / 2;
- int y = (this.height - this.ySize) / 2;
- drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_Filter.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_Filter.java
deleted file mode 100644
index 2ad3ea3018..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_Filter.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import net.minecraft.entity.player.InventoryPlayer;
-
-public class GT_GUIContainer_Filter extends GT_GUIContainerMetaTile_Machine {
- public GT_GUIContainer_Filter(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(new GT_Container_Filter(aInventoryPlayer, aTileEntity), "gregtech:textures/gui/Filter.png");
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float parTicks, int mouseX, int mouseY) {
- super.drawGuiContainerBackgroundLayer(parTicks, mouseX, mouseY);
- int x = (this.width - this.xSize) / 2;
- int y = (this.height - this.ySize) / 2;
- drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_FusionReactor.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_FusionReactor.java
deleted file mode 100644
index 87e035c61a..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_FusionReactor.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package gregtech.common.gui;
-
-import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
-
-import gregtech.api.gui.GT_Container_MultiMachine;
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.util.GT_Utility;
-import gregtech.nei.NEI_TransferRectHost;
-import java.awt.Rectangle;
-import net.minecraft.entity.player.InventoryPlayer;
-
-public class GT_GUIContainer_FusionReactor extends GT_GUIContainerMetaTile_Machine implements NEI_TransferRectHost {
-
- public String mNEI;
- String mName = "";
-
- private final int textColor = this.getTextColorOrDefault("text", 0xFAFAFF),
- textColorTitle = this.getTextColorOrDefault("title", 0xFAFAFF),
- textColorValue = this.getTextColorOrDefault("value", 0xFF0000);
-
- public GT_GUIContainer_FusionReactor(
- InventoryPlayer aInventoryPlayer,
- IGregTechTileEntity aTileEntity,
- String aName,
- String aTextureFile,
- String aNEI) {
- super(
- new GT_Container_MultiMachine(aInventoryPlayer, aTileEntity, false),
- RES_PATH_GUI + "multimachines/" + (aTextureFile == null ? "MultiblockDisplay" : aTextureFile));
- mName = aName;
- mNEI = aNEI;
- }
-
- @Override
- protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
- fontRendererObj.drawString(mName, 8, -10, textColorTitle);
-
- if (mContainer != null) {
- if ((mContainer.mDisplayErrorCode & 64) != 0)
- fontRendererObj.drawString("Incomplete Structure.", 10, 8, textColor);
-
- if (mContainer.mDisplayErrorCode == 0) {
- if (mContainer.mActive == 0) {
- fontRendererObj.drawString(
- "Hit with Soft Mallet to (re-)start the Machine if it doesn't start.", -70, 170, textColor);
- } else {
- fontRendererObj.drawString("Running perfectly.", 10, 170, textColor);
- }
- }
- if (this.mContainer.mEnergy > 160000000 && this.mContainer.mEnergy < 160010000)
- fontRendererObj.drawString("160,000,000 EU", 50, 155, textColorValue);
- else if (this.mContainer.mEnergy > 320000000 && this.mContainer.mEnergy < 320010000)
- fontRendererObj.drawString("320,000,000 EU", 50, 155, textColorValue);
- else if (this.mContainer.mEnergy > 640000000 && this.mContainer.mEnergy < 640010000)
- fontRendererObj.drawString("640,000,000 EU", 50, 155, textColorValue);
- else if (this.mContainer.mEnergyLong > 5120000000L && this.mContainer.mEnergyLong < 5120080000L)
- fontRendererObj.drawString("5,120,000,000 EU", 50, 155, textColorValue);
- else
- fontRendererObj.drawString(
- GT_Utility.formatNumbers(this.mContainer.mEnergyLong) + " EU", 50, 155, textColorValue);
- }
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float parTicks, int mouseX, int mouseY) {
- super.drawGuiContainerBackgroundLayer(parTicks, mouseX, mouseY);
- int x = (width - xSize) / 2;
- int y = (height - ySize) / 2;
- drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
- if (this.mContainer != null) {
- double tScale = (double) this.mContainer.mEnergyLong / (double) this.mContainer.mStorageLong;
- drawTexturedModalRect(x + 5, y + 156, 0, 251, Math.min(147, (int) (tScale * 148)), 5);
- }
- }
-
- @Override
- public String getNeiTransferRectString() {
- return mNEI;
- }
-
- @Override
- public String getNeiTransferRectTooltip() {
- return "Recipes";
- }
-
- @Override
- public Object[] getNeiTransferRectArgs() {
- return new Object[0];
- }
-
- @Override
- public Rectangle getNeiTransferRect() {
- return new Rectangle(149, -7, 18, 18);
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_IndustrialApiary.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_IndustrialApiary.java
deleted file mode 100644
index 015e9f74a5..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_IndustrialApiary.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package gregtech.common.gui;
-
-import forestry.api.apiculture.*;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.gui.widgets.GT_GuiSlotTooltip;
-import gregtech.api.gui.widgets.GT_GuiTooltip;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.util.GT_TooltipDataCache;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_IndustrialApiary;
-import java.awt.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.util.StatCollector;
-
-public class GT_GUIContainer_IndustrialApiary extends GT_GUIContainerMetaTile_Machine {
-
- private static final String BATTERY_SLOT_TOOLTIP = "GT5U.machines.battery_slot.tooltip",
- UNUSED_SLOT_TOOLTIP = "GT5U.machines.unused_slot.tooltip",
- STALLED_STUTTERING_TOOLTIP = "GT5U.machines.stalled_stuttering.tooltip",
- ITEM_TRANSFER_TOOLTIP = "GT5U.machines.item_transfer.tooltip",
- POWER_SOURCE_POWER = "GT5U.machines.powersource.power",
- CANCEL_PROCESS_TOOLTIP = "GT5U.machines.industrialapiary.cancel.tooltip",
- SPEED_TOOLTIP = "GT5U.machines.industrialapiary.speed.tooltip",
- SPEED_LOCKED_TOOLTIP = "GT5U.machines.industrialapiary.speedlocked.tooltip",
- INFO_TOOLTIP = "GT5U.machines.industrialapiary.info.tooltip",
- INFO_WITH_BEE_TOOLTIP = "GT5U.machines.industrialapiary.infoextended.tooltip",
- UPGRADE_TOOLTIP = "GT5U.machines.industrialapiary.upgradeslot.tooltip";
- private final int textColor = this.getTextColorOrDefault("text", 0x404040),
- textColorTitle = this.getTextColorOrDefault("title", 0x404040),
- textColorValue = this.getTextColorOrDefault("value", 0x404040);
-
- GT_GuiTooltip mErrorStatesTooltip;
- GT_GuiTooltip mSpeedToggleTooltip;
- GT_GuiTooltip mInfoTooltip;
-
- public GT_GUIContainer_IndustrialApiary(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(
- new GT_Container_IndustrialApiary(aInventoryPlayer, aTileEntity),
- "gregtech:textures/gui/basicmachines/IndustrialApiary.png");
- }
-
- @Override
- protected void setupTooltips() {
- Rectangle tBeeProblemArea = new Rectangle(this.guiLeft + 100, this.guiTop + 63, 18, 18);
- addToolTip(
- mErrorStatesTooltip = new GT_GuiTooltip(tBeeProblemArea, "") {
- @Override
- protected void onTick() {
- boolean e = this.enabled;
- super.onTick();
- this.enabled = e;
- }
- });
- addToolTip(
- mSpeedToggleTooltip = new GT_GuiSlotTooltip(
- getContainer().slotSpeedToggle, new GT_TooltipDataCache.TooltipData(null, null)));
- mErrorStatesTooltip.enabled = false;
- addToolTip(mInfoTooltip = new GT_GuiTooltip(new Rectangle(this.guiLeft + 163, guiTop + 5, 6, 17)));
-
- addToolTip(
- new GT_GuiSlotTooltip(getContainer().slotCancelProcess, mTooltipCache.getData(CANCEL_PROCESS_TOOLTIP)));
- getContainer()
- .slotUpgrade
- .forEach(s -> addToolTip(new GT_GuiSlotTooltip(s, mTooltipCache.getData(UPGRADE_TOOLTIP))));
-
- addToolTip(new GT_GuiSlotTooltip(
- getContainer().slotItemTransferToggle, mTooltipCache.getData(ITEM_TRANSFER_TOOLTIP)));
- addToolTip(new GT_GuiSlotTooltip(
- getContainer().slotBattery,
- mTooltipCache.getData(
- BATTERY_SLOT_TOOLTIP, powerTierName(getContainer().getMachine().mTier), powerTierName((byte)
- (getContainer().getMachine().mTier + 1)))));
- addToolTip(new GT_GuiSlotTooltip(getContainer().slotSpecial, mTooltipCache.getData(UNUSED_SLOT_TOOLTIP)));
- }
-
- @Override
- public void drawScreen(int mouseX, int mouseY, float parTicks) {
- mErrorStatesTooltip.enabled = !getContainer().mErrorStates.isEmpty();
- if (mErrorStatesTooltip.enabled) {
- mErrorStatesTooltip.setToolTipText(
- new GT_TooltipDataCache.TooltipData(getContainer().mErrorStates, getContainer().mErrorStates));
- } else if (getContainer().mStuttering) {
- mErrorStatesTooltip.enabled = true;
- mErrorStatesTooltip.setToolTipText(mTooltipCache.getData(
- STALLED_STUTTERING_TOOLTIP, StatCollector.translateToLocal(POWER_SOURCE_POWER)));
- }
- int accelerated = (1 << getContainer().mSpeed);
- int energyusage = 0;
- if (accelerated == 2) energyusage = 32;
- else if (accelerated > 2) energyusage = 32 * accelerated << (getContainer().mSpeed - 2);
- mSpeedToggleTooltip.setToolTipText(mTooltipCache.getUncachedTooltipData(
- getContainer().mLockedSpeed ? SPEED_LOCKED_TOOLTIP : SPEED_TOOLTIP,
- accelerated,
- GT_Utility.formatNumbers(energyusage)));
- ArrayList<String> s = new ArrayList<>();
- GT_MetaTileEntity_IndustrialApiary IA = getContainer().getMachine();
-
- String energyreq = GT_Utility.formatNumbers(
- (int) ((float) GT_MetaTileEntity_IndustrialApiary.baseEUtUsage * IA.getEnergyModifier() * accelerated)
- + energyusage);
- String Temp = StatCollector.translateToLocal(IA.getTemperature().getName());
- String Hum = StatCollector.translateToLocal(IA.getHumidity().getName());
- boolean moreinformationgiven = false;
- if (IA.getUsedQueen() != null && BeeManager.beeRoot.isMember(IA.getUsedQueen(), EnumBeeType.QUEEN.ordinal())) {
- IBee bee = BeeManager.beeRoot.getMember(IA.getUsedQueen());
- if (bee.isAnalyzed()) {
- moreinformationgiven = true;
- IBeeGenome genome = bee.getGenome();
- IBeeModifier mod =
- BeeManager.beeRoot.getBeekeepingMode(IA.getWorld()).getBeeModifier();
- float tmod = IA.getTerritoryModifier(null, 1f) * mod.getTerritoryModifier(null, 1f);
- int[] t = Arrays.stream(genome.getTerritory())
- .map(i -> (int) ((float) i * tmod))
- .toArray();
- mInfoTooltip.setToolTipText(mTooltipCache.getUncachedTooltipData(
- INFO_WITH_BEE_TOOLTIP,
- energyreq,
- Temp,
- Hum,
- genome.getSpeed(),
- IA.getProductionModifier(null, 1f) * mod.getProductionModifier(null, 1f),
- Math.round(IA.getFloweringModifier(null, 1f)
- * genome.getFlowering()
- * mod.getFloweringModifier(null, 1f)),
- Math.round(IA.getLifespanModifier(null, null, 1f)
- * genome.getLifespan()
- * mod.getLifespanModifier(null, null, 1f)),
- t[0],
- t[1],
- t[2]));
- }
- }
- if (!moreinformationgiven)
- mInfoTooltip.setToolTipText(mTooltipCache.getUncachedTooltipData(INFO_TOOLTIP, energyreq, Temp, Hum));
-
- super.drawScreen(mouseX, mouseY, parTicks);
- }
-
- @Override
- protected void drawGuiContainerForegroundLayer(int par1, int par2) {
- this.fontRendererObj.drawString("Ind. Apiary", 8, 4, textColorTitle);
- this.fontRendererObj.drawString("x", 30, 63, textColor);
- this.fontRendererObj.drawString((1 << getContainer().mSpeed) + "", 26, 72, textColorValue);
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
- super.drawGuiContainerBackgroundLayer(par1, par2, par3);
- int x = (this.width - this.xSize) / 2;
- int y = (this.height - this.ySize) / 2;
- drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
- if (this.mContainer != null) {
- if (getContainer().mItemTransfer) drawTexturedModalRect(x + 7, y + 62, 176, 18, 18, 18);
- if (getContainer().mMaxProgressTime > 0) {
- double p = (double) getContainer().mProgressTime / getContainer().mMaxProgressTime;
- drawTexturedModalRect(x + 70, y + 3, 176, 0, (int) (p * 20), 18);
- }
- if (mErrorStatesTooltip.enabled)
- drawTexturedModalRect(x + 100, y + 63, 176, 36, getContainer().mStuttering ? 18 : 9, 18);
- }
- }
-
- private GT_Container_IndustrialApiary getContainer() {
- return ((GT_Container_IndustrialApiary) this.mContainer);
- }
-
- // taken from GT_GUIContainer_BasicMachine
- private String powerTierName(byte machineTier) {
- return GT_Values.TIER_COLORS[machineTier] + GT_Values.VN[machineTier];
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_InputBus_ME.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_InputBus_ME.java
deleted file mode 100644
index 9b19da6367..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_InputBus_ME.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package gregtech.common.gui;
-
-import appeng.client.render.AppEngRenderItem;
-import appeng.core.AELog;
-import appeng.integration.IntegrationRegistry;
-import appeng.integration.IntegrationType;
-import appeng.integration.abstraction.INEI;
-import appeng.util.Platform;
-import cpw.mods.fml.common.Optional;
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.gui.GT_Slot_Holo_ME;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import net.minecraft.client.gui.inventory.GuiContainer;
-import net.minecraft.client.renderer.entity.RenderItem;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.Slot;
-
-public class GT_GUIContainer_InputBus_ME extends GT_GUIContainerMetaTile_Machine {
-
- private final AppEngRenderItem aeRenderItem = new AppEngRenderItem();
-
- public GT_GUIContainer_InputBus_ME(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(new GT_Container_InputBus_ME(aInventoryPlayer, aTileEntity), "gregtech:textures/gui/InputBusME.png");
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float parTicks, int mouseX, int mouseY) {
- super.drawGuiContainerBackgroundLayer(parTicks, mouseX, mouseY);
- int x = (this.width - this.xSize) / 2;
- int y = (this.height - this.ySize) / 2;
- drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
- }
-
- // base method is made public by AE2 ASM
- public void func_146977_a(final Slot s) {
- this.drawSlot(s);
- }
-
- @Optional.Method(modid = "appliedenergistics2")
- private RenderItem setItemRender(final RenderItem item) {
- if (IntegrationRegistry.INSTANCE.isEnabled(IntegrationType.NEI)) {
- return ((INEI) IntegrationRegistry.INSTANCE.getInstance(IntegrationType.NEI)).setItemRender(item);
- } else {
- final RenderItem ri = itemRender;
- itemRender = item;
- return ri;
- }
- }
-
- @Optional.Method(modid = "appliedenergistics2")
- private void drawSlot(final Slot s) {
- if (s instanceof GT_Slot_Holo_ME) {
- final RenderItem pIR = this.setItemRender(this.aeRenderItem);
- try {
- this.zLevel = 0.0F;
- itemRender.zLevel = 0.0F;
- this.aeRenderItem.setAeStack(Platform.getAEStackInSlot(s));
- this.safeDrawSlot(s);
- } catch (final Exception err) {
- AELog.warn("[AppEng] AE prevented crash while drawing slot: " + err.toString());
- }
- this.setItemRender(pIR);
- return;
- }
- safeDrawSlot(s);
- }
-
- @Optional.Method(modid = "appliedenergistics2")
- private void safeDrawSlot(final Slot s) {
- try {
- GuiContainer.class
- .getDeclaredMethod("func_146977_a_original", Slot.class)
- .invoke(this, s);
- } catch (final Exception ignored) {
- }
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_ItemDistributor.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_ItemDistributor.java
deleted file mode 100644
index 2c8fa870a1..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_ItemDistributor.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import net.minecraft.entity.player.InventoryPlayer;
-
-public class GT_GUIContainer_ItemDistributor extends GT_GUIContainerMetaTile_Machine {
- public GT_GUIContainer_ItemDistributor(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(
- new GT_Container_ItemDistributor(aInventoryPlayer, aTileEntity),
- "gregtech:textures/gui/ItemDistributor.png");
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float parTicks, int mouseX, int mouseY) {
- super.drawGuiContainerBackgroundLayer(parTicks, mouseX, mouseY);
- int x = (this.width - this.xSize) / 2;
- int y = (this.height - this.ySize) / 2;
- drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_MicrowaveEnergyTransmitter.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_MicrowaveEnergyTransmitter.java
deleted file mode 100644
index 7b0b840276..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_MicrowaveEnergyTransmitter.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package gregtech.common.gui;
-
-import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
-
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.InventoryPlayer;
-
-public class GT_GUIContainer_MicrowaveEnergyTransmitter extends GT_GUIContainerMetaTile_Machine {
-
- private final int textColor = this.getTextColorOrDefault("text", 0xFAFAFF),
- textColorTitle = this.getTextColorOrDefault("title", 0xFAFAFF);
-
- public GT_GUIContainer_MicrowaveEnergyTransmitter(
- InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(
- new GT_Container_MicrowaveEnergyTransmitter(aInventoryPlayer, aTileEntity),
- RES_PATH_GUI + "Teleporter.png");
- }
-
- @Override
- protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
- this.fontRendererObj.drawString("Teleporter", 46, 8, textColorTitle);
- if (this.mContainer != null) {
- this.fontRendererObj.drawString(
- "X: "
- + GT_Utility.parseNumberToString(
- ((GT_Container_MicrowaveEnergyTransmitter) this.mContainer).mTargetX),
- 46,
- 16,
- textColor);
- this.fontRendererObj.drawString(
- "Y: "
- + GT_Utility.parseNumberToString(
- ((GT_Container_MicrowaveEnergyTransmitter) this.mContainer).mTargetY),
- 46,
- 24,
- textColor);
- this.fontRendererObj.drawString(
- "Z: "
- + GT_Utility.parseNumberToString(
- ((GT_Container_MicrowaveEnergyTransmitter) this.mContainer).mTargetZ),
- 46,
- 32,
- textColor);
- if (((GT_Container_MicrowaveEnergyTransmitter) this.mContainer).mEgg > 0) {
- this.fontRendererObj.drawString(
- "Dim: "
- + GT_Utility.parseNumberToString(
- ((GT_Container_MicrowaveEnergyTransmitter) this.mContainer).mTargetD),
- 46,
- 40,
- textColor);
- this.fontRendererObj.drawString(
- "Dim Valid: "
- + (GT_Utility.isRealDimension(
- ((GT_Container_MicrowaveEnergyTransmitter) this.mContainer).mTargetD)
- ? "Yes"
- : "No"),
- 46,
- 48,
- textColor);
- }
- }
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float parTicks, int mouseX, int mouseY) {
- super.drawGuiContainerBackgroundLayer(parTicks, mouseX, mouseY);
- int x = (this.width - this.xSize) / 2;
- int y = (this.height - this.ySize) / 2;
- drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_OutputHatch.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_OutputHatch.java
deleted file mode 100644
index ab00d16291..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_OutputHatch.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package gregtech.common.gui;
-
-import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
-
-import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.interfaces.IDragAndDropSupport;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.net.GT_Packet_SetLockedFluid;
-import gregtech.api.util.GT_Utility;
-import net.minecraft.client.gui.inventory.GuiContainer;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.StatCollector;
-import net.minecraftforge.fluids.FluidStack;
-
-public class GT_GUIContainer_OutputHatch extends GT_GUIContainerMetaTile_Machine implements IDragAndDropSupport {
-
- private final String mName;
- private final int textColor = this.getTextColorOrDefault("text", 0xFAFAFF),
- textColorTitle = this.getTextColorOrDefault("title", 0x404040),
- textColorValue = this.getTextColorOrDefault("value", 0xFAFAFF);
-
- public GT_GUIContainer_OutputHatch(
- InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName) {
- super(new GT_Container_OutputHatch(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "OutputHatch.png");
- mName = aName;
- }
-
- @Override
- protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
- fontRendererObj.drawString(
- StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, textColorTitle);
- fontRendererObj.drawString(mName, 8, 6, textColorTitle);
- if (mContainer != null) {
- fontRendererObj.drawString("Liquid Amount", 10, 20, textColor);
- fontRendererObj.drawString(
- GT_Utility.parseNumberToString(((GT_Container_OutputHatch) mContainer).mContent),
- 10,
- 30,
- textColorValue);
- fontRendererObj.drawString("Locked Fluid", 101, 20, textColor);
- ItemStack tLockedDisplayStack =
- (ItemStack) mContainer.getInventory().get(3);
- String fluidName = tLockedDisplayStack == null ? "None" : tLockedDisplayStack.getDisplayName();
- fontRendererObj.drawString(fluidName, 101, 30, textColorValue);
- }
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float parTicks, int mouseX, int mouseY) {
- super.drawGuiContainerBackgroundLayer(parTicks, mouseX, mouseY);
- int x = (width - xSize) / 2;
- int y = (height - ySize) / 2;
- drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
- }
-
- @Override
- public boolean handleDragAndDropGT(
- GuiContainer gui, int mousex, int mousey, ItemStack draggedStack, int button, boolean isGhost) {
- if (isGhost
- && gui instanceof GT_GUIContainer_OutputHatch
- && ((GT_GUIContainer_OutputHatch) gui).isMouseOverSlot(3, mousex, mousey)) {
- // the instanceof check should be unnecessary, but we will do it regardless, just in case.
- FluidStack tFluidStack = GT_Utility.getFluidFromContainerOrFluidDisplay(draggedStack);
- if (tFluidStack != null) {
- GT_Values.NW.sendToServer(new GT_Packet_SetLockedFluid(
- ((GT_GUIContainer_OutputHatch) gui).mContainer.mTileEntity, tFluidStack));
- draggedStack.stackSize = 0;
- return true;
- }
- }
- return false;
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_PrimitiveBlastFurnace.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_PrimitiveBlastFurnace.java
deleted file mode 100644
index 060b93674a..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_PrimitiveBlastFurnace.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.gui.widgets.GT_GuiIcon;
-import gregtech.api.gui.widgets.GT_GuiTabLine.GT_GuiTabIconSet;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.nei.NEI_TransferRectHost;
-import java.awt.*;
-import net.minecraft.entity.player.InventoryPlayer;
-
-public class GT_GUIContainer_PrimitiveBlastFurnace extends GT_GUIContainerMetaTile_Machine
- implements NEI_TransferRectHost {
- private String name;
- public String mNEI;
- private static final GT_GuiTabIconSet TAB_ICONSET = new GT_GuiTabIconSet(
- GT_GuiIcon.TAB_NORMAL_BRICK, GT_GuiIcon.TAB_HIGHLIGHT_BRICK, GT_GuiIcon.TAB_DISABLED_BRICK);
- private final int textColor = this.getTextColorOrDefault("title", 0x404040);
-
- public GT_GUIContainer_PrimitiveBlastFurnace(
- InventoryPlayer inventoryPlayer, IGregTechTileEntity tileEntity, String name, String aNEI) {
- super(
- new GT_Container_PrimitiveBlastFurnace(inventoryPlayer, tileEntity),
- String.format("gregtech:textures/gui/%s.png", name.replace(" ", "")));
- this.name = name;
- this.mNEI = aNEI;
- }
-
- @Override
- protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
- this.fontRendererObj.drawString(name, 8, 4, textColor);
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float parTicks, int mouseX, int mouseY) {
- super.drawGuiContainerBackgroundLayer(parTicks, mouseX, mouseY);
- int x = (this.width - this.xSize) / 2;
- int y = (this.height - this.ySize) / 2;
- drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
- if ((this.mContainer != null) && (this.mContainer.mProgressTime > 0)) {
- drawTexturedModalRect(
- x + 58,
- y + 28,
- 176,
- 0,
- Math.max(
- 0,
- Math.min(
- 20,
- (1)
- + this.mContainer.mProgressTime
- * 20
- / (Math.max(this.mContainer.mMaxProgressTime, 1)))),
- 11);
- }
- }
-
- @Override
- protected GT_GuiTabIconSet getTabBackground() {
- return TAB_ICONSET;
- }
-
- @Override
- public String getNeiTransferRectString() {
- return mNEI;
- }
-
- @Override
- public String getNeiTransferRectTooltip() {
- return "Recipes";
- }
-
- @Override
- public Object[] getNeiTransferRectArgs() {
- return new Object[0];
- }
-
- @Override
- public Rectangle getNeiTransferRect() {
- return new Rectangle(51, 10, 24, 24);
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_QuantumChest.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_QuantumChest.java
deleted file mode 100644
index 530e48e550..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_QuantumChest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package gregtech.common.gui;
-
-import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
-
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.util.StatCollector;
-
-public class GT_GUIContainer_QuantumChest extends GT_GUIContainerMetaTile_Machine {
-
- private final String mName;
- private final int textColor = this.getTextColorOrDefault("text", 0xFAFAFF),
- textColorTitle = this.getTextColorOrDefault("title", 0x404040),
- textColorValue = this.getTextColorOrDefault("value", 0xFAFAFF);
-
- public GT_GUIContainer_QuantumChest(
- InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName) {
- super(new GT_Container_QuantumChest(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "BasicTank.png");
- mName = aName;
- }
-
- @Override
- protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
- fontRendererObj.drawString(
- StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, textColorTitle);
- fontRendererObj.drawString(mName, 8, 6, textColorTitle);
- if (mContainer != null) {
- fontRendererObj.drawString("Item Amount", 10, 20, textColor);
- fontRendererObj.drawString(
- GT_Utility.parseNumberToString(((GT_Container_QuantumChest) mContainer).mContent),
- 10,
- 30,
- textColorValue);
- }
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float parTicks, int mouseX, int mouseY) {
- super.drawGuiContainerBackgroundLayer(parTicks, mouseX, mouseY);
- int x = (width - xSize) / 2;
- int y = (height - ySize) / 2;
- drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_RecipeFilter.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_RecipeFilter.java
deleted file mode 100644
index 8bfc2c0944..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_RecipeFilter.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.api.gui.GT_Container_SpecialFilter;
-import gregtech.api.gui.GT_GUIContainer_SpecialFilter;
-import gregtech.api.gui.widgets.GT_GuiSlotTooltip;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import net.minecraft.entity.player.InventoryPlayer;
-
-public class GT_GUIContainer_RecipeFilter extends GT_GUIContainer_SpecialFilter {
-
- private static final String REPRESENTATION_SLOT_TOOLTIP = "GT5U.recipe_filter.representation_slot.tooltip";
-
- public GT_GUIContainer_RecipeFilter(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(aInventoryPlayer, aTileEntity);
- }
-
- @Override
- protected void setupTooltips() {
- addToolTip(new GT_GuiSlotTooltip(
- ((GT_Container_SpecialFilter) mContainer).getSpecialSlot(),
- mTooltipCache.getData(REPRESENTATION_SLOT_TOOLTIP)));
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_Regulator.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_Regulator.java
deleted file mode 100644
index c3d579e58c..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_Regulator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import net.minecraft.entity.player.InventoryPlayer;
-
-public class GT_GUIContainer_Regulator extends GT_GUIContainerMetaTile_Machine {
-
- private final int textColor = this.getTextColorOrDefault("text", 0xFAFAFF);
-
- public GT_GUIContainer_Regulator(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(new GT_Container_Regulator(aInventoryPlayer, aTileEntity), "gregtech:textures/gui/Regulator.png");
- }
-
- @Override
- protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
- this.fontRendererObj.drawString(
- String.valueOf(((GT_Container_Regulator) this.mContainer).mTargetSlots[0]), 120, 9, textColor);
- this.fontRendererObj.drawString(
- String.valueOf(((GT_Container_Regulator) this.mContainer).mTargetSlots[1]), 137, 9, textColor);
- this.fontRendererObj.drawString(
- String.valueOf(((GT_Container_Regulator) this.mContainer).mTargetSlots[2]), 155, 9, textColor);
- this.fontRendererObj.drawString(
- String.valueOf(((GT_Container_Regulator) this.mContainer).mTargetSlots[3]), 120, 26, textColor);
- this.fontRendererObj.drawString(
- String.valueOf(((GT_Container_Regulator) this.mContainer).mTargetSlots[4]), 137, 26, textColor);
- this.fontRendererObj.drawString(
- String.valueOf(((GT_Container_Regulator) this.mContainer).mTargetSlots[5]), 155, 26, textColor);
- this.fontRendererObj.drawString(
- String.valueOf(((GT_Container_Regulator) this.mContainer).mTargetSlots[6]), 120, 43, textColor);
- this.fontRendererObj.drawString(
- String.valueOf(((GT_Container_Regulator) this.mContainer).mTargetSlots[7]), 137, 43, textColor);
- this.fontRendererObj.drawString(
- String.valueOf(((GT_Container_Regulator) this.mContainer).mTargetSlots[8]), 155, 43, textColor);
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float parTicks, int mouseX, int mouseY) {
- super.drawGuiContainerBackgroundLayer(parTicks, mouseX, mouseY);
- int x = (this.width - this.xSize) / 2;
- int y = (this.height - this.ySize) / 2;
- drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_SuperBuffer.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_SuperBuffer.java
deleted file mode 100644
index e7b7730d75..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_SuperBuffer.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package gregtech.common.gui;
-
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import net.minecraft.entity.player.InventoryPlayer;
-
-public class GT_GUIContainer_SuperBuffer extends GT_GUIContainerMetaTile_Machine {
- public GT_GUIContainer_SuperBuffer(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(new GT_Container_SuperBuffer(aInventoryPlayer, aTileEntity), "gregtech:textures/gui/SuperBuffer.png");
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float parTicks, int mouseX, int mouseY) {
- super.drawGuiContainerBackgroundLayer(parTicks, mouseX, mouseY);
- int x = (this.width - this.xSize) / 2;
- int y = (this.height - this.ySize) / 2;
- drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
- }
-}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_Teleporter.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_Teleporter.java
deleted file mode 100644
index a5e035b4ff..0000000000
--- a/src/main/java/gregtech/common/gui/GT_GUIContainer_Teleporter.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package gregtech.common.gui;
-
-import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
-
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.InventoryPlayer;
-
-public class GT_GUIContainer_Teleporter extends GT_GUIContainerMetaTile_Machine {
-
- private final int textColor = this.getTextColorOrDefault("text", 0xFAFAFF),
- textColorTitle = this.getTextColorOrDefault("text", 0xFAFAFF);
-
- public GT_GUIContainer_Teleporter(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
- super(new GT_Container_Teleporter(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "Teleporter.png");
- }
-
- @Override
- protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
- this.fontRendererObj.drawString("Teleporter", 46, 8, textColorTitle);
- if (this.mContainer != null) {
- this.fontRendererObj.drawString(
- "X: " + GT_Utility.parseNumberToString(((GT_Container_Teleporter) this.mContainer).mTargetX),
- 46,
- 16,
- textColor);
- this.fontRendererObj.drawString(
- "Y: " + GT_Utility.parseNumberToString(((GT_Container_Teleporter) this.mContainer).mTargetY),
- 46,
- 24,
- textColor);
- this.fontRendererObj.drawString(
- "Z: " + GT_Utility.parseNumberToString(((GT_Container_Teleporter) this.mContainer).mTargetZ),
- 46,
- 32,
- textColor);
- if (((GT_Container_Teleporter) this.mContainer).mEgg > 0) {
- this.fontRendererObj.drawString(
- "Dim: " + GT_Utility.parseNumberToString(((GT_Container_Teleporter) this.mContainer).mTargetD),
- 46,
- 40,
- textColor);
- this.fontRendererObj.drawString(
- "Dim Valid: "
- + (GT_Utility.isRealDimension(((GT_Container_Teleporter) this.mContainer).mTargetD)
- ? "Yes"
- : "No"),
- 46,
- 48,
- textColor);
- }
- }
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float parTicks, int mouseX, int mouseY) {
- super.drawGuiContainerBackgroundLayer(parTicks, mouseX, mouseY);
- int x = (this.width - this.xSize) / 2;
- int y = (this.height - this.ySize) / 2;
- drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
- }
-}
diff --git a/src/main/java/gregtech/common/gui/modularui/UIHelper.java b/src/main/java/gregtech/common/gui/modularui/UIHelper.java
new file mode 100644
index 0000000000..f500514258
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/modularui/UIHelper.java
@@ -0,0 +1,222 @@
+package gregtech.common.gui.modularui;
+
+import com.gtnewhorizons.modularui.api.drawable.IDrawable;
+import com.gtnewhorizons.modularui.api.math.Pos2d;
+import gregtech.api.enums.SteamVariant;
+import gregtech.api.gui.modularui.SteamTexture;
+import gregtech.api.util.GT_Recipe;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.annotation.Nullable;
+
+public class UIHelper {
+
+ /**
+ * Iterates over candidates for slot placement.
+ */
+ public static void forEachSlots(
+ ForEachSlot forEachItemInputSlot,
+ ForEachSlot forEachItemOutputSlot,
+ ForEachSlot forEachSpecialSlot,
+ ForEachSlot forEachFluidInputSlot,
+ ForEachSlot forEachFluidOutputSlot,
+ IDrawable itemSlotBackground,
+ IDrawable fluidSlotBackground,
+ @Nullable GT_Recipe.GT_Recipe_Map recipeMap,
+ int itemInputCount,
+ int itemOutputCount,
+ int fluidInputCount,
+ int fluidOutputCount,
+ SteamVariant steamVariant,
+ Pos2d offset) {
+ List<Pos2d> itemInputPositions = recipeMap != null
+ ? recipeMap.getItemInputPositions(itemInputCount)
+ : UIHelper.getItemInputPositions(itemInputCount);
+ itemInputPositions = itemInputPositions.stream().map(p -> p.add(offset)).collect(Collectors.toList());
+ for (int i = 0; i < itemInputPositions.size(); i++) {
+ forEachItemInputSlot.accept(
+ i,
+ getBackgroundsForSlot(itemSlotBackground, recipeMap, false, false, i, false, steamVariant),
+ itemInputPositions.get(i));
+ }
+
+ List<Pos2d> itemOutputPositions = recipeMap != null
+ ? recipeMap.getItemOutputPositions(itemOutputCount)
+ : UIHelper.getItemOutputPositions(itemOutputCount);
+ itemOutputPositions =
+ itemOutputPositions.stream().map(p -> p.add(offset)).collect(Collectors.toList());
+ for (int i = 0; i < itemOutputPositions.size(); i++) {
+ forEachItemOutputSlot.accept(
+ i,
+ getBackgroundsForSlot(itemSlotBackground, recipeMap, false, true, i, false, steamVariant),
+ itemOutputPositions.get(i));
+ }
+
+ forEachSpecialSlot.accept(
+ 0,
+ getBackgroundsForSlot(itemSlotBackground, recipeMap, false, false, 0, true, steamVariant),
+ (recipeMap != null ? recipeMap.getSpecialItemPosition() : UIHelper.getSpecialItemPosition())
+ .add(offset));
+
+ List<Pos2d> fluidInputPositions = recipeMap != null
+ ? recipeMap.getFluidInputPositions(fluidInputCount)
+ : UIHelper.getFluidInputPositions(fluidInputCount);
+ fluidInputPositions =
+ fluidInputPositions.stream().map(p -> p.add(offset)).collect(Collectors.toList());
+ for (int i = 0; i < fluidInputPositions.size(); i++) {
+ forEachFluidInputSlot.accept(
+ i,
+ getBackgroundsForSlot(fluidSlotBackground, recipeMap, true, false, i, false, steamVariant),
+ fluidInputPositions.get(i));
+ }
+
+ List<Pos2d> fluidOutputPositions = recipeMap != null
+ ? recipeMap.getFluidOutputPositions(fluidOutputCount)
+ : UIHelper.getFluidOutputPositions(fluidOutputCount);
+ fluidOutputPositions =
+ fluidOutputPositions.stream().map(p -> p.add(offset)).collect(Collectors.toList());
+ for (int i = 0; i < fluidOutputPositions.size(); i++) {
+ forEachFluidOutputSlot.accept(
+ i,
+ getBackgroundsForSlot(fluidSlotBackground, recipeMap, true, true, i, false, steamVariant),
+ fluidOutputPositions.get(i));
+ }
+ }
+
+ /**
+ * @return Display positions for GUI, including border (18x18 size)
+ */
+ public static List<Pos2d> getItemInputPositions(int itemInputCount) {
+ switch (itemInputCount) {
+ case 0:
+ return Collections.emptyList();
+ case 1:
+ return getItemGridPositions(itemInputCount, 52, 24, 1, 1);
+ case 2:
+ return getItemGridPositions(itemInputCount, 34, 24, 2, 1);
+ case 3:
+ return getItemGridPositions(itemInputCount, 16, 24, 3, 1);
+ case 4:
+ case 5:
+ return getItemGridPositions(itemInputCount, 16, 24, 3, 2);
+ case 6:
+ return getItemGridPositions(itemInputCount, 16, 15, 3, 2);
+ default:
+ return getItemGridPositions(itemInputCount, 16, 6, 3, 3);
+ }
+ }
+
+ /**
+ * @return Display positions for GUI, including border (18x18 size)
+ */
+ public static List<Pos2d> getItemOutputPositions(int itemOutputCount) {
+ switch (itemOutputCount) {
+ case 0:
+ return Collections.emptyList();
+ case 1:
+ return getItemGridPositions(itemOutputCount, 106, 24, 1, 1);
+ case 2:
+ return getItemGridPositions(itemOutputCount, 106, 24, 2, 1);
+ case 3:
+ return getItemGridPositions(itemOutputCount, 106, 24, 3, 1);
+ case 4:
+ return getItemGridPositions(itemOutputCount, 106, 15, 2, 2);
+ case 5:
+ case 6:
+ return getItemGridPositions(itemOutputCount, 106, 15, 3, 2);
+ default:
+ return getItemGridPositions(itemOutputCount, 106, 6, 3, 3);
+ }
+ }
+
+ /**
+ * @return Display position for GUI, including border (18x18 size)
+ */
+ public static Pos2d getSpecialItemPosition() {
+ return new Pos2d(124, 62);
+ }
+
+ /**
+ * @return Display positions for GUI, including border (18x18 size)
+ */
+ public static List<Pos2d> getFluidInputPositions(int fluidInputCount) {
+ List<Pos2d> results = new ArrayList<>();
+ int x = 52;
+ for (int i = 0; i < fluidInputCount; i++) {
+ results.add(new Pos2d(x, 62));
+ x -= 18;
+ }
+ return results;
+ }
+
+ /**
+ * @return Display positions for GUI, including border (18x18 size)
+ */
+ public static List<Pos2d> getFluidOutputPositions(int fluidOutputCount) {
+ List<Pos2d> results = new ArrayList<>();
+ int x = 106;
+ for (int i = 0; i < fluidOutputCount; i++) {
+ results.add(new Pos2d(x, 62));
+ x += 18;
+ }
+ return results;
+ }
+
+ public static List<Pos2d> getItemGridPositions(
+ int itemCount, int xOrigin, int yOrigin, int xDirMaxCount, int yDirMaxCount) {
+ // 18 pixels to get to a new grid for placing an item tile since they are 16x16 and have 1 pixel buffers
+ // around them.
+ int distanceGrid = 18;
+ int xMax = xOrigin + xDirMaxCount * distanceGrid;
+
+ List<Pos2d> results = new ArrayList<>();
+ // Temp variables to keep track of current coordinates to place item at.
+ int xCoord = xOrigin;
+ int yCoord = yOrigin;
+
+ for (int i = 0; i < itemCount; i++) {
+ results.add(new Pos2d(xCoord, yCoord));
+ xCoord += distanceGrid;
+ if (xCoord == xMax) {
+ xCoord = xOrigin;
+ yCoord += distanceGrid;
+ }
+ }
+
+ return results;
+ }
+
+ private static IDrawable[] getBackgroundsForSlot(
+ IDrawable base,
+ GT_Recipe.GT_Recipe_Map recipeMap,
+ boolean isFluid,
+ boolean isOutput,
+ int index,
+ boolean isSpecial,
+ SteamVariant steamVariant) {
+ if (recipeMap != null) {
+ IDrawable overlay;
+ if (steamVariant != SteamVariant.NONE) {
+ SteamTexture steamTexture = recipeMap.getOverlayForSlotSteam(isFluid, isOutput, index, isSpecial);
+ if (steamTexture != null) {
+ overlay = steamTexture.get(steamVariant);
+ } else {
+ overlay = null;
+ }
+ } else {
+ overlay = recipeMap.getOverlayForSlot(isFluid, isOutput, index, isSpecial);
+ }
+ if (overlay != null) {
+ return new IDrawable[] {base, overlay};
+ }
+ }
+ return new IDrawable[] {base};
+ }
+
+ @FunctionalInterface
+ public interface ForEachSlot {
+ void accept(int index, IDrawable[] backgrounds, Pos2d pos);
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/modularui/uifactory/SelectItemUIFactory.java b/src/main/java/gregtech/common/gui/modularui/uifactory/SelectItemUIFactory.java
new file mode 100644
index 0000000000..c3da5cb1b4
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/modularui/uifactory/SelectItemUIFactory.java
@@ -0,0 +1,221 @@
+package gregtech.common.gui.modularui.uifactory;
+
+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.Text;
+import com.gtnewhorizons.modularui.api.forge.ItemStackHandler;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot;
+import com.gtnewhorizons.modularui.common.widget.ButtonWidget;
+import com.gtnewhorizons.modularui.common.widget.SlotWidget;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.enums.Dyes;
+import gregtech.api.gui.GT_GUIColorOverride;
+import gregtech.api.gui.modularui.GT_UITextures;
+import gregtech.api.util.GT_Util;
+import gregtech.api.util.GT_Utility;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.StatCollector;
+
+/**
+ * Creates UI for selecting item from given list.
+ * This is client-only UI to allow using client-preferred settings.
+ */
+public class SelectItemUIFactory {
+
+ private final String header;
+ private final ItemStack headerItem;
+ public static final int UNSELECTED = -1;
+ private static final int cols = 9;
+ private final Consumer<ItemStack> selectedCallback;
+ // passed in stack
+ private final List<ItemStack> stacks;
+ private final boolean noDeselect;
+ private int selected;
+ private boolean anotherWindow = false;
+ private AtomicBoolean dialogOpened;
+ private int guiTint = GT_Util.getRGBInt(Dyes.MACHINE_METAL.getRGBA());
+ private final ItemStackHandler currentDisplayItemHandler = new ItemStackHandler();
+ private Supplier<ItemStack> currentGetter;
+
+ private final GT_GUIColorOverride colorOverride = new GT_GUIColorOverride("SelectItemUIFactory");
+
+ private int getTextColorOrDefault(String textType, int defaultColor) {
+ return colorOverride.getTextColorOrDefault(textType, defaultColor);
+ }
+
+ private final Supplier<Integer> COLOR_TITLE = () -> getTextColorOrDefault("title", 0x222222);
+ private final Supplier<Integer> COLOR_TEXT_GRAY = () -> getTextColorOrDefault("text_gray", 0x555555);
+
+ public SelectItemUIFactory(
+ String header, ItemStack headerItem, Consumer<ItemStack> selectedCallback, List<ItemStack> stacks) {
+ this(header, headerItem, selectedCallback, stacks, UNSELECTED);
+ }
+
+ public SelectItemUIFactory(
+ String header,
+ ItemStack headerItem,
+ Consumer<ItemStack> selectedCallback,
+ List<ItemStack> stacks,
+ int selected) {
+ this(header, headerItem, selectedCallback, stacks, selected, false);
+ }
+
+ /**
+ * Constructor for a dialog to select an item from given list. Given callback may be called zero or more times depending on user action.
+ * @param header Header text
+ * @param headerItem ItemStack to use as Dialog icon
+ * @param selectedCallback callback upon selected
+ * @param stacks list to choose from
+ * @param selected preselected item. Use {@link #UNSELECTED} for unselected. Invalid selected will be clamped to 0 or highest index
+ * @param noDeselect true if player cannot deselect, false otherwise. If this is set to true, selectedCallback is guaranteed to be called with a nonnull stack
+ */
+ public SelectItemUIFactory(
+ String header,
+ ItemStack headerItem,
+ Consumer<ItemStack> selectedCallback,
+ List<ItemStack> stacks,
+ int selected,
+ boolean noDeselect) {
+ this.header = header;
+ this.headerItem = headerItem;
+ this.selectedCallback = selectedCallback;
+ this.stacks = stacks;
+ this.noDeselect = noDeselect;
+ this.selected = noDeselect ? Math.max(0, selected) : selected;
+ this.currentDisplayItemHandler.setStackInSlot(0, getCandidate(selected));
+ }
+
+ /**
+ * @param anotherWindow If UI is shown on top of another window
+ * @param dialogOpened Flag to store whether this UI is opened and hence it should block duplicated creation of this UI
+ */
+ public SelectItemUIFactory setAnotherWindow(boolean anotherWindow, AtomicBoolean dialogOpened) {
+ this.anotherWindow = anotherWindow;
+ this.dialogOpened = dialogOpened;
+ return this;
+ }
+
+ public SelectItemUIFactory setGuiTint(int guiTint) {
+ this.guiTint = guiTint;
+ return this;
+ }
+
+ /**
+ * @param currentGetter Getter for "current" item displayed that may change from external reasons
+ */
+ public SelectItemUIFactory setCurrentGetter(Supplier<ItemStack> currentGetter) {
+ this.currentGetter = currentGetter;
+ return this;
+ }
+
+ public ModularWindow createWindow(UIBuildContext buildContext) {
+ ModularWindow.Builder builder =
+ ModularWindow.builder(getGUIWidth(), 53 + 18 * ((stacks.size() - 1) / cols + 1));
+ builder.setBackground(ModularUITextures.VANILLA_BACKGROUND);
+ builder.setGuiTint(guiTint);
+
+ if (headerItem != null) {
+ builder.widget(new ItemDrawable(headerItem).asWidget().setPos(5, 5).setSize(16, 16));
+ }
+ builder.widget(new TextWidget(header).setDefaultColor(COLOR_TITLE.get()).setPos(25, 9));
+
+ builder.widget(
+ new SlotWidget(BaseSlot.phantom(currentDisplayItemHandler, 0)) {
+ @Override
+ public void draw(float partialTicks) {
+ if (currentGetter != null) {
+ ItemStack current = currentGetter.get();
+ currentDisplayItemHandler.setStackInSlot(0, current);
+ selected = GT_Utility.findMatchingStackInList(stacks, current);
+ }
+ super.draw(partialTicks);
+ }
+ }.disableInteraction()
+ .setBackground(GT_UITextures.SLOT_DARK_GRAY)
+ .setPos(
+ 9
+ + getFontRenderer()
+ .getStringWidth(StatCollector.translateToLocal(
+ "GT5U.gui.select.current")),
+ 24))
+ .widget(new TextWidget(StatCollector.translateToLocal("GT5U.gui.select.current"))
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(8, 25 + (18 - getFontRenderer().FONT_HEIGHT) / 2));
+
+ for (int i = 0; i < stacks.size(); i++) {
+ final int index = i;
+ builder.widget(
+ new SlotWidget(new BaseSlot(new ItemStackHandler(new ItemStack[] {stacks.get(index)}), 0, true)) {
+ @Override
+ public ClickResult onClick(int buttonId, boolean doubleClick) {
+ if (buttonId == 0) {
+ setSelected(index);
+ } else if (buttonId == 1) {
+ setSelected(UNSELECTED);
+ } else {
+ return ClickResult.ACCEPT;
+ }
+ selectedCallback.accept(getCandidate(getSelected()));
+ return ClickResult.SUCCESS;
+ }
+
+ @Override
+ public IDrawable[] getBackground() {
+ return new IDrawable[] {
+ index == selected ? GT_UITextures.SLOT_DARK_GRAY : ModularUITextures.ITEM_SLOT
+ };
+ }
+ }.disableInteraction().setPos(7 + 18 * (index % cols), 43 + 18 * (index / cols)));
+ }
+
+ if (anotherWindow) {
+ dialogOpened.set(true);
+ builder.widget(
+ new ButtonWidget() {
+ @Override
+ public void onDestroy() {
+ dialogOpened.set(false);
+ }
+ }.setOnClick((clickData, widget) -> widget.getWindow().tryClose())
+ .setBackground(ModularUITextures.VANILLA_BACKGROUND, new Text("x"))
+ .setPos(getGUIWidth() - 15, 3)
+ .setSize(12, 12));
+ }
+
+ return builder.build();
+ }
+
+ public int getSelected() {
+ return selected;
+ }
+
+ public void setSelected(int selected) {
+ if (selected == this.selected) return;
+ int newSelected = GT_Utility.clamp(selected, UNSELECTED, stacks.size() - 1);
+ if (noDeselect && newSelected == UNSELECTED) return;
+
+ this.selected = newSelected;
+ currentDisplayItemHandler.setStackInSlot(0, getCandidate(this.selected));
+ }
+
+ private ItemStack getCandidate(int listIndex) {
+ return listIndex < 0 || listIndex >= stacks.size() ? null : stacks.get(listIndex);
+ }
+
+ private FontRenderer getFontRenderer() {
+ return Minecraft.getMinecraft().fontRenderer;
+ }
+
+ private int getGUIWidth() {
+ return 176;
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/modularui/widget/AESlotWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/AESlotWidget.java
new file mode 100644
index 0000000000..f3620d3234
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/modularui/widget/AESlotWidget.java
@@ -0,0 +1,40 @@
+package gregtech.common.gui.modularui.widget;
+
+import appeng.client.render.AppEngRenderItem;
+import appeng.core.AELog;
+import appeng.util.Platform;
+import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot;
+import com.gtnewhorizons.modularui.common.internal.wrapper.ModularGui;
+import com.gtnewhorizons.modularui.common.widget.SlotWidget;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import net.minecraft.client.renderer.entity.RenderItem;
+import net.minecraft.inventory.Slot;
+
+public class AESlotWidget extends SlotWidget {
+
+ public AESlotWidget(BaseSlot slot) {
+ super(slot);
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ protected void drawSlot(Slot slotIn) {
+ final AppEngRenderItem aeRenderItem = new AppEngRenderItem();
+ final RenderItem pIR = this.setItemRender(aeRenderItem);
+ try {
+ aeRenderItem.setAeStack(Platform.getAEStackInSlot(slotIn));
+ super.drawSlot(slotIn, false);
+ } catch (final Exception err) {
+ AELog.warn("[AppEng] AE prevented crash while drawing slot: " + err);
+ }
+ this.setItemRender(pIR);
+ }
+
+ @SideOnly(Side.CLIENT)
+ private RenderItem setItemRender(final RenderItem item) {
+ final RenderItem ri = ModularGui.getItemRenderer();
+ ModularGui.setItemRenderer(item);
+ return ri;
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverCycleButtonWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverCycleButtonWidget.java
new file mode 100644
index 0000000000..599ed28a5f
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverCycleButtonWidget.java
@@ -0,0 +1,89 @@
+package gregtech.common.gui.modularui.widget;
+
+import com.gtnewhorizons.modularui.api.drawable.IDrawable;
+import com.gtnewhorizons.modularui.api.drawable.UITexture;
+import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.gui.modularui.GT_UITextures;
+import org.lwjgl.opengl.GL11;
+
+/**
+ * Fires click action on mouse release, not on press.
+ * Draws different backgrounds depending on whether the mouse is being pressed or the widget is hovered.
+ */
+public class CoverCycleButtonWidget extends CycleButtonWidget {
+
+ private static final UITexture BUTTON_NORMAL_NOT_PRESSED =
+ GT_UITextures.BUTTON_COVER_NORMAL.getSubArea(0, 0, 1, 0.5f);
+ private static final UITexture BUTTON_NORMAL_PRESSED = GT_UITextures.BUTTON_COVER_NORMAL.getSubArea(0, 0.5f, 1, 1);
+ private static final UITexture BUTTON_HOVERED_NOT_PRESSED =
+ GT_UITextures.BUTTON_COVER_NORMAL_HOVERED.getSubArea(0, 0, 1, 0.5f);
+ private static final UITexture BUTTON_HOVERED_PRESSED =
+ GT_UITextures.BUTTON_COVER_NORMAL_HOVERED.getSubArea(0, 0.5f, 1, 1);
+
+ private boolean clickPressed;
+
+ private static final int TOOLTIP_DELAY = 5;
+
+ public CoverCycleButtonWidget() {
+ setSize(16, 16);
+ setTooltipShowUpDelay(TOOLTIP_DELAY);
+ }
+
+ @Override
+ public ClickResult onClick(int buttonId, boolean doubleClick) {
+ updateState();
+ if (!canClick()) return ClickResult.REJECT;
+ clickPressed = true;
+ return ClickResult.SUCCESS;
+ }
+
+ @Override
+ public boolean onClickReleased(int buttonId) {
+ clickPressed = false;
+ updateState();
+ if (!isHovering() || !canClick()) return false;
+ return onClickImpl(buttonId);
+ }
+
+ protected boolean onClickImpl(int buttonId) {
+ super.onClick(buttonId, false);
+ return true;
+ }
+
+ @SuppressWarnings("BooleanMethodIsAlwaysInverted")
+ protected boolean canClick() {
+ return true;
+ }
+
+ @SideOnly(Side.CLIENT)
+ protected void updateState() {}
+
+ public boolean isClickPressed() {
+ return clickPressed;
+ }
+
+ @Override
+ public void drawBackground(float partialTicks) {
+ GL11.glColor4f(1, 1, 1, 1);
+ super.drawBackground(partialTicks);
+ }
+
+ @Override
+ public IDrawable[] getBackground() {
+ if (isHovering()) {
+ if (clickPressed) {
+ return new IDrawable[] {BUTTON_HOVERED_PRESSED};
+ } else {
+ return new IDrawable[] {BUTTON_HOVERED_NOT_PRESSED};
+ }
+ } else {
+ if (clickPressed) {
+ return new IDrawable[] {BUTTON_NORMAL_PRESSED};
+ } else {
+ return new IDrawable[] {BUTTON_NORMAL_NOT_PRESSED};
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataControllerWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataControllerWidget.java
new file mode 100644
index 0000000000..d28117054a
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataControllerWidget.java
@@ -0,0 +1,138 @@
+package gregtech.common.gui.modularui.widget;
+
+import com.gtnewhorizons.modularui.api.widget.Widget;
+import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils;
+import gregtech.api.gui.modularui.IDataFollowerWidget;
+import gregtech.api.util.GT_CoverBehaviorBase;
+import gregtech.api.util.ISerializableObject;
+import java.io.IOException;
+import java.util.function.BiFunction;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import net.minecraft.network.PacketBuffer;
+
+public class CoverDataControllerWidget<T extends ISerializableObject> extends DataControllerWidget<T> {
+
+ protected final GT_CoverBehaviorBase<T> coverBehavior;
+
+ /**
+ * @param dataGetter () -> cover data this widget handles
+ * @param dataSetter data to set -> if setting cover data is successful
+ * @param coverBehavior cover this widget handles data update
+ */
+ public CoverDataControllerWidget(
+ Supplier<T> dataGetter, Function<T, Boolean> dataSetter, GT_CoverBehaviorBase<T> coverBehavior) {
+ super(dataGetter, dataSetter);
+ this.coverBehavior = coverBehavior;
+ }
+
+ @Override
+ public <U, W extends Widget & IDataFollowerWidget<T, U>> CoverDataControllerWidget<T> addFollower(
+ W widget, Function<T, U> dataToStateGetter, BiFunction<T, U, T> dataUpdater, Consumer<W> applyForWidget) {
+ super.addFollower(widget, dataToStateGetter, dataUpdater, applyForWidget);
+ return this;
+ }
+
+ @Override
+ protected void writeToPacket(PacketBuffer buffer, T data) {
+ try {
+ NetworkUtils.writeNBTBase(buffer, data.saveDataToNBT());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ protected T readFromPacket(PacketBuffer buffer) throws IOException {
+ return coverBehavior.createDataObject(NetworkUtils.readNBTBase(buffer));
+ }
+
+ /**
+ * Uses int index to determine toggle button behaviors.
+ */
+ public static class CoverDataIndexedControllerWidget_ToggleButtons<T extends ISerializableObject>
+ extends CoverDataControllerWidget<T> {
+
+ private final BiFunction<Integer, T, Boolean> dataToStateGetter;
+ private final BiFunction<Integer, T, T> dataUpdater;
+
+ /**
+ * @param coverDataGetter () -> cover data this widget handles
+ * @param coverDataSetter data to set -> if setting cover data is successful
+ * @param coverBehavior cover this widget handles data update
+ * @param dataToStateGetter (index of button, given cover data) -> button state
+ * @param dataUpdater (index of button, current cover data) -> new cover data
+ */
+ public CoverDataIndexedControllerWidget_ToggleButtons(
+ Supplier<T> coverDataGetter,
+ Function<T, Boolean> coverDataSetter,
+ GT_CoverBehaviorBase<T> coverBehavior,
+ BiFunction<Integer, T, Boolean> dataToStateGetter,
+ BiFunction<Integer, T, T> dataUpdater) {
+ super(coverDataGetter, coverDataSetter, coverBehavior);
+ this.dataToStateGetter = dataToStateGetter;
+ this.dataUpdater = dataUpdater;
+ }
+
+ /**
+ * @param index index of widget to add
+ * @param widget widget to add
+ * @param applyForWidget methods to call for widget to add
+ */
+ public <W extends CoverDataFollower_ToggleButtonWidget<T>>
+ CoverDataIndexedControllerWidget_ToggleButtons<T> addToggleButton(
+ int index, W widget, Consumer<CoverDataFollower_ToggleButtonWidget<T>> applyForWidget) {
+ addFollower(
+ widget,
+ data -> dataToStateGetter.apply(index, data),
+ (data, state) -> dataUpdater.apply(index, data),
+ applyForWidget);
+ return this;
+ }
+ }
+
+ /**
+ * Uses int index to determine cycle button behaviors.
+ */
+ public static class CoverDataIndexedControllerWidget_CycleButtons<T extends ISerializableObject>
+ extends CoverDataControllerWidget<T> {
+
+ private final BiFunction<Integer, T, Integer> dataToStateGetter;
+ private final BiFunction<Integer, T, T> dataUpdater;
+
+ /**
+ * @param coverDataGetter () -> cover data this widget handles
+ * @param coverDataSetter data to set -> if setting cover data is successful
+ * @param coverBehavior cover this widget handles data update
+ * @param dataToStateGetter (index of button, given cover data) -> button state
+ * @param dataUpdater (index of button, current cover data) -> new cover data
+ */
+ public CoverDataIndexedControllerWidget_CycleButtons(
+ Supplier<T> coverDataGetter,
+ Function<T, Boolean> coverDataSetter,
+ GT_CoverBehaviorBase<T> coverBehavior,
+ BiFunction<Integer, T, Integer> dataToStateGetter,
+ BiFunction<Integer, T, T> dataUpdater) {
+ super(coverDataGetter, coverDataSetter, coverBehavior);
+ this.dataToStateGetter = dataToStateGetter;
+ this.dataUpdater = dataUpdater;
+ }
+
+ /**
+ * @param index index of widget to add
+ * @param widget widget to add
+ * @param applyForWidget methods to call for the widget to add
+ */
+ public <W extends CoverDataFollower_CycleButtonWidget<T>>
+ CoverDataIndexedControllerWidget_CycleButtons<T> addCycleButton(
+ int index, W widget, Consumer<CoverDataFollower_CycleButtonWidget<T>> applyForWidget) {
+ addFollower(
+ widget,
+ data -> dataToStateGetter.apply(index, data),
+ (data, state) -> dataUpdater.apply(index, data),
+ applyForWidget);
+ return this;
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_CycleButtonWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_CycleButtonWidget.java
new file mode 100644
index 0000000000..d07165cc6e
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_CycleButtonWidget.java
@@ -0,0 +1,38 @@
+package gregtech.common.gui.modularui.widget;
+
+import gregtech.api.gui.modularui.IDataFollowerWidget;
+import gregtech.api.util.ISerializableObject;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+/**
+ * Determines button state with cover data.
+ */
+public class CoverDataFollower_CycleButtonWidget<T extends ISerializableObject> extends CoverCycleButtonWidget
+ implements IDataFollowerWidget<T, Integer> {
+
+ private Function<T, Integer> dataToStateGetter;
+
+ public CoverDataFollower_CycleButtonWidget() {
+ super();
+ setGetter(() -> 0); // fake getter; used only for init
+ setSynced(false, false);
+ }
+
+ @Override
+ public CoverDataFollower_CycleButtonWidget<T> setDataToStateGetter(Function<T, Integer> dataToStateGetter) {
+ this.dataToStateGetter = dataToStateGetter;
+ return this;
+ }
+
+ @Override
+ public CoverDataFollower_CycleButtonWidget<T> setStateSetter(Consumer<Integer> setter) {
+ super.setSetter(setter);
+ return this;
+ }
+
+ @Override
+ public void updateState(T data) {
+ setState(dataToStateGetter.apply(data), false, false);
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_SlotWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_SlotWidget.java
new file mode 100644
index 0000000000..c09c5b5279
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_SlotWidget.java
@@ -0,0 +1,102 @@
+package gregtech.common.gui.modularui.widget;
+
+import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable;
+import com.gtnewhorizons.modularui.api.widget.Interactable;
+import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot;
+import com.gtnewhorizons.modularui.common.widget.SlotWidget;
+import gregtech.api.gui.modularui.IDataFollowerWidget;
+import gregtech.api.util.ISerializableObject;
+import java.io.IOException;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import net.minecraft.item.ItemStack;
+
+public class CoverDataFollower_SlotWidget<T extends ISerializableObject> extends SlotWidget
+ implements IDataFollowerWidget<T, ItemStack> {
+
+ private Function<T, ItemStack> dataToStateGetter;
+ private Consumer<ItemStack> dataSetter;
+
+ public CoverDataFollower_SlotWidget(BaseSlot slot) {
+ super(slot);
+ }
+
+ public CoverDataFollower_SlotWidget(IItemHandlerModifiable handler, int index, boolean phantom) {
+ this(new BaseSlot(handler, index, phantom));
+ }
+
+ public CoverDataFollower_SlotWidget(IItemHandlerModifiable handler, int index) {
+ this(handler, index, false);
+ }
+
+ @Override
+ public CoverDataFollower_SlotWidget<T> setDataToStateGetter(Function<T, ItemStack> dataToStateGetter) {
+ this.dataToStateGetter = dataToStateGetter;
+ return this;
+ }
+
+ @Override
+ public CoverDataFollower_SlotWidget<T> setStateSetter(Consumer<ItemStack> setter) {
+ this.dataSetter = setter;
+ return this;
+ }
+
+ @Override
+ public void updateState(T data) {
+ getMcSlot().putStack(dataToStateGetter.apply(data));
+ }
+
+ @Override
+ public void detectAndSendChanges(boolean init) {}
+
+ // Slot sync is handled differently from other DataFollowers,
+ // so we need to also sync slot content directly to server.
+
+ @Override
+ public ClickResult onClick(int buttonId, boolean doubleClick) {
+ if (interactionDisabled) return ClickResult.REJECT;
+ if (isPhantom()) {
+ ClickData clickData = ClickData.create(buttonId, doubleClick);
+ syncToServer(2, clickData::writeToPacket);
+ phantomClick(clickData);
+ dataSetter.accept(getMcSlot().getStack());
+ return ClickResult.ACCEPT;
+ }
+ return ClickResult.REJECT;
+ }
+
+ @Override
+ public boolean onMouseScroll(int direction) {
+ if (interactionDisabled) return false;
+ if (isPhantom()) {
+ if (Interactable.hasShiftDown()) {
+ direction *= 8;
+ }
+ final int finalDirection = direction;
+ syncToServer(3, buffer -> buffer.writeVarIntToBuffer(finalDirection));
+ phantomScroll(finalDirection);
+ dataSetter.accept(getMcSlot().getStack());
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean handleDragAndDrop(ItemStack draggedStack, int button) {
+ if (interactionDisabled) return false;
+ if (!isPhantom()) return false;
+ ClickData clickData = ClickData.create(button, false);
+ syncToServer(5, buffer -> {
+ try {
+ clickData.writeToPacket(buffer);
+ buffer.writeItemStackToBuffer(draggedStack);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ });
+ phantomClick(clickData, draggedStack);
+ dataSetter.accept(getMcSlot().getStack());
+ draggedStack.stackSize = 0;
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_TextFieldWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_TextFieldWidget.java
new file mode 100644
index 0000000000..9130f8e3d0
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_TextFieldWidget.java
@@ -0,0 +1,110 @@
+package gregtech.common.gui.modularui.widget;
+
+import com.gtnewhorizons.modularui.api.math.Alignment;
+import com.gtnewhorizons.modularui.api.math.Color;
+import com.gtnewhorizons.modularui.api.math.MathExpression;
+import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget;
+import gregtech.api.gui.modularui.GT_UITextures;
+import gregtech.api.gui.modularui.IDataFollowerWidget;
+import gregtech.api.util.ISerializableObject;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import net.minecraft.client.gui.GuiScreen;
+
+public class CoverDataFollower_TextFieldWidget<T extends ISerializableObject> extends TextFieldWidget
+ implements IDataFollowerWidget<T, String> {
+
+ private Function<T, String> dataToStateGetter;
+
+ public CoverDataFollower_TextFieldWidget() {
+ super();
+ setGetter(() -> ""); // fake getter; used only for init
+ setSynced(false, false);
+ setTextColor(Color.WHITE.dark(1));
+ setTextAlignment(Alignment.CenterLeft);
+ setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2));
+ }
+
+ @Override
+ public void onPostInit() {
+ // Widget#onPostInit is called earlier than IDataFollowerWidget#onPostInit,
+ // so we make sure cursor is set after text is set
+ super.onPostInit();
+
+ // On first call #handler does not contain text.
+ // On second call, it contains correct text to update #lastText,
+ // but #shouldGetFocus call is skipped by Cursor#updateFocused,
+ // so we need to manually call this.
+ if (focusOnGuiOpen) {
+ shouldGetFocus();
+ }
+ }
+
+ @Override
+ public CoverDataFollower_TextFieldWidget<T> setDataToStateGetter(Function<T, String> dataToStateGetter) {
+ this.dataToStateGetter = dataToStateGetter;
+ return this;
+ }
+
+ @Override
+ public CoverDataFollower_TextFieldWidget<T> setStateSetter(Consumer<String> setter) {
+ super.setSetter(setter);
+ return this;
+ }
+
+ @Override
+ public void updateState(T data) {
+ setText(dataToStateGetter.apply(data));
+ }
+
+ public CoverDataFollower_TextFieldWidget<T> setOnScrollNumbers(int baseStep, int ctrlStep, int shiftStep) {
+ setOnScrollNumbers((val, direction) -> {
+ int step = (GuiScreen.isShiftKeyDown() ? shiftStep : GuiScreen.isCtrlKeyDown() ? ctrlStep : baseStep)
+ * direction;
+ try {
+ val = Math.addExact(val, step);
+ } catch (ArithmeticException ignored) {
+ val = Integer.MAX_VALUE;
+ }
+ return val;
+ });
+ return this;
+ }
+
+ public CoverDataFollower_TextFieldWidget<T> setOnScrollNumbers() {
+ return setOnScrollNumbers(1, 50, 1000);
+ }
+
+ public CoverDataFollower_TextFieldWidget<T> setOnScrollText(int baseStep, int ctrlStep, int shiftStep) {
+ setOnScroll((text, direction) -> {
+ int val = (int) MathExpression.parseMathExpression(text, -1);
+ int step = (GuiScreen.isShiftKeyDown() ? shiftStep : GuiScreen.isCtrlKeyDown() ? ctrlStep : baseStep)
+ * direction;
+ try {
+ val = Math.addExact(val, step);
+ } catch (ArithmeticException ignored) {
+ val = Integer.MAX_VALUE;
+ }
+ return TextFieldWidget.format.format(val);
+ });
+ return this;
+ }
+
+ public CoverDataFollower_TextFieldWidget<T> setOnScrollText() {
+ return setOnScrollText(1, 5, 50);
+ }
+
+ public CoverDataFollower_TextFieldWidget<T> setOnScrollNumbersLong(long baseStep, long ctrlStep, long shiftStep) {
+ setOnScrollNumbersLong((val, direction) -> {
+ long step = (GuiScreen.isShiftKeyDown() ? shiftStep : GuiScreen.isCtrlKeyDown() ? ctrlStep : baseStep)
+ * direction;
+ try {
+ val = Math.addExact(val, step);
+ } catch (ArithmeticException ignored) {
+ val = Long.MAX_VALUE;
+ }
+ return val;
+ });
+ return this;
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_ToggleButtonWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_ToggleButtonWidget.java
new file mode 100644
index 0000000000..8e091d7bc6
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_ToggleButtonWidget.java
@@ -0,0 +1,84 @@
+package gregtech.common.gui.modularui.widget;
+
+import com.gtnewhorizons.modularui.api.drawable.IDrawable;
+import gregtech.api.gui.modularui.GT_UITextures;
+import gregtech.api.gui.modularui.IDataFollowerWidget;
+import gregtech.api.util.ISerializableObject;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+public class CoverDataFollower_ToggleButtonWidget<T extends ISerializableObject> extends CoverCycleButtonWidget
+ implements IDataFollowerWidget<T, Boolean> {
+
+ private Function<T, Boolean> dataToStateGetter;
+
+ public CoverDataFollower_ToggleButtonWidget() {
+ super();
+ setGetter(() -> 0); // fake getter; used only for init
+ setSynced(false, false);
+ setLength(2);
+ }
+
+ @Override
+ public CoverDataFollower_ToggleButtonWidget<T> setDataToStateGetter(Function<T, Boolean> dataToStateGetter) {
+ this.dataToStateGetter = dataToStateGetter;
+ return this;
+ }
+
+ @Override
+ public CoverDataFollower_ToggleButtonWidget<T> setStateSetter(Consumer<Boolean> setter) {
+ super.setSetter(val -> setter.accept(val == 1));
+ return this;
+ }
+
+ @Override
+ public void updateState(T data) {
+ setState(dataToStateGetter.apply(data) ? 1 : 0, false, false);
+ }
+
+ public CoverDataFollower_ToggleButtonWidget<T> setToggleTexture(IDrawable active, IDrawable inactive) {
+ setTextureGetter(state -> state == 1 ? active : inactive);
+ return this;
+ }
+
+ public static <T extends ISerializableObject> CoverDataFollower_ToggleButtonWidget<T> ofCheckAndCross() {
+ return new CoverDataFollower_ToggleButtonWidget<T>()
+ .setToggleTexture(GT_UITextures.OVERLAY_BUTTON_CHECKMARK, GT_UITextures.OVERLAY_BUTTON_CROSS);
+ }
+
+ public static <T extends ISerializableObject> CoverDataFollower_ToggleButtonWidget<T> ofCheck() {
+ return new CoverDataFollower_ToggleButtonWidget<T>()
+ .setToggleTexture(GT_UITextures.OVERLAY_BUTTON_CHECKMARK, GT_UITextures.TRANSPARENT);
+ }
+
+ public static <T extends ISerializableObject> CoverDataFollower_ToggleButtonWidget<T> ofRedstone() {
+ return new CoverDataFollower_ToggleButtonWidget<T>()
+ .setToggleTexture(GT_UITextures.OVERLAY_BUTTON_REDSTONE_ON, GT_UITextures.OVERLAY_BUTTON_REDSTONE_OFF);
+ }
+
+ public static <T extends ISerializableObject> CoverDataFollower_ToggleButtonWidget<T> ofDisableable() {
+ return new CoverDataFollower_DisableableToggleButtonWidget<>();
+ }
+
+ /**
+ * Disables clicking if button is already pressed.
+ */
+ public static class CoverDataFollower_DisableableToggleButtonWidget<T extends ISerializableObject>
+ extends CoverDataFollower_ToggleButtonWidget<T> {
+
+ public CoverDataFollower_DisableableToggleButtonWidget() {
+ super();
+ }
+
+ @Override
+ protected boolean canClick() {
+ return getState() == 0;
+ }
+
+ @Override
+ public IDrawable[] getBackground() {
+ if (!canClick()) return new IDrawable[] {GT_UITextures.BUTTON_COVER_NORMAL_DISABLED};
+ return super.getBackground();
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/modularui/widget/DataControllerWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/DataControllerWidget.java
new file mode 100644
index 0000000000..f29b8eeaf9
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/modularui/widget/DataControllerWidget.java
@@ -0,0 +1,162 @@
+package gregtech.common.gui.modularui.widget;
+
+import com.gtnewhorizons.modularui.api.widget.ISyncedWidget;
+import com.gtnewhorizons.modularui.api.widget.Widget;
+import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils;
+import com.gtnewhorizons.modularui.common.widget.MultiChildWidget;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.gui.modularui.IDataFollowerWidget;
+import gregtech.api.util.ISerializableObject;
+import java.io.IOException;
+import java.util.function.BiFunction;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import net.minecraft.network.PacketBuffer;
+
+/**
+ * Controls state of child widgets with specific data, and allows centralized control of multiple widgets.
+ * e.g. clicking button B will set machine mode to B, so button A, whose state is bound to the mode,
+ * will be automatically deactivated by this widget.
+ * <br> This widget wraps data and handles validation, e.g. tell client to close GUI when tile is broken or cover is removed.
+ * <br> Data can be anything, e.g. {@link ISerializableObject} or machine recipe mode.
+ * @param <T> Data type stored in this widget
+ * @see IDataFollowerWidget
+ */
+public abstract class DataControllerWidget<T> extends MultiChildWidget implements ISyncedWidget {
+
+ private final Supplier<T> dataGetter;
+ private final Function<T, Boolean> dataSetter;
+
+ protected T lastData;
+
+ private boolean needsUpdate;
+
+ /**
+ * @param dataGetter () -> data this widget handles
+ * @param dataSetter data to set -> if setting data is successful
+ */
+ public DataControllerWidget(Supplier<T> dataGetter, Function<T, Boolean> dataSetter) {
+ this.dataGetter = dataGetter;
+ this.dataSetter = dataSetter;
+ }
+
+ protected T getLastData() {
+ return lastData;
+ }
+
+ @Override
+ public void onPostInit() {
+ super.onPostInit();
+ // client _should_ have received initial cover data from `GT_UIInfos#openCoverUI`
+ lastData = dataGetter.get();
+ if (NetworkUtils.isClient()) {
+ updateChildren(true);
+ }
+ }
+
+ @Override
+ public void detectAndSendChanges(boolean init) {
+ T actualValue = dataGetter.get();
+ if (actualValue == null) {
+ // data is in invalid state e.g. tile is broken, cover is removed
+ getWindow().tryClose();
+ return;
+ }
+ if (init || !actualValue.equals(getLastData())) {
+ // init sync or someone else edited data
+ lastData = actualValue;
+ syncDataToClient(actualValue);
+ }
+ }
+
+ protected void syncDataToClient(T data) {
+ syncToClient(0, buffer -> writeToPacket(buffer, data));
+ }
+
+ protected void syncDataToServer(T data) {
+ syncToServer(0, buffer -> writeToPacket(buffer, data));
+ updateChildren();
+ }
+
+ @Override
+ public void readOnClient(int id, PacketBuffer buf) throws IOException {
+ if (id == 0) {
+ lastData = readFromPacket(buf);
+ dataSetter.apply(getLastData());
+ updateChildren();
+ }
+ }
+
+ @Override
+ public void readOnServer(int id, PacketBuffer buf) throws IOException {
+ if (id == 0) {
+ lastData = readFromPacket(buf);
+ if (dataSetter.apply(getLastData())) {
+ markForUpdate();
+ } else {
+ getWindow().closeWindow();
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @SideOnly(Side.CLIENT)
+ protected void updateChildren(boolean postInit) {
+ for (Widget child : getChildren()) {
+ if (child instanceof IDataFollowerWidget) {
+ ((IDataFollowerWidget<T, ?>) child).updateState(getLastData());
+ if (postInit) {
+ ((IDataFollowerWidget<T, ?>) child).onPostInit();
+ }
+ }
+ }
+ }
+
+ @SideOnly(Side.CLIENT)
+ protected void updateChildren() {
+ updateChildren(false);
+ }
+
+ protected abstract void writeToPacket(PacketBuffer buffer, T data);
+
+ protected abstract T readFromPacket(PacketBuffer buffer) throws IOException;
+
+ @Override
+ public void markForUpdate() {
+ needsUpdate = true;
+ }
+
+ @Override
+ public void unMarkForUpdate() {
+ needsUpdate = false;
+ }
+
+ @Override
+ public boolean isMarkedForUpdate() {
+ return needsUpdate;
+ }
+
+ /**
+ * @param widget widget to add that implements {@link IDataFollowerWidget}
+ * @param dataToStateGetter given data -> state of the widget to add
+ * @param dataUpdater (current data, state of the widget to add) -> new data to set
+ * @param applyForWidget methods to call for the widget to add
+ * @param <U> state type stored in the widget to add
+ * @param <W> widget type to add
+ */
+ public <U, W extends Widget & IDataFollowerWidget<T, U>> DataControllerWidget<T> addFollower(
+ W widget, Function<T, U> dataToStateGetter, BiFunction<T, U, T> dataUpdater, Consumer<W> applyForWidget) {
+ widget.setDataToStateGetter(dataToStateGetter);
+ widget.setStateSetter(state -> {
+ T newData = dataUpdater.apply(getLastData(), state);
+ lastData = newData;
+ dataSetter.apply(getLastData());
+ syncDataToServer(newData);
+ });
+ applyForWidget.accept(widget);
+ addChild(widget);
+ return this;
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/modularui/widget/FluidDisplaySlotWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/FluidDisplaySlotWidget.java
new file mode 100644
index 0000000000..99200e5e8d
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/modularui/widget/FluidDisplaySlotWidget.java
@@ -0,0 +1,474 @@
+package gregtech.common.gui.modularui.widget;
+
+import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable;
+import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot;
+import com.gtnewhorizons.modularui.common.widget.SlotWidget;
+import gregtech.GT_Mod;
+import gregtech.api.interfaces.IFluidAccess;
+import gregtech.api.interfaces.IHasFluidDisplayItem;
+import gregtech.api.interfaces.metatileentity.IFluidLockable;
+import gregtech.api.util.GT_Utility;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+import java.util.function.BiFunction;
+import java.util.function.Supplier;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.item.ItemStack;
+import net.minecraft.network.PacketBuffer;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidContainerItem;
+
+public class FluidDisplaySlotWidget extends SlotWidget {
+
+ private IHasFluidDisplayItem iHasFluidDisplay;
+ private Supplier<IFluidAccess> fluidAccessConstructor;
+ private Supplier<Boolean> canDrainGetter;
+ private Supplier<Boolean> canFillGetter;
+ private Action actionRealClick = Action.NONE;
+ private Action actionDragAndDrop = Action.NONE;
+ private BiFunction<ClickData, FluidDisplaySlotWidget, Boolean> beforeRealClick;
+ private BiFunction<ClickData, FluidDisplaySlotWidget, Boolean> beforeDragAndDrop;
+ private Runnable updateFluidDisplayItem = () -> {
+ if (iHasFluidDisplay != null) {
+ iHasFluidDisplay.updateFluidDisplayItem();
+ }
+ };
+
+ public FluidDisplaySlotWidget(BaseSlot slot) {
+ super(slot);
+ setAccess(false, false);
+ disableShiftInsert();
+ }
+
+ public FluidDisplaySlotWidget(IItemHandlerModifiable handler, int index) {
+ this(new BaseSlot(handler, index, true));
+ }
+
+ // === client actions ===
+
+ @Override
+ public ClickResult onClick(int buttonId, boolean doubleClick) {
+ if (actionRealClick == Action.NONE) return ClickResult.REJECT;
+ if (interactionDisabled) return ClickResult.REJECT;
+
+ /*
+ * While a logical client don't really need to process fluid cells upon click (it could have just wait
+ * for server side to send the result), doing so would result in every fluid interaction having a
+ * noticeable delay between clicking and changes happening even on single player.
+ * I'd imagine this lag to become only more severe when playing MP over ethernet, which would have much more latency
+ * than a memory connection
+ */
+ ClickData clickData = ClickData.create(buttonId, doubleClick);
+ ItemStack verifyToken = executeRealClick(clickData);
+ syncToServer(2, buffer -> {
+ clickData.writeToPacket(buffer);
+ try {
+ buffer.writeItemStackToBuffer(verifyToken);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ });
+ return ClickResult.ACCEPT;
+ }
+
+ @Override
+ public boolean handleDragAndDrop(ItemStack draggedStack, int button) {
+ if (actionDragAndDrop == Action.NONE || actionDragAndDrop == Action.TRANSFER) return false;
+ if (interactionDisabled) return false;
+
+ ClickData clickData = ClickData.create(button, false);
+ executeDragAndDrop(clickData, draggedStack);
+ syncToServer(5, buffer -> {
+ try {
+ clickData.writeToPacket(buffer);
+ buffer.writeItemStackToBuffer(draggedStack);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ });
+ draggedStack.stackSize = 0;
+ return true;
+ }
+
+ @Override
+ public List<String> getExtraTooltip() {
+ return Collections.emptyList();
+ }
+
+ // === server actions ===
+
+ @Override
+ public void readOnServer(int id, PacketBuffer buf) throws IOException {
+ if (id == 1) {
+ getMcSlot().xDisplayPosition = buf.readVarIntFromBuffer();
+ getMcSlot().yDisplayPosition = buf.readVarIntFromBuffer();
+ } else if (id == 2) {
+ onClickServer(ClickData.readPacket(buf), buf.readItemStackFromBuffer());
+ } else if (id == 3) {
+ phantomScroll(buf.readVarIntFromBuffer());
+ } else if (id == 4) {
+ setEnabled(buf.readBoolean());
+ } else if (id == 5) {
+ executeDragAndDrop(ClickData.readPacket(buf), buf.readItemStackFromBuffer());
+ if (onDragAndDropComplete != null) {
+ onDragAndDropComplete.accept(this);
+ }
+ }
+ markForUpdate();
+ }
+
+ private void onClickServer(ClickData clickData, ItemStack clientVerifyToken) {
+ ItemStack serverVerifyToken = executeRealClick(clickData);
+ // similar to what NetHandlerPlayServer#processClickWindow does
+ if (!ItemStack.areItemStacksEqual(clientVerifyToken, serverVerifyToken)) {
+ ((EntityPlayerMP) getContext().getPlayer())
+ .sendContainerToPlayer(getContext().getContainer());
+ }
+ }
+
+ // === client/server actions ===
+
+ private ItemStack executeRealClick(ClickData clickData) {
+ if (actionRealClick == Action.NONE) return null;
+ if (beforeRealClick != null && !beforeRealClick.apply(clickData, this)) return null;
+
+ ItemStack ret = null;
+ if (actionRealClick == Action.TRANSFER) {
+ if (fluidAccessConstructor == null) {
+ GT_Mod.GT_FML_LOGGER.warn(
+ "FluidDisplaySlotWidget is asked to transfer fluid, but fluidAccessConstructor is null!");
+ return null;
+ }
+ ret = transferFluid(
+ fluidAccessConstructor.get(),
+ getContext().getPlayer(),
+ clickData.mouseButton == 0,
+ canDrainGetter != null ? canDrainGetter.get() : true,
+ canFillGetter != null ? canFillGetter.get() : true);
+ } else if (actionRealClick == Action.LOCK) {
+ lockFluid(getContext().getPlayer().inventory.getItemStack());
+ }
+
+ updateFluidDisplayItem.run();
+ return ret;
+ }
+
+ protected ItemStack transferFluid(
+ IFluidAccess aFluidAccess,
+ EntityPlayer aPlayer,
+ boolean aProcessFullStack,
+ boolean aCanDrain,
+ boolean aCanFill) {
+ ItemStack tStackHeld = aPlayer.inventory.getItemStack();
+ ItemStack tStackSizedOne = GT_Utility.copyAmount(1, tStackHeld);
+ if (tStackSizedOne == null || tStackHeld.stackSize == 0) return null;
+ FluidStack tInputFluid = aFluidAccess.get();
+ FluidStack tFluidHeld = GT_Utility.getFluidForFilledItem(tStackSizedOne, true);
+ if (tFluidHeld != null && tFluidHeld.amount <= 0) tFluidHeld = null;
+ if (tInputFluid == null) {
+ // tank empty, consider fill only from now on
+ if (!aCanFill)
+ // cannot fill and nothing to take, bail out
+ return null;
+ if (tFluidHeld == null)
+ // no fluid to fill
+ return null;
+ return fillFluid(aFluidAccess, aPlayer, tFluidHeld, aProcessFullStack);
+ }
+ // tank not empty, both action possible
+ if (tFluidHeld != null && tInputFluid.amount < aFluidAccess.getCapacity()) {
+ // both nonnull and have space left for filling.
+ if (aCanFill)
+ // actually both pickup and fill is reasonable, but I'll go with fill here
+ return fillFluid(aFluidAccess, aPlayer, tFluidHeld, aProcessFullStack);
+ if (!aCanDrain)
+ // cannot take AND cannot fill, why make this call then?
+ return null;
+ // the slot does not allow filling, so try take some
+ return drainFluid(aFluidAccess, aPlayer, aProcessFullStack);
+ } else {
+ // cannot fill and there is something to take
+ if (!aCanDrain)
+ // but the slot does not allow taking, so bail out
+ return null;
+ return drainFluid(aFluidAccess, aPlayer, aProcessFullStack);
+ }
+ }
+
+ protected static ItemStack drainFluid(IFluidAccess aFluidAccess, EntityPlayer aPlayer, boolean aProcessFullStack) {
+ FluidStack tTankStack = aFluidAccess.get();
+ if (tTankStack == null) return null;
+ ItemStack tStackHeld = aPlayer.inventory.getItemStack();
+ ItemStack tStackSizedOne = GT_Utility.copyAmount(1, tStackHeld);
+ if (tStackSizedOne == null || tStackHeld.stackSize == 0) return null;
+ int tOriginalFluidAmount = tTankStack.amount;
+ ItemStack tFilledContainer = GT_Utility.fillFluidContainer(tTankStack, tStackSizedOne, true, false);
+ if (tFilledContainer == null && tStackSizedOne.getItem() instanceof IFluidContainerItem) {
+ IFluidContainerItem tContainerItem = (IFluidContainerItem) tStackSizedOne.getItem();
+ int tFilledAmount = tContainerItem.fill(tStackSizedOne, tTankStack, true);
+ if (tFilledAmount > 0) {
+ tFilledContainer = tStackSizedOne;
+ tTankStack.amount -= tFilledAmount;
+ }
+ }
+ if (tFilledContainer != null) {
+ if (aProcessFullStack) {
+ int tFilledAmount = tOriginalFluidAmount - tTankStack.amount;
+ /*
+ work out how many more items we can fill
+ one cell is already used, so account for that
+ the round down behavior will left over a fraction of a cell worth of fluid
+ the user then get to decide what to do with it
+ it will not be too fancy if it spills out partially filled cells
+ */
+ int tAdditionalParallel = Math.min(tStackHeld.stackSize - 1, tTankStack.amount / tFilledAmount);
+ tTankStack.amount -= tFilledAmount * tAdditionalParallel;
+ tFilledContainer.stackSize += tAdditionalParallel;
+ }
+ replaceCursorItemStack(aPlayer, tFilledContainer);
+ }
+ aFluidAccess.verifyFluidStack();
+ return tFilledContainer;
+ }
+
+ protected static ItemStack fillFluid(
+ IFluidAccess aFluidAccess, EntityPlayer aPlayer, FluidStack aFluidHeld, boolean aProcessFullStack) {
+ // we are not using aMachine.fill() here any more, so we need to check for fluid type here ourselves
+ if (aFluidAccess.get() != null && !aFluidAccess.get().isFluidEqual(aFluidHeld)) return null;
+ ItemStack tStackHeld = aPlayer.inventory.getItemStack();
+ ItemStack tStackSizedOne = GT_Utility.copyAmount(1, tStackHeld);
+ if (tStackSizedOne == null) return null;
+
+ int tFreeSpace = aFluidAccess.getCapacity() - (aFluidAccess.get() != null ? aFluidAccess.get().amount : 0);
+ if (tFreeSpace <= 0)
+ // no space left
+ return null;
+
+ // find out how much fluid can be taken
+ // some cells cannot be partially filled
+ ItemStack tStackEmptied = null;
+ int tAmountTaken = 0;
+ if (tFreeSpace >= aFluidHeld.amount) {
+ // fully accepted - try take it from item now
+ // IFluidContainerItem is intentionally not checked here. it will be checked later
+ tStackEmptied = GT_Utility.getContainerForFilledItem(tStackSizedOne, false);
+ tAmountTaken = aFluidHeld.amount;
+ }
+ if (tStackEmptied == null && tStackSizedOne.getItem() instanceof IFluidContainerItem) {
+ // either partially accepted, or is IFluidContainerItem
+ IFluidContainerItem container = (IFluidContainerItem) tStackSizedOne.getItem();
+ FluidStack tDrained = container.drain(tStackSizedOne, tFreeSpace, true);
+ if (tDrained != null && tDrained.amount > 0) {
+ // something is actually drained - change the cell and drop it to player
+ tStackEmptied = tStackSizedOne;
+ tAmountTaken = tDrained.amount;
+ }
+ }
+ if (tStackEmptied == null)
+ // somehow the cell refuse to give out that amount of fluid, no op then
+ return null;
+
+ // find out how many fill can we do
+ // same round down behavior as above
+ // however here the fluid stack is not changed at all, so the exact code will slightly differ
+ int tParallel = aProcessFullStack ? Math.min(tFreeSpace / tAmountTaken, tStackHeld.stackSize) : 1;
+ if (aFluidAccess.get() == null) {
+ FluidStack tNewFillableStack = aFluidHeld.copy();
+ tNewFillableStack.amount = tAmountTaken * tParallel;
+ aFluidAccess.set(tNewFillableStack);
+ } else {
+ aFluidAccess.addAmount(tAmountTaken * tParallel);
+ }
+ tStackEmptied.stackSize = tParallel;
+ replaceCursorItemStack(aPlayer, tStackEmptied);
+ return tStackEmptied;
+ }
+
+ protected static void replaceCursorItemStack(EntityPlayer aPlayer, ItemStack tStackResult) {
+ int tStackResultMaxStackSize = tStackResult.getMaxStackSize();
+ while (tStackResult.stackSize > tStackResultMaxStackSize) {
+ aPlayer.inventory.getItemStack().stackSize -= tStackResultMaxStackSize;
+ GT_Utility.addItemToPlayerInventory(aPlayer, tStackResult.splitStack(tStackResultMaxStackSize));
+ }
+ if (aPlayer.inventory.getItemStack().stackSize == tStackResult.stackSize) {
+ // every cell is mutated. it could just stay on the cursor.
+ aPlayer.inventory.setItemStack(tStackResult);
+ } else {
+ // some cells not mutated. The mutated cells must go into the inventory
+ // or drop into the world if there isn't enough space.
+ ItemStack tStackHeld = aPlayer.inventory.getItemStack();
+ tStackHeld.stackSize -= tStackResult.stackSize;
+ GT_Utility.addItemToPlayerInventory(aPlayer, tStackResult);
+ }
+ }
+
+ protected void executeDragAndDrop(ClickData clickData, ItemStack draggedStack) {
+ if (actionDragAndDrop == Action.NONE || actionDragAndDrop == Action.TRANSFER) return;
+ if (beforeDragAndDrop != null && !beforeDragAndDrop.apply(clickData, this)) return;
+
+ if (actionDragAndDrop == Action.LOCK) {
+ lockFluid(draggedStack);
+ }
+ updateFluidDisplayItem.run();
+ }
+
+ protected void lockFluid(ItemStack cursorStack) {
+ if (!(iHasFluidDisplay instanceof IFluidLockable)) return;
+ IFluidLockable mteToLock = (IFluidLockable) iHasFluidDisplay;
+
+ if (cursorStack == null) {
+ if (!mteToLock.allowChangingLockedFluid(null)) return;
+
+ mteToLock.lockFluid(false);
+ mteToLock.setLockedFluidName(null);
+ GT_Utility.sendChatToPlayer(getContext().getPlayer(), GT_Utility.trans("300.1", "Fluid Lock Cleared."));
+
+ if (!isClient()) {
+ mteToLock.onFluidLockPacketReceived(null);
+ }
+ } else {
+ FluidStack fluidStack = GT_Utility.getFluidFromContainerOrFluidDisplay(cursorStack);
+ if (fluidStack == null) return;
+ Fluid tFluid = fluidStack.getFluid();
+ if (tFluid == null) return;
+
+ if (!mteToLock.allowChangingLockedFluid(tFluid.getName())) return;
+
+ mteToLock.lockFluid(true);
+ mteToLock.setLockedFluidName(tFluid.getName());
+ GT_Utility.sendChatToPlayer(
+ getContext().getPlayer(),
+ String.format(
+ GT_Utility.trans("151.4", "Successfully locked Fluid to %s"),
+ new FluidStack(tFluid, 1).getLocalizedName()));
+
+ if (!isClient()) {
+ mteToLock.onFluidLockPacketReceived(tFluid.getName());
+ }
+ }
+ }
+
+ protected void updateFluidDisplayItem() {
+ if (iHasFluidDisplay != null) {
+ iHasFluidDisplay.updateFluidDisplayItem();
+ }
+ }
+
+ // === setters ===
+
+ public FluidDisplaySlotWidget setFluidAccessConstructor(Supplier<IFluidAccess> fluidAccessConstructor) {
+ this.fluidAccessConstructor = fluidAccessConstructor;
+ return this;
+ }
+
+ public FluidDisplaySlotWidget setIHasFluidDisplay(IHasFluidDisplayItem iHasFluidDisplay) {
+ this.iHasFluidDisplay = iHasFluidDisplay;
+ return this;
+ }
+
+ public FluidDisplaySlotWidget setCanDrainGetter(Supplier<Boolean> canDrainGetter) {
+ this.canDrainGetter = canDrainGetter;
+ return this;
+ }
+
+ public FluidDisplaySlotWidget setCanDrain(boolean canDrain) {
+ return setCanDrainGetter(() -> canDrain);
+ }
+
+ public FluidDisplaySlotWidget setCanFillGetter(Supplier<Boolean> canFillGetter) {
+ this.canFillGetter = canFillGetter;
+ return this;
+ }
+
+ public FluidDisplaySlotWidget setCanFill(boolean canFill) {
+ return setCanFillGetter(() -> canFill);
+ }
+
+ /**
+ * Sets action called on click while holding the real item.
+ */
+ public FluidDisplaySlotWidget setActionRealClick(Action actionRealClick) {
+ this.actionRealClick = actionRealClick;
+ return this;
+ }
+
+ /**
+ * Sets action called on drag-and-drop from NEI.
+ * You can't use {@link Action#TRANSFER} here.
+ */
+ public FluidDisplaySlotWidget setActionDragAndDrop(Action actionDragAndDrop) {
+ this.actionDragAndDrop = actionDragAndDrop;
+ return this;
+ }
+
+ /**
+ * Sets function called before {@link #executeRealClick}.
+ * @param beforeRealClick (click data, this widget) -> if allow click
+ */
+ public FluidDisplaySlotWidget setBeforeRealClick(
+ BiFunction<ClickData, FluidDisplaySlotWidget, Boolean> beforeRealClick) {
+ this.beforeRealClick = beforeRealClick;
+ return this;
+ }
+
+ /**
+ * Sets function called before {@link #executeDragAndDrop}.
+ * @param beforeDragAndDrop (click data, this widget) -> if allow click
+ */
+ public FluidDisplaySlotWidget setBeforeDragAndDrop(
+ BiFunction<ClickData, FluidDisplaySlotWidget, Boolean> beforeDragAndDrop) {
+ this.beforeDragAndDrop = beforeDragAndDrop;
+ return this;
+ }
+
+ /**
+ * Sets function called before both of {@link #executeRealClick} and {@link #executeDragAndDrop}.
+ * @param beforeClick (click data, this widget) -> if allow click
+ */
+ public FluidDisplaySlotWidget setBeforeClick(BiFunction<ClickData, FluidDisplaySlotWidget, Boolean> beforeClick) {
+ setBeforeRealClick(beforeClick);
+ setBeforeDragAndDrop(beforeClick);
+ return this;
+ }
+
+ /**
+ * By default, this widget runs {@link IHasFluidDisplayItem#updateFluidDisplayItem} after click.
+ * You can specify custom update action with this method.
+ */
+ public FluidDisplaySlotWidget setUpdateFluidDisplayItem(Runnable updateFluidDisplayItem) {
+ this.updateFluidDisplayItem = updateFluidDisplayItem;
+ return this;
+ }
+
+ /**
+ * Action triggered on mouse click or NEI drag-and-drop.
+ */
+ public enum Action {
+
+ /**
+ * Fill/drain fluid into/from the tank.
+ * Uses fluid amount, so drag-and-drop cannot use this mode.
+ */
+ TRANSFER,
+
+ /**
+ * Lock fluid for {@link IFluidLockable}.
+ * Does not use fluid amount.
+ */
+ LOCK,
+
+ /**
+ * Set filter for the tank. (not implemented yet)
+ * Does not use fluid amount.
+ */
+ FILTER,
+
+ /**
+ * Does nothing.
+ */
+ NONE
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/modularui/widget/ItemWatcherSlotWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/ItemWatcherSlotWidget.java
new file mode 100644
index 0000000000..7385208874
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/modularui/widget/ItemWatcherSlotWidget.java
@@ -0,0 +1,47 @@
+package gregtech.common.gui.modularui.widget;
+
+import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable;
+import com.gtnewhorizons.modularui.api.forge.ItemStackHandler;
+import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot;
+import com.gtnewhorizons.modularui.common.widget.SlotWidget;
+import gregtech.api.util.GT_Utility;
+import java.util.function.Supplier;
+import net.minecraft.item.ItemStack;
+
+/**
+ * Watches specific ItemStack and pulls changes from it.
+ * Player cannot interact with slot, other than viewing NEI recipe or adding bookmark.
+ */
+public class ItemWatcherSlotWidget extends SlotWidget {
+
+ private ItemStack lastItem;
+ private Supplier<ItemStack> getter;
+
+ public ItemWatcherSlotWidget() {
+ super(BaseSlot.phantom(new ItemStackHandler(), 0));
+ disableInteraction();
+ }
+
+ public ItemWatcherSlotWidget setGetter(Supplier<ItemStack> getter) {
+ this.getter = getter;
+ return this;
+ }
+
+ @Override
+ public void detectAndSendChanges(boolean init) {
+ ItemStack target = getter.get();
+ if (init || !GT_Utility.areStacksEqual(lastItem, target)) {
+ ItemStack toPut;
+ if (target != null) {
+ toPut = target.copy();
+ toPut.stackSize = 1;
+ } else {
+ toPut = null;
+ }
+ ((IItemHandlerModifiable) getMcSlot().getItemHandler()).setStackInSlot(0, toPut);
+ lastItem = target;
+ getMcSlot().onSlotChanged();
+ }
+ super.detectAndSendChanges(init);
+ }
+}
diff --git a/src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java b/src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java
index d82d307ee8..a5842bb9c1 100644
--- a/src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java
+++ b/src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java
@@ -3,7 +3,7 @@ package gregtech.common.items;
import static gregtech.GT_Mod.GT_FML_LOGGER;
import static gregtech.api.enums.GT_Values.RES_PATH_ITEM;
-import cpw.mods.fml.common.FMLCommonHandler;
+import com.gtnewhorizons.modularui.api.UIInfos;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.GregTech_API;
@@ -11,7 +11,6 @@ import gregtech.api.enums.GT_Values;
import gregtech.api.enums.ItemList;
import gregtech.api.enums.Materials;
import gregtech.api.enums.OrePrefixes;
-import gregtech.api.gui.GT_GUIDialogSelectItem;
import gregtech.api.interfaces.INetworkUpdatableItem;
import gregtech.api.items.GT_Generic_Item;
import gregtech.api.net.GT_Packet_UpdateItem;
@@ -21,6 +20,7 @@ import gregtech.api.util.GT_LanguageManager;
import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Utility;
+import gregtech.common.gui.modularui.uifactory.SelectItemUIFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -270,20 +270,19 @@ public class GT_IntegratedCircuit_Item extends GT_Generic_Item implements INetwo
}
configuratorStack = player.inventory.mainInventory[configurator.getKey()];
}
- openSelectorGui(configuratorStack, stack.getItemDamage());
+ openSelectorGui(configuratorStack, stack.getItemDamage(), player);
return stack;
}
- private void openSelectorGui(ItemStack configurator, int meta) {
- FMLCommonHandler.instance()
- .showGuiScreen(new GT_GUIDialogSelectItem(
+ private void openSelectorGui(ItemStack configurator, int meta, EntityPlayer player) {
+ UIInfos.openClientUI(player, buildContext -> new SelectItemUIFactory(
StatCollector.translateToLocal("GT5U.item.programmed_circuit.select.header"),
configurator,
- null,
GT_IntegratedCircuit_Item::onConfigured,
ALL_VARIANTS,
meta,
- true));
+ true)
+ .createWindow(buildContext));
}
private static void onConfigured(ItemStack stack) {
diff --git a/src/main/java/gregtech/common/items/GT_VolumetricFlask.java b/src/main/java/gregtech/common/items/GT_VolumetricFlask.java
index f4ee8a7c85..0d7d503690 100644
--- a/src/main/java/gregtech/common/items/GT_VolumetricFlask.java
+++ b/src/main/java/gregtech/common/items/GT_VolumetricFlask.java
@@ -6,19 +6,31 @@ import static ic2.core.util.LiquidUtil.drainContainerStack;
import static ic2.core.util.LiquidUtil.fillContainerStack;
import static ic2.core.util.LiquidUtil.placeFluid;
+import com.gtnewhorizons.modularui.api.ModularUITextures;
+import com.gtnewhorizons.modularui.api.math.Alignment;
+import com.gtnewhorizons.modularui.api.math.Color;
+import com.gtnewhorizons.modularui.api.math.MathExpression;
+import com.gtnewhorizons.modularui.api.math.Pos2d;
+import com.gtnewhorizons.modularui.api.math.Size;
+import com.gtnewhorizons.modularui.api.screen.IItemWithModularUI;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.common.widget.VanillaButtonWidget;
+import com.gtnewhorizons.modularui.common.widget.textfield.BaseTextFieldWidget;
+import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.interfaces.INetworkUpdatableItem;
+import gregtech.api.gui.modularui.GT_UIInfos;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.items.GT_Generic_Item;
import gregtech.api.util.GT_Utility;
import ic2.core.util.LiquidUtil;
import java.util.List;
+import java.util.function.Function;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@@ -37,7 +49,7 @@ import net.minecraftforge.fluids.IFluidBlock;
import net.minecraftforge.fluids.IFluidContainerItem;
import net.minecraftforge.fluids.IFluidHandler;
-public class GT_VolumetricFlask extends GT_Generic_Item implements IFluidContainerItem, INetworkUpdatableItem {
+public class GT_VolumetricFlask extends GT_Generic_Item implements IFluidContainerItem, IItemWithModularUI {
private final int maxCapacity;
private final String unlocalFlaskName;
@@ -55,7 +67,7 @@ public class GT_VolumetricFlask extends GT_Generic_Item implements IFluidContain
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
if (!world.isRemote && isEmpty(stack) && getMovingObjectPositionFromPlayer(world, player, true) == null)
- player.openGui(GT_Values.GT, 1010, world, 0, 0, 0);
+ GT_UIInfos.openPlayerHeldItemUI(player);
return super.onItemRightClick(stack, world, player);
}
@@ -300,12 +312,83 @@ public class GT_VolumetricFlask extends GT_Generic_Item implements IFluidContain
}
@Override
- public boolean receive(ItemStack stack, EntityPlayerMP player, NBTTagCompound tag) {
- if (stack != null && stack.stackSize > 0) {
- Item item = stack.getItem();
- if (item == this) setCapacity(stack, tag.getInteger("cap"));
- return true;
+ public ModularWindow createWindow(UIBuildContext buildContext, ItemStack stack) {
+ if (!(stack.getItem() instanceof GT_VolumetricFlask)) return null;
+ return new VolumetricFlaskUIFactory(buildContext, stack).createWindow();
+ }
+
+ private class VolumetricFlaskUIFactory {
+
+ private final UIBuildContext buildContext;
+ private final int maxCapacity;
+ private TextFieldWidget textField;
+
+ public VolumetricFlaskUIFactory(UIBuildContext buildContext, ItemStack flask) {
+ this.buildContext = buildContext;
+ this.maxCapacity = ((GT_VolumetricFlask) flask.getItem()).getMaxCapacity();
+ }
+
+ public ModularWindow createWindow() {
+ ModularWindow.Builder builder = ModularWindow.builder(176, 107);
+ builder.setBackground(ModularUITextures.VANILLA_BACKGROUND);
+
+ textField = new TextFieldWidget() {
+ @Override
+ public void onDestroy() {
+ if (isClient()) return;
+ setCapacity(getCurrentItem(), (int) MathExpression.parseMathExpression(getText(), 1));
+ getContext().onWidgetUpdate();
+ }
+ };
+ textField.setText(
+ String.valueOf(((GT_VolumetricFlask) getCurrentItem().getItem()).getCapacity(getCurrentItem())));
+ builder.widget(textField
+ .setNumbers(() -> 1, () -> maxCapacity)
+ .setPattern(BaseTextFieldWidget.NATURAL_NUMS)
+ .setTextAlignment(Alignment.CenterLeft)
+ .setTextColor(Color.WHITE.dark(1))
+ .setFocusOnGuiOpen(true)
+ .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD_LIGHT_GRAY.withOffset(-1, -1, 2, 2))
+ .setPos(60, 55)
+ .setSize(59, 12));
+
+ addChangeAmountButton(builder, "+1", new Pos2d(20, 26), new Size(22, 20), val -> val + 1);
+ addChangeAmountButton(builder, "+10", new Pos2d(48, 26), new Size(28, 20), val -> val + 10);
+ addChangeAmountButton(builder, "+100", new Pos2d(82, 26), new Size(32, 20), val -> val + 100);
+ addChangeAmountButton(builder, "+1000", new Pos2d(120, 26), new Size(38, 20), val -> val + 1000);
+ addChangeAmountButton(builder, "-1", new Pos2d(20, 75), new Size(22, 20), val -> val - 1);
+ addChangeAmountButton(builder, "-10", new Pos2d(48, 75), new Size(28, 20), val -> val - 10);
+ addChangeAmountButton(builder, "-100", new Pos2d(82, 75), new Size(32, 20), val -> val - 100);
+ addChangeAmountButton(builder, "-1000", new Pos2d(120, 75), new Size(38, 20), val -> val - 1000);
+ builder.widget(new VanillaButtonWidget()
+ .setDisplayString("Accept")
+ .setClickableGetter(() -> MathExpression.parseMathExpression(textField.getText()) > 0)
+ .setOnClick((clickData, widget) -> {
+ textField.onRemoveFocus();
+ widget.getWindow().tryClose();
+ })
+ .setPos(128, 51)
+ .setSize(38, 20));
+
+ return builder.build();
+ }
+
+ private void addChangeAmountButton(
+ ModularWindow.Builder builder, String text, Pos2d pos, Size size, Function<Integer, Integer> function) {
+ builder.widget(new VanillaButtonWidget()
+ .setDisplayString(text)
+ .setOnClick((clickData, widget) -> {
+ String currentText = textField.getText();
+ int amount = (int) MathExpression.parseMathExpression(currentText, 1);
+ amount = Math.min(maxCapacity, Math.max(1, function.apply(amount)));
+ textField.setText(String.valueOf(amount));
+ })
+ .setPos(pos)
+ .setSize(size));
+ }
+
+ private ItemStack getCurrentItem() {
+ return buildContext.getPlayer().inventory.getCurrentItem();
}
- return false;
}
}
diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java
index f5fcda6d7b..7bcbe33b86 100644
--- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java
+++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java
@@ -3,16 +3,18 @@ package gregtech.common.tileentities.automation;
import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_CHESTBUFFER;
import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_CHESTBUFFER_GLOW;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer;
import gregtech.api.render.TextureFactory;
-import gregtech.common.gui.GT_Container_ChestBuffer;
-import gregtech.common.gui.GT_GUIContainer_ChestBuffer;
-import net.minecraft.entity.player.InventoryPlayer;
-public class GT_MetaTileEntity_ChestBuffer extends GT_MetaTileEntity_Buffer {
+public class GT_MetaTileEntity_ChestBuffer extends GT_MetaTileEntity_Buffer implements IAddUIWidgets {
private static final int[] tickRate = {400, 200, 100, 20, 4, 1, 1, 1, 1, 1, 1, 1, 1};
private static final int[] maxStacks = {1, 1, 1, 1, 1, 1, 2, 4, 8, 16, 32, 64, 128};
@@ -83,16 +85,6 @@ public class GT_MetaTileEntity_ChestBuffer extends GT_MetaTileEntity_Buffer {
}
}
- @Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_ChestBuffer(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_ChestBuffer(aPlayerInventory, aBaseMetaTileEntity);
- }
-
protected static String getTickRateDesc(int tier) {
int tickRate = getTickRate(tier);
String timeStr = "";
@@ -118,4 +110,21 @@ public class GT_MetaTileEntity_ChestBuffer extends GT_MetaTileEntity_Buffer {
// Included higher tiers on the off chance they actually work without blowing things up lmao
return tier > 9 ? MAX : Math.min(maxStacks[tier], MAX);
}
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ addEmitEnergyButton(builder);
+ addEmitRedstoneButton(builder);
+ addInvertRedstoneButton(builder);
+ addStockingModeButton(builder);
+ builder.widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_ARROW_22_RED.apply(69, true))
+ .setPos(80, 60)
+ .setSize(69, 22));
+ addMainUI(builder);
+ }
+
+ protected void addMainUI(ModularWindow.Builder builder) {
+ addInventorySlots(builder);
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java
index f3ab391109..99ada34c17 100644
--- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java
+++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java
@@ -3,19 +3,23 @@ package gregtech.common.tileentities.automation;
import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_FILTER;
import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_FILTER_GLOW;
+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.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.SlotGroup;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Utility;
-import gregtech.common.gui.GT_Container_Filter;
-import gregtech.common.gui.GT_GUIContainer_Filter;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
-public class GT_MetaTileEntity_Filter extends GT_MetaTileEntity_Buffer {
+public class GT_MetaTileEntity_Filter extends GT_MetaTileEntity_Buffer implements IAddUIWidgets {
public boolean bIgnoreNBT = false;
public boolean bInvertFilter = false;
@@ -56,16 +60,6 @@ public class GT_MetaTileEntity_Filter extends GT_MetaTileEntity_Buffer {
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_Filter(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_Filter(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
public void saveNBTData(NBTTagCompound aNBT) {
super.saveNBTData(aNBT);
aNBT.setBoolean("bInvertFilter", this.bInvertFilter);
@@ -106,4 +100,68 @@ public class GT_MetaTileEntity_Filter extends GT_MetaTileEntity_Buffer {
for (byte b = 0; b < 6; b++) aBaseMetaTileEntity.setInternalOutputRedstoneSignal(b, (byte) emptySlots);
} else for (byte b = 0; b < 6; b++) aBaseMetaTileEntity.setInternalOutputRedstoneSignal(b, (byte) 0);
}
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ addEmitEnergyButton(builder);
+ addEmitRedstoneButton(builder);
+ addInvertRedstoneButton(builder);
+ builder.widget(new ButtonWidget()
+ .setOnClick((clickData, widget) -> {
+ bInvertFilter = !bInvertFilter;
+ if (bInvertFilter) {
+ GT_Utility.sendChatToPlayer(
+ widget.getContext().getPlayer(), GT_Utility.trans("124", "Invert Filter"));
+ } else {
+ GT_Utility.sendChatToPlayer(
+ widget.getContext().getPlayer(),
+ GT_Utility.trans("125", "Don't invert Filter"));
+ }
+ })
+ .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_INVERT_FILTER)
+ .setPos(61, 62)
+ .setSize(18, 18))
+ .widget(new ButtonWidget()
+ .setOnClick((clickData, widget) -> {
+ bIgnoreNBT = !bIgnoreNBT;
+ if (bIgnoreNBT) {
+ GT_Utility.sendChatToPlayer(
+ widget.getContext().getPlayer(), GT_Utility.trans("126", "Ignore NBT"));
+ } else {
+ GT_Utility.sendChatToPlayer(
+ widget.getContext().getPlayer(), GT_Utility.trans("127", "NBT has to match"));
+ }
+ })
+ .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_NBT)
+ .setPos(79, 62)
+ .setSize(18, 18))
+ .widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_ARROW_24_WHITE.apply(9, false))
+ .setPos(6, 19)
+ .setSize(9, 24))
+ .widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_ARROW_24_BLUE.apply(24, true))
+ .setPos(71, 19)
+ .setSize(24, 24))
+ .widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_ARROW_24_RED.apply(19, true))
+ .setPos(152, 19)
+ .setSize(19, 24))
+ .widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_SLOTS_HOLO_3BY3)
+ .setPos(16, 4)
+ .setSize(54, 54))
+ .widget(SlotGroup.ofItemHandler(inventoryHandler, 3)
+ .startFromSlot(0)
+ .endAtSlot(8)
+ .phantom(true)
+ .applyForWidget(widget -> widget.disableShiftInsert().setBackground(GT_UITextures.TRANSPARENT))
+ .build()
+ .setPos(16, 4))
+ .widget(SlotGroup.ofItemHandler(inventoryHandler, 3)
+ .startFromSlot(9)
+ .endAtSlot(17)
+ .build()
+ .setPos(97, 4));
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java
index 4241fa8d11..bf2fa41b0d 100644
--- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java
+++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java
@@ -3,22 +3,24 @@ package gregtech.common.tileentities.automation;
import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_ITEMDISTRIBUTOR;
import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_ITEMDISTRIBUTOR_GLOW;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
import gregtech.api.enums.Textures;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Utility;
-import gregtech.common.gui.GT_Container_ItemDistributor;
-import gregtech.common.gui.GT_GUIContainer_ItemDistributor;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
-public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer {
+public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer implements IAddUIWidgets {
private byte[] itemsPerSide = new byte[6];
private byte currentSide = 0, currentSideItemCount = 0;
@@ -53,11 +55,6 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_ItemDistributor(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
public ITexture getOverlayIcon() {
return TextureFactory.of(
TextureFactory.of(AUTOMATION_ITEMDISTRIBUTOR),
@@ -68,11 +65,6 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_ItemDistributor(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
return aSide == aBaseMetaTileEntity.getFrontFacing();
}
@@ -187,4 +179,16 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer
super.setItemNBT(aNBT);
aNBT.setByteArray("mItemsPerSide", itemsPerSide);
}
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ addEmitEnergyButton(builder);
+ addEmitRedstoneButton(builder);
+ addInvertRedstoneButton(builder);
+ builder.widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_ARROW_22_RED.apply(87, true))
+ .setPos(62, 60)
+ .setSize(87, 22));
+ addInventorySlots(builder);
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java
index 007fa79213..14a6af709a 100644
--- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java
+++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java
@@ -3,6 +3,7 @@ package gregtech.common.tileentities.automation;
import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_RECIPEFILTER;
import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_RECIPEFILTER_GLOW;
+import com.gtnewhorizons.modularui.api.drawable.Text;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -11,8 +12,8 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_SpecialFilt
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Recipe;
import gregtech.common.blocks.GT_Item_Machines;
-import gregtech.common.gui.GT_GUIContainer_RecipeFilter;
-import net.minecraft.entity.player.InventoryPlayer;
+import java.util.Collections;
+import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -38,11 +39,6 @@ public class GT_MetaTileEntity_RecipeFilter extends GT_MetaTileEntity_SpecialFil
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_RecipeFilter(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
public void clickTypeIcon(boolean aRightClick, ItemStack aHandStack) {
if (!aRightClick) {
IMetaTileEntity mte = GT_Item_Machines.getMetaTileEntity(aHandStack);
@@ -55,9 +51,9 @@ public class GT_MetaTileEntity_RecipeFilter extends GT_MetaTileEntity_SpecialFil
return;
}
}
+ mInventory[SPECIAL_SLOT_INDEX] = null;
+ mRecipeMap = null;
}
- mInventory[SPECIAL_SLOT_INDEX] = null;
- mRecipeMap = null;
}
@Override
@@ -92,4 +88,9 @@ public class GT_MetaTileEntity_RecipeFilter extends GT_MetaTileEntity_SpecialFil
protected boolean isStackAllowed(ItemStack aStack) {
return mRecipeMap != null && mRecipeMap.containsInput(aStack);
}
+
+ @Override
+ protected List<Text> getEmptySlotTooltip() {
+ return Collections.singletonList(Text.localised("GT5U.recipe_filter.representation_slot.tooltip"));
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java
index 71c4cbb258..39151cedff 100644
--- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java
+++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java
@@ -3,21 +3,27 @@ package gregtech.common.tileentities.automation;
import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_REGULATOR;
import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_REGULATOR_GLOW;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot;
+import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.SlotGroup;
+import com.gtnewhorizons.modularui.common.widget.SlotWidget;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Utility;
-import gregtech.common.gui.GT_Container_Regulator;
-import gregtech.common.gui.GT_GUIContainer_Regulator;
import java.util.Collections;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
-public class GT_MetaTileEntity_Regulator extends GT_MetaTileEntity_Buffer {
+public class GT_MetaTileEntity_Regulator extends GT_MetaTileEntity_Buffer implements IAddUIWidgets {
public int[] mTargetSlots = {0, 0, 0, 0, 0, 0, 0, 0, 0};
private boolean charge = false, decharge = false;
@@ -62,16 +68,6 @@ public class GT_MetaTileEntity_Regulator extends GT_MetaTileEntity_Buffer {
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_Regulator(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_Regulator(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
public void saveNBTData(NBTTagCompound aNBT) {
super.saveNBTData(aNBT);
aNBT.setInteger("mTargetSlot1", this.mTargetSlots[0]);
@@ -166,4 +162,56 @@ public class GT_MetaTileEntity_Regulator extends GT_MetaTileEntity_Buffer {
decharge = aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity() / 3;
}
}
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ addEmitEnergyButton(builder);
+ builder.widget(createChargerSlot(43, 62));
+ builder.widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_ARROW_22_RED.apply(84, true))
+ .setPos(65, 60)
+ .setSize(84, 22))
+ .widget(SlotGroup.ofItemHandler(inventoryHandler, 3)
+ .startFromSlot(0)
+ .endAtSlot(8)
+ .build()
+ .setPos(7, 5))
+ .widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_SLOTS_HOLO_3BY3)
+ .setPos(62, 5)
+ .setSize(54, 54))
+ .widget(SlotGroup.ofItemHandler(inventoryHandler, 3)
+ .phantom(true)
+ .startFromSlot(9)
+ .endAtSlot(17)
+ .applyForWidget(widget -> widget.setBackground(GT_UITextures.TRANSPARENT))
+ .build()
+ .setPos(62, 5))
+ .widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_SLOTS_HOLO_3BY3)
+ .setPos(117, 5)
+ .setSize(54, 54));
+
+ int xBase = 117, yBase = 5;
+ for (int i = 0; i < mTargetSlots.length; i++) {
+ final int index = i;
+ int xPos = xBase + (i % 3) * 18, yPos = yBase + (i / 3) * 18;
+ builder.widget(
+ new SlotWidget(BaseSlot.empty()) {
+ @Override
+ protected void phantomClick(ClickData clickData, ItemStack cursorStack) {
+ mTargetSlots[index] = Math.min(
+ 99,
+ Math.max(
+ 0,
+ mTargetSlots[index]
+ + (clickData.mouseButton == 0 ? -1 : 1)
+ * (clickData.shift ? 16 : 1)));
+ }
+ }.setBackground(GT_UITextures.TRANSPARENT).setPos(xPos, yPos))
+ .widget(TextWidget.dynamicString(() -> String.valueOf(mTargetSlots[index]))
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setPos(xPos + 2 + (i % 3 == 0 ? 1 : 0), yPos + 3 + (i / 3 == 0 ? 1 : 0)));
+ }
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java
index ffa33f426e..a91a082c4e 100644
--- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java
+++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java
@@ -3,18 +3,18 @@ package gregtech.common.tileentities.automation;
import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_SUPERBUFFER;
import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_SUPERBUFFER_GLOW;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Utility;
-import gregtech.common.gui.GT_Container_SuperBuffer;
-import gregtech.common.gui.GT_GUIContainer_SuperBuffer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
public class GT_MetaTileEntity_SuperBuffer extends GT_MetaTileEntity_ChestBuffer {
@@ -85,12 +85,10 @@ public class GT_MetaTileEntity_SuperBuffer extends GT_MetaTileEntity_ChestBuffer
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_SuperBuffer(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_SuperBuffer(aPlayerInventory, aBaseMetaTileEntity);
+ protected void addMainUI(ModularWindow.Builder builder) {
+ builder.widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_SUPER_BUFFER)
+ .setPos(61, 4)
+ .setSize(54, 54));
}
}
diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java
index da1ca6d42a..6c3441c905 100644
--- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java
+++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java
@@ -13,8 +13,12 @@ import gregtech.api.objects.ItemData;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.GT_Utility;
+import java.util.Arrays;
+import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.StatCollector;
public class GT_MetaTileEntity_TypeFilter extends GT_MetaTileEntity_SpecialFilter {
public int mRotationIndex = 0;
@@ -54,6 +58,7 @@ public class GT_MetaTileEntity_TypeFilter extends GT_MetaTileEntity_SpecialFilte
.build());
}
+ @Override
public void clickTypeIcon(boolean aRightClick, ItemStack aHandStack) {
if (getBaseMetaTileEntity().isServerSide()) {
ItemData data = GT_OreDictUnificator.getAssociation(aHandStack);
@@ -143,4 +148,13 @@ public class GT_MetaTileEntity_TypeFilter extends GT_MetaTileEntity_SpecialFilte
}
return tAllowPrefix;
}
+
+ @Override
+ protected List<String> getItemExtraTooltip() {
+ return Arrays.asList(
+ EnumChatFormatting.DARK_GRAY
+ + StatCollector.translateToLocal("GT5U.type_filter.representation_slot.tooltip.0"),
+ EnumChatFormatting.DARK_GRAY
+ + StatCollector.translateToLocal("GT5U.type_filter.representation_slot.tooltip.1"));
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java
index 9d832e134c..67e18cf1b0 100644
--- a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java
+++ b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java
@@ -2,13 +2,26 @@ package gregtech.common.tileentities.boilers;
import static gregtech.api.objects.XSTR.XSTR_INSTANCE;
+import com.gtnewhorizons.modularui.api.drawable.IDrawable;
+import com.gtnewhorizons.modularui.api.drawable.UITexture;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.ProgressBar;
+import com.gtnewhorizons.modularui.common.widget.SlotWidget;
import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Materials;
import gregtech.api.enums.ParticleFX;
import gregtech.api.enums.SoundResource;
+import gregtech.api.enums.SteamVariant;
+import gregtech.api.gui.modularui.GT_UIInfos;
+import gregtech.api.gui.modularui.GT_UITextures;
+import gregtech.api.gui.modularui.GUITextureSet;
import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.modularui.IAddUIWidgets;
+import gregtech.api.interfaces.modularui.IGetTitleColor;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank;
import gregtech.api.objects.GT_ItemStack;
@@ -25,7 +38,8 @@ import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidHandler;
-public abstract class GT_MetaTileEntity_Boiler extends GT_MetaTileEntity_BasicTank {
+public abstract class GT_MetaTileEntity_Boiler extends GT_MetaTileEntity_BasicTank
+ implements IGetTitleColor, IAddUIWidgets {
public static final byte SOUND_EVENT_LET_OFF_EXCESS_STEAM = 1;
public int mTemperature = 20;
public int mProcessingEnergy = 0;
@@ -126,7 +140,7 @@ public abstract class GT_MetaTileEntity_Boiler extends GT_MetaTileEntity_BasicTa
aPlayer.getCurrentEquippedItem().func_150996_a(Items.bucket);
}
} else {
- aBaseMetaTileEntity.openGUI(aPlayer);
+ GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer);
}
}
return true;
@@ -399,4 +413,100 @@ public abstract class GT_MetaTileEntity_Boiler extends GT_MetaTileEntity_BasicTa
}
protected abstract void updateFuel(IGregTechTileEntity aBaseMetaTileEntity, long aTick);
+
+ @Override
+ public SteamVariant getSteamVariant() {
+ return SteamVariant.BRONZE;
+ }
+
+ protected IDrawable[] getFuelSlotBackground() {
+ return new IDrawable[] {
+ getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_COAL_STEAM.get(getSteamVariant())
+ };
+ }
+
+ protected IDrawable[] getAshSlotBackground() {
+ return new IDrawable[] {
+ getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_DUST_STEAM.get(getSteamVariant())
+ };
+ }
+
+ @Override
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ builder.widget(new SlotWidget(inventoryHandler, 0)
+ .setPos(43, 25)
+ .setBackground(getGUITextureSet().getItemSlot(), getOverlaySlotIn()))
+ .widget(new SlotWidget(inventoryHandler, 1)
+ .setPos(43, 61)
+ .setBackground(getGUITextureSet().getItemSlot(), getOverlaySlotOut()))
+ .widget(new SlotWidget(inventoryHandler, 2).setPos(115, 61).setBackground(getFuelSlotBackground()))
+ .widget(new SlotWidget(inventoryHandler, 3).setPos(115, 25).setBackground(getAshSlotBackground()))
+ .widget(new ProgressBar()
+ .setProgress(() -> mSteam == null ? 0 : (float) mSteam.amount / getCapacity())
+ .setTexture(getProgressbarEmpty(), GT_UITextures.PROGRESSBAR_BOILER_STEAM, 10)
+ .setDirection(ProgressBar.Direction.UP)
+ .setPos(70, 25)
+ .setSize(10, 54))
+ .widget(new ProgressBar()
+ .setProgress(() -> mFluid == null ? 0 : (float) mFluid.amount / getCapacity())
+ .setTexture(getProgressbarEmpty(), GT_UITextures.PROGRESSBAR_BOILER_WATER, 10)
+ .setDirection(ProgressBar.Direction.UP)
+ .setPos(83, 25)
+ .setSize(10, 54))
+ .widget(new ProgressBar()
+ .setProgress(() -> (float) mTemperature / maxProgresstime())
+ .setTexture(getProgressbarEmpty(), GT_UITextures.PROGRESSBAR_BOILER_HEAT, 10)
+ .setDirection(ProgressBar.Direction.UP)
+ .setPos(96, 25)
+ .setSize(10, 54))
+ .widget(new ProgressBar()
+ // cap minimum so that one can easily see there's fuel remaining
+ .setProgress(
+ () -> mProcessingEnergy > 0 ? Math.max((float) mProcessingEnergy / 1000, 1f / 5) : 0)
+ .setTexture(getProgressbarFuel(), 14)
+ .setDirection(ProgressBar.Direction.UP)
+ .setPos(116, 45)
+ .setSize(14, 14))
+ .widget(new DrawableWidget()
+ .setDrawable(getOverlaySlotCanister())
+ .setPos(43, 43)
+ .setSize(18, 18));
+ }
+
+ @Override
+ public GUITextureSet getGUITextureSet() {
+ return GUITextureSet.STEAM.apply(getSteamVariant());
+ }
+
+ @Override
+ public int getTitleColor() {
+ return getSteamVariant() == SteamVariant.BRONZE ? COLOR_TITLE.get() : COLOR_TITLE_WHITE.get();
+ }
+
+ // for GT++
+
+ protected IDrawable getOverlaySlotIn() {
+ return GT_UITextures.OVERLAY_SLOT_IN_STEAM.get(getSteamVariant());
+ }
+
+ protected IDrawable getOverlaySlotOut() {
+ return GT_UITextures.OVERLAY_SLOT_OUT_STEAM.get(getSteamVariant());
+ }
+
+ protected IDrawable getOverlaySlotCanister() {
+ return GT_UITextures.OVERLAY_SLOT_CANISTER_STEAM.get(getSteamVariant());
+ }
+
+ protected UITexture getProgressbarEmpty() {
+ return GT_UITextures.PROGRESSBAR_BOILER_EMPTY_STEAM.get(getSteamVariant());
+ }
+
+ protected UITexture getProgressbarFuel() {
+ return GT_UITextures.PROGRESSBAR_FUEL_STEAM.get(getSteamVariant());
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Bronze.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Bronze.java
index 9d3c61fc82..ef343d24f2 100644
--- a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Bronze.java
+++ b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Bronze.java
@@ -16,6 +16,7 @@ import gregtech.GT_Mod;
import gregtech.api.enums.Materials;
import gregtech.api.enums.OrePrefixes;
import gregtech.api.enums.ParticleFX;
+import gregtech.api.enums.SteamVariant;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
@@ -25,10 +26,7 @@ import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder;
import gregtech.common.GT_Pollution;
-import gregtech.common.gui.GT_Container_Boiler;
-import gregtech.common.gui.GT_GUIContainer_Boiler;
import net.minecraft.block.Block;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraftforge.common.util.ForgeDirection;
@@ -93,16 +91,6 @@ public class GT_MetaTileEntity_Boiler_Bronze extends GT_MetaTileEntity_Boiler {
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_Boiler(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_Boiler(aPlayerInventory, aBaseMetaTileEntity, "BronzeBoiler.png");
- }
-
- @Override
public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_Boiler_Bronze(this.mName, this.mTier, this.mDescriptionArray, this.mTextures);
}
@@ -318,4 +306,9 @@ public class GT_MetaTileEntity_Boiler_Bronze extends GT_MetaTileEntity_Boiler {
1L));
}
}
+
+ @Override
+ public SteamVariant getSteamVariant() {
+ return SteamVariant.BRONZE;
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Lava.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Lava.java
index 38bef79f38..14a2833549 100644
--- a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Lava.java
+++ b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Lava.java
@@ -12,15 +12,13 @@ import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE;
import gregtech.GT_Mod;
import gregtech.api.enums.Materials;
import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SteamVariant;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.common.gui.GT_Container_Boiler;
-import gregtech.common.gui.GT_GUIContainer_Boiler;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraftforge.fluids.FluidStack;
public class GT_MetaTileEntity_Boiler_Lava extends GT_MetaTileEntity_Boiler {
@@ -86,16 +84,6 @@ public class GT_MetaTileEntity_Boiler_Lava extends GT_MetaTileEntity_Boiler {
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_Boiler(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_Boiler(aPlayerInventory, aBaseMetaTileEntity, "SteelBoiler.png");
- }
-
- @Override
public int getCapacity() {
return 32000;
}
@@ -145,6 +133,11 @@ public class GT_MetaTileEntity_Boiler_Lava extends GT_MetaTileEntity_Boiler {
}
@Override
+ public SteamVariant getSteamVariant() {
+ return SteamVariant.STEEL;
+ }
+
+ @Override
public final int fill(FluidStack aFluid, boolean doFill) {
if ((GT_ModHandler.isLava(aFluid)) && (this.mProcessingEnergy < 50)) {
int tFilledAmount = Math.min(50, aFluid.amount);
diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java
index cccfb1b6b4..d86fd544e7 100644
--- a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java
+++ b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java
@@ -5,8 +5,11 @@ import static gregtech.api.enums.ConfigCategories.machineconfig;
import static mcp.mobius.waila.api.SpecialChars.GOLD;
import static mcp.mobius.waila.api.SpecialChars.RESET;
+import com.gtnewhorizons.modularui.api.drawable.IDrawable;
import gregtech.api.enums.Dyes;
+import gregtech.api.enums.SteamVariant;
import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
@@ -14,13 +17,10 @@ import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_LanguageManager;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Utility;
-import gregtech.common.gui.GT_Container_Boiler;
-import gregtech.common.gui.GT_GUIContainer_Boiler;
import java.util.List;
import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;
import net.minecraft.entity.player.EntityPlayerMP;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@@ -124,16 +124,6 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler {
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_Boiler(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_Boiler(aPlayerInventory, aBaseMetaTileEntity, "SolarBoiler.png");
- }
-
- @Override
public ITexture[] getTexture(
IGregTechTileEntity aBaseMetaTileEntity,
byte aSide,
@@ -254,6 +244,11 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler {
}
@Override
+ public SteamVariant getSteamVariant() {
+ return SteamVariant.BRONZE;
+ }
+
+ @Override
public boolean isGivingInformation() {
return true;
}
@@ -290,6 +285,16 @@ public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler {
}
@Override
+ protected IDrawable[] getFuelSlotBackground() {
+ return new IDrawable[] {GT_UITextures.TRANSPARENT};
+ }
+
+ @Override
+ protected IDrawable[] getAshSlotBackground() {
+ return new IDrawable[] {GT_UITextures.TRANSPARENT};
+ }
+
+ @Override
public void getWailaBody(
ItemStack itemStack, List<String> currentTip, IWailaDataAccessor accessor, IWailaConfigHandler config) {
final NBTTagCompound tag = accessor.getNBTData();
diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar_Steel.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar_Steel.java
index 223c280ad4..997ca33df5 100644
--- a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar_Steel.java
+++ b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar_Steel.java
@@ -3,13 +3,12 @@ package gregtech.common.tileentities.boilers;
import static gregtech.api.enums.ConfigCategories.machineconfig;
import gregtech.api.enums.Dyes;
+import gregtech.api.enums.SteamVariant;
import gregtech.api.enums.Textures.BlockIcons;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.render.TextureFactory;
-import gregtech.common.gui.GT_GUIContainer_Boiler;
-import net.minecraft.entity.player.InventoryPlayer;
public class GT_MetaTileEntity_Boiler_Solar_Steel extends GT_MetaTileEntity_Boiler_Solar {
public GT_MetaTileEntity_Boiler_Solar_Steel(int aID, String aName, String aNameRegional) {
@@ -59,13 +58,13 @@ public class GT_MetaTileEntity_Boiler_Solar_Steel extends GT_MetaTileEntity_Boil
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_Boiler(aPlayerInventory, aBaseMetaTileEntity, "SolarHPBoiler.png");
+ public int getCapacity() {
+ return 32000;
}
@Override
- public int getCapacity() {
- return 32000;
+ public SteamVariant getSteamVariant() {
+ return SteamVariant.STEEL;
}
@Override
diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Steel.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Steel.java
index b417ece4d5..0ae425f792 100644
--- a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Steel.java
+++ b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Steel.java
@@ -10,13 +10,11 @@ import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_TOP;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE;
import gregtech.GT_Mod;
+import gregtech.api.enums.SteamVariant;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.render.TextureFactory;
-import gregtech.common.gui.GT_Container_Boiler;
-import gregtech.common.gui.GT_GUIContainer_Boiler;
-import net.minecraft.entity.player.InventoryPlayer;
public class GT_MetaTileEntity_Boiler_Steel extends GT_MetaTileEntity_Boiler_Bronze {
@@ -77,16 +75,6 @@ public class GT_MetaTileEntity_Boiler_Steel extends GT_MetaTileEntity_Boiler_Bro
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_Boiler(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_Boiler(aPlayerInventory, aBaseMetaTileEntity, "SteelBoiler.png");
- }
-
- @Override
public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_Boiler_Steel(this.mName, this.mTier, this.mDescriptionArray, this.mTextures);
}
@@ -120,4 +108,9 @@ public class GT_MetaTileEntity_Boiler_Steel extends GT_MetaTileEntity_Boiler_Bro
protected int getCooldownInterval() {
return 40;
}
+
+ @Override
+ public SteamVariant getSteamVariant() {
+ return SteamVariant.STEEL;
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/debug/GT_MetaTileEntity_AdvDebugStructureWriter.java b/src/main/java/gregtech/common/tileentities/debug/GT_MetaTileEntity_AdvDebugStructureWriter.java
index ae03df5789..663b7ed326 100644
--- a/src/main/java/gregtech/common/tileentities/debug/GT_MetaTileEntity_AdvDebugStructureWriter.java
+++ b/src/main/java/gregtech/common/tileentities/debug/GT_MetaTileEntity_AdvDebugStructureWriter.java
@@ -6,22 +6,32 @@ import static net.minecraft.util.StatCollector.translateToLocal;
import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing;
import com.gtnewhorizon.structurelib.structure.StructureUtility;
import com.gtnewhorizon.structurelib.util.Vec3Impl;
+import com.gtnewhorizons.modularui.api.drawable.IDrawable;
+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.CycleButtonWidget;
+import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.MultiChildWidget;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.enums.Textures;
+import gregtech.api.gui.modularui.GT_UIInfos;
+import gregtech.api.gui.modularui.GT_UITextures;
+import gregtech.api.gui.modularui.GUITextureSet;
import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.modularui.IAddGregtechLogo;
+import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock;
import gregtech.api.render.TextureFactory;
-import gregtech.common.gui.GT_Container_AdvDebugStructureWriter;
-import gregtech.common.gui.GT_GUIContainer_AdvDebugStructureWriter;
import java.util.HashMap;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ChatComponentTranslation;
@@ -30,14 +40,15 @@ import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;
-public class GT_MetaTileEntity_AdvDebugStructureWriter extends GT_MetaTileEntity_TieredMachineBlock {
+public class GT_MetaTileEntity_AdvDebugStructureWriter extends GT_MetaTileEntity_TieredMachineBlock
+ implements IAddGregtechLogo, IAddUIWidgets {
private static final HashMap<GT_MetaTileEntity_AdvDebugStructureWriter, BoundHighlighter> bondingBoxes =
new HashMap<>(1);
private final BoundHighlighter boundingBox = new BoundHighlighter();
- public short[] numbers = new short[6];
- public boolean transpose = false;
- public boolean showHighlightBox = true;
- public String[] result = new String[] {"Undefined"};
+ private final short[] numbers = new short[6];
+ private boolean transpose = false;
+ private boolean showHighlightBox = true;
+ private String[] result = new String[] {"Undefined"};
public GT_MetaTileEntity_AdvDebugStructureWriter(int aID, String aName, String aNameRegional, int aTier) {
super(aID, aName, aNameRegional, aTier, 0, "");
@@ -81,16 +92,6 @@ public class GT_MetaTileEntity_AdvDebugStructureWriter extends GT_MetaTileEntity
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_AdvDebugStructureWriter(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_AdvDebugStructureWriter(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, byte b, ItemStack itemStack) {
return false;
}
@@ -193,10 +194,7 @@ public class GT_MetaTileEntity_AdvDebugStructureWriter extends GT_MetaTileEntity
@Override
public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
- if (aBaseMetaTileEntity.isClientSide()) {
- return true;
- }
- aBaseMetaTileEntity.openGUI(aPlayer);
+ GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer);
return true;
}
@@ -235,6 +233,104 @@ public class GT_MetaTileEntity_AdvDebugStructureWriter extends GT_MetaTileEntity
return result;
}
+ @Override
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ builder.widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK)
+ .setSize(90, 112)
+ .setPos(43, 4))
+ .widget(new ButtonWidget()
+ .setOnClick((clickData, widget) -> {
+ if (getBaseMetaTileEntity().isServerSide()) {
+ printStructure(widget.getContext().getPlayer());
+ }
+ })
+ .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_PRINT)
+ .setSize(18, 18)
+ .setPos(11, 128)
+ .addTooltip(translateToLocal("GT5U.machines.advdebugstructurewriter.gui.print.tooltip")))
+ .widget(new CycleButtonWidget()
+ .setToggle(() -> transpose, aBoolean -> transpose = aBoolean)
+ .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE)
+ .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_TRANSPOSE)
+ .setSize(18, 18)
+ .setPos(32, 128)
+ .addTooltip(translateToLocal("GT5U.machines.advdebugstructurewriter.gui.transpose.tooltip")))
+ .widget(new CycleButtonWidget()
+ .setToggle(() -> showHighlightBox, aBoolean -> showHighlightBox = aBoolean)
+ .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE)
+ .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_BOUNDING_BOX)
+ .setSize(18, 18)
+ .setPos(53, 128)
+ .addTooltip(translateToLocal("GT5U.machines.advdebugstructurewriter.gui.highlight.tooltip")))
+ .widget(new MultiChildWidget()
+ .addChild(new TextWidget(translateToLocal("GT5U.machines.advdebugstructurewriter.gui.origin"))
+ .setDefaultColor(0xf0f0ff)
+ .setPos(0, 0))
+ .addChild(TextWidget.dynamicString(() -> "A: " + numbers[0])
+ .setDefaultColor(0xf0f0ff)
+ .setPos(0, 10))
+ .addChild(TextWidget.dynamicString(() -> "B: " + numbers[1])
+ .setDefaultColor(0xf0f0ff)
+ .setPos(0, 18))
+ .addChild(TextWidget.dynamicString(() -> "C: " + numbers[2])
+ .setDefaultColor(0xf0f0ff)
+ .setPos(0, 26))
+ .addChild(new TextWidget(translateToLocal("GT5U.machines.advdebugstructurewriter.gui.size"))
+ .setDefaultColor(0xf0f0ff)
+ .setPos(0, 52))
+ .addChild(TextWidget.dynamicString(() -> "A: " + numbers[3])
+ .setDefaultColor(0xf0f0ff)
+ .setPos(0, 62))
+ .addChild(TextWidget.dynamicString(() -> "B: " + numbers[4])
+ .setDefaultColor(0xf0f0ff)
+ .setPos(0, 70))
+ .addChild(TextWidget.dynamicString(() -> "C: " + numbers[5])
+ .setDefaultColor(0xf0f0ff)
+ .setPos(0, 78))
+ .setPos(46, 8));
+ addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, -512, -64, 7);
+ addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, -16, -1, 25);
+ addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, 16, 1, 133);
+ addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, 512, 64, 151);
+ }
+
+ private void addChangeNumberButtons(
+ ModularWindow.Builder builder, IDrawable overlay, int addNumberShift, int addNumber, int xPos) {
+ int[] yPos = new int[] {4, 22, 40, 62, 80, 98};
+ for (int i = 0; i < yPos.length; i++) {
+ final int index = i; // needed for lambda
+ builder.widget(new ButtonWidget()
+ .setOnClick((clickData, widget) -> numbers[index] += clickData.shift ? addNumberShift : addNumber)
+ .setBackground(GT_UITextures.BUTTON_STANDARD, overlay)
+ .setSize(18, 18)
+ .setPos(xPos, yPos[index]));
+ }
+ }
+
+ @Override
+ public GUITextureSet getGUITextureSet() {
+ return new GUITextureSet().setGregTechLogo(GT_UITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY);
+ }
+
+ @Override
+ public void addGregTechLogo(ModularWindow.Builder builder) {
+ builder.widget(new DrawableWidget()
+ .setDrawable(getGUITextureSet().getGregTechLogo())
+ .setSize(17, 17)
+ .setPos(113, 96));
+ }
+
+ @Override
+ public boolean doesBindPlayerInventory() {
+ return false;
+ }
+
public static class ForgeEventHandler {
public ForgeEventHandler() {
MinecraftForge.EVENT_BUS.register(this);
diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java
index dfc013fe49..d7619da823 100644
--- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java
+++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java
@@ -16,26 +16,33 @@ import appeng.me.GridAccessException;
import appeng.me.helpers.AENetworkProxy;
import appeng.me.helpers.IGridProxyable;
import appeng.util.item.AEItemStack;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.SlotGroup;
+import com.gtnewhorizons.modularui.common.widget.SlotWidget;
import cpw.mods.fml.common.Optional;
import gregtech.api.GregTech_API;
import gregtech.api.enums.ItemList;
+import gregtech.api.gui.modularui.GT_UITextures;
+import gregtech.api.interfaces.IConfigurationCircuitSupport;
import gregtech.api.interfaces.ITexture;
-import gregtech.api.interfaces.metatileentity.IConfigurationCircuitSupport;
+import gregtech.api.interfaces.modularui.IAddGregtechLogo;
+import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus;
import gregtech.api.render.TextureFactory;
-import gregtech.common.gui.GT_Container_InputBus_ME;
-import gregtech.common.gui.GT_GUIContainer_InputBus_ME;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.gui.modularui.widget.AESlotWidget;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.common.util.ForgeDirection;
public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch_InputBus
- implements IConfigurationCircuitSupport {
+ implements IConfigurationCircuitSupport, IAddGregtechLogo, IAddUIWidgets {
private static final int SLOT_COUNT = 16;
private BaseActionSource requestSource = null;
private AENetworkProxy gridProxy = null;
@@ -72,16 +79,6 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_InputBus_ME(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_InputBus_ME(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) {
super.onFirstTick(aBaseMetaTileEntity);
getProxy().onReady();
@@ -250,10 +247,12 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch
}
}
+ @Override
public void startRecipeProcessing() {
processingRecipe = true;
}
+ @Override
public void endRecipeProcessing() {
if (GregTech_API.mAE2) {
for (int i = 0; i < SLOT_COUNT; ++i) {
@@ -310,4 +309,63 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch
public boolean isValidSlot(int aIndex) {
return false;
}
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ final SlotWidget[] aeSlotWidgets = new SlotWidget[16];
+ builder.widget(SlotGroup.ofItemHandler(inventoryHandler, 4)
+ .startFromSlot(0)
+ .endAtSlot(15)
+ .phantom(true)
+ .background(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_ARROW_ME)
+ .widgetCreator(slot -> new SlotWidget(slot) {
+ @Override
+ protected void phantomClick(ClickData clickData, ItemStack cursorStack) {
+ if (clickData.mouseButton != 0) return;
+ final int aSlotIndex = getMcSlot().getSlotIndex();
+ if (cursorStack == null) {
+ getMcSlot().putStack(null);
+ } else {
+ if (containsSuchStack(cursorStack)) return;
+ getMcSlot().putStack(GT_Utility.copyAmount(1L, cursorStack));
+ }
+ if (getBaseMetaTileEntity().isServerSide()) {
+ final ItemStack newInfo = updateInformationSlot(aSlotIndex, cursorStack);
+ aeSlotWidgets[getMcSlot().getSlotIndex()]
+ .getMcSlot()
+ .putStack(newInfo);
+ }
+ }
+
+ private boolean containsSuchStack(ItemStack tStack) {
+ for (int i = 0; i < 16; ++i) {
+ if (GT_Utility.areStacksEqual(mInventory[i], tStack, false)) return true;
+ }
+ return false;
+ }
+ })
+ .build()
+ .setPos(7, 9))
+ .widget(SlotGroup.ofItemHandler(inventoryHandler, 4)
+ .startFromSlot(16)
+ .endAtSlot(31)
+ .phantom(true)
+ .background(GT_UITextures.SLOT_DARK_GRAY)
+ .widgetCreator(slot ->
+ aeSlotWidgets[slot.getSlotIndex() - 16] = new AESlotWidget(slot).disableInteraction())
+ .build()
+ .setPos(97, 9))
+ .widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_ARROW_DOUBLE)
+ .setPos(82, 40)
+ .setSize(12, 12));
+ }
+
+ @Override
+ public void addGregTechLogo(ModularWindow.Builder builder) {
+ builder.widget(new DrawableWidget()
+ .setDrawable(getGUITextureSet().getGregTechLogo())
+ .setSize(17, 17)
+ .setPos(80, 63));
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java
index 66209fec4f..ed0ca51231 100644
--- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java
+++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java
@@ -283,4 +283,9 @@ public class GT_MetaTileEntity_Hatch_OutputBus_ME extends GT_MetaTileEntity_Hatc
}
return ss.toArray(new String[itemCache.size() + 2]);
}
+
+ @Override
+ public boolean useModularUI() {
+ return false;
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_CuringOven.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_CuringOven.java
index dc5c976eac..3dc9fd7b63 100644
--- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_CuringOven.java
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_CuringOven.java
@@ -1,21 +1,21 @@
package gregtech.common.tileentities.machines.basic;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
import gregtech.api.enums.ItemList;
import gregtech.api.enums.Textures;
-import gregtech.api.gui.GT_Container_1by1;
-import gregtech.api.gui.GT_GUIContainer_1by1;
import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.items.GT_MetaGenerated_Tool;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
import gregtech.api.render.TextureFactory;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fluids.FluidStack;
-public class GT_MetaTileEntity_CuringOven extends GT_MetaTileEntity_BasicMachine {
+public class GT_MetaTileEntity_CuringOven extends GT_MetaTileEntity_BasicMachine implements IAddUIWidgets {
public GT_MetaTileEntity_CuringOven(int aID, String aName, String aNameRegional, int aTier) {
super(
@@ -76,16 +76,6 @@ public class GT_MetaTileEntity_CuringOven extends GT_MetaTileEntity_BasicMachine
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_1by1(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_1by1(aPlayerInventory, aBaseMetaTileEntity, getLocalName());
- }
-
- @Override
public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
if (aBaseMetaTileEntity.isServerSide()) {
for (ItemStack tStack : mInventory)
@@ -120,4 +110,14 @@ public class GT_MetaTileEntity_CuringOven extends GT_MetaTileEntity_BasicMachine
}
}
}
+
+ @Override
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ getBaseMetaTileEntity().add1by1Slot(builder);
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Disassembler.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Disassembler.java
index 81e7ece86f..ff46aada64 100644
--- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Disassembler.java
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Disassembler.java
@@ -605,4 +605,16 @@ public class GT_MetaTileEntity_Disassembler extends GT_MetaTileEntity_BasicMachi
&& aStack.getTagCompound() != null
&& aStack.getTagCompound().getCompoundTag("GT.CraftingComponents") != null;
}
+
+ @Override
+ public GT_Recipe.GT_Recipe_Map getRecipeList() {
+ return GT_Recipe.GT_Recipe_Map.sDisassemblerRecipes;
+ }
+
+ // GUI stuff
+
+ @Override
+ public boolean hasNEITransferRect() {
+ return false;
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_IndustrialApiary.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_IndustrialApiary.java
index b1e6b1cc2f..557b01fbb0 100644
--- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_IndustrialApiary.java
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_IndustrialApiary.java
@@ -3,9 +3,28 @@ package gregtech.common.tileentities.machines.basic;
import static gregtech.api.enums.GT_Values.AuthorKuba;
import static gregtech.api.enums.GT_Values.V;
import static gregtech.api.enums.Textures.BlockIcons.*;
+import static gregtech.api.metatileentity.BaseTileEntity.STALLED_STUTTERING_TOOLTIP;
+import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY;
import static gregtech.api.util.GT_Utility.moveMultipleItemStacks;
import com.google.common.collect.ImmutableSet;
+import com.gtnewhorizons.modularui.api.drawable.IDrawable;
+import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable;
+import com.gtnewhorizons.modularui.api.math.Pos2d;
+import com.gtnewhorizons.modularui.api.screen.ModularUIContext;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.common.builder.UIInfo;
+import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot;
+import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer;
+import com.gtnewhorizons.modularui.common.widget.ButtonWidget;
+import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget;
+import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget;
+import com.gtnewhorizons.modularui.common.widget.ProgressBar;
+import com.gtnewhorizons.modularui.common.widget.SlotGroup;
+import com.gtnewhorizons.modularui.common.widget.SlotWidget;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
import com.mojang.authlib.GameProfile;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -19,7 +38,11 @@ import forestry.apiculture.genetics.Bee;
import forestry.apiculture.genetics.alleles.AlleleEffectThrottled;
import forestry.core.errors.EnumErrorCode;
import forestry.plugins.PluginApiculture;
+import gregtech.GT_Mod;
+import gregtech.api.gui.modularui.GT_UIInfos;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
@@ -28,27 +51,28 @@ import gregtech.api.util.GT_ApiaryModifier;
import gregtech.api.util.GT_ApiaryUpgrade;
import gregtech.api.util.GT_Utility;
import gregtech.common.GT_Client;
-import gregtech.common.gui.GT_Container_IndustrialApiary;
-import gregtech.common.gui.GT_GUIContainer_IndustrialApiary;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.*;
+import java.util.stream.Collectors;
import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
-import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.StatCollector;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicMachine
- implements IBeeHousing, IBeeHousingInventory, IErrorLogic, IBeeModifier, IBeeListener {
+ implements IBeeHousing, IBeeHousingInventory, IErrorLogic, IBeeModifier, IBeeListener, IAddUIWidgets {
public static final int beeCycleLength = 550;
public static final int baseEUtUsage = 37;
@@ -149,13 +173,29 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_IndustrialApiary(aPlayerInventory, aBaseMetaTileEntity);
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) return true;
+ if (!GT_Mod.gregtechproxy.mForceFreeFace) {
+ openGUI(aBaseMetaTileEntity, aPlayer);
+ return true;
+ }
+ for (byte i = 0; i < 6; i++) {
+ if (aBaseMetaTileEntity.getAirAtSide(i)) {
+ openGUI(aBaseMetaTileEntity, aPlayer);
+ return true;
+ }
+ }
+ GT_Utility.sendChatToPlayer(aPlayer, "No free Side!");
+ return true;
}
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_IndustrialApiary(aPlayerInventory, aBaseMetaTileEntity);
+ private void openGUI(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ IndustrialApiaryUI.open(
+ aPlayer,
+ aBaseMetaTileEntity.getWorld(),
+ aBaseMetaTileEntity.getXCoord(),
+ aBaseMetaTileEntity.getYCoord(),
+ aBaseMetaTileEntity.getZCoord());
}
@Override
@@ -1036,4 +1076,305 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
@Override
public void writeToNBT(NBTTagCompound nbtTagCompound) {}
};
+
+ private static final String POWER_SOURCE_POWER = "GT5U.machines.powersource.power",
+ CANCEL_PROCESS_TOOLTIP = "GT5U.machines.industrialapiary.cancel.tooltip",
+ SPEED_TOOLTIP = "GT5U.machines.industrialapiary.speed.tooltip",
+ SPEED_LOCKED_TOOLTIP = "GT5U.machines.industrialapiary.speedlocked.tooltip",
+ INFO_TOOLTIP = "GT5U.machines.industrialapiary.info.tooltip",
+ INFO_WITH_BEE_TOOLTIP = "GT5U.machines.industrialapiary.infoextended.tooltip",
+ UPGRADE_TOOLTIP = "GT5U.machines.industrialapiary.upgradeslot.tooltip";
+
+ @Override
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ builder.widget(new SlotWidget(new ApiarySlot(inventoryHandler, queen))
+ .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_BEE_QUEEN)
+ .setPos(36, 21))
+ .widget(new SlotWidget(new ApiarySlot(inventoryHandler, drone))
+ .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_BEE_DRONE)
+ .setPos(36, 41))
+ .widget(SlotGroup.ofItemHandler(inventoryHandler, 2)
+ .startFromSlot(7)
+ .endAtSlot(10)
+ .slotCreator(i -> new ApiarySlot(inventoryHandler, i))
+ .applyForWidget(widget -> widget.setGTTooltip(() -> mTooltipCache.getData(UPGRADE_TOOLTIP))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY))
+ .build()
+ .setPos(61, 23));
+
+ super.addUIWidgets(builder, buildContext);
+
+ builder.widget(new ProgressBar()
+ .setProgress(() -> (float) getProgresstime() / Math.max(maxProgresstime(), 1))
+ .setTexture(GT_UITextures.PROGRESSBAR_ARROW, 20)
+ .setPos(70, 3)
+ .setSize(20, 18))
+ .widget(new ButtonWidget()
+ .setOnClick((clickData, widget) -> cancelProcess())
+ .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_CROSS)
+ .setGTTooltip(() -> mTooltipCache.getData(CANCEL_PROCESS_TOOLTIP))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setPos(7, 26)
+ .setSize(18, 18))
+ .widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_INFORMATION)
+ .setGTTooltip(() -> {
+ String energyreq = GT_Utility.formatNumbers(
+ (int) ((float) GT_MetaTileEntity_IndustrialApiary.baseEUtUsage
+ * getEnergyModifier()
+ * getAcceleration())
+ + getAdditionalEnergyUsage());
+ String Temp = StatCollector.translateToLocal(
+ getTemperature().getName());
+ String Hum =
+ StatCollector.translateToLocal(getHumidity().getName());
+ if (getUsedQueen() != null
+ && BeeManager.beeRoot.isMember(getUsedQueen(), EnumBeeType.QUEEN.ordinal())) {
+ IBee bee = BeeManager.beeRoot.getMember(getUsedQueen());
+ if (bee.isAnalyzed()) {
+ IBeeGenome genome = bee.getGenome();
+ IBeeModifier mod = BeeManager.beeRoot
+ .getBeekeepingMode(getWorld())
+ .getBeeModifier();
+ float tmod = getTerritoryModifier(null, 1f) * mod.getTerritoryModifier(null, 1f);
+ int[] t = Arrays.stream(genome.getTerritory())
+ .map(i -> (int) ((float) i * tmod))
+ .toArray();
+ return mTooltipCache.getUncachedTooltipData(
+ INFO_WITH_BEE_TOOLTIP,
+ energyreq,
+ Temp,
+ Hum,
+ genome.getSpeed(),
+ getProductionModifier(null, 1f) * mod.getProductionModifier(null, 1f),
+ Math.round(getFloweringModifier(null, 1f)
+ * genome.getFlowering()
+ * mod.getFloweringModifier(null, 1f)),
+ Math.round(getLifespanModifier(null, null, 1f)
+ * genome.getLifespan()
+ * mod.getLifespanModifier(null, null, 1f)),
+ t[0],
+ t[1],
+ t[2]);
+ }
+ }
+ return mTooltipCache.getUncachedTooltipData(INFO_TOOLTIP, energyreq, Temp, Hum);
+ })
+ .attachSyncer(
+ new FakeSyncWidget.ItemStackSyncer(() -> usedQueen, val -> usedQueen = val),
+ builder,
+ (widget, val) -> widget.notifyTooltipChange())
+ .setPos(163, 5)
+ .setSize(7, 18))
+ .widget(new ButtonWidget()
+ .setOnClick((clickData, widget) -> {
+ if (clickData.mouseButton == 0) {
+ if (mLockedSpeed) return;
+ if (!clickData.shift) {
+ mSpeed++;
+ if (mSpeed > getMaxSpeed()) mSpeed = 0;
+ } else {
+ mSpeed--;
+ if (mSpeed < 0) mSpeed = getMaxSpeed();
+ }
+ } else if (clickData.mouseButton == 1) {
+ mLockedSpeed = !mLockedSpeed;
+ if (mLockedSpeed) mSpeed = getMaxSpeed();
+ }
+ })
+ .setGTTooltip(() -> mTooltipCache.getUncachedTooltipData(
+ mLockedSpeed ? SPEED_LOCKED_TOOLTIP : SPEED_TOOLTIP,
+ getAcceleration(),
+ GT_Utility.formatNumbers(getAdditionalEnergyUsage())))
+ .attachSyncer(
+ new FakeSyncWidget.IntegerSyncer(() -> mSpeed, val -> mSpeed = val),
+ builder,
+ (widget, val) -> widget.notifyTooltipChange())
+ .attachSyncer(
+ new FakeSyncWidget.BooleanSyncer(() -> mLockedSpeed, val -> mLockedSpeed = val),
+ builder,
+ (widget, val) -> widget.notifyTooltipChange())
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setBackground(GT_UITextures.PICTURE_SQUARE_LIGHT_GRAY)
+ .setPos(25, 62)
+ .setSize(18, 18))
+ .widget(new TextWidget("x")
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(30, 63))
+ .widget(TextWidget.dynamicString(() -> String.valueOf(1 << mSpeed))
+ // mSpeed is already synced
+ .setSynced(false)
+ .setDefaultColor(COLOR_TEXT_GRAY.get())
+ .setPos(26, 72));
+ }
+
+ @Override
+ protected SlotWidget createItemInputSlot(int index, IDrawable[] backgrounds, Pos2d pos) {
+ // we have custom input slots
+ return null;
+ }
+
+ @Override
+ protected CycleButtonWidget createItemAutoOutputButton() {
+ return (CycleButtonWidget) super.createItemAutoOutputButton().setPos(7, 62);
+ }
+
+ @Override
+ protected CycleButtonWidget createFluidAutoOutputButton() {
+ return null;
+ }
+
+ @Override
+ protected SlotWidget createChargerSlot(int x, int y, String tooltipKey, Object[] tooltipArgs) {
+ return (SlotWidget)
+ super.createChargerSlot(x, y, tooltipKey, tooltipArgs).setPos(79, 62);
+ }
+
+ @Override
+ protected DrawableWidget createErrorStatusArea(ModularWindow.Builder builder, IDrawable picture) {
+ return (DrawableWidget) super.createErrorStatusArea(builder, picture)
+ .setPos(100, 62)
+ .attachSyncer(
+ new FakeSyncWidget.ListSyncer<>(
+ () -> Arrays.asList(mErrorStates.toArray(new IErrorState[0])),
+ val -> {
+ mErrorStates.clear();
+ mErrorStates.addAll(new HashSet<>(val));
+ },
+ (buffer, val) -> buffer.writeShort(val.getID()),
+ buffer -> ForestryAPI.errorStateRegistry.getErrorState(buffer.readShort())),
+ builder,
+ (widget, val) -> widget.notifyTooltipChange());
+ }
+
+ @Override
+ protected List<String> getErrorDescriptions() {
+ if (!mErrorStates.isEmpty()) {
+ return mErrorStates.stream()
+ .map(state ->
+ EnumChatFormatting.RED + StatCollector.translateToLocal("for." + state.getDescription()))
+ .collect(Collectors.toList());
+ } else if (mStuttering) {
+ return mTooltipCache.getData(STALLED_STUTTERING_TOOLTIP, StatCollector.translateToLocal(POWER_SOURCE_POWER))
+ .text;
+ } else {
+ return Collections.emptyList();
+ }
+ }
+
+ @Override
+ protected List<String> getErrorDescriptionsShift() {
+ // Don't show shift tooltip of "Progress was lost"
+ // as this machine does not lose progress
+ return getErrorDescriptions();
+ }
+
+ private int getAcceleration() {
+ return 1 << mSpeed;
+ }
+
+ private int getAdditionalEnergyUsage() {
+ int accelerated = getAcceleration();
+ int energyusage = 0;
+ if (accelerated == 2) energyusage = 32;
+ else if (accelerated > 2) energyusage = 32 * accelerated << (mSpeed - 2);
+ return energyusage;
+ }
+
+ private class ApiarySlot extends BaseSlot {
+
+ public ApiarySlot(IItemHandlerModifiable inventory, int index) {
+ super(inventory, index);
+ }
+
+ @Override
+ public boolean isItemValidPhantom(ItemStack stack) {
+ return super.isItemValidPhantom(stack) && getBaseMetaTileEntity().isItemValidForSlot(getSlotIndex(), stack);
+ }
+
+ @Override
+ public void onSlotChanged() {
+ super.onSlotChanged();
+ onInventoryUpdate(getSlotIndex());
+ }
+ }
+
+ private static final UIInfo<?, ?> IndustrialApiaryUI =
+ GT_UIInfos.GTTileEntityUIFactory.apply(GT_ModularUIContainer_IndustrialApiary::new);
+
+ private static class GT_ModularUIContainer_IndustrialApiary extends ModularUIContainer {
+
+ public GT_ModularUIContainer_IndustrialApiary(ModularUIContext context, ModularWindow mainWindow) {
+ super(context, mainWindow);
+ }
+
+ private final int playerInventorySlot = 36;
+
+ @Override
+ public ItemStack slotClick(int aSlotNumber, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
+ if (!(aSlotNumber >= playerInventorySlot + 2 && aSlotNumber < playerInventorySlot + 2 + 4))
+ return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
+ if (aShifthold == 5) return null;
+ if (aShifthold != 0) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
+ if (aMouseclick > 1) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
+ ItemStack s = aPlayer.inventory.getItemStack();
+ if (s == null) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
+ Slot slot = getSlot(aSlotNumber);
+ ItemStack slotStack = slot.getStack();
+ if (slotStack != null && !GT_Utility.areStacksEqual(slotStack, s)) return null; // super would replace item
+ if (slotStack == null && !slot.isItemValid(s))
+ return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
+ if (!GT_ApiaryUpgrade.isUpgrade(s)) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
+ int max = GT_ApiaryUpgrade.getUpgrade(s).getMaxNumber();
+ if (slotStack != null) max = Math.max(0, max - slotStack.stackSize);
+ max = Math.min(max, s.stackSize);
+ if (max == 0) return null;
+ if (aMouseclick == 1) max = 1;
+ if (max == s.stackSize) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
+ ItemStack newStack = s.splitStack(s.stackSize - max);
+ ItemStack result = super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
+ aPlayer.inventory.setItemStack(newStack);
+ return result;
+ }
+
+ @Override
+ public ItemStack transferStackInSlot(EntityPlayer aPlayer, int aSlotIndex) {
+ Slot s = getSlot(aSlotIndex);
+ if (s == null) return super.transferStackInSlot(aPlayer, aSlotIndex);
+ if (aSlotIndex >= playerInventorySlot) return super.transferStackInSlot(aPlayer, aSlotIndex);
+ ItemStack aStack = s.getStack();
+ if (aStack == null) return super.transferStackInSlot(aPlayer, aSlotIndex);
+ if (!GT_ApiaryUpgrade.isUpgrade(aStack)) return super.transferStackInSlot(aPlayer, aSlotIndex);
+ for (int i = playerInventorySlot + 2; i < playerInventorySlot + 2 + 4; i++) {
+ Slot iSlot = getSlot(i);
+ ItemStack iStack = iSlot.getStack();
+ if (iStack == null) {
+ if (!iSlot.isItemValid(aStack)) continue;
+ } else {
+ if (!GT_Utility.areStacksEqual(aStack, iStack)) continue;
+ }
+ int max = GT_ApiaryUpgrade.getUpgrade(aStack).getMaxNumber();
+ if (iStack == null) {
+ max = Math.min(max, aStack.stackSize);
+ ItemStack newstack = aStack.splitStack(max);
+ iSlot.putStack(newstack);
+ } else {
+ max = Math.max(0, max - iStack.stackSize);
+ max = Math.min(max, aStack.stackSize);
+ iStack.stackSize += max;
+ aStack.stackSize -= max;
+ iSlot.onSlotChanged();
+ }
+ if (aStack.stackSize == 0) s.putStack(null);
+ else s.onSlotChanged();
+ break;
+ }
+ return null;
+ }
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MicrowaveEnergyTransmitter.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MicrowaveEnergyTransmitter.java
index 8616b98fae..14a213b156 100644
--- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MicrowaveEnergyTransmitter.java
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MicrowaveEnergyTransmitter.java
@@ -7,11 +7,23 @@ import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE_GLOW;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_GLOW;
+import com.gtnewhorizons.modularui.api.drawable.IDrawable;
+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.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
import gregtech.api.GregTech_API;
import gregtech.api.enums.ConfigCategories;
import gregtech.api.enums.Materials;
+import gregtech.api.gui.modularui.GT_UIInfos;
+import gregtech.api.gui.modularui.GT_UITextures;
+import gregtech.api.gui.modularui.GUITextureSet;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.modularui.IAddGregtechLogo;
+import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IEnergyConnected;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.BaseMetaTileEntity;
@@ -19,10 +31,8 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Config;
import gregtech.api.util.GT_Utility;
-import gregtech.common.gui.GT_Container_MicrowaveEnergyTransmitter;
-import gregtech.common.gui.GT_GUIContainer_MicrowaveEnergyTransmitter;
+import java.util.function.Consumer;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
@@ -30,7 +40,8 @@ import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.fluids.FluidStack;
-public class GT_MetaTileEntity_MicrowaveEnergyTransmitter extends GT_MetaTileEntity_BasicTank {
+public class GT_MetaTileEntity_MicrowaveEnergyTransmitter extends GT_MetaTileEntity_BasicTank
+ implements IAddGregtechLogo, IAddUIWidgets {
private static boolean sInterDimensionalTeleportAllowed = true;
private static int mMaxLoss = 50;
@@ -71,21 +82,11 @@ public class GT_MetaTileEntity_MicrowaveEnergyTransmitter extends GT_MetaTileEnt
public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
if (aBaseMetaTileEntity.isClientSide()) return true;
this.hasBlock = checkForBlock();
- aBaseMetaTileEntity.openGUI(aPlayer);
+ GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer);
return true;
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_MicrowaveEnergyTransmitter(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MicrowaveEnergyTransmitter(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_MicrowaveEnergyTransmitter(
this.mName, this.mTier, this.mDescriptionArray, this.mTextures);
@@ -415,4 +416,82 @@ public class GT_MetaTileEntity_MicrowaveEnergyTransmitter extends GT_MetaTileEnt
public ITexture[][][] getTextureSet(ITexture[] aTextures) {
return null;
}
+
+ @Override
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ builder.widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK)
+ .setSize(90, 72)
+ .setPos(43, 4))
+ .widget(TextWidget.dynamicString(() -> "X: " + GT_Utility.parseNumberToString(mTargetX))
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setPos(46, 8))
+ .widget(TextWidget.dynamicString(() -> "Y: " + GT_Utility.parseNumberToString(mTargetY))
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setPos(46, 16))
+ .widget(TextWidget.dynamicString(() -> "Z: " + GT_Utility.parseNumberToString(mTargetZ))
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setPos(46, 24))
+ .widget(TextWidget.dynamicString(() -> "Dim: " + GT_Utility.parseNumberToString(mTargetD))
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setPos(46, 32))
+ .widget(TextWidget.dynamicString(
+ () -> "Dim Valid: " + (GT_Utility.isRealDimension(mTargetD) ? "Yes" : "No"))
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setEnabled(widget -> hasDimensionalTeleportCapability())
+ .setPos(46, 40))
+ .widget(new FakeSyncWidget.FluidStackSyncer(() -> mFluid, val -> mFluid = val));
+
+ addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, -512, -64, 7);
+ addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, -16, -1, 25);
+ addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, 16, 1, 133);
+ addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, 512, 64, 151);
+
+ addChangeNumberButton(
+ builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> mTargetD += val, -16, -8, 7, 58);
+ addChangeNumberButton(
+ builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> mTargetD += val, -4, -1, 25, 58);
+ addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> mTargetD += val, 4, 1, 133, 58);
+ addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> mTargetD += val, 16, 8, 151, 58);
+ }
+
+ private void addChangeNumberButtons(
+ ModularWindow.Builder builder, IDrawable overlay, int addNumberShift, int addNumber, int xPos) {
+ addChangeNumberButton(builder, overlay, val -> mTargetX += val, addNumberShift, addNumber, xPos, 4);
+ addChangeNumberButton(builder, overlay, val -> mTargetY += val, addNumberShift, addNumber, xPos, 22);
+ addChangeNumberButton(builder, overlay, val -> mTargetZ += val, addNumberShift, addNumber, xPos, 40);
+ }
+
+ private void addChangeNumberButton(
+ ModularWindow.Builder builder,
+ IDrawable overlay,
+ Consumer<Integer> setter,
+ int addNumberShift,
+ int addNumber,
+ int xPos,
+ int yPos) {
+ builder.widget(new ButtonWidget()
+ .setOnClick((clickData, widget) -> setter.accept(clickData.shift ? addNumberShift : addNumber))
+ .setBackground(GT_UITextures.BUTTON_STANDARD, overlay)
+ .setSize(18, 18)
+ .setPos(xPos, yPos));
+ }
+
+ @Override
+ public GUITextureSet getGUITextureSet() {
+ return new GUITextureSet().setGregTechLogo(GT_UITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY);
+ }
+
+ @Override
+ public void addGregTechLogo(ModularWindow.Builder builder) {
+ builder.widget(new DrawableWidget()
+ .setDrawable(getGUITextureSet().getGregTechLogo())
+ .setSize(17, 17)
+ .setPos(113, 56));
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Miner.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Miner.java
index 67ad6c3a5c..17e9e94b9c 100644
--- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Miner.java
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Miner.java
@@ -3,9 +3,16 @@ package gregtech.common.tileentities.machines.basic;
import static gregtech.api.enums.GT_Values.V;
import static gregtech.api.enums.GT_Values.debugBlockMiner;
+import com.gtnewhorizons.modularui.api.math.Pos2d;
+import com.gtnewhorizons.modularui.api.math.Size;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.common.widget.ProgressBar;
import gregtech.api.enums.Textures;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
import gregtech.api.render.TextureFactory;
@@ -28,7 +35,8 @@ import net.minecraft.world.ChunkPosition;
import net.minecraftforge.common.util.FakePlayer;
@SuppressWarnings("ObjectEquality")
-public class GT_MetaTileEntity_Miner extends GT_MetaTileEntity_BasicMachine implements GT_IDrillingLogicDelegateOwner {
+public class GT_MetaTileEntity_Miner extends GT_MetaTileEntity_BasicMachine
+ implements GT_IDrillingLogicDelegateOwner, IAddUIWidgets {
static final int[] RADIUS = {8, 8, 16, 24, 32}; // Miner radius per tier
static final int[] SPEED = {160, 160, 80, 40, 20}; // Miner cycle time per tier
static final int[] ENERGY = {8, 8, 32, 128, 512}; // Miner energy consumption per tier
@@ -424,4 +432,20 @@ public class GT_MetaTileEntity_Miner extends GT_MetaTileEntity_BasicMachine impl
public GT_DrillingLogicDelegate getPipe() {
return pipe;
}
+
+ @Override
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ super.addUIWidgets(builder, buildContext);
+ builder.widget(createProgressBar(
+ GT_UITextures.PROGRESSBAR_CANNER,
+ 20,
+ ProgressBar.Direction.RIGHT,
+ new Pos2d(78, 24),
+ new Size(20, 18)));
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java
index 213b02e223..26eed71b41 100644
--- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java
@@ -4,8 +4,7 @@ import static gregtech.api.enums.GT_Values.V;
import static gregtech.api.enums.GT_Values.debugBlockPump;
import gregtech.api.enums.Textures;
-import gregtech.api.gui.GT_Container_BasicTank;
-import gregtech.api.gui.GT_GUIContainer_BasicTank;
+import gregtech.api.gui.modularui.GT_UIInfos;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -22,7 +21,6 @@ import java.util.HashSet;
import java.util.Set;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -172,16 +170,6 @@ public class GT_MetaTileEntity_Pump extends GT_MetaTileEntity_Hatch {
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_BasicTank(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_BasicTank(aPlayerInventory, aBaseMetaTileEntity, getLocalName());
- }
-
- @Override
public boolean doesFillContainers() {
return true;
}
@@ -672,8 +660,7 @@ public class GT_MetaTileEntity_Pump extends GT_MetaTileEntity_Hatch {
@Override
public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
- if (aBaseMetaTileEntity.isClientSide()) return true;
- aBaseMetaTileEntity.openGUI(aPlayer);
+ GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer);
return true;
}
@@ -838,4 +825,9 @@ public class GT_MetaTileEntity_Pump extends GT_MetaTileEntity_Hatch {
+ StatCollector.translateToLocal("GT5U.machines.blocks")
};
}
+
+ @Override
+ public boolean useModularUI() {
+ return true;
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java
index 9dc00109cf..0d09c59832 100644
--- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java
@@ -9,17 +9,28 @@ import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_GLOW;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_SIDES;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_SIDES_GLOW;
+import com.gtnewhorizons.modularui.api.drawable.IDrawable;
+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.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
import gregtech.api.enums.ConfigCategories;
+import gregtech.api.gui.modularui.GT_UIInfos;
+import gregtech.api.gui.modularui.GT_UITextures;
+import gregtech.api.gui.modularui.GUITextureSet;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.modularui.IAddGregtechLogo;
+import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Config;
import gregtech.api.util.GT_Utility;
-import gregtech.common.gui.GT_Container_Teleporter;
-import gregtech.common.gui.GT_GUIContainer_Teleporter;
import java.util.List;
+import java.util.function.Consumer;
import net.minecraft.client.particle.EntityFX;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityHanging;
@@ -36,7 +47,6 @@ import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.entity.item.EntityTNTPrimed;
import net.minecraft.entity.item.EntityXPOrb;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.entity.projectile.EntityFireball;
import net.minecraft.entity.projectile.EntityFishHook;
@@ -50,7 +60,8 @@ import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.fluids.FluidStack;
-public class GT_MetaTileEntity_Teleporter extends GT_MetaTileEntity_BasicTank {
+public class GT_MetaTileEntity_Teleporter extends GT_MetaTileEntity_BasicTank
+ implements IAddGregtechLogo, IAddUIWidgets {
private static boolean sInterDimensionalTeleportAllowed = true;
private static int sPassiveEnergyDrain = 2048;
@@ -164,21 +175,11 @@ public class GT_MetaTileEntity_Teleporter extends GT_MetaTileEntity_BasicTank {
public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
if (aBaseMetaTileEntity.isClientSide()) return true;
// this.hasEgg = checkForEgg();
- aBaseMetaTileEntity.openGUI(aPlayer);
+ GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer);
return true;
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_Teleporter(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_Teleporter(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_Teleporter(this.mName, this.mTier, this.mDescriptionArray, this.mTextures);
}
@@ -605,4 +606,82 @@ public class GT_MetaTileEntity_Teleporter extends GT_MetaTileEntity_BasicTank {
public ITexture[][][] getTextureSet(ITexture[] aTextures) {
return null;
}
+
+ @Override
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ builder.widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK)
+ .setSize(90, 72)
+ .setPos(43, 4))
+ .widget(TextWidget.dynamicString(() -> "X: " + GT_Utility.parseNumberToString(mTargetX))
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setPos(46, 8))
+ .widget(TextWidget.dynamicString(() -> "Y: " + GT_Utility.parseNumberToString(mTargetY))
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setPos(46, 16))
+ .widget(TextWidget.dynamicString(() -> "Z: " + GT_Utility.parseNumberToString(mTargetZ))
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setPos(46, 24))
+ .widget(TextWidget.dynamicString(() -> "Dim: " + GT_Utility.parseNumberToString(mTargetD))
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setPos(46, 32))
+ .widget(TextWidget.dynamicString(
+ () -> "Dim Valid: " + (GT_Utility.isRealDimension(mTargetD) ? "Yes" : "No"))
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setEnabled(widget -> hasDimensionalTeleportCapability())
+ .setPos(46, 40))
+ .widget(new FakeSyncWidget.FluidStackSyncer(() -> mFluid, val -> mFluid = val));
+
+ addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, -512, -64, 7);
+ addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, -16, -1, 25);
+ addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, 16, 1, 133);
+ addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, 512, 64, 151);
+
+ addChangeNumberButton(
+ builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> mTargetD += val, -16, -8, 7, 58);
+ addChangeNumberButton(
+ builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> mTargetD += val, -4, -1, 25, 58);
+ addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> mTargetD += val, 4, 1, 133, 58);
+ addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> mTargetD += val, 16, 8, 151, 58);
+ }
+
+ private void addChangeNumberButtons(
+ ModularWindow.Builder builder, IDrawable overlay, int addNumberShift, int addNumber, int xPos) {
+ addChangeNumberButton(builder, overlay, val -> mTargetX += val, addNumberShift, addNumber, xPos, 4);
+ addChangeNumberButton(builder, overlay, val -> mTargetY += val, addNumberShift, addNumber, xPos, 22);
+ addChangeNumberButton(builder, overlay, val -> mTargetZ += val, addNumberShift, addNumber, xPos, 40);
+ }
+
+ private void addChangeNumberButton(
+ ModularWindow.Builder builder,
+ IDrawable overlay,
+ Consumer<Integer> setter,
+ int addNumberShift,
+ int addNumber,
+ int xPos,
+ int yPos) {
+ builder.widget(new ButtonWidget()
+ .setOnClick((clickData, widget) -> setter.accept(clickData.shift ? addNumberShift : addNumber))
+ .setBackground(GT_UITextures.BUTTON_STANDARD, overlay)
+ .setSize(18, 18)
+ .setPos(xPos, yPos));
+ }
+
+ @Override
+ public GUITextureSet getGUITextureSet() {
+ return new GUITextureSet().setGregTechLogo(GT_UITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY);
+ }
+
+ @Override
+ public void addGregTechLogo(ModularWindow.Builder builder) {
+ builder.widget(new DrawableWidget()
+ .setDrawable(getGUITextureSet().getGregTechLogo())
+ .setSize(17, 17)
+ .setPos(113, 56));
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AssemblyLine.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AssemblyLine.java
index 68aab6ee00..e5b7110659 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AssemblyLine.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AssemblyLine.java
@@ -20,7 +20,6 @@ import gregtech.api.enums.ItemList;
import gregtech.api.enums.SoundResource;
import gregtech.api.enums.Textures;
import gregtech.api.enums.Textures.BlockIcons;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.IHatchElement;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
@@ -38,7 +37,6 @@ import gregtech.api.util.IGT_HatchAdder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
@@ -195,12 +193,6 @@ public class GT_MetaTileEntity_AssemblyLine
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "AssemblyLine.png");
- }
-
- @Override
public GT_Recipe.GT_Recipe_Map getRecipeMap() {
return null;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BrickedBlastFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BrickedBlastFurnace.java
index bec9072c80..7536735634 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BrickedBlastFurnace.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BrickedBlastFurnace.java
@@ -2,6 +2,7 @@ package gregtech.common.tileentities.machines.multi;
import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
+import gregtech.api.enums.SteamVariant;
import gregtech.api.enums.Textures;
import gregtech.api.enums.Textures.BlockIcons;
import gregtech.api.interfaces.ISecondaryDescribable;
@@ -111,6 +112,11 @@ public class GT_MetaTileEntity_BrickedBlastFurnace extends GT_MetaTileEntity_Pri
}
@Override
+ public SteamVariant getSteamVariant() {
+ return SteamVariant.PRIMITIVE;
+ }
+
+ @Override
public String[] getStructureDescription(ItemStack stackSize) {
return getTooltip().getStructureHint();
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BronzeBlastFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BronzeBlastFurnace.java
index 3a50f69c5e..734d11e4c8 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BronzeBlastFurnace.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BronzeBlastFurnace.java
@@ -6,6 +6,7 @@ import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZEBLASTFURNACE_
import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZEPLATEDBRICKS;
import gregtech.api.GregTech_API;
+import gregtech.api.enums.SteamVariant;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
@@ -72,6 +73,11 @@ public class GT_MetaTileEntity_BronzeBlastFurnace extends GT_MetaTileEntity_Prim
}
@Override
+ public SteamVariant getSteamVariant() {
+ return SteamVariant.BRONZE;
+ }
+
+ @Override
public String[] getStructureDescription(ItemStack stackSize) {
return new String[0];
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Cleanroom.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Cleanroom.java
index 2f5ba5681e..0006c8b7d5 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Cleanroom.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Cleanroom.java
@@ -7,7 +7,6 @@ import com.gtnewhorizon.structurelib.StructureLibAPI;
import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable;
import gregtech.api.GregTech_API;
import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.ISecondaryDescribable;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMachineCallback;
@@ -22,7 +21,6 @@ import gregtech.api.util.GT_Recipe;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.block.Block;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
@@ -348,12 +346,6 @@ public class GT_MetaTileEntity_Cleanroom extends GT_MetaTileEntity_TooltipMultiB
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(), "MultiblockDisplay.png");
- }
-
- @Override
public GT_Recipe.GT_Recipe_Map getRecipeMap() {
return null;
}
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 8c146ed4f9..de477af9e4 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
@@ -6,13 +6,11 @@ import static gregtech.api.enums.GT_Values.VN;
import com.google.common.collect.ImmutableList;
import gregtech.api.GregTech_API;
import gregtech.api.enums.Materials;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.IHatchElement;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Utility;
import java.util.List;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
public abstract class GT_MetaTileEntity_ConcreteBackfillerBase extends GT_MetaTileEntity_DrillerBase {
@@ -52,12 +50,6 @@ public abstract class GT_MetaTileEntity_ConcreteBackfillerBase extends GT_MetaTi
return tt;
}
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "DrillingRig.png");
- }
-
protected abstract int getRadius();
@Override
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DieselEngine.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DieselEngine.java
index 491adf1a18..d6fd5deca4 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DieselEngine.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DieselEngine.java
@@ -21,7 +21,6 @@ import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.Materials;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -34,7 +33,6 @@ import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
import java.util.ArrayList;
import net.minecraft.block.Block;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
@@ -157,12 +155,6 @@ public class GT_MetaTileEntity_DieselEngine
return getMaxEfficiency(aStack) > 0;
}
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "LargeDieselEngine.png");
- }
-
// can't use getRecipeMap() or else the fluid hatch will reject oxygen
protected GT_Recipe.GT_Recipe_Map_Fuel getFuelMap() {
return GT_Recipe.GT_Recipe_Map.sDieselFuels;
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java
index 7600cac94c..275c1c43a5 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java
@@ -21,7 +21,6 @@ import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import gregtech.api.GregTech_API;
import gregtech.api.enums.Textures;
import gregtech.api.enums.Textures.BlockIcons;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.IHatchElement;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
@@ -34,7 +33,6 @@ import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
import java.util.ArrayList;
import java.util.List;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
@@ -204,12 +202,6 @@ public class GT_MetaTileEntity_DistillationTower
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "DistillationTower.png");
- }
-
- @Override
public GT_Recipe.GT_Recipe_Map getRecipeMap() {
return GT_Recipe.GT_Recipe_Map.sDistillationRecipes;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java
index 18fea79cb5..15f04c5fda 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java
@@ -16,7 +16,6 @@ import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.HeatingCoilLevel;
import gregtech.api.enums.Materials;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -27,7 +26,6 @@ import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
import java.util.ArrayList;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
@@ -162,12 +160,6 @@ public class GT_MetaTileEntity_ElectricBlastFurnace
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "ElectricBlastFurnace.png");
- }
-
- @Override
public int getPollutionPerSecond(ItemStack aStack) {
return GT_Mod.gregtechproxy.mPollutionEBFPerSecond;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ExtremeDieselEngine.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ExtremeDieselEngine.java
index 5c7321144f..ca711d3866 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ExtremeDieselEngine.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ExtremeDieselEngine.java
@@ -9,7 +9,6 @@ import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages;
import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.Materials;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -20,7 +19,6 @@ import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
import net.minecraft.block.Block;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
@@ -107,12 +105,6 @@ public class GT_MetaTileEntity_ExtremeDieselEngine extends GT_MetaTileEntity_Die
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "LargeExtremeDieselEngine.png");
- }
-
- @Override
public Block getCasingBlock() {
return GregTech_API.sBlockCasings4;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java
index 87271bf9a7..adfefee6c1 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java
@@ -17,12 +17,22 @@ import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructa
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
+import com.gtnewhorizons.modularui.api.math.Alignment;
+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.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget;
+import com.gtnewhorizons.modularui.common.widget.ProgressBar;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
import gregtech.GT_Mod;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Textures;
-import gregtech.api.gui.GT_Container_MultiMachine;
+import gregtech.api.gui.modularui.GT_UITextures;
+import gregtech.api.gui.modularui.GUITextureSet;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.implementations.*;
@@ -31,10 +41,8 @@ import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
-import gregtech.common.gui.GT_GUIContainer_FusionReactor;
import java.util.ArrayList;
import net.minecraft.block.Block;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
@@ -43,7 +51,7 @@ import net.minecraftforge.fluids.FluidStack;
public abstract class GT_MetaTileEntity_FusionComputer
extends GT_MetaTileEntity_EnhancedMultiBlockBase<GT_MetaTileEntity_FusionComputer>
- implements ISurvivalConstructable {
+ implements ISurvivalConstructable, IAddUIWidgets {
public static final String STRUCTURE_PIECE_MAIN = "main";
private static final ClassValue<IStructureDefinition<GT_MetaTileEntity_FusionComputer>> STRUCTURE_DEFINITION =
new ClassValue<IStructureDefinition<GT_MetaTileEntity_FusionComputer>>() {
@@ -160,21 +168,6 @@ public abstract class GT_MetaTileEntity_FusionComputer
public abstract long maxEUStore();
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_MultiMachine(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_FusionReactor(
- aPlayerInventory,
- aBaseMetaTileEntity,
- getLocalName(),
- "FusionComputer.png",
- GT_Recipe.GT_Recipe_Map.sFusionRecipes.mNEIName);
- }
-
- @Override
public abstract MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity);
@Override
@@ -559,4 +552,84 @@ public abstract class GT_MetaTileEntity_FusionComputer
if (mMachine) return -1;
return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 7, 1, 12, elementBudget, env, false, true);
}
+
+ @Override
+ public boolean doesBindPlayerInventory() {
+ return false;
+ }
+
+ @Override
+ public void addGregTechLogo(ModularWindow.Builder builder) {
+ builder.widget(new DrawableWidget()
+ .setDrawable(getGUITextureSet().getGregTechLogo())
+ .setSize(17, 17)
+ .setPos(155, 145));
+ }
+
+ @Override
+ public GUITextureSet getGUITextureSet() {
+ return new GUITextureSet().setMainBackground(GT_UITextures.BACKGROUND_FUSION_COMPUTER);
+ }
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ builder.widget(new TextWidget(GT_Utility.trans("138", "Incomplete Structure."))
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setEnabled(widget -> !mMachine)
+ .setPos(10, 8))
+ .widget(new FakeSyncWidget.BooleanSyncer(() -> mMachine, val -> mMachine = val))
+ .widget(new TextWidget("Hit with Soft Mallet to (re-)start the Machine if it doesn't start.")
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setTextAlignment(Alignment.Center)
+ .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0
+ && !getBaseMetaTileEntity().isActive())
+ .setPos(-getGUIWidth() / 2, 170)
+ .setSize(getGUIWidth() * 2, 9))
+ .widget(new FakeSyncWidget.IntegerSyncer(
+ () -> getBaseMetaTileEntity().getErrorDisplayID(),
+ val -> getBaseMetaTileEntity().setErrorDisplayID(val)))
+ .widget(new FakeSyncWidget.BooleanSyncer(
+ () -> getBaseMetaTileEntity().isActive(),
+ val -> getBaseMetaTileEntity().setActive(val)))
+ .widget(new TextWidget("Running perfectly.")
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setTextAlignment(Alignment.Center)
+ .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0
+ && getBaseMetaTileEntity().isActive())
+ .setPos(0, 170)
+ .setSize(getGUIWidth(), 9))
+ .widget(new FakeSyncWidget.IntegerSyncer(
+ () -> getBaseMetaTileEntity().getErrorDisplayID(),
+ val -> getBaseMetaTileEntity().setErrorDisplayID(val)))
+ .widget(new ProgressBar()
+ .setProgress(() -> (float) getBaseMetaTileEntity().getStoredEU()
+ / getBaseMetaTileEntity().getEUCapacity())
+ .setDirection(ProgressBar.Direction.RIGHT)
+ .setTexture(GT_UITextures.PROGRESSBAR_STORED_EU, 147)
+ .setPos(5, 156)
+ .setSize(147, 5))
+ .widget(TextWidget.dynamicString(() -> {
+ long energy = getBaseMetaTileEntity().getStoredEU();
+ if (energy > 160_000_000L && energy < 160_010_000L) {
+ energy = 160_000_000L;
+ }
+ if (energy > 320_000_000L && energy < 320_010_000L) {
+ energy = 320_000_000L;
+ }
+ if (energy > 640_000_000L && energy < 640_010_000L) {
+ energy = 640_000_000L;
+ }
+ if (energy > 5_120_000_000L && energy < 5_120_080_000L) {
+ energy = 5_120_000_000L;
+ }
+ return GT_Utility.formatNumbers(energy) + " EU";
+ })
+ .setDefaultColor(COLOR_TEXT_RED.get())
+ .setPos(50, 155))
+ .widget(new ButtonWidget()
+ .setNEITransferRect(GT_Recipe.GT_Recipe_Map.sFusionRecipes.mNEIName)
+ .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_NEI)
+ .setPos(154, 4)
+ .setSize(18, 18));
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java
index 291641f9c6..6c35a3e9c2 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java
@@ -14,7 +14,6 @@ import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import gregtech.api.GregTech_API;
import gregtech.api.enums.GT_Values;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -27,7 +26,6 @@ import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
@@ -169,12 +167,6 @@ public class GT_MetaTileEntity_HeatExchanger
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "LargeHeatExchanger.png");
- }
-
- @Override
public boolean isCorrectMachinePart(ItemStack aStack) {
return true;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java
index 6f55e3c9a3..1b2c690a57 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java
@@ -10,7 +10,6 @@ import gregtech.api.GregTech_API;
import gregtech.api.enums.SoundResource;
import gregtech.api.enums.Textures;
import gregtech.api.enums.Textures.BlockIcons;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -20,7 +19,6 @@ import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
import java.util.ArrayList;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
public class GT_MetaTileEntity_ImplosionCompressor
@@ -104,12 +102,6 @@ public class GT_MetaTileEntity_ImplosionCompressor
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "ImplosionCompressor.png");
- }
-
- @Override
public GT_Recipe.GT_Recipe_Map getRecipeMap() {
return GT_Recipe.GT_Recipe_Map.sImplosionRecipes;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler.java
index 784e81f1ba..b0c9e55a81 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler.java
@@ -23,7 +23,6 @@ import gregtech.api.enums.Materials;
import gregtech.api.enums.OrePrefixes;
import gregtech.api.enums.Textures;
import gregtech.api.enums.Textures.BlockIcons;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase;
@@ -36,7 +35,6 @@ import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
import java.util.ArrayList;
import net.minecraft.block.Block;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fluids.FluidRegistry;
@@ -211,12 +209,6 @@ public abstract class GT_MetaTileEntity_LargeBoiler
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "LargeBoiler.png");
- }
-
- @Override
public boolean isCorrectMachinePart(ItemStack aStack) {
return true;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java
index 539b114868..ce1031e284 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java
@@ -13,7 +13,6 @@ import com.gtnewhorizon.structurelib.structure.*;
import com.gtnewhorizon.structurelib.util.ItemStackPredicate;
import gregtech.api.GregTech_API;
import gregtech.api.enums.HeatingCoilLevel;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.IHeatingCoil;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
@@ -30,7 +29,6 @@ import java.util.stream.Collectors;
import java.util.stream.IntStream;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayerMP;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IChatComponent;
import net.minecraft.world.World;
@@ -150,12 +148,6 @@ public class GT_MetaTileEntity_LargeChemicalReactor
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "LargeChemicalReactor.png");
- }
-
- @Override
public boolean isCorrectMachinePart(ItemStack aStack) {
return true;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine.java
index 9838076440..978456c435 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine.java
@@ -11,7 +11,6 @@ import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.IStructureElementCheckOnly;
import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.items.GT_MetaGenerated_Tool;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase;
@@ -21,7 +20,6 @@ import gregtech.api.util.GT_Utility;
import gregtech.common.items.GT_MetaGenerated_Tool_01;
import java.util.ArrayList;
import net.minecraft.block.Block;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@@ -96,12 +94,6 @@ public abstract class GT_MetaTileEntity_LargeTurbine
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "LargeTurbine.png");
- }
-
- @Override
public IStructureDefinition<GT_MetaTileEntity_LargeTurbine> getStructureDefinition() {
return STRUCTURE_DEFINITION.get(getClass());
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiFurnace.java
index e44308b5ae..466e741fed 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiFurnace.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiFurnace.java
@@ -18,7 +18,6 @@ import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.HeatingCoilLevel;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -34,7 +33,6 @@ import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_StructureUtility;
import gregtech.api.util.GT_Utility;
import java.util.ArrayList;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
@@ -145,12 +143,6 @@ public class GT_MetaTileEntity_MultiFurnace
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "MultiFurnace.png");
- }
-
- @Override
public GT_Recipe.GT_Recipe_Map getRecipeMap() {
return GT_Recipe.GT_Recipe_Map.sFurnaceRecipes;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilCracker.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilCracker.java
index f338da2f88..30ee782cf7 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilCracker.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilCracker.java
@@ -18,7 +18,6 @@ import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import gregtech.api.GregTech_API;
import gregtech.api.enums.HeatingCoilLevel;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -32,7 +31,6 @@ import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
import java.util.ArrayList;
import java.util.List;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
@@ -173,12 +171,6 @@ public class GT_MetaTileEntity_OilCracker extends GT_MetaTileEntity_EnhancedMult
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "OilCrackingUnit.png");
- }
-
- @Override
public GT_Recipe.GT_Recipe_Map getRecipeMap() {
return GT_Recipe.GT_Recipe_Map.sCrackingRecipes;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java
index 04a7e1d770..72741573fd 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java
@@ -11,7 +11,6 @@ import static gregtech.common.GT_UndergroundOil.undergroundOil;
import static gregtech.common.GT_UndergroundOil.undergroundOilReadInformation;
import com.google.common.collect.ImmutableList;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.IHatchElement;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -24,7 +23,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@@ -129,12 +127,6 @@ public abstract class GT_MetaTileEntity_OilDrillBase extends GT_MetaTileEntity_D
return tt;
}
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "DrillingRig.png");
- }
-
protected abstract int getRangeInChunks();
@Override
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java
index 064dd05f60..80b3660eb3 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java
@@ -9,9 +9,7 @@ import com.google.common.collect.ImmutableList;
import gregtech.api.enums.ItemList;
import gregtech.api.enums.Materials;
import gregtech.api.enums.OrePrefixes;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.IHatchElement;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.objects.GT_ChunkManager;
import gregtech.api.objects.ItemData;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
@@ -27,7 +25,6 @@ import java.util.HashSet;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@@ -70,12 +67,6 @@ public abstract class GT_MetaTileEntity_OreDrillingPlantBase extends GT_MetaTile
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "OreDrillingPlant.png");
- }
-
- @Override
public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
super.onScrewdriverRightClick(aSide, aPlayer, aX, aY, aZ);
if (aPlayer.isSneaking()) {
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PlasmaForge.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PlasmaForge.java
index ae7f35d942..ad60853d50 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PlasmaForge.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PlasmaForge.java
@@ -15,7 +15,6 @@ import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import gregtech.api.GregTech_API;
import gregtech.api.enums.HeatingCoilLevel;
import gregtech.api.enums.Materials;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -29,7 +28,6 @@ import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
import java.util.ArrayList;
import java.util.List;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@@ -1066,12 +1064,6 @@ public class GT_MetaTileEntity_PlasmaForge extends GT_MetaTileEntity_AbstractMul
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "PlasmaForge.png");
- }
-
- @Override
public int getPollutionPerSecond(ItemStack aStack) {
return 0;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PrimitiveBlastFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PrimitiveBlastFurnace.java
index bd1638780a..40754c14c5 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PrimitiveBlastFurnace.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PrimitiveBlastFurnace.java
@@ -11,11 +11,21 @@ import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructa
import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.common.widget.ProgressBar;
+import com.gtnewhorizons.modularui.common.widget.SlotWidget;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.ParticleFX;
+import gregtech.api.enums.SteamVariant;
+import gregtech.api.gui.modularui.GT_UIInfos;
+import gregtech.api.gui.modularui.GT_UITextures;
+import gregtech.api.gui.modularui.GUITextureSet;
+import gregtech.api.interfaces.modularui.IAddUIWidgets;
+import gregtech.api.interfaces.modularui.IGetTitleColor;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.objects.GT_ItemStack;
@@ -24,18 +34,15 @@ import gregtech.api.util.GT_Utility;
import gregtech.api.util.WorldSpawnedEventBuilder;
import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder;
import gregtech.common.GT_Pollution;
-import gregtech.common.gui.GT_Container_PrimitiveBlastFurnace;
-import gregtech.common.gui.GT_GUIContainer_PrimitiveBlastFurnace;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.util.ForgeDirection;
public abstract class GT_MetaTileEntity_PrimitiveBlastFurnace extends MetaTileEntity
- implements IAlignment, ISurvivalConstructable {
+ implements IAlignment, ISurvivalConstructable, IAddUIWidgets, IGetTitleColor {
public static final int INPUT_SLOTS = 3, OUTPUT_SLOTS = 3;
private static final ClassValue<IStructureDefinition<GT_MetaTileEntity_PrimitiveBlastFurnace>>
STRUCTURE_DEFINITION = new ClassValue<IStructureDefinition<GT_MetaTileEntity_PrimitiveBlastFurnace>>() {
@@ -184,28 +191,11 @@ public abstract class GT_MetaTileEntity_PrimitiveBlastFurnace extends MetaTileEn
@Override
public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
- if (aBaseMetaTileEntity.isClientSide()) {
- return true;
- }
- aBaseMetaTileEntity.openGUI(aPlayer);
+ GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer);
return true;
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_PrimitiveBlastFurnace(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_PrimitiveBlastFurnace(
- aPlayerInventory,
- aBaseMetaTileEntity,
- getName(),
- GT_Recipe.GT_Recipe_Map.sPrimitiveBlastRecipes.mNEIName);
- }
-
- @Override
public ExtendedFacing getExtendedFacing() {
return ExtendedFacing.of(
ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()));
@@ -380,6 +370,10 @@ public abstract class GT_MetaTileEntity_PrimitiveBlastFurnace extends MetaTileEn
return GT_MetaTileEntity_Cleanroom.class;
}
+ protected GT_Recipe.GT_Recipe_Map getRecipeMap() {
+ return GT_Recipe.GT_Recipe_Map.sPrimitiveBlastRecipes;
+ }
+
private void addOutputProducts() {
if (this.mOutputItems == null) {
return;
@@ -413,8 +407,7 @@ public abstract class GT_MetaTileEntity_PrimitiveBlastFurnace extends MetaTileEn
}
ItemStack[] inputs = new ItemStack[INPUT_SLOTS];
System.arraycopy(mInventory, 0, inputs, 0, INPUT_SLOTS);
- GT_Recipe recipe = GT_Recipe.GT_Recipe_Map.sPrimitiveBlastRecipes.findRecipe(
- getBaseMetaTileEntity(), false, 0, null, inputs);
+ GT_Recipe recipe = getRecipeMap().findRecipe(getBaseMetaTileEntity(), false, 0, null, inputs);
if (recipe == null) {
this.mOutputItems = null;
return false;
@@ -508,4 +501,62 @@ public abstract class GT_MetaTileEntity_PrimitiveBlastFurnace extends MetaTileEn
0,
hintsOnly);
}
+
+ @Override
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ builder.widget(new SlotWidget(inventoryHandler, 0)
+ .setBackground(
+ getGUITextureSet().getItemSlot(),
+ GT_UITextures.OVERLAY_SLOT_INGOT_STEAM.get(getSteamVariant()))
+ .setPos(33, 15))
+ .widget(new SlotWidget(inventoryHandler, 1)
+ .setBackground(
+ getGUITextureSet().getItemSlot(),
+ GT_UITextures.OVERLAY_SLOT_DUST_STEAM.get(getSteamVariant()))
+ .setPos(33, 33))
+ .widget(new SlotWidget(inventoryHandler, 2)
+ .setBackground(
+ getGUITextureSet().getItemSlot(),
+ GT_UITextures.OVERLAY_SLOT_FURNACE_STEAM.get(getSteamVariant()))
+ .setPos(33, 51))
+ .widget(new SlotWidget(inventoryHandler, 3)
+ .setAccess(true, false)
+ .setBackground(
+ getGUITextureSet().getItemSlot(),
+ GT_UITextures.OVERLAY_SLOT_INGOT_STEAM.get(getSteamVariant()))
+ .setPos(85, 24))
+ .widget(new SlotWidget(inventoryHandler, 4)
+ .setAccess(true, false)
+ .setBackground(
+ getGUITextureSet().getItemSlot(),
+ GT_UITextures.OVERLAY_SLOT_DUST_STEAM.get(getSteamVariant()))
+ .setPos(103, 24))
+ .widget(new SlotWidget(inventoryHandler, 5)
+ .setAccess(true, false)
+ .setBackground(
+ getGUITextureSet().getItemSlot(),
+ GT_UITextures.OVERLAY_SLOT_DUST_STEAM.get(getSteamVariant()))
+ .setPos(121, 24))
+ .widget(new ProgressBar()
+ .setTexture(GT_UITextures.PROGRESSBAR_ARROW_2_STEAM.get(getSteamVariant()), 20)
+ .setProgress(() -> (float) mProgresstime / mMaxProgresstime)
+ .setNEITransferRect(getRecipeMap().mNEIName)
+ .setPos(58, 24)
+ .setSize(20, 18));
+ }
+
+ @Override
+ public GUITextureSet getGUITextureSet() {
+ return GUITextureSet.STEAM.apply(getSteamVariant());
+ }
+
+ @Override
+ public int getTitleColor() {
+ return getSteamVariant() == SteamVariant.BRONZE ? COLOR_TITLE.get() : COLOR_TITLE_WHITE.get();
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java
index 7ab1f4e813..62d5fefc0d 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java
@@ -19,7 +19,6 @@ import gregtech.api.GregTech_API;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Textures;
import gregtech.api.enums.Textures.BlockIcons;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.IHatchElement;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
@@ -40,7 +39,6 @@ import java.util.List;
import java.util.Objects;
import java.util.stream.Stream;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
@@ -143,12 +141,6 @@ public class GT_MetaTileEntity_ProcessingArray
return new ITexture[] {Textures.BlockIcons.casingTexturePages[0][48]};
}
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "ProcessingArray.png");
- }
-
// TODO: Expand so it also does the non recipe map recipes
/*
public void remoteRecipeCheck() {
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java
index 8871e575ef..5212dc9195 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java
@@ -24,7 +24,6 @@ import gregtech.api.GregTech_API;
import gregtech.api.enums.HeatingCoilLevel;
import gregtech.api.enums.Textures;
import gregtech.api.enums.Textures.BlockIcons;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -34,7 +33,6 @@ import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Single_Recipe_Check;
import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
@@ -163,12 +161,6 @@ public class GT_MetaTileEntity_PyrolyseOven
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "PyrolyseOven.png");
- }
-
- @Override
public boolean supportsSingleRecipeLocking() {
return true;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java
index 5bbed8951c..f942123109 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java
@@ -9,7 +9,6 @@ import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages;
import com.gtnewhorizon.structurelib.structure.IStructureElement;
import com.gtnewhorizon.structurelib.structure.StructureUtility;
import gregtech.api.GregTech_API;
-import gregtech.api.gui.GT_GUIContainer_MultiMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -18,7 +17,6 @@ import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
@@ -101,12 +99,6 @@ public class GT_MetaTileEntity_VacuumFreezer
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "VacuumFreezer.png");
- }
-
- @Override
public GT_Recipe.GT_Recipe_Map getRecipeMap() {
return GT_Recipe.GT_Recipe_Map.sVacuumRecipes;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Bronze.java
index 129af9dc27..3aefd2d16f 100644
--- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Bronze.java
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Bronze.java
@@ -3,7 +3,6 @@ package gregtech.common.tileentities.machines.steam;
import static gregtech.api.enums.Textures.BlockIcons.*;
import gregtech.api.enums.SoundResource;
-import gregtech.api.gui.GT_GUIContainer_BasicMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
@@ -11,7 +10,6 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachin
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.InventoryPlayer;
public class GT_MetaTileEntity_AlloySmelter_Bronze extends GT_MetaTileEntity_BasicMachine_Bronze {
public GT_MetaTileEntity_AlloySmelter_Bronze(int aID, String aName, String aNameRegional) {
@@ -37,16 +35,6 @@ public class GT_MetaTileEntity_AlloySmelter_Bronze extends GT_MetaTileEntity_Bas
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_BasicMachine(
- aPlayerInventory,
- aBaseMetaTileEntity,
- getLocalName(),
- "BronzeAlloySmelter.png",
- GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes.mUnlocalizedName);
- }
-
- @Override
public GT_Recipe.GT_Recipe_Map getRecipeList() {
return GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Steel.java
index 2ad1a2ff01..9926c8a5e7 100644
--- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Steel.java
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Steel.java
@@ -3,7 +3,6 @@ package gregtech.common.tileentities.machines.steam;
import static gregtech.api.enums.Textures.BlockIcons.*;
import gregtech.api.enums.SoundResource;
-import gregtech.api.gui.GT_GUIContainer_BasicMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
@@ -11,7 +10,6 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachin
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.InventoryPlayer;
public class GT_MetaTileEntity_AlloySmelter_Steel extends GT_MetaTileEntity_BasicMachine_Steel {
public GT_MetaTileEntity_AlloySmelter_Steel(int aID, String aName, String aNameRegional) {
@@ -37,16 +35,6 @@ public class GT_MetaTileEntity_AlloySmelter_Steel extends GT_MetaTileEntity_Basi
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_BasicMachine(
- aPlayerInventory,
- aBaseMetaTileEntity,
- getLocalName(),
- "SteelAlloySmelter.png",
- GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes.mUnlocalizedName);
- }
-
- @Override
public GT_Recipe.GT_Recipe_Map getRecipeList() {
return GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Bronze.java
index 9fe3586790..5706345c3b 100644
--- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Bronze.java
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Bronze.java
@@ -3,7 +3,6 @@ package gregtech.common.tileentities.machines.steam;
import static gregtech.api.enums.Textures.BlockIcons.*;
import gregtech.api.enums.SoundResource;
-import gregtech.api.gui.GT_GUIContainer_BasicMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
@@ -11,7 +10,6 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachin
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.InventoryPlayer;
public class GT_MetaTileEntity_Compressor_Bronze extends GT_MetaTileEntity_BasicMachine_Bronze {
public GT_MetaTileEntity_Compressor_Bronze(int aID, String aName, String aNameRegional) {
@@ -27,16 +25,6 @@ public class GT_MetaTileEntity_Compressor_Bronze extends GT_MetaTileEntity_Basic
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_BasicMachine(
- aPlayerInventory,
- aBaseMetaTileEntity,
- getLocalName(),
- "BronzeCompressor.png",
- GT_Recipe.GT_Recipe_Map.sCompressorRecipes.mUnlocalizedName);
- }
-
- @Override
public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_Compressor_Bronze(this.mName, this.mDescriptionArray, this.mTextures);
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Steel.java
index e3781e91a8..693f5abdbc 100644
--- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Steel.java
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Steel.java
@@ -3,7 +3,6 @@ package gregtech.common.tileentities.machines.steam;
import static gregtech.api.enums.Textures.BlockIcons.*;
import gregtech.api.enums.SoundResource;
-import gregtech.api.gui.GT_GUIContainer_BasicMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
@@ -11,7 +10,6 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachin
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.InventoryPlayer;
public class GT_MetaTileEntity_Compressor_Steel extends GT_MetaTileEntity_BasicMachine_Steel {
public GT_MetaTileEntity_Compressor_Steel(int aID, String aName, String aNameRegional) {
@@ -27,16 +25,6 @@ public class GT_MetaTileEntity_Compressor_Steel extends GT_MetaTileEntity_BasicM
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_BasicMachine(
- aPlayerInventory,
- aBaseMetaTileEntity,
- getLocalName(),
- "SteelCompressor.png",
- GT_Recipe.GT_Recipe_Map.sCompressorRecipes.mUnlocalizedName);
- }
-
- @Override
public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_Compressor_Steel(this.mName, this.mDescriptionArray, this.mTextures);
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Bronze.java
index 17fda5fc8d..7fa8358974 100644
--- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Bronze.java
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Bronze.java
@@ -3,7 +3,6 @@ package gregtech.common.tileentities.machines.steam;
import static gregtech.api.enums.Textures.BlockIcons.*;
import gregtech.api.enums.SoundResource;
-import gregtech.api.gui.GT_GUIContainer_BasicMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
@@ -11,7 +10,6 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachin
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.InventoryPlayer;
public class GT_MetaTileEntity_Extractor_Bronze extends GT_MetaTileEntity_BasicMachine_Bronze {
public GT_MetaTileEntity_Extractor_Bronze(int aID, String aName, String aNameRegional) {
@@ -27,16 +25,6 @@ public class GT_MetaTileEntity_Extractor_Bronze extends GT_MetaTileEntity_BasicM
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_BasicMachine(
- aPlayerInventory,
- aBaseMetaTileEntity,
- getLocalName(),
- "BronzeExtractor.png",
- GT_Recipe.GT_Recipe_Map.sExtractorRecipes.mUnlocalizedName);
- }
-
- @Override
public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_Extractor_Bronze(this.mName, this.mDescriptionArray, this.mTextures);
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Steel.java
index c7ebeee12b..c18a7e8a51 100644
--- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Steel.java
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Steel.java
@@ -3,7 +3,6 @@ package gregtech.common.tileentities.machines.steam;
import static gregtech.api.enums.Textures.BlockIcons.*;
import gregtech.api.enums.SoundResource;
-import gregtech.api.gui.GT_GUIContainer_BasicMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
@@ -11,7 +10,6 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachin
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.InventoryPlayer;
public class GT_MetaTileEntity_Extractor_Steel extends GT_MetaTileEntity_BasicMachine_Steel {
public GT_MetaTileEntity_Extractor_Steel(int aID, String aName, String aNameRegional) {
@@ -27,16 +25,6 @@ public class GT_MetaTileEntity_Extractor_Steel extends GT_MetaTileEntity_BasicMa
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_BasicMachine(
- aPlayerInventory,
- aBaseMetaTileEntity,
- getLocalName(),
- "SteelExtractor.png",
- GT_Recipe.GT_Recipe_Map.sExtractorRecipes.mUnlocalizedName);
- }
-
- @Override
public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_Extractor_Steel(this.mName, this.mDescriptionArray, this.mTextures);
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Bronze.java
index a22d1cb3e3..9709207ab3 100644
--- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Bronze.java
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Bronze.java
@@ -7,7 +7,6 @@ import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.enums.ParticleFX;
import gregtech.api.enums.SoundResource;
-import gregtech.api.gui.GT_GUIContainer_BasicMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
@@ -17,7 +16,6 @@ import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder;
import net.minecraft.block.Block;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraftforge.common.util.ForgeDirection;
public class GT_MetaTileEntity_ForgeHammer_Bronze extends GT_MetaTileEntity_BasicMachine_Bronze {
@@ -39,18 +37,6 @@ public class GT_MetaTileEntity_ForgeHammer_Bronze extends GT_MetaTileEntity_Basi
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_BasicMachine(
- aPlayerInventory,
- aBaseMetaTileEntity,
- getLocalName(),
- "BronzeHammer.png",
- GT_Recipe.GT_Recipe_Map.sHammerRecipes.mUnlocalizedName,
- (byte) 6,
- (byte) 3);
- }
-
- @Override
public GT_Recipe.GT_Recipe_Map getRecipeList() {
return GT_Recipe.GT_Recipe_Map.sHammerRecipes;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Steel.java
index dd233aa6f2..d34cf2efb9 100644
--- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Steel.java
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Steel.java
@@ -7,7 +7,6 @@ import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.enums.ParticleFX;
import gregtech.api.enums.SoundResource;
-import gregtech.api.gui.GT_GUIContainer_BasicMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
@@ -17,7 +16,6 @@ import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder;
import net.minecraft.block.Block;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraftforge.common.util.ForgeDirection;
public class GT_MetaTileEntity_ForgeHammer_Steel extends GT_MetaTileEntity_BasicMachine_Steel {
@@ -39,18 +37,6 @@ public class GT_MetaTileEntity_ForgeHammer_Steel extends GT_MetaTileEntity_Basic
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_BasicMachine(
- aPlayerInventory,
- aBaseMetaTileEntity,
- getLocalName(),
- "SteelHammer.png",
- GT_Recipe.GT_Recipe_Map.sHammerRecipes.mUnlocalizedName,
- (byte) 6,
- (byte) 3);
- }
-
- @Override
public GT_Recipe.GT_Recipe_Map getRecipeList() {
return GT_Recipe.GT_Recipe_Map.sHammerRecipes;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Bronze.java
index cd99dda2e2..15d971a0fb 100644
--- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Bronze.java
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Bronze.java
@@ -3,15 +3,14 @@ package gregtech.common.tileentities.machines.steam;
import static gregtech.api.enums.Textures.BlockIcons.*;
import gregtech.api.enums.SoundResource;
-import gregtech.api.gui.GT_GUIContainer_BasicMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Bronze;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
public class GT_MetaTileEntity_Furnace_Bronze extends GT_MetaTileEntity_BasicMachine_Bronze {
@@ -33,14 +32,13 @@ public class GT_MetaTileEntity_Furnace_Bronze extends GT_MetaTileEntity_BasicMac
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_BasicMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "BronzeFurnace.png", "smelting");
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Furnace_Bronze(this.mName, this.mDescriptionArray, this.mTextures);
}
@Override
- public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
- return new GT_MetaTileEntity_Furnace_Bronze(this.mName, this.mDescriptionArray, this.mTextures);
+ public GT_Recipe.GT_Recipe_Map getRecipeList() {
+ return GT_Recipe.GT_Recipe_Map.sFurnaceRecipes;
}
@Override
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Steel.java
index 3bc35d8c47..85142dbd98 100644
--- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Steel.java
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Steel.java
@@ -3,15 +3,14 @@ package gregtech.common.tileentities.machines.steam;
import static gregtech.api.enums.Textures.BlockIcons.*;
import gregtech.api.enums.SoundResource;
-import gregtech.api.gui.GT_GUIContainer_BasicMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Steel;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
public class GT_MetaTileEntity_Furnace_Steel extends GT_MetaTileEntity_BasicMachine_Steel {
@@ -33,14 +32,13 @@ public class GT_MetaTileEntity_Furnace_Steel extends GT_MetaTileEntity_BasicMach
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_BasicMachine(
- aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "SteelFurnace.png", "smelting");
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_Furnace_Steel(this.mName, this.mDescriptionArray, this.mTextures);
}
@Override
- public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
- return new GT_MetaTileEntity_Furnace_Steel(this.mName, this.mDescriptionArray, this.mTextures);
+ public GT_Recipe.GT_Recipe_Map getRecipeList() {
+ return GT_Recipe.GT_Recipe_Map.sFurnaceRecipes;
}
@Override
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Bronze.java
index f6f5bf8477..e06a179fa7 100644
--- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Bronze.java
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Bronze.java
@@ -6,7 +6,6 @@ import static gregtech.api.objects.XSTR.XSTR_INSTANCE;
import gregtech.api.enums.ParticleFX;
import gregtech.api.enums.SoundResource;
-import gregtech.api.gui.GT_GUIContainer_BasicMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
@@ -16,7 +15,6 @@ import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
@@ -35,16 +33,6 @@ public class GT_MetaTileEntity_Macerator_Bronze extends GT_MetaTileEntity_BasicM
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_BasicMachine(
- aPlayerInventory,
- aBaseMetaTileEntity,
- getLocalName(),
- "BronzeMacerator.png",
- GT_Recipe_Map.sMaceratorRecipes.mUnlocalizedName);
- }
-
- @Override
public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_Macerator_Bronze(this.mName, this.mDescriptionArray, this.mTextures);
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Steel.java
index 14acdb9b45..13270b9a83 100644
--- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Steel.java
+++ b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Steel.java
@@ -6,7 +6,6 @@ import static gregtech.api.objects.XSTR.XSTR_INSTANCE;
import gregtech.api.enums.ParticleFX;
import gregtech.api.enums.SoundResource;
-import gregtech.api.gui.GT_GUIContainer_BasicMachine;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
@@ -16,7 +15,6 @@ import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.WorldSpawnedEventBuilder;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
@@ -35,16 +33,6 @@ public class GT_MetaTileEntity_Macerator_Steel extends GT_MetaTileEntity_BasicMa
}
@Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_BasicMachine(
- aPlayerInventory,
- aBaseMetaTileEntity,
- getLocalName(),
- "SteelMacerator.png",
- GT_Recipe_Map.sMaceratorRecipes.mUnlocalizedName);
- }
-
- @Override
public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_Macerator_Steel(this.mName, this.mDescriptionArray, this.mTextures);
}
diff --git a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java
index 28ff39315e..747116400a 100644
--- a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java
+++ b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java
@@ -4,17 +4,23 @@ import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SCHEST;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SCHEST_GLOW;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.SlotWidget;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
import cpw.mods.fml.common.Optional;
import gregtech.api.GregTech_API;
import gregtech.api.enums.GT_Values;
+import gregtech.api.gui.modularui.GT_UIInfos;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock;
import gregtech.api.objects.AE2DigitalChestHandler;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Utility;
-import gregtech.common.gui.GT_Container_QuantumChest;
-import gregtech.common.gui.GT_GUIContainer_QuantumChest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -22,7 +28,6 @@ import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@@ -33,7 +38,7 @@ import net.minecraftforge.common.util.Constants;
@Optional.Interface(iface = "appeng.api.storage.IMEMonitor", modid = "appliedenergistics2", striprefs = true)
public abstract class GT_MetaTileEntity_DigitalChestBase extends GT_MetaTileEntity_TieredMachineBlock
- implements appeng.api.storage.IMEMonitor<appeng.api.storage.data.IAEItemStack> {
+ implements appeng.api.storage.IMEMonitor<appeng.api.storage.data.IAEItemStack>, IAddUIWidgets {
protected boolean mVoidOverflow = false;
protected boolean mDisableFilter;
public boolean voidBreak;
@@ -194,16 +199,6 @@ public abstract class GT_MetaTileEntity_DigitalChestBase extends GT_MetaTileEnti
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_QuantumChest(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_QuantumChest(aPlayerInventory, aBaseMetaTileEntity, getLocalName());
- }
-
- @Override
public ITexture[][][] getTextureSet(ITexture[] aTextures) {
return new ITexture[0][0][0];
}
@@ -360,7 +355,7 @@ public abstract class GT_MetaTileEntity_DigitalChestBase extends GT_MetaTileEnti
@Override
public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
- if (!aBaseMetaTileEntity.isClientSide()) aBaseMetaTileEntity.openGUI(aPlayer);
+ GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer);
return true;
}
@@ -543,4 +538,37 @@ public abstract class GT_MetaTileEntity_DigitalChestBase extends GT_MetaTileEnti
tag.setInteger("itemCount", realItemCount);
tag.setTag("itemType", is.writeToNBT(new NBTTagCompound()));
}
+
+ @Override
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ builder.widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK)
+ .setPos(7, 16)
+ .setSize(71, 45))
+ .widget(new SlotWidget(inventoryHandler, 0)
+ .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_IN)
+ .setPos(79, 16))
+ .widget(new SlotWidget(inventoryHandler, 1)
+ .setAccess(true, false)
+ .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_OUT)
+ .setPos(79, 52))
+ .widget(SlotWidget.phantom(inventoryHandler, 2)
+ .disableInteraction()
+ .setBackground(GT_UITextures.TRANSPARENT)
+ .setPos(59, 42))
+ .widget(new TextWidget("Item Amount")
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setPos(10, 20))
+ .widget(TextWidget.dynamicString(() -> GT_Utility.parseNumberToString(
+ this instanceof GT_MetaTileEntity_QuantumChest
+ ? ((GT_MetaTileEntity_QuantumChest) this).mItemCount
+ : 0))
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setPos(10, 30));
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java
index 2a996e050a..a4d1f1113f 100644
--- a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java
+++ b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java
@@ -1,21 +1,31 @@
package gregtech.common.tileentities.storage;
import static gregtech.api.enums.Textures.BlockIcons.*;
-
-import gregtech.api.gui.GT_Container_DigitalTank;
-import gregtech.api.gui.GT_GUIContainer_DigitalTank;
+import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY;
+
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils;
+import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget;
+import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.SlotWidget;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import gregtech.api.gui.modularui.GT_UIInfos;
+import gregtech.api.gui.modularui.GT_UITextures;
+import gregtech.api.interfaces.IFluidAccess;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IFluidLockable;
+import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Utility;
+import gregtech.common.gui.modularui.widget.FluidDisplaySlotWidget;
import java.util.List;
import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
-import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@@ -28,7 +38,8 @@ import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler;
-public abstract class GT_MetaTileEntity_DigitalTankBase extends GT_MetaTileEntity_BasicTank implements IFluidLockable {
+public abstract class GT_MetaTileEntity_DigitalTankBase extends GT_MetaTileEntity_BasicTank
+ implements IFluidLockable, IAddUIWidgets {
public boolean mOutputFluid = false, mVoidFluidPart = false, mVoidFluidFull = false, mLockFluid = false;
protected String lockedFluidName = null;
private boolean voidBreak;
@@ -235,7 +246,7 @@ public abstract class GT_MetaTileEntity_DigitalTankBase extends GT_MetaTileEntit
@Override
public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
- if (!aBaseMetaTileEntity.isClientSide()) aBaseMetaTileEntity.openGUI(aPlayer);
+ GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer);
return true;
}
@@ -273,16 +284,6 @@ public abstract class GT_MetaTileEntity_DigitalTankBase extends GT_MetaTileEntit
}
@Override
- public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_Container_DigitalTank(aPlayerInventory, aBaseMetaTileEntity);
- }
-
- @Override
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_DigitalTank(aPlayerInventory, aBaseMetaTileEntity, getLocalName());
- }
-
- @Override
public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
if (aBaseMetaTileEntity.isServerSide()) {
if (isFluidChangingAllowed() && getFillableStack() != null && getFillableStack().amount <= 0)
@@ -476,4 +477,174 @@ public abstract class GT_MetaTileEntity_DigitalTankBase extends GT_MetaTileEntit
if (fluid != null) tag.setTag("mFluid", fluid.writeToNBT(new NBTTagCompound()));
else if (tag.hasKey("mFluid")) tag.removeTag("mFluid");
}
+
+ @Override
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ builder.widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK)
+ .setPos(7, 16)
+ .setSize(71, 45))
+ .widget(new SlotWidget(inventoryHandler, getInputSlot())
+ .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_IN)
+ .setPos(79, 16))
+ .widget(new SlotWidget(inventoryHandler, getOutputSlot())
+ .setAccess(true, false)
+ .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_OUT)
+ .setPos(79, 43))
+ .widget(new FluidDisplaySlotWidget(inventoryHandler, getStackDisplaySlot())
+ .setFluidAccessConstructor(() -> constructFluidAccess(false))
+ .setIHasFluidDisplay(this)
+ .setCanDrain(true)
+ .setCanFill(!isDrainableStackSeparate())
+ .setActionRealClick(FluidDisplaySlotWidget.Action.TRANSFER)
+ .setActionDragAndDrop(FluidDisplaySlotWidget.Action.LOCK)
+ .setBeforeRealClick((clickData, widget) -> {
+ if (NetworkUtils.isClient()) {
+ // propagate display item content to actual fluid stored in this tank
+ setDrainableStack(GT_Utility.getFluidFromDisplayStack(
+ widget.getMcSlot().getStack()));
+ }
+ return true;
+ })
+ .setBackground(GT_UITextures.TRANSPARENT)
+ .setPos(58, 41))
+ .widget(new TextWidget("Liquid Amount")
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setPos(10, 20))
+ .widget(TextWidget.dynamicString(
+ () -> GT_Utility.parseNumberToString(mFluid != null ? mFluid.amount : 0))
+ .setDefaultColor(COLOR_TEXT_WHITE.get())
+ .setPos(10, 30))
+ .widget(new CycleButtonWidget()
+ .setToggle(() -> mOutputFluid, val -> {
+ mOutputFluid = val;
+ if (!mOutputFluid) {
+ GT_Utility.sendChatToPlayer(
+ buildContext.getPlayer(),
+ GT_Utility.trans("262", "Fluid Auto Output Disabled"));
+ } else {
+ GT_Utility.sendChatToPlayer(
+ buildContext.getPlayer(), GT_Utility.trans("263", "Fluid Auto Output Enabled"));
+ }
+ })
+ .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE)
+ .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_AUTOOUTPUT_FLUID)
+ .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.autooutput.tooltip"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setPos(7, 63)
+ .setSize(18, 18))
+ .widget(new CycleButtonWidget()
+ .setToggle(() -> mLockFluid, val -> {
+ mLockFluid = val;
+
+ String inBrackets;
+ if (mLockFluid) {
+ if (mFluid == null) {
+ setLockedFluidName(null);
+ inBrackets = GT_Utility.trans(
+ "264", "currently none, will be locked to the next that is put in");
+ } else {
+ setLockedFluidName(
+ getDrainableStack().getFluid().getName());
+ inBrackets = getDrainableStack().getLocalizedName();
+ }
+ GT_Utility.sendChatToPlayer(
+ buildContext.getPlayer(),
+ String.format(
+ "%s (%s)", GT_Utility.trans("265", "1 specific Fluid"), inBrackets));
+ } else {
+ setLockedFluidName(null);
+ GT_Utility.sendChatToPlayer(
+ buildContext.getPlayer(), GT_Utility.trans("266", "Lock Fluid Mode Disabled"));
+ }
+ })
+ .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE)
+ .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_LOCK)
+ .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.lockfluid.tooltip"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setPos(25, 63)
+ .setSize(18, 18))
+ .widget(new CycleButtonWidget()
+ .setToggle(() -> mAllowInputFromOutputSide, val -> {
+ mAllowInputFromOutputSide = val;
+ if (!mAllowInputFromOutputSide) {
+ GT_Utility.sendChatToPlayer(buildContext.getPlayer(), GT_Utility.getTrans("096"));
+ } else {
+ GT_Utility.sendChatToPlayer(buildContext.getPlayer(), GT_Utility.getTrans("095"));
+ }
+ })
+ .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE)
+ .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_INPUT_FROM_OUTPUT_SIDE)
+ .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.inputfromoutput.tooltip"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setPos(43, 63)
+ .setSize(18, 18))
+ .widget(new CycleButtonWidget()
+ .setToggle(() -> mVoidFluidPart, val -> {
+ mVoidFluidPart = val;
+ if (!mVoidFluidPart) {
+ GT_Utility.sendChatToPlayer(
+ buildContext.getPlayer(),
+ GT_Utility.trans("267", "Overflow Voiding Mode Disabled"));
+ } else {
+ GT_Utility.sendChatToPlayer(
+ buildContext.getPlayer(),
+ GT_Utility.trans("268", "Overflow Voiding Mode Enabled"));
+ }
+ })
+ .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE)
+ .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_VOID_EXCESS)
+ .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.voidoverflow.tooltip"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setPos(151, 7)
+ .setSize(18, 18))
+ .widget(new CycleButtonWidget()
+ .setToggle(() -> mVoidFluidFull, val -> {
+ mVoidFluidFull = val;
+ if (!mVoidFluidFull) {
+ GT_Utility.sendChatToPlayer(
+ buildContext.getPlayer(), GT_Utility.trans("269", "Void Full Mode Disabled"));
+ } else {
+ GT_Utility.sendChatToPlayer(
+ buildContext.getPlayer(), GT_Utility.trans("270", "Void Full Mode Enabled"));
+ }
+ })
+ .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE)
+ .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_VOID_ALL)
+ .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.voidfull.tooltip"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setPos(151, 25)
+ .setSize(18, 18));
+ }
+
+ @Override
+ protected IFluidAccess constructFluidAccess(boolean aIsFillableStack) {
+ return new DigitalTankFluidAccess(this, aIsFillableStack);
+ }
+
+ static class DigitalTankFluidAccess extends BasicTankFluidAccess {
+
+ public DigitalTankFluidAccess(GT_MetaTileEntity_BasicTank aTank, boolean aIsFillableStack) {
+ super(aTank, aIsFillableStack);
+ }
+
+ @Override
+ public void set(FluidStack stack) {
+ super.set(stack);
+ ((GT_MetaTileEntity_DigitalTankBase) mTank).onEmptyingContainerWhenEmpty();
+ }
+
+ @Override
+ public int getRealCapacity() {
+ return ((GT_MetaTileEntity_DigitalTankBase) mTank).getRealCapacity();
+ }
+
+ @Override
+ public void verifyFluidStack() {}
+ }
}