Skip to content

Commit 28233cc

Browse files
committed
Add NCO chemical reactor RecipeAdapter support; Now supports the use of ZenScript to implement RecipeAdapter feature; ParallelController configuration dest change.
1 parent 6b0a2ad commit 28233cc

20 files changed

+341
-66
lines changed

src/main/java/hellfirepvp/modularmachinery/common/block/prop/ParallelControllerData.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ public enum ParallelControllerData implements IStringSerializable {
2121

2222
public static void loadFromConfig(Configuration cfg) {
2323
for (ParallelControllerData data : values()) {
24-
data.maxParallelism = cfg.getInt("controller-" + data.getName() + "-max-parallelism", "parallel-controller",
24+
data.maxParallelism = cfg.getInt("max-parallelism", "parallel-controller." + data.getName(),
2525
data.defaultMaxParallelism, 1, Integer.MAX_VALUE,
26-
"Defines the max parallelism for the data-type of parallel controller.");
26+
"Defines the max parallelism for the parallel controller.");
2727
}
2828
}
2929

src/main/java/hellfirepvp/modularmachinery/common/crafting/MachineRecipe.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,30 @@ public MachineRecipe(String path, ResourceLocation registryName, ResourceLocatio
8989
this.tooltipList = tooltipList;
9090
}
9191

92+
public MachineRecipe(PreparedRecipe preparedRecipe) {
93+
this.sortId = counter;
94+
counter++;
95+
this.recipeFilePath = preparedRecipe.getFilePath();
96+
this.registryName = preparedRecipe.getRecipeRegistryName();
97+
this.owningMachine = preparedRecipe.getAssociatedMachineName();
98+
this.tickTime = preparedRecipe.getTotalProcessingTickTime();
99+
this.configuredPriority = preparedRecipe.getPriority();
100+
this.voidPerTickFailure = preparedRecipe.voidPerTickFailure();
101+
this.isParallelized = preparedRecipe.isParallelized();
102+
this.recipeEventHandlers = preparedRecipe.getRecipeEventHandlers();
103+
this.tooltipList = preparedRecipe.getTooltipList();
104+
}
105+
106+
public void addTooltip(String tooltip) {
107+
tooltipList.add(tooltip);
108+
}
109+
92110
public List<String> getTooltipList() {
93111
return tooltipList;
94112
}
95113

96114
@SuppressWarnings("unchecked")
97-
public <H extends RecipeEvent> void addRecipeEventHandler(Class<H> hClass, IEventHandler<H> handler) {
115+
public <H extends RecipeEvent> void addRecipeEventHandler(Class<?> hClass, IEventHandler<H> handler) {
98116
recipeEventHandlers.putIfAbsent(hClass, new ArrayList<>());
99117
recipeEventHandlers.get(hClass).add((IEventHandler<RecipeEvent>) handler);
100118
}

src/main/java/hellfirepvp/modularmachinery/common/crafting/PreparedRecipe.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public interface PreparedRecipe {
3030
ResourceLocation getRecipeRegistryName();
3131

3232
ResourceLocation getAssociatedMachineName();
33+
ResourceLocation getParentMachineName();
3334

3435
int getTotalProcessingTickTime();
3536

src/main/java/hellfirepvp/modularmachinery/common/crafting/RecipeLoader.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import hellfirepvp.modularmachinery.common.crafting.adapter.RecipeAdapterAccessor;
1616
import hellfirepvp.modularmachinery.common.crafting.command.RecipeRunnableCommand;
1717
import hellfirepvp.modularmachinery.common.crafting.helper.ComponentRequirement;
18+
import hellfirepvp.modularmachinery.common.integration.crafttweaker.RecipeAdapterBuilder;
1819
import hellfirepvp.modularmachinery.common.modifier.RecipeModifier;
1920
import net.minecraft.util.JsonUtils;
2021

@@ -32,15 +33,15 @@
3233
* Date: 27.06.2017 / 23:23
3334
*/
3435
public class RecipeLoader {
35-
36-
public static final List<RecipeAdapterAccessor> recipeAdapters = new LinkedList<>();
36+
public static final List<RecipeAdapterAccessor> RECIPE_ADAPTER_ACCESSORS = new LinkedList<>();
3737
private static final Gson GSON = new GsonBuilder()
3838
.registerTypeHierarchyAdapter(MachineRecipe.MachineRecipeContainer.class, new MachineRecipe.Deserializer())
3939
.registerTypeHierarchyAdapter(ComponentRequirement.class, new MachineRecipe.ComponentDeserializer())
4040
.registerTypeHierarchyAdapter(RecipeAdapterAccessor.class, new RecipeAdapterAccessor.Deserializer())
4141
.registerTypeHierarchyAdapter(RecipeModifier.class, new RecipeModifier.Deserializer())
4242
.registerTypeHierarchyAdapter(RecipeRunnableCommand.class, new RecipeRunnableCommand.Deserializer())
4343
.create();
44+
4445
public static String currentlyReadingPath = null;
4546
private static Map<String, Exception> failedAttempts = new HashMap<>();
4647

@@ -69,7 +70,7 @@ public static Map<FileType, List<File>> discoverDirectory(File directory) {
6970
}
7071

7172
public static List<MachineRecipe> loadRecipes(List<File> recipeCandidates, List<PreparedRecipe> preparedRecipes) {
72-
recipeAdapters.clear();
73+
RECIPE_ADAPTER_ACCESSORS.clear();
7374

7475
List<MachineRecipe> loadedRecipes = Lists.newArrayList();
7576
for (File f : recipeCandidates) {
@@ -90,7 +91,7 @@ public static List<MachineRecipe> loadRecipes(List<File> recipeCandidates, List<
9091
return loadedRecipes;
9192
}
9293

93-
public static List<MachineRecipe> loadAdapterRecipes(List<File> adapterCandidates) {
94+
public static List<MachineRecipe> loadAdapterRecipes(List<File> adapterCandidates, List<RecipeAdapterBuilder> adapterBuilders) {
9495
List<MachineRecipe> loadedRecipes = Lists.newArrayList();
9596
for (File f : adapterCandidates) {
9697
try (InputStreamReader isr = new InputStreamReader(Files.newInputStream(f.toPath()), StandardCharsets.UTF_8)) {
@@ -101,19 +102,26 @@ public static List<MachineRecipe> loadAdapterRecipes(List<File> adapterCandidate
101102
} else {
102103
loadedRecipes.addAll(recipes);
103104
}
104-
recipeAdapters.add(accessor);
105+
RECIPE_ADAPTER_ACCESSORS.add(accessor);
105106
} catch (Exception exc) {
106107
failedAttempts.put(f.getPath(), exc);
107108
}
108109
}
110+
for (RecipeAdapterBuilder builder : adapterBuilders) {
111+
RecipeAdapterAccessor accessor = new RecipeAdapterAccessor(builder);
112+
Collection<MachineRecipe> recipes = accessor.loadRecipesForAdapter();
113+
if (recipes.isEmpty()) {
114+
ModularMachinery.log.warn("Adapter with name " + accessor.getAdapterKey().toString() + " didn't provide have any recipes!");
115+
} else {
116+
loadedRecipes.addAll(recipes);
117+
}
118+
RECIPE_ADAPTER_ACCESSORS.add(accessor);
119+
}
109120
return loadedRecipes;
110121
}
111122

112123
private static MachineRecipe convertPreparedRecipe(PreparedRecipe recipe) {
113-
MachineRecipe mr = new MachineRecipe(recipe.getFilePath(),
114-
recipe.getRecipeRegistryName(), recipe.getAssociatedMachineName(),
115-
recipe.getTotalProcessingTickTime(), recipe.getPriority(), recipe.voidPerTickFailure(),
116-
recipe.isParallelized(), recipe.getRecipeEventHandlers(), recipe.getTooltipList());
124+
MachineRecipe mr = new MachineRecipe(recipe);
117125
recipe.getComponents().forEach(mr::addRequirement);
118126
return mr;
119127
}

src/main/java/hellfirepvp/modularmachinery/common/crafting/RecipeRegistry.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import hellfirepvp.modularmachinery.common.CommonProxy;
1515
import hellfirepvp.modularmachinery.common.crafting.adapter.RecipeAdapterAccessor;
1616
import hellfirepvp.modularmachinery.common.data.DataLoadProfiler;
17+
import hellfirepvp.modularmachinery.common.integration.crafttweaker.RecipeAdapterBuilder;
1718
import hellfirepvp.modularmachinery.common.machine.DynamicMachine;
1819
import net.minecraft.entity.player.EntityPlayer;
1920
import net.minecraft.util.ResourceLocation;
@@ -39,6 +40,7 @@ public class RecipeRegistry {
3940
private static final Map<ResourceLocation, MachineRecipe> RECIPE_REGISTRY = new HashMap<>();
4041

4142
private final List<PreparedRecipe> earlyRecipes = new LinkedList<>();
43+
private final List<RecipeAdapterBuilder> earlyRecipeAdapters = new LinkedList<>();
4244

4345
private RecipeRegistry() {
4446
}
@@ -61,15 +63,17 @@ public static MachineRecipe getRecipe(ResourceLocation key) {
6163
return RECIPE_REGISTRY.get(key);
6264
}
6365

64-
private static Map<DynamicMachine, List<MachineRecipe>> loadAdapters(@Nullable EntityPlayer player, Map<ResourceLocation, MachineRecipe> sharedLoadRegistry) {
66+
private static Map<DynamicMachine, List<MachineRecipe>> loadAdapters(@Nullable EntityPlayer player,
67+
Map<ResourceLocation, MachineRecipe> sharedLoadRegistry,
68+
List<RecipeAdapterBuilder> earlyRecipeAdapters) {
6569
ProgressManager.ProgressBar barRecipes = ProgressManager.push("RecipeRegistry - Adapters", 3);
6670
barRecipes.step("Discovering Adapter-Files");
6771
DataLoadProfiler profiler = new DataLoadProfiler();
6872

6973
Map<RecipeLoader.FileType, List<File>> potentialRecipes = RecipeLoader.discoverDirectory(CommonProxy.dataHolder.getRecipeDirectory());
7074
barRecipes.step("Loading Adapters");
7175

72-
List<MachineRecipe> recipes = RecipeLoader.loadAdapterRecipes(potentialRecipes.getOrDefault(RecipeLoader.FileType.ADAPTER, Lists.newArrayList()));
76+
List<MachineRecipe> recipes = RecipeLoader.loadAdapterRecipes(potentialRecipes.getOrDefault(RecipeLoader.FileType.ADAPTER, Lists.newArrayList()), earlyRecipeAdapters);
7377
DataLoadProfiler.StatusLine sl = profiler.createLine("Load-Phase: ");
7478
DataLoadProfiler.Status success = sl.appendStatus("%s adapter-recipes loaded");
7579
DataLoadProfiler.Status failed = sl.appendStatus("%s adapter-recipes failed");
@@ -139,7 +143,7 @@ private static Map<DynamicMachine, List<MachineRecipe>> loadAndValidateRecipes(L
139143
}
140144

141145
public static void reloadAdapters() {
142-
for (RecipeAdapterAccessor accessor : RecipeLoader.recipeAdapters) {
146+
for (RecipeAdapterAccessor accessor : RecipeLoader.RECIPE_ADAPTER_ACCESSORS) {
143147
Map<Integer, TreeSet<MachineRecipe>> machineRecipeList = REGISTRY_RECIPE_BY_MACHINE.get(accessor.getOwningMachine());
144148
for (MachineRecipe cached : accessor.getCachedRecipes()) {
145149
RECIPE_REGISTRY.remove(cached.getRegistryName());
@@ -152,7 +156,7 @@ public static void reloadAdapters() {
152156
}
153157
}
154158

155-
for (RecipeAdapterAccessor accessor : RecipeLoader.recipeAdapters) {
159+
for (RecipeAdapterAccessor accessor : RecipeLoader.RECIPE_ADAPTER_ACCESSORS) {
156160
for (MachineRecipe recipe : accessor.loadRecipesForAdapter()) {
157161
RECIPE_REGISTRY.put(recipe.getRegistryName(), recipe);
158162
Map<Integer, TreeSet<MachineRecipe>> recipeList = REGISTRY_RECIPE_BY_MACHINE.computeIfAbsent(accessor.getOwningMachine(), k -> new TreeMap<>());
@@ -181,7 +185,7 @@ public void loadRecipeRegistry(@Nullable EntityPlayer player, boolean doRegister
181185
if (doRegister) {
182186
registerRecipes(recipes);
183187
}
184-
recipes = loadAdapters(player, sharedLoadRegistry);
188+
recipes = loadAdapters(player, sharedLoadRegistry, earlyRecipeAdapters);
185189
if (doRegister) {
186190
registerRecipes(recipes);
187191
}
@@ -225,8 +229,13 @@ public void registerRecipeEarly(PreparedRecipe recipe) {
225229
this.earlyRecipes.add(recipe);
226230
}
227231

232+
public void registerRecipeAdapterEarly(RecipeAdapterBuilder recipeAdapter) {
233+
this.earlyRecipeAdapters.add(recipeAdapter);
234+
}
235+
228236
public void clearLingeringRecipes() {
229237
this.earlyRecipes.clear();
238+
this.earlyRecipeAdapters.clear();
230239
}
231240

232241
}

src/main/java/hellfirepvp/modularmachinery/common/crafting/adapter/AdapterICCompressor.java renamed to src/main/java/hellfirepvp/modularmachinery/common/crafting/adapter/AdapterIC2Compressor.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package hellfirepvp.modularmachinery.common.crafting.adapter;
22

3+
import crafttweaker.util.IEventHandler;
34
import hellfirepvp.modularmachinery.common.crafting.MachineRecipe;
45
import hellfirepvp.modularmachinery.common.crafting.helper.ComponentRequirement;
56
import hellfirepvp.modularmachinery.common.crafting.requirement.RequirementEnergy;
67
import hellfirepvp.modularmachinery.common.crafting.requirement.RequirementItem;
8+
import hellfirepvp.modularmachinery.common.integration.crafttweaker.event.recipe.RecipeEvent;
79
import hellfirepvp.modularmachinery.common.lib.RequirementTypesMM;
810
import hellfirepvp.modularmachinery.common.machine.IOType;
911
import hellfirepvp.modularmachinery.common.modifier.RecipeModifier;
@@ -17,18 +19,23 @@
1719
import java.util.ArrayList;
1820
import java.util.Collection;
1921
import java.util.List;
22+
import java.util.Map;
2023

21-
public class AdapterICCompressor extends RecipeAdapter {
24+
public class AdapterIC2Compressor extends RecipeAdapter {
2225
public static final int workTime = 300;
2326
private int incId = 0;
2427

25-
public AdapterICCompressor() {
28+
public AdapterIC2Compressor() {
2629
super(new ResourceLocation("ic2", "te_compressor"));
2730
}
2831

2932
@Nonnull
3033
@Override
31-
public Collection<MachineRecipe> createRecipesFor(ResourceLocation owningMachineName, List<RecipeModifier> modifiers, List<ComponentRequirement<?, ?>> additionalRequirements) {
34+
public Collection<MachineRecipe> createRecipesFor(ResourceLocation owningMachineName,
35+
List<RecipeModifier> modifiers,
36+
List<ComponentRequirement<?, ?>> additionalRequirements,
37+
Map<Class<?>, List<IEventHandler<RecipeEvent>>> eventHandlers,
38+
List<String> recipeTooltips) {
3239
Iterable<? extends ic2.api.recipe.MachineRecipe<IRecipeInput, Collection<ItemStack>>> machineRecipes = Recipes.compressor.getRecipes();
3340

3441
List<MachineRecipe> recipes = new ArrayList<>(40);
@@ -38,9 +45,7 @@ public Collection<MachineRecipe> createRecipesFor(ResourceLocation owningMachine
3845
owningMachineName,
3946
workTime, incId, false);
4047

41-
for (ComponentRequirement<?, ?> additionalRequirement : additionalRequirements) {
42-
recipe.addRequirement(additionalRequirement.deepCopy());
43-
}
48+
RecipeAdapter.addAdditionalRequirements(recipe, additionalRequirements, eventHandlers, recipeTooltips);
4449

4550
int inAmount = Math.round(RecipeModifier.applyModifiers(modifiers, RequirementTypesMM.REQUIREMENT_ITEM, IOType.INPUT, machineRecipe.getInput().getAmount(), false));
4651

src/main/java/hellfirepvp/modularmachinery/common/crafting/adapter/AdapterMinecraftFurnace.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88

99
package hellfirepvp.modularmachinery.common.crafting.adapter;
1010

11+
import crafttweaker.util.IEventHandler;
1112
import hellfirepvp.modularmachinery.common.crafting.MachineRecipe;
1213
import hellfirepvp.modularmachinery.common.crafting.helper.ComponentRequirement;
1314
import hellfirepvp.modularmachinery.common.crafting.requirement.RequirementEnergy;
1415
import hellfirepvp.modularmachinery.common.crafting.requirement.RequirementItem;
16+
import hellfirepvp.modularmachinery.common.integration.crafttweaker.event.recipe.RecipeEvent;
1517
import hellfirepvp.modularmachinery.common.lib.RequirementTypesMM;
1618
import hellfirepvp.modularmachinery.common.machine.IOType;
1719
import hellfirepvp.modularmachinery.common.modifier.RecipeModifier;
@@ -45,7 +47,9 @@ public AdapterMinecraftFurnace() {
4547
@Override
4648
public Collection<MachineRecipe> createRecipesFor(ResourceLocation owningMachineName,
4749
List<RecipeModifier> modifiers,
48-
List<ComponentRequirement<?, ?>> additionalRequirements) {
50+
List<ComponentRequirement<?, ?>> additionalRequirements,
51+
Map<Class<?>, List<IEventHandler<RecipeEvent>>> eventHandlers,
52+
List<String> recipeTooltips) {
4953
Map<ItemStack, ItemStack> inputOutputMap = FurnaceRecipes.instance().getSmeltingList();
5054
List<MachineRecipe> smeltingRecipes = new ArrayList<>(inputOutputMap.size());
5155
for (Map.Entry<ItemStack, ItemStack> smelting : inputOutputMap.entrySet()) {
@@ -71,9 +75,7 @@ public Collection<MachineRecipe> createRecipesFor(ResourceLocation owningMachine
7175
recipe.addRequirement(new RequirementEnergy(IOType.INPUT, inEnergy));
7276
}
7377

74-
for (ComponentRequirement<?, ?> additionalRequirement : additionalRequirements) {
75-
recipe.addRequirement(additionalRequirement.deepCopy());
76-
}
78+
RecipeAdapter.addAdditionalRequirements(recipe, additionalRequirements, eventHandlers, recipeTooltips);
7779

7880
smeltingRecipes.add(recipe);
7981
incId++;

src/main/java/hellfirepvp/modularmachinery/common/crafting/adapter/DynamicMachineRecipeAdapter.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88

99
package hellfirepvp.modularmachinery.common.crafting.adapter;
1010

11+
import crafttweaker.util.IEventHandler;
1112
import hellfirepvp.modularmachinery.ModularMachinery;
1213
import hellfirepvp.modularmachinery.common.crafting.MachineRecipe;
1314
import hellfirepvp.modularmachinery.common.crafting.RecipeRegistry;
1415
import hellfirepvp.modularmachinery.common.crafting.helper.ComponentRequirement;
16+
import hellfirepvp.modularmachinery.common.integration.crafttweaker.event.recipe.RecipeEvent;
1517
import hellfirepvp.modularmachinery.common.machine.DynamicMachine;
1618
import hellfirepvp.modularmachinery.common.modifier.RecipeModifier;
1719
import net.minecraft.util.ResourceLocation;
@@ -20,6 +22,7 @@
2022
import java.util.ArrayList;
2123
import java.util.Collection;
2224
import java.util.List;
25+
import java.util.Map;
2326

2427
/**
2528
* This class is part of the Modular Machinery Mod
@@ -41,23 +44,23 @@ public DynamicMachineRecipeAdapter(@Nonnull ResourceLocation registryName, Dynam
4144
@Override
4245
public Collection<MachineRecipe> createRecipesFor(ResourceLocation owningMachineName,
4346
List<RecipeModifier> modifiers,
44-
List<ComponentRequirement<?, ?>> additionalRequirements) {
47+
List<ComponentRequirement<?, ?>> additionalRequirements,
48+
Map<Class<?>, List<IEventHandler<RecipeEvent>>> eventHandlers,
49+
List<String> recipeTooltips) {
4550
String newIdentifier = owningMachineName.getNamespace() + "." + owningMachineName.getPath();
4651

47-
List<MachineRecipe> recipesNew = new ArrayList<>();
52+
List<MachineRecipe> newRecipeList = new ArrayList<>();
4853
for (MachineRecipe recipe : RecipeRegistry.getRecipesFor(this.originalMachine)) {
4954
MachineRecipe newRecipe = recipe.copy(
5055
(res) -> new ResourceLocation(ModularMachinery.MODID, res.getPath() + ".copy." + newIdentifier + "_" + incId),
5156
owningMachineName,
5257
modifiers);
53-
for (ComponentRequirement<?, ?> additionalRequirement : additionalRequirements) {
54-
newRecipe.addRequirement(additionalRequirement.deepCopy());
55-
}
56-
recipesNew.add(newRecipe);
58+
RecipeAdapter.addAdditionalRequirements(newRecipe, additionalRequirements, eventHandlers, recipeTooltips);
59+
newRecipeList.add(newRecipe);
5760
}
5861

5962
incId++;
60-
return recipesNew;
63+
return newRecipeList;
6164
}
6265

6366
}

0 commit comments

Comments
 (0)