Skip to content
Open
Show file tree
Hide file tree
Changes from 2 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 {
Comment on lines 14 to 16
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
public class EvtFertilizeEgg extends SkriptEvent {
static {
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!\""
)
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
.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!\""
)
.examples("""
on fertilizing egg of turtles:
send "A turtle just fertilized an egg!"
on fertilizing egg:
if event-entity is a frog:
send "A frog just became pregnant!"
""")

Also, use broadcast instead of send since that's invalid as there's no default player to send a message to.

.since("2.14");
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
.since("2.14");
.since("INSERT VERSION");


EventValues.registerEventValue(EntityFertilizeEggEvent.class, Entity.class, event -> {
assert false;
Copy link
Member

Choose a reason for hiding this comment

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

this will error on all servers with the ea flag, so probably best to remove it

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);
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
return "on fertilizing egg" + (entitiesLiteral == null ? "" : " of " + entitiesLiteral);
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