Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/java/ch/njol/skript/classes/ClassInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import org.skriptlang.skript.addon.SkriptAddon;
import org.skriptlang.skript.lang.properties.Property;
import org.skriptlang.skript.lang.properties.Property.PropertyInfo;
import org.skriptlang.skript.lang.properties.PropertyHandler;
import org.skriptlang.skript.lang.properties.handlers.base.PropertyHandler;

import java.util.*;
import java.util.function.Supplier;
Expand Down
171 changes: 3 additions & 168 deletions src/main/java/ch/njol/skript/classes/data/BukkitClasses.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,11 @@
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.util.CachedServerIcon;
import org.bukkit.util.Vector;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.bukkit.base.types.*;
import org.skriptlang.skript.bukkit.base.types.EntityClassInfo.EntityChanger;
import org.skriptlang.skript.lang.properties.Property;
import org.skriptlang.skript.lang.properties.PropertyHandler.ExpressionPropertyHandler;
import org.skriptlang.skript.lang.properties.handlers.base.ExpressionPropertyHandler;

import java.io.StreamCorruptedException;
import java.util.Arrays;
Expand Down Expand Up @@ -164,172 +163,8 @@ protected boolean canBeInstantiated() {
}
}).cloner(BlockData::clone));

Classes.registerClass(new ClassInfo<>(Location.class, "location")
.user("locations?")
.name("Location")
.description("A location in a <a href='#world'>world</a>. Locations are world-specific and even store a <a href='#direction'>direction</a>, " +
"e.g. if you save a location and later teleport to it you will face the exact same direction you did when you saved the location.")
.usage("")
.examples("teleport player to location at 0, 69, 0",
"set {home::%uuid of player%} to location of the player")
.since("1.0")
.defaultExpression(new EventValueExpression<>(Location.class))
.parser(new Parser<Location>() {
@Override
@Nullable
public Location parse(final String s, final ParseContext context) {
return null;
}

@Override
public boolean canParse(final ParseContext context) {
return false;
}

@Override
public String toString(final Location l, final int flags) {
String worldPart = l.getWorld() == null ? "" : " in '" + l.getWorld().getName() + "'"; // Safety: getWorld is marked as Nullable by spigot
return "x: " + Skript.toString(l.getX()) + ", y: " + Skript.toString(l.getY()) + ", z: " + Skript.toString(l.getZ()) + ", yaw: " + Skript.toString(l.getYaw()) + ", pitch: " + Skript.toString(l.getPitch()) + worldPart;
}

@Override
public String toVariableNameString(final Location l) {
return l.getWorld().getName() + ":" + l.getX() + "," + l.getY() + "," + l.getZ();
}

@Override
public String getDebugMessage(final Location l) {
return "(" + l.getWorld().getName() + ":" + l.getX() + "," + l.getY() + "," + l.getZ() + "|yaw=" + l.getYaw() + "/pitch=" + l.getPitch() + ")";
}
}).serializer(new Serializer<Location>() {
@Override
public Fields serialize(Location location) {
Fields fields = new Fields();
World world = null;
try {
world = location.getWorld();
} catch (IllegalArgumentException exception) {
Skript.warning("A location failed to serialize with its defined world, as the world was unloaded.");
}
fields.putObject("world", world);
fields.putPrimitive("x", location.getX());
fields.putPrimitive("y", location.getY());
fields.putPrimitive("z", location.getZ());
fields.putPrimitive("yaw", location.getYaw());
fields.putPrimitive("pitch", location.getPitch());
return fields;
}

@Override
public void deserialize(final Location o, final Fields f) {
assert false;
}

@Override
public Location deserialize(final Fields f) throws StreamCorruptedException {
return new Location(f.getObject("world", World.class),
f.getPrimitive("x", double.class), f.getPrimitive("y", double.class), f.getPrimitive("z", double.class),
f.getPrimitive("yaw", float.class), f.getPrimitive("pitch", float.class));
}

@Override
public boolean canBeInstantiated() {
return false; // no nullary constructor - also, saving the location manually prevents errors should Location ever be changed
}

@Override
public boolean mustSyncDeserialization() {
return true;
}

// return l.getWorld().getName() + ":" + l.getX() + "," + l.getY() + "," + l.getZ() + "|" + l.getYaw() + "/" + l.getPitch();
@Override
@Nullable
public Location deserialize(final String s) {
final String[] split = s.split("[:,|/]");
if (split.length != 6)
return null;
final World w = Bukkit.getWorld(split[0]);
if (w == null)
return null;
try {
final double[] l = new double[5];
for (int i = 0; i < 5; i++)
l[i] = Double.parseDouble(split[i + 1]);
return new Location(w, l[0], l[1], l[2], (float) l[3], (float) l[4]);
} catch (final NumberFormatException e) {
return null;
}
}
})
.cloner(Location::clone));

