From 29ccb81c9bdca320207433e4e39979e4108d1571 Mon Sep 17 00:00:00 2001 From: Xiao-MoMi <70987828+Xiao-MoMi@users.noreply.github.com> Date: Tue, 30 Aug 2022 11:46:12 +0800 Subject: [PATCH] 1.1.2 --- libs/EcoSkills(premium).txt | 1 - .../customfishing/ConfigReader.java | 36 ++++++++++++---- .../customfishing/CustomFishing.java | 10 ++--- .../customfishing/command/Execute.java | 15 ++++--- .../customfishing/hook/EcoItemRegister.java | 35 ++++++++------- .../customfishing/listener/FishListener.java | 43 ++++++++----------- src/main/resources/config.yml | 8 +++- 7 files changed, 82 insertions(+), 66 deletions(-) delete mode 100644 libs/EcoSkills(premium).txt diff --git a/libs/EcoSkills(premium).txt b/libs/EcoSkills(premium).txt deleted file mode 100644 index 5f772a4e..00000000 --- a/libs/EcoSkills(premium).txt +++ /dev/null @@ -1 +0,0 @@ -https://www.spigotmc.org/resources/ecoskills-%E2%AD%95-addictive-mmorpg-progression-%E2%9C%85-create-custom-effects-%E2%9C%A8-levelling-stats.95541/ \ No newline at end of file diff --git a/src/main/java/net/momirealms/customfishing/ConfigReader.java b/src/main/java/net/momirealms/customfishing/ConfigReader.java index 039484be..98924f3b 100644 --- a/src/main/java/net/momirealms/customfishing/ConfigReader.java +++ b/src/main/java/net/momirealms/customfishing/ConfigReader.java @@ -102,6 +102,7 @@ public class ConfigReader{ public static boolean vanillaLoot; public static boolean showBar; public static boolean mcMMOLoot; + public static boolean hasWhitelist; public static int fishFinderCoolDown; public static double timeMultiply; public static double vanillaRatio; @@ -110,6 +111,7 @@ public class ConfigReader{ public static String version; public static String lang; public static String priority; + public static List whitelistWorlds = new ArrayList<>(); public static SeasonInterface season; public static void loadConfig() { @@ -184,6 +186,8 @@ public class ConfigReader{ } } + version = config.getString("config-version"); + doubleRealIn = config.getBoolean("config.double-reel-in", true); mcMMOLoot = config.getBoolean("config.other-loot.mcMMO", false); @@ -199,12 +203,26 @@ public class ConfigReader{ loseDurability = config.getBoolean("config.rod-lose-durability", true); preventPick = config.getBoolean("config.prevent-other-players-pick-up-loot", false); - version = config.getString("config-version"); priority = config.getString("config.event-priority"); fishFinderCoolDown = config.getInt("config.fishfinder-cooldown"); timeMultiply = config.getDouble("config.time-multiply"); lang = config.getString("config.lang","cn"); competition = config.getBoolean("config.fishing-competition",true); + + hasWhitelist = config.getBoolean("config.whitelist-worlds.enable",false); + + if (hasWhitelist){ + whitelistWorlds.clear(); + config.getStringList("config.whitelist-worlds.worlds").forEach(whitelistWorld -> { + try { + whitelistWorlds.add(Bukkit.getWorld(whitelistWorld)); + } + catch (Exception e){ + AdventureUtil.consoleMessage("[CustomFishing] Invalid world " + whitelistWorld); + e.printStackTrace(); + } + }); + } } } @@ -242,12 +260,12 @@ public class ConfigReader{ YamlConfiguration config = getConfig("messages/messages_" + Config.lang +".yml"); - prefix = config.getString("messages.prefix"); - reload = config.getString("messages.reload"); - escape = config.getString("messages.escape"); - noPerm = config.getString("messages.no-perm"); - notExist = config.getString("messages.not-exist"); - noConsole = config.getString("messages.no-console"); + prefix = config.getString("messages.prefix", "messages.prefix is missing"); + reload = config.getString("messages.reload", "messages.reload is missing"); + escape = config.getString("messages.escape", "messages.escape is missing"); + noPerm = config.getString("messages.no-perm", "messages.no-perm is missing"); + notExist = config.getString("messages.not-exist", "messages.not-exist is missing"); + noConsole = config.getString("messages.no-console", "messages.no-console is missing"); wrongAmount = config.getString("messages.wrong-amount"); lackArgs = config.getString("messages.lack-args"); notOnline = config.getString("messages.not-online"); @@ -264,7 +282,7 @@ public class ConfigReader{ forceSuccess = config.getString("messages.force-competition-success"); forceFailure = config.getString("messages.force-competition-failure"); forceEnd = config.getString("messages.force-competition-end"); - forceCancel = config.getString("messages.force-competition-cancel"); + forceCancel = config.getString("messages.force-competition-cancel","messages.force-competition-cancel is messing"); noPlayer = config.getString("messages.no-player", "messages.no-player is missing"); noScore = config.getString("messages.no-score", "messages.no-score is missing"); noRod = config.getString("messages.no-rod", "messages.no-rod is missing"); @@ -974,6 +992,6 @@ public class ConfigReader{ }); ENCHANTS.put(key, levelBonus); }); - AdventureUtil.consoleMessage("[CustomFishing] Loaded " + ENCHANTS.size() + " enchants bonus"); + AdventureUtil.consoleMessage("[CustomFishing] Loaded " + ENCHANTS.size() + " enchantments"); } } \ No newline at end of file diff --git a/src/main/java/net/momirealms/customfishing/CustomFishing.java b/src/main/java/net/momirealms/customfishing/CustomFishing.java index d4d953d1..ccc737d5 100644 --- a/src/main/java/net/momirealms/customfishing/CustomFishing.java +++ b/src/main/java/net/momirealms/customfishing/CustomFishing.java @@ -24,7 +24,6 @@ import net.momirealms.customfishing.command.TabComplete; import net.momirealms.customfishing.competition.CompetitionSchedule; import net.momirealms.customfishing.competition.bossbar.BossBarManager; import net.momirealms.customfishing.helper.LibraryLoader; -import net.momirealms.customfishing.hook.McMMOTreasure; import net.momirealms.customfishing.hook.Placeholders; import net.momirealms.customfishing.listener.*; import net.momirealms.customfishing.utils.AdventureUtil; @@ -61,6 +60,7 @@ public final class CustomFishing extends JavaPlugin { AdventureUtil.consoleMessage("[CustomFishing] Running on " + Bukkit.getVersion()); Bukkit.getScheduler().runTaskAsynchronously(this, ()-> { + ConfigReader.Reload(); if (ConfigReader.Config.competition){ competitionSchedule = new CompetitionSchedule(); @@ -81,15 +81,15 @@ public final class CustomFishing extends JavaPlugin { Bukkit.getPluginManager().registerEvents(new PapiUnregister(), this); }); } - ConfigReader.tryEnableJedis(); - if (!Objects.equals(ConfigReader.Config.version, "6")){ - ConfigUtil.update(); - } if (ConfigReader.Config.preventPick){ Bukkit.getScheduler().runTask(this, () -> { Bukkit.getPluginManager().registerEvents(new PickUpListener(),this); }); } + if (!Objects.equals(ConfigReader.Config.version, "7")){ + ConfigUtil.update(); + } + ConfigReader.tryEnableJedis(); AdventureUtil.consoleMessage("[CustomFishing] Plugin Enabled!"); }); } diff --git a/src/main/java/net/momirealms/customfishing/command/Execute.java b/src/main/java/net/momirealms/customfishing/command/Execute.java index 4adc1897..ef6048a1 100644 --- a/src/main/java/net/momirealms/customfishing/command/Execute.java +++ b/src/main/java/net/momirealms/customfishing/command/Execute.java @@ -1,5 +1,6 @@ package net.momirealms.customfishing.command; +import net.momirealms.customfishing.CustomFishing; import net.momirealms.customfishing.competition.CompetitionSchedule; import net.momirealms.customfishing.utils.AdventureUtil; import net.momirealms.customfishing.ConfigReader; @@ -30,12 +31,14 @@ public class Execute implements CommandExecutor { } if (args[0].equalsIgnoreCase("reload")) { - ConfigReader.Reload(); - if (sender instanceof Player){ - AdventureUtil.playerMessage((Player) sender, ConfigReader.Message.prefix + ConfigReader.Message.reload); - }else { - AdventureUtil.consoleMessage(ConfigReader.Message.prefix + ConfigReader.Message.reload); - } + Bukkit.getScheduler().runTaskAsynchronously(CustomFishing.instance, ()-> { + ConfigReader.Reload(); + if (sender instanceof Player){ + AdventureUtil.playerMessage((Player) sender, ConfigReader.Message.prefix + ConfigReader.Message.reload); + }else { + AdventureUtil.consoleMessage(ConfigReader.Message.prefix + ConfigReader.Message.reload); + } + }); return true; } diff --git a/src/main/java/net/momirealms/customfishing/hook/EcoItemRegister.java b/src/main/java/net/momirealms/customfishing/hook/EcoItemRegister.java index 5908a6e6..3027cce6 100644 --- a/src/main/java/net/momirealms/customfishing/hook/EcoItemRegister.java +++ b/src/main/java/net/momirealms/customfishing/hook/EcoItemRegister.java @@ -1,6 +1,8 @@ package net.momirealms.customfishing.hook; import com.willfp.eco.core.items.CustomItem; +import de.tr7zw.changeme.nbtapi.NBTCompound; +import de.tr7zw.changeme.nbtapi.NBTItem; import net.momirealms.customfishing.ConfigReader; import net.momirealms.customfishing.CustomFishing; import org.bukkit.NamespacedKey; @@ -17,12 +19,11 @@ public class EcoItemRegister { new NamespacedKey(CustomFishing.instance, "rod_" + entry.getKey()), itemStack -> { try { - return itemStack.getItemMeta().getPersistentDataContainer() - .get(new NamespacedKey(CustomFishing.instance, "type"), - PersistentDataType.STRING).equalsIgnoreCase("rod") - && itemStack.getItemMeta().getPersistentDataContainer() - .get(new NamespacedKey(CustomFishing.instance, "id"), - PersistentDataType.STRING).equalsIgnoreCase(entry.getKey()); + NBTItem nbtItem = new NBTItem(itemStack); + NBTCompound nbtCompound = nbtItem.getCompound("CustomFishing"); + return nbtCompound != null + && nbtCompound.getString("type").equalsIgnoreCase("rod") + && nbtCompound.getString("id").equalsIgnoreCase(entry.getKey()); } catch (Exception e) { return false; } @@ -36,12 +37,11 @@ public class EcoItemRegister { new NamespacedKey(CustomFishing.instance, "bait_" + entry.getKey()), itemStack -> { try { - return itemStack.getItemMeta().getPersistentDataContainer() - .get(new NamespacedKey(CustomFishing.instance, "type"), - PersistentDataType.STRING).equalsIgnoreCase("bait") - && itemStack.getItemMeta().getPersistentDataContainer() - .get(new NamespacedKey(CustomFishing.instance, "id"), - PersistentDataType.STRING).equalsIgnoreCase(entry.getKey()); + NBTItem nbtItem = new NBTItem(itemStack); + NBTCompound nbtCompound = nbtItem.getCompound("CustomFishing"); + return nbtCompound != null + && nbtCompound.getString("type").equalsIgnoreCase("bait") + && nbtCompound.getString("id").equalsIgnoreCase(entry.getKey()); } catch (Exception e) { return false; } @@ -55,12 +55,11 @@ public class EcoItemRegister { new NamespacedKey(CustomFishing.instance, "util_" + entry.getKey()), itemStack -> { try { - return itemStack.getItemMeta().getPersistentDataContainer() - .get(new NamespacedKey(CustomFishing.instance, "type"), - PersistentDataType.STRING).equalsIgnoreCase("util") - && itemStack.getItemMeta().getPersistentDataContainer() - .get(new NamespacedKey(CustomFishing.instance, "id"), - PersistentDataType.STRING).equalsIgnoreCase(entry.getKey()); + NBTItem nbtItem = new NBTItem(itemStack); + NBTCompound nbtCompound = nbtItem.getCompound("CustomFishing"); + return nbtCompound != null + && nbtCompound.getString("type").equalsIgnoreCase("util") + && nbtCompound.getString("id").equalsIgnoreCase(entry.getKey()); } catch (Exception e) { return false; } diff --git a/src/main/java/net/momirealms/customfishing/listener/FishListener.java b/src/main/java/net/momirealms/customfishing/listener/FishListener.java index 3c580003..0d642dfd 100644 --- a/src/main/java/net/momirealms/customfishing/listener/FishListener.java +++ b/src/main/java/net/momirealms/customfishing/listener/FishListener.java @@ -95,6 +95,19 @@ public class FishListener implements Listener { PlayerFishEvent.State state = event.getState(); Player player = event.getPlayer(); + if (ConfigReader.Config.hasWhitelist){ + boolean isWhite = false; + for (World world : ConfigReader.Config.whitelistWorlds){ + if (world.equals(player.getWorld())){ + isWhite = true; + break; + } + } + if (!isWhite){ + return; + } + } + switch (state){ case FISHING ->{ @@ -325,7 +338,7 @@ public class FishListener implements Listener { hook.setMaxWaitTime((int) (timeModifier * hook.getMaxWaitTime())); hook.setMinWaitTime((int) (timeModifier * hook.getMinWaitTime())); - List possibleLoots = getPossibleLootList(new FishingCondition(hook.getLocation(), player)); + List possibleLoots = getPossibleLootList(new FishingCondition(hook.getLocation(), player), false); List availableLoots = new ArrayList<>(); Modifier modifier = new Modifier(); @@ -933,7 +946,7 @@ public class FishListener implements Listener { } coolDown.put(player, time); //获取玩家位置处可能的Loot实例列表 - List possibleLoots = getFinder(new FishingCondition(player.getLocation(), player)); + List possibleLoots = getPossibleLootList(new FishingCondition(player.getLocation(), player), true); if (possibleLoots.size() == 0){ AdventureUtil.playerMessage(player, ConfigReader.Message.prefix + ConfigReader.Message.noLoot); return; @@ -947,33 +960,11 @@ public class FishListener implements Listener { /* 获取可能的Loot列表 */ - private List getPossibleLootList(FishingCondition fishingCondition) { + private List getPossibleLootList(FishingCondition fishingCondition, boolean finder) { List available = new ArrayList<>(); ConfigReader.LOOT.keySet().forEach(key -> { Loot loot = ConfigReader.LOOT.get(key); - List requirements = loot.getRequirements(); - if (requirements == null){ - available.add(loot); - }else { - boolean isMet = true; - for (Requirement requirement : requirements){ - if (!requirement.isConditionMet(fishingCondition)){ - isMet = false; - } - } - if (isMet){ - available.add(loot); - } - } - }); - return available; - } - - private List getFinder(FishingCondition fishingCondition) { - List available = new ArrayList<>(); - ConfigReader.LOOT.keySet().forEach(key -> { - Loot loot = ConfigReader.LOOT.get(key); - if (!loot.isShowInFinder()) return; + if (finder && !loot.isShowInFinder()) return; List requirements = loot.getRequirements(); if (requirements == null){ available.add(loot); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 33a6ae0d..96f801c2 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,5 +1,5 @@ # don't change -config-version: '6' +config-version: '7' config: #en/es/cn @@ -23,6 +23,12 @@ config: CustomCrops: false RealisticSeasons: false + # Worlds where the special fishing mechanic take effects + whitelist-worlds: + enable: false + worlds: + - world + # Should the fishing bar only show after player reel in # Otherwise the bar would show immediately the bobber is hooked double-reel-in: true