diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/MobileVehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/MobileVehicleEntity.java index 9da7866ce..bc145f288 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/MobileVehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/MobileVehicleEntity.java @@ -40,6 +40,10 @@ public class MobileVehicleEntity extends EnergyVehicleEntity { public boolean upInputDown; public boolean downInputDown; public boolean decoyInputDown; + public boolean leftInputDownMouse; + public boolean rightInputDownMouse; + public boolean upInputDownMouse; + public boolean downInputDownMouse; public double lastTickSpeed; public double lastTickVerticalSpeed; public int collisionCoolDown; 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 c86f683e3..1a77cb558 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Tom6Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Tom6Entity.java @@ -190,7 +190,7 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity { setXRot(getXRot() * 0.7f); setZRot(getRoll() * 0.7f); } else { - setZRot(getRoll() * 0.994f); +// setZRot(getRoll() * 0.994f); } // if (this.forwardInputDown || this.backInputDown) { diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientMouseHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientMouseHandler.java index 2e3818c33..f0579fb38 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientMouseHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientMouseHandler.java @@ -1,6 +1,8 @@ package com.atsuishio.superbwarfare.event; +import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.client.MouseMovementHandler; +import com.atsuishio.superbwarfare.network.message.VehicleMovementMessage; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.util.Mth; @@ -51,9 +53,48 @@ public class ClientMouseHandler { } } - lerpPosX = Mth.lerp(0.1,lerpPosX,0); - lerpPosY = Mth.lerp(0.1,lerpPosY,0); + lerpPosX = Mth.clamp(Mth.lerp(0.1,lerpPosX,0), -0.11, 0.11); + lerpPosY = Mth.clamp(Mth.lerp(0.1,lerpPosY,0), -0.11, 0.11); -// player.displayClientMessage(Component.literal(new DecimalFormat("##.##").format(lerpPosX)), true); + int typeX = 0; + + if (lerpPosX < -0.05) { + typeX = -1; + } else if (lerpPosX > 0.05) { + typeX = 1; + } + + int typeY = 0; + + if (lerpPosY < -0.05) { + typeY = 1; + } else if (lerpPosY > 0.05) { + typeY = -1; + } + + if (typeX == -1) { + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(7, true)); + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(8, false)); + } else if (typeX == 1) { + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(7, false)); + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(8, true)); + } else { + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(7, false)); + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(8, false)); + } + + + if (typeY == 1) { + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(9, true)); + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(10, false)); + } else if (typeY == -1) { + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(9, false)); + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(10, true)); + } else { + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(9, false)); + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(10, false)); + } + +// player.displayClientMessage(Component.literal(typeX + " " + typeY), true); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/MouseHandlerMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/MouseHandlerMixin.java index c8509dff5..f68142217 100644 --- a/src/main/java/com/atsuishio/superbwarfare/mixins/MouseHandlerMixin.java +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/MouseHandlerMixin.java @@ -1,10 +1,7 @@ package com.atsuishio.superbwarfare.mixins; import com.atsuishio.superbwarfare.config.client.VehicleControlConfig; -import com.atsuishio.superbwarfare.entity.vehicle.Ah6Entity; -import com.atsuishio.superbwarfare.entity.vehicle.ICannonEntity; -import com.atsuishio.superbwarfare.entity.vehicle.Lav150Entity; -import com.atsuishio.superbwarfare.entity.vehicle.Tom6Entity; +import com.atsuishio.superbwarfare.entity.vehicle.*; import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModMobEffects; @@ -29,6 +26,9 @@ import static com.atsuishio.superbwarfare.event.ClientEventHandler.droneFovLerp; @Mixin(MouseHandler.class) public class MouseHandlerMixin { + private static double x; + private static double y; + @ModifyVariable(method = "turnPlayer()V", at = @At(value = "STORE", opcode = Opcodes.DSTORE), ordinal = 2) private double sensitivity(double original) { Minecraft mc = Minecraft.getInstance(); @@ -80,12 +80,55 @@ public class MouseHandlerMixin { if (player == null) return i; if (player.getVehicle() instanceof Ah6Entity ah6Entity && ah6Entity.getFirstPassenger() == player) { - return VehicleControlConfig.INVERT_AIRCRAFT_CONTROL.get() ? (Mth.abs(ah6Entity.getRoll()) < 90 ? -i : i) : (Mth.abs(ah6Entity.getRoll()) < 90 ? i : -i); + return VehicleControlConfig.INVERT_AIRCRAFT_CONTROL.get() ? -i : i; } if (player.getVehicle() instanceof Tom6Entity tom6 && tom6.getFirstPassenger() == player) { - return VehicleControlConfig.INVERT_AIRCRAFT_CONTROL.get() ? (Mth.abs(tom6.getRoll()) < 90 ? -i : i) : (Mth.abs(tom6.getRoll()) < 90 ? i : -i); + return VehicleControlConfig.INVERT_AIRCRAFT_CONTROL.get() ? -i : i; } return i; } + + @ModifyVariable(method = "turnPlayer()V", at = @At(value = "STORE", opcode = Opcodes.DSTORE), ordinal = 5) + private double modifyD2(double d) { + Minecraft mc = Minecraft.getInstance(); + Player player = mc.player; + + if (player == null) return d; + + if (player.getVehicle() instanceof VehicleEntity vehicle) { + x = d; + + double i = 0; + + if (vehicle.getRoll() < 0) { + i = 1; + } else if (vehicle.getRoll() > 0) { + i = -1; + } + + if (Mth.abs(vehicle.getRoll()) > 90) { + i *= (1 - (Mth.abs(vehicle.getRoll()) - 90) / 90); + } + + return (1 - (Mth.abs(vehicle.getRoll()) / 90)) * d + ((Mth.abs(vehicle.getRoll()) / 90)) * y * i; + } + return d; + } + + @ModifyVariable(method = "turnPlayer()V", at = @At(value = "STORE", opcode = Opcodes.DSTORE), ordinal = 6) + private double modifyD3(double d) { + Minecraft mc = Minecraft.getInstance(); + Player player = mc.player; + + if (player == null) return d; + + if (player.getVehicle() instanceof VehicleEntity vehicle) { + y = d; + return (1 - (Mth.abs(vehicle.getRoll()) / 90)) * d + ((Mth.abs(vehicle.getRoll()) / 90)) * x * (vehicle.getRoll() < 0 ? -1 : 1); + } + + return d; + } + } 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 e350ba5a7..c63701756 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/VehicleMovementMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/VehicleMovementMessage.java @@ -60,6 +60,18 @@ public class VehicleMovementMessage { case 6: mobileVehicleEntity.decoyInputDown = message.clicked; break; + case 7: + mobileVehicleEntity.leftInputDownMouse = message.clicked; + break; + case 8: + mobileVehicleEntity.rightInputDownMouse = message.clicked; + break; + case 9: + mobileVehicleEntity.downInputDownMouse = message.clicked; + break; + case 10: + mobileVehicleEntity.upInputDownMouse = message.clicked; + break; } } else if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) { var drone = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone"));