Classes.registerClass(new ClassInfo<>(Vector.class, "vector")
.user("vectors?")
.name("Vector")
.description("Vector is a collection of numbers. In Minecraft, 3D vectors are used to express velocities of entities.")
.usage("vector(x, y, z)")
.examples("")
.since("2.2-dev23")
.defaultExpression(new EventValueExpression<>(Vector.class))
.parser(new Parser<Vector>() {
@Override
@Nullable
public Vector parse(final String s, final ParseContext context) {
return null;
}

@Override
public boolean canParse(final ParseContext context) {
return false;
}

@Override
public String toString(final Vector vec, final int flags) {
return "x: " + Skript.toString(vec.getX()) + ", y: " + Skript.toString(vec.getY()) + ", z: " + Skript.toString(vec.getZ());
}

@Override
public String toVariableNameString(final Vector vec) {
return "vector:" + vec.getX() + "," + vec.getY() + "," + vec.getZ();
}

@Override
public String getDebugMessage(final Vector vec) {
return "(" + vec.getX() + "," + vec.getY() + "," + vec.getZ() + ")";
}
})
.serializer(new Serializer<Vector>() {
@Override
public Fields serialize(Vector o) {
Fields f = new Fields();
f.putPrimitive("x", o.getX());
f.putPrimitive("y", o.getY());
f.putPrimitive("z", o.getZ());
return f;
}

@Override
public void deserialize(Vector o, Fields f) {
assert false;
}

@Override
public Vector deserialize(final Fields f) throws StreamCorruptedException {
return new Vector(f.getPrimitive("x", double.class), f.getPrimitive("y", double.class), f.getPrimitive("z", double.class));
}

@Override
public boolean mustSyncDeserialization() {
return false;
}

@Override
protected boolean canBeInstantiated() {
return false;
}
})
.cloner(Vector::clone));
Classes.registerClass(new LocationClassInfo());
Classes.registerClass(new VectorClassInfo());

Classes.registerClass(new ClassInfo<>(World.class, "world")
.user("worlds?")
Expand Down
38 changes: 4 additions & 34 deletions src/main/java/ch/njol/skript/classes/data/JavaClasses.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import ch.njol.skript.classes.ClassInfo;
import ch.njol.skript.classes.Parser;
import ch.njol.skript.classes.Serializer;
import ch.njol.skript.expressions.base.EventValueExpression;
import ch.njol.skript.lang.ParseContext;
import ch.njol.skript.lang.VariableString;
import ch.njol.skript.lang.util.SimpleLiteral;
Expand All @@ -17,10 +16,10 @@
import ch.njol.yggdrasil.Fields;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.Nullable;
import org.joml.Quaternionf;
import org.skriptlang.skript.common.types.QuaternionClassInfo;
import org.skriptlang.skript.lang.properties.Property;
import org.skriptlang.skript.lang.properties.PropertyHandler.ConditionPropertyHandler;
import org.skriptlang.skript.lang.properties.PropertyHandler.ContainsHandler;
import org.skriptlang.skript.lang.properties.handlers.ContainsHandler;
import org.skriptlang.skript.lang.properties.handlers.base.ConditionPropertyHandler;

import java.io.StreamCorruptedException;
import java.util.UUID;
Expand Down Expand Up @@ -326,37 +325,8 @@ public Class<? extends String>[] elementTypes() {
ConditionPropertyHandler.of(String::isEmpty)));

