Skip to content

Commit 64b1407

Browse files
authored
WXYZ property and handler reorganization (SkriptLang#8274)
* reorganization and WXYZ property * fix patterns * Apply suggestions from code review Co-authored-by: Efnilite <35348263+Efnilite@users.noreply.github.com> Co-authored-by: SirSmurfy2 <82696841+Absolutionism@users.noreply.github.com> * Update src/main/java/org/skriptlang/skript/lang/properties/handlers/WXYZHandler.java Co-authored-by: SirSmurfy2 <82696841+Absolutionism@users.noreply.github.com> * docs
1 parent 5cdcbab commit 64b1407

42 files changed

Lines changed: 1023 additions & 533 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/main/java/ch/njol/skript/classes/ClassInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import org.skriptlang.skript.addon.SkriptAddon;
1818
import org.skriptlang.skript.lang.properties.Property;
1919
import org.skriptlang.skript.lang.properties.Property.PropertyInfo;
20-
import org.skriptlang.skript.lang.properties.PropertyHandler;
20+
import org.skriptlang.skript.lang.properties.handlers.base.PropertyHandler;
2121

2222
import java.util.*;
2323
import java.util.function.Supplier;

src/main/java/ch/njol/skript/classes/data/BukkitClasses.java

Lines changed: 3 additions & 168 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,11 @@
4747
import org.bukkit.inventory.ItemFlag;
4848
import org.bukkit.metadata.Metadatable;
4949
import org.bukkit.util.CachedServerIcon;
50-
import org.bukkit.util.Vector;
5150
import org.jetbrains.annotations.Nullable;
5251
import org.skriptlang.skript.bukkit.base.types.*;
5352
import org.skriptlang.skript.bukkit.base.types.EntityClassInfo.EntityChanger;
5453
import org.skriptlang.skript.lang.properties.Property;
55-
import org.skriptlang.skript.lang.properties.PropertyHandler.ExpressionPropertyHandler;
54+
import org.skriptlang.skript.lang.properties.handlers.base.ExpressionPropertyHandler;
5655

5756
import java.io.StreamCorruptedException;
5857
import java.util.Arrays;
@@ -161,172 +160,8 @@ protected boolean canBeInstantiated() {
161160
}
162161
}).cloner(BlockData::clone));
163162

