mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 18:23:06 +00:00
Refine decree
This commit is contained in:
parent
6ba9dc74d8
commit
c92e64afbd
@ -20,13 +20,16 @@ package com.volmit.iris.core.decrees;
|
|||||||
|
|
||||||
import com.volmit.iris.util.decree.DecreeExecutor;
|
import com.volmit.iris.util.decree.DecreeExecutor;
|
||||||
import com.volmit.iris.util.decree.annotations.Decree;
|
import com.volmit.iris.util.decree.annotations.Decree;
|
||||||
|
import com.volmit.iris.util.decree.annotations.Param;
|
||||||
|
|
||||||
@Decree(name = "irisd", aliases = {"ird"}, description = "Basic Command")
|
@Decree(name = "irisd", aliases = {"ird"}, description = "Basic Command")
|
||||||
public class DecreeIris implements DecreeExecutor
|
public class DecreeIris implements DecreeExecutor
|
||||||
{
|
{
|
||||||
@Decree(description = "Ping self", aliases = "p")
|
@Decree(description = "Ping self", aliases = "p")
|
||||||
public void ping()
|
public void ping(
|
||||||
|
@Param(name = "message",defaultValue = "Pong", aliases = {"msg", "m"})
|
||||||
|
String message)
|
||||||
{
|
{
|
||||||
sender().sendMessage("Pong!");
|
sender().sendMessage(message + "!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,10 +20,14 @@ package com.volmit.iris.util.decree;
|
|||||||
|
|
||||||
import com.volmit.iris.util.collection.KList;
|
import com.volmit.iris.util.collection.KList;
|
||||||
import com.volmit.iris.util.decree.annotations.Param;
|
import com.volmit.iris.util.decree.annotations.Param;
|
||||||
|
import com.volmit.iris.util.decree.exceptions.DecreeParsingException;
|
||||||
|
import com.volmit.iris.util.decree.exceptions.DecreeWhichException;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
import java.lang.reflect.Parameter;
|
import java.lang.reflect.Parameter;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
@Data
|
||||||
public class DecreeParameter {
|
public class DecreeParameter {
|
||||||
private final Parameter parameter;
|
private final Parameter parameter;
|
||||||
private final Param param;
|
private final Param param;
|
||||||
@ -53,16 +57,12 @@ public class DecreeParameter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isRequired() {
|
public boolean isRequired() {
|
||||||
return param.value().equals(Param.REQUIRED);
|
return param.required();
|
||||||
}
|
}
|
||||||
|
|
||||||
public KList<String> getNames() {
|
public KList<String> getNames() {
|
||||||
KList<String> d = new KList<>();
|
KList<String> d = new KList<>();
|
||||||
|
|
||||||
if (Arrays.equals(param.aliases(), new String[]{Param.NO_ALIAS})){
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(String i : param.aliases())
|
for(String i : param.aliases())
|
||||||
{
|
{
|
||||||
if(i.isEmpty())
|
if(i.isEmpty())
|
||||||
@ -78,4 +78,8 @@ public class DecreeParameter {
|
|||||||
|
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Object getDefaultValue() throws DecreeParsingException, DecreeWhichException {
|
||||||
|
return param.defaultValue().isEmpty() ? null : getHandler().parse(param.defaultValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ package com.volmit.iris.util.decree;
|
|||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.util.collection.KList;
|
import com.volmit.iris.util.collection.KList;
|
||||||
import com.volmit.iris.util.decree.virtual.VirtualDecreeCommand;
|
import com.volmit.iris.util.decree.virtual.VirtualDecreeCommand;
|
||||||
|
import com.volmit.iris.util.format.C;
|
||||||
import com.volmit.iris.util.plugin.VolmitSender;
|
import com.volmit.iris.util.plugin.VolmitSender;
|
||||||
import com.volmit.iris.util.scheduling.J;
|
import com.volmit.iris.util.scheduling.J;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
@ -51,7 +52,12 @@ public interface DecreeSystem extends CommandExecutor, TabCompleter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
default boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
default boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||||
J.aBukkit(() -> call(new VolmitSender(sender), args));
|
J.aBukkit(() -> {
|
||||||
|
if(!call(new VolmitSender(sender), args))
|
||||||
|
{
|
||||||
|
sender.sendMessage(C.RED + "Unknown Iris Command");
|
||||||
|
}
|
||||||
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,10 +26,6 @@ import java.lang.annotation.Target;
|
|||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
@Target(ElementType.PARAMETER)
|
@Target(ElementType.PARAMETER)
|
||||||
public @interface Param {
|
public @interface Param {
|
||||||
String REQUIRED = "REQUIRED";
|
|
||||||
|
|
||||||
String NO_ALIAS = "";
|
|
||||||
|
|
||||||
String DEFAULT_DESCRIPTION = "No Description Provided";
|
String DEFAULT_DESCRIPTION = "No Description Provided";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -39,6 +35,8 @@ public @interface Param {
|
|||||||
*/
|
*/
|
||||||
String name();
|
String name();
|
||||||
|
|
||||||
|
boolean required() default false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The description of this parameter, used in help-popups in game.<br>
|
* The description of this parameter, used in help-popups in game.<br>
|
||||||
* The default value is {@link #DEFAULT_DESCRIPTION}
|
* The default value is {@link #DEFAULT_DESCRIPTION}
|
||||||
@ -48,15 +46,15 @@ public @interface Param {
|
|||||||
/**
|
/**
|
||||||
* The default value for this argument.<br>
|
* The default value for this argument.<br>
|
||||||
* The entered string is parsed to the value similarly to how commandline-text would be.<br>
|
* The entered string is parsed to the value similarly to how commandline-text would be.<br>
|
||||||
* Default is {@link #REQUIRED}, which indicates the variable MUST be defined by the person running the command.<br>
|
* Which indicates the variable MUST be defined by the person running the command.<br>
|
||||||
* If you define this, the variable automatically becomes non-required, but can still be set.
|
* If you define this, the variable automatically becomes non-required, but can still be set.
|
||||||
*/
|
*/
|
||||||
String value() default REQUIRED;
|
String defaultValue() default "";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The aliases of this parameter (instead of just the {@link #name() name} (if specified) or Method Name (name of method))<br>
|
* The aliases of this parameter (instead of just the {@link #name() name} (if specified) or Method Name (name of method))<br>
|
||||||
* Can be initialized as just a string (ex. "alias") or as an array (ex. {"alias1", "alias2"})<br>
|
* Can be initialized as just a string (ex. "alias") or as an array (ex. {"alias1", "alias2"})<br>
|
||||||
* If someone uses /plugin foo bar=baz and you specify alias="b" here, /plugin foo b=baz will do the exact same.
|
* If someone uses /plugin foo bar=baz and you specify alias="b" here, /plugin foo b=baz will do the exact same.
|
||||||
*/
|
*/
|
||||||
String[] aliases() default {NO_ALIAS};
|
String[] aliases() default "";
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ import com.volmit.iris.util.decree.annotations.Decree;
|
|||||||
import com.volmit.iris.util.decree.exceptions.DecreeParsingException;
|
import com.volmit.iris.util.decree.exceptions.DecreeParsingException;
|
||||||
import com.volmit.iris.util.decree.exceptions.DecreeWhichException;
|
import com.volmit.iris.util.decree.exceptions.DecreeWhichException;
|
||||||
import com.volmit.iris.util.format.C;
|
import com.volmit.iris.util.format.C;
|
||||||
|
import com.volmit.iris.util.format.Form;
|
||||||
import com.volmit.iris.util.plugin.VolmitSender;
|
import com.volmit.iris.util.plugin.VolmitSender;
|
||||||
import com.volmit.iris.util.scheduling.J;
|
import com.volmit.iris.util.scheduling.J;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@ -203,7 +204,7 @@ public class VirtualDecreeCommand {
|
|||||||
if(param == null)
|
if(param == null)
|
||||||
{
|
{
|
||||||
Iris.debug("Can't find parameter key for " + key + "=" + value + " in " + getPath());
|
Iris.debug("Can't find parameter key for " + key + "=" + value + " in " + getPath());
|
||||||
// TODO: WARN UNKNOWN PARAMETER
|
sender.sendMessage(C.YELLOW + "Unknown Parameter: " + key);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,7 +214,7 @@ public class VirtualDecreeCommand {
|
|||||||
data.put(key, param.getHandler().parse(value));
|
data.put(key, param.getHandler().parse(value));
|
||||||
} catch (DecreeParsingException e) {
|
} catch (DecreeParsingException e) {
|
||||||
Iris.debug("Can't parse parameter value for " + key + "=" + value + " in " + getPath() + " using handler " + param.getHandler().getClass().getSimpleName());
|
Iris.debug("Can't parse parameter value for " + key + "=" + value + " in " + getPath() + " using handler " + param.getHandler().getClass().getSimpleName());
|
||||||
// TODO: WARN BAD PARAM
|
sender.sendMessage(C.RED + "Cannot convert \"" + value + "\" into a " + param.getType().getSimpleName());
|
||||||
return null;
|
return null;
|
||||||
} catch (DecreeWhichException e) {
|
} catch (DecreeWhichException e) {
|
||||||
KList<?> validOptions = param.getHandler().getPossibilities(value);
|
KList<?> validOptions = param.getHandler().getPossibilities(value);
|
||||||
@ -232,21 +233,21 @@ public class VirtualDecreeCommand {
|
|||||||
try {
|
try {
|
||||||
data.put(par.getName(), par.getHandler().parse(i));
|
data.put(par.getName(), par.getHandler().parse(i));
|
||||||
} catch (DecreeParsingException e) {
|
} catch (DecreeParsingException e) {
|
||||||
Iris.debug("Can't parse parameter value for " + par.getNames() + "=" + i + " in " + getPath() + " using handler " + par.getHandler().getClass().getSimpleName());
|
Iris.debug("Can't parse parameter value for " + par.getName() + "=" + i + " in " + getPath() + " using handler " + par.getHandler().getClass().getSimpleName());
|
||||||
// TODO: WARN BAD PARAM
|
sender.sendMessage(C.RED + "Cannot convert \"" + i + "\" into a " + par.getType().getSimpleName());
|
||||||
return null;
|
return null;
|
||||||
} catch (DecreeWhichException e) {
|
} catch (DecreeWhichException e) {
|
||||||
Iris.debug("Can't parse parameter value for " + par.getNames() + "=" + i + " in " + getPath() + " using handler " + par.getHandler().getClass().getSimpleName());
|
Iris.debug("Can't parse parameter value for " + par.getName() + "=" + i + " in " + getPath() + " using handler " + par.getHandler().getClass().getSimpleName());
|
||||||
KList<?> validOptions = par.getHandler().getPossibilities(i);
|
KList<?> validOptions = par.getHandler().getPossibilities(i);
|
||||||
String update = null;
|
String update = null; // TODO: PICK ONE
|
||||||
Iris.debug("Client chose " + update + " for " + par.getNames() + "=" + i + " (old) in " + getPath());
|
Iris.debug("Client chose " + update + " for " + par.getName() + "=" + i + " (old) in " + getPath());
|
||||||
in.set(ix--, update);
|
in.set(ix--, update);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
catch(ArrayIndexOutOfBoundsException e)
|
catch(IndexOutOfBoundsException e)
|
||||||
{
|
{
|
||||||
// TODO: Ignoring parameter (not in method anywhere
|
sender.sendMessage(C.YELLOW + "Unknown Parameter: " + i + " (" + Form.getNumberSuffixThStRd(ix+1) + " argument)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -276,20 +277,7 @@ public class VirtualDecreeCommand {
|
|||||||
|
|
||||||
if(args.isEmpty())
|
if(args.isEmpty())
|
||||||
{
|
{
|
||||||
int m = getNodes().size();
|
sender.sendDecreeHelp(this);
|
||||||
|
|
||||||
if(getNodes().isNotEmpty())
|
|
||||||
{
|
|
||||||
for(VirtualDecreeCommand i : getNodes())
|
|
||||||
{
|
|
||||||
sender.sendMessage(i.getPath() + " - " + i.getDescription());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sender.sendMessage(C.RED + "There are no subcommands in this group! Contact support, this is a command design issue!");
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -320,11 +308,41 @@ public class VirtualDecreeCommand {
|
|||||||
{
|
{
|
||||||
Object value = map.get(i.getName());
|
Object value = map.get(i.getName());
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if(value == null && !i.getParam().defaultValue().trim().isEmpty())
|
||||||
|
{
|
||||||
|
value = i.getDefaultValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (DecreeParsingException e) {
|
||||||
|
Iris.debug("Can't parse parameter value for " + i.getName() + "=" + i + " in " + getPath() + " using handler " + i.getHandler().getClass().getSimpleName());
|
||||||
|
sender.sendMessage(C.RED + "Cannot convert \"" + i + "\" into a " + i.getType().getSimpleName());
|
||||||
|
return false;
|
||||||
|
} catch (DecreeWhichException e) {
|
||||||
|
Iris.debug("Can't parse parameter value for " + i.getName() + "=" + i + " in " + getPath() + " using handler " + i.getHandler().getClass().getSimpleName());
|
||||||
|
KList<?> validOptions = i.getHandler().getPossibilities(i.getParam().defaultValue());
|
||||||
|
String update = null; // TODO: PICK ONE
|
||||||
|
Iris.debug("Client chose " + update + " for " + i.getName() + "=" + i + " (old) in " + getPath());
|
||||||
|
try
|
||||||
|
{
|
||||||
|
value = i.getDefaultValue();
|
||||||
|
}
|
||||||
|
catch (DecreeParsingException x) {
|
||||||
|
x.printStackTrace();
|
||||||
|
Iris.debug("Can't parse parameter value for " + i.getName() + "=" + i + " in " + getPath() + " using handler " + i.getHandler().getClass().getSimpleName());
|
||||||
|
sender.sendMessage(C.RED + "Cannot convert \"" + i + "\" into a " + i.getType().getSimpleName());
|
||||||
|
return false;
|
||||||
|
} catch (DecreeWhichException x) {
|
||||||
|
x.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(value == null)
|
if(value == null)
|
||||||
{
|
{
|
||||||
if(i.isRequired())
|
if(i.isRequired())
|
||||||
{
|
{
|
||||||
// TODO: REQUIRED... UNDEFINED
|
sender.sendMessage("Missing: " + i.getName() + " (" + i.getType().getSimpleName() + ") as the " + Form.getNumberSuffixThStRd(vm+1) + " argument.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
package com.volmit.iris.util.format;
|
package com.volmit.iris.util.format;
|
||||||
|
|
||||||
|
import com.google.common.base.Preconditions;
|
||||||
import com.volmit.iris.util.math.M;
|
import com.volmit.iris.util.math.M;
|
||||||
import com.volmit.iris.util.math.RollingSequence;
|
import com.volmit.iris.util.math.RollingSequence;
|
||||||
|
|
||||||
@ -38,6 +39,18 @@ public class Form {
|
|||||||
private static final BigInteger THOUSAND = BigInteger.valueOf(1000);
|
private static final BigInteger THOUSAND = BigInteger.valueOf(1000);
|
||||||
private static final NavigableMap<BigInteger, String> MAP;
|
private static final NavigableMap<BigInteger, String> MAP;
|
||||||
|
|
||||||
|
public static String getNumberSuffixThStRd(int day) {
|
||||||
|
if (day >= 11 && day <= 13) {
|
||||||
|
return Form.f(day) + "th";
|
||||||
|
}
|
||||||
|
return switch (day % 10) {
|
||||||
|
case 1 -> Form.f(day) + "st";
|
||||||
|
case 2 -> Form.f(day) + "nd";
|
||||||
|
case 3 -> Form.f(day) + "rd";
|
||||||
|
default -> Form.f(day) + "th";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
MAP = new TreeMap<>();
|
MAP = new TreeMap<>();
|
||||||
for (int i = 0; i < NAMES.length; i++) {
|
for (int i = 0; i < NAMES.length; i++) {
|
||||||
|
@ -20,6 +20,7 @@ package com.volmit.iris.util.plugin;
|
|||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.core.IrisSettings;
|
import com.volmit.iris.core.IrisSettings;
|
||||||
|
import com.volmit.iris.util.decree.virtual.VirtualDecreeCommand;
|
||||||
import com.volmit.iris.util.format.C;
|
import com.volmit.iris.util.format.C;
|
||||||
import com.volmit.iris.util.format.Form;
|
import com.volmit.iris.util.format.Form;
|
||||||
import com.volmit.iris.util.math.M;
|
import com.volmit.iris.util.math.M;
|
||||||
@ -333,4 +334,21 @@ public class VolmitSender implements CommandSender {
|
|||||||
public Spigot spigot() {
|
public Spigot spigot() {
|
||||||
return s.spigot();
|
return s.spigot();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void sendDecreeHelp(VirtualDecreeCommand v) {
|
||||||
|
int m = v.getNodes().size();
|
||||||
|
|
||||||
|
if(v.getNodes().isNotEmpty())
|
||||||
|
{
|
||||||
|
for(VirtualDecreeCommand i : v.getNodes())
|
||||||
|
{
|
||||||
|
sendMessage(i.getPath() + " - " + i.getDescription());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sendMessage(C.RED + "There are no subcommands in this group! Contact support, this is a command design issue!");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,5 +17,7 @@ libraries:
|
|||||||
commands:
|
commands:
|
||||||
iris:
|
iris:
|
||||||
aliases: [ ir, irs ]
|
aliases: [ ir, irs ]
|
||||||
|
irisd:
|
||||||
|
aliases: [ ird, irsd ]
|
||||||
api-version: ${apiversion}
|
api-version: ${apiversion}
|
||||||
hotload-dependencies: false
|
hotload-dependencies: false
|
Loading…
x
Reference in New Issue
Block a user