From cb2220c7b1e43cf62491c051ddfcae11b919084d Mon Sep 17 00:00:00 2001 From: okx-code Date: Sun, 24 Nov 2024 23:52:08 +0000 Subject: [PATCH] Make reinforcement damage also deal tool damage --- ansible/files/paper-config/plugins/Citadel/config.yml | 4 ++++ .../java/vg/civcraft/mc/citadel/CitadelConfigManager.java | 7 +++++++ .../mc/citadel/playerstate/AbstractPlayerState.java | 6 ++++++ plugins/citadel-paper/src/main/resources/config.yml | 4 ++++ 4 files changed, 21 insertions(+) diff --git a/ansible/files/paper-config/plugins/Citadel/config.yml b/ansible/files/paper-config/plugins/Citadel/config.yml index 568a20d1d..e1b8e5491 100644 --- a/ansible/files/paper-config/plugins/Citadel/config.yml +++ b/ansible/files/paper-config/plugins/Citadel/config.yml @@ -435,3 +435,7 @@ reinforcementBreakMultipliers: - WAXED_EXPOSED_COPPER_DOOR - WAXED_OXIDIZED_COPPER_DOOR - WAXED_WEATHERED_COPPER_DOOR + +# number of times a tool can break a reinforcement before it gets damaged by one durability +# set to 0 to disable +reinforcementBreaksPerToolDamage: 50 diff --git a/plugins/citadel-paper/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java b/plugins/citadel-paper/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java index b4af7637a..adce71d30 100644 --- a/plugins/citadel-paper/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java +++ b/plugins/citadel-paper/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java @@ -57,6 +57,8 @@ public class CitadelConfigManager extends ConfigParser { private long activityDefault; private List activityWorlds; + private int reinforcementBreaksPerToolDamage; + private Map buffers; private ReinforcementMultiplier multiplier; @@ -113,6 +115,10 @@ public class CitadelConfigManager extends ConfigParser { return multiplier; } + public int getReinforcementBreaksPerToolDamage() { + return reinforcementBreaksPerToolDamage; + } + private ReinforcementEffect getReinforcementEffect(ConfigurationSection config) { if (config == null) { return null; @@ -185,6 +191,7 @@ public class CitadelConfigManager extends ConfigParser { activityDefault = config.getLong("activity-default", System.currentTimeMillis()); activityWorlds = config.getStringList("activity-map-worlds"); multiplier = ReinforcementMultiplier.parse(config.getMapList("reinforcementBreakMultipliers")); + reinforcementBreaksPerToolDamage = config.getInt("reinforcementBreaksPerToolDamage"); parseWorldBorderBuffers(config.getConfigurationSection("world-border-buffers")); diff --git a/plugins/citadel-paper/src/main/java/vg/civcraft/mc/citadel/playerstate/AbstractPlayerState.java b/plugins/citadel-paper/src/main/java/vg/civcraft/mc/citadel/playerstate/AbstractPlayerState.java index 6526da1a9..b9d07c399 100644 --- a/plugins/citadel-paper/src/main/java/vg/civcraft/mc/citadel/playerstate/AbstractPlayerState.java +++ b/plugins/citadel-paper/src/main/java/vg/civcraft/mc/citadel/playerstate/AbstractPlayerState.java @@ -2,6 +2,7 @@ package vg.civcraft.mc.citadel.playerstate; import java.util.HashMap; import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -10,6 +11,7 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; +import vg.civcraft.mc.citadel.Citadel; import vg.civcraft.mc.citadel.CitadelPermissionHandler; import vg.civcraft.mc.citadel.CitadelUtility; import vg.civcraft.mc.citadel.ReinforcementLogic; @@ -79,6 +81,10 @@ public abstract class AbstractPlayerState { if (dre.isCancelled()) { return; } + int reinforcementBreaksPerToolDamage = Citadel.getInstance().getConfigManager().getReinforcementBreaksPerToolDamage(); + if (reinforcementBreaksPerToolDamage > 0 && ThreadLocalRandom.current().nextInt(reinforcementBreaksPerToolDamage) == 0) { + e.getPlayer().getInventory().getItemInMainHand().damage(1, e.getPlayer()); + } damage = dre.getDamageDone(); ReinforcementLogic.damageReinforcement(rein, damage, e.getPlayer()); if (rein.getHealth() <= 0) { diff --git a/plugins/citadel-paper/src/main/resources/config.yml b/plugins/citadel-paper/src/main/resources/config.yml index 05a46ed14..6c6735957 100644 --- a/plugins/citadel-paper/src/main/resources/config.yml +++ b/plugins/citadel-paper/src/main/resources/config.yml @@ -269,3 +269,7 @@ world-border-buffers: z: 0.5 reinforcementBreakMultipliers: [] + +# number of times a tool can break a reinforcement before it gets damaged by one durability +# set to 0 to disable +reinforcementBreaksPerToolDamage: 50