diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index a241b32b3a0..cc2ce878aee 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -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()); diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index 3917d4a7bda..1ebb3e73c82 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -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 diff --git a/src/main/java/gregtech/api/recipes/recipeproperties/FusionEUToStartProperty.java b/src/main/java/gregtech/api/recipes/recipeproperties/FusionEUToStartProperty.java index 12fd90e7748..60188d8cd5f 100644 --- a/src/main/java/gregtech/api/recipes/recipeproperties/FusionEUToStartProperty.java +++ b/src/main/java/gregtech/api/recipes/recipeproperties/FusionEUToStartProperty.java @@ -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; @@ -14,7 +15,7 @@ public class FusionEUToStartProperty extends RecipeProperty { public static final String KEY = "eu_to_start"; - private static final TreeMap registeredFusionTiers = new TreeMap<>(); + private static final TreeMap> registeredFusionTiers = new TreeMap<>(); private static FusionEUToStartProperty INSTANCE; @@ -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 mapEntry = registeredFusionTiers.ceilingEntry(eu); + private static String getFusionTierName(Long eu) { + Map.Entry> 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> 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)); } } diff --git a/src/main/java/gregtech/api/unification/material/materials/ElementMaterials.java b/src/main/java/gregtech/api/unification/material/materials/ElementMaterials.java index 37c745dc5c5..8d4af1f4fa7 100644 --- a/src/main/java/gregtech/api/unification/material/materials/ElementMaterials.java +++ b/src/main/java/gregtech/api/unification/material/materials/ElementMaterials.java @@ -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) @@ -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, diff --git a/src/main/java/gregtech/common/CommonProxy.java b/src/main/java/gregtech/common/CommonProxy.java index 7cac0f93204..f8a956e201b 100644 --- a/src/main/java/gregtech/common/CommonProxy.java +++ b/src/main/java/gregtech/common/CommonProxy.java @@ -297,9 +297,9 @@ public static void initComponents(RegistryEvent.Register event) { @SubscribeEvent public static void registerRecipes(RegistryEvent.Register 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(); diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityFusionReactor.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityFusionReactor.java index 8e667bedfcb..90b8b70886c 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityFusionReactor.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityFusionReactor.java @@ -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; @@ -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() { diff --git a/src/main/java/gregtech/loaders/recipe/FuelRecipes.java b/src/main/java/gregtech/loaders/recipe/FuelRecipes.java index 94da5ecb799..740521e8657 100644 --- a/src/main/java/gregtech/loaders/recipe/FuelRecipes.java +++ b/src/main/java/gregtech/loaders/recipe/FuelRecipes.java @@ -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(); @@ -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(); } } diff --git a/src/main/java/gregtech/loaders/recipe/FusionLoader.java b/src/main/java/gregtech/loaders/recipe/FusionLoader.java index f5ec3a7b861..49515136876 100644 --- a/src/main/java/gregtech/loaders/recipe/FusionLoader.java +++ b/src/main/java/gregtech/loaders/recipe/FusionLoader.java @@ -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) @@ -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)) @@ -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) @@ -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();