mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
drop exact choice recipe book clicks patch, supercedes #1446
not sure how i missed this when upstreaming
This commit is contained in:
@@ -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);
|
||||
@@ -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
|
||||
@@ -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 {
|
||||
@@ -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 {
|
||||
@@ -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 {
|
||||
@@ -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
|
||||
@@ -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 {
|
||||
@@ -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 {
|
||||
@@ -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 {
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user