diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/HookConfigParser.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/HookConfigParser.java index 74d35884..e630ff95 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/HookConfigParser.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/HookConfigParser.java @@ -43,6 +43,7 @@ public class HookConfigParser { private final String id; private final String material; + private final int maxUsages; private final List, Context>>> tagConsumers = new ArrayList<>(); private final List> eventBuilderConsumers = new ArrayList<>(); private final List> hookBuilderConsumers = new ArrayList<>(); @@ -53,6 +54,7 @@ public class HookConfigParser { public HookConfigParser(String id, Section section, Map> functionMap) { this.id = id; this.material = section.getString("material"); + this.maxUsages = section.getInt("max-durability", -1); if (!section.contains("tag")) section.set("tag", true); analyze(section, functionMap); } @@ -135,6 +137,7 @@ public class HookConfigParser { public HookConfig getHook() { HookConfig.Builder builder = HookConfig.builder() + .maxUsages(maxUsages) .id(id); for (Consumer consumer : hookBuilderConsumers) { consumer.accept(builder); diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/hook/HookConfig.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/hook/HookConfig.java index 67a3ac2b..52bb8fbd 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/hook/HookConfig.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/hook/HookConfig.java @@ -38,6 +38,13 @@ public interface HookConfig { */ List lore(); + /** + * Gets the max usages of the hook + * + * @return the max usages + */ + int maxUsages(); + /** * Creates a new builder for constructing {@link HookConfig} instances. * @@ -60,6 +67,11 @@ public interface HookConfig { */ Builder id(String id); + /** + * Sets the max usages of the hook + */ + Builder maxUsages(int maxUsages); + /** * Sets the lore for the hook configuration. * diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/hook/HookConfigImpl.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/hook/HookConfigImpl.java index 59256ed1..4a81539e 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/hook/HookConfigImpl.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/hook/HookConfigImpl.java @@ -22,12 +22,12 @@ import java.util.List; public class HookConfigImpl implements HookConfig { private final String id; - private final int maxDurability; + private final int maxUsages; private final List lore; - public HookConfigImpl(String id, int maxDurability, List lore) { + public HookConfigImpl(String id, int maxUsages, List lore) { this.id = id; - this.maxDurability = maxDurability; + this.maxUsages = maxUsages; this.lore = lore; } @@ -41,9 +41,14 @@ public class HookConfigImpl implements HookConfig { return lore; } + @Override + public int maxUsages() { + return maxUsages; + } + public static class BuilderImpl implements Builder { private String id; - private int maxDurability; + private int maxUsages; private List lore; @Override public Builder id(String id) { @@ -51,13 +56,18 @@ public class HookConfigImpl implements HookConfig { return this; } @Override + public Builder maxUsages(int maxUsages) { + this.maxUsages = maxUsages; + return this; + } + @Override public Builder lore(List lore) { this.lore = lore; return this; } @Override public HookConfig build() { - return new HookConfigImpl(id, maxDurability, lore); + return new HookConfigImpl(id, maxUsages, lore); } } } diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/item/ItemManager.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/item/ItemManager.java index 87f6d434..2ec3769a 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/item/ItemManager.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/item/ItemManager.java @@ -95,6 +95,15 @@ public interface ItemManager extends Reloadable { @Nullable String getCustomFishingItemID(@NotNull ItemStack itemStack); + /** + * Gets the loot by providing the context + * + * @param context context + * @param rod rod + * @param hook hook + * @return the loot + */ + @NotNull ItemStack getItemLoot(@NotNull Context context, ItemStack rod, FishHook hook); /** diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/hook/BukkitHookManager.java b/core/src/main/java/net/momirealms/customfishing/bukkit/hook/BukkitHookManager.java index 082d4a26..a46e2bbb 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/hook/BukkitHookManager.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/hook/BukkitHookManager.java @@ -151,7 +151,6 @@ public class BukkitHookManager implements HookManager, Listener { newLore.add(previous); } wrapped.lore(newLore); - wrapped.load(); return; } @@ -201,6 +200,9 @@ public class BukkitHookManager implements HookManager, Listener { DurabilityItem durabilityItem; if (wrappedHook.hasTag("CustomFishing", "max_dur")) { durabilityItem = new CustomDurabilityItem(wrappedHook); + } else if (hookConfig.maxUsages() > 0) { + wrappedHook.setTag(hookConfig.maxUsages(), "CustomFishing", "max_dur"); + durabilityItem = new CustomDurabilityItem(wrappedHook); } else { durabilityItem = new VanillaDurabilityItem(wrappedHook); } diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/item/BukkitItemManager.java b/core/src/main/java/net/momirealms/customfishing/bukkit/item/BukkitItemManager.java index 0b244bad..7f4c5ace 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/item/BukkitItemManager.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/item/BukkitItemManager.java @@ -177,6 +177,7 @@ public class BukkitItemManager implements ItemManager, Listener { return (String) factory.wrap(itemStack).getTag("CustomFishing", "id").orElse(null); } + @NotNull @Override public ItemStack getItemLoot(@NotNull Context context, ItemStack rod, FishHook hook) { String id = requireNonNull(context.arg(ContextKeys.ID));