From 4cc45e784508f1d038fab61c9bc34ae23a611248 Mon Sep 17 00:00:00 2001 From: sovdee <10354869+sovdeeth@users.noreply.github.com> Date: Fri, 24 Nov 2023 17:11:18 -0800 Subject: [PATCH 1/5] Prevent InventoryHolder -> X chaining (#6171) * Prevent InventoryHolder -> X chaining --- .../java/ch/njol/skript/classes/data/DefaultConverters.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ch/njol/skript/classes/data/DefaultConverters.java b/src/main/java/ch/njol/skript/classes/data/DefaultConverters.java index a8b2688e94e..8bd6dc906f8 100644 --- a/src/main/java/ch/njol/skript/classes/data/DefaultConverters.java +++ b/src/main/java/ch/njol/skript/classes/data/DefaultConverters.java @@ -158,14 +158,14 @@ public DefaultConverters() {} if (holder instanceof DoubleChest) return holder.getInventory().getLocation().getBlock(); return null; - }); + }, Converter.NO_CHAINING); // InventoryHolder - Entity Converters.registerConverter(InventoryHolder.class, Entity.class, holder -> { if (holder instanceof Entity) return (Entity) holder; return null; - }); + }, Converter.NO_CHAINING); // Enchantment - EnchantmentType Converters.registerConverter(Enchantment.class, EnchantmentType.class, e -> new EnchantmentType(e, -1)); From f30f02351405537fa048d1f2f29424dc9af238f7 Mon Sep 17 00:00:00 2001 From: sovdee <10354869+sovdeeth@users.noreply.github.com> Date: Fri, 1 Dec 2023 10:55:54 -0800 Subject: [PATCH 2/5] Improve Location Comparison (#6205) --- .../classes/data/DefaultComparators.java | 29 +++++++++++++++++-- .../regressions/6205-location comparison.sk | 9 ++++++ 2 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 src/test/skript/tests/regressions/6205-location comparison.sk diff --git a/src/main/java/ch/njol/skript/classes/data/DefaultComparators.java b/src/main/java/ch/njol/skript/classes/data/DefaultComparators.java index 7f96bab14d8..e59a5678403 100644 --- a/src/main/java/ch/njol/skript/classes/data/DefaultComparators.java +++ b/src/main/java/ch/njol/skript/classes/data/DefaultComparators.java @@ -24,27 +24,26 @@ import ch.njol.skript.aliases.ItemData; import ch.njol.skript.aliases.ItemType; import ch.njol.skript.classes.ClassInfo; -import org.skriptlang.skript.lang.comparator.Comparator; import ch.njol.skript.entity.BoatChestData; import ch.njol.skript.entity.BoatData; import ch.njol.skript.entity.EntityData; import ch.njol.skript.entity.RabbitData; -import org.skriptlang.skript.lang.comparator.Comparators; import ch.njol.skript.util.BlockUtils; import ch.njol.skript.util.Date; import ch.njol.skript.util.EnchantmentType; import ch.njol.skript.util.Experience; -import ch.njol.skript.util.WeatherType; import ch.njol.skript.util.GameruleValue; import ch.njol.skript.util.StructureType; import ch.njol.skript.util.Time; import ch.njol.skript.util.Timeperiod; import ch.njol.skript.util.Timespan; +import ch.njol.skript.util.WeatherType; import ch.njol.skript.util.slot.EquipmentSlot; import ch.njol.skript.util.slot.Slot; import ch.njol.skript.util.slot.SlotWithIndex; import ch.njol.util.StringUtils; import ch.njol.util.coll.CollectionUtils; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.World; @@ -61,6 +60,8 @@ import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.skriptlang.skript.lang.comparator.Comparator; +import org.skriptlang.skript.lang.comparator.Comparators; import org.skriptlang.skript.lang.comparator.Relation; import java.util.Objects; @@ -630,6 +631,28 @@ public boolean supportsOrdering() { return false; } }); + + // Location - Location + Comparators.registerComparator(Location.class, Location.class, new Comparator() { + @Override + public Relation compare(Location first, Location second) { + return Relation.get( + // compare worlds + Objects.equals(first.getWorld(), second.getWorld()) && + // compare xyz coords + first.toVector().equals(second.toVector()) && + // normalize yaw and pitch to [-180, 180) and [-90, 90] respectively + // before comparing them + Location.normalizeYaw(first.getYaw()) == Location.normalizeYaw(second.getYaw()) && + Location.normalizePitch(first.getPitch()) == Location.normalizePitch(second.getPitch()) + ); + } + + @Override + public boolean supportsOrdering() { + return false; + } + }); } } diff --git a/src/test/skript/tests/regressions/6205-location comparison.sk b/src/test/skript/tests/regressions/6205-location comparison.sk new file mode 100644 index 00000000000..9e9df7cf30f --- /dev/null +++ b/src/test/skript/tests/regressions/6205-location comparison.sk @@ -0,0 +1,9 @@ +test "compare similar locations": + set {_world} to world "world" + assert location(1, 2, 3, {_world}, 4, 5) = location(1, 2, 3, {_world}, 4, 5) with "basic location comparison failed" + + assert location(1, 2, 3, {_world}, 270, 0) = location(1, 2, 3, {_world}, -90, 0) with "yaw normalization failed when comparing locations" + assert location(1, 2, 3, {_world}, 0, 270) = location(1, 2, 3, {_world}, 0, 90) with "pitch normalization failed when comparing locations" + assert location(1, 2, 3, {_world}, 270, 270) = location(1, 2, 3, {_world}, -90, 90) with "yaw and pitch normalization failed when comparing locations" + + assert location(1, (-1/infinity value), 3, {_world}, (-1/infinity value), (-1/infinity value)) = location(1, 0, 3, {_world}, 0, 0) with "0 and -0.0 are not equal when comparing locations" From ac5ff5b485ca8f5e4f51f8201e32a69f0157461f Mon Sep 17 00:00:00 2001 From: Patrick Miller Date: Fri, 1 Dec 2023 14:05:32 -0500 Subject: [PATCH 3/5] Allow asynchronous SkriptEvent#check execution (#6201) --- .../ch/njol/skript/SkriptEventHandler.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/ch/njol/skript/SkriptEventHandler.java b/src/main/java/ch/njol/skript/SkriptEventHandler.java index 28eaff9b23c..b3ad81d8d4e 100644 --- a/src/main/java/ch/njol/skript/SkriptEventHandler.java +++ b/src/main/java/ch/njol/skript/SkriptEventHandler.java @@ -120,7 +120,10 @@ private static void check(Event event, EventPriority priority) { boolean hasTrigger = false; for (Trigger trigger : triggers) { SkriptEvent triggerEvent = trigger.getEvent(); - if (triggerEvent.getEventPriority() == priority && Boolean.TRUE.equals(Task.callSync(() -> triggerEvent.check(event)))) { + if ( + triggerEvent.getEventPriority() == priority + && triggerEvent.canExecuteAsynchronously() ? triggerEvent.check(event) : Boolean.TRUE.equals(Task.callSync(() -> triggerEvent.check(event))) + ) { hasTrigger = true; break; } @@ -130,7 +133,7 @@ private static void check(Event event, EventPriority priority) { logEventStart(event); } - + boolean isCancelled = event instanceof Cancellable && ((Cancellable) event).isCancelled() && !listenCancelled.contains(event.getClass()); boolean isResultDeny = !(event instanceof PlayerInteractEvent && (((PlayerInteractEvent) event).getAction() == Action.LEFT_CLICK_AIR || ((PlayerInteractEvent) event).getAction() == Action.RIGHT_CLICK_AIR) && ((PlayerInteractEvent) event).useItemInHand() != Result.DENY); @@ -155,15 +158,12 @@ private static void check(Event event, EventPriority priority) { }; if (trigger.getEvent().canExecuteAsynchronously()) { - // check should be performed on the main thread - if (Boolean.FALSE.equals(Task.callSync(() -> triggerEvent.check(event)))) - continue; - execute.run(); + if (triggerEvent.check(event)) + execute.run(); } else { // Ensure main thread Task.callSync(() -> { - if (!triggerEvent.check(event)) - return null; - execute.run(); + if (triggerEvent.check(event)) + execute.run(); return null; // we don't care about a return value }); } From e5c4d4abbe7e9978c34b0d887f0f5ef7667c69a9 Mon Sep 17 00:00:00 2001 From: LimeGlass <16087552+TheLimeGlass@users.noreply.github.com> Date: Fri, 1 Dec 2023 12:25:48 -0700 Subject: [PATCH 4/5] Fix ExprSets conflicting (#6123) --- .../ch/njol/skript/expressions/ExprSets.java | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprSets.java b/src/main/java/ch/njol/skript/expressions/ExprSets.java index f5e3a48c538..4458c16bdf0 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprSets.java +++ b/src/main/java/ch/njol/skript/expressions/ExprSets.java @@ -18,6 +18,14 @@ */ package ch.njol.skript.expressions; +import java.util.Iterator; +import java.util.function.Supplier; + +import org.bukkit.event.Event; +import org.eclipse.jdt.annotation.Nullable; + +import com.google.common.collect.Lists; + import ch.njol.skript.Skript; import ch.njol.skript.classes.ClassInfo; import ch.njol.skript.doc.Description; @@ -31,33 +39,26 @@ import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.skript.util.Utils; import ch.njol.util.Kleenean; -import com.google.common.collect.Lists; -import org.bukkit.event.Event; -import org.eclipse.jdt.annotation.Nullable; - -import java.util.Iterator; -import java.util.List; -import java.util.function.Supplier; @Name("Sets") -@Description("Returns a list of all the values of a type; useful for looping.") +@Description("Returns a list of all the values of a type. Useful for looping.") @Examples({ "loop all attribute types:", - "\tset loop-value attribute of player to 10", - "\tmessage \"Set attribute %loop-value% to 10!\"" + "\tset loop-value attribute of player to 10", + "\tmessage \"Set attribute %loop-value% to 10!\"" }) -@Since("unknown (before 1.4.2), 2.7 (colors)") +// Class history rename order: LoopItems.class -> ExprItems.class (renamed in 2.3-alpha1) -> ExprSets.class (renamed in 2.7.0) +@Since("1.0 pre-5, 2.7 (classinfo)") public class ExprSets extends SimpleExpression { static { - Skript.registerExpression(ExprSets.class, Object.class, ExpressionType.COMBINED, - "[all [[of] the]|the|every] %*classinfo%" - ); + Skript.registerExpression(ExprSets.class, Object.class, ExpressionType.PATTERN_MATCHES_EVERYTHING, + "[all [[of] the]|the|every] %*classinfo%"); } - private ClassInfo classInfo; @Nullable private Supplier> supplier; + private ClassInfo classInfo; @Override @SuppressWarnings("unchecked") @@ -78,16 +79,13 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye @Override protected Object[] get(Event event) { - assert supplier != null; Iterator iterator = supplier.get(); - List elements = Lists.newArrayList(iterator); - return elements.toArray(new Object[0]); + return Lists.newArrayList(iterator).toArray(new Object[0]); } @Override @Nullable public Iterator iterator(Event event) { - assert supplier != null; return supplier.get(); } From 01ae4e74cf6ee24a4dce0373e5d717e8fb78eb04 Mon Sep 17 00:00:00 2001 From: Patrick Miller Date: Fri, 1 Dec 2023 14:38:40 -0500 Subject: [PATCH 5/5] Prepare for Release (2.7.3) (#6208) --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index ff0925c17ea..7a524a71e5b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Dfile.encoding=UTF-8 groupid=ch.njol name=skript -version=2.7.2 +version=2.7.3 jarName=Skript.jar testEnv=java17/paper-1.20.2 testEnvJavaVersion=17