Skip to content

Commit

Permalink
Fix Converter compatibility for Property Expressions (SkriptLang#5507)
Browse files Browse the repository at this point in the history
  • Loading branch information
APickledWalrus authored Mar 12, 2023
1 parent 159bf1b commit 8b8551c
Show file tree
Hide file tree
Showing 11 changed files with 84 additions and 127 deletions.
17 changes: 5 additions & 12 deletions src/main/java/ch/njol/skript/expressions/ExprChunk.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,8 @@
*/
package ch.njol.skript.expressions;

import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.event.Event;
import org.eclipse.jdt.annotation.Nullable;

import ch.njol.skript.Skript;
import ch.njol.skript.classes.Changer.ChangeMode;
import org.skriptlang.skript.lang.converter.Converter;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Examples;
import ch.njol.skript.doc.Name;
Expand All @@ -36,6 +30,10 @@
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.util.Direction;
import ch.njol.util.Kleenean;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.event.Event;
import org.eclipse.jdt.annotation.Nullable;

/**
* @author Peter Güttinger
Expand Down Expand Up @@ -69,12 +67,7 @@ public boolean init(final Expression<?>[] exprs, final int matchedPattern, final

@Override
protected Chunk[] get(final Event e, final Location[] source) {
return get(source, new Converter<Location, Chunk>() {
@Override
public Chunk convert(final Location l) {
return l.getChunk();
}
});
return get(source, Location::getChunk);
}

@Override
Expand Down
13 changes: 3 additions & 10 deletions src/main/java/ch/njol/skript/expressions/ExprColoured.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,7 @@
*/
package ch.njol.skript.expressions;

import org.bukkit.event.Event;
import org.eclipse.jdt.annotation.Nullable;

import ch.njol.skript.Skript;
import org.skriptlang.skript.lang.converter.Converter;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Examples;
import ch.njol.skript.doc.Name;
Expand All @@ -34,6 +30,8 @@
import ch.njol.skript.util.Utils;
import ch.njol.skript.util.chat.ChatMessages;
import ch.njol.util.Kleenean;
import org.bukkit.event.Event;
import org.eclipse.jdt.annotation.Nullable;

@Name("Colored / Uncolored")
@Description({"Parses &lt;color&gt;s and, optionally, chat styles in a message or removes",
Expand Down Expand Up @@ -78,12 +76,7 @@ public boolean init(final Expression<?>[] exprs, final int matchedPattern, final

@Override
protected String[] get(final Event e, final String[] source) {
return get(source, new Converter<String, String>() {
@Override
public String convert(final String s) {
return color ? Utils.replaceChatStyles(s) : "" + ChatMessages.stripStyles(s);
}
});
return get(source, s -> color ? Utils.replaceChatStyles(s) : "" + ChatMessages.stripStyles(s));
}

@Override
Expand Down
27 changes: 10 additions & 17 deletions src/main/java/ch/njol/skript/expressions/ExprGameMode.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,8 @@
*/
package ch.njol.skript.expressions;

import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.player.PlayerGameModeChangeEvent;
import org.eclipse.jdt.annotation.Nullable;

import ch.njol.skript.ScriptLoader;
import ch.njol.skript.Skript;
import ch.njol.skript.classes.Changer.ChangeMode;
import org.skriptlang.skript.lang.converter.Converter;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Examples;
import ch.njol.skript.doc.Name;
Expand All @@ -40,6 +31,12 @@
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;
import ch.njol.util.coll.CollectionUtils;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.player.PlayerGameModeChangeEvent;
import org.eclipse.jdt.annotation.Nullable;

/**
* @author Peter Güttinger
Expand All @@ -64,14 +61,10 @@ public boolean init(final Expression<?>[] vars, final int matchedPattern, final

@Override
protected GameMode[] get(final Event e, final Player[] source) {
return get(source, new Converter<Player, GameMode>() {
@Override
@Nullable
public GameMode convert(final Player p) {
if (getTime() >= 0 && e instanceof PlayerGameModeChangeEvent && ((PlayerGameModeChangeEvent) e).getPlayer() == p && !Delay.isDelayed(e))
return ((PlayerGameModeChangeEvent) e).getNewGameMode();
return p.getGameMode();
}
return get(source, player -> {
if (getTime() >= 0 && e instanceof PlayerGameModeChangeEvent && ((PlayerGameModeChangeEvent) e).getPlayer() == player && !Delay.isDelayed(e))
return ((PlayerGameModeChangeEvent) e).getNewGameMode();
return player.getGameMode();
});
}

Expand Down
20 changes: 8 additions & 12 deletions src/main/java/ch/njol/skript/expressions/ExprLightLevel.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,7 @@
*/
package ch.njol.skript.expressions;

import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.event.Event;
import org.eclipse.jdt.annotation.Nullable;

import ch.njol.skript.Skript;
import org.skriptlang.skript.lang.converter.Converter;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Examples;
import ch.njol.skript.doc.Name;
Expand All @@ -35,6 +29,10 @@
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.util.Direction;
import ch.njol.util.Kleenean;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.event.Event;
import org.eclipse.jdt.annotation.Nullable;

/**
* @author Peter Güttinger
Expand Down Expand Up @@ -72,12 +70,10 @@ public Class<Byte> getReturnType() {

@Override
protected Byte[] get(final Event e, final Location[] source) {
return get(source, new Converter<Location, Byte>() {
@Override
public Byte convert(final Location l) {
final Block b = l.getBlock();
return whatLight == ANY ? b.getLightLevel() : whatLight == BLOCK ? b.getLightFromBlocks() : b.getLightFromSky();
}
return get(source, location -> {
Block block = location.getBlock();
return whatLight == ANY ? block.getLightLevel()
: whatLight == BLOCK ? block.getLightFromBlocks() : block.getLightFromSky();
});
}

Expand Down
26 changes: 10 additions & 16 deletions src/main/java/ch/njol/skript/expressions/ExprShooter.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,8 @@
*/
package ch.njol.skript.expressions;

import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Projectile;
import org.bukkit.projectiles.ProjectileSource;
import org.bukkit.event.Event;
import org.eclipse.jdt.annotation.Nullable;

import ch.njol.skript.Skript;
import ch.njol.skript.classes.Changer.ChangeMode;
import org.skriptlang.skript.lang.converter.Converter;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Examples;
import ch.njol.skript.doc.Name;
Expand All @@ -36,6 +29,11 @@
import ch.njol.skript.lang.ExpressionType;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Projectile;
import org.bukkit.event.Event;
import org.bukkit.projectiles.ProjectileSource;
import org.eclipse.jdt.annotation.Nullable;

/**
* @author Peter Güttinger
Expand All @@ -58,15 +56,11 @@ public boolean init(final Expression<?>[] exprs, final int matchedPattern, final

@Override
protected LivingEntity[] get(final Event e, final Projectile[] source) {
return get(source, new Converter<Projectile, LivingEntity>() {
@Override
@Nullable
public LivingEntity convert(final Projectile p) {
final Object o = p != null ? p.getShooter() : null;
if (o instanceof LivingEntity)
return (LivingEntity) o;
return null;
}
return get(source, projectile -> {
Object shooter = projectile != null ? projectile.getShooter() : null;
if (shooter instanceof LivingEntity)
return (LivingEntity) shooter;
return null;
});
}

Expand Down
38 changes: 16 additions & 22 deletions src/main/java/ch/njol/skript/expressions/ExprTarget.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,8 @@
*/
package ch.njol.skript.expressions;

import java.util.List;

import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Mob;
import org.bukkit.event.Event;
import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.util.Vector;
import org.eclipse.jdt.annotation.Nullable;

import ch.njol.skript.Skript;
import ch.njol.skript.classes.Changer.ChangeMode;
import org.skriptlang.skript.lang.converter.Converter;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Examples;
import ch.njol.skript.doc.Name;
Expand All @@ -44,6 +33,15 @@
import ch.njol.skript.registrations.Classes;
import ch.njol.util.Kleenean;
import ch.njol.util.coll.CollectionUtils;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Mob;
import org.bukkit.event.Event;
import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.util.Vector;
import org.eclipse.jdt.annotation.Nullable;

import java.util.List;

/**
* @author Peter Güttinger
Expand Down Expand Up @@ -75,18 +73,14 @@ public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelaye

@Override
protected Entity[] get(Event e, LivingEntity[] source) {
return get(source, new Converter<LivingEntity, Entity>() {
@Override
@Nullable
public Entity convert(LivingEntity en) {
if (getTime() >= 0 && e instanceof EntityTargetEvent && en.equals(((EntityTargetEvent) e).getEntity()) && !Delay.isDelayed(e)) {
Entity target = ((EntityTargetEvent) e).getTarget();
if (target == null || type != null && !type.isInstance(target))
return null;
return target;
}
return getTarget(en, type);
return get(source, en -> {
if (getTime() >= 0 && e instanceof EntityTargetEvent && en.equals(((EntityTargetEvent) e).getEntity()) && !Delay.isDelayed(e)) {
Entity target = ((EntityTargetEvent) e).getTarget();
if (target == null || type != null && !type.isInstance(target))
return null;
return target;
}
return getTarget(en, type);
});
}

Expand Down
30 changes: 13 additions & 17 deletions src/main/java/ch/njol/skript/expressions/ExprVehicle.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,26 +56,22 @@ public class ExprVehicle extends SimplePropertyExpression<Entity, Entity> {

@Override
protected Entity[] get(final Event e, final Entity[] source) {
return get(source, new Converter<Entity, Entity>() {
@Override
@Nullable
public Entity convert(final Entity p) {
if (getTime() >= 0 && e instanceof VehicleEnterEvent && p.equals(((VehicleEnterEvent) e).getEntered()) && !Delay.isDelayed(e)) {
return ((VehicleEnterEvent) e).getVehicle();
}
if (getTime() >= 0 && e instanceof VehicleExitEvent && p.equals(((VehicleExitEvent) e).getExited()) && !Delay.isDelayed(e)) {
return ((VehicleExitEvent) e).getVehicle();
return get(source, entity -> {
if (getTime() >= 0 && e instanceof VehicleEnterEvent && entity.equals(((VehicleEnterEvent) e).getEntered()) && !Delay.isDelayed(e)) {
return ((VehicleEnterEvent) e).getVehicle();
}
if (getTime() >= 0 && e instanceof VehicleExitEvent && entity.equals(((VehicleExitEvent) e).getExited()) && !Delay.isDelayed(e)) {
return ((VehicleExitEvent) e).getVehicle();
}
if (hasMountEvents) {
if (getTime() >= 0 && e instanceof EntityMountEvent && entity.equals(((EntityMountEvent) e).getEntity()) && !Delay.isDelayed(e)) {
return ((EntityMountEvent) e).getMount();
}
if (hasMountEvents) {
if (getTime() >= 0 && e instanceof EntityMountEvent && p.equals(((EntityMountEvent) e).getEntity()) && !Delay.isDelayed(e)) {
return ((EntityMountEvent) e).getMount();
}
if (getTime() >= 0 && e instanceof EntityDismountEvent && p.equals(((EntityDismountEvent) e).getEntity()) && !Delay.isDelayed(e)) {
return ((EntityDismountEvent) e).getDismounted();
}
if (getTime() >= 0 && e instanceof EntityDismountEvent && entity.equals(((EntityDismountEvent) e).getEntity()) && !Delay.isDelayed(e)) {
return ((EntityDismountEvent) e).getDismounted();
}
return p.getVehicle();
}
return entity.getVehicle();
});
}

Expand Down
28 changes: 12 additions & 16 deletions src/main/java/ch/njol/skript/expressions/ExprWorld.java
Original file line number Diff line number Diff line change
Expand Up @@ -74,23 +74,19 @@ public boolean init(final Expression<?>[] exprs, final int matchedPattern, final
protected World[] get(final Event e, final Object[] source) {
if (source instanceof World[]) // event value (see init)
return (World[]) source;
return get(source, new Converter<Object, World>() {
@Override
@Nullable
public World convert(final Object o) {
if (o instanceof Entity) {
if (getTime() > 0 && e instanceof PlayerTeleportEvent && o.equals(((PlayerTeleportEvent) e).getPlayer()) && !Delay.isDelayed(e))
return ((PlayerTeleportEvent) e).getTo().getWorld();
else
return ((Entity) o).getWorld();
} else if (o instanceof Location) {
return ((Location) o).getWorld();
} else if (o instanceof Chunk) {
return ((Chunk) o).getWorld();
}
assert false : o;
return null;
return get(source, obj -> {
if (obj instanceof Entity) {
if (getTime() > 0 && e instanceof PlayerTeleportEvent && obj.equals(((PlayerTeleportEvent) e).getPlayer()) && !Delay.isDelayed(e))
return ((PlayerTeleportEvent) e).getTo().getWorld();
else
return ((Entity) obj).getWorld();
} else if (obj instanceof Location) {
return ((Location) obj).getWorld();
} else if (obj instanceof Chunk) {
return ((Chunk) obj).getWorld();
}
assert false : obj;
return null;
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,10 +112,11 @@ public final T[] getAll(Event event) {
* @return An array containing the converted values
* @throws ArrayStoreException if the converter returned invalid values
*/
protected T[] get(final F[] source, final Converter<? super F, ? extends T> converter) {
@SuppressWarnings("deprecation") // for backwards compatibility
protected T[] get(final F[] source, final ch.njol.skript.classes.Converter<? super F, ? extends T> converter) {
assert source != null;
assert converter != null;
return Converters.convertUnsafe(source, getReturnType(), converter);
return ch.njol.skript.registrations.Converters.convertUnsafe(source, getReturnType(), converter);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@
*/
package ch.njol.skript.expressions.base;

import ch.njol.skript.classes.Converter;
import org.bukkit.event.Event;
import org.eclipse.jdt.annotation.Nullable;

import org.skriptlang.skript.lang.converter.Converter;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;
Expand All @@ -33,6 +33,7 @@
* @see PropertyExpression
* @see PropertyExpression#register(Class, Class, String, String)
*/
@SuppressWarnings("deprecation") // for backwards compatibility
public abstract class SimplePropertyExpression<F, T> extends PropertyExpression<F, T> implements Converter<F, T> {

@SuppressWarnings({"unchecked", "null"})
Expand Down
Loading

0 comments on commit 8b8551c

Please sign in to comment.