From b6d73e8ce6d40edf0146f24cd68c55147d51923c Mon Sep 17 00:00:00 2001 From: granny Date: Sun, 21 Sep 2025 19:26:19 -0700 Subject: [PATCH] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@e3aca921 Replace ConcurrentUtil's Validate with Objects PaperMC/Paper@9a626dd7 Rewrite ticket counter system PaperMC/Paper@65250cbe Drop "Optimize Collision to not load chunks" PaperMC/Paper@55d56d91 Apply "Flush regionfiles on save configuration option" PaperMC/Paper@920e8d35 Apply "Optimise collision checking in player move packet handling" PaperMC/Paper@ec492d3f Apply "Improve keepalive ping system" PaperMC/Paper@8f659478 Apply "Optimise EntityScheduler ticking" PaperMC/Paper@086b4fd4 Apply "Optional per player mob spawns" PaperMC/Paper@2f4211ed Apply "Improve cancelling PreCreatureSpawnEvent with per player mob spawns" PaperMC/Paper@b6d95574 Apply "Optimize Hoppers" PaperMC/Paper@388e6936 update generator PaperMC/Paper@a3c89a8f add javadocs for new api PaperMC/Paper@fcc763ad Call BlockRedstoneEvent for the shelf PaperMC/Paper@03eb18bb replace requireNonNull by checkArgument and deprecate MCUtil#toLocation PaperMC/Paper@6b7bf014 bump built-in datapack version PaperMC/Paper@2779a538 deprecate #lanterns material tag in favour of vanilla tag PaperMC/Paper@6f9957e8 Mannequin#createDefaultProfile -> Mannequin#defaultProfile PaperMC/Paper@24874e53 Also rename Mannequin profile getter/setters for consistency PaperMC/Paper@bc2ae107 Fix default respawn dimension being null for new worlds PaperMC/Paper@eb421583 Use 0.0.4 release of ConcurrentUtil PaperMC/Paper@bb017458 1.21.9-pre2 PaperMC/Paper@02492043 1.21.9-pre2 feature patches PaperMC/Paper@9360ba42 Identifying comments for MinecraftServer PaperMC/Paper@5d3aa537 Some diff improvements in prepare spawn task PaperMC/Paper@22ad4519 Move some stuff to ATs PaperMC/Paper@0ea15c97 Drop no longer applicable ATs PaperMC/Paper@cf78f2a2 bump api-version/datapack format and add a copper torch tag PaperMC/Paper@60cb0dfc generate ClientOption enums and mark CraftBlockData impl as null marked PaperMC/Paper@40252892 Add pre2 to api version PaperMC/Paper@f2cb073a Set build channel to alpha PaperMC/Paper@90b29c4c Port most of the anti-xray patch PaperMC/Paper@4a8e88dc Disable oldPaperCommit to fix CI build PaperMC/Paper@121ac2eb Port the last Anti-XRay hunk PaperMC/Paper@f43641f8 Use ConcurrentUtil 0.0.5 PaperMC/Paper@1f79388d fix end portal teleportation PaperMC/Paper@2efb400a [ci/skip] Adjust spawn location event docs PaperMC/Paper@cb9fc05d simplify overloads PaperMC/Paper@25ecc590 Enable Anti-Xray PaperMC/Paper@4d7185f6 Add AsyncPlayerSpawnLocationEvent#isNewPlayer (#13081) PaperMC/Paper@dc474a89 Fixup vanilla code for Anti-Xray changes PaperMC/Paper@0e23b024 Add back null check for chunkPacketBlockController --- gradle.properties | 6 +-- .../features/0002-Purpur-config-files.patch | 4 +- .../main/java/org/bukkit/Material.java.patch | 2 +- .../main/java/org/bukkit/Server.java.patch | 2 +- .../src/main/java/org/bukkit/World.java.patch | 2 +- .../org/bukkit/entity/LivingEntity.java.patch | 2 +- .../java/org/bukkit/entity/Player.java.patch | 2 +- .../org/bukkit/entity/Villager.java.patch | 2 +- .../java/org/bukkit/entity/Wolf.java.patch | 2 +- purpur-server/build.gradle.kts.patch | 44 +++++++++---------- .../server/MinecraftServer.java.patch | 22 +++++----- .../level/ServerPlayerGameMode.java.patch | 8 ++-- .../world/entity/monster/Shulker.java.patch | 4 +- .../minecraft/world/item/ItemStack.java.patch | 2 +- .../minecraft/world/level/Level.java.patch | 6 +-- .../world/level/NaturalSpawner.java.patch | 2 +- .../level/block/entity/BlockEntity.java.patch | 6 +-- .../features/0002-Ridables.patch | 8 ++-- ...0004-Add-EntityTeleportHinderedEvent.patch | 8 ++-- ...005-API-for-any-mob-to-burn-daylight.patch | 6 +-- .../paper/entity/ai/MobGoalHelper.java.patch | 4 +- .../bukkit/craftbukkit/CraftServer.java.patch | 16 +++---- .../bukkit/craftbukkit/CraftWorld.java.patch | 2 +- .../entity/CraftHumanEntity.java.patch | 2 +- .../entity/CraftLivingEntity.java.patch | 2 +- .../craftbukkit/entity/CraftPlayer.java.patch | 10 ++--- 26 files changed, 86 insertions(+), 90 deletions(-) diff --git a/gradle.properties b/gradle.properties index 3e2c5f652..bda550740 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ group = org.purpurmc.purpur -version = 1.21.9-R0.1-SNAPSHOT +version = 1.21.9-pre2-R0.1-SNAPSHOT -mcVersion = 1.21.9-pre1 -paperCommit = 8bb12cbd3570dc8cfc6b0318cc2ace0a70a50784 +mcVersion = 1.21.9-pre2 +paperCommit = 0e23b0242c3a72df13f7bbb297ab024d4dc545b6 org.gradle.configuration-cache = true org.gradle.caching = true diff --git a/purpur-api/paper-patches/features/0002-Purpur-config-files.patch b/purpur-api/paper-patches/features/0002-Purpur-config-files.patch index f76165628..12db315c1 100644 --- a/purpur-api/paper-patches/features/0002-Purpur-config-files.patch +++ b/purpur-api/paper-patches/features/0002-Purpur-config-files.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Purpur config files diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 65c13fa74383d2a52fc4b997aa760287551df2f4..9a520f27d347726a09bfb06d22be82de3d56e00b 100644 +index afa52218722e2d7f3995f3f51be9dabb267a2d2f..bf664ec7a3974abdb7fd3266b08803a02cb05929 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2390,6 +2390,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2424,6 +2424,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi } // Paper end diff --git a/purpur-api/paper-patches/files/src/main/java/org/bukkit/Material.java.patch b/purpur-api/paper-patches/files/src/main/java/org/bukkit/Material.java.patch index c60c582a7..cf8249079 100644 --- a/purpur-api/paper-patches/files/src/main/java/org/bukkit/Material.java.patch +++ b/purpur-api/paper-patches/files/src/main/java/org/bukkit/Material.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/Material.java +++ b/src/main/java/org/bukkit/Material.java -@@ -3692,4 +_,40 @@ +@@ -3690,4 +_,40 @@ return this.asItemType().getDefaultDataTypes(); } // Paper end - data component API diff --git a/purpur-api/paper-patches/files/src/main/java/org/bukkit/Server.java.patch b/purpur-api/paper-patches/files/src/main/java/org/bukkit/Server.java.patch index 1ebde5bdd..52f0776b4 100644 --- a/purpur-api/paper-patches/files/src/main/java/org/bukkit/Server.java.patch +++ b/purpur-api/paper-patches/files/src/main/java/org/bukkit/Server.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2726,4 +_,111 @@ +@@ -2760,4 +_,111 @@ */ void allowPausing(@NotNull org.bukkit.plugin.Plugin plugin, boolean value); // Paper end - API to check if the server is sleeping diff --git a/purpur-api/paper-patches/files/src/main/java/org/bukkit/World.java.patch b/purpur-api/paper-patches/files/src/main/java/org/bukkit/World.java.patch index e5cbb06aa..a5ab6f338 100644 --- a/purpur-api/paper-patches/files/src/main/java/org/bukkit/World.java.patch +++ b/purpur-api/paper-patches/files/src/main/java/org/bukkit/World.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java -@@ -4331,6 +_,86 @@ +@@ -4488,6 +_,86 @@ @Nullable public DragonBattle getEnderDragonBattle(); diff --git a/purpur-api/paper-patches/files/src/main/java/org/bukkit/entity/LivingEntity.java.patch b/purpur-api/paper-patches/files/src/main/java/org/bukkit/entity/LivingEntity.java.patch index 4867dfad1..937bef5f4 100644 --- a/purpur-api/paper-patches/files/src/main/java/org/bukkit/entity/LivingEntity.java.patch +++ b/purpur-api/paper-patches/files/src/main/java/org/bukkit/entity/LivingEntity.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/entity/LivingEntity.java +++ b/src/main/java/org/bukkit/entity/LivingEntity.java -@@ -1463,4 +_,20 @@ +@@ -1467,4 +_,20 @@ */ @ApiStatus.Experimental @NotNull CombatTracker getCombatTracker(); diff --git a/purpur-api/paper-patches/files/src/main/java/org/bukkit/entity/Player.java.patch b/purpur-api/paper-patches/files/src/main/java/org/bukkit/entity/Player.java.patch index 5cfc81d67..0ba2dd377 100644 --- a/purpur-api/paper-patches/files/src/main/java/org/bukkit/entity/Player.java.patch +++ b/purpur-api/paper-patches/files/src/main/java/org/bukkit/entity/Player.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3932,4 +_,123 @@ +@@ -4003,4 +_,123 @@ */ @ApiStatus.Experimental PlayerGameConnection getConnection(); diff --git a/purpur-api/paper-patches/files/src/main/java/org/bukkit/entity/Villager.java.patch b/purpur-api/paper-patches/files/src/main/java/org/bukkit/entity/Villager.java.patch index 55d5c2802..446119a47 100644 --- a/purpur-api/paper-patches/files/src/main/java/org/bukkit/entity/Villager.java.patch +++ b/purpur-api/paper-patches/files/src/main/java/org/bukkit/entity/Villager.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/entity/Villager.java +++ b/src/main/java/org/bukkit/entity/Villager.java -@@ -408,4 +_,13 @@ +@@ -406,4 +_,13 @@ * Demand is still updated even if all events are canceled. */ public void restock(); diff --git a/purpur-api/paper-patches/files/src/main/java/org/bukkit/entity/Wolf.java.patch b/purpur-api/paper-patches/files/src/main/java/org/bukkit/entity/Wolf.java.patch index 2952ec60a..201466d6b 100644 --- a/purpur-api/paper-patches/files/src/main/java/org/bukkit/entity/Wolf.java.patch +++ b/purpur-api/paper-patches/files/src/main/java/org/bukkit/entity/Wolf.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/entity/Wolf.java +++ b/src/main/java/org/bukkit/entity/Wolf.java -@@ -163,4 +_,20 @@ +@@ -162,4 +_,20 @@ return RegistryAccess.registryAccess().getRegistry(RegistryKey.WOLF_SOUND_VARIANT).getOrThrow(NamespacedKey.minecraft(key)); } } diff --git a/purpur-server/build.gradle.kts.patch b/purpur-server/build.gradle.kts.patch index 656651770..aa3b7ad96 100644 --- a/purpur-server/build.gradle.kts.patch +++ b/purpur-server/build.gradle.kts.patch @@ -8,7 +8,7 @@ plugins { `java-library` -@@ -26,15 +_,27 @@ +@@ -26,6 +_,18 @@ minecraftVersion = providers.gradleProperty("mcVersion") gitFilePatches = false @@ -27,19 +27,7 @@ spigot { enabled = false buildDataRef = "436eac9815c211be1a2a6ca0702615f995e81c44" - packageVersion = "v1_21_R5" // also needs to be updated in MappingEnvironment - } - -- updatingMinecraft { -- oldPaperCommit = "29c8822d90899c89d2689338e81a98f690bcba12" // 1.21.8 main -- } -+ // updatingMinecraft { -+ // oldPaperCommit = "29c8822d90899c89d2689338e81a98f690bcba12" // 1.21.8 main -+ // } - - reobfPackagesToFix.addAll( - "co.aikar.timings", -@@ -111,7 +_,21 @@ +@@ -107,7 +_,21 @@ } } @@ -62,16 +50,16 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { extendsFrom(configurations.compileClasspath.get()) } -@@ -133,7 +_,7 @@ +@@ -129,7 +_,7 @@ } dependencies { - implementation(project(":paper-api")) + implementation(project(":purpur-api")) // Purpur - implementation("ca.spottedleaf:concurrentutil:0.0.4-SNAPSHOT") + implementation("ca.spottedleaf:concurrentutil:0.0.5") implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+ implementation("org.jline:jline-terminal-jni:3.27.1") // fall back to jni on java 21 -@@ -161,6 +_,10 @@ +@@ -157,6 +_,10 @@ implementation("org.ow2.asm:asm-commons:9.8") implementation("org.spongepowered:configurate-yaml:4.2.0") @@ -82,7 +70,7 @@ // Deps that were previously in the API but have now been moved here for backwards compat, eventually to be removed runtimeOnly("commons-lang:commons-lang:2.6") runtimeOnly("org.xerial:sqlite-jdbc:3.49.1.0") -@@ -205,14 +_,14 @@ +@@ -201,14 +_,14 @@ val gitBranch = git.exec(providers, "rev-parse", "--abbrev-ref", "HEAD").get().trim() attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", @@ -102,7 +90,7 @@ "Build-Number" to (build ?: ""), "Build-Time" to buildTime.toString(), "Git-Branch" to gitBranch, -@@ -271,7 +_,7 @@ +@@ -267,7 +_,7 @@ jvmArgumentProviders.add(provider) } @@ -111,10 +99,21 @@ idea { module { generatedSourceDirs.add(generatedDir.toFile()) -@@ -374,6 +_,46 @@ - classpath(tasks.createReobfPaperclipJar.flatMap { it.outputZip }) +@@ -359,7 +_,7 @@ mainClass.set(null as String?) } + +-fill { ++/* fill { // Purpur - we don't use fill + project("paper") + versionFamily(paperweight.minecraftVersion.map { it.split(".", "-").takeWhile { part -> part.toIntOrNull() != null }.take(2).joinToString(".") }) + version(paperweight.minecraftVersion) +@@ -374,4 +_,44 @@ + } + } + } +-} ++} */ // Purpur - we don't use fill + +// tasks.register("rebuildMinecraftSourcesWithGit") { +// group = "temp" @@ -155,6 +154,3 @@ +// +// return files.size +// } - - fill { - project("paper") diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch index c389df244..c8090ef03 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -290,6 +_,7 @@ +@@ -291,6 +_,7 @@ public joptsimple.OptionSet options; public org.bukkit.command.ConsoleCommandSender console; public static int currentTick; // Paper - improve tick loop @@ -8,7 +8,7 @@ public java.util.Queue processQueue = new java.util.concurrent.ConcurrentLinkedQueue(); public int autosavePeriod; // Paper - don't store the vanilla dispatcher -@@ -300,7 +_,7 @@ +@@ -301,7 +_,7 @@ public static final int TICK_TIME = 1000000000 / MinecraftServer.TPS; private static final int SAMPLE_INTERVAL = 20; // Paper - improve server tick loop @Deprecated(forRemoval = true) // Paper @@ -17,7 +17,7 @@ // Spigot end public volatile boolean hasFullyShutdown; // Paper - Improved watchdog support public volatile boolean abnormalExit; // Paper - Improved watchdog support -@@ -309,6 +_,8 @@ +@@ -310,6 +_,8 @@ public boolean isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked private final Set pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping public static final long SERVER_INIT = System.nanoTime(); // Paper - Lag compensation @@ -26,7 +26,7 @@ public static S spin(Function threadFunction) { AtomicReference atomicReference = new AtomicReference<>(); -@@ -923,6 +_,15 @@ +@@ -927,6 +_,15 @@ LOGGER.info("Stopping server"); Commands.COMMAND_SENDING_POOL.shutdownNow(); // Paper - Perf: Async command map building; Shutdown and don't bother finishing @@ -42,7 +42,7 @@ // CraftBukkit start if (this.server != null) { this.server.spark.disable(); // Paper - spark -@@ -1021,6 +_,8 @@ +@@ -1025,6 +_,8 @@ this.safeShutdown(waitForServer, false); } public void safeShutdown(boolean waitForServer, boolean isRestarting) { @@ -51,7 +51,7 @@ this.isRestarting = isRestarting; this.hasLoggedStop = true; // Paper - Debugging if (isDebugging()) io.papermc.paper.util.TraceUtil.dumpTraceForThread("Server stopped"); // Paper - Debugging -@@ -1040,6 +_,7 @@ +@@ -1044,6 +_,7 @@ private static final long MAX_CATCHUP_BUFFER = TICK_TIME * TPS * 60L; private long lastTick = 0; private long catchupTime = 0; @@ -59,7 +59,7 @@ public final RollingAverage tps1 = new RollingAverage(60); public final RollingAverage tps5 = new RollingAverage(60 * 5); public final RollingAverage tps15 = new RollingAverage(60 * 15); -@@ -1126,6 +_,16 @@ +@@ -1130,6 +_,16 @@ } // Paper end - Add onboarding message for initial server start @@ -76,7 +76,7 @@ while (this.running) { long l; if (!this.isPaused() && this.tickRateManager.isSprinting() && this.tickRateManager.checkShouldSprintThisTick()) { -@@ -1150,14 +_,19 @@ +@@ -1154,14 +_,19 @@ if (++MinecraftServer.currentTick % MinecraftServer.SAMPLE_INTERVAL == 0) { final long diff = currentTime - tickSection; final java.math.BigDecimal currentTps = TPS_BASE.divide(new java.math.BigDecimal(diff), 30, java.math.RoundingMode.HALF_UP); @@ -99,7 +99,7 @@ tickSection = currentTime; } // Paper end - further improve server tick loop -@@ -1189,6 +_,12 @@ +@@ -1193,6 +_,12 @@ profilerFiller.popPush("nextTickWait"); this.mayHaveDelayedTasks = true; this.delayedTasksMaxNextTickTimeNanos = Math.max(Util.getNanos() + l, this.nextTickTimeNanos); @@ -112,7 +112,7 @@ this.startMeasuringTaskExecutionTime(); this.waitUntilNextTick(); this.finishMeasuringTaskExecutionTime(); -@@ -1634,7 +_,7 @@ +@@ -1627,7 +_,7 @@ long worldTime = level.getGameTime(); final ClientboundSetTimePacket worldPacket = new ClientboundSetTimePacket(worldTime, dayTime, doDaylight); for (Player entityhuman : level.players()) { @@ -121,7 +121,7 @@ continue; } ServerPlayer entityplayer = (ServerPlayer) entityhuman; -@@ -1805,7 +_,7 @@ +@@ -1799,7 +_,7 @@ @DontObfuscate public String getServerModName() { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayerGameMode.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayerGameMode.java.patch index d8418ba14..7d321b55c 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayerGameMode.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayerGameMode.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/net/minecraft/server/level/ServerPlayerGameMode.java -@@ -367,6 +_,7 @@ +@@ -368,6 +_,7 @@ } return false; } @@ -8,7 +8,7 @@ } // CraftBukkit end -@@ -484,6 +_,7 @@ +@@ -485,6 +_,7 @@ public InteractionHand interactHand; public ItemStack interactItemStack; public InteractionResult useItemOn(ServerPlayer player, Level level, ItemStack stack, InteractionHand hand, BlockHitResult hitResult) { @@ -16,7 +16,7 @@ BlockPos blockPos = hitResult.getBlockPos(); BlockState blockState = level.getBlockState(blockPos); boolean cancelledBlock = false; -@@ -526,7 +_,7 @@ +@@ -527,7 +_,7 @@ boolean flag = !player.getMainHandItem().isEmpty() || !player.getOffhandItem().isEmpty(); boolean flag1 = player.isSecondaryUseActive() && flag; ItemStack itemStack = stack.copy(); @@ -25,7 +25,7 @@ InteractionResult interactionResult = blockState.useItemOn(player.getItemInHand(hand), level, player, hand, hitResult); if (interactionResult.consumesAction()) { CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger(player, blockPos, itemStack); -@@ -572,4 +_,18 @@ +@@ -573,4 +_,18 @@ public void setLevel(ServerLevel serverLevel) { this.level = serverLevel; } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Shulker.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Shulker.java.patch index a64e3c08d..3f4ca504d 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Shulker.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Shulker.java.patch @@ -22,7 +22,7 @@ @Override protected void registerGoals() { this.goalSelector.addGoal(1, new LookAtPlayerGoal(this, Player.class, 8.0F, 0.02F, true)); -@@ -461,11 +_,21 @@ +@@ -457,11 +_,21 @@ private void hitByShulkerBullet() { Vec3 vec3 = this.position(); AABB boundingBox = this.getBoundingBox(); @@ -48,7 +48,7 @@ if (shulker != null) { shulker.setVariant(this.getVariant()); shulker.snapTo(vec3); -@@ -573,7 +_,7 @@ +@@ -569,7 +_,7 @@ } public Optional getVariant() { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ItemStack.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ItemStack.java.patch index 4213d6d8f..84f9c2fe1 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ItemStack.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ItemStack.java.patch @@ -43,7 +43,7 @@ public int getDamageValue() { return Mth.clamp(this.getOrDefault(DataComponents.DAMAGE, 0), 0, this.getMaxDamage()); } -@@ -1203,6 +_,12 @@ +@@ -1209,6 +_,12 @@ public boolean isEnchanted() { return !this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY).isEmpty(); } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch index f781aa770..a4e3a51c0 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -164,11 +_,55 @@ +@@ -165,11 +_,55 @@ } // Paper end - add paper world config @@ -56,7 +56,7 @@ public CraftWorld getWorld() { return this.world; } -@@ -843,6 +_,8 @@ +@@ -845,6 +_,8 @@ // Paper end - getblock optimisations - cache world height/sections this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config @@ -65,7 +65,7 @@ this.generator = generator; this.world = new CraftWorld((ServerLevel) this, generator, biomeProvider, environment); -@@ -2108,4 +_,14 @@ +@@ -2112,4 +_,14 @@ return this.id; } } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/NaturalSpawner.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/NaturalSpawner.java.patch index 68788bb6e..ccb729f99 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/NaturalSpawner.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/NaturalSpawner.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/NaturalSpawner.java +++ b/net/minecraft/world/level/NaturalSpawner.java -@@ -208,7 +_,7 @@ +@@ -263,7 +_,7 @@ mutableBlockPos.set(x, y, z); double d = x + 0.5; double d1 = z + 0.5; diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BlockEntity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BlockEntity.java.patch index 897010f52..a3da430cd 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BlockEntity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BlockEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/entity/BlockEntity.java +++ b/net/minecraft/world/level/block/entity/BlockEntity.java -@@ -106,6 +_,10 @@ +@@ -107,6 +_,10 @@ input.read("PublicBukkitValues", CompoundTag.CODEC) .ifPresent(this.persistentDataContainer::putAll); // Paper end - read persistent data container @@ -11,7 +11,7 @@ } public final void loadWithComponents(ValueInput input) { -@@ -118,6 +_,11 @@ +@@ -119,6 +_,11 @@ } protected void saveAdditional(ValueOutput output) { @@ -23,7 +23,7 @@ } public final CompoundTag saveWithFullMetadata(HolderLookup.Provider registries) { -@@ -406,4 +_,17 @@ +@@ -408,4 +_,17 @@ return this.blockEntity.getNameForReporting() + "@" + this.blockEntity.getBlockPos(); } } diff --git a/purpur-server/paper-patches/features/0002-Ridables.patch b/purpur-server/paper-patches/features/0002-Ridables.patch index 943f5c5a5..d7fb7ed99 100644 --- a/purpur-server/paper-patches/features/0002-Ridables.patch +++ b/purpur-server/paper-patches/features/0002-Ridables.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Ridables diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 6f3f8f6f50437a0d0cec971c9290bc12f3824da8..b829cb03ff78a5ec252e1c7e27740ac489a4bb3d 100644 +index 60f1eba8751a0142cecbea379002ffe475107aa7..ae850c7366e438e5721f0914b48a1e36408e8917 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -1345,4 +1345,26 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -36,10 +36,10 @@ index 6f3f8f6f50437a0d0cec971c9290bc12f3824da8..b829cb03ff78a5ec252e1c7e27740ac4 + // Purpur end - Ridables } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 437d2add0b901baefee056daf4b5ed8694e8e467..1cc45ebaaac7cc503fb72531d881d7d3e59e2db3 100644 +index e16a347e673cdb431c18010e6a01eacfc674c09f..07723b1c68580c6e47a39235bd75ade560aeca5d 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -515,6 +515,15 @@ public class CraftEventFactory { +@@ -516,6 +516,15 @@ public class CraftEventFactory { } craftServer.getPluginManager().callEvent(event); @@ -55,7 +55,7 @@ index 437d2add0b901baefee056daf4b5ed8694e8e467..1cc45ebaaac7cc503fb72531d881d7d3 return event; } -@@ -1047,6 +1056,7 @@ public class CraftEventFactory { +@@ -1048,6 +1057,7 @@ public class CraftEventFactory { EntityDamageEvent event; if (damager != null) { event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, bukkitDamageSource, modifiers, modifierFunctions, critical); diff --git a/purpur-server/paper-patches/features/0004-Add-EntityTeleportHinderedEvent.patch b/purpur-server/paper-patches/features/0004-Add-EntityTeleportHinderedEvent.patch index 5e0f64688..d4cdb771a 100644 --- a/purpur-server/paper-patches/features/0004-Add-EntityTeleportHinderedEvent.patch +++ b/purpur-server/paper-patches/features/0004-Add-EntityTeleportHinderedEvent.patch @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index b829cb03ff78a5ec252e1c7e27740ac489a4bb3d..b1ffaeb5e4f0ac6adb600d2025b1f0cac2513dc2 100644 +index ae850c7366e438e5721f0914b48a1e36408e8917..e5d23a8d571fda492bc6dd6ee6694f175ff30ba1 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -314,6 +314,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -29,10 +29,10 @@ index b829cb03ff78a5ec252e1c7e27740ac489a4bb3d..b1ffaeb5e4f0ac6adb600d2025b1f0ca } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index acd531bf2d5c5040bf5e2ec2c8b880e3e8e2bc94..34498acf68e577c3654f46898c9f7d4eb1f9e9ef 100644 +index 33908430c27e8590b6509a1dea456b44ebb665c1..0d93eb5c28570c0d82846f3dfaeac28e94cb420c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1476,6 +1476,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -1424,6 +1424,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa // Paper start - Teleport passenger API // Don't allow teleporting between worlds while keeping passengers if (ignorePassengers && entity.isVehicle() && location.getWorld() != this.getWorld()) { @@ -40,7 +40,7 @@ index acd531bf2d5c5040bf5e2ec2c8b880e3e8e2bc94..34498acf68e577c3654f46898c9f7d4e return false; } -@@ -1497,6 +1498,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -1445,6 +1446,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa } if (entity.isVehicle() && !ignorePassengers) { // Paper - Teleport API diff --git a/purpur-server/paper-patches/features/0005-API-for-any-mob-to-burn-daylight.patch b/purpur-server/paper-patches/features/0005-API-for-any-mob-to-burn-daylight.patch index db3072dfa..b3f51ea07 100644 --- a/purpur-server/paper-patches/features/0005-API-for-any-mob-to-burn-daylight.patch +++ b/purpur-server/paper-patches/features/0005-API-for-any-mob-to-burn-daylight.patch @@ -6,7 +6,7 @@ Subject: [PATCH] API for any mob to burn daylight Co-authored by: Encode42 diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index b1ffaeb5e4f0ac6adb600d2025b1f0cac2513dc2..2d77ac2082c80b5e0d61e57ceaaddc0d57600a4b 100644 +index e5d23a8d571fda492bc6dd6ee6694f175ff30ba1..5e46428e5dd24c581c816125b52cb32de087d5f4 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -125,6 +125,13 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -24,10 +24,10 @@ index b1ffaeb5e4f0ac6adb600d2025b1f0cac2513dc2..2d77ac2082c80b5e0d61e57ceaaddc0d Preconditions.checkArgument(entity != null, "Unknown entity"); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index c7605b0d7dc6797913067400902eb1a21df1b962..b15d68f583165ec950dfe039834f46a5491d2fcc 100644 +index 1ed274542d32a5efbf8af4d5a0f197c98902f810..1e79357a3f31efd479720e78821962e5d6ff6db4 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -1169,4 +1169,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -1142,4 +1142,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { public CombatTracker getCombatTracker() { return this.getHandle().getCombatTracker().paperCombatTracker; } diff --git a/purpur-server/paper-patches/files/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java.patch b/purpur-server/paper-patches/files/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java.patch index f37d9605d..bc1fbe3c4 100644 --- a/purpur-server/paper-patches/files/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java.patch +++ b/purpur-server/paper-patches/files/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java.patch @@ -1,7 +1,7 @@ --- a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java +++ b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java -@@ -144,6 +_,11 @@ - private static final Map NESTED_CLASS_NAMES = Util.make(new HashMap<>(), map -> { +@@ -143,6 +_,11 @@ + private static final Map RENAMES = Util.make(new HashMap<>(), map -> { map.put("AbstractSkeleton$1", "AbstractSkeletonMelee"); + // Purpur start - Add option to disable zombie aggressiveness towards villagers diff --git a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch index d96082184..a5ccffdb6 100644 --- a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch +++ b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -417,6 +_,20 @@ +@@ -416,6 +_,20 @@ this.paperPluginManager = new io.papermc.paper.plugin.manager.PaperPluginManagerImpl(this, this.commandMap, pluginManager); this.pluginManager.paperPluginManager = this.paperPluginManager; // Paper end @@ -21,7 +21,7 @@ CraftRegistry.setMinecraftRegistry(console.registryAccess()); -@@ -1029,6 +_,7 @@ +@@ -992,6 +_,7 @@ org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot this.console.paperConfigurations.reloadConfigs(this.console); @@ -29,7 +29,7 @@ for (ServerLevel world : this.console.getAllLevels()) { // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && world.getGameRules().getBoolean(GameRules.RULE_SPAWN_MONSTERS)); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean)) -@@ -1044,6 +_,7 @@ +@@ -1007,6 +_,7 @@ } } world.spigotConfig.init(); // Spigot @@ -37,7 +37,7 @@ } Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper -@@ -1061,6 +_,7 @@ +@@ -1024,6 +_,7 @@ org.spigotmc.SpigotConfig.registerCommands(); // Spigot io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper this.spark.registerCommandBeforePlugins(this); // Paper - spark @@ -45,7 +45,7 @@ this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -1526,6 +_,60 @@ +@@ -1482,6 +_,60 @@ return true; } @@ -106,7 +106,7 @@ @Override public List getRecipesFor(ItemStack result) { Preconditions.checkArgument(result != null, "ItemStack cannot be null"); -@@ -2827,6 +_,18 @@ +@@ -2725,6 +_,18 @@ return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console); } @@ -125,7 +125,7 @@ @Override public void restart() { CraftServer.this.restart(); -@@ -2859,6 +_,7 @@ +@@ -2757,6 +_,7 @@ @Override public double[] getTPS() { return new double[] { @@ -133,7 +133,7 @@ net.minecraft.server.MinecraftServer.getServer().tps1.getAverage(), net.minecraft.server.MinecraftServer.getServer().tps5.getAverage(), net.minecraft.server.MinecraftServer.getServer().tps15.getAverage() -@@ -3066,4 +_,18 @@ +@@ -2964,4 +_,18 @@ public void allowPausing(final Plugin plugin, final boolean value) { this.console.addPluginAllowingSleep(plugin.getName(), value); } diff --git a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftWorld.java.patch b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftWorld.java.patch index c32f79e0d..8bf52dcde 100644 --- a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftWorld.java.patch +++ b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftWorld.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2379,6 +_,50 @@ +@@ -1954,6 +_,50 @@ return (this.getHandle().getDragonFight() == null) ? null : new CraftDragonBattle(this.getHandle().getDragonFight()); } diff --git a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java.patch b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java.patch index f3a2c3df6..cf2b53b12 100644 --- a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java.patch +++ b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -@@ -294,6 +_,7 @@ +@@ -289,6 +_,7 @@ @Override public void recalculatePermissions() { this.perm.recalculatePermissions(); diff --git a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java.patch b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java.patch index fb1ce848f..d6b599a23 100644 --- a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java.patch +++ b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -516,7 +_,7 @@ +@@ -506,7 +_,7 @@ net.minecraft.server.level.ServerPlayer nmsKiller = killer == null ? null : ((CraftPlayer) killer).getHandle(); this.getHandle().setLastHurtByMob(nmsKiller); if (nmsKiller != null) { diff --git a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java.patch b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java.patch index a842c17b3..ed3bb8014 100644 --- a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java.patch +++ b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java.patch @@ -15,9 +15,9 @@ - this.getHandle().listName = name.equals(this.getName()) ? null : CraftChatMessage.fromStringOrNull(name); + this.getHandle().listName = name.equals(this.getName()) ? null : useMM ? io.papermc.paper.adventure.PaperAdventure.asVanilla(net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(name)) : CraftChatMessage.fromStringOrNull(name); // Purpur - AFK API if (this.getHandle().connection == null) return; // Paper - Updates are possible before the player has fully joined - for (ServerPlayer player : (List) this.server.getHandle().players) { + for (ServerPlayer player : this.server.getHandle().players) { if (player.getBukkitEntity().canSee(this)) { -@@ -1025,6 +_,78 @@ +@@ -978,6 +_,78 @@ } } @@ -94,9 +94,9 @@ + // Purpur end - Death screen API + @Override - public void sendBlockDamage(Location loc, float progress) { - this.sendBlockDamage(loc, progress, this.getEntityId()); -@@ -2695,6 +_,28 @@ + public void sendBlockDamage(Location loc, float progress, org.bukkit.entity.Entity source) { + Preconditions.checkArgument(source != null, "source must not be null"); +@@ -2590,6 +_,28 @@ public float getWalkSpeed() { return this.getHandle().getAbilities().walkingSpeed * 2f; }