From f4c3f42cf021b9e930bbabda06e144d75a85922a Mon Sep 17 00:00:00 2001 From: Xiao-MoMi <70987828+Xiao-MoMi@users.noreply.github.com> Date: Tue, 29 Nov 2022 16:58:23 +0800 Subject: [PATCH] 1.2.9 --- build.gradle | 2 +- .../data/storage/MySQLStorageImpl.java | 18 ++- .../integration/item/MMOItemsItemImpl.java | 2 +- .../season/CustomCropsSeasonImpl.java | 2 +- .../season/RealisticSeasonsImpl.java | 9 +- .../customfishing/manager/BagDataManager.java | 2 +- .../customfishing/manager/FishingManager.java | 8 +- .../customfishing/manager/SellManager.java | 20 ++- .../customfishing/object/TextCache.java | 6 +- .../object/requirements/SeasonImpl.java | 1 + .../customfishing/util/AdventureUtil.java | 117 +++++++++++++++++- .../customfishing/util/ItemStackUtil.java | 113 +---------------- src/main/resources/loots/example.yml | 3 +- 13 files changed, 162 insertions(+), 141 deletions(-) diff --git a/build.gradle b/build.gradle index dd4c2aa7..67242f51 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'net.momirealms' -version = '1.2.7' +version = '1.2.9' repositories { mavenCentral() diff --git a/src/main/java/net/momirealms/customfishing/data/storage/MySQLStorageImpl.java b/src/main/java/net/momirealms/customfishing/data/storage/MySQLStorageImpl.java index 4908796e..7349db21 100644 --- a/src/main/java/net/momirealms/customfishing/data/storage/MySQLStorageImpl.java +++ b/src/main/java/net/momirealms/customfishing/data/storage/MySQLStorageImpl.java @@ -65,6 +65,7 @@ public class MySQLStorageImpl implements DataStorageInterface { else { inventory = Bukkit.createInventory(null, 9, "{CustomFishing_Bag_" + player.getName() + "}"); } + connection.close(); } catch (SQLException e) { e.printStackTrace(); } @@ -87,8 +88,11 @@ public class MySQLStorageImpl implements DataStorageInterface { private void createTableIfNotExist(String table) { String sql = String.format(SqlConstants.SQL_CREATE_BAG_TABLE, table); - try (Connection connection = sqlConnection.getConnection(); PreparedStatement statement = connection.prepareStatement(sql)) { + try { + Connection connection = sqlConnection.getConnection(); + PreparedStatement statement = connection.prepareStatement(sql); statement.executeUpdate(); + connection.close(); } catch (SQLException ex) { AdventureUtil.consoleMessage("[CustomFishing] Failed to create table"); } @@ -96,11 +100,13 @@ public class MySQLStorageImpl implements DataStorageInterface { private void insertBagData(UUID uuid, int size, String contents) { String sql = String.format(SqlConstants.SQL_INSERT_BAG, sqlConnection.getTablePrefix() + "_fishingbag"); - try (Connection connection = sqlConnection.getConnection(); PreparedStatement statement = connection.prepareStatement(sql)) { + try { + Connection connection = sqlConnection.getConnection(); PreparedStatement statement = connection.prepareStatement(sql); statement.setString(1, uuid.toString()); statement.setInt(2, size); statement.setString(3, contents); statement.executeUpdate(); + connection.close(); } catch (SQLException ex) { AdventureUtil.consoleMessage("[CustomFishing] Failed to insert data for " + uuid); } @@ -108,11 +114,13 @@ public class MySQLStorageImpl implements DataStorageInterface { private void updateBagData(UUID uuid, int size, String contents) { String sql = String.format(SqlConstants.SQL_UPDATE_BAG_BY_UUID, sqlConnection.getTablePrefix() + "_fishingbag"); - try (Connection connection = sqlConnection.getConnection(); PreparedStatement statement = connection.prepareStatement(sql)) { + try { + Connection connection = sqlConnection.getConnection(); PreparedStatement statement = connection.prepareStatement(sql); statement.setInt(1, size); statement.setString(2, contents); statement.setString(3, uuid.toString()); statement.executeUpdate(); + connection.close(); } catch (SQLException ex) { AdventureUtil.consoleMessage("[CustomFishing] Failed to update data for " + uuid); } @@ -121,10 +129,12 @@ public class MySQLStorageImpl implements DataStorageInterface { public boolean exists(UUID uuid) { String sql = String.format(SqlConstants.SQL_SELECT_BAG_BY_UUID, sqlConnection.getTablePrefix() + "_fishingbag"); boolean exist; - try (Connection connection = sqlConnection.getConnection(); PreparedStatement statement = connection.prepareStatement(sql)) { + try { + Connection connection = sqlConnection.getConnection(); PreparedStatement statement = connection.prepareStatement(sql); statement.setString(1, uuid.toString()); ResultSet rs = statement.executeQuery(); exist = rs.next(); + connection.close(); } catch (SQLException ex) { AdventureUtil.consoleMessage("[CustomFishing] Failed to select data for " + uuid); 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 0f2d4149..0c2ca138 100644 --- a/src/main/java/net/momirealms/customfishing/integration/item/MMOItemsItemImpl.java +++ b/src/main/java/net/momirealms/customfishing/integration/item/MMOItemsItemImpl.java @@ -34,6 +34,6 @@ public class MMOItemsItemImpl implements ItemInterface { material = material.substring(9); String[] split = StringUtils.split(material, ":"); MMOItem mmoItem = MMOItems.plugin.getMMOItem(Type.get(split[0]), split[1]); - return mmoItem == null ? null : mmoItem.newBuilder().getItemStack(); + return mmoItem == null ? null : mmoItem.newBuilder().build(); } } diff --git a/src/main/java/net/momirealms/customfishing/integration/season/CustomCropsSeasonImpl.java b/src/main/java/net/momirealms/customfishing/integration/season/CustomCropsSeasonImpl.java index cefc5718..4602ef20 100644 --- a/src/main/java/net/momirealms/customfishing/integration/season/CustomCropsSeasonImpl.java +++ b/src/main/java/net/momirealms/customfishing/integration/season/CustomCropsSeasonImpl.java @@ -26,4 +26,4 @@ public class CustomCropsSeasonImpl implements SeasonInterface { public String getSeason(World world) { return SeasonUtils.getSeason(world).name(); } -} +} \ No newline at end of file diff --git a/src/main/java/net/momirealms/customfishing/integration/season/RealisticSeasonsImpl.java b/src/main/java/net/momirealms/customfishing/integration/season/RealisticSeasonsImpl.java index 3beec64a..bc80dca9 100644 --- a/src/main/java/net/momirealms/customfishing/integration/season/RealisticSeasonsImpl.java +++ b/src/main/java/net/momirealms/customfishing/integration/season/RealisticSeasonsImpl.java @@ -25,6 +25,13 @@ public class RealisticSeasonsImpl implements SeasonInterface { @Override public String getSeason(World world) { - return SeasonsAPI.getInstance().getSeason(world).toString(); + return switch (SeasonsAPI.getInstance().getSeason(world)) { + case WINTER -> "winter"; + case SPRING -> "spring"; + case SUMMER -> "summer"; + case FALL -> "autumn"; + case DISABLED -> "disabled"; + case RESTORE -> "restore"; + }; } } diff --git a/src/main/java/net/momirealms/customfishing/manager/BagDataManager.java b/src/main/java/net/momirealms/customfishing/manager/BagDataManager.java index 7fa45509..22d83739 100644 --- a/src/main/java/net/momirealms/customfishing/manager/BagDataManager.java +++ b/src/main/java/net/momirealms/customfishing/manager/BagDataManager.java @@ -161,7 +161,7 @@ public class BagDataManager extends Function { WrappedChatComponent.fromJson( GsonComponentSerializer.gson().serialize( MiniMessage.miniMessage().deserialize( - ItemStackUtil.replaceLegacy(text) + AdventureUtil.replaceLegacy(text) ) ) ) diff --git a/src/main/java/net/momirealms/customfishing/manager/FishingManager.java b/src/main/java/net/momirealms/customfishing/manager/FishingManager.java index 564725a3..6ea8ef48 100644 --- a/src/main/java/net/momirealms/customfishing/manager/FishingManager.java +++ b/src/main/java/net/momirealms/customfishing/manager/FishingManager.java @@ -638,18 +638,18 @@ public class FishingManager extends Function { if (text.contains("{loot}")){ text = text.replace("{loot}","|"); if (text.startsWith("|")){ - component = getDisplayName(itemStack).append(MiniMessage.miniMessage().deserialize(text.substring(1))); + component = getDisplayName(itemStack).append(MiniMessage.miniMessage().deserialize(AdventureUtil.replaceLegacy(text.substring(1)))); } else if (text.endsWith("|")){ - component = MiniMessage.miniMessage().deserialize(text.substring(0,text.length() - 1)).append(getDisplayName(itemStack)); + component = MiniMessage.miniMessage().deserialize(AdventureUtil.replaceLegacy(text.substring(0,text.length() - 1))).append(getDisplayName(itemStack)); } else { String[] titleSplit = StringUtils.split(text, "|"); - component = MiniMessage.miniMessage().deserialize(titleSplit[0]).append(getDisplayName(itemStack)).append(MiniMessage.miniMessage().deserialize(titleSplit[1])); + component = MiniMessage.miniMessage().deserialize(AdventureUtil.replaceLegacy(titleSplit[0])).append(getDisplayName(itemStack)).append(MiniMessage.miniMessage().deserialize(AdventureUtil.replaceLegacy(titleSplit[1]))); } } else { - component = MiniMessage.miniMessage().deserialize(text); + component = MiniMessage.miniMessage().deserialize(AdventureUtil.replaceLegacy(text)); } return component; } diff --git a/src/main/java/net/momirealms/customfishing/manager/SellManager.java b/src/main/java/net/momirealms/customfishing/manager/SellManager.java index 234b5626..eb1e7f06 100644 --- a/src/main/java/net/momirealms/customfishing/manager/SellManager.java +++ b/src/main/java/net/momirealms/customfishing/manager/SellManager.java @@ -97,9 +97,7 @@ public class SellManager extends Function { loadConfig(); CustomFishing.protocolManager.addPacketListener(windowPacketListener); Bukkit.getPluginManager().registerEvents(inventoryListener, CustomFishing.plugin); - if (sellLimitation) { - readLimitationCache(); - } + readLimitationCache(); } private void readLimitationCache() { @@ -199,7 +197,7 @@ public class SellManager extends Function { titleIn = config.getInt("actions.title.in"); titleStay = config.getInt("actions.title.stay"); titleOut = config.getInt("actions.title.out"); - } else actionbarNotification = null; + } else titleNotification = null; if (config.getBoolean("actions.commands.enable")) { commands = config.getStringList("actions.commands.value").toArray(new String[0]); } else commands = null; @@ -261,7 +259,7 @@ public class SellManager extends Function { } double earnings = Optional.ofNullable(todayEarning.get(player.getName())).orElse(0d); - if (earnings + totalPrice > upperLimit) { + if (sellLimitation && earnings + totalPrice > upperLimit) { inventory.close(); AdventureUtil.playerMessage(player, MessageManager.prefix + MessageManager.reachSellLimit); if (denyKey != null) AdventureUtil.playerSound(player, soundSource, denyKey, 1, 1); @@ -369,21 +367,21 @@ public class SellManager extends Function { private void doActions(Player player, float earnings, double remains) { if (titleNotification != null) AdventureUtil.playerTitle( player, - titleNotification.replace("{money}", String.format("%.2f", earnings)).replace("{remains}", String.format("%.2f", remains)), - subtitleNotification.replace("{money}", String.format("%.2f", earnings)).replace("{remains}", String.format("%.2f", remains)), + titleNotification.replace("{money}", String.format("%.2f", earnings)).replace("{remains}", sellLimitation ? String.format("%.2f", remains) : "unlimited"), + subtitleNotification.replace("{money}", String.format("%.2f", earnings)).replace("{remains}", sellLimitation ? String.format("%.2f", remains) : "unlimited"), titleIn * 50, titleStay * 50, titleOut * 50 ); if (msgNotification != null) { - AdventureUtil.playerMessage(player, msgNotification.replace("{money}", String.format("%.2f", earnings)).replace("{remains}", String.format("%.2f", remains))); + AdventureUtil.playerMessage(player, msgNotification.replace("{money}", String.format("%.2f", earnings)).replace("{remains}", sellLimitation ? String.format("%.2f", remains) : "unlimited")); } if (actionbarNotification != null) { - AdventureUtil.playerActionbar(player, actionbarNotification.replace("{money}", String.format("%.2f", earnings)).replace("{remains}", String.format("%.2f", remains))); + AdventureUtil.playerActionbar(player, actionbarNotification.replace("{money}", String.format("%.2f", earnings)).replace("{remains}", sellLimitation ? String.format("%.2f", remains) : "unlimited")); } if (commands != null) { for (String cmd : commands) { - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), cmd.replace("{player}", player.getName()).replace("{money}", String.format("%.2f", earnings)).replace("{remains}", String.format("%.2f", remains))); + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), cmd.replace("{player}", player.getName()).replace("{money}", String.format("%.2f", earnings)).replace("{remains}", sellLimitation ? String.format("%.2f", remains) : "unlimited")); } } if (ConfigManager.logEarning) { @@ -408,7 +406,7 @@ public class SellManager extends Function { WrappedChatComponent.fromJson( GsonComponentSerializer.gson().serialize( MiniMessage.miniMessage().deserialize( - ItemStackUtil.replaceLegacy(text) + AdventureUtil.replaceLegacy(text) ) ) ) diff --git a/src/main/java/net/momirealms/customfishing/object/TextCache.java b/src/main/java/net/momirealms/customfishing/object/TextCache.java index 69549e2b..2361fb61 100644 --- a/src/main/java/net/momirealms/customfishing/object/TextCache.java +++ b/src/main/java/net/momirealms/customfishing/object/TextCache.java @@ -76,8 +76,12 @@ public class TextCache { .replace("{minute}", String.format("%02d", Competition.currentCompetition.getRemainingTime() / 60)) .replace("{second}",String.format("%02d", Competition.currentCompetition.getRemainingTime() % 60)) .replace("{score}", String.format("%.1f", Competition.currentCompetition.getScore(owner))) + .replace("{1st_player}", Competition.currentCompetition.getFirstPlayer()) .replace("{1st_score}", String.format("%.1f", Competition.currentCompetition.getFirstScore())) - .replace("{1st_player}", Competition.currentCompetition.getFirstPlayer()); + .replace("{2nd_player}", Competition.currentCompetition.getSecondPlayer()) + .replace("{2nd_score}", String.format("%.1f", Competition.currentCompetition.getSecondScore())) + .replace("{3rd_player}", Competition.currentCompetition.getThirdPlayer()) + .replace("{3rd_score}", String.format("%.1f", Competition.currentCompetition.getThirdScore())); if (!latestValue.equals(string)) { latestValue = string; diff --git a/src/main/java/net/momirealms/customfishing/object/requirements/SeasonImpl.java b/src/main/java/net/momirealms/customfishing/object/requirements/SeasonImpl.java index b336b80d..f3c07e08 100644 --- a/src/main/java/net/momirealms/customfishing/object/requirements/SeasonImpl.java +++ b/src/main/java/net/momirealms/customfishing/object/requirements/SeasonImpl.java @@ -18,6 +18,7 @@ package net.momirealms.customfishing.object.requirements; import net.momirealms.customfishing.CustomFishing; +import net.momirealms.customfishing.helper.Log; import net.momirealms.customfishing.integration.SeasonInterface; import net.momirealms.customfishing.object.fishing.FishingCondition; diff --git a/src/main/java/net/momirealms/customfishing/util/AdventureUtil.java b/src/main/java/net/momirealms/customfishing/util/AdventureUtil.java index 0b336b2a..20865726 100644 --- a/src/main/java/net/momirealms/customfishing/util/AdventureUtil.java +++ b/src/main/java/net/momirealms/customfishing/util/AdventureUtil.java @@ -40,14 +40,14 @@ public class AdventureUtil { public static void consoleMessage(String s) { Audience au = CustomFishing.adventure.sender(Bukkit.getConsoleSender()); MiniMessage mm = MiniMessage.miniMessage(); - Component parsed = mm.deserialize(ItemStackUtil.replaceLegacy(s)); + Component parsed = mm.deserialize(replaceLegacy(s)); au.sendMessage(parsed); } public static void playerMessage(Player player, String s) { Audience au = CustomFishing.adventure.player(player); MiniMessage mm = MiniMessage.miniMessage(); - Component parsed = mm.deserialize(ItemStackUtil.replaceLegacy(s)); + Component parsed = mm.deserialize(replaceLegacy(s)); au.sendMessage(parsed); } @@ -55,7 +55,7 @@ public class AdventureUtil { Audience au = CustomFishing.adventure.player(player); MiniMessage mm = MiniMessage.miniMessage(); Title.Times times = Title.Times.times(Duration.ofMillis(in), Duration.ofMillis(duration), Duration.ofMillis(out)); - Title title = Title.title(mm.deserialize(ItemStackUtil.replaceLegacy(s1)), mm.deserialize(ItemStackUtil.replaceLegacy(s2)), times); + Title title = Title.title(mm.deserialize(replaceLegacy(s1)), mm.deserialize(replaceLegacy(s2)), times); au.showTitle(title); } @@ -69,7 +69,7 @@ public class AdventureUtil { public static void playerActionbar(Player player, String s) { Audience au = CustomFishing.adventure.player(player); MiniMessage mm = MiniMessage.miniMessage(); - au.sendActionBar(mm.deserialize(ItemStackUtil.replaceLegacy(s))); + au.sendActionBar(mm.deserialize(replaceLegacy(s))); } public static void playerSound(Player player, Sound.Source source, Key key, float volume, float pitch) { @@ -77,4 +77,113 @@ public class AdventureUtil { Audience au = CustomFishing.adventure.player(player); au.playSound(sound); } + + public static String replaceLegacy(String s) { + StringBuilder stringBuilder = new StringBuilder(); + char[] chars = s.replaceAll("&","§").toCharArray(); + for (int i = 0; i < chars.length; i++) { + if (chars[i] == '§') { + if (i + 1 < chars.length) { + switch (chars[i+1]){ + case '0' -> { + i++; + stringBuilder.append(""); + } + case '1' -> { + i++; + stringBuilder.append(""); + } + case '2' -> { + i++; + stringBuilder.append(""); + } + case '3' -> { + i++; + stringBuilder.append(""); + } + case '4' -> { + i++; + stringBuilder.append(""); + } + case '5' -> { + i++; + stringBuilder.append(""); + } + case '6' -> { + i++; + stringBuilder.append(""); + } + case '7' -> { + i++; + stringBuilder.append(""); + } + case '8' -> { + i++; + stringBuilder.append(""); + } + case '9' -> { + i++; + stringBuilder.append(""); + } + case 'a' -> { + i++; + stringBuilder.append(""); + } + case 'b' -> { + i++; + stringBuilder.append(""); + } + case 'c' -> { + i++; + stringBuilder.append(""); + } + case 'd' -> { + i++; + stringBuilder.append(""); + } + case 'e' -> { + i++; + stringBuilder.append(""); + } + case 'f' -> { + i++; + stringBuilder.append(""); + } + case 'r' -> { + i++; + stringBuilder.append(""); + } + case 'l' -> { + i++; + stringBuilder.append(""); + } + case 'm' -> { + i++; + stringBuilder.append(""); + } + case 'o' -> { + i++; + stringBuilder.append(""); + } + case 'n' -> { + i++; + stringBuilder.append(""); + } + case 'x' -> { + stringBuilder.append("<#").append(chars[i+3]).append(chars[i+5]).append(chars[i+7]).append(chars[i+9]).append(chars[i+11]).append(chars[i+13]).append(">"); + i += 13; + } + case 'k' -> { + i++; + stringBuilder.append(""); + } + } + } + } + else { + stringBuilder.append(chars[i]); + } + } + return stringBuilder.toString(); + } } diff --git a/src/main/java/net/momirealms/customfishing/util/ItemStackUtil.java b/src/main/java/net/momirealms/customfishing/util/ItemStackUtil.java index 3b49ec2d..1b52efbf 100644 --- a/src/main/java/net/momirealms/customfishing/util/ItemStackUtil.java +++ b/src/main/java/net/momirealms/customfishing/util/ItemStackUtil.java @@ -68,7 +68,7 @@ public class ItemStackUtil { NBTCompound display = nbtItem.addCompound("display"); String name = item.getName(); if (name.contains("&") || name.contains("§")){ - name = replaceLegacy(name); + name = AdventureUtil.replaceLegacy(name); } display.setString("Name", GsonComponentSerializer.gson().serialize(MiniMessage.miniMessage().deserialize("" + name))); } @@ -77,7 +77,7 @@ public class ItemStackUtil { List lore = display.getStringList("Lore"); item.getLore().forEach(line -> { if (line.contains("&") || line.contains("§")){ - line = replaceLegacy(line); + line = AdventureUtil.replaceLegacy(line); } lore.add(GsonComponentSerializer.gson().serialize(MiniMessage.miniMessage().deserialize("" + line))); }); @@ -289,113 +289,4 @@ public class ItemStackUtil { }); return map; } - - public static String replaceLegacy(String s) { - StringBuilder stringBuilder = new StringBuilder(); - char[] chars = s.replaceAll("&","§").toCharArray(); - for (int i = 0; i < chars.length; i++) { - if (chars[i] == '§') { - if (i + 1 < chars.length) { - switch (chars[i+1]){ - case '0' -> { - i++; - stringBuilder.append(""); - } - case '1' -> { - i++; - stringBuilder.append(""); - } - case '2' -> { - i++; - stringBuilder.append(""); - } - case '3' -> { - i++; - stringBuilder.append(""); - } - case '4' -> { - i++; - stringBuilder.append(""); - } - case '5' -> { - i++; - stringBuilder.append(""); - } - case '6' -> { - i++; - stringBuilder.append(""); - } - case '7' -> { - i++; - stringBuilder.append(""); - } - case '8' -> { - i++; - stringBuilder.append(""); - } - case '9' -> { - i++; - stringBuilder.append(""); - } - case 'a' -> { - i++; - stringBuilder.append(""); - } - case 'b' -> { - i++; - stringBuilder.append(""); - } - case 'c' -> { - i++; - stringBuilder.append(""); - } - case 'd' -> { - i++; - stringBuilder.append(""); - } - case 'e' -> { - i++; - stringBuilder.append(""); - } - case 'f' -> { - i++; - stringBuilder.append(""); - } - case 'r' -> { - i++; - stringBuilder.append(""); - } - case 'l' -> { - i++; - stringBuilder.append(""); - } - case 'm' -> { - i++; - stringBuilder.append(""); - } - case 'o' -> { - i++; - stringBuilder.append(""); - } - case 'n' -> { - i++; - stringBuilder.append(""); - } - case 'x' -> { - stringBuilder.append("<#").append(chars[i+3]).append(chars[i+5]).append(chars[i+7]).append(chars[i+9]).append(chars[i+11]).append(chars[i+13]).append(">"); - i += 13; - } - case 'k' -> { - i++; - stringBuilder.append(""); - } - } - } - } - else { - stringBuilder.append(chars[i]); - } - } - return stringBuilder.toString(); - } } diff --git a/src/main/resources/loots/example.yml b/src/main/resources/loots/example.yml index c8961fdb..676b6513 100644 --- a/src/main/resources/loots/example.yml +++ b/src/main/resources/loots/example.yml @@ -36,7 +36,8 @@ rainbow_fish: - 'This is a rainbow fish!' - 'It is {size}cm long!' custom-model-data: 1 - + # breakable + unbreakable: false # Optional size: 10~200