diff --git a/src/main/java/ch/njol/skript/effects/EffChargeCreeper.java b/src/main/java/ch/njol/skript/effects/EffCharge.java similarity index 62% rename from src/main/java/ch/njol/skript/effects/EffChargeCreeper.java rename to src/main/java/ch/njol/skript/effects/EffCharge.java index 03a1fdaebdc..2ddac73c353 100644 --- a/src/main/java/ch/njol/skript/effects/EffChargeCreeper.java +++ b/src/main/java/ch/njol/skript/effects/EffCharge.java @@ -27,48 +27,54 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; - import org.bukkit.entity.Creeper; -import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Entity; +import org.bukkit.entity.WitherSkull; import org.bukkit.event.Event; import org.eclipse.jdt.annotation.Nullable; -@Name("Charge Creeper") -@Description("Charges or uncharges a creeper. A creeper is charged when it has been struck by lightning.") -@Examples({"on spawn of creeper:", - "\tcharge the event-entity"}) +@Name("Charge") +@Description("Charges or uncharges a creeper or wither skull. A creeper is charged when it has been struck by lightning.") +@Examples({ + "on spawn of creeper:", + "\tcharge the event-entity" +}) @Since("2.5") -public class EffChargeCreeper extends Effect { +public class EffCharge extends Effect { static { - Skript.registerEffect(EffChargeCreeper.class, - "make %livingentities% [a[n]] (charged|powered|1¦((un|non[-])charged|(un|non[-])powered)) [creeper[s]]", - "(charge|power|1¦(uncharge|unpower)) %livingentities%"); + Skript.registerEffect(EffCharge.class, + "make %entities% [un:(un|not |non[-| ])](charged|powered)", + "[:un](charge|power) %entities%"); } @SuppressWarnings("null") - private Expression entities; + private Expression entities; private boolean charge; @SuppressWarnings({"unchecked", "null"}) @Override public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { - entities = (Expression) exprs[0]; - charge = parseResult.mark != 1; + entities = (Expression) exprs[0]; + charge = !parseResult.hasTag("un"); return true; } @Override - protected void execute(Event e) { - for (LivingEntity le : entities.getArray(e)) { - if (le instanceof Creeper) - ((Creeper) le).setPowered(charge); + protected void execute(Event event) { + for (Entity entity : entities.getArray(event)) { + if (entity instanceof Creeper) { + ((Creeper) entity).setPowered(charge); + } else if (entity instanceof WitherSkull) { + ((WitherSkull) entity).setCharged(charge); + } } } @Override public String toString(@Nullable Event e, boolean debug) { - return "make " + entities.toString(e, debug) + (charge == true ? " charged" : " not charged"); + return "make " + entities.toString(e, debug) + (charge ? " charged" : " not charged"); } + } diff --git a/src/test/skript/tests/syntaxes/conditions/CondIsCharged.sk b/src/test/skript/tests/syntaxes/conditions/CondIsCharged.sk new file mode 100644 index 00000000000..ba6034c9a24 --- /dev/null +++ b/src/test/skript/tests/syntaxes/conditions/CondIsCharged.sk @@ -0,0 +1,31 @@ +test "is charged": + spawn a creeper at (spawn of world "world"): + set {_e} to entity + spawn a wither skull at (spawn of world "world") ~ vector(0,10,0): + set {_w} to entity + + assert {_e} is not charged with "a normally spawned creeper should not be charged" + assert {_w} is not charged with "a normally spawned wither skull should not be charged" + + charge {_e} + charge {_w} + assert {_e} is charged with "charging a creeper should do exactly that" + assert {_w} is charged with "charging a wither skull should do exactly that" + + uncharge {_e} + uncharge {_w} + assert {_e} is not charged with "uncharging a creeper should do exactly that" + assert {_w} is not charged with "uncharging a wither skull should do exactly that" + + spawn an adult zombie at (spawn of world "world"): + set {_z} to entity + + assert {_z} is not charged with "a non-creeper/wither skull should never be charged" + charge {_z} + assert {_z} is not charged with "charging a non-creeper/wither skull should do nothing" + uncharge {_z} + assert {_z} is not charged with "uncharging a non-creeper/wither skull should do nothing" + + delete entity within {_e} + delete entity within {_w} + delete entity within {_z} diff --git a/src/test/skript/tests/syntaxes/effects/EffChargeCreeper.sk b/src/test/skript/tests/syntaxes/effects/EffChargeCreeper.sk deleted file mode 100644 index 47e9e8016af..00000000000 --- a/src/test/skript/tests/syntaxes/effects/EffChargeCreeper.sk +++ /dev/null @@ -1,8 +0,0 @@ -test "charge creeper effect/condition": - spawn a creeper at spawn of world "world" - assert last spawned creeper is not charged with "spawning a normal creeper shouldn't spawn a charged one" - charge the last spawned creeper - assert last spawned creeper is charged with "a creeper should be charged after it is set as charged" - uncharge the last spawned creeper - assert last spawned creeper is not charged with "uncharging a charged creeper should uncharge it" - delete last spawned creeper