From 4d41dd194e4de354e2de71e549c262d9e8fd4eff Mon Sep 17 00:00:00 2001 From: CrebsTheCoder Date: Fri, 17 Apr 2026 20:01:43 +0800 Subject: [PATCH 01/17] Add event for player toggling entity age lock --- .../bukkit/entity/player/PlayerModule.java | 5 ++ .../events/EvtPlayerToggleEntityAge.java | 53 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/PlayerModule.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/PlayerModule.java index 938a676b539..42c45bed777 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/entity/player/PlayerModule.java +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/PlayerModule.java @@ -36,6 +36,11 @@ protected void loadSelf(SkriptAddon addon) { ExprPickedItem::register ); } + if (Skript.classExists("io.papermc.paper.event.player.PlayerToggleEntityAgeLockEvent")) { + register(addon, + EvtPlayerToggleEntityAge::register + ); + } SyntaxRegistry syntaxRegistry = moduleRegistry(addon); syntaxRegistry.register(BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(SimpleEvent.class, "Chat") diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java new file mode 100644 index 00000000000..188072c5ce9 --- /dev/null +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java @@ -0,0 +1,53 @@ +package org.skriptlang.skript.bukkit.entity.player.elements.events; + +import ch.njol.skript.lang.Literal; +import ch.njol.skript.lang.SkriptEvent; +import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.registrations.EventValues; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.Event; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.bukkit.registration.BukkitSyntaxInfos; +import org.skriptlang.skript.registration.SyntaxRegistry; +import io.papermc.paper.event.player.PlayerToggleEntityAgeLockEvent; + +public class EvtPlayerToggleEntityAge extends SkriptEvent { + + public static void register(SyntaxRegistry registry) { + registry.register( + BukkitSyntaxInfos.Event.KEY, + BukkitSyntaxInfos.Event.builder(EvtPlayerToggleEntityAge.class, "Player Toggle Entity Age Lock") + .addEvent(PlayerToggleEntityAgeLockEvent.class) + .addPatterns("[player] [toggle[ing]] entity age lock") + .addDescription("Called when a player toggles the age lock of an entity using the pick block key (default middle mouse button).") + .addExample(""" + on player toggling of an entity age lock: + cancel event + send "You cannot toggle the age lock of entities!" to the player + """) + .addSince("2.10") + .supplier(EvtPlayerToggleEntityAge::new) + .build() + ); + + EventValues.registerEventValue(PlayerToggleEntityAgeLockEvent.class, LivingEntity.class, PlayerToggleEntityAgeLockEvent::getEntity); + EventValues.registerEventValue(PlayerToggleEntityAgeLockEvent.class, ItemStack.class, PlayerToggleEntityAgeLockEvent::getItem); + } + + @Override + public boolean init(Literal[] args, int matchedPattern, ParseResult parseResult) { + return true; + } + + @Override + public boolean check(Event event) { + return true; + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + return "player toggling entity age lock"; + } + +} From e3d5e5ace4410e548f3f4287bbb997d550491cd4 Mon Sep 17 00:00:00 2001 From: Crebs <72847555+CrebsTheCoder@users.noreply.github.com> Date: Fri, 17 Apr 2026 20:15:48 +0800 Subject: [PATCH 02/17] Mistake Mb dawg i just copied it off the EvtBread --- .../entity/player/elements/events/EvtPlayerToggleEntityAge.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java index 188072c5ce9..80f824f4b76 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java @@ -26,7 +26,7 @@ public static void register(SyntaxRegistry registry) { cancel event send "You cannot toggle the age lock of entities!" to the player """) - .addSince("2.10") + .addSince("INSERT HERE") .supplier(EvtPlayerToggleEntityAge::new) .build() ); From f1de24b32362ee1f219fe585d3fdba54f2c5a237 Mon Sep 17 00:00:00 2001 From: Crebs <72847555+CrebsTheCoder@users.noreply.github.com> Date: Fri, 17 Apr 2026 20:57:50 +0800 Subject: [PATCH 03/17] description mistake due to auto complete --- .../player/elements/events/EvtPlayerToggleEntityAge.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java index 80f824f4b76..da495a63448 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java @@ -20,11 +20,10 @@ public static void register(SyntaxRegistry registry) { BukkitSyntaxInfos.Event.builder(EvtPlayerToggleEntityAge.class, "Player Toggle Entity Age Lock") .addEvent(PlayerToggleEntityAgeLockEvent.class) .addPatterns("[player] [toggle[ing]] entity age lock") - .addDescription("Called when a player toggles the age lock of an entity using the pick block key (default middle mouse button).") + .addDescription("Called when a player toggles the age lock of an entity using a golden dandelion") .addExample(""" on player toggling of an entity age lock: cancel event - send "You cannot toggle the age lock of entities!" to the player """) .addSince("INSERT HERE") .supplier(EvtPlayerToggleEntityAge::new) From dba1187c31ca4f47052f89e6fa566b7983242f48 Mon Sep 17 00:00:00 2001 From: CrebsTheCoder Date: Sat, 18 Apr 2026 10:50:52 +0800 Subject: [PATCH 04/17] Add event for player toggling entity age lock --- .../events/EvtPlayerToggleEntityAge.java | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java index da495a63448..13617e9c953 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java @@ -1,9 +1,11 @@ package org.skriptlang.skript.bukkit.entity.player.elements.events; +import ch.njol.skript.entity.EntityType; import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptEvent; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.registrations.EventValues; +import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; import org.bukkit.inventory.ItemStack; @@ -19,14 +21,15 @@ public static void register(SyntaxRegistry registry) { BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(EvtPlayerToggleEntityAge.class, "Player Toggle Entity Age Lock") .addEvent(PlayerToggleEntityAgeLockEvent.class) - .addPatterns("[player] [toggle[ing]] entity age lock") + .addPatterns("[player] [toggle[ing]] entity age lock [of %-entitytypes%]") .addDescription("Called when a player toggles the age lock of an entity using a golden dandelion") .addExample(""" - on player toggling of an entity age lock: + on player toggling entity age lock: cancel event """) - .addSince("INSERT HERE") + .addSince("INSERT VERSION") .supplier(EvtPlayerToggleEntityAge::new) + .addRequiredPlugin("26.1+") .build() ); @@ -34,19 +37,38 @@ public static void register(SyntaxRegistry registry) { EventValues.registerEventValue(PlayerToggleEntityAgeLockEvent.class, ItemStack.class, PlayerToggleEntityAgeLockEvent::getItem); } + private @Nullable Literal entitiesLiteral; + private EntityType @Nullable [] entities; + @Override public boolean init(Literal[] args, int matchedPattern, ParseResult parseResult) { + if (args[0] != null) { + //noinspection unchecked + entitiesLiteral = ((Literal) args[0]); + entities = entitiesLiteral.getAll(); + } return true; } @Override public boolean check(Event event) { + return event instanceof PlayerToggleEntityAgeLockEvent e && checkEntity(e.getEntity()); + } + + private boolean checkEntity(Entity entity) { + if (entities != null) { + for (EntityType entityType : entities) { + if (entityType.isInstance(entity)) + return true; + } + return false; + } return true; } @Override public String toString(@Nullable Event event, boolean debug) { - return "player toggling entity age lock"; + return "player toggling entity age lock" + (entitiesLiteral == null ? "" : " of " + entitiesLiteral); } } From 2f8f937d9a1c2d9342c45b2e095bab12d53df81b Mon Sep 17 00:00:00 2001 From: CrebsTheCoder Date: Sat, 18 Apr 2026 11:17:21 +0800 Subject: [PATCH 05/17] Allow listening for spesifically lock or unlock or both --- .../events/EvtPlayerToggleEntityAge.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java index 13617e9c953..82c2ef91e61 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java @@ -21,10 +21,10 @@ public static void register(SyntaxRegistry registry) { BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(EvtPlayerToggleEntityAge.class, "Player Toggle Entity Age Lock") .addEvent(PlayerToggleEntityAgeLockEvent.class) - .addPatterns("[player] [toggle[ing]] entity age lock [of %-entitytypes%]") + .addPatterns("[player] entity age (0¦lock|1¦unlock|2¦toggle) [of %-entitytypes%]") .addDescription("Called when a player toggles the age lock of an entity using a golden dandelion") .addExample(""" - on player toggling entity age lock: + on player entity age lock toggle: cancel event """) .addSince("INSERT VERSION") @@ -39,9 +39,15 @@ public static void register(SyntaxRegistry registry) { private @Nullable Literal entitiesLiteral; private EntityType @Nullable [] entities; + private @Nullable Boolean entityAgeLocked; @Override public boolean init(Literal[] args, int matchedPattern, ParseResult parseResult) { + entityAgeLocked = switch (parseResult.mark) { + case 0 -> true; + case 1 -> false; + default -> null; + }; if (args[0] != null) { //noinspection unchecked entitiesLiteral = ((Literal) args[0]); @@ -52,7 +58,9 @@ public boolean init(Literal[] args, int matchedPattern, ParseResult parseResu @Override public boolean check(Event event) { - return event instanceof PlayerToggleEntityAgeLockEvent e && checkEntity(e.getEntity()); + return event instanceof PlayerToggleEntityAgeLockEvent e + && (entityAgeLocked == null || entityAgeLocked == e.isAgeLocked()) + && checkEntity(e.getEntity()); } private boolean checkEntity(Entity entity) { @@ -68,7 +76,10 @@ private boolean checkEntity(Entity entity) { @Override public String toString(@Nullable Event event, boolean debug) { - return "player toggling entity age lock" + (entitiesLiteral == null ? "" : " of " + entitiesLiteral); + String state = (entityAgeLocked == null ? "lock/unlock" : (entityAgeLocked ? "lock" : "unlock")); + String entities = (entitiesLiteral == null ? "" : " of " + entitiesLiteral.toString(event, debug)); + + return "player toggling entity age " + state + entities; } } From 977933d9cdf46c679233c3503ed9ccc0bd50bf8f Mon Sep 17 00:00:00 2001 From: Crebs <72847555+CrebsTheCoder@users.noreply.github.com> Date: Sat, 18 Apr 2026 12:57:34 +0800 Subject: [PATCH 06/17] Update src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java Co-authored-by: SirSmurfy2 <82696841+Absolutionism@users.noreply.github.com> --- .../entity/player/elements/events/EvtPlayerToggleEntityAge.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java index 82c2ef91e61..69abb2ac3ba 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java @@ -29,7 +29,7 @@ public static void register(SyntaxRegistry registry) { """) .addSince("INSERT VERSION") .supplier(EvtPlayerToggleEntityAge::new) - .addRequiredPlugin("26.1+") + .addRequiredPlugin("Paper 26.1+") .build() ); From 088208e45a6cf2197ba5d0b7ce9eea0e58e2f0de Mon Sep 17 00:00:00 2001 From: CrebsTheCoder Date: Sat, 18 Apr 2026 14:23:05 +0800 Subject: [PATCH 07/17] Add JUnit tests for player toggling entity age lock event --- .../events/EvtPlayerToggleEntityAgeTest.java | 57 +++++++++++++++++++ .../skript/junit/EvtPlayerArmorChangeTest.sk | 53 ++++++++++------- 2 files changed, 90 insertions(+), 20 deletions(-) create mode 100644 src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtPlayerToggleEntityAgeTest.java diff --git a/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtPlayerToggleEntityAgeTest.java b/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtPlayerToggleEntityAgeTest.java new file mode 100644 index 00000000000..6d4e8d610df --- /dev/null +++ b/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtPlayerToggleEntityAgeTest.java @@ -0,0 +1,57 @@ +package org.skriptlang.skript.test.tests.syntaxes.events; + +import ch.njol.skript.Skript; +import ch.njol.skript.test.runner.SkriptJUnitTest; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Cow; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; +import org.easymock.EasyMock; +import org.junit.Before; +import org.junit.Test; + +public class EvtPlayerToggleEntityAgeTest extends SkriptJUnitTest { + + private static final boolean SUPPORTS_PLAYER_TOGGLE_ENTITY_AGE = Skript.classExists("io.papermc.paper.event.player.PlayerToggleEntityAgeLockEvent"); + + private Player player; + private Cow entity; + private ItemStack item; + + @Before + public void setUp() { + if (!SUPPORTS_PLAYER_TOGGLE_ENTITY_AGE) + return; + player = EasyMock.niceMock(Player.class); + entity = EasyMock.niceMock(Cow.class); + item = new ItemStack(Material.GOLDEN_DANDELION); + } + + @Test + public void testLock() { + if (!SUPPORTS_PLAYER_TOGGLE_ENTITY_AGE) + return; + callEvent(true); + } + + @Test + public void testUnlock() { + if (!SUPPORTS_PLAYER_TOGGLE_ENTITY_AGE) + return; + callEvent(false); + } + + private void callEvent(boolean ageLocked) { + try { + Class eventClass = Class.forName("io.papermc.paper.event.player.PlayerToggleEntityAgeLockEvent"); + Event event = (Event) eventClass.getConstructor(Player.class, LivingEntity.class, ItemStack.class, EquipmentSlot.class, boolean.class) + .newInstance(player, entity, item, EquipmentSlot.HAND, ageLocked); + Bukkit.getPluginManager().callEvent(event); + } catch (Exception ignored) {} + } + +} \ No newline at end of file diff --git a/src/test/skript/junit/EvtPlayerArmorChangeTest.sk b/src/test/skript/junit/EvtPlayerArmorChangeTest.sk index e9f0adb99bc..3ba32c9a8de 100644 --- a/src/test/skript/junit/EvtPlayerArmorChangeTest.sk +++ b/src/test/skript/junit/EvtPlayerArmorChangeTest.sk @@ -1,23 +1,36 @@ -options: - test: "org.skriptlang.skript.test.tests.syntaxes.events.EvtPlayerArmorChangeTest" +test "EvtPlayerToggleEntityAgeJUnit" when running JUnit: + running minecraft "26.1" + set {_tests::1} to "age lock event" + set {_tests::2} to "age unlock event" + set {_tests::3} to "age toggle event" + ensure junit test "org.skriptlang.skript.test.tests.syntaxes.events.EvtPlayerToggleEntityAgeTest" completes {_tests::*} -on load: - set {_tests::*} to "general change - called", "general change - old diamond helmet" and "general change - new netherite helmet" - add "helmet change - called", "helmet change - old diamond helmet" and "helmet change - new netherite helmet" to {_tests::*} - ensure junit test {@test} completes {_tests::*} +parse: + results: {EvtPlayerToggleEntityAge::parse::lock::*} + code: + on player entity age lock: + set {_test} to "org.skriptlang.skript.test.tests.syntaxes.events.EvtPlayerToggleEntityAgeTest" + junit test is {_test} + complete objective "age lock event" for {_test} -on player armor changed: - junit test is {@test} - complete "general change - called" for {@test} - if the old armor item is a diamond helmet: - complete "general change - old diamond helmet" for {@test} - if the new armor item is a netherite helmet: - complete "general change - new netherite helmet" for {@test} +parse: + results: {EvtPlayerToggleEntityAge::parse::unlock::*} + code: + on player entity age unlock: + set {_test} to "org.skriptlang.skript.test.tests.syntaxes.events.EvtPlayerToggleEntityAgeTest" + junit test is {_test} + complete objective "age unlock event" for {_test} -on helmet changed: - junit test is {@test} - complete "helmet change - called" for {@test} - if the old armor item is a diamond helmet: - complete "helmet change - old diamond helmet" for {@test} - if the new armor item is a netherite helmet: - complete "helmet change - new netherite helmet" for {@test} +parse: + results: {EvtPlayerToggleEntityAge::parse::toggle::*} + code: + on player entity age toggle: + set {_test} to "org.skriptlang.skript.test.tests.syntaxes.events.EvtPlayerToggleEntityAgeTest" + junit test is {_test} + complete objective "age toggle event" for {_test} + +test "EvtPlayerToggleEntityAge": + if running minecraft "26.1": + assert recursive size of {EvtPlayerToggleEntityAge::parse::*} is 0 with "Player toggle entity age lock event failed to parse in 26.1 and above" + else: + assert recursive size of {EvtPlayerToggleEntityAge::parse::*} isn't 0 with "Player toggle entity age lock event successfully parsed below 26.1" \ No newline at end of file From 7657b041f98db49accd042960a75fd228f0b12ab Mon Sep 17 00:00:00 2001 From: CrebsTheCoder Date: Sat, 18 Apr 2026 14:25:38 +0800 Subject: [PATCH 08/17] Accidently modified the wrong file oops --- .../skript/junit/EvtPlayerArmorChangeTest.sk | 53 +++++++------------ .../skript/junit/EvtPlayerToggleEntityTest.sk | 36 +++++++++++++ 2 files changed, 56 insertions(+), 33 deletions(-) create mode 100644 src/test/skript/junit/EvtPlayerToggleEntityTest.sk diff --git a/src/test/skript/junit/EvtPlayerArmorChangeTest.sk b/src/test/skript/junit/EvtPlayerArmorChangeTest.sk index 3ba32c9a8de..e9f0adb99bc 100644 --- a/src/test/skript/junit/EvtPlayerArmorChangeTest.sk +++ b/src/test/skript/junit/EvtPlayerArmorChangeTest.sk @@ -1,36 +1,23 @@ -test "EvtPlayerToggleEntityAgeJUnit" when running JUnit: - running minecraft "26.1" - set {_tests::1} to "age lock event" - set {_tests::2} to "age unlock event" - set {_tests::3} to "age toggle event" - ensure junit test "org.skriptlang.skript.test.tests.syntaxes.events.EvtPlayerToggleEntityAgeTest" completes {_tests::*} +options: + test: "org.skriptlang.skript.test.tests.syntaxes.events.EvtPlayerArmorChangeTest" -parse: - results: {EvtPlayerToggleEntityAge::parse::lock::*} - code: - on player entity age lock: - set {_test} to "org.skriptlang.skript.test.tests.syntaxes.events.EvtPlayerToggleEntityAgeTest" - junit test is {_test} - complete objective "age lock event" for {_test} +on load: + set {_tests::*} to "general change - called", "general change - old diamond helmet" and "general change - new netherite helmet" + add "helmet change - called", "helmet change - old diamond helmet" and "helmet change - new netherite helmet" to {_tests::*} + ensure junit test {@test} completes {_tests::*} -parse: - results: {EvtPlayerToggleEntityAge::parse::unlock::*} - code: - on player entity age unlock: - set {_test} to "org.skriptlang.skript.test.tests.syntaxes.events.EvtPlayerToggleEntityAgeTest" - junit test is {_test} - complete objective "age unlock event" for {_test} +on player armor changed: + junit test is {@test} + complete "general change - called" for {@test} + if the old armor item is a diamond helmet: + complete "general change - old diamond helmet" for {@test} + if the new armor item is a netherite helmet: + complete "general change - new netherite helmet" for {@test} -parse: - results: {EvtPlayerToggleEntityAge::parse::toggle::*} - code: - on player entity age toggle: - set {_test} to "org.skriptlang.skript.test.tests.syntaxes.events.EvtPlayerToggleEntityAgeTest" - junit test is {_test} - complete objective "age toggle event" for {_test} - -test "EvtPlayerToggleEntityAge": - if running minecraft "26.1": - assert recursive size of {EvtPlayerToggleEntityAge::parse::*} is 0 with "Player toggle entity age lock event failed to parse in 26.1 and above" - else: - assert recursive size of {EvtPlayerToggleEntityAge::parse::*} isn't 0 with "Player toggle entity age lock event successfully parsed below 26.1" \ No newline at end of file +on helmet changed: + junit test is {@test} + complete "helmet change - called" for {@test} + if the old armor item is a diamond helmet: + complete "helmet change - old diamond helmet" for {@test} + if the new armor item is a netherite helmet: + complete "helmet change - new netherite helmet" for {@test} diff --git a/src/test/skript/junit/EvtPlayerToggleEntityTest.sk b/src/test/skript/junit/EvtPlayerToggleEntityTest.sk new file mode 100644 index 00000000000..3ba32c9a8de --- /dev/null +++ b/src/test/skript/junit/EvtPlayerToggleEntityTest.sk @@ -0,0 +1,36 @@ +test "EvtPlayerToggleEntityAgeJUnit" when running JUnit: + running minecraft "26.1" + set {_tests::1} to "age lock event" + set {_tests::2} to "age unlock event" + set {_tests::3} to "age toggle event" + ensure junit test "org.skriptlang.skript.test.tests.syntaxes.events.EvtPlayerToggleEntityAgeTest" completes {_tests::*} + +parse: + results: {EvtPlayerToggleEntityAge::parse::lock::*} + code: + on player entity age lock: + set {_test} to "org.skriptlang.skript.test.tests.syntaxes.events.EvtPlayerToggleEntityAgeTest" + junit test is {_test} + complete objective "age lock event" for {_test} + +parse: + results: {EvtPlayerToggleEntityAge::parse::unlock::*} + code: + on player entity age unlock: + set {_test} to "org.skriptlang.skript.test.tests.syntaxes.events.EvtPlayerToggleEntityAgeTest" + junit test is {_test} + complete objective "age unlock event" for {_test} + +parse: + results: {EvtPlayerToggleEntityAge::parse::toggle::*} + code: + on player entity age toggle: + set {_test} to "org.skriptlang.skript.test.tests.syntaxes.events.EvtPlayerToggleEntityAgeTest" + junit test is {_test} + complete objective "age toggle event" for {_test} + +test "EvtPlayerToggleEntityAge": + if running minecraft "26.1": + assert recursive size of {EvtPlayerToggleEntityAge::parse::*} is 0 with "Player toggle entity age lock event failed to parse in 26.1 and above" + else: + assert recursive size of {EvtPlayerToggleEntityAge::parse::*} isn't 0 with "Player toggle entity age lock event successfully parsed below 26.1" \ No newline at end of file From b9fc60f320508190b8f8561e7ffc791d01d01835 Mon Sep 17 00:00:00 2001 From: Crebs <72847555+CrebsTheCoder@users.noreply.github.com> Date: Sun, 19 Apr 2026 21:27:33 +0800 Subject: [PATCH 09/17] Update src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java Co-authored-by: Efnilite <35348263+Efnilite@users.noreply.github.com> --- .../entity/player/elements/events/EvtPlayerToggleEntityAge.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java index 69abb2ac3ba..505ca00fcea 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java @@ -21,7 +21,7 @@ public static void register(SyntaxRegistry registry) { BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(EvtPlayerToggleEntityAge.class, "Player Toggle Entity Age Lock") .addEvent(PlayerToggleEntityAgeLockEvent.class) - .addPatterns("[player] entity age (0¦lock|1¦unlock|2¦toggle) [of %-entitytypes%]") + .addPatterns("[player] entity age ([:un]lock|toggle:toggle) [of %-entitytypes%]") .addDescription("Called when a player toggles the age lock of an entity using a golden dandelion") .addExample(""" on player entity age lock toggle: From 951e0249fa16e8c0cd8eae9ce825a26b504eb2c4 Mon Sep 17 00:00:00 2001 From: Crebs <72847555+CrebsTheCoder@users.noreply.github.com> Date: Sun, 19 Apr 2026 21:27:43 +0800 Subject: [PATCH 10/17] Update src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java Co-authored-by: Efnilite <35348263+Efnilite@users.noreply.github.com> --- .../entity/player/elements/events/EvtPlayerToggleEntityAge.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java index 505ca00fcea..7203f01150f 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java @@ -22,7 +22,7 @@ public static void register(SyntaxRegistry registry) { BukkitSyntaxInfos.Event.builder(EvtPlayerToggleEntityAge.class, "Player Toggle Entity Age Lock") .addEvent(PlayerToggleEntityAgeLockEvent.class) .addPatterns("[player] entity age ([:un]lock|toggle:toggle) [of %-entitytypes%]") - .addDescription("Called when a player toggles the age lock of an entity using a golden dandelion") + .addDescription("Called when a player toggles the age lock of an entity using a golden dandelion.") .addExample(""" on player entity age lock toggle: cancel event From 543da2ba7d99a4cce42429cbd6a5d1db7cf57c97 Mon Sep 17 00:00:00 2001 From: Crebs <72847555+CrebsTheCoder@users.noreply.github.com> Date: Sun, 19 Apr 2026 21:28:53 +0800 Subject: [PATCH 11/17] Apply suggestions from code review Co-authored-by: Efnilite <35348263+Efnilite@users.noreply.github.com> --- .../tests/syntaxes/events/EvtPlayerToggleEntityAgeTest.java | 2 +- src/test/skript/junit/EvtPlayerToggleEntityTest.sk | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtPlayerToggleEntityAgeTest.java b/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtPlayerToggleEntityAgeTest.java index 6d4e8d610df..f3a730bc7d1 100644 --- a/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtPlayerToggleEntityAgeTest.java +++ b/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtPlayerToggleEntityAgeTest.java @@ -54,4 +54,4 @@ private void callEvent(boolean ageLocked) { } catch (Exception ignored) {} } -} \ No newline at end of file +} diff --git a/src/test/skript/junit/EvtPlayerToggleEntityTest.sk b/src/test/skript/junit/EvtPlayerToggleEntityTest.sk index 3ba32c9a8de..6da217ce1bc 100644 --- a/src/test/skript/junit/EvtPlayerToggleEntityTest.sk +++ b/src/test/skript/junit/EvtPlayerToggleEntityTest.sk @@ -29,8 +29,7 @@ parse: junit test is {_test} complete objective "age toggle event" for {_test} -test "EvtPlayerToggleEntityAge": - if running minecraft "26.1": +test "EvtPlayerToggleEntityAge" if running minecraft "26.1": assert recursive size of {EvtPlayerToggleEntityAge::parse::*} is 0 with "Player toggle entity age lock event failed to parse in 26.1 and above" else: - assert recursive size of {EvtPlayerToggleEntityAge::parse::*} isn't 0 with "Player toggle entity age lock event successfully parsed below 26.1" \ No newline at end of file + assert recursive size of {EvtPlayerToggleEntityAge::parse::*} isn't 0 with "Player toggle entity age lock event successfully parsed below 26.1" From 47247b3549ff43e6f29ac7d65dc9342d69798636 Mon Sep 17 00:00:00 2001 From: CrebsTheCoder Date: Sun, 19 Apr 2026 22:23:23 +0800 Subject: [PATCH 12/17] Use SyntaxStringBuilder, replaced mark with hasTag, Revert test script changes syntax because "test "EvtPlayerToggleEntityAge" if running minecraft "26.1" doesn't exist --- .../events/EvtPlayerToggleEntityAge.java | 28 +++++++++++-------- .../skript/junit/EvtPlayerToggleEntityTest.sk | 5 ++-- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java index 7203f01150f..219a56ee191 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java @@ -4,6 +4,7 @@ import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptEvent; import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.lang.SyntaxStringBuilder; import ch.njol.skript.registrations.EventValues; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -24,7 +25,7 @@ public static void register(SyntaxRegistry registry) { .addPatterns("[player] entity age ([:un]lock|toggle:toggle) [of %-entitytypes%]") .addDescription("Called when a player toggles the age lock of an entity using a golden dandelion.") .addExample(""" - on player entity age lock toggle: + on player entity age lock: cancel event """) .addSince("INSERT VERSION") @@ -43,11 +44,13 @@ public static void register(SyntaxRegistry registry) { @Override public boolean init(Literal[] args, int matchedPattern, ParseResult parseResult) { - entityAgeLocked = switch (parseResult.mark) { - case 0 -> true; - case 1 -> false; - default -> null; - }; + if (parseResult.hasTag("toggle")) { + entityAgeLocked = null; + } else if (parseResult.hasTag("un")) { + entityAgeLocked = false; + } else { + entityAgeLocked = true; + } if (args[0] != null) { //noinspection unchecked entitiesLiteral = ((Literal) args[0]); @@ -59,7 +62,7 @@ public boolean init(Literal[] args, int matchedPattern, ParseResult parseResu @Override public boolean check(Event event) { return event instanceof PlayerToggleEntityAgeLockEvent e - && (entityAgeLocked == null || entityAgeLocked == e.isAgeLocked()) + && (entityAgeLocked == null || entityAgeLocked.equals(e.isAgeLocked())) && checkEntity(e.getEntity()); } @@ -76,10 +79,11 @@ private boolean checkEntity(Entity entity) { @Override public String toString(@Nullable Event event, boolean debug) { - String state = (entityAgeLocked == null ? "lock/unlock" : (entityAgeLocked ? "lock" : "unlock")); - String entities = (entitiesLiteral == null ? "" : " of " + entitiesLiteral.toString(event, debug)); - - return "player toggling entity age " + state + entities; + return new SyntaxStringBuilder(event, debug) + .append("player toggling entity age") + .append(entityAgeLocked == null ? "lock/unlock" : (entityAgeLocked ? "lock" : "unlock")) + .append(entitiesLiteral) + .toString(); } -} +} \ No newline at end of file diff --git a/src/test/skript/junit/EvtPlayerToggleEntityTest.sk b/src/test/skript/junit/EvtPlayerToggleEntityTest.sk index 6da217ce1bc..3ba32c9a8de 100644 --- a/src/test/skript/junit/EvtPlayerToggleEntityTest.sk +++ b/src/test/skript/junit/EvtPlayerToggleEntityTest.sk @@ -29,7 +29,8 @@ parse: junit test is {_test} complete objective "age toggle event" for {_test} -test "EvtPlayerToggleEntityAge" if running minecraft "26.1": +test "EvtPlayerToggleEntityAge": + if running minecraft "26.1": assert recursive size of {EvtPlayerToggleEntityAge::parse::*} is 0 with "Player toggle entity age lock event failed to parse in 26.1 and above" else: - assert recursive size of {EvtPlayerToggleEntityAge::parse::*} isn't 0 with "Player toggle entity age lock event successfully parsed below 26.1" + assert recursive size of {EvtPlayerToggleEntityAge::parse::*} isn't 0 with "Player toggle entity age lock event successfully parsed below 26.1" \ No newline at end of file From 9820407e1fc3d5d9527928e833e2e4d761f501a6 Mon Sep 17 00:00:00 2001 From: CrebsTheCoder Date: Mon, 20 Apr 2026 20:15:08 +0800 Subject: [PATCH 13/17] Added empty lines --- .../entity/player/elements/events/EvtPlayerToggleEntityAge.java | 2 +- src/test/skript/junit/EvtPlayerToggleEntityTest.sk | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java index 219a56ee191..092fbc3ee14 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java @@ -86,4 +86,4 @@ public String toString(@Nullable Event event, boolean debug) { .toString(); } -} \ No newline at end of file +} diff --git a/src/test/skript/junit/EvtPlayerToggleEntityTest.sk b/src/test/skript/junit/EvtPlayerToggleEntityTest.sk index 3ba32c9a8de..fbef40a6af1 100644 --- a/src/test/skript/junit/EvtPlayerToggleEntityTest.sk +++ b/src/test/skript/junit/EvtPlayerToggleEntityTest.sk @@ -33,4 +33,4 @@ test "EvtPlayerToggleEntityAge": if running minecraft "26.1": assert recursive size of {EvtPlayerToggleEntityAge::parse::*} is 0 with "Player toggle entity age lock event failed to parse in 26.1 and above" else: - assert recursive size of {EvtPlayerToggleEntityAge::parse::*} isn't 0 with "Player toggle entity age lock event successfully parsed below 26.1" \ No newline at end of file + assert recursive size of {EvtPlayerToggleEntityAge::parse::*} isn't 0 with "Player toggle entity age lock event successfully parsed below 26.1" From 1b3ca34966d639027ef5b13d57440de3ef2c7a87 Mon Sep 17 00:00:00 2001 From: CrebsTheCoder Date: Tue, 21 Apr 2026 22:22:40 +0800 Subject: [PATCH 14/17] Used enum for ageLockAction instead of nullable boolean and some examples --- .../events/EvtPlayerToggleEntityAge.java | 39 +++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java index 092fbc3ee14..ad602b2d8fa 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java @@ -25,9 +25,18 @@ public static void register(SyntaxRegistry registry) { .addPatterns("[player] entity age ([:un]lock|toggle:toggle) [of %-entitytypes%]") .addDescription("Called when a player toggles the age lock of an entity using a golden dandelion.") .addExample(""" - on player entity age lock: - cancel event - """) + on player entity age lock: + send "You have locked the age lock of %event-entity%" to player + + on player entity age unlock of pig: + if name of event-entity is "Small Pig": + cancel event + send "You can't unlock the age of this pig" to player + + on player entity age toggle: + if event-entity is a baby cow: + send "You just toggled the age of a baby cow" to player + """) .addSince("INSERT VERSION") .supplier(EvtPlayerToggleEntityAge::new) .addRequiredPlugin("Paper 26.1+") @@ -38,18 +47,22 @@ public static void register(SyntaxRegistry registry) { EventValues.registerEventValue(PlayerToggleEntityAgeLockEvent.class, ItemStack.class, PlayerToggleEntityAgeLockEvent::getItem); } + private enum AgeLockAction { + LOCK, UNLOCK, TOGGLE + } + private @Nullable Literal entitiesLiteral; private EntityType @Nullable [] entities; - private @Nullable Boolean entityAgeLocked; + private AgeLockAction ageLockAction; @Override public boolean init(Literal[] args, int matchedPattern, ParseResult parseResult) { if (parseResult.hasTag("toggle")) { - entityAgeLocked = null; + ageLockAction = AgeLockAction.TOGGLE; } else if (parseResult.hasTag("un")) { - entityAgeLocked = false; + ageLockAction = AgeLockAction.UNLOCK; } else { - entityAgeLocked = true; + ageLockAction = AgeLockAction.LOCK; } if (args[0] != null) { //noinspection unchecked @@ -62,7 +75,7 @@ public boolean init(Literal[] args, int matchedPattern, ParseResult parseResu @Override public boolean check(Event event) { return event instanceof PlayerToggleEntityAgeLockEvent e - && (entityAgeLocked == null || entityAgeLocked.equals(e.isAgeLocked())) + && (ageLockAction == AgeLockAction.TOGGLE || (ageLockAction == AgeLockAction.LOCK) == e.isAgeLocked()) && checkEntity(e.getEntity()); } @@ -79,11 +92,15 @@ private boolean checkEntity(Entity entity) { @Override public String toString(@Nullable Event event, boolean debug) { + String action = switch (ageLockAction) { + case LOCK -> "lock"; + case UNLOCK -> "unlock"; + case TOGGLE -> "toggle"; + }; return new SyntaxStringBuilder(event, debug) - .append("player toggling entity age") - .append(entityAgeLocked == null ? "lock/unlock" : (entityAgeLocked ? "lock" : "unlock")) + .append("player entity age") + .append(action) .append(entitiesLiteral) .toString(); } - } From e749e91d8423eef85589fab63d440533dc12412e Mon Sep 17 00:00:00 2001 From: CrebsTheCoder Date: Fri, 24 Apr 2026 21:04:59 +0800 Subject: [PATCH 15/17] Use a more descriptive variable names and fix nullable entitiesLiteral handling in toString --- .../skript/bukkit/entity/player/PlayerModule.java | 1 + .../player/elements/events/EvtPlayerToggleEntityAge.java | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/PlayerModule.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/PlayerModule.java index 42c45bed777..889e09024b3 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/entity/player/PlayerModule.java +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/PlayerModule.java @@ -36,6 +36,7 @@ protected void loadSelf(SkriptAddon addon) { ExprPickedItem::register ); } + // TODO: UNTIL MC 26.1.1 (remove guard) if (Skript.classExists("io.papermc.paper.event.player.PlayerToggleEntityAgeLockEvent")) { register(addon, EvtPlayerToggleEntityAge::register diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java index ad602b2d8fa..298833cbe78 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java @@ -74,9 +74,9 @@ public boolean init(Literal[] args, int matchedPattern, ParseResult parseResu @Override public boolean check(Event event) { - return event instanceof PlayerToggleEntityAgeLockEvent e - && (ageLockAction == AgeLockAction.TOGGLE || (ageLockAction == AgeLockAction.LOCK) == e.isAgeLocked()) - && checkEntity(e.getEntity()); + return event instanceof PlayerToggleEntityAgeLockEvent ageLockEvent + && (ageLockAction == AgeLockAction.TOGGLE || (ageLockAction == AgeLockAction.LOCK) == ageLockEvent.isAgeLocked()) + && checkEntity(ageLockEvent.getEntity()); } private boolean checkEntity(Entity entity) { @@ -100,7 +100,7 @@ public String toString(@Nullable Event event, boolean debug) { return new SyntaxStringBuilder(event, debug) .append("player entity age") .append(action) - .append(entitiesLiteral) + .appendIf(entitiesLiteral != null, "of", entitiesLiteral) .toString(); } } From 4deb97eddfb2d394d818adc36c010f156997d4ee Mon Sep 17 00:00:00 2001 From: CrebsTheCoder Date: Fri, 8 May 2026 16:35:28 +0800 Subject: [PATCH 16/17] pickle's suggestion --- .../events/EvtPlayerToggleEntityAge.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java index 298833cbe78..23b91754a58 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java @@ -80,14 +80,14 @@ public boolean check(Event event) { } private boolean checkEntity(Entity entity) { - if (entities != null) { - for (EntityType entityType : entities) { - if (entityType.isInstance(entity)) - return true; - } - return false; + if (entities == null) { + return true; } - return true; + for (EntityType entityType : entities) { + if (entityType.isInstance(entity)) + return true; + } + return false; } @Override @@ -98,8 +98,7 @@ public String toString(@Nullable Event event, boolean debug) { case TOGGLE -> "toggle"; }; return new SyntaxStringBuilder(event, debug) - .append("player entity age") - .append(action) + .append("player entity age", action) .appendIf(entitiesLiteral != null, "of", entitiesLiteral) .toString(); } From 5c9d4733a15e0883bf4f248fa8685f5986f6054c Mon Sep 17 00:00:00 2001 From: Crebs <72847555+CrebsTheCoder@users.noreply.github.com> Date: Mon, 1 Jun 2026 03:07:19 +0800 Subject: [PATCH 17/17] Update src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java Co-authored-by: SirSmurfy2 <82696841+Absolutionism@users.noreply.github.com> --- .../entity/player/elements/events/EvtPlayerToggleEntityAge.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java index 23b91754a58..ae7711c5dae 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java +++ b/src/main/java/org/skriptlang/skript/bukkit/entity/player/elements/events/EvtPlayerToggleEntityAge.java @@ -102,4 +102,5 @@ public String toString(@Nullable Event event, boolean debug) { .appendIf(entitiesLiteral != null, "of", entitiesLiteral) .toString(); } + }