diff --git a/leaves-server/minecraft-patches/features/0001-Build-changes.patch b/leaves-server/minecraft-patches/features/0001-Build-changes.patch index fd9fde47..68f88b9f 100644 --- a/leaves-server/minecraft-patches/features/0001-Build-changes.patch +++ b/leaves-server/minecraft-patches/features/0001-Build-changes.patch @@ -40,21 +40,21 @@ index f0e16de0cd2e5794c0a86b54979d9ac043c704df..68fddcab51a72af0548cd845ab07569c public SystemReport fillSystemReport(SystemReport systemReport) { diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index 9b3894ec6d458a8d7ed8078fb51193c5dfa1641c..147be1e79b36283d9eb8d0b93d0ca1dc2e73c185 100644 +index 9b3894ec6d458a8d7ed8078fb51193c5dfa1641c..4693330ebbd1540559caa4ef5494e75b69351c24 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java -@@ -275,11 +275,17 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface +@@ -275,9 +275,10 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface thread.start(); // Paper - Enhance console tab completions for brigadier commands; start console thread after MinecraftServer.console & PaperConfig are initialized io.papermc.paper.command.PaperCommands.registerCommands(this); // Paper - setup /paper command this.server.spark.registerCommandBeforePlugins(this.server); // Paper - spark - com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now - + + com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics // Leaves - down + - this.setPvpAllowed(properties.pvp); - this.setFlightAllowed(properties.allowFlight); - this.setMotd(properties.motd); + // this.worldData.setGameType(properties.gameMode.get()); // CraftBukkit - moved to world loading + LOGGER.info("Default game type: {}", properties.gameMode.get()); + // Paper start - Unix domain socket support diff --git a/net/minecraft/server/gui/MinecraftServerGui.java b/net/minecraft/server/gui/MinecraftServerGui.java index f262a7c5ae4e7d56f16f5c0f4f145a2e428abbe4..a2b69a0cc34adb4d3da00250db8320b26d0ed697 100644 --- a/net/minecraft/server/gui/MinecraftServerGui.java diff --git a/leaves-server/minecraft-patches/features/0002-Leaves-Server-Config-And-Command.patch b/leaves-server/minecraft-patches/features/0002-Leaves-Server-Config-And-Command.patch index 37904748..68f612ce 100644 --- a/leaves-server/minecraft-patches/features/0002-Leaves-Server-Config-And-Command.patch +++ b/leaves-server/minecraft-patches/features/0002-Leaves-Server-Config-And-Command.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Leaves Server Config And Command diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index 147be1e79b36283d9eb8d0b93d0ca1dc2e73c185..4f0f0a6f8c8a3dd95213ce9148c2093010b440d9 100644 +index 4693330ebbd1540559caa4ef5494e75b69351c24..ecdb937f08a437a1d2398e49ca835071015844f2 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java @@ -277,6 +277,8 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -16,4 +16,4 @@ index 147be1e79b36283d9eb8d0b93d0ca1dc2e73c185..4f0f0a6f8c8a3dd95213ce9148c20930 + com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics // Leaves - down - this.setPvpAllowed(properties.pvp); + // this.worldData.setGameType(properties.gameMode.get()); // CraftBukkit - moved to world loading diff --git a/leaves-server/minecraft-patches/features/0015-No-chat-sign.patch b/leaves-server/minecraft-patches/features/0015-No-chat-sign.patch index bc620fa5..ae021061 100644 --- a/leaves-server/minecraft-patches/features/0015-No-chat-sign.patch +++ b/leaves-server/minecraft-patches/features/0015-No-chat-sign.patch @@ -106,10 +106,10 @@ index 88447fc2108126ccfad2fb7eb79ac94537f132d3..1bca4150c63da064bd2d1ee8f504f2eb private static final String PREFIX = "data:image/png;base64,"; public static final Codec CODEC = Codec.STRING.comapFlatMap(string -> { diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index a3a47b5ee911f48452d3521692373d331ce10db2..97b95b07d378c2159d123f918f80d7f86bcaed7a 100644 +index fdda4acec6186c5a0290f3d9895cbcec782b8629..d49f84c17e624c4023b678df07ec812124278db3 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java -@@ -787,7 +787,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface +@@ -782,7 +782,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface // Paper start - Add setting for proxy online mode status return properties.enforceSecureProfile && io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() diff --git a/leaves-server/minecraft-patches/features/0038-Catch-update-suppression-crash.patch b/leaves-server/minecraft-patches/features/0038-Catch-update-suppression-crash.patch index 3825b3c2..f6665e53 100644 --- a/leaves-server/minecraft-patches/features/0038-Catch-update-suppression-crash.patch +++ b/leaves-server/minecraft-patches/features/0038-Catch-update-suppression-crash.patch @@ -4,31 +4,31 @@ Date: Fri, 17 Mar 2023 15:57:08 +0800 Subject: [PATCH] Catch update suppression crash -diff --git a/net/minecraft/network/protocol/PacketUtils.java b/net/minecraft/network/protocol/PacketUtils.java -index ea687aab76df31a3e4ef7377c5a401ae76e17893..9b6f065d4ed6433ea1a067d46300f9d2525f5411 100644 ---- a/net/minecraft/network/protocol/PacketUtils.java -+++ b/net/minecraft/network/protocol/PacketUtils.java -@@ -27,7 +27,20 @@ public class PacketUtils { - if (processor.shouldHandleMessage(packet)) { - try { - packet.handle(processor); +diff --git a/net/minecraft/network/PacketProcessor.java b/net/minecraft/network/PacketProcessor.java +index 064c3dea7f1e7fe07f63853532edae6f0a3e4a5c..5b8425a964ff479940fd3a9f4ef3c912b525d93b 100644 +--- a/net/minecraft/network/PacketProcessor.java ++++ b/net/minecraft/network/PacketProcessor.java +@@ -70,7 +70,20 @@ public class PacketProcessor implements AutoCloseable { + if (this.listener.shouldHandleMessage(this.packet)) { + try { + this.packet.handle(this.listener); + // Leaves start - update suppression crash fix -+ } catch (org.leavesmc.leaves.util.UpdateSuppressionException exception) { -+ if (processor instanceof net.minecraft.server.network.ServerGamePacketListenerImpl gamePacketListener) { ++ } catch (org.leavesmc.leaves.util.UpdateSuppressionException exception) { ++ if (this.listener instanceof net.minecraft.server.network.ServerGamePacketListenerImpl gamePacketListener) { ++ exception.providePlayer(gamePacketListener.player); ++ } ++ exception.consume(); + } catch (Exception var3) { ++ if (var3.getCause() instanceof org.leavesmc.leaves.util.UpdateSuppressionException exception) { ++ if (this.listener instanceof net.minecraft.server.network.ServerGamePacketListenerImpl gamePacketListener) { + exception.providePlayer(gamePacketListener.player); + } + exception.consume(); -+ } catch (Exception var4) { -+ if (var4.getCause() instanceof org.leavesmc.leaves.util.UpdateSuppressionException exception) { -+ if (processor instanceof net.minecraft.server.network.ServerGamePacketListenerImpl gamePacketListener) { -+ exception.providePlayer(gamePacketListener.player); -+ } -+ exception.consume(); -+ } -+ // Leaves end - update suppression crash fix - if (var4 instanceof ReportedException reportedException && reportedException.getCause() instanceof OutOfMemoryError) { - throw makeReportedException(var4, packet, processor); - } ++ } ++ // Leaves end - update suppression crash fix + if (var3 instanceof ReportedException reportedException && reportedException.getCause() instanceof OutOfMemoryError) { + throw PacketUtils.makeReportedException(var3, this.packet, this.listener); + } diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java index 2bcd2e36c2a934a3b09f2407bd91a4b45989ed74..9b7fb261b6170afe3748bf8628dcac1c31b336f2 100644 --- a/net/minecraft/server/MinecraftServer.java @@ -109,14 +109,13 @@ index 537223e73dbc6e1f76752b6cd8fc059ffea635d4..b8d93586189567eca93bd3a723a222a4 return true; } else { diff --git a/net/minecraft/world/level/block/ShulkerBoxBlock.java b/net/minecraft/world/level/block/ShulkerBoxBlock.java -index f3bc957110ef60ad5e4384b934b60dccea76d5a7..be76ec933182852504363048362ae1045a01dcf7 100644 +index f3bc957110ef60ad5e4384b934b60dccea76d5a7..ffca65d881ee6f4bde8e579d012ee5c1a11a0c2d 100644 --- a/net/minecraft/world/level/block/ShulkerBoxBlock.java +++ b/net/minecraft/world/level/block/ShulkerBoxBlock.java -@@ -182,8 +182,23 @@ public class ShulkerBoxBlock extends BaseEntityBlock { - } +@@ -183,7 +183,17 @@ public class ShulkerBoxBlock extends BaseEntityBlock { @Override - protected int getAnalogOutputSignal(BlockState blockState, Level level, BlockPos pos) { + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { - return AbstractContainerMenu.getRedstoneSignalFromBlockEntity(level.getBlockEntity(pos)); + // Leaves start - update suppression crash fix + try { diff --git a/leaves-server/minecraft-patches/features/0050-Creative-fly-no-clip.patch b/leaves-server/minecraft-patches/features/0050-Creative-fly-no-clip.patch index 7348a10b..b4ae4071 100644 --- a/leaves-server/minecraft-patches/features/0050-Creative-fly-no-clip.patch +++ b/leaves-server/minecraft-patches/features/0050-Creative-fly-no-clip.patch @@ -18,7 +18,7 @@ index c452ee3f26bf3f9e055d5055473b1ef76a8a5884..8bd430c5c417c76db02cf1e2c0bc6f22 } else { this.followingPlayer = null; diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index 468097eafe73b45924697d36acc962b7bf9ca17b..451ff11e0ad37d1766e937133f5879b6568953f8 100644 +index 468097eafe73b45924697d36acc962b7bf9ca17b..a79f70af6c9c4939007307728c87d25808fce372 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java @@ -246,8 +246,8 @@ public abstract class Player extends Avatar implements ContainerUser { @@ -41,16 +41,16 @@ index 468097eafe73b45924697d36acc962b7bf9ca17b..451ff11e0ad37d1766e937133f5879b6 pose = desiredPose; } else if (this.canPlayerFitWithinBlocksAndEntitiesWhen(Pose.CROUCHING)) { pose = Pose.CROUCHING; -@@ -624,7 +624,7 @@ public abstract class Player extends LivingEntity { - } - - this.bob = this.bob + (f - this.bob) * 0.4F; +@@ -506,7 +506,7 @@ public abstract class Player extends Avatar implements ContainerUser { + this.updateSwingTime(); + this.yHeadRot = this.getYRot(); + this.setSpeed((float)this.getAttributeValue(Attributes.MOVEMENT_SPEED)); - if (this.getHealth() > 0.0F && !this.isSpectator()) { + if (this.getHealth() > 0.0F && !this.isCreativeFlyOrSpectator()) { // Leaves - creative no clip AABB aabb; if (this.isPassenger() && !this.getVehicle().isRemoved()) { aabb = this.getBoundingBox().minmax(this.getVehicle().getBoundingBox()).inflate(1.0, 0.0, 1.0); -@@ -1732,9 +1744,29 @@ public abstract class Player extends Avatar implements ContainerUser { +@@ -1732,9 +1732,29 @@ public abstract class Player extends Avatar implements ContainerUser { return this.gameMode() == GameType.SPECTATOR; } diff --git a/leaves-server/minecraft-patches/features/0058-Faster-chunk-serialization.patch b/leaves-server/minecraft-patches/features/0058-Faster-chunk-serialization.patch index ae5ca0a8..68e0ebf9 100644 --- a/leaves-server/minecraft-patches/features/0058-Faster-chunk-serialization.patch +++ b/leaves-server/minecraft-patches/features/0058-Faster-chunk-serialization.patch @@ -88,7 +88,7 @@ index 09fd99c9cbd23b5f3c899bfb00c9b89651948ed8..d58539fe376f548930b49141c87ec5eb + @Override public void compact(net.minecraft.world.level.chunk.Palette srcPalette, net.minecraft.world.level.chunk.Palette dstPalette, short[] out) {} // Leaves - Gale - Lithium - faster chunk serialization } diff --git a/net/minecraft/world/level/chunk/PalettedContainer.java b/net/minecraft/world/level/chunk/PalettedContainer.java -index 1843046fe145bb23f2e9cf3269fb05c0fb617603..57fd2cba6d47af8f3156fe3487f16ddaf0db57b8 100644 +index 1843046fe145bb23f2e9cf3269fb05c0fb617603..0221b3f4e7dab46ff4c3c601db163307f4cbe3cf 100644 --- a/net/minecraft/world/level/chunk/PalettedContainer.java +++ b/net/minecraft/world/level/chunk/PalettedContainer.java @@ -23,6 +23,22 @@ import net.minecraft.util.ThreadingDetector; @@ -114,10 +114,10 @@ index 1843046fe145bb23f2e9cf3269fb05c0fb617603..57fd2cba6d47af8f3156fe3487f16dda private static final int MIN_PALETTE_BITS = 0; public volatile PalettedContainer.Data data; // Paper - optimise collisions - public private final Strategy strategy; -@@ -340,7 +356,61 @@ public class PalettedContainer implements PaletteResize, PalettedContainer +@@ -340,6 +356,56 @@ public class PalettedContainer implements PaletteResize, PalettedContainer public synchronized PalettedContainerRO.PackedData pack(Strategy strategy) { // Paper - synchronize this.acquire(); - + + // Leaves start - Gale - Lithium - faster chunk serialization + if (org.leavesmc.leaves.LeavesConfig.performance.fasterChunkSerialization) { + Optional data = Optional.empty(); @@ -137,7 +137,7 @@ index 1843046fe145bb23f2e9cf3269fb05c0fb617603..57fd2cba6d47af8f3156fe3487f16dda + + if (elements == null) { + org.leavesmc.leaves.lithium.common.world.chunk.LithiumHashPalette compactedPalette = new org.leavesmc.leaves.lithium.common.world.chunk.LithiumHashPalette<>(registry, storage.getBits(), this.dummyPaletteResize); -+ short[] array = this.getOrCreate(strategy.size()); ++ short[] array = this.getOrCreate(strategy.entryCount()); + + storage.compact(this.data.palette(), compactedPalette, array); + @@ -146,7 +146,7 @@ index 1843046fe145bb23f2e9cf3269fb05c0fb617603..57fd2cba6d47af8f3156fe3487f16dda + data = this.asOptional(storage.getRaw().clone()); + elements = hashPalette.getElements(); + } else { -+ int bits = strategy.calculateBitsForSerialization(registry, compactedPalette.getSize()); ++ int bits = strategy.getConfigurationForPaletteSize(compactedPalette.getSize()).bitsInStorage(); + if (bits != 0) { + // Re-pack the integer array as the palette has changed size + SimpleBitStorage copy = new SimpleBitStorage(bits, array.length); @@ -168,11 +168,10 @@ index 1843046fe145bb23f2e9cf3269fb05c0fb617603..57fd2cba6d47af8f3156fe3487f16dda + return new PalettedContainerRO.PackedData<>(elements, data); + } + // Leaves end - Gale - Lithium - faster chunk serialization - PalettedContainerRO.PackedData var12; + PalettedContainerRO.PackedData var14; try { BitStorage bitStorage = this.data.storage; - Palette palette = this.data.palette; -@@ -412,12 +482,59 @@ public class PalettedContainer implements PaletteResize, PalettedContainer +@@ -412,13 +478,43 @@ public class PalettedContainer implements PaletteResize, PalettedContainer @Override public void count(PalettedContainer.CountConsumer countConsumer) { @@ -180,8 +179,8 @@ index 1843046fe145bb23f2e9cf3269fb05c0fb617603..57fd2cba6d47af8f3156fe3487f16dda - countConsumer.accept(this.data.palette.valueFor(0), this.data.storage.getSize()); - } else { - Int2IntOpenHashMap map = new Int2IntOpenHashMap(); -- this.data.storage.getAll(id -> map.addTo(id, 1)); -- map.int2IntEntrySet().forEach(idEntry -> countConsumer.accept(this.data.palette.valueFor(idEntry.getIntKey()), idEntry.getIntValue())); +- this.data.storage.getAll(i -> map.addTo(i, 1)); +- map.int2IntEntrySet().forEach(entry -> countConsumer.accept(this.data.palette.valueFor(entry.getIntKey()), entry.getIntValue())); + // Leaves start - Gale - Lithium - faster chunk serialization + if (!org.leavesmc.leaves.LeavesConfig.performance.fasterChunkSerialization) { + if (this.data.palette.getSize() == 1) { @@ -221,4 +220,4 @@ index 1843046fe145bb23f2e9cf3269fb05c0fb617603..57fd2cba6d47af8f3156fe3487f16dda + // Leaves end - Gale - Lithium - faster chunk serialization } - record Configuration(Palette.Factory factory, int bits) { + @FunctionalInterface diff --git a/leaves-server/minecraft-patches/features/0062-Optimize-sun-burn-tick.patch b/leaves-server/minecraft-patches/features/0062-Optimize-sun-burn-tick.patch index 8e21eadb..a9d2148e 100644 --- a/leaves-server/minecraft-patches/features/0062-Optimize-sun-burn-tick.patch +++ b/leaves-server/minecraft-patches/features/0062-Optimize-sun-burn-tick.patch @@ -42,10 +42,10 @@ index d323afb09232aa5b472f15ce8b7e16b52b81d55c..26c7ca8a17ac4b01fd092a1e4065e724 public void absSnapTo(double x, double y, double z) { double d = Mth.clamp(x, -3.0E7, 3.0E7); diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index 37ad911648aa88bdb5132a819806a5a303438dbf..09065cb08b3ee1aed8a20e4293ef7144cb473da9 100644 +index 37ad911648aa88bdb5132a819806a5a303438dbf..a1cc9cf5a0967c5fd605a9fd309908314121e975 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -1565,7 +1565,13 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1565,17 +1565,39 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab protected void playAttackSound() { } @@ -55,7 +55,7 @@ index 37ad911648aa88bdb5132a819806a5a303438dbf..09065cb08b3ee1aed8a20e4293ef7144 + // Leaves end - optimize sun burn tick + public boolean isSunBurnTick() { - if (this.level().isBrightOutside() && !this.level().isClientSide) { + if (this.level().isBrightOutside() && !this.level().isClientSide()) { - float lightLevelDependentMagicValue = this.getLightLevelDependentMagicValue(); - BlockPos blockPos = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ()); - boolean flag = this.isInWaterOrRain() || this.isInPowderSnow || this.wasInPowderSnow; diff --git a/leaves-server/minecraft-patches/features/0070-Bow-infinity-fix.patch b/leaves-server/minecraft-patches/features/0070-Bow-infinity-fix.patch index 2dae3717..0adbed51 100644 --- a/leaves-server/minecraft-patches/features/0070-Bow-infinity-fix.patch +++ b/leaves-server/minecraft-patches/features/0070-Bow-infinity-fix.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Bow infinity fix diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index df40c8f807dc03bf70b6c15ff885343a2d195e9c..14cb7265f095f8879a88034b9195640dcf1736aa 100644 +index 8af6895986c8695f67fe36e67eda54867cdbe227..e4733cdedf9bfbd187c5e2a4402d44e908186a3c 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -1979,8 +1979,10 @@ public abstract class Player extends Avatar implements ContainerUser { +@@ -1967,8 +1967,10 @@ public abstract class Player extends Avatar implements ContainerUser { } } diff --git a/leaves-server/minecraft-patches/features/0072-Replay-Mod-API.patch b/leaves-server/minecraft-patches/features/0072-Replay-Mod-API.patch index dbcfed48..079fa285 100644 --- a/leaves-server/minecraft-patches/features/0072-Replay-Mod-API.patch +++ b/leaves-server/minecraft-patches/features/0072-Replay-Mod-API.patch @@ -80,7 +80,7 @@ index d438e31a082b675d7eb0eead7067a0b92363a9f9..c08f34bc17bec9f73c377b45389a7755 players.add(serverPlayer1); if (players.size() >= resultLimit) { diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index e111da378b6b4c67a7baa05a145c53a7130683ac..299777b012bd733f76a6ab404d1c54645f7b4770 100644 +index e111da378b6b4c67a7baa05a145c53a7130683ac..9ea2fdfbf328b8bedac48e863021d92d40eae8cc 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -1575,7 +1575,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop packet : stopTrackingPackets) { serverPlayer.connection.send(packet); -diff --git a/net/minecraft/server/commands/DefaultGameModeCommands.java b/net/minecraft/server/commands/DefaultGameModeCommands.java -index 843c8e299da32755f2d7648a7f0758820546f613..4de23b0f585ec7a5cee4efbc8ca0dac1f9fca689 100644 ---- a/net/minecraft/server/commands/DefaultGameModeCommands.java -+++ b/net/minecraft/server/commands/DefaultGameModeCommands.java -@@ -27,7 +27,7 @@ public class DefaultGameModeCommands { - server.setDefaultGameType(gamemode); - GameType forcedGameType = server.getForcedGameType(); - if (forcedGameType != null) { -- for (ServerPlayer serverPlayer : server.getPlayerList().getPlayers()) { -+ for (ServerPlayer serverPlayer : server.getPlayerList().realPlayers) { // Leaves - only real players - // Paper start - Expand PlayerGameModeChangeEvent - org.bukkit.event.player.PlayerGameModeChangeEvent event = serverPlayer.setGameMode(gamemode, org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.DEFAULT_GAMEMODE, net.kyori.adventure.text.Component.empty()); - if (event != null && event.isCancelled()) { diff --git a/net/minecraft/server/commands/ListPlayersCommand.java b/net/minecraft/server/commands/ListPlayersCommand.java index e7c778a7f292fd0749cbd5e6586ad1b93ac7f29e..024b56405bb58801b17a6adad7fec7a461d12a5c 100644 --- a/net/minecraft/server/commands/ListPlayersCommand.java @@ -269,20 +265,21 @@ index cfe62a56ce1b4222ed6d73fc6390b7726542a9cd..234478bca5f8b1ea768b487c943b44e0 .map(Player::nameAndId) .filter(nameAndId -> !playerList.getWhiteList().isWhiteListed(nameAndId)) diff --git a/net/minecraft/server/gui/PlayerListComponent.java b/net/minecraft/server/gui/PlayerListComponent.java -index 5a8cd3e6b448a4472092690cf589bca10b142126..5933a2f42d2d3c3ab02003ef80d5e9ce2234bad2 100644 +index 5a8cd3e6b448a4472092690cf589bca10b142126..c9abb60b96e07fae86111be503bc49422ba92906 100644 --- a/net/minecraft/server/gui/PlayerListComponent.java +++ b/net/minecraft/server/gui/PlayerListComponent.java -@@ -17,8 +17,13 @@ public class PlayerListComponent extends JList { +@@ -17,9 +17,8 @@ public class PlayerListComponent extends JList { if (this.tickCount++ % 20 == 0) { Vector list = new Vector<>(); - for (int i = 0; i < this.server.getPlayerList().getPlayers().size(); i++) { -- list.add(this.server.getPlayerList().getPlayers().get(i).getGameProfile().getName()); +- list.add(this.server.getPlayerList().getPlayers().get(i).getGameProfile().name()); +- } + for (int i = 0; i < this.server.getPlayerList().realPlayers.size(); i++) { // Leaves - only real players -+ list.add(this.server.getPlayerList().realPlayers.get(i).getGameProfile().getName()); // Leaves - only real players - } ++ list.add(this.server.getPlayerList().realPlayers.get(i).getGameProfile().name()); // Leaves - only real players this.setListData(list); + } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java index 5deab686b386e3b82205a828ae12a72cb0f2e6fb..0db088864eac6c65a78620953821a1280056a688 100644 --- a/net/minecraft/server/level/ServerLevel.java @@ -306,7 +303,7 @@ index 5deab686b386e3b82205a828ae12a72cb0f2e6fb..0db088864eac6c65a78620953821a128 } // Leaves end - skip diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 248c08b4f1dc6cf47ac311d5872ae56485e3b425..190b5cce7e348c18612ba67eeca3ab19826e59fc 100644 +index 248c08b4f1dc6cf47ac311d5872ae56485e3b425..39e624aca0cc803b682ea8d2304dcd86480265bb 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -125,6 +125,7 @@ public abstract class PlayerList { @@ -443,17 +440,15 @@ index 248c08b4f1dc6cf47ac311d5872ae56485e3b425..190b5cce7e348c18612ba67eeca3ab19 public void placeNewPlayer(Connection connection, ServerPlayer player, CommonListenerCookie cookie) { player.isRealPlayer = true; // Paper player.loginTime = System.currentTimeMillis(); // Paper - Replace OfflinePlayer#getLastPlayed -@@ -234,9 +354,109 @@ public abstract class PlayerList { - org.bukkit.event.player.PlayerJoinEvent playerJoinEvent = new org.bukkit.event.player.PlayerJoinEvent(bukkitPlayer, io.papermc.paper.adventure.PaperAdventure.asAdventure(mutableComponent)); // Paper - Adventure - this.cserver.getPluginManager().callEvent(playerJoinEvent); +@@ -215,6 +335,7 @@ public abstract class PlayerList { - // player.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(this.players)); // CraftBukkit - replaced with loop below - this.players.add(player); -+ this.realPlayers.add(player); // Leaves - replay api - this.playersByName.put(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT), player); // Spigot - this.playersByUUID.put(player.getUUID(), player); - // this.broadcastAll(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player))); // CraftBukkit - replaced with loop below -@@ -503,6 +624,7 @@ public abstract class PlayerList { + // player.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(this.players)); // CraftBukkit - replaced with loop below + this.players.add(player); ++ this.realPlayers.add(player); // Leaves - replay api + this.playersByName.put(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT), player); // Spigot + this.playersByUUID.put(player.getUUID(), player); + // this.broadcastAll(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player))); // CraftBukkit - replaced with loop below +@@ -419,6 +540,7 @@ public abstract class PlayerList { } protected void save(ServerPlayer player) { @@ -461,7 +456,7 @@ index 248c08b4f1dc6cf47ac311d5872ae56485e3b425..190b5cce7e348c18612ba67eeca3ab19 if (!player.getBukkitEntity().isPersistent()) return; // CraftBukkit player.lastSave = MinecraftServer.currentTick; // Paper - Incremental chunk and player saving this.playerIo.save(player); -@@ -433,6 +654,43 @@ public abstract class PlayerList { +@@ -433,6 +555,43 @@ public abstract class PlayerList { } } @@ -505,7 +500,7 @@ index 248c08b4f1dc6cf47ac311d5872ae56485e3b425..190b5cce7e348c18612ba67eeca3ab19 public @Nullable net.kyori.adventure.text.Component remove(ServerPlayer player) { // CraftBukkit - return string // Paper - return Component // Paper start - Fix kick event leave message not being sent return this.remove(player, net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? player.getBukkitEntity().displayName() : io.papermc.paper.adventure.PaperAdventure.asAdventure(player.getDisplayName()))); -@@ -506,6 +764,7 @@ public abstract class PlayerList { +@@ -506,6 +665,7 @@ public abstract class PlayerList { player.retireScheduler(); // Paper - Folia schedulers player.getAdvancements().stopListening(); this.players.remove(player); @@ -513,7 +508,7 @@ index 248c08b4f1dc6cf47ac311d5872ae56485e3b425..190b5cce7e348c18612ba67eeca3ab19 this.playersByName.remove(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot this.server.getCustomBossEvents().onPlayerDisconnect(player); UUID uuid = player.getUUID(); -@@ -881,14 +1140,19 @@ public abstract class PlayerList { +@@ -881,14 +1041,14 @@ public abstract class PlayerList { } public String[] getPlayerNamesArray() { @@ -521,25 +516,24 @@ index 248c08b4f1dc6cf47ac311d5872ae56485e3b425..190b5cce7e348c18612ba67eeca3ab19 + String[] strings = new String[this.realPlayers.size() + this.server.getBotList().bots.size()]; // Leaves - fakeplayer support, and skip photographer - for (int i = 0; i < this.players.size(); i++) { -- strings[i] = this.players.get(i).getGameProfile().getName(); +- strings[i] = this.players.get(i).getGameProfile().name(); + for (int i = 0; i < this.realPlayers.size(); i++) { // Leaves - only real players -+ strings[i] = this.realPlayers.get(i).getGameProfile().getName(); // Leaves - only real players ++ strings[i] = this.realPlayers.get(i).getGameProfile().name(); // Leaves - only real players } // Leaves start - fakeplayer support - for (int i = this.players.size(); i < strings.length; ++i) { - strings[i] = this.server.getBotList().bots.get(i - this.players.size()).getGameProfile().getName(); + for (int i = this.realPlayers.size(); i < strings.length; ++i) { // Leaves - only real players -+ strings[i] = this.server.getBotList().bots.get(i - this.realPlayers.size()).getGameProfile().getName(); // Leaves - only real players ++ strings[i] = this.server.getBotList().bots.get(i - this.realPlayers.size()).getGameProfile().name(); // Leaves - only real players } // Leaves end - fakeplayer support -@@ -958,8 +1222,13 @@ public abstract class PlayerList { - } +@@ -959,7 +1119,7 @@ public abstract class PlayerList { // Paper start - whitelist verify event / login event - public LoginResult canBypassFullServerLogin(final GameProfile profile, final LoginResult currentResult) { -- final boolean shouldKick = this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(profile); -+ final boolean shouldKick = this.realPlayers.size() >= this.maxPlayers && !this.canBypassPlayerLimit(profile); // Leaves - only real player + public LoginResult canBypassFullServerLogin(final NameAndId nameAndId, final LoginResult currentResult) { +- final boolean shouldKick = this.players.size() >= this.getMaxPlayers() && !this.canBypassPlayerLimit(nameAndId); ++ final boolean shouldKick = this.realPlayers.size() >= this.getMaxPlayers() && !this.canBypassPlayerLimit(nameAndId); // Leaves - only real player final io.papermc.paper.event.player.PlayerServerFullCheckEvent fullCheckEvent = new io.papermc.paper.event.player.PlayerServerFullCheckEvent( new com.destroystokyo.paper.profile.CraftPlayerProfile(nameAndId), io.papermc.paper.adventure.PaperAdventure.asAdventure(currentResult.message), diff --git a/leaves-server/minecraft-patches/features/0078-Force-Void-Trade.patch b/leaves-server/minecraft-patches/features/0078-Force-Void-Trade.patch index 77af8a69..e63ad0e7 100644 --- a/leaves-server/minecraft-patches/features/0078-Force-Void-Trade.patch +++ b/leaves-server/minecraft-patches/features/0078-Force-Void-Trade.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Force Void Trade diff --git a/net/minecraft/world/entity/npc/AbstractVillager.java b/net/minecraft/world/entity/npc/AbstractVillager.java -index 54ba469380b51b38327c107e3a1c5574395f3507..580aad496f8ffb93ce0c0205e09774f2a520e829 100644 +index 54ba469380b51b38327c107e3a1c5574395f3507..0f734c87ad5f25e646d69b35bf68448614d63893 100644 --- a/net/minecraft/world/entity/npc/AbstractVillager.java +++ b/net/minecraft/world/entity/npc/AbstractVillager.java @@ -43,6 +43,7 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa @@ -43,13 +43,13 @@ index 54ba469380b51b38327c107e3a1c5574395f3507..580aad496f8ffb93ce0c0205e09774f2 @@ -173,7 +180,7 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa @Override public void notifyTradeUpdated(ItemStack stack) { - if (!this.level().isClientSide && this.ambientSoundTime > -this.getAmbientSoundInterval() + 20) { + if (!this.level().isClientSide() && this.ambientSoundTime > -this.getAmbientSoundInterval() + 20) { - this.ambientSoundTime = -this.getAmbientSoundInterval(); + if (!voidTrade) this.ambientSoundTime = -this.getAmbientSoundInterval(); // Leaves - force void trade this.makeSound(this.getTradeUpdatedSound(!stack.isEmpty())); } } -@@ -219,6 +231,12 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa +@@ -219,6 +226,12 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa } protected void stopTrading() { @@ -62,7 +62,7 @@ index 54ba469380b51b38327c107e3a1c5574395f3507..580aad496f8ffb93ce0c0205e09774f2 this.setTradingPlayer(null); } -@@ -297,4 +315,10 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa +@@ -297,4 +310,10 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa public boolean stillValid(Player player) { return this.getTradingPlayer() == player && this.isAlive() && player.canInteractWithEntity(this, 4.0); } diff --git a/leaves-server/minecraft-patches/features/0080-CCE-update-suppression.patch b/leaves-server/minecraft-patches/features/0080-CCE-update-suppression.patch index c0e6e420..b5f7a3b6 100644 --- a/leaves-server/minecraft-patches/features/0080-CCE-update-suppression.patch +++ b/leaves-server/minecraft-patches/features/0080-CCE-update-suppression.patch @@ -5,11 +5,11 @@ Subject: [PATCH] CCE update suppression diff --git a/net/minecraft/world/level/block/ShulkerBoxBlock.java b/net/minecraft/world/level/block/ShulkerBoxBlock.java -index be76ec933182852504363048362ae1045a01dcf7..be1da725af23875798862ed6596e9e49fa79fe4a 100644 +index ffca65d881ee6f4bde8e579d012ee5c1a11a0c2d..efb25d556f2192b1ee499c28d14aa7d11bcabef8 100644 --- a/net/minecraft/world/level/block/ShulkerBoxBlock.java +++ b/net/minecraft/world/level/block/ShulkerBoxBlock.java -@@ -189,7 +189,9 @@ public class ShulkerBoxBlock extends BaseEntityBlock { - protected int getAnalogOutputSignal(BlockState blockState, Level level, BlockPos pos) { +@@ -185,7 +185,9 @@ public class ShulkerBoxBlock extends BaseEntityBlock { + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { // Leaves start - update suppression crash fix try { - return AbstractContainerMenu.getRedstoneSignalFromBlockEntity(level.getBlockEntity(pos)); diff --git a/leaves-server/minecraft-patches/features/0081-Disable-offline-warn-if-use-proxy.patch b/leaves-server/minecraft-patches/features/0081-Disable-offline-warn-if-use-proxy.patch index b88259eb..0fb17dee 100644 --- a/leaves-server/minecraft-patches/features/0081-Disable-offline-warn-if-use-proxy.patch +++ b/leaves-server/minecraft-patches/features/0081-Disable-offline-warn-if-use-proxy.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Disable offline warn if use proxy diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index 132a0d9e6a1e4792f87ba92731d1e53b6b01b548..637cf6145fba88287eef38ce360a83d5b908e3f7 100644 +index 70f0adbd01aa6aabc7b8ecc9e02dd93e2f479a69..144d1ff610d2743e554e6a4940bcb184e09c1520 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java -@@ -340,7 +340,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface +@@ -335,7 +335,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface String proxyFlavor = (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled) ? "Velocity" : "BungeeCord"; String proxyLink = (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled) ? "https://docs.papermc.io/velocity/security" : "http://www.spigotmc.org/wiki/firewall-guide/"; // Paper end - Add Velocity IP Forwarding Support diff --git a/leaves-server/minecraft-patches/features/0085-More-Region-Format-Support.patch b/leaves-server/minecraft-patches/features/0085-More-Region-Format-Support.patch index 68898187..90213fa5 100644 --- a/leaves-server/minecraft-patches/features/0085-More-Region-Format-Support.patch +++ b/leaves-server/minecraft-patches/features/0085-More-Region-Format-Support.patch @@ -54,16 +54,15 @@ index 51c126735ace8fdde89ad97b5cab62f244212db0..a6573e327ace16b7ea320eb1440ffcbc + public void moonrise$write(final org.leavesmc.leaves.region.IRegionFile regionFile) throws IOException; // Leaves - more region format } diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 299777b012bd733f76a6ab404d1c54645f7b4770..c58d93e5a8c348ad67b1d5720d93e6b614650018 100644 +index 9ea2fdfbf328b8bedac48e863021d92d40eae8cc..d925df996a3b1b47969859b9fecee4c8a0b123f2 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -874,11 +874,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop exceptionCollector = new ExceptionCollector<>(); @@ -398,7 +397,7 @@ index 8ea830f561f5b7d6ff6ca3c38adc7fe8e54e4cc7..e3e583fd919fa98ba12f1278ea69107c try { regionFile.close(); } catch (final IOException ex) { -@@ -448,7 +480,7 @@ public class RegionFileStorage implements AutoCloseable, ca.spottedleaf.moonrise +@@ -448,7 +467,7 @@ public class RegionFileStorage implements AutoCloseable, ca.spottedleaf.moonrise // Paper start - rewrite chunk system synchronized (this) { final ExceptionCollector exceptionCollector = new ExceptionCollector<>(); diff --git a/leaves-server/minecraft-patches/features/0095-Bytebuf-API.patch b/leaves-server/minecraft-patches/features/0095-Bytebuf-API.patch index b069bd5d..c148c029 100644 --- a/leaves-server/minecraft-patches/features/0095-Bytebuf-API.patch +++ b/leaves-server/minecraft-patches/features/0095-Bytebuf-API.patch @@ -5,13 +5,13 @@ Subject: [PATCH] Bytebuf API diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 190b5cce7e348c18612ba67eeca3ab19826e59fc..8f62978123dc40bbbc2f9e398a063000317dc655 100644 +index 39e624aca0cc803b682ea8d2304dcd86480265bb..6fb2170c777ca0ac333f9663beb43644120cc9d6 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -385,6 +385,13 @@ public abstract class PlayerList { - boolean _boolean = gameRules.getBoolean(GameRules.RULE_DO_IMMEDIATE_RESPAWN); - boolean _boolean1 = gameRules.getBoolean(GameRules.RULE_REDUCEDDEBUGINFO); - boolean _boolean2 = gameRules.getBoolean(GameRules.RULE_LIMITED_CRAFTING); +@@ -289,6 +289,13 @@ public abstract class PlayerList { + boolean _boolean = gameRules.getBoolean(GameRules.RULE_DO_IMMEDIATE_RESPAWN); + boolean _boolean1 = gameRules.getBoolean(GameRules.RULE_REDUCEDDEBUGINFO); + boolean _boolean2 = gameRules.getBoolean(GameRules.RULE_LIMITED_CRAFTING); + + // Leaves start - Bytebuf API + if (!(player instanceof org.leavesmc.leaves.bot.ServerBot) && !(player instanceof org.leavesmc.leaves.replay.ServerPhotographer)) { @@ -19,6 +19,6 @@ index 190b5cce7e348c18612ba67eeca3ab19826e59fc..8f62978123dc40bbbc2f9e398a063000 + } + // Leaves end - Bytebuf API + - serverGamePacketListenerImpl.send( - new ClientboundLoginPacket( - player.getId(), + serverGamePacketListenerImpl.send( + new ClientboundLoginPacket( + player.getId(), diff --git a/leaves-server/minecraft-patches/features/0107-Fix-CraftPortalEvent-logic.patch b/leaves-server/minecraft-patches/features/0107-Fix-CraftPortalEvent-logic.patch index 28c56dc8..31af1e08 100644 --- a/leaves-server/minecraft-patches/features/0107-Fix-CraftPortalEvent-logic.patch +++ b/leaves-server/minecraft-patches/features/0107-Fix-CraftPortalEvent-logic.patch @@ -5,17 +5,18 @@ Subject: [PATCH] Fix CraftPortalEvent logic diff --git a/net/minecraft/world/level/block/EndPortalBlock.java b/net/minecraft/world/level/block/EndPortalBlock.java -index cbd8c06f5bf4319dd2470c289442237c465cff57..dd0762c653f0ac1672f16265ba6689b88877ad4c 100644 +index cbd8c06f5bf4319dd2470c289442237c465cff57..1df34a29925ba40e6c4af5a8ba4c2480e5c58cbe 100644 --- a/net/minecraft/world/level/block/EndPortalBlock.java +++ b/net/minecraft/world/level/block/EndPortalBlock.java -@@ -111,7 +111,7 @@ public class EndPortalBlock extends BaseEntityBlock implements Portal { +@@ -111,10 +111,10 @@ public class EndPortalBlock extends BaseEntityBlock implements Portal { } // CraftBukkit start - set.removeAll(Relative.ROTATION); // remove relative rotation flags to simplify event mutation + // set.removeAll(Relative.ROTATION); // remove relative rotation flags to simplify event mutation // Leaves - no - float absoluteYaw = flag ? f : entity.getYRot() + f; -- org.bukkit.craftbukkit.event.CraftPortalEvent event = entity.callPortalEvent(entity, org.bukkit.craftbukkit.util.CraftLocation.toBukkit(bottomCenter, level1.getWorld(), absoluteYaw, entity.getXRot()), org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.END_PORTAL, 0, 0); + float absoluteYaw = !flag ? f : entity.getYRot() + f; + float absolutePitch = entity.getXRot() + f1; +- org.bukkit.craftbukkit.event.CraftPortalEvent event = entity.callPortalEvent(entity, org.bukkit.craftbukkit.util.CraftLocation.toBukkit(bottomCenter, level1, absoluteYaw, absolutePitch), org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.END_PORTAL, 0, 0); + org.bukkit.craftbukkit.event.CraftPortalEvent event = entity.callPortalEvent(entity, org.bukkit.craftbukkit.util.CraftLocation.toBukkit(bottomCenter, level1.getWorld(), absoluteYaw, 0.0F), org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.END_PORTAL, 0, 0); // Leaves - fix if (event == null) { return null; diff --git a/leaves-server/minecraft-patches/features/0108-Xaero-Map-Protocol.patch b/leaves-server/minecraft-patches/features/0108-Xaero-Map-Protocol.patch index 01c7ad31..a17c150f 100644 --- a/leaves-server/minecraft-patches/features/0108-Xaero-Map-Protocol.patch +++ b/leaves-server/minecraft-patches/features/0108-Xaero-Map-Protocol.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Xaero Map Protocol diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 8f62978123dc40bbbc2f9e398a063000317dc655..9fe5f2a30234473682c47e4876833eb3841321f2 100644 +index 6fb2170c777ca0ac333f9663beb43644120cc9d6..65005673cbda87e6d581ae61586c03eaa4d20164 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -1356,6 +1356,7 @@ public abstract class PlayerList { +@@ -1247,6 +1247,7 @@ public abstract class PlayerList { player.connection.send(new ClientboundInitializeBorderPacket(worldBorder)); player.connection.send(new ClientboundSetTimePacket(level.getGameTime(), level.getDayTime(), level.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT))); player.connection.send(new ClientboundSetDefaultSpawnPositionPacket(level.getRespawnData())); diff --git a/leaves-server/minecraft-patches/features/0129-Old-projectile-explosion-behavior.patch b/leaves-server/minecraft-patches/features/0129-Old-projectile-explosion-behavior.patch index ea05adb9..6df3e5c0 100644 --- a/leaves-server/minecraft-patches/features/0129-Old-projectile-explosion-behavior.patch +++ b/leaves-server/minecraft-patches/features/0129-Old-projectile-explosion-behavior.patch @@ -5,10 +5,11 @@ Subject: [PATCH] Old projectile explosion behavior diff --git a/net/minecraft/world/level/ServerExplosion.java b/net/minecraft/world/level/ServerExplosion.java -index 8b0341c060d9f61698f32dd05c360c303a443c9b..8447b824ad5b68c5af5507c3594cd74ffdc40e73 100644 +index 8b0341c060d9f61698f32dd05c360c303a443c9b..7a3f9305abc7f094611c6d7ca36ca664bd483a73 100644 --- a/net/minecraft/world/level/ServerExplosion.java +++ b/net/minecraft/world/level/ServerExplosion.java -@@ -539,7 +539,7 @@ public class ServerExplosion implements Explosion { +@@ -538,7 +538,7 @@ public class ServerExplosion implements Explosion { + // Paper end - knockback events } // CraftBukkit end - entity.push(vec32); diff --git a/leaves-server/minecraft-patches/features/0130-Prevent-loss-of-item-drops-due-to-update-suppression.patch b/leaves-server/minecraft-patches/features/0130-Prevent-loss-of-item-drops-due-to-update-suppression.patch index 1d519505..d30dfebd 100644 --- a/leaves-server/minecraft-patches/features/0130-Prevent-loss-of-item-drops-due-to-update-suppression.patch +++ b/leaves-server/minecraft-patches/features/0130-Prevent-loss-of-item-drops-due-to-update-suppression.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Prevent loss of item drops due to update suppression when diff --git a/net/minecraft/server/level/ServerPlayerGameMode.java b/net/minecraft/server/level/ServerPlayerGameMode.java -index fc205e54941d40a5583129b0c6540950f97a6b49..78211633d733ce30fa69ec47cd884c1d6680df82 100644 +index fc205e54941d40a5583129b0c6540950f97a6b49..2b69ff82977f3592fb99ef494d090d77be34c186 100644 --- a/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/net/minecraft/server/level/ServerPlayerGameMode.java -@@ -402,11 +402,20 @@ public class ServerPlayerGameMode { +@@ -402,11 +402,21 @@ public class ServerPlayerGameMode { this.level.captureDrops = new java.util.ArrayList<>(); // CraftBukkit end BlockState blockState1 = org.leavesmc.leaves.command.subcommands.BlockUpdateCommand.isNoBlockUpdate() ? blockState : block.playerWillDestroy(this.level, pos, blockState, this.player); // Leaves - no block update @@ -33,7 +33,7 @@ index fc205e54941d40a5583129b0c6540950f97a6b49..78211633d733ce30fa69ec47cd884c1d if (flag) { block.destroy(this.level, pos, blockState1); } -@@ -434,6 +443,7 @@ public class ServerPlayerGameMode { +@@ -434,6 +444,7 @@ public class ServerPlayerGameMode { if (event.isDropItems()) { org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockDropItemEvent(bblock, state, this.player, itemsToDrop); // Paper - capture all item additions to the world } diff --git a/leaves-server/minecraft-patches/features/0133-Old-ender-dragon-part-can-use-end-portal.patch b/leaves-server/minecraft-patches/features/0133-Old-ender-dragon-part-can-use-end-portal.patch index 0a67123b..e79e4d8b 100644 --- a/leaves-server/minecraft-patches/features/0133-Old-ender-dragon-part-can-use-end-portal.patch +++ b/leaves-server/minecraft-patches/features/0133-Old-ender-dragon-part-can-use-end-portal.patch @@ -53,7 +53,7 @@ index 7fff233c3aea5d5cf1084517f0040111d60fd054..dc76b783d112cf1b835852f616c8de76 this.removeAfterChangingDimensions(); - entityx.teleportSetPosition(PositionMoveRotation.of(this), PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); + entityx.teleportSetPosition(PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); - if (this.inWorld || (org.leavesmc.leaves.LeavesConfig.modify.oldMC.enderDragonPartCanUseEndPortal && this instanceof net.minecraft.world.entity.boss.EnderDragonPart)) newLevel.addDuringTeleport(entityx); // CraftBukkit - Don't spawn the new entity if the current entity isn't spawned // Leaves - endDragonPartCanUseEndPortal + if (this.inWorld) newLevel.addDuringTeleport(entityx); // CraftBukkit - Don't spawn the new entity if the current entity isn't spawned for (Entity entity2 : list) { @@ -4283,6 +4283,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name @@ -65,7 +65,7 @@ index 7fff233c3aea5d5cf1084517f0040111d60fd054..dc76b783d112cf1b835852f616c8de76 if (!this.isAlive() || !this.valid) return false; // Paper - Fix item duplication and teleport issues if (fromLevel.dimension() == Level.END && toLevel.dimension() == Level.OVERWORLD) { diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index 09065cb08b3ee1aed8a20e4293ef7144cb473da9..7fbd90c335bd85edff8db2954f1aeb59dd2042d6 100644 +index a1cc9cf5a0967c5fd605a9fd309908314121e975..580d903921388701be7b4153fb7cc4163e3765c2 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java @@ -395,6 +395,16 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab