Add vehicles by entity id

Add vehicles by entity id for cases where the entity is an existing server npc
This commit is contained in:
Dablakbandit 2024-12-15 01:06:09 +13:00
parent b107a3b011
commit cea0ffb8ac
3 changed files with 55 additions and 3 deletions

View file

@ -196,4 +196,16 @@ public interface Npc extends PropertyHolder {
void removePassenger(int entityId);
/**
* Gets the vehicle entity id of this npc
* @return The entity id of the vehicle
*/
@Nullable Integer getVehicleId();
/**
* Sets the vehicle id of this npc
* @param vehicleId The entity id of the vehicle
*/
void setVehicleId(Integer vehicleId);
}

View file

@ -31,6 +31,7 @@ public class PacketEntity implements PropertyHolder {
private NpcLocation location;
private PacketEntity vehicle;
private Integer vehicleId;
private List<Integer> passengers;
public PacketEntity(PacketFactory packetFactory, PropertyHolder properties, Viewable viewable, EntityType type, NpcLocation location) {
@ -71,9 +72,8 @@ public class PacketEntity implements PropertyHolder {
public void spawn(Player player) {
if (type == EntityTypes.PLAYER) packetFactory.spawnPlayer(player, this, properties);
else packetFactory.spawnEntity(player, this, properties);
if (vehicle != null) {
vehicle.spawn(player);
packetFactory.setPassengers(player, vehicle.getEntityId(), this.getEntityId());
if (vehicleId != null) {
packetFactory.setPassengers(player, vehicleId, this.getEntityId());
}
if(passengers != null) {
packetFactory.setPassengers(player, this.getEntityId(), passengers.stream().mapToInt(Integer::intValue).toArray());
@ -92,6 +92,26 @@ public class PacketEntity implements PropertyHolder {
return viewable;
}
public void setVehicleId(Integer vehicleId) {
if (this.vehicle != null) {
for (Player player : viewable.getViewers()) {
packetFactory.setPassengers(player, this.vehicle.getEntityId());
this.vehicle.despawn(player);
packetFactory.teleportEntity(player, this);
}
} else if (this.vehicleId != null) {
for (Player player : viewable.getViewers()) {
packetFactory.setPassengers(player, this.vehicleId);
}
}
this.vehicleId = vehicleId;
if (vehicleId == null) return;
for (Player player : viewable.getViewers()) {
packetFactory.setPassengers(player, this.getEntityId(), vehicleId);
}
}
public void setVehicle(PacketEntity vehicle) {
// remove old vehicle
if (this.vehicle != null) {
@ -100,6 +120,10 @@ public class PacketEntity implements PropertyHolder {
this.vehicle.despawn(player);
packetFactory.teleportEntity(player, this);
}
} else if (this.vehicleId != null) {
for (Player player : viewable.getViewers()) {
packetFactory.setPassengers(player, this.vehicleId);
}
}
this.vehicle = vehicle;
@ -112,6 +136,10 @@ public class PacketEntity implements PropertyHolder {
}
}
public Integer getVehicleId() {
return vehicleId;
}
public List<Integer> getPassengers() {
return passengers;
}

View file

@ -261,4 +261,16 @@ public class NpcImpl extends Viewable implements Npc {
public void removePassenger(int entityId) {
entity.removePassenger(entityId);
}
@Override
public @Nullable Integer getVehicleId() {
return entity.getVehicleId();
}
@Override
public void setVehicleId(Integer vehicleId) {
entity.setVehicleId(vehicleId);
}
}