增加一些动作/结构并且补注释:( 呜呜呜补注释好累头号疼
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
package top.sunsetlab.utils;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import top.sunsetlab.PluginMain;
|
||||
import top.sunsetlab.actions.IActionBase;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
@@ -14,11 +16,19 @@ import java.lang.reflect.InvocationTargetException;
|
||||
class ActionData {
|
||||
String id;
|
||||
String classname;
|
||||
boolean sync;
|
||||
}
|
||||
|
||||
/**
|
||||
* Json定义的动作
|
||||
*/
|
||||
public class JsonAction {
|
||||
private final ActionData data;
|
||||
|
||||
/**
|
||||
* 构造器
|
||||
* @param location 资源文件(json)的位置
|
||||
*/
|
||||
public JsonAction(String location) {
|
||||
InputStream is = JsonAction.class.getResourceAsStream("/" + location);
|
||||
if (is == null) {
|
||||
@@ -29,15 +39,32 @@ public class JsonAction {
|
||||
data = gson.fromJson(br, ActionData.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用动作
|
||||
* @param location 调用位置
|
||||
* @param caller 执行者
|
||||
* @return 动作是否成功运行,sync动作始终为true
|
||||
*/
|
||||
public boolean run(Location location, Player caller) {
|
||||
try {
|
||||
// 通过反射加载动作类
|
||||
Class<?> clazz = Class.forName(data.classname);
|
||||
if (!IActionBase.class.isAssignableFrom(clazz)) {
|
||||
throw new RuntimeException(data.classname + " is not a Action");
|
||||
}
|
||||
// 获取构造器
|
||||
Constructor<?> constructor = clazz.getConstructor();
|
||||
IActionBase action = (IActionBase) constructor.newInstance();
|
||||
return action.call(location, caller);
|
||||
if (data.sync) {
|
||||
// 在Minecraft线程内执行,一般用于世界交互
|
||||
Bukkit.getScheduler().runTask(PluginMain.plugin, () -> {
|
||||
action.call(location, caller);
|
||||
});
|
||||
return true;
|
||||
}else {
|
||||
// 异步执行
|
||||
return action.call(location, caller);
|
||||
}
|
||||
}catch (ClassNotFoundException
|
||||
| NoSuchMethodException
|
||||
| SecurityException
|
||||
@@ -51,6 +78,10 @@ public class JsonAction {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取动作id
|
||||
* @return 动作id
|
||||
*/
|
||||
public String getId() {
|
||||
return data.id;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user