Skip to content

Commit 306ac27

Browse files
committed
toVector3d()
1 parent 5dce04a commit 306ac27

49 files changed

Lines changed: 579 additions & 745 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/bukkitutil/PaperEntityUtils.java

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package ch.njol.skript.bukkitutil;
22

3-
import java.util.EnumSet;
4-
3+
import ch.njol.skript.Skript;
4+
import com.destroystokyo.paper.entity.ai.Goal;
5+
import com.destroystokyo.paper.entity.ai.GoalKey;
6+
import com.destroystokyo.paper.entity.ai.GoalType;
7+
import io.papermc.paper.entity.LookAnchor;
58
import org.bukkit.Bukkit;
69
import org.bukkit.Location;
710
import org.bukkit.NamespacedKey;
@@ -12,12 +15,7 @@
1215
import org.bukkit.util.Vector;
1316
import org.jetbrains.annotations.Nullable;
1417

15-
import com.destroystokyo.paper.entity.ai.Goal;
16-
import com.destroystokyo.paper.entity.ai.GoalKey;
17-
import com.destroystokyo.paper.entity.ai.GoalType;
18-
19-
import ch.njol.skript.Skript;
20-
import io.papermc.paper.entity.LookAnchor;
18+
import java.util.EnumSet;
2119

2220
public class PaperEntityUtils {
2321

@@ -67,9 +65,9 @@ public static void lookAt(Object target, @Nullable Float headRotationSpeed, @Nul
6765
return;
6866
}
6967
for (LivingEntity entity : entities) {
70-
if (!(entity instanceof Mob))
68+
if (!(entity instanceof Mob mob))
7169
continue;
72-
mobLookAt(target, headRotationSpeed, maxHeadPitch, (Mob) entity);
70+
mobLookAt(target, headRotationSpeed, maxHeadPitch, mob);
7371
}
7472
}
7573

@@ -94,19 +92,18 @@ public static void lookAt(LookAnchor entityAnchor, Object target, @Nullable Floa
9492
}
9593
if (entity instanceof Player) {
9694
Player player = (Player) entity;
97-
if (target instanceof Vector) {
98-
Vector vector = (Vector) target;
95+
if (target instanceof Vector vector) {
9996
player.lookAt(player.getEyeLocation().add(vector), LookAnchor.EYES);
10097
player.lookAt(player.getEyeLocation().add(vector), LookAnchor.FEET);
101-
} else if (target instanceof Location) {
102-
player.lookAt((Location) target, LookAnchor.EYES);
103-
player.lookAt((Location) target, LookAnchor.FEET);
104-
} else if (target instanceof Entity) {
105-
player.lookAt((Entity) target, LookAnchor.EYES, entityAnchor);
106-
player.lookAt((Entity) target, LookAnchor.FEET, entityAnchor);
98+
} else if (target instanceof Location location) {
99+
player.lookAt(location, LookAnchor.EYES);
100+
player.lookAt(location, LookAnchor.FEET);
101+
} else if (target instanceof Entity targetEntity) {
102+
player.lookAt(targetEntity, LookAnchor.EYES, entityAnchor);
103+
player.lookAt(targetEntity, LookAnchor.FEET, entityAnchor);
107104
}
108-
} else if (entity instanceof Mob) {
109-
mobLookAt(target, headRotationSpeed, maxHeadPitch, (Mob) entity);
105+
} else if (entity instanceof Mob mob) {
106+
mobLookAt(target, headRotationSpeed, maxHeadPitch, mob);
110107
}
111108
}
112109
}

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

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@
5757
import org.bukkit.potion.PotionEffect;
5858
import org.bukkit.potion.PotionEffectType;
5959
import org.bukkit.util.CachedServerIcon;
60-
import org.bukkit.util.Vector;
6160
import org.jetbrains.annotations.Nullable;
61+
import org.joml.Vector3d;
6262

6363
import java.io.StreamCorruptedException;
6464
import java.util.*;
@@ -396,18 +396,18 @@ public Location deserialize(final String s) {
396396
})
397397
.cloner(Location::clone));
398398

