From 2e175e51ff6e5c9d569ad00bc709e5b8fdde1cf1 Mon Sep 17 00:00:00 2001 From: Sky Date: Tue, 17 Sep 2024 10:57:16 +0200 Subject: [PATCH] :zap: ActionProperty now holds the self node --- .../api/skript/action/ActionProperty.java | 51 ++++++++++++++----- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/src/main/java/info/itsthesky/disky/api/skript/action/ActionProperty.java b/src/main/java/info/itsthesky/disky/api/skript/action/ActionProperty.java index cfce115..6288046 100644 --- a/src/main/java/info/itsthesky/disky/api/skript/action/ActionProperty.java +++ b/src/main/java/info/itsthesky/disky/api/skript/action/ActionProperty.java @@ -1,12 +1,16 @@ package info.itsthesky.disky.api.skript.action; import ch.njol.skript.classes.Changer; +import ch.njol.skript.config.Node; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser; import ch.njol.util.Kleenean; import info.itsthesky.disky.api.changers.ChangeablePropertyExpression; import info.itsthesky.disky.api.skript.EasyElement; +import info.itsthesky.disky.api.skript.INodeHolder; import info.itsthesky.disky.core.Bot; +import info.itsthesky.disky.elements.changers.IAsyncChangeableExpression; +import info.itsthesky.disky.elements.changers.IAsyncGettableExpression; import net.dv8tion.jda.api.requests.restaction.AuditableRestAction; import org.bukkit.event.Event; import org.jetbrains.annotations.NotNull; @@ -14,8 +18,12 @@ import java.lang.reflect.ParameterizedType; import java.util.Arrays; -public abstract class ActionProperty extends ChangeablePropertyExpression { +@SuppressWarnings("unchecked") +public abstract class ActionProperty + extends ChangeablePropertyExpression + implements IAsyncChangeableExpression, IAsyncGettableExpression, INodeHolder { + protected Node node; public void updateEntity(T newAction, Event event) { getExpr().change(event, newAction == null ? new Object[0] : new Object[] {newAction}, Changer.ChangeMode.SET); } @@ -26,33 +34,47 @@ public void change(Event e, Object[] delta, Bot bot, Changer.ChangeMode mode) { return; final O value = (O) delta[0]; final Object entity = EasyElement.parseSingle(getExpr(), e, null); - /*try { - change((E) entity, value); - } catch (ClassCastException ex) { - updateEntity(change((T) entity, value), e); - }*/ - // Check if entity is E or T if (entity instanceof AuditableRestAction) { updateEntity(change((T) entity, value), e); } else { - change((E) entity, value); + change((E) entity, value, false); } } - public abstract void change(E role, O value); + @Override + public void changeAsync(Event e, Object[] delta, Changer.ChangeMode mode) { + if (!EasyElement.isValid(delta)) + return; + final O value = (O) delta[0]; + final Object entity = EasyElement.parseSingle(getExpr(), e, null); + if (entity instanceof AuditableRestAction) { + ((AuditableRestAction) entity).queue(); + } else { + change((E) entity, value, true); + } + } + + public abstract void change(E role, O value, boolean async); public abstract T change(T action, O value); - public abstract O get(E role); + public abstract O get(E role, boolean async); @Override protected O @NotNull [] get(@NotNull Event e, Object @NotNull [] source) { - return (O[]) Arrays.stream(source).map(object -> get((E) object)).toArray(Object[]::new); + return (O[]) Arrays.stream(source).map(object -> get((E) object, false)).toArray(Object[]::new); + } + + @Override + public O[] getAsync(Event e) { + final Expression expr = getExpr(); + return (O[]) Arrays.stream(expr.getArray(e)).map(object -> get((E) object, true)).toArray(Object[]::new); } @Override public boolean init(Expression @NotNull [] exprs, int matchedPattern, @NotNull Kleenean isDelayed, @NotNull SkriptParser.ParseResult parseResult) { setExpr(exprs[0]); + node = getParser().getNode(); return true; } @@ -65,5 +87,10 @@ public Class getActionClass() { return (Class) ((ParameterizedType) getClass() .getGenericSuperclass()).getActualTypeArguments()[1]; } - + + @Override + @NotNull + public Node getNode() { + return node; + } }