From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com> Date: Sun, 12 May 2024 18:12:53 +0300 Subject: [PATCH] Carpet-Fixes: RecipeManager Optimize Original project: https://github.com/fxmorin/carpet-fixes Improves: [Blast]Furnace/Campfire/Smoker/Stonecutter/Crafting/Sheep Color Choosing diff --git a/src/main/java/net/minecraft/world/item/crafting/RecipeManager.java b/src/main/java/net/minecraft/world/item/crafting/RecipeManager.java index a31326e24cb68472c81cd781c5e3041772712862..8bb9c2c070717364a842e682ea6b87074157cf6d 100644 --- a/src/main/java/net/minecraft/world/item/crafting/RecipeManager.java +++ b/src/main/java/net/minecraft/world/item/crafting/RecipeManager.java @@ -21,6 +21,7 @@ import java.util.Map.Entry; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; +import java.util.ArrayList; import javax.annotation.Nullable; import net.minecraft.core.HolderLookup; import net.minecraft.core.NonNullList; @@ -105,7 +106,7 @@ public class RecipeManager extends SimpleJsonResourceReloadListener { List> list = this.byType(type).stream().filter((recipeholder) -> { return recipeholder.value().matches(inventory, world); }).toList(); - Optional> recipe = (list.isEmpty()) ? Optional.empty() : Optional.of(list.getLast()); // CraftBukkit - SPIGOT-4638: last recipe gets priority + Optional> recipe = (list.isEmpty()) ? Optional.empty() : Optional.of(list.get(list.size() - 1)); // CraftBukkit - SPIGOT-4638: last recipe gets priority inventory.setCurrentRecipe(recipe.orElse(null)); // CraftBukkit - Clear recipe when no recipe is found return recipe; // CraftBukkit end @@ -125,14 +126,14 @@ public class RecipeManager extends SimpleJsonResourceReloadListener { List> list = this.byType(type).stream().filter((recipeholder1) -> { return recipeholder1.value().matches(inventory, world); }).toList(); - Optional> recipe = (list.isEmpty()) ? Optional.empty() : Optional.of(list.getLast()); // CraftBukkit - SPIGOT-4638: last recipe gets priority + Optional> recipe = (list.isEmpty()) ? Optional.empty() : Optional.of(list.get(list.size() - 1)); // CraftBukkit - SPIGOT-4638: last recipe gets priority inventory.setCurrentRecipe(recipe.orElse(null)); // CraftBukkit - Clear recipe when no recipe is found return recipe; // CraftBukkit end } public > List> getAllRecipesFor(RecipeType type) { - return List.copyOf(this.byType(type)); + return space.bxteam.divinemc.configuration.DivineConfig.recipeManagerOptimization ? new ArrayList<>(this.byType(type)) : List.copyOf(this.byType(type)); // DivineMC - Carpet-Fixes: RecipeManager Optimize } public > List> getRecipesFor(RecipeType type, C inventory, Level world) { diff --git a/src/main/java/space/bxteam/divinemc/configuration/DivineConfig.java b/src/main/java/space/bxteam/divinemc/configuration/DivineConfig.java index bf550fa360f69b714ac346333c78d7f8de2a71b9..9ae6daeb94232c2f8c5e8f9cc3a2df2f89cd4ed3 100644 --- a/src/main/java/space/bxteam/divinemc/configuration/DivineConfig.java +++ b/src/main/java/space/bxteam/divinemc/configuration/DivineConfig.java @@ -155,8 +155,10 @@ public class DivineConfig { public static boolean biomeManagerOptimization = true; public static boolean sheepOptimization = true; + public static boolean recipeManagerOptimization = true; private static void optimizations() { biomeManagerOptimization = getBoolean("settings.optimizations.biome-manager-optimization", biomeManagerOptimization); sheepOptimization = getBoolean("settings.optimizations.sheep-optimization", sheepOptimization); + recipeManagerOptimization = getBoolean("settings.optimizations.recipe-manager-optimization", recipeManagerOptimization); } }