From ed0a7c105abecb60ba4fc667236be2f76aad3931 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Sat, 1 Mar 2025 21:17:03 -0500 Subject: [PATCH 01/27] Add annotation --- .../java/ch/njol/skript/doc/AvailableEvents.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/main/java/ch/njol/skript/doc/AvailableEvents.java diff --git a/src/main/java/ch/njol/skript/doc/AvailableEvents.java b/src/main/java/ch/njol/skript/doc/AvailableEvents.java new file mode 100644 index 00000000000..25672a65025 --- /dev/null +++ b/src/main/java/ch/njol/skript/doc/AvailableEvents.java @@ -0,0 +1,14 @@ +package ch.njol.skript.doc; + +import org.bukkit.event.Event; + +import java.lang.annotation.*; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface AvailableEvents { + + public Class[] value(); + +} From 28575902c9c3494e3176f86d6461660b8439128a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Sat, 1 Mar 2025 21:17:21 -0500 Subject: [PATCH 02/27] Add annotation to needed expressions --- .../njol/skript/expressions/ExprAbsorbedBlocks.java | 7 ++----- .../njol/skript/expressions/ExprAppliedEffect.java | 1 + .../skript/expressions/ExprAppliedEnchantments.java | 7 ++----- .../ch/njol/skript/expressions/ExprAttacked.java | 8 +++----- .../ch/njol/skript/expressions/ExprAttacker.java | 8 +++----- .../njol/skript/expressions/ExprBeaconValues.java | 1 + .../ch/njol/skript/expressions/ExprClicked.java | 7 ++----- .../ch/njol/skript/expressions/ExprCommand.java | 10 +++++----- .../njol/skript/expressions/ExprCommandSender.java | 13 ++++++++----- .../java/ch/njol/skript/expressions/ExprDamage.java | 7 ++----- .../java/ch/njol/skript/expressions/ExprEgg.java | 8 +++----- .../ch/njol/skript/expressions/ExprEnchantItem.java | 7 ++----- .../skript/expressions/ExprEnchantingExpCost.java | 7 ++----- .../skript/expressions/ExprEnchantmentBonus.java | 7 ++----- .../skript/expressions/ExprEnchantmentOffer.java | 8 ++------ .../njol/skript/expressions/ExprEvtInitiator.java | 7 ++----- .../ch/njol/skript/expressions/ExprExperience.java | 2 ++ .../njol/skript/expressions/ExprExplodedBlocks.java | 7 ++----- .../skript/expressions/ExprExplosionBlockYield.java | 7 ++----- .../njol/skript/expressions/ExprExplosionYield.java | 8 +++----- .../skript/expressions/ExprFertilizedBlocks.java | 8 ++------ .../ch/njol/skript/expressions/ExprFinalDamage.java | 9 +++------ .../njol/skript/expressions/ExprHatchingNumber.java | 7 ++----- .../njol/skript/expressions/ExprHatchingType.java | 7 ++----- .../ch/njol/skript/expressions/ExprHealAmount.java | 7 ++----- .../ch/njol/skript/expressions/ExprHealReason.java | 9 ++++----- .../java/ch/njol/skript/expressions/ExprHealth.java | 2 ++ .../ch/njol/skript/expressions/ExprHoverList.java | 1 + .../expressions/ExprInventoryCloseReason.java | 8 ++------ .../java/ch/njol/skript/expressions/ExprLevel.java | 9 +++------ .../njol/skript/expressions/ExprLevelProgress.java | 10 ++++------ .../ch/njol/skript/expressions/ExprMaxHealth.java | 7 +------ .../java/ch/njol/skript/expressions/ExprMe.java | 7 +++---- .../ch/njol/skript/expressions/ExprMessage.java | 3 ++- .../skript/expressions/ExprProtocolVersion.java | 13 +++++-------- .../njol/skript/expressions/ExprReadiedArrow.java | 9 +++------ .../njol/skript/expressions/ExprSentCommands.java | 10 ++++------ .../njol/skript/expressions/ExprVersionString.java | 13 +++++-------- 38 files changed, 101 insertions(+), 175 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java index c436a0474c6..da4a9c104ee 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java @@ -3,17 +3,13 @@ import java.util.Iterator; import java.util.List; +import ch.njol.skript.doc.*; import org.bukkit.block.BlockState; import org.bukkit.event.Event; import org.bukkit.event.block.SpongeAbsorbEvent; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -24,6 +20,7 @@ @Name("Absorbed blocks") @Description("The blocks absorbed by a sponge block.") +@AvailableEvents(SpongeAbsorbEvent.class) @Events("sponge absorb") @Examples("the absorbed blocks") @Since("2.5") diff --git a/src/main/java/ch/njol/skript/expressions/ExprAppliedEffect.java b/src/main/java/ch/njol/skript/expressions/ExprAppliedEffect.java index 02e6a8688a9..80c191cec21 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAppliedEffect.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAppliedEffect.java @@ -21,6 +21,7 @@ "\telse if applied effect = secondary effect:", "\t\tbroadcast \"Is Secondary\"" }) +@AvailableEvents(BeaconEffectEvent.class) @Events("Beacon Effect") @RequiredPlugins("Paper") @Since("2.10") diff --git a/src/main/java/ch/njol/skript/expressions/ExprAppliedEnchantments.java b/src/main/java/ch/njol/skript/expressions/ExprAppliedEnchantments.java index f2b0b79ee11..0632fe39c41 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAppliedEnchantments.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAppliedEnchantments.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.enchantments.Enchantment; import org.bukkit.event.Event; import org.bukkit.event.enchantment.EnchantItemEvent; @@ -7,11 +8,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -26,6 +22,7 @@ " Deleting or removing the applied enchantments will prevent the item's enchantment."}) @Examples({"on enchant:", "\tset the applied enchantments to sharpness 10 and fire aspect 5"}) +@AvailableEvents(EnchantItemEvent.class) @Events("enchant") @Since("2.5") public class ExprAppliedEnchantments extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprAttacked.java b/src/main/java/ch/njol/skript/expressions/ExprAttacked.java index 5b2ed4e51cb..b090100aaaf 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAttacked.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAttacked.java @@ -2,6 +2,7 @@ import java.lang.reflect.Array; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.EventRestrictedSyntax; import ch.njol.util.coll.CollectionUtils; import org.bukkit.entity.Entity; @@ -16,11 +17,6 @@ import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.entity.EntityData; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; @@ -37,6 +33,8 @@ "\tvictim is a creeper", "\tdamage the attacked by 1 heart"}) @Since("1.3, 2.6.1 (projectile hit event)") +@AvailableEvents({EntityDamageEvent.class, EntityDeathEvent.class, + VehicleDamageEvent.class, VehicleDestroyEvent.class, ProjectileHitEvent.class}) @Events({"damage", "death", "projectile hit"}) public class ExprAttacked extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprAttacker.java b/src/main/java/ch/njol/skript/expressions/ExprAttacker.java index bf1e6d9f20e..a5fe99dcbed 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAttacker.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAttacker.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.EventRestrictedSyntax; import ch.njol.util.coll.CollectionUtils; import org.bukkit.entity.Entity; @@ -13,11 +14,6 @@ import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -37,6 +33,8 @@ " health of attacker is less than or equal to 2", " damage victim by 1 heart"}) @Since("1.3") +@AvailableEvents({EntityDamageEvent.class, EntityDeathEvent.class, + VehicleDamageEvent.class, VehicleDestroyEvent.class}) @Events({"damage", "death", "destroy"}) public class ExprAttacker extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprBeaconValues.java b/src/main/java/ch/njol/skript/expressions/ExprBeaconValues.java index 887a0a0cc56..07c9e09b0ae 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBeaconValues.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBeaconValues.java @@ -37,6 +37,7 @@ "add 1 to range of {_block}" }) @RequiredPlugins("Paper (range)") +@AvailableEvents({PlayerChangeBeaconEffectEvent.class, BeaconEffectEvent.class, BeaconActivatedEvent.class, BeaconDeactivatedEvent.class}) @Events({"Beacon Effect", "Beacon Toggle", "Beacon Change Effect"}) @Since("2.10") public class ExprBeaconValues extends PropertyExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprClicked.java b/src/main/java/ch/njol/skript/expressions/ExprClicked.java index 536da33b70f..1cd5d5e680b 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprClicked.java +++ b/src/main/java/ch/njol/skript/expressions/ExprClicked.java @@ -2,6 +2,7 @@ import java.lang.reflect.Array; +import ch.njol.skript.doc.*; import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.event.Event; @@ -17,11 +18,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.aliases.ItemType; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.entity.EntityData; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; @@ -41,6 +37,7 @@ "\tshow the inventory of the clicked block to the player" }) @Since("1.0, 2.2-dev35 (more clickable things)") +@AvailableEvents({PlayerInteractEntityEvent.class, PlayerInteractAtEntityEvent.class, InventoryClickEvent.class, EnchantItemEvent.class, PlayerInteractEvent.class}) @Events({"click", "inventory click"}) public class ExprClicked extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprCommand.java b/src/main/java/ch/njol/skript/expressions/ExprCommand.java index 8cb71f77e34..e1208fe1207 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprCommand.java +++ b/src/main/java/ch/njol/skript/expressions/ExprCommand.java @@ -1,6 +1,8 @@ package ch.njol.skript.expressions; +import ch.njol.skript.command.CommandEvent; import ch.njol.skript.command.ScriptCommandEvent; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.EventRestrictedSyntax; import ch.njol.util.coll.CollectionUtils; import org.bukkit.event.Event; @@ -9,11 +11,6 @@ import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -32,6 +29,9 @@ "\t\t\tmessage \"You're not allowed to use commands during the game\"", "\t\t\tcancel the event"}) @Since("2.0, 2.7 (support for script commands)") +// TODO REMOVE +// Should this use CommandEvent or ScriptCommandEvent? +@AvailableEvents({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, CommandEvent.class}) @Events("command") public class ExprCommand extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java b/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java index 2d71a3b2e0e..78c4a59337c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java +++ b/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java @@ -1,13 +1,13 @@ package ch.njol.skript.expressions; +import ch.njol.skript.command.CommandEvent; +import ch.njol.skript.command.ScriptCommandEvent; +import ch.njol.skript.doc.*; import org.bukkit.command.CommandSender; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.expressions.base.EventValueExpression; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.server.ServerCommandEvent; @Name("Command Sender") @Description({ @@ -21,6 +21,9 @@ "\tlog \"%executor% used command /%command% %arguments%\" to \"commands.log\"" }) @Since("2.0") +// TODO REMOVE +// Should this use CommandEvent or ScriptCommandEvent? +@AvailableEvents({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, CommandEvent.class}) @Events("command") public class ExprCommandSender extends EventValueExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprDamage.java b/src/main/java/ch/njol/skript/expressions/ExprDamage.java index 962e20262f2..b71820f46f7 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprDamage.java +++ b/src/main/java/ch/njol/skript/expressions/ExprDamage.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerItemDamageEvent; @@ -9,11 +10,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.bukkitutil.HealthUtils; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -36,6 +32,7 @@ "\tincrease the damage by 2" }) @Since("1.3.5, 2.8.0 (item damage event)") +@AvailableEvents({EntityDamageEvent.class, VehicleDamageEvent.class, PlayerItemDamageEvent.class}) @Events({"Damage", "Vehicle Damage", "Item Damage"}) public class ExprDamage extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEgg.java b/src/main/java/ch/njol/skript/expressions/ExprEgg.java index 17b18ad73f1..67e66f07d58 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEgg.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEgg.java @@ -1,19 +1,17 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.entity.Egg; import org.bukkit.event.Event; +import org.bukkit.event.player.PlayerEggThrowEvent; import org.jetbrains.annotations.Nullable; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.expressions.base.EventValueExpression; @Name("The Egg") @Description("The egg thrown in a Player Egg Throw event.") @Examples("spawn an egg at the egg") +@AvailableEvents(PlayerEggThrowEvent.class) @Events("Egg Throw") @Since("2.7") public class ExprEgg extends EventValueExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java index cf06ff046bc..526c252bdea 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.enchantment.EnchantItemEvent; import org.bukkit.event.enchantment.PrepareItemEnchantEvent; @@ -8,11 +9,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.aliases.ItemType; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -28,6 +24,7 @@ "\tset the enchanted item to a diamond chestplate", "on enchant prepare:", "\tset the enchant item to a wooden sword"}) +@AvailableEvents({EnchantItemEvent.class, PrepareItemEnchantEvent.class}) @Events({"enchant prepare", "enchant"}) @Since("2.5") public class ExprEnchantItem extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantingExpCost.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantingExpCost.java index 4f9a52763dd..d37764d09fe 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantingExpCost.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantingExpCost.java @@ -1,16 +1,12 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.enchantment.EnchantItemEvent; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -25,6 +21,7 @@ "This is number that was displayed in the enchantment table, not the actual number of levels removed."}) @Examples({"on enchant:", "\tsend \"Cost: %the displayed enchanting cost%\" to player"}) +@AvailableEvents(EnchantItemEvent.class) @Events("enchant") @Since("2.5") public class ExprEnchantingExpCost extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentBonus.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentBonus.java index 0e599582871..6792194b6da 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentBonus.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentBonus.java @@ -1,15 +1,11 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.enchantment.PrepareItemEnchantEvent; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -21,6 +17,7 @@ @Description("The enchantment bonus in an enchant prepare event. This represents the number of bookshelves affecting/surrounding the enchantment table.") @Examples({"on enchant:", "\tsend \"There are %enchantment bonus% bookshelves surrounding this enchantment table!\" to player"}) +@AvailableEvents(PrepareItemEnchantEvent.class) @Events("enchant prepare") @Since("2.5") public class ExprEnchantmentBonus extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java index e96f501b1a2..533f1a49ee9 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Random; +import ch.njol.skript.doc.*; import org.bukkit.enchantments.EnchantmentOffer; import org.bukkit.event.Event; import org.bukkit.event.enchantment.PrepareItemEnchantEvent; @@ -12,12 +13,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.RequiredPlugins; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -32,6 +27,7 @@ @Examples({"on enchant prepare:", "\tsend \"Your enchantment offers are: %the enchantment offers%\" to player"}) @Since("2.5") +@AvailableEvents(PrepareItemEnchantEvent.class) @Events("enchant prepare") @RequiredPlugins("1.11 or newer") public class ExprEnchantmentOffer extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEvtInitiator.java b/src/main/java/ch/njol/skript/expressions/ExprEvtInitiator.java index aa454c71df3..3172d81f282 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEvtInitiator.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEvtInitiator.java @@ -1,11 +1,7 @@ package ch.njol.skript.expressions; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -24,6 +20,7 @@ "\tholder of event-initiator-inventory is a chest", "\tbroadcast \"Item transport happening at %location at holder of event-initiator-inventory%!\"" }) +@AvailableEvents(InventoryMoveItemEvent.class) @Events("Inventory Item Move") @Since("2.8.0") public class ExprEvtInitiator extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprExperience.java b/src/main/java/ch/njol/skript/expressions/ExprExperience.java index aba4975419e..fffbe78e2d5 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExperience.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExperience.java @@ -42,6 +42,8 @@ "\tadd 70 to dropped experience", }) @Since("2.1, 2.5.3 (block break event), 2.7 (experience change event), 2.10 (breeding, fishing)") +@AvailableEvents({ExperienceSpawnEvent.class, BlockBreakEvent.class, + PlayerExpChangeEvent.class, EntityBreedEvent.class, PlayerFishEvent.class}) @Events({"experience spawn", "break / mine", "experience change", "entity breeding"}) public class ExprExperience extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java index d67b502f56b..c5275bbce55 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java @@ -3,6 +3,7 @@ import java.util.List; import ch.njol.skript.classes.Changer.ChangeMode; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.EventRestrictedSyntax; import ch.njol.util.coll.CollectionUtils; import org.bukkit.block.Block; @@ -11,11 +12,6 @@ import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser; @@ -42,6 +38,7 @@ "", "on explode:", "\tadd blocks above event-entity to exploded blocks"}) +@AvailableEvents(EntityExplodeEvent.class) @Events("explode") @Since("2.5, 2.8.6 (modify blocks)") public class ExprExplodedBlocks extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprExplosionBlockYield.java b/src/main/java/ch/njol/skript/expressions/ExprExplosionBlockYield.java index d38b373cfb3..ac4234b0165 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExplosionBlockYield.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExplosionBlockYield.java @@ -1,16 +1,12 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.entity.EntityExplodeEvent; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -25,6 +21,7 @@ "Attempting to change the yield to a value less than 0 will have no effect."}) @Examples({"on explode:", "set the explosion's block yield to 10%"}) +@AvailableEvents(EntityExplodeEvent.class) @Events("explosion") @Since("2.5") public class ExprExplosionBlockYield extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprExplosionYield.java b/src/main/java/ch/njol/skript/expressions/ExprExplosionYield.java index 78605dbef38..3fbf5847517 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExplosionYield.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExplosionYield.java @@ -1,16 +1,13 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.entity.ExplosionPrimeEvent; +import org.checkerframework.checker.units.qual.A; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -25,6 +22,7 @@ " Read this wiki page for more information"}) @Examples({"on explosion prime:", "\tset the yield of the explosion to 10"}) +@AvailableEvents(ExplosionPrimeEvent.class) @Events("explosion prime") @Since("2.5") public class ExprExplosionYield extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprFertilizedBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprFertilizedBlocks.java index 9c8cc950ab0..35ac3a56e0d 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprFertilizedBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprFertilizedBlocks.java @@ -3,17 +3,12 @@ import java.util.Iterator; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.block.BlockFertilizeEvent; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.RequiredPlugins; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -24,6 +19,7 @@ @Name("Fertilized Blocks") @Description("The blocks fertilized in block fertilize events.") @RequiredPlugins("Minecraft 1.13 or newer") +@AvailableEvents(BlockFertilizeEvent.class) @Events("block fertilize") @Examples("the fertilized blocks") @Since("2.5") diff --git a/src/main/java/ch/njol/skript/expressions/ExprFinalDamage.java b/src/main/java/ch/njol/skript/expressions/ExprFinalDamage.java index 324ded1aef7..fc2f4b196c8 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprFinalDamage.java +++ b/src/main/java/ch/njol/skript/expressions/ExprFinalDamage.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.entity.EntityDamageEvent; import org.jetbrains.annotations.Nullable; @@ -7,11 +8,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.bukkitutil.HealthUtils; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -22,8 +18,9 @@ @Name("Final Damage") @Description("How much damage is done in a damage event, considering all types of damage reduction. Can NOT be changed.") @Examples({"send \"%final damage%\" to victim"}) -@Since("2.2-dev19") +@AvailableEvents(EntityDamageEvent.class) @Events("damage") +@Since("2.2-dev19") public class ExprFinalDamage extends SimpleExpression { static { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHatchingNumber.java b/src/main/java/ch/njol/skript/expressions/ExprHatchingNumber.java index 49228742570..1f15142545d 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHatchingNumber.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHatchingNumber.java @@ -2,11 +2,7 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -26,6 +22,7 @@ "on player egg throw:", "\tset the hatching number to 10" }) +@AvailableEvents(PlayerEggThrowEvent.class) @Events("Egg Throw") @Since("2.7") public class ExprHatchingNumber extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHatchingType.java b/src/main/java/ch/njol/skript/expressions/ExprHatchingType.java index c5b8639657c..7517c72d8cf 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHatchingType.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHatchingType.java @@ -3,11 +3,7 @@ import ch.njol.skript.Skript; import ch.njol.skript.bukkitutil.EntityUtils; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.entity.EntityData; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; @@ -26,6 +22,7 @@ "on player egg throw:", "\tset the hatching entity type to a primed tnt" }) +@AvailableEvents(PlayerEggThrowEvent.class) @Events("Egg Throw") @Since("2.7") public class ExprHatchingType extends SimpleExpression> { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHealAmount.java b/src/main/java/ch/njol/skript/expressions/ExprHealAmount.java index 5410d2ccc5d..a4f411281fb 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHealAmount.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHealAmount.java @@ -1,6 +1,7 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.entity.EntityRegainHealthEvent; import org.jetbrains.annotations.Nullable; @@ -8,11 +9,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -27,6 +23,7 @@ "\tincrease the heal amount by 2", "\tremove 0.5 from the healing amount" }) +@AvailableEvents(EntityRegainHealthEvent.class) @Events("heal") @Since("2.5.1") public class ExprHealAmount extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHealReason.java b/src/main/java/ch/njol/skript/expressions/ExprHealReason.java index bc6602eb8b3..009e1e901e2 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHealReason.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHealReason.java @@ -1,14 +1,12 @@ package ch.njol.skript.expressions; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.expressions.base.EventValueExpression; import ch.njol.skript.registrations.EventValues; +import org.bukkit.event.entity.EntityRegainHealthEvent; import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; +import org.checkerframework.checker.units.qual.A; @Name("Heal Reason") @Description("The heal reason of a heal event.") @@ -17,6 +15,7 @@ "\theal reason is satiated", "\tsend \"You ate enough food and gained full health back!\"" }) +@AvailableEvents(EntityRegainHealthEvent.class) @Events("heal") @Since("2.5") public class ExprHealReason extends EventValueExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHealth.java b/src/main/java/ch/njol/skript/expressions/ExprHealth.java index 9459a1b20d4..4f9ac17a11e 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHealth.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHealth.java @@ -10,6 +10,7 @@ import ch.njol.util.coll.CollectionUtils; import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; +import org.bukkit.event.entity.EntityDamageEvent; import org.jetbrains.annotations.Nullable; /** @@ -19,6 +20,7 @@ @Description("The health of a creature, e.g. a player, mob, villager, etc. The minimum value is 0, and the maximum is the creature's max health (e.g. 10 for players).") @Examples({"message \"You have %health% HP left.\""}) @Since("1.0") +@AvailableEvents(EntityDamageEvent.class) @Events("damage") public class ExprHealth extends PropertyExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHoverList.java b/src/main/java/ch/njol/skript/expressions/ExprHoverList.java index 16c2036f70d..8abcbd8fd2c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHoverList.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHoverList.java @@ -37,6 +37,7 @@ }) @Since("2.3") @RequiredPlugins("Paper 1.12.2 or newer") +@AvailableEvents(PaperServerListPingEvent.class) @Events("server list ping") public class ExprHoverList extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprInventoryCloseReason.java b/src/main/java/ch/njol/skript/expressions/ExprInventoryCloseReason.java index 41191362b22..c7f6d592709 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprInventoryCloseReason.java +++ b/src/main/java/ch/njol/skript/expressions/ExprInventoryCloseReason.java @@ -1,12 +1,7 @@ package ch.njol.skript.expressions; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.RequiredPlugins; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.expressions.base.EventValueExpression; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; @@ -23,6 +18,7 @@ "\tinventory close reason is teleport", "\tsend \"Your inventory closed due to teleporting!\" to player" }) +@AvailableEvents(InventoryCloseEvent.class) @Events("Inventory Close") @RequiredPlugins("Paper") @Since("2.8.0") diff --git a/src/main/java/ch/njol/skript/expressions/ExprLevel.java b/src/main/java/ch/njol/skript/expressions/ExprLevel.java index b3273130b75..843a090802a 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprLevel.java +++ b/src/main/java/ch/njol/skript/expressions/ExprLevel.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.entity.EntityDeathEvent; @@ -10,11 +11,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.effects.Delay; import ch.njol.skript.expressions.base.SimplePropertyExpression; @@ -25,8 +21,9 @@ @Description("The level of a player.") @Examples({"reduce the victim's level by 1", "set the player's level to 0"}) -@Since("unknown (before 2.1)") +@AvailableEvents(PlayerLevelChangeEvent.class) @Events("level change") +@Since("unknown (before 2.1)") public class ExprLevel extends SimplePropertyExpression { static { register(ExprLevel.class, Long.class, "level", "players"); diff --git a/src/main/java/ch/njol/skript/expressions/ExprLevelProgress.java b/src/main/java/ch/njol/skript/expressions/ExprLevelProgress.java index 7c682609082..a870470fc11 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprLevelProgress.java +++ b/src/main/java/ch/njol/skript/expressions/ExprLevelProgress.java @@ -1,15 +1,12 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.entity.Player; import org.bukkit.event.Event; +import org.bukkit.event.player.PlayerLevelChangeEvent; import org.jetbrains.annotations.Nullable; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.expressions.base.SimplePropertyExpression; import ch.njol.util.Math2; @@ -34,8 +31,9 @@ "\t\t\tset level progress of the loop-player to 0.99", "on xp spawn:", "\tcancel event"}) -@Since("2.0") +@AvailableEvents(PlayerLevelChangeEvent.class) @Events("level change") +@Since("2.0") public class ExprLevelProgress extends SimplePropertyExpression { static { diff --git a/src/main/java/ch/njol/skript/expressions/ExprMaxHealth.java b/src/main/java/ch/njol/skript/expressions/ExprMaxHealth.java index cfe64906bf0..af057e08ad8 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprMaxHealth.java +++ b/src/main/java/ch/njol/skript/expressions/ExprMaxHealth.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; @@ -7,11 +8,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.bukkitutil.HealthUtils; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.expressions.base.SimplePropertyExpression; /** @@ -24,7 +20,6 @@ "spawn a giant", "set the last spawned entity's max health to 1000"}) @Since("2.0") -@Events({"damage", "death"}) public class ExprMaxHealth extends SimplePropertyExpression { static { diff --git a/src/main/java/ch/njol/skript/expressions/ExprMe.java b/src/main/java/ch/njol/skript/expressions/ExprMe.java index a365c38bea6..cc6f69eaeef 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprMe.java +++ b/src/main/java/ch/njol/skript/expressions/ExprMe.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.Event; @@ -7,10 +8,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.command.EffectCommandEvent; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -20,6 +17,8 @@ @Name("Me") @Description("A 'me' expression that can be used in players' effect commands only.") @Examples({"!heal me", "!kick myself", "!give a diamond axe to me"}) +@AvailableEvents(EffectCommandEvent.class) +@Events("Effect Command") @Since("2.1.1") public class ExprMe extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprMessage.java b/src/main/java/ch/njol/skript/expressions/ExprMessage.java index 15c9dbc37de..2f929780945 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprMessage.java +++ b/src/main/java/ch/njol/skript/expressions/ExprMessage.java @@ -51,8 +51,9 @@ "on broadcast:", "\tset broadcast message to \"&a[BROADCAST] %broadcast message%\"" }) -@Since("1.4.6 (chat message), 1.4.9 (join & quit messages), 2.0 (death message), 2.9.0 (clear message), 2.10 (broadcasted message)") +@AvailableEvents({AsyncPlayerChatEvent.class, PlayerJoinEvent.class, PlayerQuitEvent.class, PlayerKickEvent.class, EntityDeathEvent.class, BroadcastMessageEvent.class}) @Events({"chat", "join", "quit", "death", "broadcast"}) +@Since("1.4.6 (chat message), 1.4.9 (join & quit messages), 2.0 (death message), 2.9.0 (clear message), 2.10 (broadcasted message)") public class ExprMessage extends SimpleExpression { @SuppressWarnings("unchecked") diff --git a/src/main/java/ch/njol/skript/expressions/ExprProtocolVersion.java b/src/main/java/ch/njol/skript/expressions/ExprProtocolVersion.java index f2fb55d0dd1..ef9f10dd43c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprProtocolVersion.java +++ b/src/main/java/ch/njol/skript/expressions/ExprProtocolVersion.java @@ -1,17 +1,13 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; +import org.bukkit.event.server.ServerListPingEvent; import org.jetbrains.annotations.Nullable; import com.destroystokyo.paper.event.server.PaperServerListPingEvent; import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.RequiredPlugins; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -35,9 +31,10 @@ @Examples({"on server list ping:", "\tset the version string to \"<light green>Version: <orange>%minecraft version%\"", "\tset the protocol version to 0 # 13w41a (1.7) - so the player will see the custom version string almost always"}) -@Since("2.3") -@RequiredPlugins("Paper 1.12.2 or newer") +@AvailableEvents(ServerListPingEvent.class) @Events("server list ping") +@RequiredPlugins("Paper 1.12.2 or newer") +@Since("2.3") public class ExprProtocolVersion extends SimpleExpression { static { diff --git a/src/main/java/ch/njol/skript/expressions/ExprReadiedArrow.java b/src/main/java/ch/njol/skript/expressions/ExprReadiedArrow.java index 47a122dee40..74c9642783d 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprReadiedArrow.java +++ b/src/main/java/ch/njol/skript/expressions/ExprReadiedArrow.java @@ -1,11 +1,7 @@ package ch.njol.skript.expressions; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -24,8 +20,9 @@ "\tif selected arrow is not a spectral arrow:", "\t\tcancel event" }) -@Since("2.8.0") +@AvailableEvents(PlayerReadyArrowEvent.class) @Events("ready arrow") +@Since("2.8.0") public class ExprReadiedArrow extends SimpleExpression { static { diff --git a/src/main/java/ch/njol/skript/expressions/ExprSentCommands.java b/src/main/java/ch/njol/skript/expressions/ExprSentCommands.java index 3e6c3f4cebd..0c6b3835e9e 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprSentCommands.java +++ b/src/main/java/ch/njol/skript/expressions/ExprSentCommands.java @@ -2,17 +2,14 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.events.EvtPlayerCommandSend; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent; import com.google.common.collect.Lists; import org.bukkit.event.Event; import org.bukkit.event.player.PlayerCommandSendEvent; @@ -34,8 +31,9 @@ "\tset command list to command list where [input does not contain \":\"]", "\tremove \"help\" from command list" }) -@Since("2.8.0") +@AvailableEvents(PlayerCommandSendEvent.class) @Events("send command list") +@Since("2.8.0") public class ExprSentCommands extends SimpleExpression { static { diff --git a/src/main/java/ch/njol/skript/expressions/ExprVersionString.java b/src/main/java/ch/njol/skript/expressions/ExprVersionString.java index 407dfec0d0b..5ba8fa802e8 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprVersionString.java +++ b/src/main/java/ch/njol/skript/expressions/ExprVersionString.java @@ -2,12 +2,7 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.RequiredPlugins; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -16,6 +11,7 @@ import ch.njol.util.coll.CollectionUtils; import com.destroystokyo.paper.event.server.PaperServerListPingEvent; import org.bukkit.event.Event; +import org.bukkit.event.server.ServerListPingEvent; import org.jetbrains.annotations.Nullable; @Name("Version String") @@ -29,9 +25,10 @@ "\tset the protocol version to 0 # 13w41a (1.7), so it will show the version string always", "\tset the version string to \"<light green>Version: <orange>%minecraft version%\"" }) -@Since("2.3") -@RequiredPlugins("Paper 1.12.2+") +@AvailableEvents(ServerListPingEvent.class) @Events("Server List Ping") +@RequiredPlugins("Paper 1.12.2+") +@Since("2.3") public class ExprVersionString extends SimpleExpression { private static final boolean PAPER_EVENT_EXISTS = Skript.classExists("com.destroystokyo.paper.event.server.PaperServerListPingEvent"); From 5e909b315c4cb12b5963227f45588e18dd127cce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Sat, 1 Mar 2025 21:17:03 -0500 Subject: [PATCH 03/27] Add annotation --- .../java/ch/njol/skript/doc/AvailableEvents.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/main/java/ch/njol/skript/doc/AvailableEvents.java diff --git a/src/main/java/ch/njol/skript/doc/AvailableEvents.java b/src/main/java/ch/njol/skript/doc/AvailableEvents.java new file mode 100644 index 00000000000..25672a65025 --- /dev/null +++ b/src/main/java/ch/njol/skript/doc/AvailableEvents.java @@ -0,0 +1,14 @@ +package ch.njol.skript.doc; + +import org.bukkit.event.Event; + +import java.lang.annotation.*; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface AvailableEvents { + + public Class[] value(); + +} From 29f90ecd7ef63cba04677d6c29eff441beff666b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Sat, 1 Mar 2025 21:17:21 -0500 Subject: [PATCH 04/27] Add annotation to needed expressions --- .../njol/skript/expressions/ExprAbsorbedBlocks.java | 7 ++----- .../njol/skript/expressions/ExprAppliedEffect.java | 1 + .../skript/expressions/ExprAppliedEnchantments.java | 7 ++----- .../ch/njol/skript/expressions/ExprAttacked.java | 8 +++----- .../ch/njol/skript/expressions/ExprAttacker.java | 8 +++----- .../njol/skript/expressions/ExprBeaconValues.java | 1 + .../ch/njol/skript/expressions/ExprClicked.java | 7 ++----- .../ch/njol/skript/expressions/ExprCommand.java | 10 +++++----- .../njol/skript/expressions/ExprCommandSender.java | 13 ++++++++----- .../java/ch/njol/skript/expressions/ExprDamage.java | 7 ++----- .../java/ch/njol/skript/expressions/ExprEgg.java | 8 +++----- .../ch/njol/skript/expressions/ExprEnchantItem.java | 7 ++----- .../skript/expressions/ExprEnchantingExpCost.java | 7 ++----- .../skript/expressions/ExprEnchantmentBonus.java | 7 ++----- .../skript/expressions/ExprEnchantmentOffer.java | 8 ++------ .../njol/skript/expressions/ExprEvtInitiator.java | 7 ++----- .../ch/njol/skript/expressions/ExprExperience.java | 2 ++ .../njol/skript/expressions/ExprExplodedBlocks.java | 7 ++----- .../skript/expressions/ExprExplosionBlockYield.java | 7 ++----- .../njol/skript/expressions/ExprExplosionYield.java | 8 +++----- .../skript/expressions/ExprFertilizedBlocks.java | 8 ++------ .../ch/njol/skript/expressions/ExprFinalDamage.java | 9 +++------ .../njol/skript/expressions/ExprHatchingNumber.java | 7 ++----- .../njol/skript/expressions/ExprHatchingType.java | 7 ++----- .../ch/njol/skript/expressions/ExprHealAmount.java | 7 ++----- .../ch/njol/skript/expressions/ExprHealReason.java | 9 ++++----- .../java/ch/njol/skript/expressions/ExprHealth.java | 2 ++ .../ch/njol/skript/expressions/ExprHoverList.java | 1 + .../expressions/ExprInventoryCloseReason.java | 8 ++------ .../java/ch/njol/skript/expressions/ExprLevel.java | 9 +++------ .../njol/skript/expressions/ExprLevelProgress.java | 10 ++++------ .../ch/njol/skript/expressions/ExprMaxHealth.java | 7 +------ .../java/ch/njol/skript/expressions/ExprMe.java | 7 +++---- .../ch/njol/skript/expressions/ExprMessage.java | 3 ++- .../skript/expressions/ExprProtocolVersion.java | 13 +++++-------- .../njol/skript/expressions/ExprReadiedArrow.java | 9 +++------ .../njol/skript/expressions/ExprSentCommands.java | 10 ++++------ .../njol/skript/expressions/ExprVersionString.java | 13 +++++-------- 38 files changed, 101 insertions(+), 175 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java index c436a0474c6..da4a9c104ee 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java @@ -3,17 +3,13 @@ import java.util.Iterator; import java.util.List; +import ch.njol.skript.doc.*; import org.bukkit.block.BlockState; import org.bukkit.event.Event; import org.bukkit.event.block.SpongeAbsorbEvent; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -24,6 +20,7 @@ @Name("Absorbed blocks") @Description("The blocks absorbed by a sponge block.") +@AvailableEvents(SpongeAbsorbEvent.class) @Events("sponge absorb") @Examples("the absorbed blocks") @Since("2.5") diff --git a/src/main/java/ch/njol/skript/expressions/ExprAppliedEffect.java b/src/main/java/ch/njol/skript/expressions/ExprAppliedEffect.java index 02e6a8688a9..80c191cec21 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAppliedEffect.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAppliedEffect.java @@ -21,6 +21,7 @@ "\telse if applied effect = secondary effect:", "\t\tbroadcast \"Is Secondary\"" }) +@AvailableEvents(BeaconEffectEvent.class) @Events("Beacon Effect") @RequiredPlugins("Paper") @Since("2.10") diff --git a/src/main/java/ch/njol/skript/expressions/ExprAppliedEnchantments.java b/src/main/java/ch/njol/skript/expressions/ExprAppliedEnchantments.java index f2b0b79ee11..0632fe39c41 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAppliedEnchantments.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAppliedEnchantments.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.enchantments.Enchantment; import org.bukkit.event.Event; import org.bukkit.event.enchantment.EnchantItemEvent; @@ -7,11 +8,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -26,6 +22,7 @@ " Deleting or removing the applied enchantments will prevent the item's enchantment."}) @Examples({"on enchant:", "\tset the applied enchantments to sharpness 10 and fire aspect 5"}) +@AvailableEvents(EnchantItemEvent.class) @Events("enchant") @Since("2.5") public class ExprAppliedEnchantments extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprAttacked.java b/src/main/java/ch/njol/skript/expressions/ExprAttacked.java index 5b2ed4e51cb..b090100aaaf 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAttacked.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAttacked.java @@ -2,6 +2,7 @@ import java.lang.reflect.Array; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.EventRestrictedSyntax; import ch.njol.util.coll.CollectionUtils; import org.bukkit.entity.Entity; @@ -16,11 +17,6 @@ import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.entity.EntityData; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; @@ -37,6 +33,8 @@ "\tvictim is a creeper", "\tdamage the attacked by 1 heart"}) @Since("1.3, 2.6.1 (projectile hit event)") +@AvailableEvents({EntityDamageEvent.class, EntityDeathEvent.class, + VehicleDamageEvent.class, VehicleDestroyEvent.class, ProjectileHitEvent.class}) @Events({"damage", "death", "projectile hit"}) public class ExprAttacked extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprAttacker.java b/src/main/java/ch/njol/skript/expressions/ExprAttacker.java index bf1e6d9f20e..a5fe99dcbed 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAttacker.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAttacker.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.EventRestrictedSyntax; import ch.njol.util.coll.CollectionUtils; import org.bukkit.entity.Entity; @@ -13,11 +14,6 @@ import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -37,6 +33,8 @@ " health of attacker is less than or equal to 2", " damage victim by 1 heart"}) @Since("1.3") +@AvailableEvents({EntityDamageEvent.class, EntityDeathEvent.class, + VehicleDamageEvent.class, VehicleDestroyEvent.class}) @Events({"damage", "death", "destroy"}) public class ExprAttacker extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprBeaconValues.java b/src/main/java/ch/njol/skript/expressions/ExprBeaconValues.java index 887a0a0cc56..07c9e09b0ae 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBeaconValues.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBeaconValues.java @@ -37,6 +37,7 @@ "add 1 to range of {_block}" }) @RequiredPlugins("Paper (range)") +@AvailableEvents({PlayerChangeBeaconEffectEvent.class, BeaconEffectEvent.class, BeaconActivatedEvent.class, BeaconDeactivatedEvent.class}) @Events({"Beacon Effect", "Beacon Toggle", "Beacon Change Effect"}) @Since("2.10") public class ExprBeaconValues extends PropertyExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprClicked.java b/src/main/java/ch/njol/skript/expressions/ExprClicked.java index 536da33b70f..1cd5d5e680b 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprClicked.java +++ b/src/main/java/ch/njol/skript/expressions/ExprClicked.java @@ -2,6 +2,7 @@ import java.lang.reflect.Array; +import ch.njol.skript.doc.*; import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.event.Event; @@ -17,11 +18,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.aliases.ItemType; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.entity.EntityData; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; @@ -41,6 +37,7 @@ "\tshow the inventory of the clicked block to the player" }) @Since("1.0, 2.2-dev35 (more clickable things)") +@AvailableEvents({PlayerInteractEntityEvent.class, PlayerInteractAtEntityEvent.class, InventoryClickEvent.class, EnchantItemEvent.class, PlayerInteractEvent.class}) @Events({"click", "inventory click"}) public class ExprClicked extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprCommand.java b/src/main/java/ch/njol/skript/expressions/ExprCommand.java index 8cb71f77e34..e1208fe1207 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprCommand.java +++ b/src/main/java/ch/njol/skript/expressions/ExprCommand.java @@ -1,6 +1,8 @@ package ch.njol.skript.expressions; +import ch.njol.skript.command.CommandEvent; import ch.njol.skript.command.ScriptCommandEvent; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.EventRestrictedSyntax; import ch.njol.util.coll.CollectionUtils; import org.bukkit.event.Event; @@ -9,11 +11,6 @@ import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -32,6 +29,9 @@ "\t\t\tmessage \"You're not allowed to use commands during the game\"", "\t\t\tcancel the event"}) @Since("2.0, 2.7 (support for script commands)") +// TODO REMOVE +// Should this use CommandEvent or ScriptCommandEvent? +@AvailableEvents({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, CommandEvent.class}) @Events("command") public class ExprCommand extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java b/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java index 2d71a3b2e0e..78c4a59337c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java +++ b/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java @@ -1,13 +1,13 @@ package ch.njol.skript.expressions; +import ch.njol.skript.command.CommandEvent; +import ch.njol.skript.command.ScriptCommandEvent; +import ch.njol.skript.doc.*; import org.bukkit.command.CommandSender; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.expressions.base.EventValueExpression; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.server.ServerCommandEvent; @Name("Command Sender") @Description({ @@ -21,6 +21,9 @@ "\tlog \"%executor% used command /%command% %arguments%\" to \"commands.log\"" }) @Since("2.0") +// TODO REMOVE +// Should this use CommandEvent or ScriptCommandEvent? +@AvailableEvents({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, CommandEvent.class}) @Events("command") public class ExprCommandSender extends EventValueExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprDamage.java b/src/main/java/ch/njol/skript/expressions/ExprDamage.java index 962e20262f2..b71820f46f7 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprDamage.java +++ b/src/main/java/ch/njol/skript/expressions/ExprDamage.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerItemDamageEvent; @@ -9,11 +10,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.bukkitutil.HealthUtils; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -36,6 +32,7 @@ "\tincrease the damage by 2" }) @Since("1.3.5, 2.8.0 (item damage event)") +@AvailableEvents({EntityDamageEvent.class, VehicleDamageEvent.class, PlayerItemDamageEvent.class}) @Events({"Damage", "Vehicle Damage", "Item Damage"}) public class ExprDamage extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEgg.java b/src/main/java/ch/njol/skript/expressions/ExprEgg.java index 17b18ad73f1..67e66f07d58 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEgg.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEgg.java @@ -1,19 +1,17 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.entity.Egg; import org.bukkit.event.Event; +import org.bukkit.event.player.PlayerEggThrowEvent; import org.jetbrains.annotations.Nullable; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.expressions.base.EventValueExpression; @Name("The Egg") @Description("The egg thrown in a Player Egg Throw event.") @Examples("spawn an egg at the egg") +@AvailableEvents(PlayerEggThrowEvent.class) @Events("Egg Throw") @Since("2.7") public class ExprEgg extends EventValueExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java index cf06ff046bc..526c252bdea 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.enchantment.EnchantItemEvent; import org.bukkit.event.enchantment.PrepareItemEnchantEvent; @@ -8,11 +9,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.aliases.ItemType; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -28,6 +24,7 @@ "\tset the enchanted item to a diamond chestplate", "on enchant prepare:", "\tset the enchant item to a wooden sword"}) +@AvailableEvents({EnchantItemEvent.class, PrepareItemEnchantEvent.class}) @Events({"enchant prepare", "enchant"}) @Since("2.5") public class ExprEnchantItem extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantingExpCost.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantingExpCost.java index 4f9a52763dd..d37764d09fe 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantingExpCost.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantingExpCost.java @@ -1,16 +1,12 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.enchantment.EnchantItemEvent; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -25,6 +21,7 @@ "This is number that was displayed in the enchantment table, not the actual number of levels removed."}) @Examples({"on enchant:", "\tsend \"Cost: %the displayed enchanting cost%\" to player"}) +@AvailableEvents(EnchantItemEvent.class) @Events("enchant") @Since("2.5") public class ExprEnchantingExpCost extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentBonus.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentBonus.java index 0e599582871..6792194b6da 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentBonus.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentBonus.java @@ -1,15 +1,11 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.enchantment.PrepareItemEnchantEvent; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -21,6 +17,7 @@ @Description("The enchantment bonus in an enchant prepare event. This represents the number of bookshelves affecting/surrounding the enchantment table.") @Examples({"on enchant:", "\tsend \"There are %enchantment bonus% bookshelves surrounding this enchantment table!\" to player"}) +@AvailableEvents(PrepareItemEnchantEvent.class) @Events("enchant prepare") @Since("2.5") public class ExprEnchantmentBonus extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java index e96f501b1a2..533f1a49ee9 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Random; +import ch.njol.skript.doc.*; import org.bukkit.enchantments.EnchantmentOffer; import org.bukkit.event.Event; import org.bukkit.event.enchantment.PrepareItemEnchantEvent; @@ -12,12 +13,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.RequiredPlugins; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -32,6 +27,7 @@ @Examples({"on enchant prepare:", "\tsend \"Your enchantment offers are: %the enchantment offers%\" to player"}) @Since("2.5") +@AvailableEvents(PrepareItemEnchantEvent.class) @Events("enchant prepare") @RequiredPlugins("1.11 or newer") public class ExprEnchantmentOffer extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEvtInitiator.java b/src/main/java/ch/njol/skript/expressions/ExprEvtInitiator.java index aa454c71df3..3172d81f282 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEvtInitiator.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEvtInitiator.java @@ -1,11 +1,7 @@ package ch.njol.skript.expressions; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -24,6 +20,7 @@ "\tholder of event-initiator-inventory is a chest", "\tbroadcast \"Item transport happening at %location at holder of event-initiator-inventory%!\"" }) +@AvailableEvents(InventoryMoveItemEvent.class) @Events("Inventory Item Move") @Since("2.8.0") public class ExprEvtInitiator extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprExperience.java b/src/main/java/ch/njol/skript/expressions/ExprExperience.java index aba4975419e..fffbe78e2d5 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExperience.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExperience.java @@ -42,6 +42,8 @@ "\tadd 70 to dropped experience", }) @Since("2.1, 2.5.3 (block break event), 2.7 (experience change event), 2.10 (breeding, fishing)") +@AvailableEvents({ExperienceSpawnEvent.class, BlockBreakEvent.class, + PlayerExpChangeEvent.class, EntityBreedEvent.class, PlayerFishEvent.class}) @Events({"experience spawn", "break / mine", "experience change", "entity breeding"}) public class ExprExperience extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java index d67b502f56b..c5275bbce55 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java @@ -3,6 +3,7 @@ import java.util.List; import ch.njol.skript.classes.Changer.ChangeMode; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.EventRestrictedSyntax; import ch.njol.util.coll.CollectionUtils; import org.bukkit.block.Block; @@ -11,11 +12,6 @@ import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser; @@ -42,6 +38,7 @@ "", "on explode:", "\tadd blocks above event-entity to exploded blocks"}) +@AvailableEvents(EntityExplodeEvent.class) @Events("explode") @Since("2.5, 2.8.6 (modify blocks)") public class ExprExplodedBlocks extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprExplosionBlockYield.java b/src/main/java/ch/njol/skript/expressions/ExprExplosionBlockYield.java index d38b373cfb3..ac4234b0165 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExplosionBlockYield.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExplosionBlockYield.java @@ -1,16 +1,12 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.entity.EntityExplodeEvent; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -25,6 +21,7 @@ "Attempting to change the yield to a value less than 0 will have no effect."}) @Examples({"on explode:", "set the explosion's block yield to 10%"}) +@AvailableEvents(EntityExplodeEvent.class) @Events("explosion") @Since("2.5") public class ExprExplosionBlockYield extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprExplosionYield.java b/src/main/java/ch/njol/skript/expressions/ExprExplosionYield.java index 78605dbef38..3fbf5847517 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExplosionYield.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExplosionYield.java @@ -1,16 +1,13 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.entity.ExplosionPrimeEvent; +import org.checkerframework.checker.units.qual.A; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -25,6 +22,7 @@ " Read this wiki page for more information"}) @Examples({"on explosion prime:", "\tset the yield of the explosion to 10"}) +@AvailableEvents(ExplosionPrimeEvent.class) @Events("explosion prime") @Since("2.5") public class ExprExplosionYield extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprFertilizedBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprFertilizedBlocks.java index 9c8cc950ab0..35ac3a56e0d 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprFertilizedBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprFertilizedBlocks.java @@ -3,17 +3,12 @@ import java.util.Iterator; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.block.BlockFertilizeEvent; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.RequiredPlugins; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -24,6 +19,7 @@ @Name("Fertilized Blocks") @Description("The blocks fertilized in block fertilize events.") @RequiredPlugins("Minecraft 1.13 or newer") +@AvailableEvents(BlockFertilizeEvent.class) @Events("block fertilize") @Examples("the fertilized blocks") @Since("2.5") diff --git a/src/main/java/ch/njol/skript/expressions/ExprFinalDamage.java b/src/main/java/ch/njol/skript/expressions/ExprFinalDamage.java index 324ded1aef7..fc2f4b196c8 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprFinalDamage.java +++ b/src/main/java/ch/njol/skript/expressions/ExprFinalDamage.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.entity.EntityDamageEvent; import org.jetbrains.annotations.Nullable; @@ -7,11 +8,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.bukkitutil.HealthUtils; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -22,8 +18,9 @@ @Name("Final Damage") @Description("How much damage is done in a damage event, considering all types of damage reduction. Can NOT be changed.") @Examples({"send \"%final damage%\" to victim"}) -@Since("2.2-dev19") +@AvailableEvents(EntityDamageEvent.class) @Events("damage") +@Since("2.2-dev19") public class ExprFinalDamage extends SimpleExpression { static { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHatchingNumber.java b/src/main/java/ch/njol/skript/expressions/ExprHatchingNumber.java index 49228742570..1f15142545d 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHatchingNumber.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHatchingNumber.java @@ -2,11 +2,7 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -26,6 +22,7 @@ "on player egg throw:", "\tset the hatching number to 10" }) +@AvailableEvents(PlayerEggThrowEvent.class) @Events("Egg Throw") @Since("2.7") public class ExprHatchingNumber extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHatchingType.java b/src/main/java/ch/njol/skript/expressions/ExprHatchingType.java index c5b8639657c..7517c72d8cf 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHatchingType.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHatchingType.java @@ -3,11 +3,7 @@ import ch.njol.skript.Skript; import ch.njol.skript.bukkitutil.EntityUtils; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.entity.EntityData; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; @@ -26,6 +22,7 @@ "on player egg throw:", "\tset the hatching entity type to a primed tnt" }) +@AvailableEvents(PlayerEggThrowEvent.class) @Events("Egg Throw") @Since("2.7") public class ExprHatchingType extends SimpleExpression> { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHealAmount.java b/src/main/java/ch/njol/skript/expressions/ExprHealAmount.java index 5410d2ccc5d..a4f411281fb 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHealAmount.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHealAmount.java @@ -1,6 +1,7 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.entity.EntityRegainHealthEvent; import org.jetbrains.annotations.Nullable; @@ -8,11 +9,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -27,6 +23,7 @@ "\tincrease the heal amount by 2", "\tremove 0.5 from the healing amount" }) +@AvailableEvents(EntityRegainHealthEvent.class) @Events("heal") @Since("2.5.1") public class ExprHealAmount extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHealReason.java b/src/main/java/ch/njol/skript/expressions/ExprHealReason.java index bc6602eb8b3..009e1e901e2 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHealReason.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHealReason.java @@ -1,14 +1,12 @@ package ch.njol.skript.expressions; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.expressions.base.EventValueExpression; import ch.njol.skript.registrations.EventValues; +import org.bukkit.event.entity.EntityRegainHealthEvent; import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; +import org.checkerframework.checker.units.qual.A; @Name("Heal Reason") @Description("The heal reason of a heal event.") @@ -17,6 +15,7 @@ "\theal reason is satiated", "\tsend \"You ate enough food and gained full health back!\"" }) +@AvailableEvents(EntityRegainHealthEvent.class) @Events("heal") @Since("2.5") public class ExprHealReason extends EventValueExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHealth.java b/src/main/java/ch/njol/skript/expressions/ExprHealth.java index 9459a1b20d4..4f9ac17a11e 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHealth.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHealth.java @@ -10,6 +10,7 @@ import ch.njol.util.coll.CollectionUtils; import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; +import org.bukkit.event.entity.EntityDamageEvent; import org.jetbrains.annotations.Nullable; /** @@ -19,6 +20,7 @@ @Description("The health of a creature, e.g. a player, mob, villager, etc. The minimum value is 0, and the maximum is the creature's max health (e.g. 10 for players).") @Examples({"message \"You have %health% HP left.\""}) @Since("1.0") +@AvailableEvents(EntityDamageEvent.class) @Events("damage") public class ExprHealth extends PropertyExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHoverList.java b/src/main/java/ch/njol/skript/expressions/ExprHoverList.java index 16c2036f70d..8abcbd8fd2c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHoverList.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHoverList.java @@ -37,6 +37,7 @@ }) @Since("2.3") @RequiredPlugins("Paper 1.12.2 or newer") +@AvailableEvents(PaperServerListPingEvent.class) @Events("server list ping") public class ExprHoverList extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprInventoryCloseReason.java b/src/main/java/ch/njol/skript/expressions/ExprInventoryCloseReason.java index 41191362b22..c7f6d592709 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprInventoryCloseReason.java +++ b/src/main/java/ch/njol/skript/expressions/ExprInventoryCloseReason.java @@ -1,12 +1,7 @@ package ch.njol.skript.expressions; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.RequiredPlugins; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.expressions.base.EventValueExpression; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; @@ -23,6 +18,7 @@ "\tinventory close reason is teleport", "\tsend \"Your inventory closed due to teleporting!\" to player" }) +@AvailableEvents(InventoryCloseEvent.class) @Events("Inventory Close") @RequiredPlugins("Paper") @Since("2.8.0") diff --git a/src/main/java/ch/njol/skript/expressions/ExprLevel.java b/src/main/java/ch/njol/skript/expressions/ExprLevel.java index b3273130b75..843a090802a 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprLevel.java +++ b/src/main/java/ch/njol/skript/expressions/ExprLevel.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.entity.EntityDeathEvent; @@ -10,11 +11,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.effects.Delay; import ch.njol.skript.expressions.base.SimplePropertyExpression; @@ -25,8 +21,9 @@ @Description("The level of a player.") @Examples({"reduce the victim's level by 1", "set the player's level to 0"}) -@Since("unknown (before 2.1)") +@AvailableEvents(PlayerLevelChangeEvent.class) @Events("level change") +@Since("unknown (before 2.1)") public class ExprLevel extends SimplePropertyExpression { static { register(ExprLevel.class, Long.class, "level", "players"); diff --git a/src/main/java/ch/njol/skript/expressions/ExprLevelProgress.java b/src/main/java/ch/njol/skript/expressions/ExprLevelProgress.java index 7c682609082..a870470fc11 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprLevelProgress.java +++ b/src/main/java/ch/njol/skript/expressions/ExprLevelProgress.java @@ -1,15 +1,12 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.entity.Player; import org.bukkit.event.Event; +import org.bukkit.event.player.PlayerLevelChangeEvent; import org.jetbrains.annotations.Nullable; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.expressions.base.SimplePropertyExpression; import ch.njol.util.Math2; @@ -34,8 +31,9 @@ "\t\t\tset level progress of the loop-player to 0.99", "on xp spawn:", "\tcancel event"}) -@Since("2.0") +@AvailableEvents(PlayerLevelChangeEvent.class) @Events("level change") +@Since("2.0") public class ExprLevelProgress extends SimplePropertyExpression { static { diff --git a/src/main/java/ch/njol/skript/expressions/ExprMaxHealth.java b/src/main/java/ch/njol/skript/expressions/ExprMaxHealth.java index cfe64906bf0..af057e08ad8 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprMaxHealth.java +++ b/src/main/java/ch/njol/skript/expressions/ExprMaxHealth.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; @@ -7,11 +8,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.bukkitutil.HealthUtils; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.expressions.base.SimplePropertyExpression; /** @@ -24,7 +20,6 @@ "spawn a giant", "set the last spawned entity's max health to 1000"}) @Since("2.0") -@Events({"damage", "death"}) public class ExprMaxHealth extends SimplePropertyExpression { static { diff --git a/src/main/java/ch/njol/skript/expressions/ExprMe.java b/src/main/java/ch/njol/skript/expressions/ExprMe.java index a365c38bea6..cc6f69eaeef 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprMe.java +++ b/src/main/java/ch/njol/skript/expressions/ExprMe.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.Event; @@ -7,10 +8,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.command.EffectCommandEvent; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -20,6 +17,8 @@ @Name("Me") @Description("A 'me' expression that can be used in players' effect commands only.") @Examples({"!heal me", "!kick myself", "!give a diamond axe to me"}) +@AvailableEvents(EffectCommandEvent.class) +@Events("Effect Command") @Since("2.1.1") public class ExprMe extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprMessage.java b/src/main/java/ch/njol/skript/expressions/ExprMessage.java index 15c9dbc37de..2f929780945 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprMessage.java +++ b/src/main/java/ch/njol/skript/expressions/ExprMessage.java @@ -51,8 +51,9 @@ "on broadcast:", "\tset broadcast message to \"&a[BROADCAST] %broadcast message%\"" }) -@Since("1.4.6 (chat message), 1.4.9 (join & quit messages), 2.0 (death message), 2.9.0 (clear message), 2.10 (broadcasted message)") +@AvailableEvents({AsyncPlayerChatEvent.class, PlayerJoinEvent.class, PlayerQuitEvent.class, PlayerKickEvent.class, EntityDeathEvent.class, BroadcastMessageEvent.class}) @Events({"chat", "join", "quit", "death", "broadcast"}) +@Since("1.4.6 (chat message), 1.4.9 (join & quit messages), 2.0 (death message), 2.9.0 (clear message), 2.10 (broadcasted message)") public class ExprMessage extends SimpleExpression { @SuppressWarnings("unchecked") diff --git a/src/main/java/ch/njol/skript/expressions/ExprProtocolVersion.java b/src/main/java/ch/njol/skript/expressions/ExprProtocolVersion.java index f2fb55d0dd1..ef9f10dd43c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprProtocolVersion.java +++ b/src/main/java/ch/njol/skript/expressions/ExprProtocolVersion.java @@ -1,17 +1,13 @@ package ch.njol.skript.expressions; +import ch.njol.skript.doc.*; import org.bukkit.event.Event; +import org.bukkit.event.server.ServerListPingEvent; import org.jetbrains.annotations.Nullable; import com.destroystokyo.paper.event.server.PaperServerListPingEvent; import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.RequiredPlugins; -import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -35,9 +31,10 @@ @Examples({"on server list ping:", "\tset the version string to \"<light green>Version: <orange>%minecraft version%\"", "\tset the protocol version to 0 # 13w41a (1.7) - so the player will see the custom version string almost always"}) -@Since("2.3") -@RequiredPlugins("Paper 1.12.2 or newer") +@AvailableEvents(ServerListPingEvent.class) @Events("server list ping") +@RequiredPlugins("Paper 1.12.2 or newer") +@Since("2.3") public class ExprProtocolVersion extends SimpleExpression { static { diff --git a/src/main/java/ch/njol/skript/expressions/ExprReadiedArrow.java b/src/main/java/ch/njol/skript/expressions/ExprReadiedArrow.java index 47a122dee40..74c9642783d 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprReadiedArrow.java +++ b/src/main/java/ch/njol/skript/expressions/ExprReadiedArrow.java @@ -1,11 +1,7 @@ package ch.njol.skript.expressions; import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -24,8 +20,9 @@ "\tif selected arrow is not a spectral arrow:", "\t\tcancel event" }) -@Since("2.8.0") +@AvailableEvents(PlayerReadyArrowEvent.class) @Events("ready arrow") +@Since("2.8.0") public class ExprReadiedArrow extends SimpleExpression { static { diff --git a/src/main/java/ch/njol/skript/expressions/ExprSentCommands.java b/src/main/java/ch/njol/skript/expressions/ExprSentCommands.java index 3e6c3f4cebd..0c6b3835e9e 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprSentCommands.java +++ b/src/main/java/ch/njol/skript/expressions/ExprSentCommands.java @@ -2,17 +2,14 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.events.EvtPlayerCommandSend; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent; import com.google.common.collect.Lists; import org.bukkit.event.Event; import org.bukkit.event.player.PlayerCommandSendEvent; @@ -34,8 +31,9 @@ "\tset command list to command list where [input does not contain \":\"]", "\tremove \"help\" from command list" }) -@Since("2.8.0") +@AvailableEvents(PlayerCommandSendEvent.class) @Events("send command list") +@Since("2.8.0") public class ExprSentCommands extends SimpleExpression { static { diff --git a/src/main/java/ch/njol/skript/expressions/ExprVersionString.java b/src/main/java/ch/njol/skript/expressions/ExprVersionString.java index 407dfec0d0b..5ba8fa802e8 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprVersionString.java +++ b/src/main/java/ch/njol/skript/expressions/ExprVersionString.java @@ -2,12 +2,7 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Events; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.RequiredPlugins; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -16,6 +11,7 @@ import ch.njol.util.coll.CollectionUtils; import com.destroystokyo.paper.event.server.PaperServerListPingEvent; import org.bukkit.event.Event; +import org.bukkit.event.server.ServerListPingEvent; import org.jetbrains.annotations.Nullable; @Name("Version String") @@ -29,9 +25,10 @@ "\tset the protocol version to 0 # 13w41a (1.7), so it will show the version string always", "\tset the version string to \"<light green>Version: <orange>%minecraft version%\"" }) -@Since("2.3") -@RequiredPlugins("Paper 1.12.2+") +@AvailableEvents(ServerListPingEvent.class) @Events("Server List Ping") +@RequiredPlugins("Paper 1.12.2+") +@Since("2.3") public class ExprVersionString extends SimpleExpression { private static final boolean PAPER_EVENT_EXISTS = Skript.classExists("com.destroystokyo.paper.event.server.PaperServerListPingEvent"); From 56d6871cb36d916de419c499bab1d8d60616b971 Mon Sep 17 00:00:00 2001 From: Moderocky Date: Mon, 27 Jan 2025 09:07:36 +0000 Subject: [PATCH 05/27] Parsing stack (#5277) (#7534) * Adds ParsingStack data type * Add ParseStackOverflowException * Store ParsingStack in ParserInstance * Implement the parsing stack in SkriptParser Document SkriptParser#parse_i a bit better * Improve robustness of ParsingStack Add more operations to ParsingStack * Add usage note to ParsingStack * Add modification notice to ParserInstance#getParsingStack * Switch from Stack class to LinkedList class Add notice on iteration order * Change brackets of ignored catch block Co-authored-by: Patrick Miller * Review response, slight documentation changes, variable rename, formatting changes * Update src/main/java/ch/njol/skript/lang/parser/ParsingStack.java Co-authored-by: Kiip <25848425+kiip1@users.noreply.github.com> * Add `@param` tags to method Javadocs for completeness sake Co-authored-by: LimeGlass <16087552+TheLimeGlass@users.noreply.github.com> * Forgot import because of GH suggested change commit * Fix newer merge changes. --------- Co-authored-by: TPGamesNL Co-authored-by: TPGamesNL <29547183+TPGamesNL@users.noreply.github.com> Co-authored-by: Patrick Miller Co-authored-by: Kiip <25848425+kiip1@users.noreply.github.com> Co-authored-by: LimeGlass <16087552+TheLimeGlass@users.noreply.github.com> --- .../ch/njol/skript/lang/SkriptParser.java | 18 +- .../parser/ParseStackOverflowException.java | 32 +++ .../skript/lang/parser/ParserInstance.java | 27 ++- .../njol/skript/lang/parser/ParsingStack.java | 192 ++++++++++++++++++ 4 files changed, 258 insertions(+), 11 deletions(-) create mode 100644 src/main/java/ch/njol/skript/lang/parser/ParseStackOverflowException.java create mode 100644 src/main/java/ch/njol/skript/lang/parser/ParsingStack.java diff --git a/src/main/java/ch/njol/skript/lang/SkriptParser.java b/src/main/java/ch/njol/skript/lang/SkriptParser.java index a6eb399dfc8..e3460b950de 100644 --- a/src/main/java/ch/njol/skript/lang/SkriptParser.java +++ b/src/main/java/ch/njol/skript/lang/SkriptParser.java @@ -12,7 +12,9 @@ import ch.njol.skript.lang.function.ExprFunctionCall; import ch.njol.skript.lang.function.FunctionReference; import ch.njol.skript.lang.function.Functions; +import ch.njol.skript.lang.parser.ParseStackOverflowException; import ch.njol.skript.lang.parser.ParserInstance; +import ch.njol.skript.lang.parser.ParsingStack; import ch.njol.skript.lang.util.SimpleLiteral; import ch.njol.skript.localization.Language; import ch.njol.skript.localization.Message; @@ -183,6 +185,7 @@ public boolean hasTag(String tag) { } private @Nullable T parse(Iterator> source) { + ParsingStack parsingStack = getParser().getParsingStack(); try (ParseLogHandler log = SkriptLogger.startParseLogHandler()) { while (source.hasNext()) { SyntaxElementInfo info = source.next(); @@ -193,15 +196,24 @@ public boolean hasTag(String tag) { assert pattern != null; ParseResult parseResult; try { + parsingStack.push(new ParsingStack.Element(info, patternIndex)); parseResult = parse_i(pattern); } catch (MalformedPatternException e) { String message = "pattern compiling exception, element class: " + info.getElementClass().getName(); try { JavaPlugin providingPlugin = JavaPlugin.getProvidingPlugin(info.getElementClass()); message += " (provided by " + providingPlugin.getName() + ")"; - } catch (IllegalArgumentException | IllegalStateException ignored) {} - throw new RuntimeException(message, e); + } catch (IllegalArgumentException | IllegalStateException ignored) { } + throw new RuntimeException(message, e); + } catch (StackOverflowError e) { + // Parsing caused a stack overflow, possibly due to too long lines + throw new ParseStackOverflowException(e, new ParsingStack(parsingStack)); + } finally { + // Recursive parsing call done, pop the element from the parsing stack + ParsingStack.Element stackElement = parsingStack.pop(); + + assert stackElement.syntaxElementInfo() == info && stackElement.patternIndex() == patternIndex; } if (parseResult != null) { assert parseResult.source != null; // parse results from parse_i have a source @@ -249,6 +261,8 @@ public boolean hasTag(String tag) { } } } + + // No successful syntax elements parsed, print errors and return log.printError(); return null; } diff --git a/src/main/java/ch/njol/skript/lang/parser/ParseStackOverflowException.java b/src/main/java/ch/njol/skript/lang/parser/ParseStackOverflowException.java new file mode 100644 index 00000000000..5ce8c0631ca --- /dev/null +++ b/src/main/java/ch/njol/skript/lang/parser/ParseStackOverflowException.java @@ -0,0 +1,32 @@ +package ch.njol.skript.lang.parser; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; + +/** + * An exception noting that a {@link StackOverflowError} has occurred + * during Skript parsing. Contains information about the {@link ParsingStack} + * from when the stack overflow occurred. + */ +public class ParseStackOverflowException extends RuntimeException { + + protected final ParsingStack parsingStack; + + public ParseStackOverflowException(StackOverflowError cause, ParsingStack parsingStack) { + super(createMessage(parsingStack), cause); + this.parsingStack = parsingStack; + } + + /** + * Creates the exception message from the given {@link ParsingStack}. + */ + private static String createMessage(ParsingStack stack) { + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + + PrintStream printStream = new PrintStream(stream); + stack.print(printStream); + + return stream.toString(); + } + +} diff --git a/src/main/java/ch/njol/skript/lang/parser/ParserInstance.java b/src/main/java/ch/njol/skript/lang/parser/ParserInstance.java index a490875d13d..71085291b54 100644 --- a/src/main/java/ch/njol/skript/lang/parser/ParserInstance.java +++ b/src/main/java/ch/njol/skript/lang/parser/ParserInstance.java @@ -25,11 +25,7 @@ import org.skriptlang.skript.lang.structure.Structure; import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; public final class ParserInstance implements Experimented { @@ -461,6 +457,19 @@ public String getIndentation() { return indentation; } + // Parsing stack + + private final ParsingStack parsingStack = new ParsingStack(); + + /** + * Gets the current parsing stack. + *

