aboutsummaryrefslogtreecommitdiffhomepage
path: root/removed-patches-1-20-5
diff options
context:
space:
mode:
authorJake Potrebic <[email protected]>2024-04-26 14:29:16 -0700
committerJake Potrebic <[email protected]>2024-04-26 14:29:21 -0700
commit19ac9d43ceafbbbf8c3e75dbe79d67516a8ee3b7 (patch)
tree695ca93b74fa417205ce379f5fb1d324090a6dd0 /removed-patches-1-20-5
parent1bc278b125eac414943d4096da4a0c0a93e83bb0 (diff)
downloadPaper-19ac9d43ceafbbbf8c3e75dbe79d67516a8ee3b7.tar.gz
Paper-19ac9d43ceafbbbf8c3e75dbe79d67516a8ee3b7.zip
remove no longer needed patches and fix tests
Diffstat (limited to 'removed-patches-1-20-5')
-rw-r--r--removed-patches-1-20-5/0532-Prevent-grindstones-from-overstacking-items.patch26
-rw-r--r--removed-patches-1-20-5/0603-Add-config-for-mobs-immune-to-default-effects.patch57
-rw-r--r--removed-patches-1-20-5/0608-Fix-incosistency-issue-with-empty-map-items-in-CB.patch31
-rw-r--r--removed-patches-1-20-5/0757-properly-read-and-store-sus-effect-duration.patch35
-rw-r--r--removed-patches-1-20-5/0815-Track-projectile-source-for-fireworks-from-dispenser.patch18
-rw-r--r--removed-patches-1-20-5/0876-Fix-concurrenct-access-to-lookups-field-in-RegistryO.patch28
-rw-r--r--removed-patches-1-20-5/0896-Array-backed-synched-entity-data.patch56
-rw-r--r--removed-patches-1-20-5/0931-Deep-clone-unhandled-nbt-tags.patch62
-rw-r--r--removed-patches-1-20-5/0955-Use-correct-variable-for-initializing-CraftLootTable.patch19
9 files changed, 0 insertions, 332 deletions
diff --git a/removed-patches-1-20-5/0532-Prevent-grindstones-from-overstacking-items.patch b/removed-patches-1-20-5/0532-Prevent-grindstones-from-overstacking-items.patch
deleted file mode 100644
index d98bb3f1c4..0000000000
--- a/removed-patches-1-20-5/0532-Prevent-grindstones-from-overstacking-items.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: chickeneer <[email protected]>
-Date: Tue, 16 Feb 2021 21:37:51 -0600
-Subject: [PATCH] Prevent grindstones from overstacking items
-
-
-diff --git a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java
-index 1783661f38a6f5fb655ea83953b9467bd91a1302..95ac3446fba1f37637c9700080de2e1ce7a3550a 100644
---- a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java
-+++ b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java
-@@ -198,13 +198,13 @@ public class GrindstoneMenu extends AbstractContainerMenu {
- i = Math.max(item.getMaxDamage() - l, 0);
- itemstack2 = this.mergeEnchants(itemstack, itemstack1);
- if (!itemstack2.isDamageableItem()) {
-- if (!ItemStack.matches(itemstack, itemstack1)) {
-+ if (!ItemStack.matches(itemstack, itemstack1) || (itemstack2.getMaxStackSize() == 1 && !io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.allowGrindstoneOverstacking)) { // Paper - add max stack size check & config value
- org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareGrindstoneEvent(this.getBukkitView(), ItemStack.EMPTY); // CraftBukkit
- this.broadcastChanges();
- return;
- }
-
-- b0 = 2;
-+ b0 = 2; // Paper - add max stack size check & config value; the problem line for above change, causing over-stacking
- }
- } else {
- boolean flag3 = !itemstack.isEmpty();
diff --git a/removed-patches-1-20-5/0603-Add-config-for-mobs-immune-to-default-effects.patch b/removed-patches-1-20-5/0603-Add-config-for-mobs-immune-to-default-effects.patch
deleted file mode 100644
index 10ce8bf043..0000000000
--- a/removed-patches-1-20-5/0603-Add-config-for-mobs-immune-to-default-effects.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Jake Potrebic <[email protected]>
-Date: Wed, 2 Dec 2020 21:03:02 -0800
-Subject: [PATCH] Add config for mobs immune to default effects
-
-
-diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 60c9bae18f277a90b464a6f1f55d074ed9046aff..f01ace6a6e517ff3d3cd66e69e2594ae3d702072 100644
---- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
-+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-@@ -1172,7 +1172,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
- if (this.getMobType() == MobType.UNDEAD) {
- MobEffect mobeffectlist = effect.getEffect();
-
-- if (mobeffectlist == MobEffects.REGENERATION || mobeffectlist == MobEffects.POISON) {
-+ if ((mobeffectlist == MobEffects.REGENERATION || mobeffectlist == MobEffects.POISON) && this.level().paperConfig().entities.mobEffects.undeadImmuneToCertainEffects) { // Paper - Add config for mobs immune to default effects
- return false;
- }
- }
-diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
-index bd9453a92e1b2eca0a6dc56aef921e31a18a20c3..25f611b35a5710c595574d2d6ed50c442ca55721 100644
---- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
-+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
-@@ -607,7 +607,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
-
- @Override
- public boolean canBeAffected(MobEffectInstance effect) {
-- return effect.getEffect() == MobEffects.WITHER ? false : super.canBeAffected(effect);
-+ return effect.getEffect() == MobEffects.WITHER && this.level().paperConfig().entities.mobEffects.immuneToWitherEffect.wither ? false : super.canBeAffected(effect); // Paper - Add config for mobs immune to default effects
- }
-
- private class WitherDoNothingGoal extends Goal {
-diff --git a/src/main/java/net/minecraft/world/entity/monster/Spider.java b/src/main/java/net/minecraft/world/entity/monster/Spider.java
-index 6241baccd3fdee59175f616cdf69d3873074f855..4d5cfaa58bdf4e6cb975134004d14c591f6e85fa 100644
---- a/src/main/java/net/minecraft/world/entity/monster/Spider.java
-+++ b/src/main/java/net/minecraft/world/entity/monster/Spider.java
-@@ -135,7 +135,7 @@ public class Spider extends Monster {
-
- @Override
- public boolean canBeAffected(MobEffectInstance effect) {
-- return effect.getEffect() == MobEffects.POISON ? false : super.canBeAffected(effect);
-+ return effect.getEffect() == MobEffects.POISON && this.level().paperConfig().entities.mobEffects.spidersImmuneToPoisonEffect ? false : super.canBeAffected(effect); // Paper - Add config for mobs immune to default effects
- }
-
- public boolean isClimbing() {
-diff --git a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java
-index 62943d43b701d9ae6d955003f4e7658f76d5bdb3..20a65c11ededcd7170704b70118da6200151fbab 100644
---- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java
-+++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java
-@@ -128,6 +128,6 @@ public class WitherSkeleton extends AbstractSkeleton {
-
- @Override
- public boolean canBeAffected(MobEffectInstance effect) {
-- return effect.getEffect() == MobEffects.WITHER ? false : super.canBeAffected(effect);
-+ return effect.getEffect() == MobEffects.WITHER && this.level().paperConfig().entities.mobEffects.immuneToWitherEffect.witherSkeleton ? false : super.canBeAffected(effect); // Paper - Add config for mobs immune to default effects
- }
- }
diff --git a/removed-patches-1-20-5/0608-Fix-incosistency-issue-with-empty-map-items-in-CB.patch b/removed-patches-1-20-5/0608-Fix-incosistency-issue-with-empty-map-items-in-CB.patch
deleted file mode 100644
index 926fba2c7f..0000000000
--- a/removed-patches-1-20-5/0608-Fix-incosistency-issue-with-empty-map-items-in-CB.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Shane Freeder <[email protected]>
-Date: Sun, 1 Aug 2021 09:49:06 +0100
-Subject: [PATCH] Fix incosistency issue with empty map items in CB
-
-
-diff --git a/src/main/java/net/minecraft/world/item/MapItem.java b/src/main/java/net/minecraft/world/item/MapItem.java
-index f643d3c06bd8fc37f6c571a19d5691694b0ce8d3..d8dd99ec8bf7444c5a3c426db3a9c13e334dc0ff 100644
---- a/src/main/java/net/minecraft/world/item/MapItem.java
-+++ b/src/main/java/net/minecraft/world/item/MapItem.java
-@@ -69,7 +69,7 @@ public class MapItem extends ComplexItem {
- public static Integer getMapId(ItemStack stack) {
- CompoundTag nbttagcompound = stack.getTag();
-
-- return nbttagcompound != null && nbttagcompound.contains("map", 99) ? nbttagcompound.getInt("map") : -1; // CraftBukkit - make new maps for no tag
-+ return nbttagcompound != null && nbttagcompound.contains("map", 99) ? nbttagcompound.getInt("map") : null; // CraftBukkit - make new maps for no tag // Paper - don't return invalid ID
- }
-
- public static int createNewSavedData(Level world, int x, int z, int scale, boolean showIcons, boolean unlimitedTracking, ResourceKey<Level> dimension) {
-diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java
-index 0c7280621cce9855dcc9569e0aefba77bfd555cb..0c7c67e1eea44487c52ebf650d35b3b43cd00c3a 100644
---- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java
-+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java
-@@ -133,6 +133,7 @@ class CraftMetaMap extends CraftMetaItem implements MapMeta {
-
- @Override
- public int getMapId() {
-+ Preconditions.checkState(this.hasMapView(), "Item does not have map associated - check hasMapView() first!"); // Paper - more friendly message
- return this.mapId;
- }
-
diff --git a/removed-patches-1-20-5/0757-properly-read-and-store-sus-effect-duration.patch b/removed-patches-1-20-5/0757-properly-read-and-store-sus-effect-duration.patch
deleted file mode 100644
index 94589408f4..0000000000
--- a/removed-patches-1-20-5/0757-properly-read-and-store-sus-effect-duration.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Jake Potrebic <[email protected]>
-Date: Mon, 18 Dec 2023 20:05:50 -0800
-Subject: [PATCH] properly read and store sus effect duration
-
-
-diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSuspiciousStew.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSuspiciousStew.java
-index e13146b71552ab3f9ae867110650fe3977563dfb..2c3b9f76067088efdc2250cdb5070df86e2dc0f5 100644
---- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSuspiciousStew.java
-+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSuspiciousStew.java
-@@ -49,7 +49,14 @@ public class CraftMetaSuspiciousStew extends CraftMetaItem implements Suspicious
- if (type == null) {
- continue;
- }
-- int duration = effect.getInt(CraftMetaSuspiciousStew.DURATION.NBT);
-+ // Paper start - default duration is 160
-+ final int duration;
-+ if (effect.contains(CraftMetaSuspiciousStew.DURATION.NBT)) {
-+ duration = effect.getInt(CraftMetaSuspiciousStew.DURATION.NBT);
-+ } else {
-+ duration = net.minecraft.world.item.SuspiciousStewItem.DEFAULT_DURATION;
-+ }
-+ // Paper end start - default duration is 160
- this.customEffects.add(new PotionEffect(type, duration, 0));
- }
- }
-@@ -80,7 +87,7 @@ public class CraftMetaSuspiciousStew extends CraftMetaItem implements Suspicious
- for (PotionEffect effect : this.customEffects) {
- CompoundTag effectData = new CompoundTag();
- effectData.putString(CraftMetaSuspiciousStew.ID.NBT, effect.getType().getKey().toString());
-- effectData.putInt(CraftMetaSuspiciousStew.DURATION.NBT, effect.getDuration());
-+ if (effect.getDuration() != net.minecraft.world.item.SuspiciousStewItem.DEFAULT_DURATION) effectData.putInt(CraftMetaSuspiciousStew.DURATION.NBT, effect.getDuration()); // Paper - don't save duration if it's the default value
- effectList.add(effectData);
- }
- }
diff --git a/removed-patches-1-20-5/0815-Track-projectile-source-for-fireworks-from-dispenser.patch b/removed-patches-1-20-5/0815-Track-projectile-source-for-fireworks-from-dispenser.patch
deleted file mode 100644
index b78dda85fc..0000000000
--- a/removed-patches-1-20-5/0815-Track-projectile-source-for-fireworks-from-dispenser.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Jake Potrebic <[email protected]>
-Date: Thu, 23 Jun 2022 19:25:51 -0700
-Subject: [PATCH] Track projectile source for fireworks from dispensers
-
-
-diff --git a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java
-index b4f7e3ae855cbf48925f0db916501adf513ae08c..24b2d57ebe76ce825686a53c94ae994b418a1272 100644
---- a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java
-+++ b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java
-@@ -517,6 +517,7 @@ public interface DispenseItemBehavior {
- itemstack1 = CraftItemStack.asNMSCopy(event.getItem());
- Vec3 vec3d = DispenseItemBehavior.getEntityPokingOutOfBlockPos(pointer, EntityType.FIREWORK_ROCKET, enumdirection);
- FireworkRocketEntity entityfireworks = new FireworkRocketEntity(pointer.level(), itemstack1, vec3d.x(), vec3d.y(), vec3d.z(), true); // Paper - GH-2871 - fix last firework in stack having no effects when dispensed
-+ entityfireworks.projectileSource = new org.bukkit.craftbukkit.projectiles.CraftBlockProjectileSource(pointer.blockEntity()); // Paper - Track projectile source for fireworks from dispensers
-
- entityfireworks.shoot((double) enumdirection.getStepX(), (double) enumdirection.getStepY(), (double) enumdirection.getStepZ(), 0.5F, 1.0F);
- pointer.level().addFreshEntity(entityfireworks);
diff --git a/removed-patches-1-20-5/0876-Fix-concurrenct-access-to-lookups-field-in-RegistryO.patch b/removed-patches-1-20-5/0876-Fix-concurrenct-access-to-lookups-field-in-RegistryO.patch
deleted file mode 100644
index 0731970718..0000000000
--- a/removed-patches-1-20-5/0876-Fix-concurrenct-access-to-lookups-field-in-RegistryO.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Spottedleaf <[email protected]>
-Date: Mon, 15 May 2023 00:20:59 -0700
-Subject: [PATCH] Fix concurrenct access to lookups field in RegistryOps
-
-The concurrent access occurs on the Netty IO threads when
-serializing packets. Thus, it seems it was an oversight of
-the implementator of this function as there are typically
-more than one Netty IO thread.
-
-Fixes https://github.com/PaperMC/Folia/issues/11
-
-diff --git a/src/main/java/net/minecraft/resources/RegistryOps.java b/src/main/java/net/minecraft/resources/RegistryOps.java
-index 0272fe45449785e8589b6e42fa454f2abfcc0476..dd8a6bd463e5c8fe69271663cb46b45b201ba59c 100644
---- a/src/main/java/net/minecraft/resources/RegistryOps.java
-+++ b/src/main/java/net/minecraft/resources/RegistryOps.java
-@@ -19,7 +19,10 @@ public class RegistryOps<T> extends DelegatingOps<T> {
-
- private static RegistryOps.RegistryInfoLookup memoizeLookup(RegistryOps.RegistryInfoLookup registryInfoGetter) {
- return new RegistryOps.RegistryInfoLookup() {
-- private final Map<ResourceKey<? extends Registry<?>>, Optional<? extends RegistryOps.RegistryInfo<?>>> lookups = new HashMap<>();
-+ // The concurrent access occurs on the Netty IO threads when serializing packets.
-+ // Thus, it seems it was an oversight of the implementator of this function as there
-+ // are typically more than one Netty IO thread.
-+ private final Map<ResourceKey<? extends Registry<?>>, Optional<? extends RegistryOps.RegistryInfo<?>>> lookups = new java.util.concurrent.ConcurrentHashMap<>(); // Paper - fix concurrent access to lookups field
-
- @Override
- public <T> Optional<RegistryOps.RegistryInfo<T>> lookup(ResourceKey<? extends Registry<? extends T>> registryRef) {
diff --git a/removed-patches-1-20-5/0896-Array-backed-synched-entity-data.patch b/removed-patches-1-20-5/0896-Array-backed-synched-entity-data.patch
deleted file mode 100644
index 2345458940..0000000000
--- a/removed-patches-1-20-5/0896-Array-backed-synched-entity-data.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: jellysquid3 <[email protected]>
-Date: Sat, 8 Jul 2023 21:38:05 +0200
-Subject: [PATCH] Array backed synched entity data
-
-Original code by jellysquid3 in Lithium, licensed under the GNU Lesser General Public License v3.0 (https://www.gnu.org/licenses/lgpl-3.0.html)
-
-diff --git a/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java b/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java
-index d088479d160dbd2fc90b48a30553be141db8eef2..07a362f9e485d0d507f16f1dda1ac84ade07ab27 100644
---- a/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java
-+++ b/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java
-@@ -34,6 +34,11 @@ public class SynchedEntityData {
- private final Int2ObjectMap<SynchedEntityData.DataItem<?>> itemsById = new Int2ObjectOpenHashMap();
- // private final ReadWriteLock lock = new ReentrantReadWriteLock(); // Spigot - not required
- private boolean isDirty;
-+ // Paper start - Perf: array backed synched entity data
-+ private static final int DEFAULT_ENTRY_COUNT = 10;
-+ private static final int GROW_FACTOR = 8;
-+ private SynchedEntityData.DataItem<?>[] itemsArray = new SynchedEntityData.DataItem<?>[DEFAULT_ENTRY_COUNT];
-+ // Paper end - Perf: array backed synched entity data
-
- public SynchedEntityData(Entity trackedEntity) {
- this.entity = trackedEntity;
-@@ -103,6 +108,15 @@ public class SynchedEntityData {
- // this.lock.writeLock().lock(); // Spigot - not required
- this.itemsById.put(key.getId(), datawatcher_item);
- // this.lock.writeLock().unlock(); // Spigot - not required
-+ // Paper start - Perf: array backed synched entity data
-+ if (this.itemsArray.length <= key.getId()) {
-+ final int newSize = Math.min(key.getId() + GROW_FACTOR, MAX_ID_VALUE);
-+
-+ this.itemsArray = java.util.Arrays.copyOf(this.itemsArray, newSize);
-+ }
-+
-+ this.itemsArray[key.getId()] = datawatcher_item;
-+ // Paper end - Perf: array backed synched entity data
- }
-
- public <T> boolean hasItem(EntityDataAccessor<T> key) {
-@@ -130,7 +144,15 @@ public class SynchedEntityData {
-
- return datawatcher_item;
- */
-- return (SynchedEntityData.DataItem) this.itemsById.get(key.getId());
-+ // Paper start - Perf: array backed synched entity data
-+ final int id = key.getId();
-+
-+ if (id < 0 || id >= this.itemsArray.length) {
-+ return null;
-+ }
-+
-+ return (DataItem<T>) this.itemsArray[id];
-+ // Paper end - Perf: array backed synched entity data
- // Spigot end
- }
-
diff --git a/removed-patches-1-20-5/0931-Deep-clone-unhandled-nbt-tags.patch b/removed-patches-1-20-5/0931-Deep-clone-unhandled-nbt-tags.patch
deleted file mode 100644
index 0f522edd88..0000000000
--- a/removed-patches-1-20-5/0931-Deep-clone-unhandled-nbt-tags.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: SoSeDiK <[email protected]>
-Date: Thu, 26 May 2022 03:30:05 +0300
-Subject: [PATCH] Deep clone unhandled nbt tags
-
-
-diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
-index 7d3d32679bdfe373d89a28c3616da5069640d1bb..9137d6d56386111dfd072859df84e533580ee294 100644
---- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
-+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
-@@ -305,7 +305,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
- private static final CraftPersistentDataTypeRegistry DATA_TYPE_REGISTRY = new CraftPersistentDataTypeRegistry();
-
- private CompoundTag internalTag;
-- final Map<String, Tag> unhandledTags = new TreeMap<String, Tag>(); // Visible for testing only // Paper
-+ Map<String, Tag> unhandledTags = new TreeMap<String, Tag>(); // Visible for testing only // Paper - Deep clone unhandled nbt tags; remove final
- private CraftPersistentDataContainer persistentDataContainer = new CraftPersistentDataContainer(CraftMetaItem.DATA_TYPE_REGISTRY);
-
- private int version = CraftMagicNumbers.INSTANCE.getDataVersion(); // Internal use only
-@@ -346,8 +346,10 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
- this.destroyableKeys = new java.util.HashSet<>(meta.destroyableKeys);
- }
- // Paper end - Add API for CanPlaceOn and CanDestroy NBT values
-- this.unhandledTags.putAll(meta.unhandledTags);
-- this.persistentDataContainer.putAll(meta.persistentDataContainer.getRaw());
-+ // Paper start - Deep clone unhandled nbt tags
-+ meta.unhandledTags.forEach((key, tag) -> this.unhandledTags.put(key, tag.copy()));
-+ this.persistentDataContainer.putAll(meta.persistentDataContainer.getTagsCloned());
-+ // Paper end - Deep clone unhandled nbt tags
-
- this.internalTag = meta.internalTag;
- if (this.internalTag != null) {
-@@ -1393,7 +1395,11 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
- if (this.hasAttributeModifiers()) {
- clone.attributeModifiers = LinkedHashMultimap.create(this.attributeModifiers);
- }
-- clone.persistentDataContainer = new CraftPersistentDataContainer(this.persistentDataContainer.getRaw(), CraftMetaItem.DATA_TYPE_REGISTRY);
-+ // Paper start - Deep clone unhandled nbt tags
-+ clone.persistentDataContainer = new CraftPersistentDataContainer(this.persistentDataContainer.getTagsCloned(), CraftMetaItem.DATA_TYPE_REGISTRY);
-+ clone.unhandledTags = new TreeMap<>(this.unhandledTags);
-+ clone.unhandledTags.replaceAll((key, tag) -> tag.copy());
-+ // Paper end - Deep clone unhandled nbt tags
- clone.hideFlag = this.hideFlag;
- clone.unbreakable = this.unbreakable;
- clone.damage = this.damage;
-diff --git a/src/main/java/org/bukkit/craftbukkit/persistence/CraftPersistentDataContainer.java b/src/main/java/org/bukkit/craftbukkit/persistence/CraftPersistentDataContainer.java
-index 5a4e7e7150b7c137b077e0b393f17ed35b5aec34..f55fdd57ced259ad5a95878840e98ffaa3db2e05 100644
---- a/src/main/java/org/bukkit/craftbukkit/persistence/CraftPersistentDataContainer.java
-+++ b/src/main/java/org/bukkit/craftbukkit/persistence/CraftPersistentDataContainer.java
-@@ -207,4 +207,12 @@ public class CraftPersistentDataContainer implements PersistentDataContainer {
- }
- }
- // Paper end - byte array serialization
-+
-+ // Paper start - deep clone tags
-+ public Map<String, Tag> getTagsCloned() {
-+ final Map<String, Tag> tags = new HashMap<>();
-+ this.customDataTags.forEach((key, tag) -> tags.put(key, tag.copy()));
-+ return tags;
-+ }
-+ // Paper end - deep clone tags
- }
diff --git a/removed-patches-1-20-5/0955-Use-correct-variable-for-initializing-CraftLootTable.patch b/removed-patches-1-20-5/0955-Use-correct-variable-for-initializing-CraftLootTable.patch
deleted file mode 100644
index ab46cdf78a..0000000000
--- a/removed-patches-1-20-5/0955-Use-correct-variable-for-initializing-CraftLootTable.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Jake Potrebic <[email protected]>
-Date: Tue, 10 Oct 2023 10:17:43 -0700
-Subject: [PATCH] Use correct variable for initializing CraftLootTable
-
-
-diff --git a/src/main/java/net/minecraft/world/level/storage/loot/LootDataManager.java b/src/main/java/net/minecraft/world/level/storage/loot/LootDataManager.java
-index 973b786368cf628815f099eefe968338c97c52ed..3ddf6ab00de2456ebf504985b88994f970e3b5c4 100644
---- a/src/main/java/net/minecraft/world/level/storage/loot/LootDataManager.java
-+++ b/src/main/java/net/minecraft/world/level/storage/loot/LootDataManager.java
-@@ -103,7 +103,7 @@ public class LootDataManager implements PreparableReloadListener, LootDataResolv
- });
- // CraftBukkit start
- map1.forEach((key, lootTable) -> {
-- if (object instanceof LootTable table) {
-+ if (lootTable instanceof LootTable table) { // Paper - Use correct variable for initializing CraftLootTable
- table.craftLootTable = new CraftLootTable(CraftNamespacedKey.fromMinecraft(key.location()), table);
- }
- });