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:
@@ -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>");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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.");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user