+ * Although the stack can be modified, doing so is not recommended. + */ + public ParsingStack getParsingStack() { + return parsingStack; + } + // Experiments API @Override @@ -705,8 +714,8 @@ public HashMap getCurrentOptions() { @Deprecated public @Nullable SkriptEvent getCurrentSkriptEvent() { Structure structure = getCurrentStructure(); - if (structure instanceof SkriptEvent) - return (SkriptEvent) structure; + if (structure instanceof SkriptEvent event) + return event; return null; } @@ -715,7 +724,7 @@ public HashMap getCurrentOptions() { */ @Deprecated public void setCurrentSkriptEvent(@Nullable SkriptEvent currentSkriptEvent) { - setCurrentStructure(currentSkriptEvent); + this.setCurrentStructure(currentSkriptEvent); } /** @@ -723,7 +732,7 @@ public void setCurrentSkriptEvent(@Nullable SkriptEvent currentSkriptEvent) { */ @Deprecated public void deleteCurrentSkriptEvent() { - setCurrentStructure(null); + this.setCurrentStructure(null); } /** diff --git a/src/main/java/ch/njol/skript/lang/parser/ParsingStack.java b/src/main/java/ch/njol/skript/lang/parser/ParsingStack.java new file mode 100644 index 00000000000..aeaa0ae0314 --- /dev/null +++ b/src/main/java/ch/njol/skript/lang/parser/ParsingStack.java @@ -0,0 +1,192 @@ +package ch.njol.skript.lang.parser; + +import ch.njol.skript.lang.Expression; +import ch.njol.skript.lang.SkriptParser; +import ch.njol.skript.lang.SyntaxElement; +import ch.njol.skript.lang.SyntaxElementInfo; +import ch.njol.util.Kleenean; + +import java.io.PrintStream; +import java.util.Collections; +import java.util.Iterator; +import java.util.LinkedList; + +/** + * A stack that keeps track of what Skript is currently parsing. + *

