From 8fb6a0f5e7c86ff49a9f5bc60ac8c79a2d805f71 Mon Sep 17 00:00:00 2001 From: XiaoMoMi <972454774@qq.com> Date: Thu, 9 Nov 2023 20:36:45 +0800 Subject: [PATCH] fix durability --- .../mechanic/effect/EffectManagerImpl.java | 2 +- .../mechanic/fishing/FishingManagerImpl.java | 20 ++++++-------- .../mechanic/item/ItemManagerImpl.java | 5 +--- .../customfishing/setting/CFConfig.java | 1 + .../customfishing/util/ItemUtils.java | 26 ++++++++++++------- 5 files changed, 28 insertions(+), 26 deletions(-) diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/effect/EffectManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/effect/EffectManagerImpl.java index f04d8dcd..e8b62e13 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/effect/EffectManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/effect/EffectManagerImpl.java @@ -203,7 +203,7 @@ public class EffectManagerImpl implements EffectManager { String key = split[0]; List members = plugin.getLootManager().getLootGroup(key); if (members == null) { - LogUtils.warn("Group " + key + " doesn't include any loot. The effect would not take effect."); + LogUtils.warn("Group " + key + " doesn't contain any loot. The effect would not take effect."); return result; } for (String loot : members) { diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/fishing/FishingManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/fishing/FishingManagerImpl.java index 3812e03e..d83e9cef 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/fishing/FishingManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/fishing/FishingManagerImpl.java @@ -557,22 +557,19 @@ public class FishingManagerImpl implements Listener, FishingManager { gamingPlayerMap.remove(uuid); plugin.getScheduler().runTaskSync(() -> { - if (player.getGameMode() != GameMode.CREATIVE) - outer: { - ItemStack rod = tempFishingState.getPreparation().getRodItemStack(); -// PlayerItemDamageEvent damageEvent = new PlayerItemDamageEvent(player, rod, 1, 1); -// Bukkit.getPluginManager().callEvent(damageEvent); -// if (damageEvent.isCancelled()) { -// break outer; -// } + if (player.getGameMode() != GameMode.CREATIVE) { + ItemStack rod = tempFishingState.getPreparation().getRodItemStack(); + plugin.getScheduler().runTaskSyncLater(() -> { ItemUtils.decreaseHookDurability(rod, 1, false); ItemUtils.decreaseDurability(player, rod, 1, true); - } + }, player.getLocation(), 1); + } - if (gamingPlayer.isSuccessful()) + if (gamingPlayer.isSuccessful()) { success(tempFishingState, fishHook); - else + } else { fail(tempFishingState, fishHook); + } fishHook.remove(); @@ -648,7 +645,6 @@ public class FishingManagerImpl implements Listener, FishingManager { switch (loot.getType()) { case ITEM -> { - // build the items for multiple times instead of using setAmount() to make sure that each item is unique if (loot.getID().equals("vanilla")) { Pair pair = vanillaLootMap.remove(player.getUniqueId()); diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/item/ItemManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/item/ItemManagerImpl.java index 596c15c9..45812693 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/item/ItemManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/item/ItemManagerImpl.java @@ -55,10 +55,7 @@ import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryPickupItemEvent; import org.bukkit.event.inventory.PrepareAnvilEvent; -import org.bukkit.event.player.PlayerAttemptPickupItemEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerItemConsumeEvent; -import org.bukkit.event.player.PlayerItemMendEvent; +import org.bukkit.event.player.*; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; diff --git a/plugin/src/main/java/net/momirealms/customfishing/setting/CFConfig.java b/plugin/src/main/java/net/momirealms/customfishing/setting/CFConfig.java index a5eb9497..8d9cdacc 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/setting/CFConfig.java +++ b/plugin/src/main/java/net/momirealms/customfishing/setting/CFConfig.java @@ -114,6 +114,7 @@ public class CFConfig { .setVersioning(new BasicVersioning("config-version")) .addIgnoredRoute(configVersion, "mechanics.mechanic-requirements", '.') .addIgnoredRoute(configVersion, "mechanics.global-events", '.') + .addIgnoredRoute(configVersion, "other-settings.placeholder-register", '.') .build() ); loadSettings(CustomFishingPlugin.getInstance().getConfig("config.yml")); diff --git a/plugin/src/main/java/net/momirealms/customfishing/util/ItemUtils.java b/plugin/src/main/java/net/momirealms/customfishing/util/ItemUtils.java index aae3c334..ee97e888 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/util/ItemUtils.java +++ b/plugin/src/main/java/net/momirealms/customfishing/util/ItemUtils.java @@ -20,6 +20,7 @@ package net.momirealms.customfishing.util; import de.tr7zw.changeme.nbtapi.NBTCompound; import de.tr7zw.changeme.nbtapi.NBTItem; import de.tr7zw.changeme.nbtapi.NBTList; +import net.Indyuce.mmoitems.api.interaction.util.DurabilityItem; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.ScoreComponent; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; @@ -205,16 +206,16 @@ public class ItemUtils { public static void decreaseDurability(Player player, ItemStack itemStack, int amount, boolean updateLore) { if (itemStack == null || itemStack.getType() == Material.AIR) return; - int unBreakingLevel = itemStack.getEnchantmentLevel(Enchantment.DURABILITY); - if (Math.random() > (double) 1 / (unBreakingLevel + 1)) { - return; - } NBTItem nbtItem = new NBTItem(itemStack); - if (nbtItem.getByte("Unbreakable") == 1) { - return; - } NBTCompound cfCompound = nbtItem.getCompound("CustomFishing"); if (cfCompound != null && cfCompound.hasTag("max_dur")) { + int unBreakingLevel = itemStack.getEnchantmentLevel(Enchantment.DURABILITY); + if (Math.random() > (double) 1 / (unBreakingLevel + 1)) { + return; + } + if (nbtItem.getByte("Unbreakable") == 1) { + return; + } int max = cfCompound.getInteger("max_dur"); int current = cfCompound.getInteger("cur_dur") - amount; cfCompound.setInteger("cur_dur", current); @@ -228,9 +229,16 @@ public class ItemUtils { } } else { ItemMeta previousMeta = itemStack.getItemMeta().clone(); - PlayerItemDamageEvent itemDamageEvent = new PlayerItemDamageEvent(player, itemStack, amount); + PlayerItemDamageEvent itemDamageEvent = new PlayerItemDamageEvent(player, itemStack, amount, amount); Bukkit.getPluginManager().callEvent(itemDamageEvent); - if (!itemStack.getItemMeta().equals(previousMeta)) { + if (!itemStack.getItemMeta().equals(previousMeta) || itemDamageEvent.isCancelled()) { + return; + } + int unBreakingLevel = itemStack.getEnchantmentLevel(Enchantment.DURABILITY); + if (Math.random() > (double) 1 / (unBreakingLevel + 1)) { + return; + } + if (nbtItem.getByte("Unbreakable") == 1) { return; } int damage = nbtItem.getInteger("Damage") + amount;