From 7ca763785602232aa562a48f59d74fb6afac0b4f Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:40:56 -0700 Subject: [PATCH 1/5] Full patch rebuild --- .../patches/features/0002-Rewrite-dataconverter-system.patch | 2 +- .../patches/features/0005-Entity-Activation-Range-2.0.patch | 4 ++-- .../0006-Use-Velocity-compression-and-cipher-natives.patch | 2 +- .../0016-Add-Alternate-Current-redstone-implementation.patch | 2 +- .../features/0021-Incremental-chunk-and-player-saving.patch | 4 ++-- ...Optimise-collision-checking-in-player-move-packet-ha.patch | 2 +- .../features/0027-Optional-per-player-mob-spawns.patch | 4 ++-- ...Improve-cancelling-PreCreatureSpawnEvent-with-per-pl.patch | 4 ++-- paper-server/patches/features/0030-Anti-Xray.patch | 4 ++-- 9 files changed, 14 insertions(+), 14 deletions(-) diff --git a/paper-server/patches/features/0002-Rewrite-dataconverter-system.patch b/paper-server/patches/features/0002-Rewrite-dataconverter-system.patch index e63d5902180f..cebd99156918 100644 --- a/paper-server/patches/features/0002-Rewrite-dataconverter-system.patch +++ b/paper-server/patches/features/0002-Rewrite-dataconverter-system.patch @@ -32907,7 +32907,7 @@ index 71b8bbeda2fecf930870a9b6e856e20639d31645..91650a92a21fcaac65a5dfcac0cc856b return structureTemplate.save(new CompoundTag()); } diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 638990d0d89aa85285675d05e2a74aed6ceaf2f0..cc0834ac0ecac9735c7bd399fc7f5b908437676e 100644 +index d3cad90499a86e6e93192bc5fe27984f9714cdd6..79b8222848a488704d1eee89cd6255c967378b2c 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -348,6 +348,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop Date: Thu, 2 Oct 2025 18:17:47 -0700 Subject: [PATCH 2/5] Update to 1.21.10-rc1 --- gradle.properties | 4 +- paper-server/build.gradle.kts | 2 +- .../server/level/ServerPlayer.java.patch | 4 +- .../minecraft/world/entity/Entity.java.patch | 140 +++++++++--------- .../entity/decoration/ItemFrame.java.patch | 31 ++-- .../FireworkRocketEntity.java.patch | 2 +- .../world/level/GameRules.java.patch | 42 +++--- .../level/block/BaseFireBlock.java.patch | 2 +- .../block/BasePressurePlateBlock.java.patch | 2 +- .../level/block/BigDripleafBlock.java.patch | 2 +- .../level/block/BubbleColumnBlock.java.patch | 6 +- .../world/level/block/ButtonBlock.java.patch | 2 +- .../world/level/block/CactusBlock.java.patch | 2 +- .../level/block/CampfireBlock.java.patch | 4 +- .../world/level/block/CropBlock.java.patch | 2 +- .../level/block/DetectorRailBlock.java.patch | 2 +- .../level/block/EndGatewayBlock.java.patch | 2 +- .../level/block/EndPortalBlock.java.patch | 2 +- .../level/block/EyeblossomBlock.java.patch | 2 +- .../level/block/FrogspawnBlock.java.patch | 2 +- .../world/level/block/HoneyBlock.java.patch | 2 +- .../world/level/block/HopperBlock.java.patch | 2 +- .../level/block/LavaCauldronBlock.java.patch | 2 +- .../block/LayeredCauldronBlock.java.patch | 2 +- .../level/block/NetherPortalBlock.java.patch | 2 +- .../level/block/PitcherCropBlock.java.patch | 2 +- .../level/block/PowderSnowBlock.java.patch | 2 +- .../block/SweetBerryBushBlock.java.patch | 2 +- .../level/block/TripWireBlock.java.patch | 2 +- .../level/block/WaterlilyBlock.java.patch | 4 +- .../world/level/block/WebBlock.java.patch | 2 +- .../level/block/WitherRoseBlock.java.patch | 2 +- .../bukkit/craftbukkit/util/ApiVersion.java | 2 +- 33 files changed, 140 insertions(+), 145 deletions(-) diff --git a/gradle.properties b/gradle.properties index 95b3f11816ad..aed0924ebc86 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ group=io.papermc.paper -version=1.21.9-R0.1-SNAPSHOT -mcVersion=1.21.9 +version=1.21.10-rc1-R0.1-SNAPSHOT +mcVersion=1.21.10-rc1 # Set to true while updating Minecraft version updatingMinecraft=false diff --git a/paper-server/build.gradle.kts b/paper-server/build.gradle.kts index 9c996999dea7..2e83c8ee8063 100644 --- a/paper-server/build.gradle.kts +++ b/paper-server/build.gradle.kts @@ -17,7 +17,7 @@ plugins { val paperMavenPublicUrl = "https://repo.papermc.io/repository/maven-public/" dependencies { - mache("io.papermc:mache:1.21.9+build.1") + mache("io.papermc:mache:1.21.10-rc1+build.5") paperclip("io.papermc:paperclip:3.0.3") testRuntimeOnly("org.junit.platform:junit-platform-launcher") } diff --git a/paper-server/patches/sources/net/minecraft/server/level/ServerPlayer.java.patch b/paper-server/patches/sources/net/minecraft/server/level/ServerPlayer.java.patch index b1f9c2fcc739..9ae0a40bb6ae 100644 --- a/paper-server/patches/sources/net/minecraft/server/level/ServerPlayer.java.patch +++ b/paper-server/patches/sources/net/minecraft/server/level/ServerPlayer.java.patch @@ -717,8 +717,8 @@ + return optional.map(vec3 -> ServerPlayer.RespawnPosAngle.of(vec3, blockPos, 0.0F, false, true, finalConsumeAnchorCharge)); // Paper - Fix SPIGOT-5989 (don't use charge until after respawn event) } else if (block instanceof BedBlock && BedBlock.canSetSpawn(level)) { return BedBlock.findStandUpPosition(EntityType.PLAYER, level, blockPos, blockState.getValue(BedBlock.FACING), yaw) -- .map(vec3 -> ServerPlayer.RespawnPosAngle.of(vec3, blockPos, 0.0F)); -+ .map(vec3 -> ServerPlayer.RespawnPosAngle.of(vec3, blockPos, 0.0F, true, false, null)); // Paper - Fix SPIGOT-5989 +- .map(pos -> ServerPlayer.RespawnPosAngle.of(pos, blockPos, 0.0F)); ++ .map(pos -> ServerPlayer.RespawnPosAngle.of(pos, blockPos, 0.0F, true, false, null)); // Paper - Fix SPIGOT-5989 } else if (!flag) { return Optional.empty(); } else { diff --git a/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch index 68534425f80b..fc293121e7c5 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch @@ -522,7 +522,7 @@ if (this.noPhysics) { this.setPos(this.getX() + movement.x, this.getY() + movement.y, this.getZ() + movement.z); this.horizontalCollision = false; -@@ -749,6 +_,27 @@ +@@ -752,6 +_,27 @@ block.updateEntityMovementAfterFallOn(this.level(), this); } } @@ -550,7 +550,7 @@ if (!this.level().isClientSide() || this.isLocalInstanceAuthoritative()) { Entity.MovementEmission movementEmission = this.getMovementEmission(); -@@ -762,6 +_,13 @@ +@@ -765,6 +_,13 @@ profilerFiller.pop(); } } @@ -564,7 +564,7 @@ } private void applyMovementEmissionAndPlaySound(Entity.MovementEmission movementEmission, Vec3 movement, BlockPos pos, BlockState state) { -@@ -943,7 +_,7 @@ +@@ -946,7 +_,7 @@ } protected BlockPos getOnPos(float yOffset) { @@ -573,25 +573,25 @@ BlockPos blockPos = this.mainSupportingBlockPos.get(); if (!(yOffset > 1.0E-5F)) { return blockPos; -@@ -1196,7 +_,7 @@ - if ((flag1 || flag2) && visited.add(pos.asLong())) { - if (flag1) { +@@ -1201,7 +_,7 @@ + if (flag2) { try { + boolean flag4 = flag || aabb.intersects(pos); - stepBasedCollector.advanceStep(index); + stepBasedCollector.advanceStep(index, pos); // Paper - track position inside effect was triggered on - blockState.entityInside(this.level(), pos, this, stepBasedCollector); + blockState.entityInside(this.level(), pos, this, stepBasedCollector, flag4); this.onInsideBlock(blockState); - } catch (Throwable var18) { -@@ -1210,7 +_,7 @@ + } catch (Throwable var20) { +@@ -1215,7 +_,7 @@ } - if (flag2) { + if (flag3) { - stepBasedCollector.advanceStep(index); + stepBasedCollector.advanceStep(index, pos); // Paper - track position inside effect was triggered on blockState.getFluidState().entityInside(this.level(), pos, this, stepBasedCollector); } -@@ -1647,6 +_,7 @@ +@@ -1652,6 +_,7 @@ this.setXRot(Mth.clamp(xRot, -90.0F, 90.0F) % 360.0F); this.yRotO = this.getYRot(); this.xRotO = this.getXRot(); @@ -599,7 +599,7 @@ } public void absSnapTo(double x, double y, double z) { -@@ -1656,6 +_,7 @@ +@@ -1661,6 +_,7 @@ this.yo = y; this.zo = d1; this.setPos(d, y, d1); @@ -607,7 +607,7 @@ } public void snapTo(Vec3 pos) { -@@ -1675,11 +_,19 @@ +@@ -1680,11 +_,19 @@ } public void snapTo(double x, double y, double z, float yRot, float xRot) { @@ -627,7 +627,7 @@ } public final void setOldPosAndRot() { -@@ -1746,6 +_,7 @@ +@@ -1751,6 +_,7 @@ public void push(Entity entity) { if (!this.isPassengerOfSameVehicle(entity)) { if (!entity.noPhysics && !this.noPhysics) { @@ -635,7 +635,7 @@ double d = entity.getX() - this.getX(); double d1 = entity.getZ() - this.getZ(); double max = Mth.absMax(d, d1); -@@ -1779,7 +_,21 @@ +@@ -1784,7 +_,21 @@ } public void push(double x, double y, double z) { @@ -658,7 +658,7 @@ this.hasImpulse = true; } -@@ -1886,8 +_,20 @@ +@@ -1891,8 +_,20 @@ } public boolean isPushable() { @@ -679,7 +679,7 @@ public void awardKillScore(Entity entity, DamageSource damageSource) { if (entity instanceof ServerPlayer) { -@@ -1914,15 +_,23 @@ +@@ -1919,15 +_,23 @@ } public boolean saveAsPassenger(ValueOutput output) { @@ -707,7 +707,7 @@ return true; } } -@@ -1933,14 +_,35 @@ +@@ -1938,14 +_,35 @@ } public void saveWithoutId(ValueOutput output) { @@ -743,7 +743,7 @@ output.store("Rotation", Vec2.CODEC, new Vec2(this.getYRot(), this.getXRot())); output.putDouble("fall_distance", this.fallDistance); output.putShort("Fire", (short)this.remainingFireTicks); -@@ -1948,7 +_,29 @@ +@@ -1953,7 +_,29 @@ output.putBoolean("OnGround", this.onGround()); output.putBoolean("Invulnerable", this.invulnerable); output.putInt("PortalCooldown", this.portalCooldown); @@ -773,7 +773,7 @@ output.storeNullable("CustomName", ComponentSerialization.CODEC, this.getCustomName()); if (this.isCustomNameVisible()) { output.putBoolean("CustomNameVisible", this.isCustomNameVisible()); -@@ -1971,9 +_,12 @@ +@@ -1976,9 +_,12 @@ output.putInt("TicksFrozen", this.getTicksFrozen()); } @@ -788,7 +788,7 @@ if (!this.tags.isEmpty()) { output.store("Tags", TAG_LIST_CODEC, List.copyOf(this.tags)); -@@ -1983,13 +_,13 @@ +@@ -1988,13 +_,13 @@ output.store("data", CustomData.CODEC, this.customData); } @@ -804,7 +804,7 @@ valueOutputList.discardLast(); } } -@@ -1998,6 +_,34 @@ +@@ -2003,6 +_,34 @@ output.discard("Passengers"); } } @@ -839,7 +839,7 @@ } catch (Throwable var7) { CrashReport crashReport = CrashReport.forThrowable(var7, "Saving entity NBT"); CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being saved"); -@@ -2009,7 +_,7 @@ +@@ -2014,7 +_,7 @@ public void load(ValueInput input) { try { Vec3 vec3 = input.read("Pos", Vec3.CODEC).orElse(Vec3.ZERO); @@ -848,7 +848,7 @@ Vec2 vec2 = input.read("Rotation", Vec2.CODEC).orElse(Vec2.ZERO); this.setDeltaMovement(Math.abs(vec31.x) > 10.0 ? 0.0 : vec31.x, Math.abs(vec31.y) > 10.0 ? 0.0 : vec31.y, Math.abs(vec31.z) > 10.0 ? 0.0 : vec31.z); this.hasImpulse = true; -@@ -2041,7 +_,20 @@ +@@ -2046,7 +_,20 @@ this.setNoGravity(input.getBooleanOr("NoGravity", false)); this.setGlowingTag(input.getBooleanOr("Glowing", false)); this.setTicksFrozen(input.getIntOr("TicksFrozen", 0)); @@ -870,7 +870,7 @@ this.customData = input.read("data", CustomData.CODEC).orElse(CustomData.EMPTY); this.tags.clear(); input.read("Tags", TAG_LIST_CODEC).ifPresent(this.tags::addAll); -@@ -2052,6 +_,59 @@ +@@ -2057,6 +_,59 @@ } else { throw new IllegalStateException("Entity has invalid rotation"); } @@ -930,7 +930,7 @@ } catch (Throwable var7) { CrashReport crashReport = CrashReport.forThrowable(var7, "Loading entity NBT"); CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being loaded"); -@@ -2066,13 +_,24 @@ +@@ -2071,13 +_,24 @@ @Nullable public final String getEncodeId() { @@ -956,7 +956,7 @@ protected abstract void addAdditionalSaveData(ValueOutput output); @Nullable -@@ -2087,11 +_,63 @@ +@@ -2092,11 +_,63 @@ @Nullable public ItemEntity spawnAtLocation(ServerLevel level, ItemStack stack, Vec3 offset) { @@ -1021,7 +1021,7 @@ level.addFreshEntity(itemEntity); return itemEntity; } -@@ -2137,6 +_,15 @@ +@@ -2142,6 +_,15 @@ for (Leashable leashable1 : list) { if (leashable1.canHaveALeashAttachedTo(this)) { @@ -1037,7 +1037,7 @@ leashable1.setLeashedTo(this, true); flag = true; } -@@ -2151,7 +_,7 @@ +@@ -2156,7 +_,7 @@ } ItemStack itemInHand = player.getItemInHand(hand); @@ -1046,7 +1046,7 @@ itemInHand.hurtAndBreak(1, player, hand); return InteractionResult.SUCCESS; } else if (this instanceof Mob mob -@@ -2164,11 +_,13 @@ +@@ -2169,11 +_,13 @@ if (this.isAlive() && this instanceof Leashable leashable2) { if (leashable2.getLeashHolder() == player) { if (!this.level().isClientSide()) { @@ -1064,7 +1064,7 @@ this.gameEvent(GameEvent.ENTITY_INTERACT, player); this.playSound(SoundEvents.LEAD_UNTIED); -@@ -2181,9 +_,22 @@ +@@ -2186,9 +_,22 @@ if (itemInHand1.is(Items.LEAD) && !(leashable2.getLeashHolder() instanceof Player)) { if (!this.level().isClientSide() && leashable2.canHaveALeashAttachedTo(player)) { if (leashable2.isLeashed()) { @@ -1088,7 +1088,7 @@ leashable2.setLeashedTo(player, true); this.playSound(SoundEvents.LEAD_TIED); itemInHand1.shrink(1); -@@ -2198,7 +_,12 @@ +@@ -2203,7 +_,12 @@ } public boolean shearOffAllLeashConnections(@Nullable Player player) { @@ -1102,7 +1102,7 @@ if (flag && this.level() instanceof ServerLevel serverLevel) { serverLevel.playSound(null, this.blockPosition(), SoundEvents.SHEARS_SNIP, player != null ? player.getSoundSource() : this.getSoundSource()); } -@@ -2207,15 +_,38 @@ +@@ -2212,15 +_,38 @@ } public boolean dropAllLeashConnections(@Nullable Player player) { @@ -1145,7 +1145,7 @@ } if (flag) { -@@ -2239,7 +_,9 @@ +@@ -2244,7 +_,9 @@ this.gameEvent(GameEvent.SHEAR, player); this.playSound(equippable.shearingSound().value()); if (this.level() instanceof ServerLevel serverLevel) { @@ -1155,7 +1155,7 @@ CriteriaTriggers.PLAYER_SHEARED_EQUIPMENT.trigger((ServerPlayer)player, itemBySlot, mob); } -@@ -2312,11 +_,11 @@ +@@ -2317,11 +_,11 @@ } public boolean startRiding(Entity vehicle, boolean force, boolean sendGameEvent) { @@ -1169,7 +1169,7 @@ return false; } else { for (Entity entity = vehicle; entity.vehicle != null; entity = entity.vehicle) { -@@ -2326,6 +_,27 @@ +@@ -2331,6 +_,27 @@ } if (force || this.canRide(vehicle) && vehicle.canAddPassenger(this)) { @@ -1197,7 +1197,7 @@ if (this.isPassenger()) { this.stopRiding(); } -@@ -2358,10 +_,16 @@ +@@ -2363,10 +_,16 @@ } public void removeVehicle() { @@ -1215,7 +1215,7 @@ Entity.RemovalReason removalReason = this.getRemovalReason(); if (removalReason == null || removalReason.shouldDestroy()) { this.level().gameEvent(this, GameEvent.ENTITY_DISMOUNT, entity.position); -@@ -2370,7 +_,13 @@ +@@ -2375,7 +_,13 @@ } public void stopRiding() { @@ -1230,7 +1230,7 @@ } protected void addPassenger(Entity passenger) { -@@ -2392,10 +_,43 @@ +@@ -2397,10 +_,43 @@ } } @@ -1275,7 +1275,7 @@ if (this.passengers.size() == 1 && this.passengers.get(0) == passenger) { this.passengers = ImmutableList.of(); } else { -@@ -2404,6 +_,7 @@ +@@ -2409,6 +_,7 @@ passenger.boardingCooldown = 60; } @@ -1283,7 +1283,7 @@ } protected boolean canAddPassenger(Entity passenger) { -@@ -2500,8 +_,8 @@ +@@ -2505,8 +_,8 @@ TeleportTransition portalDestination = this.portalProcess.getPortalDestination(serverLevel, this); if (portalDestination != null) { ServerLevel level = portalDestination.newLevel(); @@ -1294,7 +1294,7 @@ this.teleport(portalDestination); } } -@@ -2582,7 +_,7 @@ +@@ -2587,7 +_,7 @@ } public boolean isCrouching() { @@ -1303,7 +1303,7 @@ } public boolean isSprinting() { -@@ -2598,7 +_,7 @@ +@@ -2603,7 +_,7 @@ } public boolean isVisuallySwimming() { @@ -1312,7 +1312,7 @@ } public boolean isVisuallyCrawling() { -@@ -2606,6 +_,13 @@ +@@ -2611,6 +_,13 @@ } public void setSwimming(boolean swimming) { @@ -1326,7 +1326,7 @@ this.setSharedFlag(4, swimming); } -@@ -2644,6 +_,7 @@ +@@ -2649,6 +_,7 @@ @Nullable public PlayerTeam getTeam() { @@ -1334,7 +1334,7 @@ return this.level().getScoreboard().getPlayersTeam(this.getScoreboardName()); } -@@ -2660,7 +_,11 @@ +@@ -2665,7 +_,11 @@ } public void setInvisible(boolean invisible) { @@ -1347,7 +1347,7 @@ } public boolean getSharedFlag(int flag) { -@@ -2677,7 +_,7 @@ +@@ -2682,7 +_,7 @@ } public int getMaxAirSupply() { @@ -1356,7 +1356,7 @@ } public int getAirSupply() { -@@ -2685,10 +_,22 @@ +@@ -2690,10 +_,22 @@ } public void setAirSupply(int air) { @@ -1380,7 +1380,7 @@ this.setTicksFrozen(0); } -@@ -2715,11 +_,43 @@ +@@ -2720,11 +_,43 @@ public void thunderHit(ServerLevel level, LightningBolt lightning) { this.setRemainingFireTicks(this.remainingFireTicks + 1); @@ -1428,7 +1428,7 @@ } public void onAboveBubbleColumn(boolean downwards, BlockPos pos) { -@@ -2875,26 +_,30 @@ +@@ -2880,26 +_,30 @@ return this.removalReason != null ? String.format( Locale.ROOT, @@ -1462,7 +1462,7 @@ ); } -@@ -2918,6 +_,13 @@ +@@ -2923,6 +_,13 @@ } public void restoreFrom(Entity entity) { @@ -1476,7 +1476,7 @@ try (ProblemReporter.ScopedCollector scopedCollector = new ProblemReporter.ScopedCollector(this.problemPath(), LOGGER)) { TagValueOutput tagValueOutput = TagValueOutput.createWithContext(scopedCollector, entity.registryAccess()); entity.saveWithoutId(tagValueOutput); -@@ -2930,7 +_,65 @@ +@@ -2935,7 +_,65 @@ @Nullable public Entity teleport(TeleportTransition teleportTransition) { @@ -1542,7 +1542,7 @@ ServerLevel level = teleportTransition.newLevel(); boolean flag = level.dimension() != serverLevel.dimension(); if (!teleportTransition.asPassenger()) { -@@ -2980,10 +_,15 @@ +@@ -2985,10 +_,15 @@ profilerFiller.pop(); return null; } else { @@ -1559,7 +1559,7 @@ for (Entity entity2 : list) { entity2.startRiding(entityx, true, false); -@@ -3073,9 +_,17 @@ +@@ -3078,9 +_,17 @@ } protected void removeAfterChangingDimensions() { @@ -1580,7 +1580,7 @@ } if (this instanceof WaypointTransmitter waypointTransmitter && this.level instanceof ServerLevel serverLevel) { -@@ -3087,11 +_,37 @@ +@@ -3092,11 +_,37 @@ return PortalShape.getRelativePosition(portal, axis, this.position(), this.getDimensions(this.getPose())); } @@ -1618,7 +1618,7 @@ if (fromLevel.dimension() == Level.END && toLevel.dimension() == Level.OVERWORLD) { for (Entity entity : this.getPassengers()) { if (entity instanceof ServerPlayer serverPlayer && !serverPlayer.seenCredits) { -@@ -3199,8 +_,14 @@ +@@ -3204,8 +_,14 @@ return this.entityData.get(DATA_CUSTOM_NAME_VISIBLE); } @@ -1635,7 +1635,7 @@ return entity != null; } -@@ -3314,7 +_,26 @@ +@@ -3319,7 +_,26 @@ } public final void setBoundingBox(AABB bb) { @@ -1663,7 +1663,7 @@ } public final float getEyeHeight(Pose pose) { -@@ -3341,6 +_,12 @@ +@@ -3346,6 +_,12 @@ } public void stopSeenByPlayer(ServerPlayer serverPlayer) { @@ -1676,7 +1676,7 @@ } public float rotate(Rotation transformRotation) { -@@ -3369,7 +_,7 @@ +@@ -3374,7 +_,7 @@ } @Nullable @@ -1685,7 +1685,7 @@ return null; } -@@ -3401,21 +_,32 @@ +@@ -3406,21 +_,32 @@ } private Stream getIndirectPassengersStream() { @@ -1719,7 +1719,7 @@ } public int countPlayerPassengers() { -@@ -3423,6 +_,7 @@ +@@ -3428,6 +_,7 @@ } public boolean hasExactlyOnePlayerPassenger() { @@ -1727,7 +1727,7 @@ return this.countPlayerPassengers() == 1; } -@@ -3505,9 +_,38 @@ +@@ -3510,9 +_,38 @@ return 0; } @@ -1767,7 +1767,7 @@ ); } -@@ -3565,6 +_,11 @@ +@@ -3570,6 +_,11 @@ vec3 = vec3.add(flow); i++; } @@ -1779,7 +1779,7 @@ } } } -@@ -3663,7 +_,9 @@ +@@ -3668,7 +_,9 @@ } public void setDeltaMovement(Vec3 deltaMovement) { @@ -1789,7 +1789,7 @@ } public void addDeltaMovement(Vec3 addend) { -@@ -3726,9 +_,35 @@ +@@ -3731,9 +_,35 @@ return this.getZ((2.0 * this.random.nextDouble() - 1.0) * scale); } @@ -1825,7 +1825,7 @@ int floor = Mth.floor(x); int floor1 = Mth.floor(y); int floor2 = Mth.floor(z); -@@ -3750,7 +_,18 @@ +@@ -3755,7 +_,18 @@ serverLevel.getWaypointManager().updatePlayer(serverPlayer); } } @@ -1845,7 +1845,7 @@ } public void checkDespawn() { -@@ -3803,6 +_,12 @@ +@@ -3808,6 +_,12 @@ return this.getTicksFrozen() > 0; } @@ -1858,7 +1858,7 @@ public float getYRot() { return this.yRot; } -@@ -3854,7 +_,9 @@ +@@ -3859,7 +_,9 @@ } @Override @@ -1869,7 +1869,7 @@ if (this.removalReason == null) { this.removalReason = removalReason; } -@@ -3866,12 +_,28 @@ +@@ -3871,12 +_,28 @@ this.getPassengers().forEach(Entity::stopRiding); this.levelCallback.onRemove(removalReason); this.onRemoval(removalReason); @@ -1898,7 +1898,7 @@ @Override public void setLevelCallback(EntityInLevelCallback levelCallback) { this.levelCallback = levelCallback; -@@ -4068,4 +_,14 @@ +@@ -4073,4 +_,14 @@ return this.save; } } diff --git a/paper-server/patches/sources/net/minecraft/world/entity/decoration/ItemFrame.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/decoration/ItemFrame.java.patch index 1175f23d1c81..257837ca51f9 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/decoration/ItemFrame.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/decoration/ItemFrame.java.patch @@ -8,24 +8,19 @@ public ItemFrame(EntityType entityType, Level level) { super(entityType, level); -@@ -102,9 +_,15 @@ +@@ -111,6 +_,11 @@ + } - @Override - protected AABB calculateBoundingBox(BlockPos pos, Direction direction) { -+ // Paper start - break out BB calc into own method -+ return ItemFrame.calculateBoundingBoxStatic(pos, direction, this.hasFramedMap()); + private AABB createBoundingBox(BlockPos pos, Direction direction, boolean hasFramedMap) { ++ // Paper start - add static method ++ return calculateBoundingBoxStatic(pos, direction, hasFramedMap); + } -+ + public static AABB calculateBoundingBoxStatic(BlockPos pos, Direction direction, boolean hasFramedMap) { -+ // Paper end - break out BB calc into own method ++ // Paper end - add static method float f = 0.46875F; Vec3 vec3 = Vec3.atCenterOf(pos).relative(direction, -0.46875); -- boolean hasFramedMap = this.hasFramedMap(); -+ // boolean hasFramedMap = this.hasFramedMap(); // Paper - break out BB calc into own method float f1 = hasFramedMap ? 1.0F : 0.75F; - float f2 = hasFramedMap ? 1.0F : 0.75F; - Direction.Axis axis = direction.getAxis(); -@@ -134,9 +_,9 @@ +@@ -142,9 +_,9 @@ } @Override @@ -37,7 +32,7 @@ } } -@@ -165,6 +_,18 @@ +@@ -173,6 +_,18 @@ if (this.isInvulnerableToBase(damageSource)) { return false; } else if (this.shouldDamageDropItem(damageSource)) { @@ -56,7 +51,7 @@ this.dropItem(level, damageSource.getEntity(), false); this.gameEvent(GameEvent.BLOCK_CHANGE, damageSource.getEntity()); this.playSound(this.getRemoveItemSound(), 1.0F, 1.0F); -@@ -250,6 +_,14 @@ +@@ -258,6 +_,14 @@ return this.getEntityData().get(DATA_ITEM); } @@ -71,7 +66,7 @@ @Nullable public MapId getFramedMapId(ItemStack stack) { return stack.get(DataComponents.MAP_ID); -@@ -264,13 +_,19 @@ +@@ -272,13 +_,19 @@ } public void setItem(ItemStack stack, boolean updateNeighbours) { @@ -92,7 +87,7 @@ this.playSound(this.getAddItemSound(), 1.0F, 1.0F); } -@@ -297,6 +_,7 @@ +@@ -305,6 +_,7 @@ } private void onItemChanged(ItemStack item) { @@ -100,7 +95,7 @@ if (!item.isEmpty() && item.getFrame() != this) { item.setEntityRepresentation(this); } -@@ -365,7 +_,13 @@ +@@ -373,7 +_,13 @@ if (savedData != null && savedData.isTrackedCountOverLimit(256)) { return InteractionResult.FAIL; } else { @@ -115,7 +110,7 @@ this.gameEvent(GameEvent.BLOCK_CHANGE, player); itemInHand.consume(1, player); return InteractionResult.SUCCESS; -@@ -374,6 +_,13 @@ +@@ -382,6 +_,13 @@ return InteractionResult.PASS; } } else { diff --git a/paper-server/patches/sources/net/minecraft/world/entity/projectile/FireworkRocketEntity.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/projectile/FireworkRocketEntity.java.patch index 73824263a626..fd375dc3286a 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/projectile/FireworkRocketEntity.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/projectile/FireworkRocketEntity.java.patch @@ -53,7 +53,7 @@ @@ -211,7 +_,11 @@ BlockPos blockPos = new BlockPos(result.getBlockPos()); - this.level().getBlockState(blockPos).entityInside(this.level(), blockPos, this, InsideBlockEffectApplier.NOOP); + this.level().getBlockState(blockPos).entityInside(this.level(), blockPos, this, InsideBlockEffectApplier.NOOP, true); if (this.level() instanceof ServerLevel serverLevel && this.hasExplosion()) { - this.explode(serverLevel); + // Paper start - Call FireworkExplodeEvent diff --git a/paper-server/patches/sources/net/minecraft/world/level/GameRules.java.patch b/paper-server/patches/sources/net/minecraft/world/level/GameRules.java.patch index d19ac9b1f302..f8b1250e69d0 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/GameRules.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/GameRules.java.patch @@ -68,20 +68,20 @@ ServerWaypointManager waypointManager = serverLevel.getWaypointManager(); if (booleanValue.get()) { serverLevel.players().forEach(waypointManager::updatePlayer); -@@ -235,7 +_,11 @@ +@@ -233,7 +_,11 @@ + "allowEnteringNetherUsingPortals", GameRules.Category.MISC, GameRules.BooleanValue.create(true) + ); public static final GameRules.Key RULE_SPAWN_MONSTERS = register( - "spawnMonsters", - GameRules.Category.SPAWNING, -- GameRules.BooleanValue.create(true, (minecraftServer, booleanValue) -> minecraftServer.updateMobSpawningFlags()) +- "spawnMonsters", GameRules.Category.SPAWNING, GameRules.BooleanValue.create(true, (server, value) -> server.updateMobSpawningFlags()) + // Paper start - per world gamerules -+ GameRules.BooleanValue.create(true, (level, booleanValue) -> { ++ "spawnMonsters", GameRules.Category.SPAWNING, GameRules.BooleanValue.create(true, (level, value) -> { + level.setSpawnSettings(level.serverLevelData.getDifficulty() != net.minecraft.world.Difficulty.PEACEFUL && level.getGameRules().getBoolean(GameRules.RULE_SPAWN_MONSTERS)); + }) + // Paper end - per world gamerules ); public static final GameRules.Key RULE_COMMAND_BLOCKS_ENABLED = register( "commandBlocksEnabled", GameRules.Category.MISC, GameRules.BooleanValue.create(true) -@@ -245,6 +_,7 @@ +@@ -243,6 +_,7 @@ ); private final Map, GameRules.Value> rules; private final FeatureFlagSet enabledFeatures; @@ -89,7 +89,7 @@ public static > GameRules.Type getType(GameRules.Key key) { return (GameRules.Type)GAME_RULE_TYPES.get(key); -@@ -292,10 +_,21 @@ +@@ -290,10 +_,21 @@ private GameRules(Map, GameRules.Value> rules, FeatureFlagSet enabledFeatures) { this.rules = rules; this.enabledFeatures = enabledFeatures; @@ -112,7 +112,7 @@ if (value == null) { throw new IllegalArgumentException("Tried to access invalid game rule"); } else { -@@ -336,13 +_,13 @@ +@@ -334,13 +_,13 @@ } } @@ -130,7 +130,7 @@ } public boolean getBoolean(GameRules.Key key) { -@@ -357,7 +_,7 @@ +@@ -355,7 +_,7 @@ private boolean value; private static GameRules.Type create( @@ -139,7 +139,7 @@ ) { return new GameRules.Type<>( BoolArgumentType::bool, -@@ -369,7 +_,7 @@ +@@ -367,7 +_,7 @@ ); } @@ -148,7 +148,7 @@ return new GameRules.Type<>( BoolArgumentType::bool, type -> new GameRules.BooleanValue(type, defaultValue), -@@ -390,17 +_,21 @@ +@@ -388,17 +_,21 @@ } @Override @@ -174,7 +174,7 @@ } @Override -@@ -429,9 +_,9 @@ +@@ -427,9 +_,9 @@ } @Override @@ -186,7 +186,7 @@ } } -@@ -469,7 +_,7 @@ +@@ -467,7 +_,7 @@ public static class IntegerValue extends GameRules.Value { private int value; @@ -195,7 +195,7 @@ return new GameRules.Type<>( IntegerArgumentType::integer, type -> new GameRules.IntegerValue(type, defaultValue), -@@ -481,7 +_,7 @@ +@@ -479,7 +_,7 @@ } static GameRules.Type create( @@ -204,7 +204,7 @@ ) { return new GameRules.Type<>( () -> IntegerArgumentType.integer(min, max), -@@ -503,17 +_,21 @@ +@@ -501,17 +_,21 @@ } @Override @@ -230,7 +230,7 @@ } @Override -@@ -564,13 +_,17 @@ +@@ -562,13 +_,17 @@ } @Override @@ -250,7 +250,7 @@ final String id; private final GameRules.Category category; -@@ -610,7 +_,7 @@ +@@ -608,7 +_,7 @@ public static class Type> { final Supplier> argument; private final Function, T> constructor; @@ -259,7 +259,7 @@ private final GameRules.VisitorCaller visitorCaller; final Class valueClass; final FeatureFlagSet requiredFeatures; -@@ -618,7 +_,7 @@ +@@ -616,7 +_,7 @@ Type( Supplier> argument, Function, T> constructor, @@ -268,7 +268,7 @@ GameRules.VisitorCaller visitorCaller, Class valueClass, FeatureFlagSet requiredFeatures -@@ -646,6 +_,12 @@ +@@ -644,6 +_,12 @@ public FeatureFlagSet requiredFeatures() { return this.requiredFeatures; } @@ -281,7 +281,7 @@ } public abstract static class Value> { -@@ -655,16 +_,16 @@ +@@ -653,16 +_,16 @@ this.type = type; } @@ -305,7 +305,7 @@ } } -@@ -683,7 +_,7 @@ +@@ -681,7 +_,7 @@ protected abstract T copy(); diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/BaseFireBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/BaseFireBlock.java.patch index 4482952d6d60..f7a92bc1ed5a 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/BaseFireBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/BaseFireBlock.java.patch @@ -3,7 +3,7 @@ @@ -129,12 +_,13 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent effectApplier.apply(InsideBlockEffectType.CLEAR_FREEZE); effectApplier.apply(InsideBlockEffectType.FIRE_IGNITE); diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/BasePressurePlateBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/BasePressurePlateBlock.java.patch index 951147cdce3c..057b9317c4a9 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/BasePressurePlateBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/BasePressurePlateBlock.java.patch @@ -3,7 +3,7 @@ @@ -82,6 +_,7 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (!level.isClientSide()) { int signalForState = this.getSignalForState(state); diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/BigDripleafBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/BigDripleafBlock.java.patch index f6a2fdb8d41e..9a74acada8e6 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/BigDripleafBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/BigDripleafBlock.java.patch @@ -12,7 +12,7 @@ @@ -192,9 +_,23 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (!level.isClientSide()) { if (state.getValue(TILT) == Tilt.NONE && canEntityTilt(pos, entity) && !level.hasNeighborSignal(pos)) { diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/BubbleColumnBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/BubbleColumnBlock.java.patch index 7e1b6a743d40..117246d54708 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/BubbleColumnBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/BubbleColumnBlock.java.patch @@ -3,8 +3,8 @@ @@ -49,6 +_,7 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent - BlockState blockState = level.getBlockState(pos.above()); - boolean flag = blockState.getCollisionShape(level, pos).isEmpty() && blockState.getFluidState().isEmpty(); if (flag) { + BlockState blockState = level.getBlockState(pos.above()); + boolean flag1 = blockState.getCollisionShape(level, pos).isEmpty() && blockState.getFluidState().isEmpty(); diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/ButtonBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/ButtonBlock.java.patch index 4ddebdf0cc60..03c3b47f20f0 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/ButtonBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/ButtonBlock.java.patch @@ -23,7 +23,7 @@ @@ -150,6 +_,7 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (!level.isClientSide() && this.type.canButtonBeActivatedByArrows() && !state.getValue(POWERED)) { this.checkPressed(state, level, pos); diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/CactusBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/CactusBlock.java.patch index e5eea68e2e67..644d6c9d3a5a 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/CactusBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/CactusBlock.java.patch @@ -32,7 +32,7 @@ @@ -124,7 +_,8 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { - entity.hurt(level.damageSources().cactus(), 1.0F); + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent + entity.hurt(level.damageSources().cactus().eventBlockDamager(level, pos), 1.0F); // CraftBukkit diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/CampfireBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/CampfireBlock.java.patch index 84c287b0d4e5..1b04fe655cba 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/CampfireBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/CampfireBlock.java.patch @@ -3,14 +3,14 @@ @@ -107,8 +_,9 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (state.getValue(LIT) && entity instanceof LivingEntity) { - entity.hurt(level.damageSources().campfire(), this.fireDamage); + entity.hurt(level.damageSources().campfire().eventBlockDamager(level, pos), (float) this.fireDamage); // CraftBukkit } - super.entityInside(state, level, pos, entity, effectApplier); + super.entityInside(state, level, pos, entity, effectApplier, flag); @@ -220,6 +_,11 @@ && projectile.mayInteract(serverLevel, blockPos) && !state.getValue(LIT) diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/CropBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/CropBlock.java.patch index 077d7ff4b085..96a4d941e013 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/CropBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/CropBlock.java.patch @@ -40,7 +40,7 @@ @@ -151,7 +_,8 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { - if (level instanceof ServerLevel serverLevel && entity instanceof Ravager && serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent + if (level instanceof ServerLevel serverLevel && entity instanceof Ravager && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/DetectorRailBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/DetectorRailBlock.java.patch index e2497ca4af85..82bc1056ac96 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/DetectorRailBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/DetectorRailBlock.java.patch @@ -3,7 +3,7 @@ @@ -49,6 +_,7 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (!level.isClientSide()) { if (!state.getValue(POWERED)) { diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/EndGatewayBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/EndGatewayBlock.java.patch index c39c4cb80c6a..d3713684b368 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/EndGatewayBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/EndGatewayBlock.java.patch @@ -3,7 +3,7 @@ @@ -90,10 +_,15 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (entity.canUsePortal(false) && !level.isClientSide() diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/EndPortalBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/EndPortalBlock.java.patch index bbac761c0241..247246382d1b 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/EndPortalBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/EndPortalBlock.java.patch @@ -3,7 +3,7 @@ @@ -59,8 +_,15 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (entity.canUsePortal(false)) { + // CraftBukkit start - Entity in portal diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/EyeblossomBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/EyeblossomBlock.java.patch index 057565bf5cc7..a7a89e9d59f2 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/EyeblossomBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/EyeblossomBlock.java.patch @@ -3,7 +3,7 @@ @@ -100,6 +_,7 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (!level.isClientSide() && level.getDifficulty() != Difficulty.PEACEFUL diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/FrogspawnBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/FrogspawnBlock.java.patch index d2799f0da52d..c37c6e23f7bc 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/FrogspawnBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/FrogspawnBlock.java.patch @@ -3,7 +3,7 @@ @@ -90,6 +_,7 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (entity.getType().equals(EntityType.FALLING_BLOCK)) { this.destroyBlock(level, pos); diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/HoneyBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/HoneyBlock.java.patch index 08a76f0743e2..53fb4efaa8dc 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/HoneyBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/HoneyBlock.java.patch @@ -3,7 +3,7 @@ @@ -61,6 +_,7 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (this.isSlidingDown(pos, entity)) { this.maybeDoSlideAchievement(entity, pos); diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/HopperBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/HopperBlock.java.patch index bbe912c19b90..461d7acb6b62 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/HopperBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/HopperBlock.java.patch @@ -13,7 +13,7 @@ @@ -158,6 +_,7 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent BlockEntity blockEntity = level.getBlockEntity(pos); if (blockEntity instanceof HopperBlockEntity) { diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/LavaCauldronBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/LavaCauldronBlock.java.patch index 509bbd9e75af..652537f1c534 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/LavaCauldronBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/LavaCauldronBlock.java.patch @@ -3,7 +3,7 @@ @@ -45,9 +_,11 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent + BlockPos savedPos = pos.immutable(); // Paper - track lava contact effectApplier.apply(InsideBlockEffectType.CLEAR_FREEZE); diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/LayeredCauldronBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/LayeredCauldronBlock.java.patch index a84497c3c9ed..465bdcc6bdad 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/LayeredCauldronBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/LayeredCauldronBlock.java.patch @@ -3,7 +3,7 @@ @@ -80,39 +_,71 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (level instanceof ServerLevel serverLevel) { BlockPos blockPos = pos.immutable(); diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/NetherPortalBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/NetherPortalBlock.java.patch index 4030c6fb7602..86260910db71 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/NetherPortalBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/NetherPortalBlock.java.patch @@ -27,7 +27,7 @@ @@ -107,7 +_,13 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (entity.canUsePortal(false)) { + // CraftBukkit start - Entity in portal diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/PitcherCropBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/PitcherCropBlock.java.patch index 7f2cfba98e69..ca2e760c44d7 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/PitcherCropBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/PitcherCropBlock.java.patch @@ -3,7 +3,7 @@ @@ -118,6 +_,7 @@ @Override - public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (level instanceof ServerLevel serverLevel && entity instanceof Ravager && serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { serverLevel.destroyBlock(pos, true, entity); diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/PowderSnowBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/PowderSnowBlock.java.patch index 3ef020c48cb6..8be1a8c9bd19 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/PowderSnowBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/PowderSnowBlock.java.patch @@ -3,7 +3,7 @@ @@ -60,6 +_,14 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + // Paper start - Add EntityInsideBlockEvent + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { + if (entity instanceof net.minecraft.server.level.ServerPlayer player) { diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/SweetBerryBushBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/SweetBerryBushBlock.java.patch index 9c634028d0c7..8218671dcaa6 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/SweetBerryBushBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/SweetBerryBushBlock.java.patch @@ -14,7 +14,7 @@ } @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (entity instanceof LivingEntity && entity.getType() != EntityType.FOX && entity.getType() != EntityType.BEE) { entity.makeStuckInBlock(state, new Vec3(0.8F, 0.75, 0.8F)); diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/TripWireBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/TripWireBlock.java.patch index 16889a3a3732..4139781d8706 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/TripWireBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/TripWireBlock.java.patch @@ -51,7 +51,7 @@ @@ -148,6 +_,8 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (io.papermc.paper.configuration.GlobalConfiguration.get().blockUpdates.disableTripwireUpdates) return; // Paper - prevent tripwires from detecting collision + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (!level.isClientSide()) { diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/WaterlilyBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/WaterlilyBlock.java.patch index 76efdbc8071a..00e1f499105d 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/WaterlilyBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/WaterlilyBlock.java.patch @@ -3,9 +3,9 @@ @@ -30,8 +_,14 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent - super.entityInside(state, level, pos, entity, effectApplier); + super.entityInside(state, level, pos, entity, effectApplier, flag); if (level instanceof ServerLevel && entity instanceof AbstractBoat) { + // CraftBukkit start + if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, state.getFluidState().createLegacyBlock())) { // Paper - fix wrong block state diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/WebBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/WebBlock.java.patch index 017240eb4646..ca8b68229ebe 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/WebBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/WebBlock.java.patch @@ -3,7 +3,7 @@ @@ -25,6 +_,7 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent Vec3 vec3 = new Vec3(0.25, 0.05F, 0.25); if (entity instanceof LivingEntity livingEntity && livingEntity.hasEffect(MobEffects.WEAVING)) { diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/WitherRoseBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/WitherRoseBlock.java.patch index 93d4ec3ff931..be6afa2b8ed9 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/WitherRoseBlock.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/WitherRoseBlock.java.patch @@ -3,7 +3,7 @@ @@ -64,11 +_,12 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier, boolean flag) { + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (level instanceof ServerLevel serverLevel && level.getDifficulty() != Difficulty.PEACEFUL diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/util/ApiVersion.java b/paper-server/src/main/java/org/bukkit/craftbukkit/util/ApiVersion.java index d9dd18944e1b..d6d8840f3298 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/util/ApiVersion.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/util/ApiVersion.java @@ -17,7 +17,7 @@ public final class ApiVersion implements Comparable, Serializable { static { versions = new HashMap<>(); - CURRENT = getOrCreateVersion("1.21.9"); + CURRENT = getOrCreateVersion("1.21.10"); FLATTENING = getOrCreateVersion("1.13"); FIELD_NAME_PARITY = getOrCreateVersion("1.20.5"); ABSTRACT_COW = getOrCreateVersion("1.21.5"); From f947c81ac6890e47f87cfbe54193fe1d1e1243e3 Mon Sep 17 00:00:00 2001 From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com> Date: Mon, 6 Oct 2025 17:54:13 +0200 Subject: [PATCH 3/5] deprecate a bunch of duplicates --- .../java/org/bukkit/entity/LivingEntity.java | 62 ++++++++++++------- .../craftbukkit/entity/CraftLivingEntity.java | 49 +++------------ 2 files changed, 49 insertions(+), 62 deletions(-) diff --git a/paper-api/src/main/java/org/bukkit/entity/LivingEntity.java b/paper-api/src/main/java/org/bukkit/entity/LivingEntity.java index cde848724f24..a57e7a7b98b1 100644 --- a/paper-api/src/main/java/org/bukkit/entity/LivingEntity.java +++ b/paper-api/src/main/java/org/bukkit/entity/LivingEntity.java @@ -22,6 +22,7 @@ import org.bukkit.scoreboard.Team; import org.bukkit.util.RayTraceResult; import org.bukkit.util.Vector; +import org.checkerframework.checker.index.qual.NonNegative; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -402,23 +403,24 @@ default RayTraceResult rayTraceBlocks(double maxDistance) { * * @return ticks until arrow leaves */ - public int getArrowCooldown(); + public @NonNegative int getArrowCooldown(); /** * Sets the time in ticks until the next arrow leaves the entity's body. + *