399-
Classes.registerClass(new ClassInfo<>(Vector.class, "vector")
399+
Classes.registerClass(new ClassInfo<>(Vector3d.class, "vector")
400400
.user("vectors?")
401401
.name("Vector")
402402
.description("Vector is a collection of numbers. In Minecraft, 3D vectors are used to express velocities of entities.")
403403
.usage("vector(x, y, z)")
404404
.examples("")
405405
.since("2.2-dev23")
406-
.defaultExpression(new EventValueExpression<>(Vector.class))
407-
.parser(new Parser<Vector>() {
406+
.defaultExpression(new EventValueExpression<>(Vector3d.class))
407+
.parser(new Parser<Vector3d>() {
408408
@Override
409409
@Nullable
410-
public Vector parse(final String s, final ParseContext context) {
410+
public Vector3d parse(final String s, final ParseContext context) {
411411
return null;
412412
}
413413

@@ -417,38 +417,38 @@ public boolean canParse(final ParseContext context) {
417417
}
418418

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

424424
@Override
425-
public String toVariableNameString(final Vector vec) {
426-
return "vector:" + vec.getX() + "," + vec.getY() + "," + vec.getZ();
425+
public String toVariableNameString(final Vector3d vec) {
426+
return "vector:" + vec.x() + "," + vec.y() + "," + vec.z();
427427
}
428428

429429
@Override
430-
public String getDebugMessage(final Vector vec) {
431-
return "(" + vec.getX() + "," + vec.getY() + "," + vec.getZ() + ")";
430+
public String getDebugMessage(final Vector3d vec) {
431+
return "(" + vec.x() + "," + vec.y() + "," + vec.z() + ")";
432432
}
433433
})
434-
.serializer(new Serializer<Vector>() {
434+
.serializer(new Serializer<Vector3d>() {
435435
@Override
436-
public Fields serialize(Vector o) {
436+
public Fields serialize(Vector3d o) {
437437
Fields f = new Fields();
438-
f.putPrimitive("x", o.getX());
439-
f.putPrimitive("y", o.getY());
440-
f.putPrimitive("z", o.getZ());
438+
f.putPrimitive("x", o.x());
439+
f.putPrimitive("y", o.y());
440+
f.putPrimitive("z", o.z());
441441
return f;
442442
}
443443

444444
@Override
445-
public void deserialize(Vector o, Fields f) {
445+
public void deserialize(Vector3d o, Fields f) {
446446
assert false;
447447
}
448448

449449
@Override
450-
public Vector deserialize(final Fields f) throws StreamCorruptedException {
451-
return new Vector(f.getPrimitive("x", double.class), f.getPrimitive("y", double.class), f.getPrimitive("z", double.class));
450+
public Vector3d deserialize(final Fields f) throws StreamCorruptedException {
451+
return new Vector3d(f.getPrimitive("x", double.class), f.getPrimitive("y", double.class), f.getPrimitive("z", double.class));
452452
}
453453

454454
@Override
@@ -461,7 +461,7 @@ protected boolean canBeInstantiated() {
461461
return false;
462462
}
463463
})
464-
.cloner(Vector::clone));
464+
.cloner(Vector3d::new));
465465

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

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

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,7 @@
1010
import ch.njol.skript.entity.BoatData;
1111
import ch.njol.skript.entity.EntityData;
1212
import ch.njol.skript.entity.RabbitData;
13-
import ch.njol.skript.util.BlockUtils;
14-
import ch.njol.skript.util.Color;
15-
import ch.njol.skript.util.Date;
16-
import ch.njol.skript.util.EnchantmentType;
17-
import ch.njol.skript.util.Experience;
18-
import ch.njol.skript.util.GameruleValue;
19-
import ch.njol.skript.util.StructureType;
20-
import ch.njol.skript.util.Time;
21-
import ch.njol.skript.util.Timeperiod;
22-
import ch.njol.skript.util.Timespan;
23-
import ch.njol.skript.util.WeatherType;
13+
import ch.njol.skript.util.*;
2414
import ch.njol.skript.util.slot.EquipmentSlot;
2515
import ch.njol.skript.util.slot.Slot;
2616
import ch.njol.skript.util.slot.SlotWithIndex;
@@ -41,6 +31,8 @@
4131
import org.bukkit.inventory.Inventory;
4232
import org.bukkit.inventory.ItemStack;
4333
import org.bukkit.potion.PotionEffectType;
34+
import org.bukkit.util.Vector;
35+
import org.joml.Vector3d;
4436
import org.skriptlang.skript.lang.comparator.Comparator;
4537
import org.skriptlang.skript.lang.comparator.Comparators;
4638
import org.skriptlang.skript.lang.comparator.Relation;
@@ -619,12 +611,12 @@ public boolean supportsOrdering() {
619611
});
620612

621613
// Location - Location
622-
Comparators.registerComparator(Location.class, Location.class, new Comparator<Location, Location>() {
614+
Comparators.registerComparator(Location.class, Location.class, new Comparator<>() {
623615
@Override
624616
public Relation compare(Location first, Location second) {
625617
return Relation.get(
626-
// compare worlds
627-
Objects.equals(first.getWorld(), second.getWorld()) &&
618+
// compare worlds
619+
Objects.equals(first.getWorld(), second.getWorld()) &&
628620
// compare xyz coords
629621
first.toVector().equals(second.toVector()) &&
630622
// normalize yaw and pitch to [-180, 180) and [-90, 90] respectively
@@ -633,13 +625,20 @@ public Relation compare(Location first, Location second) {
633625
Location.normalizePitch(first.getPitch()) == Location.normalizePitch(second.getPitch())
634626
);
635627
}
636-
637-
@Override
638-
public boolean supportsOrdering() {
639-
return false;
640-
}
641628
});
642629

630+
// Vectors
631+
632+
double vectorEpsilon = 0.000001; // vectors often are made from float sources, so can't use 1e-10.
633+
Comparators.registerComparator(Vector3d.class, Vector3d.class, (a, b) -> Relation.get(
634+
Math.abs(a.x - b.x) < vectorEpsilon
635+
&& Math.abs(a.y - b.y) < vectorEpsilon
636+
&& Math.abs(a.z - b.z) < vectorEpsilon));
637+
Comparators.registerComparator(Vector.class, Vector3d.class, (a, b) -> Relation.get(
638+
Math.abs(a.getX() - b.x) < vectorEpsilon
639+
&& Math.abs(a.getY() - b.y) < vectorEpsilon
640+
&& Math.abs(a.getZ() - b.z) < vectorEpsilon));
641+
643642
// Potion Effect Type
644643
Comparators.registerComparator(PotionEffectType.class, PotionEffectType.class, (one, two) -> Relation.get(one.equals(two)));
645644

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.bukkit.util.Vector;
3636
import org.jetbrains.annotations.NotNull;
3737
import org.jetbrains.annotations.UnknownNullability;
38+
import org.joml.Vector3d;
3839
import org.skriptlang.skript.lang.converter.Converter;
3940
import org.skriptlang.skript.lang.converter.Converters;
4041
import org.skriptlang.skript.lang.script.Script;
@@ -267,8 +268,12 @@ public void setAmount(Number amount) {
267268
// Enchantment - EnchantmentType
268269
Converters.registerConverter(Enchantment.class, EnchantmentType.class, e -> new EnchantmentType(e, -1));
269270

270-
// Vector - Direction
271-
Converters.registerConverter(Vector.class, Direction.class, Direction::new);
271+
// Vector3d - Vector
272+
Converters.registerConverter(Vector3d.class, Vector.class, Vector::fromJOML, Converter.NO_RIGHT_CHAINING);
273+
Converters.registerConverter(Vector.class, Vector3d.class, Vector::toVector3d);
274+
275+
// Vector3d - Direction
276+
Converters.registerConverter(Vector3d.class, Direction.class, Direction::new);
272277

273278
// EnchantmentOffer - EnchantmentType
274279
Converters.registerConverter(EnchantmentOffer.class, EnchantmentType.class, eo -> new EnchantmentType(eo.getEnchantment(), eo.getEnchantmentLevel()));

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
import org.bukkit.OfflinePlayer;
1818
import org.bukkit.World;
1919
import org.bukkit.entity.Player;
20-
import org.bukkit.util.Vector;
2120
import org.jetbrains.annotations.Nullable;
2221
import org.joml.AxisAngle4f;
2322
import org.joml.Quaternionf;
23+
import org.joml.Vector3d;
2424
import org.joml.Vector3f;
2525

2626
import java.math.BigDecimal;
@@ -462,17 +462,17 @@ public Date[] executeSimple(Object[][] params) {
462462
.examples("date(2014, 10, 1) # 0:00, 1st October 2014", "date(1990, 3, 5, 14, 30) # 14:30, 5th May 1990", "date(1999, 12, 31, 23, 59, 59, 999, -3*60, 0) # almost year 2000 in parts of Brazil (-3 hours offset, no DST)")
463463
.since("2.2"));
464464

465-
Functions.registerFunction(new SimpleJavaFunction<Vector>("vector", new Parameter[] {
465+
Functions.registerFunction(new SimpleJavaFunction<>("vector", new Parameter[]{
466466
new Parameter<>("x", DefaultClasses.NUMBER, true, null),
467467
new Parameter<>("y", DefaultClasses.NUMBER, true, null),
468468
new Parameter<>("z", DefaultClasses.NUMBER, true, null)
469469
}, DefaultClasses.VECTOR, true) {
470470
@Override
471-
public Vector[] executeSimple(Object[][] params) {
472-
return new Vector[] {new Vector(
473-
((Number)params[0][0]).doubleValue(),
474-
((Number)params[1][0]).doubleValue(),
475-
((Number)params[2][0]).doubleValue()
471+
public Vector3d[] executeSimple(Object[][] params) {
472+
return new Vector3d[]{new Vector3d(
473+
((Number) params[0][0]).doubleValue(),
474+
((Number) params[1][0]).doubleValue(),
475+
((Number) params[2][0]).doubleValue()
476476
)};
477477
}
478478

@@ -649,10 +649,10 @@ public Quaternionf[] executeSimple(Object[][] params) {
649649
@Override
650650
public Quaternionf[] executeSimple(Object[][] params) {
651651
float angle = (float) (((Number) params[0][0]).floatValue() / 180 * Math.PI);
652-
Vector v = ((Vector) params[1][0]);
653-
if (v.isZero() || !Double.isFinite(v.getX()) || !Double.isFinite(v.getY()) || !Double.isFinite(v.getZ()))
652+
Vector3d v = ((Vector3d) params[1][0]);
653+
if (Math2.vectorIsZero(v) || !v.isFinite())
654654
return new Quaternionf[0];
655-
Vector3f axis = ((Vector) params[1][0]).toVector3f();
655+
Vector3f axis = new Vector3f((Vector3d) params[1][0]);
656656
return CollectionUtils.array(new Quaternionf(new AxisAngle4f(angle, axis)));
657657
}
658658
})

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

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import ch.njol.skript.util.Timespan;
55
import ch.njol.skript.util.Timespan.TimePeriod;
66
import ch.njol.skript.util.Utils;
7-
import org.bukkit.util.Vector;
7+
import org.joml.Vector3d;
88
import org.skriptlang.skript.lang.arithmetic.Arithmetics;
99
import org.skriptlang.skript.lang.arithmetic.Operator;
1010

@@ -64,30 +64,22 @@ public class DefaultOperations {
6464
Arithmetics.registerDefaultValue(Number.class, () -> 0L);
6565

6666
// Vector - Vector
67-
Arithmetics.registerOperation(Operator.ADDITION, Vector.class, (left, right) -> left.clone().add(right));
68-
Arithmetics.registerOperation(Operator.SUBTRACTION, Vector.class, (left, right) -> left.clone().subtract(right));
69-
Arithmetics.registerOperation(Operator.MULTIPLICATION, Vector.class, (left, right) -> left.clone().multiply(right));
70-
Arithmetics.registerOperation(Operator.DIVISION, Vector.class, (left, right) -> left.clone().divide(right));
71-
Arithmetics.registerDifference(Vector.class,
72-
(left, right) -> new Vector(Math.abs(left.getX() - right.getX()), Math.abs(left.getY() - right.getY()), Math.abs(left.getZ() - right.getZ())));
73-
Arithmetics.registerDefaultValue(Vector.class, Vector::new);
67+
Arithmetics.registerOperation(Operator.ADDITION, Vector3d.class, (left, right) -> left.add(right, new Vector3d()));
68+
Arithmetics.registerOperation(Operator.SUBTRACTION, Vector3d.class, (left, right) -> left.sub(right, new Vector3d()));
69+
Arithmetics.registerOperation(Operator.MULTIPLICATION, Vector3d.class, (left, right) -> left.mul(right, new Vector3d()));
70+
Arithmetics.registerOperation(Operator.DIVISION, Vector3d.class, (left, right) -> left.div(right, new Vector3d()));
71+
Arithmetics.registerDifference(Vector3d.class,
72+
(left, right) -> new Vector3d(Math.abs(left.x() - right.x()), Math.abs(left.y() - right.y()), Math.abs(left.z() - right.z())));
73+
Arithmetics.registerDefaultValue(Vector3d.class, Vector3d::new);
7474

7575
// Vector - Number
7676
// Number - Vector
77-
Arithmetics.registerOperation(Operator.MULTIPLICATION, Vector.class, Number.class, (left, right) -> left.clone().multiply(right.doubleValue()), (left, right) -> {
78-
double number = left.doubleValue();
79-
Vector leftVector = new Vector(number, number, number);
80-
return leftVector.multiply(right);
81-
});
82-
Arithmetics.registerOperation(Operator.DIVISION, Vector.class, Number.class, (left, right) -> {
83-
double number = right.doubleValue();
84-
Vector rightVector = new Vector(number, number, number);
85-
return left.clone().divide(rightVector);
86-
}, (left, right) -> {
87-
double number = left.doubleValue();
88-
Vector leftVector = new Vector(number, number, number);
89-
return leftVector.divide(right);
90-
});
77+
Arithmetics.registerOperation(Operator.MULTIPLICATION, Vector3d.class, Number.class,
78+
(left, right) -> left.mul(right.doubleValue(), new Vector3d()),
79+
(left, right) -> right.mul(left.doubleValue(), new Vector3d()));
80+
Arithmetics.registerOperation(Operator.DIVISION, Vector3d.class, Number.class,
81+
(left, right) -> left.div(right.doubleValue(), new Vector3d()),
82+
(left, right) -> new Vector3d(left.doubleValue()).div(right));
9183

9284
// Timespan - Timespan
9385
Arithmetics.registerOperation(Operator.ADDITION, Timespan.class, Timespan::add);

src/main/java/ch/njol/skript/conditions/CondIsVectorNormalized.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,26 @@
11
package ch.njol.skript.conditions;
22

3+
import ch.njol.skript.Skript;
34
import ch.njol.skript.conditions.base.PropertyCondition;
45
import ch.njol.skript.doc.Description;
56
import ch.njol.skript.doc.Examples;
67
import ch.njol.skript.doc.Name;
78
import ch.njol.skript.doc.Since;
8-
import org.bukkit.util.Vector;
9+
import org.joml.Vector3d;
910

1011
@Name("Is Normalized")
1112
@Description("Checks whether a vector is normalized i.e. length of 1")
1213
@Examples("vector of player's location is normalized")
1314
@Since("2.5.1")
14-
public class CondIsVectorNormalized extends PropertyCondition<Vector> {
15+
public class CondIsVectorNormalized extends PropertyCondition<Vector3d> {
1516

1617
static {
1718
register(CondIsVectorNormalized.class, "normalized", "vectors");
1819
}
1920

2021
@Override
21-
public boolean check(Vector vector) {
22-
return vector.isNormalized();
22+
public boolean check(Vector3d vector) {
23+
return Math.abs(vector.lengthSquared() - 1) < Skript.EPSILON;
2324
}
2425

2526
@Override

0 commit comments

Comments
 (0)