From 1dfdbef42b4369e3ed82fe3f3d7f540277306051 Mon Sep 17 00:00:00 2001
From: Nacioszeczek <41339226+Nacioszeczek@users.noreply.github.com>
Date: Sun, 13 Aug 2023 01:31:32 +0200
Subject: [PATCH] SculkCatalyst bloom API (#9466)

---
 LICENSE.md                                    |  1 +
 .../api/0425-SculkCatalyst-bloom-API.patch    | 25 ++++++++++++++
 .../server/1005-SculkCatalyst-bloom-API.patch | 33 +++++++++++++++++++
 3 files changed, 59 insertions(+)
 create mode 100644 patches/api/0425-SculkCatalyst-bloom-API.patch
 create mode 100644 patches/server/1005-SculkCatalyst-bloom-API.patch

diff --git a/LICENSE.md b/LICENSE.md
index 3d1f06f60a..b1706a76d6 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -60,4 +60,5 @@ Luke Chambers <consolelogluke@gmail.com>
 Emily <emilia.lopezf.1999@gmail.com>
 dawon <dawon@dawon.eu>
 Ollie <69084614+olijeffers0n@users.noreply.github.com>
+Oliwier Miodun <naczs@blueflow.pl>
 ```
diff --git a/patches/api/0425-SculkCatalyst-bloom-API.patch b/patches/api/0425-SculkCatalyst-bloom-API.patch
new file mode 100644
index 0000000000..6ff7e7edff
--- /dev/null
+++ b/patches/api/0425-SculkCatalyst-bloom-API.patch
@@ -0,0 +1,25 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Oliwier Miodun <naczs@blueflow.pl>
+Date: Mon, 10 Jul 2023 17:59:42 +0200
+Subject: [PATCH] SculkCatalyst bloom API
+
+
+diff --git a/src/main/java/org/bukkit/block/SculkCatalyst.java b/src/main/java/org/bukkit/block/SculkCatalyst.java
+index ed94fbc0dd590e354b072d0c97fb60d0d5b5fa5c..3b3d73497bd90498294b44319ae7d96234d61aec 100644
+--- a/src/main/java/org/bukkit/block/SculkCatalyst.java
++++ b/src/main/java/org/bukkit/block/SculkCatalyst.java
+@@ -4,4 +4,14 @@ package org.bukkit.block;
+  * Represents a captured state of a sculk catalyst.
+  */
+ public interface SculkCatalyst extends TileState {
++
++    // Paper start - SculkCatalyst bloom API
++    /**
++     * Bloom at the specified location as if an entity that drops experience just died there.
++     *
++     * @param position position to bloom at
++     * @param charge charge to bloom with, normally the amount of experience dropped from the dead entity
++     */
++    void bloom(@org.jetbrains.annotations.NotNull io.papermc.paper.math.Position position, int charge);
++    // Paper end
+ }
diff --git a/patches/server/1005-SculkCatalyst-bloom-API.patch b/patches/server/1005-SculkCatalyst-bloom-API.patch
new file mode 100644
index 0000000000..5de0c0cf79
--- /dev/null
+++ b/patches/server/1005-SculkCatalyst-bloom-API.patch
@@ -0,0 +1,33 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Oliwier Miodun <naczs@blueflow.pl>
+Date: Mon, 10 Jul 2023 17:59:42 +0200
+Subject: [PATCH] SculkCatalyst bloom API
+
+== AT ==
+public net.minecraft.world.level.block.entity.SculkCatalystBlockEntity$CatalystListener bloom(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/util/RandomSource;)V
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftSculkCatalyst.java b/src/main/java/org/bukkit/craftbukkit/block/CraftSculkCatalyst.java
+index dc7d6c443af206f50d2b4ca260d64bb86b67553c..0fbead8742da8a2ff5261b747870487a218ffc32 100644
+--- a/src/main/java/org/bukkit/craftbukkit/block/CraftSculkCatalyst.java
++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftSculkCatalyst.java
+@@ -9,4 +9,20 @@ public class CraftSculkCatalyst extends CraftBlockEntityState<SculkCatalystBlock
+     public CraftSculkCatalyst(World world, SculkCatalystBlockEntity tileEntity) {
+         super(world, tileEntity);
+     }
++
++    // Paper start - SculkCatalyst bloom API
++    @Override
++    public void bloom(@org.jetbrains.annotations.NotNull io.papermc.paper.math.Position position, int charge) {
++        com.google.common.base.Preconditions.checkNotNull(position);
++        requirePlaced();
++
++        getTileEntity().getListener().bloom(
++            world.getHandle(),
++            getTileEntity().getBlockPos(),
++            getTileEntity().getBlockState(),
++            world.getHandle().getRandom()
++        );
++        getTileEntity().getListener().getSculkSpreader().addCursors(io.papermc.paper.util.MCUtil.toBlockPos(position), charge);
++    }
++    // Paper end
+ }