diff --git a/patches/api/Add-missing-effects.patch b/patches/api/Add-missing-effects.patch index 93bd7fbe4..df6d3deb4 100644 --- a/patches/api/Add-missing-effects.patch +++ b/patches/api/Add-missing-effects.patch @@ -143,6 +143,16 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + */ + BEE_GROWTH(2011, Type.VISUAL, Integer.class), + ++ /** ++ * {@link Integer} param is the number of particles ++ */ ++ TURTLE_EGG_PLACEMENT(2012, Type.VISUAL, Integer.class), ++ ++ /** ++ * {@link Integer} param is relative to the number of particles ++ */ ++ SMASH_ATTACK(2013, Type.VISUAL, Integer.class), ++ + PARTICLES_SCULK_CHARGE(3006, Type.VISUAL, Integer.class), + + PARTICLES_SCULK_SHRIEK(3007, Type.SOUND), @@ -154,9 +164,15 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + @Deprecated(forRemoval = true, since = "1.20.5") + GUST_DUST(3010, Type.VISUAL), + -+ TRIAL_SPAWNER_SPAWN(3011, Type.VISUAL), ++ /** ++ * {@link Boolean} param is true for "ominous" vaults ++ */ ++ TRIAL_SPAWNER_SPAWN(3011, Type.VISUAL, Boolean.class), + -+ TRIAL_SPAWNER_SPAWN_MOB_AT(3012, Type.VISUAL), ++ /** ++ * {@link Boolean} param is true for "ominous" vaults ++ */ ++ TRIAL_SPAWNER_SPAWN_MOB_AT(3012, Type.VISUAL, Boolean.class), + + /** + * {@link Integer} param is the number of players @@ -164,6 +180,35 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + TRIAL_SPAWNER_DETECT_PLAYER(3013, Type.VISUAL, Integer.class), + + TRIAL_SPAWNER_EJECT_ITEM(3014, Type.VISUAL), ++ ++ /** ++ * {@link Boolean} param is true for "ominous" vaults ++ */ ++ VAULT_ACTIVATE(3015, Type.VISUAL, Boolean.class), ++ ++ /** ++ * {@link Boolean} param is true for "ominous" vaults ++ */ ++ VAULT_DEACTIVATE(3016, Type.VISUAL, Boolean.class), ++ ++ VAULT_EJECT_ITEM(3017, Type.VISUAL), ++ ++ SPAWN_COBWEB(3018, Type.VISUAL), ++ ++ /** ++ * {@link Integer} param is the number of players ++ */ ++ TRIAL_SPAWNER_DETECT_PLAYER_OMINOUS(3019, Type.VISUAL, Integer.class), ++ ++ /** ++ * {@link Boolean} param is true for changing to "ominous" ++ */ ++ TRIAL_SPAWNER_BECOME_OMINOUS(3020, Type.VISUAL, Boolean.class), ++ ++ /** ++ * {@link Boolean} param is true for "ominous" vaults ++ */ ++ TRIAL_SPAWNER_SPAWN_ITEM(3021, Type.VISUAL, Boolean.class) ; + private static final org.apache.logging.log4j.Logger LOGGER = org.apache.logging.log4j.LogManager.getLogger(); + // Paper end @@ -205,17 +250,18 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 public Class getData() { - return this.data; + return this.data == null ? null : this.data.get(0); // Paper -+ } -+ + } + + // Paper start - support deprecated data types + @org.jetbrains.annotations.ApiStatus.Internal + public boolean isApplicable(Object obj) { + return this.data != null && com.google.common.collect.Iterables.any(this.data, aClass -> aClass.isAssignableFrom(obj.getClass())); - } ++ } + // Paper end - support deprecated data types - ++ /** * Gets the Effect associated with the given ID. + * @@ -0,0 +0,0 @@ public enum Effect { static { diff --git a/patches/api/Replace-ItemFlag.HIDE_POTION_EFFECTS.patch b/patches/api/Replace-ItemFlag.HIDE_POTION_EFFECTS.patch index 35fe86c08..4d30647a3 100644 --- a/patches/api/Replace-ItemFlag.HIDE_POTION_EFFECTS.patch +++ b/patches/api/Replace-ItemFlag.HIDE_POTION_EFFECTS.patch @@ -30,6 +30,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + *
  • Shulker box contents
  • + *
  • Spawner descriptions
  • + * ++ * @deprecated use {@link #HIDE_ADDITIONAL_TOOLTIP} + */ + @Deprecated + public static final ItemFlag HIDE_ITEM_SPECIFICS = HIDE_ADDITIONAL_TOOLTIP; diff --git a/removed-patches-1-20-5/0603-Add-config-for-mobs-immune-to-default-effects.patch b/patches/server/Add-config-for-mobs-immune-to-default-effects.patch similarity index 50% rename from removed-patches-1-20-5/0603-Add-config-for-mobs-immune-to-default-effects.patch rename to patches/server/Add-config-for-mobs-immune-to-default-effects.patch index 62dd122fe..78b8a49f9 100644 --- a/removed-patches-1-20-5/0603-Add-config-for-mobs-immune-to-default-effects.patch +++ b/patches/server/Add-config-for-mobs-immune-to-default-effects.patch @@ -4,19 +4,6 @@ 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/world/entity/LivingEntity.java -+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -0,0 +0,0 @@ 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -25,8 +12,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 @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 +- return effect.is(MobEffects.WITHER) ? false : super.canBeAffected(effect); ++ return effect.is(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 { @@ -38,8 +25,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 @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 +- return effect.is(MobEffects.POISON) ? false : super.canBeAffected(effect); ++ return effect.is(MobEffects.POISON) && this.level().paperConfig().entities.mobEffects.spidersImmuneToPoisonEffect ? false : super.canBeAffected(effect); // Paper - Add config for mobs immune to default effects } public boolean isClimbing() { @@ -51,7 +38,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 @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 +- return effect.is(MobEffects.WITHER) ? false : super.canBeAffected(effect); ++ return effect.is(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/patches/server/Bandaid-fix-for-Effect.patch b/patches/server/Bandaid-fix-for-Effect.patch index eec81e863..fdb135ad8 100644 --- a/patches/server/Bandaid-fix-for-Effect.patch +++ b/patches/server/Bandaid-fix-for-Effect.patch @@ -16,9 +16,14 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 public static int getDataValue(Effect effect, T data) { int datavalue; switch (effect) { -+ case PARTICLES_SCULK_CHARGE: // Paper - add missing effects -+ case TRIAL_SPAWNER_DETECT_PLAYER: // Paper - add missing effects -+ case BEE_GROWTH: // Paper - add missing effects ++ // Paper start - add missing effects ++ case PARTICLES_SCULK_CHARGE: ++ case TRIAL_SPAWNER_DETECT_PLAYER: ++ case BEE_GROWTH: ++ case TURTLE_EGG_PLACEMENT: ++ case SMASH_ATTACK: ++ case TRIAL_SPAWNER_DETECT_PLAYER_OMINOUS: ++ // Paper end - add missing effects case VILLAGER_PLANT_GROW: datavalue = (Integer) data; break; @@ -51,7 +56,17 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + // Paper end break; case COMPOSTER_FILL_ATTEMPT: ++ // Paper start - add missing effects ++ case TRIAL_SPAWNER_SPAWN: ++ case TRIAL_SPAWNER_SPAWN_MOB_AT: ++ case VAULT_ACTIVATE: ++ case VAULT_DEACTIVATE: ++ case TRIAL_SPAWNER_BECOME_OMINOUS: ++ case TRIAL_SPAWNER_SPAWN_ITEM: ++ // Paper end - add missing effects datavalue = ((Boolean) data) ? 1 : 0; + break; + case BONE_MEAL_USE: diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java diff --git a/patches/server/CB-fixes.patch b/patches/server/CB-fixes.patch index 55dc47052..00d814989 100644 --- a/patches/server/CB-fixes.patch +++ b/patches/server/CB-fixes.patch @@ -120,6 +120,18 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 this.acceptsAll(Main.asList("nogui"), "Disables the graphical console"); this.acceptsAll(Main.asList("nojline"), "Disables jline and emulates the vanilla console"); +diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java ++++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java +@@ -0,0 +0,0 @@ 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/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java diff --git a/removed-patches-1-20-5/0931-Deep-clone-unhandled-nbt-tags.patch b/patches/server/Deep-clone-nbt-tags-in-PDC.patch similarity index 54% rename from removed-patches-1-20-5/0931-Deep-clone-unhandled-nbt-tags.patch rename to patches/server/Deep-clone-nbt-tags-in-PDC.patch index 2c981b5da..1274032c4 100644 --- a/removed-patches-1-20-5/0931-Deep-clone-unhandled-nbt-tags.patch +++ b/patches/server/Deep-clone-nbt-tags-in-PDC.patch @@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Thu, 26 May 2022 03:30:05 +0300 -Subject: [PATCH] Deep clone unhandled nbt tags +Subject: [PATCH] Deep clone nbt tags in PDC diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java @@ -9,40 +9,23 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java @@ -0,0 +0,0 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { - private static final CraftPersistentDataTypeRegistry DATA_TYPE_REGISTRY = new CraftPersistentDataTypeRegistry(); - - private CompoundTag internalTag; -- final Map unhandledTags = new TreeMap(); // Visible for testing only // Paper -+ Map unhandledTags = new TreeMap(); // 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 -@@ -0,0 +0,0 @@ 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.damage = meta.damage; + this.maxDamage = meta.maxDamage; + this.unhandledTags = 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.persistentDataContainer.putAll(meta.persistentDataContainer.getTagsCloned()); // Paper - deep clone NBT tags + + this.customTag = meta.customTag; - this.internalTag = meta.internalTag; - if (this.internalTag != null) { @@ -0,0 +0,0 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { - if (this.hasAttributeModifiers()) { - clone.attributeModifiers = LinkedHashMultimap.create(this.attributeModifiers); + if (this.customTag != null) { + clone.customTag = this.customTag.copy(); } - 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.persistentDataContainer = new CraftPersistentDataContainer(this.persistentDataContainer.getTagsCloned(), CraftMetaItem.DATA_TYPE_REGISTRY); // Paper - deep clone NBT tags clone.hideFlag = this.hideFlag; + clone.hideTooltip = this.hideTooltip; 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/craftbukkit/persistence/CraftPersistentDataContainer.java diff --git a/patches/server/Paper-config-files.patch b/patches/server/Paper-config-files.patch index f6675f008..f8752fda0 100644 --- a/patches/server/Paper-config-files.patch +++ b/patches/server/Paper-config-files.patch @@ -646,8 +646,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + public boolean performUsernameValidation = true; + @Comment("This setting controls if players should be able to create headless pistons.") + public boolean allowHeadlessPistons = false; -+ @Comment("This setting controls if grindstones should be able to output overstacked items (such as cursed books).") -+ public boolean allowGrindstoneOverstacking = false; + @Comment("This setting controls what compression format is used for region files.") + public CompressionFormat compressionFormat = CompressionFormat.ZLIB; + @@ -1367,7 +1365,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + path("tnt-explosion-volume"), + path("entities", "spawning", "despawn-ranges", "soft"), + path("entities", "spawning", "despawn-ranges", "hard"), -+ path("fixes", "fix-curing-zombie-villager-discount-exploit") ++ path("fixes", "fix-curing-zombie-villager-discount-exploit"), ++ path("entities", "mob-effects", "undead-immune-to-certain-effects") + }; + + NodePath[] REMOVED_GLOBAL_PATHS = { @@ -1388,7 +1387,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + path("baby-zombie-movement-speed"), + path("limit-player-interactions"), + path("warnWhenSettingExcessiveVelocity"), -+ path("logging", "use-rgb-for-named-text-colors") ++ path("logging", "use-rgb-for-named-text-colors"), ++ path("unsupported-settings", "allow-grindstone-overstacking") + }; + +} @@ -1539,7 +1539,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + public MobEffects mobEffects; + + public class MobEffects extends ConfigurationPart { -+ public boolean undeadImmuneToCertainEffects = true; + public boolean spidersImmuneToPoisonEffect = true; + public ImmuneToWitherEffect immuneToWitherEffect; + diff --git a/patches/server/Suspicious-Effect-Entry-API.patch b/patches/server/Suspicious-Effect-Entry-API.patch index f3a562dd5..a808a5b96 100644 --- a/patches/server/Suspicious-Effect-Entry-API.patch +++ b/patches/server/Suspicious-Effect-Entry-API.patch @@ -141,46 +141,55 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 - int index = this.indexOfEffect(effect.getType()); - if (index != -1) { +- if (overwrite) { +- PotionEffect old = this.customEffects.get(index); +- if (old.getDuration() == effect.getDuration()) { + // Paper start - add overloads to use suspicious effect entry to mushroom cow and suspicious stew meta + @Override + public boolean addCustomEffect(final io.papermc.paper.potion.SuspiciousEffectEntry suspiciousEffectEntry, final boolean overwrite) { + Preconditions.checkArgument(suspiciousEffectEntry != null, "Suspicious effect entry cannot be null"); -+ final List matchingEffects = this.customEffects.stream().filter( -+ entry -> entry.effect() == suspiciousEffectEntry.effect() -+ ).toList(); -+ if (!matchingEffects.isEmpty()) { - if (overwrite) { -- PotionEffect old = this.customEffects.get(index); -- if (old.getDuration() == effect.getDuration()) { -+ boolean foundMatchingDuration = false; -+ boolean mutated = false; -+ for (final io.papermc.paper.potion.SuspiciousEffectEntry matchingEffect : matchingEffects) { -+ if (matchingEffect.duration() != suspiciousEffectEntry.duration()) { -+ this.customEffects.remove(suspiciousEffectEntry); -+ mutated = true; -+ } else { -+ foundMatchingDuration = true; ++ if (this.hasCustomEffects()) { ++ final List matchingEffects = this.customEffects.stream().filter( ++ entry -> entry.effect() == suspiciousEffectEntry.effect() ++ ).toList(); ++ if (!matchingEffects.isEmpty()) { ++ if (overwrite) { ++ boolean foundMatchingDuration = false; ++ boolean mutated = false; ++ for (final io.papermc.paper.potion.SuspiciousEffectEntry matchingEffect : matchingEffects) { ++ if (matchingEffect.duration() != suspiciousEffectEntry.duration()) { ++ this.customEffects.remove(suspiciousEffectEntry); ++ mutated = true; ++ } else { ++ foundMatchingDuration = true; ++ } + } -+ } -+ if (foundMatchingDuration && !mutated) { ++ if (foundMatchingDuration && !mutated) { ++ return false; ++ } else if (!foundMatchingDuration) { ++ this.customEffects.add(suspiciousEffectEntry); ++ } ++ return true; ++ } else { return false; -+ } else if (!foundMatchingDuration) { -+ this.customEffects.add(suspiciousEffectEntry); } - this.customEffects.set(index, effect); - return true; +- return true; - } else { -+ } else { - return false; - } - } else { - if (this.customEffects == null) { - this.customEffects = new ArrayList<>(); +- return false; } +- } else { +- if (this.customEffects == null) { +- this.customEffects = new ArrayList<>(); +- } - this.customEffects.add(effect); -+ this.customEffects.add(suspiciousEffectEntry); - return true; +- return true; } ++ if (this.customEffects == null) { ++ this.customEffects = new ArrayList<>(); ++ } ++ this.customEffects.add(suspiciousEffectEntry); ++ return true; } + // Paper end - add overloads to use suspicious effect entry to mushroom cow and suspicious stew meta diff --git a/patches/server/handle-converting-old-serialized-names-to-new-names.patch b/patches/server/handle-converting-old-serialized-names-to-new-names.patch index 665c21ec8..e803fb54d 100644 --- a/patches/server/handle-converting-old-serialized-names-to-new-names.patch +++ b/patches/server/handle-converting-old-serialized-names-to-new-names.patch @@ -8,6 +8,15 @@ diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +@@ -0,0 +0,0 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { + for (Object hideFlagObject : hideFlags) { + String hideFlagString = (String) hideFlagObject; + try { +- ItemFlag hideFlatEnum = ItemFlag.valueOf(hideFlagString); ++ ItemFlag hideFlatEnum = ItemFlag.valueOf(org.bukkit.craftbukkit.legacy.FieldRename.convertItemFlagName(org.bukkit.craftbukkit.util.ApiVersion.CURRENT, hideFlagString)); // Paper - handle old field names + this.addItemFlags(hideFlatEnum); + } catch (IllegalArgumentException ex) { + // Ignore when we got a old String which does not map to a Enum value anymore @@ -0,0 +0,0 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { enchantKey = "SWEEPING_EDGE"; } @@ -17,16 +26,12 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 if ((enchantment != null) && (entry.getValue() instanceof Integer)) { enchantments.put(enchantment, (Integer) entry.getValue()); } -diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java -+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java -@@ -0,0 +0,0 @@ public class CraftMetaSpawnEgg extends CraftMetaItem implements SpawnEggMeta { - - String entityType = SerializableMeta.getString(map, CraftMetaSpawnEgg.ENTITY_ID.BUKKIT, true); - if (entityType != null) { -- this.spawnedType = EntityType.fromName(entityType); -+ this.spawnedType = EntityType.fromName(org.bukkit.craftbukkit.legacy.FieldRename.convertEntityTypeName(org.bukkit.craftbukkit.util.ApiVersion.CURRENT, entityType)); // Paper - handle old entity type field names - } - } - +@@ -0,0 +0,0 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { + continue; + } + AttributeModifier modifier = (AttributeModifier) o; +- Attribute attribute = EnumUtils.getEnum(Attribute.class, attributeName.toUpperCase(Locale.ROOT)); ++ Attribute attribute = EnumUtils.getEnum(Attribute.class, org.bukkit.craftbukkit.legacy.FieldRename.convertAttributeName(org.bukkit.craftbukkit.util.ApiVersion.CURRENT, attributeName.toUpperCase(Locale.ROOT))); // Paper - handle old field names + if (attribute == null) { + continue; + } 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 82954cf09..000000000 --- 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 -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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java -+++ b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java -@@ -0,0 +0,0 @@ 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/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 ac05702e6..000000000 --- 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 -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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/world/item/MapItem.java -+++ b/src/main/java/net/minecraft/world/item/MapItem.java -@@ -0,0 +0,0 @@ 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 dimension) { -diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java -+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java -@@ -0,0 +0,0 @@ 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 9d7cea9e9..000000000 --- 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 -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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSuspiciousStew.java -+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSuspiciousStew.java -@@ -0,0 +0,0 @@ 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)); - } - } -@@ -0,0 +0,0 @@ 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 8720878d2..000000000 --- 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 -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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java -+++ b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java -@@ -0,0 +0,0 @@ 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 bbc3b82f1..000000000 --- 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 -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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/resources/RegistryOps.java -+++ b/src/main/java/net/minecraft/resources/RegistryOps.java -@@ -0,0 +0,0 @@ public class RegistryOps extends DelegatingOps { - - private static RegistryOps.RegistryInfoLookup memoizeLookup(RegistryOps.RegistryInfoLookup registryInfoGetter) { - return new RegistryOps.RegistryInfoLookup() { -- private final Map>, Optional>> 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>, Optional>> lookups = new java.util.concurrent.ConcurrentHashMap<>(); // Paper - fix concurrent access to lookups field - - @Override - public Optional> lookup(ResourceKey> 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 146e2d9a8..000000000 --- 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 -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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java -+++ b/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java -@@ -0,0 +0,0 @@ public class SynchedEntityData { - private final Int2ObjectMap> 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; -@@ -0,0 +0,0 @@ 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 boolean hasItem(EntityDataAccessor key) { -@@ -0,0 +0,0 @@ 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) this.itemsArray[id]; -+ // Paper end - Perf: array backed synched entity data - // Spigot end - } - 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 7c396cd8a..000000000 --- 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 -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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 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 -@@ -0,0 +0,0 @@ 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); - } - });