+ * A value of 0 will cause the server to re-calculate the time on the next tick. * * @param ticks time until arrow leaves */ - public void setArrowCooldown(int ticks); + public void setArrowCooldown(@NonNegative int ticks); /** * Gets the amount of arrows in an entity's body. * * @return amount of arrows in body */ - public int getArrowsInBody(); + public @NonNegative int getArrowsInBody(); - // Paper start /** * Set the amount of arrows in the entity's body. *

@@ -426,10 +428,9 @@ default RayTraceResult rayTraceBlocks(double maxDistance) { * * @param count amount of arrows in entity's body */ - default void setArrowsInBody(final int count) { + default void setArrowsInBody(final @NonNegative int count) { this.setArrowsInBody(count, false); } - // Paper end /** * Set the amount of arrows in the entity's body. @@ -437,54 +438,61 @@ default void setArrowsInBody(final int count) { * @param count amount of arrows in entity's body * @param fireEvent whether to fire the {@link org.bukkit.event.entity.ArrowBodyCountChangeEvent} event */ - void setArrowsInBody(int count, boolean fireEvent); // Paper + void setArrowsInBody(@NonNegative int count, boolean fireEvent); // Paper - // Paper start - Add methods for working with arrows stuck in living entities /** * Sets the amount of ticks before the next arrow gets removed from the entities body. *

* A value of 0 will cause the server to re-calculate the amount of ticks on the next tick. * * @param ticks Amount of ticks + * @deprecated use {@link #setArrowCooldown(int)} */ - void setNextArrowRemoval(@org.jetbrains.annotations.Range(from = 0, to = Integer.MAX_VALUE) int ticks); + @Deprecated(since = "1.21.10") + default void setNextArrowRemoval(@NonNegative int ticks) { + this.setArrowCooldown(ticks); + } /** * Gets the amount of ticks before the next arrow gets removed from the entities body. * * @return ticks Amount of ticks + * @deprecated use {@link #getArrowCooldown()} */ - int getNextArrowRemoval(); - // Paper end - Add methods for working with arrows stuck in living entities + @Deprecated(since = "1.21.10") + default @NonNegative int getNextArrowRemoval() { + return this.getArrowCooldown(); + } - // Paper start - Bee Stinger API /** * Gets the time in ticks until the next bee stinger leaves the entity's body. * * @return ticks until bee stinger leaves */ - public int getBeeStingerCooldown(); + public @NonNegative int getBeeStingerCooldown(); /** * Sets the time in ticks until the next stinger leaves the entity's body. + *

+ * A value of 0 will cause the server to re-calculate the time on the next tick. * * @param ticks time until bee stinger leaves */ - public void setBeeStingerCooldown(int ticks); + public void setBeeStingerCooldown(@NonNegative int ticks); /** * Gets the amount of bee stingers in an entity's body. * * @return amount of bee stingers in body */ - public int getBeeStingersInBody(); + public @NonNegative int getBeeStingersInBody(); /** * Set the amount of bee stingers in the entity's body. * * @param count amount of bee stingers in entity's body */ - public void setBeeStingersInBody(int count); + public void setBeeStingersInBody(@NonNegative int count); /** * Sets the amount of ticks before the next bee stinger gets removed from the entities body. @@ -492,16 +500,23 @@ default void setArrowsInBody(final int count) { * A value of 0 will cause the server to re-calculate the amount of ticks on the next tick. * * @param ticks Amount of ticks + * @deprecated use {@link #setBeeStingerCooldown(int)} */ - void setNextBeeStingerRemoval(@org.jetbrains.annotations.Range(from = 0, to = Integer.MAX_VALUE) int ticks); + @Deprecated(since = "1.21.10") + default void setNextBeeStingerRemoval(@NonNegative int ticks) { + this.setBeeStingerCooldown(ticks); + } /** * Gets the amount of ticks before the next bee stinger gets removed from the entities body. * * @return ticks Amount of ticks + * @deprecated use {@link #getBeeStingerCooldown()} */ - int getNextBeeStingerRemoval(); - // Paper end - Stinger API + @Deprecated(since = "1.21.10") + default @NonNegative int getNextBeeStingerRemoval() { + return this.getBeeStingerCooldown(); + } /** * Returns the living entity's current maximum no damage ticks. @@ -1065,11 +1080,14 @@ default boolean addPotionEffect(@NotNull PotionEffect effect) { /** * Get the number of arrows stuck in this entity + * * @return Number of arrows stuck * @deprecated use {@link #getArrowsInBody()} */ @Deprecated - int getArrowsStuck(); + default @NonNegative int getArrowsStuck() { + return this.getArrowsInBody(); + } /** * Set the number of arrows stuck in this entity @@ -1079,7 +1097,9 @@ default boolean addPotionEffect(@NotNull PotionEffect effect) { * you want to retain exact functionality, pass {@code true} for {@code fireEvent}. */ @Deprecated - void setArrowsStuck(int arrows); + default void setArrowsStuck(@NonNegative int arrows) { + this.setArrowsInBody(arrows, true); + } /** * Get the delay (in ticks) before blocking is effective for this entity diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java index 1c2c7fb47c32..98b96653fbfe 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -347,6 +347,7 @@ public int getArrowCooldown() { @Override public void setArrowCooldown(int ticks) { + Preconditions.checkArgument(ticks >= 0, "Amount of ticks before next arrow removal must be non-negative"); this.getHandle().removeArrowTime = ticks; } @@ -357,7 +358,7 @@ public int getArrowsInBody() { @Override public void setArrowsInBody(final int count, final boolean fireEvent) { // Paper - Preconditions.checkArgument(count >= 0, "New arrow amount must be >= 0"); + Preconditions.checkArgument(count >= 0, "New arrow amount must be non-negative"); if (!fireEvent) { this.getHandle().getEntityData().set(net.minecraft.world.entity.LivingEntity.DATA_ARROW_COUNT_ID, count); } else { @@ -365,57 +366,33 @@ public void setArrowsInBody(final int count, final boolean fireEvent) { // Paper } } - // Paper start - Add methods for working with arrows stuck in living entities - @Override - public void setNextArrowRemoval(final int ticks) { - Preconditions.checkArgument(ticks >= 0, "New amount of ticks before next arrow removal must be >= 0"); - this.getHandle().removeArrowTime = ticks; - } - - @Override - public int getNextArrowRemoval() { - return this.getHandle().removeArrowTime; - } - // Paper end - Add methods for working with arrows stuck in living entities - @Override public boolean isInvulnerable() { return this.getHandle().isInvulnerableTo((ServerLevel) this.getHandle().level(), this.getHandle().damageSources().generic()); } - // Paper start - Bee Stinger API + @Override public int getBeeStingerCooldown() { - return getHandle().removeStingerTime; + return this.getHandle().removeStingerTime; } @Override public void setBeeStingerCooldown(int ticks) { - getHandle().removeStingerTime = ticks; + Preconditions.checkArgument(ticks >= 0, "New amount of ticks before next bee stinger removal must be non-negative"); + this.getHandle().removeStingerTime = ticks; } @Override public int getBeeStingersInBody() { - return getHandle().getStingerCount(); + return this.getHandle().getStingerCount(); } @Override public void setBeeStingersInBody(int count) { Preconditions.checkArgument(count >= 0, "New bee stinger amount must be >= 0"); - getHandle().setStingerCount(count); - } - - @Override - public void setNextBeeStingerRemoval(final int ticks) { - Preconditions.checkArgument(ticks >= 0, "New amount of ticks before next bee stinger removal must be >= 0"); - this.getHandle().removeStingerTime = ticks; + this.getHandle().setStingerCount(count); } - @Override - public int getNextBeeStingerRemoval() { - return this.getHandle().removeStingerTime; - } - // Paper end - Bee Stinger API - @Override public void damage(double amount) { this.damage(amount, this.getHandle().damageSources().generic()); @@ -966,16 +943,6 @@ public float getUpwardsMovement() { return this.getHandle().yya; } - @Override - public int getArrowsStuck() { - return this.getHandle().getArrowCount(); - } - - @Override - public void setArrowsStuck(final int arrows) { - this.getHandle().setArrowCount(arrows); - } - @Override public void startUsingItem(org.bukkit.inventory.EquipmentSlot hand) { Preconditions.checkArgument(hand != null, "hand must not be null"); From 70a3af95b8ef51423fcc0f672f4898ed7df71646 Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:43:56 -0700 Subject: [PATCH 4/5] Rebuild feature patches --- .../0001-Moonrise-optimisation-patches.patch | 32 ++++---- .../0005-Entity-Activation-Range-2.0.patch | 6 +- ...-Incremental-chunk-and-player-saving.patch | 6 +- ...026-Optimise-EntityScheduler-ticking.patch | 8 +- .../features/0029-Optimize-Hoppers.patch | 4 +- .../server/MinecraftServer.java.patch | 78 ++++++++++--------- 6 files changed, 68 insertions(+), 66 deletions(-) diff --git a/paper-server/patches/features/0001-Moonrise-optimisation-patches.patch b/paper-server/patches/features/0001-Moonrise-optimisation-patches.patch index aada72cc31c4..241b16274841 100644 --- a/paper-server/patches/features/0001-Moonrise-optimisation-patches.patch +++ b/paper-server/patches/features/0001-Moonrise-optimisation-patches.patch @@ -23021,7 +23021,7 @@ index e7510be12644b2edd966c538c84379a3d5fe89b5..8d299a75c80fddc61a2aa4dc5b0dc594 thread1 -> { DedicatedServer dedicatedServer1 = new DedicatedServer( diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index cf953706a9de504c93625a2d656509bf95ee98fc..d3cad90499a86e6e93192bc5fe27984f9714cdd6 100644 +index f1ec0b9c3f8fe7811e36a66f8091a0a9f5a72d13..174ee247eaaf2e2352f4ccc099e31a8240e86b71 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -177,7 +177,7 @@ import net.minecraft.world.phys.Vec2; @@ -23226,8 +23226,8 @@ index cf953706a9de504c93625a2d656509bf95ee98fc..d3cad90499a86e6e93192bc5fe27984f profiler.pop(); // moonrise:run_all_chunk profiler.pop(); // moonrise:run_all_tasks -@@ -1197,6 +1292,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop false : this::haveTime); + // Paper start - rewrite chunk system @@ -23240,7 +23240,7 @@ index cf953706a9de504c93625a2d656509bf95ee98fc..d3cad90499a86e6e93192bc5fe27984f this.tickFrame.end(); this.recordEndOfTick(); // Paper - improve tick loop profilerFiller.popPush("nextTickWait"); -@@ -1369,6 +1471,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop entityType, Level level) { this.type = entityType; -@@ -1368,35 +1474,77 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name +@@ -1371,35 +1477,77 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name return list.isEmpty() ? distance : -Shapes.collide(Direction.Axis.Y, boundingBox, list, -distance); } @@ -28414,7 +28414,7 @@ index 5ee3dc10cb4755fca83d8f7cad55d26b07afd6ff..454f588b166e412a6da9d7991607418d } private static float[] collectCandidateStepUpHeights(AABB box, List colliders, float deltaY, float maxUpStep) { -@@ -2700,21 +2848,110 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name +@@ -2705,21 +2853,110 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name } public boolean isInWall() { @@ -28536,7 +28536,7 @@ index 5ee3dc10cb4755fca83d8f7cad55d26b07afd6ff..454f588b166e412a6da9d7991607418d } public InteractionResult interact(Player player, InteractionHand hand) { -@@ -4327,15 +4564,17 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name +@@ -4332,15 +4569,17 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name } public Iterable getIndirectPassengers() { @@ -28562,7 +28562,7 @@ index 5ee3dc10cb4755fca83d8f7cad55d26b07afd6ff..454f588b166e412a6da9d7991607418d } public int countPlayerPassengers() { -@@ -4478,77 +4717,126 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name +@@ -4483,77 +4722,126 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name return Mth.lerp(partialTick, this.yRotO, this.yRot); } @@ -28747,7 +28747,7 @@ index 5ee3dc10cb4755fca83d8f7cad55d26b07afd6ff..454f588b166e412a6da9d7991607418d public boolean touchingUnloadedChunk() { AABB aabb = this.getBoundingBox().inflate(1.0); -@@ -4704,6 +4992,15 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name +@@ -4709,6 +4997,15 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name } public final void setPosRaw(double x, double y, double z, boolean forceBoundingBoxUpdate) { @@ -28763,7 +28763,7 @@ index 5ee3dc10cb4755fca83d8f7cad55d26b07afd6ff..454f588b166e412a6da9d7991607418d if (!checkPosition(this, x, y, z)) { return; } -@@ -4855,6 +5152,12 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name +@@ -4860,6 +5157,12 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name @Override public final void setRemoved(Entity.RemovalReason removalReason, @Nullable org.bukkit.event.entity.EntityRemoveEvent.Cause cause) { // CraftBukkit - add Bukkit remove cause @@ -28776,7 +28776,7 @@ index 5ee3dc10cb4755fca83d8f7cad55d26b07afd6ff..454f588b166e412a6da9d7991607418d org.bukkit.craftbukkit.event.CraftEventFactory.callEntityRemoveEvent(this, cause); // CraftBukkit final boolean alreadyRemoved = this.removalReason != null; // Paper - Folia schedulers if (this.removalReason == null) { -@@ -4865,7 +5168,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name +@@ -4870,7 +5173,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name this.stopRiding(); } @@ -28785,7 +28785,7 @@ index 5ee3dc10cb4755fca83d8f7cad55d26b07afd6ff..454f588b166e412a6da9d7991607418d this.levelCallback.onRemove(removalReason); this.onRemoval(removalReason); // Paper start - Folia schedulers -@@ -4899,7 +5202,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name +@@ -4904,7 +5207,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name public boolean shouldBeSaved() { return (this.removalReason == null || this.removalReason.shouldSave()) && !this.isPassenger() @@ -30994,7 +30994,7 @@ index 9d5f6433a1628cb2285f81f8c99dbee4d6c54d81..4fd746ccfd0018f5e551490e24aa6826 public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { diff --git a/net/minecraft/world/level/block/state/BlockBehaviour.java b/net/minecraft/world/level/block/state/BlockBehaviour.java -index 5ad3b49fcf3d25e2309c29cf9fbc9a049402fde9..dff1c4fa389d5168bd9ec1aff4c7e4bc63c4110e 100644 +index af3dfdd85579d01b12d7b6bceec635015bb081f6..07777e331251b7e2c4fdcb63fee41f733e775004 100644 --- a/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/net/minecraft/world/level/block/state/BlockBehaviour.java @@ -416,7 +416,7 @@ public abstract class BlockBehaviour implements FeatureElement { diff --git a/paper-server/patches/features/0005-Entity-Activation-Range-2.0.patch b/paper-server/patches/features/0005-Entity-Activation-Range-2.0.patch index 16c2c04a9ff9..52c81601d9b1 100644 --- a/paper-server/patches/features/0005-Entity-Activation-Range-2.0.patch +++ b/paper-server/patches/features/0005-Entity-Activation-Range-2.0.patch @@ -464,7 +464,7 @@ index 135478a52cd106e6a3a0af9300a77ee5a871a400..ade0649a9fecbb84cebab3c44b4afe7f public void tick() { super.tick(); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 454f588b166e412a6da9d7991607418d7e100b59..35ec35dfbcb0d136d06d8440d1e359bcf26522cd 100644 +index 2cae59fbc6a279e70c388ea7cc6f6f5f749f46a1..8dcd36b3d29c3d9913675c918fa509d78a8accd6 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -368,6 +368,15 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name @@ -508,7 +508,7 @@ index 454f588b166e412a6da9d7991607418d7e100b59..35ec35dfbcb0d136d06d8440d1e359bc movement = this.limitPistonMovement(movement); if (movement.equals(Vec3.ZERO)) { return; -@@ -1114,6 +1134,13 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name +@@ -1117,6 +1137,13 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name this.stuckSpeedMultiplier = Vec3.ZERO; this.setDeltaMovement(Vec3.ZERO); } @@ -754,7 +754,7 @@ index 03af852776b595a5bc1cff01ed4d8d1c77999846..8497cd81b653beb06419ad7cfbf5c36f public void tick() { super.tick(); diff --git a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java -index e7195ad502f80fe7b30fdf28bd45967150a80da1..be9c8ba1e73d7348227139f7586a80f74c3e473f 100644 +index 6a02380f376d8aa5fd4e91b463321ac410a8df0c..9b13991088a5e5f4d7697588777e5252ae67b73a 100644 --- a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java +++ b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java @@ -107,6 +107,21 @@ public class FireworkRocketEntity extends Projectile implements ItemSupplier { diff --git a/paper-server/patches/features/0021-Incremental-chunk-and-player-saving.patch b/paper-server/patches/features/0021-Incremental-chunk-and-player-saving.patch index 8552c2083687..74c40d336540 100644 --- a/paper-server/patches/features/0021-Incremental-chunk-and-player-saving.patch +++ b/paper-server/patches/features/0021-Incremental-chunk-and-player-saving.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Incremental chunk and player saving diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 79b8222848a488704d1eee89cd6255c967378b2c..4b98ac1a7423d9fe569727ef2ce553b1bdc8464a 100644 +index 2bb59acb87f0a230b7cf4870477fc65bea18f3e3..6954ed9560752eb67a332ba4a121420ed09af4c4 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -922,7 +922,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - BlockPhysicsEvent serverLevel.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper - Add EntityMoveEvent serverLevel.updateLagCompensationTick(); // Paper - lag compensation diff --git a/paper-server/patches/sources/net/minecraft/server/MinecraftServer.java.patch b/paper-server/patches/sources/net/minecraft/server/MinecraftServer.java.patch index 0c8c6248180e..84bdcd3143e0 100644 --- a/paper-server/patches/sources/net/minecraft/server/MinecraftServer.java.patch +++ b/paper-server/patches/sources/net/minecraft/server/MinecraftServer.java.patch @@ -806,7 +806,7 @@ boolean flag = l == 0L; if (this.debugCommandProfilerDelayStart) { -@@ -762,19 +_,21 @@ +@@ -762,7 +_,7 @@ this.debugCommandProfiler = new MinecraftServer.TimeProfiler(Util.getNanos(), this.tickCount); } @@ -815,8 +815,10 @@ try (Profiler.Scope scope = Profiler.use(this.createProfiler())) { ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("tick"); - this.tickFrame.start(); +@@ -771,13 +_,15 @@ + profilerFiller.push("scheduledPacketProcessing"); + this.packetProcessor.processQueuedPackets(); + profilerFiller.pop(); + this.runAllTasksAtTickStart(); // Paper - improve tick loop this.tickServer(flag ? () -> false : this::haveTime); this.tickFrame.end(); @@ -830,7 +832,7 @@ this.finishMeasuringTaskExecutionTime(); if (flag) { this.tickRateManager.endTickWork(); -@@ -808,7 +_,7 @@ +@@ -811,7 +_,7 @@ } catch (Throwable var64) { LOGGER.error("Exception stopping the server", var64); } finally { @@ -839,7 +841,7 @@ } } } -@@ -860,7 +_,14 @@ +@@ -863,7 +_,14 @@ } private boolean haveTime() { @@ -855,7 +857,7 @@ } public static boolean throwIfFatalException() { -@@ -887,14 +_,11 @@ +@@ -890,14 +_,11 @@ protected void waitUntilNextTick() { ProfilerFiller profilerFiller = Profiler.get(); @@ -872,7 +874,7 @@ } finally { this.waitingForNextTick = false; } -@@ -913,17 +_,23 @@ +@@ -916,17 +_,23 @@ @Override public TickTask wrapRunnable(Runnable runnable) { @@ -898,7 +900,7 @@ this.mayHaveDelayedTasks = flag; return flag; } -@@ -932,15 +_,16 @@ +@@ -935,15 +_,16 @@ if (super.pollTask()) { return true; } else { @@ -917,7 +919,7 @@ } } -@@ -988,26 +_,44 @@ +@@ -991,26 +_,44 @@ } public void tickServer(BooleanSupplier hasTimeLeft) { @@ -963,7 +965,7 @@ this.tickCount++; this.tickRateManager.tick(); this.tickChildren(hasTimeLeft); -@@ -1017,11 +_,18 @@ +@@ -1020,11 +_,18 @@ } this.ticksUntilAutosave--; @@ -983,7 +985,7 @@ profilerFiller.push("tallying"); long l = Util.getNanos() - nanos; int i1 = this.tickCount % 100; -@@ -1034,7 +_,7 @@ +@@ -1037,7 +_,7 @@ } private void autoSave() { @@ -992,7 +994,7 @@ LOGGER.debug("Autosave started"); ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("save"); -@@ -1076,7 +_,7 @@ +@@ -1079,7 +_,7 @@ private ServerStatus buildServerStatus() { ServerStatus.Players players = this.buildPlayerStatus(); return new ServerStatus( @@ -1001,7 +1003,7 @@ Optional.of(players), Optional.of(ServerStatus.Version.current()), Optional.ofNullable(this.statusIcon), -@@ -1090,7 +_,7 @@ +@@ -1093,7 +_,7 @@ if (this.hidesOnlinePlayers()) { return new ServerStatus.Players(maxPlayers, players.size(), List.of()); } else { @@ -1010,7 +1012,7 @@ ObjectArrayList list = new ObjectArrayList<>(min); int randomInt = Mth.nextInt(this.random, 0, players.size() - min); -@@ -1107,18 +_,77 @@ +@@ -1110,18 +_,77 @@ protected void tickChildren(BooleanSupplier hasTimeLeft) { ProfilerFiller profilerFiller = Profiler.get(); this.getPlayerList().getPlayers().forEach(serverPlayer1 -> serverPlayer1.connection.suspendFlushing()); @@ -1088,7 +1090,7 @@ profilerFiller.push("tick"); -@@ -1132,7 +_,9 @@ +@@ -1135,7 +_,9 @@ profilerFiller.pop(); profilerFiller.pop(); @@ -1098,7 +1100,7 @@ profilerFiller.popPush("connection"); this.tickConnection(); -@@ -1161,9 +_,12 @@ +@@ -1164,9 +_,12 @@ profilerFiller.pop(); } @@ -1113,7 +1115,7 @@ this.effectiveRespawnData = serverLevel.getWorldBorderAdjustedRespawnData(respawnData); } -@@ -1219,6 +_,22 @@ +@@ -1222,6 +_,22 @@ return this.levels.get(dimension); } @@ -1136,7 +1138,7 @@ public Set> levelKeys() { return this.levels.keySet(); } -@@ -1243,7 +_,7 @@ +@@ -1246,7 +_,7 @@ @DontObfuscate public String getServerModName() { @@ -1145,7 +1147,7 @@ } public SystemReport fillSystemReport(SystemReport systemReport) { -@@ -1278,7 +_,7 @@ +@@ -1281,7 +_,7 @@ @Override public void sendSystemMessage(Component component) { @@ -1154,7 +1156,7 @@ } public KeyPair getKeyPair() { -@@ -1316,11 +_,17 @@ +@@ -1319,11 +_,17 @@ } } @@ -1177,7 +1179,7 @@ } } -@@ -1392,6 +_,7 @@ +@@ -1395,6 +_,7 @@ public abstract boolean isEpollEnabled(); @@ -1185,7 +1187,7 @@ public boolean isPvpAllowed() { return this.getGameRules().getBoolean(GameRules.RULE_PVP); } -@@ -1410,10 +_,20 @@ +@@ -1413,10 +_,20 @@ @Override public String getMotd() { @@ -1207,7 +1209,7 @@ this.motd = motd; } -@@ -1442,9 +_,13 @@ +@@ -1445,9 +_,13 @@ int i = 0; for (ServerPlayer serverPlayer : this.getPlayerList().getPlayers()) { @@ -1223,7 +1225,7 @@ } return i; -@@ -1452,7 +_,7 @@ +@@ -1455,7 +_,7 @@ } public ServerConnectionListener getConnection() { @@ -1232,7 +1234,7 @@ } public boolean isReady() { -@@ -1520,7 +_,7 @@ +@@ -1523,7 +_,7 @@ @Override public void executeIfPossible(Runnable task) { if (this.isStopped()) { @@ -1241,7 +1243,7 @@ } else { super.executeIfPossible(task); } -@@ -1555,7 +_,14 @@ +@@ -1558,7 +_,14 @@ return this.functionManager; } @@ -1256,7 +1258,7 @@ CompletableFuture completableFuture = CompletableFuture.supplyAsync( () -> selectedIds.stream().map(this.packRepository::getPack).filter(Objects::nonNull).map(Pack::open).collect(ImmutableList.toImmutableList()), this -@@ -1563,7 +_,7 @@ +@@ -1566,7 +_,7 @@ .thenCompose( list -> { CloseableResourceManager closeableResourceManager = new MultiPackResourceManager(PackType.SERVER_DATA, list); @@ -1265,7 +1267,7 @@ return ReloadableServerResources.loadResources( closeableResourceManager, this.registries, -@@ -1584,20 +_,39 @@ +@@ -1587,20 +_,39 @@ ) .thenAcceptAsync( reloadableResources -> { @@ -1307,7 +1309,7 @@ }, this ); -@@ -1614,7 +_,7 @@ +@@ -1617,7 +_,7 @@ DataPackConfig dataPackConfig = initialDataConfig.dataPacks(); FeatureFlagSet featureFlagSet = initMode ? FeatureFlagSet.of() : initialDataConfig.enabledFeatures(); FeatureFlagSet featureFlagSet1 = initMode ? FeatureFlags.REGISTRY.allFlags() : initialDataConfig.enabledFeatures(); @@ -1316,7 +1318,7 @@ if (safeMode) { return configureRepositoryWithSelection(packRepository, List.of("vanilla"), featureFlagSet, false); } else { -@@ -1669,7 +_,7 @@ +@@ -1672,7 +_,7 @@ private static WorldDataConfiguration configureRepositoryWithSelection( PackRepository packRepository, Collection selectedPacks, FeatureFlagSet enabledFeatures, boolean safeMode ) { @@ -1325,7 +1327,7 @@ enableForcedFeaturePacks(packRepository, enabledFeatures); DataPackConfig selectedPacks1 = getSelectedPacks(packRepository, safeMode); FeatureFlagSet featureFlagSet = packRepository.getRequestedFeatureFlags().join(enabledFeatures); -@@ -1701,7 +_,7 @@ +@@ -1704,7 +_,7 @@ } } @@ -1334,7 +1336,7 @@ } } -@@ -1718,8 +_,8 @@ +@@ -1721,8 +_,8 @@ UserWhiteList whiteList = playerList.getWhiteList(); for (ServerPlayer serverPlayer : Lists.newArrayList(playerList.getPlayers())) { @@ -1345,7 +1347,7 @@ } } } -@@ -1749,12 +_,12 @@ +@@ -1752,12 +_,12 @@ } public ServerLevel findRespawnDimension() { @@ -1360,7 +1362,7 @@ public void setRespawnData(LevelData.RespawnData respawnData) { ServerLevelData serverLevelData = this.worldData.overworldData(); LevelData.RespawnData respawnData1 = serverLevelData.getRespawnData(); -@@ -1952,6 +_,17 @@ +@@ -1955,6 +_,17 @@ } } @@ -1378,7 +1380,7 @@ private ProfilerFiller createProfiler() { if (this.willStartRecordingMetrics) { this.metricsRecorder = ActiveMetricsRecorder.createStarted( -@@ -2073,16 +_,22 @@ +@@ -2076,16 +_,22 @@ } public void logChatMessage(Component content, ChatType.Bound boundChatType, @Nullable String header) { @@ -1405,7 +1407,7 @@ } public boolean logIPs() { -@@ -2093,8 +_,9 @@ +@@ -2096,8 +_,9 @@ LOGGER.debug("Received custom click action {} with payload {}", id, payload.orElse(null)); } @@ -1416,7 +1418,7 @@ } public boolean setAutoSave(boolean autoSave) { -@@ -2120,8 +_,9 @@ +@@ -2123,8 +_,9 @@ return false; } @@ -1427,7 +1429,7 @@ } public boolean acceptsTransfers() { -@@ -2255,4 +_,53 @@ +@@ -2258,4 +_,53 @@ }; } } From e5796a21a9c3a56871076ff06c21bcca606178fd Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:49:51 -0700 Subject: [PATCH 5/5] Update to 1.21.10 and update Adventure to 4.25.0 release --- README.md | 4 ++-- gradle.properties | 4 ++-- paper-api/build.gradle.kts | 5 +---- paper-server/build.gradle.kts | 2 +- .../patches/features/0002-Rewrite-dataconverter-system.patch | 2 +- .../features/0027-Optional-per-player-mob-spawns.patch | 2 +- ...mprove-cancelling-PreCreatureSpawnEvent-with-per-pl.patch | 2 +- 7 files changed, 9 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 5c56a5e60fc5..f50c3b0b874d 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ How To (Plugin Developers) io.papermc.paper paper-api - 1.21.9-R0.1-SNAPSHOT + 1.21.10-R0.1-SNAPSHOT provided ``` @@ -53,7 +53,7 @@ repositories { } dependencies { - compileOnly("io.papermc.paper:paper-api:1.21.9-R0.1-SNAPSHOT") + compileOnly("io.papermc.paper:paper-api:1.21.10-R0.1-SNAPSHOT") } java { diff --git a/gradle.properties b/gradle.properties index aed0924ebc86..4dbf5fe9db7e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ group=io.papermc.paper -version=1.21.10-rc1-R0.1-SNAPSHOT -mcVersion=1.21.10-rc1 +version=1.21.10-R0.1-SNAPSHOT +mcVersion=1.21.10 # Set to true while updating Minecraft version updatingMinecraft=false diff --git a/paper-api/build.gradle.kts b/paper-api/build.gradle.kts index a5a6589277a1..66415f40b903 100644 --- a/paper-api/build.gradle.kts +++ b/paper-api/build.gradle.kts @@ -10,8 +10,7 @@ java { } val annotationsVersion = "26.0.2" -// Keep in sync with paper-server adventure-text-serializer-ansi dep -val adventureVersion = "4.25.0-SNAPSHOT" +val adventureVersion = "4.25.0" val bungeeCordChatVersion = "1.21-R0.2-deprecated+build.21" val slf4jVersion = "2.0.16" val log4jVersion = "2.24.1" @@ -176,7 +175,6 @@ tasks.withType().configureEach { //"https://javadoc.io/doc/org.joml/joml/1.10.8/", //"https://www.javadoc.io/doc/com.google.code.gson/gson/2.11.0", "https://jspecify.dev/docs/api/", - /* TODO 1.21.9 dev - adventure release "https://jd.advntr.dev/api/$adventureVersion/", "https://jd.advntr.dev/key/$adventureVersion/", "https://jd.advntr.dev/text-minimessage/$adventureVersion/", @@ -184,7 +182,6 @@ tasks.withType().configureEach { "https://jd.advntr.dev/text-serializer-legacy/$adventureVersion/", "https://jd.advntr.dev/text-serializer-plain/$adventureVersion/", "https://jd.advntr.dev/text-logger-slf4j/$adventureVersion/", - */ //"https://javadoc.io/doc/org.slf4j/slf4j-api/$slf4jVersion/", "https://logging.apache.org/log4j/2.x/javadoc/log4j-api/", //"https://javadoc.io/doc/org.apache.maven.resolver/maven-resolver-api/1.7.3", diff --git a/paper-server/build.gradle.kts b/paper-server/build.gradle.kts index 2e83c8ee8063..8e79853d44ef 100644 --- a/paper-server/build.gradle.kts +++ b/paper-server/build.gradle.kts @@ -17,7 +17,7 @@ plugins { val paperMavenPublicUrl = "https://repo.papermc.io/repository/maven-public/" dependencies { - mache("io.papermc:mache:1.21.10-rc1+build.5") + mache("io.papermc:mache:1.21.10+build.1") paperclip("io.papermc:paperclip:3.0.3") testRuntimeOnly("org.junit.platform:junit-platform-launcher") } diff --git a/paper-server/patches/features/0002-Rewrite-dataconverter-system.patch b/paper-server/patches/features/0002-Rewrite-dataconverter-system.patch index cebd99156918..f0ffce125a66 100644 --- a/paper-server/patches/features/0002-Rewrite-dataconverter-system.patch +++ b/paper-server/patches/features/0002-Rewrite-dataconverter-system.patch @@ -32907,7 +32907,7 @@ index 71b8bbeda2fecf930870a9b6e856e20639d31645..91650a92a21fcaac65a5dfcac0cc856b return structureTemplate.save(new CompoundTag()); } diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index d3cad90499a86e6e93192bc5fe27984f9714cdd6..79b8222848a488704d1eee89cd6255c967378b2c 100644 +index 174ee247eaaf2e2352f4ccc099e31a8240e86b71..2bb59acb87f0a230b7cf4870477fc65bea18f3e3 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -348,6 +348,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop