1
mirror of https://github.com/CarmJos/ScriptItems synced 2024-09-19 21:35:50 +00:00

完成指令部分

This commit is contained in:
Carm Jos 2022-03-13 17:31:20 +08:00
parent 19330f1bb5
commit 1a6f2071df
31 changed files with 391 additions and 244 deletions

View File

@ -1,17 +1,18 @@
```text ```text
___ _ ___ _ ____ _ __ ______
/ __|___ _ __ _ __ __ _ _ _ __| |_ _| |_ ___ _ __ / __/_______(_)__ / /_/ _/ /____ __ _ ___
| (__/ _ \ ' \| ' \/ _` | ' \/ _` || || _/ -_) ' \ _\ \/ __/ __/ / _ \/ __// // __/ -_) ' \(_-<
\___\___/_|_|_|_|_|_\__,_|_||_\__,_|___|\__\___|_|_|_| /___/\__/_/ /_/ .__/\__/___/\__/\__/_/_/_/___/
/_/
``` ```
# CommandItem # ScriptItems
[![workflow](https://github.com/CarmJos/CommandItem/actions/workflows/maven.yml/badge.svg?branch=master)](https://github.com/CarmJos/CommandItem/actions/workflows/maven.yml) [![workflow](https://github.com/CarmJos/ScriptItems/actions/workflows/maven.yml/badge.svg?branch=master)](https://github.com/CarmJos/ScriptItems/actions/workflows/maven.yml)
![Support](https://img.shields.io/badge/Minecraft-Java%201.12--Latest-yellow) ![Support](https://img.shields.io/badge/Minecraft-Java%201.12--Latest-yellow)
![](https://visitor-badge.glitch.me/badge?page_id=CommandItem.readme) ![](https://visitor-badge.glitch.me/badge?page_id=ScriptItems.readme)
物品指令绑定插件,给予玩家可执行对应指令的消耗物品基于EasyPlugin实现。 脚本物品插件,给予玩家可执行对应操作的物品基于EasyPlugin实现。
## 插件功能与优势 ## 插件功能与优势
@ -45,32 +46,35 @@
详见源文件。 详见源文件。
### 消息配置文件 ([messages.yml](src/main/java/cc/carm/plugin/commanditem/configuration/PluginMessages.java)) ### 消息配置文件 ([messages.yml](src/main/java/cc/carm/plugin/scriptitems/configuration/PluginMessages.java))
详见代码源文件,将在首次启动时生成配置。 详见代码源文件,将在首次启动时生成配置。
## 插件指令 ## 插件指令
插件主指令为 `/CommandItem`,所需权限为 `CommandItem.admin`。 插件主指令为 `/ScriptItems`,所需权限为 `ScriptItems.admin`。
```text ```text
# help # help
- 查看插件帮助 - 查看插件帮助
# give <玩家> <物品ID> <数量> # reload
- 重载插件配置文件。
# give <玩家> <物品ID> [数量(默认为1)]
- 给予指定玩家指定数量的物品。 - 给予指定玩家指定数量的物品。
# apply <物品ID> # apply <物品ID>
- 为手中的物品直接绑定一个配置。 - 为手中的物品直接绑定一个配置。
# details <物品ID> # info <物品ID>
- 查看物品的发放与领取情况。 - 查看物品的发放与领取情况。
``` ```
## 使用统计 ## 使用统计
[![bStats](https://bstats.org/signatures/bukkit/CommandItem.svg)](https://bstats.org/plugin/bukkit/CommandItem/14560) [![bStats](https://bstats.org/signatures/bukkit/ScriptItems.svg)](https://bstats.org/plugin/bukkit/ScriptItems/14615)
## 支持与捐赠 ## 支持与捐赠

27
pom.xml
View File

@ -13,25 +13,25 @@
</properties> </properties>
<groupId>cc.carm.plugin</groupId> <groupId>cc.carm.plugin</groupId>
<artifactId>commanditem</artifactId> <artifactId>scriptitems</artifactId>
<version>0.1.0-SNAPSHOT</version> <version>0.1.0-SNAPSHOT</version>
<name>CommandItem</name> <name>ScriptItems</name>
<description>物品指令绑定插件,给予玩家可执行对应指令的消耗物品基于EasyPlugin实现。</description> <description>物品操作绑定插件,给予玩家可执行对应操作的物品基于EasyPlugin实现。</description>
<url>https://github.com/CarmJos/CommandItem</url> <url>https://github.com/CarmJos/ScriptItems</url>
<issueManagement> <issueManagement>
<system>GitHub Issues</system> <system>GitHub Issues</system>
<url>https://github.com/CarmJos/CommandItem/issues</url> <url>https://github.com/CarmJos/ScriptItems/issues</url>
</issueManagement> </issueManagement>
<ciManagement> <ciManagement>
<system>GitHub Actions</system> <system>GitHub Actions</system>
<url>https://github.com/CarmJos/CommandItem/actions/workflows/maven.yml</url> <url>https://github.com/CarmJos/ScriptItems/actions/workflows/maven.yml</url>
</ciManagement> </ciManagement>
<distributionManagement> <distributionManagement>
<downloadUrl>https://github.com/CarmJos/CommandItem/releases</downloadUrl> <downloadUrl>https://github.com/CarmJos/ScriptItems/releases</downloadUrl>
</distributionManagement> </distributionManagement>
<developers> <developers>
@ -111,13 +111,6 @@
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>com.github.SaiintBrisson.command-framework</groupId>
<artifactId>bukkit</artifactId>
<version>1.3.0</version>
<scope>compile</scope>
</dependency>
<dependency> <dependency>
<groupId>org.spigotmc</groupId> <groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId> <artifactId>spigot-api</artifactId>
@ -241,15 +234,15 @@
<relocations> <relocations>
<relocation> <relocation>
<pattern>cc.carm.lib</pattern> <pattern>cc.carm.lib</pattern>
<shadedPattern>cc.carm.plugin.commanditem.lib</shadedPattern> <shadedPattern>cc.carm.plugin.scriptitems.lib</shadedPattern>
</relocation> </relocation>
<relocation> <relocation>
<pattern>org.bstats</pattern> <pattern>org.bstats</pattern>
<shadedPattern>cc.carm.plugin.commanditem.lib.bstats</shadedPattern> <shadedPattern>cc.carm.plugin.scriptitems.lib.bstats</shadedPattern>
</relocation> </relocation>
<relocation> <relocation>
<pattern>org.json</pattern> <pattern>org.json</pattern>
<shadedPattern>cc.carm.plugin.commanditem.lib.json</shadedPattern> <shadedPattern>cc.carm.plugin.scriptitems.lib.json</shadedPattern>
</relocation> </relocation>
</relocations> </relocations>
<filters> <filters>

View File

@ -1,11 +0,0 @@
package cc.carm.plugin.commanditem;
import cc.carm.plugin.commanditem.manager.ItemsManager;
public class CommandItemAPI {
public static ItemsManager getItemsManager() {
return Main.getInstance().itemsManager;
}
}

View File

@ -1,44 +0,0 @@
package cc.carm.plugin.commanditem.command;
import cc.carm.plugin.commanditem.item.ItemSettings;
import me.saiintbrisson.minecraft.command.annotation.Command;
import me.saiintbrisson.minecraft.command.annotation.Completer;
import me.saiintbrisson.minecraft.command.command.Context;
import me.saiintbrisson.minecraft.command.target.CommandTarget;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class CMDItemsCommand {
@Command(
name = "commanditem", aliases = "cmdItem",
description = "CommandItem的主要指令。",
usage = "/CommandItem help",
permission = "CommandItem.admin"
)
public void main(Context<CommandSender> sender) {
help(sender);
}
@Command(name = "commanditem.help")
public void help(Context<CommandSender> sender) {
sender.getSender().sendMessage("§a§lCommandItem §f§l指令帮助");
}
@Command(name = "commanditem.apply", target = CommandTarget.PLAYER)
@Completer(name = "settings")
public void apply(Context<Player> sender,
ItemSettings settings) {
Player player = sender.getSender();
if (player.getInventory().getItemInMainHand().getType() != Material.AIR) {
ItemStack applied = settings.applyItem(player.getInventory().getItemInMainHand());
player.getInventory().setItemInMainHand(applied);
}
player.sendMessage("应用成功");
}
}

View File

@ -1,14 +0,0 @@
package cc.carm.plugin.commanditem.command;
import cc.carm.plugin.commanditem.CommandItemAPI;
import cc.carm.plugin.commanditem.item.ItemSettings;
import me.saiintbrisson.minecraft.command.argument.TypeAdapter;
public class ItemSettingsAdapter implements TypeAdapter<ItemSettings> {
@Override
public ItemSettings convert(String s) {
return CommandItemAPI.getItemsManager().getItemSettings(s);
}
}

View File

@ -1,18 +0,0 @@
package cc.carm.plugin.commanditem.command;
import cc.carm.plugin.commanditem.CommandItemAPI;
import me.saiintbrisson.minecraft.command.command.Context;
import me.saiintbrisson.minecraft.command.executor.CompleterExecutor;
import org.bukkit.command.CommandSender;
import java.util.ArrayList;
import java.util.List;
public class ItemSettingsCompleter implements CompleterExecutor<CommandSender> {
@Override
public List<String> execute(Context<CommandSender> context) {
return new ArrayList<>(CommandItemAPI.getItemsManager().listItemSettings().keySet());
}
}

View File

@ -1,31 +0,0 @@
package cc.carm.plugin.commanditem.configuration;
import cc.carm.lib.easyplugin.configuration.language.EasyMessageList;
import cc.carm.lib.easyplugin.configuration.language.MessagesRoot;
public class PluginMessages extends MessagesRoot {
public final static EasyMessageList COOLDOWN = EasyMessageList.builder()
.contents("&f您需要等待 &c%(time)秒 &f才可再次使用指令物品。")
.params("time").build();
public static class Restrictions {
public final static EasyMessageList INVALID = EasyMessageList.builder()
.contents("&c&l抱歉&f由于配置的时间限制错误该物品目前暂不可用。")
.build();
public final static EasyMessageList NOT_STARTED = EasyMessageList.builder()
.contents("&f该物品目前还到可使用的时间请在 &c%(time) &f后使用~")
.params("time")
.build();
public final static EasyMessageList EXPIRED = EasyMessageList.builder()
.contents("&c&l抱歉&f由于该物品已过最后使用期限故无法继续使用。")
.params("time")
.build();
}
}

View File

@ -1,19 +1,14 @@
package cc.carm.plugin.commanditem; package cc.carm.plugin.scriptitems;
import cc.carm.lib.easyplugin.EasyPlugin; import cc.carm.lib.easyplugin.EasyPlugin;
import cc.carm.lib.easyplugin.i18n.EasyPluginMessageProvider; import cc.carm.lib.easyplugin.i18n.EasyPluginMessageProvider;
import cc.carm.plugin.commanditem.command.CMDItemsCommand; import cc.carm.plugin.scriptitems.command.ScriptItemsCommand;
import cc.carm.plugin.commanditem.command.ItemSettingsAdapter; import cc.carm.plugin.scriptitems.configuration.PluginConfig;
import cc.carm.plugin.commanditem.command.ItemSettingsCompleter; import cc.carm.plugin.scriptitems.hooker.GHUpdateChecker;
import cc.carm.plugin.commanditem.configuration.PluginConfig; import cc.carm.plugin.scriptitems.listener.ItemListener;
import cc.carm.plugin.commanditem.hooker.GHUpdateChecker; import cc.carm.plugin.scriptitems.manager.ConfigManager;
import cc.carm.plugin.commanditem.item.ItemSettings; import cc.carm.plugin.scriptitems.manager.ItemsManager;
import cc.carm.plugin.commanditem.listener.ItemListener; import cc.carm.plugin.scriptitems.util.JarResourceUtils;
import cc.carm.plugin.commanditem.manager.ConfigManager;
import cc.carm.plugin.commanditem.manager.ItemsManager;
import cc.carm.plugin.commanditem.util.JarResourceUtils;
import me.saiintbrisson.bukkit.command.BukkitFrame;
import me.saiintbrisson.bukkit.command.executor.BukkitSchedulerExecutor;
import org.bstats.bukkit.Metrics; import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -32,13 +27,15 @@ public class Main extends EasyPlugin {
return instance; return instance;
} }
protected ConfigManager configManager;
protected ItemsManager itemsManager; protected ItemsManager itemsManager;
@Override @Override
protected boolean initialize() { protected boolean initialize() {
info("加载配置文件..."); info("加载配置文件...");
if (!ConfigManager.initConfig()) { this.configManager = new ConfigManager(this);
if (!configManager.initConfig()) {
severe("配置文件初始化失败,请检查。"); severe("配置文件初始化失败,请检查。");
setEnabled(false); setEnabled(false);
return false; return false;
@ -49,18 +46,14 @@ public class Main extends EasyPlugin {
this.itemsManager.initialize(); this.itemsManager.initialize();
info("注册指令..."); info("注册指令...");
BukkitFrame frame = new BukkitFrame(this); registerCommand("ScriptItems", new ScriptItemsCommand());
frame.setExecutor(new BukkitSchedulerExecutor(this));
frame.registerAdapter(ItemSettings.class, new ItemSettingsAdapter());
frame.registerCommands(new CMDItemsCommand());
frame.registerCompleter("commanditem.apply", new ItemSettingsCompleter());
info("注册监听器..."); info("注册监听器...");
regListener(new ItemListener()); regListener(new ItemListener());
if (PluginConfig.METRICS.get()) { if (PluginConfig.METRICS.get()) {
info("启用统计数据..."); info("启用统计数据...");
new Metrics(this, 14560); new Metrics(this, 14615);
} }
if (PluginConfig.CHECK_UPDATE.get()) { if (PluginConfig.CHECK_UPDATE.get()) {

View File

@ -0,0 +1,26 @@
package cc.carm.plugin.scriptitems;
import cc.carm.plugin.scriptitems.manager.ConfigManager;
import cc.carm.plugin.scriptitems.manager.ItemsManager;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import java.util.stream.IntStream;
public class ScriptItemsAPI {
public static ItemsManager getItemsManager() {
return Main.getInstance().itemsManager;
}
public static ConfigManager getConfigManager() {
return Main.getInstance().configManager;
}
public static boolean hasEmptySlot(Player player) {
return IntStream.range(0, 36)
.mapToObj(i -> player.getInventory().getItem(i))
.anyMatch(i -> i == null || i.getType() == Material.AIR);
}
}

View File

@ -0,0 +1,166 @@
package cc.carm.plugin.scriptitems.command;
import cc.carm.plugin.scriptitems.ScriptItemsAPI;
import cc.carm.plugin.scriptitems.configuration.PluginMessages;
import cc.carm.plugin.scriptitems.item.ItemSettings;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.StringUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
public class ScriptItemsCommand implements CommandExecutor, TabCompleter {
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command,
@NotNull String alias, @NotNull String[] args) {
if (args.length >= 1) {
String aim = args[0];
if (aim.equalsIgnoreCase("reload")) {
try {
ScriptItemsAPI.getConfigManager().reload();
sender.sendMessage("配置文件重载完成!");
} catch (Exception e) {
sender.sendMessage("配置文件重载失败!");
e.printStackTrace();
}
return true;
} else if (aim.equalsIgnoreCase("apply")) {
if (args.length < 2) {
PluginMessages.USAGE.send(sender);
return true;
}
if (!(sender instanceof Player)) {
PluginMessages.ONLY_PLAYER.send(sender);
return true;
}
ItemSettings settings = ScriptItemsAPI.getItemsManager().getItemSettings(args[1]);
if (settings == null) {
PluginMessages.NOT_EXISTS.send(sender);
return true;
}
Player player = (Player) sender;
ItemStack item = player.getInventory().getItemInMainHand();
if (item.getType() == Material.AIR) {
PluginMessages.USE_ITEM.send(sender);
return true;
}
ItemStack after = settings.applyItem(item);
player.getInventory().setItemInMainHand(after);
PluginMessages.APPLIED.send(sender);
return true;
} else if (aim.equalsIgnoreCase("give")) {
if (args.length < 3) {
PluginMessages.USAGE.send(sender);
return true;
}
Player player = Bukkit.getPlayer(args[1]);
if (player == null) {
PluginMessages.NOT_ONLINE.send(sender);
return true;
}
ItemSettings settings = ScriptItemsAPI.getItemsManager().getItemSettings(args[2]);
if (settings == null) {
PluginMessages.NOT_EXISTS.send(sender);
return true;
}
int amount = 1;
if (args.length >= 4) {
try {
amount = Integer.parseInt(args[3]);
} catch (Exception ignored) {
amount = -1;
}
}
if (amount < 1) {
PluginMessages.WRONG_AMOUNT.send(sender);
return true;
}
ItemStack item = settings.generateItem(amount);
if (item == null) {
PluginMessages.WRONG_ITEM.send(sender);
return true;
}
HashMap<Integer, ItemStack> remain = player.getInventory().addItem(item);
if (remain.isEmpty()) {
PluginMessages.GIVEN_ALL.send(sender, player, item.getAmount(), settings.getName());
} else {
int remainAmount = remain.values().stream().mapToInt(ItemStack::getAmount).sum();
PluginMessages.GIVEN_SOME.send(sender, player, item.getAmount() - remainAmount, settings.getName(), remainAmount);
}
return true;
} else {
PluginMessages.USAGE.send(sender);
return true;
}
} else {
PluginMessages.USAGE.send(sender);
return true;
}
}
@Nullable
@Override
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command,
@NotNull String alias, @NotNull String[] args) {
List<String> allCompletes = new ArrayList<>();
switch (args.length) {
case 1: {
allCompletes.add("help");
allCompletes.add("give");
if (sender instanceof Player) allCompletes.add("apply");
allCompletes.add("reload");
break;
}
case 2: {
String aim = args[args.length - 1];
if (aim.equalsIgnoreCase("give")) {
allCompletes = Bukkit.getOnlinePlayers().stream().map(HumanEntity::getName).collect(Collectors.toList());
} else if (aim.equalsIgnoreCase("apply")) {
allCompletes = new ArrayList<>(ScriptItemsAPI.getItemsManager().listItemSettings().keySet());
}
break;
}
case 3: {
String aim = args[args.length - 1];
if (aim.equalsIgnoreCase("give")) {
allCompletes = new ArrayList<>(ScriptItemsAPI.getItemsManager().listItemSettings().keySet());
}
break;
}
}
return allCompletes.stream()
.filter(s -> StringUtil.startsWithIgnoreCase(s, args[args.length - 1]))
.limit(10).collect(Collectors.toList());
}
}

View File

@ -1,4 +1,4 @@
package cc.carm.plugin.commanditem.configuration; package cc.carm.plugin.scriptitems.configuration;
import cc.carm.lib.easyplugin.configuration.values.ConfigValue; import cc.carm.lib.easyplugin.configuration.values.ConfigValue;

View File

@ -0,0 +1,76 @@
package cc.carm.plugin.scriptitems.configuration;
import cc.carm.lib.easyplugin.configuration.language.EasyMessageList;
import cc.carm.lib.easyplugin.configuration.language.MessagesRoot;
public class PluginMessages extends MessagesRoot {
public static final EasyMessageList USAGE = EasyMessageList.builder().contents(
"&2&l脚本指令 &f指令帮助",
"&8#&f give &a<玩家名> &a<箱子ID> &2[数量]",
"&8-&7 给予指定玩家指定数量的物品。",
"&8#&f apply &a<箱子ID>",
"&8-&7 为手中的物品直接绑定一个配置。",
"&8#&f reload",
"&8-&7 重载配置文件。"
).build();
public final static EasyMessageList COOLDOWN = EasyMessageList.builder()
.contents("&f您需要等待 &c%(time)秒 &f才可再次使用该物品。")
.params("time").build();
public final static EasyMessageList ONLY_PLAYER = EasyMessageList.builder()
.contents("&c抱歉只有作为玩家时才能使用该指令。").build();
public final static EasyMessageList USE_ITEM = EasyMessageList.builder()
.contents("&f请手持任意物品后再使用该指令。").build();
public final static EasyMessageList NOT_ONLINE = EasyMessageList.builder()
.contents("&f玩家 &a%(player) &f并不在线。")
.params("player").build();
public final static EasyMessageList NOT_EXISTS = EasyMessageList.builder()
.contents("&f脚本配置 &a%(id) &f并不存在。")
.params("id").build();
public final static EasyMessageList WRONG_AMOUNT = EasyMessageList.builder()
.contents("&f请输入正确的数量")
.build();
public final static EasyMessageList WRONG_ITEM = EasyMessageList.builder()
.contents("&f该脚本并未成功配置具体物品请使用 &a/ScriptItems apply &f来绑定到指定物品上或在配置文件中正确配置物品。")
.build();
public final static EasyMessageList GIVEN_ALL = EasyMessageList.builder()
.contents("&f您成功给予 &a%(player) &f了 &a%(amount) &f个 &a%(item) &f。")
.params("player", "amount", "item").build();
public final static EasyMessageList GIVEN_SOME = EasyMessageList.builder().contents(
"&f您成功给予 &a%(player) &f了 &a%(amount) &f个 &a%(item) &f。",
"&f但由于目标玩家背包已满仍有 &a%(remain) &f个 &a%(item) &f未成功放入背包。"
).params("player", "amount", "item", "remain").build();
public final static EasyMessageList APPLIED = EasyMessageList.builder()
.contents("&f已成功为手上物品绑定脚本。").build();
public static class Restrictions {
public final static EasyMessageList INVALID = EasyMessageList.builder()
.contents("&c&l抱歉&f由于配置的时间限制错误该物品目前暂不可用。")
.build();
public final static EasyMessageList NOT_STARTED = EasyMessageList.builder()
.contents("&f该物品目前还到可使用的时间请在 &c%(time) &f后使用~")
.params("time")
.build();
public final static EasyMessageList EXPIRED = EasyMessageList.builder()
.contents("&c&l抱歉&f由于该物品已过最后使用期限故无法继续使用。")
.params("time")
.build();
}
}

View File

@ -1,4 +1,4 @@
package cc.carm.plugin.commanditem.database; package cc.carm.plugin.scriptitems.database;
import cc.carm.lib.easyplugin.configuration.values.ConfigValue; import cc.carm.lib.easyplugin.configuration.values.ConfigValue;

View File

@ -1,4 +1,4 @@
package cc.carm.plugin.commanditem.database; package cc.carm.plugin.scriptitems.database;
import cc.carm.lib.easyplugin.configuration.values.ConfigValue; import cc.carm.lib.easyplugin.configuration.values.ConfigValue;

View File

@ -1,9 +1,9 @@
package cc.carm.plugin.commanditem.database; package cc.carm.plugin.scriptitems.database;
import cc.carm.lib.easysql.EasySQL; import cc.carm.lib.easysql.EasySQL;
import cc.carm.lib.easysql.api.SQLManager; import cc.carm.lib.easysql.api.SQLManager;
import cc.carm.plugin.commanditem.Main; import cc.carm.plugin.scriptitems.Main;
import cc.carm.plugin.commanditem.util.DatabaseTable; import cc.carm.plugin.scriptitems.util.DatabaseTable;
import java.sql.SQLException; import java.sql.SQLException;

View File

@ -1,4 +1,4 @@
package cc.carm.plugin.commanditem.hooker; package cc.carm.plugin.scriptitems.hooker;
import cc.carm.lib.githubreleases4j.GithubReleases4J; import cc.carm.lib.githubreleases4j.GithubReleases4J;

View File

@ -1,4 +1,4 @@
package cc.carm.plugin.commanditem.item; package cc.carm.plugin.scriptitems.item;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;

View File

@ -1,4 +1,4 @@
package cc.carm.plugin.commanditem.item; package cc.carm.plugin.scriptitems.item;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;

View File

@ -1,4 +1,4 @@
package cc.carm.plugin.commanditem.item; package cc.carm.plugin.scriptitems.item;
import cc.carm.lib.easyplugin.utils.MessageUtils; import cc.carm.lib.easyplugin.utils.MessageUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;

View File

@ -1,4 +1,4 @@
package cc.carm.plugin.commanditem.item; package cc.carm.plugin.scriptitems.item;
public enum ItemExecuteResult { public enum ItemExecuteResult {

View File

@ -1,8 +1,8 @@
package cc.carm.plugin.commanditem.item; package cc.carm.plugin.scriptitems.item;
import cc.carm.lib.easyplugin.configuration.language.EasyMessageList; import cc.carm.lib.easyplugin.configuration.language.EasyMessageList;
import cc.carm.lib.easysql.api.util.TimeDateUtils; import cc.carm.lib.easysql.api.util.TimeDateUtils;
import cc.carm.plugin.commanditem.configuration.PluginMessages; import cc.carm.plugin.scriptitems.configuration.PluginMessages;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;

View File

@ -1,8 +1,7 @@
package cc.carm.plugin.commanditem.item; package cc.carm.plugin.scriptitems.item;
import cc.carm.plugin.commanditem.CommandItemAPI; import cc.carm.plugin.scriptitems.ScriptItemsAPI;
import cc.carm.plugin.commanditem.manager.ConfigManager; import cc.carm.plugin.scriptitems.manager.ConfigManager;
import me.saiintbrisson.minecraft.command.argument.TypeAdapter;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -90,7 +89,7 @@ public class ItemSettings {
} }
public @NotNull ItemStack applyItem(ItemStack originalItem) { public @NotNull ItemStack applyItem(ItemStack originalItem) {
return CommandItemAPI.getItemsManager().applyTag(originalItem, identifier, UUID.randomUUID()); return ScriptItemsAPI.getItemsManager().applyTag(originalItem, identifier, UUID.randomUUID());
} }
public static @NotNull ItemSettings load(@NotNull File file) throws Exception { public static @NotNull ItemSettings load(@NotNull File file) throws Exception {

View File

@ -1,4 +1,4 @@
package cc.carm.plugin.commanditem.item; package cc.carm.plugin.scriptitems.item;
import cc.carm.lib.easyplugin.utils.ColorParser; import cc.carm.lib.easyplugin.utils.ColorParser;
import cc.carm.lib.easyplugin.utils.ItemStackFactory; import cc.carm.lib.easyplugin.utils.ItemStackFactory;

View File

@ -1,18 +1,18 @@
package cc.carm.plugin.commanditem.item; package cc.carm.plugin.scriptitems.item;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.UUID; import java.util.UUID;
public class CommandItem { public class ScriptItem {
@NotNull UUID uuid; @NotNull UUID uuid;
@NotNull ItemSettings settings; @NotNull ItemSettings settings;
@NotNull ItemStack itemStack; @NotNull ItemStack itemStack;
public CommandItem(@NotNull UUID uuid, @NotNull ItemSettings settings, @NotNull ItemStack itemStack) { public ScriptItem(@NotNull UUID uuid, @NotNull ItemSettings settings, @NotNull ItemStack itemStack) {
this.uuid = uuid; this.uuid = uuid;
this.settings = settings; this.settings = settings;
this.itemStack = itemStack; this.itemStack = itemStack;

View File

@ -1,12 +1,12 @@
package cc.carm.plugin.commanditem.listener; package cc.carm.plugin.scriptitems.listener;
import cc.carm.plugin.commanditem.CommandItemAPI; import cc.carm.plugin.scriptitems.ScriptItemsAPI;
import cc.carm.plugin.commanditem.configuration.PluginConfig; import cc.carm.plugin.scriptitems.configuration.PluginConfig;
import cc.carm.plugin.commanditem.configuration.PluginMessages; import cc.carm.plugin.scriptitems.configuration.PluginMessages;
import cc.carm.plugin.commanditem.item.CommandItem; import cc.carm.plugin.scriptitems.item.ScriptItem;
import cc.carm.plugin.commanditem.item.ItemActionGroup; import cc.carm.plugin.scriptitems.item.ItemActionGroup;
import cc.carm.plugin.commanditem.item.ItemRestrictions; import cc.carm.plugin.scriptitems.item.ItemRestrictions;
import cc.carm.plugin.commanditem.item.ItemSettings; import cc.carm.plugin.scriptitems.item.ItemSettings;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Item; import org.bukkit.entity.Item;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -38,8 +38,8 @@ public class ItemListener implements Listener {
if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) return; if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) return;
ItemStack item = event.getPlayer().getInventory().getItemInMainHand(); ItemStack item = event.getPlayer().getInventory().getItemInMainHand();
CommandItem commandItem = CommandItemAPI.getItemsManager().parseCommandItem(item); ScriptItem scriptItem = ScriptItemsAPI.getItemsManager().parseItem(item);
if (commandItem == null) return; if (scriptItem == null) return;
event.setCancelled(true); // 阻止事件执行 event.setCancelled(true); // 阻止事件执行
Player player = event.getPlayer(); Player player = event.getPlayer();
@ -49,7 +49,7 @@ public class ItemListener implements Listener {
} }
updateTime(player.getUniqueId()); updateTime(player.getUniqueId());
ItemSettings settings = commandItem.getSettings(); ItemSettings settings = scriptItem.getSettings();
// 检查物品的相关使用限制是否满足要求 // 检查物品的相关使用限制是否满足要求
ItemRestrictions.CheckResult result = settings.getRestrictions().check(); ItemRestrictions.CheckResult result = settings.getRestrictions().check();
@ -73,7 +73,7 @@ public class ItemListener implements Listener {
@EventHandler @EventHandler
public void onCraft(CraftItemEvent event) { public void onCraft(CraftItemEvent event) {
boolean shouldCancel = Arrays.stream(event.getInventory().getMatrix()) boolean shouldCancel = Arrays.stream(event.getInventory().getMatrix())
.anyMatch(matrix -> CommandItemAPI.getItemsManager().isCommandItem(matrix)); .anyMatch(matrix -> ScriptItemsAPI.getItemsManager().isScriptItem(matrix));
if (shouldCancel) event.setCancelled(true); if (shouldCancel) event.setCancelled(true);
} }
@ -88,7 +88,7 @@ public class ItemListener implements Listener {
if (event.getEntity().getType() == EntityType.PLAYER) return; if (event.getEntity().getType() == EntityType.PLAYER) return;
ItemStack item = event.getItem().getItemStack(); ItemStack item = event.getItem().getItemStack();
if (CommandItemAPI.getItemsManager().isCommandItem(item)) { if (ScriptItemsAPI.getItemsManager().isScriptItem(item)) {
event.setCancelled(true); event.setCancelled(true);
} }
} }
@ -103,7 +103,7 @@ public class ItemListener implements Listener {
if (event.getEntity().getType() != EntityType.DROPPED_ITEM) return; if (event.getEntity().getType() != EntityType.DROPPED_ITEM) return;
Item droppedItem = ((org.bukkit.entity.Item) event.getEntity()); Item droppedItem = ((org.bukkit.entity.Item) event.getEntity());
ItemStack item = droppedItem.getItemStack(); ItemStack item = droppedItem.getItemStack();
if (CommandItemAPI.getItemsManager().isCommandItem(item)) { if (ScriptItemsAPI.getItemsManager().isScriptItem(item)) {
event.setCancelled(true); event.setCancelled(true);
} }
} }

View File

@ -1,11 +1,11 @@
package cc.carm.plugin.commanditem.manager; package cc.carm.plugin.scriptitems.manager;
import cc.carm.lib.easyplugin.configuration.file.FileConfig; import cc.carm.lib.easyplugin.configuration.file.FileConfig;
import cc.carm.lib.easyplugin.configuration.language.MessagesConfig; import cc.carm.lib.easyplugin.configuration.language.MessagesConfig;
import cc.carm.lib.easyplugin.configuration.language.MessagesInitializer; import cc.carm.lib.easyplugin.configuration.language.MessagesInitializer;
import cc.carm.plugin.commanditem.Main; import cc.carm.plugin.scriptitems.configuration.PluginMessages;
import cc.carm.plugin.commanditem.configuration.PluginMessages;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -17,13 +17,19 @@ import java.util.function.Function;
public class ConfigManager { public class ConfigManager {
private static FileConfig config; private final JavaPlugin plugin;
private static MessagesConfig messageConfig;
public static boolean initConfig() { private FileConfig config;
private MessagesConfig messageConfig;
public ConfigManager(JavaPlugin plugin) {
this.plugin = plugin;
}
public boolean initConfig() {
try { try {
ConfigManager.config = new FileConfig(Main.getInstance()); this.config = new FileConfig(plugin);
ConfigManager.messageConfig = new MessagesConfig(Main.getInstance()); this.messageConfig = new MessagesConfig(plugin);
FileConfig.pluginConfiguration = () -> config; FileConfig.pluginConfiguration = () -> config;
FileConfig.messageConfiguration = () -> messageConfig; FileConfig.messageConfiguration = () -> messageConfig;
@ -36,28 +42,22 @@ public class ConfigManager {
} }
} }
public static FileConfig getPluginConfig() { public FileConfig getPluginConfig() {
return config; return config;
} }
public static FileConfig getMessageConfig() { public FileConfig getMessageConfig() {
return messageConfig; return messageConfig;
} }
public static void reload() { public void reload() throws Exception {
try { getPluginConfig().reload();
getPluginConfig().reload(); getMessageConfig().reload();
getMessageConfig().reload();
} catch (Exception ignored) {
}
} }
public static void saveConfig() { public void saveConfig() throws Exception {
try { getPluginConfig().save();
getPluginConfig().save(); getMessageConfig().save();
getMessageConfig().save();
} catch (Exception ignored) {
}
} }
public static <V> Map<String, V> readStringMap(@Nullable ConfigurationSection section, public static <V> Map<String, V> readStringMap(@Nullable ConfigurationSection section,

View File

@ -1,9 +1,9 @@
package cc.carm.plugin.commanditem.manager; package cc.carm.plugin.scriptitems.manager;
import cc.carm.plugin.commanditem.Main; import cc.carm.plugin.scriptitems.Main;
import cc.carm.plugin.commanditem.item.CommandItem; import cc.carm.plugin.scriptitems.item.ItemSettings;
import cc.carm.plugin.commanditem.item.ItemSettings; import cc.carm.plugin.scriptitems.item.ScriptItem;
import cc.carm.plugin.commanditem.util.JarResourceUtils; import cc.carm.plugin.scriptitems.util.JarResourceUtils;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
@ -32,7 +32,7 @@ public class ItemsManager {
this.idKey = new NamespacedKey(Main.getInstance(), "id"); this.idKey = new NamespacedKey(Main.getInstance(), "id");
this.uuidKey = new NamespacedKey(Main.getInstance(), "uuid"); this.uuidKey = new NamespacedKey(Main.getInstance(), "uuid");
loadItems(); loadItems();
Main.info("成功加载了 " + items.size() + "指令物品。"); Main.info("成功加载了 " + items.size() + "脚本物品。");
} }
public void loadItems() { public void loadItems() {
@ -105,7 +105,7 @@ public class ItemsManager {
return originalItem; return originalItem;
} }
public @Nullable CommandItem parseCommandItem(@Nullable ItemStack item) { public @Nullable ScriptItem parseItem(@Nullable ItemStack item) {
if (item == null || item.getType() == Material.AIR) return null; if (item == null || item.getType() == Material.AIR) return null;
if (!item.hasItemMeta()) return null; if (!item.hasItemMeta()) return null;
ItemMeta meta = item.getItemMeta(); ItemMeta meta = item.getItemMeta();
@ -116,10 +116,10 @@ public class ItemsManager {
if (settingsID == null || itemUUID == null) return null; if (settingsID == null || itemUUID == null) return null;
ItemSettings settings = getItemSettings(settingsID); ItemSettings settings = getItemSettings(settingsID);
if (settings == null) return null; if (settings == null) return null;
return new CommandItem(UUID.fromString(itemUUID), settings, item); return new ScriptItem(UUID.fromString(itemUUID), settings, item);
} }
public boolean isCommandItem(ItemStack item) { public boolean isScriptItem(ItemStack item) {
return item.hasItemMeta() && item.getItemMeta() != null return item.hasItemMeta() && item.getItemMeta() != null
&& item.getItemMeta().getCustomTagContainer().hasCustomTag(idKey, ItemTagType.STRING); && item.getItemMeta().getCustomTagContainer().hasCustomTag(idKey, ItemTagType.STRING);
} }

View File

@ -1,4 +1,4 @@
package cc.carm.plugin.commanditem.util; package cc.carm.plugin.scriptitems.util;
import cc.carm.lib.easysql.api.SQLManager; import cc.carm.lib.easysql.api.SQLManager;
import cc.carm.lib.easysql.api.action.PreparedSQLUpdateAction; import cc.carm.lib.easysql.api.action.PreparedSQLUpdateAction;

View File

@ -1,4 +1,4 @@
package cc.carm.plugin.commanditem.util; package cc.carm.plugin.scriptitems.util;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;

View File

@ -1,4 +1,5 @@
&c ___ _ &4___ _ &a ____ _ __ &2______
&c / __|___ _ __ _ __ __ _ _ _ __| |&4_ _| |_ ___ _ __ &a / __/_______(_)__ / /_&2/ _/ /____ __ _ ___
&c| (__/ _ \ ' \| ' \/ _` | ' \/ _` |&4| || _/ -_) ' \ &a _\ \/ __/ __/ / _ \/ __/&2/ // __/ -_) ' \(_-<
&c \___\___/_|_|_|_|_|_\__,_|_||_\__,_|&4___|\__\___|_|_|_| &a/___/\__/_/ /_/ .__/\__/&2___/\__/\__/_/_/_/___/
&a /_/

View File

@ -1,5 +1,5 @@
main: cc.carm.plugin.commanditem.Main main: cc.carm.plugin.scriptitems.Main
name: CommandItem name: ScriptItems
version: ${project.version} version: ${project.version}
description: ${project.description} description: ${project.description}
@ -11,4 +11,11 @@ authors:
softdepend: softdepend:
- PlaceholderAPI - PlaceholderAPI
api-version: 1.13 api-version: 1.13
commands:
"ScriptItems":
aliases: "sitems"
usage: "/ScriptItems help"
description: "ScriptItems 的主指令。"
permission: "ScriptItems.admin"