From d38871eac9c02f3f0cf5d9e4ee4dd99cbb529858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sat, 20 Sep 2025 14:43:19 +0200 Subject: [PATCH] added MendingReducer tweak --- .../tweaks/mendingReducer/MendingReducer.java | 16 +++++++++++++ .../mendingReducer/MendingRepairListener.java | 23 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tweaks/mendingReducer/MendingReducer.java create mode 100644 craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tweaks/mendingReducer/MendingRepairListener.java diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tweaks/mendingReducer/MendingReducer.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tweaks/mendingReducer/MendingReducer.java new file mode 100644 index 0000000..8cd4e4e --- /dev/null +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tweaks/mendingReducer/MendingReducer.java @@ -0,0 +1,16 @@ +package eu.mhsl.craftattack.spawn.craftattack.appliances.tweaks.mendingReducer; + +import eu.mhsl.craftattack.spawn.core.appliance.Appliance; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class MendingReducer extends Appliance { + @Override + protected @NotNull List listeners() { + return List.of( + new MendingRepairListener() + ); + } +} diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tweaks/mendingReducer/MendingRepairListener.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tweaks/mendingReducer/MendingRepairListener.java new file mode 100644 index 0000000..bc7ed1b --- /dev/null +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tweaks/mendingReducer/MendingRepairListener.java @@ -0,0 +1,23 @@ +package eu.mhsl.craftattack.spawn.craftattack.appliances.tweaks.mendingReducer; + +import eu.mhsl.craftattack.spawn.core.appliance.ApplianceListener; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerItemMendEvent; + +public class MendingRepairListener extends ApplianceListener { + private static final double COST_MULTIPLIER = 2.0; + + @EventHandler + public void onMendingRepair(PlayerItemMendEvent event) { + int baseConsumed = event.getConsumedExperience(); + int orbExp = event.getExperienceOrb().getExperience(); + + int desiredTotal = (int) Math.ceil(baseConsumed * COST_MULTIPLIER); + int extraCost = Math.max(0, desiredTotal - baseConsumed); + + int maxExtraPossible = Math.max(0, orbExp - baseConsumed); + int extraApplied = Math.min(extraCost, maxExtraPossible); + + if (extraApplied > 0) event.getExperienceOrb().setExperience(orbExp - extraApplied); + } +}