From 66dae96271425f9a127d985201af657594381c0b Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Mon, 10 Mar 2025 15:53:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=9D=A6=E5=85=8B=E4=B8=89?= =?UTF-8?q?=E5=8F=B7=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/overlay/VehicleHudOverlay.java | 8 ++--- .../entity/vehicle/Ah6Entity.java | 2 +- .../entity/vehicle/AnnihilatorEntity.java | 2 +- .../entity/vehicle/Bmp2Entity.java | 2 +- .../entity/vehicle/Lav150Entity.java | 2 +- .../entity/vehicle/Mk42Entity.java | 2 +- .../entity/vehicle/Mle1934Entity.java | 2 +- .../entity/vehicle/SpeedboatEntity.java | 2 +- .../entity/vehicle/Tom6Entity.java | 4 +-- .../entity/vehicle/Yx100Entity.java | 27 ++++++++++++--- .../vehicle/base/ArmedVehicleEntity.java | 2 +- .../event/ClientEventHandler.java | 4 +-- .../event/LivingEventHandler.java | 4 +-- .../superbwarfare/mixins/CameraMixin.java | 33 ++++++++++--------- .../message/VehicleMovementMessage.java | 2 +- 15 files changed, 59 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/client/overlay/VehicleHudOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/overlay/VehicleHudOverlay.java index 97e5946f4..0b5e8d0b0 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/VehicleHudOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/VehicleHudOverlay.java @@ -467,7 +467,7 @@ public class VehicleHudOverlay { for (int i = passengers.size() - 1; i >= 0; i--) { var passenger = passengers.get(i); - int y = h - 50 - index * 12; + int y = h - 35 - index * 12; AtomicReference name = new AtomicReference<>("---"); 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) + "]"; - 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++; } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java index 55f1a37f2..1d8044acc 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java @@ -689,7 +689,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity } @Override - public boolean hidePassenger() { + public boolean hidePassenger(Entity entity) { return false; } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java index 96c197e36..8143e123a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java @@ -595,7 +595,7 @@ public class AnnihilatorEntity extends EnergyVehicleEntity implements GeoEntity, } @Override - public boolean hidePassenger() { + public boolean hidePassenger(Entity entity) { return true; } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java index c9c58b641..3ee4be100 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java @@ -750,7 +750,7 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit } @Override - public boolean hidePassenger() { + public boolean hidePassenger(Entity entity) { return true; } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java index 7ef3df30f..aff2aa605 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java @@ -689,7 +689,7 @@ public class Lav150Entity extends ContainerMobileVehicleEntity implements GeoEnt } @Override - public boolean hidePassenger() { + public boolean hidePassenger(Entity entity) { return true; } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java index 976ccd42b..2ec3de7d8 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java @@ -394,7 +394,7 @@ public class Mk42Entity extends VehicleEntity implements GeoEntity, CannonEntity } @Override - public boolean hidePassenger() { + public boolean hidePassenger(Entity entity) { return true; } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java index 133db4c4a..04725c11a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java @@ -521,7 +521,7 @@ public class Mle1934Entity extends VehicleEntity implements GeoEntity, CannonEnt } @Override - public boolean hidePassenger() { + public boolean hidePassenger(Entity entity) { return true; } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java index fe7e50f0b..4588ab284 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java @@ -555,7 +555,7 @@ public class SpeedboatEntity extends ContainerMobileVehicleEntity implements Geo } @Override - public boolean hidePassenger() { + public boolean hidePassenger(Entity entity) { return false; } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Tom6Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Tom6Entity.java index 5f3f9be96..fdd5050e3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Tom6Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Tom6Entity.java @@ -169,11 +169,11 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity { if (forwardInputDown && getEnergy() > 0) { 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) { - 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()) { diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java index be9c41402..7137fe6de 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java @@ -757,11 +757,15 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti Vector4f worldPosition = transformPosition(transform, -0.87890625f, -1f, -0.6640625f); passenger.setPos(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() { - return 2; + return 3; } public Matrix4f getBarrelTransform() { @@ -855,6 +859,11 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti entity.setYRot(entity.getYRot() + f3 - f2); 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 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 - public boolean hidePassenger() { - return true; + public boolean hidePassenger(Entity entity) { + if (entity == getNthEntity(0) || entity == getNthEntity(1)) { + return true; + } else if (entity == getNthEntity(2)) { + return false; + } + return false; } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/ArmedVehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/ArmedVehicleEntity.java index cbed13063..d7fa016e5 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/ArmedVehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/ArmedVehicleEntity.java @@ -66,7 +66,7 @@ public interface ArmedVehicleEntity { * * @return 是否隐藏 */ - boolean hidePassenger(); + boolean hidePassenger(Entity entity); /** * 瞄准时的放大倍率 diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index 222a37548..fa28480c4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -787,7 +787,7 @@ public class ClientEventHandler { if (player == null) return; ItemStack stack = player.getMainHandItem(); 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; float pose; @@ -1416,7 +1416,7 @@ public class ClientEventHandler { public static void setPlayerInvisible(RenderPlayerEvent.Pre event) { var otherPlayer = event.getEntity(); - if (otherPlayer.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.hidePassenger()) { + if (otherPlayer.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.hidePassenger(otherPlayer)) { event.setCanceled(true); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java index 171b105a7..935362bef 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java @@ -55,7 +55,7 @@ public class LivingEventHandler { @SubscribeEvent public static void onEntityAttacked(LivingAttackEvent event) { 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) || event.getSource().is(DamageTypes.PLAYER_EXPLOSION) || event.getSource().is(ModDamageTypes.CUSTOM_EXPLOSION) @@ -103,7 +103,7 @@ public class LivingEventHandler { var vehicle = event.getEntity().getVehicle(); if (vehicle instanceof VehicleEntity) { if (vehicle instanceof ArmedVehicleEntity iArmedVehicle) { - if (iArmedVehicle.hidePassenger()) { + if (iArmedVehicle.hidePassenger(event.getEntity())) { if (!event.getSource().is(ModDamageTypes.VEHICLE_EXPLOSION)) { event.setCanceled(true); } diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/CameraMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/CameraMixin.java index f0c26fee8..f0c35ecf7 100644 --- a/src/main/java/com/atsuishio/superbwarfare/mixins/CameraMixin.java +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/CameraMixin.java @@ -47,6 +47,23 @@ public abstract class CameraMixin { if (player != null) { 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) { float yRot = boat.getYRot(); if (yRot < 0) { @@ -101,22 +118,6 @@ public abstract class CameraMixin { } 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(); - } - } } } diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/VehicleMovementMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/VehicleMovementMessage.java index 8bf44850d..6b113865b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/VehicleMovementMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/VehicleMovementMessage.java @@ -37,7 +37,7 @@ public class VehicleMovementMessage { var vehicle = player.getVehicle(); ItemStack stack = player.getMainHandItem(); - if (vehicle instanceof MobileVehicleEntity mobileVehicleEntity) { + if (vehicle instanceof MobileVehicleEntity mobileVehicleEntity && mobileVehicleEntity.getFirstPassenger() == player) { switch (message.direction) { case 0: mobileVehicleEntity.leftInputDown = message.clicked;