diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/api/CoreBukkitAPI.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/api/CoreBukkitAPI.java index 31de8d4..80eafea 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/api/CoreBukkitAPI.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/api/CoreBukkitAPI.java @@ -20,6 +20,9 @@ public final class CoreBukkitAPI extends CoreAPI { FileConfiguration config = plugin.getConfig(); ConfigurationSection datasourceConfig = config.getConfigurationSection("datasource"); + if (datasourceConfig == null) { + throw new IllegalArgumentException("配置文件中未找到 datasource 节点!"); + } HikariConfig hikariConfig = new HikariConfig(); hikariConfig.setDriverClassName(datasourceConfig.getString("driver")); hikariConfig.setJdbcUrl(datasourceConfig.getString("url")); diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/ParentCommand.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/ParentCommand.java index 34c5368..4fd9d1c 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/ParentCommand.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/ParentCommand.java @@ -99,14 +99,21 @@ public class ParentCommand extends ChildCommand { return map; } - public void hook(@NotNull PluginCommand command) { + public void hook(PluginCommand command) { + if (command == null) { + return; + } command.setExecutor(this); command.setTabCompleter(this); plugin.getLogger().info("已注册指令 " + getUsage() + "."); } @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) { + if (!hasPermission(sender)) { + CoreMessage.COMMAND_NOT_HAS_PERMISSION.show(sender); + return true; + } if (args.length == 0) { sender.sendMessage("§e==================== [" + name + "使用帮助] ===================="); Map helpMap = getCommandHelp(sender); @@ -122,16 +129,21 @@ public class ParentCommand extends ChildCommand { return true; } for (ChildCommand childCommand : childCommands) { - if (childCommand.getName().equalsIgnoreCase(args[0])) { + if (!childCommand.getName().equalsIgnoreCase(args[0])) { + continue; + } + if (childCommand instanceof ParentCommand || childCommand.hasPermission(sender)) { return childCommand.onCommand(sender, command, label, Arrays.copyOfRange(args, 1, args.length)); } + CoreMessage.COMMAND_NOT_HAS_PERMISSION.show(sender); + return true; } CoreMessage.COMMAND_NOT_FOUND.show(sender); return true; } @Override - public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { + public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) { if (args.length == 0) { return childCommands.stream() .map(ChildCommand::getName) diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/core/GCCommand.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/core/GCCommand.java index a1ad0af..0122ec1 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/core/GCCommand.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/core/GCCommand.java @@ -35,14 +35,14 @@ public class GCCommand extends ChildCommand { } @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) { System.gc(); sender.sendMessage("§a已发送 GC 信号."); return true; } @Override - public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { + public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) { return Collections.emptyList(); } } diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/core/InfoModeCommand.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/core/InfoModeCommand.java index 743cdc3..a08eda4 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/core/InfoModeCommand.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/core/InfoModeCommand.java @@ -40,7 +40,7 @@ public class InfoModeCommand extends ChildCommand { } @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) { if (!(sender instanceof Player)) { CoreMessage.COMMAND_MUST_USED_BY_PLAYER.show(sender); return true; @@ -75,7 +75,7 @@ public class InfoModeCommand extends ChildCommand { } @Override - public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { + 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/core/YamlCommand.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/core/YamlCommand.java index 1b4173c..eb49091 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/core/YamlCommand.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/core/YamlCommand.java @@ -39,7 +39,7 @@ public class YamlCommand extends ChildCommand { @Override public boolean hasPermission(@NotNull CommandSender sender) { - return true; + return sender.hasPermission("hamster.core.admin"); } @Override @@ -47,9 +47,9 @@ public class YamlCommand extends ChildCommand { return "将当前信息保存至 yaml 中"; } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "ConstantConditions"}) @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) { YamlConfiguration config = new YamlConfiguration(); config.set("mc-version", BukkitUtils.getMCVersion()); config.set("nms-version", BukkitUtils.getNMSVersion()); @@ -70,10 +70,10 @@ public class YamlCommand extends ChildCommand { lore.add("§e测试 lore 1"); lore.add("§e测试 lore 2"); lore.add("§e测试 lore 3"); - meta.addEnchant(Enchantment.DAMAGE_ALL, 1, true); meta.setDisplayName("§a测试物品"); meta.setLore(lore); meta.addItemFlags(ItemFlag.values()); + meta.addEnchant(Enchantment.DAMAGE_ALL, 1, true); stack.setItemMeta(meta); config.set("test-item", stack); File dataFolder = new File(HamsterCorePlugin.getInstance().getDataFolder(), "yaml"); @@ -91,7 +91,7 @@ public class YamlCommand extends ChildCommand { } @Override - public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { + public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) { return Collections.emptyList(); } } diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreAddCommand.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreAddCommand.java index dd546f8..5923d09 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreAddCommand.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreAddCommand.java @@ -41,7 +41,7 @@ public class LoreAddCommand extends ChildCommand { @SuppressWarnings("deprecation") @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) { if (args.length < 1) { CoreMessage.COMMAND_LORE_EMPTY_INPUT.show(sender); return true; @@ -71,7 +71,7 @@ public class LoreAddCommand extends ChildCommand { } @Override - public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { + 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/LoreClearCommand.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreClearCommand.java index d719e58..cebde01 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreClearCommand.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreClearCommand.java @@ -41,7 +41,7 @@ public class LoreClearCommand extends ChildCommand { @SuppressWarnings("deprecation") @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) { if (!(sender instanceof Player)) { CoreMessage.COMMAND_MUST_USED_BY_PLAYER.show(sender); return true; @@ -67,7 +67,7 @@ public class LoreClearCommand extends ChildCommand { } @Override - public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { + 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/LoreNameCommand.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreNameCommand.java index a6f3daf..1fdc216 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreNameCommand.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreNameCommand.java @@ -40,7 +40,7 @@ public class LoreNameCommand extends ChildCommand { @SuppressWarnings("deprecation") @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) { if (args.length < 1) { CoreMessage.COMMAND_LORE_EMPTY_INPUT.show(sender); return true; @@ -65,7 +65,7 @@ public class LoreNameCommand extends ChildCommand { } @Override - public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { + 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/LoreRemoveCommand.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreRemoveCommand.java index 0251c51..994b9a3 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreRemoveCommand.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreRemoveCommand.java @@ -41,7 +41,7 @@ public class LoreRemoveCommand extends ChildCommand { @SuppressWarnings("deprecation") @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) { if (args.length < 1) { CoreMessage.COMMAND_LORE_REMOVE_NOT_INPUT_NUMBER.show(sender); return true; @@ -80,7 +80,7 @@ public class LoreRemoveCommand extends ChildCommand { } @Override - public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { + 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/LoreSetCommand.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreSetCommand.java index 33c7336..9da5011 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreSetCommand.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreSetCommand.java @@ -42,7 +42,7 @@ public class LoreSetCommand extends ChildCommand { @SuppressWarnings("deprecation") @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) { if (args.length < 1) { CoreMessage.COMMAND_LORE_SET_NOT_INPUT_NUMBER.show(sender); return true; @@ -86,7 +86,7 @@ public class LoreSetCommand extends ChildCommand { } @Override - public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { + 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 be7ec58..29e7aa4 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 @@ -5,6 +5,7 @@ import cn.hamster3.mc.plugin.core.bukkit.command.ParentCommand; import cn.hamster3.mc.plugin.core.common.util.CommonUtils; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; public final class ParentLoreCommand extends ParentCommand { public static final ParentLoreCommand INSTANCE = new ParentLoreCommand(); @@ -19,7 +20,7 @@ public final class ParentLoreCommand extends ParentCommand { } @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) { CommonUtils.replaceColorCode(args); return super.onCommand(sender, command, label, args); } 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 668a1a8..ed7164d 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 @@ -1,10 +1,10 @@ package cn.hamster3.mc.plugin.core.bukkit.constant; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; public enum CoreMessage { COMMAND_NOT_FOUND, + COMMAND_NOT_HAS_PERMISSION, COMMAND_MUST_USED_BY_PLAYER, COMMAND_DEBUG_INFO_MODE_ON, @@ -29,8 +29,4 @@ public enum CoreMessage { public void show(CommandSender sender) { sender.sendMessage(name()); } - - public void show(Player player) { - player.sendMessage(name()); - } } diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/listener/DebugListener.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/listener/DebugListener.java index 1dc4cae..217404e 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/listener/DebugListener.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/listener/DebugListener.java @@ -44,6 +44,9 @@ public class DebugListener implements Listener { } event.setCancelled(true); Block block = event.getClickedBlock(); + if (block == null) { + return; + } player.sendMessage("§e=============================="); player.sendMessage(String.format("§a方块位置: %s %d %d %d", block.getWorld().getName(), diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/ButtonGroup.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/ButtonGroup.java index 52526a1..6541a73 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/ButtonGroup.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/ButtonGroup.java @@ -9,8 +9,11 @@ import java.util.*; @SuppressWarnings("unused") public class ButtonGroup { + @NotNull private final String name; + @NotNull private final PageConfig config; + @NotNull private final HashMap buttonNameMap; /** @@ -19,7 +22,7 @@ public class ButtonGroup { * @param pageConfig Page 设定 * @param config 按钮组设定 */ - public ButtonGroup(PageConfig pageConfig, ConfigurationSection config) { + public ButtonGroup(@NotNull PageConfig pageConfig, @NotNull ConfigurationSection config) { this.config = pageConfig; name = config.getName(); buttonNameMap = new HashMap<>(); @@ -148,6 +151,7 @@ public class ButtonGroup { * * @return 按钮组名称 */ + @NotNull public String getName() { return name; } @@ -157,6 +161,7 @@ public class ButtonGroup { * * @return 把图形字符映射到按钮名称的表 */ + @NotNull public HashMap getButtonNameMap() { return buttonNameMap; } diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/PageConfig.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/PageConfig.java index 96bcc89..13967d9 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/PageConfig.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/PageConfig.java @@ -60,16 +60,20 @@ public class PageConfig implements InventoryHolder { buttons = new HashMap<>(); ConfigurationSection buttonsConfig = config.getConfigurationSection("buttons"); - for (String key : buttonsConfig.getKeys(false)) { - buttons.put(key, buttonsConfig.getItemStack(key)); + if (buttonsConfig != null) { + for (String key : buttonsConfig.getKeys(false)) { + buttons.put(key, buttonsConfig.getItemStack(key)); + } } buttonGroups = new ArrayList<>(); ConfigurationSection buttonGroupsConfig = config.getConfigurationSection("groups"); - for (String key : buttonGroupsConfig.getKeys(false)) { - buttonGroups.add( - new ButtonGroup(this, buttonGroupsConfig.getConfigurationSection(key)) - ); + if (buttonGroupsConfig != null) { + for (String key : buttonGroupsConfig.getKeys(false)) { + //noinspection ConstantConditions + ButtonGroup buttonGroup = new ButtonGroup(this, buttonGroupsConfig.getConfigurationSection(key)); + buttonGroups.add(buttonGroup); + } } ButtonGroup group = getButtonGroup("default"); @@ -84,12 +88,14 @@ public class PageConfig implements InventoryHolder { buttonSounds = new HashMap<>(); ConfigurationSection buttonSoundConfig = config.getConfigurationSection("sounds"); - for (String key : buttonSoundConfig.getKeys(false)) { - try { - buttonSounds.put(key, Sound.valueOf(buttonSoundConfig.getString(key))); - } catch (IllegalArgumentException e) { - HamsterCorePlugin.getInstance().getLogger().warning("初始化 PageConfig 时遇到了一个异常:"); - e.printStackTrace(); + if (buttonSoundConfig != null) { + for (String key : buttonSoundConfig.getKeys(false)) { + try { + buttonSounds.put(key, Sound.valueOf(buttonSoundConfig.getString(key))); + } catch (Exception e) { + HamsterCorePlugin.getInstance().getLogger().warning("初始化 PageConfig 时遇到了一个异常:"); + e.printStackTrace(); + } } } } 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 0e4a347..b6d708f 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 @@ -7,6 +7,7 @@ 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; @@ -23,11 +24,14 @@ public class PageManager { throw new IllegalArgumentException(clazz.getName() + " 未被 @PluginPage 注解修饰!"); } PluginPage annotation = clazz.getAnnotation(PluginPage.class); - String value = annotation.value(); - Plugin plugin = Bukkit.getPluginManager().getPlugin(value); + String pluginName = annotation.value(); + Plugin plugin = Bukkit.getPluginManager().getPlugin(pluginName); + if (plugin == null) { + throw new IllegalArgumentException("未找到插件 " + pluginName + " !"); + } File pageFolder = new File(plugin.getDataFolder(), "pages"); if (pageFolder.mkdirs()) { - HamsterCorePlugin.getInstance().getLogger().info("为 " + value + " 创建页面配置文件夹..."); + HamsterCorePlugin.getInstance().getLogger().info("为 " + pluginName + " 创建页面配置文件夹..."); } String pageFileName = clazz.getSimpleName() + ".yml"; File pageFile = new File(pageFolder, pageFileName); @@ -37,8 +41,13 @@ public class PageManager { PAGE_CONFIG.put(clazz.getName(), pageConfig); return pageConfig; } + InputStream resource = plugin.getResource("/" + pageFileName); + if (resource == null) { + throw new IllegalArgumentException("在插件 " + pluginName + " 的文件内部未找到 " + pageFileName + " !"); + } try { - Files.copy(plugin.getResource("/" + pageFileName), pageFile.toPath(), StandardCopyOption.REPLACE_EXISTING); + Files.copy(resource, pageFile.toPath(), StandardCopyOption.REPLACE_EXISTING); + resource.close(); } catch (IOException e) { throw new RuntimeException(e); } 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 aa4681b..424bdfb 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 @@ -82,6 +82,7 @@ public final class BukkitUtils { try { stack = new ItemStack(Material.valueOf("PLAYER_HEAD")); } catch (IllegalArgumentException e) { + //noinspection deprecation stack = new ItemStack(Material.valueOf("SKULL_ITEM"), 1, (short) 3); } SkullMeta meta = (SkullMeta) stack.getItemMeta(); @@ -110,8 +111,10 @@ public final class BukkitUtils { stack = new ItemStack(Material.valueOf("SKULL_ITEM"), 1, (short) 3); } SkullMeta meta = (SkullMeta) stack.getItemMeta(); - meta.setOwner(name); - stack.setItemMeta(meta); + if (meta != null) { + meta.setOwner(name); + stack.setItemMeta(meta); + } return stack; } @@ -161,7 +164,7 @@ public final class BukkitUtils { } if (stack.hasItemMeta()) { ItemMeta meta = stack.getItemMeta(); - if (meta.hasDisplayName()) { + if (meta != null && meta.hasDisplayName()) { return meta.getDisplayName(); } } diff --git a/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/api/CoreAPI.java b/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/api/CoreAPI.java index 1ff26f7..3c5b8e4 100644 --- a/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/api/CoreAPI.java +++ b/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/api/CoreAPI.java @@ -27,10 +27,10 @@ public abstract class CoreAPI { } public void reportError(@NotNull String apiKey, @NotNull String projectID, @NotNull Throwable exception) { - + // todo } public void reportFile(@NotNull String apiKey, @NotNull String projectID, @NotNull String filename, byte @NotNull [] bytes) { - + // todo } } diff --git a/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/thread/CountdownThread.java b/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/thread/CountdownThread.java index 9b980c8..2698c8a 100644 --- a/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/thread/CountdownThread.java +++ b/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/thread/CountdownThread.java @@ -8,14 +8,14 @@ import java.util.concurrent.TimeUnit; @SuppressWarnings("unused") public abstract class CountdownThread implements Runnable { private final long interval; - private final long ticks; - protected int tick; + private final long totalTicks; + private int nowTicks; private ScheduledFuture future; - public CountdownThread(long interval, long ticks) { + public CountdownThread(long interval, long totalTicks) { this.interval = interval; - this.ticks = ticks; - tick = 0; + this.totalTicks = totalTicks; + nowTicks = 0; } public void start() { @@ -28,7 +28,7 @@ public abstract class CountdownThread implements Runnable { @Override public void run() { - if (tick == ticks) { + if (nowTicks == totalTicks) { try { onFinish(); } catch (Exception e) { @@ -38,11 +38,11 @@ public abstract class CountdownThread implements Runnable { return; } try { - onTick(tick); + onTick(nowTicks); } catch (Exception e) { e.printStackTrace(); } - tick++; + nowTicks++; } /** @@ -50,12 +50,35 @@ public abstract class CountdownThread implements Runnable { * * @param tick 时间刻度,以 0 开始,到 interval-1 结束 */ - protected void onTick(int tick) { - } + protected abstract void onTick(int tick); + + protected abstract void onFinish(); public void cancel() { future.cancel(false); } - protected abstract void onFinish(); + public long getInterval() { + return interval; + } + + public long getTotalTicks() { + return totalTicks; + } + + public int getNowTicks() { + return nowTicks; + } + + public void setNowTicks(int nowTicks) { + this.nowTicks = nowTicks; + } + + public ScheduledFuture getFuture() { + return future; + } + + public void setFuture(ScheduledFuture future) { + this.future = future; + } }