正确实现载具座位切换
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();
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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++) {
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue