From 5bf99f417535420d4055277ad90835458dd3cd2a Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 21:23:19 +0100 Subject: [PATCH 01/40] typo --- paper-api/src/main/java/org/bukkit/entity/Mob.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paper-api/src/main/java/org/bukkit/entity/Mob.java b/paper-api/src/main/java/org/bukkit/entity/Mob.java index a8c7099f5634..1ab3286a8139 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Mob.java +++ b/paper-api/src/main/java/org/bukkit/entity/Mob.java @@ -33,7 +33,7 @@ public interface Mob extends LivingEntity, Lootable, Leashable { * * * @param state a TriState representing the state of the override - * @deprecated the client no longer allow to change that setting and will not render the entity + * @deprecated the client no longer allows to change that setting and will not render the entity */ @Deprecated(since = "26.2") void setDespawnInPeacefulOverride(TriState state); @@ -48,7 +48,7 @@ public interface Mob extends LivingEntity, Lootable, Leashable { * * @return a TriState representing the state of the override * @see Mob#setDespawnInPeacefulOverride(TriState) - * @deprecated the client no longer allow to change that setting and will not render the entity + * @deprecated the client no longer allows to change that setting and will not render the entity */ @Deprecated(since = "26.2") TriState getDespawnInPeacefulOverride(); From 7caef291af5491f42becb3865ec8fd381e080b81 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 21:25:41 +0100 Subject: [PATCH 02/40] vector --- paper-api/src/main/java/org/bukkit/RegionAccessor.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/paper-api/src/main/java/org/bukkit/RegionAccessor.java b/paper-api/src/main/java/org/bukkit/RegionAccessor.java index d33ec8f850eb..02e3908a2f60 100644 --- a/paper-api/src/main/java/org/bukkit/RegionAccessor.java +++ b/paper-api/src/main/java/org/bukkit/RegionAccessor.java @@ -101,14 +101,14 @@ default BlockState getBlockState(@NotNull Location location) { } /** - * Gets the {@link BlockState} at the given {@link Location}. + * Gets the {@link BlockState} at the given {@link Vector}. * - * @param location The location of the block state - * @return Block state at the given location + * @param vector The vector of the block state + * @return Block state at the given vector */ @NotNull - default BlockState getBlockState(@NotNull Vector location) { - return this.getBlockState(location.getBlockX(), location.getBlockY(), location.getBlockZ()); + default BlockState getBlockState(@NotNull Vector vector) { + return this.getBlockState(vector.getBlockX(), vector.getBlockY(), vector.getBlockZ()); } /** From 2762b3bccabc32c4ec642c1aa23672c01391418a Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 21:52:17 +0100 Subject: [PATCH 03/40] fix typo --- .../main/java/org/bukkit/craftbukkit/entity/CraftStrider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java index 5f9002b16c71..23121ced8bfb 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java @@ -63,7 +63,7 @@ public void setCurrentBoostTicks(int ticks) { } int max = this.getHandle().steering.boostTimeTotal(); - Preconditions.checkArgument(ticks >= 0 && ticks <= max, "boost ticks must not exceed 0 or %s (inclusive)", max); + Preconditions.checkArgument(ticks >= 0 && ticks <= max, "boost ticks must be between 0 and %s (inclusive)", max); this.getHandle().steering.boostTime = ticks; } From 97809b7ca8bfefa29dfac8c5ca68c876b6dcce86 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:00:16 +0100 Subject: [PATCH 04/40] should check passenger not the entity --- .../java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/paper-server/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java index 3ac6c7571a20..fadaf706ebde 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -506,7 +506,7 @@ public byte[] serializeEntity(org.bukkit.entity.Entity entity, EntitySerializati } else { // Ensure misc flag is not needed Preconditions.checkArgument( - nmsEntity.getType().canSerialize() || allowMiscSerialization, + e.getType().canSerialize() || allowMiscSerialization, "Cannot serialize misc non-saveable entity %s(%s) without the MISC flag", e.getType().toShortString(), e.getStringUUID() From 3b8346f7365f128e303a143b9acd753dcb154207 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:01:53 +0100 Subject: [PATCH 05/40] should be minInclusive --- .../java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java index b824e8527bac..1de6da30ac7e 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java @@ -172,7 +172,7 @@ public static SpawnRule fromMinecraftRule(SpawnData.CustomSpawnRules rule) { InclusiveRange blockLight = rule.blockLightLimit(); InclusiveRange skyLight = rule.skyLightLimit(); - return new SpawnRule(blockLight.maxInclusive(), blockLight.maxInclusive(), skyLight.minInclusive(), skyLight.maxInclusive()); + return new SpawnRule(blockLight.minInclusive(), blockLight.maxInclusive(), skyLight.minInclusive(), skyLight.maxInclusive()); } @Override From c149bab0bdb25590a781f6ff4a78318f08d4d4c5 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:03:38 +0100 Subject: [PATCH 06/40] don't register geyser twice --- .../src/main/java/org/bukkit/craftbukkit/CraftParticle.java | 1 - 1 file changed, 1 deletion(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftParticle.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftParticle.java index d91961f17a39..cdf4c5d9751d 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftParticle.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftParticle.java @@ -253,7 +253,6 @@ public ParticleOptions createParticleParam(Particle.GeyserBase data) { add("instant_effect", spellFunction); add("geyser", geyser); add("geyser_plume", geyser); - add("geyser", geyser); add("geyser_base", geyserBase); add("geyser_poof", geyserBase); } From f60d72d22eb22b0a47faf8f6baf228ae6754a3b5 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:04:33 +0100 Subject: [PATCH 07/40] missing comma --- .../src/main/java/org/bukkit/craftbukkit/CraftChunk.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftChunk.java index f020f310c4bc..f8254b3ec264 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftChunk.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftChunk.java @@ -100,7 +100,7 @@ public int getZ() { @Override public String toString() { - return "CraftChunk{" + "x=" + this.getX() + "z=" + this.getZ() + '}'; + return "CraftChunk{" + "x=" + this.getX() + ", z=" + this.getZ() + '}'; } @Override From fd7585e3796ed94cd01b201932b76cd7e0a14b0f Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:08:10 +0100 Subject: [PATCH 08/40] fix entityspawnevent being called twice for xp orbs --- .../java/org/bukkit/craftbukkit/event/CraftEventFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index a5ea91906abe..cfad8e879bd5 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -743,7 +743,7 @@ public static boolean doEntityAddEventCalling(Level level, Entity entity, SpawnR return true; } event = CraftEventFactory.callLightningStrikeEvent((LightningStrike) entity.getBukkitEntity(), cause); - } else if (!(entity instanceof ServerPlayer)) { + } else if (!(entity instanceof ServerPlayer) && !(entity instanceof net.minecraft.world.entity.ExperienceOrb)) { event = CraftEventFactory.callEntitySpawnEvent(entity); } From d75addde22fe8487b1149b124f3498a477149b6d Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:10:42 +0100 Subject: [PATCH 09/40] these are the wrong way around is it too late to fix? --- .../java/org/bukkit/craftbukkit/event/CraftEventFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index cfad8e879bd5..56b23824e524 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -576,7 +576,7 @@ public static PlayerBucketEmptyEvent callPlayerBucketEmptyEvent(Level level, net } public static PlayerBucketFillEvent callPlayerBucketFillEvent(Level level, net.minecraft.world.entity.player.Player player, BlockPos changed, BlockPos clicked, Direction clickedFace, ItemStack itemInHand, net.minecraft.world.item.Item bucket, InteractionHand hand) { - return (PlayerBucketFillEvent) CraftEventFactory.getPlayerBucketEvent(true, level, player, clicked, changed, clickedFace, itemInHand, bucket, hand); + return (PlayerBucketFillEvent) CraftEventFactory.getPlayerBucketEvent(true, level, player, changed, clicked, clickedFace, itemInHand, bucket, hand); } private static PlayerEvent getPlayerBucketEvent(boolean isFilling, Level level, net.minecraft.world.entity.player.Player player, BlockPos changed, BlockPos clicked, Direction clickedFace, ItemStack bucket, net.minecraft.world.item.Item item, InteractionHand hand) { From 9ed0162fadec25332111d5f2d404c9dba22fd28f Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:11:53 +0100 Subject: [PATCH 10/40] fix minining_fatigue typo --- .../org/bukkit/craftbukkit/attribute/AttributeMappings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/attribute/AttributeMappings.java b/paper-server/src/main/java/org/bukkit/craftbukkit/attribute/AttributeMappings.java index 7bcaef769727..1ce92de9daac 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/attribute/AttributeMappings.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/attribute/AttributeMappings.java @@ -16,7 +16,7 @@ final class AttributeMappings { add(6967552254039378640L, -9116175396973475259L, "enchantment.aqua_affinity"); add(5279725409867744698L, -5150363631200102632L, "attacking"); add(148071211714102867L, -7685811609035173472L, "attacking"); - add(6196088217904236654L, -7493791321850887290L, "effect.minining_fatigue"); + add(6196088217904236654L, -7493791321850887290L, "effect.mining_fatigue"); add(-5084161844451524480L, -8859020046251006329L, "enchantment.soul_speed"); add(-7907339078496465106L, -8112074600724210224L, "enchantment.swift_sneak"); add(6688265815086220243L, -6545541163342161890L, "drinking"); From ea253cf2c468657a62713b4fd2a22786a7e54169 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:13:13 +0100 Subject: [PATCH 11/40] close %s --- .../org/bukkit/craftbukkit/profile/CraftPlayerTextures.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/profile/CraftPlayerTextures.java b/paper-server/src/main/java/org/bukkit/craftbukkit/profile/CraftPlayerTextures.java index 6cd5078fec87..bd3e57d1ba9a 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/profile/CraftPlayerTextures.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/profile/CraftPlayerTextures.java @@ -27,7 +27,7 @@ private static void validateTextureUrl(@Nullable URL url) { if (url == null) return; Preconditions.checkArgument(url.getHost().equals(CraftPlayerTextures.MINECRAFT_HOST), "Expected host '%s' but got '%s'", CraftPlayerTextures.MINECRAFT_HOST, url.getHost()); - Preconditions.checkArgument(url.getPath().startsWith(CraftPlayerTextures.MINECRAFT_PATH), "Expected path starting with '%s' but got '%s", CraftPlayerTextures.MINECRAFT_PATH, url.getPath()); + Preconditions.checkArgument(url.getPath().startsWith(CraftPlayerTextures.MINECRAFT_PATH), "Expected path starting with '%s' but got '%s'", CraftPlayerTextures.MINECRAFT_PATH, url.getPath()); } private static @Nullable URL parseUrl(@Nullable String urlString) { From 35f219ec0ce9f1d5b14cb79d378d652df5e6c8af Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:16:27 +0100 Subject: [PATCH 12/40] should be %s not %S --- .../java/org/bukkit/craftbukkit/structure/CraftStructure.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/structure/CraftStructure.java b/paper-server/src/main/java/org/bukkit/craftbukkit/structure/CraftStructure.java index 2184aa82229e..87fa64ae749a 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/structure/CraftStructure.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/structure/CraftStructure.java @@ -87,7 +87,7 @@ public void place(RegionAccessor regionAccessor, BlockVector location, boolean i Preconditions.checkArgument(entityTransformers != null, "EntityTransformers cannot be null"); location.checkFinite(); - Preconditions.checkArgument(integrity >= 0F && integrity <= 1F, "Integrity value (%S) must be between 0 and 1 inclusive", integrity); + Preconditions.checkArgument(integrity >= 0F && integrity <= 1F, "Integrity value (%s) must be between 0 and 1 inclusive", integrity); RandomSource randomSource = new RandomSourceWrapper(random); StructurePlaceSettings definedstructureinfo = new StructurePlaceSettings() From 8cb2fb3a81d8e110f8d9b7d6f09ebdd29014d619 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:25:32 +0100 Subject: [PATCH 13/40] closing curly --- .../java/ca/spottedleaf/moonrise/common/util/EntityUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/ca/spottedleaf/moonrise/common/util/EntityUtil.java b/paper-server/src/main/java/ca/spottedleaf/moonrise/common/util/EntityUtil.java index db5805298d33..acb2f6fe799d 100644 --- a/paper-server/src/main/java/ca/spottedleaf/moonrise/common/util/EntityUtil.java +++ b/paper-server/src/main/java/ca/spottedleaf/moonrise/common/util/EntityUtil.java @@ -25,7 +25,7 @@ private static String dumpEntityWithoutReferences(final Entity entity) { return "{type=" + entity.getClass().getSimpleName() + ",id=" + entity.getId() + ",uuid=" + entity.getUUID() + ",pos=" + formatVec(entity.position()) + ",mot=" + formatVec(entity.getDeltaMovement()) + ",aabb=" + entity.getBoundingBox() + ",removed=" + entity.getRemovalReason() + ",has_vehicle=" + (entity.getVehicle() != null) - + ",passenger_count=" + entity.getPassengers().size(); + + ",passenger_count=" + entity.getPassengers().size() + "}"; } public static String dumpEntity(final Entity entity) { From 489d10fea1aa527b4b536bb472da82c07c435416 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:26:19 +0100 Subject: [PATCH 14/40] should be destroystokyo --- .../java/io/papermc/paper/plugin/util/NamespaceChecker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/io/papermc/paper/plugin/util/NamespaceChecker.java b/paper-server/src/main/java/io/papermc/paper/plugin/util/NamespaceChecker.java index fd55fd1d6518..360ab39cc8a5 100644 --- a/paper-server/src/main/java/io/papermc/paper/plugin/util/NamespaceChecker.java +++ b/paper-server/src/main/java/io/papermc/paper/plugin/util/NamespaceChecker.java @@ -10,7 +10,7 @@ public class NamespaceChecker { "net.minecraft.", "org.bukkit.", "io.papermc.paper.", - "com.destroystokoyo.paper." + "com.destroystokyo.paper." }; /** From 2cdd9be6a6d68c0e73fa85eb7a486fb14428d55b Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:27:53 +0100 Subject: [PATCH 15/40] pass value not data --- .../serializer/constraints/PluginConfigConstraints.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/io/papermc/paper/plugin/provider/configuration/serializer/constraints/PluginConfigConstraints.java b/paper-server/src/main/java/io/papermc/paper/plugin/provider/configuration/serializer/constraints/PluginConfigConstraints.java index 3043a4216ec1..e0379ef04f25 100644 --- a/paper-server/src/main/java/io/papermc/paper/plugin/provider/configuration/serializer/constraints/PluginConfigConstraints.java +++ b/paper-server/src/main/java/io/papermc/paper/plugin/provider/configuration/serializer/constraints/PluginConfigConstraints.java @@ -32,7 +32,7 @@ public Constraint make(PluginName data, Type type) { return value -> { if (value != null) { if (RESERVED_KEYS.contains(value.toLowerCase(Locale.ROOT))) { - throw new SerializationException("Restricted name, cannot use '%s' as a plugin name.".formatted(data)); + throw new SerializationException("Restricted name, cannot use '%s' as a plugin name.".formatted(value)); } else if (value.indexOf(' ') != -1) { // For legacy reasons, the space condition has a separate exception message. throw new SerializationException("Restricted name, cannot use 0x20 (space character) in a plugin name."); From c7679d149e1f4fbda5d11e4262fa91f7e5c7679e Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:29:56 +0100 Subject: [PATCH 16/40] this should probably not be case sensitive --- .../global/versioned/V31_AllowNetherPropertiesToConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/io/papermc/paper/configuration/transformation/global/versioned/V31_AllowNetherPropertiesToConfig.java b/paper-server/src/main/java/io/papermc/paper/configuration/transformation/global/versioned/V31_AllowNetherPropertiesToConfig.java index 8b8e19c555ed..e91a5e497574 100644 --- a/paper-server/src/main/java/io/papermc/paper/configuration/transformation/global/versioned/V31_AllowNetherPropertiesToConfig.java +++ b/paper-server/src/main/java/io/papermc/paper/configuration/transformation/global/versioned/V31_AllowNetherPropertiesToConfig.java @@ -22,7 +22,7 @@ public void apply(final ConfigurationNode root) throws ConfigurateException { final String raw = server.settings.getProperties().properties.getProperty("allow-nether"); if (raw != null) { final ConfigurationNode node = root.node("misc", "enable-nether"); - node.set(raw.equals("true")); + node.set(Boolean.parseBoolean(raw)); server.settings.update((config) -> { final Properties newProps = new Properties(config.properties); newProps.remove("allow-nether"); From 913e396422f3a112f107652da5c55f80b2aacf34 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:32:17 +0100 Subject: [PATCH 17/40] make it final then "methods below are overridden to make final" --- .../src/main/java/io/papermc/paper/registry/HolderableBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java b/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java index 1881884d30c9..dcfb068e896f 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java @@ -34,7 +34,7 @@ public final boolean equals(final Object obj) { } @Override - public String toString() { + public final String toString() { return Holderable.super.implToString(); } From d6ce72dc61fff35173c92095ddc226c05076208a Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:33:01 +0100 Subject: [PATCH 18/40] its not identity anymore? --- .../java/io/papermc/paper/registry/PaperRegistryAccess.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryAccess.java b/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryAccess.java index 28b4e813752f..a3d3541dc949 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryAccess.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryAccess.java @@ -24,7 +24,7 @@ public class PaperRegistryAccess implements RegistryAccess { // We want to do registration there, so we have access to the nms.Registry instance in order to wrap it in a CraftRegistry instance. // The memoized Supplier is needed because we *can't* instantiate any CraftRegistry class until **all** the BuiltInRegistries have been added // to this map because that would class-load org.bukkit.Registry which would query this map. - private final Map, RegistryHolder> registries = new ConcurrentHashMap<>(); // is "identity" because RegistryKey overrides equals and hashCode + private final Map, RegistryHolder> registries = new ConcurrentHashMap<>(); public static PaperRegistryAccess instance() { return (PaperRegistryAccess) RegistryAccessHolder.INSTANCE.orElseThrow(() -> new IllegalStateException("No RegistryAccess implementation found")); From fd8878c7caa1bf7dcbbd4332b2378c4ecb5a5b45 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:41:46 +0100 Subject: [PATCH 19/40] hasConsumeParticles should be included in builder aswell --- .../io/papermc/paper/datacomponent/item/PaperConsumable.java | 1 + 1 file changed, 1 insertion(+) diff --git a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperConsumable.java b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperConsumable.java index c15bf575d602..b7727bbdc778 100644 --- a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperConsumable.java +++ b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperConsumable.java @@ -59,6 +59,7 @@ public Consumable.Builder toBuilder() { .consumeSeconds(this.consumeSeconds()) .animation(this.animation()) .sound(this.sound()) + .hasConsumeParticles(this.hasConsumeParticles()) .addEffects(this.consumeEffects()); } From e996d24de26dcd3cfd596c37a4e024c5493ff2eb Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:43:31 +0100 Subject: [PATCH 20/40] should be orElseGet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit second string param in requireNonNull isn't the fallback 😭 --- .../paper/datacomponent/item/PaperWrittenBookContent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperWrittenBookContent.java b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperWrittenBookContent.java index b2d30bac03d5..da0a536499a7 100644 --- a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperWrittenBookContent.java +++ b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperWrittenBookContent.java @@ -63,7 +63,7 @@ public boolean resolved() { public Book asBook() { final Filtered title = this.title(); return Book.book( - Component.text(Objects.requireNonNull(title.filtered(), title::raw)), + Component.text(Objects.requireNonNullElseGet(title.filtered(), title::raw)), Component.text(this.author()), this.pages() .stream() From ff1e58a3049e07ab20775640dddf1c9f808ccbda Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:46:35 +0100 Subject: [PATCH 21/40] don't return until a match is found? --- .../command/brigadier/bukkit/BukkitBrigForwardingMap.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paper-server/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitBrigForwardingMap.java b/paper-server/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitBrigForwardingMap.java index d08ca38b4f04..3bdd51a3dbd1 100644 --- a/paper-server/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitBrigForwardingMap.java +++ b/paper-server/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitBrigForwardingMap.java @@ -69,8 +69,8 @@ public boolean containsValue(@Nullable final Object value) { for (CommandNode child : this.getDispatcher().getRoot().getChildren()) { // If child is a bukkit command node, we can convert it! - if (child instanceof BukkitCommandNode bukkitCommandNode) { - return bukkitCommandNode.getBukkitCommand().equals(value); + if (child instanceof BukkitCommandNode bukkitCommandNode && bukkitCommandNode.getBukkitCommand().equals(value)) { + return true; } } From c1029cc7cf80ab4caad382ff72037b79a9acacb4 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:48:05 +0100 Subject: [PATCH 22/40] playermobcaps not playermobcount --- .../io/papermc/paper/command/subcommands/MobcapsCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/io/papermc/paper/command/subcommands/MobcapsCommand.java b/paper-server/src/main/java/io/papermc/paper/command/subcommands/MobcapsCommand.java index 4bee7701f7c5..86ea6ada75e1 100644 --- a/paper-server/src/main/java/io/papermc/paper/command/subcommands/MobcapsCommand.java +++ b/paper-server/src/main/java/io/papermc/paper/command/subcommands/MobcapsCommand.java @@ -146,7 +146,7 @@ private void printPlayerMobcaps(final CommandSender sender, final String[] args) if (sender instanceof Player pl) { player = pl; } else { - sender.sendMessage(Component.text("Must specify a player! ex: '/paper playermobcount playerName'", NamedTextColor.RED)); + sender.sendMessage(Component.text("Must specify a player! ex: '/paper playermobcaps playerName'", NamedTextColor.RED)); return; } } else if (args.length == 1) { From fab0e7736f682b44d2918e786cb3f9923a683bb5 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:54:00 +0100 Subject: [PATCH 23/40] this addAll call is off by one --- .../src/main/java/io/papermc/paper/util/SizeLimitedSet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/io/papermc/paper/util/SizeLimitedSet.java b/paper-server/src/main/java/io/papermc/paper/util/SizeLimitedSet.java index 1eee077b1e2c..c41f02ee9d3b 100644 --- a/paper-server/src/main/java/io/papermc/paper/util/SizeLimitedSet.java +++ b/paper-server/src/main/java/io/papermc/paper/util/SizeLimitedSet.java @@ -27,7 +27,7 @@ public boolean add(final E element) { @Override public boolean addAll(final Collection collection) { - if ((collection.size() + this.size()) >= this.maxSize) { + if ((collection.size() + this.size()) > this.maxSize) { return false; } boolean edited = false; From de20692a5cc2170a2c75ea3c3e1b6753f5b405c4 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:56:46 +0100 Subject: [PATCH 24/40] dynamics are immutable --- .../papermc/paper/world/migration/VanillaWorldMigration.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/paper-server/src/main/java/io/papermc/paper/world/migration/VanillaWorldMigration.java b/paper-server/src/main/java/io/papermc/paper/world/migration/VanillaWorldMigration.java index 00ab529b50f3..e99696f2cbb6 100644 --- a/paper-server/src/main/java/io/papermc/paper/world/migration/VanillaWorldMigration.java +++ b/paper-server/src/main/java/io/papermc/paper/world/migration/VanillaWorldMigration.java @@ -124,8 +124,7 @@ private static void migrateLegacyPdc( targetStorage.set(PaperWorldPDC.TYPE, pdc); targetStorage.saveAndJoin(); - WorldMigrationSupport.clearLegacyPdc(levelData); - context.rootAccess().saveLevelData(levelData); + context.rootAccess().saveLevelData(WorldMigrationSupport.clearLegacyPdc(levelData)); } } From 85c4ee8d3f829ea23e3776db4c5d9a3ffd3eb3ec Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 22:57:22 +0100 Subject: [PATCH 25/40] dynamics are immutable --- .../papermc/paper/world/migration/WorldMigrationSupport.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paper-server/src/main/java/io/papermc/paper/world/migration/WorldMigrationSupport.java b/paper-server/src/main/java/io/papermc/paper/world/migration/WorldMigrationSupport.java index f961539a3e38..d94e2ee43c15 100644 --- a/paper-server/src/main/java/io/papermc/paper/world/migration/WorldMigrationSupport.java +++ b/paper-server/src/main/java/io/papermc/paper/world/migration/WorldMigrationSupport.java @@ -45,8 +45,8 @@ private WorldMigrationSupport() { .orElse(null); } - static void clearLegacyPdc(final Dynamic levelData) { - levelData.remove("BukkitValues"); + static Dynamic clearLegacyPdc(final Dynamic levelData) { + return levelData.remove("BukkitValues"); } static @Nullable UUID readLegacyUuid(final Path sourceRoot) { From 30d98a22ca33f37eaa4037bcfb2c3b78ce88a559 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 23:00:49 +0100 Subject: [PATCH 26/40] should be checking effectivePotionType not type --- .../main/java/io/papermc/paper/potion/PaperPotionBrewer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/io/papermc/paper/potion/PaperPotionBrewer.java b/paper-server/src/main/java/io/papermc/paper/potion/PaperPotionBrewer.java index 9bba6ce4d4f9..0946560c575d 100644 --- a/paper-server/src/main/java/io/papermc/paper/potion/PaperPotionBrewer.java +++ b/paper-server/src/main/java/io/papermc/paper/potion/PaperPotionBrewer.java @@ -35,7 +35,7 @@ public Collection getEffects(PotionType type, boolean upgraded, bo } final org.bukkit.potion.PotionType effectivePotionType = org.bukkit.Registry.POTION.get(effectiveKey); - Preconditions.checkNotNull(type, "Unknown potion type from data " + effectiveKey.asMinimalString()); // Legacy error message in 1.20.4 + Preconditions.checkNotNull(effectivePotionType, "Unknown potion type from data " + effectiveKey.asMinimalString()); // Legacy error message in 1.20.4 return effectivePotionType.getPotionEffects(); } From 6493197dd357ab2f746741e09d3cf29530a286af Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 23:22:28 +0100 Subject: [PATCH 27/40] make drops actually immutable --- .../org/bukkit/event/player/PlayerShearEntityEvent.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/paper-api/src/main/java/org/bukkit/event/player/PlayerShearEntityEvent.java b/paper-api/src/main/java/org/bukkit/event/player/PlayerShearEntityEvent.java index 29179b6b330d..f0e28910ef02 100644 --- a/paper-api/src/main/java/org/bukkit/event/player/PlayerShearEntityEvent.java +++ b/paper-api/src/main/java/org/bukkit/event/player/PlayerShearEntityEvent.java @@ -32,7 +32,7 @@ public PlayerShearEntityEvent(@NotNull Player player, @NotNull Entity entity, @N this.entity = entity; this.item = item; this.hand = hand; - this.drops = drops; + this.drops = List.copyOf(drops); } @ApiStatus.Internal @@ -72,12 +72,12 @@ public EquipmentSlot getHand() { } /** - * Get an immutable list of drops for this shearing. + * Get a list of drops for this shearing. * * @return the shearing drops * @see #setDrops(java.util.List) */ - public @NotNull @Unmodifiable List getDrops() { + public @NotNull List getDrops() { return this.drops; } From 6dcabb9cfc140aaa1e2e1eebcf07a01651827898 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 23:27:41 +0100 Subject: [PATCH 28/40] point to component method, not string --- .../java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-api/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java b/paper-api/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java index 473d12cb22f3..2ab1c8d05886 100644 --- a/paper-api/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java +++ b/paper-api/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java @@ -164,7 +164,7 @@ public void disallow(@NotNull final Result result, @NotNull final Component mess * @param message Kick message to display to the user * @deprecated This method uses a deprecated enum from {@link * PlayerPreLoginEvent} - * @see #disallow(Result, String) + * @see #disallow(Result, Component) */ @Deprecated public void disallow(@NotNull final PlayerPreLoginEvent.Result result, @NotNull final net.kyori.adventure.text.Component message) { From 06eee40561e40e98a156cb80c84db66d0ab912ff Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 23:31:46 +0100 Subject: [PATCH 29/40] fix incorrect comment, its when a wither regains health from killing --- .../java/org/bukkit/event/entity/EntityRegainHealthEvent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-api/src/main/java/org/bukkit/event/entity/EntityRegainHealthEvent.java b/paper-api/src/main/java/org/bukkit/event/entity/EntityRegainHealthEvent.java index 9ccdebc77793..5cedbce8445a 100644 --- a/paper-api/src/main/java/org/bukkit/event/entity/EntityRegainHealthEvent.java +++ b/paper-api/src/main/java/org/bukkit/event/entity/EntityRegainHealthEvent.java @@ -127,7 +127,7 @@ public enum RegainReason { */ WITHER_SPAWN, /** - * When an entity is damaged by the Wither potion effect + * When a wither regains health after killing an entity with a wither skull */ WITHER, /** From d73c9f52c7e07c4e88314a01e6cf343825decefe Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 23:32:42 +0100 Subject: [PATCH 30/40] affected not effected --- .../org/bukkit/event/entity/AreaEffectCloudApplyEvent.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paper-api/src/main/java/org/bukkit/event/entity/AreaEffectCloudApplyEvent.java b/paper-api/src/main/java/org/bukkit/event/entity/AreaEffectCloudApplyEvent.java index 39fe2f55bf99..c51dc5ec7321 100644 --- a/paper-api/src/main/java/org/bukkit/event/entity/AreaEffectCloudApplyEvent.java +++ b/paper-api/src/main/java/org/bukkit/event/entity/AreaEffectCloudApplyEvent.java @@ -33,10 +33,10 @@ public AreaEffectCloud getEntity() { } /** - * Retrieves a mutable list of the effected entities + * Retrieves a mutable list of the affected entities *

* It is important to note that not every entity in this list - * is guaranteed to be effected. The cloud may die during the + * is guaranteed to be affected. The cloud may die during the * application of its effects due to the depletion of {@link AreaEffectCloud#getDurationOnUse()} * or {@link AreaEffectCloud#getRadiusOnUse()} * From 6deb37facd8fb68f68ea8d84556a57bdd0fc6ce7 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 23:32:56 +0100 Subject: [PATCH 31/40] affected not effected --- .../main/java/org/bukkit/event/entity/PotionSplashEvent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-api/src/main/java/org/bukkit/event/entity/PotionSplashEvent.java b/paper-api/src/main/java/org/bukkit/event/entity/PotionSplashEvent.java index f085ebdef9de..159aa4c7161f 100644 --- a/paper-api/src/main/java/org/bukkit/event/entity/PotionSplashEvent.java +++ b/paper-api/src/main/java/org/bukkit/event/entity/PotionSplashEvent.java @@ -54,7 +54,7 @@ public ThrownPotion getPotion() { } /** - * Retrieves a list of all effected entities + * Retrieves a list of all affected entities * * @return A fresh copy of the affected entity list */ From 7b69eb9d4e6fe4ff6330faae94f555c9339a5f80 Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 23:34:00 +0100 Subject: [PATCH 32/40] oops --- .../java/org/bukkit/event/player/PlayerShearEntityEvent.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paper-api/src/main/java/org/bukkit/event/player/PlayerShearEntityEvent.java b/paper-api/src/main/java/org/bukkit/event/player/PlayerShearEntityEvent.java index f0e28910ef02..764b299c8481 100644 --- a/paper-api/src/main/java/org/bukkit/event/player/PlayerShearEntityEvent.java +++ b/paper-api/src/main/java/org/bukkit/event/player/PlayerShearEntityEvent.java @@ -72,12 +72,12 @@ public EquipmentSlot getHand() { } /** - * Get a list of drops for this shearing. + * Get an immutable list of drops for this shearing. * * @return the shearing drops * @see #setDrops(java.util.List) */ - public @NotNull List getDrops() { + public @NotNull @Unmodifiable List getDrops() { return this.drops; } From 2f0545c9fbf17e220cd512023e4689fef0fb8eed Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 23:36:04 +0100 Subject: [PATCH 33/40] its EntityExhaustionEvent now not PlayerExhaustionEvent --- .../java/org/bukkit/event/entity/EntityExhaustionEvent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-api/src/main/java/org/bukkit/event/entity/EntityExhaustionEvent.java b/paper-api/src/main/java/org/bukkit/event/entity/EntityExhaustionEvent.java index 784b4854d54d..47cbde4889b1 100644 --- a/paper-api/src/main/java/org/bukkit/event/entity/EntityExhaustionEvent.java +++ b/paper-api/src/main/java/org/bukkit/event/entity/EntityExhaustionEvent.java @@ -76,7 +76,7 @@ public void setCancelled(boolean cancel) { } /** - * The reason for why a PlayerExhaustionEvent takes place + * The reason for why a EntityExhaustionEvent takes place */ public enum ExhaustionReason { From 30d63188f66ad099a3cf7e0d6581f6fb010ffc2c Mon Sep 17 00:00:00 2001 From: Newwind Date: Sun, 28 Jun 2026 23:44:37 +0100 Subject: [PATCH 34/40] oops I guess I can't make toString() final --- .../java/io/papermc/paper/registry/HolderableBase.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java b/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java index dcfb068e896f..c0d45c0704ad 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java @@ -11,6 +11,11 @@ public abstract class HolderableBase implements Holderable { protected HolderableBase(final Holder holder) { this.holder = holder; } + + @Override + public String toString() { + return Holderable.super.implToString(); + } // methods below are overridden to make final @Override @@ -33,11 +38,6 @@ public final boolean equals(final Object obj) { return Holderable.super.implEquals(obj); } - @Override - public final String toString() { - return Holderable.super.implToString(); - } - @Override public final NamespacedKey getKey() { return Holderable.super.getKey(); From 1182c9edfe1c835c501f186d158e350a269e45ba Mon Sep 17 00:00:00 2001 From: Newwind Date: Mon, 29 Jun 2026 13:47:04 +0100 Subject: [PATCH 35/40] vector tweak --- .../src/main/java/org/bukkit/RegionAccessor.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/paper-api/src/main/java/org/bukkit/RegionAccessor.java b/paper-api/src/main/java/org/bukkit/RegionAccessor.java index 02e3908a2f60..df345f85b606 100644 --- a/paper-api/src/main/java/org/bukkit/RegionAccessor.java +++ b/paper-api/src/main/java/org/bukkit/RegionAccessor.java @@ -103,12 +103,12 @@ default BlockState getBlockState(@NotNull Location location) { /** * Gets the {@link BlockState} at the given {@link Vector}. * - * @param vector The vector of the block state - * @return Block state at the given vector + * @param location The location of the block state + * @return Block state at the given location */ @NotNull - default BlockState getBlockState(@NotNull Vector vector) { - return this.getBlockState(vector.getBlockX(), vector.getBlockY(), vector.getBlockZ()); + default BlockState getBlockState(@NotNull Vector location) { + return this.getBlockState(location.getBlockX(), location.getBlockY(), location.getBlockZ()); } /** @@ -169,7 +169,7 @@ default BlockData getBlockData(@NotNull Location location) { } /** - * Gets the {@link BlockData} at the given {@link Location}. + * Gets the {@link BlockData} at the given {@link Vector}. * * @param location The location of the block data * @return Block data at the given location @@ -223,7 +223,7 @@ default void setBlockData(@NotNull Location location, @NotNull BlockData blockDa } /** - * Sets the {@link BlockData} at the given {@link Location}. + * Sets the {@link BlockData} at the given {@link Vector}. * * @param location The location of the block * @param blockData The block data to set the block to From 4b9a8fd4c1e43556a3c51cd5d2fcfdb69aa9aaf6 Mon Sep 17 00:00:00 2001 From: Newwind Date: Mon, 29 Jun 2026 13:47:58 +0100 Subject: [PATCH 36/40] revert I guess --- .../java/io/papermc/paper/registry/PaperRegistryAccess.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryAccess.java b/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryAccess.java index a3d3541dc949..28b4e813752f 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryAccess.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryAccess.java @@ -24,7 +24,7 @@ public class PaperRegistryAccess implements RegistryAccess { // We want to do registration there, so we have access to the nms.Registry instance in order to wrap it in a CraftRegistry instance. // The memoized Supplier is needed because we *can't* instantiate any CraftRegistry class until **all** the BuiltInRegistries have been added // to this map because that would class-load org.bukkit.Registry which would query this map. - private final Map, RegistryHolder> registries = new ConcurrentHashMap<>(); + private final Map, RegistryHolder> registries = new ConcurrentHashMap<>(); // is "identity" because RegistryKey overrides equals and hashCode public static PaperRegistryAccess instance() { return (PaperRegistryAccess) RegistryAccessHolder.INSTANCE.orElseThrow(() -> new IllegalStateException("No RegistryAccess implementation found")); From c1bee3bc3445f8b16958b898618837fceeb8b2a2 Mon Sep 17 00:00:00 2001 From: Newwind Date: Mon, 29 Jun 2026 13:48:37 +0100 Subject: [PATCH 37/40] remove toString() as per lulu request --- .../main/java/io/papermc/paper/registry/HolderableBase.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java b/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java index c0d45c0704ad..883e82d1211c 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java @@ -11,11 +11,6 @@ public abstract class HolderableBase implements Holderable { protected HolderableBase(final Holder holder) { this.holder = holder; } - - @Override - public String toString() { - return Holderable.super.implToString(); - } // methods below are overridden to make final @Override From 2648556ae4c66c7610663dfd6f12be75f84e41b4 Mon Sep 17 00:00:00 2001 From: Newwind Date: Mon, 29 Jun 2026 13:50:04 +0100 Subject: [PATCH 38/40] check event null later instead --- .../java/org/bukkit/craftbukkit/event/CraftEventFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index 56b23824e524..5f0ced7525c0 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -743,7 +743,7 @@ public static boolean doEntityAddEventCalling(Level level, Entity entity, SpawnR return true; } event = CraftEventFactory.callLightningStrikeEvent((LightningStrike) entity.getBukkitEntity(), cause); - } else if (!(entity instanceof ServerPlayer) && !(entity instanceof net.minecraft.world.entity.ExperienceOrb)) { + } else if (!(entity instanceof ServerPlayer)) { event = CraftEventFactory.callEntitySpawnEvent(entity); } @@ -760,7 +760,7 @@ public static boolean doEntityAddEventCalling(Level level, Entity entity, SpawnR } // Spigot start - SPIGOT-7523: Merge after spawn event and only merge if the event was not cancelled (gets checked above) - if (entity instanceof net.minecraft.world.entity.ExperienceOrb xp) { + if (entity instanceof net.minecraft.world.entity.ExperienceOrb xp && event == null) { double radius = level.spigotConfig.expMerge; event = CraftEventFactory.callEntitySpawnEvent(entity); // Call spawn event for ExperienceOrb entities if (radius > 0 && !event.isCancelled() && !entity.isRemoved()) { From 5ba1b5ab907b5e3ec2e42205fd3a861fe2f241d8 Mon Sep 17 00:00:00 2001 From: Newwind Date: Mon, 29 Jun 2026 13:50:57 +0100 Subject: [PATCH 39/40] fix double space --- .../java/org/bukkit/event/entity/AreaEffectCloudApplyEvent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-api/src/main/java/org/bukkit/event/entity/AreaEffectCloudApplyEvent.java b/paper-api/src/main/java/org/bukkit/event/entity/AreaEffectCloudApplyEvent.java index c51dc5ec7321..cc8cb0d5cc04 100644 --- a/paper-api/src/main/java/org/bukkit/event/entity/AreaEffectCloudApplyEvent.java +++ b/paper-api/src/main/java/org/bukkit/event/entity/AreaEffectCloudApplyEvent.java @@ -36,7 +36,7 @@ public AreaEffectCloud getEntity() { * Retrieves a mutable list of the affected entities *

* It is important to note that not every entity in this list - * is guaranteed to be affected. The cloud may die during the + * is guaranteed to be affected. The cloud may die during the * application of its effects due to the depletion of {@link AreaEffectCloud#getDurationOnUse()} * or {@link AreaEffectCloud#getRadiusOnUse()} * From f49f0a88e3d03c658bf72b83fcecdaa2249af73e Mon Sep 17 00:00:00 2001 From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com> Date: Wed, 1 Jul 2026 16:21:33 +0200 Subject: [PATCH 40/40] tweaks --- .../main/java/io/papermc/paper/registry/HolderableBase.java | 5 +++++ .../main/java/io/papermc/paper/util/OldEnumHolderable.java | 5 ----- .../main/java/org/bukkit/craftbukkit/entity/CraftPig.java | 2 +- .../java/org/bukkit/craftbukkit/event/CraftEventFactory.java | 5 ++--- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java b/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java index 883e82d1211c..dcfb068e896f 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java @@ -33,6 +33,11 @@ public final boolean equals(final Object obj) { return Holderable.super.implEquals(obj); } + @Override + public final String toString() { + return Holderable.super.implToString(); + } + @Override public final NamespacedKey getKey() { return Holderable.super.getKey(); diff --git a/paper-server/src/main/java/io/papermc/paper/util/OldEnumHolderable.java b/paper-server/src/main/java/io/papermc/paper/util/OldEnumHolderable.java index 5b1fa5bd5495..ed6d2bea1683 100644 --- a/paper-server/src/main/java/io/papermc/paper/util/OldEnumHolderable.java +++ b/paper-server/src/main/java/io/papermc/paper/util/OldEnumHolderable.java @@ -60,9 +60,4 @@ public int ordinal() { private void checkIsReference() { Preconditions.checkState(this.holder.kind() == Holder.Kind.REFERENCE, "Cannot call method for this registry item, because it is not registered."); } - - @Override - public String toString() { - return this.implToString(); - } } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java index 9802062711bd..908ad781e772 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java @@ -61,7 +61,7 @@ public void setCurrentBoostTicks(int ticks) { } int max = this.getHandle().steering.boostTimeTotal(); - Preconditions.checkArgument(ticks >= 0 && ticks <= max, "boost ticks must not exceed 0 or %s (inclusive)", max); + Preconditions.checkArgument(ticks >= 0 && ticks <= max, "boost ticks must be between 0 and %s (inclusive)", max); this.getHandle().steering.boostTime = ticks; } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index 5f0ced7525c0..0ac92cbdb35d 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -760,10 +760,9 @@ public static boolean doEntityAddEventCalling(Level level, Entity entity, SpawnR } // Spigot start - SPIGOT-7523: Merge after spawn event and only merge if the event was not cancelled (gets checked above) - if (entity instanceof net.minecraft.world.entity.ExperienceOrb xp && event == null) { + if (entity instanceof net.minecraft.world.entity.ExperienceOrb xp) { double radius = level.spigotConfig.expMerge; - event = CraftEventFactory.callEntitySpawnEvent(entity); // Call spawn event for ExperienceOrb entities - if (radius > 0 && !event.isCancelled() && !entity.isRemoved()) { + if (radius > 0) { // Paper start - Maximum exp value when merging; Whole section has been tweaked, see comments for specifics final long maxValue = level.paperConfig().entities.behavior.experienceMergeMaxValue; final boolean mergeUnconditionally = maxValue <= 0;