55import com .denizenscript .denizen .events .BukkitScriptEvent ;
66import com .denizenscript .denizencore .objects .core .ElementTag ;
77import com .denizenscript .denizencore .objects .ObjectTag ;
8- import org .bukkit .entity .Animals ;
9- import org .bukkit .entity .Entity ;
8+ import org .bukkit .entity .*;
109import org .bukkit .event .EventHandler ;
1110import org .bukkit .event .Listener ;
1211import 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