添加坦克三号位

This commit is contained in:
Atsuihsio 2025-03-10 15:53:39 +08:00
parent 0391edcef8
commit 66dae96271
15 changed files with 59 additions and 39 deletions

View file

@ -467,7 +467,7 @@ public class VehicleHudOverlay {
for (int i = passengers.size() - 1; i >= 0; i--) { for (int i = passengers.size() - 1; i >= 0; i--) {
var passenger = passengers.get(i); var passenger = passengers.get(i);
int y = h - 50 - index * 12; int y = h - 35 - index * 12;
AtomicReference<String> name = new AtomicReference<>("---"); AtomicReference<String> name = new AtomicReference<>("---");
if (passenger != null) { if (passenger != null) {
@ -486,12 +486,12 @@ public class VehicleHudOverlay {
); );
} }
guiGraphics.drawString(Minecraft.getInstance().font, name.get(), 37, y, 0x66ff00, true); guiGraphics.drawString(Minecraft.getInstance().font, name.get(), 42, y, 0x66ff00, true);
String num = "[" + (i + 1) + "]"; String num = "[" + (i + 1) + "]";
guiGraphics.drawString(Minecraft.getInstance().font, num, 20 - Minecraft.getInstance().font.width(num), y, 0x66ff00, true); guiGraphics.drawString(Minecraft.getInstance().font, num, 25 - Minecraft.getInstance().font.width(num), y, 0x66ff00, true);
preciseBlit(guiGraphics, index == passengers.size() - 1 ? DRIVER : PASSENGER, 25, y, 100, 0, 0, 8, 8, 8, 8); preciseBlit(guiGraphics, index == passengers.size() - 1 ? DRIVER : PASSENGER, 30, y, 100, 0, 0, 8, 8, 8, 8);
index++; index++;
} }
} }

View file

@ -689,7 +689,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity
} }
@Override @Override
public boolean hidePassenger() { public boolean hidePassenger(Entity entity) {
return false; return false;
} }

View file

@ -595,7 +595,7 @@ public class AnnihilatorEntity extends EnergyVehicleEntity implements GeoEntity,
} }
@Override @Override
public boolean hidePassenger() { public boolean hidePassenger(Entity entity) {
return true; return true;
} }

View file

@ -750,7 +750,7 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit
} }
@Override @Override
public boolean hidePassenger() { public boolean hidePassenger(Entity entity) {
return true; return true;
} }

View file

@ -689,7 +689,7 @@ public class Lav150Entity extends ContainerMobileVehicleEntity implements GeoEnt
} }
@Override @Override
public boolean hidePassenger() { public boolean hidePassenger(Entity entity) {
return true; return true;
} }

View file

@ -394,7 +394,7 @@ public class Mk42Entity extends VehicleEntity implements GeoEntity, CannonEntity
} }
@Override @Override
public boolean hidePassenger() { public boolean hidePassenger(Entity entity) {
return true; return true;
} }

View file

@ -521,7 +521,7 @@ public class Mle1934Entity extends VehicleEntity implements GeoEntity, CannonEnt
} }
@Override @Override
public boolean hidePassenger() { public boolean hidePassenger(Entity entity) {
return true; return true;
} }

View file

@ -555,7 +555,7 @@ public class SpeedboatEntity extends ContainerMobileVehicleEntity implements Geo
} }
@Override @Override
public boolean hidePassenger() { public boolean hidePassenger(Entity entity) {
return false; return false;
} }

View file

