From 531ce227b38bf1d79f30b1781a93d970acf2aa9e Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Mon, 30 Jun 2025 01:11:10 +0800 Subject: [PATCH] 1.21.6 --- api/build.gradle.kts | 1 + .../api/mechanic/MechanicType.java | 2 +- .../api/mechanic/config/ConfigType.java | 10 +- .../api/mechanic/config/GearConfigParser.java | 4 +- .../api/mechanic/fishing/FishingGears.java | 8 +- .../common/helper/AdventureHelper.java | 50 ++---- core/build.gradle.kts | 1 + .../bukkit/action/BukkitActionManager.java | 40 +++-- .../bukkit/competition/Competition.java | 6 +- .../bukkit/item/BukkitItemFactory.java | 2 +- .../bukkit/sender/BukkitSenderFactory.java | 7 +- .../contents/{gear => equipment}/default.yml | 143 +++++++++--------- gradle.properties | 8 +- 13 files changed, 128 insertions(+), 154 deletions(-) rename core/src/main/resources/contents/{gear => equipment}/default.yml (87%) diff --git a/api/build.gradle.kts b/api/build.gradle.kts index 80aaba0f..e97c6db0 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -25,6 +25,7 @@ dependencies { compileOnly("org.apache.logging.log4j:log4j-core:${rootProject.properties["log4j_version"]}") compileOnly("net.kyori:adventure-text-minimessage:${rootProject.properties["adventure_bundle_version"]}") compileOnly("net.kyori:adventure-text-serializer-gson:${rootProject.properties["adventure_bundle_version"]}") + compileOnly("net.kyori:adventure-text-serializer-json-legacy-impl:${rootProject.properties["adventure_bundle_version"]}") compileOnly("com.github.ben-manes.caffeine:caffeine:${rootProject.properties["caffeine_version"]}") compileOnly("net.objecthunter:exp4j:${rootProject.properties["exp4j_version"]}") compileOnly("com.google.guava:guava:${rootProject.properties["guava_version"]}") diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/MechanicType.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/MechanicType.java index b6079b34..283e1790 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/MechanicType.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/MechanicType.java @@ -41,7 +41,7 @@ public class MechanicType { public static final MechanicType HOOK = of("hook"); public static final MechanicType TOTEM = of("totem"); public static final MechanicType ENCHANT = of("enchant"); - public static final MechanicType GEAR = of("gear"); + public static final MechanicType EQUIPMENT = of("equipment"); private final String type; diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/ConfigType.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/ConfigType.java index bb8d1f0e..573e3516 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/ConfigType.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/ConfigType.java @@ -32,8 +32,8 @@ import java.util.function.Supplier; * Configuration types for various mechanics. */ public class ConfigType { - public static final ConfigType GEAR = of( - "gear", //new + public static final ConfigType EQUIPMENT = of( + "equipment", //new () -> { HashMap> parsers = new HashMap<>(); parsers.putAll(BukkitCustomFishingPlugin.getInstance().getConfigManager().getItemFormatFunctions()); @@ -42,10 +42,10 @@ public class ConfigType { return parsers; }, (id, section, functions) -> { - MechanicType.register(id, MechanicType.GEAR); + MechanicType.register(id, MechanicType.EQUIPMENT); GearConfigParser config = new GearConfigParser(id, section, functions); BukkitCustomFishingPlugin.getInstance().getItemManager().registerItem(config.getItem()); - BukkitCustomFishingPlugin.getInstance().getEffectManager().registerEffectModifier(config.getEffectModifier(), MechanicType.GEAR); + BukkitCustomFishingPlugin.getInstance().getEffectManager().registerEffectModifier(config.getEffectModifier(), MechanicType.EQUIPMENT); BukkitCustomFishingPlugin.getInstance().getEventManager().registerEventCarrier(config.getEventCarrier()); } ); @@ -234,7 +234,7 @@ public class ConfigType { } ); - private static final ConfigType[] values = new ConfigType[] {ITEM, ENTITY, BLOCK, HOOK, ROD, BAIT, UTIL, TOTEM, ENCHANT, MINI_GAME, COMPETITION, GEAR}; + private static final ConfigType[] values = new ConfigType[] {ITEM, ENTITY, BLOCK, HOOK, ROD, BAIT, UTIL, TOTEM, ENCHANT, MINI_GAME, COMPETITION, EQUIPMENT}; /** * Gets an array of all configuration types. diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/GearConfigParser.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/GearConfigParser.java index ff5a2da5..3842d54a 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/GearConfigParser.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/GearConfigParser.java @@ -80,7 +80,7 @@ public class GearConfigParser { public EffectModifier getEffectModifier() { EffectModifier.Builder builder = EffectModifier.builder() .id(id) - .type(MechanicType.GEAR); + .type(MechanicType.EQUIPMENT); for (Consumer consumer : effectBuilderConsumers) { consumer.accept(builder); } @@ -90,7 +90,7 @@ public class GearConfigParser { public EventCarrier getEventCarrier() { EventCarrier.Builder builder = EventCarrier.builder() .id(id) - .type(MechanicType.GEAR); + .type(MechanicType.EQUIPMENT); for (Consumer consumer : eventBuilderConsumers) { consumer.accept(builder); } diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/FishingGears.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/FishingGears.java index 72cf4f73..0a75a2ed 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/FishingGears.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/FishingGears.java @@ -252,14 +252,14 @@ public class FishingGears { if (armorPiece != null && armorPiece.getType() != Material.AIR) { String gearID = BukkitCustomFishingPlugin.getInstance().getItemManager().getItemID(armorPiece); List itemTypes = MechanicType.getTypeByID(gearID); - if (itemTypes != null && itemTypes.contains(MechanicType.GEAR)) { + if (itemTypes != null && itemTypes.contains(MechanicType.EQUIPMENT)) { gearItemsList.add(Pair.of(gearID, armorPiece)); - BukkitCustomFishingPlugin.getInstance().getEffectManager().getEffectModifier(gearID, MechanicType.GEAR).ifPresent(fishingGears.modifiers::add); + BukkitCustomFishingPlugin.getInstance().getEffectManager().getEffectModifier(gearID, MechanicType.EQUIPMENT).ifPresent(fishingGears.modifiers::add); } } } if (!gearItemsList.isEmpty()) { - fishingGears.gears.put(GearType.GEAR, gearItemsList); + fishingGears.gears.put(GearType.EQUIPMENT, gearItemsList); } // check requirements before checking totems @@ -305,7 +305,7 @@ public class FishingGears { ((context, itemStack) -> {}), ((context, itemStack) -> {}) ); - public static final GearType GEAR = new GearType(MechanicType.GEAR, + public static final GearType EQUIPMENT = new GearType(MechanicType.EQUIPMENT, ((context, itemStack) -> {}), // castFunction ((context, itemStack) -> {}), // reelFunction ((context, itemStack) -> {}), // biteFunction diff --git a/api/src/main/java/net/momirealms/customfishing/common/helper/AdventureHelper.java b/api/src/main/java/net/momirealms/customfishing/common/helper/AdventureHelper.java index 9a584590..1852c361 100644 --- a/api/src/main/java/net/momirealms/customfishing/common/helper/AdventureHelper.java +++ b/api/src/main/java/net/momirealms/customfishing/common/helper/AdventureHelper.java @@ -25,6 +25,8 @@ import net.kyori.adventure.sound.Sound; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +import net.kyori.adventure.text.serializer.json.JSONOptions; +import net.kyori.adventure.text.serializer.json.legacyimpl.NBTLegacyHoverEventSerializer; import net.kyori.adventure.title.Title; import java.time.Duration; @@ -44,7 +46,19 @@ public class AdventureHelper { private AdventureHelper() { this.miniMessage = MiniMessage.builder().build(); this.miniMessageStrict = MiniMessage.builder().strict(true).build(); - this.gsonComponentSerializer = GsonComponentSerializer.builder().build(); + GsonComponentSerializer.Builder builder = GsonComponentSerializer.builder(); + if (!VersionHelper.isVersionNewerThan1_20_5()) { + builder.legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get()); + builder.editOptions((b) -> b.value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_ID_AS_INT_ARRAY, false)); + } + if (!VersionHelper.isVersionNewerThan1_21_5()) { + builder.editOptions((b) -> { + b.value(JSONOptions.EMIT_CLICK_EVENT_TYPE, JSONOptions.ClickEventValueMode.CAMEL_CASE); + b.value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.CAMEL_CASE); + b.value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_KEY_AS_TYPE_AND_UUID_AS_ID, true); + }); + } + this.gsonComponentSerializer = builder.build(); } private static class SingletonHolder { @@ -103,40 +117,6 @@ public class AdventureHelper { return instance.miniMessageToJsonCache.get(miniMessage, (text) -> instance.gsonComponentSerializer.serialize(miniMessage(text))); } - /** - * Sends a title to an audience. - * - * @param audience the audience to send the title to - * @param title the title component - * @param subtitle the subtitle component - * @param fadeIn the fade-in duration in ticks - * @param stay the stay duration in ticks - * @param fadeOut the fade-out duration in ticks - */ - public static void sendTitle(Audience audience, Component title, Component subtitle, int fadeIn, int stay, int fadeOut) { - audience.showTitle(Title.title(title, subtitle, Title.Times.times(Duration.ofMillis(fadeIn * 50L), Duration.ofMillis(stay * 50L), Duration.ofMillis(fadeOut * 50L)))); - } - - /** - * Sends an action bar message to an audience. - * - * @param audience the audience to send the action bar message to - * @param actionBar the action bar component - */ - public static void sendActionBar(Audience audience, Component actionBar) { - audience.sendActionBar(actionBar); - } - - /** - * Sends a message to an audience. - * - * @param audience the audience to send the message to - * @param message the message component - */ - public static void sendMessage(Audience audience, Component message) { - audience.sendMessage(message); - } - /** * Plays a sound for an audience. * diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 76d4a7b4..8dfa4d32 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -23,6 +23,7 @@ dependencies { implementation("net.kyori:adventure-text-serializer-gson:${rootProject.properties["adventure_bundle_version"]}") { exclude("com.google.code.gson", "gson") } + implementation("net.kyori:adventure-text-serializer-json-legacy-impl:${rootProject.properties["adventure_bundle_version"]}") // tag & component implementation("com.saicone.rtag:rtag:${rootProject.properties["rtag_version"]}") implementation("com.saicone.rtag:rtag-item:${rootProject.properties["rtag_version"]}") diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/action/BukkitActionManager.java b/core/src/main/java/net/momirealms/customfishing/bukkit/action/BukkitActionManager.java index 40a6cde0..7634abd8 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/action/BukkitActionManager.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/action/BukkitActionManager.java @@ -44,6 +44,7 @@ import net.momirealms.customfishing.common.helper.VersionHelper; import net.momirealms.customfishing.common.locale.MessageConstants; import net.momirealms.customfishing.common.locale.TranslationManager; import net.momirealms.customfishing.common.plugin.scheduler.SchedulerTask; +import net.momirealms.customfishing.common.sender.Sender; import net.momirealms.customfishing.common.util.ClassUtils; import net.momirealms.customfishing.common.util.ListUtils; import net.momirealms.customfishing.common.util.Pair; @@ -186,7 +187,7 @@ public class BukkitActionManager implements ActionManager { return context -> { if (Math.random() > chance.evaluate(context)) return; List replaced = plugin.getPlaceholderManager().parse(context.holder(), messages, context.placeholderMap()); - Audience audience = plugin.getSenderFactory().getAudience(context.holder()); + Sender audience = plugin.getSenderFactory().wrap(context.holder()); for (String text : replaced) { audience.sendMessage(AdventureHelper.miniMessage(text)); } @@ -198,7 +199,7 @@ public class BukkitActionManager implements ActionManager { if (Math.random() > chance.evaluate(context)) return; String random = messages.get(RandomUtils.generateRandomInt(0, messages.size() - 1)); random = BukkitPlaceholderManager.getInstance().parse(context.holder(), random, context.placeholderMap()); - Audience audience = plugin.getSenderFactory().getAudience(context.holder()); + Sender audience = plugin.getSenderFactory().wrap(context.holder()); audience.sendMessage(AdventureHelper.miniMessage(random)); }; }, "random-message"); @@ -208,7 +209,7 @@ public class BukkitActionManager implements ActionManager { if (Math.random() > chance.evaluate(context)) return; List replaced = plugin.getPlaceholderManager().parse(context.holder(), messages, context.placeholderMap()); for (Player player : Bukkit.getOnlinePlayers()) { - Audience audience = plugin.getSenderFactory().getAudience(player); + Sender audience = plugin.getSenderFactory().wrap(player); for (String text : replaced) { audience.sendMessage(AdventureHelper.miniMessage(text)); } @@ -232,7 +233,7 @@ public class BukkitActionManager implements ActionManager { messages, context.placeholderMap() ); - Audience audience = plugin.getSenderFactory().getAudience(player); + Sender audience = plugin.getSenderFactory().wrap(player); for (String text : replaced) { audience.sendMessage(AdventureHelper.miniMessage(text)); } @@ -321,9 +322,7 @@ public class BukkitActionManager implements ActionManager { String text = (String) args; return context -> { if (Math.random() > chance.evaluate(context)) return; - Audience audience = plugin.getSenderFactory().getAudience(context.holder()); - Component component = AdventureHelper.miniMessage(plugin.getPlaceholderManager().parse(context.holder(), text, context.placeholderMap())); - audience.sendActionBar(component); + SparrowHeart.getInstance().sendActionBar(context.holder(), AdventureHelper.componentToJson(AdventureHelper.miniMessage(plugin.getPlaceholderManager().parse(context.holder(), text, context.placeholderMap())))); }; }, "actionbar"); registerAction((args, chance) -> { @@ -332,8 +331,7 @@ public class BukkitActionManager implements ActionManager { if (Math.random() > chance.evaluate(context)) return; String random = texts.get(RandomUtils.generateRandomInt(0, texts.size() - 1)); random = plugin.getPlaceholderManager().parse(context.holder(), random, context.placeholderMap()); - Audience audience = plugin.getSenderFactory().getAudience(context.holder()); - audience.sendActionBar(AdventureHelper.miniMessage(random)); + SparrowHeart.getInstance().sendActionBar(context.holder(), AdventureHelper.componentToJson(AdventureHelper.miniMessage(random))); }; }, "random-actionbar"); registerAction((args, chance) -> { @@ -349,8 +347,7 @@ public class BukkitActionManager implements ActionManager { if (LocationUtils.getDistance(player.getLocation(), location) <= realRange) { context.arg(ContextKeys.TEMP_NEAR_PLAYER, player.getName()); String replaced = plugin.getPlaceholderManager().parse(owner, actionbar, context.placeholderMap()); - Audience audience = plugin.getSenderFactory().getAudience(player); - audience.sendActionBar(AdventureHelper.miniMessage(replaced)); + SparrowHeart.getInstance().sendActionBar(player, AdventureHelper.componentToJson(AdventureHelper.miniMessage(replaced))); } } }; @@ -814,10 +811,9 @@ public class BukkitActionManager implements ActionManager { return context -> { if (Math.random() > chance.evaluate(context)) return; final Player player = context.holder(); - Audience audience = plugin.getSenderFactory().getAudience(player); - AdventureHelper.sendTitle(audience, - AdventureHelper.miniMessage(title.render(context)), - AdventureHelper.miniMessage(subtitle.render(context)), + SparrowHeart.getInstance().sendTitle(player, + AdventureHelper.componentToJson(AdventureHelper.miniMessage(title.render(context))), + AdventureHelper.componentToJson(AdventureHelper.miniMessage(subtitle.render(context))), fadeIn, stay, fadeOut ); }; @@ -840,10 +836,9 @@ public class BukkitActionManager implements ActionManager { TextValue title = TextValue.auto(titles.get(RandomUtils.generateRandomInt(0, titles.size() - 1))); TextValue subtitle = TextValue.auto(subtitles.get(RandomUtils.generateRandomInt(0, subtitles.size() - 1))); final Player player = context.holder(); - Audience audience = plugin.getSenderFactory().getAudience(player); - AdventureHelper.sendTitle(audience, - AdventureHelper.miniMessage(title.render(context)), - AdventureHelper.miniMessage(subtitle.render(context)), + SparrowHeart.getInstance().sendTitle(player, + AdventureHelper.componentToJson(AdventureHelper.miniMessage(title.render(context))), + AdventureHelper.componentToJson(AdventureHelper.miniMessage(subtitle.render(context))), fadeIn, stay, fadeOut ); }; @@ -866,10 +861,9 @@ public class BukkitActionManager implements ActionManager { for (Player player : location.getWorld().getPlayers()) { if (LocationUtils.getDistance(player.getLocation(), location) <= range) { context.arg(ContextKeys.TEMP_NEAR_PLAYER, player.getName()); - Audience audience = plugin.getSenderFactory().getAudience(player); - AdventureHelper.sendTitle(audience, - AdventureHelper.miniMessage(title.render(context)), - AdventureHelper.miniMessage(subtitle.render(context)), + SparrowHeart.getInstance().sendTitle(player, + AdventureHelper.componentToJson(AdventureHelper.miniMessage(title.render(context))), + AdventureHelper.componentToJson(AdventureHelper.miniMessage(subtitle.render(context))), fadeIn, stay, fadeOut ); } diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/competition/Competition.java b/core/src/main/java/net/momirealms/customfishing/bukkit/competition/Competition.java index d268303a..66457ff0 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/competition/Competition.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/competition/Competition.java @@ -39,6 +39,7 @@ import net.momirealms.customfishing.common.helper.AdventureHelper; import net.momirealms.customfishing.common.locale.MessageConstants; import net.momirealms.customfishing.common.locale.TranslationManager; import net.momirealms.customfishing.common.plugin.scheduler.SchedulerTask; +import net.momirealms.customfishing.common.sender.Sender; import net.momirealms.customfishing.common.util.Pair; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; @@ -50,6 +51,7 @@ import java.time.Instant; import java.util.HashMap; import java.util.Iterator; import java.util.Optional; +import java.util.Set; import java.util.concurrent.TimeUnit; public class Competition implements FishingCompetition { @@ -196,11 +198,11 @@ public class Competition implements FishingCompetition { private void broadcast(BroadcastConfig config) { String[] texts = config.texts(); for (Player player : Bukkit.getOnlinePlayers()) { - Audience audience = plugin.getSenderFactory().getAudience(player); + Sender audience = plugin.getSenderFactory().wrap(player); for (String s : texts) { DynamicText text = new DynamicText(player, s); text.update(this.publicContext.placeholderMap()); - AdventureHelper.sendMessage(audience, AdventureHelper.miniMessage(text.getLatestValue())); + audience.sendMessage(AdventureHelper.miniMessage(text.getLatestValue())); } } } diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/item/BukkitItemFactory.java b/core/src/main/java/net/momirealms/customfishing/bukkit/item/BukkitItemFactory.java index 6cce46b8..0a787ac8 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/item/BukkitItemFactory.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/item/BukkitItemFactory.java @@ -48,7 +48,7 @@ public abstract class BukkitItemFactory extends ItemFactory { return new ComponentItemFactory(plugin); } - case "1.21.5" -> { + case "1.21.5", "1.21.6" -> { return new ComponentItemFactory1_21_5(plugin); } default -> throw new IllegalStateException("Unsupported server version: " + plugin.getServerVersion()); diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/sender/BukkitSenderFactory.java b/core/src/main/java/net/momirealms/customfishing/bukkit/sender/BukkitSenderFactory.java index 4739e602..28d31d63 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/sender/BukkitSenderFactory.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/sender/BukkitSenderFactory.java @@ -29,9 +29,11 @@ import net.kyori.adventure.audience.Audience; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.Component; import net.momirealms.customfishing.api.BukkitCustomFishingPlugin; +import net.momirealms.customfishing.common.helper.AdventureHelper; import net.momirealms.customfishing.common.sender.Sender; import net.momirealms.customfishing.common.sender.SenderFactory; import net.momirealms.customfishing.common.util.Tristate; +import net.momirealms.sparrow.heart.SparrowHeart; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.RemoteConsoleCommandSender; @@ -70,8 +72,9 @@ public class BukkitSenderFactory extends SenderFactory getAudience(sender).sendMessage(message)); diff --git a/core/src/main/resources/contents/gear/default.yml b/core/src/main/resources/contents/equipment/default.yml similarity index 87% rename from core/src/main/resources/contents/gear/default.yml rename to core/src/main/resources/contents/equipment/default.yml index a8d06ac8..8e0ded34 100644 --- a/core/src/main/resources/contents/gear/default.yml +++ b/core/src/main/resources/contents/equipment/default.yml @@ -1,75 +1,68 @@ -angler_helmet: - material: IRON_HELMET - display: - name: "<#A0D2DB>Angler's Helmet" - lore: - - '' - - '<#7FFFD4>Description:' - - ' - A sturdy helmet that slightly increases concentration when fishing.' - - '' - - '<#FFD700>Effects:' - - ' - Slightly reduces fishing difficulty.' - custom-model-data: 50010 # Example - events: - success: # -1 durability when player successfully catches fish - durability_action: - type: durability - value: - slot: head - amount: -1 - effects: - effect_1: - type: difficulty - value: -2 - -deep_sea_chestplate: - material: DIAMOND_CHESTPLATE - display: - name: "<#3A6EA5>Deep Sea Chestplate" - lore: - - '' - - '<#7FFFD4>Description:' - - ' - Reinforced chestplate that helps attract larger fish.' - - '' - - '<#FFD700>Effects:' - - ' - Increases the chance of catching silver star fish.' - custom-model-data: 50011 - effects: - effect_1: - type: group-mod - value: - - silver_star:+1 - -swift_leggings: - material: LEATHER_LEGGINGS - display: - name: "<#C0C0C0>Swift Leggings" - lore: - - '' - - '<#7FFFD4>Description:' - - ' - Lightweight leggings that help reduce the waiting time for a fish to bite.' - - '' - - '<#FFD700>Effects:' - - ' - Slightly reduces waiting time.' - custom-model-data: 50012 # Example - effects: - effect_1: - type: wait-time-multiplier - value: 0.98 # Reduces by 2% - -sturdy_boots: - material: GOLDEN_BOOTS - display: - name: "<#FFD700>Sturdy Boots" - lore: - - '' - - '<#7FFFD4>Description:' - - ' - Boots that help you stand firmer, making the game a little easier.' - - '' - - '<#FFD700>Effects:' - - ' - Slightly reduces game time (making it easier).' - custom-model-data: 50013 # Example - effects: - effect_1: - type: game-time - value: -0.5 # Reduces game time by 0.5 seconds +angler_helmet: + material: IRON_HELMET + display: + name: "<#A0D2DB>Angler's Helmet" + lore: + - '' + - '<#7FFFD4>Description:' + - ' - A sturdy helmet that slightly increases concentration when fishing.' + - '' + - '<#FFD700>Effects:' + - ' - Slightly reduces fishing difficulty.' + custom-model-data: 50010 # Example + effects: + effect_1: + type: difficulty + value: -2 + +deep_sea_chestplate: + material: DIAMOND_CHESTPLATE + display: + name: "<#3A6EA5>Deep Sea Chestplate" + lore: + - '' + - '<#7FFFD4>Description:' + - ' - Reinforced chestplate that helps attract larger fish.' + - '' + - '<#FFD700>Effects:' + - ' - Increases the chance of catching silver star fish.' + custom-model-data: 50011 + effects: + effect_1: + type: group-mod + value: + - silver_star:+1 + +swift_leggings: + material: LEATHER_LEGGINGS + display: + name: "<#C0C0C0>Swift Leggings" + lore: + - '' + - '<#7FFFD4>Description:' + - ' - Lightweight leggings that help reduce the waiting time for a fish to bite.' + - '' + - '<#FFD700>Effects:' + - ' - Slightly reduces waiting time.' + custom-model-data: 50012 # Example + effects: + effect_1: + type: wait-time-multiplier + value: 0.98 # Reduces by 2% + +sturdy_boots: + material: GOLDEN_BOOTS + display: + name: "<#FFD700>Sturdy Boots" + lore: + - '' + - '<#7FFFD4>Description:' + - ' - Boots that help you stand firmer, making the game a little easier.' + - '' + - '<#FFD700>Effects:' + - ' - Slightly reduces game time (making it easier).' + custom-model-data: 50013 # Example + effects: + effect_1: + type: game-time + value: -0.5 # Reduces game time by 0.5 seconds diff --git a/gradle.properties b/gradle.properties index f62b1222..4072a7ef 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=2.3.12 +project_version=2.3.13 config_version=38 project_group=net.momirealms @@ -18,9 +18,9 @@ asm_commons_version=9.8 jar_relocator_version=1.7 h2_driver_version=2.3.232 sqlite_driver_version=3.49.1.0 -adventure_bundle_version=4.21.0 +adventure_bundle_version=4.23.0 adventure_platform_version=4.4.0 -sparrow_heart_version=0.55.2 +sparrow_heart_version=0.57 cloud_core_version=2.0.0 cloud_services_version=2.0.0 cloud_brigadier_version=2.0.0-beta.10 @@ -37,7 +37,7 @@ commons_pool_version=2.12.1 bstats_version=3.1.0 geantyref_version=1.3.16 caffeine_version=3.2.0 -rtag_version=1.5.10 +rtag_version=1.5.11 jedis_version=5.2.0 exp4j_version=0.4.8 placeholder_api_version=2.11.6