This commit is contained in:
cyberpwn 2021-08-16 17:55:54 -04:00
parent 4ae5b49764
commit d67cce4184

View File

@ -30,12 +30,9 @@ import org.bukkit.command.Command;
import org.bukkit.command.*;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.permissions.PermissionDefault;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredListener;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
@ -43,11 +40,9 @@ import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
import java.net.URLClassLoader;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.SortedSet;
@SuppressWarnings("EmptyMethod")
public abstract class VolmitPlugin extends JavaPlugin implements Listener {
@ -55,9 +50,6 @@ public abstract class VolmitPlugin extends JavaPlugin implements Listener {
private KMap<KList<String>, VirtualCommand> commands;
private KList<MortarCommand> commandCache;
private KList<MortarPermission> permissionCache;
private KMap<String, IController> controllers;
private KList<IController> cachedControllers;
private KMap<Class<? extends IController>, IController> cachedClassControllers;
public File getJarFile() {
return getFile();
@ -83,15 +75,12 @@ public abstract class VolmitPlugin extends JavaPlugin implements Listener {
registerInstance();
registerPermissions();
registerCommands();
registerControllers();
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, this::tickControllers, 0, 0);
J.a(this::outputInfo);
registerListener(this);
start();
}
public void unregisterAll() {
stopControllers();
unregisterListeners();
unregisterCommands();
unregisterPermissions();
@ -260,16 +249,6 @@ public abstract class VolmitPlugin extends JavaPlugin implements Listener {
unregisterAll();
}
private void tickControllers() {
if (bad) {
return;
}
for (IController i : getControllers()) {
tickController(i);
}
}
private void tickController(IController i) {
if (bad) {
return;
@ -291,62 +270,6 @@ public abstract class VolmitPlugin extends JavaPlugin implements Listener {
}
}
public KList<IController> getControllers() {
if (bad) {
return new KList<>();
}
return cachedControllers;
}
private void registerControllers() {
if (bad) {
return;
}
controllers = new KMap<>();
cachedClassControllers = new KMap<>();
for (Field i : getClass().getDeclaredFields()) {
if (i.isAnnotationPresent(Control.class)) {
try {
i.setAccessible(true);
IController pc = (IController) i.getType().getConstructor().newInstance();
registerController(pc);
i.set(this, pc);
v("Registered " + pc.getName() + " (" + i.getName() + ")");
} catch (IllegalArgumentException | IllegalAccessException | InstantiationException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
w("Failed to register controller (field " + i.getName() + ")");
e.printStackTrace();
Iris.reportError(e);
}
}
}
cachedControllers = controllers.v();
}
public IController getController(Class<? extends IController> c) {
return cachedClassControllers.get(c);
}
private void registerController(IController pc) {
if (bad) {
return;
}
controllers.put(pc.getName(), pc);
cachedClassControllers.put(pc.getClass(), pc);
registerListener(pc);
try {
pc.start();
v("Started " + pc.getName());
} catch (Throwable e) {
w("Failed to start controller " + pc.getName());
e.printStackTrace();
Iris.reportError(e);
}
}
private void registerInstance() {
if (bad) {
return;
@ -569,23 +492,6 @@ public abstract class VolmitPlugin extends JavaPlugin implements Listener {
}
}
private void stopControllers() {
if (bad) {
return;
}
for (IController i : controllers.v()) {
try {
unregisterListener(i);
i.stop();
v("Stopped " + i.getName());
} catch (Throwable e) {
Iris.reportError(e);
w("Failed to stop controller " + i.getName());
e.printStackTrace();
}
}
}
public File getDataFile(String... strings) {
File f = new File(getDataFolder(), new KList<>(strings).toString(File.separator));
f.getParentFile().mkdirs();