// joml type - for display entities
if (Skript.classExists("org.joml.Quaternionf"))
Classes.registerClass(new ClassInfo<>(Quaternionf.class, "quaternion")
.user("quaternionf?s?")
.name("Quaternion")
.description("Quaternions are four dimensional vectors, often used for representing rotations.")
.since("2.10")
.parser(new Parser<>() {
public boolean canParse(ParseContext context) {
return false;
}

@Override
public String toString(Quaternionf quaternion, int flags) {
return "w:" + Skript.toString(quaternion.w()) + ", x:" + Skript.toString(quaternion.x()) + ", y:" + Skript.toString(quaternion.y()) + ", z:" + Skript.toString(quaternion.z());
}
Classes.registerClass(new QuaternionClassInfo());

@Override
public String toVariableNameString(Quaternionf quaternion) {
return quaternion.w() + "," + quaternion.x() + "," + quaternion.y() + "," + quaternion.z();
}
})
.defaultExpression(new EventValueExpression<>(Quaternionf.class))
.cloner(quaternion -> {
try {
// Implements cloneable, but doesn't return a Quaternionf.
// org.joml improper override. Returns Object.
return (Quaternionf) quaternion.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}));

Classes.registerClass(new ClassInfo<>(UUID.class, "uuid")
.user("uuids?")
Expand Down
12 changes: 6 additions & 6 deletions src/main/java/ch/njol/skript/classes/data/SkriptClasses.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@
import org.skriptlang.skript.common.types.QueueClassInfo;
import org.skriptlang.skript.common.types.ScriptClassInfo;
import org.skriptlang.skript.lang.properties.Property;
import org.skriptlang.skript.lang.properties.PropertyHandler.ConditionPropertyHandler;
import org.skriptlang.skript.lang.properties.PropertyHandler.ContainsHandler;
import org.skriptlang.skript.lang.properties.PropertyHandler.ExpressionPropertyHandler;
import org.skriptlang.skript.lang.properties.PropertyHandler.TypedValuePropertyHandler;
import org.skriptlang.skript.lang.properties.handlers.ContainsHandler;
import org.skriptlang.skript.lang.properties.handlers.TypedValueHandler;
import org.skriptlang.skript.lang.properties.handlers.base.ConditionPropertyHandler;
import org.skriptlang.skript.lang.properties.handlers.base.ExpressionPropertyHandler;
import org.skriptlang.skript.util.Executable;

import java.io.File;
Expand Down Expand Up @@ -583,7 +583,7 @@ public String toVariableNameString(Node node) {
.property(Property.TYPED_VALUE,
"The value of the node, if it is an entry node, as text.",
Skript.instance(),
new TypedValuePropertyHandler<Node, String>() {
new TypedValueHandler<Node, String>() {

@Override
public @Nullable String convert(Node propertyHolder) {
Expand Down Expand Up @@ -751,7 +751,7 @@ public void change(AnyAmount named, Object @Nullable [] delta, ChangeMode mode)
.property(Property.TYPED_VALUE,
"The value of something. Can be set.",
Skript.instance(),
new TypedValuePropertyHandler<AnyValued, Object>() {
new TypedValueHandler<AnyValued, Object>() {
@Override
public Object convert(AnyValued propertyHolder) {
return propertyHolder.value();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ch.njol.skript.expressions;

import ch.njol.skript.SkriptConfig;
import ch.njol.skript.classes.Changer;
import ch.njol.skript.classes.Changer.ChangeMode;
import ch.njol.skript.doc.Description;
Expand Down Expand Up @@ -27,7 +28,8 @@
public class ExprCoordinate extends SimplePropertyExpression<Location, Number> {

static {
register(ExprCoordinate.class, Number.class, "(0¦x|1¦y|2¦z)(-| )(coord[inate]|pos[ition]|loc[ation])[s]", "locations");
if (!SkriptConfig.useTypeProperties.value())
register(ExprCoordinate.class, Number.class, "(0¦x|1¦y|2¦z)(-| )(coord[inate]|pos[ition]|loc[ation])[s]", "locations");
}

private final static char[] axes = {'x', 'y', 'z'};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ch.njol.skript.expressions;

import ch.njol.skript.Skript;
import ch.njol.skript.SkriptConfig;
import ch.njol.skript.classes.Changer.ChangeMode;
import ch.njol.skript.classes.Changer.ChangerUtils;
import ch.njol.skript.doc.Description;
Expand Down Expand Up @@ -48,7 +49,8 @@ public class ExprXYZComponent extends SimplePropertyExpression<Object, Number> {
String types = "vectors";
if (IS_RUNNING_1194)
types += "/quaternions";
register(ExprXYZComponent.class, Number.class, "[vector|quaternion] (:w|:x|:y|:z) [component[s]]", types);
if (!SkriptConfig.useTypeProperties.value())
register(ExprXYZComponent.class, Number.class, "[vector|quaternion] (:w|:x|:y|:z) [component[s]]", types);
}

private enum Axis {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.lang.properties.Property;
import org.skriptlang.skript.lang.properties.PropertyHandler.ExpressionPropertyHandler;
import org.skriptlang.skript.lang.properties.handlers.base.ExpressionPropertyHandler;

import java.io.StreamCorruptedException;
import java.util.Arrays;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.lang.properties.Property;
import org.skriptlang.skript.lang.properties.PropertyHandler.ExpressionPropertyHandler;
import org.skriptlang.skript.lang.properties.handlers.base.ExpressionPropertyHandler;

import java.util.Locale;
import java.util.UUID;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.lang.properties.Property;
import org.skriptlang.skript.lang.properties.PropertyHandler;
import org.skriptlang.skript.lang.properties.PropertyHandler.ConditionPropertyHandler;
import org.skriptlang.skript.lang.properties.PropertyHandler.ContainsHandler;
import org.skriptlang.skript.lang.properties.handlers.ContainsHandler;
import org.skriptlang.skript.lang.properties.handlers.base.ConditionPropertyHandler;
import org.skriptlang.skript.lang.properties.handlers.base.ExpressionPropertyHandler;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -236,7 +236,7 @@ public Class<?>[] elementTypes() {
//</editor-fold>
}

private static class InventoryNameHandler implements PropertyHandler.ExpressionPropertyHandler<Inventory, String> {
private static class InventoryNameHandler implements ExpressionPropertyHandler<Inventory, String> {
//<editor-fold desc="inventory name property" defaultstate="collapsed">
private static @Nullable BungeeComponentSerializer serializer = null;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.lang.properties.Property;
import org.skriptlang.skript.lang.properties.PropertyHandler.ExpressionPropertyHandler;
import org.skriptlang.skript.lang.properties.handlers.base.ExpressionPropertyHandler;

import java.util.Arrays;
import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.lang.properties.Property;
import org.skriptlang.skript.lang.properties.PropertyHandler.ExpressionPropertyHandler;
import org.skriptlang.skript.lang.properties.handlers.base.ExpressionPropertyHandler;

import java.util.Arrays;

Expand Down
Loading