From 9199a1cd2c3801f89c9a0b81c796b385dc447588 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Sat, 14 Jun 2025 04:44:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A0=86=E8=82=A5=E6=88=90?= =?UTF-8?q?=E5=8A=9F=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/item/listener/ItemEventListener.java | 10 ++++++++++ .../craftengine/core/item/ItemSettings.java | 15 +++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/ItemEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/ItemEventListener.java index b827d63e2..4a86e42cc 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/ItemEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/ItemEventListener.java @@ -1,5 +1,6 @@ package net.momirealms.craftengine.bukkit.item.listener; +import io.papermc.paper.event.block.CompostItemEvent; import net.momirealms.craftengine.bukkit.api.event.CustomBlockInteractEvent; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; @@ -428,4 +429,13 @@ public class ItemEventListener implements Listener { event.setCancelled(true); } } + + @EventHandler(ignoreCancelled = true) + public void onCompost(CompostItemEvent event) { + ItemStack itemToCompost = event.getItem(); + Item wrapped = this.plugin.itemManager().wrap(itemToCompost); + Optional> optionalCustomItem = wrapped.getCustomItem(); + if (optionalCustomItem.isEmpty()) return; + event.setWillRaiseLevel(RandomUtils.generateRandomFloat(0, 1) < optionalCustomItem.get().settings().compostProbability()); + } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/ItemSettings.java b/core/src/main/java/net/momirealms/craftengine/core/item/ItemSettings.java index ea6e079d4..b908dbcd1 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/ItemSettings.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/ItemSettings.java @@ -37,6 +37,7 @@ public class ItemSettings { Key craftRemainder = null; List invulnerable = List.of(); boolean canEnchant = true; + float compostProbability= 0.5f; private ItemSettings() {} @@ -77,6 +78,7 @@ public class ItemSettings { newSettings.craftRemainder = settings.craftRemainder; newSettings.invulnerable = settings.invulnerable; newSettings.canEnchant = settings.canEnchant; + newSettings.compostProbability = settings.compostProbability; return newSettings; } @@ -157,6 +159,10 @@ public class ItemSettings { return invulnerable; } + public float compostProbability() { + return compostProbability; + } + public ItemSettings repairItems(List items) { this.anvilRepairItems = items; return this; @@ -172,6 +178,11 @@ public class ItemSettings { return this; } + public ItemSettings compostProbability(float chance) { + this.compostProbability = chance; + return this; + } + public ItemSettings canRepair(boolean canRepair) { this.canRepair = canRepair; return this; @@ -323,6 +334,10 @@ public class ItemSettings { Map args = MiscUtils.castToMap(value, false); return settings -> settings.helmet(new Helmet(SoundData.create(args.getOrDefault("equip-sound", "minecraft:intentionally_empty"), 1f, 1f))); })); + registerFactory("compost-probability", (value -> { + float chance = ResourceConfigUtils.getAsFloat(value, "compost-probability"); + return settings -> settings.compostProbability(chance); + })); registerFactory("dyeable", (value -> { boolean bool = (boolean) value; return settings -> settings.dyeable(bool);