Skip to content

Commit deaf913

Browse files
SwedzTechnici4n
andauthored
Fix #817: Simplify internal recipe building (#893)
* Simplify internal recipe building * Don't go through MachineRecipeType caching on the client side --------- Co-authored-by: Technici4n <[email protected]>
1 parent 49be076 commit deaf913

File tree

13 files changed

+53
-70
lines changed

13 files changed

+53
-70
lines changed

src/client/java/aztech/modern_industrialization/compat/viewer/usage/MachineCategory.java

Lines changed: 3 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -35,28 +35,24 @@
3535
import aztech.modern_industrialization.machines.gui.MachineScreen;
3636
import aztech.modern_industrialization.machines.guicomponents.EnergyBarClient;
3737
import aztech.modern_industrialization.machines.guicomponents.ProgressBarClient;
38-
import aztech.modern_industrialization.machines.init.MIMachineRecipeTypes;
3938
import aztech.modern_industrialization.machines.init.MachineTier;
4039
import aztech.modern_industrialization.machines.recipe.MachineRecipe;
41-
import aztech.modern_industrialization.machines.recipe.RecipeConversions;
4240
import aztech.modern_industrialization.thirdparty.fabrictransfer.api.fluid.FluidVariant;
4341
import aztech.modern_industrialization.util.TextHelper;
4442
import java.util.ArrayList;
4543
import java.util.Comparator;
4644
import java.util.List;
47-
import java.util.Objects;
4845
import java.util.function.Consumer;
4946
import net.minecraft.ChatFormatting;
47+
import net.minecraft.client.Minecraft;
5048
import net.minecraft.core.RegistryAccess;
5149
import net.minecraft.core.registries.BuiltInRegistries;
5250
import net.minecraft.network.chat.Component;
5351
import net.minecraft.network.chat.Style;
5452
import net.minecraft.resources.ResourceLocation;
5553
import net.minecraft.world.item.crafting.RecipeHolder;
5654
import net.minecraft.world.item.crafting.RecipeManager;
57-
import net.minecraft.world.item.crafting.RecipeType;
5855
import net.minecraft.world.level.ItemLike;
59-
import net.minecraft.world.level.block.ComposterBlock;
6056

