diff --git a/build.gradle.kts b/build.gradle.kts index d81944b5..e45e701a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,3 @@ -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import java.text.SimpleDateFormat plugins { @@ -34,11 +33,11 @@ dependencies { compileOnly("com.github.LoneDev6:API-ItemsAdder:3.5.0b") compileOnly("com.github.oraxen:oraxen:1.160.0") compileOnly("io.lumine:Mythic-Dist:5.3.5") - implementation("com.crypticlib:CrypticLib:0.1.4") + implementation("com.crypticlib:CrypticLib:0.1.6") } group = "com.github.yufiriamazenta" -version = "1.4.7-dev1" +version = "1.4.7-dev2" var pluginVersion: String = version.toString() + "-" + SimpleDateFormat("yyyyMMdd").format(System.currentTimeMillis()) java.sourceCompatibility = JavaVersion.VERSION_1_8 java.targetCompatibility = JavaVersion.VERSION_1_8 diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/Craftorithm.java b/src/main/java/com/github/yufiriamazenta/craftorithm/Craftorithm.java index cd8e23c9..859622c3 100644 --- a/src/main/java/com/github/yufiriamazenta/craftorithm/Craftorithm.java +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/Craftorithm.java @@ -4,8 +4,8 @@ import com.github.yufiriamazenta.craftorithm.bstat.Metrics; import com.github.yufiriamazenta.craftorithm.config.ConfigUpdater; import com.github.yufiriamazenta.craftorithm.item.ItemManager; -import com.github.yufiriamazenta.craftorithm.listener.*; -import com.github.yufiriamazenta.craftorithm.menu.bukkit.BukkitMenuDispatcher; +import com.github.yufiriamazenta.craftorithm.listener.FurnaceSmeltHandler; +import com.github.yufiriamazenta.craftorithm.listener.SmithingHandler; import com.github.yufiriamazenta.craftorithm.recipe.RecipeManager; import com.github.yufiriamazenta.craftorithm.util.LangUtil; import com.github.yufiriamazenta.craftorithm.util.PluginHookUtil; diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/arcenciel/block/StringArcencielBlock.java b/src/main/java/com/github/yufiriamazenta/craftorithm/arcenciel/block/StringArcencielBlock.java index 8c368ff2..1d67a400 100644 --- a/src/main/java/com/github/yufiriamazenta/craftorithm/arcenciel/block/StringArcencielBlock.java +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/arcenciel/block/StringArcencielBlock.java @@ -31,14 +31,14 @@ public StringArcencielBlock(String arcencielBlockBody) { public ReturnObj exec(Player player) { List scriptChain = new ArrayList<>(Arrays.asList(arcencielBlockBody.split(" "))); scriptChain.removeIf(String::isEmpty); - if (scriptChain.size() < 1) + if (scriptChain.isEmpty()) return new ReturnObj<>(ArcencielSignal.CONTINUE, null); String keywordStr = scriptChain.get(0); IArcencielToken keyword = arcencielKeywordMap.get(keywordStr); if (keyword == null) { List func = ArcencielDispatcher.INSTANCE.getFunc(keywordStr); - if (func.size() < 1) { - LangUtil.sendMsg(player, "arcenciel.unknown_token", ContainerUtil.newHashMap("", keywordStr)); + if (func.isEmpty()) { + LangUtil.sendLang(player, "arcenciel.unknown_token", ContainerUtil.newHashMap("", keywordStr)); return new ReturnObj<>(ArcencielSignal.CONTINUE); } else { return ArcencielDispatcher.INSTANCE.dispatchArcencielFunc(player, func); diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/arcenciel/token/TokenHasPerm.java b/src/main/java/com/github/yufiriamazenta/craftorithm/arcenciel/token/TokenHasPerm.java index 4d799bd0..d825530a 100644 --- a/src/main/java/com/github/yufiriamazenta/craftorithm/arcenciel/token/TokenHasPerm.java +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/arcenciel/token/TokenHasPerm.java @@ -17,8 +17,8 @@ protected TokenHasPerm() { @Override public ReturnObj exec(Player player, List args) { - if (args.size() < 1) { - LangUtil.sendMsg(player, "arcenciel.not_enough_param", ContainerUtil.newHashMap("", "if")); + if (args.isEmpty()) { + LangUtil.sendLang(player, "arcenciel.not_enough_param", ContainerUtil.newHashMap("", "if")); return new ReturnObj<>(false); } return new ReturnObj<>(player.hasPermission(args.get(0))); diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/bstat/Metrics.java b/src/main/java/com/github/yufiriamazenta/craftorithm/bstat/Metrics.java index efdf98e1..58ddf69e 100644 --- a/src/main/java/com/github/yufiriamazenta/craftorithm/bstat/Metrics.java +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/bstat/Metrics.java @@ -1,6 +1,5 @@ package com.github.yufiriamazenta.craftorithm.bstat; -import com.github.yufiriamazenta.craftorithm.Craftorithm; import crypticlib.CrypticLib; import org.bukkit.Bukkit; import org.bukkit.configuration.file.YamlConfiguration; diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/PluginCommand.java b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/PluginCommand.java index f854978c..dc7d217c 100644 --- a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/PluginCommand.java +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/PluginCommand.java @@ -11,7 +11,9 @@ import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; -import java.util.*; +import java.util.Arrays; +import java.util.List; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @BukkitCommand( @@ -31,10 +33,10 @@ public enum PluginCommand implements IPluginCmdExecutor { } @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { List argList = Arrays.asList(args); if (argList.isEmpty()) { - LangUtil.sendMsg(sender, "command.not_enough_param", ContainerUtil.newHashMap("", String.valueOf(1))); + LangUtil.sendLang(sender, "command.not_enough_param", ContainerUtil.newHashMap("", String.valueOf(1))); return true; } ISubCmdExecutor subCommand = subCommandMap.get(argList.get(0)); @@ -42,14 +44,14 @@ public boolean onCommand(CommandSender sender, Command command, String label, St String perm = subCommand.permission(); if (perm != null) { if (!sender.hasPermission(perm)) { - LangUtil.sendMsg(sender, "command.no_perm"); + LangUtil.sendLang(sender, "command.no_perm"); return true; } } return subCommand.onCommand(sender, argList.subList(1, argList.size())); } else { - LangUtil.sendMsg(sender, "command.undefined_subcmd"); + LangUtil.sendLang(sender, "command.undefined_subcmd"); return true; } } @@ -60,8 +62,9 @@ private void regDefaultSubCommands() { regSubCommand(RemoveRecipeCommand.INSTANCE); regSubCommand(ItemCommand.INSTANCE); regSubCommand(RunArcencielCmd.INSTANCE); - regSubCommand(LookRecipeCommand.INSTANCE); + regSubCommand(ShowRecipeCommand.INSTANCE); regSubCommand(CreateRecipeCommand.INSTANCE); + regSubCommand(RecipeListCommand.INSTANCE); } @Override diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/AbstractSubCommand.java b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/AbstractSubCommand.java index 2a645adc..29fd1fb8 100644 --- a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/AbstractSubCommand.java +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/AbstractSubCommand.java @@ -7,8 +7,6 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -16,7 +14,7 @@ public abstract class AbstractSubCommand implements ISubCmdExecutor { private final String command; - private String perm; + private final String perm; private Map subCommandMap; protected AbstractSubCommand(String command, Map subCommandMap, String perm) { @@ -37,12 +35,12 @@ protected AbstractSubCommand(String command) { public boolean onCommand(CommandSender sender, List args) { ISubCmdExecutor subCommand = subCommandMap.get(args.get(0)); if (subCommand == null) { - LangUtil.sendMsg(sender, "command.undefined_subcmd"); + LangUtil.sendLang(sender, "command.undefined_subcmd"); } else { String perm = subCommand.permission(); if (perm != null) { if (!sender.hasPermission(perm)) { - LangUtil.sendMsg(sender, "command.no_perm"); + LangUtil.sendLang(sender, "command.no_perm"); return true; } } @@ -70,14 +68,14 @@ public void sendNotEnoughCmdParamMsg(CommandSender sender, int paramNum) { } public void sendNotEnoughCmdParamMsg(CommandSender sender, String paramStr) { - LangUtil.sendMsg(sender, "command.not_enough_param", ContainerUtil.newHashMap("", paramStr)); + LangUtil.sendLang(sender, "command.not_enough_param", ContainerUtil.newHashMap("", paramStr)); } public boolean checkSenderIsPlayer(CommandSender sender) { if (sender instanceof Player) { return true; } else { - LangUtil.sendMsg(sender, "command.player_only"); + LangUtil.sendLang(sender, "command.player_only"); return false; } } @@ -91,8 +89,6 @@ public String permission() { return perm; } - public void setPerm() { - this.perm = perm; - } + } diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/CreateRecipeCommand.java b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/CreateRecipeCommand.java index e88058f5..108cb331 100644 --- a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/CreateRecipeCommand.java +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/CreateRecipeCommand.java @@ -1,6 +1,5 @@ package com.github.yufiriamazenta.craftorithm.cmd.subcmd; -import com.github.yufiriamazenta.craftorithm.Craftorithm; import com.github.yufiriamazenta.craftorithm.menu.impl.recipe.RecipeCreatorMenuHolder; import com.github.yufiriamazenta.craftorithm.recipe.RecipeType; import com.github.yufiriamazenta.craftorithm.util.LangUtil; @@ -13,13 +12,13 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; -public class CreateRecipeCommand extends AbstractSubCommand { +public final class CreateRecipeCommand extends AbstractSubCommand { public static final CreateRecipeCommand INSTANCE = new CreateRecipeCommand(); private final List recipeTypeList; private final Pattern recipeNamePattern = Pattern.compile("[a-z0-9/._-]+"); - protected CreateRecipeCommand() { + private CreateRecipeCommand() { super("create", "craftorithm.command.create"); recipeTypeList = Arrays.stream(RecipeType.values()).map(RecipeType::name).map(s -> s.toLowerCase(Locale.ROOT)).collect(Collectors.toList()); List unsupportedRecipeTypeList = new ArrayList<>(); @@ -44,13 +43,13 @@ public boolean onCommand(CommandSender sender, List args) { } String recipeTypeStr = args.get(0).toLowerCase(Locale.ROOT); if (!recipeTypeList.contains(recipeTypeStr)) { - LangUtil.sendMsg(sender, "command.create.unsupported_recipe_type"); + LangUtil.sendLang(sender, "command.create.unsupported_recipe_type"); return true; } String recipeName = args.get(1); Matcher matcher = recipeNamePattern.matcher(recipeName); if (!matcher.matches()) { - LangUtil.sendMsg(sender, "command.create.unsupported_recipe_name"); + LangUtil.sendLang(sender, "command.create.unsupported_recipe_name"); return true; } RecipeType recipeType = RecipeType.valueOf(recipeTypeStr.toUpperCase(Locale.ROOT)); diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/RecipeListCommand.java b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/RecipeListCommand.java new file mode 100644 index 00000000..3fea8fe1 --- /dev/null +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/RecipeListCommand.java @@ -0,0 +1,30 @@ +package com.github.yufiriamazenta.craftorithm.cmd.subcmd; + +import com.github.yufiriamazenta.craftorithm.menu.impl.recipe.RecipeListMenuHolder; +import com.github.yufiriamazenta.craftorithm.util.LangUtil; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +//TODO 展示全服所有配方 +public final class RecipeListCommand extends AbstractSubCommand { + + public static final RecipeListCommand INSTANCE = new RecipeListCommand(); + + private RecipeListCommand() { + super("list", "craftorithm.command.list"); + } + + @Override + public boolean onCommand(CommandSender sender, List args) { + if (!checkSenderIsPlayer(sender)) { + LangUtil.sendLang(sender, "command.player_only"); + return true; + } + Player player = (Player) sender; + player.openInventory(new RecipeListMenuHolder().getInventory()); + return true; + } + +} diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/ReloadCommand.java b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/ReloadCommand.java index bde0fa0d..5e02fbbd 100644 --- a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/ReloadCommand.java +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/ReloadCommand.java @@ -23,10 +23,10 @@ private ReloadCommand() { public boolean onCommand(CommandSender sender, List args) { try { reloadPlugin(); - LangUtil.sendMsg(sender, "command.reload.success"); + LangUtil.sendLang(sender, "command.reload.success"); } catch (Exception e) { e.printStackTrace(); - LangUtil.sendMsg(sender, "command.reload.exception"); + LangUtil.sendLang(sender, "command.reload.exception"); } return true; } @@ -40,7 +40,7 @@ public static void reloadPlugin() { public static void reloadConfigs() { Craftorithm.getInstance().reloadConfig(); LangUtil.reloadMsgConfig(); - RemoveRecipeCommand.getRemovedRecipeConfig().reloadConfig(); + RecipeManager.getRemovedRecipeConfig().reloadConfig(); ItemManager.loadItemFiles(); RecipeManager.loadRecipeFiles(); ArcencielDispatcher.INSTANCE.getFunctionFile().reloadConfig(); diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/RemoveRecipeCommand.java b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/RemoveRecipeCommand.java index 6168a9e1..4ea53b0a 100644 --- a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/RemoveRecipeCommand.java +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/RemoveRecipeCommand.java @@ -1,42 +1,33 @@ package com.github.yufiriamazenta.craftorithm.cmd.subcmd; -import com.github.yufiriamazenta.craftorithm.Craftorithm; import com.github.yufiriamazenta.craftorithm.recipe.RecipeManager; import com.github.yufiriamazenta.craftorithm.util.LangUtil; -import crypticlib.CrypticLib; import crypticlib.command.ISubCmdExecutor; -import crypticlib.config.impl.YamlConfigWrapper; -import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; import org.bukkit.command.CommandSender; -import org.bukkit.inventory.Recipe; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; +import java.util.ArrayList; +import java.util.List; -public class RemoveRecipeCommand extends AbstractSubCommand { - - private static final YamlConfigWrapper removedRecipeConfig = new YamlConfigWrapper(Craftorithm.getInstance(), "removed_recipes.yml"); - private final Map recipeMap; +public final class RemoveRecipeCommand extends AbstractSubCommand { public static final ISubCmdExecutor INSTANCE = new RemoveRecipeCommand(); private RemoveRecipeCommand() { super("remove", "craftorithm.command.remove"); - recipeMap = new ConcurrentHashMap<>(); } @Override public boolean onCommand(CommandSender sender, List args) { - if (args.size() < 1) { + if (args.isEmpty()) { sendNotEnoughCmdParamMsg(sender, 1); return true; } - if (removeRecipe(args.get(0), true)) { - LangUtil.sendMsg(sender, "command.remove.success"); + if (RecipeManager.removeRecipe(args.get(0), true)) { + LangUtil.sendLang(sender, "command.remove.success"); } else - LangUtil.sendMsg(sender, "command.remove.not_exist"); + LangUtil.sendLang(sender, "command.remove.not_exist"); return true; } @@ -44,7 +35,7 @@ public boolean onCommand(CommandSender sender, List args) { public List onTabComplete(CommandSender sender, List args) { if (args.size() <= 1) { List tabList = new ArrayList<>(); - for (NamespacedKey key : recipeMap.keySet()) { + for (NamespacedKey key : RecipeManager.getServerRecipeMap().keySet()) { String str = key.toString(); if (str.startsWith(args.get(0))) tabList.add(key.toString()); @@ -55,93 +46,6 @@ public List onTabComplete(CommandSender sender, List args) { return super.onTabComplete(sender, args); } - public void reloadRecipeMap() { - Iterator recipeIterator = Bukkit.recipeIterator(); - recipeMap.clear(); - while (recipeIterator.hasNext()) { - Recipe recipe = recipeIterator.next(); - NamespacedKey key = RecipeManager.getRecipeKey(recipe); - recipeMap.put(key, recipe); - } - } - - public Map getRecipeMap() { - return Collections.unmodifiableMap(recipeMap); - } - - public static YamlConfigWrapper getRemovedRecipeConfig() { - return removedRecipeConfig; - } - - public void removeRecipes(List keyStrList, boolean save2File) { - List keyList = new ArrayList<>(); - for (String str : keyStrList) { - NamespacedKey key = NamespacedKey.fromString(str); - if (key != null) - keyList.add(key); - } - if (keyList.isEmpty()) - return; - if (CrypticLib.minecraftVersion() >= 11500) { - for (NamespacedKey key : keyList) { - Bukkit.removeRecipe(key); - if (save2File) { - addKey2RemovedConfig(key.toString()); - } - } - } else { - Iterator recipeIterator = Bukkit.recipeIterator(); - while (recipeIterator.hasNext()) { - Recipe recipe1 = recipeIterator.next(); - NamespacedKey key1 = RecipeManager.getRecipeKey(recipe1); - if (key1 == null) - continue; - if (keyList.contains(key1)) { - recipeIterator.remove(); - if (save2File) { - addKey2RemovedConfig(key1.toString()); - } - keyList.remove(key1); - if (keyList.isEmpty()) - break; - } - } - } - reloadRecipeMap(); - } - - public boolean removeRecipe(String keyStr, boolean save2File) { - NamespacedKey key = NamespacedKey.fromString(keyStr); - Iterator recipeIterator = Bukkit.recipeIterator(); - if (key == null) - return false; - if (CrypticLib.minecraftVersion() >= 11500) { - if (Bukkit.removeRecipe(key) && save2File) - addKey2RemovedConfig(key.toString()); - reloadRecipeMap(); - } else { - while (recipeIterator.hasNext()) { - Recipe recipe1 = recipeIterator.next(); - NamespacedKey key1 = RecipeManager.getRecipeKey(recipe1); - if (key.equals(key1)) { - recipeIterator.remove(); - if (save2File) { - addKey2RemovedConfig(key.toString()); - } - reloadRecipeMap(); - return true; - } - } - } - return false; - } - public void addKey2RemovedConfig(String key) { - List removedList = removedRecipeConfig.config().getStringList("recipes"); - if (!removedList.contains(key)) - removedList.add(key); - removedRecipeConfig.config().set("recipes", removedList); - removedRecipeConfig.saveConfig(); - } } diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/RunArcencielCmd.java b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/RunArcencielCmd.java index 4a73865f..5e125768 100644 --- a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/RunArcencielCmd.java +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/RunArcencielCmd.java @@ -9,21 +9,21 @@ import java.util.List; import java.util.StringJoiner; -public class RunArcencielCmd extends AbstractSubCommand { +public final class RunArcencielCmd extends AbstractSubCommand { public static final RunArcencielCmd INSTANCE = new RunArcencielCmd(); - protected RunArcencielCmd() { + private RunArcencielCmd() { super("run", "craftorithm.command.run"); } @Override public boolean onCommand(CommandSender sender, List args) { if (!(sender instanceof Player)) { - LangUtil.sendMsg(sender, "command.player_only"); + LangUtil.sendLang(sender, "command.player_only"); return true; } - if (args.size() < 1) { + if (args.isEmpty()) { sendNotEnoughCmdParamMsg(sender, 1); return true; } @@ -34,7 +34,7 @@ public boolean onCommand(CommandSender sender, List args) { } ArcencielDispatcher.INSTANCE.dispatchArcencielBlock((Player) sender, arcencielBlock.toString()); long execTime = System.currentTimeMillis() - startTime; - LangUtil.sendMsg(sender, "command.run_arcenciel.success", ContainerUtil.newHashMap("