mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 10:12:53 +00:00
Context handlers
This commit is contained in:
parent
d71393cead
commit
61a313f24b
@ -195,6 +195,10 @@ public class Iris extends VolmitPlugin implements Listener {
|
|||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static KList<Object> initialize(String s) {
|
||||||
|
return initialize(s, null);
|
||||||
|
}
|
||||||
|
|
||||||
private void fixShading() {
|
private void fixShading() {
|
||||||
ShadeFix.fix(ComponentSerializer.class);
|
ShadeFix.fix(ComponentSerializer.class);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.volmit.iris.util.decree;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.util.collection.KMap;
|
||||||
|
import com.volmit.iris.util.plugin.VolmitSender;
|
||||||
|
|
||||||
|
public interface DecreeContextHandler<T> {
|
||||||
|
static KMap<Class<?>, DecreeContextHandler<?>> contextHandlers = buildContextHandlers();
|
||||||
|
|
||||||
|
static KMap<Class<?>, DecreeContextHandler<?>> buildContextHandlers() {
|
||||||
|
KMap<Class<?>, DecreeContextHandler<?>> contextHandlers = new KMap<>();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Iris.initialize("com.volmit.iris.util.decree.handlers.context").forEach((i)
|
||||||
|
-> contextHandlers.put(((DecreeContextHandler<?>)i).getType(), (DecreeContextHandler<?>)i));
|
||||||
|
}
|
||||||
|
|
||||||
|
catch(Throwable e)
|
||||||
|
{
|
||||||
|
Iris.reportError(e);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return contextHandlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
Class<T> getType();
|
||||||
|
|
||||||
|
T handle(VolmitSender sender);
|
||||||
|
}
|
@ -98,4 +98,8 @@ public class DecreeParameter {
|
|||||||
|
|
||||||
return f.getRandom();
|
return f.getRandom();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isContextual() {
|
||||||
|
return param.contextual();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,4 +55,9 @@ public @interface Param {
|
|||||||
* 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 "";
|
String[] aliases() default "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempts to dynamically pull context from the player, default data or something else for supported types
|
||||||
|
*/
|
||||||
|
boolean contextual() default false;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
package com.volmit.iris.util.decree.handlers.context;
|
||||||
|
|
||||||
|
import com.volmit.iris.core.tools.IrisToolbelt;
|
||||||
|
import com.volmit.iris.engine.object.biome.IrisBiome;
|
||||||
|
import com.volmit.iris.engine.object.dimensional.IrisDimension;
|
||||||
|
import com.volmit.iris.util.decree.DecreeContextHandler;
|
||||||
|
import com.volmit.iris.util.plugin.VolmitSender;
|
||||||
|
|
||||||
|
public class BiomeContextHandler implements DecreeContextHandler<IrisBiome> {
|
||||||
|
public Class<IrisBiome> getType(){return IrisBiome.class;}
|
||||||
|
|
||||||
|
public IrisBiome handle(VolmitSender sender)
|
||||||
|
{
|
||||||
|
if(sender.isPlayer()
|
||||||
|
&& IrisToolbelt.isIrisWorld(sender.player().getWorld())
|
||||||
|
&& IrisToolbelt.access(sender.player().getWorld()).getEngine() != null)
|
||||||
|
{
|
||||||
|
return IrisToolbelt.access(sender.player().getWorld()).getEngine().getBiome(sender.player().getLocation());
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package com.volmit.iris.util.decree.handlers.context;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.core.tools.IrisToolbelt;
|
||||||
|
import com.volmit.iris.engine.object.dimensional.IrisDimension;
|
||||||
|
import com.volmit.iris.util.decree.DecreeContextHandler;
|
||||||
|
import com.volmit.iris.util.plugin.VolmitSender;
|
||||||
|
import org.bukkit.World;
|
||||||
|
|
||||||
|
public class DimensionContextHandler implements DecreeContextHandler<IrisDimension> {
|
||||||
|
public Class<IrisDimension> getType(){return IrisDimension.class;}
|
||||||
|
|
||||||
|
public IrisDimension handle(VolmitSender sender)
|
||||||
|
{
|
||||||
|
if(sender.isPlayer()
|
||||||
|
&& IrisToolbelt.isIrisWorld(sender.player().getWorld())
|
||||||
|
&& IrisToolbelt.access(sender.player().getWorld()).getEngine() != null)
|
||||||
|
{
|
||||||
|
return IrisToolbelt.access(sender.player().getWorld()).getEngine().getDimension();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package com.volmit.iris.util.decree.handlers.context;
|
||||||
|
|
||||||
|
import com.volmit.iris.core.tools.IrisToolbelt;
|
||||||
|
import com.volmit.iris.engine.object.biome.IrisBiome;
|
||||||
|
import com.volmit.iris.engine.object.regional.IrisRegion;
|
||||||
|
import com.volmit.iris.util.decree.DecreeContextHandler;
|
||||||
|
import com.volmit.iris.util.plugin.VolmitSender;
|
||||||
|
|
||||||
|
public class RegionContextHandler implements DecreeContextHandler<IrisRegion> {
|
||||||
|
public Class<IrisRegion> getType(){return IrisRegion.class;}
|
||||||
|
|
||||||
|
public IrisRegion handle(VolmitSender sender)
|
||||||
|
{
|
||||||
|
if(sender.isPlayer()
|
||||||
|
&& IrisToolbelt.isIrisWorld(sender.player().getWorld())
|
||||||
|
&& IrisToolbelt.access(sender.player().getWorld()).getEngine() != null)
|
||||||
|
{
|
||||||
|
return IrisToolbelt.access(sender.player().getWorld()).getEngine().getRegion(sender.player().getLocation());
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.volmit.iris.util.decree.handlers.context;
|
||||||
|
|
||||||
|
import com.volmit.iris.util.decree.DecreeContextHandler;
|
||||||
|
import com.volmit.iris.util.plugin.VolmitSender;
|
||||||
|
import org.bukkit.World;
|
||||||
|
|
||||||
|
public class WorldContextHandler implements DecreeContextHandler<World> {
|
||||||
|
public Class<World> getType(){return World.class;}
|
||||||
|
|
||||||
|
public World handle(VolmitSender sender)
|
||||||
|
{
|
||||||
|
return sender.isPlayer() ? sender.player().getWorld() : null;
|
||||||
|
}
|
||||||
|
}
|
@ -22,10 +22,7 @@ import com.volmit.iris.Iris;
|
|||||||
import com.volmit.iris.core.IrisSettings;
|
import com.volmit.iris.core.IrisSettings;
|
||||||
import com.volmit.iris.util.collection.KList;
|
import com.volmit.iris.util.collection.KList;
|
||||||
import com.volmit.iris.util.collection.KMap;
|
import com.volmit.iris.util.collection.KMap;
|
||||||
import com.volmit.iris.util.decree.DecreeContext;
|
import com.volmit.iris.util.decree.*;
|
||||||
import com.volmit.iris.util.decree.DecreeNode;
|
|
||||||
import com.volmit.iris.util.decree.DecreeParameter;
|
|
||||||
import com.volmit.iris.util.decree.DecreeSystem;
|
|
||||||
import com.volmit.iris.util.decree.annotations.Decree;
|
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;
|
||||||
@ -35,6 +32,7 @@ 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;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
import org.apache.logging.log4j.core.impl.ThrowableFormatOptions;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
@ -490,13 +488,44 @@ public class VirtualDecreeCommand {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(value == null)
|
if(i.isContextual() && value == null)
|
||||||
{
|
{
|
||||||
if(i.isRequired())
|
DecreeContextHandler<?> ch = DecreeContextHandler.contextHandlers.get(i.getType());
|
||||||
|
|
||||||
|
if(ch != null)
|
||||||
{
|
{
|
||||||
sender.sendMessage("Missing: " + i.getName() + " (" + i.getType().getSimpleName() + ") as the " + Form.getNumberSuffixThStRd(vm+1) + " argument.");
|
value = ch.handle(sender);
|
||||||
return false;
|
|
||||||
|
if(value != null)
|
||||||
|
{
|
||||||
|
Iris.debug("Null Parameter " + i.getName() + " derived a value of " + i.getHandler().toStringForce(value) + " from " + ch.getClass().getSimpleName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Iris.debug("Null Parameter " + i.getName() + " could not derive a value from " + ch.getClass().getSimpleName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Iris.debug("Null Parameter " + i.getName() + " is contextual but has no context handler for " + i.getType().getCanonicalName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(i.hasDefault() && value == null)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
Iris.debug("Null Parameter " + i.getName() + " is using default value " + i.getParam().defaultValue());
|
||||||
|
value = i.getDefaultValue();
|
||||||
|
} catch (Throwable e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(i.isRequired() && value == null) {
|
||||||
|
sender.sendMessage("Missing: " + i.getName() + " (" + i.getType().getSimpleName() + ") as the " + Form.getNumberSuffixThStRd(vm + 1) + " argument.");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
params[vm] = value;
|
params[vm] = value;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user