小编ZKF*_*ZKF的帖子

设计Bukkit插件框架 - 通过注释处理子命令

有些话介绍情况.

上下文:为了简化我的工作流程,同时编写Bukkit插件(Minecraft服务器基本上是事实上的API,直到Sponge实现它),我决定为自己整理一个"迷你框架",不必重复同样的任务一遍又一遍.(另外,我正在尝试将其设计为不太依赖Bukkit,所以我可以通过更改我的实现继续在Sponge上使用它)

意图:坦率地说,Bukkit中的命令处理是一团糟.你必须在YML文件中定义你的root命令(例如,你想运行/测试ingame,"test"是root)(而不是调用某种工厂?),子命令处理是不存在的,实现细节是隐藏所以产生100%可靠的结果很难.这是Bukkit唯一让我恼火的部分,它是我决定编写框架的主要发起人.

目标:抽象出令人讨厌的Bukkit命令处理,并将其替换为干净的东西.


努力:

这将是一个很长的段落,我将解释最初如何实现Bukkit命令处理,因为这将更深入地理解重要的命令参数等.

连接到Minecraft服务器的任何用户都可以使用"/"开始聊天消息,这将导致它被解析为命令.

举一个例子,Minecraft中的任何玩家都有一个生命栏,默认设置为10个心脏,并在受到伤害时耗尽.服务器可以随时设置最大和当前"心脏"(读取:运行状况).

让我们说我们想要定义这样的命令:

/sethealth <current/maximum> <player or * for all> <value>
Run Code Online (Sandbox Code Playgroud)

要开始实现这个......哦,小男孩.如果你喜欢干净的代码,我会说跳过这个...我会评论解释,每当我觉得Bukkit做错了.

强制性plugin.yml:

# Full name of the file extending JavaPlugin
# My best guess? Makes lazy-loading the plugin possible
# (aka: just load classes that are actually used by replacing classloader methods)
main: com.gmail.zkfreddit.sampleplugin.SampleJavaPlugin

# Name of the plugin.
# Why not have this as an annotation on the plugin class?
name: SamplePlugin

# Version of the plugin. Why …
Run Code Online (Sandbox Code Playgroud)

java api command frameworks bukkit

7
推荐指数
1
解决办法
1741
查看次数

标签 统计

api ×1

bukkit ×1

command ×1

frameworks ×1

java ×1