mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-20 07:29:24 +00:00
Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@51345a1c Correct nullable fall location type PaperMC/Paper@93246a07 Fix errors when loading raid files without a PDC PaperMC/Paper@cb3ffd0b Don't store empty PDCs on raids PaperMC/Paper@d637ae85 Fix NoSuchElementException in EntityTransformEvent for slimes (#12510) PaperMC/Paper@10742373 Pass correct draw strength for EntityShootBowEvent (#12308) PaperMC/Paper@825685f8 Add PlayerPickBlockEvent and PlayerPickEntityEvent (#12425) PaperMC/Paper@2bd84f6f Expand PotionMeta Api to allow getting effective potion colour and effects (#12390) PaperMC/Paper@6f1f5b67 Fix ArmorStand items for canceled EntityDeathEvent (#12288)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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<BlockPos> 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() {
|
||||
|
||||
@@ -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<? extends FishingHook> 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<ServerPlayer> 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)
|
||||
|
||||
@@ -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<String> 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<ItemStack> 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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<LastSeenMessages> 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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Relative> relatives) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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<ItemStack> list = draw(stack, projectile, player);
|
||||
+ List<ItemStack> 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<ItemStack> 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<ItemStack> 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<ItemStack> 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) {
|
||||
|
||||
Reference in New Issue
Block a user