aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/tectech
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/tectech')
-rw-r--r--src/main/java/tectech/loader/recipe/BaseRecipeLoader.java2
-rw-r--r--src/main/java/tectech/loader/recipe/Godforge.java33
-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
-rw-r--r--src/main/java/tectech/util/GodforgeMath.java9
-rw-r--r--src/main/java/tectech/util/TTUtility.java7
12 files changed, 826 insertions, 271 deletions
diff --git a/src/main/java/tectech/loader/recipe/BaseRecipeLoader.java b/src/main/java/tectech/loader/recipe/BaseRecipeLoader.java
index 9e08460fb6..180e8514f4 100644
--- a/src/main/java/tectech/loader/recipe/BaseRecipeLoader.java
+++ b/src/main/java/tectech/loader/recipe/BaseRecipeLoader.java
@@ -43,6 +43,8 @@ public class BaseRecipeLoader {
new Extractor().run();
new ResearchStationAssemblyLine().run();
new Godforge().run();
+ } else {
+ Godforge.runDevEnvironmentRecipes();
}
}
}
diff --git a/src/main/java/tectech/loader/recipe/Godforge.java b/src/main/java/tectech/loader/recipe/Godforge.java
index 414756a036..30e3a37f2c 100644
--- a/src/main/java/tectech/loader/recipe/Godforge.java
+++ b/src/main/java/tectech/loader/recipe/Godforge.java
@@ -20,6 +20,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
+import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
@@ -301,8 +302,9 @@ public class Godforge implements Runnable {
// Single step
ItemStack[] solids_t2_1step = { MaterialsElements.STANDALONE.RHUGNOR.getDust(1),
MaterialsElements.STANDALONE.DRAGON_METAL.getDust(1),
- MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getDust(1), Materials.CosmicNeutronium.getDust(1),
- Materials.Draconium.getDust(1), Materials.DraconiumAwakened.getDust(1), Materials.Ichorium.getDust(1) };
+ MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getDust(1), Materials.Bedrockium.getDust(1),
+ Materials.CosmicNeutronium.getDust(1), Materials.Draconium.getDust(1),
+ Materials.DraconiumAwakened.getDust(1), Materials.Ichorium.getDust(1), };
FluidStack[] molten_t2_1step = convertToFluid(solids_t2_1step);
@@ -310,8 +312,9 @@ public class Godforge implements Runnable {
new FluidStack(MaterialsElements.STANDALONE.RHUGNOR.getPlasma(), 144),
new FluidStack(MaterialsElements.STANDALONE.DRAGON_METAL.getPlasma(), 144),
new FluidStack(MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getPlasma(), 144),
- Materials.CosmicNeutronium.getPlasma(144), Materials.Draconium.getPlasma(144),
- Materials.DraconiumAwakened.getPlasma(144), Materials.Ichorium.getPlasma(144) };
+ Materials.Bedrockium.getPlasma(144), Materials.CosmicNeutronium.getPlasma(144),
+ Materials.Draconium.getPlasma(144), Materials.DraconiumAwakened.getPlasma(144),
+ Materials.Ichorium.getPlasma(144), };
for (int i = 0; i < solids_t2_1step.length; i++) {
GTValues.RA.stdBuilder()
@@ -340,14 +343,16 @@ public class Godforge implements Runnable {
// Multi-step
ItemStack[] solids_t2_xstep = { MaterialsElements.STANDALONE.HYPOGEN.getDust(1),
- Materials.Tritanium.getDust(1), Materials.Flerovium.getDust(1), Materials.Neutronium.getDust(1) };
+ Materials.Tritanium.getDust(1), Materials.Flerovium.getDust(1), Materials.Neutronium.getDust(1),
+ Materials.Infinity.getDust(1), MaterialsUEVplus.SixPhasedCopper.getDust(1), };
FluidStack[] molten_t2_xstep = convertToFluid(solids_t2_xstep);
FluidStack[] solid_plasmas_t2_xstep = {
new FluidStack(MaterialsElements.STANDALONE.HYPOGEN.getPlasma(), 144),
Materials.Tritanium.getPlasma(144), Materials.Flerovium.getPlasma(144),
- Materials.Neutronium.getPlasma(144), };
+ Materials.Neutronium.getPlasma(144), Materials.Infinity.getPlasma(144),
+ MaterialsUEVplus.SixPhasedCopper.getPlasma(144), };
for (int i = 0; i < solids_t2_xstep.length; i++) {
GTValues.RA.stdBuilder()
@@ -459,7 +464,7 @@ public class Godforge implements Runnable {
GTValues.RA.stdBuilder()
.itemInputs(Materials.Iron.getDust(1))
.fluidInputs(Materials.Iron.getMolten(1), Materials.Bismuth.getMolten(1))
- .fluidOutputs(MaterialsUEVplus.MagMatter.getMolten(144))
+ .fluidOutputs(MaterialsUEVplus.MagMatter.getMolten(576))
.duration(10 * SECONDS)
.eut(TierEU.RECIPE_MAX)
.metadata(FOG_EXOTIC_TIER, 1)
@@ -653,6 +658,9 @@ public class Godforge implements Runnable {
exoticModuleMagmatterItemMap.put(Materials.Ichorium.getDustTiny(1), 100000);
exoticModuleMagmatterItemMap.put(Materials.Neutronium.getDustTiny(1), 100000);
exoticModuleMagmatterItemMap.put(Materials.Flerovium.getDustTiny(1), 100000);
+ exoticModuleMagmatterItemMap.put(Materials.Bedrockium.getDustTiny(1), 100000);
+ exoticModuleMagmatterItemMap.put(Materials.Infinity.getDustTiny(1), 100000);
+ exoticModuleMagmatterItemMap.put(MaterialsUEVplus.SixPhasedCopper.getDustTiny(1), 100000);
// GT++ materials
exoticModuleMagmatterItemMap.put(MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN.getTinyDust(1), 100000);
@@ -748,6 +756,17 @@ public class Godforge implements Runnable {
}
+ public static void runDevEnvironmentRecipes() {
+ // put something in here to not crash the game in dev environment when opening the manual insertion window
+ godforgeUpgradeMats.put(0, new ItemStack[] { new ItemStack(Blocks.cobblestone) });
+ godforgeUpgradeMats.put(5, new ItemStack[] { new ItemStack(Blocks.cobblestone) });
+ godforgeUpgradeMats.put(7, new ItemStack[] { new ItemStack(Blocks.cobblestone) });
+ godforgeUpgradeMats.put(11, new ItemStack[] { new ItemStack(Blocks.cobblestone) });
+ godforgeUpgradeMats.put(26, new ItemStack[] { new ItemStack(Blocks.cobblestone) });
+ godforgeUpgradeMats.put(29, new ItemStack[] { new ItemStack(Blocks.cobblestone) });
+ godforgeUpgradeMats.put(30, new ItemStack[] { new ItemStack(Blocks.cobblestone) });
+ }
+
public static void initMoltenModuleRecipes() {
for (GTRecipe recipe : RecipeMaps.blastFurnaceRecipes.getAllRecipes()) {
List<ItemStack> itemOutputs = new ArrayList<>(1);
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)]) {