|
|
2 years ago | |
|---|---|---|
| .github | 2 years ago | |
| BasicFunctions | 2 years ago | |
| Economy | 2 years ago | |
| Home | 2 years ago | |
| MysqlConnector | 2 years ago | |
| Sidebar | 2 years ago | |
| UltiTools-API | 2 years ago | |
| Versions | 2 years ago | |
| .gitignore | 3 years ago | |
| LICENSE | 3 years ago | |
| README.md | 2 years ago | |
README.md
UltiTools 6
给各位服主的介绍
UltiTools是一个高层的基础插件,包含了很多GUI和高级的玩法,而非仅仅所谓的“基础”。
插件本身的详细介绍,请看mcbbs的帖子。
[综合]UltiTools —— 远程背包|GUI登陆|GUI邮箱|礼包|头显|侧边栏~[1.8.x-1.20.x]
用户使用文档
给开发者的介绍
希望我的插件能够帮到你的插件开发!
注解驱动的
UltiTools-API改变了插件开发的方式,通过引入注解等高级语法,让你的插件开发更加高效。
通过使用UltiTools-API,你再也无需手动注册指令和监听器,只需要在你的指令类和监听器类上添加注解,UltiTools-API会自动帮你注册。
你也可以像写一个控制器一样,再也不需要为一个命令做繁琐的判断,只需要在你的指令方法上添加注解,UltiTools-API会自动帮你将指令匹配到对应的方法上。
@CmdTarget(CmdTarget.CmdTargetType.PLAYER)
@CmdExecutor(alias = {"lore"}, manualRegister = true, permission = "ultikits.tools.command.lore", description = "物品Lore编辑功能")
public class LoreCommands extends AbstractCommendExecutor {
@CmdMapping(format = "add <lore...>")
public void addLore(@CmdSender Player player, @CmdParam("lore...") String[] lore) {
...
}
@CmdMapping(format = "delete <position>")
public void deleteLore(@CmdSender Player player, @CmdParam("position") int position) {
...
}
@CmdMapping(format = "edit <position> <lore...>")
public void editLore(@CmdSender Player player, @CmdParam("position") int position, @CmdParam("lore...") String[] lore) {
...
}
@Override
protected void handleHelp(CommandSender sender) {
sender.sendMessage(ChatColor.RED + "lore add <内容>" + ChatColor.GRAY + " - " + BasicFunctions.getInstance().i18n("添加Lore"));
sender.sendMessage(ChatColor.RED + "lore delete <行数>" + ChatColor.GRAY + " - " + BasicFunctions.getInstance().i18n("删除Lore"));
sender.sendMessage(ChatColor.RED + "lore edit <行数> <内容>" + ChatColor.GRAY + " - " + BasicFunctions.getInstance().i18n("编辑Lore"));
}
}
数据存储方面,UltiTools提供了Mysql和Json的封装API,让你无需考虑用户会使用哪种数据存储方式。
例如
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Table("economy_accounts")
public class AccountEntity extends AbstractDataEntity {
@Column("name")
private String name;
@Column(value = "balance", type = "FLOAT")
private double balance;
@Column("owner")
private String owner;
}
//检查玩家账户是否存在
public boolean playerHasAccount(UUID player, String name) {
DataOperator<AccountEntity> dataOperator = UltiEconomy.getInstance().getDataOperator(AccountEntity.class);
return dataOperator.exist(
WhereCondition.builder().column("name").value(name).build(),
WhereCondition.builder().column("owner").value(player.toString()).build()
);
}
配置文件方面,UltiTools让你可以像操作对象一样读取配置文件。
例如
@Getter
@Setter
@ConfigEntity(path = "config/config.yml")
public class EcoConfig extends AbstractConfigEntity {
@ConfigEntry(path = "useThirdPartEconomy", comment = "是否使用其他的经济插件作为基础(即仅使用本插件的银行功能)")
private boolean useThirdPartEconomy = false;
@ConfigEntry(path = "enableInterest", comment = "是否开启利息")
private boolean enableInterest = true;
@ConfigEntry(path = "interestRate", comment = "利率,利息 = 利率 × 本金")
private double interestRate = 0.0003;
@ConfigEntry(path = "interestTime", comment = "利息发放间隔(分钟)")
private int interestTime = 30;
@ConfigEntry(path = "initial_money", comment = "玩家初始货币数量")
private double initMoney = 1000;
@ConfigEntry(path = "op_operate_money", comment = "服务器管理员是否能够增减玩家货币")
private boolean opOperateMoney = false;
@ConfigEntry(path = "currency_name", comment = "货币名称")
private String currencyName = "金币";
@ConfigEntry(path = "server_trade_log", comment = "是否开启服务器交易记录")
private boolean enableTradeLog = false;
public EcoConfig(String configFilePath) {
super(configFilePath);
}
}
// 获取经济插件的配置文件,并且读取利息率
EcoConfig config = UltiEconomy.getInstance().getConfig(EcoConfig.class);
double intrestRate = config.getInterestRate();
IOC容器管理
UltiTools-API提供了一个Spring IOC容器,它可以帮你管理你的插件中的所有Bean,并且自动注入依赖。
// @Service将类型标记为一个Bean,UltiTools-API会自动扫描并注册
@Service
public class BanPlayerService {
...
public void unBanPlayer(OfflinePlayer player) {
DataOperator<BanedUserData> dataOperator = BasicFunctions.getInstance().getDataOperator(BanedUserData.class);
dataOperator.delById(player.getUniqueId().toString());
}
}
@CmdTarget(CmdTarget.CmdTargetType.BOTH)
@CmdExecutor(permission = "ultikits.ban.command.all", description = "封禁功能", alias = {"uban"}, manualRegister = true)
public class BanCommands extends AbstractCommendExecutor {
// 使用@Autowired注解,UltiTools-API会自动注入依赖
@Autowired
private BanPlayerService banPlayerService;
@CmdMapping(format = "unban <player>")
public void unBanPlayer(@CmdSender CommandSender sender, @CmdParam("player") String player) {
banPlayerService.unBanPlayer(Bukkit.getOfflinePlayer(player));
sender.sendMessage(BasicFunctions.getInstance().i18n("§a解封成功"));
}
...
}
如果你不喜欢自动注入,或者无法使用自动注入,你也可以手动获取Bean。
BanPlayerService banPlayerService = getContext().getBean(BanPlayerService.class);
提供超多的现代化依赖库
UltiTools-API提供了Hutool的部分功能,包括了大量的工具类。
GUI界面方面,UltiTools提供了obliviate-invs的API,方便你快速的开发GUI界面。
ObliviateInvs — Highly efficient modular GUI library
UltiTools也提供了Adventure的API。
快速开始
更多详细文档请查看 UltiTools API 文档
以下是简单的快速开始
快速开始
快速开始
首先将UltiTools-API依赖加入到你的项目
使用Maven
<dependency>
<groupId>com.ultikits</groupId>
<artifactId>UltiTools-API</artifactId>
<version>{VERSION}</version>
</dependency>
使用Gradle
implementation 'com.ultikits:UltiTools-API:{VERSION}'
开始之前请在resources文件夹下新建一个plugin.yml文件,内容如下
# 插件名称
name: TestPlugin
# 插件版本
version: '${project.version}'
# 插件主类
main: com.test.plugin.MyPlugin
# 插件用到的UltiTools-API版本,例如6.0.0就是600
api-version: 600
# 插件作者
authors: [ wisdomme ]
新建一个config文件夹,里面可以按照你的需求放入你的插件配置文件。这些配置文件会被原封不动的放入UltiTools插件的集体配置文件夹中展示给用户。
简单开发
新建一个主类继承UltiToolsPlugin,类似传统的Spigot插件,UltiTools插件也需要重写启动和关闭方法。
但是UltiToolsPlugin增加了一个可选的UltiToolsPlugin#reloadSelf()方法,用于插件重载时执行。
public class MyPlugin extends UltiToolsPlugin {
@Override
public boolean registerSelf() {
// 插件启动时执行
return true;
}
@Override
public void unregisterSelf() {
// 插件关闭时执行
}
@Override
public void reloadSelf() {
// 插件重载时执行
}
}
这样就已经完成了一个什么功能都没有的UltiTools插件。然后你可以在UltiToolsPlugin#registerSelf()方法中注册你的监听器和指令。
public class MyPlugin extends UltiToolsPlugin {
@Override
public boolean registerSelf() {
// 注册一个Test指令,权限为permission.test,指令为test
// 无需在Plugin.yml中注册指令
getCommandManager().register(new TestCommands(), "permission.test", "示例功能", "test");
// 注册监听器
getListenerManager().register(this, new TestListener());
return true;
}
}
然后你可以在主类中添加你的配置文件,UltiTools会自动加载配置文件。
public class MyPlugin extends UltiToolsPlugin {
@Override
public boolean registerSelf() {
// 注册一个Test指令,权限为permission.test,指令为test
// 无需在Plugin.yml中注册指令
getCommandManager().register(new TestCommands(), "permission.test", "示例功能", "test");
// 注册监听器
getListenerManager().register(this, new TestListener());
// 注册配置文件
getConfigManager().register(this, new TestConfig("config/config.yml"));
return true;
}
}
或者你可以重写UltiToolsPlugin#getAllConfigs()方法,将所有的配置文件注册放在这里。
@Override
public List<AbstractConfigEntity> getAllConfigs() {
return Arrays.asList(
new TestConfig("config/config.yml")
);
}
WakaTime 统计
开发时间线统计
点击查看统计数据
主要贡献者
| 贡献者 | 描述 |
|---|---|
| @wisdommen | 创始人,UltiKits套件作者 |
| @qianmo2233 | UltiTools&UltiCore开发者,UltiKits开发文档主要维护者 |
| @Shpries | UltiTools开发者,UltiTools使用文档主要维护者 |
| @DevilJueChen | UltiKits问题&漏洞&建议反馈 |
| 拾柒 | 美工 |
发现问题?想提建议?
鸣谢
| 记录了我们开发途中的每一刻 | |
| 地表最强 Java IDE 助力愉悦开发体验 | |
| 帮助解决了许多重复且枯燥的工作 | |
| 为插件带来了许多黑科技 | |
| 官方构建工具 | |
| 官方内置 HTTP 服务端 |