Skip to content

Commit

Permalink
⚡ ActionProperty now holds the self node
Browse files Browse the repository at this point in the history
  • Loading branch information
ItsTheSky committed Sep 17, 2024
1 parent f2faf93 commit 2e175e5
Showing 1 changed file with 39 additions and 12 deletions.
Original file line number Diff line number Diff line change
@@ -1,21 +1,29 @@
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;

import java.lang.reflect.ParameterizedType;
import java.util.Arrays;

public abstract class ActionProperty<E, T extends AuditableRestAction, O> extends ChangeablePropertyExpression<Object, O> {
@SuppressWarnings("unchecked")
public abstract class ActionProperty<E, T extends AuditableRestAction, O>
extends ChangeablePropertyExpression<Object, O>
implements IAsyncChangeableExpression, IAsyncGettableExpression<O>, 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);
}
Expand All @@ -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;
}

Expand All @@ -65,5 +87,10 @@ public Class<T> getActionClass() {
return (Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[1];
}


@Override
@NotNull
public Node getNode() {
return node;
}
}

0 comments on commit 2e175e5

Please sign in to comment.