drop exact choice recipe book clicks patch, supercedes #1446

not sure how i missed this when upstreaming
This commit is contained in:
granny
2023-10-14 18:05:12 -07:00
parent f898434abc
commit ad03187fab
42 changed files with 10 additions and 139 deletions

View File

@@ -1,129 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Sat, 14 May 2022 15:42:34 -0700
Subject: [PATCH] PaperPR #7822 Fix exact choice recipe book clicks
diff --git a/src/main/java/net/minecraft/world/entity/player/StackedContents.java b/src/main/java/net/minecraft/world/entity/player/StackedContents.java
index 26b236a764177ac16d53f5cbaf83d3e21d015ebc..6bc60ea5249cca9f4c1d029a2b7460fe3476e05a 100644
--- a/src/main/java/net/minecraft/world/entity/player/StackedContents.java
+++ b/src/main/java/net/minecraft/world/entity/player/StackedContents.java
@@ -41,8 +41,62 @@ public class StackedContents {
int j = Math.min(maxCount, stack.getCount());
if (this.extrasMap != null && stack.hasTag() && this.extrasMap.accountStack(stack, j)) return; // Paper - if an exact ingredient, don't include it
this.put(i, j);
+ // PaperPR start
+ if (stack.hasTag()) {
+ this.put(getExactStackingIndex(stack), j);
+ }
+ }
+
+ }
+ private static final net.minecraft.core.IdMap<ItemStack> EXACT_MATCHES_ID_MAP = new net.minecraft.core.IdMap<>() {
+ private final java.util.concurrent.atomic.AtomicInteger idCounter = new java.util.concurrent.atomic.AtomicInteger(BuiltInRegistries.ITEM.size());
+ private final it.unimi.dsi.fastutil.objects.Object2IntMap<ItemStack> itemstackToId = new it.unimi.dsi.fastutil.objects.Object2IntOpenCustomHashMap<>(new it.unimi.dsi.fastutil.Hash.Strategy<>() {
+ @Override
+ public int hashCode(ItemStack o) {
+ return java.util.Objects.hash(o.getItem(), o.getTag());
+ }
+
+ @Override
+ public boolean equals(@Nullable ItemStack a, @Nullable ItemStack b) {
+ if (a == null || b == null) {
+ return false;
+ }
+ return ItemStack.matches(a, b);
+ }
+ });
+ private final it.unimi.dsi.fastutil.ints.Int2ObjectMap<net.minecraft.world.item.ItemStack> idToItemstack = new it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap<>();
+
+ @Override
+ public int getId(ItemStack value) {
+ if (!this.itemstackToId.containsKey(value)) {
+ final int id = this.idCounter.incrementAndGet();
+ final ItemStack copy = value.copy();
+ this.itemstackToId.put(copy, id);
+ this.idToItemstack.put(id, copy);
+ return id;
+ }
+ return this.itemstackToId.getInt(value);
+ }
+
+ @Override
+ public @Nullable ItemStack byId(int index) {
+ return this.idToItemstack.get(index);
+ }
+
+ @Override
+ public int size() {
+ return this.itemstackToId.size();
+ }
+
+ @Override
+ public java.util.Iterator<net.minecraft.world.item.ItemStack> iterator() {
+ return this.idToItemstack.values().iterator();
}
+ };
+ public static int getExactStackingIndex(ItemStack stack) {
+ return EXACT_MATCHES_ID_MAP.getId(stack);
+ // PaperPR end
}
public static int getStackingIndex(ItemStack stack) {
@@ -84,6 +138,12 @@ public class StackedContents {
}
public static ItemStack fromStackingIndex(int itemId) {
+ // PaperPR start
+ if (itemId > BuiltInRegistries.ITEM.size()) {
+ final ItemStack stack = EXACT_MATCHES_ID_MAP.byId(itemId);
+ return stack == null ? ItemStack.EMPTY : stack.copy();
+ }
+ // PaperPR end
return itemId == 0 ? ItemStack.EMPTY : new ItemStack(Item.byId(itemId));
}
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
index 6c7f0db683101e12ae48dc3f28d5d00ac9569e35..68035cfe391b0e39a7a5f4b8b6e3275d75686070 100644
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
@@ -114,6 +114,7 @@ import org.bukkit.event.world.StructureGrowEvent;
public final class ItemStack {
+ public boolean isExactRecipeIngredient = false; // PaperPR
public static final Codec<ItemStack> CODEC = RecordCodecBuilder.create((instance) -> {
return instance.group(BuiltInRegistries.ITEM.byNameCodec().fieldOf("id").forGetter(ItemStack::getItem), Codec.INT.fieldOf("Count").forGetter(ItemStack::getCount), CompoundTag.CODEC.optionalFieldOf("tag").forGetter((itemstack) -> {
return Optional.ofNullable(itemstack.getTag());
diff --git a/src/main/java/net/minecraft/world/item/crafting/Ingredient.java b/src/main/java/net/minecraft/world/item/crafting/Ingredient.java
index 3532db21cee82c18f95c540d24b2071585d71c4e..ae98a5b49b5eb7b9b2846d1e41b5665c725198a2 100644
--- a/src/main/java/net/minecraft/world/item/crafting/Ingredient.java
+++ b/src/main/java/net/minecraft/world/item/crafting/Ingredient.java
@@ -57,7 +57,11 @@ public final class Ingredient implements Predicate<ItemStack> {
if (this.itemStacks == null) {
this.itemStacks = (ItemStack[]) Arrays.stream(this.values).flatMap((recipeitemstack_provider) -> {
return recipeitemstack_provider.getItems().stream();
- }).distinct().toArray((i) -> {
+ // PaperPR start
+ }).distinct().peek(stack -> {
+ stack.isExactRecipeIngredient = this.exact;
+ }).toArray((i) -> {
+ // PaperPR end
return new ItemStack[i];
});
}
@@ -112,7 +116,13 @@ public final class Ingredient implements Predicate<ItemStack> {
for (int j = 0; j < i; ++j) {
ItemStack itemstack = aitemstack1[j];
+ // PaperPR start
+ if (itemstack.isExactRecipeIngredient) {
+ this.stackingIds.add(StackedContents.getExactStackingIndex(itemstack));
+ } else {
+ // PaperPR end
this.stackingIds.add(StackedContents.getStackingIndex(itemstack));
+ } // PaperPR
}
this.stackingIds.sort(IntComparators.NATURAL_COMPARATOR);

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Add more logger output for invalid movement kicks
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 9fa25455dd264ea0b58d5e1825fd88475021dea9..0d79a045ae1f28f07f1b052ba014bbf372217dba 100644
index d01116aa7b547e5020b69df36cdf035af2cae882..0ee059162e65a95db2f2e3473d2dbf0de38859da 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -736,6 +736,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Add Bee API
diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java
index e837500019157129007841c847d807ebae10db04..6c04c8e7776b2830ac368229da834532e8ce163e 100644
index 02e95af3c18b3da5a6a32a7536e903ca9c426249..38a3dcec138d9233a46e5d523bcc6d64bc7fffd0 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
@@ -807,6 +807,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Debug Marker API
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 12b25d353990b6bcca3772c07ebe6472944b3166..c600c3579747281a7e463ea4dcb9335d8936f2e3 100644
index 2ec27193ea3444de71c05949952cc129eed4ea0c..207b502c8df60357971e69263c1d1496b83391ba 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1543,6 +1543,42 @@ public final class CraftServer implements Server {
@@ -99,7 +99,7 @@ index 791e69b2c963cd034d6d35561448cdb20b1b1cde..52b48e40c3ee5f483c6cb04409459cf2
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 19f6bad1b81c5a5c249631b43e1f6c159dc994e0..3c543e3972035e0c7a1c93e2f881e2ab0205afa0 100644
index a03f60665059f96fc546e880c29d3bb7b04ca67c..f7fd1c4d8875bb3807172c45367465c4f9962176 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -3335,5 +3335,43 @@ public class CraftPlayer extends CraftHumanEntity implements Player {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Add death screen API
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 3c543e3972035e0c7a1c93e2f881e2ab0205afa0..28910943e5efcdf24865b961fba161b7d1e4a8f5 100644
index f7fd1c4d8875bb3807172c45367465c4f9962176..b6515c469ae3ff06daf631f0d5e5f792b41f8e48 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -3373,5 +3373,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {

View File

@@ -48,7 +48,7 @@ index 189c904a3b0ac2d2b889e118bfd7c75e6ec5da3e..9c4cec7cf323f6768a89358fa1a11b53
while (iterator.hasNext()) {
ServerLevel worldserver = (ServerLevel) iterator.next();
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 0d79a045ae1f28f07f1b052ba014bbf372217dba..ee9845804d2ad59bdde78e778c28690746877541 100644
index 0ee059162e65a95db2f2e3473d2dbf0de38859da..d3827d918ee1f748e936dd3b05b2021a3a0f88c4 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -3361,6 +3361,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Language API
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 8632e9cab6563b9ea0a01c2e5248ad658129d5ce..aea87307b318ed34e60835ba1d9420e9a0fd4d8e 100644
index 207b502c8df60357971e69263c1d1496b83391ba..a510aba99702172060916f6b58e4d6f3e066fb73 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -399,6 +399,20 @@ public final class CraftServer implements Server {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Milk Keeps Beneficial Effects
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 7bace36fb2c447cc2c7d07777a910c5867bbfe99..4604e63cec3c25a1257892d4c1ea9db098815b93 100644
index c132ab8142bf55f2ab00617b7ba90c610016ae7d..9bb693aa505eae2236d8b37e4d42a11445227643 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -1125,6 +1125,7 @@ public abstract class LivingEntity extends Entity implements Attackable {

View File

@@ -50,7 +50,7 @@ index 6e0331818ef68fa355e3c27dc3e362b82d1c6e3a..5fa044b03f0a08d1e17b9002255e2e64
} catch (Throwable throwable) {
CrashReport crashreport = CrashReport.forThrowable(throwable, "Loading entity NBT");
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index 431e3cedde33b33202be1d44bf066323997f21f8..236d753266943d8c64e1329336d28c50109d0886 100644
index eb409ecf5bf06692038e9fe84af986092a7d7837..4482e9401be4af7b16991f37d319e90602af2227 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -223,6 +223,16 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {

View File

@@ -96,7 +96,7 @@ index 0000000000000000000000000000000000000000..15a226e3854d731f7724025ea3459c8a
+ }
+}
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
index 6656a3f4dd78270690479639c738fdd0ec7e588d..6e9061dd6d5fd35d74d02c25a5985ffc5bc8e5ac 100644
index da64482a95892dd06ef975767d68bab454ae1dc8..e2c74460d149360f01c4d0577054879f2601a58f 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
@@ -99,6 +99,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface