diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java index a554a50e8..bc318c9f2 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java @@ -303,8 +303,10 @@ public class ClickHandler { } - if (player.getVehicle() instanceof IArmedVehicleEntity iVehicle && iVehicle.isDriver(player) && iVehicle.banHand()) { - ClientEventHandler.holdFireVehicle = true; + if (player.getVehicle() instanceof IArmedVehicleEntity iVehicle && iVehicle.banHand()) { + if (iVehicle.isDriver(player)) { + ClientEventHandler.holdFireVehicle = true; + } return; } @@ -349,8 +351,10 @@ public class ClickHandler { public static void handleWeaponZoomPress(Player player, ItemStack stack) { ModUtils.PACKET_HANDLER.sendToServer(new ZoomMessage(0)); - if (player.getVehicle() instanceof IArmedVehicleEntity iVehicle && iVehicle.isDriver(player) && iVehicle.banHand()) { - ClientEventHandler.zoomVehicle = true; + if (player.getVehicle() instanceof IArmedVehicleEntity iVehicle && iVehicle.banHand()) { + if (iVehicle.isDriver(player)) { + ClientEventHandler.zoomVehicle = true; + } return; } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/overlay/CrossHairOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/overlay/CrossHairOverlay.java index 15a77f143..008ac2bf3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/CrossHairOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/CrossHairOverlay.java @@ -56,7 +56,7 @@ public class CrossHairOverlay { if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) return; - if (player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.banHand()) return; + if (player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand()) return; GuiGraphics guiGraphics = event.getGuiGraphics(); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/overlay/GrenadeLauncherOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/overlay/GrenadeLauncherOverlay.java index 9dc1aecd3..53bd41727 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/GrenadeLauncherOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/GrenadeLauncherOverlay.java @@ -30,7 +30,7 @@ public class GrenadeLauncherOverlay { if (player != null && player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) return; - if (player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.banHand()) + if (player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand()) return; if (!shouldRenderCrossHair(player)) return; diff --git a/src/main/java/com/atsuishio/superbwarfare/client/overlay/JavelinHudOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/overlay/JavelinHudOverlay.java index 66db8d145..c3b612502 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/JavelinHudOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/JavelinHudOverlay.java @@ -56,7 +56,7 @@ public class JavelinHudOverlay { if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) return; - if (player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.banHand()) return; + if (player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand()) return; if ((stack.getItem() == ModItems.JAVELIN.get() && !stack.getOrCreateTag().getBoolean("HoloHidden")) && Minecraft.getInstance().options.getCameraType().isFirstPerson() && ClientEventHandler.zoom) { RenderSystem.disableDepthTest(); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/overlay/RedTriangleOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/overlay/RedTriangleOverlay.java index 779931ea8..c5da8c5e4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/RedTriangleOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/RedTriangleOverlay.java @@ -38,7 +38,7 @@ public class RedTriangleOverlay { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModItems.RPG.get())) return; - if (player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.banHand()) + if (player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand()) return; Entity idf = SeekTool.seekLivingEntity(player, player.level(), 128, 6); 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 fb06aae98..e8cb7c91e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/VehicleHudOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/VehicleHudOverlay.java @@ -94,7 +94,7 @@ public class VehicleHudOverlay { } poseStack.popPose(); - if (vehicle instanceof IArmedVehicleEntity iVehicle && iVehicle.getAmmoCount(player) != -1) { + if (vehicle instanceof IArmedVehicleEntity iVehicle && iVehicle.getAmmoCount(player) != -1 && iVehicle.isDriver(player)) { boolean iCharge = iVehicle instanceof IChargeEntity; // 渲染当前弹药量 @@ -129,6 +129,7 @@ public class VehicleHudOverlay { ItemStack stack = player.getMainHandItem(); // 渲染弹药类型 + event.getGuiGraphics().drawString( Minecraft.getInstance().font, getVehicleAmmoType(stack, iVehicle), @@ -137,6 +138,7 @@ public class VehicleHudOverlay { 0xFFFFFF, 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 310393f11..f78eb467c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java @@ -630,6 +630,7 @@ public class Bmp2Entity extends ContainerMobileEntity implements GeoEntity, ICha } Matrix4f transform = getTurretTransform(); + Matrix4f transformV = getVehicleTransform(); float x = 0.5f; float y = 0.1f; @@ -638,11 +639,18 @@ public class Bmp2Entity extends ContainerMobileEntity implements GeoEntity, ICha int i = this.getPassengers().indexOf(passenger); + Vector4f worldPosition; if (i == 0) { - Vector4f worldPosition = transformPosition(transform, x, y, z); - passenger.setPos(worldPosition.x, worldPosition.y, worldPosition.z); - callback.accept(passenger, worldPosition.x, worldPosition.y, worldPosition.z); + worldPosition = transformPosition(transform, x, y, z); + } else { + worldPosition = transformPosition(transformV, 0, 1, 0); } + passenger.setPos(worldPosition.x, worldPosition.y, worldPosition.z); + callback.accept(passenger, worldPosition.x, worldPosition.y, worldPosition.z); + } + + public int getMaxPassengers() { + return 5; } public Matrix4f getBarrelTransform() { 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 8a7795e82..b774995bd 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java @@ -605,6 +605,7 @@ public class Lav150Entity extends ContainerMobileEntity implements GeoEntity, IC } Matrix4f transform = getTurretTransform(); + Matrix4f transformV = getVehicleTransform(); float x = 0.36f; float y = -0.3f; @@ -613,11 +614,18 @@ public class Lav150Entity extends ContainerMobileEntity implements GeoEntity, IC int i = this.getPassengers().indexOf(passenger); + Vector4f worldPosition; if (i == 0) { - Vector4f worldPosition = transformPosition(transform, x, y, z); - passenger.setPos(worldPosition.x, worldPosition.y, worldPosition.z); - callback.accept(passenger, worldPosition.x, worldPosition.y, worldPosition.z); + worldPosition = transformPosition(transform, x, y, z); + } else { + worldPosition = transformPosition(transformV, 0, 1, 0); } + passenger.setPos(worldPosition.x, worldPosition.y, worldPosition.z); + callback.accept(passenger, worldPosition.x, worldPosition.y, worldPosition.z); + } + + public int getMaxPassengers() { + return 5; } public Matrix4f getBarrelTransform() { diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index 8542a2e19..dff251989 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -224,7 +224,7 @@ public class ClientEventHandler { handleLungeAttack(player, stack); handleGunMelee(player, stack); - if (notInGame()) { + if (player.getVehicle() instanceof MobileVehicleEntity mobileVehicle && mobileVehicle.getFirstPassenger() == player && notInGame()) { ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(0, false)); ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(1, false)); ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(2, false)); @@ -266,7 +266,7 @@ public class ClientEventHandler { if (stack.getItem() instanceof GunItem gunItem) { if (gunItem.canUseMelee(stack) && gunMelee == 0 && drawTime < 0.01 && ModKeyMappings.MELEE.isDown() - && !(player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.banHand()) + && !(player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand()) && !holdFireVehicle && !notInGame() && !player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit @@ -422,7 +422,7 @@ public class ClientEventHandler { } if ((holdFire || burstFireSize > 0) - && !(player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.banHand()) + && !(player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand()) && !holdFireVehicle && (stack.is(ModTags.Items.NORMAL_GUN) && cantFireTime == 0 @@ -846,7 +846,7 @@ public class ClientEventHandler { } } - if (player != null && player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.banHand()) + if (player != null && player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand()) return; if (level != null && stack.is(ModTags.Items.GUN)) { @@ -911,7 +911,7 @@ public class ClientEventHandler { } } - if (player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.banHand()) { + if (player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand()) { event.setCanceled(true); } } @@ -1008,7 +1008,7 @@ public class ClientEventHandler { double speed = 1.5 - (0.07 * weight); if (zoom - && !(player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.banHand()) + && !(player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand()) && !notInGame() && drawTime < 0.01 && !player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) { diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java b/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java index d9a29b187..9fe521957 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java @@ -108,8 +108,8 @@ public class ModTabs { output.accept(ContainerBlockItem.createInstance(ModEntities.ANNIHILATOR.get())); output.accept(ContainerBlockItem.createInstance(ModEntities.SPEEDBOAT.get(), true)); output.accept(ContainerBlockItem.createInstance(ModEntities.AH_6.get())); - output.accept(ContainerBlockItem.createInstance(ModEntities.LAV_150.get())); - output.accept(ContainerBlockItem.createInstance(ModEntities.BMP_2.get())); + output.accept(ContainerBlockItem.createInstance(ModEntities.LAV_150.get(),true)); + output.accept(ContainerBlockItem.createInstance(ModEntities.BMP_2.get(),true)); output.accept(ContainerBlockItem.createInstance(ModEntities.WHEEL_CHAIR.get())); output.accept(ContainerBlockItem.createInstance(ModEntities.TOM_6.get())); } else { diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/CameraMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/CameraMixin.java index eb81728aa..c4642b6a0 100644 --- a/src/main/java/com/atsuishio/superbwarfare/mixins/CameraMixin.java +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/CameraMixin.java @@ -61,17 +61,29 @@ public abstract class CameraMixin { return; } - if ((player.getVehicle() instanceof Lav150Entity lav150 && lav150.getFirstPassenger() == player) && (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON || ClientEventHandler.zoomVehicle)) { - setRotation(-Mth.lerp(partialTicks, lav150.turretYRotO - lav150.yRotO, lav150.getTurretYRot() - lav150.getYRot()), Mth.lerp(partialTicks, lav150.turretXRotO - lav150.xRotO, lav150.getTurretXRot() - lav150.getXRot())); - setPosition(Mth.lerp(partialTicks, player.xo, player.getX()), Mth.lerp(partialTicks, player.yo + player.getEyeHeight(), player.getEyeY()), Mth.lerp(partialTicks, player.zo, player.getZ())); - info.cancel(); + if (player.getVehicle() instanceof Lav150Entity lav150 && (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON || ClientEventHandler.zoomVehicle)) { + if (lav150.getFirstPassenger() == player) { + setRotation(-Mth.lerp(partialTicks, lav150.turretYRotO - lav150.yRotO, lav150.getTurretYRot() - lav150.getYRot()), Mth.lerp(partialTicks, lav150.turretXRotO - lav150.xRotO, lav150.getTurretXRot() - lav150.getXRot())); + setPosition(Mth.lerp(partialTicks, player.xo, player.getX()), Mth.lerp(partialTicks, player.yo + player.getEyeHeight(), player.getEyeY()), Mth.lerp(partialTicks, player.zo, player.getZ())); + info.cancel(); + } else { + setRotation(Mth.lerp(partialTicks, player.yHeadRotO, player.getYHeadRot()), Mth.lerp(partialTicks, player.xRotO, player.getXRot())); + setPosition(Mth.lerp(partialTicks, player.xo, player.getX()) - 6 * player.getViewVector(partialTicks).x, Mth.lerp(partialTicks, player.yo + player.getEyeHeight() + 1, player.getEyeY() + 1) - 6 * player.getViewVector(partialTicks).y, Mth.lerp(partialTicks, player.zo, player.getZ()) - 6 * player.getViewVector(partialTicks).z); + info.cancel(); + } return; } - if ((player.getVehicle() instanceof Bmp2Entity bmp2 && bmp2.getFirstPassenger() == player) && (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON || ClientEventHandler.zoomVehicle)) { - setRotation(-Mth.lerp(partialTicks, bmp2.turretYRotO - bmp2.yRotO, bmp2.getTurretYRot() - bmp2.getYRot()), Mth.lerp(partialTicks, bmp2.turretXRotO - bmp2.xRotO, bmp2.getTurretXRot() - bmp2.getXRot())); - setPosition(Mth.lerp(partialTicks, player.xo, player.getX()), Mth.lerp(partialTicks, player.yo + player.getEyeHeight(), player.getEyeY()), Mth.lerp(partialTicks, player.zo, player.getZ())); - info.cancel(); + if (player.getVehicle() instanceof Bmp2Entity bmp2 && (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON || ClientEventHandler.zoomVehicle)) { + if (bmp2.getFirstPassenger() == player) { + setRotation(-Mth.lerp(partialTicks, bmp2.turretYRotO - bmp2.yRotO, bmp2.getTurretYRot() - bmp2.getYRot()), Mth.lerp(partialTicks, bmp2.turretXRotO - bmp2.xRotO, bmp2.getTurretXRot() - bmp2.getXRot())); + setPosition(Mth.lerp(partialTicks, player.xo, player.getX()), Mth.lerp(partialTicks, player.yo + player.getEyeHeight(), player.getEyeY()), Mth.lerp(partialTicks, player.zo, player.getZ())); + info.cancel(); + } else { + setRotation(Mth.lerp(partialTicks, player.yHeadRotO, player.getYHeadRot()), Mth.lerp(partialTicks, player.xRotO, player.getXRot())); + setPosition(Mth.lerp(partialTicks, player.xo, player.getX()) - 6 * player.getViewVector(partialTicks).x, Mth.lerp(partialTicks, player.yo + player.getEyeHeight() + 1, player.getEyeY() + 1) - 6 * player.getViewVector(partialTicks).y, Mth.lerp(partialTicks, player.zo, player.getZ()) - 6 * player.getViewVector(partialTicks).z); + info.cancel(); + } return; }