diff --git a/src/main/java/ch/njol/skript/conditions/CondAlphanumeric.java b/src/main/java/ch/njol/skript/conditions/CondAlphanumeric.java index 01702442428..c6add583167 100644 --- a/src/main/java/ch/njol/skript/conditions/CondAlphanumeric.java +++ b/src/main/java/ch/njol/skript/conditions/CondAlphanumeric.java @@ -13,6 +13,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Alphanumeric") @Description({"Checks if the given string is alphanumeric."}) @@ -42,7 +43,13 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye public boolean check(Event e) { return isNegated() ^ strings.check(e, StringUtils::isAlphanumeric); } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + strings = simplifyChild(strings, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return strings.toString(e, debug) + " is" + (isNegated() ? "n't" : "") + " alphanumeric"; diff --git a/src/main/java/ch/njol/skript/conditions/CondAnchorWorks.java b/src/main/java/ch/njol/skript/conditions/CondAnchorWorks.java index 03768c63793..2a35ec56a8a 100644 --- a/src/main/java/ch/njol/skript/conditions/CondAnchorWorks.java +++ b/src/main/java/ch/njol/skript/conditions/CondAnchorWorks.java @@ -13,6 +13,7 @@ import org.bukkit.World; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Do Respawn Anchors Work") @Description("Checks whether or not respawn anchors work in a world.") @@ -42,6 +43,12 @@ public boolean check(Event event) { return worlds.check(event, World::isRespawnAnchorWorks, isNegated()); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + worlds = simplifyChild(worlds, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "respawn anchors " + (isNegated() ? " do" : " don't") + " work in " + worlds.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/conditions/CondCanHold.java b/src/main/java/ch/njol/skript/conditions/CondCanHold.java index bfbcd70af9e..5261aa8112b 100644 --- a/src/main/java/ch/njol/skript/conditions/CondCanHold.java +++ b/src/main/java/ch/njol/skript/conditions/CondCanHold.java @@ -19,6 +19,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.log.ErrorQuality; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -72,7 +73,14 @@ public boolean check(Event e) { t -> t.getItem().addTo(buf)); }, isNegated()); } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + invis = simplifyChild(invis, step, source); + items = simplifyChild(items, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return PropertyCondition.toString(this, PropertyType.CAN, e, debug, invis, diff --git a/src/main/java/ch/njol/skript/conditions/CondCanSee.java b/src/main/java/ch/njol/skript/conditions/CondCanSee.java index 0cc4b2359e1..ae1a6f4cb0d 100644 --- a/src/main/java/ch/njol/skript/conditions/CondCanSee.java +++ b/src/main/java/ch/njol/skript/conditions/CondCanSee.java @@ -12,6 +12,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Can See") @Description("Checks whether the given players can see the provided entities.") @@ -61,6 +62,13 @@ public boolean check(Event event) { ), isNegated()); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + viewers = simplifyChild(viewers, step, source); + entities = simplifyChild(entities, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return PropertyCondition.toString(this, PropertyType.CAN, event, debug, viewers, diff --git a/src/main/java/ch/njol/skript/conditions/CondChance.java b/src/main/java/ch/njol/skript/conditions/CondChance.java index 1b2326adafb..c9598996ee7 100644 --- a/src/main/java/ch/njol/skript/conditions/CondChance.java +++ b/src/main/java/ch/njol/skript/conditions/CondChance.java @@ -12,6 +12,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -49,7 +50,13 @@ public boolean check(final Event e) { return false; return Math.random() < (percent ? n.doubleValue() / 100 : n.doubleValue()); } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + chance = simplifyChild(chance, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return "chance of " + chance.toString(e, debug) + (percent ? "%" : ""); diff --git a/src/main/java/ch/njol/skript/conditions/CondChatVisibility.java b/src/main/java/ch/njol/skript/conditions/CondChatVisibility.java index ad3cbfacd98..77d4b5d4415 100644 --- a/src/main/java/ch/njol/skript/conditions/CondChatVisibility.java +++ b/src/main/java/ch/njol/skript/conditions/CondChatVisibility.java @@ -10,6 +10,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Can See Messages") @Description("Checks whether a player can see specific message types in chat.") @@ -68,6 +69,12 @@ public boolean check(Event event) { }; } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + player = simplifyChild(player, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return switch (pattern) { diff --git a/src/main/java/ch/njol/skript/conditions/CondCompare.java b/src/main/java/ch/njol/skript/conditions/CondCompare.java index cea7a493ba3..055a9e68d16 100644 --- a/src/main/java/ch/njol/skript/conditions/CondCompare.java +++ b/src/main/java/ch/njol/skript/conditions/CondCompare.java @@ -30,6 +30,7 @@ import ch.njol.skript.util.Patterns; import ch.njol.skript.util.Utils; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; import org.skriptlang.skript.lang.util.Cyclical; import java.util.function.Predicate; @@ -404,6 +405,14 @@ private boolean compareLists(Event event) { return shouldMatch; } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + first = simplifyChild(first, step, source); + second = simplifyChild(second, step, source); + third = simplifyChild(third, step, source); + return this; + } + @Override public String toString(final @Nullable Event event, final boolean debug) { String s; diff --git a/src/main/java/ch/njol/skript/conditions/CondContains.java b/src/main/java/ch/njol/skript/conditions/CondContains.java index 366141ae0b3..b017252039c 100644 --- a/src/main/java/ch/njol/skript/conditions/CondContains.java +++ b/src/main/java/ch/njol/skript/conditions/CondContains.java @@ -21,6 +21,7 @@ import org.bukkit.inventory.ItemStack; import org.skriptlang.skript.lang.converter.Converters; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.Arrays; import java.util.Objects; @@ -156,6 +157,13 @@ public boolean check(Event event) { }; } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + containers = simplifyChild(containers, step, source); + items = simplifyChild(items, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return containers.toString(e, debug) + (isNegated() ? " doesn't contain " : " contains ") + items.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/conditions/CondDamageCause.java b/src/main/java/ch/njol/skript/conditions/CondDamageCause.java index 53cda6b0c00..2a919a9ff76 100644 --- a/src/main/java/ch/njol/skript/conditions/CondDamageCause.java +++ b/src/main/java/ch/njol/skript/conditions/CondDamageCause.java @@ -14,6 +14,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -63,7 +64,13 @@ public boolean check(final Event e) { other -> cause == other, isNegated()); } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + expected = simplifyChild(expected, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return "damage was" + (isNegated() ? " not" : "") + " caused by " + expected.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/conditions/CondDate.java b/src/main/java/ch/njol/skript/conditions/CondDate.java index 392c8423301..c7fb2fc827e 100644 --- a/src/main/java/ch/njol/skript/conditions/CondDate.java +++ b/src/main/java/ch/njol/skript/conditions/CondDate.java @@ -14,6 +14,7 @@ import ch.njol.skript.util.Date; import ch.njol.skript.util.Timespan; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -58,7 +59,14 @@ public boolean check(final Event e) { timespan -> now - date.getTime() >= timespan.getAs(Timespan.TimePeriod.MILLISECOND) ), isNegated()); } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + date = simplifyChild(date, step, source); + delta = simplifyChild(delta, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return date.toString(e, debug) + " was " + (isNegated() ? "less" : "more") + " than " + delta.toString(e, debug) + " ago"; diff --git a/src/main/java/ch/njol/skript/conditions/CondHasItemCooldown.java b/src/main/java/ch/njol/skript/conditions/CondHasItemCooldown.java index dd67a64d6fc..aec7b71808c 100644 --- a/src/main/java/ch/njol/skript/conditions/CondHasItemCooldown.java +++ b/src/main/java/ch/njol/skript/conditions/CondHasItemCooldown.java @@ -15,6 +15,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Has Item Cooldown") @Description("Check whether a cooldown is active on the specified material for a specific player.") @@ -53,7 +54,14 @@ public boolean check(Event event) { ) ); } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + itemtypes = simplifyChild(itemtypes, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return PropertyCondition.toString(this, PropertyType.HAVE, event, debug, players, diff --git a/src/main/java/ch/njol/skript/conditions/CondHasLineOfSight.java b/src/main/java/ch/njol/skript/conditions/CondHasLineOfSight.java index b5e8dae5571..0f958f37681 100644 --- a/src/main/java/ch/njol/skript/conditions/CondHasLineOfSight.java +++ b/src/main/java/ch/njol/skript/conditions/CondHasLineOfSight.java @@ -14,6 +14,7 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Has Line of Sight") @Description("Checks whether living entities have an unobstructed line of sight to other entities or locations.") @@ -56,6 +57,13 @@ public boolean check(Event event) { }, isNegated()); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + viewers = simplifyChild(viewers, step, source); + targets = simplifyChild(targets, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return viewers.toString(event, debug) + " has" + (isNegated() ? " no" : "") + " line of sight to " + targets.toString(event,debug); diff --git a/src/main/java/ch/njol/skript/conditions/CondHasMetadata.java b/src/main/java/ch/njol/skript/conditions/CondHasMetadata.java index cfb60086fd5..8e4bd6f04cd 100644 --- a/src/main/java/ch/njol/skript/conditions/CondHasMetadata.java +++ b/src/main/java/ch/njol/skript/conditions/CondHasMetadata.java @@ -14,6 +14,7 @@ import org.bukkit.event.Event; import org.bukkit.metadata.Metadatable; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Has Metadata") @Description("Checks whether a metadata holder has a metadata tag.") @@ -49,6 +50,13 @@ public boolean check(Event e) { ), isNegated()); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + holders = simplifyChild(holders, step, source); + values = simplifyChild(values, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return PropertyCondition.toString(this, PropertyType.HAVE, e, debug, holders, diff --git a/src/main/java/ch/njol/skript/conditions/CondHasPotion.java b/src/main/java/ch/njol/skript/conditions/CondHasPotion.java index b71b6298d27..dca912e5200 100644 --- a/src/main/java/ch/njol/skript/conditions/CondHasPotion.java +++ b/src/main/java/ch/njol/skript/conditions/CondHasPotion.java @@ -15,6 +15,7 @@ import org.bukkit.event.Event; import org.bukkit.potion.PotionEffectType; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Has Potion") @Description("Checks whether the given living entities have specific potion effects.") @@ -52,6 +53,13 @@ public boolean check(Event e) { ), isNegated()); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + livingEntities = simplifyChild(livingEntities, step, source); + potionEffects = simplifyChild(potionEffects, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return PropertyCondition.toString(this, PropertyType.HAVE, e, debug, livingEntities, diff --git a/src/main/java/ch/njol/skript/conditions/CondHasScoreboardTag.java b/src/main/java/ch/njol/skript/conditions/CondHasScoreboardTag.java index db7ffd61df4..e119a191e33 100644 --- a/src/main/java/ch/njol/skript/conditions/CondHasScoreboardTag.java +++ b/src/main/java/ch/njol/skript/conditions/CondHasScoreboardTag.java @@ -1,13 +1,5 @@ package ch.njol.skript.conditions; -import java.util.Arrays; -import java.util.List; - -import org.bukkit.entity.Entity; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - -import ch.njol.skript.Skript; import ch.njol.skript.conditions.base.PropertyCondition; import ch.njol.skript.conditions.base.PropertyCondition.PropertyType; import ch.njol.skript.doc.Description; @@ -18,6 +10,13 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.bukkit.entity.Entity; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.Arrays; +import java.util.List; @Name("Has Scoreboard Tag") @Description("Checks whether the given entities has the given scoreboard tags.") @@ -50,7 +49,14 @@ public boolean check(Event e) { entity -> entity.getScoreboardTags().containsAll(tagsList), isNegated()); } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + tags = simplifyChild(tags, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return PropertyCondition.toString(this, PropertyType.HAVE, e, debug, entities, diff --git a/src/main/java/ch/njol/skript/conditions/CondIncendiary.java b/src/main/java/ch/njol/skript/conditions/CondIncendiary.java index 5ee20c07cec..76bf5e7043b 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIncendiary.java +++ b/src/main/java/ch/njol/skript/conditions/CondIncendiary.java @@ -16,6 +16,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.log.ErrorQuality; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Is Incendiary") @Description("Checks if an entity will create fire when it explodes. This condition is also usable in an explosion prime event.") @@ -63,6 +64,12 @@ public boolean check(Event e) { return entities.check(e, entity -> entity instanceof Explosive && ((Explosive) entity).isIncendiary(), isNegated()); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { if (isEvent) diff --git a/src/main/java/ch/njol/skript/conditions/CondIsBlockRedstonePowered.java b/src/main/java/ch/njol/skript/conditions/CondIsBlockRedstonePowered.java index 86cba581c0e..01b48bfc37f 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsBlockRedstonePowered.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsBlockRedstonePowered.java @@ -14,6 +14,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Is Block Redstone Powered") @Description("Checks if a block is indirectly or directly powered by redstone") @@ -51,7 +52,13 @@ public boolean check(Event e) { ? blocks.check(e, Block::isBlockIndirectlyPowered, isNegated()) : blocks.check(e, Block::isBlockPowered, isNegated()); } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + blocks = simplifyChild(blocks, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return PropertyCondition.toString(this, PropertyCondition.PropertyType.BE, e, debug, blocks, (isIndirectlyPowered ? "indirectly " : "") + "powered"); diff --git a/src/main/java/ch/njol/skript/conditions/CondIsDivisibleBy.java b/src/main/java/ch/njol/skript/conditions/CondIsDivisibleBy.java index 68ac4999fb3..1d55630d60f 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsDivisibleBy.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsDivisibleBy.java @@ -11,6 +11,7 @@ import ch.njol.util.Kleenean; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Is Evenly Divisible By") @Description("Check if a number is evenly divisible by another number.") @@ -50,6 +51,13 @@ public boolean check(Event event) { return dividend.check(event, dividendNumber -> (dividendNumber.doubleValue() % divisor == 0), isNegated()); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + dividend = simplifyChild(dividend, step, source); + divisor = simplifyChild(divisor, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return dividend.toString(event, debug) + " is " + (isNegated() ? "not " : "") diff --git a/src/main/java/ch/njol/skript/conditions/CondIsEnchanted.java b/src/main/java/ch/njol/skript/conditions/CondIsEnchanted.java index d0068b6c518..cb6e30847ff 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsEnchanted.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsEnchanted.java @@ -15,6 +15,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.util.EnchantmentType; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -29,7 +30,7 @@ public class CondIsEnchanted extends Condition { static { PropertyCondition.register(CondIsEnchanted.class, "enchanted [with %-enchantmenttype%]", "itemtypes"); } - + @SuppressWarnings("NotNullFieldNotInitialized") private Expression items; @Nullable @@ -53,6 +54,13 @@ public boolean check(final Event e) { } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + items = simplifyChild(items, step, source); + enchs = simplifyChild(enchs, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { final Expression es = enchs; diff --git a/src/main/java/ch/njol/skript/conditions/CondIsHandRaised.java b/src/main/java/ch/njol/skript/conditions/CondIsHandRaised.java index cc9d617f08b..ba425ccaede 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsHandRaised.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsHandRaised.java @@ -14,6 +14,7 @@ import org.bukkit.event.Event; import org.bukkit.inventory.EquipmentSlot; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Is Hand Raised") @Description({ @@ -70,6 +71,12 @@ public boolean check(Event event) { ); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return entities.toString(event, debug) + "'s " + (hand == null ? "" : (hand == EquipmentSlot.HAND ? "main " : "off ")) + "hand" + diff --git a/src/main/java/ch/njol/skript/conditions/CondIsLoaded.java b/src/main/java/ch/njol/skript/conditions/CondIsLoaded.java index 9a88b72a103..42fb14a08e4 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsLoaded.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsLoaded.java @@ -18,6 +18,7 @@ import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; import org.skriptlang.skript.lang.script.Script; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Is Loaded") @Description({ @@ -100,6 +101,15 @@ public boolean check(Event e) { }; } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + locations = simplifyChild(locations, step, source); + x = simplifyChild(x, step, source); + z = simplifyChild(z, step, source); + objects = simplifyChild(objects, step, source); + return this; + } + @Override @SuppressWarnings("null") public String toString(@Nullable Event e, boolean d) { diff --git a/src/main/java/ch/njol/skript/conditions/CondIsOfType.java b/src/main/java/ch/njol/skript/conditions/CondIsOfType.java index 47baed7a481..698276842fb 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsOfType.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsOfType.java @@ -18,6 +18,7 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; import org.skriptlang.skript.lang.comparator.Relation; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.function.Predicate; @@ -33,9 +34,7 @@ public class CondIsOfType extends Condition { PropertyCondition.register(CondIsOfType.class, "of type[s] %itemtypes/entitydatas%", "itemstacks/entities"); } - @SuppressWarnings("NotNullFieldNotInitialized") private Expression what; - @SuppressWarnings("NotNullFieldNotInitialized") private Expression types; @SuppressWarnings("null") @@ -65,6 +64,13 @@ public boolean check(Event event) { isNegated()); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + what = simplifyChild(what, step, source); + types = simplifyChild(types, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return PropertyCondition.toString(this, PropertyType.BE, event, debug, what, diff --git a/src/main/java/ch/njol/skript/conditions/CondIsPathfinding.java b/src/main/java/ch/njol/skript/conditions/CondIsPathfinding.java index 7c4fd18183c..f011a6a7508 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsPathfinding.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsPathfinding.java @@ -21,6 +21,7 @@ import org.bukkit.entity.Mob; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Is Pathfinding") @Description({ @@ -78,6 +79,13 @@ public boolean check(Event event) { }, isNegated()); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + target = simplifyChild(target, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return PropertyCondition.toString(this, PropertyType.BE, event, debug, entities, "pathfinding" + diff --git a/src/main/java/ch/njol/skript/conditions/CondIsPluginEnabled.java b/src/main/java/ch/njol/skript/conditions/CondIsPluginEnabled.java index e6d60df64d9..afc1e3d49dc 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsPluginEnabled.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsPluginEnabled.java @@ -13,6 +13,7 @@ import org.bukkit.event.Event; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Is Plugin Enabled") @Description({"Check if a plugin is enabled/disabled on the server.", @@ -60,6 +61,12 @@ public boolean check(Event e) { }); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + plugins = simplifyChild(plugins, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { String plugin = plugins.isSingle() ? "plugin " : "plugins "; diff --git a/src/main/java/ch/njol/skript/conditions/CondIsPreferredTool.java b/src/main/java/ch/njol/skript/conditions/CondIsPreferredTool.java index 945f10c05cd..1d3821f1969 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsPreferredTool.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsPreferredTool.java @@ -16,6 +16,7 @@ import org.bukkit.event.Event; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Is Preferred Tool") @Description( @@ -73,6 +74,13 @@ public boolean check(Event event) { }), isNegated()); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + items = simplifyChild(items, step, source); + blocks = simplifyChild(blocks, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return items.toString(event, debug) + " is the preferred tool for " + blocks.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/conditions/CondIsRiding.java b/src/main/java/ch/njol/skript/conditions/CondIsRiding.java index d62b58fcd73..294977a6429 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsRiding.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsRiding.java @@ -1,9 +1,5 @@ package ch.njol.skript.conditions; -import org.bukkit.entity.Entity; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.conditions.base.PropertyCondition; import ch.njol.skript.conditions.base.PropertyCondition.PropertyType; import ch.njol.skript.doc.Description; @@ -14,7 +10,12 @@ import ch.njol.skript.lang.Condition; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import org.bukkit.entity.Entity; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -44,13 +45,23 @@ public boolean init(final Expression[] exprs, final int matchedPattern, final } @Override - public boolean check(final Event e) { - return entities.check(e, - entity -> types.check(e, - data -> data.isInstance(entity.getVehicle()) + public boolean check(Event event) { + EntityData[] types = this.types.getArray(event); + return entities.check(event, + entity -> SimpleExpression.check(types, + data -> data.isInstance(entity.getVehicle()), + false, + this.types.getAnd() ), isNegated()); } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + types = simplifyChild(types, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return PropertyCondition.toString(this, PropertyType.BE, e, debug, entities, diff --git a/src/main/java/ch/njol/skript/conditions/CondIsSet.java b/src/main/java/ch/njol/skript/conditions/CondIsSet.java index f6afc2e5a6a..50815862d54 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsSet.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsSet.java @@ -15,6 +15,7 @@ import ch.njol.skript.lang.ExpressionList; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -75,6 +76,12 @@ public String getReceivedMessage(Event event) { return VerboseAssert.getExpressionValue(expr,event); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + expr = simplifyChild(expr, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return expr.toString(e, debug) + (isNegated() ? " isn't" : " is") + " set"; diff --git a/src/main/java/ch/njol/skript/conditions/CondIsUsingFeature.java b/src/main/java/ch/njol/skript/conditions/CondIsUsingFeature.java index 00661817dd4..2432c028a6b 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsUsingFeature.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsUsingFeature.java @@ -14,6 +14,7 @@ import org.jetbrains.annotations.Nullable; import org.skriptlang.skript.lang.experiment.ExperimentSet; import org.skriptlang.skript.lang.script.Script; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Is Using Experimental Feature") @Description("Checks whether a script is using an experimental feature by name.") @@ -65,6 +66,13 @@ public boolean check(Event event) { return isUsing ^ this.isNegated(); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + names = simplifyChild(names, step, source); + scripts = simplifyChild(scripts, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { String whether = scripts.isSingle() diff --git a/src/main/java/ch/njol/skript/conditions/CondIsWearing.java b/src/main/java/ch/njol/skript/conditions/CondIsWearing.java index 3b48d4eec2d..d32311c3e88 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsWearing.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsWearing.java @@ -19,6 +19,7 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.Arrays; @@ -38,10 +39,8 @@ public class CondIsWearing extends Condition { static { PropertyCondition.register(CondIsWearing.class, "wearing %itemtypes%", "livingentities"); } - - @SuppressWarnings("NotNullFieldNotInitialized") + private Expression entities; - @SuppressWarnings("NotNullFieldNotInitialized") private Expression types; @SuppressWarnings({"unchecked", "null"}) @@ -91,6 +90,13 @@ public boolean check(Event event) { }, isNegated()); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + types = simplifyChild(types, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return PropertyCondition.toString(this, PropertyType.BE, event, debug, entities, diff --git a/src/main/java/ch/njol/skript/conditions/CondIsWhitelisted.java b/src/main/java/ch/njol/skript/conditions/CondIsWhitelisted.java index 6b45817e3a8..d18a6747d9e 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsWhitelisted.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsWhitelisted.java @@ -14,6 +14,7 @@ import org.bukkit.OfflinePlayer; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Is Whitelisted") @Description("Whether or not the server or a player is whitelisted, or the server is whitelist enforced.") @@ -61,6 +62,12 @@ public boolean check(Event event) { return players.check(event, OfflinePlayer::isWhitelisted, isNegated()); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { String negation = isNegated() ? "not" : ""; diff --git a/src/main/java/ch/njol/skript/conditions/CondIsWithin.java b/src/main/java/ch/njol/skript/conditions/CondIsWithin.java index 9631a598a33..6a6d851ae70 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsWithin.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsWithin.java @@ -20,6 +20,7 @@ import org.bukkit.util.BoundingBox; import org.bukkit.util.Vector; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Is Within") @Description({ @@ -129,6 +130,15 @@ public boolean check(Event event) { return false; } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + locsToCheck = simplifyChild(locsToCheck, step, source); + loc1 = simplifyChild(loc1, step, source); + loc2 = simplifyChild(loc2, step, source); + area = simplifyChild(area, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { String str = locsToCheck.toString(event, debug) + " is within "; diff --git a/src/main/java/ch/njol/skript/conditions/CondItemInHand.java b/src/main/java/ch/njol/skript/conditions/CondItemInHand.java index 68bf091628b..a49ea666607 100644 --- a/src/main/java/ch/njol/skript/conditions/CondItemInHand.java +++ b/src/main/java/ch/njol/skript/conditions/CondItemInHand.java @@ -2,7 +2,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.aliases.ItemType; -import org.skriptlang.skript.lang.comparator.Relation; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; @@ -10,12 +9,15 @@ import ch.njol.skript.lang.Condition; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; -import org.skriptlang.skript.lang.comparator.Comparators; +import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; import org.bukkit.inventory.EntityEquipment; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.comparator.Comparators; +import org.skriptlang.skript.lang.comparator.Relation; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Is Holding") @Description("Checks whether a player is holding a specific item. Cannot be used with endermen, use 'entity is [not] an enderman holding <item type>' instead.") @@ -38,10 +40,8 @@ public class CondItemInHand extends Condition { "[%livingentities%] (is not|isn't) holding %itemtypes% in off[(-| )]hand" ); } - - @SuppressWarnings("NotNullFieldNotInitialized") + private Expression entities; - @SuppressWarnings("NotNullFieldNotInitialized") private Expression items; private boolean offTool; @@ -58,17 +58,28 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye @Override public boolean check(Event e) { + ItemType[] items = this.items.getArray(e); return entities.check(e, - livingEntity -> items.check(e, + livingEntity -> SimpleExpression.check(items, itemType -> { EntityEquipment equipment = livingEntity.getEquipment(); if (equipment == null) return false; // No equipment -> no item in hand ItemType handItem = new ItemType(offTool ? equipment.getItemInOffHand() : equipment.getItemInMainHand()); return Comparators.compare(handItem, itemType).isImpliedBy(Relation.EQUAL); - }), isNegated()); + }, + false, + this.items.getAnd() + ), isNegated()); } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + items = simplifyChild(items, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return entities.toString(e, debug) + " " + (entities.isSingle() ? "is" : "are") diff --git a/src/main/java/ch/njol/skript/conditions/CondMatches.java b/src/main/java/ch/njol/skript/conditions/CondMatches.java index 6ce5facb581..766195ebdfc 100644 --- a/src/main/java/ch/njol/skript/conditions/CondMatches.java +++ b/src/main/java/ch/njol/skript/conditions/CondMatches.java @@ -1,12 +1,6 @@ package ch.njol.skript.conditions; -import java.util.Arrays; -import java.util.regex.Pattern; - -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; @@ -16,6 +10,12 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.Arrays; +import java.util.regex.Pattern; @Name("Matches") @Description("Checks whether the defined strings match the input regexes (Regular expressions).") @@ -75,7 +75,14 @@ public boolean check(Event e) { public boolean matches(String str, Pattern pattern) { return partial ? pattern.matcher(str).find() : str.matches(pattern.pattern()); } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + strings = simplifyChild(strings, step, source); + regex = simplifyChild(regex, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return strings.toString(e, debug) + " " + (isNegated() ? "doesn't match" : "matches") + " " + regex.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/conditions/CondMinecraftVersion.java b/src/main/java/ch/njol/skript/conditions/CondMinecraftVersion.java index 682b6a144cd..e3079c9f1d0 100644 --- a/src/main/java/ch/njol/skript/conditions/CondMinecraftVersion.java +++ b/src/main/java/ch/njol/skript/conditions/CondMinecraftVersion.java @@ -13,6 +13,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.util.Version; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Running Minecraft") @Description("Checks if current Minecraft version is given version or newer.") @@ -40,7 +41,13 @@ public boolean check(Event e) { String ver = version.getSingle(e); return ver != null ? Skript.isRunningMinecraft(new Version(ver)) ^ isNegated() : false; } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + version = simplifyChild(version, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "is running minecraft " + version.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/conditions/CondPastFuture.java b/src/main/java/ch/njol/skript/conditions/CondPastFuture.java index 2f8748f1a73..5d4251f7dd2 100644 --- a/src/main/java/ch/njol/skript/conditions/CondPastFuture.java +++ b/src/main/java/ch/njol/skript/conditions/CondPastFuture.java @@ -14,6 +14,7 @@ import ch.njol.util.Kleenean; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("In The Past/Future") @Description({ @@ -78,6 +79,12 @@ public boolean check(Event event) { return dates.check(event, date -> date.compareTo(new Date()) < 0, isNegated()); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + dates = simplifyChild(dates, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return dates.toString(event, debug) + (dates.isSingle() ? " is" : " are") + " in the" + (isFuture ? " future" : " past"); diff --git a/src/main/java/ch/njol/skript/conditions/CondPermission.java b/src/main/java/ch/njol/skript/conditions/CondPermission.java index c6494171c22..084e1458f49 100644 --- a/src/main/java/ch/njol/skript/conditions/CondPermission.java +++ b/src/main/java/ch/njol/skript/conditions/CondPermission.java @@ -1,9 +1,5 @@ package ch.njol.skript.conditions; -import org.bukkit.command.CommandSender; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.conditions.base.PropertyCondition; import ch.njol.skript.conditions.base.PropertyCondition.PropertyType; @@ -14,7 +10,12 @@ import ch.njol.skript.lang.Condition; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import org.bukkit.command.CommandSender; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -49,8 +50,9 @@ public boolean init(final Expression[] exprs, final int matchedPattern, final @Override public boolean check(final Event e) { + String[] perms = permissions.getArray(e); return senders.check(e, - s -> permissions.check(e, + s -> SimpleExpression.check(perms, perm -> { if (s.hasPermission(perm)) return true; @@ -63,9 +65,17 @@ public boolean check(final Event e) { } } return false; - }), isNegated()); + }, false, permissions.getAnd() + ), isNegated()); } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + senders = simplifyChild(senders, step, source); + permissions = simplifyChild(permissions, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return PropertyCondition.toString(this, PropertyType.HAVE, e, debug, senders, diff --git a/src/main/java/ch/njol/skript/conditions/CondPlayedBefore.java b/src/main/java/ch/njol/skript/conditions/CondPlayedBefore.java index ba2c1e611a9..a3f73b2c19c 100644 --- a/src/main/java/ch/njol/skript/conditions/CondPlayedBefore.java +++ b/src/main/java/ch/njol/skript/conditions/CondPlayedBefore.java @@ -12,6 +12,7 @@ import org.bukkit.OfflinePlayer; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Has Played Before") @Description("Checks whether a player has played on this server before. You can also use " + @@ -46,7 +47,13 @@ public boolean check(Event e) { OfflinePlayer::hasPlayedBefore, isNegated()); } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return players.toString(e, debug) + (isNegated() ? (players.isSingle() ? " hasn't" : " haven't") : (players.isSingle() ? " has" : " have")) diff --git a/src/main/java/ch/njol/skript/conditions/CondPvP.java b/src/main/java/ch/njol/skript/conditions/CondPvP.java index 250f38fd538..2391280fca8 100644 --- a/src/main/java/ch/njol/skript/conditions/CondPvP.java +++ b/src/main/java/ch/njol/skript/conditions/CondPvP.java @@ -13,6 +13,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -44,7 +45,13 @@ public boolean init(final Expression[] exprs, final int matchedPattern, final public boolean check(final Event e) { return worlds.check(e, w -> w.getPVP() == enabled, isNegated()); } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + worlds = simplifyChild(worlds, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return "PvP is " + (enabled ? "enabled" : "disabled") + " in " + worlds.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/conditions/CondResourcePack.java b/src/main/java/ch/njol/skript/conditions/CondResourcePack.java index 1d1c208766c..fe679e60092 100644 --- a/src/main/java/ch/njol/skript/conditions/CondResourcePack.java +++ b/src/main/java/ch/njol/skript/conditions/CondResourcePack.java @@ -15,6 +15,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Resource Pack") @Description("Checks state of the resource pack in a resource pack request response event.") @@ -54,7 +55,13 @@ public boolean check(Event e) { Status state = ((PlayerResourcePackStatusEvent) e).getStatus(); return states.check(e, state::equals, isNegated()); } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + states = simplifyChild(states, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return "resource pack was " + (isNegated() ? "not " : "") + states.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/conditions/CondScriptLoaded.java b/src/main/java/ch/njol/skript/conditions/CondScriptLoaded.java index 67bdb250e10..b5624ee0f56 100644 --- a/src/main/java/ch/njol/skript/conditions/CondScriptLoaded.java +++ b/src/main/java/ch/njol/skript/conditions/CondScriptLoaded.java @@ -2,19 +2,19 @@ import ch.njol.skript.ScriptLoader; import ch.njol.skript.Skript; -import ch.njol.skript.SkriptCommand; 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.Condition; import ch.njol.skript.lang.Expression; -import ch.njol.skript.lang.parser.ParserInstance; -import org.skriptlang.skript.lang.script.Script; import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.lang.parser.ParserInstance; import ch.njol.util.Kleenean; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.script.Script; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.io.File; @@ -68,6 +68,12 @@ public boolean check(Event event) { }, isNegated()); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + scripts = simplifyChild(scripts, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { String scriptName = scripts == null ? diff --git a/src/main/java/ch/njol/skript/conditions/CondStartsEndsWith.java b/src/main/java/ch/njol/skript/conditions/CondStartsEndsWith.java index 205db7eca53..0978f55dfd9 100644 --- a/src/main/java/ch/njol/skript/conditions/CondStartsEndsWith.java +++ b/src/main/java/ch/njol/skript/conditions/CondStartsEndsWith.java @@ -12,6 +12,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Starts/Ends With") @Description("Checks if a text starts or ends with another.") @@ -80,7 +81,14 @@ public boolean check(Event e) { }, isNegated()); } - + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + strings = simplifyChild(strings, step, source); + affix = simplifyChild(affix, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { if (isNegated()) diff --git a/src/main/java/ch/njol/skript/conditions/CondTooltip.java b/src/main/java/ch/njol/skript/conditions/CondTooltip.java index 7f84be363a4..77bfe458ebc 100644 --- a/src/main/java/ch/njol/skript/conditions/CondTooltip.java +++ b/src/main/java/ch/njol/skript/conditions/CondTooltip.java @@ -15,6 +15,7 @@ import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Has Item Tooltips") @Description({ @@ -61,6 +62,12 @@ public boolean check(Event event) { return items.check(event, item -> item.getItemMeta().hasItemFlag(ItemFlag.HIDE_ADDITIONAL_TOOLTIP), isNegated()); } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + items = simplifyChild(items, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "the " + (entire ? "entire" : "additional") + " tooltip of " + items.toString(event, debug) + " is " + (isNegated() ? "hidden" : "shown"); diff --git a/src/main/java/ch/njol/skript/conditions/CondWithinRadius.java b/src/main/java/ch/njol/skript/conditions/CondWithinRadius.java index d11a2add4bd..ae46e844c12 100644 --- a/src/main/java/ch/njol/skript/conditions/CondWithinRadius.java +++ b/src/main/java/ch/njol/skript/conditions/CondWithinRadius.java @@ -9,10 +9,12 @@ import ch.njol.skript.lang.Condition; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; import org.bukkit.Location; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Is Within Radius") @Description("Checks whether a location is within a certain radius of another location.") @@ -48,11 +50,22 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye public boolean check(Event event) { double radius = this.radius.getOptionalSingle(event).orElse(0).doubleValue(); double radiusSquared = radius * radius * Skript.EPSILON_MULT; - return locations.check(event, location -> points.check(event, center -> { - if (!location.getWorld().equals(center.getWorld())) - return false; - return location.distanceSquared(center) <= radiusSquared; - }), isNegated()); + Location[] points = this.points.getArray(event); + return locations.check(event, + location -> SimpleExpression.check(points, center -> { + if (!location.getWorld().equals(center.getWorld())) + return false; + return location.distanceSquared(center) <= radiusSquared; + }, false, this.points.getAnd() + ), isNegated()); + } + + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + locations = simplifyChild(locations, step, source); + radius = simplifyChild(radius, step, source); + points = simplifyChild(points, step, source); + return this; } @Override diff --git a/src/main/java/ch/njol/skript/conditions/base/PropertyCondition.java b/src/main/java/ch/njol/skript/conditions/base/PropertyCondition.java index 1711fcfb812..5160cf19a0e 100644 --- a/src/main/java/ch/njol/skript/conditions/base/PropertyCondition.java +++ b/src/main/java/ch/njol/skript/conditions/base/PropertyCondition.java @@ -7,11 +7,10 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; import org.bukkit.event.Event; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; - -import java.util.function.Predicate; -import org.jetbrains.annotations.ApiStatus; +import org.skriptlang.skript.lang.simplification.Simplifiable; import org.skriptlang.skript.registration.SyntaxInfo; import org.skriptlang.skript.registration.SyntaxRegistry; import org.skriptlang.skript.util.Priority; @@ -215,6 +214,12 @@ protected final void setExpr(Expression expr) { this.expr = expr; } + @Override + public Condition simplify(Step step, @Nullable Simplifiable source) { + expr = simplifyChild(expr, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return toString(this, getPropertyType(), event, debug, expr, getPropertyName()); diff --git a/src/main/java/ch/njol/skript/effects/Delay.java b/src/main/java/ch/njol/skript/effects/Delay.java index 72e1a0dd786..0e393949e39 100644 --- a/src/main/java/ch/njol/skript/effects/Delay.java +++ b/src/main/java/ch/njol/skript/effects/Delay.java @@ -18,6 +18,7 @@ import org.bukkit.Bukkit; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.Collections; import java.util.Set; @@ -100,6 +101,12 @@ protected void execute(Event event) { throw new UnsupportedOperationException(); } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + duration = simplifyChild(duration, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "wait for " + duration.toString(event, debug) + (event == null ? "" : "..."); diff --git a/src/main/java/ch/njol/skript/effects/EffActionBar.java b/src/main/java/ch/njol/skript/effects/EffActionBar.java index 07647482d3c..dd470ed5305 100644 --- a/src/main/java/ch/njol/skript/effects/EffActionBar.java +++ b/src/main/java/ch/njol/skript/effects/EffActionBar.java @@ -17,6 +17,7 @@ import ch.njol.util.Kleenean; import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.chat.BaseComponent; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Action Bar") @Description("Sends an action bar message to the given player(s).") @@ -51,6 +52,13 @@ protected void execute(Event event) { player.spigot().sendMessage(ChatMessageType.ACTION_BAR, components); } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + message = simplifyChild(message, step, source); + recipients = simplifyChild(recipients, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "send action bar " + message.toString(event, debug) + " to " + recipients.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffApplyBoneMeal.java b/src/main/java/ch/njol/skript/effects/EffApplyBoneMeal.java index 1a1712eedbf..d097f282945 100644 --- a/src/main/java/ch/njol/skript/effects/EffApplyBoneMeal.java +++ b/src/main/java/ch/njol/skript/effects/EffApplyBoneMeal.java @@ -1,20 +1,16 @@ package ch.njol.skript.effects; 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.RequiredPlugins; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.lang.Effect; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; -import org.bukkit.Bukkit; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Apply Bone Meal") @Description("Applies bone meal to a crop, sapling, or composter") @@ -51,6 +47,13 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + amount = simplifyChild(amount, step, source); + blocks = simplifyChild(blocks, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "apply " + (amount != null ? amount.toString(event, debug) + " " : "" + "bone meal to " + blocks.toString(event, debug)); diff --git a/src/main/java/ch/njol/skript/effects/EffBan.java b/src/main/java/ch/njol/skript/effects/EffBan.java index 02fd79af8d2..aaf8f5a9790 100644 --- a/src/main/java/ch/njol/skript/effects/EffBan.java +++ b/src/main/java/ch/njol/skript/effects/EffBan.java @@ -17,6 +17,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.net.InetSocketAddress; import java.util.Date; @@ -120,6 +121,14 @@ protected void execute(final Event e) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + reason = simplifyChild(reason, step, source); + expires = simplifyChild(expires, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { SyntaxStringBuilder builder = new SyntaxStringBuilder(event, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffBlockUpdate.java b/src/main/java/ch/njol/skript/effects/EffBlockUpdate.java index 90b24a2fcb8..092018cc56f 100644 --- a/src/main/java/ch/njol/skript/effects/EffBlockUpdate.java +++ b/src/main/java/ch/njol/skript/effects/EffBlockUpdate.java @@ -14,6 +14,7 @@ import org.bukkit.event.Event; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Update Block") @Description({ @@ -58,6 +59,13 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + blocks = simplifyChild(blocks, step, source); + blockData = simplifyChild(blockData, step, source); + return this; + } + @Override public @NotNull String toString(@Nullable Event event, boolean debug) { return "update " + this.blocks.toString(event, debug) + " as " diff --git a/src/main/java/ch/njol/skript/effects/EffBreakNaturally.java b/src/main/java/ch/njol/skript/effects/EffBreakNaturally.java index 2b1cce956dc..57383ea4df8 100644 --- a/src/main/java/ch/njol/skript/effects/EffBreakNaturally.java +++ b/src/main/java/ch/njol/skript/effects/EffBreakNaturally.java @@ -15,6 +15,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Break Block") @Description({"Breaks the block and spawns items as if a player had mined it", @@ -58,7 +59,14 @@ protected void execute(final Event e) { } } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + blocks = simplifyChild(blocks, step, source); + tool = simplifyChild(tool, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return "break " + blocks.toString(e, debug) + " naturally" + (tool != null ? " using " + tool.toString(e, debug) : ""); diff --git a/src/main/java/ch/njol/skript/effects/EffBroadcast.java b/src/main/java/ch/njol/skript/effects/EffBroadcast.java index 7b41e1f41fd..3c635326a0a 100644 --- a/src/main/java/ch/njol/skript/effects/EffBroadcast.java +++ b/src/main/java/ch/njol/skript/effects/EffBroadcast.java @@ -1,12 +1,5 @@ package ch.njol.skript.effects; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.regex.Pattern; - import ch.njol.skript.Skript; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; @@ -34,6 +27,10 @@ import org.bukkit.event.Event; import org.bukkit.event.server.BroadcastMessageEvent; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.*; +import java.util.regex.Pattern; @Name("Broadcast") @Description("Broadcasts a message to the server.") @@ -106,6 +103,13 @@ public void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + messageExpr = simplifyChild(messageExpr, step, source); + worlds = simplifyChild(worlds, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "broadcast " + messageExpr.toString(event, debug) + (worlds == null ? "" : " to " + worlds.toString(event, debug)); diff --git a/src/main/java/ch/njol/skript/effects/EffCancelItemUse.java b/src/main/java/ch/njol/skript/effects/EffCancelItemUse.java index dc3013686fc..f8a06b2e936 100644 --- a/src/main/java/ch/njol/skript/effects/EffCancelItemUse.java +++ b/src/main/java/ch/njol/skript/effects/EffCancelItemUse.java @@ -13,6 +13,7 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Cancel Active Item") @Description({ @@ -51,6 +52,12 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "cancel the usage of " + entities.toString(event, debug) + "'s active item"; diff --git a/src/main/java/ch/njol/skript/effects/EffChange.java b/src/main/java/ch/njol/skript/effects/EffChange.java index 0a755e24f57..5bc26b9bb2b 100644 --- a/src/main/java/ch/njol/skript/effects/EffChange.java +++ b/src/main/java/ch/njol/skript/effects/EffChange.java @@ -1,14 +1,5 @@ package ch.njol.skript.effects; -import java.util.Arrays; -import java.util.logging.Level; - -import ch.njol.skript.expressions.ExprParse; -import ch.njol.skript.lang.*; -import org.skriptlang.skript.lang.script.ScriptWarning; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.SkriptConfig; import ch.njol.skript.classes.Changer; @@ -18,6 +9,8 @@ import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; import ch.njol.skript.doc.Since; +import ch.njol.skript.expressions.ExprParse; +import ch.njol.skript.lang.*; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.log.CountingLogHandler; import ch.njol.skript.log.ErrorQuality; @@ -27,6 +20,13 @@ import ch.njol.skript.util.Patterns; import ch.njol.skript.util.Utils; import ch.njol.util.Kleenean; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.script.ScriptWarning; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.Arrays; +import java.util.logging.Level; /** * @author Peter Güttinger @@ -277,6 +277,13 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + changer = simplifyChild(changer, step, source); + // don't simplify changed, it shouldn't be evaluated + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { final Expression changer = this.changer; diff --git a/src/main/java/ch/njol/skript/effects/EffCharge.java b/src/main/java/ch/njol/skript/effects/EffCharge.java index 45563cf9d8d..8f0c8915123 100644 --- a/src/main/java/ch/njol/skript/effects/EffCharge.java +++ b/src/main/java/ch/njol/skript/effects/EffCharge.java @@ -14,6 +14,7 @@ import org.bukkit.entity.WitherSkull; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Charge Entity") @Description("Charges or uncharges a creeper or wither skull. A creeper is charged when it has been struck by lightning.") @@ -53,6 +54,12 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "make " + entities.toString(event, debug) + (charge ? " charged" : " not charged"); diff --git a/src/main/java/ch/njol/skript/effects/EffColorItems.java b/src/main/java/ch/njol/skript/effects/EffColorItems.java index 6f2fc81dce1..9bcaba88ca6 100644 --- a/src/main/java/ch/njol/skript/effects/EffColorItems.java +++ b/src/main/java/ch/njol/skript/effects/EffColorItems.java @@ -21,6 +21,7 @@ import ch.njol.skript.util.ColorRGB; import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Color Items") @Description("Colors items in a given color. " + @@ -132,7 +133,14 @@ protected void execute(Event e) { } } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + items = simplifyChild(items, step, source); + color = simplifyChild(color, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "dye " + items.toString(e, debug) + " " + color.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffCommand.java b/src/main/java/ch/njol/skript/effects/EffCommand.java index 22f16cbe01a..1f9d1bb2ed7 100644 --- a/src/main/java/ch/njol/skript/effects/EffCommand.java +++ b/src/main/java/ch/njol/skript/effects/EffCommand.java @@ -18,6 +18,7 @@ import ch.njol.skript.util.StringMode; import ch.njol.skript.util.Utils; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Command") @Description({ @@ -89,6 +90,13 @@ public void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + senders = simplifyChild(senders, step, source); + commands = simplifyChild(commands, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "make " + (senders != null ? senders.toString(event, debug) : "the console") + " execute " + (bungeecord ? "bungeecord " : "") + "command " + commands.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffCommandBlockConditional.java b/src/main/java/ch/njol/skript/effects/EffCommandBlockConditional.java index e4a7101d34a..8cc1b5356d9 100644 --- a/src/main/java/ch/njol/skript/effects/EffCommandBlockConditional.java +++ b/src/main/java/ch/njol/skript/effects/EffCommandBlockConditional.java @@ -13,6 +13,7 @@ import org.bukkit.block.data.type.CommandBlock; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Conditional / Unconditional") @Description( @@ -50,6 +51,12 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + blocks = simplifyChild(blocks, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "make command block " + blocks.toString(event, debug) + (conditional ? " " : " un") + "conditional"; diff --git a/src/main/java/ch/njol/skript/effects/EffConnect.java b/src/main/java/ch/njol/skript/effects/EffConnect.java index f2c848eb4be..b21bdc5fc2e 100644 --- a/src/main/java/ch/njol/skript/effects/EffConnect.java +++ b/src/main/java/ch/njol/skript/effects/EffConnect.java @@ -14,6 +14,7 @@ import ch.njol.skript.util.Utils; import ch.njol.util.Kleenean; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Connect") @Description({ @@ -106,6 +107,14 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + server = simplifyChild(server, step, source); + port = simplifyChild(port, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { if (transfer) { diff --git a/src/main/java/ch/njol/skript/effects/EffCustomName.java b/src/main/java/ch/njol/skript/effects/EffCustomName.java index b83b2f9886d..94745afb519 100644 --- a/src/main/java/ch/njol/skript/effects/EffCustomName.java +++ b/src/main/java/ch/njol/skript/effects/EffCustomName.java @@ -12,6 +12,7 @@ import org.bukkit.entity.Entity; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Toggle Custom Name Visibility") @Description("Toggles the custom name visibility of an entity.") @@ -45,6 +46,12 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return showCustomName ? "show" : "hide" + " the custom name of " + entities.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffDetonate.java b/src/main/java/ch/njol/skript/effects/EffDetonate.java index df374e4b598..e9a4e276144 100644 --- a/src/main/java/ch/njol/skript/effects/EffDetonate.java +++ b/src/main/java/ch/njol/skript/effects/EffDetonate.java @@ -17,6 +17,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Detonate Entities") @Description("Immediately detonates an entity. Accepted entities are fireworks, TNT minecarts, primed TNT, wind charges and creepers.") @@ -56,6 +57,12 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + return this; + } + public String toString(@Nullable Event event, boolean debug) { return "detonate " + entities.toString(event, debug); } diff --git a/src/main/java/ch/njol/skript/effects/EffDrop.java b/src/main/java/ch/njol/skript/effects/EffDrop.java index 29fb211b9ad..61dcc9b7c84 100644 --- a/src/main/java/ch/njol/skript/effects/EffDrop.java +++ b/src/main/java/ch/njol/skript/effects/EffDrop.java @@ -22,6 +22,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Drop") @Description("Drops one or more items.") @@ -37,9 +38,7 @@ public class EffDrop extends Effect { @Nullable public static Entity lastSpawned = null; - @SuppressWarnings("NotNullFieldNotInitialized") private Expression drops; - @SuppressWarnings("NotNullFieldNotInitialized") private Expression locations; private boolean useVelocity; @@ -83,6 +82,13 @@ public void execute(Event e) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + drops = simplifyChild(drops, step, source); + locations = simplifyChild(locations, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "drop " + drops.toString(e, debug) + " " + locations.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffEnchant.java b/src/main/java/ch/njol/skript/effects/EffEnchant.java index 8f41e27c5d0..7fc5034138e 100644 --- a/src/main/java/ch/njol/skript/effects/EffEnchant.java +++ b/src/main/java/ch/njol/skript/effects/EffEnchant.java @@ -16,6 +16,7 @@ import org.bukkit.event.Event; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.function.Function; @@ -74,6 +75,13 @@ protected void execute(Event event) { this.items.changeInPlace(event, changeFunction); } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + items = simplifyChild(items, step, source); + enchantments = simplifyChild(enchantments, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return enchantments == null ? "disenchant " + items.toString(event, debug) : "enchant " + items.toString(event, debug) + " with " + enchantments; diff --git a/src/main/java/ch/njol/skript/effects/EffEntityVisibility.java b/src/main/java/ch/njol/skript/effects/EffEntityVisibility.java index 7352204d24c..aecaa598fe4 100644 --- a/src/main/java/ch/njol/skript/effects/EffEntityVisibility.java +++ b/src/main/java/ch/njol/skript/effects/EffEntityVisibility.java @@ -13,6 +13,7 @@ import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnknownNullability; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Entity Visibility") @Description({ @@ -84,6 +85,13 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + hidden = simplifyChild(hidden, step, source); + viewers = simplifyChild(viewers, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return (reveal ? "reveal " : "hide ") + "entities " + diff --git a/src/main/java/ch/njol/skript/effects/EffEquip.java b/src/main/java/ch/njol/skript/effects/EffEquip.java index 04baeed397a..edadffa9594 100644 --- a/src/main/java/ch/njol/skript/effects/EffEquip.java +++ b/src/main/java/ch/njol/skript/effects/EffEquip.java @@ -1,7 +1,6 @@ package ch.njol.skript.effects; import ch.njol.skript.Skript; -import ch.njol.skript.aliases.ItemData; import ch.njol.skript.aliases.ItemType; import ch.njol.skript.bukkitutil.PlayerUtils; import ch.njol.skript.doc.Description; @@ -14,23 +13,12 @@ import ch.njol.util.Kleenean; import org.bukkit.Material; import org.bukkit.Tag; -import org.bukkit.entity.AbstractHorse; -import org.bukkit.entity.ChestedHorse; -import org.bukkit.entity.Horse; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Llama; -import org.bukkit.entity.Player; -import org.bukkit.entity.Steerable; -import org.bukkit.entity.Wolf; +import org.bukkit.entity.*; import org.bukkit.event.Event; -import org.bukkit.inventory.AbstractHorseInventory; -import org.bukkit.inventory.EntityEquipment; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.HorseInventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.LlamaInventory; +import org.bukkit.inventory.*; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnknownNullability; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Equip") @Description({ @@ -106,7 +94,6 @@ public class EffEquip extends Effect { "unequip %livingentities%'[s] (armo[u]r|equipment)"); } - @SuppressWarnings("NotNullFieldNotInitialized") private Expression entities; private @UnknownNullability Expression itemTypes; @@ -205,6 +192,13 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + itemTypes = simplifyChild(itemTypes, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { if (equip) { diff --git a/src/main/java/ch/njol/skript/effects/EffExplodeCreeper.java b/src/main/java/ch/njol/skript/effects/EffExplodeCreeper.java index c9937916d14..9a78502ccf1 100644 --- a/src/main/java/ch/njol/skript/effects/EffExplodeCreeper.java +++ b/src/main/java/ch/njol/skript/effects/EffExplodeCreeper.java @@ -16,6 +16,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.log.ErrorQuality; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Explode Creeper") @Description("Starts the explosion process of a creeper or instantly explodes it.") @@ -84,6 +85,12 @@ protected void execute(final Event e) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return (instant == true ? "instantly explode " : "start the explosion process of ") + entities.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffExplosion.java b/src/main/java/ch/njol/skript/effects/EffExplosion.java index 93c413aa47d..3c7383f5828 100644 --- a/src/main/java/ch/njol/skript/effects/EffExplosion.java +++ b/src/main/java/ch/njol/skript/effects/EffExplosion.java @@ -14,6 +14,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.util.Direction; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -70,6 +71,13 @@ public void execute(final Event e) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + force = simplifyChild(force, step, source); + locations = simplifyChild(locations, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { if (force != null) diff --git a/src/main/java/ch/njol/skript/effects/EffFeed.java b/src/main/java/ch/njol/skript/effects/EffFeed.java index 4ca51be1bbd..00c065320a2 100644 --- a/src/main/java/ch/njol/skript/effects/EffFeed.java +++ b/src/main/java/ch/njol/skript/effects/EffFeed.java @@ -12,6 +12,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Feed") @Description("Feeds the specified players.") @@ -50,7 +51,14 @@ protected void execute(Event e) { } } - @Override + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + beefs = simplifyChild(beefs, step, source); + return this; + } + + @Override public String toString(@Nullable Event e, boolean debug) { return "feed " + players.toString(e, debug) + (beefs != null ? " by " + beefs.toString(e, debug) : ""); } diff --git a/src/main/java/ch/njol/skript/effects/EffFireResistant.java b/src/main/java/ch/njol/skript/effects/EffFireResistant.java index 26560eb1699..a91ed5f1fa5 100644 --- a/src/main/java/ch/njol/skript/effects/EffFireResistant.java +++ b/src/main/java/ch/njol/skript/effects/EffFireResistant.java @@ -14,6 +14,7 @@ import org.bukkit.event.Event; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Make Fire Resistant") @Description("Makes items fire resistant.") @@ -30,7 +31,6 @@ public class EffFireResistant extends Effect { Skript.registerEffect(EffFireResistant.class, "make %itemtypes% [:not] (fire resistant|resistant to fire)"); } - @SuppressWarnings("NotNullFieldNotInitialized") private Expression items; private boolean not; @@ -51,6 +51,12 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + items = simplifyChild(items, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "make " + items.toString(event, debug) + (not ? " not" : "") + " fire resistant"; diff --git a/src/main/java/ch/njol/skript/effects/EffFireworkLaunch.java b/src/main/java/ch/njol/skript/effects/EffFireworkLaunch.java index 1f44850104a..56093edb1ed 100644 --- a/src/main/java/ch/njol/skript/effects/EffFireworkLaunch.java +++ b/src/main/java/ch/njol/skript/effects/EffFireworkLaunch.java @@ -18,6 +18,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Launch firework") @Description("Launch firework effects at the given location(s).") @@ -32,11 +33,8 @@ public class EffFireworkLaunch extends Effect { @Nullable public static Entity lastSpawned = null; - @SuppressWarnings("NotNullFieldNotInitialized") private Expression effects; - @SuppressWarnings("NotNullFieldNotInitialized") private Expression locations; - @SuppressWarnings("NotNullFieldNotInitialized") private Expression lifetime; @Override @@ -65,7 +63,15 @@ protected void execute(Event event) { lastSpawned = firework; } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + effects = simplifyChild(effects, step, source); + locations = simplifyChild(locations, step, source); + lifetime = simplifyChild(lifetime, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "Launch firework(s) " + effects.toString(event, debug) + diff --git a/src/main/java/ch/njol/skript/effects/EffForceAttack.java b/src/main/java/ch/njol/skript/effects/EffForceAttack.java index dc8f19cc02a..3c415753df0 100644 --- a/src/main/java/ch/njol/skript/effects/EffForceAttack.java +++ b/src/main/java/ch/njol/skript/effects/EffForceAttack.java @@ -15,6 +15,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Force Attack") @Description("Makes a living entity attack an entity with a melee attack.") @@ -31,10 +32,8 @@ public class EffForceAttack extends Effect { } private static final boolean ATTACK_IS_SUPPORTED = Skript.methodExists(LivingEntity.class, "attack", Entity.class); - - @SuppressWarnings("null") + private Expression entities; - @SuppressWarnings("null") private Expression target; @SuppressWarnings("unchecked") @@ -58,7 +57,14 @@ protected void execute(Event e) { } } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + target = simplifyChild(target, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "make " + entities.toString(e, debug) + " attack " + target.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffForceEnchantmentGlint.java b/src/main/java/ch/njol/skript/effects/EffForceEnchantmentGlint.java index 24f14e6ac7c..72632ec0e8b 100644 --- a/src/main/java/ch/njol/skript/effects/EffForceEnchantmentGlint.java +++ b/src/main/java/ch/njol/skript/effects/EffForceEnchantmentGlint.java @@ -11,6 +11,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Force Enchantment Glint") @Description("Forces the items to glint or not, or removes its existing enchantment glint enforcement.") @@ -62,6 +63,12 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + itemTypes = simplifyChild(itemTypes, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { // Pattern: Clear glint override diff --git a/src/main/java/ch/njol/skript/effects/EffGlowingText.java b/src/main/java/ch/njol/skript/effects/EffGlowingText.java index 8cd0b84da86..f61cee1e5e0 100644 --- a/src/main/java/ch/njol/skript/effects/EffGlowingText.java +++ b/src/main/java/ch/njol/skript/effects/EffGlowingText.java @@ -18,6 +18,7 @@ import org.bukkit.inventory.meta.BlockStateMeta; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Make Sign Glow") @Description("Makes a sign (either a block or item) have glowing text or normal text") @@ -34,7 +35,6 @@ public class EffGlowingText extends Effect { } } - @SuppressWarnings("NotNullFieldNotInitialized") private Expression objects; private boolean glowing; @@ -72,6 +72,12 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + objects = simplifyChild(objects, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "make " + objects.toString(event, debug) + " have " + (glowing ? "glowing text" : "normal text"); diff --git a/src/main/java/ch/njol/skript/effects/EffHandedness.java b/src/main/java/ch/njol/skript/effects/EffHandedness.java index b93e6302e61..14e451b2a35 100644 --- a/src/main/java/ch/njol/skript/effects/EffHandedness.java +++ b/src/main/java/ch/njol/skript/effects/EffHandedness.java @@ -14,6 +14,7 @@ import org.bukkit.entity.Mob; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Handedness") @Description("Make mobs left or right-handed. This does not affect players.") @@ -51,6 +52,12 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + livingEntities = simplifyChild(livingEntities, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "make " + livingEntities.toString(event, debug) + " " + (leftHanded ? "left" : "right") + " handed"; diff --git a/src/main/java/ch/njol/skript/effects/EffHealth.java b/src/main/java/ch/njol/skript/effects/EffHealth.java index 28d21dd87b9..6ad3612dd54 100644 --- a/src/main/java/ch/njol/skript/effects/EffHealth.java +++ b/src/main/java/ch/njol/skript/effects/EffHealth.java @@ -22,6 +22,7 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnknownNullability; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Damage/Heal/Repair") @Description({ @@ -122,6 +123,14 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + damageables = simplifyChild(damageables, step, source); + amount = simplifyChild(amount, step, source); + exprCause = simplifyChild(exprCause, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { String prefix = "damage "; diff --git a/src/main/java/ch/njol/skript/effects/EffHidePlayerFromServerList.java b/src/main/java/ch/njol/skript/effects/EffHidePlayerFromServerList.java index f2307e42517..65436b45ada 100644 --- a/src/main/java/ch/njol/skript/effects/EffHidePlayerFromServerList.java +++ b/src/main/java/ch/njol/skript/effects/EffHidePlayerFromServerList.java @@ -1,15 +1,5 @@ package ch.njol.skript.effects; -import java.util.Arrays; -import java.util.Iterator; - -import org.bukkit.entity.Player; -import org.bukkit.event.Event; -import org.bukkit.event.server.ServerListPingEvent; -import org.jetbrains.annotations.Nullable; - -import com.destroystokyo.paper.event.server.PaperServerListPingEvent; -import com.google.common.collect.Iterators; import ch.njol.skript.Skript; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; @@ -19,6 +9,16 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import com.destroystokyo.paper.event.server.PaperServerListPingEvent; +import com.google.common.collect.Iterators; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.server.ServerListPingEvent; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.Arrays; +import java.util.Iterator; @Name("Hide Player from Server List") @Description({"Hides a player from the hover list " + @@ -65,6 +65,12 @@ protected void execute(Event e) { Iterators.removeAll(it, Arrays.asList(players.getArray(e))); } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "hide " + players.toString(e, debug) + " from the server list"; diff --git a/src/main/java/ch/njol/skript/effects/EffIgnite.java b/src/main/java/ch/njol/skript/effects/EffIgnite.java index 20392f897d3..3c14a45e491 100644 --- a/src/main/java/ch/njol/skript/effects/EffIgnite.java +++ b/src/main/java/ch/njol/skript/effects/EffIgnite.java @@ -17,6 +17,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.util.Timespan; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Ignite/Extinguish") @Description("Lights entities on fire or extinguishes them.") @@ -78,6 +79,13 @@ public void run() { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + duration = simplifyChild(duration, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { if (ignite) diff --git a/src/main/java/ch/njol/skript/effects/EffIncendiary.java b/src/main/java/ch/njol/skript/effects/EffIncendiary.java index 181444137cf..dd807243871 100644 --- a/src/main/java/ch/njol/skript/effects/EffIncendiary.java +++ b/src/main/java/ch/njol/skript/effects/EffIncendiary.java @@ -16,6 +16,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.log.ErrorQuality; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Make Incendiary") @Description("Sets if an entity's explosion will leave behind fire. This effect is also usable in an explosion prime event.") @@ -68,6 +69,12 @@ protected void execute(Event e) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { if (isEvent) diff --git a/src/main/java/ch/njol/skript/effects/EffInvisible.java b/src/main/java/ch/njol/skript/effects/EffInvisible.java index af8d1206ef3..7a0fd600703 100644 --- a/src/main/java/ch/njol/skript/effects/EffInvisible.java +++ b/src/main/java/ch/njol/skript/effects/EffInvisible.java @@ -12,6 +12,7 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Make Invisible") @Description({ @@ -46,6 +47,12 @@ protected void execute(Event event) { entity.setInvisible(invisible); } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + livingEntities = simplifyChild(livingEntities, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "make " + livingEntities.toString(event, debug) + " " + (invisible ? "in" : "") + "visible"; diff --git a/src/main/java/ch/njol/skript/effects/EffInvulnerability.java b/src/main/java/ch/njol/skript/effects/EffInvulnerability.java index 9585f88b97f..d6caf8cded6 100644 --- a/src/main/java/ch/njol/skript/effects/EffInvulnerability.java +++ b/src/main/java/ch/njol/skript/effects/EffInvulnerability.java @@ -13,6 +13,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Make Invulnerable") @Description("Makes an entity invulnerable/not invulnerable.") @@ -44,7 +45,13 @@ protected void execute(Event event) { entity.setInvulnerable(invulnerable); } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "make " + entities.toString(event, debug) + (invulnerable ? " invulnerable" : " not invulnerable"); diff --git a/src/main/java/ch/njol/skript/effects/EffKick.java b/src/main/java/ch/njol/skript/effects/EffKick.java index ef89ad297ea..d42d7b562f5 100644 --- a/src/main/java/ch/njol/skript/effects/EffKick.java +++ b/src/main/java/ch/njol/skript/effects/EffKick.java @@ -16,6 +16,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -44,11 +45,6 @@ public boolean init(final Expression[] exprs, final int matchedPattern, final return true; } - @Override - public String toString(final @Nullable Event e, final boolean debug) { - return "kick " + players.toString(e, debug) + (reason != null ? " on account of " + reason.toString(e, debug) : ""); - } - @Override protected void execute(final Event e) { final String r = reason != null ? reason.getSingle(e) : ""; @@ -64,5 +60,17 @@ protected void execute(final Event e) { } } } + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + reason = simplifyChild(reason, step, source); + return this; + } + + @Override + public String toString(final @Nullable Event e, final boolean debug) { + return "kick " + players.toString(e, debug) + (reason != null ? " on account of " + reason.toString(e, debug) : ""); + } } diff --git a/src/main/java/ch/njol/skript/effects/EffKill.java b/src/main/java/ch/njol/skript/effects/EffKill.java index 882dc83c6e6..a5bd17acfbe 100644 --- a/src/main/java/ch/njol/skript/effects/EffKill.java +++ b/src/main/java/ch/njol/skript/effects/EffKill.java @@ -18,6 +18,7 @@ import org.bukkit.event.Event; import org.bukkit.event.entity.EntityDamageEvent; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Kill") @Description("Kills an entity.") @@ -69,6 +70,12 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "kill " + entities.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffKnockback.java b/src/main/java/ch/njol/skript/effects/EffKnockback.java index de43ed17322..c75a54289e8 100644 --- a/src/main/java/ch/njol/skript/effects/EffKnockback.java +++ b/src/main/java/ch/njol/skript/effects/EffKnockback.java @@ -15,6 +15,7 @@ import org.bukkit.event.Event; import org.bukkit.util.Vector; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Knockback") @Description("Apply the same velocity as a knockback to living entities in a direction. Mechanics such as knockback resistance will be factored in.") @@ -63,6 +64,14 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + direction = simplifyChild(direction, step, source); + strength = simplifyChild(strength, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "knockback " + entities.toString(event, debug) + " " + direction.toString(event, debug) + " with strength " + (strength != null ? strength.toString(event, debug) : "1"); diff --git a/src/main/java/ch/njol/skript/effects/EffLeash.java b/src/main/java/ch/njol/skript/effects/EffLeash.java index 4e1b0159b08..e1b74894678 100644 --- a/src/main/java/ch/njol/skript/effects/EffLeash.java +++ b/src/main/java/ch/njol/skript/effects/EffLeash.java @@ -14,6 +14,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Leash entities") @Description({ @@ -68,6 +69,13 @@ protected void execute(Event e) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + holder = simplifyChild(holder, step, source); + targets = simplifyChild(targets, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { if (leash) diff --git a/src/main/java/ch/njol/skript/effects/EffLidState.java b/src/main/java/ch/njol/skript/effects/EffLidState.java index 3bd13014836..d6f5a563dd4 100644 --- a/src/main/java/ch/njol/skript/effects/EffLidState.java +++ b/src/main/java/ch/njol/skript/effects/EffLidState.java @@ -13,6 +13,7 @@ import org.bukkit.block.Lidded; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Open/Close Lid") @Description("Open or close the lid of the block(s).") @@ -54,6 +55,12 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + blocks = simplifyChild(blocks, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return (setOpen ? "open" : "close") + " lid of " + blocks.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffLightning.java b/src/main/java/ch/njol/skript/effects/EffLightning.java index a92d6681e5c..fc88c27a34e 100644 --- a/src/main/java/ch/njol/skript/effects/EffLightning.java +++ b/src/main/java/ch/njol/skript/effects/EffLightning.java @@ -15,6 +15,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.util.Direction; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -55,7 +56,13 @@ protected void execute(final Event e) { lastSpawned = l.getWorld().strikeLightning(l); } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + locations = simplifyChild(locations, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return "strike lightning " + (effectOnly ? "effect " : "") + locations.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffLoadServerIcon.java b/src/main/java/ch/njol/skript/effects/EffLoadServerIcon.java index 93242b6bb05..2256299a7c6 100644 --- a/src/main/java/ch/njol/skript/effects/EffLoadServerIcon.java +++ b/src/main/java/ch/njol/skript/effects/EffLoadServerIcon.java @@ -1,25 +1,21 @@ package ch.njol.skript.effects; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import org.bukkit.Bukkit; -import org.bukkit.event.Event; -import org.bukkit.util.CachedServerIcon; -import org.jetbrains.annotations.Nullable; - -import ch.njol.skript.ScriptLoader; 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.RequiredPlugins; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; +import ch.njol.skript.lang.Effect; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser; import ch.njol.skript.util.AsyncEffect; import ch.njol.util.Kleenean; +import org.bukkit.Bukkit; +import org.bukkit.event.Event; +import org.bukkit.util.CachedServerIcon; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; @Name("Load Server Icon") @Description({"Loads server icons from the given files. You can get the loaded icon using the", @@ -78,9 +74,15 @@ protected void execute(Event e) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + path = simplifyChild(path, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "load server icon from file " + path.toString(e, debug); } -} \ No newline at end of file +} diff --git a/src/main/java/ch/njol/skript/effects/EffLog.java b/src/main/java/ch/njol/skript/effects/EffLog.java index 0d4f0eb2908..e5c57d02d3a 100644 --- a/src/main/java/ch/njol/skript/effects/EffLog.java +++ b/src/main/java/ch/njol/skript/effects/EffLog.java @@ -1,18 +1,5 @@ package ch.njol.skript.effects; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.HashMap; -import java.util.Locale; -import java.util.logging.Level; - -import org.skriptlang.skript.lang.script.Script; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.SkriptConfig; import ch.njol.skript.doc.Description; @@ -25,8 +12,16 @@ import ch.njol.skript.lang.Trigger; import ch.njol.skript.log.SkriptLogger; import ch.njol.skript.util.ExceptionUtils; -import ch.njol.util.Closeable; import ch.njol.util.Kleenean; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.script.Script; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.io.*; +import java.util.HashMap; +import java.util.Locale; +import java.util.logging.Level; @Name("Log") @Description({"Writes text into a .log file. Skript will write these files to /plugins/Skript/logs.", @@ -122,6 +117,13 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + messages = simplifyChild(messages, step, source); + files = simplifyChild(files, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "log " + messages.toString(event, debug) diff --git a/src/main/java/ch/njol/skript/effects/EffLook.java b/src/main/java/ch/njol/skript/effects/EffLook.java index 5b88d37a9a4..a6ffd78ba8c 100644 --- a/src/main/java/ch/njol/skript/effects/EffLook.java +++ b/src/main/java/ch/njol/skript/effects/EffLook.java @@ -18,6 +18,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; import io.papermc.paper.entity.LookAnchor; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Look At") @Description("Forces the mob(s) or player(s) to look at an entity, vector or location. Vanilla max head pitches range from 10 to 50.") @@ -99,6 +100,15 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + target = simplifyChild(target, step, source); + speed = simplifyChild(speed, step, source); + maxPitch = simplifyChild(maxPitch, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "force " + entities.toString(event, debug) + " to look at " + target.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffMakeFly.java b/src/main/java/ch/njol/skript/effects/EffMakeFly.java index ba8812f1e45..4936123e9b8 100644 --- a/src/main/java/ch/njol/skript/effects/EffMakeFly.java +++ b/src/main/java/ch/njol/skript/effects/EffMakeFly.java @@ -14,6 +14,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Make Fly") @Description("Forces a player to start/stop flying.") @@ -49,6 +50,12 @@ protected void execute(Event e) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "make " + players.toString(e, debug) + (flying ? " start " : " stop ") + "flying"; diff --git a/src/main/java/ch/njol/skript/effects/EffMakeSay.java b/src/main/java/ch/njol/skript/effects/EffMakeSay.java index a509558901f..f32a1740285 100644 --- a/src/main/java/ch/njol/skript/effects/EffMakeSay.java +++ b/src/main/java/ch/njol/skript/effects/EffMakeSay.java @@ -12,6 +12,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Make Say") @Description("Forces a player to send a message to the chat. If the message starts with a slash it will force the player to use command.") @@ -48,8 +49,15 @@ protected void execute(Event e) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + messages = simplifyChild(messages, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "make " + players.toString(e, debug) + " say " + messages.toString(e, debug); } -} \ No newline at end of file +} diff --git a/src/main/java/ch/njol/skript/effects/EffMessage.java b/src/main/java/ch/njol/skript/effects/EffMessage.java index 476ecda14fc..6b907437b3c 100644 --- a/src/main/java/ch/njol/skript/effects/EffMessage.java +++ b/src/main/java/ch/njol/skript/effects/EffMessage.java @@ -1,33 +1,29 @@ package ch.njol.skript.effects; -import java.util.List; -import java.util.UUID; - -import ch.njol.skript.registrations.Classes; -import ch.njol.skript.util.LiteralUtils; -import ch.njol.skript.util.chat.MessageComponent; -import ch.njol.util.coll.CollectionUtils; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - 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.RequiredPlugins; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.expressions.ExprColoured; import ch.njol.skript.lang.Effect; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionList; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.VariableString; +import ch.njol.skript.registrations.Classes; +import ch.njol.skript.util.LiteralUtils; import ch.njol.skript.util.chat.BungeeConverter; import ch.njol.skript.util.chat.ChatMessages; +import ch.njol.skript.util.chat.MessageComponent; import ch.njol.util.Kleenean; +import ch.njol.util.coll.CollectionUtils; import net.md_5.bungee.api.chat.BaseComponent; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.List; +import java.util.UUID; @Name("Message") @Description({"Sends a message to the given player. Only styles written", @@ -57,16 +53,13 @@ public class EffMessage extends Effect { Skript.registerEffect(EffMessage.class, "(message|send [message[s]]) %objects% [to %commandsenders%]"); } - @SuppressWarnings("NotNullFieldNotInitialized") private Expression[] messages; /** * Used for {@link EffMessage#toString(Event, boolean)} */ - @SuppressWarnings("NotNullFieldNotInitialized") private Expression messageExpr; - @SuppressWarnings("NotNullFieldNotInitialized") private Expression recipients; @Nullable @@ -143,6 +136,14 @@ private Expression[] getMessages() { return messages; } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + messageExpr = simplifyChild(messageExpr, step, source); + recipients = simplifyChild(recipients, step, source); + sender = simplifyChild(sender, step, source); + return this; + } + private String toString(Object object) { return object instanceof String ? (String) object : Classes.toString(object); } diff --git a/src/main/java/ch/njol/skript/effects/EffOp.java b/src/main/java/ch/njol/skript/effects/EffOp.java index 8b8ec5f9404..3624a02f33e 100644 --- a/src/main/java/ch/njol/skript/effects/EffOp.java +++ b/src/main/java/ch/njol/skript/effects/EffOp.java @@ -13,6 +13,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -46,7 +47,13 @@ protected void execute(final Event e) { p.setOp(op); } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return (op ? "" : "de") + "op " + players.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffOpenBook.java b/src/main/java/ch/njol/skript/effects/EffOpenBook.java index 209dab7da48..92e4ee15453 100644 --- a/src/main/java/ch/njol/skript/effects/EffOpenBook.java +++ b/src/main/java/ch/njol/skript/effects/EffOpenBook.java @@ -1,23 +1,18 @@ package ch.njol.skript.effects; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.Event; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; -import ch.njol.skript.aliases.Aliases; import ch.njol.skript.aliases.ItemType; -import ch.njol.skript.doc.Description; -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.Effect; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Open Book") @Description("Opens a written book to a player.") @@ -57,7 +52,14 @@ protected void execute(final Event e) { } } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + book = simplifyChild(book, step, source); + players = simplifyChild(players, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "open book " + book.toString(e, debug) + " to " + players.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffOpenInventory.java b/src/main/java/ch/njol/skript/effects/EffOpenInventory.java index 29a8f59bc11..aaf30237338 100644 --- a/src/main/java/ch/njol/skript/effects/EffOpenInventory.java +++ b/src/main/java/ch/njol/skript/effects/EffOpenInventory.java @@ -1,16 +1,5 @@ package ch.njol.skript.effects; -import java.util.Locale; - -import ch.njol.skript.lang.Literal; -import ch.njol.skript.registrations.Classes; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.Event; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.inventory.Inventory; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; @@ -18,8 +7,19 @@ import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Effect; import ch.njol.skript.lang.Expression; +import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.registrations.Classes; import ch.njol.util.Kleenean; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.Inventory; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.Locale; @Name("Open/Close Inventory") @Description({"Opens an inventory to a player. The player can then access and modify the inventory as if it was a chest that he just opened.", @@ -137,7 +137,14 @@ protected void execute(final Event e) { } } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + invi = simplifyChild(invi, step, source); + players = simplifyChild(players, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return (open ? "open " + (invi != null ? invi.toString(e, debug) : "crafting table") + " to " : "close inventory view of ") + players.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffPathfind.java b/src/main/java/ch/njol/skript/effects/EffPathfind.java index fed033debdf..6615fad3b31 100644 --- a/src/main/java/ch/njol/skript/effects/EffPathfind.java +++ b/src/main/java/ch/njol/skript/effects/EffPathfind.java @@ -16,6 +16,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Pathfind") @Description({"Make an entity pathfind towards a location or another entity. Not all entities can pathfind. " + @@ -70,6 +71,14 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + target = simplifyChild(target, step, source); + speed = simplifyChild(speed, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { if (target == null) diff --git a/src/main/java/ch/njol/skript/effects/EffPlaySound.java b/src/main/java/ch/njol/skript/effects/EffPlaySound.java index f0efd49446a..30964880024 100644 --- a/src/main/java/ch/njol/skript/effects/EffPlaySound.java +++ b/src/main/java/ch/njol/skript/effects/EffPlaySound.java @@ -16,6 +16,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.ArrayList; import java.util.List; @@ -181,6 +182,19 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + //noinspection DuplicatedCode + sounds = simplifyChild(sounds, step, source); + seed = simplifyChild(seed, step, source); + category = simplifyChild(category, step, source); + volume = simplifyChild(volume, step, source); + pitch = simplifyChild(pitch, step, source); + emitters = simplifyChild(emitters, step, source); + players = simplifyChild(players, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { StringBuilder builder = new StringBuilder() diff --git a/src/main/java/ch/njol/skript/effects/EffPoison.java b/src/main/java/ch/njol/skript/effects/EffPoison.java index af04ccd4f13..82d8664fb81 100644 --- a/src/main/java/ch/njol/skript/effects/EffPoison.java +++ b/src/main/java/ch/njol/skript/effects/EffPoison.java @@ -16,6 +16,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.util.Timespan; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -52,11 +53,6 @@ public boolean init(final Expression[] exprs, final int matchedPattern, final return true; } - @Override - public String toString(final @Nullable Event e, final boolean debug) { - return "poison " + entites.toString(e, debug); - } - @Override protected void execute(final Event e) { for (final LivingEntity le : entites.getArray(e)) { @@ -77,5 +73,17 @@ protected void execute(final Event e) { } } } + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entites = simplifyChild(entites, step, source); + duration = simplifyChild(duration, step, source); + return this; + } + + @Override + public String toString(final @Nullable Event e, final boolean debug) { + return "poison " + entites.toString(e, debug); + } } diff --git a/src/main/java/ch/njol/skript/effects/EffPotion.java b/src/main/java/ch/njol/skript/effects/EffPotion.java index ed347492860..fc64a2ed08d 100644 --- a/src/main/java/ch/njol/skript/effects/EffPotion.java +++ b/src/main/java/ch/njol/skript/effects/EffPotion.java @@ -17,6 +17,7 @@ import ch.njol.skript.util.PotionEffectUtils; import ch.njol.skript.util.Timespan; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Potion Effects") @Description("Apply or remove potion effects to/from entities.") @@ -128,6 +129,17 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + //noinspection DuplicatedCode + effects = simplifyChild(effects, step, source); + potions = simplifyChild(potions, step, source); + entities = simplifyChild(entities, step, source); + duration = simplifyChild(duration, step, source); + tier = simplifyChild(tier, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { if (potionEffect) { diff --git a/src/main/java/ch/njol/skript/effects/EffPush.java b/src/main/java/ch/njol/skript/effects/EffPush.java index 6dedfd3f7ca..79453a50670 100644 --- a/src/main/java/ch/njol/skript/effects/EffPush.java +++ b/src/main/java/ch/njol/skript/effects/EffPush.java @@ -15,6 +15,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.util.Direction; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -66,7 +67,15 @@ protected void execute(final Event e) { en.setVelocity(en.getVelocity().add(mod)); // REMIND add NoCheatPlus exception to players } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + direction = simplifyChild(direction, step, source); + speed = simplifyChild(speed, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return "push " + entities.toString(e, debug) + " " + direction.toString(e, debug) + (speed != null ? " at speed " + speed.toString(e, debug) : ""); diff --git a/src/main/java/ch/njol/skript/effects/EffPvP.java b/src/main/java/ch/njol/skript/effects/EffPvP.java index c97cd92e142..b8ff07e644c 100644 --- a/src/main/java/ch/njol/skript/effects/EffPvP.java +++ b/src/main/java/ch/njol/skript/effects/EffPvP.java @@ -13,6 +13,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -46,7 +47,13 @@ protected void execute(final Event e) { w.setPVP(enable); } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + worlds = simplifyChild(worlds, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return (enable ? "enable" : "disable") + " PvP in " + worlds.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffReplace.java b/src/main/java/ch/njol/skript/effects/EffReplace.java index 0141ad2fd8d..6d6055c2551 100644 --- a/src/main/java/ch/njol/skript/effects/EffReplace.java +++ b/src/main/java/ch/njol/skript/effects/EffReplace.java @@ -21,6 +21,7 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.ArrayList; import java.util.List; @@ -170,6 +171,14 @@ private void replace(Event event, Object[] needles, Expression haystackExpr) return replaceFunction; } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + haystack = simplifyChild(haystack, step, source); + needles = simplifyChild(needles, step, source); + replacement = simplifyChild(replacement, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { SyntaxStringBuilder builder = new SyntaxStringBuilder(event, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffResetTitle.java b/src/main/java/ch/njol/skript/effects/EffResetTitle.java index 541038b42fb..3c47b12ba34 100644 --- a/src/main/java/ch/njol/skript/effects/EffResetTitle.java +++ b/src/main/java/ch/njol/skript/effects/EffResetTitle.java @@ -13,6 +13,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Title - Reset") @Description("Resets the title of the player to the default values.") @@ -41,7 +42,13 @@ protected void execute(Event e) { for (Player recipient : recipients.getArray(e)) recipient.resetTitle(); } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + recipients = simplifyChild(recipients, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "reset the title of " + recipients.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffRespawn.java b/src/main/java/ch/njol/skript/effects/EffRespawn.java index b0460be02d1..4ff8373df8d 100644 --- a/src/main/java/ch/njol/skript/effects/EffRespawn.java +++ b/src/main/java/ch/njol/skript/effects/EffRespawn.java @@ -17,6 +17,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.log.ErrorQuality; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Force Respawn") @Description("Forces player(s) to respawn if they are dead. If this is called without delay from death event, one tick is waited before respawn attempt.") @@ -66,6 +67,12 @@ public void run() { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return "force " + players.toString(e, debug) + " to respawn"; diff --git a/src/main/java/ch/njol/skript/effects/EffReturn.java b/src/main/java/ch/njol/skript/effects/EffReturn.java index ab4dafbe16b..cdfa3a129ee 100644 --- a/src/main/java/ch/njol/skript/effects/EffReturn.java +++ b/src/main/java/ch/njol/skript/effects/EffReturn.java @@ -16,6 +16,7 @@ import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnknownNullability; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.List; @@ -115,6 +116,12 @@ public ExecutionIntent executionIntent() { return ExecutionIntent.stopSections(breakLevels); } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + value = simplifyChild(value, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "return " + value.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffRing.java b/src/main/java/ch/njol/skript/effects/EffRing.java index ba441f9b22c..b567c50e9ea 100644 --- a/src/main/java/ch/njol/skript/effects/EffRing.java +++ b/src/main/java/ch/njol/skript/effects/EffRing.java @@ -18,6 +18,7 @@ import org.bukkit.entity.Entity; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Ring Bell") @Description({ @@ -83,6 +84,14 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + blocks = simplifyChild(blocks, step, source); + entity = simplifyChild(entity, step, source); + direction = simplifyChild(direction, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return (entity != null ? "make " + entity.toString(event, debug) + " " : "") + diff --git a/src/main/java/ch/njol/skript/effects/EffRun.java b/src/main/java/ch/njol/skript/effects/EffRun.java index 91e31119162..8739dd73c50 100644 --- a/src/main/java/ch/njol/skript/effects/EffRun.java +++ b/src/main/java/ch/njol/skript/effects/EffRun.java @@ -12,6 +12,7 @@ import ch.njol.util.Kleenean; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import org.skriptlang.skript.util.Executable; @Name("Run (Experimental)") @@ -80,6 +81,13 @@ protected void execute(Event event) { task.execute(event, arguments); } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + executable = simplifyChild(executable, step, source); + arguments = simplifyChild(arguments, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { if (hasArguments) diff --git a/src/main/java/ch/njol/skript/effects/EffScriptFile.java b/src/main/java/ch/njol/skript/effects/EffScriptFile.java index d49d41d3112..060ad484b05 100644 --- a/src/main/java/ch/njol/skript/effects/EffScriptFile.java +++ b/src/main/java/ch/njol/skript/effects/EffScriptFile.java @@ -17,6 +17,7 @@ import ch.njol.util.Kleenean; import ch.njol.util.OpenCloseable; import org.bukkit.event.Event; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.io.File; import java.io.FileFilter; @@ -175,6 +176,13 @@ private void unloadScripts(File file) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + scriptExpression = simplifyChild(scriptExpression, step, source); + scriptNameExpression = simplifyChild(scriptNameExpression, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { String start = switch (mark) { diff --git a/src/main/java/ch/njol/skript/effects/EffSendBlockChange.java b/src/main/java/ch/njol/skript/effects/EffSendBlockChange.java index d9cdbb3a4cf..40166357381 100644 --- a/src/main/java/ch/njol/skript/effects/EffSendBlockChange.java +++ b/src/main/java/ch/njol/skript/effects/EffSendBlockChange.java @@ -18,6 +18,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Send Block Change") @Description("Makes a player see a block as something it really isn't. BlockData support is only for MC 1.13+") @@ -87,6 +88,14 @@ protected void execute(Event e) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + blocks = simplifyChild(blocks, step, source); + as = simplifyChild(as, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return String.format( diff --git a/src/main/java/ch/njol/skript/effects/EffSendResourcePack.java b/src/main/java/ch/njol/skript/effects/EffSendResourcePack.java index 25da37b69db..10932a45097 100644 --- a/src/main/java/ch/njol/skript/effects/EffSendResourcePack.java +++ b/src/main/java/ch/njol/skript/effects/EffSendResourcePack.java @@ -14,6 +14,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; import ch.njol.util.StringUtils; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Send Resource Pack") @Description({"Request that the player's client download and switch resource packs. The client will download ", @@ -87,6 +88,14 @@ protected void execute(Event e) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + url = simplifyChild(url, step, source); + hash = simplifyChild(hash, step, source); + recipients = simplifyChild(recipients, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "send the resource pack from " + url.toString(e, debug) + diff --git a/src/main/java/ch/njol/skript/effects/EffSendTitle.java b/src/main/java/ch/njol/skript/effects/EffSendTitle.java index 89b8e3c6bff..a5d4f2495a6 100644 --- a/src/main/java/ch/njol/skript/effects/EffSendTitle.java +++ b/src/main/java/ch/njol/skript/effects/EffSendTitle.java @@ -14,6 +14,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.util.Timespan; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Title - Send") @Description({ @@ -103,7 +104,19 @@ protected void execute(final Event e) { p.sendTitle(title, subtitle); } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + //noinspection DuplicatedCode + title = simplifyChild(title, step, source); + subtitle = simplifyChild(subtitle, step, source); + recipients = simplifyChild(recipients, step, source); + stay = simplifyChild(stay, step, source); + fadeIn = simplifyChild(fadeIn, step, source); + fadeOut = simplifyChild(fadeOut, step, source); + return this; + } + // TODO: util method to simplify this @Override public String toString(final @Nullable Event e, final boolean debug) { diff --git a/src/main/java/ch/njol/skript/effects/EffShear.java b/src/main/java/ch/njol/skript/effects/EffShear.java index 0afb3b8aa60..ceb3d32d8cd 100644 --- a/src/main/java/ch/njol/skript/effects/EffShear.java +++ b/src/main/java/ch/njol/skript/effects/EffShear.java @@ -18,6 +18,7 @@ import org.bukkit.entity.Snowman; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Shear") @Description({ @@ -76,7 +77,13 @@ protected void execute(Event event) { } } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entity = simplifyChild(entity, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return (shear ? "" : "un") + "shear " + entity.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffSilence.java b/src/main/java/ch/njol/skript/effects/EffSilence.java index ffe8a72ed85..f53e3330daa 100644 --- a/src/main/java/ch/njol/skript/effects/EffSilence.java +++ b/src/main/java/ch/njol/skript/effects/EffSilence.java @@ -13,6 +13,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Silence Entity") @Description("Controls whether or not an entity is silent.") @@ -46,7 +47,13 @@ protected void execute(Event e) { entity.setSilent(silence); } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return (silence ? "silence " : "unsilence ") + entities.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffSort.java b/src/main/java/ch/njol/skript/effects/EffSort.java index 248c4013568..21933ee723e 100644 --- a/src/main/java/ch/njol/skript/effects/EffSort.java +++ b/src/main/java/ch/njol/skript/effects/EffSort.java @@ -21,6 +21,7 @@ import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnknownNullability; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.HashSet; import java.util.Iterator; @@ -138,6 +139,13 @@ public boolean hasIndices() { return currentIndex; } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + // don't simplify unsortedObjects, it's a variable + mappingExpr = simplifyChild(mappingExpr, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "sort " + unsortedObjects.toString(event, debug) diff --git a/src/main/java/ch/njol/skript/effects/EffStopSound.java b/src/main/java/ch/njol/skript/effects/EffStopSound.java index b6e3e69b7b7..d46aa44eb46 100644 --- a/src/main/java/ch/njol/skript/effects/EffStopSound.java +++ b/src/main/java/ch/njol/skript/effects/EffStopSound.java @@ -12,6 +12,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.regex.Pattern; @@ -91,6 +92,14 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + sounds = simplifyChild(sounds, step, source); + category = simplifyChild(category, step, source); + players = simplifyChild(players, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return (allSounds ? "stop all sounds " : "stop sound " + sounds.toString(event, debug)) + diff --git a/src/main/java/ch/njol/skript/effects/EffSwingHand.java b/src/main/java/ch/njol/skript/effects/EffSwingHand.java index 8246eb783c6..5cb5afa9bdb 100644 --- a/src/main/java/ch/njol/skript/effects/EffSwingHand.java +++ b/src/main/java/ch/njol/skript/effects/EffSwingHand.java @@ -14,6 +14,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Swing Hand") @Description("Makes an entity swing their hand. This does nothing if the entity does not have an animation for swinging their hand.") @@ -58,7 +59,13 @@ protected void execute(Event e) { } } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "make " + entities.toString(e, debug) + " swing their " + (isMainHand ? "hand" : "off hand"); diff --git a/src/main/java/ch/njol/skript/effects/EffTame.java b/src/main/java/ch/njol/skript/effects/EffTame.java index bcad5fa23af..b78598e53fd 100644 --- a/src/main/java/ch/njol/skript/effects/EffTame.java +++ b/src/main/java/ch/njol/skript/effects/EffTame.java @@ -13,6 +13,7 @@ import org.bukkit.entity.Tameable; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Tame / Untame") @Description("Tame a tameable entity (horse, parrot, cat, etc.).") @@ -46,6 +47,12 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return (tame ? "tame " : "untame ") + entities.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffTeleport.java b/src/main/java/ch/njol/skript/effects/EffTeleport.java index 1dc3fe781b4..2b6920f7d63 100644 --- a/src/main/java/ch/njol/skript/effects/EffTeleport.java +++ b/src/main/java/ch/njol/skript/effects/EffTeleport.java @@ -20,6 +20,7 @@ import org.bukkit.event.player.PlayerRespawnEvent; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.Arrays; import java.util.Objects; @@ -171,6 +172,14 @@ protected void execute(Event event) { assert false; } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + location = simplifyChild(location, step, source); + teleportFlags = simplifyChild(teleportFlags, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { SyntaxStringBuilder builder = new SyntaxStringBuilder(event, debug) diff --git a/src/main/java/ch/njol/skript/effects/EffToggle.java b/src/main/java/ch/njol/skript/effects/EffToggle.java index 91bcd7d4344..f31e7c0d777 100644 --- a/src/main/java/ch/njol/skript/effects/EffToggle.java +++ b/src/main/java/ch/njol/skript/effects/EffToggle.java @@ -1,17 +1,5 @@ package ch.njol.skript.effects; -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.MethodType; - -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.data.BlockData; -import org.bukkit.block.data.Openable; -import org.bukkit.block.data.Powerable; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; @@ -21,6 +9,13 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.bukkit.block.Block; +import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.Openable; +import org.bukkit.block.data.Powerable; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -76,6 +71,12 @@ else if (data instanceof Powerable) // power = NOT power } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + blocks = simplifyChild(blocks, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return "toggle " + blocks.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffToggleCanPickUpItems.java b/src/main/java/ch/njol/skript/effects/EffToggleCanPickUpItems.java index 41810ff4dfe..9dc56bb6e30 100644 --- a/src/main/java/ch/njol/skript/effects/EffToggleCanPickUpItems.java +++ b/src/main/java/ch/njol/skript/effects/EffToggleCanPickUpItems.java @@ -12,6 +12,7 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Toggle Picking Up Items") @Description("Determines whether living entities are able to pick up items or not") @@ -49,6 +50,12 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { if (allowPickUp) { diff --git a/src/main/java/ch/njol/skript/effects/EffToggleFlight.java b/src/main/java/ch/njol/skript/effects/EffToggleFlight.java index 35a5375a382..69db8b0281c 100644 --- a/src/main/java/ch/njol/skript/effects/EffToggleFlight.java +++ b/src/main/java/ch/njol/skript/effects/EffToggleFlight.java @@ -13,6 +13,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Toggle Flight") @Description("Toggle the flight mode of a player.") @@ -45,6 +46,12 @@ protected void execute(final Event e) { player.setAllowFlight(allow); } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return "allow flight to " + players.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffTooltip.java b/src/main/java/ch/njol/skript/effects/EffTooltip.java index f9fa46e7a94..46143c416e6 100644 --- a/src/main/java/ch/njol/skript/effects/EffTooltip.java +++ b/src/main/java/ch/njol/skript/effects/EffTooltip.java @@ -15,6 +15,7 @@ import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Item Tooltips") @Description({ @@ -39,7 +40,6 @@ public class EffTooltip extends Effect { } } - @SuppressWarnings("NotNullFieldNotInitialized") private Expression items; private boolean hide, entire; @@ -69,6 +69,12 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + items = simplifyChild(items, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return (hide ? "hide" : "show") + " the " + (entire ? "entire" : "additional") + " tooltip of " + items.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffTransform.java b/src/main/java/ch/njol/skript/effects/EffTransform.java index d4717dd254a..60b0e39ccaa 100644 --- a/src/main/java/ch/njol/skript/effects/EffTransform.java +++ b/src/main/java/ch/njol/skript/effects/EffTransform.java @@ -21,6 +21,7 @@ import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnknownNullability; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.HashMap; import java.util.HashSet; @@ -135,6 +136,13 @@ public boolean hasIndices() { return currentIndex; } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + // don't evaluate the input values until the effect is executed + mappingExpr = simplifyChild(mappingExpr, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "transform " + unmappedObjects.toString(event, debug) + " using " + mappingExpr.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffTree.java b/src/main/java/ch/njol/skript/effects/EffTree.java index a9369177231..456b3c3a058 100644 --- a/src/main/java/ch/njol/skript/effects/EffTree.java +++ b/src/main/java/ch/njol/skript/effects/EffTree.java @@ -15,6 +15,7 @@ import ch.njol.skript.util.Direction; import ch.njol.skript.util.StructureType; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -55,7 +56,14 @@ public void execute(final Event e) { type.grow(l.getBlock()); } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + blocks = simplifyChild(blocks, step, source); + type = simplifyChild(type, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return "grow tree of type " + type.toString(e, debug) + " " + blocks.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/effects/EffVehicle.java b/src/main/java/ch/njol/skript/effects/EffVehicle.java index 39e9bd58e49..1e8c03710ea 100644 --- a/src/main/java/ch/njol/skript/effects/EffVehicle.java +++ b/src/main/java/ch/njol/skript/effects/EffVehicle.java @@ -15,6 +15,7 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -88,7 +89,14 @@ protected void execute(final Event e) { } } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + vehicles = simplifyChild(vehicles, step, source); + passengers = simplifyChild(passengers, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { final Expression vehicles = this.vehicles; diff --git a/src/main/java/ch/njol/skript/effects/EffVisualEffect.java b/src/main/java/ch/njol/skript/effects/EffVisualEffect.java index e0a6652ae09..23f02860b40 100644 --- a/src/main/java/ch/njol/skript/effects/EffVisualEffect.java +++ b/src/main/java/ch/njol/skript/effects/EffVisualEffect.java @@ -18,6 +18,7 @@ import ch.njol.skript.util.Direction; import ch.njol.skript.util.visual.VisualEffect; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Play Effect") @Description({"Plays a visual effect at a given location or on a given entity.", @@ -33,11 +34,8 @@ public class EffVisualEffect extends Effect { "(play|show) %number% %visualeffects% (on|%directions%) %locations% [(to %-players%|in (radius|range) of %-number%)]"); } - @SuppressWarnings("NotNullFieldNotInitialized") private Expression effects; - @SuppressWarnings("NotNullFieldNotInitialized") private Expression direction; - @SuppressWarnings("NotNullFieldNotInitialized") private Expression where; @Nullable @@ -119,7 +117,19 @@ protected void execute(Event e) { } } } - + + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + //noinspection DuplicatedCode + effects = simplifyChild(effects, step, source); + direction = simplifyChild(direction, step, source); + where = simplifyChild(where, step, source); + players = simplifyChild(players, step, source); + radius = simplifyChild(radius, step, source); + count = simplifyChild(count, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "play " + effects.toString(e, debug) + " " + direction.toString(e, debug) + " " diff --git a/src/main/java/ch/njol/skript/effects/EffWorldLoad.java b/src/main/java/ch/njol/skript/effects/EffWorldLoad.java index d1198a56e90..9abe05bdf5d 100644 --- a/src/main/java/ch/njol/skript/effects/EffWorldLoad.java +++ b/src/main/java/ch/njol/skript/effects/EffWorldLoad.java @@ -15,6 +15,7 @@ import org.bukkit.WorldCreator; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Load World") @Description({ @@ -72,6 +73,13 @@ protected void execute(Event event) { } } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + worlds = simplifyChild(worlds, step, source); + environment = simplifyChild(environment, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { if (load) diff --git a/src/main/java/ch/njol/skript/effects/EffWorldSave.java b/src/main/java/ch/njol/skript/effects/EffWorldSave.java index 760b4459d87..901ad422cbc 100644 --- a/src/main/java/ch/njol/skript/effects/EffWorldSave.java +++ b/src/main/java/ch/njol/skript/effects/EffWorldSave.java @@ -12,6 +12,7 @@ import org.bukkit.World; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Save World") @Description({ @@ -44,6 +45,12 @@ protected void execute(Event event) { world.save(); } + @Override + public Effect simplify(Step step, @Nullable Simplifiable source) { + worlds = simplifyChild(worlds, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "save the world(s) " + worlds.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprAlphabetList.java b/src/main/java/ch/njol/skript/expressions/ExprAlphabetList.java index fa02485b2b7..0aeeade5300 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAlphabetList.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAlphabetList.java @@ -1,10 +1,5 @@ package ch.njol.skript.expressions; -import java.util.Arrays; - -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; @@ -12,9 +7,15 @@ import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; +import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.Arrays; @Name("Alphabetical Sort") @Description("Sorts given strings in alphabetical order.") @@ -51,7 +52,17 @@ public Class getReturnType() { @Override public boolean isSingle() { - return false; + return texts.isSingle(); + } + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + texts = simplifyChild(texts, step, source); + if (texts.isSingle()) + return texts; + if (texts instanceof Literal) + return getAsSimplifiedLiteral(); + return this; } @Override @@ -59,4 +70,4 @@ public String toString(@Nullable Event e, boolean debug) { return "alphabetically sorted strings: " + texts.toString(e, debug); } -} \ No newline at end of file +} diff --git a/src/main/java/ch/njol/skript/expressions/ExprAmount.java b/src/main/java/ch/njol/skript/expressions/ExprAmount.java index 375f01cdb36..e8052248c68 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAmount.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAmount.java @@ -6,18 +6,15 @@ 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.ExpressionList; -import ch.njol.skript.lang.ExpressionType; -import ch.njol.skript.lang.Literal; +import ch.njol.skript.lang.*; import ch.njol.skript.lang.SkriptParser.ParseResult; -import ch.njol.skript.lang.Variable; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.skript.lang.util.common.AnyAmount; import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.Map; @@ -161,6 +158,18 @@ public Class getReturnType() { return any != null ? Number.class : Long.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + exprs = (ExpressionList) simplifyChild(exprs, step, source); + any = simplifyChild(any, step, source); + + // todo: when can any be simplified safely? + + if (exprs instanceof LiteralList) + return getAsSimplifiedLiteral(); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { if (any != null) diff --git a/src/main/java/ch/njol/skript/expressions/ExprAmountOfItems.java b/src/main/java/ch/njol/skript/expressions/ExprAmountOfItems.java index c5d378e3a07..a07903f1126 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAmountOfItems.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAmountOfItems.java @@ -15,6 +15,7 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Amount of Items") @Description("Counts how many of a particular item type are in a given inventory.") @@ -26,9 +27,7 @@ public class ExprAmountOfItems extends SimpleExpression { Skript.registerExpression(ExprAmountOfItems.class, Long.class, ExpressionType.PROPERTY, "[the] (amount|number) of %itemtypes% (in|of) %inventories%"); } - @SuppressWarnings("NotNullFieldNotInitialized") private Expression items; - @SuppressWarnings("NotNullFieldNotInitialized") private Expression inventories; @Override @@ -67,7 +66,14 @@ public Class getReturnType() { public boolean isSingle() { return true; } - + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + items = simplifyChild(items, step, source); + inventories = simplifyChild(inventories, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "the number of " + items.toString(e, debug) + " in " + inventories.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprAngle.java b/src/main/java/ch/njol/skript/expressions/ExprAngle.java index 208a0ee209e..e23d3c57842 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprAngle.java +++ b/src/main/java/ch/njol/skript/expressions/ExprAngle.java @@ -7,11 +7,13 @@ import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; +import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Angle") @Description({ @@ -69,6 +71,14 @@ public Class getReturnType() { return Number.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + angle = simplifyChild(angle, step, source); + if (angle instanceof Literal) + return getAsSimplifiedLiteral(); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return angle.toString(event, debug) + " in " + (isRadians ? "degrees" : "radians"); diff --git a/src/main/java/ch/njol/skript/expressions/ExprBannerPatterns.java b/src/main/java/ch/njol/skript/expressions/ExprBannerPatterns.java index 51ddc892828..bdb3669b794 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBannerPatterns.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBannerPatterns.java @@ -24,7 +24,9 @@ import org.bukkit.event.Event; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BannerMeta; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.ArrayList; import java.util.Arrays; @@ -56,23 +58,21 @@ public class ExprBannerPatterns extends PropertyExpression { ); } - private Expression objects; private Expression patternNumber = null; @Override public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { if (matchedPattern <= 1) { - objects = exprs[0]; + setExpr(exprs[0]); } else if (matchedPattern == 2) { //noinspection unchecked patternNumber = (Expression) exprs[0]; - objects = exprs[1]; + setExpr(exprs[1]); } else { //noinspection unchecked patternNumber = (Expression) exprs[1]; - objects = exprs[0]; + setExpr(exprs[0]); } - setExpr(objects); return true; } @@ -80,7 +80,7 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye protected Pattern @Nullable [] get(Event event, Object[] source) { List patterns = new ArrayList<>(); Integer placement = patternNumber != null ? patternNumber.getSingle(event) : null; - for (Object object : objects.getArray(event)) { + for (Object object : getExpr().getArray(event)) { if (object instanceof Block block) { if (!(block.getState() instanceof Banner banner)) continue; @@ -234,7 +234,7 @@ public void change(Event event, Object @Nullable [] delta, ChangeMode mode) { blockChanger = getAllBlockChanger(mode, patternList); } - for (Object object : objects.getArray(event)) { + for (Object object : getExpr().getArray(event)) { if (object instanceof Block block && block.getState() instanceof Banner banner) { blockChanger.accept(banner); banner.update(true, false); @@ -266,6 +266,13 @@ public Class getReturnType() { return Pattern.class; } + @Override + public Expression simplify(@NotNull Step step, @Nullable Simplifiable source) { + super.simplify(step, source); + patternNumber = simplifyChild(patternNumber, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { SyntaxStringBuilder builder = new SyntaxStringBuilder(event, debug); @@ -274,7 +281,7 @@ public String toString(@Nullable Event event, boolean debug) { } else { builder.append("banner patterns"); } - builder.append("of", objects); + builder.append("of", getExpr()); return builder.toString(); } diff --git a/src/main/java/ch/njol/skript/expressions/ExprBlockSound.java b/src/main/java/ch/njol/skript/expressions/ExprBlockSound.java index ab3bd0a7d4c..4574405f90d 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBlockSound.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBlockSound.java @@ -18,6 +18,7 @@ import org.bukkit.event.Event; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.Objects; @@ -128,6 +129,12 @@ public boolean isSingle() { return String.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + objects = simplifyChild(objects, step, source); + return this; + } + @Override public @NotNull String toString(@Nullable Event event, boolean debug) { return this.soundType.name().toLowerCase() + " sound of " + objects.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprBlockSphere.java b/src/main/java/ch/njol/skript/expressions/ExprBlockSphere.java index bce1ce8e435..0a55a710881 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBlockSphere.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBlockSphere.java @@ -1,13 +1,5 @@ package ch.njol.skript.expressions; -import java.util.ArrayList; -import java.util.Iterator; - -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; @@ -21,6 +13,14 @@ import ch.njol.util.Kleenean; import ch.njol.util.coll.iterator.EmptyIterator; import ch.njol.util.coll.iterator.IteratorIterable; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.ArrayList; +import java.util.Iterator; /** * @author Peter Güttinger @@ -75,12 +75,7 @@ protected Block[] get(final Event e) { public Class getReturnType() { return Block.class; } - - @Override - public String toString(final @Nullable Event e, final boolean debug) { - return "the blocks in radius " + radius + " around " + center.toString(e, debug); - } - + @Override public boolean isLoopOf(final String s) { return s.equalsIgnoreCase("block"); @@ -90,5 +85,17 @@ public boolean isLoopOf(final String s) { public boolean isSingle() { return false; } - + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + center = center.simplify(step, source); + radius = radius.simplify(step, source); + return this; + } + + @Override + public String toString(final @Nullable Event e, final boolean debug) { + return "the blocks in radius " + radius + " around " + center.toString(e, debug); + } + } diff --git a/src/main/java/ch/njol/skript/expressions/ExprBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprBlocks.java index 46122dccbff..9dea4ac43bc 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBlocks.java @@ -1,16 +1,5 @@ package ch.njol.skript.expressions; -import java.util.Iterator; - -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.event.Event; -import org.bukkit.util.Vector; -import org.jetbrains.annotations.Nullable; - -import com.google.common.collect.Lists; - import ch.njol.skript.Skript; import ch.njol.skript.SkriptConfig; import ch.njol.skript.doc.Description; @@ -26,6 +15,16 @@ import ch.njol.skript.util.Direction; import ch.njol.util.Kleenean; import ch.njol.util.coll.iterator.ArrayIterator; +import com.google.common.collect.Lists; +import org.bukkit.Chunk; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.event.Event; +import org.bukkit.util.Vector; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.Iterator; @Name("Blocks") @Description({"Blocks relative to other blocks or between other blocks. Can be used to get blocks relative to other blocks or for looping.", @@ -177,6 +176,15 @@ public boolean isSingle() { return false; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + direction = simplifyChild(direction, step, source); + end = simplifyChild(end, step, source); + chunk = simplifyChild(chunk, step, source); + from = simplifyChild(from, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { if (chunk != null) { diff --git a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java index d7c28425942..d0981709850 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java @@ -1,16 +1,5 @@ package ch.njol.skript.expressions; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -import org.bukkit.event.Event; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.BookMeta; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.ServerPlatform; import ch.njol.skript.Skript; import ch.njol.skript.aliases.ItemType; @@ -29,6 +18,17 @@ import ch.njol.util.coll.CollectionUtils; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer; +import org.bukkit.event.Event; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.BookMeta; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; @Name("Book Pages") @Description({ @@ -245,6 +245,13 @@ public Class getReturnType() { return String.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + items = simplifyChild(items, step, source); + page = simplifyChild(page, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return (page != null ? "page " + page.toString(event, debug) : "book pages") + " of " + items.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprBreakSpeed.java b/src/main/java/ch/njol/skript/expressions/ExprBreakSpeed.java index 82dd4bacd50..7553c76d6cc 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBreakSpeed.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBreakSpeed.java @@ -15,6 +15,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.ArrayList; @@ -57,12 +58,12 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye @Nullable protected Float[] get(Event event) { ArrayList speeds = new ArrayList<>(); + Player[] players = this.players.getArray(event); for (Block block : this.blocks.getArray(event)) { - for (Player player : this.players.getArray(event)) { + for (Player player : players) { speeds.add(block.getBreakSpeed(player)); } } - return speeds.toArray(new Float[0]); } @@ -76,8 +77,16 @@ public Class getReturnType() { return Float.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + blocks = blocks.simplify(step, source); + players = players.simplify(step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "break speed of " + blocks.toString(event, debug) + " for " + players.toString(event, debug); } + } diff --git a/src/main/java/ch/njol/skript/expressions/ExprCharacters.java b/src/main/java/ch/njol/skript/expressions/ExprCharacters.java index ba3a8509e5e..36ca6d95e44 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprCharacters.java +++ b/src/main/java/ch/njol/skript/expressions/ExprCharacters.java @@ -7,12 +7,14 @@ import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; +import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; import org.apache.commons.lang.ArrayUtils; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Characters Between") @Description({ @@ -95,8 +97,18 @@ public Class getReturnType() { return String.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + start = simplifyChild(start, step, source); + end = simplifyChild(end, step, source); + if (start instanceof Literal && end instanceof Literal) + return getAsSimplifiedLiteral(); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "all the " + (isAlphanumeric ? "alphanumeric " : "") + "characters between " + start.toString(event, debug) + " and " + end.toString(event, debug); } + } diff --git a/src/main/java/ch/njol/skript/expressions/ExprChestInventory.java b/src/main/java/ch/njol/skript/expressions/ExprChestInventory.java index ee1dd7546cb..d11cdd49727 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprChestInventory.java +++ b/src/main/java/ch/njol/skript/expressions/ExprChestInventory.java @@ -24,6 +24,7 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer; import net.md_5.bungee.api.chat.BaseComponent; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Custom Chest Inventory") @Description("Returns a chest inventory with the given amount of rows and the name. Use the open inventory effect to open it.") @@ -101,6 +102,13 @@ public Class getReturnType() { return Inventory.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + rows = simplifyChild(rows, step, source); + name = simplifyChild(name, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "chest inventory named " + diff --git a/src/main/java/ch/njol/skript/expressions/ExprChunk.java b/src/main/java/ch/njol/skript/expressions/ExprChunk.java index 4131f30bba3..9490c8a6134 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprChunk.java +++ b/src/main/java/ch/njol/skript/expressions/ExprChunk.java @@ -1,7 +1,5 @@ package ch.njol.skript.expressions; -import java.util.Arrays; - import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; import ch.njol.skript.doc.Description; @@ -19,6 +17,9 @@ import org.bukkit.World; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.Arrays; @Name("Chunk") @Description("Returns the chunk of a block, location or entity is in, or a list of the loaded chunks of a world.") @@ -97,7 +98,14 @@ public boolean isSingle() { public Class getReturnType() { return Chunk.class; } - + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + locations = simplifyChild(locations, step, source); + worlds = simplifyChild(worlds, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { if (pattern == 2) diff --git a/src/main/java/ch/njol/skript/expressions/ExprCommandInfo.java b/src/main/java/ch/njol/skript/expressions/ExprCommandInfo.java index 8e88a9751b7..e6ccbe093a2 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprCommandInfo.java +++ b/src/main/java/ch/njol/skript/expressions/ExprCommandInfo.java @@ -1,14 +1,19 @@ package ch.njol.skript.expressions; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.Objects; -import java.util.function.Function; - +import ch.njol.skript.Skript; +import ch.njol.skript.command.Commands; import ch.njol.skript.command.ScriptCommand; import ch.njol.skript.command.ScriptCommandEvent; +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.util.SimpleExpression; import ch.njol.skript.util.Utils; +import ch.njol.util.Kleenean; import org.bukkit.command.Command; import org.bukkit.command.CommandMap; import org.bukkit.command.PluginCommand; @@ -17,18 +22,13 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.server.ServerCommandEvent; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; -import ch.njol.skript.Skript; -import ch.njol.skript.command.Commands; -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.util.SimpleExpression; -import ch.njol.util.Kleenean; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Objects; +import java.util.function.Function; @Name("Command Info") @Description("Get information about a command.") @@ -141,6 +141,12 @@ public Class getReturnType() { return String.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + commandName = simplifyChild(commandName, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "the " + type.name().toLowerCase(Locale.ENGLISH).replace("_", " ") + diff --git a/src/main/java/ch/njol/skript/expressions/ExprDamagedItem.java b/src/main/java/ch/njol/skript/expressions/ExprDamagedItem.java index 2e7f7a58ad2..3057ade6d6c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprDamagedItem.java +++ b/src/main/java/ch/njol/skript/expressions/ExprDamagedItem.java @@ -1,6 +1,7 @@ package ch.njol.skript.expressions; import org.bukkit.event.Event; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; @@ -14,6 +15,7 @@ import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Damaged Item") @Description("Directly damages an item. In MC versions 1.12.2 and lower, this can be used to apply data values to items/blocks") @@ -56,7 +58,14 @@ protected ItemType[] get(Event e, ItemType[] source) { public Class getReturnType() { return ItemType.class; } - + + @Override + public Expression simplify(@NotNull Step step, @Nullable Simplifiable source) { + super.simplify(step, source); + damage = simplifyChild(damage, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, boolean debug) { return getExpr().toString(e, debug) + " with damage value " + damage.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprDateAgoLater.java b/src/main/java/ch/njol/skript/expressions/ExprDateAgoLater.java index 4d806e2037e..2bc79e092e8 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprDateAgoLater.java +++ b/src/main/java/ch/njol/skript/expressions/ExprDateAgoLater.java @@ -14,6 +14,7 @@ import ch.njol.util.Kleenean; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Date Ago/Later") @Description("A date the specified timespan before/after another date.") @@ -66,7 +67,14 @@ public Class getReturnType() { return Date.class; } - @Override + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + timespan = simplifyChild(timespan, step, source); + date = simplifyChild(date, step, source); + return this; + } + + @Override public String toString(@Nullable Event e, boolean debug) { return timespan.toString(e, debug) + " " + (ago ? (date != null ? "before " + date.toString(e, debug) : "ago") : (date != null ? "after " + date.toString(e, debug) : "later")); diff --git a/src/main/java/ch/njol/skript/expressions/ExprDefaultValue.java b/src/main/java/ch/njol/skript/expressions/ExprDefaultValue.java index 336a8376402..e8d35d4c4cc 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprDefaultValue.java +++ b/src/main/java/ch/njol/skript/expressions/ExprDefaultValue.java @@ -15,6 +15,7 @@ import ch.njol.util.Kleenean; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.lang.reflect.Array; @@ -93,6 +94,13 @@ public boolean isSingle() { return first.isSingle() && second.isSingle(); } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + first = simplifyChild(first, step, source); + second = simplifyChild(second, step, source); + return this; + } + @Override public String toString(Event e, boolean debug) { return first.toString(e, debug) + " or else " + second.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprDequeuedQueue.java b/src/main/java/ch/njol/skript/expressions/ExprDequeuedQueue.java index 0d5507aec7f..c7e453abe3e 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprDequeuedQueue.java +++ b/src/main/java/ch/njol/skript/expressions/ExprDequeuedQueue.java @@ -13,6 +13,7 @@ import ch.njol.util.Kleenean; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import org.skriptlang.skript.lang.util.SkriptQueue; @Name("De-queue Queue (Experimental)") @@ -65,6 +66,12 @@ public Class getReturnType() { return Object.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + queue = simplifyChild(queue, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "dequeued " + queue.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprDifference.java b/src/main/java/ch/njol/skript/expressions/ExprDifference.java index 6a652b83a26..e1dab0e4177 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprDifference.java +++ b/src/main/java/ch/njol/skript/expressions/ExprDifference.java @@ -17,6 +17,7 @@ import org.jetbrains.annotations.Nullable; import org.skriptlang.skript.lang.arithmetic.Arithmetics; import org.skriptlang.skript.lang.arithmetic.DifferenceInfo; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.lang.reflect.Array; @@ -165,6 +166,13 @@ public Class getReturnType() { return differenceInfo == null ? Object.class : differenceInfo.getReturnType(); } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + first = simplifyChild(first, step, source); + second = simplifyChild(second, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "difference between " + first.toString(event, debug) + " and " + second.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprDirection.java b/src/main/java/ch/njol/skript/expressions/ExprDirection.java index 0e64f2f43f8..3364e4bd881 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprDirection.java +++ b/src/main/java/ch/njol/skript/expressions/ExprDirection.java @@ -20,6 +20,7 @@ import ch.njol.skript.util.Direction; import ch.njol.util.Kleenean; import ch.njol.util.Math2; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -182,7 +183,15 @@ public boolean isSingle() { public Class getReturnType() { return Direction.class; } - + + @Override + public ExprDirection simplify(Step step, @Nullable Simplifiable source) { + amount = simplifyChild(amount, step, source); + relativeTo = simplifyChild(relativeTo, step, source); + next = (ExprDirection) simplifyChild(next, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { final Expression relativeTo = this.relativeTo; diff --git a/src/main/java/ch/njol/skript/expressions/ExprDistance.java b/src/main/java/ch/njol/skript/expressions/ExprDistance.java index 51d33144ee7..32e484f8db4 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprDistance.java +++ b/src/main/java/ch/njol/skript/expressions/ExprDistance.java @@ -14,6 +14,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -58,7 +59,14 @@ public String toString(final @Nullable Event e, final boolean debug) { public boolean isSingle() { return true; } - + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + loc1 = simplifyChild(loc1, step, source); + loc2 = simplifyChild(loc2, step, source); + return this; + } + @Override public Class getReturnType() { return Number.class; diff --git a/src/main/java/ch/njol/skript/expressions/ExprDropsOfBlock.java b/src/main/java/ch/njol/skript/expressions/ExprDropsOfBlock.java index fd809b73b56..648dc8c0760 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprDropsOfBlock.java +++ b/src/main/java/ch/njol/skript/expressions/ExprDropsOfBlock.java @@ -1,26 +1,22 @@ package ch.njol.skript.expressions; -import java.util.ArrayList; - -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.event.Event; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.aliases.ItemType; -import ch.njol.skript.doc.Description; -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; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.skript.log.ErrorQuality; import ch.njol.util.Kleenean; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.event.Event; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.ArrayList; @Name("Drops Of Block") @Description("A list of the items that will drop when a block is broken.") @@ -108,7 +104,15 @@ public boolean isSingle() { public Class getReturnType() { return ItemType.class; } - + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + block = simplifyChild(block, step, source); + item = simplifyChild(item, step, source); + entity = simplifyChild(entity, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "drops of " + block.toString(e, debug) + (item != null ? (" using " + item.toString(e, debug) + (entity != null ? " as " + entity.toString(e, debug) : null)) : ""); diff --git a/src/main/java/ch/njol/skript/expressions/ExprElement.java b/src/main/java/ch/njol/skript/expressions/ExprElement.java index d5b61c17695..0996b9eb8fa 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprElement.java +++ b/src/main/java/ch/njol/skript/expressions/ExprElement.java @@ -20,6 +20,7 @@ import org.apache.commons.lang.ArrayUtils; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import org.skriptlang.skript.lang.util.SkriptQueue; import java.lang.reflect.Array; @@ -237,6 +238,14 @@ public Class getReturnType() { return expr.getReturnType(); } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + expr = simplifyChild(expr, step, source); + startIndex = simplifyChild(startIndex, step, source); + endIndex = simplifyChild(endIndex, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { String prefix; diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentLevel.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentLevel.java index 9c4266fb5cf..342c0471ac9 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentLevel.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentLevel.java @@ -17,6 +17,7 @@ import org.bukkit.enchantments.Enchantment; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.stream.Stream; @@ -121,6 +122,13 @@ public Class getReturnType() { return Long.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + items = simplifyChild(items, step, source); + enchants = simplifyChild(enchants, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "the level of " + enchants.toString(e, debug) + " of " + items.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java index e96f501b1a2..1c37d1e67d6 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEnchantmentOffer.java @@ -1,23 +1,8 @@ package ch.njol.skript.expressions; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -import org.bukkit.enchantments.EnchantmentOffer; -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.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; @@ -26,6 +11,16 @@ import ch.njol.skript.util.EnchantmentType; import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; +import org.bukkit.enchantments.EnchantmentOffer; +import org.bukkit.event.Event; +import org.bukkit.event.enchantment.PrepareItemEnchantEvent; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; @Name("Enchantment Offer") @Description("The enchantment offer in enchant prepare events.") @@ -169,6 +164,12 @@ public Class getReturnType() { return EnchantmentOffer.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + exprOfferNumber = simplifyChild(exprOfferNumber, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return all ? "the enchantment offers" : "enchantment offer(s) " + exprOfferNumber.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprEntities.java b/src/main/java/ch/njol/skript/expressions/ExprEntities.java index 08a439f03ed..ba47b77db5e 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEntities.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEntities.java @@ -25,6 +25,7 @@ import org.bukkit.util.BoundingBox; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnknownNullability; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.lang.reflect.Array; import java.util.ArrayList; @@ -214,6 +215,18 @@ public Class getReturnType() { return returnType; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + types = simplifyChild(types, step, source); + worlds = simplifyChild(worlds, step, source); + chunks = simplifyChild(chunks, step, source); + radius = simplifyChild(radius, step, source); + center = simplifyChild(center, step, source); + from = simplifyChild(from, step, source); + to = simplifyChild(to, step, source); + return this; + } + @Override @SuppressWarnings("null") public String toString(@Nullable Event e, boolean debug) { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEntityAttribute.java b/src/main/java/ch/njol/skript/expressions/ExprEntityAttribute.java index 6c672c59ed6..05c427909cf 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEntityAttribute.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEntityAttribute.java @@ -17,7 +17,9 @@ import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.Entity; import org.bukkit.event.Event; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.Objects; import java.util.stream.Stream; @@ -110,6 +112,13 @@ public Class getReturnType() { return Number.class; } + @Override + public Expression simplify(@NotNull Step step, @Nullable Simplifiable source) { + super.simplify(step, source); + attributes = simplifyChild(attributes, step, source); + return this; + } + @Override @SuppressWarnings("null") public String toString(@Nullable Event event, boolean debug) { diff --git a/src/main/java/ch/njol/skript/expressions/ExprEntitySound.java b/src/main/java/ch/njol/skript/expressions/ExprEntitySound.java index 177c124e9de..197c788803c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprEntitySound.java +++ b/src/main/java/ch/njol/skript/expressions/ExprEntitySound.java @@ -21,6 +21,7 @@ import org.bukkit.event.Event; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.Objects; @@ -165,6 +166,14 @@ public Class getReturnType() { return String.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + height = simplifyChild(height, step, source); + entities = simplifyChild(entities, step, source); + item = simplifyChild(item, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { String sound = "unknown"; diff --git a/src/main/java/ch/njol/skript/expressions/ExprFilter.java b/src/main/java/ch/njol/skript/expressions/ExprFilter.java index 8f1b809976d..12605091ad0 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprFilter.java +++ b/src/main/java/ch/njol/skript/expressions/ExprFilter.java @@ -23,6 +23,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnknownNullability; import org.skriptlang.skript.lang.converter.Converters; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.Collections; import java.util.HashSet; @@ -122,6 +123,13 @@ public Class getReturnType() { return unfilteredObjects.getReturnType(); } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + unfilteredObjects = simplifyChild(unfilteredObjects, step, source); + // TODO: simplify condition + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return unfilteredObjects.toString(event, debug) + " that match [" + unparsedCondition + "]"; diff --git a/src/main/java/ch/njol/skript/expressions/ExprFireworkEffect.java b/src/main/java/ch/njol/skript/expressions/ExprFireworkEffect.java index 802b43192e4..5651497129f 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprFireworkEffect.java +++ b/src/main/java/ch/njol/skript/expressions/ExprFireworkEffect.java @@ -17,6 +17,7 @@ import ch.njol.skript.util.Color; import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Firework Effect") @Description("Represents a 'firework effect' which can be used in the launch firework effect.") @@ -88,6 +89,14 @@ protected FireworkEffect[] get(Event e) { return CollectionUtils.array(builder.build()); } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + type = simplifyChild(type, step, source); + color = simplifyChild(color, step, source); + fade = simplifyChild(fade, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "Firework effect " + type.toString(e, debug) + " with color " + color.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprFormatDate.java b/src/main/java/ch/njol/skript/expressions/ExprFormatDate.java index d18ea2a4c78..56bf1cd0303 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprFormatDate.java +++ b/src/main/java/ch/njol/skript/expressions/ExprFormatDate.java @@ -14,7 +14,9 @@ import ch.njol.skript.util.Date; import ch.njol.util.Kleenean; import org.bukkit.event.Event; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.text.SimpleDateFormat; @@ -103,6 +105,13 @@ public Class getReturnType() { return String.class; } + @Override + public Expression simplify(@NotNull Step step, @Nullable Simplifiable source) { + super.simplify(step, source); + customFormat = simplifyChild(customFormat, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return getExpr().toString(e, debug) + " formatted as " + (customFormat != null ? customFormat.toString(e, debug) diff --git a/src/main/java/ch/njol/skript/expressions/ExprFunction.java b/src/main/java/ch/njol/skript/expressions/ExprFunction.java index 01cc92fb86f..57000d933e5 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprFunction.java +++ b/src/main/java/ch/njol/skript/expressions/ExprFunction.java @@ -18,6 +18,7 @@ import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; import org.skriptlang.skript.lang.script.Script; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.Objects; @@ -114,6 +115,13 @@ public Class getReturnType() { return DynamicFunctionReference.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + name = simplifyChild(name, step, source); + script = simplifyChild(script, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return switch (mode) { diff --git a/src/main/java/ch/njol/skript/expressions/ExprGameRule.java b/src/main/java/ch/njol/skript/expressions/ExprGameRule.java index 7e21a7caa2a..69cb02db969 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprGameRule.java +++ b/src/main/java/ch/njol/skript/expressions/ExprGameRule.java @@ -19,6 +19,7 @@ import ch.njol.skript.util.GameruleValue; import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Gamerule Value") @Description("The gamerule value of a world.") @@ -92,7 +93,14 @@ public boolean isSingle() { public Class getReturnType() { return GameruleValue.class; } - + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + gamerule = simplifyChild(gamerule, step, source); + world = simplifyChild(world, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "the gamerule value of " + gamerule.toString(e, debug) + " for world " + world.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprHiddenPlayers.java b/src/main/java/ch/njol/skript/expressions/ExprHiddenPlayers.java index 4041b58cb2e..1b01b3382b4 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprHiddenPlayers.java +++ b/src/main/java/ch/njol/skript/expressions/ExprHiddenPlayers.java @@ -13,6 +13,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.ArrayList; import java.util.List; @@ -64,6 +65,12 @@ public Class getReturnType() { return Player.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + viewers = simplifyChild(viewers, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "hidden players for " + viewers.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprIP.java b/src/main/java/ch/njol/skript/expressions/ExprIP.java index 6c8136d7a2c..63f6c1ea214 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprIP.java +++ b/src/main/java/ch/njol/skript/expressions/ExprIP.java @@ -1,16 +1,5 @@ package ch.njol.skript.expressions; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.util.stream.Stream; - -import org.bukkit.entity.Player; -import org.bukkit.event.Event; -import org.bukkit.event.player.PlayerLoginEvent; -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.doc.Description; import ch.njol.skript.doc.Examples; @@ -22,6 +11,17 @@ import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; +import com.destroystokyo.paper.event.server.PaperServerListPingEvent; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.player.PlayerLoginEvent; +import org.bukkit.event.server.ServerListPingEvent; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.util.stream.Stream; @Name("IP") @Description("The IP address of a player, or the connected player in a connect event, " + @@ -118,6 +118,12 @@ public Class getReturnType() { return String.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { if (e == null || !isProperty) @@ -125,4 +131,4 @@ public String toString(@Nullable Event e, boolean debug) { return "the IP address of " + players.toString(e, debug); } -} \ No newline at end of file +} diff --git a/src/main/java/ch/njol/skript/expressions/ExprIndexOf.java b/src/main/java/ch/njol/skript/expressions/ExprIndexOf.java index 94d27f52c79..d08675b9266 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprIndexOf.java +++ b/src/main/java/ch/njol/skript/expressions/ExprIndexOf.java @@ -13,6 +13,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -62,7 +63,14 @@ public boolean isSingle() { public Class getReturnType() { return Long.class; } - + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + haystack = simplifyChild(haystack, step, source); + needle = simplifyChild(needle, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return "the " + (first ? "first" : "last") + " index of " + needle.toString(e, debug) + " in " + haystack.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprInventory.java b/src/main/java/ch/njol/skript/expressions/ExprInventory.java index 702f2411332..deeacad7c4c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprInventory.java +++ b/src/main/java/ch/njol/skript/expressions/ExprInventory.java @@ -22,6 +22,7 @@ import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; import ch.njol.skript.doc.Since; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; @@ -142,7 +143,13 @@ public boolean isSingle() { public Class getReturnType() { return inLoop ? Slot.class : Inventory.class; } - + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + holders = simplifyChild(holders, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "inventor" + (holders.isSingle() ? "y" : "ies") + " of " + holders.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprInventoryInfo.java b/src/main/java/ch/njol/skript/expressions/ExprInventoryInfo.java index c7dc5c8395f..6ed6879799f 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprInventoryInfo.java +++ b/src/main/java/ch/njol/skript/expressions/ExprInventoryInfo.java @@ -1,14 +1,5 @@ package ch.njol.skript.expressions; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.entity.Player; -import org.bukkit.event.Event; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; @@ -19,6 +10,15 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.ArrayList; +import java.util.List; @Name("Inventory Holder/Viewers/Rows/Slots") @Description({"Gets the amount of rows/slots, viewers and holder of an inventory.", @@ -96,7 +96,13 @@ public boolean isSingle() { public Class getReturnType() { return type == HOLDER ? InventoryHolder.class : (type == ROWS || type == SLOTS) ? Number.class : Player.class; } - + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + inventories = simplifyChild(inventories, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return (type == HOLDER ? "holder of " : type == ROWS ? "rows of " : type == SLOTS ? "slots of " : "viewers of ") + inventories.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprInventorySlot.java b/src/main/java/ch/njol/skript/expressions/ExprInventorySlot.java index 4a3fc3618e7..fcece98cb00 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprInventorySlot.java +++ b/src/main/java/ch/njol/skript/expressions/ExprInventorySlot.java @@ -1,14 +1,5 @@ package ch.njol.skript.expressions; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.entity.HumanEntity; -import org.bukkit.event.Event; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.PlayerInventory; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; @@ -22,6 +13,15 @@ import ch.njol.skript.util.slot.InventorySlot; import ch.njol.skript.util.slot.Slot; import ch.njol.util.Kleenean; +import org.bukkit.entity.HumanEntity; +import org.bukkit.event.Event; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.PlayerInventory; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.ArrayList; +import java.util.List; @Name("Inventory Slot") @Description({"Represents a slot in an inventory. It can be used to change the item in an inventory too."}) @@ -92,7 +92,14 @@ public boolean isSingle() { public Class getReturnType() { return Slot.class; } - + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + slots = simplifyChild(slots, step, source); + invis = simplifyChild(invis, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "slots " + slots.toString(e, debug) + " of " + invis.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprItemCooldown.java b/src/main/java/ch/njol/skript/expressions/ExprItemCooldown.java index 162884af692..63c7bbbacbb 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprItemCooldown.java +++ b/src/main/java/ch/njol/skript/expressions/ExprItemCooldown.java @@ -18,6 +18,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.List; import java.util.stream.Collectors; @@ -38,10 +39,8 @@ public class ExprItemCooldown extends SimpleExpression { "[the] [item] cooldown of %itemtypes% for %players%", "%players%'[s] [item] cooldown for %itemtypes%"); } - - @SuppressWarnings("NotNullFieldNotInitialized") + private Expression players; - @SuppressWarnings("NotNullFieldNotInitialized") private Expression itemtypes; @Override @@ -117,7 +116,14 @@ public boolean isSingle() { public Class getReturnType() { return Timespan.class; } - + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + itemtypes = simplifyChild(itemtypes, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "cooldown of " + itemtypes.toString(event, debug) + " for " + players.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprItemWithCustomModelData.java b/src/main/java/ch/njol/skript/expressions/ExprItemWithCustomModelData.java index b2818ebb807..7cd429f5b72 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprItemWithCustomModelData.java +++ b/src/main/java/ch/njol/skript/expressions/ExprItemWithCustomModelData.java @@ -2,6 +2,7 @@ import org.bukkit.event.Event; import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import ch.njol.skript.Skript; @@ -16,6 +17,7 @@ import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Item with CustomModelData") @Description("Get an item with a CustomModelData tag. (Value is an integer between 0 and 99999999)") @@ -60,7 +62,14 @@ protected ItemType[] get(Event e, ItemType[] source) { public Class getReturnType() { return ItemType.class; } - + + @Override + public Expression simplify(@NotNull Step step, @Nullable Simplifiable source) { + super.simplify(step, source); + data = simplifyChild(data, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean d) { return getExpr().toString(e, d) + " with custom model data " + data.toString(e, d); diff --git a/src/main/java/ch/njol/skript/expressions/ExprItemWithLore.java b/src/main/java/ch/njol/skript/expressions/ExprItemWithLore.java index 636e5ab8134..defb7b6e9b1 100755 --- a/src/main/java/ch/njol/skript/expressions/ExprItemWithLore.java +++ b/src/main/java/ch/njol/skript/expressions/ExprItemWithLore.java @@ -1,13 +1,5 @@ package ch.njol.skript.expressions; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -import org.bukkit.event.Event; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.aliases.ItemType; import ch.njol.skript.doc.Description; @@ -19,6 +11,15 @@ import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.bukkit.event.Event; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; @Name("Item with Lore") @Description({"Returns the given item type with the specified lore added to it.", @@ -65,6 +66,13 @@ public Class getReturnType() { return ItemType.class; } + @Override + public Expression simplify(@NotNull Step step, @Nullable Simplifiable source) { + super.simplify(step, source); + lore = simplifyChild(lore, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return getExpr().toString(e, debug) + " with lore " + lore.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprItems.java b/src/main/java/ch/njol/skript/expressions/ExprItems.java index 4fb0c11d66a..3d96d8c0e56 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprItems.java +++ b/src/main/java/ch/njol/skript/expressions/ExprItems.java @@ -17,6 +17,7 @@ import org.bukkit.event.Event; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.ArrayList; import java.util.Arrays; @@ -114,6 +115,12 @@ public boolean isSingle() { return false; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + itemTypeExpr = simplifyChild(itemTypeExpr, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "all of the " + (items ? "items" : "blocks") + (itemTypeExpr != null ? " of type " + itemTypeExpr.toString(event, debug) : ""); diff --git a/src/main/java/ch/njol/skript/expressions/ExprItemsIn.java b/src/main/java/ch/njol/skript/expressions/ExprItemsIn.java index 4f24751430e..3e49864e711 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprItemsIn.java +++ b/src/main/java/ch/njol/skript/expressions/ExprItemsIn.java @@ -1,17 +1,7 @@ package ch.njol.skript.expressions; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.NoSuchElementException; - -import ch.njol.skript.aliases.ItemType; -import org.bukkit.event.Event; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; +import ch.njol.skript.aliases.ItemType; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; @@ -24,6 +14,16 @@ import ch.njol.skript.util.slot.InventorySlot; import ch.njol.skript.util.slot.Slot; import ch.njol.util.Kleenean; +import org.bukkit.event.Event; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; @Name("Items In") @Description({ @@ -127,13 +127,6 @@ public boolean isLoopOf(String s) { return s.equalsIgnoreCase("item"); } - @Override - public String toString(@Nullable Event event, boolean debug) { - if (types == null) - return "items in " + inventories.toString(event, debug); - return "all " + types.toString(event, debug) + " in " + inventories.toString(event, debug); - } - @Override public boolean isSingle() { return false; @@ -144,6 +137,20 @@ public Class getReturnType() { return Slot.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + inventories = simplifyChild(inventories, step, source); + types = simplifyChild(types, step, source); + return this; + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + if (types == null) + return "items in " + inventories.toString(event, debug); + return "all " + types.toString(event, debug) + " in " + inventories.toString(event, debug); + } + private boolean isAllowedItem(@Nullable ItemType[] types, @Nullable ItemStack item) { if (types == null) return item != null; diff --git a/src/main/java/ch/njol/skript/expressions/ExprJoinSplit.java b/src/main/java/ch/njol/skript/expressions/ExprJoinSplit.java index 5ce55110756..e1a3e5aa7d0 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprJoinSplit.java +++ b/src/main/java/ch/njol/skript/expressions/ExprJoinSplit.java @@ -1,25 +1,25 @@ package ch.njol.skript.expressions; -import java.util.regex.Pattern; -import java.util.regex.PatternSyntaxException; - -import ch.njol.skript.SkriptConfig; -import ch.njol.skript.lang.Literal; -import ch.njol.skript.lang.SyntaxStringBuilder; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; +import ch.njol.skript.SkriptConfig; 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.Literal; 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 ch.njol.util.StringUtils; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; @Name("Join & Split") @Description("Joins several texts with a common delimiter (e.g. \", \"), or splits a text into multiple texts at a given delimiter.") @@ -102,6 +102,13 @@ public Class getReturnType() { return String.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + strings = simplifyChild(strings, step, source); + delimiter = simplifyChild(delimiter, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { SyntaxStringBuilder builder = new SyntaxStringBuilder(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprLength.java b/src/main/java/ch/njol/skript/expressions/ExprLength.java index 1b9e4641769..18701226a99 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprLength.java +++ b/src/main/java/ch/njol/skript/expressions/ExprLength.java @@ -5,6 +5,11 @@ import ch.njol.skript.doc.Name; import ch.njol.skript.doc.Since; import ch.njol.skript.expressions.base.SimplePropertyExpression; +import ch.njol.skript.lang.Expression; +import ch.njol.skript.lang.Literal; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -28,7 +33,15 @@ public Long convert(final String s) { public Class getReturnType() { return Long.class; } - + + @Override + public Expression simplify(@NotNull Step step, @Nullable Simplifiable source) { + setExpr(simplifyChild(getExpr(), step, source)); + if (getExpr() instanceof Literal) + return getAsSimplifiedLiteral(); + return this; + } + @Override protected String getPropertyName() { return "length"; diff --git a/src/main/java/ch/njol/skript/expressions/ExprLocationAt.java b/src/main/java/ch/njol/skript/expressions/ExprLocationAt.java index a39d3181efa..9eb736a86fc 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprLocationAt.java +++ b/src/main/java/ch/njol/skript/expressions/ExprLocationAt.java @@ -1,10 +1,5 @@ package ch.njol.skript.expressions; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; @@ -12,9 +7,15 @@ import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; +import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * FIXME doesn't parse - update documentation when fixed @@ -66,7 +67,19 @@ public boolean isSingle() { public Class getReturnType() { return Location.class; } - + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + //noinspection DuplicatedCode + world = simplifyChild(world, step, source); + x = simplifyChild(x, step, source); + y = simplifyChild(y, step, source); + z = simplifyChild(z, step, source); + if (world instanceof Literal && x instanceof Literal && y instanceof Literal && z instanceof Literal) + return getAsSimplifiedLiteral(); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return "the location at (" + x.toString(e, debug) + ", " + y.toString(e, debug) + ", " + z.toString(e, debug) + ") in " + world.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprLocationFromVector.java b/src/main/java/ch/njol/skript/expressions/ExprLocationFromVector.java index d4c2b0545ef..40b1211e77d 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprLocationFromVector.java +++ b/src/main/java/ch/njol/skript/expressions/ExprLocationFromVector.java @@ -1,22 +1,23 @@ package ch.njol.skript.expressions; import ch.njol.skript.Skript; -import ch.njol.skript.lang.ExpressionType; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.event.Event; -import org.bukkit.util.Vector; - 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.Literal; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.event.Event; +import org.bukkit.util.Vector; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author bi0qaw @@ -91,6 +92,20 @@ public Class getReturnType() { return Location.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + //noinspection DuplicatedCode + vector = simplifyChild(vector, step, source); + world = simplifyChild(world, step, source); + yaw = simplifyChild(yaw, step, source); + pitch = simplifyChild(pitch, step, source); + if (vector instanceof Literal && world instanceof Literal + && (yaw == null || yaw instanceof Literal) + && (pitch == null || pitch instanceof Literal)) + return getAsSimplifiedLiteral(); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { if (hasDirection) diff --git a/src/main/java/ch/njol/skript/expressions/ExprLocationVectorOffset.java b/src/main/java/ch/njol/skript/expressions/ExprLocationVectorOffset.java index 1526165ecd7..c405ad6c8da 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprLocationVectorOffset.java +++ b/src/main/java/ch/njol/skript/expressions/ExprLocationVectorOffset.java @@ -16,6 +16,7 @@ import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** @@ -69,6 +70,13 @@ public Class getReturnType() { return Location.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + location = simplifyChild(location, step, source); + vectors = simplifyChild(vectors, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return location.toString() + " offset by " + vectors.toString(); diff --git a/src/main/java/ch/njol/skript/expressions/ExprLore.java b/src/main/java/ch/njol/skript/expressions/ExprLore.java index 7b4c26361cf..49c695ab83d 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprLore.java +++ b/src/main/java/ch/njol/skript/expressions/ExprLore.java @@ -1,19 +1,5 @@ package ch.njol.skript.expressions; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.event.Event; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.SkriptConfig; import ch.njol.skript.aliases.ItemType; @@ -31,6 +17,20 @@ import ch.njol.util.Math2; import ch.njol.util.StringUtils; import ch.njol.util.coll.CollectionUtils; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.event.Event; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * TODO make a 'line %number% of %text%' expression and figure out how to deal with signs (4 lines, delete = empty, etc...) @@ -243,6 +243,13 @@ public Class getReturnType() { return String.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + lineNumber = simplifyChild(lineNumber, step, source); + item = simplifyChild(item, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return (lineNumber != null ? "the line " + lineNumber.toString(e, debug) + " of " : "") + "the lore of " + item.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprMetadata.java b/src/main/java/ch/njol/skript/expressions/ExprMetadata.java index aa9d3de4e87..473512e299f 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprMetadata.java +++ b/src/main/java/ch/njol/skript/expressions/ExprMetadata.java @@ -24,6 +24,7 @@ import org.skriptlang.skript.lang.arithmetic.OperationInfo; import org.skriptlang.skript.lang.arithmetic.Operator; import org.skriptlang.skript.lang.converter.Converters; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.lang.reflect.Array; import java.util.ArrayList; @@ -161,6 +162,13 @@ public Expression getSource() { return source == null ? this : source; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + keys = simplifyChild(keys, step, source); + holders = simplifyChild(holders, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "metadata values " + keys.toString(event, debug) + " of " + holders.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprNamed.java b/src/main/java/ch/njol/skript/expressions/ExprNamed.java index a3a43aaa777..2bc67636b0d 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprNamed.java +++ b/src/main/java/ch/njol/skript/expressions/ExprNamed.java @@ -19,7 +19,9 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -86,7 +88,14 @@ protected Object[] get(Event event, Object[] source) { public Class getReturnType() { return getExpr().getReturnType() == InventoryType.class ? Inventory.class : ItemType.class; } - + + @Override + public Expression simplify(@NotNull Step step, @Nullable Simplifiable source) { + super.simplify(step, source); + name = simplifyChild(name, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return getExpr().toString(e, debug) + " named " + name; diff --git a/src/main/java/ch/njol/skript/expressions/ExprNearestEntity.java b/src/main/java/ch/njol/skript/expressions/ExprNearestEntity.java index 3f5db26c97a..9d1a3a33db6 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprNearestEntity.java +++ b/src/main/java/ch/njol/skript/expressions/ExprNearestEntity.java @@ -18,6 +18,7 @@ import ch.njol.skript.lang.util.SimpleExpression; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.lang.reflect.Array; import java.util.Arrays; @@ -93,6 +94,12 @@ public Class getReturnType() { return knownReturnType = Utils.highestDenominator(Entity.class, types); } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + relativeTo = simplifyChild(relativeTo, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "nearest " + StringUtils.join(entityDatas) + " relative to " + relativeTo.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprNewBannerPattern.java b/src/main/java/ch/njol/skript/expressions/ExprNewBannerPattern.java index b4d4f39ea62..75a3e57f99a 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprNewBannerPattern.java +++ b/src/main/java/ch/njol/skript/expressions/ExprNewBannerPattern.java @@ -15,6 +15,7 @@ import org.bukkit.block.banner.PatternType; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Banner Pattern") @Description("Creates a new banner pattern.") @@ -64,6 +65,13 @@ public Class getReturnType() { return Pattern.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + selectedPattern = simplifyChild(selectedPattern, step, source); + selectedColor = simplifyChild(selectedColor, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "a " + selectedPattern.toString(event, debug) + " colored " + selectedColor.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprNode.java b/src/main/java/ch/njol/skript/expressions/ExprNode.java index 9fe36a71baa..d430b14b53c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprNode.java +++ b/src/main/java/ch/njol/skript/expressions/ExprNode.java @@ -16,7 +16,9 @@ import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; import org.bukkit.event.Event; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.Iterator; import java.util.LinkedHashSet; @@ -124,6 +126,13 @@ public Class getReturnType() { return Node.class; } + @Override + public Expression simplify(@NotNull Step step, @Nullable Simplifiable source) { + super.simplify(step, source); + pathExpression = simplifyChild(pathExpression, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { if (isPath) diff --git a/src/main/java/ch/njol/skript/expressions/ExprNumberOfCharacters.java b/src/main/java/ch/njol/skript/expressions/ExprNumberOfCharacters.java index b394ef51162..0bccea079ed 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprNumberOfCharacters.java +++ b/src/main/java/ch/njol/skript/expressions/ExprNumberOfCharacters.java @@ -1,5 +1,6 @@ package ch.njol.skript.expressions; +import ch.njol.skript.lang.Literal; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; @@ -13,6 +14,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Number of Characters") @Description("The number of uppercase, lowercase, or digit characters in a string.") @@ -78,6 +80,14 @@ public Class getReturnType() { return Long.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + expr = simplifyChild(expr, step, source); + if (expr instanceof Literal) + return getAsSimplifiedLiteral(); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { if (pattern == 0) { diff --git a/src/main/java/ch/njol/skript/expressions/ExprNumbers.java b/src/main/java/ch/njol/skript/expressions/ExprNumbers.java index 140be747f76..275d555be53 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprNumbers.java +++ b/src/main/java/ch/njol/skript/expressions/ExprNumbers.java @@ -1,14 +1,5 @@ package ch.njol.skript.expressions; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.NoSuchElementException; - -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.SkriptConfig; import ch.njol.skript.doc.Description; @@ -17,9 +8,15 @@ import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; +import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.*; /** * @author Peter Güttinger @@ -173,6 +170,16 @@ public Class getReturnType() { return mode == 1 ? Long.class : Double.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + start = simplifyChild(start, step, source); + end = simplifyChild(end, step, source); + // todo: simplify into iterator literal? + if (start instanceof Literal && end instanceof Literal) + return getAsSimplifiedLiteral(); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { final String modeString = mode == 0 ? "numbers" : (mode == 1 ? "integers" : "decimals"); diff --git a/src/main/java/ch/njol/skript/expressions/ExprParse.java b/src/main/java/ch/njol/skript/expressions/ExprParse.java index d1da502924c..4a7d8955839 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprParse.java +++ b/src/main/java/ch/njol/skript/expressions/ExprParse.java @@ -28,6 +28,7 @@ import org.bukkit.ChatColor; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.lang.reflect.Array; import java.util.ArrayList; @@ -236,6 +237,12 @@ public Class getReturnType() { return patternExpressions.length == 1 ? patternExpressions[0].getFirst().getC() : Object.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + text = simplifyChild(text, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return text.toString(event, debug) + " parsed as " + (classInfo != null ? classInfo.toString(Language.F_INDEFINITE_ARTICLE) : pattern); diff --git a/src/main/java/ch/njol/skript/expressions/ExprPassenger.java b/src/main/java/ch/njol/skript/expressions/ExprPassenger.java index 1be2b7d4c39..befe0fd11fa 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprPassenger.java +++ b/src/main/java/ch/njol/skript/expressions/ExprPassenger.java @@ -1,19 +1,8 @@ package ch.njol.skript.expressions; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.bukkit.entity.Entity; -import org.bukkit.event.Event; -import org.bukkit.event.vehicle.VehicleEnterEvent; -import org.bukkit.event.vehicle.VehicleExitEvent; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.bukkitutil.PassengerUtils; import ch.njol.skript.classes.Changer.ChangeMode; -import org.skriptlang.skript.lang.converter.Converter; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; @@ -25,6 +14,17 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import org.bukkit.entity.Entity; +import org.bukkit.event.Event; +import org.bukkit.event.vehicle.VehicleEnterEvent; +import org.bukkit.event.vehicle.VehicleExitEvent; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.converter.Converter; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; /** * @author Peter Güttinger @@ -48,10 +48,17 @@ public class ExprPassenger extends SimpleExpression { // REMIND create ' static { // It was necessary to convert to SimpleExpression due to the method 'isSingle()'. Skript.registerExpression(ExprPassenger.class, Entity.class, ExpressionType.PROPERTY, "[the] passenger[s] of %entities%", "%entities%'[s] passenger[s]"); } - + @SuppressWarnings("null") private Expression vehicle; - + + @SuppressWarnings({"unchecked", "null"}) + @Override + public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { + vehicle = (Expression) exprs[0]; + return true; + } + @Override @Nullable protected Entity[] get(Event e) { @@ -79,14 +86,6 @@ public Entity[] convert(Entity v) { } return entities.toArray(new Entity[entities.size()]); } - - - @SuppressWarnings({"unchecked", "null"}) - @Override - public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { - vehicle = (Expression) exprs[0]; - return true; - } @Override @Nullable @@ -147,26 +146,33 @@ public void change(final Event e, final @Nullable Object[] delta, final ChangeMo } } - + + @Override + public boolean isSingle() { + // In case it doesn't have multiple passenger support, it's up to the source expression to determine if it's single, otherwise is always false + return !PassengerUtils.hasMultiplePassenger() ? vehicle.isSingle() : false; + } + @Override public Class getReturnType() { return Entity.class; } - + @Override - public String toString(@Nullable Event e, boolean debug) { - return "the passenger of " + vehicle.toString(e, debug); + public Expression simplify(Step step, @Nullable Simplifiable source) { + vehicle = simplifyChild(vehicle, step, source); + return this; } - + @Override - public boolean isSingle() { - // In case it doesn't have multiple passenger support, it's up to the source expression to determine if it's single, otherwise is always false - return !PassengerUtils.hasMultiplePassenger() ? vehicle.isSingle() : false; + public String toString(@Nullable Event e, boolean debug) { + return "the passenger of " + vehicle.toString(e, debug); } @SuppressWarnings("unchecked") @Override public boolean setTime(final int time) { return super.setTime(time, vehicle, VehicleEnterEvent.class, VehicleExitEvent.class); - } + } + } diff --git a/src/main/java/ch/njol/skript/expressions/ExprPercent.java b/src/main/java/ch/njol/skript/expressions/ExprPercent.java index 8ab15321af5..e07550e3ccf 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprPercent.java +++ b/src/main/java/ch/njol/skript/expressions/ExprPercent.java @@ -12,6 +12,7 @@ import ch.njol.util.Kleenean; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Percent of") @Description("Returns a percentage of one or more numbers.") @@ -64,6 +65,13 @@ public Class getReturnType() { return Number.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + percent = simplifyChild(percent, step, source); + numbers = simplifyChild(numbers, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return percent.toString(event, debug) + " percent of " + numbers.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprPermissions.java b/src/main/java/ch/njol/skript/expressions/ExprPermissions.java index 36a54f620ab..f1bbfb6602e 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprPermissions.java +++ b/src/main/java/ch/njol/skript/expressions/ExprPermissions.java @@ -1,7 +1,6 @@ package ch.njol.skript.expressions; import ch.njol.skript.Skript; -import ch.njol.skript.classes.Changer.ChangeMode; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; @@ -11,13 +10,11 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; -import ch.njol.util.coll.CollectionUtils; - import org.bukkit.entity.Player; import org.bukkit.event.Event; -import org.bukkit.permissions.PermissionAttachment; import org.bukkit.permissions.PermissionAttachmentInfo; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.HashSet; import java.util.Set; @@ -61,7 +58,13 @@ public boolean isSingle() { public Class getReturnType() { return String.class; } - + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + players = simplifyChild(players, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "permissions of " + players.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprPotionEffect.java b/src/main/java/ch/njol/skript/expressions/ExprPotionEffect.java index e067d7d0c52..fe0681ccad9 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprPotionEffect.java +++ b/src/main/java/ch/njol/skript/expressions/ExprPotionEffect.java @@ -16,6 +16,7 @@ import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.skript.util.Timespan; import ch.njol.util.Kleenean; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Potion Effect") @Description({"Create a new potion effect to apply to an entity or item type. Do note that when applying potion effects ", @@ -81,7 +82,15 @@ public boolean isSingle() { public Class getReturnType() { return PotionEffect.class; } - + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + potionEffectType = simplifyChild(potionEffectType, step, source); + tier = simplifyChild(tier, step, source); + timespan = simplifyChild(timespan, step, source); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { StringBuilder builder = new StringBuilder(); diff --git a/src/main/java/ch/njol/skript/expressions/ExprPotionEffectTier.java b/src/main/java/ch/njol/skript/expressions/ExprPotionEffectTier.java index 42158ac6bb2..ec58c45d4f6 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprPotionEffectTier.java +++ b/src/main/java/ch/njol/skript/expressions/ExprPotionEffectTier.java @@ -15,6 +15,7 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.ArrayList; import java.util.List; @@ -67,6 +68,13 @@ public Class getReturnType() { return Integer.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + typeExpr = simplifyChild(typeExpr, step, source); + entityExpr = simplifyChild(entityExpr, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "potion tier of " + typeExpr.toString(event, debug) + " of " + entityExpr.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprPotionEffects.java b/src/main/java/ch/njol/skript/expressions/ExprPotionEffects.java index 89b66f570fa..20c1ac9f635 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprPotionEffects.java +++ b/src/main/java/ch/njol/skript/expressions/ExprPotionEffects.java @@ -1,14 +1,5 @@ package ch.njol.skript.expressions; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.Event; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.aliases.ItemType; import ch.njol.skript.classes.Changer.ChangeMode; import ch.njol.skript.doc.Description; @@ -22,6 +13,15 @@ import ch.njol.skript.util.PotionEffectUtils; import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.Event; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.ArrayList; +import java.util.List; @Name("Potion Effects") @Description({"Represents the active potion effects of entities and itemtypes.", @@ -117,7 +117,13 @@ public boolean isSingle() { public Class getReturnType() { return PotionEffect.class; } - + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + objects = simplifyChild(objects, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean d) { return "active potion effects of " + objects.toString(e, d); diff --git a/src/main/java/ch/njol/skript/expressions/ExprQueue.java b/src/main/java/ch/njol/skript/expressions/ExprQueue.java index d3edce4e7c9..fa6d1c06c5e 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprQueue.java +++ b/src/main/java/ch/njol/skript/expressions/ExprQueue.java @@ -14,6 +14,7 @@ import ch.njol.util.Kleenean; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import org.skriptlang.skript.lang.util.SkriptQueue; import java.util.Iterator; @@ -85,6 +86,12 @@ public Class getReturnType() { return SkriptQueue.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + contents = simplifyChild(contents, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { if (contents == null) diff --git a/src/main/java/ch/njol/skript/expressions/ExprRandom.java b/src/main/java/ch/njol/skript/expressions/ExprRandom.java index 16db494d587..d1ea309041a 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprRandom.java +++ b/src/main/java/ch/njol/skript/expressions/ExprRandom.java @@ -1,14 +1,5 @@ package ch.njol.skript.expressions; -import java.lang.reflect.Array; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.classes.ClassInfo; import ch.njol.skript.doc.Description; @@ -24,6 +15,15 @@ import ch.njol.skript.util.LiteralUtils; import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.lang.reflect.Array; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; @Name("Random") @Description("Gets a random item out of a set, e.g. a random player out of all players online.") @@ -83,6 +83,12 @@ public Class getReturnType() { return expr.getReturnType(); } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + expr = simplifyChild(expr, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return "a random element out of " + expr.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprRandomCharacter.java b/src/main/java/ch/njol/skript/expressions/ExprRandomCharacter.java index 00d1ca08f87..411dc519851 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprRandomCharacter.java +++ b/src/main/java/ch/njol/skript/expressions/ExprRandomCharacter.java @@ -13,6 +13,7 @@ import ch.njol.util.Kleenean; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.Random; import java.util.concurrent.ThreadLocalRandom; @@ -111,6 +112,14 @@ public Class getReturnType() { return String.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + amount = simplifyChild(amount, step, source); + from = simplifyChild(from, step, source); + to = simplifyChild(to, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return (amount != null ? amount.toString(event, debug) : "a") + " random character between " + from.toString(event, debug) + " and " + to.toString(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprRandomNumber.java b/src/main/java/ch/njol/skript/expressions/ExprRandomNumber.java index cc7df7c99bb..3d2663a8579 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprRandomNumber.java +++ b/src/main/java/ch/njol/skript/expressions/ExprRandomNumber.java @@ -1,14 +1,5 @@ package ch.njol.skript.expressions; -import java.util.Arrays; -import java.util.Random; -import java.util.concurrent.ThreadLocalRandom; - -import ch.njol.skript.lang.Literal; -import ch.njol.util.Math2; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; @@ -16,9 +7,18 @@ import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; +import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import ch.njol.util.Math2; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.Arrays; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; @Name("Random Numbers") @Description({ @@ -111,6 +111,14 @@ public Class getReturnType() { return isInteger ? Long.class : Double.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + amount = simplifyChild(amount, step, source); + lower = simplifyChild(lower, step, source); + upper = simplifyChild(upper, step, source); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return (amount == null ? "a" : amount.toString(event, debug)) + " random " + (isInteger ? "integer" : "number") + diff --git a/src/main/java/ch/njol/skript/expressions/ExprRawName.java b/src/main/java/ch/njol/skript/expressions/ExprRawName.java index fec8a2d54b6..b73fb229e0f 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprRawName.java +++ b/src/main/java/ch/njol/skript/expressions/ExprRawName.java @@ -1,11 +1,5 @@ package ch.njol.skript.expressions; -import java.util.Arrays; -import java.util.List; - -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.aliases.ItemType; import ch.njol.skript.doc.Description; @@ -17,6 +11,12 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.Arrays; +import java.util.List; @Name("Raw Name") @Description("The raw Minecraft material name of the given item. Note that this is not guaranteed to give same results on all servers.") @@ -56,7 +56,13 @@ public boolean isSingle() { public Class getReturnType() { return String.class; } - + + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + types = simplifyChild(types, step, source); + return this; + } + @SuppressWarnings("null") @Override public String toString(final @Nullable Event e, final boolean debug) { diff --git a/src/main/java/ch/njol/skript/expressions/ExprRawString.java b/src/main/java/ch/njol/skript/expressions/ExprRawString.java index 13bdf4075b2..4ad73715b19 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprRawString.java +++ b/src/main/java/ch/njol/skript/expressions/ExprRawString.java @@ -16,6 +16,7 @@ import ch.njol.util.StringUtils; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.util.ArrayList; import java.util.List; @@ -34,9 +35,7 @@ public class ExprRawString extends SimpleExpression { Skript.registerExpression(ExprRawString.class, String.class, ExpressionType.COMBINED, "raw %strings%"); } - @SuppressWarnings("NotNullFieldNotInitialized") private Expression expr; - @SuppressWarnings("NotNullFieldNotInitialized") private Expression[] messages; @Override @@ -84,6 +83,12 @@ public Class getReturnType() { return String.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + expr = simplifyChild(expr, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "raw " + expr.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprRepeat.java b/src/main/java/ch/njol/skript/expressions/ExprRepeat.java index 65b3f974dbe..7d399659f4a 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprRepeat.java +++ b/src/main/java/ch/njol/skript/expressions/ExprRepeat.java @@ -7,12 +7,14 @@ import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; +import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; import ch.njol.util.StringUtils; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; @Name("Repeat String") @Description("Repeats inputted strings a given amount of times.") @@ -57,6 +59,15 @@ public Class getReturnType() { return String.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + strings = simplifyChild(strings, step, source); + repeatCount = simplifyChild(repeatCount, step, source); + if (strings instanceof Literal && repeatCount instanceof Literal) + return getAsSimplifiedLiteral(); + return this; + } + @Override public String toString(@Nullable Event event, boolean debug) { return strings.toString(event, debug) + " repeated " + repeatCount.toString(event, debug) + " times"; diff --git a/src/main/java/ch/njol/skript/expressions/ExprResult.java b/src/main/java/ch/njol/skript/expressions/ExprResult.java index e4e9b47452a..0da43e7cc6a 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprResult.java +++ b/src/main/java/ch/njol/skript/expressions/ExprResult.java @@ -13,7 +13,9 @@ import ch.njol.skript.util.LiteralUtils; import ch.njol.util.Kleenean; import org.bukkit.event.Event; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import org.skriptlang.skript.util.Executable; @Name("Result (Experimental)") @@ -103,6 +105,13 @@ public boolean isSingle() { return !isPlural; } + @Override + public Expression simplify(@NotNull Step step, @Nullable Simplifiable source) { + super.simplify(step, source); + arguments = simplifyChild(arguments, step, source); + return this; + } + @Override public String toString(@Nullable Event event, final boolean debug) { String text = "the result" + (isPlural ? "s" : "") + " of " + getExpr().toString(event, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprReversedList.java b/src/main/java/ch/njol/skript/expressions/ExprReversedList.java index b1fd4639cb1..41b76cea914 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprReversedList.java +++ b/src/main/java/ch/njol/skript/expressions/ExprReversedList.java @@ -14,6 +14,7 @@ import ch.njol.util.coll.CollectionUtils; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.lang.reflect.Array; @@ -27,7 +28,6 @@ public class ExprReversedList extends SimpleExpression { Skript.registerExpression(ExprReversedList.class, Object.class, ExpressionType.COMBINED, "reversed %objects%"); } - @SuppressWarnings("NotNullFieldNotInitialized") private Expression list; @SuppressWarnings("unused") @@ -87,6 +87,12 @@ public Class getReturnType() { return list.getReturnType(); } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + list = simplifyChild(list, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "reversed " + list.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprRound.java b/src/main/java/ch/njol/skript/expressions/ExprRound.java index 5907bd47381..1c1b09b0a04 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprRound.java +++ b/src/main/java/ch/njol/skript/expressions/ExprRound.java @@ -1,10 +1,6 @@ package ch.njol.skript.expressions; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; -import org.skriptlang.skript.lang.converter.Converter; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; @@ -12,9 +8,14 @@ import ch.njol.skript.expressions.base.PropertyExpression; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; +import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; import ch.njol.util.Math2; +import org.bukkit.event.Event; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; /** * @author Peter Güttinger @@ -58,7 +59,15 @@ else if (n instanceof Long) public Class getReturnType() { return Long.class; } - + + @Override + public Expression simplify(@NotNull Step step, @Nullable Simplifiable source) { + super.simplify(step, source); + if (getExpr() instanceof Literal) + return getAsSimplifiedLiteral(); + return this; + } + @Override public String toString(final @Nullable Event e, final boolean debug) { return (action == -1 ? "floor" : action == 0 ? "round" : "ceil") + "(" + getExpr().toString(e, debug) + ")"; diff --git a/src/main/java/ch/njol/skript/expressions/ExprScoreboardTags.java b/src/main/java/ch/njol/skript/expressions/ExprScoreboardTags.java index 37782e9a0b5..29e209a35e1 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprScoreboardTags.java +++ b/src/main/java/ch/njol/skript/expressions/ExprScoreboardTags.java @@ -1,12 +1,5 @@ package ch.njol.skript.expressions; -import java.util.Set; -import java.util.stream.Stream; - -import org.bukkit.entity.Entity; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; import ch.njol.skript.classes.Changer.ChangeMode; import ch.njol.skript.doc.Description; @@ -19,6 +12,13 @@ import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; +import org.bukkit.entity.Entity; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.simplification.Simplifiable; + +import java.util.Set; +import java.util.stream.Stream; @Name("Scoreboard Tags") @Description({"Scoreboard tags are simple list of texts stored directly in the data of an entity.", @@ -116,6 +116,12 @@ public Class getReturnType() { return String.class; } + @Override + public Expression simplify(Step step, @Nullable Simplifiable source) { + entities = simplifyChild(entities, step, source); + return this; + } + @Override public String toString(@Nullable Event e, boolean debug) { return "the scoreboard tags of " + entities.toString(e, debug); diff --git a/src/main/java/ch/njol/skript/expressions/ExprScript.java b/src/main/java/ch/njol/skript/expressions/ExprScript.java index c217a5e5847..98c32e69292 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprScript.java +++ b/src/main/java/ch/njol/skript/expressions/ExprScript.java @@ -15,6 +15,7 @@ import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; import org.bukkit.event.Event; +import org.skriptlang.skript.lang.simplification.Simplifiable; import java.io.File; import java.io.FileFilter; @@ -120,6 +121,12 @@ public Class getReturnType() { return Script.class; } + @Override + public Expression