6157
public class MachineCategory extends ViewerCategory<RecipeHolder<MachineRecipe>> {
6258
public static MachineCategory create(MachineCategoryParams params) {
@@ -96,41 +92,10 @@ public void buildWorkstations(WorkstationConsumer consumer) {
9692

9793
@Override
9894
public void buildRecipes(RecipeManager recipeManager, RegistryAccess registryAccess, Consumer<RecipeHolder<MachineRecipe>> consumer) {
99-
var machineRecipes = recipeManager.getRecipes().stream()
100-
.filter(r -> r.value() instanceof MachineRecipe)
101-
.map(r -> (RecipeHolder<MachineRecipe>) r)
102-
.toList();
103-
104-
// regular recipes
105-
machineRecipes.stream()
106-
.filter(r -> params.recipePredicate.test(r.value()))
95+
params.recipeType.getRecipesWithoutCache(Minecraft.getInstance().level).stream()
96+
.filter(recipe -> params.recipePredicate.test(recipe.value()))
10797
.sorted(Comparator.comparing(RecipeHolder::id))
10898
.forEach(consumer);
109-
110-
// converted recipes
111-
if (params.category.getNamespace().equals(MI.ID)) {
112-
switch (params.category.getPath()) {
113-
case "bronze_furnace" -> {
114-
recipeManager.getAllRecipesFor(RecipeType.SMELTING)
115-
.stream()
116-
.map(r -> RecipeConversions.ofSmelting(r, MIMachineRecipeTypes.FURNACE, registryAccess))
117-
.forEach(consumer);
118-
}
119-
case "bronze_cutting_machine" -> {
120-
recipeManager.getAllRecipesFor(RecipeType.STONECUTTING)
121-
.stream()
122-
.map(r -> RecipeConversions.ofStonecutting(r, MIMachineRecipeTypes.CUTTING_MACHINE, registryAccess))
123-
.forEach(consumer);
124-
}
125-
case "centrifuge" -> {
126-
ComposterBlock.COMPOSTABLES.keySet()
127-
.stream()
128-
.map(RecipeConversions::ofCompostable)
129-
.filter(Objects::nonNull)
130-
.forEach(consumer);
131-
}
132-
}
133-
}
13499
}
135100

136101
@Override

src/main/java/aztech/modern_industrialization/compat/rei/machines/MachineCategoryParams.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import aztech.modern_industrialization.inventory.SlotPositions;
2727
import aztech.modern_industrialization.machines.guicomponents.ProgressBar;
2828
import aztech.modern_industrialization.machines.recipe.MachineRecipe;
29+
import aztech.modern_industrialization.machines.recipe.MachineRecipeType;
2930
import java.util.ArrayList;
3031
import java.util.List;
3132
import java.util.function.Predicate;
@@ -39,21 +40,23 @@ public class MachineCategoryParams {
3940
public final SlotPositions fluidInputs;
4041
public final SlotPositions fluidOutputs;
4142
public final ProgressBar.Parameters progressBarParams;
43+
public final MachineRecipeType recipeType;
4244
public final Predicate<MachineRecipe> recipePredicate;
4345
public final boolean isMultiblock;
4446
public final SteamMode steamMode;
4547
public final List<ResourceLocation> workstations = new ArrayList<>();
4648

4749
public MachineCategoryParams(String englishName, ResourceLocation category, SlotPositions itemInputs, SlotPositions itemOutputs,
48-
SlotPositions fluidInputs, SlotPositions fluidOutputs, ProgressBar.Parameters progressBarParams, Predicate<MachineRecipe> recipePredicate,
49-
boolean isMultiblock, SteamMode steamMode) {
50+
SlotPositions fluidInputs, SlotPositions fluidOutputs, ProgressBar.Parameters progressBarParams, MachineRecipeType recipeType,
51+
Predicate<MachineRecipe> recipePredicate, boolean isMultiblock, SteamMode steamMode) {
5052
this.englishName = englishName;
5153
this.category = category;
5254
this.itemInputs = itemInputs;
5355
this.itemOutputs = itemOutputs;
5456
this.fluidInputs = fluidInputs;
5557
this.fluidOutputs = fluidOutputs;
5658
this.progressBarParams = progressBarParams;
59+
this.recipeType = recipeType;
5760
this.recipePredicate = recipePredicate;
5861
this.isMultiblock = isMultiblock;
5962
this.steamMode = steamMode;

src/main/java/aztech/modern_industrialization/machines/blockentities/AbstractCraftingMachineBlockEntity.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
import aztech.modern_industrialization.machines.recipe.MachineRecipeType;
4040
import aztech.modern_industrialization.util.Tickable;
4141
import java.util.UUID;
42-
import net.minecraft.world.level.Level;
42+
import net.minecraft.server.level.ServerLevel;
4343
import org.jetbrains.annotations.Nullable;
4444

4545
public abstract class AbstractCraftingMachineBlockEntity extends MachineBlockEntity implements CrafterComponent.Behavior, Tickable,
@@ -106,8 +106,8 @@ public MIInventory getInventory() {
106106
}
107107

108108
@Override
109-
public Level getCrafterWorld() {
110-
return level;
109+
public ServerLevel getCrafterWorld() {
110+
return (ServerLevel) level;
111111
}
112112

113113
@Override

src/main/java/aztech/modern_industrialization/machines/blockentities/multiblocks/AbstractElectricCraftingMultiblockBlockEntity.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@
3535
import java.util.List;
3636
import java.util.UUID;
3737
import net.minecraft.core.Direction;
38+
import net.minecraft.server.level.ServerLevel;
3839
import net.minecraft.world.InteractionHand;
3940
import net.minecraft.world.ItemInteractionResult;
4041
import net.minecraft.world.entity.player.Player;
41-
import net.minecraft.world.level.Level;
4242
import org.jetbrains.annotations.Nullable;
4343

4444
public abstract class AbstractElectricCraftingMultiblockBlockEntity extends AbstractCraftingMultiblockBlockEntity
@@ -109,8 +109,8 @@ public final long consumeEu(long max, Simulation simulation) {
109109
}
110110

111111
@Override
112-
public final Level getCrafterWorld() {
113-
return level;
112+
public final ServerLevel getCrafterWorld() {
113+
return (ServerLevel) level;
114114
}
115115

116116
@Override

src/main/java/aztech/modern_industrialization/machines/blockentities/multiblocks/SteamCraftingMultiblockBlockEntity.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@
3838
import java.util.UUID;
3939
import net.minecraft.core.Direction;
4040
import net.minecraft.network.chat.Component;
41+
import net.minecraft.server.level.ServerLevel;
4142
import net.minecraft.world.InteractionHand;
4243
import net.minecraft.world.ItemInteractionResult;
4344
import net.minecraft.world.entity.player.Player;
44-
import net.minecraft.world.level.Level;
4545
import org.jetbrains.annotations.Nullable;
4646

4747
public class SteamCraftingMultiblockBlockEntity extends AbstractCraftingMultiblockBlockEntity {
@@ -105,8 +105,8 @@ public long getMaxRecipeEu() {
105105
}
106106

107107
@Override
108-
public Level getCrafterWorld() {
109-
return level;
108+
public ServerLevel getCrafterWorld() {
109+
return (ServerLevel) level;
110110
}
111111

112112
@Override

src/main/java/aztech/modern_industrialization/machines/components/CrafterComponent.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757
import net.minecraft.world.item.Item;
5858
import net.minecraft.world.item.ItemStack;
5959
import net.minecraft.world.item.crafting.RecipeHolder;
60-
import net.minecraft.world.level.Level;
6160
import net.minecraft.world.level.material.Fluid;
6261
import org.jetbrains.annotations.Nullable;
6362

@@ -104,7 +103,7 @@ default boolean isOverdriving() {
104103
}
105104

106105
// can't use getWorld() or the remapping will fail
107-
Level getCrafterWorld();
106+
ServerLevel getCrafterWorld();
108107

109108
default int getMaxFluidOutputs() {
110109
return Integer.MAX_VALUE;
@@ -627,7 +626,7 @@ protected void clearLocks() {
627626

628627
public void lockRecipe(ResourceLocation recipeId, net.minecraft.world.entity.player.Inventory inventory) {
629628
// Find MachineRecipe
630-
Optional<RecipeHolder<MachineRecipe>> optionalMachineRecipe = behavior.recipeType().getRecipes(behavior.getCrafterWorld()).stream()
629+
Optional<RecipeHolder<MachineRecipe>> optionalMachineRecipe = behavior.recipeType().getRecipesWithCache(behavior.getCrafterWorld()).stream()
631630
.filter(recipe -> recipe.id().equals(recipeId)).findFirst();
632631
if (optionalMachineRecipe.isEmpty())
633632
return;

src/main/java/aztech/modern_industrialization/machines/init/MultiblockMachines.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -790,7 +790,7 @@ public final void register() {
790790

791791
ReiMachineRecipes.registerCategory(category, new MachineCategoryParams(englishName, category,
792792
itemInputs.build(), itemOutputs.build(), fluidInputs.build(), fluidOutputs.build(),
793-
progressBarParams, recipe -> recipe.getType() == recipeType && extraTest.test(recipe), true, steamMode));
793+
progressBarParams, recipeType, extraTest, true, steamMode));
794794
for (ResourceLocation workstation : workstations) {
795795
ReiMachineRecipes.registerWorkstation(category, workstation);
796796
ReiMachineRecipes.registerRecipeCategoryForMachine(workstation, category, ReiMachineRecipes.MachineScreenPredicate.MULTIBLOCK);

src/main/java/aztech/modern_industrialization/machines/init/SingleBlockCraftingMachines.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ public static void registerMachineTiers(String englishName, String machine, Mach
245245
new MachineCategoryParams(null, null, items.sublist(0, itemInputCount),
246246
items.sublist(itemInputCount, itemInputCount + itemOutputCount),
247247
fluids.sublist(0, fluidInputCount), fluids.sublist(fluidInputCount, fluidInputCount + fluidOutputCount), progressBarParams,
248-
null, false, SteamMode.BOTH),
248+
null, null, false, SteamMode.BOTH),
249249
tiers);
250250
}
251251

@@ -265,7 +265,7 @@ private static void registerReiTiers(String englishName, String machine, Machine
265265
MachineCategoryParams category = new MachineCategoryParams(fullEnglishName, MI.id(itemId), categoryParams.itemInputs,
266266
categoryParams.itemOutputs,
267267
categoryParams.fluidInputs, categoryParams.fluidOutputs, categoryParams.progressBarParams,
268-
recipe -> recipe.getType() == recipeType && minEu <= recipe.eu && recipe.eu <= maxEu, false,
268+
recipeType, recipe -> minEu <= recipe.eu && recipe.eu <= maxEu, false,
269269
i < 2 ? SteamMode.BOTH : SteamMode.ELECTRIC_ONLY);
270270
ReiMachineRecipes.registerCategory(MI.id(itemId), category);
271271
ReiMachineRecipes.registerMachineClickArea(MI.id(itemId), categoryParams.progressBarParams.toRectangle());

src/main/java/aztech/modern_industrialization/machines/recipe/CentrifugeMachineRecipeType.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
*/
2424
package aztech.modern_industrialization.machines.recipe;
2525

26+
import java.util.List;
2627
import net.minecraft.resources.ResourceLocation;
28+
import net.minecraft.world.item.crafting.RecipeHolder;
2729
import net.minecraft.world.level.Level;
2830
import net.minecraft.world.level.block.ComposterBlock;
2931

@@ -34,7 +36,7 @@ public CentrifugeMachineRecipeType(ResourceLocation id) {
3436
}
3537

3638
@Override
37-
protected void fillRecipeList(Level world) {
39+
protected void fillRecipeList(Level world, List<RecipeHolder<MachineRecipe>> recipeList) {
3840
recipeList.addAll(getManagerRecipes(world));
3941

4042
for (var itemCompostable : ComposterBlock.COMPOSTABLES.keySet()) {

src/main/java/aztech/modern_industrialization/machines/recipe/CuttingMachineRecipeType.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
*/
2424
package aztech.modern_industrialization.machines.recipe;
2525

26+
import java.util.List;
2627
import net.minecraft.resources.ResourceLocation;
28+
import net.minecraft.world.item.crafting.RecipeHolder;
2729
import net.minecraft.world.item.crafting.RecipeType;
2830
import net.minecraft.world.level.Level;
2931

@@ -33,7 +35,7 @@ public CuttingMachineRecipeType(ResourceLocation id) {
3335
}
3436

3537
@Override
36-
protected void fillRecipeList(Level world) {
38+
protected void fillRecipeList(Level world, List<RecipeHolder<MachineRecipe>> recipeList) {
3739
// Add all regular cutting machine recipes
3840
recipeList.addAll(getManagerRecipes(world));
3941
// Add all stone cutter recipes

0 commit comments

Comments
 (0)