From fb96332a6161d7854028306e878d86ea71311452 Mon Sep 17 00:00:00 2001 From: Xiao-MoMi <70987828+Xiao-MoMi@users.noreply.github.com> Date: Sun, 8 Jan 2023 22:59:43 +0800 Subject: [PATCH] 1.2.17 --- build.gradle | 2 +- .../customfishing/CustomFishing.java | 1 + .../competition/Competition.java | 6 ++++ .../integration/ItemInterface.java | 3 ++ .../item/CustomFishingItemImpl.java | 14 ++++++++ .../integration/item/ItemsAdderItemImpl.java | 12 +++++++ .../integration/item/MMOItemsItemImpl.java | 12 +++++++ .../integration/item/MythicMobsItemImpl.java | 7 ++++ .../integration/item/OraxenItemImpl.java | 6 ++++ .../integration/quest/ClueScrollHook.java | 34 +++++++++++++++++++ .../customfishing/manager/FishingManager.java | 24 ++++--------- .../manager/IntegrationManager.java | 25 +++++++++++++- .../object/fishing/BobberCheckTask.java | 1 - .../object/totem/ActivatedTotem.java | 1 - src/main/resources/plugin.yml | 1 + 15 files changed, 127 insertions(+), 22 deletions(-) create mode 100644 src/main/java/net/momirealms/customfishing/integration/quest/ClueScrollHook.java diff --git a/build.gradle b/build.gradle index 15b7e7b3..2c110359 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'net.momirealms' -version = '1.2.16' +version = '1.2.17' repositories { mavenCentral() diff --git a/src/main/java/net/momirealms/customfishing/CustomFishing.java b/src/main/java/net/momirealms/customfishing/CustomFishing.java index a846cc29..68425fb9 100644 --- a/src/main/java/net/momirealms/customfishing/CustomFishing.java +++ b/src/main/java/net/momirealms/customfishing/CustomFishing.java @@ -97,6 +97,7 @@ public final class CustomFishing extends JavaPlugin { ConfigUtil.reload(); registerCommands(); + integrationManager.registerQuests(); AdventureUtil.consoleMessage("[CustomFishing] Plugin Enabled!"); new Metrics(this, 16648); diff --git a/src/main/java/net/momirealms/customfishing/competition/Competition.java b/src/main/java/net/momirealms/customfishing/competition/Competition.java index 0634776f..499ba69b 100644 --- a/src/main/java/net/momirealms/customfishing/competition/Competition.java +++ b/src/main/java/net/momirealms/customfishing/competition/Competition.java @@ -262,6 +262,12 @@ public class Competition { return bossBarManager; } + public void tryAddBossBarToPlayer(Player player) { + if (bossBarManager != null) { + bossBarManager.tryJoin(player); + } + } + public void refreshData(Player player, float score, boolean doubleScore) { if (this.goal == CompetitionGoal.CATCH_AMOUNT) { diff --git a/src/main/java/net/momirealms/customfishing/integration/ItemInterface.java b/src/main/java/net/momirealms/customfishing/integration/ItemInterface.java index f749ebe2..9a5ad67c 100644 --- a/src/main/java/net/momirealms/customfishing/integration/ItemInterface.java +++ b/src/main/java/net/momirealms/customfishing/integration/ItemInterface.java @@ -17,6 +17,7 @@ package net.momirealms.customfishing.integration; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; @@ -24,4 +25,6 @@ public interface ItemInterface { @Nullable ItemStack build(String id); + + boolean loseCustomDurability(ItemStack itemStack, Player player); } diff --git a/src/main/java/net/momirealms/customfishing/integration/item/CustomFishingItemImpl.java b/src/main/java/net/momirealms/customfishing/integration/item/CustomFishingItemImpl.java index 7db44949..c5b30f1f 100644 --- a/src/main/java/net/momirealms/customfishing/integration/item/CustomFishingItemImpl.java +++ b/src/main/java/net/momirealms/customfishing/integration/item/CustomFishingItemImpl.java @@ -19,7 +19,10 @@ package net.momirealms.customfishing.integration.item; import net.momirealms.customfishing.integration.ItemInterface; import net.momirealms.customfishing.manager.LootManager; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; import org.jetbrains.annotations.Nullable; public class CustomFishingItemImpl implements ItemInterface { @@ -30,4 +33,15 @@ public class CustomFishingItemImpl implements ItemInterface { if (material.contains(":")) return null; return LootManager.build(material); } + + @Override + public boolean loseCustomDurability(ItemStack itemStack, Player player) { + Damageable damageable = (Damageable) itemStack.getItemMeta(); + Enchantment enchantment = Enchantment.DURABILITY; + if (Math.random() < (1 / (double) (damageable.getEnchantLevel(enchantment) + 1))){ + damageable.setDamage(damageable.getDamage() + 1); + itemStack.setItemMeta(damageable); + } + return true; + } } diff --git a/src/main/java/net/momirealms/customfishing/integration/item/ItemsAdderItemImpl.java b/src/main/java/net/momirealms/customfishing/integration/item/ItemsAdderItemImpl.java index fb172cbf..67d8357f 100644 --- a/src/main/java/net/momirealms/customfishing/integration/item/ItemsAdderItemImpl.java +++ b/src/main/java/net/momirealms/customfishing/integration/item/ItemsAdderItemImpl.java @@ -19,6 +19,7 @@ package net.momirealms.customfishing.integration.item; import dev.lone.itemsadder.api.CustomStack; import net.momirealms.customfishing.integration.ItemInterface; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; @@ -32,4 +33,15 @@ public class ItemsAdderItemImpl implements ItemInterface { CustomStack customStack = CustomStack.getInstance(material); return customStack == null ? null : customStack.getItemStack(); } + + @Override + public boolean loseCustomDurability(ItemStack itemStack, Player player) { + CustomStack customStack = CustomStack.byItemStack(itemStack); + if (customStack == null) return false; + if (customStack.hasCustomDurability()) { + customStack.setDurability(customStack.getDurability() - 1); + return true; + } + return false; + } } diff --git a/src/main/java/net/momirealms/customfishing/integration/item/MMOItemsItemImpl.java b/src/main/java/net/momirealms/customfishing/integration/item/MMOItemsItemImpl.java index 0c2ca138..56bbc13e 100644 --- a/src/main/java/net/momirealms/customfishing/integration/item/MMOItemsItemImpl.java +++ b/src/main/java/net/momirealms/customfishing/integration/item/MMOItemsItemImpl.java @@ -19,9 +19,11 @@ package net.momirealms.customfishing.integration.item; import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.api.Type; +import net.Indyuce.mmoitems.api.interaction.util.DurabilityItem; import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem; import net.momirealms.customfishing.integration.ItemInterface; import org.apache.commons.lang.StringUtils; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; @@ -36,4 +38,14 @@ public class MMOItemsItemImpl implements ItemInterface { MMOItem mmoItem = MMOItems.plugin.getMMOItem(Type.get(split[0]), split[1]); return mmoItem == null ? null : mmoItem.newBuilder().build(); } + + @Override + public boolean loseCustomDurability(ItemStack itemStack, Player player) { + DurabilityItem durabilityItem = new DurabilityItem(player, itemStack); + durabilityItem.decreaseDurability(1); + final ItemStack newVersion = durabilityItem.toItem(); + if (newVersion == null) return false; + itemStack.setItemMeta(newVersion.getItemMeta()); + return true; + } } diff --git a/src/main/java/net/momirealms/customfishing/integration/item/MythicMobsItemImpl.java b/src/main/java/net/momirealms/customfishing/integration/item/MythicMobsItemImpl.java index 7616446a..fdbf5c8c 100644 --- a/src/main/java/net/momirealms/customfishing/integration/item/MythicMobsItemImpl.java +++ b/src/main/java/net/momirealms/customfishing/integration/item/MythicMobsItemImpl.java @@ -19,7 +19,9 @@ package net.momirealms.customfishing.integration.item; import io.lumine.mythic.bukkit.MythicBukkit; import io.lumine.mythic.core.items.ItemExecutor; +import io.lumine.mythic.core.items.MythicItem; import net.momirealms.customfishing.integration.ItemInterface; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; @@ -38,4 +40,9 @@ public class MythicMobsItemImpl implements ItemInterface { material = material.substring(11); return itemManager.getItemStack(material); } + + @Override + public boolean loseCustomDurability(ItemStack itemStack, Player player) { + return false; + } } diff --git a/src/main/java/net/momirealms/customfishing/integration/item/OraxenItemImpl.java b/src/main/java/net/momirealms/customfishing/integration/item/OraxenItemImpl.java index 000d1751..c5870432 100644 --- a/src/main/java/net/momirealms/customfishing/integration/item/OraxenItemImpl.java +++ b/src/main/java/net/momirealms/customfishing/integration/item/OraxenItemImpl.java @@ -20,6 +20,7 @@ package net.momirealms.customfishing.integration.item; import io.th0rgal.oraxen.items.ItemBuilder; import io.th0rgal.oraxen.items.OraxenItems; import net.momirealms.customfishing.integration.ItemInterface; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; @@ -33,4 +34,9 @@ public class OraxenItemImpl implements ItemInterface { ItemBuilder itemBuilder = OraxenItems.getItemById(material); return itemBuilder == null ? null : itemBuilder.build(); } + + @Override + public boolean loseCustomDurability(ItemStack itemStack, Player player) { + return false; + } } diff --git a/src/main/java/net/momirealms/customfishing/integration/quest/ClueScrollHook.java b/src/main/java/net/momirealms/customfishing/integration/quest/ClueScrollHook.java new file mode 100644 index 00000000..446940db --- /dev/null +++ b/src/main/java/net/momirealms/customfishing/integration/quest/ClueScrollHook.java @@ -0,0 +1,34 @@ +package net.momirealms.customfishing.integration.quest; + +import com.electro2560.dev.cluescrolls.api.ClueScrollsAPI; +import com.electro2560.dev.cluescrolls.api.CustomClue; +import net.momirealms.customfishing.CustomFishing; +import net.momirealms.customfishing.api.event.FishResultEvent; +import net.momirealms.customfishing.object.fishing.FishResult; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class ClueScrollHook implements Listener { + + private final CustomClue fishClue; + private final CustomClue mobClue; + private final CustomClue commonClue; + + public ClueScrollHook () { + commonClue = ClueScrollsAPI.getInstance().registerCustomClue(CustomFishing.plugin, "fish"); + fishClue = ClueScrollsAPI.getInstance().registerCustomClue(CustomFishing.plugin, "catch_fish"); + mobClue = ClueScrollsAPI.getInstance().registerCustomClue(CustomFishing.plugin, "catch_mob"); + } + + @EventHandler + public void onFish(FishResultEvent event) { + if (event.getResult() == FishResult.CAUGHT_LOOT || event.getResult() == FishResult.CAUGHT_VANILLA) { + fishClue.handle(event.getPlayer(), 1); + commonClue.handle(event.getPlayer(), 1); + } + if (event.getResult() == FishResult.CAUGHT_MOB) { + mobClue.handle(event.getPlayer(), 1); + commonClue.handle(event.getPlayer(), 1); + } + } +} diff --git a/src/main/java/net/momirealms/customfishing/manager/FishingManager.java b/src/main/java/net/momirealms/customfishing/manager/FishingManager.java index 0d87aa78..20680d76 100644 --- a/src/main/java/net/momirealms/customfishing/manager/FishingManager.java +++ b/src/main/java/net/momirealms/customfishing/manager/FishingManager.java @@ -58,14 +58,12 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; -import org.bukkit.inventory.meta.Damageable; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.lang.reflect.InvocationTargetException; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -511,7 +509,7 @@ public class FishingManager extends Function { if (Competition.currentCompetition != null){ float score = (float) (droppedItem.getScore() * scoreMultiplier); Competition.currentCompetition.refreshData(player, (float) (score * bonus.getScore()), isDouble); - Competition.currentCompetition.getBossBarManager().tryJoin(player); + Competition.currentCompetition.tryAddBossBarToPlayer(player); } dropItem(player, location, fishResultEvent.isDouble(), drop); @@ -551,7 +549,7 @@ public class FishingManager extends Function { if (Competition.currentCompetition != null){ Competition.currentCompetition.refreshData(player, 0, isDouble); - Competition.currentCompetition.getBossBarManager().tryJoin(player); + Competition.currentCompetition.tryAddBossBarToPlayer(player); } player.giveExp(new Random().nextInt(24), true); @@ -594,7 +592,7 @@ public class FishingManager extends Function { if (Competition.currentCompetition != null){ Competition.currentCompetition.refreshData(player, 0, isDouble); - Competition.currentCompetition.getBossBarManager().tryJoin(player); + Competition.currentCompetition.tryAddBossBarToPlayer(player); } player.giveExp(vanillaLoot.getXp(), true); @@ -617,7 +615,7 @@ public class FishingManager extends Function { if (Competition.currentCompetition != null) { float score = (float) (loot.getScore() * scoreMultiplier); Competition.currentCompetition.refreshData(player, (float) (score * bonus.getScore()), false); - Competition.currentCompetition.getBossBarManager().tryJoin(player); + Competition.currentCompetition.tryAddBossBarToPlayer(player); } mobInterface.summon(player.getLocation(), location, mob); @@ -684,27 +682,17 @@ public class FishingManager extends Function { PlayerInventory inventory = player.getInventory(); ItemStack mainHand = inventory.getItemInMainHand(); if (mainHand.getType() == Material.FISHING_ROD){ - setDurability(mainHand); + CustomFishing.plugin.getIntegrationManager().loseCustomDurability(mainHand, player); } else { ItemStack offHand = inventory.getItemInOffHand(); if (offHand.getType() == Material.FISHING_ROD){ - setDurability(offHand); + CustomFishing.plugin.getIntegrationManager().loseCustomDurability(offHand, player); } } }, 1); } - private void setDurability(ItemStack rod) { - Damageable damageable = (Damageable) rod.getItemMeta(); - if (damageable.isUnbreakable()) return; - Enchantment enchantment = Enchantment.DURABILITY; - if (Math.random() < (1 / (double) (damageable.getEnchantLevel(enchantment) + 1))){ - damageable.setDamage(damageable.getDamage() + 1); - Bukkit.getScheduler().runTaskLater(CustomFishing.plugin, () -> rod.setItemMeta(damageable),1); - } - } - private void fail(Player player, Loot loot, boolean isVanilla) { FishResultEvent fishResultEvent = new FishResultEvent(player, FishResult.FAILURE, false, null); diff --git a/src/main/java/net/momirealms/customfishing/manager/IntegrationManager.java b/src/main/java/net/momirealms/customfishing/manager/IntegrationManager.java index 2c340f26..cb52cd13 100644 --- a/src/main/java/net/momirealms/customfishing/manager/IntegrationManager.java +++ b/src/main/java/net/momirealms/customfishing/manager/IntegrationManager.java @@ -17,6 +17,7 @@ package net.momirealms.customfishing.manager; +import net.momirealms.customfishing.CustomFishing; import net.momirealms.customfishing.helper.Log; import net.momirealms.customfishing.integration.*; import net.momirealms.customfishing.integration.antigrief.*; @@ -26,6 +27,7 @@ import net.momirealms.customfishing.integration.block.VanillaBlockImpl; import net.momirealms.customfishing.integration.item.*; import net.momirealms.customfishing.integration.mob.MythicMobsMobImpl; import net.momirealms.customfishing.integration.papi.PlaceholderManager; +import net.momirealms.customfishing.integration.quest.ClueScrollHook; import net.momirealms.customfishing.integration.season.CustomCropsSeasonImpl; import net.momirealms.customfishing.integration.season.RealisticSeasonsImpl; import net.momirealms.customfishing.integration.skill.*; @@ -35,7 +37,9 @@ import net.momirealms.customfishing.util.ConfigUtil; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; import org.bukkit.plugin.PluginManager; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -80,7 +84,6 @@ public class IntegrationManager extends Function { this.blockInterface = new VanillaBlockImpl(); List itemInterfaceList = new ArrayList<>(); - itemInterfaceList.add(new CustomFishingItemImpl()); if (config.getBoolean("integrations.ItemsAdder") && pluginManager.getPlugin("ItemsAdder") != null) { this.blockInterface = new ItemsAdderBlockImpl(); itemInterfaceList.add(new ItemsAdderItemImpl()); @@ -100,6 +103,7 @@ public class IntegrationManager extends Function { this.mobInterface = new MythicMobsMobImpl(); hookMessage("MythicMobs"); } + itemInterfaceList.add(new CustomFishingItemImpl()); this.itemInterfaces = itemInterfaceList.toArray(new ItemInterface[0]); if (pluginManager.getPlugin("eco") != null) { @@ -205,6 +209,15 @@ public class IntegrationManager extends Function { antiGriefs = antiGriefsList.toArray(new AntiGriefInterface[0]); } + public void registerQuests() { + + if (Bukkit.getPluginManager().isPluginEnabled("ClueScrolls")) { + ClueScrollHook clueScrollHook = new ClueScrollHook(); + Bukkit.getPluginManager().registerEvents(clueScrollHook, CustomFishing.plugin); + hookMessage("ClueScrolls"); + } + } + @Override public void unload() { this.seasonInterface = null; @@ -264,6 +277,16 @@ public class IntegrationManager extends Function { return new ItemStack(Material.AIR); } + public void loseCustomDurability(ItemStack itemStack, Player player) { + Damageable damageable = (Damageable) itemStack.getItemMeta(); + if (damageable.isUnbreakable()) return; + for (ItemInterface itemInterface : getItemInterfaces()) { + if (itemInterface.loseCustomDurability(itemStack, player)) { + return; + } + } + } + private void hookMessage(String plugin){ AdventureUtil.consoleMessage("[CustomFishing] " + plugin + " Hooked!"); } diff --git a/src/main/java/net/momirealms/customfishing/object/fishing/BobberCheckTask.java b/src/main/java/net/momirealms/customfishing/object/fishing/BobberCheckTask.java index c5d3cf99..76cd4276 100644 --- a/src/main/java/net/momirealms/customfishing/object/fishing/BobberCheckTask.java +++ b/src/main/java/net/momirealms/customfishing/object/fishing/BobberCheckTask.java @@ -38,7 +38,6 @@ import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; import org.bukkit.util.Vector; -import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import java.util.Random; diff --git a/src/main/java/net/momirealms/customfishing/object/totem/ActivatedTotem.java b/src/main/java/net/momirealms/customfishing/object/totem/ActivatedTotem.java index 02c8f291..b87e8a11 100644 --- a/src/main/java/net/momirealms/customfishing/object/totem/ActivatedTotem.java +++ b/src/main/java/net/momirealms/customfishing/object/totem/ActivatedTotem.java @@ -25,7 +25,6 @@ import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffect; import org.bukkit.scheduler.BukkitRunnable; -import java.lang.reflect.InvocationTargetException; import java.util.Collection; import java.util.Collections; import java.util.HashSet; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 3c59e225..b5d2b016 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -31,6 +31,7 @@ softdepend: - eco - Vault - BattlePass + - ClueScrolls commands: customfishing: