正确实现载具座位切换

This commit is contained in:
Light_Quanta 2025-03-05 01:33:20 +08:00
parent a507236e08
commit 759b4f10bd
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
3 changed files with 20 additions and 10 deletions

View file

@ -154,6 +154,7 @@ public class ClickHandler {
double scroll = event.getScrollDelta(); double scroll = event.getScrollDelta();
// TODO 实现多座位武器切换适配
if (player.getVehicle() instanceof MultiWeaponVehicleEntity && !Screen.hasShiftDown()) { if (player.getVehicle() instanceof MultiWeaponVehicleEntity && !Screen.hasShiftDown()) {
ModUtils.PACKET_HANDLER.sendToServer(new SwitchVehicleWeaponMessage(-scroll)); ModUtils.PACKET_HANDLER.sendToServer(new SwitchVehicleWeaponMessage(-scroll));
event.setCanceled(true); 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)); ModUtils.PACKET_HANDLER.sendToServer(new ChangeVehicleSeatMessage(index));
vehicle.changeSeat(player, index);
} }
} }

View file

@ -236,7 +236,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity
public void releaseDecoy() { public void releaseDecoy() {
if (decoyInputDown) { if (decoyInputDown) {
if (this.entityData.get(DECOY_COUNT) > 0 && this.level() instanceof ServerLevel) { 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++) { for (int i = 0; i < 4; i++) {
FlareDecoyEntity flareDecoyEntity = new FlareDecoyEntity((LivingEntity) passenger, this.level()); 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); 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 @Override
public void travel() { public void travel() {
Entity passenger = this.getPassengers().isEmpty() ? null : this.getPassengers().get(0); Entity passenger = getFirstPassenger();
float diffX; float diffX;
float diffY; float diffY;
@ -417,7 +417,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity
float z = 1f; float z = 1f;
y += (float) passenger.getMyRidingOffset(); y += (float) passenger.getMyRidingOffset();
int i = this.getPassengers().indexOf(passenger); int i = this.getOrderedPassengers().indexOf(passenger);
if (i == 0) { if (i == 0) {
Vector4f worldPosition = transformPosition(transform, x, y, z); Vector4f worldPosition = transformPosition(transform, x, y, z);
@ -669,7 +669,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity
public Vec3 getDismountLocationForPassenger(LivingEntity passenger) { public Vec3 getDismountLocationForPassenger(LivingEntity passenger) {
Vec3 vec3d = getDismountOffset(getBbWidth() * Mth.SQRT_OF_TWO, passenger.getBbWidth() * Mth.SQRT_OF_TWO); Vec3 vec3d = getDismountOffset(getBbWidth() * Mth.SQRT_OF_TWO, passenger.getBbWidth() * Mth.SQRT_OF_TWO);
double ox = getX() + vec3d.x; double ox = getX() + vec3d.x;
int i = this.getPassengers().indexOf(passenger); int i = this.getOrderedPassengers().indexOf(passenger);
if (i == 0 || i == 2) { if (i == 0 || i == 2) {
ox = getX() - vec3d.x; ox = getX() - vec3d.x;
} }
@ -766,10 +766,14 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity
// 自定义骑乘 // 自定义骑乘
// TODO 正确实现成员判断
private final List<Entity> orderedPassengers = generatePassengersList(); private final List<Entity> orderedPassengers = generatePassengersList();
@Override
public List<Entity> getOrderedPassengers() {
return orderedPassengers;
}
private ArrayList<Entity> generatePassengersList() { private ArrayList<Entity> generatePassengersList() {
var list = new ArrayList<Entity>(this.getMaxPassengers()); var list = new ArrayList<Entity>(this.getMaxPassengers());
for (int i = 0; i < this.getMaxPassengers(); i++) { for (int i = 0; i < this.getMaxPassengers(); i++) {

View file

@ -2,12 +2,16 @@ package com.atsuishio.superbwarfare.entity.vehicle;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import java.util.List;
public interface MultiSeatVehicleEntity { public interface MultiSeatVehicleEntity {
public Entity getNthEntity(int index); List<Entity> 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();
} }