From d37d9e5d249fae7972084bd6371098d1126df759 Mon Sep 17 00:00:00 2001 From: Cryptite Date: Sat, 9 Nov 2024 10:00:07 -0600 Subject: [PATCH] A couple first patches --- ...02-Add-provided-Material-to-getDrops.patch | 31 +++++++++++ ...0003-Add-Player-to-SpongeAbsorbEvent.patch | 52 +++++++++++++++++++ ...03-Add-provided-Material-to-getDrops.patch | 38 ++++++++++++++ ...0004-Add-Player-to-SpongeAbsorbEvent.patch | 20 +++++++ 4 files changed, 141 insertions(+) create mode 100644 patches/api/0002-Add-provided-Material-to-getDrops.patch create mode 100644 patches/api/0003-Add-Player-to-SpongeAbsorbEvent.patch create mode 100644 patches/server/0003-Add-provided-Material-to-getDrops.patch create mode 100644 patches/server/0004-Add-Player-to-SpongeAbsorbEvent.patch diff --git a/patches/api/0002-Add-provided-Material-to-getDrops.patch b/patches/api/0002-Add-provided-Material-to-getDrops.patch new file mode 100644 index 000000000..8c12cfd43 --- /dev/null +++ b/patches/api/0002-Add-provided-Material-to-getDrops.patch @@ -0,0 +1,31 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Cryptite +Date: Sat, 9 Nov 2024 09:54:36 -0600 +Subject: [PATCH] Add provided Material to getDrops + + +diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java +index 0efd8bb70ebdb86372022c9e12ec89f229ab3b52..be4f8fc7e7d9b6fb3ef0f557c9f591431c902837 100644 +--- a/src/main/java/org/bukkit/block/Block.java ++++ b/src/main/java/org/bukkit/block/Block.java +@@ -677,6 +677,20 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr + @NotNull + Collection getDrops(@Nullable ItemStack tool, @Nullable Entity entity); // Paper + ++ // Slice start ++ /** ++ * Returns a list of items which would drop by the entity destroying this ++ * block as though it were a given Material with a specific tool ++ * ++ * @param blockType The block type to use as the source loot ++ * @param tool The tool or item in hand used for digging ++ * @param entity the entity destroying the block ++ * @return a list of dropped items for this type of block ++ */ ++ @NotNull ++ Collection getDrops(@NotNull Material blockType, @NotNull ItemStack tool, @Nullable Entity entity); ++ // Slice end ++ + /** + * Returns if the given item is a preferred choice to break this Block. + * diff --git a/patches/api/0003-Add-Player-to-SpongeAbsorbEvent.patch b/patches/api/0003-Add-Player-to-SpongeAbsorbEvent.patch new file mode 100644 index 000000000..28fee6a4c --- /dev/null +++ b/patches/api/0003-Add-Player-to-SpongeAbsorbEvent.patch @@ -0,0 +1,52 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Cryptite +Date: Sat, 9 Nov 2024 09:55:18 -0600 +Subject: [PATCH] Add Player to SpongeAbsorbEvent + + +diff --git a/src/main/java/org/bukkit/event/block/SpongeAbsorbEvent.java b/src/main/java/org/bukkit/event/block/SpongeAbsorbEvent.java +index 7029cfcd00ed5d9c7f06898ec2b81238ec775a70..0e2f21e0f1983d2e8b67deebf4d12d25107d1582 100644 +--- a/src/main/java/org/bukkit/event/block/SpongeAbsorbEvent.java ++++ b/src/main/java/org/bukkit/event/block/SpongeAbsorbEvent.java +@@ -7,6 +7,7 @@ import org.bukkit.block.BlockState; + import org.bukkit.event.Cancellable; + import org.bukkit.event.HandlerList; + import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Nullable; // Paper + + /** + * Called when a sponge absorbs water from the world. +@@ -21,11 +22,13 @@ public class SpongeAbsorbEvent extends BlockEvent implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled; ++ private final org.bukkit.entity.Player player; // Paper + private final List blocks; + +- public SpongeAbsorbEvent(@NotNull Block block, @NotNull List waterblocks) { ++ public SpongeAbsorbEvent(@NotNull Block block, @Nullable org.bukkit.entity.Player player, @NotNull List waterblocks) { // Paper + super(block); + this.blocks = waterblocks; ++ this.player = player; // Paper + } + + /** +@@ -41,6 +44,18 @@ public class SpongeAbsorbEvent extends BlockEvent implements Cancellable { + return blocks; + } + ++ // Paper start ++ /** ++ * Gets the Player that placed the Sponge Block ++ * ++ * @return The Player that placed the sponge block causing the absorb event, or null if no Player was involved ++ */ ++ @Nullable ++ public org.bukkit.entity.Player getPlayer() { ++ return player; ++ } ++ // Paper end ++ + @Override + public boolean isCancelled() { + return cancelled; diff --git a/patches/server/0003-Add-provided-Material-to-getDrops.patch b/patches/server/0003-Add-provided-Material-to-getDrops.patch new file mode 100644 index 000000000..a4b66e86c --- /dev/null +++ b/patches/server/0003-Add-provided-Material-to-getDrops.patch @@ -0,0 +1,38 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Cryptite +Date: Sat, 9 Nov 2024 09:54:36 -0600 +Subject: [PATCH] Add provided Material to getDrops + + +diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +index 5cb69d0b822e11a99a96aef4f59986d083b079f4..632f9d98eb0a7a641ce879afcf838b6a96077ef6 100644 +--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java ++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +@@ -592,7 +592,18 @@ public class CraftBlock implements Block { + + @Override + public Collection getDrops(ItemStack item, Entity entity) { +- net.minecraft.world.level.block.state.BlockState iblockdata = this.getNMS(); ++ return getDrops(null, item, entity); // Slice start ++ } ++ ++ @Override ++ public Collection getDrops(Material blockType, ItemStack item, Entity entity) { ++ net.minecraft.world.level.block.state.BlockState iblockdata; ++ if (blockType == null) { ++ iblockdata = this.getNMS(); ++ } else { ++ iblockdata = ((CraftBlockData) blockType.createBlockData()).getState(); ++ } ++ + net.minecraft.world.item.ItemStack nms = CraftItemStack.asNMSCopy(item); + + // Modelled off EntityHuman#hasBlock +@@ -603,6 +614,7 @@ public class CraftBlock implements Block { + return Collections.emptyList(); + } + } ++ // Slice end + + @Override + public boolean isPreferredTool(ItemStack item) { diff --git a/patches/server/0004-Add-Player-to-SpongeAbsorbEvent.patch b/patches/server/0004-Add-Player-to-SpongeAbsorbEvent.patch new file mode 100644 index 000000000..bb6d483c7 --- /dev/null +++ b/patches/server/0004-Add-Player-to-SpongeAbsorbEvent.patch @@ -0,0 +1,20 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Cryptite +Date: Sat, 9 Nov 2024 09:55:18 -0600 +Subject: [PATCH] Add Player to SpongeAbsorbEvent + + +diff --git a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java +index 59cf905b1b5686f6f4f2bad94730ffa69d3a2834..7a8c80fe0df7a758751e2109e69934d5abfa0060 100644 +--- a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java ++++ b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java +@@ -117,7 +117,8 @@ public class SpongeBlock extends Block { + if (!blocks.isEmpty()) { + final org.bukkit.block.Block bblock = world.getWorld().getBlockAt(pos.getX(), pos.getY(), pos.getZ()); + +- SpongeAbsorbEvent event = new SpongeAbsorbEvent(bblock, (List) (List) blocks); ++ Level.PendingBlockEvent blockEvent = world.pendingPlayerBlockEvents.remove(pos); // Paper ++ SpongeAbsorbEvent event = new SpongeAbsorbEvent(bblock, blockEvent != null ? (org.bukkit.entity.Player) blockEvent.player.getBukkitEntity() : null, (List) (List) blocks); // Paper + world.getCraftServer().getPluginManager().callEvent(event); + + if (event.isCancelled()) {