Skip to content

Commit

Permalink
Fusion rebalancing (GregTechCEu#2252)
Browse files Browse the repository at this point in the history
  • Loading branch information
serenibyss authored Dec 16, 2023
1 parent 2b989a3 commit 90820e6
Show file tree
Hide file tree
Showing 8 changed files with 75 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -651,8 +651,7 @@ protected int[] calculateOverclock(@NotNull Recipe recipe) {
* @param recipe the recipe to overclock
* @return an int array of {OverclockedEUt, OverclockedDuration}
*/
@NotNull
protected int[] performOverclocking(@NotNull Recipe recipe) {
protected int @NotNull [] performOverclocking(@NotNull Recipe recipe) {
int[] values = { recipe.getEUt(), recipe.getDuration(), getNumberOfOCs(recipe.getEUt()) };
modifyOverclockPre(values, recipe.getRecipePropertyStorage());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ protected boolean prepareRecipeDistinct(Recipe recipe) {
}

@Override
protected void modifyOverclockPre(@NotNull int[] values, @NotNull IRecipePropertyStorage storage) {
protected void modifyOverclockPre(int @NotNull [] values, @NotNull IRecipePropertyStorage storage) {
super.modifyOverclockPre(values, storage);

// apply maintenance bonuses
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import net.minecraft.client.resources.I18n;

import org.apache.commons.lang3.Validate;
import org.apache.commons.lang3.tuple.Pair;

import java.util.Map;
import java.util.TreeMap;
Expand All @@ -14,7 +15,7 @@ public class FusionEUToStartProperty extends RecipeProperty<Long> {

public static final String KEY = "eu_to_start";

private static final TreeMap<Long, String> registeredFusionTiers = new TreeMap<>();
private static final TreeMap<Long, Pair<Integer, String>> registeredFusionTiers = new TreeMap<>();

private static FusionEUToStartProperty INSTANCE;

Expand All @@ -33,23 +34,29 @@ public static FusionEUToStartProperty getInstance() {
@Override
public void drawInfo(Minecraft minecraft, int x, int y, int color, Object value) {
minecraft.fontRenderer.drawString(I18n.format("gregtech.recipe.eu_to_start",
TextFormattingUtil.formatLongToCompactString(castValue(value))) + getFusionTier(castValue(value)), x, y,
TextFormattingUtil.formatLongToCompactString(castValue(value))) + getFusionTierName(castValue(value)),
x, y,
color);
}

private static String getFusionTier(Long eu) {
Map.Entry<Long, String> mapEntry = registeredFusionTiers.ceilingEntry(eu);
private static String getFusionTierName(Long eu) {
Map.Entry<Long, Pair<Integer, String>> mapEntry = registeredFusionTiers.ceilingEntry(eu);

if (mapEntry == null) {
throw new IllegalArgumentException("Value is above registered maximum EU values");
}

return String.format(" %s", mapEntry.getValue());
return String.format(" %s", mapEntry.getValue().getRight());
}

public static int getFusionTier(Long eu) {
Map.Entry<Long, Pair<Integer, String>> mapEntry = registeredFusionTiers.ceilingEntry(eu);
return mapEntry == null ? 0 : mapEntry.getValue().getLeft();
}

public static void registerFusionTier(int tier, String shortName) {
Validate.notNull(shortName);
long maxEU = 16 * 10000000L * (long) Math.pow(2, tier - 6);
registeredFusionTiers.put(maxEU, shortName);
registeredFusionTiers.put(maxEU, Pair.of(tier, shortName));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public static void register() {
Americium = new Material.Builder(3, gregtechId("americium"))
.ingot(3)
.liquid(new FluidBuilder().temperature(1449))
.plasma()
.color(0x287869).iconSet(METALLIC)
.flags(EXT_METAL, GENERATE_FOIL, GENERATE_FINE_WIRE, GENERATE_DOUBLE_PLATE)
.element(Elements.Am)
Expand Down Expand Up @@ -814,6 +815,7 @@ public static void register() {
Tin = new Material.Builder(112, gregtechId("tin"))
.ingot(1)
.liquid(new FluidBuilder().temperature(505))
.plasma()
.ore()
.color(0xDCDCDC)
.flags(EXT2_METAL, MORTAR_GRINDABLE, GENERATE_ROTOR, GENERATE_SPRING, GENERATE_SPRING_SMALL,
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/gregtech/common/CommonProxy.java
Original file line number Diff line number Diff line change
Expand Up @@ -297,9 +297,9 @@ public static void initComponents(RegistryEvent.Register<IRecipe> event) {
@SubscribeEvent
public static void registerRecipes(RegistryEvent.Register<IRecipe> event) {
// Registers Fusion tiers for the FusionEUToStartProperty
FusionEUToStartProperty.registerFusionTier(6, "(MK1)");
FusionEUToStartProperty.registerFusionTier(7, "(MK2)");
FusionEUToStartProperty.registerFusionTier(8, "(MK3)");
FusionEUToStartProperty.registerFusionTier(GTValues.LuV, "(MK1)");
FusionEUToStartProperty.registerFusionTier(GTValues.ZPM, "(MK2)");
FusionEUToStartProperty.registerFusionTier(GTValues.UV, "(MK3)");

// Register data stick copying custom scanner logic
AssemblyLineManager.registerScannerLogic();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import gregtech.api.recipes.Recipe;
import gregtech.api.recipes.RecipeMaps;
import gregtech.api.recipes.recipeproperties.FusionEUToStartProperty;
import gregtech.api.recipes.recipeproperties.IRecipePropertyStorage;
import gregtech.api.util.RelativeDirection;
import gregtech.api.util.TextComponentUtil;
import gregtech.api.util.TextFormattingUtil;
Expand Down Expand Up @@ -630,6 +631,19 @@ public boolean checkRecipe(@NotNull Recipe recipe) {
return true;
}

@Override
protected void modifyOverclockPre(int @NotNull [] values, @NotNull IRecipePropertyStorage storage) {
super.modifyOverclockPre(values, storage);

// Limit the number of OCs to the difference in fusion reactor MK.
// I.e., a MK2 reactor can overclock a MK1 recipe once, and a
// MK3 reactor can overclock a MK2 recipe once, or a MK1 recipe twice.
long euToStart = storage.getRecipePropertyValue(FusionEUToStartProperty.getInstance(), 0L);
int fusionTier = FusionEUToStartProperty.getFusionTier(euToStart);
if (fusionTier != 0) fusionTier -= MetaTileEntityFusionReactor.this.tier;
values[2] = Math.min(fusionTier, values[2]);
}

@NotNull
@Override
public NBTTagCompound serializeNBT() {
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/gregtech/loaders/recipe/FuelRecipes.java
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,13 @@ public static void registerFuels() {
RecipeMaps.PLASMA_GENERATOR_FUELS.recipeBuilder()
.fluidInputs(Iron.getPlasma(1))
.fluidOutputs(Iron.getFluid(1))
.duration(112)
.EUt((int) V[EV])
.buildAndRegister();

RecipeMaps.PLASMA_GENERATOR_FUELS.recipeBuilder()
.fluidInputs(Tin.getPlasma(1))
.fluidOutputs(Tin.getFluid(1))
.duration(128)
.EUt((int) V[EV])
.buildAndRegister();
Expand All @@ -301,5 +308,12 @@ public static void registerFuels() {
.duration(192)
.EUt((int) V[EV])
.buildAndRegister();

RecipeMaps.PLASMA_GENERATOR_FUELS.recipeBuilder()
.fluidInputs(Americium.getPlasma(1))
.fluidOutputs(Americium.getFluid(1))
.duration(320)
.EUt((int) V[EV])
.buildAndRegister();
}
}
36 changes: 27 additions & 9 deletions src/main/java/gregtech/loaders/recipe/FusionLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,16 @@ public static void init() {
RecipeMaps.FUSION_RECIPES.recipeBuilder()
.fluidInputs(Materials.Silicon.getFluid(16))
.fluidInputs(Materials.Magnesium.getFluid(16))
.fluidOutputs(Materials.Iron.getPlasma(16))
.fluidOutputs(Materials.Iron.getPlasma(144))
.duration(32)
.EUt(VA[IV])
.EUToStart(360_000_000)
.EUToStart(300_000_000)
.buildAndRegister();

RecipeMaps.FUSION_RECIPES.recipeBuilder()
.fluidInputs(Materials.Potassium.getFluid(16))
.fluidInputs(Materials.Fluorine.getFluid(125))
.fluidOutputs(Materials.Nickel.getPlasma(16))
.fluidOutputs(Materials.Nickel.getPlasma(144))
.duration(16)
.EUt(VA[LuV])
.EUToStart(480_000_000)
Expand All @@ -62,6 +62,24 @@ public static void init() {
.EUToStart(180_000_000)
.buildAndRegister();

RecipeMaps.FUSION_RECIPES.recipeBuilder()
.fluidInputs(Materials.Plutonium241.getFluid(144))
.fluidInputs(Materials.Hydrogen.getFluid(2000))
.fluidOutputs(Materials.Americium.getPlasma(144))
.duration(64)
.EUt(98304)
.EUToStart(500_000_000)
.buildAndRegister();

RecipeMaps.FUSION_RECIPES.recipeBuilder()
.fluidInputs(Materials.Silver.getFluid(144))
.fluidInputs(Materials.Helium3.getFluid(375))
.fluidOutputs(Materials.Tin.getPlasma(144))
.duration(16)
.EUt(49152)
.EUToStart(280_000_000)
.buildAndRegister();

RecipeMaps.FUSION_RECIPES.recipeBuilder()
.fluidInputs(Materials.Neodymium.getFluid(16))
.fluidInputs(Materials.Hydrogen.getFluid(375))
Expand All @@ -72,9 +90,9 @@ public static void init() {
.buildAndRegister();

RecipeMaps.FUSION_RECIPES.recipeBuilder()
.fluidInputs(Materials.Lutetium.getFluid(32))
.fluidInputs(Materials.Chrome.getFluid(32))
.fluidOutputs(Materials.Americium.getFluid(32))
.fluidInputs(Materials.Lutetium.getFluid(16))
.fluidInputs(Materials.Chrome.getFluid(16))
.fluidOutputs(Materials.Americium.getFluid(16))
.duration(64)
.EUt(49152)
.EUToStart(200_000_000)
Expand Down Expand Up @@ -147,16 +165,16 @@ public static void init() {
.fluidInputs(Materials.Gallium.getFluid(16))
.fluidInputs(Materials.Radon.getFluid(125))
.fluidOutputs(Materials.Duranium.getFluid(16))
.duration(64)
.duration(32)
.EUt(16384)
.EUToStart(140_000_000)
.buildAndRegister();

RecipeMaps.FUSION_RECIPES.recipeBuilder()
.fluidInputs(Materials.Titanium.getFluid(32))
.fluidInputs(Materials.Titanium.getFluid(48))
.fluidInputs(Materials.Duranium.getFluid(32))
.fluidOutputs(Materials.Tritanium.getFluid(16))
.duration(64)
.duration(16)
.EUt(VA[LuV])
.EUToStart(200_000_000)
.buildAndRegister();
Expand Down

0 comments on commit 90820e6

Please sign in to comment.