Skip to content

Commit 28d325c

Browse files
authored
Bug fix for villager breeding not being cancellable (#2714)
* Fixed villager breeding not being cancellable * aya update
1 parent 2d9a304 commit 28d325c

File tree

1 file changed

+22
-32
lines changed

1 file changed

+22
-32
lines changed

plugin/src/main/java/com/denizenscript/denizen/events/entity/EntityBreedScriptEvent.java

Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
import com.denizenscript.denizen.events.BukkitScriptEvent;
66
import com.denizenscript.denizencore.objects.core.ElementTag;
77
import com.denizenscript.denizencore.objects.ObjectTag;
8-
import org.bukkit.entity.Animals;
9-
import org.bukkit.entity.Entity;
8+
import org.bukkit.entity.*;
109
import org.bukkit.event.EventHandler;
1110
import org.bukkit.event.Listener;
1211
import org.bukkit.event.entity.EntityBreedEvent;
@@ -40,6 +39,13 @@ public class EntityBreedScriptEvent extends BukkitScriptEvent implements Listene
4039

4140
public EntityBreedScriptEvent() {
4241
registerCouldMatcher("<entity> breeds");
42+
this.<EntityBreedScriptEvent, ElementTag>registerOptionalDetermination(null, ElementTag.class, (evt, context, determination) -> {
43+
if (determination.isInt()) {
44+
evt.event.setExperience(determination.asInt());
45+
return true;
46+
}
47+
return false;
48+
});
4349
}
4450

4551
private EntityTag entity;
@@ -61,46 +67,30 @@ public boolean matches(ScriptPath path) {
6167
return super.matches(path);
6268
}
6369

64-
@Override
65-
public boolean applyDetermination(ScriptPath path, ObjectTag determinationObj) {
66-
if (determinationObj instanceof ElementTag element && element.isInt()) {
67-
experience = element.asInt();
68-
event.setExperience(experience);
69-
return true;
70-
}
71-
return super.applyDetermination(path, determinationObj);
72-
}
73-
7470
@Override
7571
public ObjectTag getContext(String name) {
76-
if (name.equals("child")) {
77-
return entity.getDenizenObject();
78-
}
79-
else if (name.equals("breeder") && breeder != null) {
80-
return breeder.getDenizenObject();
81-
}
82-
else if (name.equals("father")) {
83-
return father.getDenizenObject();
84-
}
85-
else if (name.equals("mother")) {
86-
return mother.getDenizenObject();
87-
}
88-
else if (name.equals("item") && item != null) {
89-
return item;
90-
}
91-
else if (name.equals("experience")) {
92-
return new ElementTag(experience);
93-
}
94-
return super.getContext(name);
72+
return switch (name) {
73+
case "child" -> entity.getDenizenObject();
74+
case "breeder" -> breeder == null ? null : breeder.getDenizenObject();
75+
case "father" -> father.getDenizenObject();
76+
case "mother" -> mother.getDenizenObject();
77+
case "item" -> item;
78+
case "experience" -> new ElementTag(experience);
79+
default -> super.getContext(name);
80+
};
9581
}
9682

9783
@Override
9884
public void cancellationChanged() {
9985
// Prevent entities from continuing to breed with each other
100-
if (cancelled) {
86+
if (cancelled && entity.getBukkitEntity() instanceof Animals) {
10187
((Animals) father.getLivingEntity()).setLoveModeTicks(0);
10288
((Animals) mother.getLivingEntity()).setLoveModeTicks(0);
10389
}
90+
else if (cancelled && entity.getBukkitEntity() instanceof Villager) {
91+
((Villager) father.getLivingEntity()).getInventory().clear();
92+
((Villager) mother.getLivingEntity()).getInventory().clear();
93+
}
10494
super.cancellationChanged();
10595
}
10696

0 commit comments

Comments
 (0)