mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-04-05 23:36:12 +00:00
Merge remote-tracking branch 'upstream/master' into DecreeCommands
This commit is contained in:
@@ -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;
|
||||
@@ -525,16 +448,12 @@ public abstract class VolmitPlugin extends JavaPlugin implements Listener {
|
||||
}
|
||||
|
||||
public void registerListener(Listener l) {
|
||||
if (bad) {
|
||||
return;
|
||||
}
|
||||
Iris.debug("Register Listener " + l.getClass().getSimpleName());
|
||||
Bukkit.getPluginManager().registerEvents(l, this);
|
||||
}
|
||||
|
||||
public void unregisterListener(Listener l) {
|
||||
if (bad) {
|
||||
return;
|
||||
}
|
||||
Iris.debug("Register Listener " + l.getClass().getSimpleName());
|
||||
HandlerList.unregisterAll(l);
|
||||
}
|
||||
|
||||
@@ -569,23 +488,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();
|
||||
|
||||
@@ -360,11 +360,9 @@ public class VolmitSender implements CommandSender {
|
||||
return s.spigot();
|
||||
}
|
||||
|
||||
private String pickRandoms(int max, VirtualDecreeCommand i)
|
||||
{
|
||||
private String pickRandoms(int max, VirtualDecreeCommand i) {
|
||||
KList<String> m = new KList<>();
|
||||
for(int ix = 0; ix < max; ix++)
|
||||
{
|
||||
for (int ix = 0; ix < max; ix++) {
|
||||
m.add((i.isNode()
|
||||
? (i.getNode().getParameters().isNotEmpty())
|
||||
? "<#aebef2>✦ <#5ef288>"
|
||||
@@ -385,8 +383,7 @@ public class VolmitSender implements CommandSender {
|
||||
}
|
||||
|
||||
|
||||
public void sendHeader(String name, int overrideLength)
|
||||
{
|
||||
public void sendHeader(String name, int overrideLength) {
|
||||
int len = overrideLength;
|
||||
int h = name.length() + 2;
|
||||
String s = Form.repeat(" ", len - h - 4);
|
||||
@@ -395,37 +392,28 @@ public class VolmitSender implements CommandSender {
|
||||
String sf = "[";
|
||||
String se = "]";
|
||||
|
||||
if(name.trim().isEmpty())
|
||||
{
|
||||
sendMessageRaw("<font:minecraft:uniform><strikethrough><gradient:#34eb6b:#32bfad>" + sf + s + "<reset><font:minecraft:uniform><strikethrough><gradient:#32bfad:#34eb6b>" + s + se);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if (name.trim().isEmpty()) {
|
||||
sendMessageRaw("<font:minecraft:uniform><strikethrough><gradient:#34eb6b:#32bfad>" + sf + s + "<reset><font:minecraft:uniform><strikethrough><gradient:#32bfad:#34eb6b>" + s + se);
|
||||
} else {
|
||||
sendMessageRaw("<font:minecraft:uniform><strikethrough><gradient:#34eb6b:#32bfad>" + sf + s + si + "<reset> <gradient:#3299bf:#323bbf>" + name + "<reset> <font:minecraft:uniform><strikethrough><gradient:#32bfad:#34eb6b>" + so + s + se);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendHeader(String name)
|
||||
{
|
||||
sendHeader(name,46);
|
||||
public void sendHeader(String name) {
|
||||
sendHeader(name, 46);
|
||||
}
|
||||
|
||||
public void sendDecreeHelp(VirtualDecreeCommand v) {
|
||||
int m = v.getNodes().size();
|
||||
|
||||
if(v.getNodes().isNotEmpty())
|
||||
{
|
||||
if (v.getNodes().isNotEmpty()) {
|
||||
sendHeader(Form.capitalize(v.getName()) + " Help");
|
||||
if(isPlayer() && v.getParent() != null)
|
||||
{
|
||||
sendMessageRaw("<hover:show_text:'"+"<#b54b38>Click to go back to <#3299bf>" + Form.capitalize(v.getParent().getName()) + " Help" +"'><click:run_command:" + v.getParent().getPath() + "><font:minecraft:uniform><#f58571>〈 Back</click></hover>");
|
||||
if (isPlayer() && v.getParent() != null) {
|
||||
sendMessageRaw("<hover:show_text:'" + "<#b54b38>Click to go back to <#3299bf>" + Form.capitalize(v.getParent().getName()) + " Help" + "'><click:run_command:" + v.getParent().getPath() + "><font:minecraft:uniform><#f58571>〈 Back</click></hover>");
|
||||
}
|
||||
|
||||
for(VirtualDecreeCommand i : v.getNodes())
|
||||
{
|
||||
if(isPlayer())
|
||||
{
|
||||
for (VirtualDecreeCommand i : v.getNodes()) {
|
||||
if (isPlayer()) {
|
||||
//@builder
|
||||
String s = (
|
||||
"<hover:show_text:'"+
|
||||
@@ -443,19 +431,19 @@ public class VolmitSender implements CommandSender {
|
||||
+ " <#42ecf5>"
|
||||
+ i.getName() + " "
|
||||
+ i.getNode().getParameters().convert((f)
|
||||
-> "<#d665f0>" + f.example())
|
||||
.toString(" ") + "\n"
|
||||
: ""
|
||||
: "")
|
||||
+ (i.isNode() ? "<font:minecraft:uniform>" + pickRandoms(Math.min(i.getNode().getParameters().size() + 1, 5), i) + "<reset>" : "")
|
||||
+ "'><click:" + (i.isNode() ? "suggest_command" : "run_command") + ":" + i.getPath() + " >"
|
||||
+ "<#46826a>⇀<gradient:#42ecf5:#428df5> " +i.getName() + "</click></hover>"
|
||||
+ (i.isNode() ?
|
||||
" " + i.getNode().getParameters().convert((f)
|
||||
-> "<hover:show_text:'"
|
||||
+ f.getNames().convert((ff) -> "<#d665f0>" + ff).toString(", ") + "\n"
|
||||
-> "<#d665f0>" + f.example())
|
||||
.toString(" ") + "\n"
|
||||
: ""
|
||||
: "")
|
||||
+ (i.isNode() ? "<font:minecraft:uniform>" + pickRandoms(Math.min(i.getNode().getParameters().size() + 1, 5), i) + "<reset>" : "")
|
||||
+ "'><click:" + (i.isNode() ? "suggest_command" : "run_command") + ":" + i.getPath() + " >"
|
||||
+ "<#46826a>⇀<gradient:#42ecf5:#428df5> " + i.getName() + "</click></hover>"
|
||||
+ (i.isNode() ?
|
||||
" " + i.getNode().getParameters().convert((f)
|
||||
-> "<hover:show_text:'"
|
||||
+ f.getNames().convert((ff) -> "<#d665f0>" + ff).toString(", ") + "\n"
|
||||
+ "<#3fe05a>✎ <#6ad97d><font:minecraft:uniform>" + f.getDescription() + "<reset>\n"
|
||||
+ (f.isRequired()
|
||||
+ (f.isRequired()
|
||||
? "<#db4321>⚠ <#faa796><font:minecraft:uniform>This parameter is required."
|
||||
: (f.hasDefault()
|
||||
? "<#2181db>✔ <#78dcf0><font:minecraft:uniform>Defaults to \""+f.getParam().defaultValue()+"\" if undefined."
|
||||
@@ -473,17 +461,11 @@ public class VolmitSender implements CommandSender {
|
||||
//@done
|
||||
sendMessageRaw(s);
|
||||
System.out.println(s);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
} else {
|
||||
sendMessage(i.getPath() + "()");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
} else {
|
||||
sendMessage(C.RED + "There are no subcommands in this group! Contact support, this is a command design issue!");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user