mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-26 18:39:23 +00:00
ClassInstanceMultiMap belongs to Minecraft vanilla entity storage. And is unused, since replaced by spottedleaf's entity storage (rewrite chunk system). However these patches might be useful for vanilla entity storage if is used.
62 lines
3.4 KiB
Diff
62 lines
3.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: nostalgic853 <yuu8583@proton.me>
|
|
Date: Tue, 25 Oct 2022 00:57:45 +0800
|
|
Subject: [PATCH] Carpet-Fixes: Use optimized RecipeManager
|
|
|
|
This patch is based on the following mixin:
|
|
"carpetfixes/mixins/optimizations/RecipeManager_fasterMixin.java"
|
|
By: fxmorin <28154542+fxmorin@users.noreply.github.com>
|
|
|
|
Original license: MIT
|
|
Original project: https://github.com/fxmorin/carpet-fixes
|
|
|
|
Optimized the RecipeManager getFirstMatch call to be up to 3x faster
|
|
This is a fully vanilla optimization. Improves: [Blast]Furnace/Campfire/Smoker/Stonecutter/Crafting/Sheep Color Choosing
|
|
This was mostly made for the auto crafting table, since the performance boost is much more visible while using that mod
|
|
|
|
diff --git a/net/minecraft/world/item/crafting/RecipeManager.java b/net/minecraft/world/item/crafting/RecipeManager.java
|
|
index 07d7c4737635f671f33b8f73001d67928fc75782..eb7a018ee7c13aac1744fe9c93a4701e6cc441cc 100644
|
|
--- a/net/minecraft/world/item/crafting/RecipeManager.java
|
|
+++ b/net/minecraft/world/item/crafting/RecipeManager.java
|
|
@@ -167,7 +167,7 @@ public class RecipeManager extends SimplePreparableReloadListener<RecipeMap> imp
|
|
|
|
public <I extends RecipeInput, T extends Recipe<I>> Optional<RecipeHolder<T>> getRecipeFor(RecipeType<T> recipeType, I input, Level level) {
|
|
// CraftBukkit start
|
|
- List<RecipeHolder<T>> list = this.recipes.getRecipesFor(recipeType, input, level).toList();
|
|
+ List<RecipeHolder<T>> list = this.recipes.getRecipesForList(recipeType, input, level); // Leaf - Carpet-Fixes - Use optimized RecipeManager - Remove streams to be faster
|
|
return (list.isEmpty()) ? Optional.empty() : Optional.of(list.getLast()); // CraftBukkit - SPIGOT-4638: last recipe gets priority
|
|
// CraftBukkit end
|
|
}
|
|
diff --git a/net/minecraft/world/item/crafting/RecipeMap.java b/net/minecraft/world/item/crafting/RecipeMap.java
|
|
index 098753ddd215b6ef5915fac71d8c4f0b19cf4142..68c2b7e532f0cfa373b7c698da7778c58fe98364 100644
|
|
--- a/net/minecraft/world/item/crafting/RecipeMap.java
|
|
+++ b/net/minecraft/world/item/crafting/RecipeMap.java
|
|
@@ -73,6 +73,26 @@ public class RecipeMap {
|
|
}
|
|
|
|
public <I extends RecipeInput, T extends Recipe<I>> Stream<RecipeHolder<T>> getRecipesFor(RecipeType<T> type, I input, Level level) {
|
|
- return input.isEmpty() ? Stream.empty() : this.byType(type).stream().filter(recipeHolder -> recipeHolder.value().matches(input, level));
|
|
+ return input.isEmpty() ? Stream.empty() : this.byType(type).stream().filter(recipeHolder -> recipeHolder.value().matches(input, level)); // Leaf - Carpet-Fixes - Use optimized RecipeManager - diff on change
|
|
}
|
|
+
|
|
+ // Leaf start - Carpet-Fixes - Use optimized RecipeManager - Remove streams to be faster
|
|
+ public <I extends RecipeInput, T extends Recipe<I>> java.util.List<RecipeHolder<T>> getRecipesForList(RecipeType<T> type, I input, Level level) {
|
|
+ java.util.List<RecipeHolder<T>> list;
|
|
+
|
|
+ if (input.isEmpty()) {
|
|
+ return java.util.List.of();
|
|
+ } else {
|
|
+ list = new java.util.ArrayList<>();
|
|
+ }
|
|
+
|
|
+ for (RecipeHolder<T> recipeHolder : this.byType(type)) {
|
|
+ if (recipeHolder.value().matches(input, level)) {
|
|
+ list.add(recipeHolder);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return list;
|
|
+ }
|
|
+ // Leaf end - Carpet-Fixes - Use optimized RecipeManager - Remove streams to be faster
|
|
}
|