9
0
mirror of https://github.com/Xiao-MoMi/Custom-Fishing.git synced 2025-12-26 10:29:16 +00:00

category & statistics

This commit is contained in:
XiaoMoMi
2023-09-10 02:31:20 +08:00
parent f3f89480ac
commit 4c38dda7d3
22 changed files with 346 additions and 51 deletions

View File

@@ -21,15 +21,16 @@ import dev.jorel.commandapi.CommandAPI;
import dev.jorel.commandapi.CommandAPIBukkitConfig;
import dev.jorel.commandapi.CommandAPICommand;
import dev.jorel.commandapi.CommandPermission;
import dev.jorel.commandapi.arguments.EntitySelectorArgument;
import net.momirealms.customfishing.CustomFishingPluginImpl;
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
import net.momirealms.customfishing.api.CustomFishingPlugin;
import net.momirealms.customfishing.api.manager.CommandManager;
import net.momirealms.customfishing.command.sub.CompetitionCommand;
import net.momirealms.customfishing.command.sub.DebugCommand;
import net.momirealms.customfishing.command.sub.FishingBagCommand;
import net.momirealms.customfishing.command.sub.ItemCommand;
import net.momirealms.customfishing.command.sub.*;
import net.momirealms.customfishing.setting.Locale;
import org.bukkit.entity.Player;
import java.util.Collection;
public class CommandManagerImpl implements CommandManager {
@@ -47,9 +48,12 @@ public class CommandManagerImpl implements CommandManager {
.withPermission(CommandPermission.OP)
.withSubcommands(
getReloadCommand(),
getMarketCommand(),
getAboutCommand(),
CompetitionCommand.INSTANCE.getCompetitionCommand(),
ItemCommand.INSTANCE.getItemCommand(),
DebugCommand.INSTANCE.getDebugCommand()
DebugCommand.INSTANCE.getDebugCommand(),
StatisticsCommand.INSTANCE.getStatisticsCommand()
)
.register();
@@ -73,4 +77,29 @@ public class CommandManagerImpl implements CommandManager {
AdventureManagerImpl.getInstance().sendMessageWithPrefix(sender, Locale.MSG_Reload.replace("{time}", String.valueOf(System.currentTimeMillis()-time)));
});
}
@SuppressWarnings("unchecked")
private CommandAPICommand getMarketCommand() {
return new CommandAPICommand("market").withSubcommand(
new CommandAPICommand("open")
.withArguments(new EntitySelectorArgument.ManyPlayers("player"))
.executes((sender, args) -> {
Collection<Player> players = (Collection<Player>) args.get("player");
assert players != null;
for (Player player : players) {
plugin.getMarketManager().openMarketGUI(player);
AdventureManagerImpl.getInstance().sendMessageWithPrefix(sender, Locale.MSG_Market_GUI_Open.replace("{player}", player.getName()));
}
}));
}
private CommandAPICommand getAboutCommand() {
return new CommandAPICommand("about").executes((sender, args) -> {
AdventureManagerImpl.getInstance().sendMessage(sender, "<#00BFFF>\uD83C\uDFA3 CustomFishing <gray>- <#87CEEB>" + CustomFishingPlugin.getInstance().getVersionManager().getPluginVersion());
AdventureManagerImpl.getInstance().sendMessage(sender, "<#B0C4DE>A fishing plugin that provides innovative mechanics and powerful loot system");
AdventureManagerImpl.getInstance().sendMessage(sender, "<#DA70D6>\uD83E\uDDEA Author: <#FFC0CB>XiaoMoMi");
AdventureManagerImpl.getInstance().sendMessage(sender, "<#FF7F50>\uD83D\uDD25 Contributors: <#FFA07A>0ft3n<white>, <#FFA07A>Peng_Lx<white>, <#FFA07A>Masaki<white>, <#FFA07A>g2213swo");
AdventureManagerImpl.getInstance().sendMessage(sender, "<#FFD700>⭐ <click:open_url:https://mo-mi.gitbook.io/xiaomomi-plugins/plugin-wiki/customfishing>Document</click> <#A9A9A9>| <#FAFAD2>⛏ <click:open_url:https://github.com/Xiao-MoMi/Custom-Fishing>Github</click> <#A9A9A9>| <#48D1CC>\uD83D\uDD14 <click:open_url:https://polymart.org/resource/customfishing.2723>Polymart</click>");
});
}
}

