From 94524aebdb0608944fcdad010b947cfba0cbd659 Mon Sep 17 00:00:00 2001 From: Blast-Mc Date: Mon, 9 Jan 2023 19:21:21 -0500 Subject: [PATCH 01/10] Update to 1.19.3 --- build.gradle.kts | 4 +- gradle.properties | 6 +- patches/api/0001-Add-Getter-interfaces.patch | 16 +-- .../api/0008-Expose-MCUtil-Executors.patch | 4 +- ...012-Add-Player-getHiddenEntities-API.patch | 4 +- patches/api/0015-Add-NPC-to-EntityType.patch | 4 +- patches/server/0001-Build-changes.patch | 18 +-- .../0002-Temporary-Access-Transformers.patch | 4 +- patches/server/0003-Add-SoundEvent.patch | 86 +++++-------- ...location-to-EntityDamageByBlockEvent.patch | 121 ++++++------------ ...0006-Add-UnsafeValues-canPlaceItemOn.patch | 4 +- .../0007-Expose-EntityType-Ordinals.patch | 25 ++-- .../0008-Add-Player-setGameProfile.patch | 12 +- .../server/0009-Expose-MCUtil-Executors.patch | 4 +- ...ing-CraftMetaSkull-serializedProfile.patch | 10 +- .../0011-Add-BlockDropResourcesEvent.patch | 14 +- .../server/0012-Add-Furnace-Recipe-API.patch | 4 +- ...3-Disable-sleep-status-announcements.patch | 4 +- ...d-config-for-ticking-TIME_SINCE_REST.patch | 8 +- ...016-Add-Player-getHiddenEntities-API.patch | 4 +- .../server/0019-Expanded-Insomnia-API.patch | 42 +----- .../0020-Add-spam-bypass-permission.patch | 8 +- .../0021-Disable-set-respawn-message.patch | 4 +- 23 files changed, 164 insertions(+), 246 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6e1684a..4ce6d6c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { java `maven-publish` id("com.github.johnrengelman.shadow") version "7.1.2" apply false - id("io.papermc.paperweight.patcher") version "1.3.11" + id("io.papermc.paperweight.patcher") version "1.4.1" } repositories { @@ -16,7 +16,7 @@ repositories { dependencies { remapper("net.fabricmc:tiny-remapper:0.8.6:fat") - decompiler("net.minecraftforge:forgeflower:1.5.605.7") + decompiler("net.minecraftforge:forgeflower:2.0.605.1") paperclip("io.papermc:paperclip:3.0.2") } diff --git a/gradle.properties b/gradle.properties index fd1f705..5084e0d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ group = gg.projecteden.parchment -version = 1.19.2-R0.1-SNAPSHOT +version = 1.19.3-R0.1-SNAPSHOT -mcVersion = 1.19.2 -paperRef = 476ef25d053c523aea416487a38f72011d72a9cf +mcVersion = 1.19.3 +paperRef = 214a8c54a4a173c9f5791045ba7a8914a3a8ffa4 org.gradle.caching=true org.gradle.parallel=true diff --git a/patches/api/0001-Add-Getter-interfaces.patch b/patches/api/0001-Add-Getter-interfaces.patch index 3fefa91..ed7b7b2 100644 --- a/patches/api/0001-Add-Getter-interfaces.patch +++ b/patches/api/0001-Add-Getter-interfaces.patch @@ -427,19 +427,19 @@ index 12163a7b0591a7d022dc7eb9ee6608a1b6c39d9b..d81c7307127b135417e06a3b244416be private static final HandlerList handlers = new HandlerList(); private final Player player; diff --git a/src/main/java/org/bukkit/Location.java b/src/main/java/org/bukkit/Location.java -index ef0cb00ca4cb7d2f5e4ec1c950cce036566d1ae4..df53183beb4c438ea3c821e1ffd8e2719c08f269 100644 +index 6bbf8468bc47e82b0aeb164e49cdb73d93bae87b..1d7077f3a1be8068747aaf0665a1dee797bb4088 100644 --- a/src/main/java/org/bukkit/Location.java +++ b/src/main/java/org/bukkit/Location.java @@ -30,7 +30,7 @@ import org.bukkit.entity.Player; * magnitude than 360 are valid, but may be normalized to any other equivalent * representation by the implementation. */ --public class Location implements Cloneable, ConfigurationSerializable { -+public class Location implements Cloneable, ConfigurationSerializable, gg.projecteden.parchment.HasLocation { // Parchment +-public class Location implements Cloneable, ConfigurationSerializable, io.papermc.paper.math.FinePosition { // Paper ++public class Location implements Cloneable, ConfigurationSerializable , io.papermc.paper.math.FinePosition, gg.projecteden.parchment.HasLocation { // Parchment private Reference world; private double x; private double y; -@@ -72,6 +72,13 @@ public class Location implements Cloneable, ConfigurationSerializable { +@@ -72,6 +72,13 @@ public class Location implements Cloneable, ConfigurationSerializable, io.paperm this.yaw = yaw; } @@ -454,7 +454,7 @@ index ef0cb00ca4cb7d2f5e4ec1c950cce036566d1ae4..df53183beb4c438ea3c821e1ffd8e271 * Sets the world that this location resides in * diff --git a/src/main/java/org/bukkit/OfflinePlayer.java b/src/main/java/org/bukkit/OfflinePlayer.java -index a7d1f1e701f23e851f735584a30bedadb0d8b9bd..7b37b6f596b4ac6b8049c7bd195139ac03ba63bc 100644 +index 69b50eee42e8c52063033705bd23a5ef5231ed83..f61ddf47ce33a4a1708e7000bb43b303e3b1a503 100644 --- a/src/main/java/org/bukkit/OfflinePlayer.java +++ b/src/main/java/org/bukkit/OfflinePlayer.java @@ -10,7 +10,7 @@ import org.bukkit.profile.PlayerProfile; @@ -520,7 +520,7 @@ index d124768378d6f0c5573f28ee815ea3886fe74868..11a00998b1cb5ee582e225553f15b1b7 private final UUID uuid; private final String name; diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java -index 9930ebe7a23d306c602840fd43652fbdaba481b3..531b8090a224c448c7316d77663d2cc2787ee621 100644 +index aba40431c5a1ae43106a678445483e0653e130d1..62e40e08980faf5b5b4f1f66e943934256698e6f 100644 --- a/src/main/java/org/bukkit/block/Block.java +++ b/src/main/java/org/bukkit/block/Block.java @@ -31,7 +31,7 @@ import org.jetbrains.annotations.Nullable; @@ -572,7 +572,7 @@ index 2e17b2d4f759531fbe9ee8e9b00c839186af09ca..8f4a293c131cb8b63c31b410ffa211bd /** * This is the name of the specified AnimalTamer. diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index 33a6b7a27dc91552799c07a7aad9b3df31ad13f7..04626febc2f141c2774de98694761f010a0b0c6a 100644 +index cdbc7329cf5f67d66e31eb31e83b9e7997040f72..851b1b42ababc802b1d3d716b7480acab5211250 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java @@ -27,7 +27,7 @@ import org.jetbrains.annotations.Nullable; @@ -606,7 +606,7 @@ index 3b204144e2d245098b3dc23b8779f9ed817bb6d1..2d5a09bb8f31d6234ca8a3f343d45eee // Paper start @Override diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 1e27b9de47f111b9c000243214e22890e323f7fc..56e979e2083199cc68b0381ed51733397cb230be 100644 +index de960716478477ce199526b8f860cfafa1541ee9..5687a53c4dff34109aeb17db3112e9ba6fc8b059 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -42,7 +42,17 @@ import org.jetbrains.annotations.Nullable; diff --git a/patches/api/0008-Expose-MCUtil-Executors.patch b/patches/api/0008-Expose-MCUtil-Executors.patch index cd8b462..05bd572 100644 --- a/patches/api/0008-Expose-MCUtil-Executors.patch +++ b/patches/api/0008-Expose-MCUtil-Executors.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expose MCUtil Executors diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index e43fef0152468944d8a33036344a43e95fe58476..3e46e1c329eb19851ae78025237e70083d815879 100644 +index 2204336d8800311b65e894739ab1b27273e7c6f2..2c35578c85be5f47c2b2a11f1df16db51e31cc41 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2137,4 +2137,20 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2139,4 +2139,20 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ @NotNull org.bukkit.potion.PotionBrewer getPotionBrewer(); // Paper end diff --git a/patches/api/0012-Add-Player-getHiddenEntities-API.patch b/patches/api/0012-Add-Player-getHiddenEntities-API.patch index 6c4a893..e113cbc 100644 --- a/patches/api/0012-Add-Player-getHiddenEntities-API.patch +++ b/patches/api/0012-Add-Player-getHiddenEntities-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add Player#getHiddenEntities API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index cea29fd3c3ea6b3f2e6d2f89022cc4f4fdab93b2..7f4827819fc241866edb571f05e9b14d0955c0c4 100644 +index 5687a53c4dff34109aeb17db3112e9ba6fc8b059..6f90b12e442ddbec64ab75cbad9e4a5744943147 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -1476,6 +1476,17 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1493,6 +1493,17 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @org.jetbrains.annotations.ApiStatus.Experimental // Paper public boolean canSee(@NotNull Entity entity); diff --git a/patches/api/0015-Add-NPC-to-EntityType.patch b/patches/api/0015-Add-NPC-to-EntityType.patch index 5c3096e..23329b1 100644 --- a/patches/api/0015-Add-NPC-to-EntityType.patch +++ b/patches/api/0015-Add-NPC-to-EntityType.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add NPC to EntityType diff --git a/src/main/java/org/bukkit/entity/EntityType.java b/src/main/java/org/bukkit/entity/EntityType.java -index 4aa2d483b706fbf6ba0dc5126de74ee532e12382..8b17088739b126a1ecb86370d23cf49e499d30ea 100644 +index b507b715f9b28b98e32f6589344a5066d1009f64..2841bee3f3e4e24a485a693fa7e5879246d7052f 100644 --- a/src/main/java/org/bukkit/entity/EntityType.java +++ b/src/main/java/org/bukkit/entity/EntityType.java -@@ -287,6 +287,7 @@ public enum EntityType implements Keyed, net.kyori.adventure.translation.Transla +@@ -289,6 +289,7 @@ public enum EntityType implements Keyed, net.kyori.adventure.translation.Transla */ LIGHTNING("lightning_bolt", LightningStrike.class, -1, false), PLAYER("player", Player.class, -1, false), diff --git a/patches/server/0001-Build-changes.patch b/patches/server/0001-Build-changes.patch index a44e8cc..575bb1a 100644 --- a/patches/server/0001-Build-changes.patch +++ b/patches/server/0001-Build-changes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Build changes diff --git a/build.gradle.kts b/build.gradle.kts -index b0e4f11e8af4b909a56bb5576d05ef0537fb25f7..aeea1d8c2cb49b2a79577ad7eef88bcb207b6d07 100644 +index d5d49bb2b47c889e12d17dc87b8c439a60b3fe67..6c358d32b06c2064be5301a243fd1929a3f02b21 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,8 +7,8 @@ plugins { @@ -19,7 +19,7 @@ index b0e4f11e8af4b909a56bb5576d05ef0537fb25f7..aeea1d8c2cb49b2a79577ad7eef88bcb // Paper start implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("net.minecrell:terminalconsoleappender:1.3.0") -@@ -62,7 +62,7 @@ tasks.jar { +@@ -61,7 +61,7 @@ tasks.jar { attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "CraftBukkit", @@ -28,7 +28,7 @@ index b0e4f11e8af4b909a56bb5576d05ef0537fb25f7..aeea1d8c2cb49b2a79577ad7eef88bcb "Implementation-Vendor" to date, // Paper "Specification-Title" to "Bukkit", "Specification-Version" to project.version, -@@ -79,7 +79,27 @@ tasks.jar { +@@ -78,7 +78,27 @@ tasks.jar { publishing { publications.create("maven") { @@ -57,7 +57,7 @@ index b0e4f11e8af4b909a56bb5576d05ef0537fb25f7..aeea1d8c2cb49b2a79577ad7eef88bcb } } -@@ -134,7 +154,7 @@ fun TaskContainer.registerRunTask( +@@ -133,7 +153,7 @@ fun TaskContainer.registerRunTask( name: String, block: JavaExec.() -> Unit ): TaskProvider = register(name) { @@ -67,7 +67,7 @@ index b0e4f11e8af4b909a56bb5576d05ef0537fb25f7..aeea1d8c2cb49b2a79577ad7eef88bcb standardInput = System.`in` workingDir = rootProject.layout.projectDirectory diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java -index 7b1843e16745ca8db2244e17490d291401f22679..c340575e9c2a114f2165b74feb4481975821811c 100644 +index 4b002e8b75d117b726b0de274a76d3596fce015b..bf6d9879810359216a60d1efe1d1bd9e23e55b1e 100644 --- a/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java @@ -73,7 +73,7 @@ public class Metrics { @@ -104,7 +104,7 @@ index bf42969859545a8a520923ef1836ffa4a5cc24a0..2532e265c5dade55f71c34fcab6d1e74 org.bukkit.Bukkit.getLogger().warning("Version: " + org.bukkit.Bukkit.getBukkitVersion()); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 6dc6c3bccb4ba34268a87b0754c87eb1e0df4135..9a19e3e77eb44d443ba6576fe19cb7511d521923 100644 +index 710ca7d3a5659953f64bc6dccdd93b43300961cc..60b57dcd40a0fc8d6e8a44ce3fb198a7a8e82aef 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1654,7 +1654,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop asVanillaSound(final Key key) { -+ return net.minecraft.core.Registry.SOUND_EVENT.getOptional(asVanilla(key)); ++ return net.minecraft.core.registries.BuiltInRegistries.SOUND_EVENT.getOptional(asVanilla(key)); + } + + @SuppressWarnings("PatternValidation") @@ -76,14 +76,14 @@ index 01e424792f68bac73ec41726031ebbb53df13da7..7fa767185dcc73daa4500b6c66761ea4 public static @Nullable BinaryTagHolder asBinaryTagHolder(final @Nullable CompoundTag tag) { diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 79aa3374fd47cd57d2e0810bb5afebbdb38a1892..f4c9ff697bc86e1410e916df19c4eccf05c8af71 100644 +index 54c2b7fba83d6f06dba95b1bb5b487a02048d6e6..09d1206170bd0257bdf24741cfed6c1774886bac 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1575,12 +1575,40 @@ public class ServerLevel extends Level implements WorldGenLevel { - - @Override - public void playSeededSound(@Nullable Player except, double x, double y, double z, SoundEvent sound, SoundSource category, float volume, float pitch, long seed) { -- this.server.getPlayerList().broadcast(except, x, y, z, (double) sound.getRange(volume), this.dimension(), new ClientboundSoundPacket(sound, category, x, y, z, volume, pitch, seed)); +@@ -1719,6 +1719,42 @@ public class ServerLevel extends Level implements WorldGenLevel { + this.neighborUpdater.neighborChanged(state, pos, sourceBlock, sourcePos, notify); + } + ++ public void playSeededSound(@org.jetbrains.annotations.Nullable Player except, double x, double y, double z, SoundEvent sound, SoundSource category, float volume, float pitch, long seed) { + // Parchment start - sound event + CraftEventFactory.playSoundEvent(new gg.projecteden.parchment.event.sound.SoundEvent( + except == null ? null : except.getBukkitEntity(), @@ -99,11 +99,9 @@ index 79aa3374fd47cd57d2e0810bb5afebbdb38a1892..f4c9ff697bc86e1410e916df19c4eccf + null + )); + // Parchment end - } - - @Override - public void playSeededSound(@Nullable Player except, Entity entity, SoundEvent sound, SoundSource category, float volume, float pitch, long seed) { -- this.server.getPlayerList().broadcast(except, entity.getX(), entity.getY(), entity.getZ(), (double) sound.getRange(volume), this.dimension(), new ClientboundSoundEntityPacket(sound, category, entity, volume, pitch, seed)); ++ } ++ ++ public void playSeededSound(@org.jetbrains.annotations.Nullable Player except, Entity entity, SoundEvent sound, SoundSource category, float volume, float pitch, long seed) { + // Parchment start - sound event + CraftEventFactory.playSoundEvent(new gg.projecteden.parchment.event.sound.SoundEvent( + except == null ? null : except.getBukkitEntity(), @@ -119,18 +117,20 @@ index 79aa3374fd47cd57d2e0810bb5afebbdb38a1892..f4c9ff697bc86e1410e916df19c4eccf + null + )); + // Parchment end - } - ++ } ++ @Override + public void broadcastEntityEvent(Entity entity, byte status) { + this.getChunkSource().broadcastAndSend(entity, new ClientboundEntityEventPacket(entity, status)); diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 9c9b4d7e0637348a94befce9377fdb69c1239694..69b3524ebb197430e90a3519b8165e472e1cf823 100644 +index 7d6d3c8556033d289fdadc489e73fba478fce41a..9bf14867aada68e68e5931170a3bd7231215178a 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2250,7 +2250,19 @@ public class ServerPlayer extends Player { +@@ -2273,7 +2273,19 @@ public class ServerPlayer extends Player { @Override public void playNotifySound(SoundEvent event, SoundSource category, float volume, float pitch) { -- this.connection.send(new ClientboundSoundPacket(event, category, this.getX(), this.getY(), this.getZ(), volume, pitch, this.random.nextLong())); +- this.connection.send(new ClientboundSoundPacket(BuiltInRegistries.SOUND_EVENT.wrapAsHolder(event), category, this.getX(), this.getY(), this.getZ(), volume, pitch, this.random.nextLong())); + // Parchment start - sound event + CraftEventFactory.playSoundEvent(new gg.projecteden.parchment.event.sound.SoundEvent( + null, @@ -148,27 +148,27 @@ index 9c9b4d7e0637348a94befce9377fdb69c1239694..69b3524ebb197430e90a3519b8165e47 @Override diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 3be9352ae9b0b84acf07064b45562ceffd30391b..b0dd96bb3af3ec7157c62c515ac09d8364eef9f5 100644 +index a01654bb553c00459e64f16e5ccc91b70cc84444..a931269a0d510ce74cfd3a9714227e4d689f46e1 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -984,7 +984,7 @@ public abstract class PlayerList { +@@ -923,7 +923,7 @@ public abstract class PlayerList { if (flag2 && !isLocAltered) { BlockState data = worldserver1.getBlockState(blockposition); worldserver1.setBlock(blockposition, data.setValue(net.minecraft.world.level.block.RespawnAnchorBlock.CHARGE, data.getValue(net.minecraft.world.level.block.RespawnAnchorBlock.CHARGE) - 1), 3); - entityplayer1.connection.send(new ClientboundSoundPacket(SoundEvents.RESPAWN_ANCHOR_DEPLETE, SoundSource.BLOCKS, (double) location.getX(), (double) location.getY(), (double) location.getZ(), 1.0F, 1.0F, worldserver1.getRandom().nextLong())); -+ entityplayer1.playNotifySound(SoundEvents.RESPAWN_ANCHOR_DEPLETE, SoundSource.BLOCKS, 1.0F, 1.0F); // Parchment - use existing play sound method ++ entityplayer1.playNotifySound(SoundEvents.RESPAWN_ANCHOR_DEPLETE.value(), SoundSource.BLOCKS, 1.0F, 1.0F); // Parchment - use existing play sound method // Paper end } // Added from changeDimension diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 0ea101f155936f7c340d9e1d1077c58b72551027..baa4aa10f40de237d44aa1e692657d2a36eb7a66 100644 +index 61597ebe2f9faff43994c475074b87d11905e582..07f8e2bfabd9292b9f594bf408d40fc939497a1c 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -1917,7 +1917,21 @@ public abstract class Player extends LivingEntity { +@@ -1890,7 +1890,21 @@ public abstract class Player extends LivingEntity { private static void sendSoundEffect(Player fromEntity, double x, double y, double z, SoundEvent soundEffect, SoundSource soundCategory, float volume, float pitch) { fromEntity.level.playSound(fromEntity, x, y, z, soundEffect, soundCategory, volume, pitch); // This will not send the effect to the entity himself if (fromEntity instanceof ServerPlayer) { -- ((ServerPlayer) fromEntity).connection.send(new net.minecraft.network.protocol.game.ClientboundSoundPacket(soundEffect, soundCategory, x, y, z, volume, pitch, fromEntity.random.nextLong())); +- ((ServerPlayer) fromEntity).connection.send(new net.minecraft.network.protocol.game.ClientboundSoundPacket(net.minecraft.core.registries.BuiltInRegistries.SOUND_EVENT.wrapAsHolder(soundEffect), soundCategory, x, y, z, volume, pitch, fromEntity.random.nextLong())); + // Parchment start - sound event + CraftEventFactory.playSoundEvent(new gg.projecteden.parchment.event.sound.SoundEvent( + null, @@ -188,40 +188,23 @@ index 0ea101f155936f7c340d9e1d1077c58b72551027..baa4aa10f40de237d44aa1e692657d2a } // Paper end diff --git a/src/main/java/net/minecraft/world/entity/raid/Raid.java b/src/main/java/net/minecraft/world/entity/raid/Raid.java -index 6a0a1731fd6804eb69d3641213712d31bce085b2..81819d12e0becde85b6d66f3b3ffedde847a72f6 100644 +index 08b18428e867baf14f551beb72e3875b0c420639..af39b26d46dc993766379cc8f0f2b044655ec90a 100644 --- a/src/main/java/net/minecraft/world/entity/raid/Raid.java +++ b/src/main/java/net/minecraft/world/entity/raid/Raid.java -@@ -526,7 +526,7 @@ public class Raid { - float f = 13.0F; - boolean flag = true; - Collection collection = this.raidEvent.getPlayers(); -- long i = this.random.nextLong(); -+ //long i = this.random.nextLong(); // Parchment - remove redundant variable - Iterator iterator = this.level.players().iterator(); - - while (iterator.hasNext()) { @@ -538,7 +538,7 @@ public class Raid { double d2 = vec3d.z + 13.0D / d0 * (vec3d1.z - vec3d.z); if (d0 <= 64.0D || collection.contains(entityplayer)) { - entityplayer.connection.send(new ClientboundSoundPacket(SoundEvents.RAID_HORN, SoundSource.NEUTRAL, d1, entityplayer.getY(), d2, 64.0F, 1.0F, i)); -+ entityplayer.playNotifySound(SoundEvents.RAID_HORN, SoundSource.NEUTRAL, 64.0F, 1.0F); // Parchment - use existing play sound method ++ entityplayer.playNotifySound(SoundEvents.RAID_HORN.value(), SoundSource.NEUTRAL, 64.0F, 1.0F); // Parchment - use existing play sound method } } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 03b3f29bde2bf6cb4e7b08a775bcc380a9404543..a37bc950d24acee9889aded042ed2bc3a0d76929 100644 +index 6a52ae70b5f7fd9953b6b2605cae722f606e7fec..d63e123b5f7c36d5010f242a273f26963ad3b4b4 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -2,7 +2,6 @@ package org.bukkit.craftbukkit.event; - - import com.google.common.base.Function; - import com.google.common.base.Functions; --import com.google.common.collect.Lists; - import com.mojang.datafixers.util.Either; - import java.net.InetAddress; - import java.util.ArrayList; -@@ -1921,4 +1920,52 @@ public class CraftEventFactory { +@@ -1939,4 +1939,53 @@ public class CraftEventFactory { return event.callEvent(); } // Paper end @@ -239,21 +222,22 @@ index 03b3f29bde2bf6cb4e7b08a775bcc380a9404543..a37bc950d24acee9889aded042ed2bc3 + // handle vanilla sounds + if (soundEvent.isPresent()) { + if (emitter instanceof gg.projecteden.parchment.event.sound.SoundEvent.EntityEmitter entityEmitter) -+ return new net.minecraft.network.protocol.game.ClientboundSoundEntityPacket(soundEvent.get(), source, ((CraftEntity) entityEmitter.entity()).getHandle(), volume, pitch, seed); ++ return new net.minecraft.network.protocol.game.ClientboundSoundEntityPacket(net.minecraft.core.Holder.direct(soundEvent.get()), source, ((CraftEntity) entityEmitter.entity()).getHandle(), volume, pitch, seed); + else if (emitter instanceof gg.projecteden.parchment.event.sound.SoundEvent.LocationEmitter locationEmitter) { + Location loc = locationEmitter.location(); -+ return new net.minecraft.network.protocol.game.ClientboundSoundPacket(soundEvent.get(), source, loc.getX(), loc.getY(), loc.getZ(), volume, pitch, seed); ++ return new net.minecraft.network.protocol.game.ClientboundSoundPacket(net.minecraft.core.Holder.direct(soundEvent.get()), source, loc.getX(), loc.getY(), loc.getZ(), volume, pitch, seed); + } + else + throw new IllegalArgumentException("Unknown emitter type: " + emitter.getClass().getName()); + } + // handle custom sounds + else { -+ // warn if trying to use EntityEmitter with custom sound -+ if (emitter instanceof gg.projecteden.parchment.event.sound.SoundEvent.EntityEmitter) -+ org.slf4j.LoggerFactory.getLogger("SoundEvent").warn("Sound event is using a custom sound ({}) which cannot be used with EntityEmitter. Falling back to playing at the entity's location.", sound.name().asString()); -+ Vec3 pos = org.bukkit.craftbukkit.util.CraftVector.toNMS(emitter.location().toVector()); -+ return new net.minecraft.network.protocol.game.ClientboundCustomSoundPacket(io.papermc.paper.adventure.PaperAdventure.asVanilla(sound.name()), source, pos, volume, pitch, seed); ++ return null; // ClientboundCustomSoundPacket was removed and the standard packet now supports custom sounds ++// // warn if trying to use EntityEmitter with custom sound ++// if (emitter instanceof gg.projecteden.parchment.event.sound.SoundEvent.EntityEmitter) ++// org.slf4j.LoggerFactory.getLogger("SoundEvent").warn("Sound event is using a custom sound ({}) which cannot be used with EntityEmitter. Falling back to playing at the entity's location.", sound.name().asString()); ++// Vec3 pos = org.bukkit.craftbukkit.util.CraftVector.toNMS(emitter.location().toVector()); ++// return new net.minecraft.network.protocol.game.ClientboundCustomSoundPacket(io.papermc.paper.adventure.PaperAdventure.asVanilla(sound.name()), source, pos, volume, pitch, seed); + } + } + diff --git a/patches/server/0005-Add-origin-location-to-EntityDamageByBlockEvent.patch b/patches/server/0005-Add-origin-location-to-EntityDamageByBlockEvent.patch index 8d63c17..11f2502 100644 --- a/patches/server/0005-Add-origin-location-to-EntityDamageByBlockEvent.patch +++ b/patches/server/0005-Add-origin-location-to-EntityDamageByBlockEvent.patch @@ -5,23 +5,16 @@ Subject: [PATCH] Add origin location to EntityDamageByBlockEvent diff --git a/src/main/java/net/minecraft/world/damagesource/BadRespawnPointDamage.java b/src/main/java/net/minecraft/world/damagesource/BadRespawnPointDamage.java -index 968c915cc494bb3c57169b7b3640002c3a4a8810..0c2b2cb4be57b11d748d13a0ec24b7470619267f 100644 +index c6efd24673ba6d05266d2b45eae562749a565417..688744157a2f5302c96ef6bbdb0587161fa05f26 100644 --- a/src/main/java/net/minecraft/world/damagesource/BadRespawnPointDamage.java +++ b/src/main/java/net/minecraft/world/damagesource/BadRespawnPointDamage.java -@@ -7,12 +7,20 @@ import net.minecraft.network.chat.HoverEvent; - import net.minecraft.world.entity.LivingEntity; - - public class BadRespawnPointDamage extends DamageSource { -+ @Deprecated // Parchment - protected BadRespawnPointDamage() { - super("badRespawnPoint"); - this.setScalesWithDifficulty(); +@@ -14,6 +14,13 @@ public class BadRespawnPointDamage extends PointDamageSource { this.setExplosion(); } + // Parchment start + protected BadRespawnPointDamage(org.bukkit.Location location) { -+ this(); ++ this(new Vec3(location.x(), location.y(), location.z())); + location(location); + } + // Parchment end @@ -30,13 +23,22 @@ index 968c915cc494bb3c57169b7b3640002c3a4a8810..0c2b2cb4be57b11d748d13a0ec24b747 public Component getLocalizedDeathMessage(LivingEntity entity) { Component component = ComponentUtils.wrapInSquareBrackets(Component.translatable("death.attack.badRespawnPoint.link")).withStyle((style) -> { diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -index 67bce77093dcc126098731047447da2031e3388d..051cf78fe9f7700e1f639c804f35903c8079eae9 100644 +index 2848cb7c76e94d8349f042dc92daf01322a6ce5a..39aa0d0120c1e65377b17a9dca29c817c6b66e7a 100644 --- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java +++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -@@ -77,6 +77,18 @@ public class DamageSource { +@@ -11,6 +11,7 @@ import net.minecraft.world.entity.projectile.FireworkRocketEntity; + import net.minecraft.world.entity.projectile.WitherSkull; + import net.minecraft.world.level.Explosion; + import net.minecraft.world.phys.Vec3; ++import org.bukkit.Location; + + public class DamageSource { + +@@ -74,6 +75,20 @@ public class DamageSource { return this; } // Paper end ++ + // Parchment start + private @Nullable org.bukkit.Location location; + @@ -49,38 +51,31 @@ index 67bce77093dcc126098731047447da2031e3388d..051cf78fe9f7700e1f639c804f35903c + return this; + } + // Parchment end ++ + public @Nullable org.bukkit.block.BlockState explodedBlockState; // Paper - add exploded state - public static DamageSource sting(LivingEntity attacker) { - return new EntityDamageSource("sting", attacker); -@@ -127,7 +139,7 @@ public class DamageSource { + public static DamageSource fallingBlock(Entity attacker) { +@@ -137,7 +152,7 @@ public class DamageSource { } public static DamageSource explosion(@Nullable Explosion explosion) { -- return DamageSource.explosion(explosion != null ? explosion.getSourceMob() : null); -+ return DamageSource.explosion(explosion != null ? explosion.getSourceMob() : null).location(explosion != null ? explosion.getBukkitLocation() : null); // Parchment +- return explosion != null ? DamageSource.explosion(explosion.getDirectSourceEntity(), explosion.getIndirectSourceEntity()) : DamageSource.explosion((Entity) null, (Entity) null); ++ return explosion != null ? DamageSource.explosion(explosion.getDirectSourceEntity(), explosion.getIndirectSourceEntity()).location(explosion.getBukkitLocation()) : DamageSource.explosion((Entity) null, (Entity) null); } - public static DamageSource explosion(@Nullable LivingEntity attacker) { -@@ -138,10 +150,17 @@ public class DamageSource { - return (new EntityDamageSource("sonic_boom", attacker)).bypassArmor().bypassEnchantments().setMagic(); - } - -+ @Deprecated // Parchment - public static DamageSource badRespawnPointExplosion() { - return new BadRespawnPointDamage(); - } - -+ // Parchment start -+ public static DamageSource badRespawnPointExplosion(org.bukkit.Location location) { -+ return new BadRespawnPointDamage(location); -+ } -+ // Parchment end -+ - public String toString() { - return "DamageSource (" + this.msgId + ")"; + public static DamageSource explosion(@Nullable Entity explosion, @Nullable Entity attacker) { +@@ -154,7 +169,8 @@ public class DamageSource { + return badRespawnPointExplosion(pos, null); } + public static DamageSource badRespawnPointExplosion(Vec3 pos, @Nullable org.bukkit.block.BlockState explodedBlockState) { +- DamageSource source = new BadRespawnPointDamage(pos); ++ Location loc = new Location(explodedBlockState.getWorld(), pos.x, pos.y, pos.z); ++ DamageSource source = new BadRespawnPointDamage(loc); + source.explodedBlockState = explodedBlockState; + return source; + // Paper end diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index b786bd5178a605a5dfb7682b7cb809646895aea3..d986103d2d20be4514ce91fe27e42d0f7f1ca72b 100644 +index c7caaebfb4b9f28cbe700d88fdcf232a500e8ca7..7105fb85c0e689c9ac5201e09c0a0c614aba737c 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -98,7 +98,7 @@ public class EnderDragon extends Mob implements Enemy { @@ -88,7 +83,7 @@ index b786bd5178a605a5dfb7682b7cb809646895aea3..d986103d2d20be4514ce91fe27e42d0f private final int[] nodeAdjacency = new int[24]; private final BinaryHeap openSet = new BinaryHeap(); - private Explosion explosionSource = new Explosion(null, this, null, null, Double.NaN, Double.NaN, Double.NaN, Float.NaN, true, Explosion.BlockInteraction.DESTROY); // CraftBukkit - reusable source for CraftTNTPrimed.getSource() -+ private Explosion explosionSource;// = new Explosion(null, this, null, null, Double.NaN, Double.NaN, Double.NaN, Float.NaN, true, Explosion.BlockInteraction.DESTROY); // CraftBukkit - reusable source for CraftTNTPrimed.getSource() // Parchment - moved into constructor to fix null world ++ private Explosion explosionSource;// = new Explosion(null, this, null, null, Double.NaN, Double.NaN, Double.NaN, Float.NaN, true, Explosion.BlockInteraction.DESTROY); // CraftBukkit - reusable source for CraftTNTPrimed.getSource() // Parchment - moved into contructor to fix null world // Paper start - add var for save custom podium @Nullable private BlockPos podium; @@ -101,10 +96,10 @@ index b786bd5178a605a5dfb7682b7cb809646895aea3..d986103d2d20be4514ce91fe27e42d0f this.setHealth(this.getMaxHealth()); this.noPhysics = true; diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 31708d1e94b557896d42199aa0bc6ed26a4c6d8a..786d43a991b94a355d8f52e81f5aa41cc11cfcb1 100644 +index a213f4098859858a73ddd601bbe8c7511972e0d5..1890942b4dd70dd64bb061a166eaecbfad24a7ad 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java -@@ -477,6 +477,13 @@ public class Explosion { +@@ -495,6 +495,13 @@ public class Explosion { return this.toBlow; } @@ -117,67 +112,35 @@ index 31708d1e94b557896d42199aa0bc6ed26a4c6d8a..786d43a991b94a355d8f52e81f5aa41c + public static enum BlockInteraction { - NONE, BREAK, DESTROY; -diff --git a/src/main/java/net/minecraft/world/level/block/BedBlock.java b/src/main/java/net/minecraft/world/level/block/BedBlock.java -index 654a859a37bf991c7a7fa8a44a3d20f8feb223db..52e6c9ea22273759ea9a827125bf561a62272ad9 100644 ---- a/src/main/java/net/minecraft/world/level/block/BedBlock.java -+++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java -@@ -145,7 +145,10 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock - world.removeBlock(blockposition1, false); - } - -- world.explode((Entity) null, DamageSource.badRespawnPointExplosion(), (ExplosionDamageCalculator) null, (double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 0.5D, (double) blockposition.getZ() + 0.5D, 5.0F, true, Explosion.BlockInteraction.DESTROY); -+ // Parchment start -+ org.bukkit.Location location = new org.bukkit.Location(world.getWorld(), blockposition.getX() + 0.5D, blockposition.getY() + 0.5D, blockposition.getZ() + 0.5D); -+ world.explode((Entity) null, DamageSource.badRespawnPointExplosion(location), (ExplosionDamageCalculator) null, location.getX(), location.getY(), location.getZ(), 5.0F, true, Explosion.BlockInteraction.DESTROY); -+ // Parchment end - return InteractionResult.SUCCESS; - } - } -diff --git a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java -index 6be6adf73dc48ebbac22fe2a9be635f675f18cb1..e814c791137da2a10f4d4dd65f201fc220399975 100644 ---- a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java -+++ b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java -@@ -148,7 +148,10 @@ public class RespawnAnchorBlock extends Block { - return pos.equals(explodedPos) && bl2 ? Optional.of(Blocks.WATER.getExplosionResistance()) : super.getBlockExplosionResistance(explosion, world, pos, blockState, fluidState); - } - }; -- world.explode((Entity)null, DamageSource.badRespawnPointExplosion(), explosionDamageCalculator, (double)explodedPos.getX() + 0.5D, (double)explodedPos.getY() + 0.5D, (double)explodedPos.getZ() + 0.5D, 5.0F, true, Explosion.BlockInteraction.DESTROY); -+ // Parchment start -+ org.bukkit.Location location = new org.bukkit.Location(world.getWorld(), explodedPos.getX() + 0.5D, explodedPos.getY() + 0.5D, explodedPos.getZ() + 0.5D); -+ world.explode((Entity)null, DamageSource.badRespawnPointExplosion(location), explosionDamageCalculator, location.getX(), location.getY(), location.getZ(), 5.0F, true, Explosion.BlockInteraction.DESTROY); -+ // Parchment end - } - - public static boolean canSetSpawn(Level world) { + KEEP, DESTROY, DESTROY_WITH_DECAY; diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index a37bc950d24acee9889aded042ed2bc3a0d76929..e9847ba8dde5b9efb5214973f1399460ddcf930f 100644 +index d63e123b5f7c36d5010f242a273f26963ad3b4b4..29e18c86bbfc8517bae76af62fd1bd4120ec31cc 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -970,7 +970,7 @@ public class CraftEventFactory { +@@ -972,7 +972,7 @@ public class CraftEventFactory { CraftEventFactory.entityDamage = null; EntityDamageEvent event; if (damager == null) { - event = new EntityDamageByBlockEvent(null, entity.getBukkitEntity(), DamageCause.BLOCK_EXPLOSION, modifiers, modifierFunctions); -+ event = new EntityDamageByBlockEvent(null, entity.getBukkitEntity(), DamageCause.BLOCK_EXPLOSION, source.getLocation(), modifiers, modifierFunctions); // Parchment - add location ++ event = new EntityDamageByBlockEvent(null, entity.getBukkitEntity(), DamageCause.BLOCK_EXPLOSION, source.getLocation(), modifiers, modifierFunctions); } else if (entity instanceof EnderDragon && /*PAIL FIXME ((EntityEnderDragon) entity).target == damager*/ false) { event = new EntityDamageEvent(entity.getBukkitEntity(), DamageCause.ENTITY_EXPLOSION, modifiers, modifierFunctions); } else { -@@ -1010,7 +1010,7 @@ public class CraftEventFactory { +@@ -1012,7 +1012,7 @@ public class CraftEventFactory { return CraftEventFactory.callEntityDamageEvent(damager, entity, cause, modifiers, modifierFunctions, cancelled, source.isCritical()); // Paper - add critical damage API } else if (source == DamageSource.OUT_OF_WORLD) { - EntityDamageEvent event = new EntityDamageByBlockEvent(null, entity.getBukkitEntity(), DamageCause.VOID, modifiers, modifierFunctions); -+ EntityDamageEvent event = new EntityDamageByBlockEvent(null, entity.getBukkitEntity(), DamageCause.VOID, entity.getBukkitEntity().getLocation(), modifiers, modifierFunctions); // Parchment - add location ++ EntityDamageEvent event = new EntityDamageByBlockEvent(null, entity.getBukkitEntity(), DamageCause.VOID, entity.getBukkitEntity().getLocation(), modifiers, modifierFunctions); event.setCancelled(cancelled); CraftEventFactory.callEvent(event); if (!event.isCancelled()) { -@@ -1020,7 +1020,7 @@ public class CraftEventFactory { +@@ -1022,7 +1022,7 @@ public class CraftEventFactory { } return event; } else if (source == DamageSource.LAVA) { - EntityDamageEvent event = (new EntityDamageByBlockEvent(CraftEventFactory.blockDamage, entity.getBukkitEntity(), DamageCause.LAVA, modifiers, modifierFunctions)); -+ EntityDamageEvent event = (new EntityDamageByBlockEvent(CraftEventFactory.blockDamage, entity.getBukkitEntity(), DamageCause.LAVA, entity.getBukkitEntity().getLocation().toBlockLocation(), modifiers, modifierFunctions)); // Parchment - add location ++ EntityDamageEvent event = (new EntityDamageByBlockEvent(CraftEventFactory.blockDamage, entity.getBukkitEntity(), DamageCause.LAVA, entity.getBukkitEntity().getLocation(), modifiers, modifierFunctions)); event.setCancelled(cancelled); Block damager = CraftEventFactory.blockDamage; diff --git a/patches/server/0006-Add-UnsafeValues-canPlaceItemOn.patch b/patches/server/0006-Add-UnsafeValues-canPlaceItemOn.patch index 8317311..f4a47e7 100644 --- a/patches/server/0006-Add-UnsafeValues-canPlaceItemOn.patch +++ b/patches/server/0006-Add-UnsafeValues-canPlaceItemOn.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add UnsafeValues#canPlaceItemOn diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 103ab25119bfcdd21eac7e1deeac025108e3c138..4743d462ce712e312decdb40fdfdfe6b71468b94 100644 +index 17336102d37a5ab05c3b3c93fcf46961d0ffa7e2..9e7df62dde2f0b526efc4f14e690e592ba80dea4 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -624,6 +624,55 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -622,6 +622,55 @@ public final class CraftMagicNumbers implements UnsafeValues { } // Paper end diff --git a/patches/server/0007-Expose-EntityType-Ordinals.patch b/patches/server/0007-Expose-EntityType-Ordinals.patch index 04dc2f8..93b6154 100644 --- a/patches/server/0007-Expose-EntityType-Ordinals.patch +++ b/patches/server/0007-Expose-EntityType-Ordinals.patch @@ -5,28 +5,29 @@ Subject: [PATCH] Expose EntityType Ordinals diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 72516335570d7137a62ec8667a6e8f06f024692f..30c79796359c8f2fd4f04afdb863047ba95112a9 100644 +index 4589f7db68f7a72065c85c0a50216c6d02658f1e..86e31d14858bd32993059b39af64f74d9d65c84f 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java -@@ -154,6 +154,8 @@ import org.slf4j.Logger; +@@ -161,6 +161,8 @@ import org.slf4j.Logger; - public class EntityType implements EntityTypeTest { + public class EntityType implements FeatureElement, EntityTypeTest { + private static int ordinal = 0; // Parchment + private static final java.util.Map ordinals = new java.util.HashMap<>(); // Parchment private static final Logger LOGGER = LogUtils.getLogger(); public static final String ENTITY_TAG = "EntityTag"; private final Holder.Reference> builtInRegistryHolder; -@@ -294,9 +296,31 @@ public class EntityType implements EntityTypeTest { - private final EntityDimensions dimensions; +@@ -303,9 +305,32 @@ public class EntityType implements FeatureElement, EntityTypeT + private final FeatureFlagSet requiredFeatures; private static EntityType register(String id, EntityType.Builder type) { // CraftBukkit - decompile error -- return (EntityType) Registry.register(Registry.ENTITY_TYPE, id, (EntityType) type.build(id)); // CraftBukkit - decompile error +- return (EntityType) Registry.register(BuiltInRegistries.ENTITY_TYPE, id, (EntityType) type.build(id)); // CraftBukkit - decompile error ++ // return (EntityType) Registry.register(BuiltInRegistries.ENTITY_TYPE, id, (EntityType) type.build(id)); // CraftBukkit - decompile error + // Parchment start + EntityType build = type.build(id); + ordinals.put(build, ordinal); + ordinal += 1; -+ return (EntityType) Registry.register(Registry.ENTITY_TYPE, id, (EntityType) build); ++ return (EntityType) Registry.register(BuiltInRegistries.ENTITY_TYPE, id, (EntityType) build); } + public int ordinal() { @@ -38,23 +39,23 @@ index 72516335570d7137a62ec8667a6e8f06f024692f..30c79796359c8f2fd4f04afdb863047b + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + EntityType that = (EntityType) o; -+ return id.equals(that.id); ++ return this.builtInRegistryHolder.key().toString().equals(that.builtInRegistryHolder.key().toString()); + } + + @Override + public int hashCode() { -+ return java.util.Objects.hash(id); ++ return java.util.Objects.hash(this.builtInRegistryHolder.key().toString()); + } + // Parchment end + public static ResourceLocation getKey(EntityType type) { - return Registry.ENTITY_TYPE.getKey(type); + return BuiltInRegistries.ENTITY_TYPE.getKey(type); } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 4743d462ce712e312decdb40fdfdfe6b71468b94..776911b43156bf297b96fb3cc334383197559ae2 100644 +index 9e7df62dde2f0b526efc4f14e690e592ba80dea4..7d467404416007cd0682eefec7eff8886299fb98 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -671,6 +671,18 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -669,6 +669,18 @@ public final class CraftMagicNumbers implements UnsafeValues { final net.minecraft.world.item.context.BlockPlaceContext ctx = context; return future.completeAsync(() -> blockItem.canPlace(ctx, blockState), io.papermc.paper.util.MCUtil.MAIN_EXECUTOR); } diff --git a/patches/server/0008-Add-Player-setGameProfile.patch b/patches/server/0008-Add-Player-setGameProfile.patch index 66dac90..bee3776 100644 --- a/patches/server/0008-Add-Player-setGameProfile.patch +++ b/patches/server/0008-Add-Player-setGameProfile.patch @@ -5,19 +5,19 @@ Subject: [PATCH] Add Player#setGameProfile diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index baa4aa10f40de237d44aa1e692657d2a36eb7a66..ce0b0a1fd49afcb3c88b26bd6b361c735cab0b09 100644 +index 07f8e2bfabd9292b9f594bf408d40fc939497a1c..6237d023fe6e449077cb53d93f003ae92dc6b4a0 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -1521,6 +1521,12 @@ public abstract class Player extends LivingEntity { +@@ -1504,6 +1504,12 @@ public abstract class Player extends LivingEntity { return this.gameProfile; } -+ // Parchment start | TODO: rename to match getter ++ // Parchment start + public void setProfile(GameProfile gameProfile) { + this.gameProfile = gameProfile; + } + // Parchment end + - @Nullable - public ProfilePublicKey getProfilePublicKey() { - return this.profilePublicKey; + public Inventory getInventory() { + return this.inventory; + } diff --git a/patches/server/0009-Expose-MCUtil-Executors.patch b/patches/server/0009-Expose-MCUtil-Executors.patch index 8f8744d..85a254f 100644 --- a/patches/server/0009-Expose-MCUtil-Executors.patch +++ b/patches/server/0009-Expose-MCUtil-Executors.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expose MCUtil Executors diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 53e4a8db9ff5619982dfb059de9e431dbe2edc57..e8da5c60be1aabfb4047177db0a15952af59325e 100644 +index 71d050445caa5dc22bf9b6070db92272c7b104f6..0ac6768fea72e4c92165ca0a6d3a9dafa59b2548 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2911,4 +2911,16 @@ public final class CraftServer implements Server { +@@ -2938,4 +2938,16 @@ public final class CraftServer implements Server { } // Paper end diff --git a/patches/server/0010-Fix-missing-CraftMetaSkull-serializedProfile.patch b/patches/server/0010-Fix-missing-CraftMetaSkull-serializedProfile.patch index d91854e..a32e8e3 100644 --- a/patches/server/0010-Fix-missing-CraftMetaSkull-serializedProfile.patch +++ b/patches/server/0010-Fix-missing-CraftMetaSkull-serializedProfile.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Fix missing CraftMetaSkull serializedProfile Plugins (ab)using NMS may change the "profile" field using reflections instead of the "setProfile" method, especially if they are targeted towards old Minecraft versions. This fixes the potential discrepancies and NPEs. diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java -index 92b56f16b4d8107ccf206be6b81a98dc58986c10..0882d7271c51d79c4d089ec643d633bb0a81ef07 100644 +index deed77a3d44bc55681483d7f47f148b5220135f2..5b4100f0fcd29660b4738d908d2bda677f206cc4 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java -@@ -96,6 +96,11 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta { +@@ -131,6 +131,11 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta { private void setProfile(GameProfile profile) { this.profile = profile; @@ -21,7 +21,7 @@ index 92b56f16b4d8107ccf206be6b81a98dc58986c10..0882d7271c51d79c4d089ec643d633bb this.serializedProfile = (profile == null) ? null : NbtUtils.writeGameProfile(new CompoundTag(), profile); } -@@ -104,6 +109,7 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta { +@@ -139,6 +144,7 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta { super.applyToItem(tag); if (this.profile != null) { @@ -29,12 +29,12 @@ index 92b56f16b4d8107ccf206be6b81a98dc58986c10..0882d7271c51d79c4d089ec643d633bb // SPIGOT-6558: Set initial textures tag.put(SKULL_OWNER.NBT, serializedProfile); // Fill in textures -@@ -243,6 +249,8 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta { +@@ -301,6 +307,8 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta { if (meta instanceof CraftMetaSkull) { CraftMetaSkull that = (CraftMetaSkull) meta; + refreshSerializedProfile(); // Parchment -- fix NPEs from plugins abusing NMS + that.refreshSerializedProfile(); // Parchment -- fix NPEs from plugins abusing NMS // SPIGOT-5403: equals does not check properties - return (this.profile != null ? that.profile != null && this.serializedProfile.equals(that.serializedProfile) : that.profile == null); + return (this.profile != null ? that.profile != null && this.serializedProfile.equals(that.serializedProfile) : that.profile == null) && Objects.equals(this.noteBlockSound, that.noteBlockSound); } diff --git a/patches/server/0011-Add-BlockDropResourcesEvent.patch b/patches/server/0011-Add-BlockDropResourcesEvent.patch index f7fb441..326255e 100644 --- a/patches/server/0011-Add-BlockDropResourcesEvent.patch +++ b/patches/server/0011-Add-BlockDropResourcesEvent.patch @@ -8,10 +8,10 @@ to easily get the items being dropped by any block instead of only blocks broken by players. diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index 2e65b44f10aeb44fd524a58e7eb815a566c1ad61..cdeecf0032db60385db19d6a6607da792f532a79 100644 +index 7b71073027f4cf79736546500ededdfbb83d968e..b0002a52d15a250e958aa41ddf3cc2296182363d 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java -@@ -308,7 +308,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -306,7 +306,7 @@ public class Block extends BlockBehaviour implements ItemLike { ServerLevel worldserver = lootContext.getLevel(); BlockPos blockposition = new BlockPos((Vec3) lootContext.getParameter(LootContextParams.ORIGIN)); @@ -20,7 +20,7 @@ index 2e65b44f10aeb44fd524a58e7eb815a566c1ad61..cdeecf0032db60385db19d6a6607da79 Block.popResource(worldserver, blockposition, itemstack); }); state.spawnAfterBreak(worldserver, blockposition, ItemStack.EMPTY, true); -@@ -316,7 +316,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -314,7 +314,7 @@ public class Block extends BlockBehaviour implements ItemLike { public static void dropResources(BlockState state, Level world, BlockPos pos) { if (world instanceof ServerLevel) { @@ -29,7 +29,7 @@ index 2e65b44f10aeb44fd524a58e7eb815a566c1ad61..cdeecf0032db60385db19d6a6607da79 Block.popResource(world, pos, itemstack); }); state.spawnAfterBreak((ServerLevel) world, pos, ItemStack.EMPTY, true); -@@ -326,7 +326,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -324,7 +324,7 @@ public class Block extends BlockBehaviour implements ItemLike { public static void dropResources(BlockState state, LevelAccessor world, BlockPos pos, @Nullable BlockEntity blockEntity) { if (world instanceof ServerLevel) { @@ -38,7 +38,7 @@ index 2e65b44f10aeb44fd524a58e7eb815a566c1ad61..cdeecf0032db60385db19d6a6607da79 Block.popResource((ServerLevel) world, pos, itemstack); }); state.spawnAfterBreak((ServerLevel) world, pos, ItemStack.EMPTY, true); -@@ -353,7 +353,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -351,7 +351,7 @@ public class Block extends BlockBehaviour implements ItemLike { public static void dropResources(BlockState state, Level world, BlockPos pos, @Nullable BlockEntity blockEntity, Entity entity, ItemStack stack) { if (world instanceof ServerLevel) { @@ -48,10 +48,10 @@ index 2e65b44f10aeb44fd524a58e7eb815a566c1ad61..cdeecf0032db60385db19d6a6607da79 }); state.spawnAfterBreak((ServerLevel) world, pos, stack, true); diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index e9847ba8dde5b9efb5214973f1399460ddcf930f..13e30a3ad79df17c180ba95ab9f41eb39f93e726 100644 +index 29e18c86bbfc8517bae76af62fd1bd4120ec31cc..7854f9aa81167670269a52536b8eb94cf7084f3c 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1967,5 +1967,19 @@ public class CraftEventFactory { +@@ -1986,5 +1986,19 @@ public class CraftEventFactory { } }); } diff --git a/patches/server/0012-Add-Furnace-Recipe-API.patch b/patches/server/0012-Add-Furnace-Recipe-API.patch index d469c20..1c0ef31 100644 --- a/patches/server/0012-Add-Furnace-Recipe-API.patch +++ b/patches/server/0012-Add-Furnace-Recipe-API.patch @@ -215,10 +215,10 @@ index 0000000000000000000000000000000000000000..e7114e456f818d7bdd4081620f4b9b93 + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 72ed25022d5ea1074304be3c72b23882b8f0f88a..22457dfb3c4a2489f79e2f977f415d2938db0d27 100644 +index f8d321e925bf2708e51590542325c1bdc67d5964..c747c07b78f28b1fbc227148cc898826c718f943 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2376,4 +2376,11 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2379,4 +2379,11 @@ public class CraftWorld extends CraftRegionAccessor implements World { return this.adventure$pointers; } // Paper end diff --git a/patches/server/0013-Disable-sleep-status-announcements.patch b/patches/server/0013-Disable-sleep-status-announcements.patch index d931191..ce57141 100644 --- a/patches/server/0013-Disable-sleep-status-announcements.patch +++ b/patches/server/0013-Disable-sleep-status-announcements.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Disable sleep status announcements diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index f4c9ff697bc86e1410e916df19c4eccf05c8af71..4102e9345df8e1413a4efb13ac022dc4a092a715 100644 +index 09d1206170bd0257bdf24741cfed6c1774886bac..8ee9d63cbd2805d33bf0bf4ac2a1d8f2f8377e2d 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -957,7 +957,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -975,7 +975,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } private void announceSleepStatus() { diff --git a/patches/server/0014-Add-config-for-ticking-TIME_SINCE_REST.patch b/patches/server/0014-Add-config-for-ticking-TIME_SINCE_REST.patch index 0b21279..fe0d27f 100644 --- a/patches/server/0014-Add-config-for-ticking-TIME_SINCE_REST.patch +++ b/patches/server/0014-Add-config-for-ticking-TIME_SINCE_REST.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add config for ticking TIME_SINCE_REST diff --git a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -index 5982dda61e07f1661b0a68d0ba1fcc1122e8d428..0008c021d17b3333a5d4cc6fa954b24ede487e3e 100644 +index 4532f3a0d74feae0a1249b53e1bfbc18a8808b32..c66db0468a9ab09cc89805e7bf7be09e7a7a1746 100644 --- a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java +++ b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -@@ -255,6 +255,7 @@ public class WorldConfiguration extends ConfigurationPart { +@@ -259,6 +259,7 @@ public class WorldConfiguration extends ConfigurationPart { } public boolean disablePlayerCrits = false; @@ -17,10 +17,10 @@ index 5982dda61e07f1661b0a68d0ba1fcc1122e8d428..0008c021d17b3333a5d4cc6fa954b24e public PillagerPatrols pillagerPatrols; diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index ce0b0a1fd49afcb3c88b26bd6b361c735cab0b09..cf41ff3be41b576123457bcb1e613378b6cce4de 100644 +index 6237d023fe6e449077cb53d93f003ae92dc6b4a0..b6da54cbb620a3ec849db912b8a6b903f0b28946 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -294,7 +294,7 @@ public abstract class Player extends LivingEntity { +@@ -288,7 +288,7 @@ public abstract class Player extends LivingEntity { this.awardStat(Stats.CROUCH_TIME); } diff --git a/patches/server/0016-Add-Player-getHiddenEntities-API.patch b/patches/server/0016-Add-Player-getHiddenEntities-API.patch index c6a0435..e26446d 100644 --- a/patches/server/0016-Add-Player-getHiddenEntities-API.patch +++ b/patches/server/0016-Add-Player-getHiddenEntities-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add Player#getHiddenEntities API diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index a5220a4e514865c70700527bcd2f941d852564c0..0950b5f97b3382d1e41da9837e1e0b7cce6ba1b4 100644 +index b32f44beab2c9790ee2da8403e362e8b3ecc6175..6ce67ec49d0784e44e92d8735270996be11436af 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1838,6 +1838,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1797,6 +1797,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player { registerEntity(player); } } diff --git a/patches/server/0019-Expanded-Insomnia-API.patch b/patches/server/0019-Expanded-Insomnia-API.patch index 924e7b8..f89fe75 100644 --- a/patches/server/0019-Expanded-Insomnia-API.patch +++ b/patches/server/0019-Expanded-Insomnia-API.patch @@ -4,57 +4,27 @@ Date: Sun, 24 Jul 2022 19:37:33 -0400 Subject: [PATCH] Expanded Insomnia API -diff --git a/src/main/java/net/minecraft/world/entity/EntitySelector.java b/src/main/java/net/minecraft/world/entity/EntitySelector.java -index 72abebff2018cde2922e97ad6478f93da9aed3ec..c541e80f7ab6772bdd4074f5df7075502b144a31 100644 ---- a/src/main/java/net/minecraft/world/entity/EntitySelector.java -+++ b/src/main/java/net/minecraft/world/entity/EntitySelector.java -@@ -36,6 +36,12 @@ public final class EntitySelector { - return false; - } - -+ // Parchment start -+ if (((org.bukkit.entity.Player) player.getBukkitEntity()).doesBypassInsomnia()) { -+ return false; -+ } -+ // Parchment end -+ - return net.minecraft.util.Mth.clamp(serverPlayer.getStats().getValue(net.minecraft.stats.Stats.CUSTOM.get(net.minecraft.stats.Stats.TIME_SINCE_REST)), 1, Integer.MAX_VALUE) >= playerInsomniaTicks; - }; - // Paper end -diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index cf41ff3be41b576123457bcb1e613378b6cce4de..853deb219785787f78c6eecad6237893eba9f03f 100644 ---- a/src/main/java/net/minecraft/world/entity/player/Player.java -+++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -294,7 +294,7 @@ public abstract class Player extends LivingEntity { - this.awardStat(Stats.CROUCH_TIME); - } - -- if (!this.isSleeping() && this.level.paperConfig().entities.behavior.tickTimeSinceSleep) { // Parchment -+ if (!this.isSleeping() && this.level.paperConfig().entities.behavior.tickTimeSinceSleep && !((org.bukkit.entity.Player) this.getBukkitEntity()).doesBypassInsomnia()) { // Parchment - this.awardStat(Stats.TIME_SINCE_REST); - } - } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 0950b5f97b3382d1e41da9837e1e0b7cce6ba1b4..b209c1b2e9a877af830c022756fd60c8c65ea8dd 100644 +index 6ce67ec49d0784e44e92d8735270996be11436af..51bb661fe3f45dbcf0c94779413fb7aabc04f9b2 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -73,6 +73,7 @@ import net.minecraft.server.level.ServerPlayer; - import net.minecraft.server.network.ServerGamePacketListenerImpl; +@@ -75,6 +75,7 @@ import net.minecraft.server.network.ServerGamePacketListenerImpl; import net.minecraft.server.players.UserWhiteListEntry; + import net.minecraft.sounds.SoundEvent; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntitySelector; import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.ai.attributes.AttributeMap; import net.minecraft.world.entity.ai.attributes.Attributes; -@@ -176,6 +177,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -178,6 +179,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { private static final boolean DISABLE_CHANNEL_LIMIT = System.getProperty("paper.disableChannelLimit") != null; // Paper - add a flag to disable the channel limit private long lastSaveTime; // Paper end -+ private boolean bypassesInsomnia = false; ++ private boolean bypassesInsomnia = false; // Parchment - Insomnia api public CraftPlayer(CraftServer server, ServerPlayer entity) { super(server, entity); -@@ -1915,6 +1917,33 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1874,6 +1876,33 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this; } diff --git a/patches/server/0020-Add-spam-bypass-permission.patch b/patches/server/0020-Add-spam-bypass-permission.patch index 007d555..e8a6f49 100644 --- a/patches/server/0020-Add-spam-bypass-permission.patch +++ b/patches/server/0020-Add-spam-bypass-permission.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add spam bypass permission diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index d31a345edfffe39f127073fc3aec8b3489bae79c..65e3378860a20ebbbd7765ce7b83c97d01437d4b 100644 +index 3472f7f9b98d6d9c9f6465872803ef17fa67486d..70b539b115179ac32cb5c1a72a68d6bc90b5c465 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -875,16 +875,19 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -863,16 +863,19 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic public void handleCustomCommandSuggestions(ServerboundCommandSuggestionPacket packet) { // PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel()); // Paper - run this async // CraftBukkit start @@ -29,7 +29,7 @@ index d31a345edfffe39f127073fc3aec8b3489bae79c..65e3378860a20ebbbd7765ce7b83c97d // Paper end // CraftBukkit end // Paper start - Don't suggest if tab-complete is disabled -@@ -2617,6 +2620,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2553,6 +2556,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic // Spigot start - spam exclusions private void detectRateSpam(String s) { @@ -37,7 +37,7 @@ index d31a345edfffe39f127073fc3aec8b3489bae79c..65e3378860a20ebbbd7765ce7b83c97d // CraftBukkit start - replaced with thread safe throttle boolean counted = true; for ( String exclude : org.spigotmc.SpigotConfig.spamExclusions ) -@@ -3396,10 +3400,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -3248,10 +3252,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic public void handlePlaceRecipe(ServerboundPlaceRecipePacket packet) { // Paper start if (!org.bukkit.Bukkit.isPrimaryThread()) { diff --git a/patches/server/0021-Disable-set-respawn-message.patch b/patches/server/0021-Disable-set-respawn-message.patch index 5e6561d..4b53c60 100644 --- a/patches/server/0021-Disable-set-respawn-message.patch +++ b/patches/server/0021-Disable-set-respawn-message.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Disable set respawn message diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 69b3524ebb197430e90a3519b8165e472e1cf823..1f6e7d43885c65d2b083190a2c088d71f2b78617 100644 +index 9bf14867aada68e68e5931170a3bd7231215178a..05bb50a0419fe12ae8791f18438951c13b1b6399 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2200,10 +2200,10 @@ public class ServerPlayer extends Player { +@@ -2223,10 +2223,10 @@ public class ServerPlayer extends Player { angle = (float) event.getLocation().getYaw(); forced = event.isForced(); // Paper end From 89bda77d563037693a18e334efadda58a62d013f Mon Sep 17 00:00:00 2001 From: Blast-Mc Date: Wed, 1 Mar 2023 22:06:24 -0500 Subject: [PATCH 02/10] Remove Hanging Entity Debug --- .../0024-Remove-Hanging-Entity-Debug.patch | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 patches/server/0024-Remove-Hanging-Entity-Debug.patch diff --git a/patches/server/0024-Remove-Hanging-Entity-Debug.patch b/patches/server/0024-Remove-Hanging-Entity-Debug.patch new file mode 100644 index 0000000..36f8377 --- /dev/null +++ b/patches/server/0024-Remove-Hanging-Entity-Debug.patch @@ -0,0 +1,19 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Blast-MC +Date: Wed, 1 Mar 2023 22:02:23 -0500 +Subject: [PATCH] Remove Hanging Entity Debug + + +diff --git a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java +index 1ffc318c12cde935aea58d6d1efff53818893bf9..7ace41bc1a215849cae36a2642aade6f676882f0 100644 +--- a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java ++++ b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java +@@ -272,7 +272,7 @@ public abstract class HangingEntity extends Entity { + BlockPos blockposition = new BlockPos(nbt.getInt("TileX"), nbt.getInt("TileY"), nbt.getInt("TileZ")); + + if (!blockposition.closerThan(this.blockPosition(), 16.0D)) { +- HangingEntity.LOGGER.error("Hanging entity at invalid position: {}", blockposition); ++ //HangingEntity.LOGGER.error("Hanging entity at invalid position: {}", blockposition); + } else { + this.pos = blockposition; + } From f3b4987f33e9717135e0506ea26f0eacf4d80494 Mon Sep 17 00:00:00 2001 From: Blast-Mc Date: Wed, 1 Mar 2023 22:06:35 -0500 Subject: [PATCH 03/10] Misc Updates to 1.19.3 --- patches/server/0003-Add-SoundEvent.patch | 15 ++++++++------- .../0011-Add-BlockDropResourcesEvent.patch | 4 ++-- .../server/0023-Remove-Unneeded-Override.patch | 18 ++++++++++++++++++ 3 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 patches/server/0023-Remove-Unneeded-Override.patch diff --git a/patches/server/0003-Add-SoundEvent.patch b/patches/server/0003-Add-SoundEvent.patch index 2e19ef1..58d567c 100644 --- a/patches/server/0003-Add-SoundEvent.patch +++ b/patches/server/0003-Add-SoundEvent.patch @@ -39,7 +39,7 @@ index 0000000000000000000000000000000000000000..44245b61f64e4e2eb21ac4f5e540aa9a + } +} diff --git a/src/main/java/io/papermc/paper/adventure/PaperAdventure.java b/src/main/java/io/papermc/paper/adventure/PaperAdventure.java -index 01e424792f68bac73ec41726031ebbb53df13da7..7fa767185dcc73daa4500b6c66761ea4a19c34b5 100644 +index 01e424792f68bac73ec41726031ebbb53df13da7..3a1968baf415d0fe6586c45749810878d3359c9e 100644 --- a/src/main/java/io/papermc/paper/adventure/PaperAdventure.java +++ b/src/main/java/io/papermc/paper/adventure/PaperAdventure.java @@ -325,6 +325,32 @@ public final class PaperAdventure { @@ -76,13 +76,13 @@ index 01e424792f68bac73ec41726031ebbb53df13da7..7fa767185dcc73daa4500b6c66761ea4 public static @Nullable BinaryTagHolder asBinaryTagHolder(final @Nullable CompoundTag tag) { diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 54c2b7fba83d6f06dba95b1bb5b487a02048d6e6..09d1206170bd0257bdf24741cfed6c1774886bac 100644 +index 54c2b7fba83d6f06dba95b1bb5b487a02048d6e6..8b4ec0947de1bbfa5c8eb2634c1138cf91019456 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1719,6 +1719,42 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1719,6 +1719,43 @@ public class ServerLevel extends Level implements WorldGenLevel { this.neighborUpdater.neighborChanged(state, pos, sourceBlock, sourcePos, notify); } - + + public void playSeededSound(@org.jetbrains.annotations.Nullable Player except, double x, double y, double z, SoundEvent sound, SoundSource category, float volume, float pitch, long seed) { + // Parchment start - sound event + CraftEventFactory.playSoundEvent(new gg.projecteden.parchment.event.sound.SoundEvent( @@ -101,6 +101,7 @@ index 54c2b7fba83d6f06dba95b1bb5b487a02048d6e6..09d1206170bd0257bdf24741cfed6c17 + // Parchment end + } + ++ @Override + public void playSeededSound(@org.jetbrains.annotations.Nullable Player except, Entity entity, SoundEvent sound, SoundSource category, float volume, float pitch, long seed) { + // Parchment start - sound event + CraftEventFactory.playSoundEvent(new gg.projecteden.parchment.event.sound.SoundEvent( @@ -148,7 +149,7 @@ index 7d6d3c8556033d289fdadc489e73fba478fce41a..9bf14867aada68e68e5931170a3bd723 @Override diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index a01654bb553c00459e64f16e5ccc91b70cc84444..a931269a0d510ce74cfd3a9714227e4d689f46e1 100644 +index a01654bb553c00459e64f16e5ccc91b70cc84444..f67d6207083811f651dc0939da4e3b7a8d683e13 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -923,7 +923,7 @@ public abstract class PlayerList { @@ -188,7 +189,7 @@ index 61597ebe2f9faff43994c475074b87d11905e582..07f8e2bfabd9292b9f594bf408d40fc9 } // Paper end diff --git a/src/main/java/net/minecraft/world/entity/raid/Raid.java b/src/main/java/net/minecraft/world/entity/raid/Raid.java -index 08b18428e867baf14f551beb72e3875b0c420639..af39b26d46dc993766379cc8f0f2b044655ec90a 100644 +index 08b18428e867baf14f551beb72e3875b0c420639..898177dbdbd14d40ab87122f874b0a660ca6b54a 100644 --- a/src/main/java/net/minecraft/world/entity/raid/Raid.java +++ b/src/main/java/net/minecraft/world/entity/raid/Raid.java @@ -538,7 +538,7 @@ public class Raid { @@ -201,7 +202,7 @@ index 08b18428e867baf14f551beb72e3875b0c420639..af39b26d46dc993766379cc8f0f2b044 } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 6a52ae70b5f7fd9953b6b2605cae722f606e7fec..d63e123b5f7c36d5010f242a273f26963ad3b4b4 100644 +index 6a52ae70b5f7fd9953b6b2605cae722f606e7fec..57fef48dbe91b881c8f75782d9dbeda9069cf8de 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -1939,4 +1939,53 @@ public class CraftEventFactory { diff --git a/patches/server/0011-Add-BlockDropResourcesEvent.patch b/patches/server/0011-Add-BlockDropResourcesEvent.patch index 326255e..52921f0 100644 --- a/patches/server/0011-Add-BlockDropResourcesEvent.patch +++ b/patches/server/0011-Add-BlockDropResourcesEvent.patch @@ -48,10 +48,10 @@ index 7b71073027f4cf79736546500ededdfbb83d968e..b0002a52d15a250e958aa41ddf3cc229 }); state.spawnAfterBreak((ServerLevel) world, pos, stack, true); diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 29e18c86bbfc8517bae76af62fd1bd4120ec31cc..7854f9aa81167670269a52536b8eb94cf7084f3c 100644 +index 2f33f32852de0ba4f175a26f30c384a7b1269c3a..c525ee0d113662a254d38e42d2b28b7f3420ff0b 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1986,5 +1986,19 @@ public class CraftEventFactory { +@@ -1987,5 +1987,19 @@ public class CraftEventFactory { } }); } diff --git a/patches/server/0023-Remove-Unneeded-Override.patch b/patches/server/0023-Remove-Unneeded-Override.patch new file mode 100644 index 0000000..ea646c8 --- /dev/null +++ b/patches/server/0023-Remove-Unneeded-Override.patch @@ -0,0 +1,18 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Blast-Mc +Date: Mon, 9 Jan 2023 19:21:16 -0500 +Subject: [PATCH] Remove Unneeded Override + + +diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java +index 1bf7e21cd3b981013ff634dfc070d572af491da9..a45de4db8a73cea947c76771f9e540f6e64763bb 100644 +--- a/src/main/java/net/minecraft/server/level/ServerLevel.java ++++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +@@ -1737,7 +1737,6 @@ public class ServerLevel extends Level implements WorldGenLevel { + // Parchment end + } + +- @Override + public void playSeededSound(@org.jetbrains.annotations.Nullable Player except, Entity entity, SoundEvent sound, SoundSource category, float volume, float pitch, long seed) { + // Parchment start - sound event + CraftEventFactory.playSoundEvent(new gg.projecteden.parchment.event.sound.SoundEvent( From 85a2184a1cbc56d766c8ee212b5ef9f6e417ca6b Mon Sep 17 00:00:00 2001 From: Blast-Mc Date: Wed, 15 Mar 2023 01:42:00 -0400 Subject: [PATCH 04/10] Revert BungeeChat Deprecation --- .../0016-Revert-BungeeChat-Deprecation.patch | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 patches/api/0016-Revert-BungeeChat-Deprecation.patch diff --git a/patches/api/0016-Revert-BungeeChat-Deprecation.patch b/patches/api/0016-Revert-BungeeChat-Deprecation.patch new file mode 100644 index 0000000..941044e --- /dev/null +++ b/patches/api/0016-Revert-BungeeChat-Deprecation.patch @@ -0,0 +1,28 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Blast-MC +Date: Wed, 15 Mar 2023 01:05:09 -0400 +Subject: [PATCH] Revert BungeeChat Deprecation + + +diff --git a/build.gradle.kts b/build.gradle.kts +index 3c4dd6ebc2289c44c2f5723e7920aadffdc51884..1d7d810de20536fee67bf6073aab3ff24f01c55d 100644 +--- a/build.gradle.kts ++++ b/build.gradle.kts +@@ -25,7 +25,7 @@ dependencies { + // api dependencies are listed transitively to API consumers + api("com.google.guava:guava:31.1-jre") + api("com.google.code.gson:gson:2.10") +- api("net.md-5:bungeecord-chat:1.16-R0.4-deprecated+build.6") // Paper ++ api("net.md-5:bungeecord-chat:1.16-R0.4") // Parchment + api("org.yaml:snakeyaml:1.33") + // Paper start + api("com.googlecode.json-simple:json-simple:1.1.1") { +@@ -104,7 +104,7 @@ tasks.withType { + "https://javadoc.io/doc/org.yaml/snakeyaml/1.33/", + "https://javadoc.io/doc/org.jetbrains/annotations/23.0.0/", // Paper - we don't want Java 5 annotations + // Paper start +- //"https://javadoc.io/doc/net.md-5/bungeecord-chat/1.16-R0.4/", // don't link to bungee chat ++ "https://javadoc.io/doc/net.md-5/bungeecord-chat/1.16-R0.4/", // don't link to bungee chat + "https://jd.adventure.kyori.net/api/$adventureVersion/", + "https://jd.adventure.kyori.net/text-minimessage/$adventureVersion/", + "https://jd.adventure.kyori.net/text-serializer-gson/$adventureVersion/", From d3a3626a73f627a3e03ab15c375ea053d0c03d29 Mon Sep 17 00:00:00 2001 From: Blast-Mc Date: Thu, 16 Mar 2023 22:26:09 -0400 Subject: [PATCH 05/10] Update to 1.19.4 --- build.gradle.kts | 6 +- gradle.properties | 7 +- gradle/wrapper/gradle-wrapper.jar | Bin 59203 -> 59821 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 269 +++++++++++------- patches/api/0001-Add-Getter-interfaces.patch | 18 +- .../api/0005-Expanded-Adventure-support.patch | 10 +- ...0006-Add-UnsafeValues-canPlaceItemOn.patch | 4 +- patches/api/0007-Expose-NMS-ordinals.patch | 4 +- patches/api/0010-Add-Furnace-Recipe-API.patch | 4 +- ...012-Add-Player-getHiddenEntities-API.patch | 6 +- .../0014-Expanded-Insomnia-API-methods.patch | 4 +- patches/api/0015-Add-NPC-to-EntityType.patch | 4 +- .../0016-Revert-BungeeChat-Deprecation.patch | 18 +- patches/server/0001-Build-changes.patch | 20 +- patches/server/0003-Add-SoundEvent.patch | 28 +- ...0004-Add-PlayerUseRespawnAnchorEvent.patch | 18 +- ...location-to-EntityDamageByBlockEvent.patch | 117 +------- ...0006-Add-UnsafeValues-canPlaceItemOn.patch | 4 +- .../0007-Expose-EntityType-Ordinals.patch | 10 +- .../0008-Add-Player-setGameProfile.patch | 4 +- .../server/0009-Expose-MCUtil-Executors.patch | 4 +- .../0011-Add-BlockDropResourcesEvent.patch | 19 +- .../server/0012-Add-Furnace-Recipe-API.patch | 6 +- ...3-Disable-sleep-status-announcements.patch | 4 +- ...d-config-for-ticking-TIME_SINCE_REST.patch | 4 +- .../0015-Add-HangingFrame-Tick-API.patch | 6 +- ...016-Add-Player-getHiddenEntities-API.patch | 16 +- .../server/0019-Expanded-Insomnia-API.patch | 8 +- .../0020-Add-spam-bypass-permission.patch | 8 +- .../0021-Disable-set-respawn-message.patch | 4 +- .../0023-Remove-Unneeded-Override.patch | 4 +- .../0024-Remove-Hanging-Entity-Debug.patch | 4 +- 33 files changed, 288 insertions(+), 356 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4ce6d6c..f132018 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,8 +3,8 @@ import io.papermc.paperweight.util.constants.* plugins { java `maven-publish` - id("com.github.johnrengelman.shadow") version "7.1.2" apply false - id("io.papermc.paperweight.patcher") version "1.4.1" + id("com.github.johnrengelman.shadow") version "8.1.0" apply false + id("io.papermc.paperweight.patcher") version "1.5.3" } repositories { @@ -16,7 +16,7 @@ repositories { dependencies { remapper("net.fabricmc:tiny-remapper:0.8.6:fat") - decompiler("net.minecraftforge:forgeflower:2.0.605.1") + decompiler("net.minecraftforge:forgeflower:2.0.627.2") paperclip("io.papermc:paperclip:3.0.2") } diff --git a/gradle.properties b/gradle.properties index 5084e0d..84ea477 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,10 @@ group = gg.projecteden.parchment -version = 1.19.3-R0.1-SNAPSHOT +version = 1.19.4-R0.1-SNAPSHOT -mcVersion = 1.19.3 -paperRef = 214a8c54a4a173c9f5791045ba7a8914a3a8ffa4 +mcVersion = 1.19.4 +paperRef = 85a67dadf28ff329cc01429de84b8b62262435e6 org.gradle.caching=true org.gradle.parallel=true org.gradle.vfs.watch=false +org.gradle.warning.mode=none diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c023ec8b20f512888fe07c5bd3ff77bb8f..41d9927a4d4fb3f96a785543079b8df6723c946b 100644 GIT binary patch delta 20926 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 i_W%EDg1>@4`_NK(#)z|gdCiK zZ19IgEQKVM;e!GLTY~`u6G=uzBTBA>r3SXu@HH_0ZQF6ePkvLCrcP-MXyt&CtBl8 zI2ywicWO8wRUWX&l9}W4lH)UT<0<%j(l1233wevM!-_fz|76_{OY^OCEQ4HeWgke1 zT=Z%Lhs{aMYNDJmsQ@3uVM*Y)O^T#8jLXRke9ss&QIC4~HiDqf%shkQ-0hBOsPn=0 zZM61To*2R1#}373ZXnptZ#LlLo(7x*JKzIHgRU}7zaxVv4mMKS44eyjh3GzH1TPcH zcy2H|*oOV|1Xok`jc4kZ-H@W`x-X#kBrF?T7;D9l>eZomayDXD3;#t(mdd2qwu<%z z+ge!1by=vGTFac&-%I3qNF?;KCr-x1P2?aL(vE{6#3E#O7Kj+O9|Oj5w0slB zbuj6u#UaYwoFmw_xK!j?o;{e|^l*l0YC+yEh}A9HPkz7nH`va*zd8DxZ@rE^6={FB zo29_AS6??>E~EhsDGZl-a6uXN<+^7zDnwncQHW zb1)(1r6-UOYP{gOjS7Xupa%#>P@{LUtq|pP+e2s|7Z>hnQ{C}55dNmD6fTrgRXG^X zMk5xB=dj#ng|0fU58$`k?J0y!{X65O=!xVK^wGemq-*T6}j8e{fyp6ivF=H0-3An--i1iZCR(wQrLTZX3(3!uc(ls|1|1^41alD1Y_n zk1%twmda_ZU7|eob(Fz1w~fsXV_^&z%|2Z{MmTnH32O#rZ>%)RP0vZRnGg(N<7FKW z%{{Hshli~sFZB&Dh5{yM8d$b9RBtiS=vI@8vDe%WkKLj4xs|pre4MG$_!>p<->kt9c za2G9Dpo9uDtTUpD#M4qLmdt(yIA?l6zMl95RAPZB*OJ6817Je9vhmh_OYKEQ3pg$e#kd= zS+58w2qL+ResowRR8(d<6Ql=(*kcX(V_?Zmm4#gVE=Cn5%0fEA#86m&00Ilw7SaL{ z+!N*e+0~n7uOq~w#>tk6yt!Dck5+8&UoVZA*j)~*)Me(Usnb0DPzo0hh1_lEHG-q= z`i>qi+USBOv6$*Z7gLZ~Ma;-ax)zQ%V^&)TgdrZL#ewL47*EPmumbs89H-{!ZhWi=h3Z7o-u%0pHduII({b zG0gWv?1NYPyGQhN=A8C0#V8juG=mbBf%kcZtXMV%b?5D>h)xDn+?jH};DCYzcL8CYeu^_}io=b91O0!EWBA4zKPe`HBNz&>|3V}A= z9~Q;P<&L`^i@c`xu%mL$DRapF@3<3lzNbiR%Eph?ZgZZazDRFAO2;=VD6RG+HT*-s z`XMaZyjcGpvYyH1xa0E>2Uu!(A4+K%krgojA2s2ci#MP%9KULUo;LA^zeR75pCz>w)M+ru?^=p$*4e31>5gM(vVyDpX z*7-K|mD?lPdG$(thCB{Y)!G5WjOl3cCT(^(aW$%}(jpy7y!?SlOvA!^S>)?eUAqvi z%I*y@Dp2f%f2yM@sJ37Sq5Pf~84|}2h?5?eb(%tEglv#kZeYcNNr}&@=bXytQky&0p;2y_R+cmkfUgKtJ?w<^QsY z7+*G#G&XnFVt05f8BxMt3GnB&{QfW7M1ZqIPld%Jg3*UQ>PNlqm^qMP&1k(I-?aVG z8JlXtCWuC;pfj>{mE^!wi!Gl@qKBM+zJfmEuoO{@6{(V+h|hJE*8f#dOkvx46+ePd zDKbxnYJ#U)oq$P$!;<8|{^zWURzDi*j31j5%@i&A=P%x1=go!#Zv=Q%nZXS{TW+1$ z@A-G!7x5Dh&yRk7euU3Alo0YmoEKgYxSZJa9**XlNjcWTH%thSpOWK3N&IPcTLk8N2nF8xf1Y0#tQ6`oojv4&F#dD zhO46h>Aw*r#qa_5INPk%b2?dVqNKj*Il^O|8Mffa`|9#-vHdwzD_HTG`>my?2Wa@q zP$7yLSRRKAC{&YyHqL%3utXyGtOuyhZtCXWkos0;6pyVP*fIkTT-Y*|wtj}Hu;(RY z{u&6Q))W@Uii8l2lZ>B(p64%|hdCFCB`QjhL{^Kcv@e5T_q zTP*jOG~#*Be9NZSe2wNEBkgYk$#+k}0LYFBQDzPU?p~uQ4MmCNHPBC+gzRzjP`??8PzSe%iSN z*{C3SdApv+Ht|>Y3l&m*g5V(su0jT0Z0(#?&9YH7RbOjH&~xTqb0Vg)Ji#TF#?F!YZA zYeDMn`+_q8@~m(+Izgyi#($|nT1F)Eo#IHO%cz( zs`w)iVPzu;o72xRg6kfRz78weFPK$8IGTn~mgv=UsF}4-aLUut~Qf|fN`QB>0 z!p7zw#Sa3(kbkp1Z9g!C4EoXyIxD`DvH@?A8W zKhaT)t>k}>E)Qmz^CspyN_=EJDv4h=LLXo$ydRcbE0v+aqT7=C&ryQMeTj)}-*$1S zb%K|>v3aR$Nng3%>XW~*;Q^vxflz0CIxuw{R!4nK?v~twaw=2iKU{ge=IDN0q5%zB zHA<~DO7EAeRGUY;3Lt}6q49i(988g{z1}T*$7RtUowzTBdcP>ngozZ3Og)M0e!set z5XT&VuHM|YHBi0+StfJF^yShq1l%%_{{7yr8n&Pm!lx3!ZipHHV@lgdzNa^uQ&63_ z`a12N10{uB69h+S@3a&IC{0vg*aGhGLowAqe}#WtVQvWcQ=+vb-ID?c78cnH0ME>o z0a~bv(7%g6)lB|on64UY4*Wt+lc!_!?bJSv)&7S&7=QjY#cgOG^=f@ElwwU1f@Va5 zHbH*M8zdB$i3B}xhBRZjr632IZrx}f@*&bzk7orie>l-rie3DPi}1XzU@YDRwFKmy5##?##FD26Ru#MD}NfK z5tuAq$9=H!Tkb~_T!>jyy^be_j;rrZmM_hN;a1wVHPTGP$ZVDs3h>)NBFEWxpM9d| z0yexwY2)CpoE|{b>G1-`xh8rVb+_S`3&P{`U+n0->HU{!*s{b zh0ps#6^qc4Vdotq#sXVQ{1U!0Q6P2Jv;upQRENURxu0Xq3x|&?Z@F#yw5IFmRkG$v z)O4w|jNG(&A#isVUSfk7sqE~AWeZ^^lSj6<9gJ!^gX|sQ_}OLB9rCm|6IM_4loGz! z;VXJ1o^%@XoVxOx``v`ic^Hcc&s z?)j5`Vbp5nK=nQ-x2mktC8NCJ0!{-yTeeg|Lsb!fdCoysq)iULdCGe3C-=+#b?4VSwxn}fKF}Z$udG5?r zVczA{U!wZJ6{Pi^!d`pdVaqiz$1$^b<63%Nw(@Jk+grk3W7zuIL+LFp>YgyQmo-1D zEIYg{J)K`^1XDM?>?yyDf@%KS%?SIl(qfqjQwf)0HBhas>TkHKqM}8UpX#0(U1`(( zkvW?bMl<_nl~;V6WO-F#_extCTd=IrEf3Dc@pox~;@HL(WO8C7pX%)>vuJ6w?yl-* zVY9K|o9msu=ynP3)}Vn3S8lU;i(&urM|x4Qan@i*^KoJ6M6K+s^=Iw!a45BCME&~) zg;#IX4p7u)vC%Uu`1)pVNRpo^{wlK(@%)3||2vHrj{dgvnjpEQ5QoZl8@>Q`Tyger zW*>|tJ{uekfQzu4d0T?a4ZR~y);H||zVnAiS9Li2H66W?%`@nCkXL0?_8ImWc4BUkbgv91o3du*oNcHF-6M1; z&|5JV4d*9Q$VBI+sy)RhJcF>zG&Y=cdD4lCQ;%^B`8sVJ51o7@-zcg_24|21-nxWg z=JXW+J&nK#A|nJXS47Q9A@yw`3&G>q=9O&^BHC;WT04y1AbmU^ti~CQVqABvaVY!^ z?}5Q9KilKbIq^3(umZp5hng5{##*BUAoOASe>Psul2||iY<`&F>(#R~ACY$iiC3b2Pl(ez*Bx=D~eCf`HRyn$-~KYm5K zer-XOrJvi5E^HrNE2)j~DZkSqmf2L4kNc>{+_;(W>t7He1+HD# zT22wmE#9rL=1*#cjhhXY#_n`2xIrL{{+6U-GCkflEj4UkI6W}ks%6BjTZ9lmtw)3E ziI4m7`pF$a+{boU{LL#&S&?=EFu{Gs7jE__Oo=N{epkUUqmG49#zHP)4*C5j2qrDi zEXy!31Pty*<59nWzIgQvkCgixv6VIQ!POhyCz|&sShkU*($QFGPCb+K?*k;Lh&Rl4 zjWufiEolliWh2@}9Oy@P707bS1c5pNSSXqQfPL&t9-lQK59(OQA3LjO#18Rktw6u#SzF46}%g2(@1pM584UD!=%P}TC+>vgp19n z{qghOzYsjhUm%?Zb4aL!(&k1+zE{MN*TWxQR@^l2Hf~^m@g}30leXq*C%AR_Sb&Vk zVkg6^z2}gl3W5247Zc9|*jK^AlgtVU+ZKGp$me6P;S3A=xusy8ax#Y*Wt8Kp1j6+& z3=Lgux9$m&+pew%T6L1vPxj%RG_#)lbj92>L#KIAyj19F!CNZZOr9{tC4BrqIL z`%dX?k3$SEw1Py4A&eIdq3Jycxy+@G6E2r4RA03gR}VXNv9`H@Wh3;fzTEF7apq6%wN$6)i--FS z+IMlqv+}31_B;aXi^f`Q7vtc*B~7->Ur!}HM)BnUVxaQ)bL;a?TAj3y9#T2uee^J5ohGslCH8ejViE@UFsnirgXB&W$+j%+hjvE26+6*S zTMl$sfpw)N6M1<|b0W0SQ6c;?!G$ z@rn0bBsGYhxMECJx=($!IwxK(I>>d$@c#Q%nKhi!^%fWIm!j)>S~+aHZ-P$2{^o03 z(2eaYQLj>-8pLt=0?Qzl_9sBVhbRQ}A#;3u7t*{%M~puxpDMZ&TdFMohAWOJG&qa- zAv(x(M~BG5FENOsXu};?PW##tw!7B`;mSXCk#x*Wbh__>J)?Y_x={F=?r{(2pTjnh zolI#ARMSY3@9*?MVyFv&jJ98zrFM!XzcZZbM1Y}usOAs;BAGukn1{!T17A8ozY+Tf zCa`$xiMs{tWrYC;c$0&E9Ll_b%HUm@>m@0*^ z60ey`T-+j$OJ0gs3RKtH17i$mM(Vbrsk*OmY9Ix5SOsI(>OA=@kBZ%bMA$H9jMP(y zh%Y!ou3F_4Dw37AIp<0FkRrfNX7n)ywaO@`%19+4e0x+8M@0`^O`-)ut2n|Ys{-@C za%*GCyHLZ zab?Ca^+`6^c)}m_j>6f5tnz0)mYAqhFaF5l+KeQ4Z+V1iB4KZ=hGE z4W@qHd)fW4XW_w4Uusu1GiRdq%ZRQ;Gi3%96y4cAk_s^8)|`73GqgFR8K_;)`)NqAn&=vRs!_HE z9ZQrjY+sd(i;=F?#9MYU=X1-`V)c*iAuazFs=Xmu878=4`No zU4!wq8cv02z%=zfZeOZpJ5s4w>#k5f&pF9{DUp5N3x*X(lMk3m*Jk+DRc2TXYM=Kq zhF=oB89Luc_+F$G#MPrYK0mE!zeQk-8&J4nE3|n@abjRSe234l=auM*P&4GSI_0bO zoMW9G^C>g~;uPc1p0SV7Bsn@aj&FEK0JyJin7YzGQ@6)3tH70Vpl2)_v(Qqwp)wOCi#~RbxRWQ-9ywE z+e%G&805L5f9UJE(;fC80D7>weaPl=kLxL6ztg&H>js>0)EIf_|8i?`51~A}F6nGO-+pEgkto<8m%#+ zVVlW=-<_M<$od-d43QS+zNwqhSeoFTnDML_L-RH!?R2NcX-}U{>*BN{S~U_WiLw0| zk<77*VKj!XD_C~kPPil@7|2z;l6>RmmG{&n4F8I6UR4uK+tkiqG5GM?mul-)lscnSGV$uT1_C&R11T% zC!>?g9H#C!mT=S8qUk7|d`vZgsB7{1!U~fs>bRM4{`L#{9AjF!y7GU>$p}2J&^&e+ z2b#&Syo`W0$QQ#C^WWF6QTk-?1!Yle>ug;+SEha1kU>#V7JIZGBq2~GxmQTpBu#9W zSM-72%J#KVJ(sE8`PvetYj&dZBY%Z|_BhUK)=CLn5+*F`WIi z^W!kq3%$O(gW% z;5#w!eLtAQS6UKXa0;K;#D}^ zvZ3Ix!CO4`Of%#ZA9^B_vaCFZa~n%LC42qdcw?TSX_d1qLw-8)(W4E0(Lx@pWlGGO z-@aO&N_o>{{Z4vI(<}@Nw{h8AwTaBna5oE3lKt2>Px|2pm z&2TpT&MW3^J1iS`T-w~6O(VsDP_|i;-Pt6uSC_T^9X?mtHjVF+g4nifxy1+iqgFGf zySG7%tEJA(RJrM;BA6h20tso-aCrrkXYlwy1D)crNPZWVC2PapW1E&-V_hcpR|XA` zs4OaLF7JUhPDAi!ihwOrJgg?W>FFSZx16+& zGYPv)v|<rG(Di#UwtddEW7$_&tNxB8o;j{3T9k2vX+s zz_QqW@P2HsPxZcgzxQw8 z@&-!!7Hn?Z%N3-Qtkp!I>n}Q_w-sR-y_2+=5(&z~f6JF){ zOhao=c3S zKvsfi<5XcnF$s#qsOI4<;#GJ6|YsusW7{nIZiTM6d$T`L`+pHi$& zMSr#KbV-%6I1yESl*Znoty2UP0h*C-8p6!+PD8Bg!+YM_eJ~h7rpGH zZ$zDsM^ki$l^~JmyZU~0)%fl#rg%|e*phm>M~ZFsu3J|QI9CIBtSgIgf!iCS24RnP z(m$dJpM~j=Rd1lx;)P-@DgITC2E+r6uiZcL?=S9kR1u_m5(f4*Da1Bdc?u!$ck zfPuj$j<~@f&cp@Y=w3Da-_gB#c$g8C3V4`Nlp6f-M=(GoZQs&1cnG;>h+#={9#2LX zrW4F_DCZQbB zGrh?Rf=+j9`xLGjY9NrUUC|gL8|2ngaB5LOpk5IO28#A8WBuNlJv-O4K6&>j>@Hcz{b9%rAM7?2>~1;ic05`yG1-)WOocz*wJEFv z)+OK^y%vVlNN8~I!y_8%IjPLSq*!VzUf_VhdzfsEYNptTKM?#5<2f2Q2xt$`Gms|^ zl7CM(;d(|1Qc_iXO7ajIuNyVQgO*wFe@wIomvqPa%W>fRxLDU0(Vp(|Q|OKe`(+PI z=W1}V2#u*vB*}#cvF-@W1`?y_<=KHusRC$TKzM_AmiaDo=Kl@;WLMgQM|5Bhnm!FB z6~*UUZ8!z{Cp^qo>~|FrGEN~_UiHS*1;#(6grp95K`z|EPvx?f^#`ctO3V~t8zkw5 zqb6;{Vf%k5jEj;bQ=41CcZ|4dpM}4O|94cfhLA+=3jqd(``=D0xl~jL5M}WHQRFM9 zN2>>yg))pI6GJJ%#H?`ZpdI$B;d9KP`iso5eNMb+en^h#LuG`mNls4|kzHYSYCZRb z=Vm=~TL=I?Ae0BlAf1mav=x=9$8Lqo=y;=C^f?lQWk&IWRi0jZ=?pn-gG`!zhjv{j zZM2yPwD`;5VYZw%^VYC{-r4GAQuG=pP>=0(Gk>{ZsfKrZRKKsri{6%d8&arW%|hpG ztNx$A16FHOhU%vii1oJ6lr_jij+~)Zp(&w;c+2yxcz@N+Yp#}tFFov)yd2;1s`WYS z{%E$Jj`4R_tj@?^`fs+QE-8f}j+)*iR+Xz@>+yo<7SBY8zdf`YK1Z6?{ubBHh zFmY>E5tgnuII4UM4#bWRmTM{f8dUJr!=z#)J{Ilf5`tJ=0ZCAH2;gTzcvb}*up0z; zZeLIovm2^@?yMFIYc|aSdSkz~AzMjFC>;*cB31O+Oh_#TgcpV|{#R)utyK^l{ zb465cBpZkBjiWzlp>~S_gv2AZG@^cX4MZ=^vFOC>H5sGXLxCI|ON#Iz*NopkDA_)d z?Hatmqalapt0QkbJ-X?>;>IivQqY*(IlHu`7|~(==4h~lH*fg8o1=zsUi|MvB7q%w zKsXg+fPpbGfPwu;M&%_;j+Q_IsG7P>yyzoCnC+0Hf6$poL6|0^kmEp5&?7Eg$lWK! zOrh;|v%nfO*J8HR*6P~+7l94Vf@&+st!XzlboJ70?SIyGZDV)&ZTS0_D*QX`%^W8O zeSiJ?8v1vq>t)Mz_Fm{T&*wD!U&jp&D#QM77#pTjIkg|txC`=$WljWHK;;6)_-XTx zR2S*PbE1QMew>mYvk8rv3sZ3Sc7keIP6?;CTR#Z*no2Uuot+cPZhZ@l3Y=vE z({1#LO3w9BOS(E#y|E_rQo9)zyqpsT2;lC~4Dm{M4Jq>{OLa)5C+^&0W|3}bW2-H^ z+!J;tf0jJtfYqm-c8K`H0IN{#nvxgd@9v`7#3iJL#Cs1%9U_NeKWdL+@$!jFG_;X& zV;Ag_%4A;c(kk^JJ`~T_tDKugHX*tN`uIxBtP*VB3>KQ9&Otk+cMh?;4E5Mh=f3_* z37q$#ct#i{(*u5F_}~ty@tiiAwp&Cc*LJpBs7H!_k|@ziau-~kfdmg%>OP+%+*C`8 z1Tz9;C(^NP-*N6%ZW`KkaK-TlRn!Wp!<`@Qks4j?j{H3{KBb`gksEl`nCueJZxnyw z!%6mDe(AJ1!vW$HSYk8_A%YUFAw+|P?tU%n57gLt^9B3^nav2v%g(7*feSVVU3V3- zO!j2?LieZ3pRHUDK$nw&*h6bAV#{V5hn+*GliYMGqC9jgHhwyuh6>q^&a$0eqSvWy z8LT_(K6aZY&U^~)o}c`eby3q|bA}~5Wz9^L;-qzamWDvu{I?Pg8O(c%^w$EF-NN=~~S5pa%#NLgwE$~`97?YYaH9Kq@7C{4rgo!gL7Hf&(zV4NW zkJ3f5cBFNH^(3Jct$>B*Tm|8zUgAoMuVY)0JUZdC^J3jbZwokiXb1VU!AR0EU6vY4 z*+)f1FQb+6VfEZLcW1WEx=by<;}m^O&G^J6sitOyNv?a#Yn^nP?_gSA9!Nv=}wk$LF&n{hSA@;phy)TRM2d34U|Gfy1o$hQ;(Vu2c`4;NXm zlhZ-%s<%a-gSD=UcFU5%@8&0j2p+hqLcIHv5}PVdMmfK-0ds@j+Ru)3MF^Ww7Mob5 zDMK3P&>Gt+kR9U?$`)Hc|5}Xar*jz3qR_L{OiJk2fwh$-4W@G%zu;Z7Q0FCc=w|5P z5cD08=rGo{qTH;JZaXw{^cf0jO(y)piPz+iOu-F8x8x3EU53fg~qnR-}(=Gvc7I3+)QbLEZb3;~feu7cUEY{sXKijeF zVJ${UB*{dA4eePwD6=aya5HS)1WefN+TvX+vMOv`N2cTsSL=HF4MgF#)_(6+As4zm zcaR{RWjVp3BeCh=#Ej(4X^33FHG?%DB0xpTZc^#uy#zRlN#ZDK)wyEw2tXm@(_K0&iKy}VnnKX{*bjEciAk_C5}b1fiyNZ8|B7$9=s*(YmmRmlH&eRBB(h-dLgdf?2|8 zSW~BfI$u6O%l!)vFgO+S4WHTFbCh*0p9z1H%)KeX z&Sd0O8poeuz#M>&N`@b}hGoNzqq<_I)!d928kFotHpgmR4Jl~~-3Q(u4e?vi_mRx+ z8`h)kc{Z>Ob4oAuB52LD+ox->i}g;s-iUJJoqo?i`ob(iQ(=(yc%aFV4>Yz>1MYT}o;=?_^ z&&jc6(${hA8g)2)hXn*|rczoyhIYlsO*>WFj10D-UZ#=$*g|jY!onI|KJSYPy=EMg zGz-ISU-^O`*w%zVzwTvzJWFmNh|nw}>0}l_3JxoUfRjp6-bB0XKfY$Au+v6i$b|`H zY|;1jZXc8#GA7=Xr5Hw6WNB5#fIr1*H(9b;-ajyR=1*20R0Rws5*BlxEc7}RYcvhP zvz=mTpGOeRJ_vhJpQf36TgwhS$So}|QD8g6l`#>lcJU@z-^rmbKMcH8PH*l8c>$vx zqCm)V=*URppX7OQW+u0g>flsW1(F4PuC%u;?!#!*Abz@Zrq#Fb2o5KZ`span{@)NV z|0*AgQ4E*$ZXlN>7Z_54D=sg2yZc`HD>Z*cDO#f2R4MXTzWJD>rW5Z!^)bue?x^K= zvu^%jK;1)A5?}PlNk%j5#06TVbypNYN=HP$d@lYUB1X4CLfC3v`nOYTJfZT3hXWjj zM135o;qp6p-rr+PHXpxc>Tj!g|0MyT`$Xk}OK+2YQ2m($i=OYs< z$CNPS7Y`eKe@v3|_&M*uHLzYmP2t{zf7gu@hIe6ur062@qs?)TA*siTWv}kfcDS| zK!xGzszMroZI{%4A`Z3*hf*Nc;oKkcFWY$1*iB}c^6|jU zQdi>3<@az`aW{H69D(yCCW=LqUz%-mD%O4>wUAXLFXC8sjq0vxeArF*YTG`$>JRfi z0S~!cxa;tj-h1OLSd;JT3|BwVVev_f-5fF{+j}40xql&2;IPuOhul?!R z2q<*?(n@AiipP`;uz!PKFHpywDHvN*q7hEN2F4XRYRARdEwa&Wip!2hqSr6YKb&1` zT6Q|3CSagOD^O+XCYM?p%IA^9bKUQK05N(N+<_(BJ8^;*o25ic+sMh#$f&RqZQY@1 z_odtGgcUP!yCuRk1a-R;^ZTM4D2{t9_pHCiAvK;Ox61Ena^8?=EwLB0Kc{U-KvSU^ zC1VPin}a!7h+SE-2br!8C32kHSJP^(qOSS?R6z~(Fq_dbuGUPcXo>NnkKmm#8H}S^M1BcyM>F6z z&@SMGd0GpCPu)>t;77|6Dn21l% z)N~H{ut=4%J}_w+7@b$7658md^p#QN#Wr?M}L$7NS`QK8@8_BQJOBaq@TewO z?03~w`8teD{qv;U*gs(jp_d?E%x z42@*cqPz)^fd>PUndY!fa!|bdBYP3lJPtp9Ak@w?>M9!bSF}3-D;$5%tC`sc-~^0{ z>*?0(OT^q@%pHmz&hYmRhA)1eXS-3o!fK}{azeHG$3EMtm&_aBZBOHEi#<|K8`jS! z_5swyyLh2*+|#QSe-yHq2U0)T6T(hVyxzsXSiR;})jlq+2rtrRloPiZI!DgrJmUUm6Jq}duH5rMu}ZTv@XhSK4jKa{r-Z0rlk zUfnm8`od)#0c5Og1Rwnnlupg_YVxU#8nOPASm3E5n-p+`f~`ADgY z(9F20)1a>gm&VoRHQ!j&F|4(|1+f%0u-q%6yN-5`IJb^WFmo_F4-!i2N*p0OE9;vh z>69t7q{*{_WNYagYoRs&d_`JlE6hh;qC4mFN(LU)(p$s`1xi#)x@Fo=D%)|D3FNr@=0)wt1~Jb~*5k7iL?_cW{Kfb2riV?uj3ZQ`H~(5Sx8 z@(6oNNOz^LoFt>_EV2FpLSd1X@N)v|;K!yi zapFuxUD-7`0szua~YNc!z-yv zFzwt;DKM=6l%M2|#hV`3E5O*44SK*BHmVVndOoQ|yIr9nhc;?i2RGvr>>4YBJ^4)^t`YeDcRN1!0f(9h3hKAQa)1tlaSJ-Y z-1%L59nw)>QmF5Ps{dRC>dfqRJbCY#JKzKAIhNSO$P2FTlg08&9Mp{Ov>my91{))D ziy8byQ?nw`BsypnS$XEtwD2pDic;AFavxs6zUm zp}koQ#NGDgOl`dbol|sgidy|`9qE~v|5lRSL?1m6-4jfVcm$%o;6{A8X1wV1eezhu zR3e2p30kcy*<+_XZlN$FuV~Wgh|%m?!!L3TACuazm_sYox5G?{mOyCjA52|QU`*1O zrNVGH0~=ySZ8HVN^(6RyRW>kHN2sP`ms%(S0)6bkF{@(U5wwzRoJ92-yHqZuyrEru z;VF2DVpwEI%>PAY(Jr&pyh4*fS=aPke>4e5fusj zQII@ma!pLDA^mwD#E`ezsD$f7cf}gN1HJeU6{`!ZYdQan!^@Y|Hb%&dLB@C0D%MZn zlcQ(R02vqRadm&P5T5kMKcvd;3CwRc|H{Vkdg8eG6gBXM!xA)G2y!OBcXD_KE7KEz zl1Gja`!9RxBjHqV|F4VdfQD=9!s7}e7@ZgsW%NOmga{*QB)S;A_eAeC-i(q6qTldz z(IO!sAxe}GEj*%)-bFAvd4dS>Pv(E`{m*~yy6f(}&$sv8_pE!?I%}PMK3D{HCA84V zE~fWJ7x&+*m=;_#>~nSL4|EZsJP6?v7KYVS!)Z9IypZl~r`9_J2^yhMNXNOzJA1{Za_ z6>v8PZWDpafs`YR3~qGyZ@u(?)M6Xo9lYV4v7u1iZKc?gVUeR_f-&rU*B`);qEMDP zH+UiRc&CYqb2}gRg>l~7`HE+_Kd&gcjZ?Ng>XGI3>m{X%X=q4xb|pVVMNZC9J1i23 zTQLho*(@&ip$;5pCv)<8yaisjG6of7NsQ+lP{t_*D@x(R*AIky?|b=-Yi_G-=y0#h zk>p1H;W>@1(lKuU$TT!61mZ!cl`eLdWjm0J(}kI|hlaLGJ+b_EN6*y}cP3SA3lgHcytA6-jzbi^OxnBiY=YEPESFY`k16Q!W1B zZ}WQh!84d^ab7XXuEZFr-jOt$nyj^dG0pcx`{dq9_6MO(sSo1%X~{A!a|REvvWuxn zl9=n|Uw5*FUwDhH@)}omh&#FPnUy#c=XA-~?LZ4}Key{L7gZ9SS~3}ltp8lCcP=pY zT9z`I0P5Xj$q@|=+EpQHfCgj9YmHvc9-KZpFs~ZERq>QQ99Q?Mw1DdPJ)e2z3U}m9 zT2e3hqJ?@BJHcaX4oV56GRH_Hc2PscfRS9T#M*nQ!r7!)S8K4}Y^Rz$HdHjakw)#P z(t(1~Qty#AhWC^@Z4Te^hi8C|0<84zJ*cUAjnZ3JYMypFN2B_yt@dFtdqGZ!rh$U- zk3pW=idJL#-vvx)^V)FyFM1U#rUux%#CL@!e(JnGeduO8G%ggEGFBp+&dFn$L3?&H zAQNMbj=+V1R=i{;YWY9zhxlf$xT23&;p zkMTv|^-9_sZFD7f~qVUUOLk>bckM-SEc7)Z1#ViqwaGd9(-Aj~n9S7;{uf*STcG4d1 zh|-Hu$%xy3N!2&2azpoAuW`cSfiH38Wy=QYZ$w5IybfDizwh<#O@95n*E-qpZewrq z^N_OBenePTui;XC3Q{OUqWU%@WcOuQxsXb&+s#_zCn<#&@VVCM_x(a#USLWa?jawh z)VsY{zFF7{HZuM7j6pyDQK1zBtgm`^szFWv z7h@*$Vs$gy>oF-ic}e^9jwg4K{%r=*(gs(gD#q7Wy2~V;Gac}XZWYcoqiBQ8rd^ZA z)vY1ZS>02@W`h#Uqw;b`!9VqtOT!-|%<9X=eg zFLhk3mu+$`t6z$ef7&p}ASkOGWrsJ8U~QwHW3;SB_fTd0rrfe%iIvv;Rxmrrze9s0 zrB`6$qTk}>`=s5~^^?TKA{w%i4!sOZ$S@8DW3jrX@qbdXF$Uf4WXopWMfJ@FO`7fJ zS|K)CIiHm}fkpH`^D8ZVbKrM!qQB_m#4dLO?z;9#G|Z^6L3Oit5if><9=t_0H{j-G z5E{<0KHYlJ_1Jqt#>0+iMz5l8pFCByW}En@PjT-W%Tv6YlY$FEeNG{pQ%9}S3XNN= z(eXZ~RM*+bI{52sHoo#UupkddmEXkG;y8QWYS}c7+a7RtTAg)0{d&>E6D=CHn;is$Y~$wiQpzLV-d%8ck;ZSq>MaRF+9Ld3~Jt|3hk*Jsbp;r#yyRj zF#kbknt!cNP<}QnfOxj(+n+n-{wbK@E9y`jN3|ZTe{cKBWCNOfVmQlS0j+NF}!> zv7G^D$KZ_B`jPGl@+B{4?W!_wN}a3Rb)fk$acEKyHIUIF-ER0(*h1x_bkPV*)|teIdxCk3OTRWw?p;qE8j7z^w3cf0D)ghm{A)QdJrY30o zajOp7bxUaVPOIyKZB#sn=dHajw7~P^tGz?ccX>tb^Mik$7MgJV$YCnDDKa==&nsr% z@y)5R4+BqZ*icaOIj^k4E9ZVpzGG@#3|fT#7IXei!$E%j@AO&*44W#3)5hN0RKBrw zx$=e#vvR4Seglugurm_{K7C!+zgAhc*4W`IEwO54A`U?RgL^+npZCRKhsH zTe3Xs+vb2WRfkgKmLo=AW1>;y!EC$=j)XO4V;r3ik9nj&d8A1j&VeTyBj_Q~?bnp9 z+0au=+KQ#8Pqvrc8{b`RR27HU`5_o85Z+V^hwJyscoFJ>BR#b|k^$_CQbovY`R11> z1m{y9AJ_FSebqAlB{7GL4twf|U8Z6envXF?iI{2AI(it$7#b01X&}tS5MA`rM zowK)qw0lJHWL6bOcKu7F0Ila_fDJz|V@?;)@(0)E41rXCP-$KcX!i%hgRg)C3v}Rz zc^IG@L{Qnl{dpY#@*6mq3I`{`SbyaL#w@^qGz`(?89_^MKmz+%qS_xxO+>86&{6-L zWKlROiqOde`hJ!G1RfE^?$4?~Pb^U^OJMjl8lb@<40s<;H036FODHZ~?mK1@#e1dqL7-fvm zbFLWt@LU!YT}A>VB}7ofvNUk=f+#L7D*_uYiP3sr(-VTzfzB&1K(T^o;;P~xnuKcp zolHn2p%Vcz;l+XBb}+e15cI$!frVazhyYs#{yQM!co;x70Pf+PfQdoSVpSd#nScuZ w|E&DqkiEp6nWHb}B;da$<=?F+{O4J~(cC2_GD0yC1R_ni)(HQ!%J47kKb!F!p8x;= diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aa991fc..e1bef7e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0..1b6c787 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,101 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/patches/api/0001-Add-Getter-interfaces.patch b/patches/api/0001-Add-Getter-interfaces.patch index ed7b7b2..be13812 100644 --- a/patches/api/0001-Add-Getter-interfaces.patch +++ b/patches/api/0001-Add-Getter-interfaces.patch @@ -520,15 +520,15 @@ index d124768378d6f0c5573f28ee815ea3886fe74868..11a00998b1cb5ee582e225553f15b1b7 private final UUID uuid; private final String name; diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java -index aba40431c5a1ae43106a678445483e0653e130d1..62e40e08980faf5b5b4f1f66e943934256698e6f 100644 +index 390a2a2611df35a9ea6f1eb996b47e2aa4597ff0..e7dcaf75283dd222891e4f20971716934291a672 100644 --- a/src/main/java/org/bukkit/block/Block.java +++ b/src/main/java/org/bukkit/block/Block.java -@@ -31,7 +31,7 @@ import org.jetbrains.annotations.Nullable; +@@ -32,7 +32,7 @@ import org.jetbrains.annotations.Nullable; * (i.e. lighting and power) may not be able to be safely accessed during world * generation when used in cases like BlockPhysicsEvent!!!! */ --public interface Block extends Metadatable, net.kyori.adventure.translation.Translatable { // Paper - translatable -+public interface Block extends Metadatable, net.kyori.adventure.translation.Translatable, gg.projecteden.parchment.HasLocation { // Paper - translatable +-public interface Block extends Metadatable, Translatable, net.kyori.adventure.translation.Translatable { // Paper - translatable ++public interface Block extends Metadatable, Translatable, net.kyori.adventure.translation.Translatable, gg.projecteden.parchment.HasLocation { // Paper - translatable /** * Gets the metadata for this block @@ -572,7 +572,7 @@ index 2e17b2d4f759531fbe9ee8e9b00c839186af09ca..8f4a293c131cb8b63c31b410ffa211bd /** * This is the name of the specified AnimalTamer. diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index cdbc7329cf5f67d66e31eb31e83b9e7997040f72..851b1b42ababc802b1d3d716b7480acab5211250 100644 +index 365350d38b2eee00d22bad09ab95c6054f11d536..75f82615410d4b158fc9feecedb8fbc32b039276 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java @@ -27,7 +27,7 @@ import org.jetbrains.annotations.Nullable; @@ -585,7 +585,7 @@ index cdbc7329cf5f67d66e31eb31e83b9e7997040f72..851b1b42ababc802b1d3d716b7480aca /** * Gets the entity's current position diff --git a/src/main/java/org/bukkit/entity/HumanEntity.java b/src/main/java/org/bukkit/entity/HumanEntity.java -index 3b204144e2d245098b3dc23b8779f9ed817bb6d1..2d5a09bb8f31d6234ca8a3f343d45eee81cc1dd4 100644 +index f17ef44bc02e97ff084e5abfde8d6c6822f00d62..aae9eaa7a0e42cd9bc0a4ccf56bf056441d47c90 100644 --- a/src/main/java/org/bukkit/entity/HumanEntity.java +++ b/src/main/java/org/bukkit/entity/HumanEntity.java @@ -20,7 +20,15 @@ import org.jetbrains.annotations.Nullable; @@ -606,10 +606,10 @@ index 3b204144e2d245098b3dc23b8779f9ed817bb6d1..2d5a09bb8f31d6234ca8a3f343d45eee // Paper start @Override diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index de960716478477ce199526b8f860cfafa1541ee9..5687a53c4dff34109aeb17db3112e9ba6fc8b059 100644 +index 660f28e371176c62e38a84b187958aceb235c8e3..64734c0ca89859294bde01da3dcaee6dc1840894 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -42,7 +42,17 @@ import org.jetbrains.annotations.Nullable; +@@ -39,7 +39,17 @@ import org.jetbrains.annotations.Nullable; /** * Represents a player, connected or not */ @@ -1023,7 +1023,7 @@ index c574bb94b21eb27974b40c839fce52c6ac4b54b4..0172bed7917ea1199c34438385be4bce /** * Returns the size of the inventory diff --git a/src/main/java/org/bukkit/inventory/InventoryView.java b/src/main/java/org/bukkit/inventory/InventoryView.java -index 2448e70d75ae7a678c6befac4506c103edb78875..65ca144618f74bc8e317a4b9c2732ad5ed13a208 100644 +index daca40b63e95ea33178bcb54ad45911da591ca54..e9b5206851db890d7638ce94d793fb909be20307 100644 --- a/src/main/java/org/bukkit/inventory/InventoryView.java +++ b/src/main/java/org/bukkit/inventory/InventoryView.java @@ -14,7 +14,7 @@ import org.jetbrains.annotations.Nullable; diff --git a/patches/api/0005-Expanded-Adventure-support.patch b/patches/api/0005-Expanded-Adventure-support.patch index 1d9e1a9..6b4f155 100644 --- a/patches/api/0005-Expanded-Adventure-support.patch +++ b/patches/api/0005-Expanded-Adventure-support.patch @@ -120,20 +120,20 @@ index f6eb30f53dad684f156102cf7147b2f00c82c71e..1b4e9840f0e829be533ad0bd1c918489 * Gets the char value associated with this color * diff --git a/src/main/java/org/bukkit/Color.java b/src/main/java/org/bukkit/Color.java -index d2f8f5a8e49f60422b6a41e51248a6710251d61b..40b09a861ba365b126c2b28bb7f18c8fb8b3e5b5 100644 +index e088390ec3fb87eeabc73dfe90e3544980c02e5b..5d4fbb08832fd0490a9375580f909beaf941e8fa 100644 --- a/src/main/java/org/bukkit/Color.java +++ b/src/main/java/org/bukkit/Color.java -@@ -15,7 +15,7 @@ import org.jetbrains.annotations.NotNull; +@@ -16,7 +16,7 @@ import org.jetbrains.annotations.Nullable; * but subject to change. */ @SerializableAs("Color") -public final class Color implements ConfigurationSerializable { +public final class Color implements ConfigurationSerializable, net.kyori.adventure.text.format.TextColor { // Parchment private static final int BIT_MASK = 0xff; + private static final int DEFAULT_ALPHA = 255; - /** -@@ -244,6 +244,13 @@ public final class Color implements ConfigurationSerializable { - return getRed() << 16 | getGreen() << 8 | getBlue() << 0; +@@ -309,6 +309,13 @@ public final class Color implements ConfigurationSerializable { + return getAlpha() << 24 | getRed() << 16 | getGreen() << 8 | getBlue(); } + // Parchment start diff --git a/patches/api/0006-Add-UnsafeValues-canPlaceItemOn.patch b/patches/api/0006-Add-UnsafeValues-canPlaceItemOn.patch index d75f792..63381fe 100644 --- a/patches/api/0006-Add-UnsafeValues-canPlaceItemOn.patch +++ b/patches/api/0006-Add-UnsafeValues-canPlaceItemOn.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add UnsafeValues#canPlaceItemOn diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java -index 854be548e5a645e7312e6e9390d5255f8b1d61e6..9fdcb933788cb78306dc066b3bf6ed01a6316cd3 100644 +index b92255a9c87620f46adb140689b1cd328a476d61..3ed52d016314c01293530fa760fa5faaf59586ed 100644 --- a/src/main/java/org/bukkit/UnsafeValues.java +++ b/src/main/java/org/bukkit/UnsafeValues.java -@@ -271,4 +271,17 @@ public interface UnsafeValues { +@@ -245,4 +245,17 @@ public interface UnsafeValues { */ void setBiomeKey(RegionAccessor accessor, int x, int y, int z, NamespacedKey biomeKey); // Paper end diff --git a/patches/api/0007-Expose-NMS-ordinals.patch b/patches/api/0007-Expose-NMS-ordinals.patch index 8ef388c..23c30fb 100644 --- a/patches/api/0007-Expose-NMS-ordinals.patch +++ b/patches/api/0007-Expose-NMS-ordinals.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expose NMS ordinals diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java -index 9fdcb933788cb78306dc066b3bf6ed01a6316cd3..606ae769ea443853c0d236f5bac5429467190778 100644 +index 3ed52d016314c01293530fa760fa5faaf59586ed..f93672ebb76664c5a71030b72966c6b13e107246 100644 --- a/src/main/java/org/bukkit/UnsafeValues.java +++ b/src/main/java/org/bukkit/UnsafeValues.java -@@ -283,5 +283,12 @@ public interface UnsafeValues { +@@ -257,5 +257,12 @@ public interface UnsafeValues { * @return if the item can be placed */ java.util.concurrent.CompletableFuture canPlaceItemOn(@org.jetbrains.annotations.NotNull ItemStack item, @org.jetbrains.annotations.Nullable gg.projecteden.parchment.OptionalHumanEntity player, @org.jetbrains.annotations.NotNull org.bukkit.block.Block block, @org.jetbrains.annotations.NotNull org.bukkit.block.BlockFace face); diff --git a/patches/api/0010-Add-Furnace-Recipe-API.patch b/patches/api/0010-Add-Furnace-Recipe-API.patch index 25d3ade..d48a7d5 100644 --- a/patches/api/0010-Add-Furnace-Recipe-API.patch +++ b/patches/api/0010-Add-Furnace-Recipe-API.patch @@ -64,10 +64,10 @@ index 0000000000000000000000000000000000000000..28c01caa9d6379046f6af6612719b404 + } +} diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java -index e8c0c853eb52d1473c20231660355f77b1f7e016..60172dd594e51351c8253446f6d8c1347920b2a0 100644 +index aa04d7df70d99402c91e920fd693d7d4fb655786..6bb7341460eab62e83918d3b47fe89302027e9fe 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java -@@ -3985,6 +3985,36 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient +@@ -4010,6 +4010,36 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient @Nullable public DragonBattle getEnderDragonBattle(); diff --git a/patches/api/0012-Add-Player-getHiddenEntities-API.patch b/patches/api/0012-Add-Player-getHiddenEntities-API.patch index e113cbc..7a083d8 100644 --- a/patches/api/0012-Add-Player-getHiddenEntities-API.patch +++ b/patches/api/0012-Add-Player-getHiddenEntities-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add Player#getHiddenEntities API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 5687a53c4dff34109aeb17db3112e9ba6fc8b059..6f90b12e442ddbec64ab75cbad9e4a5744943147 100644 +index 64734c0ca89859294bde01da3dcaee6dc1840894..205cd1d53bef3a8d18315561543f815ede791570 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -1493,6 +1493,17 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1597,6 +1597,17 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @org.jetbrains.annotations.ApiStatus.Experimental // Paper public boolean canSee(@NotNull Entity entity); @@ -20,7 +20,7 @@ index 5687a53c4dff34109aeb17db3112e9ba6fc8b059..6f90b12e442ddbec64ab75cbad9e4a57 + * @return a view of hidden entity UUIDs + */ + @org.jetbrains.annotations.ApiStatus.Experimental -+ public java.util.@NotNull Set getHiddenEntities(@NotNull Plugin plugin); ++ public java.util.@NotNull Set getHiddenEntities(@NotNull Plugin plugin); + // Parchment end + /** diff --git a/patches/api/0014-Expanded-Insomnia-API-methods.patch b/patches/api/0014-Expanded-Insomnia-API-methods.patch index 44e7cde..aefc770 100644 --- a/patches/api/0014-Expanded-Insomnia-API-methods.patch +++ b/patches/api/0014-Expanded-Insomnia-API-methods.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expanded Insomnia API methods diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 7f4827819fc241866edb571f05e9b14d0955c0c4..1e7c5b991939e984d3448a5f9e0859857d04ce63 100644 +index 205cd1d53bef3a8d18315561543f815ede791570..bb67075d04e31865b48e8436876ecf6f342d4d8b 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -52,6 +52,45 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -49,6 +49,45 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM */ @Override @NotNull Player getPlayer(); diff --git a/patches/api/0015-Add-NPC-to-EntityType.patch b/patches/api/0015-Add-NPC-to-EntityType.patch index 23329b1..eaa556f 100644 --- a/patches/api/0015-Add-NPC-to-EntityType.patch +++ b/patches/api/0015-Add-NPC-to-EntityType.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add NPC to EntityType diff --git a/src/main/java/org/bukkit/entity/EntityType.java b/src/main/java/org/bukkit/entity/EntityType.java -index b507b715f9b28b98e32f6589344a5066d1009f64..2841bee3f3e4e24a485a693fa7e5879246d7052f 100644 +index ee3a3bda9a5b9cf3bcabf80ee3c653a2959fab0c..3e9bf06682373686d0c6f40defc56f23e785cd4b 100644 --- a/src/main/java/org/bukkit/entity/EntityType.java +++ b/src/main/java/org/bukkit/entity/EntityType.java -@@ -289,6 +289,7 @@ public enum EntityType implements Keyed, net.kyori.adventure.translation.Transla +@@ -297,6 +297,7 @@ public enum EntityType implements Keyed, Translatable, net.kyori.adventure.trans */ LIGHTNING("lightning_bolt", LightningStrike.class, -1, false), PLAYER("player", Player.class, -1, false), diff --git a/patches/api/0016-Revert-BungeeChat-Deprecation.patch b/patches/api/0016-Revert-BungeeChat-Deprecation.patch index 941044e..25806f7 100644 --- a/patches/api/0016-Revert-BungeeChat-Deprecation.patch +++ b/patches/api/0016-Revert-BungeeChat-Deprecation.patch @@ -5,24 +5,24 @@ Subject: [PATCH] Revert BungeeChat Deprecation diff --git a/build.gradle.kts b/build.gradle.kts -index 3c4dd6ebc2289c44c2f5723e7920aadffdc51884..1d7d810de20536fee67bf6073aab3ff24f01c55d 100644 +index cad12a2632b9ebb569280441c42869685db1f31a..50014fbac3aa4f8c7c930405ca89f9cdb83b771c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -25,7 +25,7 @@ dependencies { // api dependencies are listed transitively to API consumers api("com.google.guava:guava:31.1-jre") api("com.google.code.gson:gson:2.10") -- api("net.md-5:bungeecord-chat:1.16-R0.4-deprecated+build.6") // Paper -+ api("net.md-5:bungeecord-chat:1.16-R0.4") // Parchment +- api("net.md-5:bungeecord-chat:1.16-R0.4-deprecated+build.9") // Paper ++ api("net.md-5:bungeecord-chat:1.16-R0.4") // Parchment - revert api("org.yaml:snakeyaml:1.33") + api("org.joml:joml:1.10.5") // Paper start - api("com.googlecode.json-simple:json-simple:1.1.1") { -@@ -104,7 +104,7 @@ tasks.withType { +@@ -106,7 +106,7 @@ tasks.withType { "https://javadoc.io/doc/org.yaml/snakeyaml/1.33/", "https://javadoc.io/doc/org.jetbrains/annotations/23.0.0/", // Paper - we don't want Java 5 annotations // Paper start - //"https://javadoc.io/doc/net.md-5/bungeecord-chat/1.16-R0.4/", // don't link to bungee chat -+ "https://javadoc.io/doc/net.md-5/bungeecord-chat/1.16-R0.4/", // don't link to bungee chat - "https://jd.adventure.kyori.net/api/$adventureVersion/", - "https://jd.adventure.kyori.net/text-minimessage/$adventureVersion/", - "https://jd.adventure.kyori.net/text-serializer-gson/$adventureVersion/", ++ "https://javadoc.io/doc/net.md-5/bungeecord-chat/1.16-R0.4/", // don't link to bungee chat // Parchment - revert + "https://jd.advntr.dev/api/$adventureVersion/", + "https://jd.advntr.dev/text-minimessage/$adventureVersion/", + "https://jd.advntr.dev/text-serializer-gson/$adventureVersion/", diff --git a/patches/server/0001-Build-changes.patch b/patches/server/0001-Build-changes.patch index 575bb1a..ca06e35 100644 --- a/patches/server/0001-Build-changes.patch +++ b/patches/server/0001-Build-changes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Build changes diff --git a/build.gradle.kts b/build.gradle.kts -index d5d49bb2b47c889e12d17dc87b8c439a60b3fe67..6c358d32b06c2064be5301a243fd1929a3f02b21 100644 +index 9cf389defdaeb887e9cad4f0fed3f3b95667b238..3bd719aace9df13f5d82a6206fb46913efbc4f9f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,8 +7,8 @@ plugins { @@ -19,7 +19,7 @@ index d5d49bb2b47c889e12d17dc87b8c439a60b3fe67..6c358d32b06c2064be5301a243fd1929 // Paper start implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("net.minecrell:terminalconsoleappender:1.3.0") -@@ -61,7 +61,7 @@ tasks.jar { +@@ -62,7 +62,7 @@ tasks.jar { attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "CraftBukkit", @@ -28,7 +28,7 @@ index d5d49bb2b47c889e12d17dc87b8c439a60b3fe67..6c358d32b06c2064be5301a243fd1929 "Implementation-Vendor" to date, // Paper "Specification-Title" to "Bukkit", "Specification-Version" to project.version, -@@ -78,7 +78,27 @@ tasks.jar { +@@ -79,7 +79,27 @@ tasks.jar { publishing { publications.create("maven") { @@ -57,7 +57,7 @@ index d5d49bb2b47c889e12d17dc87b8c439a60b3fe67..6c358d32b06c2064be5301a243fd1929 } } -@@ -133,7 +153,7 @@ fun TaskContainer.registerRunTask( +@@ -134,7 +154,7 @@ fun TaskContainer.registerRunTask( name: String, block: JavaExec.() -> Unit ): TaskProvider = register(name) { @@ -104,10 +104,10 @@ index bf42969859545a8a520923ef1836ffa4a5cc24a0..2532e265c5dade55f71c34fcab6d1e74 org.bukkit.Bukkit.getLogger().warning("Version: " + org.bukkit.Bukkit.getBukkitVersion()); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 710ca7d3a5659953f64bc6dccdd93b43300961cc..60b57dcd40a0fc8d6e8a44ce3fb198a7a8e82aef 100644 +index 081871412e92ce909ad9c51a8d18ede53596c049..60c4cccf67bd043b275310842d640803f8853278 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1654,7 +1654,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { -diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -index 2848cb7c76e94d8349f042dc92daf01322a6ce5a..39aa0d0120c1e65377b17a9dca29c817c6b66e7a 100644 ---- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java -+++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -@@ -11,6 +11,7 @@ import net.minecraft.world.entity.projectile.FireworkRocketEntity; - import net.minecraft.world.entity.projectile.WitherSkull; - import net.minecraft.world.level.Explosion; - import net.minecraft.world.phys.Vec3; -+import org.bukkit.Location; - - public class DamageSource { - -@@ -74,6 +75,20 @@ public class DamageSource { - return this; - } - // Paper end -+ -+ // Parchment start -+ private @Nullable org.bukkit.Location location; -+ -+ public @Nullable org.bukkit.Location getLocation() { -+ return location; -+ } -+ -+ public DamageSource location(@Nullable org.bukkit.Location location) { -+ this.location = location; -+ return this; -+ } -+ // Parchment end -+ - public @Nullable org.bukkit.block.BlockState explodedBlockState; // Paper - add exploded state - - public static DamageSource fallingBlock(Entity attacker) { -@@ -137,7 +152,7 @@ public class DamageSource { - } - - public static DamageSource explosion(@Nullable Explosion explosion) { -- return explosion != null ? DamageSource.explosion(explosion.getDirectSourceEntity(), explosion.getIndirectSourceEntity()) : DamageSource.explosion((Entity) null, (Entity) null); -+ return explosion != null ? DamageSource.explosion(explosion.getDirectSourceEntity(), explosion.getIndirectSourceEntity()).location(explosion.getBukkitLocation()) : DamageSource.explosion((Entity) null, (Entity) null); - } - - public static DamageSource explosion(@Nullable Entity explosion, @Nullable Entity attacker) { -@@ -154,7 +169,8 @@ public class DamageSource { - return badRespawnPointExplosion(pos, null); - } - public static DamageSource badRespawnPointExplosion(Vec3 pos, @Nullable org.bukkit.block.BlockState explodedBlockState) { -- DamageSource source = new BadRespawnPointDamage(pos); -+ Location loc = new Location(explodedBlockState.getWorld(), pos.x, pos.y, pos.z); -+ DamageSource source = new BadRespawnPointDamage(loc); - source.explodedBlockState = explodedBlockState; - return source; - // Paper end -diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index c7caaebfb4b9f28cbe700d88fdcf232a500e8ca7..7105fb85c0e689c9ac5201e09c0a0c614aba737c 100644 ---- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -+++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -98,7 +98,7 @@ public class EnderDragon extends Mob implements Enemy { - private final Node[] nodes = new Node[24]; - private final int[] nodeAdjacency = new int[24]; - private final BinaryHeap openSet = new BinaryHeap(); -- private Explosion explosionSource = new Explosion(null, this, null, null, Double.NaN, Double.NaN, Double.NaN, Float.NaN, true, Explosion.BlockInteraction.DESTROY); // CraftBukkit - reusable source for CraftTNTPrimed.getSource() -+ private Explosion explosionSource;// = new Explosion(null, this, null, null, Double.NaN, Double.NaN, Double.NaN, Float.NaN, true, Explosion.BlockInteraction.DESTROY); // CraftBukkit - reusable source for CraftTNTPrimed.getSource() // Parchment - moved into contructor to fix null world - // Paper start - add var for save custom podium - @Nullable - private BlockPos podium; -@@ -106,6 +106,7 @@ public class EnderDragon extends Mob implements Enemy { - - public EnderDragon(EntityType entitytypes, Level world) { - super(EntityType.ENDER_DRAGON, world); -+ explosionSource = new Explosion(world, this, null, null, Double.NaN, Double.NaN, Double.NaN, Float.NaN, true, Explosion.BlockInteraction.DESTROY); // Parchment - fix null world - this.subEntities = new EnderDragonPart[]{this.head, this.neck, this.body, this.tail1, this.tail2, this.tail3, this.wing1, this.wing2}; - this.setHealth(this.getMaxHealth()); - this.noPhysics = true; -diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index a213f4098859858a73ddd601bbe8c7511972e0d5..1890942b4dd70dd64bb061a166eaecbfad24a7ad 100644 ---- a/src/main/java/net/minecraft/world/level/Explosion.java -+++ b/src/main/java/net/minecraft/world/level/Explosion.java -@@ -495,6 +495,13 @@ public class Explosion { - return this.toBlow; - } - -+ // Parchment start -+ public @Nullable Location getBukkitLocation() { -+ if (this.level == null) return null; -+ return new Location(level.getWorld(), x, y, z); -+ } -+ // Parchment end -+ - public static enum BlockInteraction { - - KEEP, DESTROY, DESTROY_WITH_DECAY; diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index d63e123b5f7c36d5010f242a273f26963ad3b4b4..29e18c86bbfc8517bae76af62fd1bd4120ec31cc 100644 +index 451088940d1db0f32c29d0fd192c97b50cf3c4c8..1567206096d5010d5d4d9d58dcaaa7b6f6715943 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -972,7 +972,7 @@ public class CraftEventFactory { @@ -122,14 +13,14 @@ index d63e123b5f7c36d5010f242a273f26963ad3b4b4..29e18c86bbfc8517bae76af62fd1bd41 EntityDamageEvent event; if (damager == null) { - event = new EntityDamageByBlockEvent(null, entity.getBukkitEntity(), DamageCause.BLOCK_EXPLOSION, modifiers, modifierFunctions); -+ event = new EntityDamageByBlockEvent(null, entity.getBukkitEntity(), DamageCause.BLOCK_EXPLOSION, source.getLocation(), modifiers, modifierFunctions); ++ event = new EntityDamageByBlockEvent(null, entity.getBukkitEntity(), DamageCause.BLOCK_EXPLOSION, source.getEntity().getBukkitEntity().getLocation(), modifiers, modifierFunctions); } else if (entity instanceof EnderDragon && /*PAIL FIXME ((EntityEnderDragon) entity).target == damager*/ false) { event = new EntityDamageEvent(entity.getBukkitEntity(), DamageCause.ENTITY_EXPLOSION, modifiers, modifierFunctions); } else { @@ -1012,7 +1012,7 @@ public class CraftEventFactory { return CraftEventFactory.callEntityDamageEvent(damager, entity, cause, modifiers, modifierFunctions, cancelled, source.isCritical()); // Paper - add critical damage API - } else if (source == DamageSource.OUT_OF_WORLD) { + } else if (sourceType == DamageTypes.OUT_OF_WORLD) { - EntityDamageEvent event = new EntityDamageByBlockEvent(null, entity.getBukkitEntity(), DamageCause.VOID, modifiers, modifierFunctions); + EntityDamageEvent event = new EntityDamageByBlockEvent(null, entity.getBukkitEntity(), DamageCause.VOID, entity.getBukkitEntity().getLocation(), modifiers, modifierFunctions); event.setCancelled(cancelled); @@ -138,7 +29,7 @@ index d63e123b5f7c36d5010f242a273f26963ad3b4b4..29e18c86bbfc8517bae76af62fd1bd41 @@ -1022,7 +1022,7 @@ public class CraftEventFactory { } return event; - } else if (source == DamageSource.LAVA) { + } else if (sourceType == DamageTypes.LAVA) { - EntityDamageEvent event = (new EntityDamageByBlockEvent(CraftEventFactory.blockDamage, entity.getBukkitEntity(), DamageCause.LAVA, modifiers, modifierFunctions)); + EntityDamageEvent event = (new EntityDamageByBlockEvent(CraftEventFactory.blockDamage, entity.getBukkitEntity(), DamageCause.LAVA, entity.getBukkitEntity().getLocation(), modifiers, modifierFunctions)); event.setCancelled(cancelled); diff --git a/patches/server/0006-Add-UnsafeValues-canPlaceItemOn.patch b/patches/server/0006-Add-UnsafeValues-canPlaceItemOn.patch index f4a47e7..9f23299 100644 --- a/patches/server/0006-Add-UnsafeValues-canPlaceItemOn.patch +++ b/patches/server/0006-Add-UnsafeValues-canPlaceItemOn.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add UnsafeValues#canPlaceItemOn diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 17336102d37a5ab05c3b3c93fcf46961d0ffa7e2..9e7df62dde2f0b526efc4f14e690e592ba80dea4 100644 +index 64c50c52c11214740de7903e5592b8b6b2c170b3..be2739875ba1ba1a973c4a45c7e6a6996f0daf31 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -622,6 +622,55 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -618,6 +618,55 @@ public final class CraftMagicNumbers implements UnsafeValues { } // Paper end diff --git a/patches/server/0007-Expose-EntityType-Ordinals.patch b/patches/server/0007-Expose-EntityType-Ordinals.patch index 93b6154..3cce827 100644 --- a/patches/server/0007-Expose-EntityType-Ordinals.patch +++ b/patches/server/0007-Expose-EntityType-Ordinals.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expose EntityType Ordinals diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 4589f7db68f7a72065c85c0a50216c6d02658f1e..86e31d14858bd32993059b39af64f74d9d65c84f 100644 +index ceacc0d383e2ee674783d3c0a7df0a951595faca..72b5ce4c93c021ca2f3f1d65b45fdd8cd50d71f4 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java -@@ -161,6 +161,8 @@ import org.slf4j.Logger; +@@ -162,6 +162,8 @@ import org.slf4j.Logger; public class EntityType implements FeatureElement, EntityTypeTest { @@ -17,7 +17,7 @@ index 4589f7db68f7a72065c85c0a50216c6d02658f1e..86e31d14858bd32993059b39af64f74d private static final Logger LOGGER = LogUtils.getLogger(); public static final String ENTITY_TAG = "EntityTag"; private final Holder.Reference> builtInRegistryHolder; -@@ -303,9 +305,32 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -310,9 +312,32 @@ public class EntityType implements FeatureElement, EntityTypeT private final FeatureFlagSet requiredFeatures; private static EntityType register(String id, EntityType.Builder type) { // CraftBukkit - decompile error @@ -52,10 +52,10 @@ index 4589f7db68f7a72065c85c0a50216c6d02658f1e..86e31d14858bd32993059b39af64f74d return BuiltInRegistries.ENTITY_TYPE.getKey(type); } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 9e7df62dde2f0b526efc4f14e690e592ba80dea4..7d467404416007cd0682eefec7eff8886299fb98 100644 +index be2739875ba1ba1a973c4a45c7e6a6996f0daf31..a6eab579c0f4cc6039bdd9914dd770c796b75d3c 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -669,6 +669,18 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -665,6 +665,18 @@ public final class CraftMagicNumbers implements UnsafeValues { final net.minecraft.world.item.context.BlockPlaceContext ctx = context; return future.completeAsync(() -> blockItem.canPlace(ctx, blockState), io.papermc.paper.util.MCUtil.MAIN_EXECUTOR); } diff --git a/patches/server/0008-Add-Player-setGameProfile.patch b/patches/server/0008-Add-Player-setGameProfile.patch index bee3776..587e646 100644 --- a/patches/server/0008-Add-Player-setGameProfile.patch +++ b/patches/server/0008-Add-Player-setGameProfile.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add Player#setGameProfile diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 07f8e2bfabd9292b9f594bf408d40fc939497a1c..6237d023fe6e449077cb53d93f003ae92dc6b4a0 100644 +index 8a59514b2c343c935403ef8f4805bfa3e7f89bcc..e428299aff0a75b8a9a82cac13429a6dc7ea7002 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -1504,6 +1504,12 @@ public abstract class Player extends LivingEntity { +@@ -1503,6 +1503,12 @@ public abstract class Player extends LivingEntity { return this.gameProfile; } diff --git a/patches/server/0009-Expose-MCUtil-Executors.patch b/patches/server/0009-Expose-MCUtil-Executors.patch index 85a254f..c1a03df 100644 --- a/patches/server/0009-Expose-MCUtil-Executors.patch +++ b/patches/server/0009-Expose-MCUtil-Executors.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expose MCUtil Executors diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 71d050445caa5dc22bf9b6070db92272c7b104f6..0ac6768fea72e4c92165ca0a6d3a9dafa59b2548 100644 +index 2a8ad9afaa53d80d3926d9f1e1181c54aa8a849e..bc70b8d1e0954196a82e8673bc49b9438a4d838f 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2938,4 +2938,16 @@ public final class CraftServer implements Server { +@@ -2919,4 +2919,16 @@ public final class CraftServer implements Server { } // Paper end diff --git a/patches/server/0011-Add-BlockDropResourcesEvent.patch b/patches/server/0011-Add-BlockDropResourcesEvent.patch index 52921f0..8681f9c 100644 --- a/patches/server/0011-Add-BlockDropResourcesEvent.patch +++ b/patches/server/0011-Add-BlockDropResourcesEvent.patch @@ -8,12 +8,12 @@ to easily get the items being dropped by any block instead of only blocks broken by players. diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index 7b71073027f4cf79736546500ededdfbb83d968e..b0002a52d15a250e958aa41ddf3cc2296182363d 100644 +index 4f91e4832a94c3facbc711fcae4cb5ad540a5ca0..c357e09705c5405dc8fac666fc39c993febdee50 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java @@ -306,7 +306,7 @@ public class Block extends BlockBehaviour implements ItemLike { ServerLevel worldserver = lootContext.getLevel(); - BlockPos blockposition = new BlockPos((Vec3) lootContext.getParameter(LootContextParams.ORIGIN)); + BlockPos blockposition = BlockPos.containing((Position) lootContext.getParameter(LootContextParams.ORIGIN)); - state.getDrops(lootContext).forEach((itemstack) -> { + org.bukkit.craftbukkit.event.CraftEventFactory.callBlockDropResourcesEvent(worldserver, blockposition, state.getDrops(lootContext)).forEach((itemstack) -> { // Parchment @@ -38,20 +38,21 @@ index 7b71073027f4cf79736546500ededdfbb83d968e..b0002a52d15a250e958aa41ddf3cc229 Block.popResource((ServerLevel) world, pos, itemstack); }); state.spawnAfterBreak((ServerLevel) world, pos, ItemStack.EMPTY, true); -@@ -351,7 +351,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -351,7 +351,8 @@ public class Block extends BlockBehaviour implements ItemLike { - public static void dropResources(BlockState state, Level world, BlockPos pos, @Nullable BlockEntity blockEntity, Entity entity, ItemStack stack) { + public static void dropResources(BlockState state, Level world, BlockPos pos, @Nullable BlockEntity blockEntity, Entity entity, ItemStack tool) { if (world instanceof ServerLevel) { -- Block.getDrops(state, (ServerLevel) world, pos, blockEntity, entity, stack).forEach((itemstack1) -> { -+ org.bukkit.craftbukkit.event.CraftEventFactory.callBlockDropResourcesEvent(world, pos, Block.getDrops(state, (ServerLevel) world, pos, blockEntity, entity, stack)).forEach((itemstack1) -> { // Parchment +- Block.getDrops(state, (ServerLevel) world, pos, blockEntity, entity, tool).forEach((itemstack1) -> { ++ ++ org.bukkit.craftbukkit.event.CraftEventFactory.callBlockDropResourcesEvent(world, pos, Block.getDrops(state, (ServerLevel) world, pos, blockEntity, entity, tool)).forEach((itemstack1) -> { // Parchment Block.popResource(world, pos, itemstack1); }); - state.spawnAfterBreak((ServerLevel) world, pos, stack, true); + state.spawnAfterBreak((ServerLevel) world, pos, tool, true); diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 2f33f32852de0ba4f175a26f30c384a7b1269c3a..c525ee0d113662a254d38e42d2b28b7f3420ff0b 100644 +index 1567206096d5010d5d4d9d58dcaaa7b6f6715943..ae6026a6bccfa70c06c96925175608db4a37781d 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1987,5 +1987,19 @@ public class CraftEventFactory { +@@ -1991,5 +1991,19 @@ public class CraftEventFactory { } }); } diff --git a/patches/server/0012-Add-Furnace-Recipe-API.patch b/patches/server/0012-Add-Furnace-Recipe-API.patch index 1c0ef31..85cb8fc 100644 --- a/patches/server/0012-Add-Furnace-Recipe-API.patch +++ b/patches/server/0012-Add-Furnace-Recipe-API.patch @@ -215,10 +215,10 @@ index 0000000000000000000000000000000000000000..e7114e456f818d7bdd4081620f4b9b93 + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index f8d321e925bf2708e51590542325c1bdc67d5964..c747c07b78f28b1fbc227148cc898826c718f943 100644 +index 5e9055fdf411029ea2fed91acd6b981f79156418..9f719150a0369ddb76da88635e05ff701759a1ed 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2379,4 +2379,11 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2395,4 +2395,11 @@ public class CraftWorld extends CraftRegionAccessor implements World { return this.adventure$pointers; } // Paper end @@ -226,7 +226,7 @@ index f8d321e925bf2708e51590542325c1bdc67d5964..c747c07b78f28b1fbc227148cc898826 + // Parchment start + @Override + public ItemStack smeltItem(ItemStack toSmelt, gg.projecteden.parchment.inventory.RecipeType recipeType) { -+ return world.getRecipeManager().getRecipeFor(gg.projecteden.parchment.inventory.CraftRecipeType.asCookingRecipe(recipeType), new gg.projecteden.parchment.inventory.SingletonContainer(toSmelt), world).map(recipe -> recipe.getResultItem().getBukkitStack()).orElse(null); ++ return world.getRecipeManager().getRecipeFor(gg.projecteden.parchment.inventory.CraftRecipeType.asCookingRecipe(recipeType), new gg.projecteden.parchment.inventory.SingletonContainer(toSmelt), world).map(recipe -> recipe.getResultItem(world.registryAccess()).getBukkitStack()).orElse(null); + } + // Parchment end } diff --git a/patches/server/0013-Disable-sleep-status-announcements.patch b/patches/server/0013-Disable-sleep-status-announcements.patch index ce57141..f47ad63 100644 --- a/patches/server/0013-Disable-sleep-status-announcements.patch +++ b/patches/server/0013-Disable-sleep-status-announcements.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Disable sleep status announcements diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 09d1206170bd0257bdf24741cfed6c1774886bac..8ee9d63cbd2805d33bf0bf4ac2a1d8f2f8377e2d 100644 +index 30c05db4ad0fcd5aa83cb3168ed32c7b0d205972..206bc729f24f679bed3b945b640778873699676a 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -975,7 +975,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -974,7 +974,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } private void announceSleepStatus() { diff --git a/patches/server/0014-Add-config-for-ticking-TIME_SINCE_REST.patch b/patches/server/0014-Add-config-for-ticking-TIME_SINCE_REST.patch index fe0d27f..c912d4f 100644 --- a/patches/server/0014-Add-config-for-ticking-TIME_SINCE_REST.patch +++ b/patches/server/0014-Add-config-for-ticking-TIME_SINCE_REST.patch @@ -17,10 +17,10 @@ index 4532f3a0d74feae0a1249b53e1bfbc18a8808b32..c66db0468a9ab09cc89805e7bf7be09e public PillagerPatrols pillagerPatrols; diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 6237d023fe6e449077cb53d93f003ae92dc6b4a0..b6da54cbb620a3ec849db912b8a6b903f0b28946 100644 +index e428299aff0a75b8a9a82cac13429a6dc7ea7002..defe3bdf04b274f16e99c7d25e5f167480465c09 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -288,7 +288,7 @@ public abstract class Player extends LivingEntity { +@@ -291,7 +291,7 @@ public abstract class Player extends LivingEntity { this.awardStat(Stats.CROUCH_TIME); } diff --git a/patches/server/0015-Add-HangingFrame-Tick-API.patch b/patches/server/0015-Add-HangingFrame-Tick-API.patch index 62caef8..ab7c7d6 100644 --- a/patches/server/0015-Add-HangingFrame-Tick-API.patch +++ b/patches/server/0015-Add-HangingFrame-Tick-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add HangingFrame Tick API diff --git a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java -index 334a47b5e0d205c57dfcbb17168cbd3f21d15606..1ffc318c12cde935aea58d6d1efff53818893bf9 100644 +index f7d031e9a5aa533d78a49ed6147dd47dd0f27f01..a22139bd4202237eb6977b95786b9a3647821874 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java +++ b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java -@@ -41,6 +41,7 @@ public abstract class HangingEntity extends Entity { +@@ -42,6 +42,7 @@ public abstract class HangingEntity extends Entity { private int checkInterval; { this.checkInterval = this.getId() % this.level.spigotConfig.hangingTickFrequency; } // Paper public BlockPos pos; protected Direction direction; @@ -16,7 +16,7 @@ index 334a47b5e0d205c57dfcbb17168cbd3f21d15606..1ffc318c12cde935aea58d6d1efff538 protected HangingEntity(EntityType type, Level world) { super(type, world); -@@ -116,7 +117,7 @@ public abstract class HangingEntity extends Entity { +@@ -117,7 +118,7 @@ public abstract class HangingEntity extends Entity { @Override public void tick() { diff --git a/patches/server/0016-Add-Player-getHiddenEntities-API.patch b/patches/server/0016-Add-Player-getHiddenEntities-API.patch index e26446d..36c4002 100644 --- a/patches/server/0016-Add-Player-getHiddenEntities-API.patch +++ b/patches/server/0016-Add-Player-getHiddenEntities-API.patch @@ -5,24 +5,24 @@ Subject: [PATCH] Add Player#getHiddenEntities API diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index b32f44beab2c9790ee2da8403e362e8b3ecc6175..6ce67ec49d0784e44e92d8735270996be11436af 100644 +index eca5e6b93dd84307bf9dbadf32414d6f506e69dc..7e6b452df1915b1a6ebcc3bfd8f8ace5258fada4 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1797,6 +1797,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - registerEntity(player); - } +@@ -1898,6 +1898,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + server.getPluginManager().callEvent(new PlayerShowEntityEvent(this, entity)); // Paper } + // Paper start + + // Parchment start + @Override + public Set getHiddenEntities(Plugin plugin) { -+ return hiddenEntities.entrySet().stream() ++ return invertedVisibilityEntities.entrySet().stream() + .filter(entry -> entry.getValue().contains(CraftPlayer.getPluginWeakReference(plugin))) + .map(Map.Entry::getKey) + .collect(java.util.stream.Collectors.toSet()); + } -+ // Parchment end ++ // Parchment end + + @Override public void setPlayerProfile(com.destroystokyo.paper.profile.PlayerProfile profile) { - ServerPlayer self = getHandle(); - self.gameProfile = com.destroystokyo.paper.profile.CraftPlayerProfile.asAuthlibCopy(profile); + ServerPlayer self = this.getHandle(); diff --git a/patches/server/0019-Expanded-Insomnia-API.patch b/patches/server/0019-Expanded-Insomnia-API.patch index f89fe75..7be52b4 100644 --- a/patches/server/0019-Expanded-Insomnia-API.patch +++ b/patches/server/0019-Expanded-Insomnia-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expanded Insomnia API diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 6ce67ec49d0784e44e92d8735270996be11436af..51bb661fe3f45dbcf0c94779413fb7aabc04f9b2 100644 +index 7e6b452df1915b1a6ebcc3bfd8f8ace5258fada4..409e17894e61b2a3498f82db3d3e8be9bfaee007 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -75,6 +75,7 @@ import net.minecraft.server.network.ServerGamePacketListenerImpl; +@@ -76,6 +76,7 @@ import net.minecraft.server.network.ServerGamePacketListenerImpl; import net.minecraft.server.players.UserWhiteListEntry; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.entity.Entity; @@ -16,7 +16,7 @@ index 6ce67ec49d0784e44e92d8735270996be11436af..51bb661fe3f45dbcf0c94779413fb7aa import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.ai.attributes.AttributeMap; import net.minecraft.world.entity.ai.attributes.Attributes; -@@ -178,6 +179,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -179,6 +180,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { private static final boolean DISABLE_CHANNEL_LIMIT = System.getProperty("paper.disableChannelLimit") != null; // Paper - add a flag to disable the channel limit private long lastSaveTime; // Paper end @@ -24,7 +24,7 @@ index 6ce67ec49d0784e44e92d8735270996be11436af..51bb661fe3f45dbcf0c94779413fb7aa public CraftPlayer(CraftServer server, ServerPlayer entity) { super(server, entity); -@@ -1874,6 +1876,33 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2007,6 +2009,33 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this; } diff --git a/patches/server/0020-Add-spam-bypass-permission.patch b/patches/server/0020-Add-spam-bypass-permission.patch index e8a6f49..7e6c558 100644 --- a/patches/server/0020-Add-spam-bypass-permission.patch +++ b/patches/server/0020-Add-spam-bypass-permission.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add spam bypass permission diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 3472f7f9b98d6d9c9f6465872803ef17fa67486d..70b539b115179ac32cb5c1a72a68d6bc90b5c465 100644 +index 2d8488b9aa088b6d5f0c7e557b8ad0b29bc4cd88..64848434496e4897b696f975c330756befa1e9b4 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -863,16 +863,19 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -865,16 +865,19 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic public void handleCustomCommandSuggestions(ServerboundCommandSuggestionPacket packet) { // PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel()); // Paper - run this async // CraftBukkit start @@ -29,7 +29,7 @@ index 3472f7f9b98d6d9c9f6465872803ef17fa67486d..70b539b115179ac32cb5c1a72a68d6bc // Paper end // CraftBukkit end // Paper start - Don't suggest if tab-complete is disabled -@@ -2553,6 +2556,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2547,6 +2550,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic // Spigot start - spam exclusions private void detectRateSpam(String s) { @@ -37,7 +37,7 @@ index 3472f7f9b98d6d9c9f6465872803ef17fa67486d..70b539b115179ac32cb5c1a72a68d6bc // CraftBukkit start - replaced with thread safe throttle boolean counted = true; for ( String exclude : org.spigotmc.SpigotConfig.spamExclusions ) -@@ -3248,10 +3252,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -3268,10 +3272,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic public void handlePlaceRecipe(ServerboundPlaceRecipePacket packet) { // Paper start if (!org.bukkit.Bukkit.isPrimaryThread()) { diff --git a/patches/server/0021-Disable-set-respawn-message.patch b/patches/server/0021-Disable-set-respawn-message.patch index 4b53c60..8afe20b 100644 --- a/patches/server/0021-Disable-set-respawn-message.patch +++ b/patches/server/0021-Disable-set-respawn-message.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Disable set respawn message diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 9bf14867aada68e68e5931170a3bd7231215178a..05bb50a0419fe12ae8791f18438951c13b1b6399 100644 +index a793532ae1786d9c8fc04d21f49c69b336fd8cfb..ffe4234cf6dac5b3055a31f2a133e943451b307a 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2223,10 +2223,10 @@ public class ServerPlayer extends Player { +@@ -2209,10 +2209,10 @@ public class ServerPlayer extends Player { angle = (float) event.getLocation().getYaw(); forced = event.isForced(); // Paper end diff --git a/patches/server/0023-Remove-Unneeded-Override.patch b/patches/server/0023-Remove-Unneeded-Override.patch index ea646c8..b82631f 100644 --- a/patches/server/0023-Remove-Unneeded-Override.patch +++ b/patches/server/0023-Remove-Unneeded-Override.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Remove Unneeded Override diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 1bf7e21cd3b981013ff634dfc070d572af491da9..a45de4db8a73cea947c76771f9e540f6e64763bb 100644 +index 206bc729f24f679bed3b945b640778873699676a..e035ee2e499c6322c08ce6aa14fdebe134777fa2 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1737,7 +1737,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1736,7 +1736,6 @@ public class ServerLevel extends Level implements WorldGenLevel { // Parchment end } diff --git a/patches/server/0024-Remove-Hanging-Entity-Debug.patch b/patches/server/0024-Remove-Hanging-Entity-Debug.patch index 36f8377..9acb89c 100644 --- a/patches/server/0024-Remove-Hanging-Entity-Debug.patch +++ b/patches/server/0024-Remove-Hanging-Entity-Debug.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Remove Hanging Entity Debug diff --git a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java -index 1ffc318c12cde935aea58d6d1efff53818893bf9..7ace41bc1a215849cae36a2642aade6f676882f0 100644 +index a22139bd4202237eb6977b95786b9a3647821874..47e93f5a3e9f8a71a121be0309e1307b1241bcf7 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java +++ b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java -@@ -272,7 +272,7 @@ public abstract class HangingEntity extends Entity { +@@ -273,7 +273,7 @@ public abstract class HangingEntity extends Entity { BlockPos blockposition = new BlockPos(nbt.getInt("TileX"), nbt.getInt("TileY"), nbt.getInt("TileZ")); if (!blockposition.closerThan(this.blockPosition(), 16.0D)) { From 7646770baa374677745e079425244135253ba025 Mon Sep 17 00:00:00 2001 From: Blast-Mc Date: Thu, 16 Mar 2023 23:20:20 -0400 Subject: [PATCH 06/10] Add PreEntityShootBowEvent --- .../api/0017-Add-PreEntityShootBowEvent.patch | 73 +++++++++ .../0025-Add-PreEntityShootBowEvent.patch | 149 ++++++++++++++++++ 2 files changed, 222 insertions(+) create mode 100644 patches/api/0017-Add-PreEntityShootBowEvent.patch create mode 100644 patches/server/0025-Add-PreEntityShootBowEvent.patch diff --git a/patches/api/0017-Add-PreEntityShootBowEvent.patch b/patches/api/0017-Add-PreEntityShootBowEvent.patch new file mode 100644 index 0000000..6b955ca --- /dev/null +++ b/patches/api/0017-Add-PreEntityShootBowEvent.patch @@ -0,0 +1,73 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Blast-MC +Date: Thu, 16 Mar 2023 23:10:47 -0400 +Subject: [PATCH] Add PreEntityShootBowEvent + + +diff --git a/src/main/java/gg/projecteden/parchment/event/entity/PreEntityShootBowEvent.java b/src/main/java/gg/projecteden/parchment/event/entity/PreEntityShootBowEvent.java +new file mode 100644 +index 0000000000000000000000000000000000000000..7368e7b039882dd629d187502c5c90d74471590e +--- /dev/null ++++ b/src/main/java/gg/projecteden/parchment/event/entity/PreEntityShootBowEvent.java +@@ -0,0 +1,61 @@ ++package gg.projecteden.parchment.event.entity; ++ ++import org.bukkit.entity.Entity; ++import org.bukkit.event.Cancellable; ++import org.bukkit.event.Event; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.entity.EntityEvent; ++import org.bukkit.inventory.ItemStack; ++import org.jetbrains.annotations.NotNull; ++ ++public class PreEntityShootBowEvent extends EntityEvent implements Cancellable { ++ private static final HandlerList handlers = new HandlerList(); ++ ++ private final ItemStack bow; ++ private final ItemStack arrow; ++ boolean relative = false; ++ boolean cancelled = false; ++ ++ public PreEntityShootBowEvent(Entity entity, ItemStack bow, ItemStack arrow) { ++ super(entity); ++ this.bow = bow; ++ this.arrow = arrow; ++ } ++ ++ public ItemStack getBow() { ++ return this.bow; ++ } ++ ++ public ItemStack getArrow() { ++ return this.arrow; ++ } ++ ++ public boolean isRelative() { ++ return this.relative; ++ } ++ ++ public void setRelative(boolean relative) { ++ this.relative = relative; ++ } ++ ++ @Override ++ public boolean isCancelled() { ++ return this.cancelled; ++ } ++ ++ @Override ++ public void setCancelled(boolean cancel) { ++ this.cancelled = cancel; ++ } ++ ++ @Override ++ public @NotNull HandlerList getHandlers() { ++ return handlers; ++ } ++ ++ @NotNull ++ public static HandlerList getHandlerList() { ++ return handlers; ++ } ++ ++} diff --git a/patches/server/0025-Add-PreEntityShootBowEvent.patch b/patches/server/0025-Add-PreEntityShootBowEvent.patch new file mode 100644 index 0000000..f92a5fe --- /dev/null +++ b/patches/server/0025-Add-PreEntityShootBowEvent.patch @@ -0,0 +1,149 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Blast-MC +Date: Thu, 16 Mar 2023 23:11:05 -0400 +Subject: [PATCH] Add PreEntityShootBowEvent + + +diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +index f2094c52196b45adfd51d8aebcc4c46b779b0925..0498d3d0cee58e10351bd8c4ce7b9a3dbc862d09 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java ++++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +@@ -199,13 +199,19 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo + @Override + public void performRangedAttack(LivingEntity target, float pullProgress) { + ItemStack itemstack = this.getProjectile(this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, Items.BOW))); ++ ++ gg.projecteden.parchment.event.entity.PreEntityShootBowEvent preEvent = new gg.projecteden.parchment.event.entity.PreEntityShootBowEvent(this.getBukkitEntity(), this.getMainHandItem().asBukkitCopy(), itemstack.asBukkitCopy()); ++ if (preEvent.callEvent()) { ++ return; ++ } ++ + AbstractArrow entityarrow = this.getArrow(itemstack, pullProgress); + double d0 = target.getX() - this.getX(); + double d1 = target.getY(0.3333333333333333D) - entityarrow.getY(); + double d2 = target.getZ() - this.getZ(); + double d3 = Math.sqrt(d0 * d0 + d2 * d2); + +- entityarrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float) (14 - this.level.getDifficulty().getId() * 4)); ++ entityarrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float) (14 - this.level.getDifficulty().getId() * 4), preEvent.isRelative()); + // CraftBukkit start + org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(this, this.getMainHandItem(), entityarrow.getPickupItem(), entityarrow, net.minecraft.world.InteractionHand.MAIN_HAND, 0.8F, true); // Paper + if (event.isCancelled()) { +diff --git a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java +index 10573602c9bc73713cbd6989762d3dbb6f6fcf8c..b65c31bc257e362247855faabf49aec6347cec86 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java +@@ -189,13 +189,19 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { + @Override + public void performRangedAttack(LivingEntity target, float pullProgress) { + ItemStack itemstack = this.getProjectile(this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, Items.BOW))); ++ ++ gg.projecteden.parchment.event.entity.PreEntityShootBowEvent preEvent = new gg.projecteden.parchment.event.entity.PreEntityShootBowEvent(this.getBukkitEntity(), this.getMainHandItem().asBukkitCopy(), itemstack.asBukkitCopy()); ++ if (preEvent.callEvent()) { ++ return; ++ } ++ + AbstractArrow entityarrow = ProjectileUtil.getMobArrow(this, itemstack, pullProgress); + double d0 = target.getX() - this.getX(); + double d1 = target.getY(0.3333333333333333D) - entityarrow.getY(); + double d2 = target.getZ() - this.getZ(); + double d3 = Math.sqrt(d0 * d0 + d2 * d2); + +- entityarrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float) (14 - this.level.getDifficulty().getId() * 4)); ++ entityarrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float) (14 - this.level.getDifficulty().getId() * 4), preEvent.isRelative()); + // Paper start + org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(this, this.getMainHandItem(), entityarrow.getPickupItem(), entityarrow, target.getUsedItemHand(), 0.8F, true); + if (event.isCancelled()) { +diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +index 5d6d26cfe8f0ab68a3145214b3fc126ca7a71a66..e43357fd32866c340bf8a8cfe415529941512f22 100644 +--- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java ++++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +@@ -129,8 +129,8 @@ public abstract class AbstractArrow extends Projectile { + } + + @Override +- public void shoot(double x, double y, double z, float speed, float divergence) { +- super.shoot(x, y, z, speed, divergence); ++ public void shoot(double x, double y, double z, float speed, float divergence, boolean relative) { ++ super.shoot(x, y, z, speed, divergence, relative); + this.life = 0; + } + +diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +index 8b2a3a8482018b7db7de81bc295862f783e17ce5..bab146d88cf52e44087868a06ccdfcee67adf2b9 100644 +--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java ++++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +@@ -145,9 +145,15 @@ public abstract class Projectile extends Entity implements TraceableEntity { + } + + public void shoot(double x, double y, double z, float speed, float divergence) { ++ shoot(x, y, z, speed, divergence, true); ++ } ++ ++ public void shoot(double x, double y, double z, float speed, float divergence, boolean relative) { + Vec3 vec3d = (new Vec3(x, y, z)).normalize().add(this.random.triangle(0.0D, 0.0172275D * (double) divergence), this.random.triangle(0.0D, 0.0172275D * (double) divergence), this.random.triangle(0.0D, 0.0172275D * (double) divergence)).scale((double) speed); + +- this.setDeltaMovement(vec3d); ++ if (relative) { ++ this.setDeltaMovement(vec3d); ++ } + double d3 = vec3d.horizontalDistance(); + + this.setYRot((float) (Mth.atan2(vec3d.x, vec3d.z) * 57.2957763671875D)); +@@ -157,6 +163,10 @@ public abstract class Projectile extends Entity implements TraceableEntity { + } + + public void shootFromRotation(Entity shooter, float pitch, float yaw, float roll, float speed, float divergence) { ++ this.shootFromRotation(shooter, pitch, yaw, roll, speed, divergence, true); ++ } ++ ++ public void shootFromRotation(Entity shooter, float pitch, float yaw, float roll, float speed, float divergence, boolean relative) { + float f5 = -Mth.sin(yaw * 0.017453292F) * Mth.cos(pitch * 0.017453292F); + float f6 = -Mth.sin((pitch + roll) * 0.017453292F); + float f7 = Mth.cos(yaw * 0.017453292F) * Mth.cos(pitch * 0.017453292F); +@@ -164,7 +174,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { + this.shoot((double) f5, (double) f6, (double) f7, speed, divergence); + Vec3 vec3d = shooter.getDeltaMovement(); + +- if (!shooter.level.paperConfig().misc.disableRelativeProjectileVelocity) this.setDeltaMovement(this.getDeltaMovement().add(vec3d.x, shooter.isOnGround() ? 0.0D : vec3d.y, vec3d.z)); // Paper - allow disabling relative velocity ++ if (!shooter.level.paperConfig().misc.disableRelativeProjectileVelocity && relative) this.setDeltaMovement(this.getDeltaMovement().add(vec3d.x, shooter.isOnGround() ? 0.0D : vec3d.y, vec3d.z)); // Paper - allow disabling relative velocity + } + + // CraftBukkit start - call projectile hit event +diff --git a/src/main/java/net/minecraft/world/item/BowItem.java b/src/main/java/net/minecraft/world/item/BowItem.java +index 08d597db1a5345a343777a01427655e6bf2c926b..c047a2cf20a3f02b2d4a2fb71306234ccfa84429 100644 +--- a/src/main/java/net/minecraft/world/item/BowItem.java ++++ b/src/main/java/net/minecraft/world/item/BowItem.java +@@ -42,9 +42,15 @@ public class BowItem extends ProjectileWeaponItem implements Vanishable { + + if (!world.isClientSide) { + ArrowItem itemarrow = (ArrowItem) (itemstack1.getItem() instanceof ArrowItem ? itemstack1.getItem() : Items.ARROW); ++ ++ gg.projecteden.parchment.event.entity.PreEntityShootBowEvent preEvent = new gg.projecteden.parchment.event.entity.PreEntityShootBowEvent(entityhuman.getBukkitEntity(), stack.asBukkitCopy(), itemstack1.asBukkitCopy()); ++ if (preEvent.callEvent()) { ++ return; ++ } ++ + AbstractArrow entityarrow = itemarrow.createArrow(world, itemstack1, entityhuman); + +- entityarrow.shootFromRotation(entityhuman, entityhuman.getXRot(), entityhuman.getYRot(), 0.0F, f * 3.0F, 1.0F); ++ entityarrow.shootFromRotation(entityhuman, entityhuman.getXRot(), entityhuman.getYRot(), 0.0F, f * 3.0F, 1.0F, preEvent.isRelative()); + if (f == 1.0F) { + entityarrow.setCritArrow(true); + } +diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java +index bc4f04c2512191da3c9e1c49f0716bb9128fc754..27276ee045cb0475dcbd47130d943fcaf597d119 100644 +--- a/src/main/java/net/minecraft/world/item/CrossbowItem.java ++++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java +@@ -228,6 +228,11 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { + + private static void shootProjectile(Level world, LivingEntity shooter, InteractionHand hand, ItemStack crossbow, ItemStack projectile, float soundPitch, boolean creative, float speed, float divergence, float simulated) { + if (!world.isClientSide) { ++ gg.projecteden.parchment.event.entity.PreEntityShootBowEvent preEvent = new gg.projecteden.parchment.event.entity.PreEntityShootBowEvent(shooter.getBukkitEntity(), crossbow.asBukkitCopy(), projectile.asBukkitCopy()); ++ if (preEvent.callEvent()) { ++ return; ++ } ++ + boolean flag1 = projectile.is(Items.FIREWORK_ROCKET); + Object object; + From f8028c508e04729cf517eb167a1fcdf48336fb7c Mon Sep 17 00:00:00 2001 From: Blast-Mc Date: Sun, 19 Mar 2023 18:01:04 -0400 Subject: [PATCH 07/10] Update upstream --- gradle.properties | 2 +- ...tch => 0007-Expose-MCUtil-Executors.patch} | 0 ...=> 0008-Add-BlockDropResourcesEvent.patch} | 0 ...atch => 0009-Add-Furnace-Recipe-API.patch} | 0 ...h => 0010-Add-HangingFrame-Tick-API.patch} | 0 ...11-Add-Player-getHiddenEntities-API.patch} | 0 ...ts.patch => 0012-Add-Timings-Events.patch} | 0 ... 0013-Expanded-Insomnia-API-methods.patch} | 0 ...patch => 0014-Add-NPC-to-EntityType.patch} | 0 ... 0015-Revert-BungeeChat-Deprecation.patch} | 0 ... => 0016-Add-PreEntityShootBowEvent.patch} | 0 .../api/0007-Expose-NMS-ordinals.patch | 0 .../0007-Expose-EntityType-Ordinals.patch | 0 ...location-to-EntityDamageByBlockEvent.patch | 14 +++++----- ...h => 0007-Add-Player-setGameProfile.patch} | 0 ...tch => 0008-Expose-MCUtil-Executors.patch} | 0 ...ng-CraftMetaSkull-serializedProfile.patch} | 0 ...=> 0010-Add-BlockDropResourcesEvent.patch} | 4 +-- ...atch => 0011-Add-Furnace-Recipe-API.patch} | 0 ...-Disable-sleep-status-announcements.patch} | 0 ...-config-for-ticking-TIME_SINCE_REST.patch} | 0 ...h => 0014-Add-HangingFrame-Tick-API.patch} | 0 ...15-Add-Player-getHiddenEntities-API.patch} | 0 ...g-Barrels.patch => 0016-Big-Barrels.patch} | 2 +- ...ts.patch => 0017-Add-Timings-Events.patch} | 0 ...patch => 0018-Expanded-Insomnia-API.patch} | 0 ... => 0019-Add-spam-bypass-permission.patch} | 0 ...=> 0020-Disable-set-respawn-message.patch} | 0 ...> 0021-Make-FixLight-use-action-bar.patch} | 2 +- ...ch => 0022-Remove-Unneeded-Override.patch} | 0 ...=> 0023-Remove-Hanging-Entity-Debug.patch} | 0 ... => 0024-Add-PreEntityShootBowEvent.patch} | 0 ...p-plugin-dependencies-during-runtime.patch | 27 +++++++++++++++++++ 33 files changed, 39 insertions(+), 12 deletions(-) rename patches/api/{0008-Expose-MCUtil-Executors.patch => 0007-Expose-MCUtil-Executors.patch} (100%) rename patches/api/{0009-Add-BlockDropResourcesEvent.patch => 0008-Add-BlockDropResourcesEvent.patch} (100%) rename patches/api/{0010-Add-Furnace-Recipe-API.patch => 0009-Add-Furnace-Recipe-API.patch} (100%) rename patches/api/{0011-Add-HangingFrame-Tick-API.patch => 0010-Add-HangingFrame-Tick-API.patch} (100%) rename patches/api/{0012-Add-Player-getHiddenEntities-API.patch => 0011-Add-Player-getHiddenEntities-API.patch} (100%) rename patches/api/{0013-Add-Timings-Events.patch => 0012-Add-Timings-Events.patch} (100%) rename patches/api/{0014-Expanded-Insomnia-API-methods.patch => 0013-Expanded-Insomnia-API-methods.patch} (100%) rename patches/api/{0015-Add-NPC-to-EntityType.patch => 0014-Add-NPC-to-EntityType.patch} (100%) rename patches/api/{0016-Revert-BungeeChat-Deprecation.patch => 0015-Revert-BungeeChat-Deprecation.patch} (100%) rename patches/api/{0017-Add-PreEntityShootBowEvent.patch => 0016-Add-PreEntityShootBowEvent.patch} (100%) rename patches/{ => removed}/api/0007-Expose-NMS-ordinals.patch (100%) rename patches/{ => removed}/server/0007-Expose-EntityType-Ordinals.patch (100%) rename patches/server/{0008-Add-Player-setGameProfile.patch => 0007-Add-Player-setGameProfile.patch} (100%) rename patches/server/{0009-Expose-MCUtil-Executors.patch => 0008-Expose-MCUtil-Executors.patch} (100%) rename patches/server/{0010-Fix-missing-CraftMetaSkull-serializedProfile.patch => 0009-Fix-missing-CraftMetaSkull-serializedProfile.patch} (100%) rename patches/server/{0011-Add-BlockDropResourcesEvent.patch => 0010-Add-BlockDropResourcesEvent.patch} (96%) rename patches/server/{0012-Add-Furnace-Recipe-API.patch => 0011-Add-Furnace-Recipe-API.patch} (100%) rename patches/server/{0013-Disable-sleep-status-announcements.patch => 0012-Disable-sleep-status-announcements.patch} (100%) rename patches/server/{0014-Add-config-for-ticking-TIME_SINCE_REST.patch => 0013-Add-config-for-ticking-TIME_SINCE_REST.patch} (100%) rename patches/server/{0015-Add-HangingFrame-Tick-API.patch => 0014-Add-HangingFrame-Tick-API.patch} (100%) rename patches/server/{0016-Add-Player-getHiddenEntities-API.patch => 0015-Add-Player-getHiddenEntities-API.patch} (100%) rename patches/server/{0017-Big-Barrels.patch => 0016-Big-Barrels.patch} (94%) rename patches/server/{0018-Add-Timings-Events.patch => 0017-Add-Timings-Events.patch} (100%) rename patches/server/{0019-Expanded-Insomnia-API.patch => 0018-Expanded-Insomnia-API.patch} (100%) rename patches/server/{0020-Add-spam-bypass-permission.patch => 0019-Add-spam-bypass-permission.patch} (100%) rename patches/server/{0021-Disable-set-respawn-message.patch => 0020-Disable-set-respawn-message.patch} (100%) rename patches/server/{0022-Make-FixLight-use-action-bar.patch => 0021-Make-FixLight-use-action-bar.patch} (96%) rename patches/server/{0023-Remove-Unneeded-Override.patch => 0022-Remove-Unneeded-Override.patch} (100%) rename patches/server/{0024-Remove-Hanging-Entity-Debug.patch => 0023-Remove-Hanging-Entity-Debug.patch} (100%) rename patches/server/{0025-Add-PreEntityShootBowEvent.patch => 0024-Add-PreEntityShootBowEvent.patch} (100%) create mode 100644 patches/server/0025-Lookup-plugin-dependencies-during-runtime.patch diff --git a/gradle.properties b/gradle.properties index 84ea477..d07d8d3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = gg.projecteden.parchment version = 1.19.4-R0.1-SNAPSHOT mcVersion = 1.19.4 -paperRef = 85a67dadf28ff329cc01429de84b8b62262435e6 +paperRef = 83948f6f5901edf27e83d8aa5bdca10f1eff63d8 org.gradle.caching=true org.gradle.parallel=true diff --git a/patches/api/0008-Expose-MCUtil-Executors.patch b/patches/api/0007-Expose-MCUtil-Executors.patch similarity index 100% rename from patches/api/0008-Expose-MCUtil-Executors.patch rename to patches/api/0007-Expose-MCUtil-Executors.patch diff --git a/patches/api/0009-Add-BlockDropResourcesEvent.patch b/patches/api/0008-Add-BlockDropResourcesEvent.patch similarity index 100% rename from patches/api/0009-Add-BlockDropResourcesEvent.patch rename to patches/api/0008-Add-BlockDropResourcesEvent.patch diff --git a/patches/api/0010-Add-Furnace-Recipe-API.patch b/patches/api/0009-Add-Furnace-Recipe-API.patch similarity index 100% rename from patches/api/0010-Add-Furnace-Recipe-API.patch rename to patches/api/0009-Add-Furnace-Recipe-API.patch diff --git a/patches/api/0011-Add-HangingFrame-Tick-API.patch b/patches/api/0010-Add-HangingFrame-Tick-API.patch similarity index 100% rename from patches/api/0011-Add-HangingFrame-Tick-API.patch rename to patches/api/0010-Add-HangingFrame-Tick-API.patch diff --git a/patches/api/0012-Add-Player-getHiddenEntities-API.patch b/patches/api/0011-Add-Player-getHiddenEntities-API.patch similarity index 100% rename from patches/api/0012-Add-Player-getHiddenEntities-API.patch rename to patches/api/0011-Add-Player-getHiddenEntities-API.patch diff --git a/patches/api/0013-Add-Timings-Events.patch b/patches/api/0012-Add-Timings-Events.patch similarity index 100% rename from patches/api/0013-Add-Timings-Events.patch rename to patches/api/0012-Add-Timings-Events.patch diff --git a/patches/api/0014-Expanded-Insomnia-API-methods.patch b/patches/api/0013-Expanded-Insomnia-API-methods.patch similarity index 100% rename from patches/api/0014-Expanded-Insomnia-API-methods.patch rename to patches/api/0013-Expanded-Insomnia-API-methods.patch diff --git a/patches/api/0015-Add-NPC-to-EntityType.patch b/patches/api/0014-Add-NPC-to-EntityType.patch similarity index 100% rename from patches/api/0015-Add-NPC-to-EntityType.patch rename to patches/api/0014-Add-NPC-to-EntityType.patch diff --git a/patches/api/0016-Revert-BungeeChat-Deprecation.patch b/patches/api/0015-Revert-BungeeChat-Deprecation.patch similarity index 100% rename from patches/api/0016-Revert-BungeeChat-Deprecation.patch rename to patches/api/0015-Revert-BungeeChat-Deprecation.patch diff --git a/patches/api/0017-Add-PreEntityShootBowEvent.patch b/patches/api/0016-Add-PreEntityShootBowEvent.patch similarity index 100% rename from patches/api/0017-Add-PreEntityShootBowEvent.patch rename to patches/api/0016-Add-PreEntityShootBowEvent.patch diff --git a/patches/api/0007-Expose-NMS-ordinals.patch b/patches/removed/api/0007-Expose-NMS-ordinals.patch similarity index 100% rename from patches/api/0007-Expose-NMS-ordinals.patch rename to patches/removed/api/0007-Expose-NMS-ordinals.patch diff --git a/patches/server/0007-Expose-EntityType-Ordinals.patch b/patches/removed/server/0007-Expose-EntityType-Ordinals.patch similarity index 100% rename from patches/server/0007-Expose-EntityType-Ordinals.patch rename to patches/removed/server/0007-Expose-EntityType-Ordinals.patch diff --git a/patches/server/0005-Add-origin-location-to-EntityDamageByBlockEvent.patch b/patches/server/0005-Add-origin-location-to-EntityDamageByBlockEvent.patch index d764e99..376e6da 100644 --- a/patches/server/0005-Add-origin-location-to-EntityDamageByBlockEvent.patch +++ b/patches/server/0005-Add-origin-location-to-EntityDamageByBlockEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add origin location to EntityDamageByBlockEvent diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 451088940d1db0f32c29d0fd192c97b50cf3c4c8..1567206096d5010d5d4d9d58dcaaa7b6f6715943 100644 +index fd9d0efafaf17bf0551693de2e166ac59a996abd..63ddbed83af9b8bfd237ca0c6b0727317dafe03f 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -972,7 +972,7 @@ public class CraftEventFactory { +@@ -971,7 +971,7 @@ public class CraftEventFactory { CraftEventFactory.entityDamage = null; EntityDamageEvent event; if (damager == null) { @@ -17,21 +17,21 @@ index 451088940d1db0f32c29d0fd192c97b50cf3c4c8..1567206096d5010d5d4d9d58dcaaa7b6 } else if (entity instanceof EnderDragon && /*PAIL FIXME ((EntityEnderDragon) entity).target == damager*/ false) { event = new EntityDamageEvent(entity.getBukkitEntity(), DamageCause.ENTITY_EXPLOSION, modifiers, modifierFunctions); } else { -@@ -1012,7 +1012,7 @@ public class CraftEventFactory { +@@ -1011,7 +1011,7 @@ public class CraftEventFactory { return CraftEventFactory.callEntityDamageEvent(damager, entity, cause, modifiers, modifierFunctions, cancelled, source.isCritical()); // Paper - add critical damage API - } else if (sourceType == DamageTypes.OUT_OF_WORLD) { + } else if (source.is(DamageTypes.OUT_OF_WORLD)) { - EntityDamageEvent event = new EntityDamageByBlockEvent(null, entity.getBukkitEntity(), DamageCause.VOID, modifiers, modifierFunctions); + EntityDamageEvent event = new EntityDamageByBlockEvent(null, entity.getBukkitEntity(), DamageCause.VOID, entity.getBukkitEntity().getLocation(), modifiers, modifierFunctions); event.setCancelled(cancelled); CraftEventFactory.callEvent(event); if (!event.isCancelled()) { -@@ -1022,7 +1022,7 @@ public class CraftEventFactory { +@@ -1021,7 +1021,7 @@ public class CraftEventFactory { } return event; - } else if (sourceType == DamageTypes.LAVA) { + } else if (source.is(DamageTypes.LAVA)) { - EntityDamageEvent event = (new EntityDamageByBlockEvent(CraftEventFactory.blockDamage, entity.getBukkitEntity(), DamageCause.LAVA, modifiers, modifierFunctions)); -+ EntityDamageEvent event = (new EntityDamageByBlockEvent(CraftEventFactory.blockDamage, entity.getBukkitEntity(), DamageCause.LAVA, entity.getBukkitEntity().getLocation(), modifiers, modifierFunctions)); ++ EntityDamageEvent event = (new EntityDamageByBlockEvent(CraftEventFactory.blockDamage, entity.getBukkitEntity(), DamageCause.LAVA, blockDamage.getLocation(), modifiers, modifierFunctions)); event.setCancelled(cancelled); Block damager = CraftEventFactory.blockDamage; diff --git a/patches/server/0008-Add-Player-setGameProfile.patch b/patches/server/0007-Add-Player-setGameProfile.patch similarity index 100% rename from patches/server/0008-Add-Player-setGameProfile.patch rename to patches/server/0007-Add-Player-setGameProfile.patch diff --git a/patches/server/0009-Expose-MCUtil-Executors.patch b/patches/server/0008-Expose-MCUtil-Executors.patch similarity index 100% rename from patches/server/0009-Expose-MCUtil-Executors.patch rename to patches/server/0008-Expose-MCUtil-Executors.patch diff --git a/patches/server/0010-Fix-missing-CraftMetaSkull-serializedProfile.patch b/patches/server/0009-Fix-missing-CraftMetaSkull-serializedProfile.patch similarity index 100% rename from patches/server/0010-Fix-missing-CraftMetaSkull-serializedProfile.patch rename to patches/server/0009-Fix-missing-CraftMetaSkull-serializedProfile.patch diff --git a/patches/server/0011-Add-BlockDropResourcesEvent.patch b/patches/server/0010-Add-BlockDropResourcesEvent.patch similarity index 96% rename from patches/server/0011-Add-BlockDropResourcesEvent.patch rename to patches/server/0010-Add-BlockDropResourcesEvent.patch index 8681f9c..72ec0d5 100644 --- a/patches/server/0011-Add-BlockDropResourcesEvent.patch +++ b/patches/server/0010-Add-BlockDropResourcesEvent.patch @@ -49,10 +49,10 @@ index 4f91e4832a94c3facbc711fcae4cb5ad540a5ca0..c357e09705c5405dc8fac666fc39c993 }); state.spawnAfterBreak((ServerLevel) world, pos, tool, true); diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 1567206096d5010d5d4d9d58dcaaa7b6f6715943..ae6026a6bccfa70c06c96925175608db4a37781d 100644 +index 63ddbed83af9b8bfd237ca0c6b0727317dafe03f..df7cbca1fe99bdb47a112e7a0cb7b81496586518 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1991,5 +1991,19 @@ public class CraftEventFactory { +@@ -1990,5 +1990,19 @@ public class CraftEventFactory { } }); } diff --git a/patches/server/0012-Add-Furnace-Recipe-API.patch b/patches/server/0011-Add-Furnace-Recipe-API.patch similarity index 100% rename from patches/server/0012-Add-Furnace-Recipe-API.patch rename to patches/server/0011-Add-Furnace-Recipe-API.patch diff --git a/patches/server/0013-Disable-sleep-status-announcements.patch b/patches/server/0012-Disable-sleep-status-announcements.patch similarity index 100% rename from patches/server/0013-Disable-sleep-status-announcements.patch rename to patches/server/0012-Disable-sleep-status-announcements.patch diff --git a/patches/server/0014-Add-config-for-ticking-TIME_SINCE_REST.patch b/patches/server/0013-Add-config-for-ticking-TIME_SINCE_REST.patch similarity index 100% rename from patches/server/0014-Add-config-for-ticking-TIME_SINCE_REST.patch rename to patches/server/0013-Add-config-for-ticking-TIME_SINCE_REST.patch diff --git a/patches/server/0015-Add-HangingFrame-Tick-API.patch b/patches/server/0014-Add-HangingFrame-Tick-API.patch similarity index 100% rename from patches/server/0015-Add-HangingFrame-Tick-API.patch rename to patches/server/0014-Add-HangingFrame-Tick-API.patch diff --git a/patches/server/0016-Add-Player-getHiddenEntities-API.patch b/patches/server/0015-Add-Player-getHiddenEntities-API.patch similarity index 100% rename from patches/server/0016-Add-Player-getHiddenEntities-API.patch rename to patches/server/0015-Add-Player-getHiddenEntities-API.patch diff --git a/patches/server/0017-Big-Barrels.patch b/patches/server/0016-Big-Barrels.patch similarity index 94% rename from patches/server/0017-Big-Barrels.patch rename to patches/server/0016-Big-Barrels.patch index 0c0ec12..74d96e1 100644 --- a/patches/server/0017-Big-Barrels.patch +++ b/patches/server/0016-Big-Barrels.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Big Barrels diff --git a/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java -index f52487e1cfcfab1bf22ab2cb52f998283a86e340..9f8394d0348b068623b3acafe18b40a3ed0503d0 100644 +index 416aa989ebb18a8741cc9d605a1180ab830f6643..c48466a4d2115f4fa6121b6bcba87b838743af34 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java @@ -67,7 +67,7 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { diff --git a/patches/server/0018-Add-Timings-Events.patch b/patches/server/0017-Add-Timings-Events.patch similarity index 100% rename from patches/server/0018-Add-Timings-Events.patch rename to patches/server/0017-Add-Timings-Events.patch diff --git a/patches/server/0019-Expanded-Insomnia-API.patch b/patches/server/0018-Expanded-Insomnia-API.patch similarity index 100% rename from patches/server/0019-Expanded-Insomnia-API.patch rename to patches/server/0018-Expanded-Insomnia-API.patch diff --git a/patches/server/0020-Add-spam-bypass-permission.patch b/patches/server/0019-Add-spam-bypass-permission.patch similarity index 100% rename from patches/server/0020-Add-spam-bypass-permission.patch rename to patches/server/0019-Add-spam-bypass-permission.patch diff --git a/patches/server/0021-Disable-set-respawn-message.patch b/patches/server/0020-Disable-set-respawn-message.patch similarity index 100% rename from patches/server/0021-Disable-set-respawn-message.patch rename to patches/server/0020-Disable-set-respawn-message.patch diff --git a/patches/server/0022-Make-FixLight-use-action-bar.patch b/patches/server/0021-Make-FixLight-use-action-bar.patch similarity index 96% rename from patches/server/0022-Make-FixLight-use-action-bar.patch rename to patches/server/0021-Make-FixLight-use-action-bar.patch index cbd29b6..c0e5210 100644 --- a/patches/server/0022-Make-FixLight-use-action-bar.patch +++ b/patches/server/0021-Make-FixLight-use-action-bar.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Make FixLight use action bar diff --git a/src/main/java/io/papermc/paper/command/subcommands/FixLightCommand.java b/src/main/java/io/papermc/paper/command/subcommands/FixLightCommand.java -index 450bd95218852174cfbc88d4517e17daee5ffd5f..794842cb3dfa0732ccecf625b97dbc6c311a8a18 100644 +index 7784d72ddd6db00c674e22759c00c430222c4b85..b336789b74d6d6819b38e78cb2014f61de3f004b 100644 --- a/src/main/java/io/papermc/paper/command/subcommands/FixLightCommand.java +++ b/src/main/java/io/papermc/paper/command/subcommands/FixLightCommand.java @@ -24,6 +24,7 @@ import static net.kyori.adventure.text.format.NamedTextColor.BLUE; diff --git a/patches/server/0023-Remove-Unneeded-Override.patch b/patches/server/0022-Remove-Unneeded-Override.patch similarity index 100% rename from patches/server/0023-Remove-Unneeded-Override.patch rename to patches/server/0022-Remove-Unneeded-Override.patch diff --git a/patches/server/0024-Remove-Hanging-Entity-Debug.patch b/patches/server/0023-Remove-Hanging-Entity-Debug.patch similarity index 100% rename from patches/server/0024-Remove-Hanging-Entity-Debug.patch rename to patches/server/0023-Remove-Hanging-Entity-Debug.patch diff --git a/patches/server/0025-Add-PreEntityShootBowEvent.patch b/patches/server/0024-Add-PreEntityShootBowEvent.patch similarity index 100% rename from patches/server/0025-Add-PreEntityShootBowEvent.patch rename to patches/server/0024-Add-PreEntityShootBowEvent.patch diff --git a/patches/server/0025-Lookup-plugin-dependencies-during-runtime.patch b/patches/server/0025-Lookup-plugin-dependencies-during-runtime.patch new file mode 100644 index 0000000..9e40342 --- /dev/null +++ b/patches/server/0025-Lookup-plugin-dependencies-during-runtime.patch @@ -0,0 +1,27 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Blast-MC +Date: Sun, 19 Mar 2023 17:32:26 -0400 +Subject: [PATCH] Lookup plugin dependencies during runtime + + +diff --git a/src/main/java/io/papermc/paper/plugin/entrypoint/dependency/DependencyUtil.java b/src/main/java/io/papermc/paper/plugin/entrypoint/dependency/DependencyUtil.java +index bfa258faf17ca6118aeddfa4e95bbd082bcd1390..c106c26ccd673e46c5ae9415096923b66efd8af2 100644 +--- a/src/main/java/io/papermc/paper/plugin/entrypoint/dependency/DependencyUtil.java ++++ b/src/main/java/io/papermc/paper/plugin/entrypoint/dependency/DependencyUtil.java +@@ -2,6 +2,7 @@ package io.papermc.paper.plugin.entrypoint.dependency; + + import com.google.common.graph.MutableGraph; + import io.papermc.paper.plugin.configuration.PluginMeta; ++import io.papermc.paper.plugin.manager.PaperPluginManagerImpl; + import io.papermc.paper.plugin.provider.PluginProvider; + import io.papermc.paper.plugin.provider.configuration.LoadOrderConfiguration; + import org.bukkit.plugin.PluginDescriptionFile; +@@ -65,7 +66,7 @@ public class DependencyUtil { + public static List validateSimple(PluginMeta meta, Map> toLoad) { + List missingDependencies = new ArrayList<>(); + for (String hardDependency : meta.getPluginDependencies()) { +- if (!toLoad.containsKey(hardDependency)) { ++ if (!toLoad.containsKey(hardDependency) && !PaperPluginManagerImpl.getInstance().isPluginEnabled(hardDependency)) { + missingDependencies.add(hardDependency); + } + } From 61a11d791cb561b2e3d85cc04dc917825b59c66a Mon Sep 17 00:00:00 2001 From: Blast-Mc Date: Sun, 19 Mar 2023 20:11:35 -0400 Subject: [PATCH 08/10] Return displays in getTargetEntity --- patches/server/0001-Build-changes.patch | 4 ++-- patches/server/0003-Add-SoundEvent.patch | 4 ++-- ...6-Return-Displays-in-getTargetEntity.patch | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 patches/server/0026-Return-Displays-in-getTargetEntity.patch diff --git a/patches/server/0001-Build-changes.patch b/patches/server/0001-Build-changes.patch index ca06e35..74e22ec 100644 --- a/patches/server/0001-Build-changes.patch +++ b/patches/server/0001-Build-changes.patch @@ -104,10 +104,10 @@ index bf42969859545a8a520923ef1836ffa4a5cc24a0..2532e265c5dade55f71c34fcab6d1e74 org.bukkit.Bukkit.getLogger().warning("Version: " + org.bukkit.Bukkit.getBukkitVersion()); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 081871412e92ce909ad9c51a8d18ede53596c049..60c4cccf67bd043b275310842d640803f8853278 100644 +index 4450d825a5474da211f0e83f845d8c7129fa08aa..2945a13807d48481bf97467d170eaec8cfd6e2d6 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1680,7 +1680,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop +Date: Sun, 19 Mar 2023 20:02:00 -0400 +Subject: [PATCH] Return Displays in getTargetEntity + + +diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java +index dcfb71b5a53df789e366fea2080921d677549a2e..755ae62d64c15358b2f88ab6471c9046ced74a66 100644 +--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java ++++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java +@@ -3988,7 +3988,7 @@ public abstract class LivingEntity extends Entity implements Attackable { + Vec3 direction = this.getLookAngle(); + Vec3 end = start.add(direction.x * maxDistance, direction.y * maxDistance, direction.z * maxDistance); + +- List entityList = level.getEntities(this, getBoundingBox().expandTowards(direction.x * maxDistance, direction.y * maxDistance, direction.z * maxDistance).inflate(1.0D, 1.0D, 1.0D), EntitySelector.NO_SPECTATORS.and(Entity::isPickable)); ++ List entityList = level.getEntities(this, getBoundingBox().expandTowards(direction.x * maxDistance, direction.y * maxDistance, direction.z * maxDistance).inflate(1.0D, 1.0D, 1.0D), EntitySelector.NO_SPECTATORS.and(entity -> entity.isPickable() || entity instanceof Display)); + + double distance = 0.0D; + EntityHitResult result = null; From 883620f8283fe5d1e08916e2674de20804b3731d Mon Sep 17 00:00:00 2001 From: Blast-Mc Date: Tue, 21 Mar 2023 00:21:21 -0400 Subject: [PATCH 09/10] Remove plugin dependency change --- .../server/0025-Lookup-plugin-dependencies-during-runtime.patch | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename patches/{ => removed}/server/0025-Lookup-plugin-dependencies-during-runtime.patch (100%) diff --git a/patches/server/0025-Lookup-plugin-dependencies-during-runtime.patch b/patches/removed/server/0025-Lookup-plugin-dependencies-during-runtime.patch similarity index 100% rename from patches/server/0025-Lookup-plugin-dependencies-during-runtime.patch rename to patches/removed/server/0025-Lookup-plugin-dependencies-during-runtime.patch From 0bbed6029c922994758ba459445fa397ba645cf4 Mon Sep 17 00:00:00 2001 From: Blast-Mc Date: Tue, 21 Mar 2023 00:21:30 -0400 Subject: [PATCH 10/10] Fix PreEntityShootBowEvent --- patches/server/0024-Add-PreEntityShootBowEvent.patch | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/patches/server/0024-Add-PreEntityShootBowEvent.patch b/patches/server/0024-Add-PreEntityShootBowEvent.patch index f92a5fe..ac2133f 100644 --- a/patches/server/0024-Add-PreEntityShootBowEvent.patch +++ b/patches/server/0024-Add-PreEntityShootBowEvent.patch @@ -14,7 +14,7 @@ index f2094c52196b45adfd51d8aebcc4c46b779b0925..0498d3d0cee58e10351bd8c4ce7b9a3d ItemStack itemstack = this.getProjectile(this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, Items.BOW))); + + gg.projecteden.parchment.event.entity.PreEntityShootBowEvent preEvent = new gg.projecteden.parchment.event.entity.PreEntityShootBowEvent(this.getBukkitEntity(), this.getMainHandItem().asBukkitCopy(), itemstack.asBukkitCopy()); -+ if (preEvent.callEvent()) { ++ if (!preEvent.callEvent()) { + return; + } + @@ -39,7 +39,7 @@ index 10573602c9bc73713cbd6989762d3dbb6f6fcf8c..b65c31bc257e362247855faabf49aec6 ItemStack itemstack = this.getProjectile(this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, Items.BOW))); + + gg.projecteden.parchment.event.entity.PreEntityShootBowEvent preEvent = new gg.projecteden.parchment.event.entity.PreEntityShootBowEvent(this.getBukkitEntity(), this.getMainHandItem().asBukkitCopy(), itemstack.asBukkitCopy()); -+ if (preEvent.callEvent()) { ++ if (!preEvent.callEvent()) { + return; + } + @@ -120,7 +120,7 @@ index 08d597db1a5345a343777a01427655e6bf2c926b..c047a2cf20a3f02b2d4a2fb71306234c ArrowItem itemarrow = (ArrowItem) (itemstack1.getItem() instanceof ArrowItem ? itemstack1.getItem() : Items.ARROW); + + gg.projecteden.parchment.event.entity.PreEntityShootBowEvent preEvent = new gg.projecteden.parchment.event.entity.PreEntityShootBowEvent(entityhuman.getBukkitEntity(), stack.asBukkitCopy(), itemstack1.asBukkitCopy()); -+ if (preEvent.callEvent()) { ++ if (!preEvent.callEvent()) { + return; + } + @@ -140,7 +140,7 @@ index bc4f04c2512191da3c9e1c49f0716bb9128fc754..27276ee045cb0475dcbd47130d943fca private static void shootProjectile(Level world, LivingEntity shooter, InteractionHand hand, ItemStack crossbow, ItemStack projectile, float soundPitch, boolean creative, float speed, float divergence, float simulated) { if (!world.isClientSide) { + gg.projecteden.parchment.event.entity.PreEntityShootBowEvent preEvent = new gg.projecteden.parchment.event.entity.PreEntityShootBowEvent(shooter.getBukkitEntity(), crossbow.asBukkitCopy(), projectile.asBukkitCopy()); -+ if (preEvent.callEvent()) { ++ if (!preEvent.callEvent()) { + return; + } +