From 44cb9a415155228b786c7f3f8df0e9a8466b0a8a Mon Sep 17 00:00:00 2001 From: aabssmc Date: Wed, 18 Sep 2024 18:10:30 -0700 Subject: [PATCH] add goat api --- .../entities/conditions/CondHasGoatHorn.java | 27 +++++++++++ .../conditions/CondIsEndermanScreaming.java | 27 ----------- .../entities/conditions/CondIsScreaming.java | 34 ++++++++++++++ .../elements/entities/effects/EffGoatRam.java | 33 +++++++++++++ .../expressions/ExprEndermanIsScreaming.java | 35 -------------- .../entities/expressions/ExprGoatHorn.java | 39 ++++++++++++++++ .../expressions/multiple/ExprIsScreaming.java | 46 +++++++++++++++++++ .../skuishy/other/skript/EntityCondition.java | 13 ++++++ 8 files changed, 192 insertions(+), 62 deletions(-) create mode 100644 src/main/java/lol/aabss/skuishy/elements/entities/conditions/CondHasGoatHorn.java delete mode 100644 src/main/java/lol/aabss/skuishy/elements/entities/conditions/CondIsEndermanScreaming.java create mode 100644 src/main/java/lol/aabss/skuishy/elements/entities/conditions/CondIsScreaming.java create mode 100644 src/main/java/lol/aabss/skuishy/elements/entities/effects/EffGoatRam.java delete mode 100644 src/main/java/lol/aabss/skuishy/elements/entities/expressions/ExprEndermanIsScreaming.java create mode 100644 src/main/java/lol/aabss/skuishy/elements/entities/expressions/ExprGoatHorn.java create mode 100644 src/main/java/lol/aabss/skuishy/elements/entities/expressions/multiple/ExprIsScreaming.java diff --git a/src/main/java/lol/aabss/skuishy/elements/entities/conditions/CondHasGoatHorn.java b/src/main/java/lol/aabss/skuishy/elements/entities/conditions/CondHasGoatHorn.java new file mode 100644 index 0000000..f8dac69 --- /dev/null +++ b/src/main/java/lol/aabss/skuishy/elements/entities/conditions/CondHasGoatHorn.java @@ -0,0 +1,27 @@ +package lol.aabss.skuishy.elements.entities.conditions; + +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 lol.aabss.skuishy.other.skript.EntityCondition; +import org.bukkit.entity.Goat; + +@Name("Goat - Has Horn") +@Description("True if the goat has the horn:") +@Examples({ + "if {_goat} has left horn:", + "\tset left horn of {_goat} to false" +}) +@Since("2.8") +public class CondHasGoatHorn extends EntityCondition { + + static { + register(CondHasGoatHorn.class, PropertyType.HAVE, "[goat] (:left|right) horn", "entities"); + } + + @Override + protected boolean run(Goat goat) { + return tags.contains("left") ? goat.hasLeftHorn() : goat.hasRightHorn(); + } +} diff --git a/src/main/java/lol/aabss/skuishy/elements/entities/conditions/CondIsEndermanScreaming.java b/src/main/java/lol/aabss/skuishy/elements/entities/conditions/CondIsEndermanScreaming.java deleted file mode 100644 index 8ac4731..0000000 --- a/src/main/java/lol/aabss/skuishy/elements/entities/conditions/CondIsEndermanScreaming.java +++ /dev/null @@ -1,27 +0,0 @@ -package lol.aabss.skuishy.elements.entities.conditions; - -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 lol.aabss.skuishy.other.skript.EntityCondition; -import org.bukkit.entity.Enderman; - -@Name("Enderman - Is Screaming") -@Description("True if the enderman is screaming.") -@Examples({ - "if {_enderman} is screaming:", - "\tset screaming state of {_enderman} to false" -}) -@Since("2.8") -public class CondIsEndermanScreaming extends EntityCondition { - - static { - register(CondIsEndermanScreaming.class, "[enderman] screaming", "entities"); - } - - @Override - protected boolean run(Enderman enderman) { - return enderman.isScreaming(); - } -} diff --git a/src/main/java/lol/aabss/skuishy/elements/entities/conditions/CondIsScreaming.java b/src/main/java/lol/aabss/skuishy/elements/entities/conditions/CondIsScreaming.java new file mode 100644 index 0000000..20e9e9f --- /dev/null +++ b/src/main/java/lol/aabss/skuishy/elements/entities/conditions/CondIsScreaming.java @@ -0,0 +1,34 @@ +package lol.aabss.skuishy.elements.entities.conditions; + +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 lol.aabss.skuishy.other.skript.EntityCondition; +import org.bukkit.entity.Enderman; +import org.bukkit.entity.Goat; +import org.bukkit.entity.LivingEntity; + +@Name("Enderman/Goat - Is Screaming") +@Description("True if the enderman or goat is screaming.") +@Examples({ + "if {_enderman} is screaming:", + "\tset screaming state of {_enderman} to false" +}) +@Since("2.8") +public class CondIsScreaming extends EntityCondition { + + static { + register(CondIsScreaming.class, "[enderman|goat] screaming", "entities"); + } + + @Override + protected boolean run(LivingEntity entity) { + if (entity instanceof Enderman) { + return ((Enderman) entity).isScreaming(); + } else if (entity instanceof Goat) { + return ((Goat) entity).isScreaming(); + } + return false; + } +} diff --git a/src/main/java/lol/aabss/skuishy/elements/entities/effects/EffGoatRam.java b/src/main/java/lol/aabss/skuishy/elements/entities/effects/EffGoatRam.java new file mode 100644 index 0000000..e53fc47 --- /dev/null +++ b/src/main/java/lol/aabss/skuishy/elements/entities/effects/EffGoatRam.java @@ -0,0 +1,33 @@ +package lol.aabss.skuishy.elements.entities.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.Since; +import lol.aabss.skuishy.other.skript.EntityEffect; +import org.bukkit.entity.Goat; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.Event; + +@Name("Goat - Ram") +@Description("Makes a goat ram into a living entity.") +@Examples({ + "make {_goat} ram into player" +}) +@Since("2.8") +public class EffGoatRam extends EntityEffect { + + static { + Skript.registerEffect(EffJump.class, "make %livingentities% ram into %livingentities%"); + } + + @Override + protected void execute(Goat goat, Event event) { + if (exprs.length >= 2 && exprs[1].getSingle(event) != null) { + LivingEntity entity = (LivingEntity) exprs[1].getSingle(event); + if (entity == null) return; + goat.ram(entity); + } + } +} diff --git a/src/main/java/lol/aabss/skuishy/elements/entities/expressions/ExprEndermanIsScreaming.java b/src/main/java/lol/aabss/skuishy/elements/entities/expressions/ExprEndermanIsScreaming.java deleted file mode 100644 index 8eaf211..0000000 --- a/src/main/java/lol/aabss/skuishy/elements/entities/expressions/ExprEndermanIsScreaming.java +++ /dev/null @@ -1,35 +0,0 @@ -package lol.aabss.skuishy.elements.entities.expressions; - -import ch.njol.skript.classes.Changer; -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 lol.aabss.skuishy.other.skript.EntityExpression; -import org.bukkit.entity.Enderman; -import org.jetbrains.annotations.Nullable; - -@Name("Enderman - Is Screaming") -@Description("Gets/sets the is screaming state of an enderman.") -@Examples({ - "set screaming state of {_enderman} to true" -}) -@Since("2.8") -public class ExprEndermanIsScreaming extends EntityExpression { - - static { - register(ExprEndermanIsScreaming.class, Boolean.class, "[enderman] screaming [state|mode]", "entities"); - } - - @Override - public Boolean get(Enderman enderman) { - return enderman.isScreaming(); - } - - @Override - public void change(Enderman enderman, @Nullable Boolean aBoolean, Changer.ChangeMode mode) { - if (aBoolean != null && mode == Changer.ChangeMode.SET) { - enderman.setScreaming(aBoolean); - } - } -} \ No newline at end of file diff --git a/src/main/java/lol/aabss/skuishy/elements/entities/expressions/ExprGoatHorn.java b/src/main/java/lol/aabss/skuishy/elements/entities/expressions/ExprGoatHorn.java new file mode 100644 index 0000000..9a920a1 --- /dev/null +++ b/src/main/java/lol/aabss/skuishy/elements/entities/expressions/ExprGoatHorn.java @@ -0,0 +1,39 @@ +package lol.aabss.skuishy.elements.entities.expressions; + +import ch.njol.skript.classes.Changer; +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 lol.aabss.skuishy.other.skript.EntityExpression; +import org.bukkit.entity.Goat; +import org.jetbrains.annotations.Nullable; + +@Name("Goat - Horn") +@Description("Gets/sets the horn state of a goat.") +@Examples({ + "set left horn state of {_goat} to true" +}) +@Since("2.8") +public class ExprGoatHorn extends EntityExpression { + + static { + register(ExprGoatHorn.class, Boolean.class, "[goat] (:left|right) horn [mode|state]", "entities"); + } + + @Override + public Boolean get(Goat goat) { + return tags.contains("left") ? goat.hasLeftHorn() : goat.hasRightHorn(); + } + + @Override + public void change(Goat goat, @Nullable Boolean aBoolean, Changer.ChangeMode mode) { + if (aBoolean != null && mode == Changer.ChangeMode.SET) { + if (tags.contains("left")) { + goat.setLeftHorn(aBoolean); + } else { + goat.setRightHorn(aBoolean); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/lol/aabss/skuishy/elements/entities/expressions/multiple/ExprIsScreaming.java b/src/main/java/lol/aabss/skuishy/elements/entities/expressions/multiple/ExprIsScreaming.java new file mode 100644 index 0000000..127c5a9 --- /dev/null +++ b/src/main/java/lol/aabss/skuishy/elements/entities/expressions/multiple/ExprIsScreaming.java @@ -0,0 +1,46 @@ +package lol.aabss.skuishy.elements.entities.expressions.multiple; + +import ch.njol.skript.classes.Changer; +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 lol.aabss.skuishy.other.skript.EntityExpression; +import org.bukkit.entity.Enderman; +import org.bukkit.entity.Goat; +import org.bukkit.entity.LivingEntity; +import org.jetbrains.annotations.Nullable; + +@Name("Enderman/Goat - Is Screaming") +@Description("Gets/sets the is screaming state of an enderman or goat.") +@Examples({ + "set screaming state of {_enderman} to true" +}) +@Since("2.8") +public class ExprIsScreaming extends EntityExpression { + + static { + register(ExprIsScreaming.class, Boolean.class, "[enderman|goat] screaming [state|mode]", "entities"); + } + + @Override + public Boolean get(LivingEntity entity) { + if (entity instanceof Enderman) { + return ((Enderman) entity).isScreaming(); + } else if (entity instanceof Goat) { + return ((Goat) entity).isScreaming(); + } + return null; + } + + @Override + public void change(LivingEntity entity, @Nullable Boolean aBoolean, Changer.ChangeMode mode) { + if (aBoolean != null && mode == Changer.ChangeMode.SET) { + if (entity instanceof Enderman) { + ((Enderman) entity).setScreaming(aBoolean); + } else if (entity instanceof Goat) { + ((Goat) entity).setScreaming(aBoolean); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/lol/aabss/skuishy/other/skript/EntityCondition.java b/src/main/java/lol/aabss/skuishy/other/skript/EntityCondition.java index 0229745..7c38a83 100644 --- a/src/main/java/lol/aabss/skuishy/other/skript/EntityCondition.java +++ b/src/main/java/lol/aabss/skuishy/other/skript/EntityCondition.java @@ -1,14 +1,27 @@ package lol.aabss.skuishy.other.skript; import ch.njol.skript.conditions.base.PropertyCondition; +import ch.njol.skript.lang.Expression; +import ch.njol.skript.lang.SkriptParser; +import ch.njol.util.Kleenean; import org.bukkit.entity.Entity; import org.jetbrains.annotations.NotNull; +import java.util.List; + // not rlly needed but condition didnt wanna feel left out public abstract class EntityCondition extends PropertyCondition implements EntityStatement { + protected List tags; + protected abstract boolean run(T t); + @Override + public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) { + this.tags = parseResult.tags; + return super.init(exprs, matchedPattern, isDelayed, parseResult); + } + @Override public boolean check(Entity entity) { if (accepts(entity)) {