9
0
mirror of https://github.com/Xiao-MoMi/Custom-Fishing.git synced 2025-12-19 15:09:24 +00:00
This commit is contained in:
XiaoMoMi
2025-06-30 01:11:10 +08:00
parent f779f2c024
commit 531ce227b3
13 changed files with 128 additions and 154 deletions

View File

@@ -25,6 +25,7 @@ dependencies {
compileOnly("org.apache.logging.log4j:log4j-core:${rootProject.properties["log4j_version"]}") 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-minimessage:${rootProject.properties["adventure_bundle_version"]}")
compileOnly("net.kyori:adventure-text-serializer-gson:${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("com.github.ben-manes.caffeine:caffeine:${rootProject.properties["caffeine_version"]}")
compileOnly("net.objecthunter:exp4j:${rootProject.properties["exp4j_version"]}") compileOnly("net.objecthunter:exp4j:${rootProject.properties["exp4j_version"]}")
compileOnly("com.google.guava:guava:${rootProject.properties["guava_version"]}") compileOnly("com.google.guava:guava:${rootProject.properties["guava_version"]}")

View File

@@ -41,7 +41,7 @@ public class MechanicType {
public static final MechanicType HOOK = of("hook"); public static final MechanicType HOOK = of("hook");
public static final MechanicType TOTEM = of("totem"); public static final MechanicType TOTEM = of("totem");
public static final MechanicType ENCHANT = of("enchant"); 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; private final String type;

View File

@@ -32,8 +32,8 @@ import java.util.function.Supplier;
* Configuration types for various mechanics. * Configuration types for various mechanics.
*/ */
public class ConfigType { public class ConfigType {
public static final ConfigType GEAR = of( public static final ConfigType EQUIPMENT = of(
"gear", //new "equipment", //new
() -> { () -> {
HashMap<String, Node<ConfigParserFunction>> parsers = new HashMap<>(); HashMap<String, Node<ConfigParserFunction>> parsers = new HashMap<>();
parsers.putAll(BukkitCustomFishingPlugin.getInstance().getConfigManager().getItemFormatFunctions()); parsers.putAll(BukkitCustomFishingPlugin.getInstance().getConfigManager().getItemFormatFunctions());
@@ -42,10 +42,10 @@ public class ConfigType {
return parsers; return parsers;
}, },
(id, section, functions) -> { (id, section, functions) -> {
MechanicType.register(id, MechanicType.GEAR); MechanicType.register(id, MechanicType.EQUIPMENT);
GearConfigParser config = new GearConfigParser(id, section, functions); GearConfigParser config = new GearConfigParser(id, section, functions);
BukkitCustomFishingPlugin.getInstance().getItemManager().registerItem(config.getItem()); 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()); 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. * Gets an array of all configuration types.

View File

@@ -80,7 +80,7 @@ public class GearConfigParser {
public EffectModifier getEffectModifier() { public EffectModifier getEffectModifier() {
EffectModifier.Builder builder = EffectModifier.builder() EffectModifier.Builder builder = EffectModifier.builder()
.id(id) .id(id)
.type(MechanicType.GEAR); .type(MechanicType.EQUIPMENT);
for (Consumer<EffectModifier.Builder> consumer : effectBuilderConsumers) { for (Consumer<EffectModifier.Builder> consumer : effectBuilderConsumers) {
consumer.accept(builder); consumer.accept(builder);
} }
@@ -90,7 +90,7 @@ public class GearConfigParser {
public EventCarrier getEventCarrier() { public EventCarrier getEventCarrier() {
EventCarrier.Builder builder = EventCarrier.builder() EventCarrier.Builder builder = EventCarrier.builder()
.id(id) .id(id)
.type(MechanicType.GEAR); .type(MechanicType.EQUIPMENT);
for (Consumer<EventCarrier.Builder> consumer : eventBuilderConsumers) { for (Consumer<EventCarrier.Builder> consumer : eventBuilderConsumers) {
consumer.accept(builder); consumer.accept(builder);
} }

View File

@@ -252,14 +252,14 @@ public class FishingGears {
if (armorPiece != null && armorPiece.getType() != Material.AIR) { if (armorPiece != null && armorPiece.getType() != Material.AIR) {
String gearID = BukkitCustomFishingPlugin.getInstance().getItemManager().getItemID(armorPiece); String gearID = BukkitCustomFishingPlugin.getInstance().getItemManager().getItemID(armorPiece);
List<MechanicType> itemTypes = MechanicType.getTypeByID(gearID); List<MechanicType> itemTypes = MechanicType.getTypeByID(gearID);
if (itemTypes != null && itemTypes.contains(MechanicType.GEAR)) { if (itemTypes != null && itemTypes.contains(MechanicType.EQUIPMENT)) {
gearItemsList.add(Pair.of(gearID, armorPiece)); 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()) { if (!gearItemsList.isEmpty()) {
fishingGears.gears.put(GearType.GEAR, gearItemsList); fishingGears.gears.put(GearType.EQUIPMENT, gearItemsList);
} }
// check requirements before checking totems // check requirements before checking totems
@@ -305,7 +305,7 @@ public class FishingGears {
((context, itemStack) -> {}), ((context, itemStack) -> {}),
((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) -> {}), // castFunction
((context, itemStack) -> {}), // reelFunction ((context, itemStack) -> {}), // reelFunction
((context, itemStack) -> {}), // biteFunction ((context, itemStack) -> {}), // biteFunction

View File

@@ -25,6 +25,8 @@ import net.kyori.adventure.sound.Sound;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; 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 net.kyori.adventure.title.Title;
import java.time.Duration; import java.time.Duration;
@@ -44,7 +46,19 @@ public class AdventureHelper {
private AdventureHelper() { private AdventureHelper() {
this.miniMessage = MiniMessage.builder().build(); this.miniMessage = MiniMessage.builder().build();
this.miniMessageStrict = MiniMessage.builder().strict(true).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 { private static class SingletonHolder {
@@ -103,40 +117,6 @@ public class AdventureHelper {
return instance.miniMessageToJsonCache.get(miniMessage, (text) -> instance.gsonComponentSerializer.serialize(miniMessage(text))); 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. * Plays a sound for an audience.
* *

View File

@@ -23,6 +23,7 @@ dependencies {
implementation("net.kyori:adventure-text-serializer-gson:${rootProject.properties["adventure_bundle_version"]}") { implementation("net.kyori:adventure-text-serializer-gson:${rootProject.properties["adventure_bundle_version"]}") {
exclude("com.google.code.gson", "gson") exclude("com.google.code.gson", "gson")
} }
implementation("net.kyori:adventure-text-serializer-json-legacy-impl:${rootProject.properties["adventure_bundle_version"]}")
// tag & component // tag & component
implementation("com.saicone.rtag:rtag:${rootProject.properties["rtag_version"]}") implementation("com.saicone.rtag:rtag:${rootProject.properties["rtag_version"]}")
implementation("com.saicone.rtag:rtag-item:${rootProject.properties["rtag_version"]}") implementation("com.saicone.rtag:rtag-item:${rootProject.properties["rtag_version"]}")

View File

@@ -44,6 +44,7 @@ import net.momirealms.customfishing.common.helper.VersionHelper;
import net.momirealms.customfishing.common.locale.MessageConstants; import net.momirealms.customfishing.common.locale.MessageConstants;
import net.momirealms.customfishing.common.locale.TranslationManager; import net.momirealms.customfishing.common.locale.TranslationManager;
import net.momirealms.customfishing.common.plugin.scheduler.SchedulerTask; 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.ClassUtils;
import net.momirealms.customfishing.common.util.ListUtils; import net.momirealms.customfishing.common.util.ListUtils;
import net.momirealms.customfishing.common.util.Pair; import net.momirealms.customfishing.common.util.Pair;
@@ -186,7 +187,7 @@ public class BukkitActionManager implements ActionManager<Player> {
return context -> { return context -> {
if (Math.random() > chance.evaluate(context)) return; if (Math.random() > chance.evaluate(context)) return;
List<String> replaced = plugin.getPlaceholderManager().parse(context.holder(), messages, context.placeholderMap()); List<String> 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) { for (String text : replaced) {
audience.sendMessage(AdventureHelper.miniMessage(text)); audience.sendMessage(AdventureHelper.miniMessage(text));
} }
@@ -198,7 +199,7 @@ public class BukkitActionManager implements ActionManager<Player> {
if (Math.random() > chance.evaluate(context)) return; if (Math.random() > chance.evaluate(context)) return;
String random = messages.get(RandomUtils.generateRandomInt(0, messages.size() - 1)); String random = messages.get(RandomUtils.generateRandomInt(0, messages.size() - 1));
random = BukkitPlaceholderManager.getInstance().parse(context.holder(), random, context.placeholderMap()); 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)); audience.sendMessage(AdventureHelper.miniMessage(random));
}; };
}, "random-message"); }, "random-message");
@@ -208,7 +209,7 @@ public class BukkitActionManager implements ActionManager<Player> {
if (Math.random() > chance.evaluate(context)) return; if (Math.random() > chance.evaluate(context)) return;
List<String> replaced = plugin.getPlaceholderManager().parse(context.holder(), messages, context.placeholderMap()); List<String> replaced = plugin.getPlaceholderManager().parse(context.holder(), messages, context.placeholderMap());
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
Audience audience = plugin.getSenderFactory().getAudience(player); Sender audience = plugin.getSenderFactory().wrap(player);
for (String text : replaced) { for (String text : replaced) {
audience.sendMessage(AdventureHelper.miniMessage(text)); audience.sendMessage(AdventureHelper.miniMessage(text));
} }
@@ -232,7 +233,7 @@ public class BukkitActionManager implements ActionManager<Player> {
messages, messages,
context.placeholderMap() context.placeholderMap()
); );
Audience audience = plugin.getSenderFactory().getAudience(player); Sender audience = plugin.getSenderFactory().wrap(player);
for (String text : replaced) { for (String text : replaced) {
audience.sendMessage(AdventureHelper.miniMessage(text)); audience.sendMessage(AdventureHelper.miniMessage(text));
} }
@@ -321,9 +322,7 @@ public class BukkitActionManager implements ActionManager<Player> {
String text = (String) args; String text = (String) args;
return context -> { return context -> {
if (Math.random() > chance.evaluate(context)) return; if (Math.random() > chance.evaluate(context)) return;
Audience audience = plugin.getSenderFactory().getAudience(context.holder()); SparrowHeart.getInstance().sendActionBar(context.holder(), AdventureHelper.componentToJson(AdventureHelper.miniMessage(plugin.getPlaceholderManager().parse(context.holder(), text, context.placeholderMap()))));
Component component = AdventureHelper.miniMessage(plugin.getPlaceholderManager().parse(context.holder(), text, context.placeholderMap()));
audience.sendActionBar(component);
}; };
}, "actionbar"); }, "actionbar");
registerAction((args, chance) -> { registerAction((args, chance) -> {
@@ -332,8 +331,7 @@ public class BukkitActionManager implements ActionManager<Player> {
if (Math.random() > chance.evaluate(context)) return; if (Math.random() > chance.evaluate(context)) return;
String random = texts.get(RandomUtils.generateRandomInt(0, texts.size() - 1)); String random = texts.get(RandomUtils.generateRandomInt(0, texts.size() - 1));
random = plugin.getPlaceholderManager().parse(context.holder(), random, context.placeholderMap()); random = plugin.getPlaceholderManager().parse(context.holder(), random, context.placeholderMap());
Audience audience = plugin.getSenderFactory().getAudience(context.holder()); SparrowHeart.getInstance().sendActionBar(context.holder(), AdventureHelper.componentToJson(AdventureHelper.miniMessage(random)));
audience.sendActionBar(AdventureHelper.miniMessage(random));
}; };
}, "random-actionbar"); }, "random-actionbar");
registerAction((args, chance) -> { registerAction((args, chance) -> {
@@ -349,8 +347,7 @@ public class BukkitActionManager implements ActionManager<Player> {
if (LocationUtils.getDistance(player.getLocation(), location) <= realRange) { if (LocationUtils.getDistance(player.getLocation(), location) <= realRange) {
context.arg(ContextKeys.TEMP_NEAR_PLAYER, player.getName()); context.arg(ContextKeys.TEMP_NEAR_PLAYER, player.getName());
String replaced = plugin.getPlaceholderManager().parse(owner, actionbar, context.placeholderMap()); String replaced = plugin.getPlaceholderManager().parse(owner, actionbar, context.placeholderMap());
Audience audience = plugin.getSenderFactory().getAudience(player); SparrowHeart.getInstance().sendActionBar(player, AdventureHelper.componentToJson(AdventureHelper.miniMessage(replaced)));
audience.sendActionBar(AdventureHelper.miniMessage(replaced));
} }
} }
}; };
@@ -814,10 +811,9 @@ public class BukkitActionManager implements ActionManager<Player> {
return context -> { return context -> {
if (Math.random() > chance.evaluate(context)) return; if (Math.random() > chance.evaluate(context)) return;
final Player player = context.holder(); final Player player = context.holder();
Audience audience = plugin.getSenderFactory().getAudience(player); SparrowHeart.getInstance().sendTitle(player,
AdventureHelper.sendTitle(audience, AdventureHelper.componentToJson(AdventureHelper.miniMessage(title.render(context))),
AdventureHelper.miniMessage(title.render(context)), AdventureHelper.componentToJson(AdventureHelper.miniMessage(subtitle.render(context))),
AdventureHelper.miniMessage(subtitle.render(context)),
fadeIn, stay, fadeOut fadeIn, stay, fadeOut
); );
}; };
@@ -840,10 +836,9 @@ public class BukkitActionManager implements ActionManager<Player> {
TextValue<Player> title = TextValue.auto(titles.get(RandomUtils.generateRandomInt(0, titles.size() - 1))); TextValue<Player> title = TextValue.auto(titles.get(RandomUtils.generateRandomInt(0, titles.size() - 1)));
TextValue<Player> subtitle = TextValue.auto(subtitles.get(RandomUtils.generateRandomInt(0, subtitles.size() - 1))); TextValue<Player> subtitle = TextValue.auto(subtitles.get(RandomUtils.generateRandomInt(0, subtitles.size() - 1)));
final Player player = context.holder(); final Player player = context.holder();
Audience audience = plugin.getSenderFactory().getAudience(player); SparrowHeart.getInstance().sendTitle(player,
AdventureHelper.sendTitle(audience, AdventureHelper.componentToJson(AdventureHelper.miniMessage(title.render(context))),
AdventureHelper.miniMessage(title.render(context)), AdventureHelper.componentToJson(AdventureHelper.miniMessage(subtitle.render(context))),
AdventureHelper.miniMessage(subtitle.render(context)),
fadeIn, stay, fadeOut fadeIn, stay, fadeOut
); );
}; };
@@ -866,10 +861,9 @@ public class BukkitActionManager implements ActionManager<Player> {
for (Player player : location.getWorld().getPlayers()) { for (Player player : location.getWorld().getPlayers()) {
if (LocationUtils.getDistance(player.getLocation(), location) <= range) { if (LocationUtils.getDistance(player.getLocation(), location) <= range) {
context.arg(ContextKeys.TEMP_NEAR_PLAYER, player.getName()); context.arg(ContextKeys.TEMP_NEAR_PLAYER, player.getName());
Audience audience = plugin.getSenderFactory().getAudience(player); SparrowHeart.getInstance().sendTitle(player,
AdventureHelper.sendTitle(audience, AdventureHelper.componentToJson(AdventureHelper.miniMessage(title.render(context))),
AdventureHelper.miniMessage(title.render(context)), AdventureHelper.componentToJson(AdventureHelper.miniMessage(subtitle.render(context))),
AdventureHelper.miniMessage(subtitle.render(context)),
fadeIn, stay, fadeOut fadeIn, stay, fadeOut
); );
} }

View File

@@ -39,6 +39,7 @@ import net.momirealms.customfishing.common.helper.AdventureHelper;
import net.momirealms.customfishing.common.locale.MessageConstants; import net.momirealms.customfishing.common.locale.MessageConstants;
import net.momirealms.customfishing.common.locale.TranslationManager; import net.momirealms.customfishing.common.locale.TranslationManager;
import net.momirealms.customfishing.common.plugin.scheduler.SchedulerTask; import net.momirealms.customfishing.common.plugin.scheduler.SchedulerTask;
import net.momirealms.customfishing.common.sender.Sender;
import net.momirealms.customfishing.common.util.Pair; import net.momirealms.customfishing.common.util.Pair;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
@@ -50,6 +51,7 @@ import java.time.Instant;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Optional; import java.util.Optional;
import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
public class Competition implements FishingCompetition { public class Competition implements FishingCompetition {
@@ -196,11 +198,11 @@ public class Competition implements FishingCompetition {
private void broadcast(BroadcastConfig config) { private void broadcast(BroadcastConfig config) {
String[] texts = config.texts(); String[] texts = config.texts();
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
Audience audience = plugin.getSenderFactory().getAudience(player); Sender audience = plugin.getSenderFactory().wrap(player);
for (String s : texts) { for (String s : texts) {
DynamicText text = new DynamicText(player, s); DynamicText text = new DynamicText(player, s);
text.update(this.publicContext.placeholderMap()); text.update(this.publicContext.placeholderMap());
AdventureHelper.sendMessage(audience, AdventureHelper.miniMessage(text.getLatestValue())); audience.sendMessage(AdventureHelper.miniMessage(text.getLatestValue()));
} }
} }
} }

View File

@@ -48,7 +48,7 @@ public abstract class BukkitItemFactory extends ItemFactory<CustomFishingPlugin,
"1.21", "1.21.1", "1.21.2", "1.21.3", "1.21.4" -> { "1.21", "1.21.1", "1.21.2", "1.21.3", "1.21.4" -> {
return new ComponentItemFactory(plugin); return new ComponentItemFactory(plugin);
} }
case "1.21.5" -> { case "1.21.5", "1.21.6" -> {
return new ComponentItemFactory1_21_5(plugin); return new ComponentItemFactory1_21_5(plugin);
} }
default -> throw new IllegalStateException("Unsupported server version: " + plugin.getServerVersion()); default -> throw new IllegalStateException("Unsupported server version: " + plugin.getServerVersion());

View File

@@ -29,9 +29,11 @@ import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.momirealms.customfishing.api.BukkitCustomFishingPlugin; 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.Sender;
import net.momirealms.customfishing.common.sender.SenderFactory; import net.momirealms.customfishing.common.sender.SenderFactory;
import net.momirealms.customfishing.common.util.Tristate; import net.momirealms.customfishing.common.util.Tristate;
import net.momirealms.sparrow.heart.SparrowHeart;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.command.RemoteConsoleCommandSender; import org.bukkit.command.RemoteConsoleCommandSender;
@@ -70,8 +72,9 @@ public class BukkitSenderFactory extends SenderFactory<BukkitCustomFishingPlugin
@Override @Override
protected void sendMessage(CommandSender sender, Component message) { protected void sendMessage(CommandSender sender, Component message) {
// we can safely send async for players and the console - otherwise, send it sync if (sender instanceof Player player) {
if (sender instanceof Player || sender instanceof ConsoleCommandSender || sender instanceof RemoteConsoleCommandSender) { SparrowHeart.getInstance().sendMessage(player, AdventureHelper.componentToJson(message));
} else if (sender instanceof ConsoleCommandSender || sender instanceof RemoteConsoleCommandSender) {
getAudience(sender).sendMessage(message); getAudience(sender).sendMessage(message);
} else { } else {
getPlugin().getScheduler().executeSync(() -> getAudience(sender).sendMessage(message)); getPlugin().getScheduler().executeSync(() -> getAudience(sender).sendMessage(message));

View File

@@ -1,75 +1,68 @@
angler_helmet: angler_helmet:
material: IRON_HELMET material: IRON_HELMET
display: display:
name: "<b><#A0D2DB>Angler's Helmet</b>" name: "<b><#A0D2DB>Angler's Helmet</b>"
lore: lore:
- '' - ''
- '<#7FFFD4>Description:' - '<#7FFFD4>Description:'
- '<gray> - A sturdy helmet that slightly increases concentration when fishing.' - '<gray> - A sturdy helmet that slightly increases concentration when fishing.'
- '' - ''
- '<#FFD700>Effects:' - '<#FFD700>Effects:'
- '<gray> - Slightly reduces fishing difficulty.' - '<gray> - Slightly reduces fishing difficulty.'
custom-model-data: 50010 # Example custom-model-data: 50010 # Example
events: effects:
success: # -1 durability when player successfully catches fish effect_1:
durability_action: type: difficulty
type: durability value: -2
value:
slot: head deep_sea_chestplate:
amount: -1 material: DIAMOND_CHESTPLATE
effects: display:
effect_1: name: "<b><#3A6EA5>Deep Sea Chestplate</b>"
type: difficulty lore:
value: -2 - ''
- '<#7FFFD4>Description:'
deep_sea_chestplate: - '<gray> - Reinforced chestplate that helps attract larger fish.'
material: DIAMOND_CHESTPLATE - ''
display: - '<#FFD700>Effects:'
name: "<b><#3A6EA5>Deep Sea Chestplate</b>" - '<gray> - Increases the chance of catching silver star fish.'
lore: custom-model-data: 50011
- '' effects:
- '<#7FFFD4>Description:' effect_1:
- '<gray> - Reinforced chestplate that helps attract larger fish.' type: group-mod
- '' value:
- '<#FFD700>Effects:' - silver_star:+1
- '<gray> - Increases the chance of catching silver star fish.'
custom-model-data: 50011 swift_leggings:
effects: material: LEATHER_LEGGINGS
effect_1: display:
type: group-mod name: "<b><#C0C0C0>Swift Leggings</b>"
value: lore:
- silver_star:+1 - ''
- '<#7FFFD4>Description:'
swift_leggings: - '<gray> - Lightweight leggings that help reduce the waiting time for a fish to bite.'
material: LEATHER_LEGGINGS - ''
display: - '<#FFD700>Effects:'
name: "<b><#C0C0C0>Swift Leggings</b>" - '<gray> - Slightly reduces waiting time.'
lore: custom-model-data: 50012 # Example
- '' effects:
- '<#7FFFD4>Description:' effect_1:
- '<gray> - Lightweight leggings that help reduce the waiting time for a fish to bite.' type: wait-time-multiplier
- '' value: 0.98 # Reduces by 2%
- '<#FFD700>Effects:'
- '<gray> - Slightly reduces waiting time.' sturdy_boots:
custom-model-data: 50012 # Example material: GOLDEN_BOOTS
effects: display:
effect_1: name: "<b><#FFD700>Sturdy Boots</b>"
type: wait-time-multiplier lore:
value: 0.98 # Reduces by 2% - ''
- '<#7FFFD4>Description:'
sturdy_boots: - '<gray> - Boots that help you stand firmer, making the game a little easier.'
material: GOLDEN_BOOTS - ''
display: - '<#FFD700>Effects:'
name: "<b><#FFD700>Sturdy Boots</b>" - '<gray> - Slightly reduces game time (making it easier).'
lore: custom-model-data: 50013 # Example
- '' effects:
- '<#7FFFD4>Description:' effect_1:
- '<gray> - Boots that help you stand firmer, making the game a little easier.' type: game-time
- '' value: -0.5 # Reduces game time by 0.5 seconds
- '<#FFD700>Effects:'
- '<gray> - 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

View File

@@ -1,6 +1,6 @@
# Project settings # Project settings
# Rule: [major update].[feature update].[bug fix] # Rule: [major update].[feature update].[bug fix]
project_version=2.3.12 project_version=2.3.13
config_version=38 config_version=38
project_group=net.momirealms project_group=net.momirealms
@@ -18,9 +18,9 @@ asm_commons_version=9.8
jar_relocator_version=1.7 jar_relocator_version=1.7
h2_driver_version=2.3.232 h2_driver_version=2.3.232
sqlite_driver_version=3.49.1.0 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 adventure_platform_version=4.4.0
sparrow_heart_version=0.55.2 sparrow_heart_version=0.57
cloud_core_version=2.0.0 cloud_core_version=2.0.0
cloud_services_version=2.0.0 cloud_services_version=2.0.0
cloud_brigadier_version=2.0.0-beta.10 cloud_brigadier_version=2.0.0-beta.10
@@ -37,7 +37,7 @@ commons_pool_version=2.12.1
bstats_version=3.1.0 bstats_version=3.1.0
geantyref_version=1.3.16 geantyref_version=1.3.16
caffeine_version=3.2.0 caffeine_version=3.2.0
rtag_version=1.5.10 rtag_version=1.5.11
jedis_version=5.2.0 jedis_version=5.2.0
exp4j_version=0.4.8 exp4j_version=0.4.8
placeholder_api_version=2.11.6 placeholder_api_version=2.11.6