这是我在开始新项目时一直在努力解决的问题。所以我决定在这里问一下,看看你认为什么是组织这个项目的最佳方式,希望我能从中学到一些东西。
这是该项目的基本描述(我使用gradle btw并用java编写)。
我需要制作一个在多个平台上工作的插件,例如spigot、bungeecord和velocity,这三个平台都有自己的api,我需要使用这些api使插件在每个平台上工作。这个项目是一个播音器插件,允许用户设置可配置的播音器,向连接到服务器的玩家发送消息。
我的总体思路是:
公共模块:存储可应用于其他三个模块的大部分逻辑的地方。
插口模块:使用公共模块的逻辑形式并对其进行整形,以便插口能够理解它。
蹦极线模块:使用逻辑形式的公共模块和塑造它,使蹦极线可以理解它。
velocity模块:使用公共模块的逻辑形式并对其进行整形,以便velocity能够理解它。
project应该具备以下几点:
具有逻辑加载和启用插件的插件主类(每个api都有自己的类,该类扩展了用于启动插件的主类)。
文件管理类,该类将从yaml文件加载配置,如播音员的消息、常规设置(每个api都有自己的用于读取yaml文件的类)。
announcer生成器和处理类,这些类将使用文件管理类读取announcer配置文件,并将announcers构建为对象和处理程序,将其发送给播放器等(每个api都有自己与播放器交互的方式)。
命令系统,具有用户和玩家执行的命令逻辑(每个api都有自己的处理命令的逻辑)。
所以我的问题是,如何用最少的可重复代码来构建这个项目,复制基本上对每个api做相同事情的类,并且保持良好的代码可读性?
我现在有一个工作版本的龙头,但它变成了一个完全混乱,当我开始添加对蹦极绳的支持。
编辑:我遇到的一个比较常见的问题的例子:
插口api Bukkit
拥有 getServer()
返回的方法 Server
对象。橡皮筋api ProxiedServer
拥有 getInstance()
返回的方法 ProxiedServer
对象。
我有这样的想法:
public interface MyPlugin {
? getServer();
}
//extends JavaPlugin is required by Spigot API.
public class SpigotPlugin extends JavaPlugin implements MyPlugin {
@Overrride
public ? getServer() {
return Bukkit.getServer();
}
}
//extends Plugin is required by Bungeecord API.
public class BungeeCordPlugin extends Plugin implements MyPlugin {
@Overrride
public ? getServer() {
return ProxiedServer.getInstance();
}
}
它需要放什么来代替 ?
获取正确的服务器示例(我不能编辑 ProxiedServer
或者 Bukkit
课程)?
暂无答案!
目前还没有任何答案,快来回答吧!