+ * When accessing the stack from within + * {@link SyntaxElement#init(Expression[], int, Kleenean, SkriptParser.ParseResult)}, + * the stack element corresponding to that {@link SyntaxElement} is not + * on the parsing stack. + */ +public class ParsingStack implements Iterable { + + private final LinkedList stack; + + /** + * Creates an empty parsing stack. + */ + public ParsingStack() { + this.stack = new LinkedList<>(); + } + + /** + * Creates a parsing stack containing all elements + * of another given parsing stack. + */ + public ParsingStack(ParsingStack parsingStack) { + this.stack = new LinkedList<>(parsingStack.stack); + } + + /** + * Removes and returns the top element of this stack. + * + * @throws IllegalStateException if the stack is empty. + */ + public Element pop() throws IllegalStateException { + if (stack.isEmpty()) { + throw new IllegalStateException("Stack is empty"); + } + + return stack.pop(); + } + + /** + * Returns the element at the given index in the stack, + * starting with the top element at index 0. + * + * @param index the index in stack. + * @throws IndexOutOfBoundsException if the index is not appointed + * to an element in the stack. + */ + public Element peek(int index) throws IndexOutOfBoundsException { + if (index < 0 || index >= size()) { + throw new IndexOutOfBoundsException("Index: " + index); + } + + return stack.get(index); + } + + /** + * Returns the top element of the stack. + * Equivalent to {@code peek(0)}. + * + * @throws IllegalStateException if the stack is empty. + */ + public Element peek() throws IllegalStateException { + if (stack.isEmpty()) { + throw new IllegalStateException("Stack is empty"); + } + + return stack.peek(); + } + + /** + * Adds the given element to the top of the stack. + */ + public void push(Element element) { + stack.push(element); + } + + /** + * Check if this stack is empty. + */ + public boolean isEmpty() { + return stack.isEmpty(); + } + + /** + * Gets the size of the stack. + */ + public int size() { + return stack.size(); + } + + /** + * Prints this stack to the given {@link PrintStream}. + * + * @param printStream a {@link PrintStream} to print the stack to. + */ + public void print(PrintStream printStream) { + // Synchronized to assure it'll all be printed at once, + // PrintStream uses synchronization on itself internally, justifying warning suppression + + //noinspection SynchronizationOnLocalVariableOrMethodParameter + synchronized (printStream) { + printStream.println("Stack:"); + + if (stack.isEmpty()) { + printStream.println(""); + } else { + for (Element element : stack) { + printStream.println("\t" + element.getSyntaxElementClass().getName() + + " @ " + element.patternIndex()); + } + } + } + } + + /** + * Iterate over the stack, starting at the top. + */ + @Override + public Iterator iterator() { + return Collections.unmodifiableList(stack).iterator(); + } + + /** + * A stack element, containing details about the syntax element it is about. + */ + public record Element(SyntaxElementInfo syntaxElementInfo, int patternIndex) { + + public Element { + assert patternIndex >= 0 && patternIndex < syntaxElementInfo.getPatterns().length; + } + + /** + * Gets the raw {@link SyntaxElementInfo} of this stack element. + *

+ * For ease of use, consider using other getters of this class. + * + * @see #getSyntaxElementClass() + * @see #getPattern() + */ + @Override + public SyntaxElementInfo syntaxElementInfo() { + return syntaxElementInfo; + } + + /** + * Gets the index to the registered patterns for the syntax element + * of this stack element. + */ + @Override + public int patternIndex() { + return patternIndex; + } + + /** + * Gets the syntax element class of this stack element. + */ + public Class getSyntaxElementClass() { + return syntaxElementInfo.getElementClass(); + } + + /** + * Gets the pattern that was matched for this stack element. + */ + public String getPattern() { + return syntaxElementInfo.getPatterns()[patternIndex]; + } + + /** + * Gets all patterns registered with the syntax element + * of this stack element. + */ + public String[] getPatterns() { + return syntaxElementInfo.getPatterns(); + } + + } + +} From 2c9571ee53a26ed440fb82e04e9a3f2deeeecfe5 Mon Sep 17 00:00:00 2001 From: burbulinis <131194155+Burbulinis@users.noreply.github.com> Date: Sun, 23 Feb 2025 20:42:35 +0200 Subject: [PATCH 06/27] String -> UUID (#7497) * init commit * optimize imports * replace try/catches with isValidUUID method, final changes * Final changes * tiny change * Tests and changes * fix test * Add a uuid function and final changes * Remove the AnyValued for UUIDs and tests for parsing uuids * Change throwing an exception to asserting false when deserializing * Clean up --------- Co-authored-by: Efnilite <35348263+Efnilite@users.noreply.github.com> --- .../classes/data/DefaultComparators.java | 5 + .../classes/data/DefaultConverters.java | 5 + .../skript/classes/data/DefaultFunctions.java | 28 ++-- .../njol/skript/classes/data/JavaClasses.java | 72 +++++++++ .../njol/skript/expressions/ExprFromUUID.java | 140 ++++++++++++++++++ .../skript/expressions/ExprRandomUUID.java | 29 ++-- .../ch/njol/skript/expressions/ExprUUID.java | 65 ++++---- src/main/java/ch/njol/skript/util/Utils.java | 26 ++++ src/main/resources/lang/default.lang | 1 + .../tests/syntaxes/expressions/ExprUUID.sk | 36 +++++ 10 files changed, 351 insertions(+), 56 deletions(-) create mode 100644 src/main/java/ch/njol/skript/expressions/ExprFromUUID.java create mode 100644 src/test/skript/tests/syntaxes/expressions/ExprUUID.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 f6a2759c201..fd8f6ecb8fd 100644 --- a/src/main/java/ch/njol/skript/classes/data/DefaultComparators.java +++ b/src/main/java/ch/njol/skript/classes/data/DefaultComparators.java @@ -45,6 +45,7 @@ import org.skriptlang.skript.lang.comparator.Relation; import java.util.Objects; +import java.util.UUID; @SuppressWarnings({"rawtypes"}) public class DefaultComparators { @@ -665,6 +666,10 @@ public Relation compare(EntitySnapshot snap1, EntitySnapshot snap2) { } }); } + + // UUID + Comparators.registerComparator(UUID.class, UUID.class, (one, two) -> Relation.get(one.equals(two))); + Comparators.registerComparator(UUID.class, String.class, (one, two) -> Relation.get(one.toString().equals(two))); } } 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 78e5799ef92..6a7592a2706 100644 --- a/src/main/java/ch/njol/skript/classes/data/DefaultConverters.java +++ b/src/main/java/ch/njol/skript/classes/data/DefaultConverters.java @@ -39,6 +39,8 @@ import org.skriptlang.skript.lang.converter.Converters; import org.skriptlang.skript.lang.script.Script; +import java.util.UUID; + public class DefaultConverters { public DefaultConverters() {} @@ -277,6 +279,9 @@ public void setAmount(Number amount) { Converters.registerConverter(Script.class, Config.class, Script::getConfig); Converters.registerConverter(Config.class, Node.class, Config::getMainNode); + // UUID -> String + Converters.registerConverter(UUID.class, String.class, UUID::toString); + // // Entity - String (UUID) // Very slow, thus disabled for now // Converters.registerConverter(String.class, Entity.class, new Converter() { // diff --git a/src/main/java/ch/njol/skript/classes/data/DefaultFunctions.java b/src/main/java/ch/njol/skript/classes/data/DefaultFunctions.java index 69a142d4827..50fc0619e13 100644 --- a/src/main/java/ch/njol/skript/classes/data/DefaultFunctions.java +++ b/src/main/java/ch/njol/skript/classes/data/DefaultFunctions.java @@ -11,10 +11,7 @@ import ch.njol.skript.lang.util.SimpleLiteral; import ch.njol.skript.registrations.Classes; import ch.njol.skript.registrations.DefaultClasses; -import ch.njol.skript.util.Color; -import ch.njol.skript.util.ColorRGB; -import ch.njol.skript.util.Contract; -import ch.njol.skript.util.Date; +import ch.njol.skript.util.*; import ch.njol.util.Math2; import ch.njol.util.StringUtils; import ch.njol.util.coll.CollectionUtils; @@ -544,9 +541,8 @@ public Player[] executeSimple(Object[][] params) { boolean isExact = (boolean) params[1][0]; UUID uuid = null; if (name.length() > 16 || name.contains("-")) { // shortcut - try { + if (Utils.isValidUUID(name)) uuid = UUID.fromString(name); - } catch (IllegalArgumentException ignored) {} } return CollectionUtils.array(uuid != null ? Bukkit.getPlayer(uuid) : (isExact ? Bukkit.getPlayerExact(name) : Bukkit.getPlayer(name))); } @@ -569,10 +565,8 @@ public OfflinePlayer[] executeSimple(Object[][] params) { String name = (String) params[0][0]; UUID uuid = null; if (name.length() > 16 || name.contains("-")) { // shortcut - try { + if (Utils.isValidUUID(name)) uuid = UUID.fromString(name); - } catch (IllegalArgumentException ignored) { - } } OfflinePlayer result; @@ -711,6 +705,22 @@ public String[] executeSimple(Object[][] params) { "\t\tset {_money} to formatNumber({money::%sender's uuid%})", "\t\tsend \"Your balance: %{_money}%\" to sender") .since("2.10"); + + Functions.registerFunction(new SimpleJavaFunction<>("uuid", new Parameter[]{ + new Parameter<>("uuid", DefaultClasses.STRING, true, null) + }, Classes.getExactClassInfo(UUID.class), true) { + @Override + public UUID[] executeSimple(Object[][] params) { + String uuid = (String) params[0][0]; + if (Utils.isValidUUID(uuid)) + return CollectionUtils.array(UUID.fromString(uuid)); + return new UUID[0]; + } + } + .description("Returns a UUID from the given string. The string must be in the format of a UUID.") + .examples("uuid(\"069a79f4-44e9-4726-a5be-fca90e38aaf5\")") + .since("INSERT VERSION") + ); } } diff --git a/src/main/java/ch/njol/skript/classes/data/JavaClasses.java b/src/main/java/ch/njol/skript/classes/data/JavaClasses.java index 8d9bbea8603..f9608f9aae6 100644 --- a/src/main/java/ch/njol/skript/classes/data/JavaClasses.java +++ b/src/main/java/ch/njol/skript/classes/data/JavaClasses.java @@ -19,6 +19,8 @@ import org.jetbrains.annotations.Nullable; import org.joml.Quaternionf; +import java.io.StreamCorruptedException; +import java.util.UUID; import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -325,6 +327,19 @@ public String toVariableNameString(Quaternionf quaternion) { return null; } })); + + Classes.registerClass(new ClassInfo<>(UUID.class, "uuid") + .user("uuids?") + .name("UUID") + .description( + "UUIDs are unique identifiers that ensure things can be reliably distinguished from each other. " + + "They are generated in a way that makes it practically impossible for duplicates to occur.", + "Read more about UUIDs and how they are used in Minecraft " + + "in the wiki entry about UUIDs.") + .since("INSERT VERSION") + .parser(new UUIDParser()) + .serializer(new UUIDSerializer()) + ); } /** @@ -793,4 +808,61 @@ public boolean mustSyncDeserialization() { } + private static class UUIDParser extends Parser { + + @Override + public @Nullable UUID parse(String string, ParseContext context) { + if (Utils.isValidUUID(string)) + return UUID.fromString(string); + return null; + } + + @Override + public String toString(UUID uuid, int flags) { + return uuid.toString(); + } + + @Override + public String toVariableNameString(UUID uuid) { + return uuid.toString(); + } + + } + + private static class UUIDSerializer extends Serializer { + + @Override + public Fields serialize(UUID uuid) { + Fields fields = new Fields(); + + fields.putPrimitive("mostsignificantbits", uuid.getMostSignificantBits()); + fields.putPrimitive("leastsignificantbits", uuid.getLeastSignificantBits()); + + return fields; + } + + @Override + public void deserialize(UUID o, Fields f) { + assert false; + } + + @Override + protected UUID deserialize(Fields fields) throws StreamCorruptedException { + long mostSignificantBits = fields.getAndRemovePrimitive("mostsignificantbits", long.class); + long leastSignificantBits = fields.getAndRemovePrimitive("leastsignificantbits", long.class); + return new UUID(mostSignificantBits, leastSignificantBits); + } + + @Override + public boolean mustSyncDeserialization() { + return false; + } + + @Override + protected boolean canBeInstantiated() { + return false; + } + + } + } diff --git a/src/main/java/ch/njol/skript/expressions/ExprFromUUID.java b/src/main/java/ch/njol/skript/expressions/ExprFromUUID.java new file mode 100644 index 00000000000..61de09b630a --- /dev/null +++ b/src/main/java/ch/njol/skript/expressions/ExprFromUUID.java @@ -0,0 +1,140 @@ +package ch.njol.skript.expressions; + +import ch.njol.skript.Skript; +import ch.njol.skript.doc.Description; +import ch.njol.skript.doc.Examples; +import ch.njol.skript.doc.Name; +import ch.njol.skript.doc.Since; +import ch.njol.skript.lang.Expression; +import ch.njol.skript.lang.ExpressionType; +import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.lang.SyntaxStringBuilder; +import ch.njol.skript.lang.util.SimpleExpression; +import ch.njol.util.Kleenean; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +@Name("Entity/Player/World from UUID") +@Description({ + "Get an entity, player, offline player or world from a UUID.", + "Unloaded entities or players that are offline (when using 'player from %uuid%') will return nothing." +}) +@Examples({ + "set {_player} to player from \"a0789aeb-7b46-43f6-86fb-cb671fed5775\" parsed as uuid", + "set {_offline player} to offline player from {_some uuid}", + "set {_entity} to entity from {_some uuid}", + "set {_world} to world from {_some uuid}" +}) +@Since("INSERT VERSION") +public class ExprFromUUID extends SimpleExpression { + + static { + Skript.registerExpression(ExprFromUUID.class, Object.class, ExpressionType.PROPERTY, + "[:offline[ ]]player[s] from %uuids%", + "entit(y|ies) from %uuids%", + "world[s] from %uuids%" + ); + } + + private Expression uuids; + private boolean player, offline, world; + + @Override + public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { + //noinspection unchecked + uuids = (Expression) exprs[0]; + player = matchedPattern == 0; + offline = parseResult.hasTag("offline"); + world = matchedPattern == 2; + return true; + } + + @Override + protected Object @Nullable [] get(Event event) { + List entities = new ArrayList<>(); + + for (UUID uuid : uuids.getArray(event)) { + if (player) { + if (offline) { + entities.add(Bukkit.getOfflinePlayer(uuid)); + continue; + } + + Player player = Bukkit.getPlayer(uuid); + if (player != null) + entities.add(player); + + } else if (world) { + World world = Bukkit.getWorld(uuid); + if (world != null) + entities.add(world); + + } else { + Entity entity = Bukkit.getEntity(uuid); + if (entity != null) + entities.add(entity); + } + } + + if (player) { + if (offline) + //noinspection SuspiciousToArrayCall + return entities.toArray(OfflinePlayer[]::new); + //noinspection SuspiciousToArrayCall + return entities.toArray(Player[]::new); + } + + if (world) + //noinspection SuspiciousToArrayCall + return entities.toArray(World[]::new); + //noinspection SuspiciousToArrayCall + return entities.toArray(Entity[]::new); + } + + @Override + public boolean isSingle() { + return uuids.isSingle(); + } + + @Override + public Class getReturnType() { + if (world) { + return World.class; + } else if (player) { + if (offline) + return OfflinePlayer.class; + return Player.class; + } + + return Entity.class; + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + SyntaxStringBuilder builder = new SyntaxStringBuilder(event, debug); + + if (world) { + builder.append("worlds"); + } else if (player) { + if (offline) + builder.append("offline"); + builder.append("players"); + } else { + builder.append("entities"); + } + + builder.append("from", uuids); + + return builder.toString(); + } + +} diff --git a/src/main/java/ch/njol/skript/expressions/ExprRandomUUID.java b/src/main/java/ch/njol/skript/expressions/ExprRandomUUID.java index 8a75a30e5ad..eebb120ef75 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprRandomUUID.java +++ b/src/main/java/ch/njol/skript/expressions/ExprRandomUUID.java @@ -19,37 +19,36 @@ @Name("Random UUID") @Description("Returns a random UUID.") @Examples("set {_uuid} to random uuid") -@Since("2.5.1") -public class ExprRandomUUID extends SimpleExpression { - +@Since("2.5.1, INSERT VERSION (return UUIDs)") +public class ExprRandomUUID extends SimpleExpression { + static { - Skript.registerExpression(ExprRandomUUID.class, String.class, ExpressionType.SIMPLE, "[a] random uuid"); + Skript.registerExpression(ExprRandomUUID.class, UUID.class, ExpressionType.SIMPLE, "[a] random uuid"); } - + @Override public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { return true; } - + @Override - @Nullable - protected String[] get(Event e) { - return new String[] {UUID.randomUUID().toString()}; + protected UUID @Nullable [] get(Event e) { + return new UUID[]{ UUID.randomUUID() }; } - + @Override public boolean isSingle() { return true; } - + @Override - public Class getReturnType() { - return String.class; + public Class getReturnType() { + return UUID.class; } - + @Override public String toString(@Nullable Event e, boolean debug) { return "random uuid"; } - + } diff --git a/src/main/java/ch/njol/skript/expressions/ExprUUID.java b/src/main/java/ch/njol/skript/expressions/ExprUUID.java index 4f0a0022a26..8419dc10aa9 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprUUID.java +++ b/src/main/java/ch/njol/skript/expressions/ExprUUID.java @@ -3,7 +3,6 @@ import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; @@ -13,35 +12,37 @@ import ch.njol.skript.doc.Since; import ch.njol.skript.expressions.base.SimplePropertyExpression; -/** - * @author Peter Güttinger - */ +import java.util.UUID; + @Name("UUID") -@Description({"The UUID of a player, entity or world.", - "In the future there will be an option to use a player's UUID instead of the name in variable names (i.e. when %player% is used), but for now this can be used.", - "Please note that this expression does not work for offline players if you are under 1.8!"}) -// TODO [UUID] update documentation after release. Add note about requiring Bukkit 1.7.(9/10)? -@Examples({"# prevents people from joining the server if they use the name of a player", - "# who has played on this server at least once since this script has been added", - "on login:", - " if {uuid::%name of player%} exists:", - " {uuid::%name of player%} is not uuid of player", - " kick player due to \"Someone with your name has played on this server before\"", - " else:", - " set {uuid::%name of player%} to uuid of player"}) -@Since("2.1.2, 2.2 (offline players' UUIDs), 2.2-dev24 (other entities' UUIDs)") -public class ExprUUID extends SimplePropertyExpression { +@Description("The UUID of a player, entity or world.") +@Examples({ + "# prevents people from joining the server if they use the name of a player", + "# who has played on this server at least once since this script has been added", + "on login:", + "\tif {uuid::%name of player%} exists:", + "\t\t{uuid::%name of player%} is not uuid of player", + "\t\tkick player due to \"Someone with your name has played on this server before\"", + "\telse:", + "\t\tset {uuid::%name of player%} to uuid of player", + "", + "command /what-is-my-uuid:", + "\ttrigger:", + "\t\tset {_uuid} to uuid of player", + "\t\tsend \"Your UUID is '%string within {_uuid}%'\"", +}) +@Since("2.1.2, 2.2 (offline players' uuids), 2.2-dev24 (other entities' uuids)") +public class ExprUUID extends SimplePropertyExpression { static { - register(ExprUUID.class, String.class, "UUID", "offlineplayers/worlds/entities"); + register(ExprUUID.class, UUID.class, "UUID", "offlineplayers/worlds/entities"); } @Override - @Nullable - public String convert(final Object o) { - if (o instanceof OfflinePlayer) { + public @Nullable UUID convert(Object object) { + if (object instanceof OfflinePlayer player) { try { - return ((OfflinePlayer) o).getUniqueId().toString(); + return player.getUniqueId(); } catch (UnsupportedOperationException e) { // Some plugins (ProtocolLib) try to emulate offline players, but fail miserably // They will throw this exception... and somehow server may freeze when this happens @@ -49,22 +50,22 @@ public String convert(final Object o) { e.printStackTrace(); return null; } - } else if (o instanceof Entity) { - return ((Entity)o).getUniqueId().toString(); - } else if (o instanceof World) { - return ((World) o).getUID().toString(); + } else if (object instanceof Entity entity) { + return entity.getUniqueId(); + } else if (object instanceof World world) { + return world.getUID(); } return null; } - + @Override - public Class getReturnType() { - return String.class; + public Class getReturnType() { + return UUID.class; } - + @Override protected String getPropertyName() { return "UUID"; } - + } diff --git a/src/main/java/ch/njol/skript/util/Utils.java b/src/main/java/ch/njol/skript/util/Utils.java index 100c488cb95..362ea97e70f 100644 --- a/src/main/java/ch/njol/skript/util/Utils.java +++ b/src/main/java/ch/njol/skript/util/Utils.java @@ -903,4 +903,30 @@ If there are no supported versions, you should contact the author(s): %s, and as return 0; } + /** + * Checks if the provided string is a valid {@link UUID}. + * @param uuid the string + * @return whether the given string is a valid UUID + */ + public static boolean isValidUUID(String uuid) { + if (uuid == null || uuid.length() != 36) + return false; + + if (uuid.charAt(8) != '-' || uuid.charAt(13) != '-' || uuid.charAt(18) != '-' || uuid.charAt(23) != '-') { + return false; + } + + for (int i = 0; i < 36; i++) { + if (i == 8 || i == 13 || i == 18 || i == 23) + continue; + + char c = uuid.charAt(i); + if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))) { + return false; + } + } + + return true; + } + } diff --git a/src/main/resources/lang/default.lang b/src/main/resources/lang/default.lang index 7b8bd655719..b3afdd20300 100644 --- a/src/main/resources/lang/default.lang +++ b/src/main/resources/lang/default.lang @@ -2586,6 +2586,7 @@ types: boolean: boolean¦ (yes/no)¦s (yes/no) @a string: text¦s @a chunk: chunk¦s @a + uuid: uuid¦s @a # Bukkit entity: entit¦y¦ies @an diff --git a/src/test/skript/tests/syntaxes/expressions/ExprUUID.sk b/src/test/skript/tests/syntaxes/expressions/ExprUUID.sk new file mode 100644 index 00000000000..eac3cbaf1f5 --- /dev/null +++ b/src/test/skript/tests/syntaxes/expressions/ExprUUID.sk @@ -0,0 +1,36 @@ +test "uuid": + set {_lookup} to offline player from ("a0789aeb-7b46-43f6-86fb-cb671fed5775" parsed as uuid) + assert {_lookup} is set with "Failed to look up offline player from uuid" + + set {_uuid} to ("a0789aeb-7b46-43f6-86fb-cb671fed5775" parsed as uuid) + assert {_uuid} is "a0789aeb-7b46-43f6-86fb-cb671fed5775" with "failed to compare uuid and string" + assert "a0789aeb-7b46-43f6-86fb-cb671fed5775" is {_uuid} with "failed to compare string and uuid" + + spawn a pig at test-location + set {_pig} to last spawned pig + + set {_uuid} to uuid of {_pig} + + set {_lookup} to entity from {_uuid} + assert {_lookup} is {_pig} with "Failed to look up pig" + + set {_le pig} to {_uuid} parsed as entity + assert {_le pig} is {_pig} with "failed to parse uuid as entity" + + delete entity within {_pig} + + set {_lookup} to entity from ("blah" parsed as uuid) + assert {_lookup} is set to fail with "entity is set without a valid uuid" + + # because this player is not online, should fail + set {_lookup} to player from ("a0789aeb-7b46-43f6-86fb-cb671fed5775" parsed as uuid) + assert {_lookup} is "Burbulinis" to fail with "player is set without being online" + + set {_lookup} to "Njol" parsed as offline player + assert {_lookup} is "Njol" with "failed to look up offline player from name" + + set {_uuid} to uuid of world of test-location + assert {_uuid} is set with "Failed to get world uuid" + + set {_world} to world from {_uuid} + assert {_world} is set with "Failed to get world from uuid" From d4f3564e5be7fe76a77cd7312b67a46b8d58f506 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Sun, 2 Mar 2025 04:38:19 +0100 Subject: [PATCH 07/27] More changes --- .../ch/njol/skript/doc/AvailableEvent.java | 25 +++++++++++++++++++ .../ch/njol/skript/doc/AvailableEvents.java | 4 +-- .../ch/njol/skript/doc/JSONGenerator.java | 20 +++++++++++++++ .../expressions/ExprAbsorbedBlocks.java | 2 +- .../skript/expressions/ExprAppliedEffect.java | 2 +- .../expressions/ExprAppliedEnchantments.java | 2 +- .../njol/skript/expressions/ExprAttacked.java | 4 +-- .../njol/skript/expressions/ExprAttacker.java | 3 +-- .../skript/expressions/ExprBeaconValues.java | 2 +- .../njol/skript/expressions/ExprClicked.java | 2 +- .../njol/skript/expressions/ExprCommand.java | 2 +- .../skript/expressions/ExprCommandSender.java | 3 +-- .../njol/skript/expressions/ExprDamage.java | 3 +-- .../ch/njol/skript/expressions/ExprEgg.java | 2 +- .../skript/expressions/ExprEnchantItem.java | 2 +- .../expressions/ExprEnchantingExpCost.java | 2 +- .../expressions/ExprEnchantmentBonus.java | 2 +- .../expressions/ExprEnchantmentOffer.java | 2 +- .../skript/expressions/ExprEvtInitiator.java | 2 +- .../skript/expressions/ExprExperience.java | 5 +--- .../expressions/ExprExplodedBlocks.java | 2 +- .../expressions/ExprExplosionBlockYield.java | 2 +- .../expressions/ExprExplosionYield.java | 3 +-- .../expressions/ExprFertilizedBlocks.java | 2 +- .../skript/expressions/ExprFinalDamage.java | 2 +- .../expressions/ExprHatchingNumber.java | 2 +- .../skript/expressions/ExprHatchingType.java | 2 +- .../skript/expressions/ExprHealAmount.java | 2 +- .../skript/expressions/ExprHealReason.java | 3 +-- .../njol/skript/expressions/ExprHealth.java | 2 +- .../skript/expressions/ExprHoverList.java | 2 +- .../expressions/ExprInventoryCloseReason.java | 2 +- .../ch/njol/skript/expressions/ExprLevel.java | 2 +- .../skript/expressions/ExprLevelProgress.java | 2 +- .../ch/njol/skript/expressions/ExprMe.java | 2 +- .../njol/skript/expressions/ExprMessage.java | 2 +- .../expressions/ExprProtocolVersion.java | 2 +- .../skript/expressions/ExprReadiedArrow.java | 2 +- .../skript/expressions/ExprSentCommands.java | 3 +-- .../skript/expressions/ExprVersionString.java | 2 +- 40 files changed, 85 insertions(+), 49 deletions(-) create mode 100644 src/main/java/ch/njol/skript/doc/AvailableEvent.java diff --git a/src/main/java/ch/njol/skript/doc/AvailableEvent.java b/src/main/java/ch/njol/skript/doc/AvailableEvent.java new file mode 100644 index 00000000000..af77b1f3847 --- /dev/null +++ b/src/main/java/ch/njol/skript/doc/AvailableEvent.java @@ -0,0 +1,25 @@ +package ch.njol.skript.doc; + +import org.bukkit.event.Event; + +import java.lang.annotation.*; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Repeatable(AvailableEvent.AvailableEvents.class) +@Documented +public @interface AvailableEvent { + + public Class[] value(); + + + @Target(ElementType.TYPE) + @Retention(RetentionPolicy.RUNTIME) + @Documented + @interface AvailableEvents { + + AvailableEvent[] value(); + + } + +} diff --git a/src/main/java/ch/njol/skript/doc/AvailableEvents.java b/src/main/java/ch/njol/skript/doc/AvailableEvents.java index 25672a65025..a6547e90c0a 100644 --- a/src/main/java/ch/njol/skript/doc/AvailableEvents.java +++ b/src/main/java/ch/njol/skript/doc/AvailableEvents.java @@ -7,8 +7,8 @@ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented -public @interface AvailableEvents { +@interface AvailableEvents { - public Class[] value(); + Class[] value(); } diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java index 7d7431e9cde..a2e8e0e8b96 100644 --- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java +++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java @@ -123,6 +123,26 @@ private static JsonObject generatedAnnotatedElement(SyntaxElementInfo syntaxI RequiredPlugins requirements = syntaxClass.getAnnotation(RequiredPlugins.class); syntaxJsonObject.add("requirements", requirements == null ? null : convertToJsonArray(requirements.value())); + + if (syntaxClass.isAnnotationPresent(AvailableEvents.class)) { + @NotNull AvailableEvents availableEventsAnnotation = syntaxClass.getAnnotation(AvailableEvents.class); + syntaxJsonObject.add("availableEvents", convertToJsonArray(Arrays.stream(availableEventsAnnotation.value()) + .map(Class::getSimpleName).toArray(String[]::new))); + } else if (syntaxClass.isAnnotationPresent(AvailableEvent.AvailableEvents.class)) { + @NotNull AvailableEvent.AvailableEvents availableEventsAnnotation = syntaxClass.getAnnotation(AvailableEvent.AvailableEvents.class); + syntaxJsonObject.add("availableEvents", convertToJsonArray(Arrays.stream(availableEventsAnnotation.value()) + .map(AvailableEvent::value) + .flatMap(Stream::of) + .map(Class::getSimpleName) + .toArray(String[]::new))); + } else if (syntaxClass.isAnnotationPresent(Example.class)) { + @NotNull AvailableEvent availableEvent = syntaxClass.getAnnotation(AvailableEvent.class); + syntaxJsonObject.add("availableEvents", convertToJsonArray(Arrays.stream(availableEvent.value()) + .map(Class::getSimpleName).toArray(String[]::new))); + } else { + syntaxJsonObject.add("availableEvents", null); + } + Keywords keywords = syntaxClass.getAnnotation(Keywords.class); syntaxJsonObject.add("keywords", keywords == null ? null : convertToJsonArray(keywords.value())); diff --git a/src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java index da4a9c104ee..b40150a98d2 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java @@ -20,7 +20,7 @@ @Name("Absorbed blocks") @Description("The blocks absorbed by a sponge block.") -@AvailableEvents(SpongeAbsorbEvent.class) +@AvailableEvent(SpongeAbsorbEvent.class) @Events("sponge absorb") @Examples("the absorbed blocks") @Since("2.5") diff --git a/src/main/java/ch/njol/skript/expressions/ExprAppliedEffect.java b/src/main/java/ch/njol/skript/expressions/ExprAppliedEffect.java index 80c191cec21..56f3cd9ca6a 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAppliedEffect.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAppliedEffect.java @@ -21,7 +21,7 @@ "\telse if applied effect = secondary effect:", "\t\tbroadcast \"Is Secondary\"" }) -@AvailableEvents(BeaconEffectEvent.class) +@AvailableEvent(BeaconEffectEvent.class) @Events("Beacon Effect") @RequiredPlugins("Paper") @Since("2.10") diff --git a/src/main/java/ch/njol/skript/expressions/ExprAppliedEnchantments.java b/src/main/java/ch/njol/skript/expressions/ExprAppliedEnchantments.java index 0632fe39c41..0a54bed721a 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAppliedEnchantments.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAppliedEnchantments.java @@ -22,7 +22,7 @@ " Deleting or removing the applied enchantments will prevent the item's enchantment."}) @Examples({"on enchant:", "\tset the applied enchantments to sharpness 10 and fire aspect 5"}) -@AvailableEvents(EnchantItemEvent.class) +@AvailableEvent(EnchantItemEvent.class) @Events("enchant") @Since("2.5") public class ExprAppliedEnchantments extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprAttacked.java b/src/main/java/ch/njol/skript/expressions/ExprAttacked.java index b090100aaaf..0add916f52e 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAttacked.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAttacked.java @@ -33,8 +33,8 @@ "\tvictim is a creeper", "\tdamage the attacked by 1 heart"}) @Since("1.3, 2.6.1 (projectile hit event)") -@AvailableEvents({EntityDamageEvent.class, EntityDeathEvent.class, - VehicleDamageEvent.class, VehicleDestroyEvent.class, ProjectileHitEvent.class}) +@AvailableEvent({EntityDamageEvent.class, EntityDeathEvent.class, + VehicleDamageEvent.class, VehicleDestroyEvent.class}) @Events({"damage", "death", "projectile hit"}) public class ExprAttacked extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprAttacker.java b/src/main/java/ch/njol/skript/expressions/ExprAttacker.java index a5fe99dcbed..bb51fcc01d7 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAttacker.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAttacker.java @@ -18,7 +18,6 @@ import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; -import ch.njol.skript.log.ErrorQuality; import ch.njol.skript.registrations.Classes; import ch.njol.util.Kleenean; @@ -33,7 +32,7 @@ " health of attacker is less than or equal to 2", " damage victim by 1 heart"}) @Since("1.3") -@AvailableEvents({EntityDamageEvent.class, EntityDeathEvent.class, +@AvailableEvent({EntityDamageEvent.class, EntityDeathEvent.class, VehicleDamageEvent.class, VehicleDestroyEvent.class}) @Events({"damage", "death", "destroy"}) public class ExprAttacker extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprBeaconValues.java b/src/main/java/ch/njol/skript/expressions/ExprBeaconValues.java index 07c9e09b0ae..541dcd44e50 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBeaconValues.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBeaconValues.java @@ -37,7 +37,7 @@ "add 1 to range of {_block}" }) @RequiredPlugins("Paper (range)") -@AvailableEvents({PlayerChangeBeaconEffectEvent.class, BeaconEffectEvent.class, BeaconActivatedEvent.class, BeaconDeactivatedEvent.class}) +@AvailableEvent({PlayerChangeBeaconEffectEvent.class, BeaconEffectEvent.class, BeaconActivatedEvent.class, BeaconDeactivatedEvent.class}) @Events({"Beacon Effect", "Beacon Toggle", "Beacon Change Effect"}) @Since("2.10") public class ExprBeaconValues extends PropertyExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprClicked.java b/src/main/java/ch/njol/skript/expressions/ExprClicked.java index 1cd5d5e680b..d84e7a38df1 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprClicked.java +++ b/src/main/java/ch/njol/skript/expressions/ExprClicked.java @@ -37,7 +37,7 @@ "\tshow the inventory of the clicked block to the player" }) @Since("1.0, 2.2-dev35 (more clickable things)") -@AvailableEvents({PlayerInteractEntityEvent.class, PlayerInteractAtEntityEvent.class, InventoryClickEvent.class, EnchantItemEvent.class, PlayerInteractEvent.class}) +@AvailableEvent({PlayerInteractEntityEvent.class, PlayerInteractAtEntityEvent.class, InventoryClickEvent.class, EnchantItemEvent.class, PlayerInteractEvent.class}) @Events({"click", "inventory click"}) public class ExprClicked extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprCommand.java b/src/main/java/ch/njol/skript/expressions/ExprCommand.java index e1208fe1207..28b62e6c83d 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprCommand.java +++ b/src/main/java/ch/njol/skript/expressions/ExprCommand.java @@ -31,7 +31,7 @@ @Since("2.0, 2.7 (support for script commands)") // TODO REMOVE // Should this use CommandEvent or ScriptCommandEvent? -@AvailableEvents({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, CommandEvent.class}) +@AvailableEvent({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, CommandEvent.class}) @Events("command") public class ExprCommand extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java b/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java index 78c4a59337c..11e63f78f9a 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java +++ b/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java @@ -1,7 +1,6 @@ package ch.njol.skript.expressions; import ch.njol.skript.command.CommandEvent; -import ch.njol.skript.command.ScriptCommandEvent; import ch.njol.skript.doc.*; import org.bukkit.command.CommandSender; @@ -23,7 +22,7 @@ @Since("2.0") // TODO REMOVE // Should this use CommandEvent or ScriptCommandEvent? -@AvailableEvents({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, CommandEvent.class}) +@AvailableEvent({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, CommandEvent.class}) @Events("command") public class ExprCommandSender extends EventValueExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprDamage.java b/src/main/java/ch/njol/skript/expressions/ExprDamage.java index b71820f46f7..cc32843eb39 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprDamage.java +++ b/src/main/java/ch/njol/skript/expressions/ExprDamage.java @@ -14,7 +14,6 @@ import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; -import ch.njol.skript.log.ErrorQuality; import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; @@ -32,7 +31,7 @@ "\tincrease the damage by 2" }) @Since("1.3.5, 2.8.0 (item damage event)") -@AvailableEvents({EntityDamageEvent.class, VehicleDamageEvent.class, PlayerItemDamageEvent.class}) +@AvailableEvent({EntityDamageEvent.class, VehicleDamageEvent.class, PlayerItemDamageEvent.class}) @Events({"Damage", "Vehicle Damage", "Item Damage"}) public class ExprDamage extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEgg.java b/src/main/java/ch/njol/skript/expressions/ExprEgg.java index 67e66f07d58..4a636f9252c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEgg.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEgg.java @@ -11,7 +11,7 @@ @Name("The Egg") @Description("The egg thrown in a Player Egg Throw event.") @Examples("spawn an egg at the egg") -@AvailableEvents(PlayerEggThrowEvent.class) +@AvailableEvent(PlayerEggThrowEvent.class) @Events("Egg Throw") @Since("2.7") public class ExprEgg extends EventValueExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java index 526c252bdea..cffc9f3dc37 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java @@ -24,7 +24,7 @@ "\tset the enchanted item to a diamond chestplate", "on enchant prepare:", "\tset the enchant item to a wooden sword"}) -@AvailableEvents({EnchantItemEvent.class, PrepareItemEnchantEvent.class}) +@AvailableEvent({EnchantItemEvent.class, PrepareItemEnchantEvent.class}) @Events({"enchant prepare", "enchant"}) @Since("2.5") public class ExprEnchantItem extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantingExpCost.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantingExpCost.java index d37764d09fe..7de5774bf3d 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantingExpCost.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantingExpCost.java @@ -21,7 +21,7 @@ "This is number that was displayed in the enchantment table, not the actual number of levels removed."}) @Examples({"on enchant:", "\tsend \"Cost: %the displayed enchanting cost%\" to player"}) -@AvailableEvents(EnchantItemEvent.class) +@AvailableEvent(EnchantItemEvent.class) @Events("enchant") @Since("2.5") public class ExprEnchantingExpCost extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentBonus.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentBonus.java index 6792194b6da..df712c2bceb 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentBonus.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentBonus.java @@ -17,7 +17,7 @@ @Description("The enchantment bonus in an enchant prepare event. This represents the number of bookshelves affecting/surrounding the enchantment table.") @Examples({"on enchant:", "\tsend \"There are %enchantment bonus% bookshelves surrounding this enchantment table!\" to player"}) -@AvailableEvents(PrepareItemEnchantEvent.class) +@AvailableEvent(PrepareItemEnchantEvent.class) @Events("enchant prepare") @Since("2.5") public class ExprEnchantmentBonus extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java index 533f1a49ee9..793b649d5e6 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java @@ -27,7 +27,7 @@ @Examples({"on enchant prepare:", "\tsend \"Your enchantment offers are: %the enchantment offers%\" to player"}) @Since("2.5") -@AvailableEvents(PrepareItemEnchantEvent.class) +@AvailableEvent(PrepareItemEnchantEvent.class) @Events("enchant prepare") @RequiredPlugins("1.11 or newer") public class ExprEnchantmentOffer extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEvtInitiator.java b/src/main/java/ch/njol/skript/expressions/ExprEvtInitiator.java index 3172d81f282..3b4c0e253c7 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEvtInitiator.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEvtInitiator.java @@ -20,7 +20,7 @@ "\tholder of event-initiator-inventory is a chest", "\tbroadcast \"Item transport happening at %location at holder of event-initiator-inventory%!\"" }) -@AvailableEvents(InventoryMoveItemEvent.class) +@AvailableEvent(InventoryMoveItemEvent.class) @Events("Inventory Item Move") @Since("2.8.0") public class ExprEvtInitiator extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprExperience.java b/src/main/java/ch/njol/skript/expressions/ExprExperience.java index fffbe78e2d5..7c4344045c6 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExperience.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExperience.java @@ -15,10 +15,7 @@ import org.bukkit.event.player.PlayerExpChangeEvent; import org.bukkit.event.player.PlayerFishEvent; import ch.njol.util.coll.CollectionUtils; -import org.bukkit.event.Event; -import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.entity.EntityBreedEvent; -import org.bukkit.event.player.PlayerExpChangeEvent; import org.jetbrains.annotations.Nullable; @Name("Experience") @@ -42,7 +39,7 @@ "\tadd 70 to dropped experience", }) @Since("2.1, 2.5.3 (block break event), 2.7 (experience change event), 2.10 (breeding, fishing)") -@AvailableEvents({ExperienceSpawnEvent.class, BlockBreakEvent.class, +@AvailableEvent({ExperienceSpawnEvent.class, BlockBreakEvent.class, PlayerExpChangeEvent.class, EntityBreedEvent.class, PlayerFishEvent.class}) @Events({"experience spawn", "break / mine", "experience change", "entity breeding"}) public class ExprExperience extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java index c5275bbce55..c13e2f9321b 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java @@ -38,7 +38,7 @@ "", "on explode:", "\tadd blocks above event-entity to exploded blocks"}) -@AvailableEvents(EntityExplodeEvent.class) +@AvailableEvent(EntityExplodeEvent.class) @Events("explode") @Since("2.5, 2.8.6 (modify blocks)") public class ExprExplodedBlocks extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprExplosionBlockYield.java b/src/main/java/ch/njol/skript/expressions/ExprExplosionBlockYield.java index ac4234b0165..3f7506845cb 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExplosionBlockYield.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExplosionBlockYield.java @@ -21,7 +21,7 @@ "Attempting to change the yield to a value less than 0 will have no effect."}) @Examples({"on explode:", "set the explosion's block yield to 10%"}) -@AvailableEvents(EntityExplodeEvent.class) +@AvailableEvent(EntityExplodeEvent.class) @Events("explosion") @Since("2.5") public class ExprExplosionBlockYield extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprExplosionYield.java b/src/main/java/ch/njol/skript/expressions/ExprExplosionYield.java index 3fbf5847517..6199258d619 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExplosionYield.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExplosionYield.java @@ -3,7 +3,6 @@ import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.entity.ExplosionPrimeEvent; -import org.checkerframework.checker.units.qual.A; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; @@ -22,7 +21,7 @@ " Read this wiki page for more information"}) @Examples({"on explosion prime:", "\tset the yield of the explosion to 10"}) -@AvailableEvents(ExplosionPrimeEvent.class) +@AvailableEvent(ExplosionPrimeEvent.class) @Events("explosion prime") @Since("2.5") public class ExprExplosionYield extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprFertilizedBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprFertilizedBlocks.java index 35ac3a56e0d..f3f548f4901 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprFertilizedBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprFertilizedBlocks.java @@ -19,7 +19,7 @@ @Name("Fertilized Blocks") @Description("The blocks fertilized in block fertilize events.") @RequiredPlugins("Minecraft 1.13 or newer") -@AvailableEvents(BlockFertilizeEvent.class) +@AvailableEvent(BlockFertilizeEvent.class) @Events("block fertilize") @Examples("the fertilized blocks") @Since("2.5") diff --git a/src/main/java/ch/njol/skript/expressions/ExprFinalDamage.java b/src/main/java/ch/njol/skript/expressions/ExprFinalDamage.java index fc2f4b196c8..93381419a84 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprFinalDamage.java +++ b/src/main/java/ch/njol/skript/expressions/ExprFinalDamage.java @@ -18,7 +18,7 @@ @Name("Final Damage") @Description("How much damage is done in a damage event, considering all types of damage reduction. Can NOT be changed.") @Examples({"send \"%final damage%\" to victim"}) -@AvailableEvents(EntityDamageEvent.class) +@AvailableEvent(EntityDamageEvent.class) @Events("damage") @Since("2.2-dev19") public class ExprFinalDamage extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHatchingNumber.java b/src/main/java/ch/njol/skript/expressions/ExprHatchingNumber.java index 1f15142545d..c7a10a550bc 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHatchingNumber.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHatchingNumber.java @@ -22,7 +22,7 @@ "on player egg throw:", "\tset the hatching number to 10" }) -@AvailableEvents(PlayerEggThrowEvent.class) +@AvailableEvent(PlayerEggThrowEvent.class) @Events("Egg Throw") @Since("2.7") public class ExprHatchingNumber extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHatchingType.java b/src/main/java/ch/njol/skript/expressions/ExprHatchingType.java index 7517c72d8cf..c226867701e 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHatchingType.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHatchingType.java @@ -22,7 +22,7 @@ "on player egg throw:", "\tset the hatching entity type to a primed tnt" }) -@AvailableEvents(PlayerEggThrowEvent.class) +@AvailableEvent(PlayerEggThrowEvent.class) @Events("Egg Throw") @Since("2.7") public class ExprHatchingType extends SimpleExpression> { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHealAmount.java b/src/main/java/ch/njol/skript/expressions/ExprHealAmount.java index a4f411281fb..d627ab371d0 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHealAmount.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHealAmount.java @@ -23,7 +23,7 @@ "\tincrease the heal amount by 2", "\tremove 0.5 from the healing amount" }) -@AvailableEvents(EntityRegainHealthEvent.class) +@AvailableEvent(EntityRegainHealthEvent.class) @Events("heal") @Since("2.5.1") public class ExprHealAmount extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHealReason.java b/src/main/java/ch/njol/skript/expressions/ExprHealReason.java index 009e1e901e2..f49ed990d31 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHealReason.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHealReason.java @@ -6,7 +6,6 @@ import org.bukkit.event.entity.EntityRegainHealthEvent; import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; -import org.checkerframework.checker.units.qual.A; @Name("Heal Reason") @Description("The heal reason of a heal event.") @@ -15,7 +14,7 @@ "\theal reason is satiated", "\tsend \"You ate enough food and gained full health back!\"" }) -@AvailableEvents(EntityRegainHealthEvent.class) +@AvailableEvent(EntityRegainHealthEvent.class) @Events("heal") @Since("2.5") public class ExprHealReason extends EventValueExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHealth.java b/src/main/java/ch/njol/skript/expressions/ExprHealth.java index 4f9ac17a11e..c8a5df1ff80 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHealth.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHealth.java @@ -20,7 +20,7 @@ @Description("The health of a creature, e.g. a player, mob, villager, etc. The minimum value is 0, and the maximum is the creature's max health (e.g. 10 for players).") @Examples({"message \"You have %health% HP left.\""}) @Since("1.0") -@AvailableEvents(EntityDamageEvent.class) +@AvailableEvent(EntityDamageEvent.class) @Events("damage") public class ExprHealth extends PropertyExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHoverList.java b/src/main/java/ch/njol/skript/expressions/ExprHoverList.java index 8abcbd8fd2c..6c77e1dda38 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHoverList.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHoverList.java @@ -37,7 +37,7 @@ }) @Since("2.3") @RequiredPlugins("Paper 1.12.2 or newer") -@AvailableEvents(PaperServerListPingEvent.class) +@AvailableEvent(PaperServerListPingEvent.class) @Events("server list ping") public class ExprHoverList extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprInventoryCloseReason.java b/src/main/java/ch/njol/skript/expressions/ExprInventoryCloseReason.java index c7f6d592709..58b7897c671 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprInventoryCloseReason.java +++ b/src/main/java/ch/njol/skript/expressions/ExprInventoryCloseReason.java @@ -18,7 +18,7 @@ "\tinventory close reason is teleport", "\tsend \"Your inventory closed due to teleporting!\" to player" }) -@AvailableEvents(InventoryCloseEvent.class) +@AvailableEvent(InventoryCloseEvent.class) @Events("Inventory Close") @RequiredPlugins("Paper") @Since("2.8.0") diff --git a/src/main/java/ch/njol/skript/expressions/ExprLevel.java b/src/main/java/ch/njol/skript/expressions/ExprLevel.java index 843a090802a..b770a98871b 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprLevel.java +++ b/src/main/java/ch/njol/skript/expressions/ExprLevel.java @@ -21,7 +21,7 @@ @Description("The level of a player.") @Examples({"reduce the victim's level by 1", "set the player's level to 0"}) -@AvailableEvents(PlayerLevelChangeEvent.class) +@AvailableEvent(PlayerLevelChangeEvent.class) @Events("level change") @Since("unknown (before 2.1)") public class ExprLevel extends SimplePropertyExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprLevelProgress.java b/src/main/java/ch/njol/skript/expressions/ExprLevelProgress.java index a870470fc11..91931d2ec4b 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprLevelProgress.java +++ b/src/main/java/ch/njol/skript/expressions/ExprLevelProgress.java @@ -31,7 +31,7 @@ "\t\t\tset level progress of the loop-player to 0.99", "on xp spawn:", "\tcancel event"}) -@AvailableEvents(PlayerLevelChangeEvent.class) +@AvailableEvent(PlayerLevelChangeEvent.class) @Events("level change") @Since("2.0") public class ExprLevelProgress extends SimplePropertyExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprMe.java b/src/main/java/ch/njol/skript/expressions/ExprMe.java index cc6f69eaeef..2cdcb0d9d50 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprMe.java +++ b/src/main/java/ch/njol/skript/expressions/ExprMe.java @@ -17,7 +17,7 @@ @Name("Me") @Description("A 'me' expression that can be used in players' effect commands only.") @Examples({"!heal me", "!kick myself", "!give a diamond axe to me"}) -@AvailableEvents(EffectCommandEvent.class) +@AvailableEvent(EffectCommandEvent.class) @Events("Effect Command") @Since("2.1.1") public class ExprMe extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprMessage.java b/src/main/java/ch/njol/skript/expressions/ExprMessage.java index 2f929780945..9f932d363e3 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprMessage.java +++ b/src/main/java/ch/njol/skript/expressions/ExprMessage.java @@ -51,7 +51,7 @@ "on broadcast:", "\tset broadcast message to \"&a[BROADCAST] %broadcast message%\"" }) -@AvailableEvents({AsyncPlayerChatEvent.class, PlayerJoinEvent.class, PlayerQuitEvent.class, PlayerKickEvent.class, EntityDeathEvent.class, BroadcastMessageEvent.class}) +@AvailableEvent({AsyncPlayerChatEvent.class, PlayerJoinEvent.class, PlayerQuitEvent.class, PlayerKickEvent.class, EntityDeathEvent.class, BroadcastMessageEvent.class}) @Events({"chat", "join", "quit", "death", "broadcast"}) @Since("1.4.6 (chat message), 1.4.9 (join & quit messages), 2.0 (death message), 2.9.0 (clear message), 2.10 (broadcasted message)") public class ExprMessage extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprProtocolVersion.java b/src/main/java/ch/njol/skript/expressions/ExprProtocolVersion.java index ef9f10dd43c..029ca4cf615 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprProtocolVersion.java +++ b/src/main/java/ch/njol/skript/expressions/ExprProtocolVersion.java @@ -31,7 +31,7 @@ @Examples({"on server list ping:", "\tset the version string to \"<light green>Version: <orange>%minecraft version%\"", "\tset the protocol version to 0 # 13w41a (1.7) - so the player will see the custom version string almost always"}) -@AvailableEvents(ServerListPingEvent.class) +@AvailableEvent(ServerListPingEvent.class) @Events("server list ping") @RequiredPlugins("Paper 1.12.2 or newer") @Since("2.3") diff --git a/src/main/java/ch/njol/skript/expressions/ExprReadiedArrow.java b/src/main/java/ch/njol/skript/expressions/ExprReadiedArrow.java index 74c9642783d..cf0a757b573 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprReadiedArrow.java +++ b/src/main/java/ch/njol/skript/expressions/ExprReadiedArrow.java @@ -20,7 +20,7 @@ "\tif selected arrow is not a spectral arrow:", "\t\tcancel event" }) -@AvailableEvents(PlayerReadyArrowEvent.class) +@AvailableEvent(PlayerReadyArrowEvent.class) @Events("ready arrow") @Since("2.8.0") public class ExprReadiedArrow extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprSentCommands.java b/src/main/java/ch/njol/skript/expressions/ExprSentCommands.java index 0c6b3835e9e..87d08828ac9 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprSentCommands.java +++ b/src/main/java/ch/njol/skript/expressions/ExprSentCommands.java @@ -9,7 +9,6 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; -import com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent; import com.google.common.collect.Lists; import org.bukkit.event.Event; import org.bukkit.event.player.PlayerCommandSendEvent; @@ -31,7 +30,7 @@ "\tset command list to command list where [input does not contain \":\"]", "\tremove \"help\" from command list" }) -@AvailableEvents(PlayerCommandSendEvent.class) +@AvailableEvent(PlayerCommandSendEvent.class) @Events("send command list") @Since("2.8.0") public class ExprSentCommands extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprVersionString.java b/src/main/java/ch/njol/skript/expressions/ExprVersionString.java index 5ba8fa802e8..95c100f5c42 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprVersionString.java +++ b/src/main/java/ch/njol/skript/expressions/ExprVersionString.java @@ -25,7 +25,7 @@ "\tset the protocol version to 0 # 13w41a (1.7), so it will show the version string always", "\tset the version string to \"<light green>Version: <orange>%minecraft version%\"" }) -@AvailableEvents(ServerListPingEvent.class) +@AvailableEvent(ServerListPingEvent.class) @Events("Server List Ping") @RequiredPlugins("Paper 1.12.2+") @Since("2.3") From 09ca2340dd121132fb1c0a8747121523391dc3e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Sun, 2 Mar 2025 04:42:03 +0100 Subject: [PATCH 08/27] Revert "String -> UUID (#7497)" This reverts commit 2c9571ee53a26ed440fb82e04e9a3f2deeeecfe5. --- .../classes/data/DefaultComparators.java | 5 - .../classes/data/DefaultConverters.java | 5 - .../skript/classes/data/DefaultFunctions.java | 28 ++-- .../njol/skript/classes/data/JavaClasses.java | 72 --------- .../njol/skript/expressions/ExprFromUUID.java | 140 ------------------ .../skript/expressions/ExprRandomUUID.java | 29 ++-- .../ch/njol/skript/expressions/ExprUUID.java | 65 ++++---- src/main/java/ch/njol/skript/util/Utils.java | 26 ---- src/main/resources/lang/default.lang | 1 - .../tests/syntaxes/expressions/ExprUUID.sk | 36 ----- 10 files changed, 56 insertions(+), 351 deletions(-) delete mode 100644 src/main/java/ch/njol/skript/expressions/ExprFromUUID.java delete mode 100644 src/test/skript/tests/syntaxes/expressions/ExprUUID.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 fd8f6ecb8fd..f6a2759c201 100644 --- a/src/main/java/ch/njol/skript/classes/data/DefaultComparators.java +++ b/src/main/java/ch/njol/skript/classes/data/DefaultComparators.java @@ -45,7 +45,6 @@ import org.skriptlang.skript.lang.comparator.Relation; import java.util.Objects; -import java.util.UUID; @SuppressWarnings({"rawtypes"}) public class DefaultComparators { @@ -666,10 +665,6 @@ public Relation compare(EntitySnapshot snap1, EntitySnapshot snap2) { } }); } - - // UUID - Comparators.registerComparator(UUID.class, UUID.class, (one, two) -> Relation.get(one.equals(two))); - Comparators.registerComparator(UUID.class, String.class, (one, two) -> Relation.get(one.toString().equals(two))); } } 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 6a7592a2706..78e5799ef92 100644 --- a/src/main/java/ch/njol/skript/classes/data/DefaultConverters.java +++ b/src/main/java/ch/njol/skript/classes/data/DefaultConverters.java @@ -39,8 +39,6 @@ import org.skriptlang.skript.lang.converter.Converters; import org.skriptlang.skript.lang.script.Script; -import java.util.UUID; - public class DefaultConverters { public DefaultConverters() {} @@ -279,9 +277,6 @@ public void setAmount(Number amount) { Converters.registerConverter(Script.class, Config.class, Script::getConfig); Converters.registerConverter(Config.class, Node.class, Config::getMainNode); - // UUID -> String - Converters.registerConverter(UUID.class, String.class, UUID::toString); - // // Entity - String (UUID) // Very slow, thus disabled for now // Converters.registerConverter(String.class, Entity.class, new Converter() { // diff --git a/src/main/java/ch/njol/skript/classes/data/DefaultFunctions.java b/src/main/java/ch/njol/skript/classes/data/DefaultFunctions.java index 50fc0619e13..69a142d4827 100644 --- a/src/main/java/ch/njol/skript/classes/data/DefaultFunctions.java +++ b/src/main/java/ch/njol/skript/classes/data/DefaultFunctions.java @@ -11,7 +11,10 @@ import ch.njol.skript.lang.util.SimpleLiteral; import ch.njol.skript.registrations.Classes; import ch.njol.skript.registrations.DefaultClasses; -import ch.njol.skript.util.*; +import ch.njol.skript.util.Color; +import ch.njol.skript.util.ColorRGB; +import ch.njol.skript.util.Contract; +import ch.njol.skript.util.Date; import ch.njol.util.Math2; import ch.njol.util.StringUtils; import ch.njol.util.coll.CollectionUtils; @@ -541,8 +544,9 @@ public Player[] executeSimple(Object[][] params) { boolean isExact = (boolean) params[1][0]; UUID uuid = null; if (name.length() > 16 || name.contains("-")) { // shortcut - if (Utils.isValidUUID(name)) + try { uuid = UUID.fromString(name); + } catch (IllegalArgumentException ignored) {} } return CollectionUtils.array(uuid != null ? Bukkit.getPlayer(uuid) : (isExact ? Bukkit.getPlayerExact(name) : Bukkit.getPlayer(name))); } @@ -565,8 +569,10 @@ public OfflinePlayer[] executeSimple(Object[][] params) { String name = (String) params[0][0]; UUID uuid = null; if (name.length() > 16 || name.contains("-")) { // shortcut - if (Utils.isValidUUID(name)) + try { uuid = UUID.fromString(name); + } catch (IllegalArgumentException ignored) { + } } OfflinePlayer result; @@ -705,22 +711,6 @@ public String[] executeSimple(Object[][] params) { "\t\tset {_money} to formatNumber({money::%sender's uuid%})", "\t\tsend \"Your balance: %{_money}%\" to sender") .since("2.10"); - - Functions.registerFunction(new SimpleJavaFunction<>("uuid", new Parameter[]{ - new Parameter<>("uuid", DefaultClasses.STRING, true, null) - }, Classes.getExactClassInfo(UUID.class), true) { - @Override - public UUID[] executeSimple(Object[][] params) { - String uuid = (String) params[0][0]; - if (Utils.isValidUUID(uuid)) - return CollectionUtils.array(UUID.fromString(uuid)); - return new UUID[0]; - } - } - .description("Returns a UUID from the given string. The string must be in the format of a UUID.") - .examples("uuid(\"069a79f4-44e9-4726-a5be-fca90e38aaf5\")") - .since("INSERT VERSION") - ); } } diff --git a/src/main/java/ch/njol/skript/classes/data/JavaClasses.java b/src/main/java/ch/njol/skript/classes/data/JavaClasses.java index f9608f9aae6..8d9bbea8603 100644 --- a/src/main/java/ch/njol/skript/classes/data/JavaClasses.java +++ b/src/main/java/ch/njol/skript/classes/data/JavaClasses.java @@ -19,8 +19,6 @@ import org.jetbrains.annotations.Nullable; import org.joml.Quaternionf; -import java.io.StreamCorruptedException; -import java.util.UUID; import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -327,19 +325,6 @@ public String toVariableNameString(Quaternionf quaternion) { return null; } })); - - Classes.registerClass(new ClassInfo<>(UUID.class, "uuid") - .user("uuids?") - .name("UUID") - .description( - "UUIDs are unique identifiers that ensure things can be reliably distinguished from each other. " - + "They are generated in a way that makes it practically impossible for duplicates to occur.", - "Read more about UUIDs and how they are used in Minecraft " - + "in the wiki entry about UUIDs.") - .since("INSERT VERSION") - .parser(new UUIDParser()) - .serializer(new UUIDSerializer()) - ); } /** @@ -808,61 +793,4 @@ public boolean mustSyncDeserialization() { } - private static class UUIDParser extends Parser { - - @Override - public @Nullable UUID parse(String string, ParseContext context) { - if (Utils.isValidUUID(string)) - return UUID.fromString(string); - return null; - } - - @Override - public String toString(UUID uuid, int flags) { - return uuid.toString(); - } - - @Override - public String toVariableNameString(UUID uuid) { - return uuid.toString(); - } - - } - - private static class UUIDSerializer extends Serializer { - - @Override - public Fields serialize(UUID uuid) { - Fields fields = new Fields(); - - fields.putPrimitive("mostsignificantbits", uuid.getMostSignificantBits()); - fields.putPrimitive("leastsignificantbits", uuid.getLeastSignificantBits()); - - return fields; - } - - @Override - public void deserialize(UUID o, Fields f) { - assert false; - } - - @Override - protected UUID deserialize(Fields fields) throws StreamCorruptedException { - long mostSignificantBits = fields.getAndRemovePrimitive("mostsignificantbits", long.class); - long leastSignificantBits = fields.getAndRemovePrimitive("leastsignificantbits", long.class); - return new UUID(mostSignificantBits, leastSignificantBits); - } - - @Override - public boolean mustSyncDeserialization() { - return false; - } - - @Override - protected boolean canBeInstantiated() { - return false; - } - - } - } diff --git a/src/main/java/ch/njol/skript/expressions/ExprFromUUID.java b/src/main/java/ch/njol/skript/expressions/ExprFromUUID.java deleted file mode 100644 index 61de09b630a..00000000000 --- a/src/main/java/ch/njol/skript/expressions/ExprFromUUID.java +++ /dev/null @@ -1,140 +0,0 @@ -package ch.njol.skript.expressions; - -import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; -import ch.njol.skript.lang.Expression; -import ch.njol.skript.lang.ExpressionType; -import ch.njol.skript.lang.SkriptParser.ParseResult; -import ch.njol.skript.lang.SyntaxStringBuilder; -import ch.njol.skript.lang.util.SimpleExpression; -import ch.njol.util.Kleenean; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.World; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -@Name("Entity/Player/World from UUID") -@Description({ - "Get an entity, player, offline player or world from a UUID.", - "Unloaded entities or players that are offline (when using 'player from %uuid%') will return nothing." -}) -@Examples({ - "set {_player} to player from \"a0789aeb-7b46-43f6-86fb-cb671fed5775\" parsed as uuid", - "set {_offline player} to offline player from {_some uuid}", - "set {_entity} to entity from {_some uuid}", - "set {_world} to world from {_some uuid}" -}) -@Since("INSERT VERSION") -public class ExprFromUUID extends SimpleExpression { - - static { - Skript.registerExpression(ExprFromUUID.class, Object.class, ExpressionType.PROPERTY, - "[:offline[ ]]player[s] from %uuids%", - "entit(y|ies) from %uuids%", - "world[s] from %uuids%" - ); - } - - private Expression uuids; - private boolean player, offline, world; - - @Override - public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { - //noinspection unchecked - uuids = (Expression) exprs[0]; - player = matchedPattern == 0; - offline = parseResult.hasTag("offline"); - world = matchedPattern == 2; - return true; - } - - @Override - protected Object @Nullable [] get(Event event) { - List entities = new ArrayList<>(); - - for (UUID uuid : uuids.getArray(event)) { - if (player) { - if (offline) { - entities.add(Bukkit.getOfflinePlayer(uuid)); - continue; - } - - Player player = Bukkit.getPlayer(uuid); - if (player != null) - entities.add(player); - - } else if (world) { - World world = Bukkit.getWorld(uuid); - if (world != null) - entities.add(world); - - } else { - Entity entity = Bukkit.getEntity(uuid); - if (entity != null) - entities.add(entity); - } - } - - if (player) { - if (offline) - //noinspection SuspiciousToArrayCall - return entities.toArray(OfflinePlayer[]::new); - //noinspection SuspiciousToArrayCall - return entities.toArray(Player[]::new); - } - - if (world) - //noinspection SuspiciousToArrayCall - return entities.toArray(World[]::new); - //noinspection SuspiciousToArrayCall - return entities.toArray(Entity[]::new); - } - - @Override - public boolean isSingle() { - return uuids.isSingle(); - } - - @Override - public Class getReturnType() { - if (world) { - return World.class; - } else if (player) { - if (offline) - return OfflinePlayer.class; - return Player.class; - } - - return Entity.class; - } - - @Override - public String toString(@Nullable Event event, boolean debug) { - SyntaxStringBuilder builder = new SyntaxStringBuilder(event, debug); - - if (world) { - builder.append("worlds"); - } else if (player) { - if (offline) - builder.append("offline"); - builder.append("players"); - } else { - builder.append("entities"); - } - - builder.append("from", uuids); - - return builder.toString(); - } - -} diff --git a/src/main/java/ch/njol/skript/expressions/ExprRandomUUID.java b/src/main/java/ch/njol/skript/expressions/ExprRandomUUID.java index eebb120ef75..8a75a30e5ad 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprRandomUUID.java +++ b/src/main/java/ch/njol/skript/expressions/ExprRandomUUID.java @@ -19,36 +19,37 @@ @Name("Random UUID") @Description("Returns a random UUID.") @Examples("set {_uuid} to random uuid") -@Since("2.5.1, INSERT VERSION (return UUIDs)") -public class ExprRandomUUID extends SimpleExpression { - +@Since("2.5.1") +public class ExprRandomUUID extends SimpleExpression { + static { - Skript.registerExpression(ExprRandomUUID.class, UUID.class, ExpressionType.SIMPLE, "[a] random uuid"); + Skript.registerExpression(ExprRandomUUID.class, String.class, ExpressionType.SIMPLE, "[a] random uuid"); } - + @Override public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { return true; } - + @Override - protected UUID @Nullable [] get(Event e) { - return new UUID[]{ UUID.randomUUID() }; + @Nullable + protected String[] get(Event e) { + return new String[] {UUID.randomUUID().toString()}; } - + @Override public boolean isSingle() { return true; } - + @Override - public Class getReturnType() { - return UUID.class; + public Class getReturnType() { + return String.class; } - + @Override public String toString(@Nullable Event e, boolean debug) { return "random uuid"; } - + } diff --git a/src/main/java/ch/njol/skript/expressions/ExprUUID.java b/src/main/java/ch/njol/skript/expressions/ExprUUID.java index 8419dc10aa9..4f0a0022a26 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprUUID.java +++ b/src/main/java/ch/njol/skript/expressions/ExprUUID.java @@ -3,6 +3,7 @@ import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; @@ -12,37 +13,35 @@ import ch.njol.skript.doc.Since; import ch.njol.skript.expressions.base.SimplePropertyExpression; -import java.util.UUID; - +/** + * @author Peter Güttinger + */ @Name("UUID") -@Description("The UUID of a player, entity or world.") -@Examples({ - "# prevents people from joining the server if they use the name of a player", - "# who has played on this server at least once since this script has been added", - "on login:", - "\tif {uuid::%name of player%} exists:", - "\t\t{uuid::%name of player%} is not uuid of player", - "\t\tkick player due to \"Someone with your name has played on this server before\"", - "\telse:", - "\t\tset {uuid::%name of player%} to uuid of player", - "", - "command /what-is-my-uuid:", - "\ttrigger:", - "\t\tset {_uuid} to uuid of player", - "\t\tsend \"Your UUID is '%string within {_uuid}%'\"", -}) -@Since("2.1.2, 2.2 (offline players' uuids), 2.2-dev24 (other entities' uuids)") -public class ExprUUID extends SimplePropertyExpression { +@Description({"The UUID of a player, entity or world.", + "In the future there will be an option to use a player's UUID instead of the name in variable names (i.e. when %player% is used), but for now this can be used.", + "Please note that this expression does not work for offline players if you are under 1.8!"}) +// TODO [UUID] update documentation after release. Add note about requiring Bukkit 1.7.(9/10)? +@Examples({"# prevents people from joining the server if they use the name of a player", + "# who has played on this server at least once since this script has been added", + "on login:", + " if {uuid::%name of player%} exists:", + " {uuid::%name of player%} is not uuid of player", + " kick player due to \"Someone with your name has played on this server before\"", + " else:", + " set {uuid::%name of player%} to uuid of player"}) +@Since("2.1.2, 2.2 (offline players' UUIDs), 2.2-dev24 (other entities' UUIDs)") +public class ExprUUID extends SimplePropertyExpression { static { - register(ExprUUID.class, UUID.class, "UUID", "offlineplayers/worlds/entities"); + register(ExprUUID.class, String.class, "UUID", "offlineplayers/worlds/entities"); } @Override - public @Nullable UUID convert(Object object) { - if (object instanceof OfflinePlayer player) { + @Nullable + public String convert(final Object o) { + if (o instanceof OfflinePlayer) { try { - return player.getUniqueId(); + return ((OfflinePlayer) o).getUniqueId().toString(); } catch (UnsupportedOperationException e) { // Some plugins (ProtocolLib) try to emulate offline players, but fail miserably // They will throw this exception... and somehow server may freeze when this happens @@ -50,22 +49,22 @@ public class ExprUUID extends SimplePropertyExpression { e.printStackTrace(); return null; } - } else if (object instanceof Entity entity) { - return entity.getUniqueId(); - } else if (object instanceof World world) { - return world.getUID(); + } else if (o instanceof Entity) { + return ((Entity)o).getUniqueId().toString(); + } else if (o instanceof World) { + return ((World) o).getUID().toString(); } return null; } - + @Override - public Class getReturnType() { - return UUID.class; + public Class getReturnType() { + return String.class; } - + @Override protected String getPropertyName() { return "UUID"; } - + } diff --git a/src/main/java/ch/njol/skript/util/Utils.java b/src/main/java/ch/njol/skript/util/Utils.java index 362ea97e70f..100c488cb95 100644 --- a/src/main/java/ch/njol/skript/util/Utils.java +++ b/src/main/java/ch/njol/skript/util/Utils.java @@ -903,30 +903,4 @@ If there are no supported versions, you should contact the author(s): %s, and as return 0; } - /** - * Checks if the provided string is a valid {@link UUID}. - * @param uuid the string - * @return whether the given string is a valid UUID - */ - public static boolean isValidUUID(String uuid) { - if (uuid == null || uuid.length() != 36) - return false; - - if (uuid.charAt(8) != '-' || uuid.charAt(13) != '-' || uuid.charAt(18) != '-' || uuid.charAt(23) != '-') { - return false; - } - - for (int i = 0; i < 36; i++) { - if (i == 8 || i == 13 || i == 18 || i == 23) - continue; - - char c = uuid.charAt(i); - if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))) { - return false; - } - } - - return true; - } - } diff --git a/src/main/resources/lang/default.lang b/src/main/resources/lang/default.lang index b3afdd20300..7b8bd655719 100644 --- a/src/main/resources/lang/default.lang +++ b/src/main/resources/lang/default.lang @@ -2586,7 +2586,6 @@ types: boolean: boolean¦ (yes/no)¦s (yes/no) @a string: text¦s @a chunk: chunk¦s @a - uuid: uuid¦s @a # Bukkit entity: entit¦y¦ies @an diff --git a/src/test/skript/tests/syntaxes/expressions/ExprUUID.sk b/src/test/skript/tests/syntaxes/expressions/ExprUUID.sk deleted file mode 100644 index eac3cbaf1f5..00000000000 --- a/src/test/skript/tests/syntaxes/expressions/ExprUUID.sk +++ /dev/null @@ -1,36 +0,0 @@ -test "uuid": - set {_lookup} to offline player from ("a0789aeb-7b46-43f6-86fb-cb671fed5775" parsed as uuid) - assert {_lookup} is set with "Failed to look up offline player from uuid" - - set {_uuid} to ("a0789aeb-7b46-43f6-86fb-cb671fed5775" parsed as uuid) - assert {_uuid} is "a0789aeb-7b46-43f6-86fb-cb671fed5775" with "failed to compare uuid and string" - assert "a0789aeb-7b46-43f6-86fb-cb671fed5775" is {_uuid} with "failed to compare string and uuid" - - spawn a pig at test-location - set {_pig} to last spawned pig - - set {_uuid} to uuid of {_pig} - - set {_lookup} to entity from {_uuid} - assert {_lookup} is {_pig} with "Failed to look up pig" - - set {_le pig} to {_uuid} parsed as entity - assert {_le pig} is {_pig} with "failed to parse uuid as entity" - - delete entity within {_pig} - - set {_lookup} to entity from ("blah" parsed as uuid) - assert {_lookup} is set to fail with "entity is set without a valid uuid" - - # because this player is not online, should fail - set {_lookup} to player from ("a0789aeb-7b46-43f6-86fb-cb671fed5775" parsed as uuid) - assert {_lookup} is "Burbulinis" to fail with "player is set without being online" - - set {_lookup} to "Njol" parsed as offline player - assert {_lookup} is "Njol" with "failed to look up offline player from name" - - set {_uuid} to uuid of world of test-location - assert {_uuid} is set with "Failed to get world uuid" - - set {_world} to world from {_uuid} - assert {_world} is set with "Failed to get world from uuid" From 2608e78bb6b4036de037b8f64224b6ced5d7716d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Sun, 2 Mar 2025 04:42:13 +0100 Subject: [PATCH 09/27] Revert "Parsing stack (#5277) (#7534)" This reverts commit 56d6871cb36d916de419c499bab1d8d60616b971. --- .../ch/njol/skript/lang/SkriptParser.java | 18 +- .../parser/ParseStackOverflowException.java | 32 --- .../skript/lang/parser/ParserInstance.java | 27 +-- .../njol/skript/lang/parser/ParsingStack.java | 192 ------------------ 4 files changed, 11 insertions(+), 258 deletions(-) delete mode 100644 src/main/java/ch/njol/skript/lang/parser/ParseStackOverflowException.java delete mode 100644 src/main/java/ch/njol/skript/lang/parser/ParsingStack.java diff --git a/src/main/java/ch/njol/skript/lang/SkriptParser.java b/src/main/java/ch/njol/skript/lang/SkriptParser.java index e3460b950de..a6eb399dfc8 100644 --- a/src/main/java/ch/njol/skript/lang/SkriptParser.java +++ b/src/main/java/ch/njol/skript/lang/SkriptParser.java @@ -12,9 +12,7 @@ import ch.njol.skript.lang.function.ExprFunctionCall; import ch.njol.skript.lang.function.FunctionReference; import ch.njol.skript.lang.function.Functions; -import ch.njol.skript.lang.parser.ParseStackOverflowException; import ch.njol.skript.lang.parser.ParserInstance; -import ch.njol.skript.lang.parser.ParsingStack; import ch.njol.skript.lang.util.SimpleLiteral; import ch.njol.skript.localization.Language; import ch.njol.skript.localization.Message; @@ -185,7 +183,6 @@ public boolean hasTag(String tag) { } private @Nullable T parse(Iterator> source) { - ParsingStack parsingStack = getParser().getParsingStack(); try (ParseLogHandler log = SkriptLogger.startParseLogHandler()) { while (source.hasNext()) { SyntaxElementInfo info = source.next(); @@ -196,24 +193,15 @@ public boolean hasTag(String tag) { assert pattern != null; ParseResult parseResult; try { - parsingStack.push(new ParsingStack.Element(info, patternIndex)); parseResult = parse_i(pattern); } catch (MalformedPatternException e) { String message = "pattern compiling exception, element class: " + info.getElementClass().getName(); try { JavaPlugin providingPlugin = JavaPlugin.getProvidingPlugin(info.getElementClass()); message += " (provided by " + providingPlugin.getName() + ")"; - } catch (IllegalArgumentException | IllegalStateException ignored) { } - + } catch (IllegalArgumentException | IllegalStateException ignored) {} throw new RuntimeException(message, e); - } catch (StackOverflowError e) { - // Parsing caused a stack overflow, possibly due to too long lines - throw new ParseStackOverflowException(e, new ParsingStack(parsingStack)); - } finally { - // Recursive parsing call done, pop the element from the parsing stack - ParsingStack.Element stackElement = parsingStack.pop(); - - assert stackElement.syntaxElementInfo() == info && stackElement.patternIndex() == patternIndex; + } if (parseResult != null) { assert parseResult.source != null; // parse results from parse_i have a source @@ -261,8 +249,6 @@ public boolean hasTag(String tag) { } } } - - // No successful syntax elements parsed, print errors and return log.printError(); return null; } diff --git a/src/main/java/ch/njol/skript/lang/parser/ParseStackOverflowException.java b/src/main/java/ch/njol/skript/lang/parser/ParseStackOverflowException.java deleted file mode 100644 index 5ce8c0631ca..00000000000 --- a/src/main/java/ch/njol/skript/lang/parser/ParseStackOverflowException.java +++ /dev/null @@ -1,32 +0,0 @@ -package ch.njol.skript.lang.parser; - -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; - -/** - * An exception noting that a {@link StackOverflowError} has occurred - * during Skript parsing. Contains information about the {@link ParsingStack} - * from when the stack overflow occurred. - */ -public class ParseStackOverflowException extends RuntimeException { - - protected final ParsingStack parsingStack; - - public ParseStackOverflowException(StackOverflowError cause, ParsingStack parsingStack) { - super(createMessage(parsingStack), cause); - this.parsingStack = parsingStack; - } - - /** - * Creates the exception message from the given {@link ParsingStack}. - */ - private static String createMessage(ParsingStack stack) { - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - - PrintStream printStream = new PrintStream(stream); - stack.print(printStream); - - return stream.toString(); - } - -} diff --git a/src/main/java/ch/njol/skript/lang/parser/ParserInstance.java b/src/main/java/ch/njol/skript/lang/parser/ParserInstance.java index 71085291b54..a490875d13d 100644 --- a/src/main/java/ch/njol/skript/lang/parser/ParserInstance.java +++ b/src/main/java/ch/njol/skript/lang/parser/ParserInstance.java @@ -25,7 +25,11 @@ import org.skriptlang.skript.lang.structure.Structure; import java.io.File; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.function.Function; public final class ParserInstance implements Experimented { @@ -457,19 +461,6 @@ public String getIndentation() { return indentation; } - // Parsing stack - - private final ParsingStack parsingStack = new ParsingStack(); - - /** - * Gets the current parsing stack. - *

- * Although the stack can be modified, doing so is not recommended. - */ - public ParsingStack getParsingStack() { - return parsingStack; - } - // Experiments API @Override @@ -714,8 +705,8 @@ public HashMap getCurrentOptions() { @Deprecated public @Nullable SkriptEvent getCurrentSkriptEvent() { Structure structure = getCurrentStructure(); - if (structure instanceof SkriptEvent event) - return event; + if (structure instanceof SkriptEvent) + return (SkriptEvent) structure; return null; } @@ -724,7 +715,7 @@ public HashMap getCurrentOptions() { */ @Deprecated public void setCurrentSkriptEvent(@Nullable SkriptEvent currentSkriptEvent) { - this.setCurrentStructure(currentSkriptEvent); + setCurrentStructure(currentSkriptEvent); } /** @@ -732,7 +723,7 @@ public void setCurrentSkriptEvent(@Nullable SkriptEvent currentSkriptEvent) { */ @Deprecated public void deleteCurrentSkriptEvent() { - this.setCurrentStructure(null); + setCurrentStructure(null); } /** diff --git a/src/main/java/ch/njol/skript/lang/parser/ParsingStack.java b/src/main/java/ch/njol/skript/lang/parser/ParsingStack.java deleted file mode 100644 index aeaa0ae0314..00000000000 --- a/src/main/java/ch/njol/skript/lang/parser/ParsingStack.java +++ /dev/null @@ -1,192 +0,0 @@ -package ch.njol.skript.lang.parser; - -import ch.njol.skript.lang.Expression; -import ch.njol.skript.lang.SkriptParser; -import ch.njol.skript.lang.SyntaxElement; -import ch.njol.skript.lang.SyntaxElementInfo; -import ch.njol.util.Kleenean; - -import java.io.PrintStream; -import java.util.Collections; -import java.util.Iterator; -import java.util.LinkedList; - -/** - * A stack that keeps track of what Skript is currently parsing. - *

- * When accessing the stack from within - * {@link SyntaxElement#init(Expression[], int, Kleenean, SkriptParser.ParseResult)}, - * the stack element corresponding to that {@link SyntaxElement} is not - * on the parsing stack. - */ -public class ParsingStack implements Iterable { - - private final LinkedList stack; - - /** - * Creates an empty parsing stack. - */ - public ParsingStack() { - this.stack = new LinkedList<>(); - } - - /** - * Creates a parsing stack containing all elements - * of another given parsing stack. - */ - public ParsingStack(ParsingStack parsingStack) { - this.stack = new LinkedList<>(parsingStack.stack); - } - - /** - * Removes and returns the top element of this stack. - * - * @throws IllegalStateException if the stack is empty. - */ - public Element pop() throws IllegalStateException { - if (stack.isEmpty()) { - throw new IllegalStateException("Stack is empty"); - } - - return stack.pop(); - } - - /** - * Returns the element at the given index in the stack, - * starting with the top element at index 0. - * - * @param index the index in stack. - * @throws IndexOutOfBoundsException if the index is not appointed - * to an element in the stack. - */ - public Element peek(int index) throws IndexOutOfBoundsException { - if (index < 0 || index >= size()) { - throw new IndexOutOfBoundsException("Index: " + index); - } - - return stack.get(index); - } - - /** - * Returns the top element of the stack. - * Equivalent to {@code peek(0)}. - * - * @throws IllegalStateException if the stack is empty. - */ - public Element peek() throws IllegalStateException { - if (stack.isEmpty()) { - throw new IllegalStateException("Stack is empty"); - } - - return stack.peek(); - } - - /** - * Adds the given element to the top of the stack. - */ - public void push(Element element) { - stack.push(element); - } - - /** - * Check if this stack is empty. - */ - public boolean isEmpty() { - return stack.isEmpty(); - } - - /** - * Gets the size of the stack. - */ - public int size() { - return stack.size(); - } - - /** - * Prints this stack to the given {@link PrintStream}. - * - * @param printStream a {@link PrintStream} to print the stack to. - */ - public void print(PrintStream printStream) { - // Synchronized to assure it'll all be printed at once, - // PrintStream uses synchronization on itself internally, justifying warning suppression - - //noinspection SynchronizationOnLocalVariableOrMethodParameter - synchronized (printStream) { - printStream.println("Stack:"); - - if (stack.isEmpty()) { - printStream.println(""); - } else { - for (Element element : stack) { - printStream.println("\t" + element.getSyntaxElementClass().getName() + - " @ " + element.patternIndex()); - } - } - } - } - - /** - * Iterate over the stack, starting at the top. - */ - @Override - public Iterator iterator() { - return Collections.unmodifiableList(stack).iterator(); - } - - /** - * A stack element, containing details about the syntax element it is about. - */ - public record Element(SyntaxElementInfo syntaxElementInfo, int patternIndex) { - - public Element { - assert patternIndex >= 0 && patternIndex < syntaxElementInfo.getPatterns().length; - } - - /** - * Gets the raw {@link SyntaxElementInfo} of this stack element. - *

- * For ease of use, consider using other getters of this class. - * - * @see #getSyntaxElementClass() - * @see #getPattern() - */ - @Override - public SyntaxElementInfo syntaxElementInfo() { - return syntaxElementInfo; - } - - /** - * Gets the index to the registered patterns for the syntax element - * of this stack element. - */ - @Override - public int patternIndex() { - return patternIndex; - } - - /** - * Gets the syntax element class of this stack element. - */ - public Class getSyntaxElementClass() { - return syntaxElementInfo.getElementClass(); - } - - /** - * Gets the pattern that was matched for this stack element. - */ - public String getPattern() { - return syntaxElementInfo.getPatterns()[patternIndex]; - } - - /** - * Gets all patterns registered with the syntax element - * of this stack element. - */ - public String[] getPatterns() { - return syntaxElementInfo.getPatterns(); - } - - } - -} From 4d61948d5237b670e7cd090d7c980342a894e3f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Sun, 2 Mar 2025 21:29:47 +0100 Subject: [PATCH 10/27] Adds a little documentation to the annotations --- src/main/java/ch/njol/skript/doc/AvailableEvent.java | 11 ++++++++++- src/main/java/ch/njol/skript/doc/AvailableEvents.java | 8 +++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main/java/ch/njol/skript/doc/AvailableEvent.java b/src/main/java/ch/njol/skript/doc/AvailableEvent.java index af77b1f3847..d7e94c0cca4 100644 --- a/src/main/java/ch/njol/skript/doc/AvailableEvent.java +++ b/src/main/java/ch/njol/skript/doc/AvailableEvent.java @@ -4,13 +4,22 @@ import java.lang.annotation.*; +// FIXME Adjust the link if necessary +/** + * Provides a {@link org.bukkit.event.Event} that the syntax element can be used in. + * This annotation can be stacked multiple times + *

+ * This annotation should only include a single event class, for multiple, use {@link ch.njol.skript.doc.AvailableEvents} + */ + @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Repeatable(AvailableEvent.AvailableEvents.class) @Documented +@Events("WOw!") public @interface AvailableEvent { - public Class[] value(); + Class value(); @Target(ElementType.TYPE) diff --git a/src/main/java/ch/njol/skript/doc/AvailableEvents.java b/src/main/java/ch/njol/skript/doc/AvailableEvents.java index a6547e90c0a..5499a589eef 100644 --- a/src/main/java/ch/njol/skript/doc/AvailableEvents.java +++ b/src/main/java/ch/njol/skript/doc/AvailableEvents.java @@ -4,10 +4,16 @@ import java.lang.annotation.*; +/** + * Provides a list of {@link org.bukkit.event.Event} that the syntax element can be used in. + *

+ * This annotation can only be used once per element, for stacking, see {@link AvailableEvent} + */ + @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented -@interface AvailableEvents { +public @interface AvailableEvents { Class[] value(); From 79e4db5b2cfa48440578fb47fe7ab8a43435aa62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Sun, 2 Mar 2025 21:40:25 +0100 Subject: [PATCH 11/27] Correct list annotations --- .../java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java | 2 +- src/main/java/ch/njol/skript/expressions/ExprAttacked.java | 2 +- src/main/java/ch/njol/skript/expressions/ExprAttacker.java | 2 +- .../java/ch/njol/skript/expressions/ExprBeaconValues.java | 2 +- src/main/java/ch/njol/skript/expressions/ExprClicked.java | 2 +- src/main/java/ch/njol/skript/expressions/ExprCommand.java | 4 ++-- .../java/ch/njol/skript/expressions/ExprCommandSender.java | 4 ++-- src/main/java/ch/njol/skript/expressions/ExprDamage.java | 2 +- src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java | 2 +- src/main/java/ch/njol/skript/expressions/ExprExperience.java | 2 +- src/main/java/ch/njol/skript/expressions/ExprMessage.java | 2 +- 11 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java index b40150a98d2..da4a9c104ee 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java @@ -20,7 +20,7 @@ @Name("Absorbed blocks") @Description("The blocks absorbed by a sponge block.") -@AvailableEvent(SpongeAbsorbEvent.class) +@AvailableEvents(SpongeAbsorbEvent.class) @Events("sponge absorb") @Examples("the absorbed blocks") @Since("2.5") diff --git a/src/main/java/ch/njol/skript/expressions/ExprAttacked.java b/src/main/java/ch/njol/skript/expressions/ExprAttacked.java index 0add916f52e..bfab3e80087 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAttacked.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAttacked.java @@ -33,7 +33,7 @@ "\tvictim is a creeper", "\tdamage the attacked by 1 heart"}) @Since("1.3, 2.6.1 (projectile hit event)") -@AvailableEvent({EntityDamageEvent.class, EntityDeathEvent.class, +@AvailableEvents({EntityDamageEvent.class, EntityDeathEvent.class, VehicleDamageEvent.class, VehicleDestroyEvent.class}) @Events({"damage", "death", "projectile hit"}) public class ExprAttacked extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprAttacker.java b/src/main/java/ch/njol/skript/expressions/ExprAttacker.java index bb51fcc01d7..d3a47c256d2 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAttacker.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAttacker.java @@ -32,7 +32,7 @@ " health of attacker is less than or equal to 2", " damage victim by 1 heart"}) @Since("1.3") -@AvailableEvent({EntityDamageEvent.class, EntityDeathEvent.class, +@AvailableEvents({EntityDamageEvent.class, EntityDeathEvent.class, VehicleDamageEvent.class, VehicleDestroyEvent.class}) @Events({"damage", "death", "destroy"}) public class ExprAttacker extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprBeaconValues.java b/src/main/java/ch/njol/skript/expressions/ExprBeaconValues.java index 541dcd44e50..07c9e09b0ae 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBeaconValues.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBeaconValues.java @@ -37,7 +37,7 @@ "add 1 to range of {_block}" }) @RequiredPlugins("Paper (range)") -@AvailableEvent({PlayerChangeBeaconEffectEvent.class, BeaconEffectEvent.class, BeaconActivatedEvent.class, BeaconDeactivatedEvent.class}) +@AvailableEvents({PlayerChangeBeaconEffectEvent.class, BeaconEffectEvent.class, BeaconActivatedEvent.class, BeaconDeactivatedEvent.class}) @Events({"Beacon Effect", "Beacon Toggle", "Beacon Change Effect"}) @Since("2.10") public class ExprBeaconValues extends PropertyExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprClicked.java b/src/main/java/ch/njol/skript/expressions/ExprClicked.java index d84e7a38df1..1cd5d5e680b 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprClicked.java +++ b/src/main/java/ch/njol/skript/expressions/ExprClicked.java @@ -37,7 +37,7 @@ "\tshow the inventory of the clicked block to the player" }) @Since("1.0, 2.2-dev35 (more clickable things)") -@AvailableEvent({PlayerInteractEntityEvent.class, PlayerInteractAtEntityEvent.class, InventoryClickEvent.class, EnchantItemEvent.class, PlayerInteractEvent.class}) +@AvailableEvents({PlayerInteractEntityEvent.class, PlayerInteractAtEntityEvent.class, InventoryClickEvent.class, EnchantItemEvent.class, PlayerInteractEvent.class}) @Events({"click", "inventory click"}) public class ExprClicked extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprCommand.java b/src/main/java/ch/njol/skript/expressions/ExprCommand.java index 28b62e6c83d..3864b535a70 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprCommand.java +++ b/src/main/java/ch/njol/skript/expressions/ExprCommand.java @@ -29,9 +29,9 @@ "\t\t\tmessage \"You're not allowed to use commands during the game\"", "\t\t\tcancel the event"}) @Since("2.0, 2.7 (support for script commands)") -// TODO REMOVE +// FIXME // Should this use CommandEvent or ScriptCommandEvent? -@AvailableEvent({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, CommandEvent.class}) +@AvailableEvents({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, CommandEvent.class}) @Events("command") public class ExprCommand extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java b/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java index 11e63f78f9a..b74515c7219 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java +++ b/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java @@ -20,9 +20,9 @@ "\tlog \"%executor% used command /%command% %arguments%\" to \"commands.log\"" }) @Since("2.0") -// TODO REMOVE +// FIXME // Should this use CommandEvent or ScriptCommandEvent? -@AvailableEvent({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, CommandEvent.class}) +@AvailableEvents({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, CommandEvent.class}) @Events("command") public class ExprCommandSender extends EventValueExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprDamage.java b/src/main/java/ch/njol/skript/expressions/ExprDamage.java index cc32843eb39..54e185183f4 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprDamage.java +++ b/src/main/java/ch/njol/skript/expressions/ExprDamage.java @@ -31,7 +31,7 @@ "\tincrease the damage by 2" }) @Since("1.3.5, 2.8.0 (item damage event)") -@AvailableEvent({EntityDamageEvent.class, VehicleDamageEvent.class, PlayerItemDamageEvent.class}) +@AvailableEvents({EntityDamageEvent.class, VehicleDamageEvent.class, PlayerItemDamageEvent.class}) @Events({"Damage", "Vehicle Damage", "Item Damage"}) public class ExprDamage extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java index cffc9f3dc37..526c252bdea 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantItem.java @@ -24,7 +24,7 @@ "\tset the enchanted item to a diamond chestplate", "on enchant prepare:", "\tset the enchant item to a wooden sword"}) -@AvailableEvent({EnchantItemEvent.class, PrepareItemEnchantEvent.class}) +@AvailableEvents({EnchantItemEvent.class, PrepareItemEnchantEvent.class}) @Events({"enchant prepare", "enchant"}) @Since("2.5") public class ExprEnchantItem extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprExperience.java b/src/main/java/ch/njol/skript/expressions/ExprExperience.java index 7c4344045c6..d780d99cd5d 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExperience.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExperience.java @@ -39,7 +39,7 @@ "\tadd 70 to dropped experience", }) @Since("2.1, 2.5.3 (block break event), 2.7 (experience change event), 2.10 (breeding, fishing)") -@AvailableEvent({ExperienceSpawnEvent.class, BlockBreakEvent.class, +@AvailableEvents({ExperienceSpawnEvent.class, BlockBreakEvent.class, PlayerExpChangeEvent.class, EntityBreedEvent.class, PlayerFishEvent.class}) @Events({"experience spawn", "break / mine", "experience change", "entity breeding"}) public class ExprExperience extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprMessage.java b/src/main/java/ch/njol/skript/expressions/ExprMessage.java index 9f932d363e3..2f929780945 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprMessage.java +++ b/src/main/java/ch/njol/skript/expressions/ExprMessage.java @@ -51,7 +51,7 @@ "on broadcast:", "\tset broadcast message to \"&a[BROADCAST] %broadcast message%\"" }) -@AvailableEvent({AsyncPlayerChatEvent.class, PlayerJoinEvent.class, PlayerQuitEvent.class, PlayerKickEvent.class, EntityDeathEvent.class, BroadcastMessageEvent.class}) +@AvailableEvents({AsyncPlayerChatEvent.class, PlayerJoinEvent.class, PlayerQuitEvent.class, PlayerKickEvent.class, EntityDeathEvent.class, BroadcastMessageEvent.class}) @Events({"chat", "join", "quit", "death", "broadcast"}) @Since("1.4.6 (chat message), 1.4.9 (join & quit messages), 2.0 (death message), 2.9.0 (clear message), 2.10 (broadcasted message)") public class ExprMessage extends SimpleExpression { From cb92666adc074f10e54ad796ada841b306ef639f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Sun, 2 Mar 2025 21:40:38 +0100 Subject: [PATCH 12/27] Fixing a fix --- src/main/java/ch/njol/skript/doc/JSONGenerator.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java index a2e8e0e8b96..583bf6ec55c 100644 --- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java +++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java @@ -132,13 +132,11 @@ private static JsonObject generatedAnnotatedElement(SyntaxElementInfo syntaxI @NotNull AvailableEvent.AvailableEvents availableEventsAnnotation = syntaxClass.getAnnotation(AvailableEvent.AvailableEvents.class); syntaxJsonObject.add("availableEvents", convertToJsonArray(Arrays.stream(availableEventsAnnotation.value()) .map(AvailableEvent::value) - .flatMap(Stream::of) .map(Class::getSimpleName) .toArray(String[]::new))); } else if (syntaxClass.isAnnotationPresent(Example.class)) { @NotNull AvailableEvent availableEvent = syntaxClass.getAnnotation(AvailableEvent.class); - syntaxJsonObject.add("availableEvents", convertToJsonArray(Arrays.stream(availableEvent.value()) - .map(Class::getSimpleName).toArray(String[]::new))); + syntaxJsonObject.add("availableEvents", convertToJsonArray(availableEvent.value().getSimpleName())); } else { syntaxJsonObject.add("availableEvents", null); } From 7ae9fe11c80d2a275b9efedf42dc3397f7784a31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Sun, 2 Mar 2025 21:40:55 +0100 Subject: [PATCH 13/27] Deprecate Events --- src/main/java/ch/njol/skript/doc/Events.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/ch/njol/skript/doc/Events.java b/src/main/java/ch/njol/skript/doc/Events.java index 592cdc1bb82..8cedd04a74d 100644 --- a/src/main/java/ch/njol/skript/doc/Events.java +++ b/src/main/java/ch/njol/skript/doc/Events.java @@ -11,10 +11,15 @@ /** * @author Peter Güttinger + * + * @deprecated + * This annotation is deprecated, please use {@link AvailableEvent} or {@link AvailableEvents} instead + * */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented +@Deprecated(since = "INSERT VERSION") public @interface Events { /** * A list of {@link SkriptEventInfo#getName() name(s)} of {@link SkriptEvent events} this expression is useful for. From 81d2c4772209a6534c2b7b5a6fa4dcb017e1c437 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Mon, 3 Mar 2025 12:44:03 -0500 Subject: [PATCH 14/27] Revert stackable AvailableEvent change Revert "More changes" This reverts commit d4f3564e Revert "Correct list annotations" This reverts commit 79e4db5b2cfa48440578fb47fe7ab8a43435aa62. Revert "Fixing a fix" This reverts commit cb92666adc074f10e54ad796ada841b306ef639f. --- .../ch/njol/skript/doc/AvailableEvent.java | 34 ------------------- .../ch/njol/skript/doc/AvailableEvents.java | 2 -- .../ch/njol/skript/doc/JSONGenerator.java | 21 ++---------- .../skript/expressions/ExprAppliedEffect.java | 2 +- .../expressions/ExprAppliedEnchantments.java | 2 +- .../njol/skript/expressions/ExprAttacked.java | 2 +- .../njol/skript/expressions/ExprAttacker.java | 1 + .../njol/skript/expressions/ExprCommand.java | 2 +- .../skript/expressions/ExprCommandSender.java | 3 +- .../njol/skript/expressions/ExprDamage.java | 1 + .../ch/njol/skript/expressions/ExprEgg.java | 2 +- .../expressions/ExprEnchantingExpCost.java | 2 +- .../expressions/ExprEnchantmentBonus.java | 2 +- .../expressions/ExprEnchantmentOffer.java | 2 +- .../skript/expressions/ExprEvtInitiator.java | 2 +- .../skript/expressions/ExprExperience.java | 3 ++ .../expressions/ExprExplodedBlocks.java | 2 +- .../expressions/ExprExplosionBlockYield.java | 2 +- .../expressions/ExprExplosionYield.java | 3 +- .../expressions/ExprFertilizedBlocks.java | 2 +- .../skript/expressions/ExprFinalDamage.java | 2 +- .../expressions/ExprHatchingNumber.java | 2 +- .../skript/expressions/ExprHatchingType.java | 2 +- .../skript/expressions/ExprHealAmount.java | 2 +- .../skript/expressions/ExprHealReason.java | 3 +- .../njol/skript/expressions/ExprHealth.java | 2 +- .../skript/expressions/ExprHoverList.java | 2 +- .../expressions/ExprInventoryCloseReason.java | 2 +- .../ch/njol/skript/expressions/ExprLevel.java | 2 +- .../skript/expressions/ExprLevelProgress.java | 2 +- .../ch/njol/skript/expressions/ExprMe.java | 2 +- .../expressions/ExprProtocolVersion.java | 2 +- .../skript/expressions/ExprReadiedArrow.java | 2 +- .../skript/expressions/ExprSentCommands.java | 3 +- .../skript/expressions/ExprVersionString.java | 2 +- 35 files changed, 41 insertions(+), 83 deletions(-) delete mode 100644 src/main/java/ch/njol/skript/doc/AvailableEvent.java diff --git a/src/main/java/ch/njol/skript/doc/AvailableEvent.java b/src/main/java/ch/njol/skript/doc/AvailableEvent.java deleted file mode 100644 index d7e94c0cca4..00000000000 --- a/src/main/java/ch/njol/skript/doc/AvailableEvent.java +++ /dev/null @@ -1,34 +0,0 @@ -package ch.njol.skript.doc; - -import org.bukkit.event.Event; - -import java.lang.annotation.*; - -// FIXME Adjust the link if necessary -/** - * Provides a {@link org.bukkit.event.Event} that the syntax element can be used in. - * This annotation can be stacked multiple times - *