@ -169,11 +169,11 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity {
if (forwardInputDown && getEnergy() > 0) { if (forwardInputDown && getEnergy() > 0) {
this.consumeEnergy(VehicleConfig.TOM_6_ENERGY_COST.get()); this.consumeEnergy(VehicleConfig.TOM_6_ENERGY_COST.get());
this.entityData.set(POWER, Math.min(this.entityData.get(POWER) + 0.03f, 0.15f)); this.entityData.set(POWER, Math.min(this.entityData.get(POWER) + 0.01f, 0.15f));
} }
if (backInputDown || downInputDown) { if (backInputDown || downInputDown) {
this.entityData.set(POWER, Math.max(this.entityData.get(POWER) - (this.entityData.get(POWER) > 0 ? 0.006f : 0.001f), onGround() ? -0.12f : 0.04f)); this.entityData.set(POWER, Math.max(this.entityData.get(POWER) - (this.entityData.get(POWER) > 0 ? 0.01f : 0.001f), onGround() ? -0.06f : 0.03f));
} }
if (!onGround()) { if (!onGround()) {

View file

@ -757,11 +757,15 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
Vector4f worldPosition = transformPosition(transform, -0.87890625f, -1f, -0.6640625f); Vector4f worldPosition = transformPosition(transform, -0.87890625f, -1f, -0.6640625f);
passenger.setPos(worldPosition.x, worldPosition.y, worldPosition.z); passenger.setPos(worldPosition.x, worldPosition.y, worldPosition.z);
callback.accept(passenger, worldPosition.x, worldPosition.y, worldPosition.z); callback.accept(passenger, worldPosition.x, worldPosition.y, worldPosition.z);
} else if (i == 2) {
Vector4f worldPosition = transformPosition(transform, 1f, 0.15f, -0.6640625f);
passenger.setPos(worldPosition.x, worldPosition.y, worldPosition.z);
callback.accept(passenger, worldPosition.x, worldPosition.y, worldPosition.z);
} }
} }
public int getMaxPassengers() { public int getMaxPassengers() {
return 2; return 3;
} }
public Matrix4f getBarrelTransform() { public Matrix4f getBarrelTransform() {
@ -855,6 +859,11 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
entity.setYRot(entity.getYRot() + f3 - f2); entity.setYRot(entity.getYRot() + f3 - f2);
entity.setYBodyRot(this.getYRot()); entity.setYBodyRot(this.getYRot());
} }
} else if (entity == getNthEntity(2)) {
float f = Mth.wrapDegrees(entity.getXRot());
float f1 = Mth.clamp(f, -90F, 22.5F);
entity.xRotO += f1 - f;
entity.setXRot(entity.getXRot() + f1 - f);
} }
} }
@ -927,12 +936,22 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
@Override @Override
public boolean banHand(Player player) { public boolean banHand(Player player) {
return true; if (player == getNthEntity(0) || player == getNthEntity(1)) {
return true;
} else if (player == getNthEntity(2)) {
return false;
}
return false;
} }
@Override @Override
public boolean hidePassenger() { public boolean hidePassenger(Entity entity) {
return true; if (entity == getNthEntity(0) || entity == getNthEntity(1)) {
return true;
} else if (entity == getNthEntity(2)) {
return false;
}
return false;
} }
@Override @Override

View file

