aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/tectech/thing
diff options
context:
space:
mode:
authorMaya <10861407+serenibyss@users.noreply.github.com>2024-10-03 17:14:28 -0500
committerGitHub <noreply@github.com>2024-10-03 22:14:28 +0000
commite16f7ac07662fc1c1d9dc169620acaec062ef939 (patch)
treec8ca20bc922caca89edcc1ca65e92be414c7f9a4 /src/main/java/tectech/thing
parent2f5a7889650e0fcaf8c95e95b37737af82a40798 (diff)
downloadGT5-Unofficial-e16f7ac07662fc1c1d9dc169620acaec062ef939.tar.gz
GT5-Unofficial-e16f7ac07662fc1c1d9dc169620acaec062ef939.tar.bz2
GT5-Unofficial-e16f7ac07662fc1c1d9dc169620acaec062ef939.zip
Godforge encore (#3213)
Co-authored-by: GDCloud <gdcloudstrike@gmail.com>
Diffstat (limited to 'src/main/java/tectech/thing')
-rw-r--r--src/main/java/tectech/thing/block/RenderForgeOfGods.java4
-rw-r--r--src/main/java/tectech/thing/block/TileEntityForgeOfGods.java70
-rw-r--r--src/main/java/tectech/thing/gui/TecTechUITextures.java7
-rw-r--r--src/main/java/tectech/thing/metaTileEntity/multi/MTEForgeOfGods.java921
-rw-r--r--src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEBaseModule.java24
-rw-r--r--src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEExoticModule.java7
-rw-r--r--src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEMoltenModule.java7
-rw-r--r--src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTESmeltingModule.java6
8 files changed, 787 insertions, 259 deletions
diff --git a/src/main/java/tectech/thing/block/RenderForgeOfGods.java b/src/main/java/tectech/thing/block/RenderForgeOfGods.java
index a911ab378f..498db3b9ed 100644
--- a/src/main/java/tectech/thing/block/RenderForgeOfGods.java
+++ b/src/main/java/tectech/thing/block/RenderForgeOfGods.java
@@ -429,6 +429,10 @@ public class RenderForgeOfGods extends TileEntitySpecialRenderer {
long millis = System.currentTimeMillis() % (1000 * 36000);
float timer = millis / (50f); // to ticks
+ if (forgeTile.getRainbowMode()) {
+ forgeTile.incrementRainbowColors();
+ }
+
RenderEntireStar(forgeTile, x, y, z, timer);
RenderRings(forgeTile, x, y, z, timer);
diff --git a/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java b/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java
index dfe4bab143..49ab89de2b 100644
--- a/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java
+++ b/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java
@@ -17,6 +17,10 @@ public class TileEntityForgeOfGods extends TileEntity {
private int ringCount = 1;
private float colorR = .7f, colorG = .8f, colorB = 1f, gamma = 3f;
private float rotAngle = 0, rotAxisX = 1, rotAxisY = 0, rotAxisZ = 0;
+ private int rainbowR = 255, rainbowG = 0, rainbowB = 0;
+ private int rainbowState = 0;
+ private boolean rainbowMode = false;
+ private int rainbowCycleSpeed = 1;
private static final String NBT_TAG = "FOG:";
private static final String ROTATION_SPEED_NBT_TAG = NBT_TAG + "ROTATION";
@@ -30,6 +34,8 @@ public class TileEntityForgeOfGods extends TileEntity {
private static final String ROT_AXIS_X_NBT_TAG = NBT_TAG + "ROT_AXIS_X";
private static final String ROT_AXIS_Y_NBT_TAG = NBT_TAG + "ROT_AXIS_Y";
private static final String ROT_AXIS_Z_NBT_TAG = NBT_TAG + "ROT_AXIS_Z";
+ private static final String RAINBOW_MODE_NBT_TAG = NBT_TAG + "RAINBOW_MODE";
+ private static final String RAINBOW_MODE_CYCLE_SPEED_NBT_TAG = NBT_TAG + "RAINBOW_MODE_CYCLE_SPEED";
public static final float BACK_PLATE_DISTANCE = -121.5f, BACK_PLATE_RADIUS = 13f;
@@ -60,15 +66,15 @@ public class TileEntityForgeOfGods extends TileEntity {
}
public float getColorR() {
- return colorR;
+ return rainbowMode ? rainbowR / 255f : colorR;
}
public float getColorG() {
- return colorG;
+ return rainbowMode ? rainbowG / 255f : colorG;
}
public float getColorB() {
- return colorB;
+ return rainbowMode ? rainbowB / 255f : colorB;
}
public float getGamma() {
@@ -86,6 +92,15 @@ public class TileEntityForgeOfGods extends TileEntity {
this.gamma = gamma;
}
+ public void setRainbowMode(boolean state, int cycleSpeed) {
+ this.rainbowMode = state;
+ this.rainbowCycleSpeed = cycleSpeed;
+ }
+
+ public boolean getRainbowMode() {
+ return rainbowMode;
+ }
+
public int getRingCount() {
return ringCount;
}
@@ -157,6 +172,51 @@ public class TileEntityForgeOfGods extends TileEntity {
return y0 + ((x - x0) * (y1 - y0)) / (x1 - x0);
}
+ public void incrementRainbowColors() {
+ if (rainbowState == 0) {
+ rainbowG += rainbowCycleSpeed;
+ if (rainbowG >= 255) {
+ rainbowG = 255;
+ rainbowState = 1;
+ }
+ }
+ if (rainbowState == 1) {
+ rainbowR -= rainbowCycleSpeed;
+ if (rainbowR <= 0) {
+ rainbowR = 0;
+ rainbowState = 2;
+ }
+ }
+ if (rainbowState == 2) {
+ rainbowB += rainbowCycleSpeed;
+ if (rainbowB >= 255) {
+ rainbowB = 255;
+ rainbowState = 3;
+ }
+ }
+ if (rainbowState == 3) {
+ rainbowG -= rainbowCycleSpeed;
+ if (rainbowG <= 0) {
+ rainbowG = 0;
+ rainbowState = 4;
+ }
+ }
+ if (rainbowState == 4) {
+ rainbowR += rainbowCycleSpeed;
+ if (rainbowR >= 255) {
+ rainbowR = 255;
+ rainbowState = 5;
+ }
+ }
+ if (rainbowState == 5) {
+ rainbowB -= rainbowCycleSpeed;
+ if (rainbowB <= 0) {
+ rainbowB = 0;
+ rainbowState = 0;
+ }
+ }
+ }
+
@Override
public void writeToNBT(NBTTagCompound compound) {
super.writeToNBT(compound);
@@ -171,6 +231,8 @@ public class TileEntityForgeOfGods extends TileEntity {
compound.setFloat(ROT_AXIS_X_NBT_TAG, rotAxisX);
compound.setFloat(ROT_AXIS_Y_NBT_TAG, rotAxisY);
compound.setFloat(ROT_AXIS_Z_NBT_TAG, rotAxisZ);
+ compound.setBoolean(RAINBOW_MODE_NBT_TAG, rainbowMode);
+ compound.setInteger(RAINBOW_MODE_CYCLE_SPEED_NBT_TAG, rainbowCycleSpeed);
}
@Override
@@ -190,6 +252,8 @@ public class TileEntityForgeOfGods extends TileEntity {
rotAxisX = compound.getFloat(ROT_AXIS_X_NBT_TAG);
rotAxisY = compound.getFloat(ROT_AXIS_Y_NBT_TAG);
rotAxisZ = compound.getFloat(ROT_AXIS_Z_NBT_TAG);
+ rainbowMode = compound.getBoolean(RAINBOW_MODE_NBT_TAG);
+ rainbowCycleSpeed = compound.getInteger(RAINBOW_MODE_CYCLE_SPEED_NBT_TAG);
}
@Override
diff --git a/src/main/java/tectech/thing/gui/TecTechUITextures.java b/src/main/java/tectech/thing/gui/TecTechUITextures.java
index f2774dc42f..298d528e21 100644
--- a/src/main/java/tectech/thing/gui/TecTechUITextures.java
+++ b/src/main/java/tectech/thing/gui/TecTechUITextures.java
@@ -22,6 +22,7 @@ public class TecTechUITextures {
public static final UITexture BACKGROUND_GLOW_PURPLE = UITexture.fullImage(MODID, "gui/background/purple_glow");
public static final UITexture BACKGROUND_GLOW_BLUE = UITexture.fullImage(MODID, "gui/background/blue_glow");
public static final UITexture BACKGROUND_GLOW_GREEN = UITexture.fullImage(MODID, "gui/background/green_glow");
+ public static final UITexture BACKGROUND_GLOW_RED = UITexture.fullImage(MODID, "gui/background/red_glow");
public static final UITexture BACKGROUND_GLOW_WHITE = UITexture.fullImage(MODID, "gui/background/white_glow");
public static final UITexture BACKGROUND_GLOW_RAINBOW = UITexture.fullImage(MODID, "gui/background/rainbow_glow");
public static final UITexture BACKGROUND_SPACE = UITexture.fullImage(MODID, "gui/background/space");
@@ -84,6 +85,10 @@ public class TecTechUITextures {
.fullImage(MODID, "gui/overlay_button/battery_off");
public static final UITexture OVERLAY_BUTTON_FLAG = UITexture.fullImage(MODID, "gui/overlay_button/flag");
public static final UITexture OVERLAY_BUTTON_HEART = UITexture.fullImage(MODID, "gui/overlay_button/heart");
+ public static final UITexture OVERLAY_BUTTON_RAINBOW_SPIRAL = UITexture
+ .fullImage(MODID, "gui/overlay_button/rainbow_spiral");
+ public static final UITexture OVERLAY_BUTTON_RAINBOW_SPIRAL_OFF = UITexture
+ .fullImage(MODID, "gui/overlay_button/rainbow_spiral_off");
public static final UITexture OVERLAY_CYCLIC_BLUE = UITexture.fullImage(MODID, "gui/overlay_button/cyclic_blue");
public static final UITexture OVERLAY_EJECTION_LOCKED = UITexture
.fullImage(MODID, "gui/overlay_button/eject_disabled");
@@ -206,5 +211,7 @@ public class TecTechUITextures {
public static final UITexture PICTURE_OVERLAY_ORANGE = UITexture.fullImage(MODID, "gui/picture/overlay_orange");
public static final UITexture PICTURE_OVERLAY_GREEN = UITexture.fullImage(MODID, "gui/picture/overlay_green");
public static final UITexture PICTURE_OVERLAY_PURPLE = UITexture.fullImage(MODID, "gui/picture/overlay_purple");
+ public static final UITexture PICTURE_OVERLAY_RED = UITexture.fullImage(MODID, "gui/picture/overlay_red");
+ public static final UITexture PICTURE_RAINBOW_SQUARE = UITexture.fullImage(MODID, "gui/picture/rainbow_square");
}
diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTEForgeOfGods.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTEForgeOfGods.java
index c26322d11f..5157987628 100644
--- a/src/main/java/tectech/thing/metaTileEntity/multi/MTEForgeOfGods.java
+++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTEForgeOfGods.java
@@ -5,6 +5,7 @@ import static gregtech.api.enums.Mods.Avaritia;
import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY;
import static gregtech.api.util.GTModHandler.getModItem;
import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTUtility.filterValidMTEs;
import static gregtech.api.util.GTUtility.formatNumbers;
import static java.lang.Math.floor;
import static java.lang.Math.log;
@@ -32,19 +33,24 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.network.PacketBuffer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.MathHelper;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
import com.google.common.collect.ImmutableList;
import com.google.common.math.LongMath;
+import com.google.common.primitives.Booleans;
import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable;
import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
@@ -53,6 +59,7 @@ import com.gtnewhorizons.modularui.api.ModularUITextures;
import com.gtnewhorizons.modularui.api.drawable.IDrawable;
import com.gtnewhorizons.modularui.api.drawable.Text;
import com.gtnewhorizons.modularui.api.drawable.UITexture;
+import com.gtnewhorizons.modularui.api.drawable.shapes.Rectangle;
import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable;
import com.gtnewhorizons.modularui.api.forge.ItemStackHandler;
import com.gtnewhorizons.modularui.api.math.Alignment;
@@ -60,6 +67,7 @@ import com.gtnewhorizons.modularui.api.math.Color;
import com.gtnewhorizons.modularui.api.math.MainAxisAlignment;
import com.gtnewhorizons.modularui.api.math.Pos2d;
import com.gtnewhorizons.modularui.api.math.Size;
+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.api.widget.IWidgetBuilder;
@@ -98,7 +106,6 @@ import gregtech.api.util.HatchElementBuilder;
import gregtech.api.util.IGTHatchAdder;
import gregtech.api.util.MultiblockTooltipBuilder;
import gregtech.common.tileentities.machines.MTEHatchInputBusME;
-import gregtech.common.tileentities.machines.MTEHatchInputME;
import gregtech.common.tileentities.machines.MTEHatchOutputBusME;
import tectech.TecTech;
import tectech.loader.ConfigHandler;
@@ -126,6 +133,12 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
private int ringAmount = 1;
private int stellarFuelAmount = 0;
private int neededStartupFuel = 0;
+ private int rendererColorRed = 179;
+ private int rendererColorGreen = 204;
+ private int rendererColorBlue = 255;
+ private int rotationSpeed = 5;
+ private int starSize = 20;
+ private int rainbowCycleSpeed = 1;
private long fuelConsumption = 0;
private long totalRecipesProcessed = 0;
private long totalFuelConsumed = 0;
@@ -138,12 +151,16 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
private float invertedRecipeMilestonePercentage = 0;
private float invertedFuelMilestonePercentage = 0;
private float invertedStructureMilestonePercentage = 0;
+ private float rendererGamma = 3f;
private BigInteger totalPowerConsumed = BigInteger.ZERO;
private boolean batteryCharging = false;
private boolean inversion = false;
private boolean gravitonShardEjection = false;
- private boolean noFormatting = false;
+ private FormattingMode formattingMode = FormattingMode.NONE;
private boolean isRenderActive = false;
+ private boolean secretUpgrade = false;
+ private boolean rainbowMode = false;
+ private final ItemStack[] storedUpgradeWindowItems = new ItemStack[16];
public ArrayList<MTEBaseModule> moduleHatches = new ArrayList<>();
protected ItemStackHandler inputSlotHandler = new ItemStackHandler(16);
@@ -156,6 +173,7 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
private static final int MANUAL_INSERTION_WINDOW_ID = 15;
private static final int GENERAL_INFO_WINDOW_ID = 16;
private static final int SPECIAL_THANKS_WINDOW_ID = 17;
+ private static final int STAR_COLOR_CONFIG_WINDOW_ID = 18;
private static final int TEXTURE_INDEX = 960;
private static final int[] FIRST_SPLIT_UPGRADES = new int[] { 12, 13, 14 };
private static final Integer[] UPGRADE_MATERIAL_ID_CONVERSION = { 0, 5, 7, 11, 26, 29, 30 };
@@ -185,10 +203,26 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
: GTOreDictUnificator.get(OrePrefixes.block, Materials.CosmicNeutronium, 1);
public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) {
- int realBudget = elementBudget >= 1000 ? elementBudget : Math.min(1000, elementBudget * 5);
// 1000 blocks max per placement.
- int built = survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 63, 14, 1, realBudget, env, false, true);
- if (stackSize.stackSize > 1) {
+ int realBudget = elementBudget >= 1000 ? elementBudget : Math.min(1000, elementBudget * 5);
+
+ survivialBuildPiece(STRUCTURE_PIECE_SHAFT, stackSize, 63, 14, 1, realBudget, env, false, true);
+
+ int built = 0;
+ if (stackSize.stackSize > 0 && ringAmount < 1) {
+ built += survivialBuildPiece(
+ STRUCTURE_PIECE_FIRST_RING,
+ stackSize,
+ 63,
+ 14,
+ -59,
+ realBudget,
+ env,
+ false,
+ true);
+ }
+
+ if (stackSize.stackSize > 1 && ringAmount < 2) {
built += survivialBuildPiece(
STRUCTURE_PIECE_SECOND_RING,
stackSize,
@@ -200,7 +234,8 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
false,
true);
}
- if (stackSize.stackSize > 2) {
+
+ if (stackSize.stackSize > 2 && ringAmount < 3) {
built += survivialBuildPiece(
STRUCTURE_PIECE_THIRD_RING,
stackSize,
@@ -408,14 +443,8 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
if (ticker % (5 * SECONDS) == 0) {
ticker = 0;
startRecipeProcessing();
- FluidStack[] fluidInHatch = null;
- boolean fuelDrained = false;
- if (mInputHatches != null && !mInputHatches.isEmpty()) {
- fluidInHatch = this.getStoredFluids()
- .toArray(new FluidStack[0]);
- }
- int maxModuleCount = 8;
+ int maxModuleCount = 8;
if (upgrades[26]) {
maxModuleCount += 4;
}
@@ -451,37 +480,7 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
createRenderer();
}
} else {
- fuelConsumption = (long) calculateFuelConsumption(this) * 5 * (batteryCharging ? 2 : 1);
- if (fluidInHatch != null && fuelConsumption < Integer.MAX_VALUE) {
- for (FluidStack fluid : fluidInHatch) {
- if (fluid.isFluidEqual(validFuelList.get(selectedFuelType))) {
- FluidStack fluidNeeded = new FluidStack(
- validFuelList.get(selectedFuelType),
- (int) fuelConsumption);
- FluidStack fluidReal;
- if (mInputHatches.get(0) instanceof MTEHatchInputME meHatch) {
- fluidReal = meHatch.drain(ForgeDirection.UNKNOWN, fluidNeeded, true);
- } else {
- fluidReal = mInputHatches.get(0)
- .drain(fluidNeeded.amount, true);
- }
- if (fluidReal == null || fluidReal.amount < fluidNeeded.amount) {
- reduceBattery(fuelConsumptionFactor);
- } else {
- totalFuelConsumed += getFuelFactor();
- if (batteryCharging) {
- increaseBattery(fuelConsumptionFactor);
- }
- }
- fuelDrained = true;
- }
- }
- if (!fuelDrained) {
- reduceBattery(fuelConsumptionFactor);
- }
- } else {
- reduceBattery(fuelConsumptionFactor);
- }
+ drainFuel();
}
}
@@ -524,6 +523,33 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
}
}
+ private void drainFuel() {
+ fuelConsumption = (long) Math.max(calculateFuelConsumption(this) * 5 * (batteryCharging ? 2 : 1), 1);
+ if (fuelConsumption >= Integer.MAX_VALUE) {
+ reduceBattery(fuelConsumptionFactor);
+ return;
+ }
+
+ FluidStack fuelToDrain = new FluidStack(validFuelList.get(selectedFuelType), (int) fuelConsumption);
+ for (MTEHatchInput hatch : filterValidMTEs(mInputHatches)) {
+ FluidStack drained = hatch.drain(ForgeDirection.UNKNOWN, fuelToDrain, true);
+ if (drained == null) {
+ continue;
+ }
+
+ fuelToDrain.amount -= drained.amount;
+
+ if (fuelToDrain.amount == 0) {
+ totalFuelConsumed += getFuelFactor();
+ if (batteryCharging) {
+ increaseBattery(fuelConsumptionFactor);
+ }
+ return;
+ }
+ }
+ reduceBattery(fuelConsumptionFactor);
+ }
+
public boolean addModuleToMachineList(IGregTechTileEntity tileEntity, int baseCasingIndex) {
if (tileEntity == null) {
return false;
@@ -593,8 +619,10 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
if (tile == null) return;
tile.setRingCount(ringAmount);
- tile.setStarRadius(20);
- tile.setRotationSpeed(5);
+ tile.setStarRadius(starSize);
+ tile.setRotationSpeed(rotationSpeed);
+ tile.setColor(rendererColorRed / 255f, rendererColorGreen / 255f, rendererColorBlue / 255f, rendererGamma);
+ tile.setRainbowMode(rainbowMode, rainbowCycleSpeed);
tile.updateToClient();
}
@@ -764,6 +792,7 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
buildContext.addSyncedWindow(MANUAL_INSERTION_WINDOW_ID, this::createManualInsertionWindow);
buildContext.addSyncedWindow(GENERAL_INFO_WINDOW_ID, this::createGeneralInfoWindow);
buildContext.addSyncedWindow(SPECIAL_THANKS_WINDOW_ID, this::createSpecialThanksWindow);
+ buildContext.addSyncedWindow(STAR_COLOR_CONFIG_WINDOW_ID, this::createStarColorConfigWindow);
builder.widget(
new ButtonWidget().setOnClick(
(clickData, widget) -> {
@@ -867,6 +896,22 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
.addTooltip(translateToLocal("fog.button.thanks.tooltip"))
.setBackground(TecTechUITextures.OVERLAY_BUTTON_HEART)
.setPos(8, 69)
+ .setTooltipShowUpDelay(TOOLTIP_DELAY))
+ .widget(
+ new ButtonWidget().setOnClick(
+ (clickData, widget) -> {
+ if (!widget.isClient()) widget.getContext()
+ .openSyncedWindow(STAR_COLOR_CONFIG_WINDOW_ID);
+ })
+ .setSize(16, 16)
+ .addTooltip(translateToLocal("fog.button.color.tooltip"))
+ .setBackground(() -> {
+ List<UITexture> button = new ArrayList<>();
+ button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32);
+ button.add(TecTechUITextures.OVERLAY_BUTTON_RAINBOW_SPIRAL);
+ return button.toArray(new IDrawable[0]);
+ })
+ .setPos(152, 91)
.setTooltipShowUpDelay(TOOLTIP_DELAY));
}
@@ -1033,7 +1078,15 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
.setTextColor(Color.WHITE.normal)
.setSize(70, 18)
.setPos(4, 35)
- .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD))
+ .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)
+ .attachSyncer(
+ new FakeSyncWidget.ListSyncer<>(
+ () -> Booleans.asList(upgrades),
+ val -> upgrades = Booleans.toArray(val),
+ PacketBuffer::writeBoolean,
+ PacketBuffer::readBoolean),
+ builder,
+ (widget, val) -> ((NumericWidget) widget).setMaxValue(calculateMaxFuelFactor(this))))
.widget(
new DrawableWidget().setDrawable(ModularUITextures.ICON_INFO)
.setPos(64, 24)
@@ -1268,6 +1321,14 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
.setPos(233, 215))
.widget(
ButtonWidget.closeWindowButton(true)
+ .setOnClick((data, widget) -> {
+ if (!widget.isClient()) {
+ widget.getWindow()
+ .closeWindow();
+ widget.getContext()
+ .closeWindow(INDIVIDUAL_MILESTONE_WINDOW_ID);
+ }
+ })
.setPos(382, 6));
return builder.build();
}
@@ -1344,7 +1405,7 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
.setPos(5, 50)
.setSize(140, 30))
.widget(
- TextWidget.dynamicText(() -> milestoneProgressText(currentMilestoneID, true))
+ TextWidget.dynamicText(() -> milestoneProgressText(currentMilestoneID))
.setScale(0.7f)
.setDefaultColor(EnumChatFormatting.WHITE)
.setSize(140, 30)
@@ -1358,7 +1419,7 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
.widget(new ButtonWidget().setOnClick((clickData, widget) -> {
TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click");
if (clickData.mouseButton == 0) {
- noFormatting = !noFormatting;
+ formattingMode = formattingMode.cycle();
}
})
.setSize(10, 10)
@@ -1367,7 +1428,10 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
.setPos(5, 135)
.setTooltipShowUpDelay(TOOLTIP_DELAY)
.attachSyncer(
- new FakeSyncWidget.BooleanSyncer(() -> noFormatting, val -> noFormatting = val),
+ new FakeSyncWidget.ByteSyncer(
+ () -> (byte) formattingMode.ordinal(),
+ val -> formattingMode = FormattingMode.VALUES[MathHelper
+ .clamp_int(val, 0, FormattingMode.VALUES.length - 1)]),
builder));
return builder.build();
@@ -1378,15 +1442,7 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
private Widget createMilestoneButton(int milestoneID, int width, int height, Pos2d pos) {
return new ButtonWidget().setOnClick((clickData, widget) -> {
currentMilestoneID = milestoneID;
- if (!widget.isClient()) {
- if (widget.getContext()
- .isWindowOpen(INDIVIDUAL_MILESTONE_WINDOW_ID)) {
- widget.getContext()
- .closeWindow(INDIVIDUAL_MILESTONE_WINDOW_ID);
- }
- widget.getContext()
- .openSyncedWindow(INDIVIDUAL_MILESTONE_WINDOW_ID);
- }
+ reopenWindow(widget, INDIVIDUAL_MILESTONE_WINDOW_ID);
})
.setSize(width, height)
.setBackground(() -> switch (milestoneID) {
@@ -1563,7 +1619,7 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
.widget(
createUpgradeBox(
8,
- 0,
+ 4,
0,
new int[] { 4, 7 },
true,
@@ -1589,7 +1645,7 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
.widget(
createUpgradeBox(
10,
- 0,
+ 4,
1,
new int[] { 6, 7 },
true,
@@ -1859,6 +1915,31 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
12,
new Pos2d(126, 798),
scrollable))
+ .widget(
+ new MultiChildWidget().addChild(
+ new ButtonWidget().setOnClick(((clickData, widget) -> secretUpgrade = !secretUpgrade))
+ .setSize(40, 15)
+ .setBackground(() -> {
+ if (secretUpgrade) {
+ return new IDrawable[] { TecTechUITextures.BUTTON_SPACE_PRESSED_32x16 };
+ }
+ return new IDrawable[0];
+ })
+ .addTooltip(translateToLocal("fog.upgrade.tt.secret"))
+ .setTooltipShowUpDelay(20))
+ .addChild(
+ new TextWidget(translateToLocal("fog.upgrade.tt.short.secret")).setScale(0.8f)
+ .setDefaultColor(EnumChatFormatting.GOLD)
+ .setTextAlignment(Alignment.Center)
+ .setSize(34, 9)
+ .setPos(3, 4)
+ .setEnabled((widget -> secretUpgrade)))
+ .addChild(
+ new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_BLUE_OPAQUE)
+ .setEnabled(widget -> secretUpgrade)
+ .setPos(40, 4)
+ .setSize(20, 6))
+ .setPos(new Pos2d(66, 56)))
.widget(new TextWidget("").setPos(0, 945));
builder.widget(
@@ -1942,6 +2023,10 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
background = TecTechUITextures.BACKGROUND_GLOW_GREEN;
overlay = TecTechUITextures.PICTURE_OVERLAY_GREEN;
}
+ case 4 -> {
+ background = TecTechUITextures.BACKGROUND_GLOW_RED;
+ overlay = TecTechUITextures.PICTURE_OVERLAY_RED;
+ }
default -> {
background = TecTechUITextures.BACKGROUND_GLOW_BLUE;
overlay = TecTechUITextures.PICTURE_OVERLAY_BLUE;
@@ -1996,7 +2081,7 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
.setPos(9, 5))
.addChild(
new TextWidget(translateToLocal("fog.upgrade.text." + (currentUpgradeID)))
- .setTextAlignment(Alignment.CenterLeft)
+ .setTextAlignment(Alignment.Center)
.setDefaultColor(EnumChatFormatting.WHITE)
.setSize(WIDTH - 15, LORE_POS - 30)
.setPos(9, 30))
@@ -2033,74 +2118,10 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
.setSize(WIDTH, HEIGHT)
.widget(new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> {
- int unlockedPrereqUpgrades = 0;
- int unlockedSplitUpgrades = 0;
if (!upgrades[currentUpgradeID]) {
- for (int prereqUpgrade : prereqUpgrades[currentUpgradeID]) {
- if (upgrades[prereqUpgrade]) {
- unlockedPrereqUpgrades++;
- }
- }
- if (!doesCurrentUpgradeRequireExtraMats
- || materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION)
- .indexOf(currentUpgradeID)]) {
- if (allPrereqRequired[currentUpgradeID]) {
- if (unlockedPrereqUpgrades == prereqUpgrades[currentUpgradeID].length
- && gravitonShardsAvailable >= gravitonShardCost) {
- gravitonShardsAvailable -= gravitonShardCost;
- gravitonShardsSpent += gravitonShardCost;
- upgrades[currentUpgradeID] = true;
- }
- } else if (unlockedPrereqUpgrades > 0 || prereqUpgrades[currentUpgradeID].length == 0) {
- if (isUpradeSplitStart) {
- for (int splitUpgrade : FIRST_SPLIT_UPGRADES) {
- if (upgrades[splitUpgrade]) {
- unlockedSplitUpgrades++;
- }
- }
- unlockedSplitUpgrades -= (ringAmount - 1);
- }
- if (unlockedSplitUpgrades <= 0 && gravitonShardsAvailable >= gravitonShardCost) {
- gravitonShardsAvailable -= gravitonShardCost;
- gravitonShardsSpent += gravitonShardCost;
- upgrades[currentUpgradeID] = true;
- }
- }
- }
+ completeUpgrade();
} else {
- int unlockedFollowupUpgrades = 0;
- int unlockedNeighboringUpgrades = 0;
- boolean doesFollowupRequireAllPrereqs = false;
- boolean canFollowupSpareAConnection = true;
-
- for (int followupUpgrade : followupUpgrades) {
- if (upgrades[followupUpgrade]) {
- unlockedFollowupUpgrades++;
- }
- if (allPrereqRequired[followupUpgrade]) {
- doesFollowupRequireAllPrereqs = true;
- }
- int[] currentPrereqs = prereqUpgrades[followupUpgrade];
- for (int prereqUpgrade : currentPrereqs) {
- if (upgrades[prereqUpgrade]) {
- unlockedNeighboringUpgrades++;
- }
- }
- if (unlockedNeighboringUpgrades <= 1) {
- canFollowupSpareAConnection = false;
- }
- unlockedNeighboringUpgrades = 0;
- }
-
- if (!doesFollowupRequireAllPrereqs && followupUpgrades.length > 0 && canFollowupSpareAConnection) {
- unlockedFollowupUpgrades = 0;
- }
-
- if (unlockedFollowupUpgrades == 0) {
- gravitonShardsAvailable += gravitonShardCost;
- gravitonShardsSpent -= gravitonShardCost;
- upgrades[currentUpgradeID] = false;
- }
+ respecUpgrade();
}
})
.setSize(40, 15)
@@ -2127,15 +2148,88 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
return builder.build();
}
+ private void completeUpgrade() {
+ int unlockedPrereqUpgrades = 0;
+ int unlockedSplitUpgrades = 0;
+ if (!upgrades[currentUpgradeID]) {
+ for (int prereqUpgrade : prereqUpgrades[currentUpgradeID]) {
+ if (upgrades[prereqUpgrade]) {
+ unlockedPrereqUpgrades++;
+ }
+ }
+ if (!doesCurrentUpgradeRequireExtraMats
+ || materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION)
+ .indexOf(currentUpgradeID)]) {
+ if (allPrereqRequired[currentUpgradeID]) {
+ if (unlockedPrereqUpgrades == prereqUpgrades[currentUpgradeID].length
+ && gravitonShardsAvailable >= gravitonShardCost) {
+ gravitonShardsAvailable -= gravitonShardCost;
+ gravitonShardsSpent += gravitonShardCost;
+ upgrades[currentUpgradeID] = true;
+ }
+ } else if (unlockedPrereqUpgrades > 0 || prereqUpgrades[currentUpgradeID].length == 0) {
+ if (isUpradeSplitStart) {
+ for (int splitUpgrade : FIRST_SPLIT_UPGRADES) {
+ if (upgrades[splitUpgrade]) {
+ unlockedSplitUpgrades++;
+ }
+ }
+ unlockedSplitUpgrades -= (ringAmount - 1);
+ }
+ if (unlockedSplitUpgrades <= 0 && gravitonShardsAvailable >= gravitonShardCost) {
+ gravitonShardsAvailable -= gravitonShardCost;
+ gravitonShardsSpent += gravitonShardCost;
+ upgrades[currentUpgradeID] = true;
+ }
+ }
+ }
+ }
+ }
+
+ private void respecUpgrade() {
+ int unlockedFollowupUpgrades = 0;
+ int unlockedNeighboringUpgrades = 0;
+ boolean doesFollowupRequireAllPrereqs = false;
+ boolean canFollowupSpareAConnection = true;
+
+ for (int followupUpgrade : followupUpgrades) {
+ if (upgrades[followupUpgrade]) {
+ unlockedFollowupUpgrades++;
+ if (allPrereqRequired[followupUpgrade]) {
+ doesFollowupRequireAllPrereqs = true;
+ }
+ int[] currentPrereqs = prereqUpgrades[followupUpgrade];
+ for (int prereqUpgrade : currentPrereqs) {
+ if (upgrades[prereqUpgrade]) {
+ unlockedNeighboringUpgrades++;
+ }
+ }
+ if (unlockedNeighboringUpgrades <= 1) {
+ canFollowupSpareAConnection = false;
+ }
+ }
+
+ unlockedNeighboringUpgrades = 0;
+ }
+
+ if (!doesFollowupRequireAllPrereqs && followupUpgrades.length > 0 && canFollowupSpareAConnection) {
+ unlockedFollowupUpgrades = 0;
+ }
+
+ if (unlockedFollowupUpgrades == 0) {
+ gravitonShardsAvailable += gravitonShardCost;
+ gravitonShardsSpent -= gravitonShardCost;
+ upgrades[currentUpgradeID] = false;
+ }
+ }
+
private Widget createMaterialInputButton(int upgradeID, int xCoord, int yCoord, IWidgetBuilder<?> builder) {
return new ButtonWidget().setOnClick((clickData, widget) -> {
if (!widget.isClient() && doesCurrentUpgradeRequireExtraMats) {
- widget.getContext()
- .openSyncedWindow(MANUAL_INSERTION_WINDOW_ID);
- widget.getContext()
- .closeWindow(INDIVIDUAL_UPGRADE_WINDOW_ID);
- widget.getContext()
- .closeWindow(UPGRADE_TREE_WINDOW_ID);
+ ModularUIContext ctx = widget.getContext();
+ ctx.openSyncedWindow(MANUAL_INSERTION_WINDOW_ID);
+ ctx.closeWindow(INDIVIDUAL_UPGRADE_WINDOW_ID);
+ ctx.closeWindow(UPGRADE_TREE_WINDOW_ID);
}
})
.setPlayClickSound(doesCurrentUpgradeRequireExtraMats)
@@ -2192,16 +2286,23 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
followupUpgrades = followingUpgradeIDs;
isUpradeSplitStart = isStartOfSplit;
doesCurrentUpgradeRequireExtraMats = requiresExtraMaterials;
- if (!widget.isClient()) {
- // unfortunately this is the easiest way to prevent this window desyncing. it causes the window to
- // reposition itself on the screen which would be a good thing to not do.
- if (widget.getContext()
- .isWindowOpen(INDIVIDUAL_UPGRADE_WINDOW_ID)) {
- widget.getContext()
- .closeWindow(INDIVIDUAL_UPGRADE_WINDOW_ID);
+ if (clickData.mouseButton == 0) {
+ if (clickData.shift) {
+ if (!doesCurrentUpgradeRequireExtraMats
+ || materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION)
+ .indexOf(currentUpgradeID)]) {
+ completeUpgrade();
+ } else if (!widget.isClient()) {
+ ModularUIContext ctx = widget.getContext();
+ ctx.openSyncedWindow(MANUAL_INSERTION_WINDOW_ID);
+ ctx.closeWindow(INDIVIDUAL_UPGRADE_WINDOW_ID);
+ ctx.closeWindow(UPGRADE_TREE_WINDOW_ID);
+ }
+ } else {
+ reopenWindow(widget, INDIVIDUAL_UPGRADE_WINDOW_ID);
}
- widget.getContext()
- .openSyncedWindow(INDIVIDUAL_UPGRADE_WINDOW_ID);
+ } else if (clickData.mouseButton == 1) {
+ respecUpgrade();
}
})
.setSize(40, 15)
@@ -2277,6 +2378,12 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
final DynamicPositionedColumn column4 = new DynamicPositionedColumn();
final DynamicPositionedColumn column5 = new DynamicPositionedColumn();
final DynamicPositionedColumn column6 = new DynamicPositionedColumn();
+
+ for (int i = 0; i < 16; i++) {
+ inputSlotHandler.insertItem(i, storedUpgradeWindowItems[i], false);
+ storedUpgradeWindowItems[i] = null;
+ }
+
List<DynamicPositionedColumn> columnList = Arrays.asList(column1, column2, column3, column4, column5, column6);
ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT);
builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT);
@@ -2402,6 +2509,13 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
}
protected ModularWindow createGeneralInfoWindow(final EntityPlayer player) {
+ return createGeneralInfoWindow(() -> inversion, val -> inversion = val);
+ }
+
+ // because modularui1 creates its synced windows following a specific interface spec, so we have to create a
+ // second method in order to pass a parameter :(
+ public static ModularWindow createGeneralInfoWindow(Supplier<Boolean> inversionGetter,
+ Consumer<Boolean> inversionSetter) {
final Scrollable scrollable = new Scrollable().setVerticalScroll();
final int WIDTH = 300;
final int HEIGHT = 300;
@@ -2463,20 +2577,20 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
.setPos(7, 140)
.setSize(150, 15))
.widget(
- TextWidget.dynamicText(this::inversionHeaderText)
+ TextWidget.dynamicText(() -> inversionInfoText(inversionGetter.get()))
.setDefaultColor(EnumChatFormatting.WHITE)
.setTextAlignment(Alignment.CenterLeft)
.setPos(7, 155)
.setSize(150, 15))
.widget(new ButtonWidget().setOnClick((clickData, widget) -> {
- if (inversion) {
+ if (inversionGetter.get()) {
scrollable.setVerticalScrollOffset(1766);
}
})
- .setPlayClickSound(inversion)
+ .setPlayClickSound(inversionGetter.get())
.setPos(7, 155)
.setSize(150, 15)
- .attachSyncer(new FakeSyncWidget.BooleanSyncer(() -> inversion, (val) -> inversion = val), scrollable))
+ .attachSyncer(new FakeSyncWidget.BooleanSyncer(inversionGetter, inversionSetter), scrollable))
.widget(
new TextWidget(
EnumChatFormatting.BOLD + "§N" + translateToLocal("gt.blockmachines.multimachine.FOG.fuel"))
@@ -2530,13 +2644,13 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
.setPos(7, 1439)
.setSize(280, 320))
.widget(
- TextWidget.dynamicText(this::inversionHeaderText)
+ TextWidget.dynamicText(() -> inversionHeaderText(inversionGetter.get()))
.setDefaultColor(EnumChatFormatting.WHITE)
.setTextAlignment(Alignment.TopCenter)
.setPos(7, 1776)
.setSize(280, 15))
.widget(
- TextWidget.dynamicText(this::inversionInfoText)
+ TextWidget.dynamicText(() -> inversionInfoText(inversionGetter.get()))
.setDefaultColor(EnumChatFormatting.GOLD)
.setTextAlignment(Alignment.CenterLeft)
.setPos(7, 1793)
@@ -2604,10 +2718,9 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
.setSize(60, 10))
.widget(
new TextWidget(
- EnumChatFormatting.DARK_AQUA + translateToLocal("gt.blockmachines.multimachine.FOG.teg")
- + " "
- + EnumChatFormatting.RESET
- + translateToLocal("gt.blockmachines.multimachine.FOG.serenybiss")).setScale(0.8f)
+ translateToLocal("gt.blockmachines.multimachine.FOG.serenibyss") + " "
+ + EnumChatFormatting.DARK_AQUA
+ + translateToLocal("gt.blockmachines.multimachine.FOG.teg")).setScale(0.8f)
.setTextAlignment(Alignment.CenterLeft)
.setPos(7, 67)
.setSize(60, 10))
@@ -2676,6 +2789,266 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
return builder.build();
}
+ protected ModularWindow createStarColorConfigWindow(final EntityPlayer player) {
+ final int WIDTH = 200;
+ final int HEIGHT = 200;
+ ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT);
+ builder.setBackground(TecTechUITextures.BACKGROUND_GLOW_WHITE);
+ builder.setDraggable(true);
+ builder.widget(
+ ButtonWidget.closeWindowButton(true)
+ .setPos(184, 4))
+ .widget(
+ new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.cosmetics"))
+ .setDefaultColor(EnumChatFormatting.GOLD)
+ .setTextAlignment(Alignment.Center)
+ .setScale(1f)
+ .setPos(0, 5)
+ .setSize(200, 15))
+ .widget(
+ new TextWidget(
+ EnumChatFormatting.UNDERLINE + translateToLocal("gt.blockmachines.multimachine.FOG.color"))
+ .setDefaultColor(EnumChatFormatting.GOLD)
+ .setTextAlignment(Alignment.CenterLeft)
+ .setPos(8, 25)
+ .setSize(60, 10))
+ .widget(
+ new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.red"))
+ .setDefaultColor(EnumChatFormatting.RED)
+ .setTextAlignment(Alignment.CenterLeft)
+ .setPos(8, 45)
+ .setSize(60, 18))
+ .widget(
+ new NumericWidget().setSetter(val -> rendererColorRed = (int) val)
+ .setGetter(() -> rendererColorRed)
+ .setBounds(0, 255)
+ .setDefaultValue(179)
+ .setTextAlignment(Alignment.Center)
+ .setTextColor(Color.WHITE.normal)
+ .setSize(35, 18)
+ .setPos(40, 45)
+ .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.integers"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)
+ .attachSyncer(
+ new FakeSyncWidget.IntegerSyncer(() -> rendererColorRed, val -> rendererColorRed = val),
+ builder))
+ .widget(
+ new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.green"))
+ .setDefaultColor(EnumChatFormatting.GREEN)
+ .setTextAlignment(Alignment.CenterLeft)
+ .setPos(8, 65)
+ .setSize(60, 18))
+ .widget(
+ new NumericWidget().setSetter(val -> rendererColorGreen = (int) val)
+ .setGetter(() -> rendererColorGreen)
+ .setBounds(0, 255)
+ .setDefaultValue(204)
+ .setTextAlignment(Alignment.Center)
+ .setTextColor(Color.WHITE.normal)
+ .setSize(35, 18)
+ .setPos(40, 65)
+ .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.integers"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)
+ .attachSyncer(
+ new FakeSyncWidget.IntegerSyncer(() -> rendererColorGreen, val -> rendererColorGreen = val),
+ builder))
+ .widget(
+ new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.blue"))
+ .setDefaultColor(EnumChatFormatting.DARK_BLUE)
+ .setTextAlignment(Alignment.CenterLeft)
+ .setPos(8, 85)
+ .setSize(60, 18))
+ .widget(
+ new NumericWidget().setSetter(val -> rendererColorBlue = (int) val)
+ .setGetter(() -> rendererColorBlue)
+ .setBounds(0, 255)
+ .setDefaultValue(255)
+ .setTextAlignment(Alignment.Center)
+ .setTextColor(Color.WHITE.normal)
+ .setSize(35, 18)
+ .setPos(40, 85)
+ .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.integers"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)
+ .attachSyncer(
+ new FakeSyncWidget.IntegerSyncer(() -> rendererColorBlue, val -> rendererColorBlue = val),
+ builder))
+ .widget(
+ new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.gamma"))
+ .setDefaultColor(EnumChatFormatting.GOLD)
+ .setTextAlignment(Alignment.CenterLeft)
+ .setPos(8, 105)
+ .setSize(60, 18))
+ .widget(
+ new NumericWidget().setSetter(val -> rendererGamma = (float) val)
+ .setGetter(() -> rendererGamma)
+ .setBounds(0, 100)
+ .setDefaultValue(3)
+ .setIntegerOnly(false)
+ .setTextAlignment(Alignment.Center)
+ .setTextColor(Color.WHITE.normal)
+ .setSize(35, 18)
+ .setPos(40, 105)
+ .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.decimals"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)
+ .attachSyncer(
+ new FakeSyncWidget.FloatSyncer(() -> rendererGamma, val -> rendererGamma = val),
+ builder))
+ .widget(
+ new DrawableWidget().setDrawable(
+ () -> new Rectangle().setColor(Color.rgb(rendererColorRed, rendererColorGreen, rendererColorBlue)))
+ .setSize(80, 80)
+ .setPos(100, 45))
+ .widget(
+ new DrawableWidget().setDrawable(() -> rainbowMode ? TecTechUITextures.PICTURE_RAINBOW_SQUARE : null)
+ .setSize(80, 80)
+ .setPos(100, 45))
+ .widget(new ButtonWidget().setOnClick((clickData, widget) -> {
+ if (!widget.isClient()) {
+ rainbowMode = !rainbowMode;
+ }
+ })
+ .setPlayClickSound(true)
+ .setBackground(() -> {
+ if (rainbowMode) {
+ return new IDrawable[] { TecTechUITextures.BUTTON_CELESTIAL_32x32,
+ TecTechUITextures.OVERLAY_BUTTON_RAINBOW_SPIRAL };
+ } else {
+ return new IDrawable[] { TecTechUITextures.BUTTON_CELESTIAL_32x32,
+ TecTechUITextures.OVERLAY_BUTTON_RAINBOW_SPIRAL_OFF };
+ }
+ })
+ .addTooltip(translateToLocal("fog.button.rainbowmode.tooltip"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setPos(100, 130)
+ .setSize(16, 16)
+ .attachSyncer(new FakeSyncWidget.BooleanSyncer(() -> rainbowMode, (val) -> rainbowMode = val), builder))
+ .widget(
+ new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.speed"))
+ .setDefaultColor(EnumChatFormatting.GOLD)
+ .setTextAlignment(Alignment.CenterLeft)
+ .setPos(120, 129)
+ .setSize(60, 18))
+ .widget(
+ new NumericWidget().setSetter(val -> rainbowCycleSpeed = (int) val)
+ .setGetter(() -> rainbowCycleSpeed)
+ .setBounds(0, 100)
+ .setDefaultValue(1)
+ .setTextAlignment(Alignment.Center)
+ .setTextColor(Color.WHITE.normal)
+ .setSize(28, 18)
+ .setPos(152, 129)
+ .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.integers"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)
+ .attachSyncer(
+ new FakeSyncWidget.IntegerSyncer(() -> rainbowCycleSpeed, val -> rainbowCycleSpeed = val),
+ builder))
+ .widget(
+ new TextWidget(
+ EnumChatFormatting.UNDERLINE + translateToLocal("gt.blockmachines.multimachine.FOG.misc"))
+ .setDefaultColor(EnumChatFormatting.GOLD)
+ .setTextAlignment(Alignment.CenterLeft)
+ .setPos(8, 130)
+ .setSize(80, 10))
+ .widget(
+ new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.spin"))
+ .setDefaultColor(EnumChatFormatting.GOLD)
+ .setTextAlignment(Alignment.CenterLeft)
+ .setPos(8, 150)
+ .setSize(60, 18))
+ .widget(
+ new NumericWidget().setSetter(val -> rotationSpeed = (int) val)
+ .setGetter(() -> rotationSpeed)
+ .setBounds(0, 100)
+ .setDefaultValue(5)
+ .setTextAlignment(Alignment.Center)
+ .setTextColor(Color.WHITE.normal)
+ .setSize(35, 18)
+ .setPos(40, 150)
+ .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.integers"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)
+ .attachSyncer(
+ new FakeSyncWidget.IntegerSyncer(() -> rotationSpeed, val -> rotationSpeed = val),
+ builder))
+ .widget(
+ new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.size"))
+ .setDefaultColor(EnumChatFormatting.GOLD)
+ .setTextAlignment(Alignment.CenterLeft)
+ .setPos(8, 170)
+ .setSize(60, 18))
+ .widget(
+ new NumericWidget().setSetter(val -> starSize = (int) val)
+ .setGetter(() -> starSize)
+ .setBounds(1, 40)
+ .setDefaultValue(20)
+ .setTextAlignment(Alignment.Center)
+ .setTextColor(Color.WHITE.normal)
+ .setSize(35, 18)
+ .setPos(40, 170)
+ .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.integers"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)
+ .attachSyncer(new FakeSyncWidget.IntegerSyncer(() -> starSize, val -> starSize = val), builder))
+ .widget(new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> {
+ if (!widget.isClient()) {
+ UpdateRenderer();
+ reopenWindow(widget, STAR_COLOR_CONFIG_WINDOW_ID);
+ }
+ })
+ .setSize(35, 15)
+ .setBackground(GTUITextures.BUTTON_STANDARD)
+ .addTooltip(translateToLocal("fog.button.updaterenderer.tooltip"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setPos(0, 0))
+ .addChild(
+ TextWidget.localised("gt.blockmachines.multimachine.FOG.apply")
+ .setTextAlignment(Alignment.Center)
+ .setPos(0, 0)
+ .setSize(35, 15))
+ .setSize(35, 15)
+ .setPos(157, 177))
+ .widget(new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> {
+ if (!widget.isClient()) {
+ rendererColorRed = 179;
+ rendererColorGreen = 204;
+ rendererColorBlue = 255;
+ rendererGamma = 3f;
+ rotationSpeed = 5;
+ starSize = 20;
+ rainbowMode = false;
+ rainbowCycleSpeed = 1;
+ }
+ })
+ .setSize(35, 15)
+ .setBackground(GTUITextures.BUTTON_STANDARD)
+ .addTooltip(translateToLocal("fog.button.resetcosmetics.tooltip"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setPos(0, 0))
+ .addChild(
+ TextWidget.localised("fog.debug.resetbutton.text")
+ .setTextAlignment(Alignment.Center)
+ .setPos(0, 0)
+ .setSize(35, 15))
+ .setSize(35, 15)
+ .setPos(120, 177));
+ return builder.build();
+ }
+
+ private void reopenWindow(Widget widget, int windowId) {
+ if (!widget.isClient()) {
+ ModularUIContext ctx = widget.getContext();
+ if (ctx.isWindowOpen(windowId)) {
+ ctx.closeWindow(windowId);
+ }
+ ctx.openSyncedWindow(windowId);
+ }
+ }
+
private DynamicPositionedRow delenoName() {
DynamicPositionedRow nameRow = new DynamicPositionedRow();
String deleno = translateToLocal("gt.blockmachines.multimachine.FOG.deleno");
@@ -2704,6 +3077,7 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
+ EnumChatFormatting.GRAY
+ "which utilize the star to energize materials")
.addInfo("to varying degrees, ranging from regular smelting to matter degeneration.")
+ .addInfo("EU requirements for all modules are handled via wireless energy directly.")
.addInfo(TOOLTIP_BAR)
.addInfo(
"This multiblock has an " + EnumChatFormatting.GOLD
@@ -2728,7 +3102,7 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
+ "Clicking on the logo in the controller gui opens an extensive information window,")
.addInfo("explaining everything there is to know about this multiblock.")
.addInfo(TOOLTIP_BAR)
- .beginStructureBlock(126, 29, 186, false)
+ .beginStructureBlock(127, 29, 186, false)
.addStructureInfo("The structure is too complex! See schematic for details.")
.addStructureInfo(
"Total blocks needed for the structure with " + EnumChatFormatting.DARK_PURPLE
@@ -2917,6 +3291,10 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
inversion = inversionChecker == 4;
}
+ public boolean isInversionAvailable() {
+ return inversion;
+ }
+
private Text inversionStatusText() {
String inversionStatus = "";
if (inversion) {
@@ -3089,11 +3467,55 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
translateToLocal("gt.blockmachines.multimachine.FOG.shardgain") + ": " + EnumChatFormatting.GRAY + sum);
}
+ private enum FormattingMode {
+
+ NONE,
+ COMMA,
+ EXPONENT;
+
+ static final FormattingMode[] VALUES = values();
+
+ FormattingMode cycle() {
+ return switch (this) {
+ case NONE -> COMMA;
+ case COMMA -> EXPONENT;
+ case EXPONENT -> NONE;
+ };
+ }
+
+ String format(Number number) {
+ return switch (this) {
+ case NONE -> number.toString();
+ case COMMA -> {
+ if (number instanceof BigInteger bi) yield formatNumbers(bi);
+ else yield formatNumbers(number.longValue());
+ }
+ case EXPONENT -> {
+ if (number instanceof BigInteger bi) {
+ if (bi.compareTo(BigInteger.valueOf(1_000L)) > 0) {
+ yield toExponentForm(bi);
+ }
+ yield bi.toString();
+ } else {
+ long value = number.longValue();
+ if (value > 1_000L) {
+ yield toExponentForm(value);
+ }
+ yield Long.toString(value);
+ }
+ }
+ };
+ }
+ }
+
private Text totalMilestoneProgress(int milestoneID) {
- long progress;
- BigInteger bigProgress;
+ Number progress;
String suffix;
switch (milestoneID) {
+ case 0 -> {
+ suffix = translateToLocal("gt.blockmachines.multimachine.FOG.power");
+ progress = totalPowerConsumed;
+ }
case 1 -> {
suffix = translateToLocal("gt.blockmachines.multimachine.FOG.recipes");
progress = totalRecipesProcessed;
@@ -3106,42 +3528,14 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
suffix = translateToLocal("gt.blockmachines.multimachine.FOG.extensions");
progress = milestoneProgress[3];
}
- default -> {
- suffix = translateToLocal("gt.blockmachines.multimachine.FOG.power");
- bigProgress = totalPowerConsumed;
- if (!noFormatting && (totalPowerConsumed.compareTo(BigInteger.valueOf(1_000L)) > 0)) {
- return new Text(
- translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": "
- + EnumChatFormatting.GRAY
- + toExponentForm(bigProgress)
- + " "
- + suffix);
- } else {
- return new Text(
- translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": "
- + EnumChatFormatting.GRAY
- + bigProgress
- + " "
- + suffix);
- }
- }
+ default -> throw new IllegalArgumentException("Invalid Milestone ID");
}
- if (!noFormatting) {
- return new Text(
- translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": "
- + EnumChatFormatting.GRAY
- + formatNumbers(progress)
- + " "
- + suffix);
- } else {
- return new Text(
- translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": "
- + EnumChatFormatting.GRAY
- + progress
- + " "
- + suffix);
- }
-
+ return new Text(
+ translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": "
+ + EnumChatFormatting.GRAY
+ + formattingMode.format(progress)
+ + " "
+ + suffix);
}
private Text currentMilestone(int milestoneID) {
@@ -3151,80 +3545,54 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
+ milestoneProgress[milestoneID]);
}
- private Text milestoneProgressText(int milestoneID, boolean formatting) {
- long max;
- BigInteger bigMax;
+ private Text milestoneProgressText(int milestoneID) {
+ Number max;
String suffix;
String progressText = translateToLocal("gt.blockmachines.multimachine.FOG.progress");
- Text done = new Text(translateToLocal("gt.blockmachines.multimachine.FOG.milestonecomplete"));
- if (noFormatting) {
- formatting = false;
- done = new Text(
- translateToLocal("gt.blockmachines.multimachine.FOG.milestonecomplete") + EnumChatFormatting.DARK_RED
- + "?");
+ Text done = new Text(
+ translateToLocal("gt.blockmachines.multimachine.FOG.milestonecomplete")
+ + (formattingMode != FormattingMode.NONE ? EnumChatFormatting.DARK_RED + "?" : ""));
+
+ if (milestoneProgress[milestoneID] >= 7 && !inversion) {
+ return done;
}
+
switch (milestoneID) {
- case 0:
- if (milestoneProgress[0] < 7 || inversion) {
- suffix = translateToLocal("gt.blockmachines.multimachine.FOG.power");
- if (inversion) {
- bigMax = POWER_MILESTONE_T7_CONSTANT.multiply(BigInteger.valueOf(milestoneProgress[0] - 5));
- } else {
- bigMax = BigInteger.valueOf(LongMath.pow(9, milestoneProgress[0]))
- .multiply(BigInteger.valueOf(LongMath.pow(10, 15)));
- }
- if (formatting && (totalPowerConsumed.compareTo(BigInteger.valueOf(1_000L)) > 0)) {
- return new Text(
- progressText + ": " + EnumChatFormatting.GRAY + toExponentForm(bigMax) + " " + suffix);
- } else {
- return new Text(progressText + ": " + EnumChatFormatting.GRAY + bigMax + " " + suffix);
- }
- } else {
- return done;
- }
- case 1:
- if (milestoneProgress[1] < 7 || inversion) {
- suffix = translateToLocal("gt.blockmachines.multimachine.FOG.recipes");
- if (inversion) {
- max = RECIPE_MILESTONE_T7_CONSTANT * (milestoneProgress[1] - 5);
- } else {
- max = LongMath.pow(6, milestoneProgress[1]) * LongMath.pow(10, 7);
- }
- break;
+ case 0 -> {
+ suffix = translateToLocal("gt.blockmachines.multimachine.FOG.power");
+ if (inversion) {
+ max = POWER_MILESTONE_T7_CONSTANT.multiply(BigInteger.valueOf(milestoneProgress[0] - 5));
} else {
- return done;
+ max = BigInteger.valueOf(LongMath.pow(9, milestoneProgress[0]))
+ .multiply(BigInteger.valueOf(LongMath.pow(10, 15)));
}
- case 2:
- if (milestoneProgress[2] < 7 || inversion) {
- suffix = translateToLocal("gt.blockmachines.multimachine.FOG.fuelconsumed");
- if (inversion) {
- max = FUEL_MILESTONE_T7_CONSTANT * (milestoneProgress[2] - 5);
- } else {
- max = LongMath.pow(3, milestoneProgress[2]) * LongMath.pow(10, 4);
- }
- break;
+ }
+ case 1 -> {
+ suffix = translateToLocal("gt.blockmachines.multimachine.FOG.recipes");
+ if (inversion) {
+ max = RECIPE_MILESTONE_T7_CONSTANT * (milestoneProgress[1] - 5);
} else {
- return done;
+ max = LongMath.pow(6, milestoneProgress[1]) * LongMath.pow(10, 7);
}
- case 3:
- if (milestoneProgress[3] < 7 || inversion) {
- suffix = translateToLocal("gt.blockmachines.multimachine.FOG.extensions");
- max = milestoneProgress[3] + 1;
- break;
+ }
+ case 2 -> {
+ suffix = translateToLocal("gt.blockmachines.multimachine.FOG.fuelconsumed");
+ if (inversion) {
+ max = FUEL_MILESTONE_T7_CONSTANT * (milestoneProgress[2] - 5);
} else {
- return done;
+ max = LongMath.pow(3, milestoneProgress[2]) * LongMath.pow(10, 4);
}
- default:
- return new Text("Error");
- }
- if (formatting) {
- return new Text(progressText + ": " + EnumChatFormatting.GRAY + formatNumbers(max) + " " + suffix);
- } else {
- return new Text(progressText + ": " + EnumChatFormatting.GRAY + max + " " + suffix);
+ }
+ case 3 -> {
+ suffix = translateToLocal("gt.blockmachines.multimachine.FOG.extensions");
+ max = milestoneProgress[3] + 1;
+ }
+ default -> throw new IllegalArgumentException("Invalid Milestone ID");
}
+ return new Text(progressText + ": " + EnumChatFormatting.GRAY + formattingMode.format(max) + " " + suffix);
}
- private Text inversionHeaderText() {
+ private static Text inversionHeaderText(boolean inversion) {
return inversion
? new Text(
EnumChatFormatting.BOLD + "§k2"
@@ -3237,7 +3605,7 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
: new Text("");
}
- private Text inversionInfoText() {
+ private static Text inversionInfoText(boolean inversion) {
return inversion ? new Text(translateToLocal("gt.blockmachines.multimachine.FOG.inversioninfotext"))
: new Text("");
}
@@ -3320,6 +3688,7 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
NBT.setLong("totalFuelConsumed", totalFuelConsumed);
NBT.setInteger("starFuelStored", stellarFuelAmount);
NBT.setBoolean("gravitonShardEjection", gravitonShardEjection);
+ NBT.setBoolean("secretUpgrde", secretUpgrade);
// Store booleanArrays of all upgrades
NBTTagCompound upgradeBooleanArrayNBTTag = new NBTTagCompound();
@@ -3360,6 +3729,16 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
NBT.setBoolean("gravitonShardEjection", gravitonShardEjection);
NBT.setBoolean("isRenderActive", isRenderActive);
NBT.setInteger("ringAmount", ringAmount);
+ NBT.setBoolean("secretUpgrade", secretUpgrade);
+ NBT.setInteger("rendererColorRed", rendererColorRed);
+ NBT.setInteger("rendererColorGreen", rendererColorGreen);
+ NBT.setInteger("rendererColorBlue", rendererColorBlue);
+ NBT.setFloat("rendererGamma", rendererGamma);
+ NBT.setInteger("rotationSpeed", rotationSpeed);
+ NBT.setInteger("starSize", starSize);
+ NBT.setBoolean("rainbowMode", rainbowMode);
+ NBT.setInteger("rainbowCycleSpeed", rainbowCycleSpeed);
+ NBT.setBoolean("isRenderActive", isRenderActive);
// Store booleanArray of all upgrades
NBTTagCompound upgradeBooleanArrayNBTTag = new NBTTagCompound();
@@ -3381,6 +3760,20 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
}
NBT.setTag("upgradeMaterials", upgradeMaterialBooleanArrayNBTTag);
+
+ NBTTagCompound upgradeWindowStorageNBTTag = new NBTTagCompound();
+
+ int storageIndex = 0;
+ for (ItemStack itemStack : inputSlotHandler.getStacks()) {
+ if (itemStack != null) {
+ upgradeWindowStorageNBTTag
+ .setInteger(storageIndex + "stacksizeOfStoredUpgradeItems", itemStack.stackSize);
+ NBT.setTag(storageIndex + "storedUpgradeItem", itemStack.writeToNBT(new NBTTagCompound()));
+ }
+ storageIndex++;
+ }
+
+ NBT.setTag("upgradeWindowStorage", upgradeWindowStorageNBTTag);
super.saveNBTData(NBT);
}
@@ -3400,6 +3793,16 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
gravitonShardEjection = NBT.getBoolean("gravitonShardEjection");
isRenderActive = NBT.getBoolean("isRenderActive");
ringAmount = NBT.getInteger("ringAmount");
+ secretUpgrade = NBT.getBoolean("secretUpgrade");
+ rendererColorRed = NBT.getInteger("rendererColorRed");
+ rendererColorGreen = NBT.getInteger("rendererColorGreen");
+ rendererColorBlue = NBT.getInteger("rendererColorBlue");
+ rendererGamma = NBT.getFloat("rendererGamma");
+ rotationSpeed = NBT.getInteger("rotationSpeed");
+ starSize = NBT.getInteger("starSize");
+ rainbowMode = NBT.getBoolean("rainbowMode");
+ rainbowCycleSpeed = NBT.getInteger("rainbowCycleSpeed");
+ isRenderActive = NBT.getBoolean("isRenderActive");
NBTTagCompound tempBooleanTag = NBT.getCompoundTag("upgrades");
@@ -3415,6 +3818,18 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable,
materialPaidUpgrades[upgradeIndex] = upgrade;
}
+ NBTTagCompound tempItemTag = NBT.getCompoundTag("upgradeWindowStorage");
+
+ for (int index = 0; index < 16; index++) {
+
+ int stackSize = tempItemTag.getInteger(index + "stacksizeOfStoredUpgradeItems");
+ ItemStack itemStack = ItemStack.loadItemStackFromNBT(NBT.getCompoundTag(index + "storedUpgradeItem"));
+
+ if (itemStack != null) {
+ storedUpgradeWindowItems[index] = itemStack.splitStack(stackSize);
+ }
+ }
+
super.loadNBTData(NBT);
}
diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEBaseModule.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEBaseModule.java
index 24e570f9b5..f8920d4f78 100644
--- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEBaseModule.java
+++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEBaseModule.java
@@ -55,6 +55,7 @@ import gregtech.api.recipe.RecipeMaps;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GTStructureUtility;
import tectech.thing.gui.TecTechUITextures;
+import tectech.thing.metaTileEntity.multi.MTEForgeOfGods;
import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase;
public class MTEBaseModule extends TTMultiblockBase {
@@ -66,6 +67,7 @@ public class MTEBaseModule extends TTMultiblockBase {
protected boolean isMultiStepPlasmaCapable = false;
protected boolean isMagmatterCapable = false;
private boolean isVoltageConfigUnlocked = false;
+ private boolean isInversionUnlocked = false;
protected UUID userUUID;
protected int machineHeat = 0;
protected int overclockHeat = 0;
@@ -81,6 +83,7 @@ public class MTEBaseModule extends TTMultiblockBase {
private static final String STRUCTURE_PIECE_MAIN = "main";
private static final int VOLTAGE_WINDOW_ID = 9;
+ private static final int GENERAL_INFO_WINDOW_ID = 10;
private static final int TEXTURE_INDEX = 960;
protected static final String TOOLTIP_BAR = EnumChatFormatting.AQUA
+ "--------------------------------------------------------------------------";
@@ -216,6 +219,10 @@ public class MTEBaseModule extends TTMultiblockBase {
isVoltageConfigUnlocked = unlocked;
}
+ public void setInversionConfig(boolean inversion) {
+ isInversionUnlocked = inversion;
+ }
+
public void setPowerTally(BigInteger amount) {
powerTally = amount;
}
@@ -315,6 +322,19 @@ public class MTEBaseModule extends TTMultiblockBase {
.setPos(75, 94)
.setSize(100, 10));
+ builder.widget(
+ new ButtonWidget().setOnClick(
+ (data, widget) -> {
+ if (!widget.isClient()) widget.getContext()
+ .openSyncedWindow(GENERAL_INFO_WINDOW_ID);
+ })
+ .setSize(18, 18)
+ .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.clickhere"))
+ .setPos(172, 67)
+ .setTooltipShowUpDelay(TOOLTIP_DELAY));
+
+ buildContext.addSyncedWindow(GENERAL_INFO_WINDOW_ID, this::createGeneralInfoWindow);
+
builder.widget(createPowerSwitchButton(builder))
.widget(createVoidExcessButton(builder))
.widget(createInputSeparationButton(builder))
@@ -393,6 +413,10 @@ public class MTEBaseModule extends TTMultiblockBase {
return builder.build();
}
+ protected ModularWindow createGeneralInfoWindow(final EntityPlayer player) {
+ return MTEForgeOfGods.createGeneralInfoWindow(() -> isInversionUnlocked, val -> isInversionUnlocked = val);
+ }
+
@Override
public void addGregTechLogo(ModularWindow.Builder builder) {
builder.widget(
diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEExoticModule.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEExoticModule.java
index 94c4c1b8fa..c09f497e62 100644
--- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEExoticModule.java
+++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEExoticModule.java
@@ -96,7 +96,7 @@ public class MTEExoticModule extends MTEBaseModule {
.disableRegisterNEI()
.build();
private static final int NUMBER_OF_INPUTS = 7;
- private static final int INPUT_LIST_WINDOW_ID = 10;
+ private static final int INPUT_LIST_WINDOW_ID = 11;
public MTEExoticModule(int aID, String aName, String aNameRegional) {
super(aID, aName, aNameRegional);
@@ -636,6 +636,11 @@ public class MTEExoticModule extends MTEBaseModule {
}
@Override
+ protected boolean filtersFluid() {
+ return false;
+ }
+
+ @Override
public MultiblockTooltipBuilder createTooltip() {
final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder();
tt.addMachineType("Exotic Matter Producer")
diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEMoltenModule.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEMoltenModule.java
index e9907a8626..3f42d34f0a 100644
--- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEMoltenModule.java
+++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEMoltenModule.java
@@ -59,6 +59,11 @@ public class MTEMoltenModule extends MTEBaseModule {
if (recipe.mSpecialValue > getHeat()) {
return CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue);
}
+
+ if (recipe.mEUt > getProcessingVoltage()) {
+ return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt);
+ }
+
wirelessEUt = (long) recipe.mEUt * getMaxParallel();
if (getUserEU(userUUID).compareTo(BigInteger.valueOf(wirelessEUt * recipe.mDuration)) < 0) {
return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration);
@@ -73,7 +78,7 @@ public class MTEMoltenModule extends MTEBaseModule {
.setRecipeHeat(recipe.mSpecialValue)
.setHeatOC(true)
.setHeatDiscount(true)
- .setMachineHeat(getHeatForOC())
+ .setMachineHeat(Math.max(recipe.mSpecialValue, getHeatForOC()))
.setHeatDiscountMultiplier(getHeatEnergyDiscount())
.setDurationDecreasePerOC(getOverclockTimeFactor());
diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTESmeltingModule.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTESmeltingModule.java
index 08d99bde8c..5f6bb2534d 100644
--- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTESmeltingModule.java
+++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTESmeltingModule.java
@@ -94,6 +94,10 @@ public class MTESmeltingModule extends MTEBaseModule {
return CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue);
}
+ if (recipe.mEUt > getProcessingVoltage()) {
+ return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt);
+ }
+
wirelessEUt = (long) recipe.mEUt * getMaxParallel();
if (getUserEU(userUUID).compareTo(BigInteger.valueOf(wirelessEUt * recipe.mDuration)) < 0) {
return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration);
@@ -126,7 +130,7 @@ public class MTESmeltingModule extends MTEBaseModule {
.setRecipeHeat(recipe.mSpecialValue)
.setHeatOC(true)
.setHeatDiscount(true)
- .setMachineHeat(getHeatForOC())
+ .setMachineHeat(Math.max(recipe.mSpecialValue, getHeatForOC()))
.setHeatDiscountMultiplier(getHeatEnergyDiscount())
.setDurationDecreasePerOC(getOverclockTimeFactor());
}