Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions src/main/java/ch/njol/skript/events/EvtFertilizeEgg.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
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:
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
);
}

private @Nullable Literal<EntityType> entitiesLiteral;
private EntityType @Nullable [] entities;

@Override
public boolean init(Literal<?>[] args, int matchedPattern, ParseResult parseResult) {
if (args[0] != null) {
//noinspection unchecked
entitiesLiteral = ((Literal<EntityType>) 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.toString(event, debug));
}

}
9 changes: 4 additions & 5 deletions src/main/java/ch/njol/skript/events/SimpleEvents.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -38,27 +39,35 @@ public class ExprBreedingFamily extends SimpleExpression<LivingEntity> {
@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;
}
Comment on lines +42 to +45
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EventRestrictedSyntax

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
Expand Down
21 changes: 21 additions & 0 deletions src/test/skript/junit/EvtFertilizeEgg.sk
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

where's the java code for summoning the frogs?

Original file line number Diff line number Diff line change
@@ -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}
Loading