164-
Classes.registerClass(new ClassInfo<>(Location.class, "location")
165-
.user("locations?")
166-
.name("Location")
167-
.description("A location in a <a href='#world'>world</a>. Locations are world-specific and even store a <a href='#direction'>direction</a>, " +
168-
"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.")
169-
.usage("")
170-
.examples("teleport player to location at 0, 69, 0",
171-
"set {home::%uuid of player%} to location of the player")
172-
.since("1.0")
173-
.defaultExpression(new EventValueExpression<>(Location.class))
174-
.parser(new Parser<Location>() {
175-
@Override
176-
@Nullable
177-
public Location parse(final String s, final ParseContext context) {
178-
return null;
179-
}
180-
181-
@Override
182-
public boolean canParse(final ParseContext context) {
183-
return false;
184-
}
185-
186-
@Override
187-
public String toString(final Location l, final int flags) {
188-
String worldPart = l.getWorld() == null ? "" : " in '" + l.getWorld().getName() + "'"; // Safety: getWorld is marked as Nullable by spigot
189-
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;
190-
}
191-
192-
@Override
193-
public String toVariableNameString(final Location l) {
194-
return l.getWorld().getName() + ":" + l.getX() + "," + l.getY() + "," + l.getZ();
195-
}
196-
197-
@Override
198-
public String getDebugMessage(final Location l) {
199-
return "(" + l.getWorld().getName() + ":" + l.getX() + "," + l.getY() + "," + l.getZ() + "|yaw=" + l.getYaw() + "/pitch=" + l.getPitch() + ")";
200-
}
201-
}).serializer(new Serializer<Location>() {
202-
@Override
203-
public Fields serialize(Location location) {
204-
Fields fields = new Fields();
205-
World world = null;
206-
try {
207-
world = location.getWorld();
208-
} catch (IllegalArgumentException exception) {
209-
Skript.warning("A location failed to serialize with its defined world, as the world was unloaded.");
210-
}
211-
fields.putObject("world", world);
212-
fields.putPrimitive("x", location.getX());
213-
fields.putPrimitive("y", location.getY());
214-
fields.putPrimitive("z", location.getZ());
215-
fields.putPrimitive("yaw", location.getYaw());
216-
fields.putPrimitive("pitch", location.getPitch());
217-
return fields;
218-
}
219-
220-
@Override
221-
public void deserialize(final Location o, final Fields f) {
222-
assert false;
223-
}
224-
225-
@Override
226-
public Location deserialize(final Fields f) throws StreamCorruptedException {
227-
return new Location(f.getObject("world", World.class),
228-
f.getPrimitive("x", double.class), f.getPrimitive("y", double.class), f.getPrimitive("z", double.class),
229-
f.getPrimitive("yaw", float.class), f.getPrimitive("pitch", float.class));
230-
}
231-
232-
@Override
233-
public boolean canBeInstantiated() {
234-
return false; // no nullary constructor - also, saving the location manually prevents errors should Location ever be changed
235-
}
236-
237-
@Override
238-
public boolean mustSyncDeserialization() {
239-
return true;
240-
}
241-
242-
// return l.getWorld().getName() + ":" + l.getX() + "," + l.getY() + "," + l.getZ() + "|" + l.getYaw() + "/" + l.getPitch();
243-
@Override
244-
@Nullable
245-
public Location deserialize(final String s) {
246-
final String[] split = s.split("[:,|/]");
247-
if (split.length != 6)
248-
return null;
249-
final World w = Bukkit.getWorld(split[0]);
250-
if (w == null)
251-
return null;
252-
try {
253-
final double[] l = new double[5];
254-
for (int i = 0; i < 5; i++)
255-
l[i] = Double.parseDouble(split[i + 1]);
256-
return new Location(w, l[0], l[1], l[2], (float) l[3], (float) l[4]);
257-
} catch (final NumberFormatException e) {
258-
return null;
259-
}
260-
}
261-
})
262-
.cloner(Location::clone));
263-
264-
Classes.registerClass(new ClassInfo<>(Vector.class, "vector")
265-
.user("vectors?")
266-
.name("Vector")
267-
.description("Vector is a collection of numbers. In Minecraft, 3D vectors are used to express velocities of entities.")
268-
.usage("vector(x, y, z)")
269-
.examples("")
270-
.since("2.2-dev23")
271-
.defaultExpression(new EventValueExpression<>(Vector.class))
272-
.parser(new Parser<Vector>() {
273-
@Override
274-
@Nullable
275-
public Vector parse(final String s, final ParseContext context) {
276-
return null;
277-
}
278-
279-
@Override
280-
public boolean canParse(final ParseContext context) {
281-
return false;
282-
}
283-
284-
@Override
285-
public String toString(final Vector vec, final int flags) {
286-
return "x: " + Skript.toString(vec.getX()) + ", y: " + Skript.toString(vec.getY()) + ", z: " + Skript.toString(vec.getZ());
287-
}
288-
289-
@Override
290-
public String toVariableNameString(final Vector vec) {
291-
return "vector:" + vec.getX() + "," + vec.getY() + "," + vec.getZ();
292-
}
293-
294-
@Override
295-
public String getDebugMessage(final Vector vec) {
296-
return "(" + vec.getX() + "," + vec.getY() + "," + vec.getZ() + ")";
297-
}
298-
})
299-
.serializer(new Serializer<Vector>() {
300-
@Override
301-
public Fields serialize(Vector o) {
302-
Fields f = new Fields();
303-
f.putPrimitive("x", o.getX());
304-
f.putPrimitive("y", o.getY());
305-
f.putPrimitive("z", o.getZ());
306-
return f;
307-
}
308-
309-
@Override
310-
public void deserialize(Vector o, Fields f) {
311-
assert false;
312-
}
313-
314-
@Override
315-
public Vector deserialize(final Fields f) throws StreamCorruptedException {
316-
return new Vector(f.getPrimitive("x", double.class), f.getPrimitive("y", double.class), f.getPrimitive("z", double.class));
317-
}
318-
319-
@Override
320-
public boolean mustSyncDeserialization() {
321-
return false;
322-
}
323-
324-
@Override
325-
protected boolean canBeInstantiated() {
326-
return false;
327-
}
328-
})
329-
.cloner(Vector::clone));
163+
Classes.registerClass(new LocationClassInfo());
164+
Classes.registerClass(new VectorClassInfo());
330165