View File

@@ -55,6 +55,7 @@ public class CompetitionCommand {
if (Config.redisRanking) command.withOptionalArguments(new StringArgument("-allservers"));
command.executes((sender, args) -> {
String id = (String) args.get(0);
assert id != null;
if (!allCompetitions.contains(id)) {
AdventureManagerImpl.getInstance().sendMessageWithPrefix(sender, Locale.MSG_Competition_Not_Exist.replace("{id}", id));
return;

View File

@@ -76,6 +76,7 @@ public class ItemCommand {
.withOptionalArguments(new IntegerArgument("amount", 1))
.executesPlayer((player, args) -> {
String id = (String) args.get("id");
assert id != null;
int amount = (int) args.getOrDefault("amount", 1);
ItemStack item = CustomFishingPlugin.get().getItemManager().build(player, namespace, id, new Condition(player).getArgs());
if (item != null) {
@@ -87,6 +88,7 @@ public class ItemCommand {
});
}
@SuppressWarnings("unchecked")
private CommandAPICommand giveCommand(String namespace) {
return new CommandAPICommand("give")
.withArguments(new EntitySelectorArgument.ManyPlayers("player"))
@@ -101,6 +103,7 @@ public class ItemCommand {
int amount = (int) args.getOrDefault("amount", 1);
BuildableItem buildableItem = CustomFishingPlugin.get().getItemManager().getBuildableItem(namespace, id);
if (buildableItem != null) {
assert players != null;
for (Player player : players) {
ItemStack item = CustomFishingPlugin.get().getItemManager().build(player, namespace, id, new Condition(player).getArgs());
int actual = ItemManagerImpl.giveCertainAmountOfItem(player, item, amount);

View File

@@ -1,4 +1,121 @@
package net.momirealms.customfishing.command.sub;
import dev.jorel.commandapi.CommandAPICommand;
import dev.jorel.commandapi.arguments.*;
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
import net.momirealms.customfishing.api.CustomFishingPlugin;
import net.momirealms.customfishing.api.mechanic.condition.Condition;
import net.momirealms.customfishing.api.mechanic.loot.Loot;
import net.momirealms.customfishing.api.mechanic.statistic.Statistics;
import net.momirealms.customfishing.api.util.LogUtils;
import org.bukkit.entity.Player;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
public class StatisticsCommand {
public static StatisticsCommand INSTANCE = new StatisticsCommand();
private Collection<String> loots = new HashSet<>();
public CommandAPICommand getStatisticsCommand() {
loots = CustomFishingPlugin.get().getLootManager().getAllLoots().stream().filter(it -> !it.disableStats()).map(Loot::getID).toList();
return new CommandAPICommand("statistics")
.withSubcommands(
getSetCommand(),
getResetCommand(),
getQueryCommand(),
getAddCommand()
);
}
@SuppressWarnings("unchecked")
private CommandAPICommand getSetCommand() {
return new CommandAPICommand("set")
.withArguments(new EntitySelectorArgument.ManyPlayers("player"))
.withArguments(new StringArgument("id").replaceSuggestions(ArgumentSuggestions.strings(loots)))
.withArguments(new IntegerArgument("amount", 0))
.executes((sender, args) -> {
Collection<Player> players = (Collection<Player>) args.get("player");
String id = (String) args.get("id");
int amount = (int) args.getOrDefault("amount", 0);
assert players != null;
Loot loot = CustomFishingPlugin.get().getLootManager().getLoot(id);
for (Player player : players) {
Statistics statistics = CustomFishingPlugin.get().getStatisticsManager().getStatistics(player.getUniqueId());
if (statistics != null) {
if (loot != null)
statistics.setData(id, amount);
else
throw new RuntimeException("Loot " + id + " doesn't exist.");
} else {
LogUtils.warn("Player " + player.getName() + "'s statistics data has not been loaded.");
}
}
});
}
@SuppressWarnings("unchecked")
private CommandAPICommand getResetCommand() {
return new CommandAPICommand("reset")
.withArguments(new EntitySelectorArgument.ManyPlayers("player"))
.executes((sender, args) -> {
Collection<Player> players = (Collection<Player>) args.get("player");
assert players != null;
for (Player player : players) {
Statistics statistics = CustomFishingPlugin.get().getStatisticsManager().getStatistics(player.getUniqueId());
if (statistics != null) {
statistics.reset();
} else {
LogUtils.warn("Player " + player.getName() + "'s statistics data has not been loaded.");
}
}
});
}
@SuppressWarnings("unchecked")
private CommandAPICommand getAddCommand() {
return new CommandAPICommand("add")
.withArguments(new EntitySelectorArgument.ManyPlayers("player"))
.withArguments(new StringArgument("id").replaceSuggestions(ArgumentSuggestions.strings(loots)))
.withArguments(new IntegerArgument("amount", 0))
.executes((sender, args) -> {
Collection<Player> players = (Collection<Player>) args.get("player");
String id = (String) args.get("id");
int amount = (int) args.getOrDefault("amount", 0);
assert players != null;
Loot loot = CustomFishingPlugin.get().getLootManager().getLoot(id);
for (Player player : players) {
Statistics statistics = CustomFishingPlugin.get().getStatisticsManager().getStatistics(player.getUniqueId());
if (statistics != null) {
if (loot != null)
statistics.addLootAmount(loot, new Condition(player), amount);
else
throw new RuntimeException("Loot " + id + " doesn't exist.");
} else {
LogUtils.warn("Player " + player.getName() + "'s statistics data has not been loaded.");
}
}
});
}
private CommandAPICommand getQueryCommand() {
return new CommandAPICommand("query")
.withArguments(new PlayerArgument("player"))
.executes((sender, args) -> {
Player player = (Player) args.get("player");
assert player != null;
Statistics statistics = CustomFishingPlugin.get().getStatisticsManager().getStatistics(player.getUniqueId());
if (statistics != null) {
var adventure = AdventureManagerImpl.getInstance();
for (Map.Entry<String, Integer> entry : statistics.getStatisticMap().entrySet()) {
adventure.sendMessage(sender, entry.getKey() + ": " + entry.getValue());
}
} else {
throw new RuntimeException("Player " + player.getName() + "'s statistics data has not been loaded.");
}
});
}
}

View File

@@ -25,6 +25,8 @@ import org.bukkit.OfflinePlayer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Optional;
public class CompetitionPapi extends PlaceholderExpansion {
private final CustomFishingPlugin plugin;
@@ -70,9 +72,6 @@ public class CompetitionPapi extends PlaceholderExpansion {
case "nextseconds" -> {
return String.valueOf(plugin.getCompetitionManager().getNextCompetitionSeconds());
}
case "nextminutes" -> {
return String.valueOf(plugin.getCompetitionManager().getNextCompetitionSeconds() / 60);
}
case "nextsecond" -> {
return plugin.getCompetitionManager().getNextCompetitionSeconds() % 60 + Locale.FORMAT_Second;
}
@@ -128,7 +127,7 @@ public class CompetitionPapi extends PlaceholderExpansion {
case "score" -> {
FishingCompetition competition = plugin.getCompetitionManager().getOnGoingCompetition();
if (competition == null) return "";
if (split[1].equals("")) {
if (split.length == 1) {
return String.format("%.2f", competition.getRanking().getPlayerScore(player.getName()));
} else {
return String.format("%.2f", competition.getRanking().getScoreAt(Integer.parseInt(split[1])));
@@ -137,8 +136,8 @@ public class CompetitionPapi extends PlaceholderExpansion {
case "player" -> {
FishingCompetition competition = plugin.getCompetitionManager().getOnGoingCompetition();
if (competition == null) return "";
if (split[1].equals("")) return "Invalid format";
return competition.getRanking().getPlayerAt(Integer.parseInt(split[1]));
if (split.length == 1) return "Invalid format";
return Optional.ofNullable(competition.getRanking().getPlayerAt(Integer.parseInt(split[1]))).orElse("");
}
}
return "null";

View File

@@ -72,27 +72,35 @@ public class StatisticsPapi extends PlaceholderExpansion {
return String.valueOf(statistics.getTotalCatchAmount());
}
String[] split = params.split("_");
String[] split = params.split("_", 2);
switch (split[0]) {
case "hascaught" -> {
if (split.length == 1) return "Invalid format";
return String.valueOf(statistics.getLootAmount(split[1]) != 0);
}
case "amount" -> {
if (split.length == 1) return "Invalid format";
return String.valueOf(statistics.getLootAmount(split[1]));
}
case "category" -> {
List<String> category = plugin.getStatisticsManager().getCategory(split[2]);
if (category == null) return "0";
if (split[1].equals("total")) {
if (split.length == 1) return "Invalid format";
String[] categorySplit = split[1].split("_", 2);
if (categorySplit.length == 1) return "Invalid format";
List<String> category = plugin.getStatisticsManager().getCategory(categorySplit[1]);
if (category == null) return "Category Not Exists";
if (categorySplit[0].equals("total")) {
int total = 0;
for (String loot : category) {
total += statistics.getLootAmount(loot);
}
return String.valueOf(total);
} else if (split[1].equals("progress")) {
} else if (categorySplit[0].equals("progress")) {
int size = category.size();
int unlocked = 0;
for (String loot : category) {
if (statistics.getLootAmount(loot) != 0) unlocked++;
}
double percent = (double) unlocked / size;
double percent = ((double) unlocked * 100) / size;
String progress = String.format("%.1f", percent);
return progress.equals("100.0") ? "100" : progress;
}

View File

@@ -116,7 +116,7 @@ public class Competition implements FishingCompetition {
publicPlaceholders.put("{hour}", remainingTime < 3600 ? "" : (remainingTime / 3600) + Locale.FORMAT_Hour);
publicPlaceholders.put("{minute}", remainingTime < 60 ? "" : (remainingTime % 3600) / 60 + Locale.FORMAT_Minute);
publicPlaceholders.put("{second}", remainingTime == 0 ? "" : remainingTime % 60 + Locale.FORMAT_Second);
publicPlaceholders.put("{seconds}", remainingTime + Locale.FORMAT_Second);
publicPlaceholders.put("{seconds}", String.valueOf(remainingTime));
}
@Override

View File

@@ -128,6 +128,7 @@ public class HookCheckTimerTask implements Runnable {
if (fishHook.isInWater()) {
this.fishingPreparation.setLocation(fishHook.getLocation());
this.fishingPreparation.insertArg("{lava}", "false");
this.fishingPreparation.insertArg("{open-water}", String.valueOf(fishHook.isInOpenWater()));
this.fishingPreparation.triggerActions(ActionTrigger.LAND);
FishHookLandEvent event = new FishHookLandEvent(fishingPreparation.getPlayer(), FishHookLandEvent.Target.WATER);
Bukkit.getPluginManager().callEvent(event);

View File

@@ -95,6 +95,16 @@ public class LootManagerImpl implements LootManager {
return lootMap.get(key);
}
@Override
public Collection<String> getAllLootKeys() {
return lootMap.keySet();
}
@Override
public Collection<Loot> getAllLoots() {
return lootMap.values();
}
private void loadSingleFile(File file, String namespace) {
YamlConfiguration yaml = YamlConfiguration.loadConfiguration(file);
for (Map.Entry<String, Object> entry : yaml.getValues(false).entrySet()) {

View File

@@ -32,7 +32,10 @@ import net.momirealms.customfishing.api.util.LogUtils;
import net.momirealms.customfishing.compatibility.papi.ParseUtils;
import net.momirealms.customfishing.util.ClassUtils;
import net.momirealms.customfishing.util.ConfigUtils;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.MemorySection;
import org.bukkit.configuration.file.YamlConfiguration;
@@ -111,7 +114,7 @@ public class RequirementManagerImpl implements RequirementManager {
this.registerWorldRequirement();
this.registerWeatherRequirement();
this.registerSeasonRequirement();
this.registerInLavaRequirement();
this.registerLavaFishingRequirement();
this.registerRodRequirement();
this.registerBaitRequirement();
this.registerCompareRequirement();
@@ -119,6 +122,8 @@ public class RequirementManagerImpl implements RequirementManager {
this.registerOrRequirement();
this.registerLevelRequirement();
this.registerRandomRequirement();
this.registerIceFishingRequirement();
this.registerOpenWaterRequirement();
}
public ConditionalLoots getConditionalLoots(ConfigurationSection section) {
@@ -301,7 +306,7 @@ public class RequirementManagerImpl implements RequirementManager {
});
}
private void registerInLavaRequirement() {
private void registerLavaFishingRequirement() {
registerRequirement("lava-fishing", (args, actions, advanced) -> {
boolean inLava = (boolean) args;
return condition -> {
@@ -314,6 +319,46 @@ public class RequirementManagerImpl implements RequirementManager {
});
}
private void registerOpenWaterRequirement() {
registerRequirement("open-water", (args, actions, advanced) -> {
boolean inLava = (boolean) args;
return condition -> {
String current = condition.getArgs().get("{open-water}");
if (current.equals(String.valueOf(inLava)))
return true;
if (advanced) triggerActions(actions, condition);
return false;
};
});
}
private void registerIceFishingRequirement() {
registerRequirement("ice-fishing", (args, actions, advanced) -> {
boolean iceFishing = (boolean) args;
return condition -> {
Location location = condition.getLocation();
int water = 0;
int ice = 0;
for (int i = -2; i <= 2; i++) {
for (int j = -1; j <= 2; j++) {
for (int k = -2; k <= 2; k++) {
Block block = location.clone().add(i, j, k).getBlock();
Material material = block.getType();
switch (material) {
case ICE -> ice++;
case WATER -> water++;
}
}
}
}
if ((ice >= 16 && water >= 25) == iceFishing)
return true;
if (advanced) triggerActions(actions, condition);
return false;
};
});
}
private void registerLevelRequirement() {
registerRequirement("level", (args, actions, advanced) -> {
int level = (int) args;

View File

@@ -51,11 +51,12 @@ public class Locale {
public static String MSG_Give_Item;
public static String MSG_Never_Played;
public static String MSG_Unsafe_Modification;
public static String MSG_Data_Not_Loaded;
public static String MSG_Market_GUI_Open;
public static String FORMAT_Day;
public static String FORMAT_Hour;
public static String FORMAT_Minute;
public static String FORMAT_Second;
public static String MSG_Data_Not_Loaded;
public static void load() {
try {
@@ -101,6 +102,11 @@ public class Locale {
MSG_Never_Played = msgSection.getString("never-played");
MSG_Unsafe_Modification = msgSection.getString("unsafe-modification");
MSG_Data_Not_Loaded = msgSection.getString("data-not-loaded");
MSG_Market_GUI_Open = msgSection.getString("open-market-gui");
FORMAT_Day = msgSection.getString("format-day");
FORMAT_Hour = msgSection.getString("format-hour");
FORMAT_Minute = msgSection.getString("format-minute");
FORMAT_Second = msgSection.getString("format-second");
}
}
}

View File

@@ -6,6 +6,7 @@
apple_crate:
show-in-fishfinder: false
disable-stat: true
nick: Apple Crate
block: barrel
vector:
@@ -48,6 +49,7 @@ apple_crate:
chance: 0.8
carrot_crate:
show-in-fishfinder: false
disable-stat: true
nick: Carrot Crate
block: barrel
vector:

View File

@@ -54,4 +54,53 @@ golden_star_fish:
- red_snapper_fish_golden_star
- salmon_void_fish_golden_star
- woodskip_fish_golden_star
- sturgeon_fish_golden_star
- sturgeon_fish_golden_star
river_fish:
- gold_fish
- gold_fish_silver_star
- gold_fish_golden_star
- perch_fish
- perch_fish_silver_star
- perch_fish_golden_star
- mullet_fish
- mullet_fish_silver_star
- mullet_fish_golden_star
- carp_fish
- carp_fish_silver_star
- carp_fish_golden_star
- cat_fish
- cat_fish_silver_star
- cat_fish_silver_star
- woodskip_fish
- woodskip_fish_silver_star
- woodskip_fish_golden_star
- sturgeon_fish
- sturgeon_fish_silver_star
- sturgeon_fish_golden_star
ocean_fish:
- tuna_fish
- tuna_fish_silver_star
- tuna_fish_golden_star
- pike_fish
- pike_fish_silver_star
- pike_fish_golden_star
- sardine_fish
- sardine_fish_silver_star
- sardine_fish_golden_star
- octopus
- octopus_silver_star
- octopus_golden_star
- sunfish
- sunfish_silver_star
- sunfish_golden_star
- red_snapper_fish
- red_snapper_fish_silver_star
- red_snapper_fish_golden_star
- blue_jellyfish
- blue_jellyfish_silver_star
- blue_jellyfish_golden_star
- pink_jellyfish
- pink_jellyfish_silver_star
- pink_jellyfish_golden_star

View File

@@ -40,7 +40,7 @@ weekend_competition:
color: WHITE
overlay: PROGRESS
text:
- '<gray>[<#87CEFA>🎣<gray>] <gradient:#F0F8FF:#87CEFA:#F0F8FF>Time Left: <#E6E6FA>{seconds} <gray>| <gradient:#F0F8FF:#87CEFA:#F0F8FF>Your Rank: <#E6E6FA>{rank} <gray>| <gradient:#F0F8FF:#87CEFA:#F0F8FF>No.1 Player: <#E6E6FA>{1_player}'
- '<gray>[<#87CEFA>🎣<gray>] <gradient:#F0F8FF:#87CEFA:#F0F8FF>Time Left: <#E6E6FA>{seconds}s <gray>| <gradient:#F0F8FF:#87CEFA:#F0F8FF>Your Rank: <#E6E6FA>{rank} <gray>| <gradient:#F0F8FF:#87CEFA:#F0F8FF>No.1 Player: <#E6E6FA>{1_player}'
- '<gray>[<#87CEFA>🎣<gray>] <gradient:#F0F8FF:#87CEFA:#F0F8FF>Time Left: <#E6E6FA>{minute}{second} <gray>| <gradient:#F0F8FF:#87CEFA:#F0F8FF>Your Score: <#E6E6FA>{score} <gray>| <gradient:#F0F8FF:#87CEFA:#F0F8FF>No.1 Score: <#E6E6FA>{1_score}'
- '<gray>[<#87CEFA>🎣<gray>] <gradient:#F0F8FF:#87CEFA:#F0F8FF>Time Left: <#E6E6FA>{minute}{second} <gray>| <gradient:#F0F8FF:#87CEFA:#F0F8FF>Winning condition: <#E6E6FA>{goal}'
refresh-rate: 20
@@ -50,7 +50,7 @@ weekend_competition:
actionbar:
enable: false
text:
- '<gradient:#F0F8FF:#87CEFA:#F0F8FF>Time Left: <#E6E6FA>{seconds} <gray>| <gradient:#F0F8FF:#87CEFA:#F0F8FF>Your Rank: <#E6E6FA>{rank} <gray>| <gradient:#F0F8FF:#87CEFA:#F0F8FF>No.1 Player: <#E6E6FA>{1_player}'
- '<gradient:#F0F8FF:#87CEFA:#F0F8FF>Time Left: <#E6E6FA>{seconds}s <gray>| <gradient:#F0F8FF:#87CEFA:#F0F8FF>Your Rank: <#E6E6FA>{rank} <gray>| <gradient:#F0F8FF:#87CEFA:#F0F8FF>No.1 Player: <#E6E6FA>{1_player}'
- '<gradient:#F0F8FF:#87CEFA:#F0F8FF>Time Left: <#E6E6FA>{minute}{second} <gray>| <gradient:#F0F8FF:#87CEFA:#F0F8FF>Your Score: <#E6E6FA>{score} <gray>| <gradient:#F0F8FF:#87CEFA:#F0F8FF>No.1 Score: <#E6E6FA>{1_score}'
- '<gradient:#F0F8FF:#87CEFA:#F0F8FF>Time Left: <#E6E6FA>{minute}{second} <gray>| <gradient:#F0F8FF:#87CEFA:#F0F8FF>Winning condition: <#E6E6FA>{goal}'
refresh-rate: 5

View File

@@ -7,6 +7,7 @@
# Vanilla loots settings
vanilla:
show-in-fishfinder: false
disable-stat: true
# Some rubbish
stick:
tag: false
@@ -118,6 +119,8 @@ sharpness_book:
tag: false
material: enchanted_book
group: enchantments
show-in-fishfinder: false
disable-stat: true
random-stored-enchantments:
lv5:
enchant: minecraft:sharpness
@@ -143,6 +146,8 @@ efficiency_book:
tag: false
material: enchanted_book
group: enchantments
show-in-fishfinder: false
disable-stat: true
random-stored-enchantments:
lv5:
enchant: minecraft:efficiency
@@ -168,6 +173,8 @@ unbreaking_book:
tag: false
material: enchanted_book
group: enchantments
show-in-fishfinder: false
disable-stat: true
random-stored-enchantments:
lv3:
enchant: minecraft:unbreaking
@@ -185,6 +192,8 @@ protection_book:
tag: false
material: enchanted_book
group: enchantments
show-in-fishfinder: false
disable-stat: true
random-stored-enchantments:
lv4:
enchant: minecraft:protection

View File

@@ -6,6 +6,7 @@
skeleton:
show-in-fishfinder: false
disable-stat: true
mob: skeleton
nick: <white>Skeleton</white>
vector:
@@ -14,6 +15,7 @@ skeleton:
wither_skeleton:
show-in-fishfinder: false
disable-stat: true
mob: wither_skeleton
nick: <black>Wither Skeleton</black>
vector:
@@ -22,6 +24,7 @@ wither_skeleton:
magma_cube:
show-in-fishfinder: false
disable-stat: true
mob: magma_cube
nick: <red>Magma Cube</black>
vector:
@@ -30,6 +33,7 @@ magma_cube:
skeletalknight:
show-in-fishfinder: false
disable-stat: true
mob: MythicMobs:SkeletalKnight
nick: Skeletal Knight
vector:

View File

@@ -101,8 +101,7 @@ magical_rod:
- '<gray> - consuming experience levels upon each cast.'
- ''
- '<#FFD700>Effects:'
- '<gray> - Increase the chance of getting an'
- '<gray> enchantment book from fishing.'
- '<gray> - Get an enchantment book from fishing.'
- ''
- '<#CD5C5C>Requirements:'
- '<gray> - 1x book bait'

View File

@@ -24,4 +24,9 @@ messages:
goal-total-score: 'Total score of the fish caught'
unsafe-modification: 'You can''t edit a player''s fishing bag when the player is playing on another server that connected to the database'
never-played: 'That player has never played the server. You can''t edit a non existent player''s fishing bag.'
data-not-loaded: '<red>Your data has not been loaded yet. Try rejoining the server. If the problem still occurs, contact the server administrator.'
data-not-loaded: '<red>Your data has not been loaded yet. Try rejoining the server. If the problem still occurs, contact the server administrator.'
open-market-gui: 'Successfully opened the market gui for {player}'
format-day: 'd'
format-hour: 'h'
format-minute: 'm'
format-second: 's'