Skip to content

Commit 0f67400

Browse files
committed
Fix DEDA Recipe Logic
1 parent 0f8e354 commit 0f67400

19 files changed

Lines changed: 163 additions & 200 deletions

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,7 @@ dependencies {
562562

563563
compileOnlyApi 'org.jetbrains:annotations:24.1.0'
564564
annotationProcessor 'org.jetbrains:annotations:24.1.0'
565-
patchedMinecraft('net.minecraft:launchwrapper:1.17.2') {
565+
patchedMinecraft('net.minecraft:launchwrapper:1.12') {
566566
transitive = false
567567
}
568568

libs/launchwrapper-1.17.2.jar

-30.4 KB
Binary file not shown.

src/main/java/com/github/gtexpert/core/integration/ae/recipes/AEItemsRecipe.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -543,31 +543,31 @@ public static void init() {
543543
.notConsumable(GTEMetaItems.SHAPE_MOLD_PRINTED_SILICON.getStackForm())
544544
.fluidInputs(Materials.Silicon.getFluid(144))
545545
.outputs(Mods.AppliedEnergistics2.getItem("material", 1, 20))
546-
.duration(200).EUt(VA[GTEValues.ae2VoltageTier - 1])
546+
.duration(200).EUt(VA[GTEValues.ae2VoltageTier])
547547
.buildAndRegister();
548548

549549
// Logic Circuit
550550
RecipeMaps.FLUID_SOLIDFICATION_RECIPES.recipeBuilder()
551551
.notConsumable(GTEMetaItems.SHAPE_MOLD_LOGIC_PROCESSOR.getStackForm())
552552
.fluidInputs(Materials.Gold.getFluid(144))
553553
.outputs(Mods.AppliedEnergistics2.getItem("material", 1, 18))
554-
.duration(200).EUt(VA[GTEValues.ae2VoltageTier - 1])
554+
.duration(200).EUt(VA[GTEValues.ae2VoltageTier])
555555
.buildAndRegister();
556556

557557
// Calc Circuit
558558
RecipeMaps.FLUID_SOLIDFICATION_RECIPES.recipeBuilder()
559559
.notConsumable(GTEMetaItems.SHAPE_MOLD_CALCULATION_PROCESSOR.getStackForm())
560560
.fluidInputs(Materials.CertusQuartz.getFluid(144))
561561
.outputs(Mods.AppliedEnergistics2.getItem("material", 1, 16))
562-
.duration(200).EUt(VA[GTEValues.ae2VoltageTier - 1])
562+
.duration(200).EUt(VA[GTEValues.ae2VoltageTier])
563563
.buildAndRegister();
564564

565565
// Engineer Circuit
566566
RecipeMaps.FLUID_SOLIDFICATION_RECIPES.recipeBuilder()
567567
.notConsumable(GTEMetaItems.SHAPE_MOLD_ENGINEERING_PROCESSOR.getStackForm())
568568
.fluidInputs(Materials.Diamond.getFluid(144))
569569
.outputs(Mods.AppliedEnergistics2.getItem("material", 1, 17))
570-
.duration(200).EUt(VA[GTEValues.ae2VoltageTier - 1])
570+
.duration(200).EUt(VA[GTEValues.ae2VoltageTier])
571571
.buildAndRegister();
572572
} else {
573573
// Silicon Processor Press

src/main/java/com/github/gtexpert/core/integration/deda/DEDAConstants.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
package com.github.gtexpert.core.integration.deda;
22

3+
import static gregtech.api.GTValues.VA;
4+
5+
import net.minecraft.item.ItemStack;
36
import net.minecraftforge.fluids.FluidStack;
47

8+
import gregtech.api.recipes.ingredients.GTRecipeInput;
9+
import gregtech.api.recipes.ingredients.GTRecipeItemInput;
10+
import gregtech.api.recipes.ingredients.nbtmatch.NBTCondition;
11+
import gregtech.api.recipes.ingredients.nbtmatch.NBTMatcher;
12+
513
import gregicality.multiblocks.api.fluids.GCYMFluidStorageKeys;
614

15+
import com.github.gtexpert.core.api.GTEValues;
716
import com.github.gtexpert.core.api.unification.material.GTEMaterials;
817

918
/**
@@ -22,6 +31,10 @@ private DEDAConstants() {}
2231
public static final int DURATION_DRACONIC = 400;
2332
public static final int DURATION_CHAOTIC = 600;
2433

34+
public static int voltage(DraconicTier tier) {
35+
return VA[GTEValues.dedaVoltageTier + tier.voltageOffset];
36+
}
37+
2538
public static FluidStack getCryotheum(DraconicTier tier) {
2639
return switch (tier) {
2740
case WYVERN -> GTEMaterials.Cryotheum.getFluid(16000);
@@ -38,6 +51,10 @@ public static FluidStack getPyrotheum(DraconicTier tier) {
3851
};
3952
}
4053

54+
public static GTRecipeInput inputWithAnyNBT(ItemStack stack) {
55+
return new GTRecipeItemInput(stack).setNBTMatchingCondition(NBTMatcher.ANY, NBTCondition.ANY);
56+
}
57+
4158
/**
4259
* Draconic Evolution tool/armor tiers.
4360
*/

src/main/java/com/github/gtexpert/core/integration/deda/DEDARecipeHelper.java

Lines changed: 0 additions & 38 deletions
This file was deleted.

src/main/java/com/github/gtexpert/core/integration/deda/provider/DEDAJEIProvider.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,17 @@ public void register(@NotNull IModRegistry registry) {
2222
// Fusion categories
2323
String draconiumFusionCategory = GTValues.MODID + ":" +
2424
GTEDraconicRecipeMaps.DRACONIUM_FUSION_RECIPES.unlocalizedName;
25-
String awakenedFusionCategory = GTValues.MODID + ":" +
26-
GTEDraconicRecipeMaps.AWAKENED_DRACONIUM_FUSION_RECIPES.unlocalizedName;
2725

2826
// Shared categories
2927
String tierUpCategory = GTValues.MODID + ":" +
3028
GTEDraconicRecipeMaps.DRACONIC_FUSION_TIER_UP_RECIPES.unlocalizedName;
3129
String upgradeCategory = GTValues.MODID + ":" +
3230
GTEDraconicRecipeMaps.DRACONIC_FUSION_UPGRADE_RECIPES.unlocalizedName;
3331

34-
// Register Fusion categories
35-
registry.addRecipeCatalyst(DEDAMetaTileEntities.DRACONIUM_FUSION.getStackForm(),
36-
draconiumFusionCategory);
32+
// Tier II can also process Tier I Fusion recipes
33+
// (own RecipeMap catalysts are auto-registered by CEu)
3734
registry.addRecipeCatalyst(DEDAMetaTileEntities.AWAKENED_DRACONIUM_FUSION.getStackForm(),
38-
awakenedFusionCategory);
35+
draconiumFusionCategory);
3936

4037
// Register TierUp category
4138
registry.addRecipeCatalyst(DEDAMetaTileEntities.DRACONIUM_FUSION.getStackForm(), tierUpCategory);
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.github.gtexpert.core.integration.deda.recipemaps;
2+
3+
import com.brandon3055.draconicevolution.api.fusioncrafting.IFusionRecipe;
4+
import com.github.bsideup.jabel.Desugar;
5+
6+
/**
7+
* Wrapper for draconic recipe info including the original Draconic Evolution recipe
8+
* and machine tier requirement. Used by both TierUp and Upgrade recipes.
9+
*/
10+
@Desugar
11+
public record DraconicRecipeInfo(IFusionRecipe recipe, boolean requiresAwakenedCrafter) {}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.github.gtexpert.core.integration.deda.recipemaps;
2+
3+
import net.minecraft.client.Minecraft;
4+
import net.minecraft.client.resources.I18n;
5+
6+
import gregtech.api.recipes.recipeproperties.RecipeProperty;
7+
8+
public class DraconicRecipeProperty extends RecipeProperty<DraconicRecipeInfo> {
9+
10+
public static final String TIER_UP_KEY = "draconic_fusion_tier_up";
11+
public static final String UPGRADE_KEY = "draconic_fusion_upgrade";
12+
13+
private static DraconicRecipeProperty TIER_UP_INSTANCE;
14+
private static DraconicRecipeProperty UPGRADE_INSTANCE;
15+
16+
private final String langKeyPrefix;
17+
18+
private DraconicRecipeProperty(String key, String langKeyPrefix) {
19+
super(key, DraconicRecipeInfo.class);
20+
this.langKeyPrefix = langKeyPrefix;
21+
}
22+
23+
public static DraconicRecipeProperty getTierUpInstance() {
24+
if (TIER_UP_INSTANCE == null) {
25+
TIER_UP_INSTANCE = new DraconicRecipeProperty(TIER_UP_KEY, "recipemap.draconic_fusion_tier_up");
26+
}
27+
return TIER_UP_INSTANCE;
28+
}
29+
30+
public static DraconicRecipeProperty getUpgradeInstance() {
31+
if (UPGRADE_INSTANCE == null) {
32+
UPGRADE_INSTANCE = new DraconicRecipeProperty(UPGRADE_KEY, "recipemap.draconic_fusion_upgrade");
33+
}
34+
return UPGRADE_INSTANCE;
35+
}
36+
37+
@Override
38+
public void drawInfo(Minecraft minecraft, int x, int y, int color, Object value) {
39+
DraconicRecipeInfo info = castValue(value);
40+
String crafterKey = info.requiresAwakenedCrafter() ?
41+
"recipemap.draconic_fusion.crafter.awakened" :
42+
"recipemap.draconic_fusion.crafter.draconium";
43+
// Draw 3 lines: crafter tier, property line 1, property line 2
44+
// Compensate for getInfoHeight=30 by drawing at y-20, y-10, y
45+
minecraft.fontRenderer.drawString(I18n.format(crafterKey), x, y - 20, color);
46+
minecraft.fontRenderer.drawString(I18n.format(langKeyPrefix + ".property.1"), x, y - 10, color);
47+
minecraft.fontRenderer.drawString(I18n.format(langKeyPrefix + ".property.2"), x, y, color);
48+
}
49+
50+
@Override
51+
public int getInfoHeight(Object value) {
52+
return 30;
53+
}
54+
}

src/main/java/com/github/gtexpert/core/integration/deda/recipemaps/GTEDraconicRecipeMaps.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public class GTEDraconicRecipeMaps {
3333
@ZenProperty
3434
public static final RecipeMap<SimpleRecipeBuilder> AWAKENED_DRACONIUM_FUSION_RECIPES = new RecipeMapDraconicFusion(
3535
"awakened_draconium_fusion", 6, 3, 3, 1, new SimpleRecipeBuilder(), false,
36-
DRACONIC_FUSION_TIER_UP_RECIPES, DRACONIC_FUSION_UPGRADE_RECIPES);
36+
DRACONIC_FUSION_TIER_UP_RECIPES, DRACONIC_FUSION_UPGRADE_RECIPES,
37+
(RecipeMapDraconicFusion) DRACONIUM_FUSION_RECIPES);
3738

3839
static {
3940
DRACONIC_FUSION_TIER_UP_RECIPES

src/main/java/com/github/gtexpert/core/integration/deda/recipemaps/RecipeMapDraconicFusion.java

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,27 @@ public class RecipeMapDraconicFusion extends RecipeMap<SimpleRecipeBuilder> {
2222

2323
private final RecipeMapDraconicTierUp tierUpRecipeMap;
2424
private final RecipeMapDraconicUpgrade upgradeRecipeMap;
25+
private final @Nullable RecipeMapDraconicFusion lowerTierMap;
2526

2627
public RecipeMapDraconicFusion(@NotNull String unlocalizedName, int maxInputs, int maxOutputs, int maxFluidInputs,
2728
int maxFluidOutputs, @NotNull SimpleRecipeBuilder defaultRecipeBuilder,
2829
boolean isHidden,
2930
RecipeMapDraconicTierUp tierUpRecipeMap,
3031
RecipeMapDraconicUpgrade upgradeRecipeMap) {
32+
this(unlocalizedName, maxInputs, maxOutputs, maxFluidInputs, maxFluidOutputs, defaultRecipeBuilder, isHidden,
33+
tierUpRecipeMap, upgradeRecipeMap, null);
34+
}
35+
36+
public RecipeMapDraconicFusion(@NotNull String unlocalizedName, int maxInputs, int maxOutputs, int maxFluidInputs,
37+
int maxFluidOutputs, @NotNull SimpleRecipeBuilder defaultRecipeBuilder,
38+
boolean isHidden,
39+
RecipeMapDraconicTierUp tierUpRecipeMap,
40+
RecipeMapDraconicUpgrade upgradeRecipeMap,
41+
@Nullable RecipeMapDraconicFusion lowerTierMap) {
3142
super(unlocalizedName, maxInputs, maxOutputs, maxFluidInputs, maxFluidOutputs, defaultRecipeBuilder, isHidden);
3243
this.tierUpRecipeMap = tierUpRecipeMap;
3344
this.upgradeRecipeMap = upgradeRecipeMap;
45+
this.lowerTierMap = lowerTierMap;
3446
}
3547

3648
@Nullable
@@ -42,13 +54,29 @@ public Recipe findRecipe(long voltage, List<ItemStack> inputs, List<FluidStack>
4254
return fusionRecipe;
4355
}
4456

45-
// 2. Check TierUp recipes
57+
// 2. Check lower-tier Fusion recipes
58+
if (lowerTierMap != null) {
59+
Recipe lowerTierRecipe = lowerTierMap.findOwnRecipe(voltage, inputs, fluidInputs, exactVoltage);
60+
if (lowerTierRecipe != null) {
61+
return lowerTierRecipe;
62+
}
63+
}
64+
65+
// 3. Check TierUp recipes
4666
Recipe tierUpRecipe = tierUpRecipeMap.findRecipe(voltage, inputs, fluidInputs, exactVoltage);
4767
if (tierUpRecipe != null) {
4868
return tierUpRecipe;
4969
}
5070

51-
// 3. Check Upgrade recipes
71+
// 4. Check Upgrade recipes
5272
return upgradeRecipeMap.findRecipe(voltage, inputs, fluidInputs, exactVoltage);
5373
}
74+
75+
/**
76+
* Searches only this map's own recipes, without delegating to TierUp/Upgrade/lowerTier.
77+
*/
78+
@Nullable
79+
Recipe findOwnRecipe(long voltage, List<ItemStack> inputs, List<FluidStack> fluidInputs, boolean exactVoltage) {
80+
return super.findRecipe(voltage, inputs, fluidInputs, exactVoltage);
81+
}
5482
}

0 commit comments

Comments
 (0)