331166
Classes.registerClass(new ClassInfo<>(World.class, "world")
332167
.user("worlds?")

src/main/java/ch/njol/skript/classes/data/JavaClasses.java

Lines changed: 4 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import ch.njol.skript.classes.ClassInfo;
66
import ch.njol.skript.classes.Parser;
77
import ch.njol.skript.classes.Serializer;
8-
import ch.njol.skript.expressions.base.EventValueExpression;
98
import ch.njol.skript.lang.ParseContext;
109
import ch.njol.skript.lang.VariableString;
1110
import ch.njol.skript.lang.util.SimpleLiteral;
@@ -17,10 +16,10 @@
1716
import ch.njol.yggdrasil.Fields;
1817
import org.jetbrains.annotations.Contract;
1918
import org.jetbrains.annotations.Nullable;
20-
import org.joml.Quaternionf;
19+
import org.skriptlang.skript.common.types.QuaternionClassInfo;
2120
import org.skriptlang.skript.lang.properties.Property;
22-
import org.skriptlang.skript.lang.properties.PropertyHandler.ConditionPropertyHandler;
23-
import org.skriptlang.skript.lang.properties.PropertyHandler.ContainsHandler;
21+
import org.skriptlang.skript.lang.properties.handlers.ContainsHandler;
22+
import org.skriptlang.skript.lang.properties.handlers.base.ConditionPropertyHandler;
2423

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

328327
// joml type - for display entities
329-
if (Skript.classExists("org.joml.Quaternionf"))
330-
Classes.registerClass(new ClassInfo<>(Quaternionf.class, "quaternion")
331-
.user("quaternionf?s?")
332-
.name("Quaternion")
333-
.description("Quaternions are four dimensional vectors, often used for representing rotations.")
334-
.since("2.10")
335-
.parser(new Parser<>() {
336-
public boolean canParse(ParseContext context) {
337-
return false;
338-
}
339-
340-
@Override
341-
public String toString(Quaternionf quaternion, int flags) {
342-
return "w:" + Skript.toString(quaternion.w()) + ", x:" + Skript.toString(quaternion.x()) + ", y:" + Skript.toString(quaternion.y()) + ", z:" + Skript.toString(quaternion.z());
343-
}
328+
Classes.registerClass(new QuaternionClassInfo());
344329

345-
@Override
346-
public String toVariableNameString(Quaternionf quaternion) {
347-
return quaternion.w() + "," + quaternion.x() + "," + quaternion.y() + "," + quaternion.z();
348-
}
349-
})
350-
.defaultExpression(new EventValueExpression<>(Quaternionf.class))
351-
.cloner(quaternion -> {
352-
try {
353-
// Implements cloneable, but doesn't return a Quaternionf.
354-
// org.joml improper override. Returns Object.
355-
return (Quaternionf) quaternion.clone();
356-
} catch (CloneNotSupportedException e) {
357-
return null;
358-
}
359-
}));
360330

361331
Classes.registerClass(new ClassInfo<>(UUID.class, "uuid")
362332
.user("uuids?")

src/main/java/ch/njol/skript/classes/data/SkriptClasses.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@
2828
import org.skriptlang.skript.common.types.QueueClassInfo;
2929
import org.skriptlang.skript.common.types.ScriptClassInfo;
3030
import org.skriptlang.skript.lang.properties.Property;
31-
import org.skriptlang.skript.lang.properties.PropertyHandler.ConditionPropertyHandler;
32-
import org.skriptlang.skript.lang.properties.PropertyHandler.ContainsHandler;
33-
import org.skriptlang.skript.lang.properties.PropertyHandler.ExpressionPropertyHandler;
34-
import org.skriptlang.skript.lang.properties.PropertyHandler.TypedValuePropertyHandler;
31+
import org.skriptlang.skript.lang.properties.handlers.ContainsHandler;
32+
import org.skriptlang.skript.lang.properties.handlers.TypedValueHandler;
33+
import org.skriptlang.skript.lang.properties.handlers.base.ConditionPropertyHandler;
34+
import org.skriptlang.skript.lang.properties.handlers.base.ExpressionPropertyHandler;
3535
import org.skriptlang.skript.util.Executable;
3636

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

588588
@Override
589589
public @Nullable String convert(Node propertyHolder) {
@@ -751,7 +751,7 @@ public void change(AnyAmount named, Object @Nullable [] delta, ChangeMode mode)
751751
.property(Property.TYPED_VALUE,
752752
"The value of something. Can be set.",
753753
Skript.instance(),
754-
new TypedValuePropertyHandler<AnyValued, Object>() {
754+
new TypedValueHandler<AnyValued, Object>() {
755755
@Override
756756
public Object convert(AnyValued propertyHolder) {
757757
return propertyHolder.value();

src/main/java/ch/njol/skript/expressions/ExprCoordinate.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package ch.njol.skript.expressions;
22

3+
import ch.njol.skript.SkriptConfig;
34
import ch.njol.skript.classes.Changer;
45
import ch.njol.skript.classes.Changer.ChangeMode;
56
import ch.njol.skript.doc.Description;
@@ -27,7 +28,8 @@
2728
public class ExprCoordinate extends SimplePropertyExpression<Location, Number> {
2829

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

3335
private final static char[] axes = {'x', 'y', 'z'};

src/main/java/ch/njol/skript/expressions/ExprXYZComponent.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package ch.njol.skript.expressions;
22

33
import ch.njol.skript.Skript;
4+
import ch.njol.skript.SkriptConfig;
45
import ch.njol.skript.classes.Changer.ChangeMode;
56
import ch.njol.skript.classes.Changer.ChangerUtils;
67
import ch.njol.skript.doc.Description;
@@ -48,7 +49,8 @@ public class ExprXYZComponent extends SimplePropertyExpression<Object, Number> {
4849
String types = "vectors";
4950
if (IS_RUNNING_1194)
5051
types += "/quaternions";
51-
register(ExprXYZComponent.class, Number.class, "[vector|quaternion] (:w|:x|:y|:z) [component[s]]", types);
52+
if (!SkriptConfig.useTypeProperties.value())
53+
register(ExprXYZComponent.class, Number.class, "[vector|quaternion] (:w|:x|:y|:z) [component[s]]", types);
5254
}
5355

5456
private enum Axis {

src/main/java/org/skriptlang/skript/bukkit/base/types/BlockClassInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import org.jetbrains.annotations.NotNull;
2626
import org.jetbrains.annotations.Nullable;
2727
import org.skriptlang.skript.lang.properties.Property;
28-
import org.skriptlang.skript.lang.properties.PropertyHandler.ExpressionPropertyHandler;
28+
import org.skriptlang.skript.lang.properties.handlers.base.ExpressionPropertyHandler;
2929

3030
import java.io.StreamCorruptedException;
3131
import java.util.Arrays;

src/main/java/org/skriptlang/skript/bukkit/base/types/EntityClassInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import org.jetbrains.annotations.NotNull;
2626
import org.jetbrains.annotations.Nullable;
2727
import org.skriptlang.skript.lang.properties.Property;
28-
import org.skriptlang.skript.lang.properties.PropertyHandler.ExpressionPropertyHandler;
28+
import org.skriptlang.skript.lang.properties.handlers.base.ExpressionPropertyHandler;
2929

3030
import java.util.Locale;
3131
import java.util.UUID;

src/main/java/org/skriptlang/skript/bukkit/base/types/InventoryClassInfo.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@
3030
import org.jetbrains.annotations.NotNull;
3131
import org.jetbrains.annotations.Nullable;
3232
import org.skriptlang.skript.lang.properties.Property;
33-
import org.skriptlang.skript.lang.properties.PropertyHandler;
34-
import org.skriptlang.skript.lang.properties.PropertyHandler.ConditionPropertyHandler;
35-
import org.skriptlang.skript.lang.properties.PropertyHandler.ContainsHandler;
33+
import org.skriptlang.skript.lang.properties.handlers.ContainsHandler;
34+
import org.skriptlang.skript.lang.properties.handlers.base.ConditionPropertyHandler;
35+
import org.skriptlang.skript.lang.properties.handlers.base.ExpressionPropertyHandler;
3636

3737
import java.util.ArrayList;
3838
import java.util.List;
@@ -236,7 +236,7 @@ public Class<?>[] elementTypes() {
236236
//</editor-fold>
237237
}
238238

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

src/main/java/org/skriptlang/skript/bukkit/base/types/ItemStackClassInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import org.jetbrains.annotations.NotNull;
1717
import org.jetbrains.annotations.Nullable;
1818
import org.skriptlang.skript.lang.properties.Property;
19-
import org.skriptlang.skript.lang.properties.PropertyHandler.ExpressionPropertyHandler;
19+
import org.skriptlang.skript.lang.properties.handlers.base.ExpressionPropertyHandler;
2020

2121
import java.util.Arrays;
2222
import java.util.Map;

0 commit comments

Comments
 (0)