From b75fde9c9545286d053c4af35d3742f2bdd9b815 Mon Sep 17 00:00:00 2001 From: CJH3139 Date: Thu, 9 Oct 2025 00:24:24 -0700 Subject: [PATCH 01/13] Add paper's EntityFertilizeEgg event Also change for: - block fertilize event bone[ ]meal alias - ExprBreedingFamily tweaks so that it also accepts the FertilizeEgg event --- .../njol/skript/events/EvtFertilizeEgg.java | 74 +++++++++++++++++++ .../ch/njol/skript/events/SimpleEvents.java | 9 +-- .../breeding/elements/ExprBreedingFamily.java | 35 +++++---- 3 files changed, 100 insertions(+), 18 deletions(-) create mode 100644 src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java diff --git a/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java b/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java new file mode 100644 index 00000000000..78e92e1e599 --- /dev/null +++ b/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java @@ -0,0 +1,74 @@ +package ch.njol.skript.events; + +import ch.njol.skript.Skript; +import ch.njol.skript.entity.EntityType; +import ch.njol.skript.lang.Literal; +import ch.njol.skript.lang.SkriptEvent; +import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.registrations.EventValues; +import io.papermc.paper.event.entity.EntityFertilizeEggEvent; +import org.bukkit.entity.Entity; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; + +public class EvtFertilizeEgg extends SkriptEvent { + + static { + Skript.registerEvent("Entity Fertilize", EvtFertilizeEgg.class, EntityFertilizeEggEvent.class, + "[entity] fertiliz(e|ing) [an] egg [of %-entitytypes%]") + .description( + "Called whenever an entity fertilizes an egg (e.g. a turtle has an egg, a frog becomes pregnant, or a " + + "sniffer finds a sniffer egg).") + .examples( + "on fertilizing egg of turtles:", + "\tsend \"A turtle just fertilized an egg!\"", + "on fertilizing egg:", + "\tif event-entity is a frog:", + "\t\tsend \"A frog just became pregnant!\"" + ) + .since("2.14"); + + EventValues.registerEventValue(EntityFertilizeEggEvent.class, Entity.class, event -> { + assert false; + return event.getEntity(); + }, EventValues.TIME_NOW, + "Use 'mother' and/or 'father' in fertilize egg events", + EntityFertilizeEggEvent.class + ); + } + + private @Nullable Literal entitiesLiteral; + private EntityType @Nullable [] entities; + + @Override + public boolean init(Literal[] args, int matchedPattern, ParseResult parseResult) { + if (args[0] != null) { + //noinspection unchecked + entitiesLiteral = ((Literal) args[0]); + entities = entitiesLiteral.getAll(); + } + return true; + } + + @Override + public boolean check(Event event) { + return event instanceof EntityFertilizeEggEvent fertilizeEvent && checkEntity(fertilizeEvent.getEntity()); + } + + private boolean checkEntity(Entity entity) { + if (entities != null) { + for (EntityType entityType : entities) { + if (entityType.isInstance(entity)) + return true; + } + return false; + } + return true; + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + return "on fertilizing egg" + (entitiesLiteral == null ? "" : " of " + entitiesLiteral); + } + +} diff --git a/src/main/java/ch/njol/skript/events/SimpleEvents.java b/src/main/java/ch/njol/skript/events/SimpleEvents.java index 3dc2317ecff..3624320daae 100644 --- a/src/main/java/ch/njol/skript/events/SimpleEvents.java +++ b/src/main/java/ch/njol/skript/events/SimpleEvents.java @@ -449,11 +449,10 @@ public class SimpleEvents { .description("Called when a horse jumps.") .examples("on horse jump:", "\tpush event-entity upwards at speed 2") .since("2.5.1"); - Skript.registerEvent("Block Fertilize", SimpleEvent.class, BlockFertilizeEvent.class, "[block] fertilize") - .description("Called when a player fertilizes blocks.") - .requiredPlugins("Minecraft 1.13 or newer") - .examples("on block fertilize:", - "\tsend \"Fertilized %size of fertilized blocks% blocks got fertilized.\"") + Skript.registerEvent("Block Fertilize", SimpleEvent.class, BlockFertilizeEvent.class, "[block] (fertilize|bone[ ]meal)") + .description("Called when a player uses bonemeals on blocks.") + .examples("on block bonemeal:", + "\tsend \"%size of fertilized blocks% blocks got bonemealed.\"") .since("2.5"); Skript.registerEvent("Arm Swing", SimpleEvent.class, PlayerAnimationEvent.class, "[player] arm swing") .description("Called when a player swings their arm.") diff --git a/src/main/java/org/skriptlang/skript/bukkit/breeding/elements/ExprBreedingFamily.java b/src/main/java/org/skriptlang/skript/bukkit/breeding/elements/ExprBreedingFamily.java index 6f2331ac9d4..d0022393759 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/breeding/elements/ExprBreedingFamily.java +++ b/src/main/java/org/skriptlang/skript/bukkit/breeding/elements/ExprBreedingFamily.java @@ -10,6 +10,7 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import io.papermc.paper.event.entity.EntityFertilizeEggEvent; import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; import org.bukkit.event.entity.EntityBreedEvent; @@ -38,27 +39,35 @@ public class ExprBreedingFamily extends SimpleExpression { @Override public boolean init(Expression[] expressions, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { - if (!getParser().isCurrentEvent(EntityBreedEvent.class)) { - Skript.error("The 'breeding family' expression can only be used in an breed event."); + if (!getParser().isCurrentEvent(EntityBreedEvent.class) && !getParser().isCurrentEvent(EntityFertilizeEggEvent.class)) { + Skript.error("The 'breeding family' expression can only be used in an breed or fertilize egg event."); + return false; + } + if (getParser().isCurrentEvent(EntityFertilizeEggEvent.class) && matchedPattern >= 2){ + Skript.error("The 'bred child' expression cannot be used in a 'fertilize egg' event."); return false; } - pattern = matchedPattern; return true; } @Override protected @Nullable LivingEntity [] get(Event event) { - if (!(event instanceof EntityBreedEvent breedEvent)) - return new LivingEntity[0]; - - return switch (pattern) { - case 0 -> new LivingEntity[]{breedEvent.getMother()}; - case 1 -> new LivingEntity[]{breedEvent.getFather()}; - case 2 -> new LivingEntity[]{breedEvent.getEntity()}; - case 3 -> new LivingEntity[]{breedEvent.getBreeder()}; - default -> new LivingEntity[0]; - }; + if (event instanceof EntityBreedEvent breedEvent) + return switch (pattern) { + case 0 -> new LivingEntity[]{breedEvent.getMother()}; + case 1 -> new LivingEntity[]{breedEvent.getFather()}; + case 2 -> new LivingEntity[]{breedEvent.getEntity()}; + case 3 -> new LivingEntity[]{breedEvent.getBreeder()}; + default -> new LivingEntity[0]; + }; + else if (event instanceof EntityFertilizeEggEvent fertilizeEggEvent) + return switch (pattern) { + case 0 -> new LivingEntity[]{fertilizeEggEvent.getMother()}; + case 1 -> new LivingEntity[]{fertilizeEggEvent.getFather()}; + default -> new LivingEntity[0]; + }; + return new LivingEntity[0]; } @Override From 642c9f40754f26f6e67928c95dc050f289ca44b1 Mon Sep 17 00:00:00 2001 From: CJH3139 Date: Thu, 9 Oct 2025 01:09:06 -0700 Subject: [PATCH 02/13] Add test skript --- .../njol/skript/events/EvtFertilizeEgg.java | 1 - src/test/skript/junit/EvtFertilizeEgg.sk | 21 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/test/skript/junit/EvtFertilizeEgg.sk diff --git a/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java b/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java index 78e92e1e599..c4a15b4a26d 100644 --- a/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java +++ b/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java @@ -12,7 +12,6 @@ import org.jetbrains.annotations.Nullable; public class EvtFertilizeEgg extends SkriptEvent { - static { Skript.registerEvent("Entity Fertilize", EvtFertilizeEgg.class, EntityFertilizeEggEvent.class, "[entity] fertiliz(e|ing) [an] egg [of %-entitytypes%]") diff --git a/src/test/skript/junit/EvtFertilizeEgg.sk b/src/test/skript/junit/EvtFertilizeEgg.sk new file mode 100644 index 00000000000..418300711f6 --- /dev/null +++ b/src/test/skript/junit/EvtFertilizeEgg.sk @@ -0,0 +1,21 @@ +options: + test: "org.skriptlang.skript.test.tests.syntaxes.events.EvtFertilizeEggTest" + +test "EvtFertilizeEggTest" when running Junit: + add "fertilize egg event - general" to {_evt::*} + add "fertilize egg event - specified entity" to {_evt::*} + add "fertilize egg event - mother" to {_evt::*} + add "fertilize egg event - father" to {_evt::*} + ensure junit test {@test} completes {_evt::*} + +on fertilize: + junit test is {@test} + complete objective "fertilize egg event - general" for {@test} + +on fertilize of frog: + junit test is {@test} + complete objective "fertilize egg event - specified entity" for {@test} + breeding mother is frog + complete objective "fertilize egg event - mother" for {@test} + breeding father is frog + complete objective "fertilize egg event - father" for {@test} From 57b2a517c40394e18c945bfedf175e4d355426e0 Mon Sep 17 00:00:00 2001 From: CJH3139 Date: Fri, 10 Oct 2025 15:28:22 -0700 Subject: [PATCH 03/13] Update EvtFertilizeEgg.java --- .../njol/skript/events/EvtFertilizeEgg.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java b/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java index c4a15b4a26d..2fd5fc96744 100644 --- a/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java +++ b/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java @@ -12,23 +12,23 @@ import org.jetbrains.annotations.Nullable; public class EvtFertilizeEgg extends SkriptEvent { + static { Skript.registerEvent("Entity Fertilize", EvtFertilizeEgg.class, EntityFertilizeEggEvent.class, "[entity] fertiliz(e|ing) [an] egg [of %-entitytypes%]") .description( "Called whenever an entity fertilizes an egg (e.g. a turtle has an egg, a frog becomes pregnant, or a " + "sniffer finds a sniffer egg).") - .examples( - "on fertilizing egg of turtles:", - "\tsend \"A turtle just fertilized an egg!\"", - "on fertilizing egg:", - "\tif event-entity is a frog:", - "\t\tsend \"A frog just became pregnant!\"" - ) - .since("2.14"); + .examples(""" + on fertilizing egg of turtles: + broadcast "A turtle just fertilized an egg!" + on fertilizing egg: + if event-entity is a frog: + broadcast "A frog just became pregnant!" + """) + .since("INSERT VERSION"); EventValues.registerEventValue(EntityFertilizeEggEvent.class, Entity.class, event -> { - assert false; return event.getEntity(); }, EventValues.TIME_NOW, "Use 'mother' and/or 'father' in fertilize egg events", @@ -67,7 +67,7 @@ private boolean checkEntity(Entity entity) { @Override public String toString(@Nullable Event event, boolean debug) { - return "on fertilizing egg" + (entitiesLiteral == null ? "" : " of " + entitiesLiteral); + return "on fertilizing egg" + (entitiesLiteral == null ? "" : " of " + entitiesLiteral.toString(event, debug)); } } From 74cf6b42d97f9289fedc0f8537e2fa52ad4f44a7 Mon Sep 17 00:00:00 2001 From: CJH3139 Date: Sat, 11 Apr 2026 23:24:21 -0700 Subject: [PATCH 04/13] Update ExprBreedingFamily.java --- .../breeding/elements/ExprBreedingFamily.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/breeding/elements/ExprBreedingFamily.java b/src/main/java/org/skriptlang/skript/bukkit/breeding/elements/ExprBreedingFamily.java index d0022393759..8643753bc32 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/breeding/elements/ExprBreedingFamily.java +++ b/src/main/java/org/skriptlang/skript/bukkit/breeding/elements/ExprBreedingFamily.java @@ -5,11 +5,13 @@ import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; import ch.njol.skript.doc.Since; +import ch.njol.skript.lang.EventRestrictedSyntax; 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 ch.njol.util.coll.CollectionUtils; import io.papermc.paper.event.entity.EntityFertilizeEggEvent; import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; @@ -24,7 +26,7 @@ "they make a %bred offspring%\" to breeder" }) @Since("2.10") -public class ExprBreedingFamily extends SimpleExpression { +public class ExprBreedingFamily extends SimpleExpression implements EventRestrictedSyntax { static { Skript.registerExpression(ExprBreedingFamily.class, LivingEntity.class, ExpressionType.SIMPLE, @@ -36,14 +38,15 @@ public class ExprBreedingFamily extends SimpleExpression { private int pattern; + @Override + public Class[] supportedEvents() { + return CollectionUtils.array(EntityBreedEvent.class, EntityFertilizeEggEvent.class); + } + @Override public boolean init(Expression[] expressions, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { - if (!getParser().isCurrentEvent(EntityBreedEvent.class) && !getParser().isCurrentEvent(EntityFertilizeEggEvent.class)) { - Skript.error("The 'breeding family' expression can only be used in an breed or fertilize egg event."); - return false; - } - if (getParser().isCurrentEvent(EntityFertilizeEggEvent.class) && matchedPattern >= 2){ + if (getParser().isCurrentEvent(EntityFertilizeEggEvent.class) && matchedPattern >= 2) { Skript.error("The 'bred child' expression cannot be used in a 'fertilize egg' event."); return false; } From 5e6942f24811007a3c4cf610338a3b2776474df7 Mon Sep 17 00:00:00 2001 From: CJH3139 Date: Sat, 11 Apr 2026 23:54:23 -0700 Subject: [PATCH 05/13] Update EvtFertilizeEgg.sk --- src/test/skript/junit/EvtFertilizeEgg.sk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/skript/junit/EvtFertilizeEgg.sk b/src/test/skript/junit/EvtFertilizeEgg.sk index 418300711f6..1a92629f8c8 100644 --- a/src/test/skript/junit/EvtFertilizeEgg.sk +++ b/src/test/skript/junit/EvtFertilizeEgg.sk @@ -8,11 +8,11 @@ test "EvtFertilizeEggTest" when running Junit: add "fertilize egg event - father" to {_evt::*} ensure junit test {@test} completes {_evt::*} -on fertilize: +on fertilize egg: junit test is {@test} complete objective "fertilize egg event - general" for {@test} -on fertilize of frog: +on fertilize egg of frog: junit test is {@test} complete objective "fertilize egg event - specified entity" for {@test} breeding mother is frog From c4d07e3c4282c67ca75f9cbef757c24201f2fb84 Mon Sep 17 00:00:00 2001 From: CJH3139 Date: Thu, 16 Apr 2026 18:55:30 -0700 Subject: [PATCH 06/13] Update EvtFertilizeEgg Removed all the deprecated things (EventValue & registerEvent) and now uses EventValueRegistry & SyntaxRegistry --- .../njol/skript/events/EvtFertilizeEgg.java | 45 +++++++++---------- .../bukkit/breeding/BreedingModule.java | 14 ++++++ 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java b/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java index 2fd5fc96744..62c817641d6 100644 --- a/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java +++ b/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java @@ -1,38 +1,37 @@ package ch.njol.skript.events; -import ch.njol.skript.Skript; import ch.njol.skript.entity.EntityType; import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptEvent; import ch.njol.skript.lang.SkriptParser.ParseResult; -import ch.njol.skript.registrations.EventValues; import io.papermc.paper.event.entity.EntityFertilizeEggEvent; import org.bukkit.entity.Entity; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.bukkit.registration.BukkitSyntaxInfos; +import org.skriptlang.skript.registration.SyntaxRegistry; public class EvtFertilizeEgg extends SkriptEvent { - static { - Skript.registerEvent("Entity Fertilize", EvtFertilizeEgg.class, EntityFertilizeEggEvent.class, - "[entity] fertiliz(e|ing) [an] egg [of %-entitytypes%]") - .description( - "Called whenever an entity fertilizes an egg (e.g. a turtle has an egg, a frog becomes pregnant, or a " + - "sniffer finds a sniffer egg).") - .examples(""" - on fertilizing egg of turtles: - broadcast "A turtle just fertilized an egg!" - on fertilizing egg: - if event-entity is a frog: - broadcast "A frog just became pregnant!" - """) - .since("INSERT VERSION"); - - EventValues.registerEventValue(EntityFertilizeEggEvent.class, Entity.class, event -> { - return event.getEntity(); - }, EventValues.TIME_NOW, - "Use 'mother' and/or 'father' in fertilize egg events", - EntityFertilizeEggEvent.class + public static void register(SyntaxRegistry registry) { + registry.register( + BukkitSyntaxInfos.Event.KEY, + BukkitSyntaxInfos.Event.builder(EvtFertilizeEgg.class, "Entity Fertilize") + .addEvent(EntityFertilizeEggEvent.class) + .addPatterns("[entity] fertiliz(e|ing) [an] egg [of %-entitytypes%]") + .addDescription( + "Called whenever an entity fertilizes an egg (e.g. a turtle has an egg, a frog becomes pregnant, or a " + + "sniffer finds a sniffer egg).") + .addExample(""" + on fertilizing egg of turtles: + broadcast "A turtle just fertilized an egg!" + on fertilizing egg: + if event-entity is a frog: + broadcast "A frog just became pregnant!" + """) + .addSince("INSERT VERSION") + .supplier(EvtFertilizeEgg::new) + .build() ); } @@ -70,4 +69,4 @@ public String toString(@Nullable Event event, boolean debug) { return "on fertilizing egg" + (entitiesLiteral == null ? "" : " of " + entitiesLiteral.toString(event, debug)); } -} +} \ No newline at end of file diff --git a/src/main/java/org/skriptlang/skript/bukkit/breeding/BreedingModule.java b/src/main/java/org/skriptlang/skript/bukkit/breeding/BreedingModule.java index 86bf152b78d..dff87269c6c 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/breeding/BreedingModule.java +++ b/src/main/java/org/skriptlang/skript/bukkit/breeding/BreedingModule.java @@ -1,7 +1,10 @@ package org.skriptlang.skript.bukkit.breeding; +import ch.njol.skript.events.EvtFertilizeEgg; import ch.njol.skript.lang.util.SimpleEvent; import ch.njol.skript.registrations.EventValues; +import io.papermc.paper.event.entity.EntityFertilizeEggEvent; +import org.bukkit.entity.Entity; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.LivingEntity; import org.bukkit.event.entity.EntityEnterLoveModeEvent; @@ -15,6 +18,8 @@ import org.skriptlang.skript.bukkit.breeding.elements.events.EvtBreed; import org.skriptlang.skript.bukkit.breeding.elements.expressions.ExprBreedingFamily; import org.skriptlang.skript.bukkit.breeding.elements.expressions.ExprLoveTime; +import org.skriptlang.skript.bukkit.lang.eventvalue.EventValue; +import org.skriptlang.skript.bukkit.lang.eventvalue.EventValueRegistry; import org.skriptlang.skript.bukkit.registration.BukkitSyntaxInfos; public class BreedingModule extends HierarchicalAddonModule { @@ -37,6 +42,7 @@ protected void loadSelf(SkriptAddon addon) { EffMakeAdultOrBaby::register, EvtBreed::register, + EvtFertilizeEgg::register, ExprBreedingFamily::register, ExprLoveTime::register @@ -59,6 +65,14 @@ protected void loadSelf(SkriptAddon addon) { EventValues.registerEventValue(EntityEnterLoveModeEvent.class, LivingEntity.class, EntityEnterLoveModeEvent::getEntity); EventValues.registerEventValue(EntityEnterLoveModeEvent.class, HumanEntity.class, EntityEnterLoveModeEvent::getHumanEntity); + + addon.registry(EventValueRegistry.class).register( + EventValue.builder(EntityFertilizeEggEvent.class, Entity.class) + .getter(EntityFertilizeEggEvent::getEntity) + .excludedErrorMessage("Use 'mother' and/or 'father' in fertilize egg events") + .excludes(EntityFertilizeEggEvent.class) + .build() + ); } @Override From 7f0170694a4303bf0f10ef8f066f55403c70b7e3 Mon Sep 17 00:00:00 2001 From: CJH3139 Date: Thu, 16 Apr 2026 19:02:23 -0700 Subject: [PATCH 07/13] Update src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java Co-authored-by: SirSmurfy2 <82696841+Absolutionism@users.noreply.github.com> --- src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java b/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java index 62c817641d6..bc29afec691 100644 --- a/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java +++ b/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java @@ -69,4 +69,4 @@ public String toString(@Nullable Event event, boolean debug) { return "on fertilizing egg" + (entitiesLiteral == null ? "" : " of " + entitiesLiteral.toString(event, debug)); } -} \ No newline at end of file +} From f7c53e40e51ad2dc4505a2245342c02bd5e47142 Mon Sep 17 00:00:00 2001 From: CJH3139 Date: Thu, 16 Apr 2026 21:05:42 -0700 Subject: [PATCH 08/13] Add EventValues for player, itemstack and xp --- .../njol/skript/events/EvtFertilizeEgg.java | 2 + .../bukkit/breeding/BreedingModule.java | 19 ++++++++- .../syntaxes/events/EvtFertilizeEggTest.java | 39 +++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtFertilizeEggTest.java diff --git a/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java b/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java index bc29afec691..6504f47a3ec 100644 --- a/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java +++ b/src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java @@ -25,6 +25,8 @@ public static void register(SyntaxRegistry registry) { .addExample(""" on fertilizing egg of turtles: broadcast "A turtle just fertilized an egg!" + """) + .addExample(""" on fertilizing egg: if event-entity is a frog: broadcast "A frog just became pregnant!" diff --git a/src/main/java/org/skriptlang/skript/bukkit/breeding/BreedingModule.java b/src/main/java/org/skriptlang/skript/bukkit/breeding/BreedingModule.java index dff87269c6c..600ae7b7619 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/breeding/BreedingModule.java +++ b/src/main/java/org/skriptlang/skript/bukkit/breeding/BreedingModule.java @@ -1,13 +1,17 @@ package org.skriptlang.skript.bukkit.breeding; +import ch.njol.skript.classes.Changer.ChangeMode; import ch.njol.skript.events.EvtFertilizeEgg; import ch.njol.skript.lang.util.SimpleEvent; import ch.njol.skript.registrations.EventValues; +import ch.njol.skript.util.Experience; import io.papermc.paper.event.entity.EntityFertilizeEggEvent; import org.bukkit.entity.Entity; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityEnterLoveModeEvent; +import org.bukkit.inventory.ItemStack; import org.skriptlang.skript.addon.AddonModule; import org.skriptlang.skript.addon.HierarchicalAddonModule; import org.skriptlang.skript.addon.SkriptAddon; @@ -66,13 +70,26 @@ protected void loadSelf(SkriptAddon addon) { EventValues.registerEventValue(EntityEnterLoveModeEvent.class, LivingEntity.class, EntityEnterLoveModeEvent::getEntity); EventValues.registerEventValue(EntityEnterLoveModeEvent.class, HumanEntity.class, EntityEnterLoveModeEvent::getHumanEntity); - addon.registry(EventValueRegistry.class).register( + EventValueRegistry eventValueRegistry = addon.registry(EventValueRegistry.class); + eventValueRegistry.register( EventValue.builder(EntityFertilizeEggEvent.class, Entity.class) .getter(EntityFertilizeEggEvent::getEntity) .excludedErrorMessage("Use 'mother' and/or 'father' in fertilize egg events") .excludes(EntityFertilizeEggEvent.class) .build() ); + eventValueRegistry.register( + EventValue.simple(EntityFertilizeEggEvent.class, Player.class, EntityFertilizeEggEvent::getBreeder) + ); + eventValueRegistry.register( + EventValue.simple(EntityFertilizeEggEvent.class, ItemStack.class, EntityFertilizeEggEvent::getBredWith) + ); + eventValueRegistry.register( + EventValue.builder(EntityFertilizeEggEvent.class, Experience.class) + .getter(event -> new Experience(event.getExperience())) + .registerChanger(ChangeMode.SET, (event, value) -> event.setExperience(value.getXP())) + .build() + ); } @Override diff --git a/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtFertilizeEggTest.java b/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtFertilizeEggTest.java new file mode 100644 index 00000000000..bb03b77af98 --- /dev/null +++ b/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtFertilizeEggTest.java @@ -0,0 +1,39 @@ +package org.skriptlang.skript.test.tests.syntaxes.events; + +import ch.njol.skript.test.runner.SkriptJUnitTest; +import io.papermc.paper.event.entity.EntityFertilizeEggEvent; +import org.bukkit.Bukkit; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Frog; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class EvtFertilizeEggTest extends SkriptJUnitTest { + + static { + setShutdownDelay(1); + } + + private Frog mother; + private Frog father; + + @Before + public void before() { + mother = spawnTestEntity(EntityType.FROG); + father = spawnTestEntity(EntityType.FROG); + } + + @Test + public void test() { + Bukkit.getPluginManager().callEvent( + new EntityFertilizeEggEvent(mother, father, null, null, 0)); + } + + @After + public void after() { + mother.remove(); + father.remove(); + } + +} \ No newline at end of file From c47c752d48a925841988c146402ebab993895ee1 Mon Sep 17 00:00:00 2001 From: CJH3139 Date: Fri, 17 Apr 2026 09:03:50 -0700 Subject: [PATCH 09/13] Update src/main/java/ch/njol/skript/events/SimpleEvents.java Co-authored-by: SirSmurfy2 <82696841+Absolutionism@users.noreply.github.com> --- src/main/java/ch/njol/skript/events/SimpleEvents.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/ch/njol/skript/events/SimpleEvents.java b/src/main/java/ch/njol/skript/events/SimpleEvents.java index 41bce6e37e5..83b6223a3c8 100644 --- a/src/main/java/ch/njol/skript/events/SimpleEvents.java +++ b/src/main/java/ch/njol/skript/events/SimpleEvents.java @@ -451,8 +451,10 @@ public class SimpleEvents { .since("2.5.1"); Skript.registerEvent("Block Fertilize", SimpleEvent.class, BlockFertilizeEvent.class, "[block] (fertilize|bone[ ]meal)") .description("Called when a player uses bonemeals on blocks.") - .examples("on block bonemeal:", - "\tsend \"%size of fertilized blocks% blocks got bonemealed.\"") + .examples(""" + on block bonemeal: + send "%size of fertilized blocks% blocks got bonemealed." + """) .since("2.5"); Skript.registerEvent("Arm Swing", SimpleEvent.class, PlayerAnimationEvent.class, "[player] arm swing") .description("Called when a player swings their arm.") From a82d3dee50141af16d3f849eceb0a971a7593688 Mon Sep 17 00:00:00 2001 From: CJH3139 Date: Fri, 17 Apr 2026 09:04:01 -0700 Subject: [PATCH 10/13] Update src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtFertilizeEggTest.java Co-authored-by: SirSmurfy2 <82696841+Absolutionism@users.noreply.github.com> --- .../skript/test/tests/syntaxes/events/EvtFertilizeEggTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtFertilizeEggTest.java b/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtFertilizeEggTest.java index bb03b77af98..1e565cf01d4 100644 --- a/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtFertilizeEggTest.java +++ b/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtFertilizeEggTest.java @@ -36,4 +36,4 @@ public void after() { father.remove(); } -} \ No newline at end of file +} From ad29c231df9d576746acd2ab1127c9e4b8ba5c1e Mon Sep 17 00:00:00 2001 From: CJH3139 Date: Fri, 17 Apr 2026 09:34:42 -0700 Subject: [PATCH 11/13] Add player, itemstack, and experience to make sure event values work in the skript file --- .../tests/syntaxes/events/EvtFertilizeEggTest.java | 10 +++++++++- src/test/skript/junit/EvtFertilizeEgg.sk | 9 +++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtFertilizeEggTest.java b/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtFertilizeEggTest.java index 1e565cf01d4..7a1eb016602 100644 --- a/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtFertilizeEggTest.java +++ b/src/test/java/org/skriptlang/skript/test/tests/syntaxes/events/EvtFertilizeEggTest.java @@ -3,8 +3,12 @@ import ch.njol.skript.test.runner.SkriptJUnitTest; import io.papermc.paper.event.entity.EntityFertilizeEggEvent; import org.bukkit.Bukkit; +import org.bukkit.Material; import org.bukkit.entity.EntityType; import org.bukkit.entity.Frog; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.easymock.EasyMock; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -17,17 +21,21 @@ public class EvtFertilizeEggTest extends SkriptJUnitTest { private Frog mother; private Frog father; + private Player player; @Before public void before() { mother = spawnTestEntity(EntityType.FROG); father = spawnTestEntity(EntityType.FROG); + + player = EasyMock.niceMock(Player.class); + EasyMock.replay(player); } @Test public void test() { Bukkit.getPluginManager().callEvent( - new EntityFertilizeEggEvent(mother, father, null, null, 0)); + new EntityFertilizeEggEvent(mother, father, player, new ItemStack(Material.SLIME_BALL), 5)); } @After diff --git a/src/test/skript/junit/EvtFertilizeEgg.sk b/src/test/skript/junit/EvtFertilizeEgg.sk index 1a92629f8c8..d74fbc121eb 100644 --- a/src/test/skript/junit/EvtFertilizeEgg.sk +++ b/src/test/skript/junit/EvtFertilizeEgg.sk @@ -6,6 +6,9 @@ test "EvtFertilizeEggTest" when running Junit: add "fertilize egg event - specified entity" to {_evt::*} add "fertilize egg event - mother" to {_evt::*} add "fertilize egg event - father" to {_evt::*} + add "fertilize egg event - breeder is player" to {_evt::*} + add "fertilize egg event - item is slimeball" to {_evt::*} + add "fertilize egg event - experience is 5" to {_evt::*} ensure junit test {@test} completes {_evt::*} on fertilize egg: @@ -19,3 +22,9 @@ on fertilize egg of frog: complete objective "fertilize egg event - mother" for {@test} breeding father is frog complete objective "fertilize egg event - father" for {@test} + if event-player is a player: + complete objective "fertilize egg event - breeder is player" for {@test} + if event-item is slimeball: + complete objective "fertilize egg event - item is slimeball" for {@test} + if event-experience is 5: + complete objective "fertilize egg event - experience is 5" for {@test} From d000757d2b4ea36541228b744ebe47f0d634d599 Mon Sep 17 00:00:00 2001 From: CJH3139 Date: Fri, 17 Apr 2026 09:58:40 -0700 Subject: [PATCH 12/13] Update EvtFertilizeEgg.sk --- src/test/skript/junit/EvtFertilizeEgg.sk | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/skript/junit/EvtFertilizeEgg.sk b/src/test/skript/junit/EvtFertilizeEgg.sk index d74fbc121eb..38a8fe0ed5b 100644 --- a/src/test/skript/junit/EvtFertilizeEgg.sk +++ b/src/test/skript/junit/EvtFertilizeEgg.sk @@ -7,7 +7,7 @@ test "EvtFertilizeEggTest" when running Junit: add "fertilize egg event - mother" to {_evt::*} add "fertilize egg event - father" to {_evt::*} add "fertilize egg event - breeder is player" to {_evt::*} - add "fertilize egg event - item is slimeball" to {_evt::*} + add "fertilize egg event - item is slime ball" to {_evt::*} add "fertilize egg event - experience is 5" to {_evt::*} ensure junit test {@test} completes {_evt::*} @@ -24,7 +24,7 @@ on fertilize egg of frog: complete objective "fertilize egg event - father" for {@test} if event-player is a player: complete objective "fertilize egg event - breeder is player" for {@test} - if event-item is slimeball: - complete objective "fertilize egg event - item is slimeball" for {@test} + if event-item is slime ball: + complete objective "fertilize egg event - item is slime ball" for {@test} if event-experience is 5: complete objective "fertilize egg event - experience is 5" for {@test} From 7fffb1fbb4b4b52993f307eaa2bf6e1668b5452a Mon Sep 17 00:00:00 2001 From: CJH3139 Date: Mon, 20 Apr 2026 01:52:26 -0700 Subject: [PATCH 13/13] Update ExprBreedingFamily.java --- .../elements/expressions/ExprBreedingFamily.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/breeding/elements/expressions/ExprBreedingFamily.java b/src/main/java/org/skriptlang/skript/bukkit/breeding/elements/expressions/ExprBreedingFamily.java index 9a15613e380..b5130c59968 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/breeding/elements/expressions/ExprBreedingFamily.java +++ b/src/main/java/org/skriptlang/skript/bukkit/breeding/elements/expressions/ExprBreedingFamily.java @@ -45,11 +45,6 @@ public static void register(SyntaxRegistry registry) { private int pattern; - @Override - public Class[] supportedEvents() { - return CollectionUtils.array(EntityBreedEvent.class, EntityFertilizeEggEvent.class); - } - @Override public boolean init(Expression[] expressions, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { @@ -61,6 +56,11 @@ public boolean init(Expression[] expressions, int matchedPattern, return true; } + @Override + public Class[] supportedEvents() { + return CollectionUtils.array(EntityBreedEvent.class, EntityFertilizeEggEvent.class); + } + @Override protected @Nullable LivingEntity [] get(Event event) { if (event instanceof EntityBreedEvent breedEvent)