From 636450b0d257e37c85a87a589014cc088199957f Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Sat, 4 Jan 2025 00:44:36 -0500 Subject: [PATCH 1/6] Initial Commit --- .../njol/skript/conditions/CondIsRiding.java | 69 ++++++++++------ .../ch/njol/skript/effects/EffVehicle.java | 82 ++++++++++--------- .../tests/syntaxes/effects/EffVehicle.sk | 28 +++++++ 3 files changed, 114 insertions(+), 65 deletions(-) create mode 100644 src/test/skript/tests/syntaxes/effects/EffVehicle.sk diff --git a/src/main/java/ch/njol/skript/conditions/CondIsRiding.java b/src/main/java/ch/njol/skript/conditions/CondIsRiding.java index d62b58fcd73..57d8dc93d3d 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsRiding.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsRiding.java @@ -1,5 +1,7 @@ package ch.njol.skript.conditions; +import ch.njol.skript.entity.EntityData; +import ch.njol.skript.lang.util.SimpleExpression; import org.bukkit.entity.Entity; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; @@ -10,7 +12,6 @@ import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; import ch.njol.skript.doc.Since; -import ch.njol.skript.entity.EntityData; import ch.njol.skript.lang.Condition; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -20,41 +21,59 @@ * @author Peter Güttinger */ @Name("Is Riding") -@Description("Tests whether an entity is riding another or is in a vehicle.") -@Examples({"player is riding a saddled pig"}) -@Since("2.0") +@Description("Tests whether an entity is riding any entity, a specific entity type, or a specific entity.") +@Examples({ + "if player is riding:", + "if player is riding any entity:", + "if player is riding a saddled pig:", + "if player is riding last spawned horse:" +}) +@Since("2.0, INSERT VERSION (entities)") public class CondIsRiding extends Condition { static { - PropertyCondition.register(CondIsRiding.class, "riding [%entitydatas%]", "entities"); + PropertyCondition.register(CondIsRiding.class, "riding [any entity|%-entitydatas/entities%]", "entities"); } - - @SuppressWarnings("null") - private Expression entities; - @SuppressWarnings("null") - private Expression> types; - - @SuppressWarnings({"unchecked", "null"}) + + private Expression riders; + private @Nullable Expression riding; + @Override - public boolean init(final Expression[] exprs, final int matchedPattern, final Kleenean isDelayed, final ParseResult parseResult) { - entities = (Expression) exprs[0]; - types = (Expression>) exprs[1]; + public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { + //noinspection unchecked + riders = (Expression) exprs[0]; + riding = exprs[1]; setNegated(matchedPattern == 1); return true; } - + @Override - public boolean check(final Event e) { - return entities.check(e, - entity -> types.check(e, - data -> data.isInstance(entity.getVehicle()) - ), isNegated()); + public boolean check(Event event) { + if (riding == null) + return riders.check(event, rider -> rider.getVehicle() != null, isNegated()); + Object[] riding = this.riding.getArray(event); + return riders.check(event, rider -> { + Entity vehicle = rider.getVehicle(); + if (vehicle == null) + return false; + return SimpleExpression.check(riding, object -> { + if (object instanceof EntityData entityData) { + return entityData.isInstance(vehicle); + } else if (object instanceof Entity entity) { + return vehicle == entity; + } + return false; + }, false, false); + }, isNegated()); } - + @Override - public String toString(final @Nullable Event e, final boolean debug) { - return PropertyCondition.toString(this, PropertyType.BE, e, debug, entities, - "riding " + types.toString(e, debug)); + public String toString(@Nullable Event event, boolean debug) { + String property = "riding"; + if (riding != null) + property += " " + riding.toString(event, debug); + return PropertyCondition.toString(this, PropertyType.BE, event, debug, riders, + property); } } diff --git a/src/main/java/ch/njol/skript/effects/EffVehicle.java b/src/main/java/ch/njol/skript/effects/EffVehicle.java index 39e9bd58e49..86a43b817cc 100644 --- a/src/main/java/ch/njol/skript/effects/EffVehicle.java +++ b/src/main/java/ch/njol/skript/effects/EffVehicle.java @@ -20,26 +20,27 @@ * @author Peter Güttinger */ @Name("Vehicle") -@Description({"Makes an entity ride another entity, e.g. a minecart, a saddled pig, an arrow, etc."}) -@Examples({"make the player ride a saddled pig", - "make the attacker ride the victim"}) +@Description("Makes an entity ride another entity, e.g. a minecart, a saddled pig, an arrow, etc.") +@Examples({ + "make the player ride a saddled pig", + "make the attacker ride the victim" +}) @Since("2.0") public class EffVehicle extends Effect { + static { Skript.registerEffect(EffVehicle.class, "(make|let|force) %entities% [to] (ride|mount) [(in|on)] %"+ (PassengerUtils.hasMultiplePassenger() ? "entities" : "entity") +"/entitydatas%", "(make|let|force) %entities% [to] (dismount|(dismount|leave) (from|of|) (any|the[ir]|his|her|) vehicle[s])", "(eject|dismount) (any|the|) passenger[s] (of|from) %entities%"); } - - @Nullable - private Expression passengers; - @Nullable - private Expression vehicles; - - @SuppressWarnings({"unchecked", "null"}) + + private @Nullable Expression passengers; + private @Nullable Expression vehicles; + @Override - public boolean init(final Expression[] exprs, final int matchedPattern, final Kleenean isDelayed, final ParseResult parseResult) { + public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { + //noinspection unchecked passengers = matchedPattern == 2 ? null : (Expression) exprs[0]; vehicles = matchedPattern == 1 ? null : exprs[exprs.length - 1]; if (!PassengerUtils.hasMultiplePassenger() && passengers != null && vehicles != null && !passengers.isSingle() && vehicles.isSingle() && Entity.class.isAssignableFrom(vehicles.getReturnType())) @@ -48,60 +49,61 @@ public boolean init(final Expression[] exprs, final int matchedPattern, final } @Override - protected void execute(final Event e) { - final Expression vehicles = this.vehicles; - final Expression passengers = this.passengers; + protected void execute(Event event) { + // matchedPattern = 1 if (vehicles == null) { assert passengers != null; - for (final Entity p : passengers.getArray(e)) - p.leaveVehicle(); + for (Entity passenger : passengers.getArray(event)) + passenger.leaveVehicle(); return; } + // matchedPattern = 2 if (passengers == null) { assert vehicles != null; - for (final Object v : vehicles.getArray(e)) - ((Entity) v).eject(); + for (Object vehicle : vehicles.getArray(event)) + ((Entity) vehicle).eject(); return; } - final Object[] vs = vehicles.getArray(e); - if (vs.length == 0) + // matchedPattern = 0 + Object[] vehiclesArray = vehicles.getArray(event); + if (vehiclesArray.length == 0) return; - final Entity[] ps = passengers.getArray(e); - if (ps.length == 0) + Entity[] passengersArray = passengers.getArray(event); + if (passengersArray.length == 0) return; - for (final Object v : vs) { - if (v instanceof Entity) { - ((Entity) v).eject(); - for (Entity p : ps){ - assert p != null; - p.leaveVehicle(); - PassengerUtils.addPassenger((Entity)v, p); //For 1.9 and lower, it will only set the last one. + for (Object vehicle : vehiclesArray) { + if (vehicle instanceof Entity vehicleEntity) { + vehicleEntity.eject(); + for (Entity passenger : passengersArray) { + assert passenger != null; + if (passenger == vehicleEntity) + continue; + passenger.leaveVehicle(); + PassengerUtils.addPassenger((Entity)vehicle, passenger); //For 1.9 and lower, it will only set the last one. } } else { - for (final Entity p : ps) { - assert p != null : passengers; - final Entity en = ((EntityData) v).spawn(p.getLocation()); - if (en == null) + for (Entity passenger : passengersArray) { + assert passenger != null : passengers; + Entity entity = ((EntityData) vehicle).spawn(passenger.getLocation()); + if (entity == null) return; - PassengerUtils.addPassenger(en, p); + PassengerUtils.addPassenger(entity, passenger); } } } } @Override - public String toString(final @Nullable Event e, final boolean debug) { - final Expression vehicles = this.vehicles; - final Expression passengers = this.passengers; + public String toString(@Nullable Event event, boolean debug) { if (vehicles == null) { assert passengers != null; - return "make " + passengers.toString(e, debug) + " dismount"; + return "make " + passengers.toString(event, debug) + " dismount"; } if (passengers == null) { assert vehicles != null; - return "eject passenger" + (vehicles.isSingle() ? "" : "s") + " of " + vehicles.toString(e, debug); + return "eject passenger" + (vehicles.isSingle() ? "" : "s") + " of " + vehicles.toString(event, debug); } - return "make " + passengers.toString(e, debug) + " ride " + vehicles.toString(e, debug); + return "make " + passengers.toString(event, debug) + " ride " + vehicles.toString(event, debug); } } diff --git a/src/test/skript/tests/syntaxes/effects/EffVehicle.sk b/src/test/skript/tests/syntaxes/effects/EffVehicle.sk new file mode 100644 index 00000000000..2916cf3a61b --- /dev/null +++ b/src/test/skript/tests/syntaxes/effects/EffVehicle.sk @@ -0,0 +1,28 @@ +test "mounting vehicle": + spawn a villager at test-location: + set {_vehicle} to entity + spawn a cow, a pig and a sheep at test-location: + add entity to {_passengers::*} + make {_passengers::*} ride {_vehicle} + loop {_passengers::*}: + assert loop-value is riding with "Is Riding condition in general should pass" + assert loop-value is riding any entity with "Is Riding condition in general with any entity should pass" + assert loop-value is riding a villager with "Is Riding condition with entity data should pass" + assert loop-value is riding {_vehicle} with "Is Riding condition with entity should pass" + assert loop-value is not riding a zombie villager with "Is Riding condition with wrong entity data should fail" + + make {_passengers::*} dismount + + loop {_passengers::*}: + assert loop-value is not riding with "Is Riding condition in general should fail" + assert loop-value is not riding any entity with "Is Riding condition in general with any entity should fail" + assert loop-value is not riding a villager with "Is Riding condition with entity data should fail" + assert loop-value is not riding {_vehicle} with "Is Riding condition with entity should fail" + + # Test exception on entity riding itself + make {_vehicle} ride {_vehicle} + assert {_vehicle} is not riding {_vehicle} with "Entity can not be riding itself" + assert passengers of {_vehicle} does not contain {_vehicle} with "Passengers of vehicle should not contain the vehicle itself" + + clear entity within {_vehicle} + clear entities within {_passengers::*} From 56af9bd7c51eb1c1269b72f70f2e3035c60f1916 Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Sat, 4 Jan 2025 00:56:19 -0500 Subject: [PATCH 2/6] Better Assertion Messages --- .../tests/syntaxes/effects/EffVehicle.sk | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/test/skript/tests/syntaxes/effects/EffVehicle.sk b/src/test/skript/tests/syntaxes/effects/EffVehicle.sk index 2916cf3a61b..fe2d31366ed 100644 --- a/src/test/skript/tests/syntaxes/effects/EffVehicle.sk +++ b/src/test/skript/tests/syntaxes/effects/EffVehicle.sk @@ -5,19 +5,19 @@ test "mounting vehicle": add entity to {_passengers::*} make {_passengers::*} ride {_vehicle} loop {_passengers::*}: - assert loop-value is riding with "Is Riding condition in general should pass" - assert loop-value is riding any entity with "Is Riding condition in general with any entity should pass" - assert loop-value is riding a villager with "Is Riding condition with entity data should pass" - assert loop-value is riding {_vehicle} with "Is Riding condition with entity should pass" - assert loop-value is not riding a zombie villager with "Is Riding condition with wrong entity data should fail" + assert loop-value is riding with "Entity (%loop-value%) should pass riding in general" + assert loop-value is riding any entity with "Entity (%loop-value%) should pass riding in general with 'any entity' pattern" + assert loop-value is riding a villager with "Entity (%loop-value%) should pass riding a villager entity data" + assert loop-value is riding {_vehicle} with "Entity (%loop-value%) should pass riding specific entity" + assert loop-value is not riding a zombie villager with "Entity (%loop-value%) should pass riding the wrong entity data" make {_passengers::*} dismount loop {_passengers::*}: - assert loop-value is not riding with "Is Riding condition in general should fail" - assert loop-value is not riding any entity with "Is Riding condition in general with any entity should fail" - assert loop-value is not riding a villager with "Is Riding condition with entity data should fail" - assert loop-value is not riding {_vehicle} with "Is Riding condition with entity should fail" + assert loop-value is not riding with "Entity (%loop-value%) should pass not riding in general" + assert loop-value is not riding any entity with "Entity (%loop-value%) should pass not riding in general with 'any entity' pattern" + assert loop-value is not riding a villager with "Entity (%loop-value%) should pass not riding a villager entity data" + assert loop-value is not riding {_vehicle} with "Entity (%loop-value%) should pass not riding specific entity" # Test exception on entity riding itself make {_vehicle} ride {_vehicle} From 0274d0c51b496f0ae353f14b5c42a7b479372d5e Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:40:03 -0500 Subject: [PATCH 3/6] Remove PassengerUtils usage --- .../ch/njol/skript/conditions/CondIsRiding.java | 7 +++++-- .../java/ch/njol/skript/effects/EffVehicle.java | 17 ++++++----------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/main/java/ch/njol/skript/conditions/CondIsRiding.java b/src/main/java/ch/njol/skript/conditions/CondIsRiding.java index 57d8dc93d3d..fc87c4c053b 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsRiding.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsRiding.java @@ -49,13 +49,17 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye @Override public boolean check(Event event) { + // Entities are riding in general if (riding == null) return riders.check(event, rider -> rider.getVehicle() != null, isNegated()); Object[] riding = this.riding.getArray(event); + // Entities are riding a specific type of entity or specific entity return riders.check(event, rider -> { Entity vehicle = rider.getVehicle(); + // Entity is not riding anything if (vehicle == null) return false; + // An entity cannot be riding multiple entities/vehicles, will be treated as an 'or' list return SimpleExpression.check(riding, object -> { if (object instanceof EntityData entityData) { return entityData.isInstance(vehicle); @@ -72,8 +76,7 @@ public String toString(@Nullable Event event, boolean debug) { String property = "riding"; if (riding != null) property += " " + riding.toString(event, debug); - return PropertyCondition.toString(this, PropertyType.BE, event, debug, riders, - property); + return PropertyCondition.toString(this, PropertyType.BE, event, debug, riders, property); } } diff --git a/src/main/java/ch/njol/skript/effects/EffVehicle.java b/src/main/java/ch/njol/skript/effects/EffVehicle.java index 86a43b817cc..0e754b0289e 100644 --- a/src/main/java/ch/njol/skript/effects/EffVehicle.java +++ b/src/main/java/ch/njol/skript/effects/EffVehicle.java @@ -1,11 +1,6 @@ package ch.njol.skript.effects; -import org.bukkit.entity.Entity; -import org.bukkit.event.Event; -import org.jetbrains.annotations.Nullable; - import ch.njol.skript.Skript; -import ch.njol.skript.bukkitutil.PassengerUtils; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; @@ -15,6 +10,9 @@ import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; +import org.bukkit.entity.Entity; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; /** * @author Peter Güttinger @@ -30,7 +28,7 @@ public class EffVehicle extends Effect { static { Skript.registerEffect(EffVehicle.class, - "(make|let|force) %entities% [to] (ride|mount) [(in|on)] %"+ (PassengerUtils.hasMultiplePassenger() ? "entities" : "entity") +"/entitydatas%", + "(make|let|force) %entities% [to] (ride|mount) [(in|on)] %entities/entitydatas%", "(make|let|force) %entities% [to] (dismount|(dismount|leave) (from|of|) (any|the[ir]|his|her|) vehicle[s])", "(eject|dismount) (any|the|) passenger[s] (of|from) %entities%"); } @@ -43,8 +41,6 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye //noinspection unchecked passengers = matchedPattern == 2 ? null : (Expression) exprs[0]; vehicles = matchedPattern == 1 ? null : exprs[exprs.length - 1]; - if (!PassengerUtils.hasMultiplePassenger() && passengers != null && vehicles != null && !passengers.isSingle() && vehicles.isSingle() && Entity.class.isAssignableFrom(vehicles.getReturnType())) - Skript.warning("An entity can only have one passenger"); return true; } @@ -73,13 +69,12 @@ protected void execute(Event event) { return; for (Object vehicle : vehiclesArray) { if (vehicle instanceof Entity vehicleEntity) { - vehicleEntity.eject(); for (Entity passenger : passengersArray) { assert passenger != null; if (passenger == vehicleEntity) continue; passenger.leaveVehicle(); - PassengerUtils.addPassenger((Entity)vehicle, passenger); //For 1.9 and lower, it will only set the last one. + vehicleEntity.addPassenger(passenger); } } else { for (Entity passenger : passengersArray) { @@ -87,7 +82,7 @@ protected void execute(Event event) { Entity entity = ((EntityData) vehicle).spawn(passenger.getLocation()); if (entity == null) return; - PassengerUtils.addPassenger(entity, passenger); + entity.addPassenger(passenger); } } } From ed2211940f10f88b9484298c29c6e71c989441d7 Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Mon, 13 Jan 2025 15:33:19 -0500 Subject: [PATCH 4/6] Requested Changes --- src/main/java/ch/njol/skript/conditions/CondIsRiding.java | 7 ++----- src/main/java/ch/njol/skript/effects/EffVehicle.java | 3 --- src/test/skript/tests/syntaxes/effects/EffVehicle.sk | 4 ++-- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/main/java/ch/njol/skript/conditions/CondIsRiding.java b/src/main/java/ch/njol/skript/conditions/CondIsRiding.java index fc87c4c053b..e0c77168eba 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsRiding.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsRiding.java @@ -17,14 +17,11 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; -/** - * @author Peter Güttinger - */ @Name("Is Riding") @Description("Tests whether an entity is riding any entity, a specific entity type, or a specific entity.") @Examples({ "if player is riding:", - "if player is riding any entity:", + "if player is riding an entity:", "if player is riding a saddled pig:", "if player is riding last spawned horse:" }) @@ -32,7 +29,7 @@ public class CondIsRiding extends Condition { static { - PropertyCondition.register(CondIsRiding.class, "riding [any entity|%-entitydatas/entities%]", "entities"); + PropertyCondition.register(CondIsRiding.class, "riding [%-entitydatas/entities%]", "entities"); } private Expression riders; diff --git a/src/main/java/ch/njol/skript/effects/EffVehicle.java b/src/main/java/ch/njol/skript/effects/EffVehicle.java index 0e754b0289e..dab976a8621 100644 --- a/src/main/java/ch/njol/skript/effects/EffVehicle.java +++ b/src/main/java/ch/njol/skript/effects/EffVehicle.java @@ -14,9 +14,6 @@ import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; -/** - * @author Peter Güttinger - */ @Name("Vehicle") @Description("Makes an entity ride another entity, e.g. a minecart, a saddled pig, an arrow, etc.") @Examples({ diff --git a/src/test/skript/tests/syntaxes/effects/EffVehicle.sk b/src/test/skript/tests/syntaxes/effects/EffVehicle.sk index fe2d31366ed..b627f01f6b6 100644 --- a/src/test/skript/tests/syntaxes/effects/EffVehicle.sk +++ b/src/test/skript/tests/syntaxes/effects/EffVehicle.sk @@ -6,7 +6,7 @@ test "mounting vehicle": make {_passengers::*} ride {_vehicle} loop {_passengers::*}: assert loop-value is riding with "Entity (%loop-value%) should pass riding in general" - assert loop-value is riding any entity with "Entity (%loop-value%) should pass riding in general with 'any entity' pattern" + assert loop-value is riding an entity with "Entity (%loop-value%) should pass riding in general with 'an entity' pattern" assert loop-value is riding a villager with "Entity (%loop-value%) should pass riding a villager entity data" assert loop-value is riding {_vehicle} with "Entity (%loop-value%) should pass riding specific entity" assert loop-value is not riding a zombie villager with "Entity (%loop-value%) should pass riding the wrong entity data" @@ -15,7 +15,7 @@ test "mounting vehicle": loop {_passengers::*}: assert loop-value is not riding with "Entity (%loop-value%) should pass not riding in general" - assert loop-value is not riding any entity with "Entity (%loop-value%) should pass not riding in general with 'any entity' pattern" + assert loop-value is not riding an entity with "Entity (%loop-value%) should pass not riding in general with 'an entity' pattern" assert loop-value is not riding a villager with "Entity (%loop-value%) should pass not riding a villager entity data" assert loop-value is not riding {_vehicle} with "Entity (%loop-value%) should pass not riding specific entity" From 82ca034da046b8d116f4229203403b7ae8f7b455 Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Sun, 26 Jan 2025 02:56:43 -0500 Subject: [PATCH 5/6] Change expression for mounting --- .../ch/njol/skript/effects/EffVehicle.java | 40 ++++++++----------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/src/main/java/ch/njol/skript/effects/EffVehicle.java b/src/main/java/ch/njol/skript/effects/EffVehicle.java index dab976a8621..21c1c94068c 100644 --- a/src/main/java/ch/njol/skript/effects/EffVehicle.java +++ b/src/main/java/ch/njol/skript/effects/EffVehicle.java @@ -25,7 +25,7 @@ public class EffVehicle extends Effect { static { Skript.registerEffect(EffVehicle.class, - "(make|let|force) %entities% [to] (ride|mount) [(in|on)] %entities/entitydatas%", + "(make|let|force) %entities% [to] (ride|mount) [(in|on)] %entity/entitydata%", "(make|let|force) %entities% [to] (dismount|(dismount|leave) (from|of|) (any|the[ir]|his|her|) vehicle[s])", "(eject|dismount) (any|the|) passenger[s] (of|from) %entities%"); } @@ -52,35 +52,30 @@ protected void execute(Event event) { } // matchedPattern = 2 if (passengers == null) { - assert vehicles != null; for (Object vehicle : vehicles.getArray(event)) ((Entity) vehicle).eject(); return; } // matchedPattern = 0 - Object[] vehiclesArray = vehicles.getArray(event); - if (vehiclesArray.length == 0) - return; Entity[] passengersArray = passengers.getArray(event); if (passengersArray.length == 0) return; - for (Object vehicle : vehiclesArray) { - if (vehicle instanceof Entity vehicleEntity) { - for (Entity passenger : passengersArray) { - assert passenger != null; - if (passenger == vehicleEntity) - continue; - passenger.leaveVehicle(); - vehicleEntity.addPassenger(passenger); - } - } else { - for (Entity passenger : passengersArray) { - assert passenger != null : passengers; - Entity entity = ((EntityData) vehicle).spawn(passenger.getLocation()); - if (entity == null) - return; - entity.addPassenger(passenger); - } + Object vehicleObject = vehicles.getSingle(event); + if (vehicleObject instanceof Entity vehicleEntity) { + for (Entity passenger : passengersArray) { + assert passenger != null; + if (passenger == vehicleEntity) + continue; + passenger.leaveVehicle(); + vehicleEntity.addPassenger(passenger); + } + } else if (vehicleObject instanceof EntityData vehicleData) { + for (Entity passenger : passengersArray) { + assert passenger != null; + Entity vehicleEntity = vehicleData.spawn(passenger.getLocation()); + if (vehicleEntity == null) + return; + vehicleEntity.addPassenger(passenger); } } } @@ -92,7 +87,6 @@ public String toString(@Nullable Event event, boolean debug) { return "make " + passengers.toString(event, debug) + " dismount"; } if (passengers == null) { - assert vehicles != null; return "eject passenger" + (vehicles.isSingle() ? "" : "s") + " of " + vehicles.toString(event, debug); } return "make " + passengers.toString(event, debug) + " ride " + vehicles.toString(event, debug); From e5404382a24463e1ed367eb8854e28c9379bb5da Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Wed, 29 Jan 2025 22:43:16 -0500 Subject: [PATCH 6/6] Leave Vehicle --- src/main/java/ch/njol/skript/effects/EffVehicle.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/ch/njol/skript/effects/EffVehicle.java b/src/main/java/ch/njol/skript/effects/EffVehicle.java index 21c1c94068c..b99da3f4a5d 100644 --- a/src/main/java/ch/njol/skript/effects/EffVehicle.java +++ b/src/main/java/ch/njol/skript/effects/EffVehicle.java @@ -75,6 +75,7 @@ protected void execute(Event event) { Entity vehicleEntity = vehicleData.spawn(passenger.getLocation()); if (vehicleEntity == null) return; + passenger.leaveVehicle(); vehicleEntity.addPassenger(passenger); } }