@ -66,7 +66,7 @@ public interface ArmedVehicleEntity {
* *
* @return 是否隐藏 * @return 是否隐藏
*/ */
boolean hidePassenger(); boolean hidePassenger(Entity entity);
/** /**
* 瞄准时的放大倍率 * 瞄准时的放大倍率

View file

@ -787,7 +787,7 @@ public class ClientEventHandler {
if (player == null) return; if (player == null) return;
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!(stack.getItem() instanceof GunItem gunItem)) return; if (!(stack.getItem() instanceof GunItem gunItem)) return;
if (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.hidePassenger()) if (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.hidePassenger(player))
return; return;
float pose; float pose;
@ -1416,7 +1416,7 @@ public class ClientEventHandler {
public static void setPlayerInvisible(RenderPlayerEvent.Pre event) { public static void setPlayerInvisible(RenderPlayerEvent.Pre event) {
var otherPlayer = event.getEntity(); var otherPlayer = event.getEntity();
if (otherPlayer.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.hidePassenger()) { if (otherPlayer.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.hidePassenger(otherPlayer)) {
event.setCanceled(true); event.setCanceled(true);
} }
} }

View file

@ -55,7 +55,7 @@ public class LivingEventHandler {
@SubscribeEvent @SubscribeEvent
public static void onEntityAttacked(LivingAttackEvent event) { public static void onEntityAttacked(LivingAttackEvent event) {
if (!event.getSource().is(ModDamageTypes.VEHICLE_EXPLOSION) && event.getEntity().getVehicle() instanceof VehicleEntity vehicle) { if (!event.getSource().is(ModDamageTypes.VEHICLE_EXPLOSION) && event.getEntity().getVehicle() instanceof VehicleEntity vehicle) {
if (event.getEntity().getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.hidePassenger()) { if (event.getEntity().getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.hidePassenger(event.getEntity())) {
if (!(event.getSource().is(DamageTypes.EXPLOSION) if (!(event.getSource().is(DamageTypes.EXPLOSION)
|| event.getSource().is(DamageTypes.PLAYER_EXPLOSION) || event.getSource().is(DamageTypes.PLAYER_EXPLOSION)
|| event.getSource().is(ModDamageTypes.CUSTOM_EXPLOSION) || event.getSource().is(ModDamageTypes.CUSTOM_EXPLOSION)
@ -103,7 +103,7 @@ public class LivingEventHandler {
var vehicle = event.getEntity().getVehicle(); var vehicle = event.getEntity().getVehicle();
if (vehicle instanceof VehicleEntity) { if (vehicle instanceof VehicleEntity) {
if (vehicle instanceof ArmedVehicleEntity iArmedVehicle) { if (vehicle instanceof ArmedVehicleEntity iArmedVehicle) {
if (iArmedVehicle.hidePassenger()) { if (iArmedVehicle.hidePassenger(event.getEntity())) {
if (!event.getSource().is(ModDamageTypes.VEHICLE_EXPLOSION)) { if (!event.getSource().is(ModDamageTypes.VEHICLE_EXPLOSION)) {
event.setCanceled(true); event.setCanceled(true);
} }

View file

@ -47,6 +47,23 @@ public abstract class CameraMixin {
if (player != null) { if (player != null) {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
DroneEntity drone = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone"));
if (drone != null) {
Matrix4f transform = superbWarfare$getVehicleTransform(drone, partialTicks);
float x0 = 0f;
float y0 = 0.075f;
float z0 = 0.18f;
Vector4f worldPosition = superbWarfare$transformPosition(transform, x0, y0, z0);
setRotation(drone.getYaw(partialTicks), drone.getPitch(partialTicks));
setPosition(worldPosition.x, worldPosition.y, worldPosition.z);
info.cancel();
}
return;
}
if ((player.getVehicle() != null && player.getVehicle() instanceof SpeedboatEntity boat && boat.getFirstPassenger() == player) && ClientEventHandler.zoomVehicle) { if ((player.getVehicle() != null && player.getVehicle() instanceof SpeedboatEntity boat && boat.getFirstPassenger() == player) && ClientEventHandler.zoomVehicle) {
float yRot = boat.getYRot(); float yRot = boat.getYRot();
if (yRot < 0) { if (yRot < 0) {
@ -101,22 +118,6 @@ public abstract class CameraMixin {
} }
return; return;
} }
if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
DroneEntity drone = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone"));
if (drone != null) {
Matrix4f transform = superbWarfare$getVehicleTransform(drone, partialTicks);
float x0 = 0f;
float y0 = 0.075f;
float z0 = 0.18f;
Vector4f worldPosition = superbWarfare$transformPosition(transform, x0, y0, z0);
setRotation(drone.getYaw(partialTicks), drone.getPitch(partialTicks));
setPosition(worldPosition.x, worldPosition.y, worldPosition.z);
info.cancel();
}
}
} }
} }

View file

@ -37,7 +37,7 @@ public class VehicleMovementMessage {
var vehicle = player.getVehicle(); var vehicle = player.getVehicle();
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (vehicle instanceof MobileVehicleEntity mobileVehicleEntity) { if (vehicle instanceof MobileVehicleEntity mobileVehicleEntity && mobileVehicleEntity.getFirstPassenger() == player) {
switch (message.direction) { switch (message.direction) {
case 0: case 0:
mobileVehicleEntity.leftInputDown = message.clicked; mobileVehicleEntity.leftInputDown = message.clicked;