mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 02:03:59 +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;
|
||||
}
|
||||
|
||||
public static KList<Object> initialize(String s) {
|
||||
return initialize(s, null);
|
||||
}
|
||||
|
||||
private void fixShading() {
|
||||
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();
|
||||
}
|
||||
|
||||
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.
|
||||
*/
|
||||
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.util.collection.KList;
|
||||
import com.volmit.iris.util.collection.KMap;
|
||||
import com.volmit.iris.util.decree.DecreeContext;
|
||||
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.*;
|
||||
import com.volmit.iris.util.decree.annotations.Decree;
|
||||
import com.volmit.iris.util.decree.exceptions.DecreeParsingException;
|
||||
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 lombok.Data;
|
||||
import lombok.Getter;
|
||||
import org.apache.logging.log4j.core.impl.ThrowableFormatOptions;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
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.");
|
||||
return false;
|
||||
value = ch.handle(sender);
|
||||
|
||||
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user