diff --git a/gradle.properties b/gradle.properties index a3931c5d..eace4a2b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group=cn.dreeam.leaf mcVersion=1.21.5 version=1.21.5-R0.1-SNAPSHOT -paperCommit=ec421715edd5b3d9590fe6c48ecebb62971598b5 +paperCommit=6f1f5b67e044b151feec164e4fad13ce282417c1 org.gradle.configuration-cache=true org.gradle.caching=true diff --git a/leaf-server/minecraft-patches/features/0023-Make-book-writing-configurable.patch b/leaf-server/minecraft-patches/features/0023-Make-book-writing-configurable.patch index 3ca86769..5fd1ca2d 100644 --- a/leaf-server/minecraft-patches/features/0023-Make-book-writing-configurable.patch +++ b/leaf-server/minecraft-patches/features/0023-Make-book-writing-configurable.patch @@ -22,10 +22,10 @@ you to easily disable books, should you want to preemptively remove this functionality before additional exploits are found. diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index f49a2c18ec20a7181951389066b7d062b48d43fa..7aa2c1c070e77a580dcc12865956119e42a33ba3 100644 +index 064a9b6cf6792192fc1fa80095a48c2025cebf2a..7576932c6ccb0e018ad19ef6cf4f5d217de6bda4 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1223,6 +1223,11 @@ public class ServerGamePacketListenerImpl +@@ -1225,6 +1225,11 @@ public class ServerGamePacketListenerImpl @Override public void handleEditBook(ServerboundEditBookPacket packet) { diff --git a/leaf-server/minecraft-patches/features/0031-Do-not-process-chat-commands-before-player-has-joine.patch b/leaf-server/minecraft-patches/features/0031-Do-not-process-chat-commands-before-player-has-joine.patch index 1dace890..fadcae01 100644 --- a/leaf-server/minecraft-patches/features/0031-Do-not-process-chat-commands-before-player-has-joine.patch +++ b/leaf-server/minecraft-patches/features/0031-Do-not-process-chat-commands-before-player-has-joine.patch @@ -25,10 +25,10 @@ index 16b390f527cf18a000ebed2950a35bcfb15c6c21..671393424ca6773ffeb05c4183cf8331 public @Nullable com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent public @Nullable String clientBrandName = null; // Paper - Brand support diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index e9ddf4dfe2d8072d98dacddb875c0ac25731851d..2fd465ac724285318ef6a9037bf17f288c442bff 100644 +index 7576932c6ccb0e018ad19ef6cf4f5d217de6bda4..debeec0ff3bfb9f9d84ce0607365a05802b6496b 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2397,7 +2397,7 @@ public class ServerGamePacketListenerImpl +@@ -2399,7 +2399,7 @@ public class ServerGamePacketListenerImpl this.disconnectAsync(Component.translatable("multiplayer.disconnect.illegal_characters"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_CHARACTERS); // Paper - add proper async disconnect } else if (this.player.isRemoved() || this.player.getChatVisibility() == ChatVisiblity.HIDDEN) { // CraftBukkit - dead men tell no tales this.send(new ClientboundSystemChatPacket(Component.translatable("chat.disabled.options").withStyle(ChatFormatting.RED), false)); diff --git a/leaf-server/minecraft-patches/features/0033-Do-not-log-empty-message-warnings.patch b/leaf-server/minecraft-patches/features/0033-Do-not-log-empty-message-warnings.patch index 2fbb7daa..7a07e2ed 100644 --- a/leaf-server/minecraft-patches/features/0033-Do-not-log-empty-message-warnings.patch +++ b/leaf-server/minecraft-patches/features/0033-Do-not-log-empty-message-warnings.patch @@ -7,10 +7,10 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 2fd465ac724285318ef6a9037bf17f288c442bff..d8e66642bb33dc00d2e410c2739c0291777c88bc 100644 +index debeec0ff3bfb9f9d84ce0607365a05802b6496b..421665c29e55c1b1a732e38e4b41577a82d901e5 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2479,7 +2479,7 @@ public class ServerGamePacketListenerImpl +@@ -2481,7 +2481,7 @@ public class ServerGamePacketListenerImpl // CraftBukkit start String rawMessage = message.signedContent(); if (rawMessage.isEmpty()) { diff --git a/leaf-server/minecraft-patches/features/0047-Reduce-array-allocations.patch b/leaf-server/minecraft-patches/features/0047-Reduce-array-allocations.patch index 82b57072..5a2acf02 100644 --- a/leaf-server/minecraft-patches/features/0047-Reduce-array-allocations.patch +++ b/leaf-server/minecraft-patches/features/0047-Reduce-array-allocations.patch @@ -139,10 +139,10 @@ index b127f444b79ef9430121045f328dd77b6b8182b2..3d476a93ecf3b12012db92ef07c0a899 return ret; } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index d8e66642bb33dc00d2e410c2739c0291777c88bc..096354ff2e65321b46bffefc91c0c47d2b114526 100644 +index 421665c29e55c1b1a732e38e4b41577a82d901e5..c6f52c899a3e4baf483412af8315d72a29f7139a 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2769,7 +2769,7 @@ public class ServerGamePacketListenerImpl +@@ -2771,7 +2771,7 @@ public class ServerGamePacketListenerImpl // SPIGOT-7136 - Allays if (target instanceof net.minecraft.world.entity.animal.allay.Allay || target instanceof net.minecraft.world.entity.animal.horse.AbstractHorse) { // Paper - Fix horse armor desync ServerGamePacketListenerImpl.this.send(new net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket( diff --git a/leaf-server/minecraft-patches/features/0062-Update-boss-bar-within-tick.patch b/leaf-server/minecraft-patches/features/0062-Update-boss-bar-within-tick.patch index cb37fafc..41a1e834 100644 --- a/leaf-server/minecraft-patches/features/0062-Update-boss-bar-within-tick.patch +++ b/leaf-server/minecraft-patches/features/0062-Update-boss-bar-within-tick.patch @@ -13,10 +13,10 @@ As part of: Lithium (https://github.com/CaffeineMC/lithium-fabric) Licensed under: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html) diff --git a/net/minecraft/world/entity/raid/Raid.java b/net/minecraft/world/entity/raid/Raid.java -index eb7208b03240d647ace22c41ac665d3030407196..654101353c7995bcce5be7f80c9ed76246ef56c5 100644 +index 62a3a8d46e10e6f02e3f515bbce5d9ba1f6566b8..71166fbf93d62e8e1bff3db8161932ee2fc5ea86 100644 --- a/net/minecraft/world/entity/raid/Raid.java +++ b/net/minecraft/world/entity/raid/Raid.java -@@ -125,6 +125,7 @@ public class Raid { +@@ -126,6 +126,7 @@ public class Raid { private Raid.RaidStatus status; private int celebrationTicks; private Optional waveSpawnPos = Optional.empty(); @@ -24,7 +24,7 @@ index eb7208b03240d647ace22c41ac665d3030407196..654101353c7995bcce5be7f80c9ed762 public Raid(BlockPos center, Difficulty difficulty) { this.active = true; -@@ -277,6 +278,12 @@ public class Raid { +@@ -278,6 +279,12 @@ public class Raid { } public void tick(ServerLevel level) { @@ -37,7 +37,7 @@ index eb7208b03240d647ace22c41ac665d3030407196..654101353c7995bcce5be7f80c9ed762 if (!this.isStopped()) { if (this.status == Raid.RaidStatus.ONGOING) { boolean flag = this.active; -@@ -587,6 +594,12 @@ public class Raid { +@@ -588,6 +595,12 @@ public class Raid { } public void updateBossbar() { diff --git a/leaf-server/minecraft-patches/features/0092-Reduce-RandomSource-instances.patch b/leaf-server/minecraft-patches/features/0092-Reduce-RandomSource-instances.patch index a91a855c..c38427a9 100644 --- a/leaf-server/minecraft-patches/features/0092-Reduce-RandomSource-instances.patch +++ b/leaf-server/minecraft-patches/features/0092-Reduce-RandomSource-instances.patch @@ -26,7 +26,7 @@ index d381800ad054be6b054dcca43fbe80d3f0c0c771..5904b9d985487ff8bd1f330667c43096 double d1 = center.y - maxRange; double d2 = center.x + maxRange; diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index ccbfb6ad7de454a622c55395b8876ac8cef0d5a8..9d5051a65dcbd87b7d29db4643fa2b070717845b 100644 +index 08a4454a8dbbd75b60b8aaeafc03d2323a583c12..29e61a4cc550e4a627f4da99d116da5d4af9a45d 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -496,7 +496,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -73,10 +73,10 @@ index 9476a33ff4ec272a2c3b3cf9685cb4653138c57e..1ecfcb37a0d1c3f3810c5c8ce8043626 public FishingHook(EntityType entityType, Level level) { diff --git a/net/minecraft/world/entity/raid/Raid.java b/net/minecraft/world/entity/raid/Raid.java -index 654101353c7995bcce5be7f80c9ed76246ef56c5..19b34cf9d23c255e16a0ee99f66f3f9a3ecb196a 100644 +index 71166fbf93d62e8e1bff3db8161932ee2fc5ea86..c7ca8a71070f15c573a5748f1df9810af23febdb 100644 --- a/net/minecraft/world/entity/raid/Raid.java +++ b/net/minecraft/world/entity/raid/Raid.java -@@ -120,7 +120,7 @@ public class Raid { +@@ -121,7 +121,7 @@ public class Raid { public final ServerBossEvent raidEvent = new ServerBossEvent(RAID_NAME_COMPONENT, BossEvent.BossBarColor.RED, BossEvent.BossBarOverlay.NOTCHED_10); private int postRaidTicks; private int raidCooldownTicks; @@ -85,7 +85,7 @@ index 654101353c7995bcce5be7f80c9ed76246ef56c5..19b34cf9d23c255e16a0ee99f66f3f9a public final int numGroups; private Raid.RaidStatus status; private int celebrationTicks; -@@ -507,7 +507,7 @@ public class Raid { +@@ -508,7 +508,7 @@ public class Raid { float f = 13.0F; int i = 64; Collection players = this.raidEvent.getPlayers(); @@ -94,7 +94,7 @@ index 654101353c7995bcce5be7f80c9ed76246ef56c5..19b34cf9d23c255e16a0ee99f66f3f9a for (ServerPlayer serverPlayer : level.players()) { Vec3 vec3 = serverPlayer.position(); -@@ -531,7 +531,7 @@ public class Raid { +@@ -532,7 +532,7 @@ public class Raid { for (Raid.RaiderType raiderType : Raid.RaiderType.VALUES) { int i1 = this.getDefaultNumSpawns(raiderType, i, shouldSpawnBonusGroup) diff --git a/leaf-server/minecraft-patches/features/0099-Purpur-Server-Minecraft-Changes.patch b/leaf-server/minecraft-patches/features/0099-Purpur-Server-Minecraft-Changes.patch index bd537df9..a60685ee 100644 --- a/leaf-server/minecraft-patches/features/0099-Purpur-Server-Minecraft-Changes.patch +++ b/leaf-server/minecraft-patches/features/0099-Purpur-Server-Minecraft-Changes.patch @@ -1284,7 +1284,7 @@ index c4f4c21f32e2aba79e15315d73124c803bb1223a..d2e8adccf33c6b842fac615006b782b0 this.player.clientBrandName = new net.minecraft.network.FriendlyByteBuf(io.netty.buffer.Unpooled.wrappedBuffer(data)).readUtf(256); } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 096354ff2e65321b46bffefc91c0c47d2b114526..bc935e51c2c5134813d3476da14a596fc47cec76 100644 +index c6f52c899a3e4baf483412af8315d72a29f7139a..d2c1da7df4961fddbb7db952d817f127ece275d9 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -321,6 +321,20 @@ public class ServerGamePacketListenerImpl @@ -1338,7 +1338,7 @@ index 096354ff2e65321b46bffefc91c0c47d2b114526..bc935e51c2c5134813d3476da14a596f this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause return; } -@@ -1236,6 +1259,10 @@ public class ServerGamePacketListenerImpl +@@ -1238,6 +1261,10 @@ public class ServerGamePacketListenerImpl final int maxBookPageSize = pageMax.intValue(); final double multiplier = Math.clamp(io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier, 0.3D, 1D); long byteAllowed = maxBookPageSize; @@ -1349,7 +1349,7 @@ index 096354ff2e65321b46bffefc91c0c47d2b114526..bc935e51c2c5134813d3476da14a596f for (final String page : pageList) { final int byteLength = page.getBytes(java.nio.charset.StandardCharsets.UTF_8).length; byteTotal += byteLength; -@@ -1260,7 +1287,8 @@ public class ServerGamePacketListenerImpl +@@ -1262,7 +1289,8 @@ public class ServerGamePacketListenerImpl } if (byteTotal > byteAllowed) { @@ -1359,7 +1359,7 @@ index 096354ff2e65321b46bffefc91c0c47d2b114526..bc935e51c2c5134813d3476da14a596f this.disconnectAsync(Component.literal("Book too large!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause // Paper - add proper async disconnect return; } -@@ -1279,31 +1307,45 @@ public class ServerGamePacketListenerImpl +@@ -1281,31 +1309,45 @@ public class ServerGamePacketListenerImpl Optional optional = packet.title(); optional.ifPresent(list::add); list.addAll(packet.pages()); @@ -1409,7 +1409,7 @@ index 096354ff2e65321b46bffefc91c0c47d2b114526..bc935e51c2c5134813d3476da14a596f itemStack.set( DataComponents.WRITTEN_BOOK_CONTENT, new WrittenBookContent(this.filterableFromOutgoing(title), this.player.getName().getString(), 0, list, true) -@@ -1317,6 +1359,16 @@ public class ServerGamePacketListenerImpl +@@ -1319,6 +1361,16 @@ public class ServerGamePacketListenerImpl return this.player.isTextFilteringEnabled() ? Filterable.passThrough(filteredText.filteredOrEmpty()) : Filterable.from(filteredText); } @@ -1426,7 +1426,7 @@ index 096354ff2e65321b46bffefc91c0c47d2b114526..bc935e51c2c5134813d3476da14a596f @Override public void handleEntityTagQuery(ServerboundEntityTagQueryPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); -@@ -1352,7 +1404,15 @@ public class ServerGamePacketListenerImpl +@@ -1354,7 +1406,15 @@ public class ServerGamePacketListenerImpl @Override public void handleMovePlayer(ServerboundMovePlayerPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); @@ -1443,7 +1443,7 @@ index 096354ff2e65321b46bffefc91c0c47d2b114526..bc935e51c2c5134813d3476da14a596f this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause } else { ServerLevel serverLevel = this.player.serverLevel(); -@@ -1534,7 +1594,7 @@ public class ServerGamePacketListenerImpl +@@ -1536,7 +1596,7 @@ public class ServerGamePacketListenerImpl movedWrongly = true; if (event.getLogWarning()) // Paper end @@ -1452,7 +1452,7 @@ index 096354ff2e65321b46bffefc91c0c47d2b114526..bc935e51c2c5134813d3476da14a596f } // Paper } -@@ -1600,6 +1660,8 @@ public class ServerGamePacketListenerImpl +@@ -1602,6 +1662,8 @@ public class ServerGamePacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -1461,7 +1461,7 @@ index 096354ff2e65321b46bffefc91c0c47d2b114526..bc935e51c2c5134813d3476da14a596f Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -1655,6 +1717,13 @@ public class ServerGamePacketListenerImpl +@@ -1657,6 +1719,13 @@ public class ServerGamePacketListenerImpl this.player.tryResetCurrentImpulseContext(); } @@ -1475,7 +1475,7 @@ index 096354ff2e65321b46bffefc91c0c47d2b114526..bc935e51c2c5134813d3476da14a596f this.player.checkMovementStatistics(this.player.getX() - x, this.player.getY() - y, this.player.getZ() - z); this.lastGoodX = this.player.getX(); this.lastGoodY = this.player.getY(); -@@ -1672,6 +1741,17 @@ public class ServerGamePacketListenerImpl +@@ -1674,6 +1743,17 @@ public class ServerGamePacketListenerImpl } } @@ -1493,7 +1493,7 @@ index 096354ff2e65321b46bffefc91c0c47d2b114526..bc935e51c2c5134813d3476da14a596f private boolean shouldCheckPlayerMovement(boolean isElytraMovement) { if (this.isSingleplayerOwner()) { return false; -@@ -2068,6 +2148,7 @@ public class ServerGamePacketListenerImpl +@@ -2070,6 +2150,7 @@ public class ServerGamePacketListenerImpl boolean cancelled; if (hitResult == null || hitResult.getType() != HitResult.Type.BLOCK) { @@ -1501,7 +1501,7 @@ index 096354ff2e65321b46bffefc91c0c47d2b114526..bc935e51c2c5134813d3476da14a596f org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemInHand, hand); cancelled = event.useItemInHand() == Event.Result.DENY; } else { -@@ -2740,6 +2821,7 @@ public class ServerGamePacketListenerImpl +@@ -2742,6 +2823,7 @@ public class ServerGamePacketListenerImpl AABB boundingBox = target.getBoundingBox(); if (this.player.canInteractWithEntity(boundingBox, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(3.0))) { // Paper - configurable lenience value for interact range @@ -1509,7 +1509,7 @@ index 096354ff2e65321b46bffefc91c0c47d2b114526..bc935e51c2c5134813d3476da14a596f packet.dispatch( new ServerboundInteractPacket.Handler() { private void performInteraction(InteractionHand hand, ServerGamePacketListenerImpl.EntityInteraction entityInteraction, PlayerInteractEntityEvent event) { // CraftBukkit -@@ -2752,6 +2834,8 @@ public class ServerGamePacketListenerImpl +@@ -2754,6 +2836,8 @@ public class ServerGamePacketListenerImpl ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); @@ -3184,7 +3184,7 @@ index 6eaf0bd944349cd0c6084462ac385fa2caafe933..be59d0c27a83b329ec3f97c029cfb9c1 double d = this.llama.distanceToSqr(this.llama.getCaravanHead()); if (d > 676.0) { diff --git a/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java b/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java -index 3d40911970caf6f1de2a1ebee1df4c077703226a..9b29c0c676a45de2abdc76e0502ac06ac1e53097 100644 +index 5d025e0e4381a045fd82c26cdd3907e1a8710b45..084156166905562beb8d36db400bc9cab5c14be2 100644 --- a/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java +++ b/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java @@ -35,7 +35,7 @@ public class RemoveBlockGoal extends MoveToBlockGoal { @@ -8086,7 +8086,7 @@ index 09924cccf9208abda22cc7e1635b567ed166e95a..bbcb03548052b28bd622d7d8ce161cca } diff --git a/net/minecraft/world/entity/decoration/ArmorStand.java b/net/minecraft/world/entity/decoration/ArmorStand.java -index 99b8f53fc553bf3e752208a5c007bc49266ffc27..49500127eb3a471c41dc3ff32372ad6f20c6d69a 100644 +index 1297f585753c53275e8e54e41b2e718b44aee1bf..0417175c7beabbca53cd080d158001eabe3941f0 100644 --- a/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/net/minecraft/world/entity/decoration/ArmorStand.java @@ -95,10 +95,13 @@ public class ArmorStand extends LivingEntity { @@ -8111,7 +8111,7 @@ index 99b8f53fc553bf3e752208a5c007bc49266ffc27..49500127eb3a471c41dc3ff32372ad6f itemStack.set(DataComponents.CUSTOM_NAME, this.getCustomName()); this.drops.add(new DefaultDrop(itemStack, stack -> Block.popResource(this.level(), this.blockPosition(), stack))); // CraftBukkit - add to drops // Paper - Restore vanilla drops behavior return this.brokenByAnything(level, damageSource); // Paper -@@ -538,6 +542,7 @@ public class ArmorStand extends LivingEntity { +@@ -546,6 +550,7 @@ public class ArmorStand extends LivingEntity { @Override public void tick() { @@ -8119,7 +8119,7 @@ index 99b8f53fc553bf3e752208a5c007bc49266ffc27..49500127eb3a471c41dc3ff32372ad6f // Paper start - Allow ArmorStands not to tick if (!this.canTick) { if (this.noTickPoseDirty) { -@@ -867,4 +872,18 @@ public class ArmorStand extends LivingEntity { +@@ -875,4 +880,18 @@ public class ArmorStand extends LivingEntity { } } // Paper end @@ -8258,7 +8258,7 @@ index 5d23d8754b304d5e2fd54400cc81c7fe5c14a804..9a00aead39e194de076ee651d2f75b29 + // Purpur end - Shears can defuse TNT } diff --git a/net/minecraft/world/entity/monster/AbstractSkeleton.java b/net/minecraft/world/entity/monster/AbstractSkeleton.java -index 408c72a28bde6d2f0a7c410c5c7558e5fe7ad4c8..185edd9878f5193c44b75a126e8182caade7e943 100644 +index 22d5ccb271fc19255e99afa5d1ff10549a20dc31..21cf84f1d037e3e387a3e254599673125f89ba9c 100644 --- a/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/net/minecraft/world/entity/monster/AbstractSkeleton.java @@ -64,21 +64,24 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @@ -9622,7 +9622,7 @@ index 8d6def85583a111841b28f20f58ddb8b8cbd7bc1..a4ce65911a5d778f60bcedb3acd9fe59 @Override diff --git a/net/minecraft/world/entity/monster/Illusioner.java b/net/minecraft/world/entity/monster/Illusioner.java -index 264ec7acfc03eca4a8f5758ad8d3e11714e934b4..b8ada9ebd0d8d4ca0e8eb7e6084a0057f4758ea4 100644 +index ec090d191969983c31950b8376bbb36ee8fce922..93eaafe260312f26840a2afee8375b8a95d97ba2 100644 --- a/net/minecraft/world/entity/monster/Illusioner.java +++ b/net/minecraft/world/entity/monster/Illusioner.java @@ -57,10 +57,52 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { @@ -10681,7 +10681,7 @@ index 48f26ed693b43e3f65f1559ba69b3d7249664f71..48cbc3cb983da08cfec78828b15f1484 + // Purpur end - Skeletons eat wither roses } diff --git a/net/minecraft/world/entity/monster/Slime.java b/net/minecraft/world/entity/monster/Slime.java -index 6a8a5a76400beeaf69a17d53105a7a522ec5791e..7b6db084a483b4a9c2f292c5ed6e4c7550344c50 100644 +index 5a81172c88f5699f1440b69b331a8ea353c1950a..9a157a2bdbbeab89dbfcd23be8bdc62c8de4548c 100644 --- a/net/minecraft/world/entity/monster/Slime.java +++ b/net/minecraft/world/entity/monster/Slime.java @@ -58,6 +58,7 @@ public class Slime extends Mob implements Enemy { @@ -13869,7 +13869,7 @@ index 13ce174e4f7e406f57a68ea0d3ef0ee3367f3f3b..ca86122e38688b29340cd8413ccf1746 return InteractionResult.FAIL; } else { diff --git a/net/minecraft/world/item/BowItem.java b/net/minecraft/world/item/BowItem.java -index 57c933af200551162774f1d473437521e5a85833..b3e003694ce0da357e91ab3ce2b1380f9ab0a32a 100644 +index c4c8775de328d40bb8218d993872be5249e8174d..ce1ce18410fc1d47d999c918a8f880b43bf9797c 100644 --- a/net/minecraft/world/item/BowItem.java +++ b/net/minecraft/world/item/BowItem.java @@ -28,6 +28,11 @@ public class BowItem extends ProjectileWeaponItem { @@ -13888,8 +13888,8 @@ index 57c933af200551162774f1d473437521e5a85833..b3e003694ce0da357e91ab3ce2b1380f } else { List list = draw(stack, projectile, player); if (level instanceof ServerLevel serverLevel && !list.isEmpty()) { -- this.shoot(serverLevel, player, player.getUsedItemHand(), stack, list, powerForTime * 3.0F, 1.0F, powerForTime == 1.0F, null); -+ this.shoot(serverLevel, player, player.getUsedItemHand(), stack, list, powerForTime * 3.0F, (float) serverLevel.purpurConfig.bowProjectileOffset, powerForTime == 1.0F, null); // Purpur - Projectile offset config +- this.shoot(serverLevel, player, player.getUsedItemHand(), stack, list, powerForTime * 3.0F, 1.0F, powerForTime == 1.0F, null, powerForTime); // Paper - Pass draw strength ++ this.shoot(serverLevel, player, player.getUsedItemHand(), stack, list, powerForTime * 3.0F, (float) serverLevel.purpurConfig.bowProjectileOffset, powerForTime == 1.0F, null, powerForTime); // Paper - Pass draw strength // Purpur - Projectile offset config } level.playSound( @@ -13925,7 +13925,7 @@ index de287715568f358dd83383d68f845df9a7b5a117..8c7be8a71348a3e66c8bf6b6cb39fe00 return true; diff --git a/net/minecraft/world/item/CrossbowItem.java b/net/minecraft/world/item/CrossbowItem.java -index f5189cf0a0006864ac67b191cc0f1cd63b40f9e2..ff4294b9bcb6e2bb0f9d51dee6dcc889e45df95c 100644 +index 45fc973971d00c35e5b715bfa6ae5042822ed35f..2ab3da301f7edbb811c2e055f75434a799ef093a 100644 --- a/net/minecraft/world/item/CrossbowItem.java +++ b/net/minecraft/world/item/CrossbowItem.java @@ -66,7 +66,7 @@ public class CrossbowItem extends ProjectileWeaponItem { @@ -14217,10 +14217,10 @@ index a928124ee46a10e9033f771970198e36712917a6..65ff8078474d5039238e9398d8cfc12e // Paper end - Add PlayerNameEntityEvent mob.setPersistenceRequired(); diff --git a/net/minecraft/world/item/ProjectileWeaponItem.java b/net/minecraft/world/item/ProjectileWeaponItem.java -index 220a1d955f31698d5aa6c81c6c779a87c17de447..662e286f40e042823fa7cdd9e27b44e4bfad9cb9 100644 +index 1a9f91f3ee9c4d3902106eebd2639cc85a0dc34c..fb5077450aa9f7b7a03dd20c27a68dfdaab5ef06 100644 --- a/net/minecraft/world/item/ProjectileWeaponItem.java +++ b/net/minecraft/world/item/ProjectileWeaponItem.java -@@ -108,6 +108,8 @@ public abstract class ProjectileWeaponItem extends Item { +@@ -109,6 +109,8 @@ public abstract class ProjectileWeaponItem extends Item { abstractArrow.setCritArrow(true); } diff --git a/leaf-server/minecraft-patches/features/0100-Fix-Pufferfish-and-Purpur-patches.patch b/leaf-server/minecraft-patches/features/0100-Fix-Pufferfish-and-Purpur-patches.patch index 91a02e2f..ddc7059c 100644 --- a/leaf-server/minecraft-patches/features/0100-Fix-Pufferfish-and-Purpur-patches.patch +++ b/leaf-server/minecraft-patches/features/0100-Fix-Pufferfish-and-Purpur-patches.patch @@ -65,10 +65,10 @@ index 35fd539eb2bfe60ad17ab1e558a01273666acc54..445bbdc8da7f1fdbddfc4d8787d78fea this.values[this.vp++ & 0xFF] = (int)(l * 100L / Runtime.getRuntime().maxMemory()); this.repaint(); diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index bc935e51c2c5134813d3476da14a596fc47cec76..4f88a9f4f7a1f5234e1f506e1e3d22a5e1710a98 100644 +index d2c1da7df4961fddbb7db952d817f127ece275d9..39d4ae0ae1ec89007fe1c86dc8d3409902890552 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1287,7 +1287,7 @@ public class ServerGamePacketListenerImpl +@@ -1289,7 +1289,7 @@ public class ServerGamePacketListenerImpl } if (byteTotal > byteAllowed) { diff --git a/leaf-server/minecraft-patches/features/0105-Remove-UseItemOnPacket-Too-Far-check.patch b/leaf-server/minecraft-patches/features/0105-Remove-UseItemOnPacket-Too-Far-check.patch index f62aee9f..f1d811bd 100644 --- a/leaf-server/minecraft-patches/features/0105-Remove-UseItemOnPacket-Too-Far-check.patch +++ b/leaf-server/minecraft-patches/features/0105-Remove-UseItemOnPacket-Too-Far-check.patch @@ -7,10 +7,10 @@ This Check is added in 1.17.x -> 1.18.x that updated by Mojang. By removing this check, it gives ability for hackers to use some modules of hack clients. diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 62586fc315b473761579daa863f89df150fb9576..956a19d137243baddcc44927b3ae77697ca0bfdf 100644 +index 39d4ae0ae1ec89007fe1c86dc8d3409902890552..470660998d3df511f00936bcaa210142ab8ba7b2 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2073,8 +2073,13 @@ public class ServerGamePacketListenerImpl +@@ -2075,8 +2075,13 @@ public class ServerGamePacketListenerImpl BlockPos blockPos = hitResult.getBlockPos(); if (this.player.canInteractWithBlock(blockPos, 1.0)) { Vec3 vec3 = location.subtract(Vec3.atCenterOf(blockPos)); diff --git a/leaf-server/minecraft-patches/features/0130-Improve-Purpur-AFK-system.patch b/leaf-server/minecraft-patches/features/0130-Improve-Purpur-AFK-system.patch index 780bf4b0..b0344ebc 100644 --- a/leaf-server/minecraft-patches/features/0130-Improve-Purpur-AFK-system.patch +++ b/leaf-server/minecraft-patches/features/0130-Improve-Purpur-AFK-system.patch @@ -53,10 +53,10 @@ index f3ccabaf4ff9bd0265415193831fd22b1868c00e..6d3b895fcbb3c2fe4438e1e30d87dc21 } else { getBukkitEntity().setPlayerListName(prefix + scoreboardName + suffix, true); diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index cec88f9bf2ca92dcd97addfbf256cda0bd0b3f6a..76e197dc09f07b5a0156dbc629dfd6818bd03110 100644 +index 470660998d3df511f00936bcaa210142ab8ba7b2..220dd097aa1d912feb6699dccd1b68523c14cdf6 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2322,6 +2322,7 @@ public class ServerGamePacketListenerImpl +@@ -2324,6 +2324,7 @@ public class ServerGamePacketListenerImpl @Override public void handleChatCommand(ServerboundChatCommandPacket packet) { @@ -64,7 +64,7 @@ index cec88f9bf2ca92dcd97addfbf256cda0bd0b3f6a..76e197dc09f07b5a0156dbc629dfd681 this.tryHandleChat(packet.command(), () -> { // CraftBukkit start - SPIGOT-7346: Prevent disconnected players from executing commands if (this.player.hasDisconnected()) { -@@ -2330,7 +2331,7 @@ public class ServerGamePacketListenerImpl +@@ -2332,7 +2333,7 @@ public class ServerGamePacketListenerImpl // CraftBukkit end this.performUnsignedChatCommand(packet.command()); this.detectRateSpam("/" + packet.command()); // Spigot @@ -73,7 +73,7 @@ index cec88f9bf2ca92dcd97addfbf256cda0bd0b3f6a..76e197dc09f07b5a0156dbc629dfd681 } private void performUnsignedChatCommand(String command) { -@@ -2363,6 +2364,7 @@ public class ServerGamePacketListenerImpl +@@ -2365,6 +2366,7 @@ public class ServerGamePacketListenerImpl public void handleSignedChatCommand(ServerboundChatCommandSignedPacket packet) { Optional optional = this.unpackAndApplyLastSeen(packet.lastSeenMessages()); if (!optional.isEmpty()) { @@ -81,7 +81,7 @@ index cec88f9bf2ca92dcd97addfbf256cda0bd0b3f6a..76e197dc09f07b5a0156dbc629dfd681 this.tryHandleChat(packet.command(), () -> { // CraftBukkit start - SPIGOT-7346: Prevent disconnected players from executing commands if (this.player.hasDisconnected()) { -@@ -2371,7 +2373,7 @@ public class ServerGamePacketListenerImpl +@@ -2373,7 +2375,7 @@ public class ServerGamePacketListenerImpl // CraftBukkit end this.performSignedChatCommand(packet, optional.get()); this.detectRateSpam("/" + packet.command()); // Spigot @@ -90,7 +90,7 @@ index cec88f9bf2ca92dcd97addfbf256cda0bd0b3f6a..76e197dc09f07b5a0156dbc629dfd681 } } -@@ -2478,12 +2480,17 @@ public class ServerGamePacketListenerImpl +@@ -2480,12 +2482,17 @@ public class ServerGamePacketListenerImpl return dispatcher.parse(command, this.player.createCommandSourceStack()); } @@ -110,7 +110,7 @@ index cec88f9bf2ca92dcd97addfbf256cda0bd0b3f6a..76e197dc09f07b5a0156dbc629dfd681 this.player.resetLastActionTime(); // CraftBukkit start if (sync) { -@@ -2495,6 +2502,40 @@ public class ServerGamePacketListenerImpl +@@ -2497,6 +2504,40 @@ public class ServerGamePacketListenerImpl } } diff --git a/leaf-server/minecraft-patches/features/0170-Multithreaded-Tracker.patch b/leaf-server/minecraft-patches/features/0170-Multithreaded-Tracker.patch index 778b318e..18693aa4 100644 --- a/leaf-server/minecraft-patches/features/0170-Multithreaded-Tracker.patch +++ b/leaf-server/minecraft-patches/features/0170-Multithreaded-Tracker.patch @@ -225,10 +225,10 @@ index 5943b18f172fb1d77ef1fe768daa8e8f43c3c8c1..7b85a9ebdbe3e8bee0a8fc100ede8a3f } } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index c34cf83f79314198b0f7a747e4ae68b88d09d2cd..c8590517efe4124c2b1db2b927d131b804736400 100644 +index 729f595491c7a4edf24dff2e876dfb69ade87a17..a3069b29a1b78012314747d705e27c167acd10b3 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1876,7 +1876,7 @@ public class ServerGamePacketListenerImpl +@@ -1878,7 +1878,7 @@ public class ServerGamePacketListenerImpl } public void internalTeleport(PositionMoveRotation posMoveRotation, Set relatives) { diff --git a/leaf-server/minecraft-patches/features/0188-Lithium-equipment-tracking.patch b/leaf-server/minecraft-patches/features/0188-Lithium-equipment-tracking.patch index dba94fb4..76a059e9 100644 --- a/leaf-server/minecraft-patches/features/0188-Lithium-equipment-tracking.patch +++ b/leaf-server/minecraft-patches/features/0188-Lithium-equipment-tracking.patch @@ -273,10 +273,10 @@ index 7e9ace691bb2662afd2c0fc504007a6d22a8aec0..dabd49c7b9e689be4b476c16b28cbb8e // Paper start - EntityEquipmentChangedEvent record EquipmentChangeImpl(org.bukkit.inventory.ItemStack oldItem, org.bukkit.inventory.ItemStack newItem) implements io.papermc.paper.event.entity.EntityEquipmentChangedEvent.EquipmentChange { diff --git a/net/minecraft/world/entity/decoration/ArmorStand.java b/net/minecraft/world/entity/decoration/ArmorStand.java -index 49500127eb3a471c41dc3ff32372ad6f20c6d69a..a5a6e4cd74a5444ce06828404036de1728a1a5ce 100644 +index 0417175c7beabbca53cd080d158001eabe3941f0..cb2a8f9cff99a7a906bc7be09d301728742bc11e 100644 --- a/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -551,8 +551,8 @@ public class ArmorStand extends LivingEntity { +@@ -559,8 +559,8 @@ public class ArmorStand extends LivingEntity { } if (this.noTickEquipmentDirty) { diff --git a/leaf-server/minecraft-patches/features/0218-PaperPR-Fix-cancelled-Projectile-Events-still-consum.patch b/leaf-server/minecraft-patches/features/0218-PaperPR-Fix-cancelled-Projectile-Events-still-consum.patch index 8fc2560a..f94c8754 100644 --- a/leaf-server/minecraft-patches/features/0218-PaperPR-Fix-cancelled-Projectile-Events-still-consum.patch +++ b/leaf-server/minecraft-patches/features/0218-PaperPR-Fix-cancelled-Projectile-Events-still-consum.patch @@ -11,7 +11,7 @@ Paper pull request: https://github.com/PaperMC/Paper/pull/12124 fixes https://github.com/PaperMC/Paper/issues/12123 diff --git a/net/minecraft/world/item/BowItem.java b/net/minecraft/world/item/BowItem.java -index b3e003694ce0da357e91ab3ce2b1380f9ab0a32a..4d5347a6a2fc8b10d11f89220f537c81a9a7be71 100644 +index ce1ce18410fc1d47d999c918a8f880b43bf9797c..b9d31b0cbeabd5c62b810e50f612878624975d4e 100644 --- a/net/minecraft/world/item/BowItem.java +++ b/net/minecraft/world/item/BowItem.java @@ -41,9 +41,9 @@ public class BowItem extends ProjectileWeaponItem { @@ -21,13 +21,13 @@ index b3e003694ce0da357e91ab3ce2b1380f9ab0a32a..4d5347a6a2fc8b10d11f89220f537c81 - List list = draw(stack, projectile, player); + List list = draw(stack, projectile, player, ProjectileDrawingItemConsumption.MAYBE_LATER); // Paper - prevent item consumption for cancelled events if (level instanceof ServerLevel serverLevel && !list.isEmpty()) { -- this.shoot(serverLevel, player, player.getUsedItemHand(), stack, list, powerForTime * 3.0F, (float) serverLevel.purpurConfig.bowProjectileOffset, powerForTime == 1.0F, null); // Purpur - Projectile offset config -+ if (!this.shoot(serverLevel, player, player.getUsedItemHand(), stack, new UnrealizedDrawResult(list, projectile), powerForTime * 3.0F, (float) serverLevel.purpurConfig.bowProjectileOffset, powerForTime == 1.0F, null)) return false; // Purpur - Projectile offset config // Paper - prevent item consumption for cancelled events +- this.shoot(serverLevel, player, player.getUsedItemHand(), stack, list, powerForTime * 3.0F, (float) serverLevel.purpurConfig.bowProjectileOffset, powerForTime == 1.0F, null, powerForTime); // Paper - Pass draw strength // Purpur - Projectile offset config ++ if (!this.shoot(serverLevel, player, player.getUsedItemHand(), stack, new UnrealizedDrawResult(list, projectile), powerForTime * 3.0F, (float) serverLevel.purpurConfig.bowProjectileOffset, powerForTime == 1.0F, null, powerForTime)) return false; // Paper - Pass draw strength // Purpur - Projectile offset config // Paper - prevent item consumption for cancelled events } level.playSound( diff --git a/net/minecraft/world/item/CrossbowItem.java b/net/minecraft/world/item/CrossbowItem.java -index ff4294b9bcb6e2bb0f9d51dee6dcc889e45df95c..0a8041741b8367478ec2cb658071fa4f29513040 100644 +index 2ab3da301f7edbb811c2e055f75434a799ef093a..74fd1472d6840b7106d8f424319170e2e891bbac 100644 --- a/net/minecraft/world/item/CrossbowItem.java +++ b/net/minecraft/world/item/CrossbowItem.java @@ -95,7 +95,7 @@ public class CrossbowItem extends ProjectileWeaponItem { @@ -59,13 +59,13 @@ index ff4294b9bcb6e2bb0f9d51dee6dcc889e45df95c..0a8041741b8367478ec2cb658071fa4f - ChargedProjectiles chargedProjectiles = weapon.set(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.EMPTY); + ChargedProjectiles chargedProjectiles = weapon.get(DataComponents.CHARGED_PROJECTILES); // Paper - prevent item consumption for cancelled events if (chargedProjectiles != null && !chargedProjectiles.isEmpty()) { -- this.shoot(serverLevel, shooter, hand, weapon, chargedProjectiles.getItems(), velocity, inaccuracy, shooter instanceof Player, target); -+ if (!this.shoot(serverLevel, shooter, hand, weapon, chargedProjectiles.getItems(), velocity, inaccuracy, shooter instanceof Player, target)) return; // Paper - prevent item consumption for cancelled events +- this.shoot(serverLevel, shooter, hand, weapon, chargedProjectiles.getItems(), velocity, inaccuracy, shooter instanceof Player, target, 1); // Paper - Pass draw strength ++ if (!this.shoot(serverLevel, shooter, hand, weapon, chargedProjectiles.getItems(), velocity, inaccuracy, shooter instanceof Player, target, 1)) return; // Paper - Pass draw strength // Paper - prevent item consumption for cancelled events if (shooter instanceof ServerPlayer serverPlayer) { CriteriaTriggers.SHOT_CROSSBOW.trigger(serverPlayer, weapon); serverPlayer.awardStat(Stats.ITEM_USED.get(weapon.getItem())); diff --git a/net/minecraft/world/item/ProjectileWeaponItem.java b/net/minecraft/world/item/ProjectileWeaponItem.java -index 662e286f40e042823fa7cdd9e27b44e4bfad9cb9..ebaf3422437b6815c8ab1d5f91c7e1de22dcc722 100644 +index fb5077450aa9f7b7a03dd20c27a68dfdaab5ef06..f37fd3b9ab725e5b8eb7fccf9b35bbc09e3a2d0c 100644 --- a/net/minecraft/world/item/ProjectileWeaponItem.java +++ b/net/minecraft/world/item/ProjectileWeaponItem.java @@ -40,7 +40,20 @@ public abstract class ProjectileWeaponItem extends Item { @@ -90,12 +90,12 @@ index 662e286f40e042823fa7cdd9e27b44e4bfad9cb9..ebaf3422437b6815c8ab1d5f91c7e1de ServerLevel level, LivingEntity shooter, InteractionHand hand, -@@ -51,6 +64,23 @@ public abstract class ProjectileWeaponItem extends Item { - boolean isCrit, +@@ -52,6 +65,24 @@ public abstract class ProjectileWeaponItem extends Item { @Nullable LivingEntity target + ,float drawStrength // Paper - Pass draw strength ) { + // Paper start - prevent item consumption for cancelled events -+ return shoot(level, shooter, hand, weapon, new UnrealizedDrawResult(projectileItems, null), velocity, inaccuracy, isCrit, target); ++ return shoot(level, shooter, hand, weapon, new UnrealizedDrawResult(projectileItems, null), velocity, inaccuracy, isCrit, target, drawStrength); + } + protected boolean shoot( + ServerLevel level, @@ -107,6 +107,7 @@ index 662e286f40e042823fa7cdd9e27b44e4bfad9cb9..ebaf3422437b6815c8ab1d5f91c7e1de + float inaccuracy, + boolean isCrit, + @Nullable LivingEntity target ++ ,float drawStrength // Paper - Pass draw strength + ) { + List projectileItems = unrealizedDrawResult.projectileStacks(); + boolean atLeastOneShootBowEventUncancelled = false; @@ -114,13 +115,13 @@ index 662e286f40e042823fa7cdd9e27b44e4bfad9cb9..ebaf3422437b6815c8ab1d5f91c7e1de float f = EnchantmentHelper.processProjectileSpread(level, weapon, shooter, 0.0F); float f1 = projectileItems.size() == 1 ? 0.0F : 2.0F * f / (projectileItems.size() - 1); float f2 = (projectileItems.size() - 1) % 2 * f1 / 2.0F; -@@ -66,11 +96,13 @@ public abstract class ProjectileWeaponItem extends Item { +@@ -67,11 +98,13 @@ public abstract class ProjectileWeaponItem extends Item { Projectile projectile = this.createProjectile(level, shooter, weapon, itemStack, isCrit); this.shootProjectile(shooter, projectile, i1, velocity, inaccuracy, f4, target); -- org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(shooter, weapon, itemStack, projectile, hand, velocity, true); +- org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(shooter, weapon, itemStack, projectile, hand, drawStrength, true); + boolean preConsumption = weapon.is(Items.CROSSBOW) || shooter.level().shouldConsumeArrow; -+ org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(shooter, weapon, itemStack, projectile, hand, velocity, preConsumption); ++ org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(shooter, weapon, itemStack, projectile, hand, drawStrength, preConsumption); if (event.isCancelled()) { event.getProjectile().remove(); - return; @@ -130,7 +131,7 @@ index 662e286f40e042823fa7cdd9e27b44e4bfad9cb9..ebaf3422437b6815c8ab1d5f91c7e1de if (event.getProjectile() == projectile.getBukkitEntity()) { if (Projectile.spawnProjectile( -@@ -81,7 +113,25 @@ public abstract class ProjectileWeaponItem extends Item { +@@ -82,7 +115,25 @@ public abstract class ProjectileWeaponItem extends Item { if (shooter instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { serverPlayer.containerMenu.sendAllDataToRemote(); } @@ -157,7 +158,7 @@ index 662e286f40e042823fa7cdd9e27b44e4bfad9cb9..ebaf3422437b6815c8ab1d5f91c7e1de } } // CraftBukkit end -@@ -91,6 +141,7 @@ public abstract class ProjectileWeaponItem extends Item { +@@ -92,6 +143,7 @@ public abstract class ProjectileWeaponItem extends Item { } } } @@ -165,7 +166,7 @@ index 662e286f40e042823fa7cdd9e27b44e4bfad9cb9..ebaf3422437b6815c8ab1d5f91c7e1de } protected int getDurabilityUse(ItemStack stack) { -@@ -114,11 +165,21 @@ public abstract class ProjectileWeaponItem extends Item { +@@ -115,11 +167,21 @@ public abstract class ProjectileWeaponItem extends Item { } protected static List draw(ItemStack weapon, ItemStack ammo, LivingEntity shooter) { @@ -191,7 +192,7 @@ index 662e286f40e042823fa7cdd9e27b44e4bfad9cb9..ebaf3422437b6815c8ab1d5f91c7e1de if (ammo.isEmpty()) { return List.of(); } else { -@@ -126,8 +187,9 @@ public abstract class ProjectileWeaponItem extends Item { +@@ -127,8 +189,9 @@ public abstract class ProjectileWeaponItem extends Item { List list = new ArrayList<>(i); ItemStack itemStack = ammo.copy(); @@ -202,7 +203,7 @@ index 662e286f40e042823fa7cdd9e27b44e4bfad9cb9..ebaf3422437b6815c8ab1d5f91c7e1de if (!itemStack1.isEmpty()) { list.add(itemStack1); } -@@ -138,17 +200,23 @@ public abstract class ProjectileWeaponItem extends Item { +@@ -139,17 +202,23 @@ public abstract class ProjectileWeaponItem extends Item { } protected static ItemStack useAmmo(ItemStack weapon, ItemStack ammo, LivingEntity shooter, boolean intangable) { diff --git a/todos.md b/todos.md index 4d7e6a7c..ae000cf7 100644 --- a/todos.md +++ b/todos.md @@ -11,4 +11,5 @@ - [ ] Check beacon issues fix - [ ] Update README.md - [ ] Remove stream in Inventory and check new changes +- [ ] Check Purpur's Projectile offset config, in BowItem shoot - [ ] Update from Leaf 1.21.4 (curr commit: `1431eff510a3ac1725ec82d52f5c253b4b7932d9`)