diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java index 7f72bb82e..559747a67 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java @@ -154,6 +154,7 @@ public class ClickHandler { double scroll = event.getScrollDelta(); + // TODO 实现多座位武器切换适配 if (player.getVehicle() instanceof MultiWeaponVehicleEntity && !Screen.hasShiftDown()) { ModUtils.PACKET_HANDLER.sendToServer(new SwitchVehicleWeaponMessage(-scroll)); event.setCanceled(true); @@ -284,8 +285,9 @@ public class ClickHandler { } } - if (index != -1 && index < vehicle.getSeatCount()) { + if (index != -1 && index < vehicle.getSeatCount() && vehicle.getNthEntity(index) == null) { ModUtils.PACKET_HANDLER.sendToServer(new ChangeVehicleSeatMessage(index)); + vehicle.changeSeat(player, index); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java index 9647164ef..dfb2ee81d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java @@ -236,7 +236,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity public void releaseDecoy() { if (decoyInputDown) { if (this.entityData.get(DECOY_COUNT) > 0 && this.level() instanceof ServerLevel) { - Entity passenger = this.getPassengers().isEmpty() ? null : this.getPassengers().get(0); + Entity passenger = getFirstPassenger(); for (int i = 0; i < 4; i++) { FlareDecoyEntity flareDecoyEntity = new FlareDecoyEntity((LivingEntity) passenger, this.level()); flareDecoyEntity.setPos(this.getX() + this.getDeltaMovement().x, this.getY() + 0.5 + this.getDeltaMovement().y, this.getZ() + this.getDeltaMovement().z); @@ -260,7 +260,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity @Override public void travel() { - Entity passenger = this.getPassengers().isEmpty() ? null : this.getPassengers().get(0); + Entity passenger = getFirstPassenger(); float diffX; float diffY; @@ -417,7 +417,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity float z = 1f; y += (float) passenger.getMyRidingOffset(); - int i = this.getPassengers().indexOf(passenger); + int i = this.getOrderedPassengers().indexOf(passenger); if (i == 0) { Vector4f worldPosition = transformPosition(transform, x, y, z); @@ -669,7 +669,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity public Vec3 getDismountLocationForPassenger(LivingEntity passenger) { Vec3 vec3d = getDismountOffset(getBbWidth() * Mth.SQRT_OF_TWO, passenger.getBbWidth() * Mth.SQRT_OF_TWO); double ox = getX() + vec3d.x; - int i = this.getPassengers().indexOf(passenger); + int i = this.getOrderedPassengers().indexOf(passenger); if (i == 0 || i == 2) { ox = getX() - vec3d.x; } @@ -766,10 +766,14 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity // 自定义骑乘 - // TODO 正确实现成员判断 private final List orderedPassengers = generatePassengersList(); + @Override + public List getOrderedPassengers() { + return orderedPassengers; + } + private ArrayList generatePassengersList() { var list = new ArrayList(this.getMaxPassengers()); for (int i = 0; i < this.getMaxPassengers(); i++) { diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/MultiSeatVehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/MultiSeatVehicleEntity.java index c9d223201..b5e509285 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/MultiSeatVehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/MultiSeatVehicleEntity.java @@ -2,12 +2,16 @@ package com.atsuishio.superbwarfare.entity.vehicle; import net.minecraft.world.entity.Entity; +import java.util.List; + public interface MultiSeatVehicleEntity { - public Entity getNthEntity(int index); + List getOrderedPassengers(); - public boolean changeSeat(Entity entity, int index); + Entity getNthEntity(int index); - public int getSeatIndex(Entity entity); + boolean changeSeat(Entity entity, int index); - public int getSeatCount(); + int getSeatIndex(Entity entity); + + int getSeatCount(); }