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); + } +}