From 0bd8e447d0abd1ed2311995c6d07799b8bf47e69 Mon Sep 17 00:00:00 2001 From: Xiao-MoMi <70987828+Xiao-MoMi@users.noreply.github.com> Date: Sat, 12 Nov 2022 12:56:09 +0800 Subject: [PATCH] 1.2.7 --- build.gradle | 2 +- .../competition/Competition.java | 16 ++++++++ .../competition/ranking/LocalRankingImpl.java | 20 ++++++++++ .../competition/ranking/RankingInterface.java | 4 ++ .../competition/ranking/RedisRankingImpl.java | 40 +++++++++++++++++++ .../data/storage/SqlConnection.java | 1 + .../integration/BlockInterface.java | 7 ++++ .../block/ItemsAdderBlockImpl.java | 12 ++++-- .../integration/block/OraxenBlockImpl.java | 13 ++++-- .../integration/block/VanillaBlockImpl.java | 8 +++- .../integration/papi/CompetitionPapi.java | 12 ++++++ .../customfishing/manager/ConfigManager.java | 2 + .../customfishing/manager/FishingManager.java | 3 +- .../object/fishing/BobberCheckTask.java | 11 ++++- .../customfishing/object/fishing/Bonus.java | 9 +++++ .../customfishing/util/JedisUtil.java | 8 +++- src/main/resources/config.yml | 5 ++- src/main/resources/database.yml | 1 + 18 files changed, 160 insertions(+), 14 deletions(-) diff --git a/build.gradle b/build.gradle index c1f3b331..dd4c2aa7 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'net.momirealms' -version = '1.2.5' +version = '1.2.7' repositories { mavenCentral() diff --git a/src/main/java/net/momirealms/customfishing/competition/Competition.java b/src/main/java/net/momirealms/customfishing/competition/Competition.java index 06008665..7465b33c 100644 --- a/src/main/java/net/momirealms/customfishing/competition/Competition.java +++ b/src/main/java/net/momirealms/customfishing/competition/Competition.java @@ -234,10 +234,26 @@ public class Competition { return ranking.getFirstScore(); } + public float getSecondScore() { + return ranking.getSecondScore(); + } + + public float getThirdScore() { + return ranking.getThirdScore(); + } + public String getFirstPlayer() { return ranking.getFirstPlayer(); } + public String getSecondPlayer() { + return ranking.getSecondPlayer(); + } + + public String getThirdPlayer() { + return ranking.getThirdPlayer(); + } + public boolean isJoined(Player player) { return ranking.getCompetitionPlayer(player.getName()) != null; } diff --git a/src/main/java/net/momirealms/customfishing/competition/ranking/LocalRankingImpl.java b/src/main/java/net/momirealms/customfishing/competition/ranking/LocalRankingImpl.java index 300d6672..e99b9a68 100644 --- a/src/main/java/net/momirealms/customfishing/competition/ranking/LocalRankingImpl.java +++ b/src/main/java/net/momirealms/customfishing/competition/ranking/LocalRankingImpl.java @@ -137,8 +137,28 @@ public class LocalRankingImpl implements RankingInterface { return getScoreAt(1); } + @Override + public float getSecondScore() { + return getScoreAt(2); + } + + @Override + public float getThirdScore() { + return getScoreAt(3); + } + @Override public String getFirstPlayer() { return Optional.ofNullable(getPlayerAt(1)).orElse(MessageManager.noPlayer); } + + @Override + public String getSecondPlayer() { + return Optional.ofNullable(getPlayerAt(2)).orElse(MessageManager.noPlayer); + } + + @Override + public String getThirdPlayer() { + return Optional.ofNullable(getPlayerAt(3)).orElse(MessageManager.noPlayer); + } } diff --git a/src/main/java/net/momirealms/customfishing/competition/ranking/RankingInterface.java b/src/main/java/net/momirealms/customfishing/competition/ranking/RankingInterface.java index c6201673..bbcc9d43 100644 --- a/src/main/java/net/momirealms/customfishing/competition/ranking/RankingInterface.java +++ b/src/main/java/net/momirealms/customfishing/competition/ranking/RankingInterface.java @@ -31,5 +31,9 @@ public interface RankingInterface { CompetitionPlayer[] getTop3Player(); void refreshData(String player, float score); float getFirstScore(); + float getSecondScore(); + float getThirdScore(); String getFirstPlayer(); + String getSecondPlayer(); + String getThirdPlayer(); } diff --git a/src/main/java/net/momirealms/customfishing/competition/ranking/RedisRankingImpl.java b/src/main/java/net/momirealms/customfishing/competition/ranking/RedisRankingImpl.java index 4b0aa7ce..be276b77 100644 --- a/src/main/java/net/momirealms/customfishing/competition/ranking/RedisRankingImpl.java +++ b/src/main/java/net/momirealms/customfishing/competition/ranking/RedisRankingImpl.java @@ -123,6 +123,26 @@ public class RedisRankingImpl implements RankingInterface { return (float) players.get(0).getScore(); } + @Override + public float getSecondScore() { + Jedis jedis = JedisUtil.getJedis(); + List players = jedis.zrevrangeWithScores("cf_competition", 1, 1); + jedis.close(); + if (players == null) return 0; + if (players.size() == 0) return 0; + return (float) players.get(0).getScore(); + } + + @Override + public float getThirdScore() { + Jedis jedis = JedisUtil.getJedis(); + List players = jedis.zrevrangeWithScores("cf_competition", 2, 2); + jedis.close(); + if (players == null) return 0; + if (players.size() == 0) return 0; + return (float) players.get(0).getScore(); + } + @Override public String getFirstPlayer() { Jedis jedis = JedisUtil.getJedis(); @@ -132,4 +152,24 @@ public class RedisRankingImpl implements RankingInterface { if (player.size() == 0) return MessageManager.noPlayer; return player.get(0); } + + @Override + public String getSecondPlayer() { + Jedis jedis = JedisUtil.getJedis(); + List player = jedis.zrevrange("cf_competition", 1,1); + jedis.close(); + if (player == null) return MessageManager.noPlayer; + if (player.size() == 0) return MessageManager.noPlayer; + return player.get(0); + } + + @Override + public String getThirdPlayer() { + Jedis jedis = JedisUtil.getJedis(); + List player = jedis.zrevrange("cf_competition", 2,2); + jedis.close(); + if (player == null) return MessageManager.noPlayer; + if (player.size() == 0) return MessageManager.noPlayer; + return player.get(0); + } } diff --git a/src/main/java/net/momirealms/customfishing/data/storage/SqlConnection.java b/src/main/java/net/momirealms/customfishing/data/storage/SqlConnection.java index 186073f8..8b7f483c 100644 --- a/src/main/java/net/momirealms/customfishing/data/storage/SqlConnection.java +++ b/src/main/java/net/momirealms/customfishing/data/storage/SqlConnection.java @@ -53,6 +53,7 @@ public class SqlConnection { hikariConfig.setMaximumPoolSize(config.getInt(storageMode + ".Pool-Settings.maximum-pool-size")); hikariConfig.setMinimumIdle(config.getInt(storageMode + ".Pool-Settings.minimum-idle")); hikariConfig.setMaxLifetime(config.getInt(storageMode + ".Pool-Settings.maximum-lifetime")); + hikariConfig.setConnectionTimeout(5000); for (String property : config.getConfigurationSection(storageMode + ".properties").getKeys(false)) { hikariConfig.addDataSourceProperty(property, config.getString(storageMode + ".properties." + property)); } diff --git a/src/main/java/net/momirealms/customfishing/integration/BlockInterface.java b/src/main/java/net/momirealms/customfishing/integration/BlockInterface.java index 6e698af3..6ef1eb7c 100644 --- a/src/main/java/net/momirealms/customfishing/integration/BlockInterface.java +++ b/src/main/java/net/momirealms/customfishing/integration/BlockInterface.java @@ -17,7 +17,10 @@ package net.momirealms.customfishing.integration; +import net.momirealms.customfishing.manager.TotemManager; +import net.momirealms.customfishing.util.AdventureUtil; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.block.Block; import org.jetbrains.annotations.Nullable; @@ -42,4 +45,8 @@ public interface BlockInterface { } return true; } + + static void placeVanillaBlock(String id, Location location) { + location.getBlock().setType(Material.valueOf(id)); + } } diff --git a/src/main/java/net/momirealms/customfishing/integration/block/ItemsAdderBlockImpl.java b/src/main/java/net/momirealms/customfishing/integration/block/ItemsAdderBlockImpl.java index f3dac508..14c8983a 100644 --- a/src/main/java/net/momirealms/customfishing/integration/block/ItemsAdderBlockImpl.java +++ b/src/main/java/net/momirealms/customfishing/integration/block/ItemsAdderBlockImpl.java @@ -20,6 +20,7 @@ package net.momirealms.customfishing.integration.block; import dev.lone.itemsadder.api.CustomBlock; import net.momirealms.customfishing.integration.BlockInterface; import net.momirealms.customfishing.manager.TotemManager; +import net.momirealms.customfishing.util.AdventureUtil; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -39,11 +40,16 @@ public class ItemsAdderBlockImpl implements BlockInterface { @Override public void placeBlock(String id, Location location) { - if (BlockInterface.isVanillaItem(id)) { - location.getBlock().setType(Material.valueOf(id)); + String blockID = TotemManager.INVERTED.get(id); + if (blockID == null) { + AdventureUtil.consoleMessage(id + " does not exist in totem-blocks.yml"); + return; + } + if (BlockInterface.isVanillaItem(blockID)) { + BlockInterface.placeVanillaBlock(blockID, location); } else { - CustomBlock.place(id, location); + CustomBlock.place(blockID, location); } } diff --git a/src/main/java/net/momirealms/customfishing/integration/block/OraxenBlockImpl.java b/src/main/java/net/momirealms/customfishing/integration/block/OraxenBlockImpl.java index 5147df98..83da35de 100644 --- a/src/main/java/net/momirealms/customfishing/integration/block/OraxenBlockImpl.java +++ b/src/main/java/net/momirealms/customfishing/integration/block/OraxenBlockImpl.java @@ -17,11 +17,13 @@ package net.momirealms.customfishing.integration.block; +import dev.lone.itemsadder.api.CustomBlock; import io.th0rgal.oraxen.mechanics.provided.gameplay.noteblock.NoteBlockMechanic; import io.th0rgal.oraxen.mechanics.provided.gameplay.noteblock.NoteBlockMechanicFactory; import io.th0rgal.oraxen.mechanics.provided.gameplay.noteblock.NoteBlockMechanicListener; import net.momirealms.customfishing.integration.BlockInterface; import net.momirealms.customfishing.manager.TotemManager; +import net.momirealms.customfishing.util.AdventureUtil; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -36,11 +38,16 @@ public class OraxenBlockImpl implements BlockInterface { @Override public void placeBlock(String id, Location location) { - if (BlockInterface.isVanillaItem(id)) { - location.getBlock().setType(Material.valueOf(id)); + String blockID = TotemManager.INVERTED.get(id); + if (blockID == null) { + AdventureUtil.consoleMessage(id + " does not exist in totem-blocks.yml"); + return; + } + if (BlockInterface.isVanillaItem(blockID)) { + BlockInterface.placeVanillaBlock(blockID, location); } else { - NoteBlockMechanicFactory.setBlockModel(location.getBlock(), id); + NoteBlockMechanicFactory.setBlockModel(location.getBlock(), blockID); } } diff --git a/src/main/java/net/momirealms/customfishing/integration/block/VanillaBlockImpl.java b/src/main/java/net/momirealms/customfishing/integration/block/VanillaBlockImpl.java index a46a6bc6..ca26b8ab 100644 --- a/src/main/java/net/momirealms/customfishing/integration/block/VanillaBlockImpl.java +++ b/src/main/java/net/momirealms/customfishing/integration/block/VanillaBlockImpl.java @@ -19,6 +19,7 @@ package net.momirealms.customfishing.integration.block; import net.momirealms.customfishing.integration.BlockInterface; import net.momirealms.customfishing.manager.TotemManager; +import net.momirealms.customfishing.util.AdventureUtil; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -32,7 +33,12 @@ public class VanillaBlockImpl implements BlockInterface { @Override public void placeBlock(String id, Location location) { - location.getBlock().setType(Material.valueOf(id)); + String blockID = TotemManager.INVERTED.get(id); + if (blockID == null) { + AdventureUtil.consoleMessage(id + " does not exist in totem-blocks.yml"); + return; + } + BlockInterface.placeVanillaBlock(blockID, location); } @Nullable diff --git a/src/main/java/net/momirealms/customfishing/integration/papi/CompetitionPapi.java b/src/main/java/net/momirealms/customfishing/integration/papi/CompetitionPapi.java index 74d1a20a..0d83c496 100644 --- a/src/main/java/net/momirealms/customfishing/integration/papi/CompetitionPapi.java +++ b/src/main/java/net/momirealms/customfishing/integration/papi/CompetitionPapi.java @@ -70,6 +70,18 @@ public class CompetitionPapi extends PlaceholderExpansion { case "1st_player" -> { return Competition.currentCompetition.getFirstPlayer(); } + case "2nd_score" -> { + return String.format("%.1f", Competition.currentCompetition.getSecondScore()); + } + case "2nd_player" -> { + return Competition.currentCompetition.getSecondPlayer(); + } + case "3rd_score" -> { + return String.format("%.1f", Competition.currentCompetition.getThirdScore()); + } + case "3rd_player" -> { + return Competition.currentCompetition.getThirdPlayer(); + } } return "null"; } diff --git a/src/main/java/net/momirealms/customfishing/manager/ConfigManager.java b/src/main/java/net/momirealms/customfishing/manager/ConfigManager.java index b0e79252..d44fb21d 100644 --- a/src/main/java/net/momirealms/customfishing/manager/ConfigManager.java +++ b/src/main/java/net/momirealms/customfishing/manager/ConfigManager.java @@ -41,6 +41,7 @@ public class ConfigManager { public static double vanillaLootRatio; public static double mcMMOLootChance; public static boolean needRodToFish; + public static boolean needRodForLoot; public static boolean rodLoseDurability; public static boolean enableCompetition; public static boolean disableJobsXp; @@ -105,6 +106,7 @@ public class ConfigManager { enableMcMMOLoot = config.getBoolean("mechanics.other-loots.mcMMO.enable", false); mcMMOLootChance = config.getDouble("mechanics.other-loots.mcMMO.chance", 0.5); needRodToFish = config.getBoolean("mechanics.need-special-rod-to-fish", false); + needRodForLoot = config.getBoolean("mechanics.need-special-rod-for-loots", false); rodLoseDurability = config.getBoolean("mechanics.rod-lose-durability", true); enableCompetition = config.getBoolean("mechanics.fishing-competition.enable", true); diff --git a/src/main/java/net/momirealms/customfishing/manager/FishingManager.java b/src/main/java/net/momirealms/customfishing/manager/FishingManager.java index 12329d58..564725a3 100644 --- a/src/main/java/net/momirealms/customfishing/manager/FishingManager.java +++ b/src/main/java/net/momirealms/customfishing/manager/FishingManager.java @@ -203,7 +203,6 @@ public class FishingManager extends Function { offHandItem.setAmount(offHandItem.getAmount() - 1); baitItem = offHandItem.clone(); noBait = false; - } } else if (noSpecialRod && nbtCompound.getString("type").equals("rod")) { @@ -261,6 +260,8 @@ public class FishingManager extends Function { return; } + initialBonus.setHasSpecialRod(!noSpecialRod); + int entityID = 0; if (baitItem != null) { baitItem.setAmount(1); 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 a5124fcf..986e25da 100644 --- a/src/main/java/net/momirealms/customfishing/object/fishing/BobberCheckTask.java +++ b/src/main/java/net/momirealms/customfishing/object/fishing/BobberCheckTask.java @@ -39,6 +39,7 @@ 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; @@ -134,7 +135,10 @@ public class BobberCheckTask extends BukkitRunnable { if (fishHook.isInWater()) { stop(); Bukkit.getScheduler().runTaskAsynchronously(CustomFishing.plugin, () -> { - List possibleLoots = fishingManager.getPossibleLootList(new FishingCondition(fishHook.getLocation(), player), false, LootManager.WATERLOOTS.values()); + List possibleLoots = new ArrayList<>(); + if (!(ConfigManager.needRodForLoot && !bonus.hasSpecialRod())) { + possibleLoots = fishingManager.getPossibleLootList(new FishingCondition(fishHook.getLocation(), player), false, LootManager.WATERLOOTS.values()); + } fishingManager.getNextLoot(player, bonus, possibleLoots); if (ConfigManager.enableWaterAnimation) { ArmorStandUtil.sendAnimationToPlayer(fishHook.getLocation(), player, ConfigManager.water_item, ConfigManager.water_time); @@ -185,7 +189,10 @@ public class BobberCheckTask extends BukkitRunnable { private void randomTime() { Bukkit.getScheduler().runTaskAsynchronously(CustomFishing.plugin, () -> { - List possibleLoots = fishingManager.getPossibleLootList(new FishingCondition(fishHook.getLocation(), player), false, LootManager.LAVALOOTS.values()); + List possibleLoots = new ArrayList<>(); + if (!(ConfigManager.needRodForLoot && !bonus.hasSpecialRod())) { + possibleLoots = fishingManager.getPossibleLootList(new FishingCondition(fishHook.getLocation(), player), false, LootManager.LAVALOOTS.values()); + } fishingManager.getNextLoot(player, bonus, possibleLoots); }); cancelTask(); diff --git a/src/main/java/net/momirealms/customfishing/object/fishing/Bonus.java b/src/main/java/net/momirealms/customfishing/object/fishing/Bonus.java index bfe9614e..19c857c3 100644 --- a/src/main/java/net/momirealms/customfishing/object/fishing/Bonus.java +++ b/src/main/java/net/momirealms/customfishing/object/fishing/Bonus.java @@ -30,6 +30,7 @@ public class Bonus { private int difficulty; private double doubleLoot; private boolean canLavaFishing; + private boolean hasSpecialRod; public HashMap getWeightMD() { return weightMD; @@ -108,4 +109,12 @@ public class Bonus { if (anotherBonus.getScore() != 0) this.score += (anotherBonus.getScore() - 1); if (anotherBonus.canLavaFishing()) this.canLavaFishing = true; } + + public boolean hasSpecialRod() { + return hasSpecialRod; + } + + public void setHasSpecialRod(boolean hasSpecialRod) { + this.hasSpecialRod = hasSpecialRod; + } } \ No newline at end of file diff --git a/src/main/java/net/momirealms/customfishing/util/JedisUtil.java b/src/main/java/net/momirealms/customfishing/util/JedisUtil.java index e17bbf2a..463285a9 100644 --- a/src/main/java/net/momirealms/customfishing/util/JedisUtil.java +++ b/src/main/java/net/momirealms/customfishing/util/JedisUtil.java @@ -45,8 +45,12 @@ public class JedisUtil { jedisPoolConfig.setMaxIdle(configuration.getInt("Redis.MaxIdle",8)); jedisPoolConfig.setMinIdle(configuration.getInt("Redis.MinIdle",1)); jedisPoolConfig.setMaxWaitMillis(configuration.getInt("redis.MaxWaitMillis",30000)); - - jedisPool = new JedisPool(jedisPoolConfig, configuration.getString("Redis.host","localhost"), configuration.getInt("Redis.port",6379)); + if (configuration.getString("Redis.password") != null) { + jedisPool = new JedisPool(jedisPoolConfig, configuration.getString("Redis.host","localhost"), configuration.getInt("Redis.port",6379), 2000, configuration.getString("Redis.password")); + } + else { + jedisPool = new JedisPool(jedisPoolConfig, configuration.getString("Redis.host","localhost"), configuration.getInt("Redis.port",6379)); + } AdventureUtil.consoleMessage("[CustomFishing] Redis Server Connected!"); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index ea624b52..49e90dc1 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,5 +1,5 @@ # don't change -config-version: '13' +config-version: '14' # chinese/english/spanish lang: english @@ -82,6 +82,9 @@ mechanics: # Does the special fishing mechanic requires special rod # 是否需要特殊鱼竿才能体验钓鱼机制 need-special-rod-to-fish: false + # Does the CustomFishing loots requires special rod + # 是否需要特殊鱼竿才能获取钓鱼插件物品库的内容 + need-special-rod-for-loots: false # Does rod lose durability when player successfully fish # 钓鱼成功后是否消耗耐久度 rod-lose-durability: true diff --git a/src/main/resources/database.yml b/src/main/resources/database.yml index 3bcdef03..a4b0696a 100644 --- a/src/main/resources/database.yml +++ b/src/main/resources/database.yml @@ -43,6 +43,7 @@ MariaDB: # Sync competition scores between servers without lag! Redis: host: localhost + #password: 123456 port: 6379 MaxTotal: 10 MaxIdle: 10