- * This annotation should only include a single event class, for multiple, use {@link ch.njol.skript.doc.AvailableEvents} - */ - -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -@Repeatable(AvailableEvent.AvailableEvents.class) -@Documented -@Events("WOw!") -public @interface AvailableEvent { - - Class value(); - - - @Target(ElementType.TYPE) - @Retention(RetentionPolicy.RUNTIME) - @Documented - @interface AvailableEvents { - - AvailableEvent[] value(); - - } - -} diff --git a/src/main/java/ch/njol/skript/doc/AvailableEvents.java b/src/main/java/ch/njol/skript/doc/AvailableEvents.java index 5499a589eef..ebeb13abacd 100644 --- a/src/main/java/ch/njol/skript/doc/AvailableEvents.java +++ b/src/main/java/ch/njol/skript/doc/AvailableEvents.java @@ -6,8 +6,6 @@ /** * Provides a list of {@link org.bukkit.event.Event} that the syntax element can be used in. - *

- * This annotation can only be used once per element, for stacking, see {@link AvailableEvent} */ @Target(ElementType.TYPE) diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java index 583bf6ec55c..6d7523ad70b 100644 --- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java +++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java @@ -117,30 +117,15 @@ private static JsonObject generatedAnnotatedElement(SyntaxElementInfo syntaxI syntaxJsonObject.add("examples", null); } + AvailableEvents availableEvents = syntaxClass.getAnnotation(AvailableEvents.class); + syntaxJsonObject.add("availableEvents", availableEvents == null ? null : convertToJsonArray(Arrays.stream(availableEvents.value()).map(Class::getSimpleName).toArray(String[]::new))); + Events events = syntaxClass.getAnnotation(Events.class); syntaxJsonObject.add("events", events == null ? null : convertToJsonArray(events.value())); RequiredPlugins requirements = syntaxClass.getAnnotation(RequiredPlugins.class); syntaxJsonObject.add("requirements", requirements == null ? null : convertToJsonArray(requirements.value())); - - if (syntaxClass.isAnnotationPresent(AvailableEvents.class)) { - @NotNull AvailableEvents availableEventsAnnotation = syntaxClass.getAnnotation(AvailableEvents.class); - syntaxJsonObject.add("availableEvents", convertToJsonArray(Arrays.stream(availableEventsAnnotation.value()) - .map(Class::getSimpleName).toArray(String[]::new))); - } else if (syntaxClass.isAnnotationPresent(AvailableEvent.AvailableEvents.class)) { - @NotNull AvailableEvent.AvailableEvents availableEventsAnnotation = syntaxClass.getAnnotation(AvailableEvent.AvailableEvents.class); - syntaxJsonObject.add("availableEvents", convertToJsonArray(Arrays.stream(availableEventsAnnotation.value()) - .map(AvailableEvent::value) - .map(Class::getSimpleName) - .toArray(String[]::new))); - } else if (syntaxClass.isAnnotationPresent(Example.class)) { - @NotNull AvailableEvent availableEvent = syntaxClass.getAnnotation(AvailableEvent.class); - syntaxJsonObject.add("availableEvents", convertToJsonArray(availableEvent.value().getSimpleName())); - } else { - syntaxJsonObject.add("availableEvents", null); - } - Keywords keywords = syntaxClass.getAnnotation(Keywords.class); syntaxJsonObject.add("keywords", keywords == null ? null : convertToJsonArray(keywords.value())); diff --git a/src/main/java/ch/njol/skript/expressions/ExprAppliedEffect.java b/src/main/java/ch/njol/skript/expressions/ExprAppliedEffect.java index 56f3cd9ca6a..80c191cec21 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAppliedEffect.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAppliedEffect.java @@ -21,7 +21,7 @@ "\telse if applied effect = secondary effect:", "\t\tbroadcast \"Is Secondary\"" }) -@AvailableEvent(BeaconEffectEvent.class) +@AvailableEvents(BeaconEffectEvent.class) @Events("Beacon Effect") @RequiredPlugins("Paper") @Since("2.10") diff --git a/src/main/java/ch/njol/skript/expressions/ExprAppliedEnchantments.java b/src/main/java/ch/njol/skript/expressions/ExprAppliedEnchantments.java index 0a54bed721a..0632fe39c41 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAppliedEnchantments.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAppliedEnchantments.java @@ -22,7 +22,7 @@ " Deleting or removing the applied enchantments will prevent the item's enchantment."}) @Examples({"on enchant:", "\tset the applied enchantments to sharpness 10 and fire aspect 5"}) -@AvailableEvent(EnchantItemEvent.class) +@AvailableEvents(EnchantItemEvent.class) @Events("enchant") @Since("2.5") public class ExprAppliedEnchantments extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprAttacked.java b/src/main/java/ch/njol/skript/expressions/ExprAttacked.java index bfab3e80087..b090100aaaf 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAttacked.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAttacked.java @@ -34,7 +34,7 @@ "\tdamage the attacked by 1 heart"}) @Since("1.3, 2.6.1 (projectile hit event)") @AvailableEvents({EntityDamageEvent.class, EntityDeathEvent.class, - VehicleDamageEvent.class, VehicleDestroyEvent.class}) + VehicleDamageEvent.class, VehicleDestroyEvent.class, ProjectileHitEvent.class}) @Events({"damage", "death", "projectile hit"}) public class ExprAttacked extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprAttacker.java b/src/main/java/ch/njol/skript/expressions/ExprAttacker.java index d3a47c256d2..a5fe99dcbed 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAttacker.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAttacker.java @@ -18,6 +18,7 @@ import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; +import ch.njol.skript.log.ErrorQuality; import ch.njol.skript.registrations.Classes; import ch.njol.util.Kleenean; diff --git a/src/main/java/ch/njol/skript/expressions/ExprCommand.java b/src/main/java/ch/njol/skript/expressions/ExprCommand.java index 3864b535a70..e1208fe1207 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprCommand.java +++ b/src/main/java/ch/njol/skript/expressions/ExprCommand.java @@ -29,7 +29,7 @@ "\t\t\tmessage \"You're not allowed to use commands during the game\"", "\t\t\tcancel the event"}) @Since("2.0, 2.7 (support for script commands)") -// FIXME +// TODO REMOVE // Should this use CommandEvent or ScriptCommandEvent? @AvailableEvents({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, CommandEvent.class}) @Events("command") diff --git a/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java b/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java index b74515c7219..78c4a59337c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java +++ b/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java @@ -1,6 +1,7 @@ package ch.njol.skript.expressions; import ch.njol.skript.command.CommandEvent; +import ch.njol.skript.command.ScriptCommandEvent; import ch.njol.skript.doc.*; import org.bukkit.command.CommandSender; @@ -20,7 +21,7 @@ "\tlog \"%executor% used command /%command% %arguments%\" to \"commands.log\"" }) @Since("2.0") -// FIXME +// TODO REMOVE // Should this use CommandEvent or ScriptCommandEvent? @AvailableEvents({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, CommandEvent.class}) @Events("command") diff --git a/src/main/java/ch/njol/skript/expressions/ExprDamage.java b/src/main/java/ch/njol/skript/expressions/ExprDamage.java index 54e185183f4..b71820f46f7 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprDamage.java +++ b/src/main/java/ch/njol/skript/expressions/ExprDamage.java @@ -14,6 +14,7 @@ import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; +import ch.njol.skript.log.ErrorQuality; import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; diff --git a/src/main/java/ch/njol/skript/expressions/ExprEgg.java b/src/main/java/ch/njol/skript/expressions/ExprEgg.java index 4a636f9252c..67e66f07d58 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEgg.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEgg.java @@ -11,7 +11,7 @@ @Name("The Egg") @Description("The egg thrown in a Player Egg Throw event.") @Examples("spawn an egg at the egg") -@AvailableEvent(PlayerEggThrowEvent.class) +@AvailableEvents(PlayerEggThrowEvent.class) @Events("Egg Throw") @Since("2.7") public class ExprEgg extends EventValueExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantingExpCost.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantingExpCost.java index 7de5774bf3d..d37764d09fe 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantingExpCost.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantingExpCost.java @@ -21,7 +21,7 @@ "This is number that was displayed in the enchantment table, not the actual number of levels removed."}) @Examples({"on enchant:", "\tsend \"Cost: %the displayed enchanting cost%\" to player"}) -@AvailableEvent(EnchantItemEvent.class) +@AvailableEvents(EnchantItemEvent.class) @Events("enchant") @Since("2.5") public class ExprEnchantingExpCost extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentBonus.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentBonus.java index df712c2bceb..6792194b6da 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentBonus.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentBonus.java @@ -17,7 +17,7 @@ @Description("The enchantment bonus in an enchant prepare event. This represents the number of bookshelves affecting/surrounding the enchantment table.") @Examples({"on enchant:", "\tsend \"There are %enchantment bonus% bookshelves surrounding this enchantment table!\" to player"}) -@AvailableEvent(PrepareItemEnchantEvent.class) +@AvailableEvents(PrepareItemEnchantEvent.class) @Events("enchant prepare") @Since("2.5") public class ExprEnchantmentBonus extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java index 793b649d5e6..533f1a49ee9 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java @@ -27,7 +27,7 @@ @Examples({"on enchant prepare:", "\tsend \"Your enchantment offers are: %the enchantment offers%\" to player"}) @Since("2.5") -@AvailableEvent(PrepareItemEnchantEvent.class) +@AvailableEvents(PrepareItemEnchantEvent.class) @Events("enchant prepare") @RequiredPlugins("1.11 or newer") public class ExprEnchantmentOffer extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEvtInitiator.java b/src/main/java/ch/njol/skript/expressions/ExprEvtInitiator.java index 3b4c0e253c7..3172d81f282 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEvtInitiator.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEvtInitiator.java @@ -20,7 +20,7 @@ "\tholder of event-initiator-inventory is a chest", "\tbroadcast \"Item transport happening at %location at holder of event-initiator-inventory%!\"" }) -@AvailableEvent(InventoryMoveItemEvent.class) +@AvailableEvents(InventoryMoveItemEvent.class) @Events("Inventory Item Move") @Since("2.8.0") public class ExprEvtInitiator extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprExperience.java b/src/main/java/ch/njol/skript/expressions/ExprExperience.java index d780d99cd5d..fffbe78e2d5 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExperience.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExperience.java @@ -15,7 +15,10 @@ import org.bukkit.event.player.PlayerExpChangeEvent; import org.bukkit.event.player.PlayerFishEvent; import ch.njol.util.coll.CollectionUtils; +import org.bukkit.event.Event; +import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.entity.EntityBreedEvent; +import org.bukkit.event.player.PlayerExpChangeEvent; import org.jetbrains.annotations.Nullable; @Name("Experience") diff --git a/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java index c13e2f9321b..c5275bbce55 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java @@ -38,7 +38,7 @@ "", "on explode:", "\tadd blocks above event-entity to exploded blocks"}) -@AvailableEvent(EntityExplodeEvent.class) +@AvailableEvents(EntityExplodeEvent.class) @Events("explode") @Since("2.5, 2.8.6 (modify blocks)") public class ExprExplodedBlocks extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprExplosionBlockYield.java b/src/main/java/ch/njol/skript/expressions/ExprExplosionBlockYield.java index 3f7506845cb..ac4234b0165 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExplosionBlockYield.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExplosionBlockYield.java @@ -21,7 +21,7 @@ "Attempting to change the yield to a value less than 0 will have no effect."}) @Examples({"on explode:", "set the explosion's block yield to 10%"}) -@AvailableEvent(EntityExplodeEvent.class) +@AvailableEvents(EntityExplodeEvent.class) @Events("explosion") @Since("2.5") public class ExprExplosionBlockYield extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprExplosionYield.java b/src/main/java/ch/njol/skript/expressions/ExprExplosionYield.java index 6199258d619..3fbf5847517 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExplosionYield.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExplosionYield.java @@ -3,6 +3,7 @@ import ch.njol.skript.doc.*; import org.bukkit.event.Event; import org.bukkit.event.entity.ExplosionPrimeEvent; +import org.checkerframework.checker.units.qual.A; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; @@ -21,7 +22,7 @@ " Read this wiki page for more information"}) @Examples({"on explosion prime:", "\tset the yield of the explosion to 10"}) -@AvailableEvent(ExplosionPrimeEvent.class) +@AvailableEvents(ExplosionPrimeEvent.class) @Events("explosion prime") @Since("2.5") public class ExprExplosionYield extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprFertilizedBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprFertilizedBlocks.java index f3f548f4901..35ac3a56e0d 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprFertilizedBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprFertilizedBlocks.java @@ -19,7 +19,7 @@ @Name("Fertilized Blocks") @Description("The blocks fertilized in block fertilize events.") @RequiredPlugins("Minecraft 1.13 or newer") -@AvailableEvent(BlockFertilizeEvent.class) +@AvailableEvents(BlockFertilizeEvent.class) @Events("block fertilize") @Examples("the fertilized blocks") @Since("2.5") diff --git a/src/main/java/ch/njol/skript/expressions/ExprFinalDamage.java b/src/main/java/ch/njol/skript/expressions/ExprFinalDamage.java index 93381419a84..fc2f4b196c8 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprFinalDamage.java +++ b/src/main/java/ch/njol/skript/expressions/ExprFinalDamage.java @@ -18,7 +18,7 @@ @Name("Final Damage") @Description("How much damage is done in a damage event, considering all types of damage reduction. Can NOT be changed.") @Examples({"send \"%final damage%\" to victim"}) -@AvailableEvent(EntityDamageEvent.class) +@AvailableEvents(EntityDamageEvent.class) @Events("damage") @Since("2.2-dev19") public class ExprFinalDamage extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHatchingNumber.java b/src/main/java/ch/njol/skript/expressions/ExprHatchingNumber.java index c7a10a550bc..1f15142545d 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHatchingNumber.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHatchingNumber.java @@ -22,7 +22,7 @@ "on player egg throw:", "\tset the hatching number to 10" }) -@AvailableEvent(PlayerEggThrowEvent.class) +@AvailableEvents(PlayerEggThrowEvent.class) @Events("Egg Throw") @Since("2.7") public class ExprHatchingNumber extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHatchingType.java b/src/main/java/ch/njol/skript/expressions/ExprHatchingType.java index c226867701e..7517c72d8cf 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHatchingType.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHatchingType.java @@ -22,7 +22,7 @@ "on player egg throw:", "\tset the hatching entity type to a primed tnt" }) -@AvailableEvent(PlayerEggThrowEvent.class) +@AvailableEvents(PlayerEggThrowEvent.class) @Events("Egg Throw") @Since("2.7") public class ExprHatchingType extends SimpleExpression> { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHealAmount.java b/src/main/java/ch/njol/skript/expressions/ExprHealAmount.java index d627ab371d0..a4f411281fb 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHealAmount.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHealAmount.java @@ -23,7 +23,7 @@ "\tincrease the heal amount by 2", "\tremove 0.5 from the healing amount" }) -@AvailableEvent(EntityRegainHealthEvent.class) +@AvailableEvents(EntityRegainHealthEvent.class) @Events("heal") @Since("2.5.1") public class ExprHealAmount extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHealReason.java b/src/main/java/ch/njol/skript/expressions/ExprHealReason.java index f49ed990d31..009e1e901e2 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHealReason.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHealReason.java @@ -6,6 +6,7 @@ import org.bukkit.event.entity.EntityRegainHealthEvent; import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; +import org.checkerframework.checker.units.qual.A; @Name("Heal Reason") @Description("The heal reason of a heal event.") @@ -14,7 +15,7 @@ "\theal reason is satiated", "\tsend \"You ate enough food and gained full health back!\"" }) -@AvailableEvent(EntityRegainHealthEvent.class) +@AvailableEvents(EntityRegainHealthEvent.class) @Events("heal") @Since("2.5") public class ExprHealReason extends EventValueExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHealth.java b/src/main/java/ch/njol/skript/expressions/ExprHealth.java index c8a5df1ff80..4f9ac17a11e 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHealth.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHealth.java @@ -20,7 +20,7 @@ @Description("The health of a creature, e.g. a player, mob, villager, etc. The minimum value is 0, and the maximum is the creature's max health (e.g. 10 for players).") @Examples({"message \"You have %health% HP left.\""}) @Since("1.0") -@AvailableEvent(EntityDamageEvent.class) +@AvailableEvents(EntityDamageEvent.class) @Events("damage") public class ExprHealth extends PropertyExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprHoverList.java b/src/main/java/ch/njol/skript/expressions/ExprHoverList.java index 6c77e1dda38..8abcbd8fd2c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHoverList.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHoverList.java @@ -37,7 +37,7 @@ }) @Since("2.3") @RequiredPlugins("Paper 1.12.2 or newer") -@AvailableEvent(PaperServerListPingEvent.class) +@AvailableEvents(PaperServerListPingEvent.class) @Events("server list ping") public class ExprHoverList extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprInventoryCloseReason.java b/src/main/java/ch/njol/skript/expressions/ExprInventoryCloseReason.java index 58b7897c671..c7f6d592709 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprInventoryCloseReason.java +++ b/src/main/java/ch/njol/skript/expressions/ExprInventoryCloseReason.java @@ -18,7 +18,7 @@ "\tinventory close reason is teleport", "\tsend \"Your inventory closed due to teleporting!\" to player" }) -@AvailableEvent(InventoryCloseEvent.class) +@AvailableEvents(InventoryCloseEvent.class) @Events("Inventory Close") @RequiredPlugins("Paper") @Since("2.8.0") diff --git a/src/main/java/ch/njol/skript/expressions/ExprLevel.java b/src/main/java/ch/njol/skript/expressions/ExprLevel.java index b770a98871b..843a090802a 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprLevel.java +++ b/src/main/java/ch/njol/skript/expressions/ExprLevel.java @@ -21,7 +21,7 @@ @Description("The level of a player.") @Examples({"reduce the victim's level by 1", "set the player's level to 0"}) -@AvailableEvent(PlayerLevelChangeEvent.class) +@AvailableEvents(PlayerLevelChangeEvent.class) @Events("level change") @Since("unknown (before 2.1)") public class ExprLevel extends SimplePropertyExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprLevelProgress.java b/src/main/java/ch/njol/skript/expressions/ExprLevelProgress.java index 91931d2ec4b..a870470fc11 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprLevelProgress.java +++ b/src/main/java/ch/njol/skript/expressions/ExprLevelProgress.java @@ -31,7 +31,7 @@ "\t\t\tset level progress of the loop-player to 0.99", "on xp spawn:", "\tcancel event"}) -@AvailableEvent(PlayerLevelChangeEvent.class) +@AvailableEvents(PlayerLevelChangeEvent.class) @Events("level change") @Since("2.0") public class ExprLevelProgress extends SimplePropertyExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprMe.java b/src/main/java/ch/njol/skript/expressions/ExprMe.java index 2cdcb0d9d50..cc6f69eaeef 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprMe.java +++ b/src/main/java/ch/njol/skript/expressions/ExprMe.java @@ -17,7 +17,7 @@ @Name("Me") @Description("A 'me' expression that can be used in players' effect commands only.") @Examples({"!heal me", "!kick myself", "!give a diamond axe to me"}) -@AvailableEvent(EffectCommandEvent.class) +@AvailableEvents(EffectCommandEvent.class) @Events("Effect Command") @Since("2.1.1") public class ExprMe extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprProtocolVersion.java b/src/main/java/ch/njol/skript/expressions/ExprProtocolVersion.java index 029ca4cf615..ef9f10dd43c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprProtocolVersion.java +++ b/src/main/java/ch/njol/skript/expressions/ExprProtocolVersion.java @@ -31,7 +31,7 @@ @Examples({"on server list ping:", "\tset the version string to \"<light green>Version: <orange>%minecraft version%\"", "\tset the protocol version to 0 # 13w41a (1.7) - so the player will see the custom version string almost always"}) -@AvailableEvent(ServerListPingEvent.class) +@AvailableEvents(ServerListPingEvent.class) @Events("server list ping") @RequiredPlugins("Paper 1.12.2 or newer") @Since("2.3") diff --git a/src/main/java/ch/njol/skript/expressions/ExprReadiedArrow.java b/src/main/java/ch/njol/skript/expressions/ExprReadiedArrow.java index cf0a757b573..74c9642783d 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprReadiedArrow.java +++ b/src/main/java/ch/njol/skript/expressions/ExprReadiedArrow.java @@ -20,7 +20,7 @@ "\tif selected arrow is not a spectral arrow:", "\t\tcancel event" }) -@AvailableEvent(PlayerReadyArrowEvent.class) +@AvailableEvents(PlayerReadyArrowEvent.class) @Events("ready arrow") @Since("2.8.0") public class ExprReadiedArrow extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprSentCommands.java b/src/main/java/ch/njol/skript/expressions/ExprSentCommands.java index 87d08828ac9..0c6b3835e9e 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprSentCommands.java +++ b/src/main/java/ch/njol/skript/expressions/ExprSentCommands.java @@ -9,6 +9,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent; import com.google.common.collect.Lists; import org.bukkit.event.Event; import org.bukkit.event.player.PlayerCommandSendEvent; @@ -30,7 +31,7 @@ "\tset command list to command list where [input does not contain \":\"]", "\tremove \"help\" from command list" }) -@AvailableEvent(PlayerCommandSendEvent.class) +@AvailableEvents(PlayerCommandSendEvent.class) @Events("send command list") @Since("2.8.0") public class ExprSentCommands extends SimpleExpression { diff --git a/src/main/java/ch/njol/skript/expressions/ExprVersionString.java b/src/main/java/ch/njol/skript/expressions/ExprVersionString.java index 95c100f5c42..5ba8fa802e8 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprVersionString.java +++ b/src/main/java/ch/njol/skript/expressions/ExprVersionString.java @@ -25,7 +25,7 @@ "\tset the protocol version to 0 # 13w41a (1.7), so it will show the version string always", "\tset the version string to \"<light green>Version: <orange>%minecraft version%\"" }) -@AvailableEvent(ServerListPingEvent.class) +@AvailableEvents(ServerListPingEvent.class) @Events("Server List Ping") @RequiredPlugins("Paper 1.12.2+") @Since("2.3") From d650ca3037eb3a65dd19262cee4626074be09d1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Mon, 3 Mar 2025 13:06:50 -0500 Subject: [PATCH 15/27] Oops --- src/main/java/ch/njol/skript/doc/Events.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/doc/Events.java b/src/main/java/ch/njol/skript/doc/Events.java index 8cedd04a74d..cd4ab6c3229 100644 --- a/src/main/java/ch/njol/skript/doc/Events.java +++ b/src/main/java/ch/njol/skript/doc/Events.java @@ -13,7 +13,7 @@ * @author Peter Güttinger * * @deprecated - * This annotation is deprecated, please use {@link AvailableEvent} or {@link AvailableEvents} instead + * This annotation is deprecated, please use {@link AvailableEvents} instead * */ @Target(ElementType.TYPE) From f31560d65e6e64932a4495f995279308a445316b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Tue, 4 Mar 2025 13:15:42 -0500 Subject: [PATCH 16/27] Update src/main/java/ch/njol/skript/doc/AvailableEvents.java Co-authored-by: Efnilite <35348263+Efnilite@users.noreply.github.com> --- src/main/java/ch/njol/skript/doc/AvailableEvents.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/doc/AvailableEvents.java b/src/main/java/ch/njol/skript/doc/AvailableEvents.java index ebeb13abacd..68e70587d7e 100644 --- a/src/main/java/ch/njol/skript/doc/AvailableEvents.java +++ b/src/main/java/ch/njol/skript/doc/AvailableEvents.java @@ -5,7 +5,7 @@ import java.lang.annotation.*; /** - * Provides a list of {@link org.bukkit.event.Event} that the syntax element can be used in. + * Provides a list of {@link org.bukkit.event.Event}s that this syntax element can be used in. */ @Target(ElementType.TYPE) From e3d0b866c0a5e04d07b2e2f3a978fec2a1f4d4c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Sat, 8 Mar 2025 01:26:32 -0500 Subject: [PATCH 17/27] Good stuff, mhm --- .../ch/njol/skript/doc/JSONGenerator.java | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java index 6d7523ad70b..3c7bfe1d4d0 100644 --- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java +++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java @@ -44,6 +44,8 @@ public class JSONGenerator extends DocumentationGenerator { .serializeNulls() .create(); + private static final HashMap, List>> events = new HashMap<>(); + public JSONGenerator(File templateDir, File outputDir) { super(templateDir, outputDir); } @@ -73,6 +75,17 @@ private static JsonArray convertToJsonArray(String @Nullable ... strings) { return jsonArray; } + private static JsonArray convertToJsonArray(@Nullable List list) { + if (list == null || list.isEmpty()) { + return null; + } + JsonArray jsonArray = new JsonArray(); + for (String string : list) { + jsonArray.add(new JsonPrimitive(string)); + } + return jsonArray; + } + /** * Generates the documentation JsonObject for an element that is annotated with documentation * annotations (e.g. effects, conditions, etc.) @@ -118,7 +131,16 @@ private static JsonObject generatedAnnotatedElement(SyntaxElementInfo syntaxI } AvailableEvents availableEvents = syntaxClass.getAnnotation(AvailableEvents.class); - syntaxJsonObject.add("availableEvents", availableEvents == null ? null : convertToJsonArray(Arrays.stream(availableEvents.value()).map(Class::getSimpleName).toArray(String[]::new))); + ArrayList skriptEventNames = new ArrayList<>(); + if (availableEvents != null) { + for (Class event : availableEvents.value()) { + if (events.get(event) == null) continue; + for (SkriptEventInfo skriptEvent : events.get(event)) { + skriptEventNames.add(skriptEvent.getName()); + } + } + } + syntaxJsonObject.add("availableEvents", skriptEventNames.isEmpty() ? null : convertToJsonArray(skriptEventNames)); Events events = syntaxClass.getAnnotation(Events.class); syntaxJsonObject.add("events", events == null ? null : convertToJsonArray(events.value())); @@ -375,6 +397,18 @@ private static JsonArray cleanPatterns(String... strings) { return convertToJsonArray(strings); } + private void cacheEvents() { + for (SkriptEventInfo eventInfo : Skript.getEvents()) { + for (Class event : eventInfo.events) { + if (events.get(event) == null) { + events.put(event, new ArrayList<>(Collections.singleton(eventInfo))); + continue; + } + events.get(event).add(eventInfo); + } + } + } + /** * Writes the documentation JsonObject to an output path * @@ -394,6 +428,8 @@ private void saveDocs(Path outputPath, JsonObject jsonDocs) { public void generate() { JsonObject jsonDocs = new JsonObject(); + cacheEvents(); + jsonDocs.addProperty("skriptVersion", Skript.getVersion().toString()); jsonDocs.add("version", getVersion()); jsonDocs.add("conditions", generateSyntaxElementArray(Skript.getConditions().iterator())); From 019e4d35c3a392f89593c1201d761836bafa629b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Sat, 8 Mar 2025 01:45:56 -0500 Subject: [PATCH 18/27] More good stuff --- .../ch/njol/skript/doc/JSONGenerator.java | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java index 3c7bfe1d4d0..469fada4270 100644 --- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java +++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java @@ -75,17 +75,6 @@ private static JsonArray convertToJsonArray(String @Nullable ... strings) { return jsonArray; } - private static JsonArray convertToJsonArray(@Nullable List list) { - if (list == null || list.isEmpty()) { - return null; - } - JsonArray jsonArray = new JsonArray(); - for (String string : list) { - jsonArray.add(new JsonPrimitive(string)); - } - return jsonArray; - } - /** * Generates the documentation JsonObject for an element that is annotated with documentation * annotations (e.g. effects, conditions, etc.) @@ -131,16 +120,19 @@ private static JsonObject generatedAnnotatedElement(SyntaxElementInfo syntaxI } AvailableEvents availableEvents = syntaxClass.getAnnotation(AvailableEvents.class); - ArrayList skriptEventNames = new ArrayList<>(); + JsonArray skriptEvents = new JsonArray(); if (availableEvents != null) { for (Class event : availableEvents.value()) { if (events.get(event) == null) continue; for (SkriptEventInfo skriptEvent : events.get(event)) { - skriptEventNames.add(skriptEvent.getName()); + JsonObject skriptEventJson = new JsonObject(); + skriptEventJson.addProperty("id", skriptEvent.getId()); + skriptEventJson.addProperty("name", skriptEvent.getName()); + skriptEvents.add(skriptEventJson); } } } - syntaxJsonObject.add("availableEvents", skriptEventNames.isEmpty() ? null : convertToJsonArray(skriptEventNames)); + syntaxJsonObject.add("availableEvents", skriptEvents.isEmpty() ? null : skriptEvents); Events events = syntaxClass.getAnnotation(Events.class); syntaxJsonObject.add("events", events == null ? null : convertToJsonArray(events.value())); From 18881ed109545f42fc04260861008a183007030b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Sat, 8 Mar 2025 01:49:17 -0500 Subject: [PATCH 19/27] Documentation Id if it exists and is needed --- src/main/java/ch/njol/skript/doc/JSONGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java index 469fada4270..15b6b39f5ac 100644 --- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java +++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java @@ -126,7 +126,7 @@ private static JsonObject generatedAnnotatedElement(SyntaxElementInfo syntaxI if (events.get(event) == null) continue; for (SkriptEventInfo skriptEvent : events.get(event)) { JsonObject skriptEventJson = new JsonObject(); - skriptEventJson.addProperty("id", skriptEvent.getId()); + skriptEventJson.addProperty("id", skriptEvent.getDocumentationID() == null ? skriptEvent.getId() : skriptEvent.getDocumentationID()); skriptEventJson.addProperty("name", skriptEvent.getName()); skriptEvents.add(skriptEventJson); } From e9a41b2eb8a80c4467a23764e954b623e64258e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Sat, 8 Mar 2025 10:15:12 -0500 Subject: [PATCH 20/27] Update src/main/java/ch/njol/skript/doc/JSONGenerator.java Co-authored-by: Efnilite <35348263+Efnilite@users.noreply.github.com> --- src/main/java/ch/njol/skript/doc/JSONGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java index 15b6b39f5ac..f2283dabd48 100644 --- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java +++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java @@ -392,7 +392,7 @@ private static JsonArray cleanPatterns(String... strings) { private void cacheEvents() { for (SkriptEventInfo eventInfo : Skript.getEvents()) { for (Class event : eventInfo.events) { - if (events.get(event) == null) { + if (events.containsKey(event)) { events.put(event, new ArrayList<>(Collections.singleton(eventInfo))); continue; } From 06f166fcd9a22eeaa6133b0b536df21baed7e46e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Sat, 8 Mar 2025 15:16:53 -0500 Subject: [PATCH 21/27] Moved JsonArray generator to a helper --- .../ch/njol/skript/doc/JSONGenerator.java | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java index 15b6b39f5ac..b5814c73006 100644 --- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java +++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java @@ -120,19 +120,7 @@ private static JsonObject generatedAnnotatedElement(SyntaxElementInfo syntaxI } AvailableEvents availableEvents = syntaxClass.getAnnotation(AvailableEvents.class); - JsonArray skriptEvents = new JsonArray(); - if (availableEvents != null) { - for (Class event : availableEvents.value()) { - if (events.get(event) == null) continue; - for (SkriptEventInfo skriptEvent : events.get(event)) { - JsonObject skriptEventJson = new JsonObject(); - skriptEventJson.addProperty("id", skriptEvent.getDocumentationID() == null ? skriptEvent.getId() : skriptEvent.getDocumentationID()); - skriptEventJson.addProperty("name", skriptEvent.getName()); - skriptEvents.add(skriptEventJson); - } - } - } - syntaxJsonObject.add("availableEvents", skriptEvents.isEmpty() ? null : skriptEvents); + syntaxJsonObject.add("availableEvents", getSkriptEvents(availableEvents)); Events events = syntaxClass.getAnnotation(Events.class); syntaxJsonObject.add("events", events == null ? null : convertToJsonArray(events.value())); @@ -146,6 +134,21 @@ private static JsonObject generatedAnnotatedElement(SyntaxElementInfo syntaxI return syntaxJsonObject; } + private static @Nullable JsonArray getSkriptEvents(@Nullable AvailableEvents availableEvents) { + if (availableEvents == null || availableEvents.value().length == 0) return null; + JsonArray skriptEvents = new JsonArray(); + for (Class event : availableEvents.value()) { + if (events.get(event) == null) continue; + for (SkriptEventInfo skriptEvent : events.get(event)) { + JsonObject skriptEventJson = new JsonObject(); + skriptEventJson.addProperty("id", skriptEvent.getDocumentationID() == null ? skriptEvent.getId() : skriptEvent.getDocumentationID()); + skriptEventJson.addProperty("name", skriptEvent.getName()); + skriptEvents.add(skriptEventJson); + } + } + return skriptEvents; + } + /** * Generates the documentation JsonObject for an event * From 8b8dc4418d993781e3b56aafb676fb7694176ba4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Mon, 10 Mar 2025 22:32:58 -0400 Subject: [PATCH 22/27] Apply suggestions from code review Co-authored-by: Efnilite <35348263+Efnilite@users.noreply.github.com> --- src/main/java/ch/njol/skript/doc/JSONGenerator.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java index 6906ef0e0f9..7222c24562a 100644 --- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java +++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java @@ -44,7 +44,7 @@ public class JSONGenerator extends DocumentationGenerator { .serializeNulls() .create(); - private static final HashMap, List>> events = new HashMap<>(); + private static final Map, List>> events = new HashMap<>(); public JSONGenerator(File templateDir, File outputDir) { super(templateDir, outputDir); @@ -120,10 +120,8 @@ private static JsonObject generatedAnnotatedElement(SyntaxElementInfo syntaxI } AvailableEvents availableEvents = syntaxClass.getAnnotation(AvailableEvents.class); - syntaxJsonObject.add("availableEvents", getSkriptEvents(availableEvents)); + syntaxJsonObject.add("events", getSkriptEvents(availableEvents)); - Events events = syntaxClass.getAnnotation(Events.class); - syntaxJsonObject.add("events", events == null ? null : convertToJsonArray(events.value())); RequiredPlugins requirements = syntaxClass.getAnnotation(RequiredPlugins.class); syntaxJsonObject.add("requirements", requirements == null ? null : convertToJsonArray(requirements.value())); @@ -395,7 +393,7 @@ private static JsonArray cleanPatterns(String... strings) { private void cacheEvents() { for (SkriptEventInfo eventInfo : Skript.getEvents()) { for (Class event : eventInfo.events) { - if (events.containsKey(event)) { + if (!events.containsKey(event)) { events.put(event, new ArrayList<>(Collections.singleton(eventInfo))); continue; } From c81f8cfd923be0ecd4a223c8412888850584dbe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Mon, 10 Mar 2025 21:36:39 -0500 Subject: [PATCH 23/27] Update JSON_VERSION to 2.0 --- src/main/java/ch/njol/skript/doc/JSONGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java index 7222c24562a..3c4a0d50ce6 100644 --- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java +++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java @@ -36,7 +36,7 @@ public class JSONGenerator extends DocumentationGenerator { /** * The current version of the JSON generator */ - public static final Version JSON_VERSION = new Version(1, 0); + public static final Version JSON_VERSION = new Version(2, 0); private static final Gson GSON = new GsonBuilder() .disableHtmlEscaping() From 1465585ce0ce9eec15a477b92da48d67cfb8c772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Tue, 11 Mar 2025 10:46:09 -0500 Subject: [PATCH 24/27] Correct AvailableEvents for ExprCommand and ExprCommandSender --- src/main/java/ch/njol/skript/expressions/ExprCommand.java | 5 +---- .../java/ch/njol/skript/expressions/ExprCommandSender.java | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprCommand.java b/src/main/java/ch/njol/skript/expressions/ExprCommand.java index e1208fe1207..b8d21efd861 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprCommand.java +++ b/src/main/java/ch/njol/skript/expressions/ExprCommand.java @@ -1,6 +1,5 @@ package ch.njol.skript.expressions; -import ch.njol.skript.command.CommandEvent; import ch.njol.skript.command.ScriptCommandEvent; import ch.njol.skript.doc.*; import ch.njol.skript.lang.EventRestrictedSyntax; @@ -29,9 +28,7 @@ "\t\t\tmessage \"You're not allowed to use commands during the game\"", "\t\t\tcancel the event"}) @Since("2.0, 2.7 (support for script commands)") -// TODO REMOVE -// Should this use CommandEvent or ScriptCommandEvent? -@AvailableEvents({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, CommandEvent.class}) +@AvailableEvents({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, ScriptCommandEvent.class}) @Events("command") public class ExprCommand extends SimpleExpression implements EventRestrictedSyntax { diff --git a/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java b/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java index 78c4a59337c..87646a8b324 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java +++ b/src/main/java/ch/njol/skript/expressions/ExprCommandSender.java @@ -1,6 +1,5 @@ package ch.njol.skript.expressions; -import ch.njol.skript.command.CommandEvent; import ch.njol.skript.command.ScriptCommandEvent; import ch.njol.skript.doc.*; import org.bukkit.command.CommandSender; @@ -21,9 +20,7 @@ "\tlog \"%executor% used command /%command% %arguments%\" to \"commands.log\"" }) @Since("2.0") -// TODO REMOVE -// Should this use CommandEvent or ScriptCommandEvent? -@AvailableEvents({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, CommandEvent.class}) +@AvailableEvents({PlayerCommandPreprocessEvent.class, ServerCommandEvent.class, ScriptCommandEvent.class}) @Events("command") public class ExprCommandSender extends EventValueExpression { From dd02e4c10991f2353cb2258c0fe4f9296c77f6d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Thu, 13 Mar 2025 18:06:54 +0100 Subject: [PATCH 25/27] Switch #cacheEvents() to static loading --- src/main/java/ch/njol/skript/doc/JSONGenerator.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java index 3c4a0d50ce6..2b77d3e27c1 100644 --- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java +++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java @@ -50,6 +50,10 @@ public JSONGenerator(File templateDir, File outputDir) { super(templateDir, outputDir); } + static { + cacheEvents(); + } + /** * @return The version of the JSON generator */ @@ -390,7 +394,7 @@ private static JsonArray cleanPatterns(String... strings) { return convertToJsonArray(strings); } - private void cacheEvents() { + private static void cacheEvents() { for (SkriptEventInfo eventInfo : Skript.getEvents()) { for (Class event : eventInfo.events) { if (!events.containsKey(event)) { @@ -421,8 +425,6 @@ private void saveDocs(Path outputPath, JsonObject jsonDocs) { public void generate() { JsonObject jsonDocs = new JsonObject(); - cacheEvents(); - jsonDocs.addProperty("skriptVersion", Skript.getVersion().toString()); jsonDocs.add("version", getVersion()); jsonDocs.add("conditions", generateSyntaxElementArray(Skript.getConditions().iterator())); From f4a7e42d3189cdf94ed74d1982cf4b269be24675 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Thu, 13 Mar 2025 18:07:50 +0100 Subject: [PATCH 26/27] Apply suggestions from code review Co-authored-by: Efnilite <35348263+Efnilite@users.noreply.github.com> --- src/main/java/ch/njol/skript/doc/AvailableEvents.java | 1 - src/main/java/ch/njol/skript/doc/JSONGenerator.java | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/ch/njol/skript/doc/AvailableEvents.java b/src/main/java/ch/njol/skript/doc/AvailableEvents.java index 68e70587d7e..6785177e1fa 100644 --- a/src/main/java/ch/njol/skript/doc/AvailableEvents.java +++ b/src/main/java/ch/njol/skript/doc/AvailableEvents.java @@ -7,7 +7,6 @@ /** * Provides a list of {@link org.bukkit.event.Event}s that this syntax element can be used in. */ - @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java index 2b77d3e27c1..59a787edb95 100644 --- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java +++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java @@ -137,10 +137,12 @@ private static JsonObject generatedAnnotatedElement(SyntaxElementInfo syntaxI } private static @Nullable JsonArray getSkriptEvents(@Nullable AvailableEvents availableEvents) { - if (availableEvents == null || availableEvents.value().length == 0) return null; + if (availableEvents == null || availableEvents.value().length == 0) + return null; JsonArray skriptEvents = new JsonArray(); for (Class event : availableEvents.value()) { - if (events.get(event) == null) continue; + if (events.get(event) == null) + continue; for (SkriptEventInfo skriptEvent : events.get(event)) { JsonObject skriptEventJson = new JsonObject(); skriptEventJson.addProperty("id", skriptEvent.getDocumentationID() == null ? skriptEvent.getId() : skriptEvent.getDocumentationID()); From a985dda23c3d452904339ebb26a2f60817fc910d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lex=C3=AE=20Nuutra=C3=AE?= Date: Wed, 11 Jun 2025 03:47:26 +0200 Subject: [PATCH 27/27] Apply half suggestions from code review Co-authored-by: Patrick Miller --- src/main/java/ch/njol/skript/doc/JSONGenerator.java | 6 +----- .../java/ch/njol/skript/expressions/ExprHealReason.java | 1 - 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java index 98e66738f3a..7ddd38a95bf 100644 --- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java +++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java @@ -399,11 +399,7 @@ private static JsonArray cleanPatterns(String... strings) { private static void cacheEvents() { for (SkriptEventInfo eventInfo : Skript.getEvents()) { for (Class event : eventInfo.events) { - if (!events.containsKey(event)) { - events.put(event, new ArrayList<>(Collections.singleton(eventInfo))); - continue; - } - events.get(event).add(eventInfo); + events.computeIfAbsent(event, key -> new ArrayList<>()).add(eventInfo); } } } diff --git a/src/main/java/ch/njol/skript/expressions/ExprHealReason.java b/src/main/java/ch/njol/skript/expressions/ExprHealReason.java index 009e1e901e2..bd99600dcc5 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHealReason.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHealReason.java @@ -6,7 +6,6 @@ import org.bukkit.event.entity.EntityRegainHealthEvent; import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; -import org.checkerframework.checker.units.qual.A; @Name("Heal Reason") @Description("The heal reason of a heal event.")