diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreCustomModelDataCommand.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreCustomModelDataCommand.java new file mode 100644 index 0000000..9f2633f --- /dev/null +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreCustomModelDataCommand.java @@ -0,0 +1,82 @@ +package cn.hamster3.mc.plugin.core.bukkit.command.lore; + +import cn.hamster3.mc.plugin.core.bukkit.command.ChildCommand; +import cn.hamster3.mc.plugin.core.bukkit.constant.CoreMessage; +import cn.hamster3.mc.plugin.core.bukkit.util.BukkitUtils; +import net.kyori.adventure.text.TextReplacementConfig; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class LoreCustomModelDataCommand extends ChildCommand { + public static final LoreCustomModelDataCommand INSTANCE = new LoreCustomModelDataCommand(); + + private LoreCustomModelDataCommand() { + } + + @Override + public @NotNull String getName() { + return "cmd"; + } + + @Override + public @NotNull String getUsage() { + return "cmd [data]"; + } + + @Override + public boolean hasPermission(@NotNull CommandSender sender) { + return true; + } + + @Override + public @NotNull String getDescription() { + return "设置手持物品的自定义模型数据"; + } + + @SuppressWarnings("deprecation") + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { + if (!(sender instanceof Player player)) { + CoreMessage.COMMAND_MUST_USED_BY_PLAYER.show(sender); + return true; + } + ItemStack stack = player.getItemInHand(); + if (BukkitUtils.isEmptyItemStack(stack)) { + CoreMessage.COMMAND_LORE_HAND_EMPTY.show(player); + return true; + } + ItemMeta meta = stack.getItemMeta(); + if (meta == null) { + return true; + } + if (args.length < 1) { + meta.setCustomModelData(null); + stack.setItemMeta(meta); + CoreMessage.COMMAND_LORE_CMD_CLEAR_SUCCESS.show(sender); + return true; + } + try { + int data = Integer.parseInt(args[0]); + meta.setCustomModelData(data); + stack.setItemMeta(meta); + CoreMessage.COMMAND_LORE_CMD_SET_SUCCESS.show(sender, TextReplacementConfig.builder() + .matchLiteral("%data%").replacement(args[0]) + .build()); + } catch (NumberFormatException e) { + CoreMessage.COMMAND_LORE_CMD_SET_INPUT_ERROR.show(sender); + return true; + } + return true; + } + + @Override + public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) { + return null; + } +} diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/ParentLoreCommand.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/ParentLoreCommand.java index 29e7aa4..e40ba99 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/ParentLoreCommand.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/ParentLoreCommand.java @@ -17,6 +17,7 @@ public final class ParentLoreCommand extends ParentCommand { addChildCommand(LoreSetCommand.INSTANCE); addChildCommand(LoreClearCommand.INSTANCE); addChildCommand(LoreNameCommand.INSTANCE); + addChildCommand(LoreCustomModelDataCommand.INSTANCE); } @Override diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/constant/CoreMessage.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/constant/CoreMessage.java index 35cc552..bbf28e7 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/constant/CoreMessage.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/constant/CoreMessage.java @@ -21,6 +21,9 @@ public enum CoreMessage { COMMAND_LORE_ADD_SUCCESS, COMMAND_LORE_CLEAR_NOTHING, COMMAND_LORE_CLEAR_SUCCESS, + COMMAND_LORE_CMD_CLEAR_SUCCESS, + COMMAND_LORE_CMD_SET_SUCCESS, + COMMAND_LORE_CMD_SET_INPUT_ERROR, COMMAND_LORE_NAME_SUCCESS, COMMAND_LORE_REMOVE_NOT_INPUT_NUMBER, COMMAND_LORE_REMOVE_INPUT_NUMBER_ERROR, diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/PageManager.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/PageManager.java index 00c5efe..b64e711 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/PageManager.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/PageManager.java @@ -1,15 +1,12 @@ package cn.hamster3.mc.plugin.core.bukkit.page; import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin; +import cn.hamster3.mc.plugin.core.bukkit.util.BukkitUtils; import org.bukkit.Bukkit; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.Plugin; import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.StandardCopyOption; import java.util.HashMap; public class PageManager { @@ -33,26 +30,9 @@ public class PageManager { if (pageFolder.mkdirs()) { HamsterCorePlugin.getInstance().getLogger().info("为 " + pluginName + " 创建页面配置文件夹..."); } - String pageFileName = clazz.getSimpleName() + ".yml"; - File pageFile = new File(pageFolder, pageFileName); - if (pageFile.exists()) { - YamlConfiguration configuration = YamlConfiguration.loadConfiguration(pageFile); - pageConfig = new PageConfig(plugin, configuration); - PAGE_CONFIG.put(clazz.getName(), pageConfig); - return pageConfig; - } - InputStream resource = plugin.getResource("/" + pageFileName); - if (resource == null) { - throw new IllegalArgumentException("在插件 " + pluginName + " 的文件内部未找到 " + pageFileName + " !"); - } - try { - Files.copy(resource, pageFile.toPath(), StandardCopyOption.REPLACE_EXISTING); - resource.close(); - } catch (IOException e) { - throw new RuntimeException(e); - } - YamlConfiguration configuration = YamlConfiguration.loadConfiguration(pageFile); - pageConfig = new PageConfig(plugin, configuration); + String filename = clazz.getSimpleName() + ".yml"; + YamlConfiguration config = BukkitUtils.getPluginConfig(plugin, filename); + pageConfig = new PageConfig(plugin, config); PAGE_CONFIG.put(clazz.getName(), pageConfig); return pageConfig; } diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitUtils.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitUtils.java index 3de5777..c067812 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitUtils.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitUtils.java @@ -1,18 +1,26 @@ package cn.hamster3.mc.plugin.core.bukkit.util; +import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin; import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; import java.util.UUID; @SuppressWarnings("unused") @@ -207,4 +215,24 @@ public final class BukkitUtils { } return displayMessage; } + + @NotNull + public static YamlConfiguration getPluginConfig(@NotNull Plugin plugin, @NotNull String filename) { + File dataFolder = plugin.getDataFolder(); + if (dataFolder.mkdirs()) { + HamsterCorePlugin.getInstance().getLogger().info("已为插件 %s 生成存档文件夹..."); + } + File file = new File(dataFolder, filename); + if (!file.exists()) { + try (InputStream stream = plugin.getClass().getResourceAsStream("/" + filename)) { + if (stream == null) { + throw new IllegalArgumentException("在插件 " + plugin.getName() + " 的文件内部未找到 " + filename + " !"); + } + Files.copy(stream, file.toPath(), StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + throw new IllegalArgumentException("在插件 " + plugin.getName() + " 内部读取文件 " + filename + " 时发生错误!"); + } + } + return YamlConfiguration.loadConfiguration(file); + } } diff --git a/hamster-core-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BungeeCordUtils.java b/hamster-core-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BungeeCordUtils.java index e0f4bd0..254302d 100644 --- a/hamster-core-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BungeeCordUtils.java +++ b/hamster-core-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BungeeCordUtils.java @@ -4,17 +4,30 @@ import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.config.Configuration; import net.md_5.bungee.config.ConfigurationProvider; import net.md_5.bungee.config.YamlConfiguration; +import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; +@SuppressWarnings("unused") public final class BungeeCordUtils { private BungeeCordUtils() { } - public static Configuration getPluginConfig(Plugin plugin) { + public static Configuration getConfig(@NotNull File file) { + if (!file.exists()) { + throw new IllegalArgumentException("文件不存在!"); + } + try { + return ConfigurationProvider.getProvider(YamlConfiguration.class).load(file); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static Configuration getPluginConfig(@NotNull Plugin plugin) { File configFile = new File(plugin.getDataFolder(), "config.yml"); if (!configFile.exists()) { return saveDefaultConfig(plugin); @@ -23,20 +36,22 @@ public final class BungeeCordUtils { try { return ConfigurationProvider.getProvider(YamlConfiguration.class).load(configFile); } catch (IOException e) { - throw new RuntimeException(e); + e.printStackTrace(); + return null; } } - public static Configuration saveDefaultConfig(Plugin plugin) { + public static Configuration saveDefaultConfig(@NotNull Plugin plugin) { + if (plugin.getDataFolder().mkdir()) { + plugin.getLogger().info("创建插件文件夹..."); + } + File configFile = new File(plugin.getDataFolder(), "config.yml"); try { - if (plugin.getDataFolder().mkdir()) { - plugin.getLogger().info("创建插件文件夹..."); - } - File configFile = new File(plugin.getDataFolder(), "config.yml"); InputStream in = plugin.getResourceAsStream("config.yml"); Files.copy(in, configFile.toPath()); return ConfigurationProvider.getProvider(YamlConfiguration.class).load(configFile); - } catch (Exception ignored) { + } catch (Exception e) { + e.printStackTrace(); } return null; } diff --git a/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/CommonUtils.java b/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/CommonUtils.java index 9f85f96..942957a 100644 --- a/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/CommonUtils.java +++ b/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/CommonUtils.java @@ -18,9 +18,9 @@ public final class CommonUtils { } public static void zipCompressionFolder(@NotNull File folder, @NotNull File zipFile) throws IOException { - ZipOutputStream stream = new ZipOutputStream(Files.newOutputStream(zipFile.toPath())); - putFileToZipStream(stream, "", folder); - stream.close(); + try (ZipOutputStream stream = new ZipOutputStream(Files.newOutputStream(zipFile.toPath()))) { + putFileToZipStream(stream, "", folder); + } } public static void putFileToZipStream(@NotNull ZipOutputStream stream, @NotNull String path, @NotNull File file) throws IOException {