From 273629839ca367e9e4a61b486841ad12858d4a00 Mon Sep 17 00:00:00 2001 From: bonan Date: Fri, 2 Jan 2026 22:40:46 +0100 Subject: [PATCH 1/2] Update upstream (1.21.11) --- gradle.properties | 7 +- gradle/wrapper/gradle-wrapper.properties | 2 +- nabulus-api/build.gradle.kts.patch | 8 +- nabulus-server/build.gradle.kts.patch | 28 ++--- .../0001-Separate-creative-levels.patch | 103 ++++++------------ ...ers-in-playerlist-and-tab-suggestion.patch | 12 +- ...ges-for-player-chat-until-Velocity-s.patch | 12 +- ...004-Add-silent-chest-flag-to-players.patch | 20 ++-- ...n-attempts-after-consistent-failures.patch | 16 +-- ...llow-players-to-hide-wither-boss-bar.patch | 12 +- .../features/0001-Nabulus-branding.patch | 19 ---- ...rs-in-playerlist-and-tab-suggestion.patch} | 12 +- ...ix-pardoning-uncached-game-profiles.patch} | 0 ...Discord-commands-through-CommandMap.patch} | 4 +- 14 files changed, 101 insertions(+), 154 deletions(-) delete mode 100644 nabulus-server/paper-patches/features/0001-Nabulus-branding.patch rename nabulus-server/paper-patches/features/{0002-Show-hidden-players-in-playerlist-and-tab-suggestion.patch => 0001-Show-hidden-players-in-playerlist-and-tab-suggestion.patch} (87%) rename nabulus-server/paper-patches/features/{0003-Fix-pardoning-uncached-game-profiles.patch => 0002-Fix-pardoning-uncached-game-profiles.patch} (100%) rename nabulus-server/paper-patches/features/{0004-Dispatch-Discord-commands-through-CommandMap.patch => 0003-Dispatch-Discord-commands-through-CommandMap.patch} (88%) diff --git a/gradle.properties b/gradle.properties index e6739e5..9ac39e4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,9 @@ group=com.froobworld.nabulus -version=1.21.10-R0.1-SNAPSHOT +version=1.21.11-R0.1-SNAPSHOT -mcVersion=1.21.10 -paperRef=610f1d2177f9e6320503e3dad6c42a93a6e48d56 +mcVersion=1.21.11 +paperRef=cd445fdb26d7b159f5c2726acee5db113a3bbff9 +apiVersion=1.21.11 org.gradle.configuration-cache=true org.gradle.caching=true diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2e11132..23449a2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/nabulus-api/build.gradle.kts.patch b/nabulus-api/build.gradle.kts.patch index 4aae215..b8f9a12 100644 --- a/nabulus-api/build.gradle.kts.patch +++ b/nabulus-api/build.gradle.kts.patch @@ -1,6 +1,6 @@ --- a/paper-api/build.gradle.kts +++ b/paper-api/build.gradle.kts -@@ -89,7 +_,7 @@ +@@ -91,7 +_,7 @@ testRuntimeOnly("org.junit.platform:junit-platform-launcher") } @@ -9,7 +9,7 @@ idea { module { generatedSourceDirs.add(generatedDir.toFile()) -@@ -99,6 +_,18 @@ +@@ -101,6 +_,18 @@ main { java { srcDir(generatedDir) @@ -28,7 +28,7 @@ } } } -@@ -165,7 +_,7 @@ +@@ -183,7 +_,7 @@ tasks.withType().configureEach { val options = options as StandardJavadocDocletOptions @@ -37,7 +37,7 @@ options.use() options.isDocFilesSubDirs = true options.links( -@@ -198,11 +_,11 @@ +@@ -216,11 +_,11 @@ } // workaround for https://github.com/gradle/gradle/issues/4046 diff --git a/nabulus-server/build.gradle.kts.patch b/nabulus-server/build.gradle.kts.patch index 5836684..f393dd9 100644 --- a/nabulus-server/build.gradle.kts.patch +++ b/nabulus-server/build.gradle.kts.patch @@ -1,10 +1,9 @@ --- a/paper-server/build.gradle.kts +++ b/paper-server/build.gradle.kts -@@ -43,6 +_,16 @@ - "org.bukkit.craftbukkit", - "org.spigotmc", - ) -+ +@@ -19,6 +_,16 @@ + } + + paperweight { + val fork = forks.register("nabulus") { + upstream.patchDir("paperServer") { + upstreamPath = "paper-server" @@ -12,12 +11,13 @@ + patchesDir = rootDirectory.dir("nabulus-server/paper-patches") + outputDir = rootDirectory.dir("paper-server") + } -+ } -+ activeFork = fork - } ++ } ++ activeFork = fork ++ + minecraftVersion = providers.gradleProperty("mcVersion") + gitFilePatches = false - tasks.generateDevelopmentBundle { -@@ -107,7 +_,20 @@ +@@ -104,7 +_,20 @@ } } @@ -39,16 +39,16 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { extendsFrom(configurations.compileClasspath.get()) } -@@ -130,7 +_,7 @@ +@@ -127,7 +_,7 @@ } dependencies { - implementation(project(":paper-api")) + implementation(project(":nabulus-api")) - implementation("ca.spottedleaf:concurrentutil:0.0.5") + implementation("ca.spottedleaf:concurrentutil:0.0.8") 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 -@@ -207,7 +_,7 @@ +@@ -205,7 +_,7 @@ "Specification-Version" to project.version, "Specification-Vendor" to "Paper Team", "Brand-Id" to "papermc:paper", @@ -57,7 +57,7 @@ "Build-Number" to (build ?: ""), "Build-Time" to buildTime.toString(), "Git-Branch" to gitBranch, -@@ -266,7 +_,7 @@ +@@ -264,7 +_,7 @@ jvmArgumentProviders.add(provider) } diff --git a/nabulus-server/minecraft-patches/features/0001-Separate-creative-levels.patch b/nabulus-server/minecraft-patches/features/0001-Separate-creative-levels.patch index d3d724e..ada74ee 100644 --- a/nabulus-server/minecraft-patches/features/0001-Separate-creative-levels.patch +++ b/nabulus-server/minecraft-patches/features/0001-Separate-creative-levels.patch @@ -46,10 +46,10 @@ index 7015d97cb5b97d59ca41f63ba23da1edfb6bae0a..98999e673ba29329948cbba8838fc1f6 return null; } diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index fdf031e2dd5088cc1f4ab7dbc13ab86d0be6f9b2..67eb887699668938cb7fb489e0e529bd5b77fecb 100644 +index 785045f119ee2f9b9df4efc6e2f10134a1cbb160..a4de03a71324c22774546ff1607284b51356d95f 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -656,6 +656,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -647,6 +647,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc } this.setLevel(level); this.gameMode.setLevel(level); @@ -57,15 +57,15 @@ index fdf031e2dd5088cc1f4ab7dbc13ab86d0be6f9b2..67eb887699668938cb7fb489e0e529bd } // CraftBukkit end -@@ -1550,6 +1551,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc - this.unsetRemoved(); - // CraftBukkit end +@@ -1545,6 +1546,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc + profilerFiller.pop(); + profilerFiller.push("placing"); this.setServerLevel(level); + this.chooseInventory(); // Nabulus this.connection.internalTeleport(PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); level.addDuringTeleport(this); -@@ -2132,10 +2134,20 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -2147,11 +2149,21 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc } public void restoreFrom(ServerPlayer that, boolean keepEverything) { @@ -78,15 +78,16 @@ index fdf031e2dd5088cc1f4ab7dbc13ab86d0be6f9b2..67eb887699668938cb7fb489e0e529bd this.chatSession = that.chatSession; this.gameMode.setGameModeForPlayer(that.gameMode.getGameModeForPlayer(), that.gameMode.getPreviousGameModeForPlayer()); this.onUpdateAbilities(); + this.getAttributes().assignBaseValues(that.getAttributes()); + // Nabulus start + this.normalInventory.replaceWith(that.normalInventory); + this.creativeLevelInventory.replaceWith(that.creativeLevelInventory); + this.usingNormalInventory = that.usingNormalInventory; + // Nabulus end if (keepEverything) { - this.getAttributes().assignBaseValues(that.getAttributes()); // this.getAttributes().assignPermanentModifiers(that.getAttributes()); // CraftBukkit -@@ -2174,6 +2186,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc + this.setHealth(that.getHealth()); +@@ -2180,6 +2192,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.seenCredits = that.seenCredits; this.enteredNetherPosition = that.enteredNetherPosition; this.chunkTrackingView = that.chunkTrackingView; @@ -95,25 +96,13 @@ index fdf031e2dd5088cc1f4ab7dbc13ab86d0be6f9b2..67eb887699668938cb7fb489e0e529bd this.setShoulderEntityLeft(that.getShoulderEntityLeft()); this.setShoulderEntityRight(that.getShoulderEntityRight()); diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 9d7be1695f797c2c041d21a8326aeea46b0488d7..a07568d90380f572a9eae68bc3fc1a60a9f69565 100644 +index 989ac565c47a70c7947cb7315d0f5c2cfecd0363..9a3cc199963d1e593218c6c294c6fedb5b45d0c4 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -602,8 +602,27 @@ public abstract class PlayerList { - Level fromWorld = player.level(); - player.wonGame = false; - // CraftBukkit end -+ // Nabulus start - moved from below -+ boolean isRespawn = false; -+ TeleportTransition teleportTransition; -+ if (location == null) { -+ teleportTransition = player.findRespawnPositionAndUseSpawnBlock(!keepInventory, TeleportTransition.DO_NOTHING, eventReason); -+ -+ if (!keepInventory) player.reset(); // SPIGOT-4785 -+ isRespawn = true; -+ } else { -+ teleportTransition = new TeleportTransition(((org.bukkit.craftbukkit.CraftWorld) location.getWorld()).getHandle(), org.bukkit.craftbukkit.util.CraftLocation.toVec3(location), Vec3.ZERO, location.getYaw(), location.getPitch(), TeleportTransition.DO_NOTHING); -+ } -+ // Nabulus end +@@ -606,8 +606,15 @@ public abstract class PlayerList { + player.level().removePlayerImmediately(player, reason); + ServerLevel level = teleportTransition.newLevel(); + ServerPlayer serverPlayer = player; // Paper - TODO - recreate instance + // Nabulus start + boolean toOrFromCreativeLevel = ((net.minecraft.world.level.storage.PrimaryLevelData) teleportTransition.newLevel().levelData).creativeLevel || ((net.minecraft.world.level.storage.PrimaryLevelData) player.level().levelData).creativeLevel; + if (toOrFromCreativeLevel) { @@ -126,36 +115,12 @@ index 9d7be1695f797c2c041d21a8326aeea46b0488d7..a07568d90380f572a9eae68bc3fc1a60 + serverPlayer.restoreFrom(player, keepInventory, toOrFromCreativeLevel); // Nabulus serverPlayer.setId(player.getId()); serverPlayer.setMainArm(player.getMainArm()); - // CraftBukkit - not required, just copies old location into reused entity -@@ -616,11 +635,13 @@ public abstract class PlayerList { - } - // Paper start - Add PlayerPostRespawnEvent - boolean isBedSpawn = false; -- boolean isRespawn = false; -+ //boolean isRespawn = false; // Nabulus - moved up - boolean isAnchorSpawn = false; - // Paper end - Add PlayerPostRespawnEvent - - // CraftBukkit start - fire PlayerRespawnEvent -+ // Nabulus start - moved up -+ /* - TeleportTransition teleportTransition; - if (location == null) { - teleportTransition = player.findRespawnPositionAndUseSpawnBlock(!keepInventory, TeleportTransition.DO_NOTHING, eventReason); -@@ -634,6 +655,8 @@ public abstract class PlayerList { - } else { - teleportTransition = new TeleportTransition(((org.bukkit.craftbukkit.CraftWorld) location.getWorld()).getHandle(), org.bukkit.craftbukkit.util.CraftLocation.toVec3(location), Vec3.ZERO, location.getYaw(), location.getPitch(), TeleportTransition.DO_NOTHING); - } -+ */ -+ // Nabulus end - // Spigot start - if (teleportTransition == null) { // Paper - Add PlayerPostRespawnEvent - diff on change - spigot early returns if respawn pos is null, that is how they handle disconnected player in respawn event - return player; + if (false && !teleportTransition.missingRespawnBlock()) { // Paper - Once we not reuse the player entity, this can be flipped again but without the events being fired diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index fe4128c66b70672b4aa29c85c7d033f55b1e794c..56f954fb4b6b593a15464beb07704c7f6b64a768 100644 +index 21d0de44d9055a5e80c551402abdb7e352dcb0c9..ba63f48654e5c599ad752067e8aa71233e7301db 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -3987,6 +3987,11 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name +@@ -4000,6 +4000,11 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name } // Paper end - Fix item duplication and teleport issues if (this.level() instanceof ServerLevel serverLevel && !this.isRemoved()) { @@ -168,13 +133,13 @@ index fe4128c66b70672b4aa29c85c7d033f55b1e794c..56f954fb4b6b593a15464beb07704c7f PositionMoveRotation absolutePosition = PositionMoveRotation.calculateAbsolute(PositionMoveRotation.of(this), PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); Vec3 velocity = absolutePosition.deltaMovement(); // Paper diff --git a/net/minecraft/world/entity/PortalProcessor.java b/net/minecraft/world/entity/PortalProcessor.java -index 88b07fbb96b20124777889830afa480673629d43..15135544bd6916bc61d7e17ecee2369026820379 100644 +index 4e69e32ad000b8c02e44c3ffce24ff5e3c090a2f..cb0ffb5e2be2bd2d4e850f9dd8af7d91890167b3 100644 --- a/net/minecraft/world/entity/PortalProcessor.java +++ b/net/minecraft/world/entity/PortalProcessor.java -@@ -30,6 +30,11 @@ public class PortalProcessor { +@@ -29,6 +29,11 @@ public class PortalProcessor { + } - @Nullable - public TeleportTransition getPortalDestination(ServerLevel level, Entity entity) { + public @Nullable TeleportTransition getPortalDestination(ServerLevel level, Entity entity) { + // Nabulus start + if (((net.minecraft.world.level.storage.PrimaryLevelData) entity.level().levelData).creativeLevel) { + return null; @@ -184,10 +149,10 @@ index 88b07fbb96b20124777889830afa480673629d43..15135544bd6916bc61d7e17ecee23690 } diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index 14e8332cd07ebbd474015ad50abb191f4ad43b18..3f4e3da838bc52027d6eda6c4a8240ebc25c9a6a 100644 +index 7bf160cef8bd772d27d4a71f04d5d9861ef67984..33f5954591b0ccff532e420f02471b5c0f4f74da 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -185,6 +185,36 @@ public abstract class Player extends Avatar implements ContainerUser { +@@ -184,6 +184,36 @@ public abstract class Player extends Avatar implements ContainerUser { public boolean fauxSleeping; public int oldLevel = -1; @@ -224,7 +189,7 @@ index 14e8332cd07ebbd474015ad50abb191f4ad43b18..3f4e3da838bc52027d6eda6c4a8240eb @Override public org.bukkit.craftbukkit.entity.CraftHumanEntity getBukkitEntity() { return (org.bukkit.craftbukkit.entity.CraftHumanEntity) super.getBukkitEntity(); -@@ -673,6 +703,14 @@ public abstract class Player extends Avatar implements ContainerUser { +@@ -669,6 +699,14 @@ public abstract class Player extends Avatar implements ContainerUser { this.setUUID(this.gameProfile.id()); this.inventory.load(input.listOrEmpty("Inventory", ItemStackWithSlot.CODEC)); this.inventory.setSelectedSlot(input.getIntOr("SelectedItemSlot", 0)); @@ -239,7 +204,7 @@ index 14e8332cd07ebbd474015ad50abb191f4ad43b18..3f4e3da838bc52027d6eda6c4a8240eb this.sleepCounter = input.getShortOr("SleepTimer", (short)0); this.experienceProgress = input.getFloatOr("XpP", 0.0F); this.experienceLevel = input.getIntOr("XpLevel", 0); -@@ -695,10 +733,24 @@ public abstract class Player extends Avatar implements ContainerUser { +@@ -691,10 +729,24 @@ public abstract class Player extends Avatar implements ContainerUser { @Override protected void addAdditionalSaveData(ValueOutput output) { @@ -265,10 +230,10 @@ index 14e8332cd07ebbd474015ad50abb191f4ad43b18..3f4e3da838bc52027d6eda6c4a8240eb output.putFloat("XpP", this.experienceProgress); output.putInt("XpLevel", this.experienceLevel); diff --git a/net/minecraft/world/level/storage/LevelStorageSource.java b/net/minecraft/world/level/storage/LevelStorageSource.java -index 3b40822ea6ec9783fe3cb8eaba069a8d626d8382..55f9a938a3f840485d8326d274cac7ae74cfd608 100644 +index 140630186c3b0324c248cc2a2f31d3b906557b9c..7d76ad1dca83d1be71f0c5bb32b726639b260c07 100644 --- a/net/minecraft/world/level/storage/LevelStorageSource.java +++ b/net/minecraft/world/level/storage/LevelStorageSource.java -@@ -146,6 +146,7 @@ public class LevelStorageSource { +@@ -143,6 +143,7 @@ public class LevelStorageSource { dynamic, levelSettings, complete.specialWorldProperty(), worldGenSettings.options(), lifecycle ); primaryLevelData.pdc = (Tag) dynamic.getElement("BukkitValues", null); // CraftBukkit - Add PDC to world @@ -277,10 +242,10 @@ index 3b40822ea6ec9783fe3cb8eaba069a8d626d8382..55f9a938a3f840485d8326d274cac7ae } diff --git a/net/minecraft/world/level/storage/PrimaryLevelData.java b/net/minecraft/world/level/storage/PrimaryLevelData.java -index d4cc4691582c4e2c52e60f73254509a2ab2f45a0..56b1be83107319c6c61f51abd6aebae36304d253 100644 +index 8936b4b1ae9c82eed2a7d3191a29f01792438d14..d136a99d0ffd8a0aab364dec9e7a9083b7fb5f99 100644 --- a/net/minecraft/world/level/storage/PrimaryLevelData.java +++ b/net/minecraft/world/level/storage/PrimaryLevelData.java -@@ -80,6 +80,7 @@ public class PrimaryLevelData implements ServerLevelData, WorldData { +@@ -77,6 +77,7 @@ public class PrimaryLevelData implements ServerLevelData, WorldData { public net.minecraft.core.Registry customDimensions; private net.minecraft.server.level.ServerLevel world; protected net.minecraft.nbt.Tag pdc; @@ -288,11 +253,11 @@ index d4cc4691582c4e2c52e60f73254509a2ab2f45a0..56b1be83107319c6c61f51abd6aebae3 public void setWorld(net.minecraft.server.level.ServerLevel world) { if (this.world != null) { -@@ -296,6 +297,7 @@ public class PrimaryLevelData implements ServerLevelData, WorldData { - nbt.storeNullable("WanderingTraderId", UUIDUtil.CODEC, this.wanderingTraderId); - nbt.putString("Bukkit.Version", org.bukkit.Bukkit.getName() + "/" + org.bukkit.Bukkit.getVersion() + "/" + org.bukkit.Bukkit.getBukkitVersion()); // CraftBukkit - this.world.getWorld().storeBukkitValues(nbt); // CraftBukkit - add pdc -+ nbt.putBoolean("Nabulus.CreativeLevel", this.creativeLevel); // Nabulus +@@ -293,6 +294,7 @@ public class PrimaryLevelData implements ServerLevelData, WorldData { + tag.storeNullable("WanderingTraderId", UUIDUtil.CODEC, this.wanderingTraderId); + tag.putString("Bukkit.Version", org.bukkit.Bukkit.getName() + "/" + org.bukkit.Bukkit.getVersion() + "/" + org.bukkit.Bukkit.getBukkitVersion()); // CraftBukkit + this.world.getWorld().storeBukkitValues(tag); // CraftBukkit - add pdc ++ tag.putBoolean("Nabulus.CreativeLevel", this.creativeLevel); // Nabulus } private static ListTag stringCollectionToTag(Set stringCollection) { diff --git a/nabulus-server/minecraft-patches/features/0002-Show-hidden-players-in-playerlist-and-tab-suggestion.patch b/nabulus-server/minecraft-patches/features/0002-Show-hidden-players-in-playerlist-and-tab-suggestion.patch index acd2811..bcb2f4a 100644 --- a/nabulus-server/minecraft-patches/features/0002-Show-hidden-players-in-playerlist-and-tab-suggestion.patch +++ b/nabulus-server/minecraft-patches/features/0002-Show-hidden-players-in-playerlist-and-tab-suggestion.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Show hidden players in playerlist and tab suggestions diff --git a/net/minecraft/commands/CommandSourceStack.java b/net/minecraft/commands/CommandSourceStack.java -index 6ead209287ab021b8245fa5c3b7f18ca7d9c66b3..8dd4c5afdab3f71c21b3b765a09a1b90f870c871 100644 +index 566304106fd4f1c677a56e7c66282d1570e7b974..3b91b9c4a1c293a33942e7b233875880b7212c39 100644 --- a/net/minecraft/commands/CommandSourceStack.java +++ b/net/minecraft/commands/CommandSourceStack.java -@@ -580,7 +580,7 @@ public class CommandSourceStack implements ExecutionCommandSource getOnlinePlayerNames() { @@ -31,10 +31,10 @@ index e7c778a7f292fd0749cbd5e6586ad1b93ac7f29e..dac56a9c4e3ccacc0178878897e0a36b final List players = playersTemp; // CraftBukkit end diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index a07568d90380f572a9eae68bc3fc1a60a9f69565..1e77e0904d3625db5a4092818d96aa7fe40a5875 100644 +index 9a3cc199963d1e593218c6c294c6fedb5b45d0c4..321c855fb9c75995b46cf875943b25d0b2539ee4 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -253,7 +253,7 @@ public abstract class PlayerList { +@@ -259,7 +259,7 @@ public abstract class PlayerList { for (int i = 0; i < this.players.size(); ++i) { ServerPlayer entityplayer1 = (ServerPlayer) this.players.get(i); @@ -43,7 +43,7 @@ index a07568d90380f572a9eae68bc3fc1a60a9f69565..1e77e0904d3625db5a4092818d96aa7f // Paper start - Add Listing API for Player if (entityplayer1.getBukkitEntity().isListed(bukkitPlayer)) { // Paper end - Add Listing API for Player -@@ -266,7 +266,7 @@ public abstract class PlayerList { +@@ -272,7 +272,7 @@ public abstract class PlayerList { } if (entityplayer1 == player || !bukkitPlayer.canSee(entityplayer1.getBukkitEntity())) { // Paper - Use single player info update packet on join; Don't include joining player @@ -52,7 +52,7 @@ index a07568d90380f572a9eae68bc3fc1a60a9f69565..1e77e0904d3625db5a4092818d96aa7f } onlinePlayers.add(entityplayer1); // Paper - Use single player info update packet on join -@@ -512,6 +512,7 @@ public abstract class PlayerList { +@@ -519,6 +519,7 @@ public abstract class PlayerList { if (otherPlayer.getBukkitEntity().canSee(player.getBukkitEntity())) { otherPlayer.connection.send(packet); } else { diff --git a/nabulus-server/minecraft-patches/features/0003-Use-system-messages-for-player-chat-until-Velocity-s.patch b/nabulus-server/minecraft-patches/features/0003-Use-system-messages-for-player-chat-until-Velocity-s.patch index 98ffc24..8968575 100644 --- a/nabulus-server/minecraft-patches/features/0003-Use-system-messages-for-player-chat-until-Velocity-s.patch +++ b/nabulus-server/minecraft-patches/features/0003-Use-system-messages-for-player-chat-until-Velocity-s.patch @@ -6,14 +6,14 @@ Subject: [PATCH] Use system messages for player chat until Velocity support diff --git a/net/minecraft/network/chat/OutgoingChatMessage.java b/net/minecraft/network/chat/OutgoingChatMessage.java -index 4635182c73f28f63ba84982cb6bcb422221b738e..19d87c84ebd788ff6ed09dfd1b45ddc8a9f8be64 100644 +index 30b26c6def2f6cb8d742ae3eeb9a7c2cd672991c..e9fceb53da485e61e01f707316378cfbc36870b1 100644 --- a/net/minecraft/network/chat/OutgoingChatMessage.java +++ b/net/minecraft/network/chat/OutgoingChatMessage.java -@@ -27,6 +27,7 @@ public interface OutgoingChatMessage { - } - public void sendToPlayer(ServerPlayer player, boolean filtered, ChatType.Bound boundType, @javax.annotation.Nullable Component unsigned) { - player.connection.sendDisguisedChatMessage(unsigned != null ? unsigned : this.content, boundType); -+ player.connection.sendDisguisedChatMessage(this.content, boundType); // Nabulus +@@ -28,6 +28,7 @@ public interface OutgoingChatMessage { + @Override + public void sendToPlayer(ServerPlayer player, boolean filtered, ChatType.Bound boundChatType, @javax.annotation.Nullable Component unsigned) { + player.connection.sendDisguisedChatMessage(unsigned != null ? unsigned : this.content, boundChatType); ++ player.connection.sendDisguisedChatMessage(this.content, boundChatType); // Nabulus // Paper end } } diff --git a/nabulus-server/minecraft-patches/features/0004-Add-silent-chest-flag-to-players.patch b/nabulus-server/minecraft-patches/features/0004-Add-silent-chest-flag-to-players.patch index 2c46399..f2503b7 100644 --- a/nabulus-server/minecraft-patches/features/0004-Add-silent-chest-flag-to-players.patch +++ b/nabulus-server/minecraft-patches/features/0004-Add-silent-chest-flag-to-players.patch @@ -5,25 +5,25 @@ Subject: [PATCH] Add silent chest flag to players diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 90483699b3f2efe9945c849adfdd38422e3a3458..20e353108830666ed707bbe78f0ab940ccccc115 100644 +index 6f49b5e5888a6296b929e465a5ef87dc49bd4516..a67c766b13d707dd8da023adacf0976bc4b8e86a 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -287,6 +287,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin - public boolean silentDeath = false; // Paper - mark entity as dying silently for cancellable death event +@@ -291,6 +291,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API + public int invulnerableDuration = LivingEntity.INVULNERABLE_DURATION; // Paper - configurable invulnerable duration // CraftBukkit end + public boolean silentChests = false; // Nabulus - protected LivingEntity(EntityType entityType, Level level) { - super(entityType, level); + protected LivingEntity(EntityType type, Level level) { + super(type, level); diff --git a/net/minecraft/world/level/block/entity/ContainerOpenersCounter.java b/net/minecraft/world/level/block/entity/ContainerOpenersCounter.java -index 03c6c7b28c1903bc1ccbcebf478528db98a1a510..5f72c6746e641da141c43c29d4fbf047eb80b646 100644 +index 4f3b6a32fe4e791aab05aa9e553ec935e3cd5e6b..a3c921042ebfc0760f09a33ff1dfc409aeef48a0 100644 --- a/net/minecraft/world/level/block/entity/ContainerOpenersCounter.java +++ b/net/minecraft/world/level/block/entity/ContainerOpenersCounter.java @@ -40,6 +40,7 @@ public abstract class ContainerOpenersCounter { public abstract boolean isOwnContainer(Player player); - public void incrementOpeners(LivingEntity entity, Level level, BlockPos pos, BlockState state, double maxInteractionRange) { + public void incrementOpeners(LivingEntity entity, Level level, BlockPos pos, BlockState state, double interactionRange) { + if (entity.silentChests) return; // Nabulus int oldPower = Math.max(0, Math.min(15, this.openCount)); // CraftBukkit - Get power before new viewer is added int i = this.openCount++; @@ -46,10 +46,10 @@ index 03c6c7b28c1903bc1ccbcebf478528db98a1a510..5f72c6746e641da141c43c29d4fbf047 .map(entity -> (ContainerUser)entity) .collect(Collectors.toList()); diff --git a/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java b/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java -index e2a2811464ff7455e513944b7565f9f226a5ed34..4b2a3339bedcf526adb382552d260bf0ad20337f 100644 +index 61b99c895c0e248f0e7c4c634644dcff54a964d9..4ff769502875277965390f7385bf28d3384899e8 100644 --- a/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java +++ b/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java -@@ -202,7 +202,7 @@ public class ShulkerBoxBlockEntity extends RandomizableContainerBlockEntity impl +@@ -201,7 +201,7 @@ public class ShulkerBoxBlockEntity extends RandomizableContainerBlockEntity impl @Override public void startOpen(ContainerUser user) { @@ -58,7 +58,7 @@ index e2a2811464ff7455e513944b7565f9f226a5ed34..4b2a3339bedcf526adb382552d260bf0 if (this.openCount < 0) { this.openCount = 0; } -@@ -220,7 +220,7 @@ public class ShulkerBoxBlockEntity extends RandomizableContainerBlockEntity impl +@@ -219,7 +219,7 @@ public class ShulkerBoxBlockEntity extends RandomizableContainerBlockEntity impl @Override public void stopOpen(ContainerUser user) { diff --git a/nabulus-server/minecraft-patches/features/0005-Throttle-spawn-attempts-after-consistent-failures.patch b/nabulus-server/minecraft-patches/features/0005-Throttle-spawn-attempts-after-consistent-failures.patch index a599470..718c4aa 100644 --- a/nabulus-server/minecraft-patches/features/0005-Throttle-spawn-attempts-after-consistent-failures.patch +++ b/nabulus-server/minecraft-patches/features/0005-Throttle-spawn-attempts-after-consistent-failures.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Throttle spawn attempts after consistent failures diff --git a/net/minecraft/world/level/NaturalSpawner.java b/net/minecraft/world/level/NaturalSpawner.java -index 6198d6d4952088f1fef28e84f65f22e702b4435d..6e49d23bc2bcef749473d61a7ca63f9e7170c0e8 100644 +index 4e5078495037078922ab6350a500acdabe177ca5..3effd44ed96d94afd883371da7a922700f9f598d 100644 --- a/net/minecraft/world/level/NaturalSpawner.java +++ b/net/minecraft/world/level/NaturalSpawner.java -@@ -158,6 +158,11 @@ public final class NaturalSpawner { +@@ -159,6 +159,11 @@ public final class NaturalSpawner { profilerFiller.push("spawner"); for (MobCategory mobCategory : categories) { @@ -20,7 +20,7 @@ index 6198d6d4952088f1fef28e84f65f22e702b4435d..6e49d23bc2bcef749473d61a7ca63f9e // Paper start - Optional per player mob spawns final boolean canSpawn; int maxSpawns = Integer.MAX_VALUE; -@@ -186,8 +191,17 @@ public final class NaturalSpawner { +@@ -187,8 +192,17 @@ public final class NaturalSpawner { canSpawn = spawnState.canSpawnForCategoryLocal(mobCategory, chunk.getPos()); } if (canSpawn) { @@ -39,19 +39,19 @@ index 6198d6d4952088f1fef28e84f65f22e702b4435d..6e49d23bc2bcef749473d61a7ca63f9e // Paper end - Optional per player mob spawns } } -@@ -587,6 +601,7 @@ public final class NaturalSpawner { - @Nullable - private EntityType lastCheckedType; +@@ -582,6 +596,7 @@ public final class NaturalSpawner { + private @Nullable BlockPos lastCheckedPos; + private @Nullable EntityType lastCheckedType; private double lastCharge; + public final boolean attemptFailedChunks = Entity.SHARED_RANDOM.nextInt(10) == 0; // Nabulus SpawnState( int spawnableChunkCount, diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java -index 4dcec2e8a3120a3dfa078e8cf6857ba99ca01a2d..ed730bde2a155c4d6a049fa9a9956d518552bfc9 100644 +index 3acc1374a7ef968d88e9f566ce7b812fb8d580af..b04a7f3183608056f1cb5e2d622bbd02c8f5a0a9 100644 --- a/net/minecraft/world/level/chunk/LevelChunk.java +++ b/net/minecraft/world/level/chunk/LevelChunk.java -@@ -94,6 +94,7 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot +@@ -93,6 +93,7 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot private final Int2ObjectMap gameEventListenerRegistrySections; private final LevelChunkTicks blockTicks; private final LevelChunkTicks fluidTicks; diff --git a/nabulus-server/minecraft-patches/features/0008-Allow-players-to-hide-wither-boss-bar.patch b/nabulus-server/minecraft-patches/features/0008-Allow-players-to-hide-wither-boss-bar.patch index 87b367f..a307f5d 100644 --- a/nabulus-server/minecraft-patches/features/0008-Allow-players-to-hide-wither-boss-bar.patch +++ b/nabulus-server/minecraft-patches/features/0008-Allow-players-to-hide-wither-boss-bar.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow players to hide wither boss bar diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 787b74c5aa02afc4ba95fa1cdaf6cc21b6554b56..953fb6f1851815d0d7397d5d3a1cb6e09bdf20de 100644 +index 86b6b94c3e63bb52917fe0f708d24aa813f433c7..f30b7a7d4a1d93c3332030c786b49b7f169689b5 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -79,6 +79,21 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -80,6 +80,21 @@ public class WitherBoss extends Monster implements RangedAttackMob { private static final TargetingConditions.Selector LIVING_ENTITY_SELECTOR = (entity, level) -> !entity.getType().is(EntityTypeTags.WITHER_FRIENDS) && entity.attackable(); private static final TargetingConditions TARGETING_CONDITIONS = TargetingConditions.forCombat().range(20.0).selector(LIVING_ENTITY_SELECTOR); @@ -28,9 +28,9 @@ index 787b74c5aa02afc4ba95fa1cdaf6cc21b6554b56..953fb6f1851815d0d7397d5d3a1cb6e0 + } + // Nabulus end - public WitherBoss(EntityType entityType, Level level) { - super(entityType, level); -@@ -133,6 +148,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { + public WitherBoss(EntityType type, Level level) { + super(type, level); +@@ -134,6 +149,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { @Override public void setCustomName(@Nullable Component name) { super.setCustomName(name); @@ -38,7 +38,7 @@ index 787b74c5aa02afc4ba95fa1cdaf6cc21b6554b56..953fb6f1851815d0d7397d5d3a1cb6e0 this.bossEvent.setName(this.getDisplayName()); } -@@ -403,7 +419,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -404,7 +420,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { @Override public void startSeenByPlayer(ServerPlayer player) { super.startSeenByPlayer(player); diff --git a/nabulus-server/paper-patches/features/0001-Nabulus-branding.patch b/nabulus-server/paper-patches/features/0001-Nabulus-branding.patch deleted file mode 100644 index fe0bd7a..0000000 --- a/nabulus-server/paper-patches/features/0001-Nabulus-branding.patch +++ /dev/null @@ -1,19 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: froobynooby -Date: Sun, 27 Feb 2022 17:45:40 +0930 -Subject: [PATCH] Nabulus branding - - -diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -index 774556a62eb240da42e84db4502e2ed43495be17..df1fe60f2f26b1dae0a724cb55a2337d75c7d7a4 100644 ---- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -+++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -@@ -11,7 +11,7 @@ public final class Versioning { - public static String getBukkitVersion() { - String result = "Unknown-Version"; - -- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/io.papermc.paper/paper-api/pom.properties"); -+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/com.froobworld.nabulus/nabulus-api/pom.properties"); // Nabulus - Properties properties = new Properties(); - - if (stream != null) { diff --git a/nabulus-server/paper-patches/features/0002-Show-hidden-players-in-playerlist-and-tab-suggestion.patch b/nabulus-server/paper-patches/features/0001-Show-hidden-players-in-playerlist-and-tab-suggestion.patch similarity index 87% rename from nabulus-server/paper-patches/features/0002-Show-hidden-players-in-playerlist-and-tab-suggestion.patch rename to nabulus-server/paper-patches/features/0001-Show-hidden-players-in-playerlist-and-tab-suggestion.patch index 44d11b9..425ac31 100644 --- a/nabulus-server/paper-patches/features/0002-Show-hidden-players-in-playerlist-and-tab-suggestion.patch +++ b/nabulus-server/paper-patches/features/0001-Show-hidden-players-in-playerlist-and-tab-suggestion.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Show hidden players in playerlist and tab suggestions diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 975bc2bf7c19208a524cbd828e66c8eb60953aca..4244b6fb822e99bf5b7da63d4fdf6168886d5b6e 100644 +index e3c9327de894fdfb252781772817f4c8bc079cce..3f997b730abbc927b5c31dada213a593b1e43985 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -547,7 +547,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -557,7 +557,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa getHandle().listName = name == null ? null : io.papermc.paper.adventure.PaperAdventure.asVanilla(name); if (getHandle().connection == null) return; // Updates are possible before the player has fully joined for (ServerPlayer player : server.getHandle().players) { @@ -17,7 +17,7 @@ index 975bc2bf7c19208a524cbd828e66c8eb60953aca..4244b6fb822e99bf5b7da63d4fdf6168 player.connection.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME, getHandle())); } } -@@ -578,7 +578,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -588,7 +588,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa this.getHandle().listName = name.equals(this.getName()) ? null : CraftChatMessage.fromStringOrNull(name); if (this.getHandle().connection == null) return; // Paper - Updates are possible before the player has fully joined for (ServerPlayer player : this.server.getHandle().players) { @@ -26,7 +26,7 @@ index 975bc2bf7c19208a524cbd828e66c8eb60953aca..4244b6fb822e99bf5b7da63d4fdf6168 player.connection.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME, this.getHandle())); } } -@@ -1972,11 +1972,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -1877,11 +1877,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa // Remove this entity from the hidden player's EntityTrackerEntry // Paper start Entity other = ((CraftEntity) entity).getHandle(); @@ -44,12 +44,12 @@ index 975bc2bf7c19208a524cbd828e66c8eb60953aca..4244b6fb822e99bf5b7da63d4fdf6168 // Paper end ChunkMap tracker = ((ServerLevel) this.getHandle().level()).getChunkSource().chunkMap; ChunkMap.TrackedEntity entry = tracker.entityMap.get(other.getId()); -@@ -1985,7 +1990,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -1890,7 +1895,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa } // Remove the hidden entity from this player user list, if they're on it - if (other instanceof ServerPlayer) { + if (other instanceof ServerPlayer && removeFromPlayerList) { // Nabulus ServerPlayer otherPlayer = (ServerPlayer) other; - if (otherPlayer.sentListPacket) { + if (this.getHandle().sentListPacket && otherPlayer.sentListPacket) { this.getHandle().connection.send(new ClientboundPlayerInfoRemovePacket(List.of(otherPlayer.getUUID()))); diff --git a/nabulus-server/paper-patches/features/0003-Fix-pardoning-uncached-game-profiles.patch b/nabulus-server/paper-patches/features/0002-Fix-pardoning-uncached-game-profiles.patch similarity index 100% rename from nabulus-server/paper-patches/features/0003-Fix-pardoning-uncached-game-profiles.patch rename to nabulus-server/paper-patches/features/0002-Fix-pardoning-uncached-game-profiles.patch diff --git a/nabulus-server/paper-patches/features/0004-Dispatch-Discord-commands-through-CommandMap.patch b/nabulus-server/paper-patches/features/0003-Dispatch-Discord-commands-through-CommandMap.patch similarity index 88% rename from nabulus-server/paper-patches/features/0004-Dispatch-Discord-commands-through-CommandMap.patch rename to nabulus-server/paper-patches/features/0003-Dispatch-Discord-commands-through-CommandMap.patch index e59516a..d5b3681 100644 --- a/nabulus-server/paper-patches/features/0004-Dispatch-Discord-commands-through-CommandMap.patch +++ b/nabulus-server/paper-patches/features/0003-Dispatch-Discord-commands-through-CommandMap.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Dispatch Discord commands through CommandMap diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 3187d470e62da15e8a1f60fc1bd4ee213bf2f69d..b59727fb69c0454fd12a99dc0d7c369eee180544 100644 +index b2961752b50e98d95adf3af4f658e2fdb2127d43..614a585cf7383ac1db381d3a9010e753fdb508cb 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -925,6 +925,11 @@ public final class CraftServer implements Server { +@@ -924,6 +924,11 @@ public final class CraftServer implements Server { Preconditions.checkArgument(rawSender != null, "sender cannot be null"); Preconditions.checkArgument(commandLine != null, "commandLine cannot be null"); org.spigotmc.AsyncCatcher.catchOp("Command Dispatched Async: " + commandLine); // Spigot // Paper - Include command in error message From 1811068e2499805c889c63d92f66f7a2769c9e89 Mon Sep 17 00:00:00 2001 From: froobynooby Date: Sun, 25 Jan 2026 13:59:29 +1100 Subject: [PATCH 2/2] Creative level shoulder mount fix --- .../0001-Separate-creative-levels.patch | 41 ++++++++++++++----- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/nabulus-server/minecraft-patches/features/0001-Separate-creative-levels.patch b/nabulus-server/minecraft-patches/features/0001-Separate-creative-levels.patch index ada74ee..7547778 100644 --- a/nabulus-server/minecraft-patches/features/0001-Separate-creative-levels.patch +++ b/nabulus-server/minecraft-patches/features/0001-Separate-creative-levels.patch @@ -46,7 +46,7 @@ index 7015d97cb5b97d59ca41f63ba23da1edfb6bae0a..98999e673ba29329948cbba8838fc1f6 return null; } diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 785045f119ee2f9b9df4efc6e2f10134a1cbb160..a4de03a71324c22774546ff1607284b51356d95f 100644 +index 785045f119ee2f9b9df4efc6e2f10134a1cbb160..8bb626090ad7da59a102cfe6b39fe56476ef09a2 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -647,6 +647,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -57,7 +57,21 @@ index 785045f119ee2f9b9df4efc6e2f10134a1cbb160..a4de03a71324c22774546ff1607284b5 } // CraftBukkit end -@@ -1545,6 +1546,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1479,6 +1480,13 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc + this.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.NO_RESPAWN_BLOCK_AVAILABLE, 0.0F)); + } + ++ // Nabulus start ++ boolean toOrFromCreativeLevel = ((net.minecraft.world.level.storage.PrimaryLevelData) teleportTransition.newLevel().levelData).creativeLevel || ((net.minecraft.world.level.storage.PrimaryLevelData) this.level().levelData).creativeLevel; ++ if (toOrFromCreativeLevel) { ++ this.releaseLeftShoulderEntity(); ++ this.releaseRightShoulderEntity(); ++ } ++ // Nabulus end + ServerLevel level = teleportTransition.newLevel(); + ServerLevel serverLevel = this.level(); + // CraftBukkit start +@@ -1545,6 +1553,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc profilerFiller.pop(); profilerFiller.push("placing"); this.setServerLevel(level); @@ -65,7 +79,7 @@ index 785045f119ee2f9b9df4efc6e2f10134a1cbb160..a4de03a71324c22774546ff1607284b5 this.connection.internalTeleport(PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); level.addDuringTeleport(this); -@@ -2147,11 +2149,21 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -2147,11 +2156,21 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc } public void restoreFrom(ServerPlayer that, boolean keepEverything) { @@ -87,7 +101,7 @@ index 785045f119ee2f9b9df4efc6e2f10134a1cbb160..a4de03a71324c22774546ff1607284b5 if (keepEverything) { // this.getAttributes().assignPermanentModifiers(that.getAttributes()); // CraftBukkit this.setHealth(that.getHealth()); -@@ -2180,6 +2192,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -2180,6 +2199,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.seenCredits = that.seenCredits; this.enteredNetherPosition = that.enteredNetherPosition; this.chunkTrackingView = that.chunkTrackingView; @@ -96,20 +110,25 @@ index 785045f119ee2f9b9df4efc6e2f10134a1cbb160..a4de03a71324c22774546ff1607284b5 this.setShoulderEntityLeft(that.getShoulderEntityLeft()); this.setShoulderEntityRight(that.getShoulderEntityRight()); diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 989ac565c47a70c7947cb7315d0f5c2cfecd0363..9a3cc199963d1e593218c6c294c6fedb5b45d0c4 100644 +index 989ac565c47a70c7947cb7315d0f5c2cfecd0363..e2bf5724bd606eccd021016c5cd872371ddcdc20 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -606,8 +606,15 @@ public abstract class PlayerList { - player.level().removePlayerImmediately(player, reason); - ServerLevel level = teleportTransition.newLevel(); - ServerPlayer serverPlayer = player; // Paper - TODO - recreate instance +@@ -601,13 +601,20 @@ public abstract class PlayerList { + TeleportTransition teleportTransition = result.transition(); + Level fromLevel = player.level(); + // Paper end - respawn event + // Nabulus start + boolean toOrFromCreativeLevel = ((net.minecraft.world.level.storage.PrimaryLevelData) teleportTransition.newLevel().levelData).creativeLevel || ((net.minecraft.world.level.storage.PrimaryLevelData) player.level().levelData).creativeLevel; + if (toOrFromCreativeLevel) { -+ serverPlayer.releaseLeftShoulderEntity(); -+ serverPlayer.releaseRightShoulderEntity(); ++ player.releaseLeftShoulderEntity(); ++ player.releaseRightShoulderEntity(); + } + // Nabulus end + this.players.remove(player); + this.playersByName.remove(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Paper + player.level().removePlayerImmediately(player, reason); + ServerLevel level = teleportTransition.newLevel(); + ServerPlayer serverPlayer = player; // Paper - TODO - recreate instance serverPlayer.connection = player.connection; - serverPlayer.restoreFrom(player, keepInventory); + serverPlayer.restoreFrom(player, keepInventory, toOrFromCreativeLevel); // Nabulus