正确实现载具座位切换

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();
// 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);
}
}

View file

@ -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<Entity> orderedPassengers = generatePassengersList();
@Override
public List<Entity> getOrderedPassengers() {
return orderedPassengers;
}
private ArrayList<Entity> generatePassengersList() {
var list = new ArrayList<Entity>(this.getMaxPassengers());
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 java.util.List;
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();
}