正确实现载具座位切换
This commit is contained in:
parent
a507236e08
commit
759b4f10bd
3 changed files with 20 additions and 10 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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++) {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue