修复视角摇晃bug
This commit is contained in:
parent
f629b9ced0
commit
9a4bcf0de6
2 changed files with 27 additions and 143 deletions
|
@ -85,11 +85,9 @@ public class ClientEventHandler {
|
||||||
float yRotOffset = Mth.lerp(event.getPartialTick(), player.yBobO, player.yBob);
|
float yRotOffset = Mth.lerp(event.getPartialTick(), player.yBobO, player.yBob);
|
||||||
float xRot = player.getViewXRot(event.getPartialTick()) - xRotOffset;
|
float xRot = player.getViewXRot(event.getPartialTick()) - xRotOffset;
|
||||||
float yRot = player.getViewYRot(event.getPartialTick()) - yRotOffset;
|
float yRot = player.getViewYRot(event.getPartialTick()) - yRotOffset;
|
||||||
if (player.getMainHandItem().is(ModTags.Items.GUN)) {
|
turnRot[0] = Mth.clamp(0.05 * xRot, -5, 5) * (1 - 0.75 * zoomTime);
|
||||||
turnRot[0] = Mth.clamp(0.05 * xRot, -5, 5) * (1 - 0.75 * zoomTime);
|
turnRot[1] = Mth.clamp(0.05 * yRot, -10, 10) * (1 - 0.75 * zoomTime);
|
||||||
turnRot[1] = Mth.clamp(0.05 * yRot, -10, 10) * (1 - 0.75 * zoomTime);
|
turnRot[2] = Mth.clamp(0.1 * yRot, -10, 10) * (1 - zoomTime);
|
||||||
turnRot[2] = Mth.clamp(0.1 * yRot, -10, 10) * (1 - zoomTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
droneCameraRotX = Mth.clamp(0.25f * xRot, -10, 10);
|
droneCameraRotX = Mth.clamp(0.25f * xRot, -10, 10);
|
||||||
droneCameraRotY = Mth.clamp(0.25f * yRot, -20, 10);
|
droneCameraRotY = Mth.clamp(0.25f * yRot, -20, 10);
|
||||||
|
@ -262,10 +260,10 @@ public class ClientEventHandler {
|
||||||
on_ground = 0.001;
|
on_ground = 0.001;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Minecraft.getInstance().options.keyUp.isDown() && firePosTimer == 0 && zoomTime == 0) {
|
if (Minecraft.getInstance().options.keyUp.isDown() && firePosTimer == 0) {
|
||||||
moveRotZ = Mth.clamp(moveRotZ + 0.007 * times, 0, 0.14);
|
moveRotZ = Mth.clamp(moveRotZ + 0.007 * times, 0, 0.14) * (1 - zoomTime);
|
||||||
} else {
|
} else {
|
||||||
moveRotZ = Mth.clamp(moveRotZ - 0.007 * times, 0, 0.14);
|
moveRotZ = Mth.clamp(moveRotZ - 0.007 * times, 0, 0.14) * (1 - zoomTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((Minecraft.getInstance().options.keyLeft.isDown()
|
if ((Minecraft.getInstance().options.keyLeft.isDown()
|
||||||
|
@ -312,17 +310,18 @@ public class ClientEventHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (movePosHorizon < 0) {
|
|
||||||
movePosHorizon += 2 * times * Math.pow(movePosHorizon, 2);
|
|
||||||
} else {
|
|
||||||
movePosHorizon -= 2 * times * Math.pow(movePosHorizon, 2);
|
|
||||||
}
|
|
||||||
if (Minecraft.getInstance().options.keyRight.isDown()) {
|
if (Minecraft.getInstance().options.keyRight.isDown()) {
|
||||||
movePosHorizon = Mth.clamp(movePosHorizon + Math.pow(Math.abs(movePosHorizon) + 0.05, 2) * 0.2 * times, -0.5, 0.5) * (1 - zoomTime);
|
movePosHorizon = Mth.clamp(movePosHorizon + Math.pow(Math.abs(movePosHorizon) + 0.05, 2) * 0.2 * times, -0.5, 0.5) * (1 - zoomTime);
|
||||||
} else if (Minecraft.getInstance().options.keyLeft.isDown()) {
|
} else if (Minecraft.getInstance().options.keyLeft.isDown()) {
|
||||||
movePosHorizon = Mth.clamp(movePosHorizon - Math.pow(Math.abs(movePosHorizon) + 0.05, 2) * 0.2 * times, -0.5, 0.5) * (1 - zoomTime);
|
movePosHorizon = Mth.clamp(movePosHorizon - Math.pow(Math.abs(movePosHorizon) + 0.05, 2) * 0.2 * times, -0.5, 0.5) * (1 - zoomTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (movePosHorizon < 0) {
|
||||||
|
movePosHorizon += 2 * times * Math.pow(movePosHorizon, 2) * (1 - zoomTime);
|
||||||
|
} else {
|
||||||
|
movePosHorizon -= 2 * times * Math.pow(movePosHorizon, 2) * (1 - zoomTime);
|
||||||
|
}
|
||||||
|
|
||||||
double velocity = entity.getDeltaMovement().y();
|
double velocity = entity.getDeltaMovement().y();
|
||||||
|
|
||||||
if (-0.8 < velocity + 0.078 && velocity + 0.078 < 0.8) {
|
if (-0.8 < velocity + 0.078 && velocity + 0.078 < 0.8) {
|
||||||
|
@ -420,15 +419,9 @@ public class ClientEventHandler {
|
||||||
public static void shake(double boneRotX, double boneRotY, double boneRotZ) {
|
public static void shake(double boneRotX, double boneRotY, double boneRotZ) {
|
||||||
LocalPlayer player = Minecraft.getInstance().player;
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
if (player.getMainHandItem().is(ModTags.Items.GUN) || (player.getVehicle() != null && (player.getVehicle() instanceof ICannonEntity))) {
|
cameraRot[0] = boneRotX;
|
||||||
cameraRot[0] = boneRotX;
|
cameraRot[1] = boneRotY;
|
||||||
cameraRot[1] = boneRotY;
|
cameraRot[2] = boneRotZ;
|
||||||
cameraRot[2] = boneRotZ;
|
|
||||||
} else {
|
|
||||||
cameraRot[0] = 0;
|
|
||||||
cameraRot[1] = 0;
|
|
||||||
cameraRot[2] = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -436,12 +429,18 @@ public class ClientEventHandler {
|
||||||
double yaw = event.getYaw();
|
double yaw = event.getYaw();
|
||||||
double pitch = event.getPitch();
|
double pitch = event.getPitch();
|
||||||
double roll = event.getRoll();
|
double roll = event.getRoll();
|
||||||
event.setPitch((float) (pitch + cameraRot[0] + 0.2 * turnRot[0] + 3 * velocityY));
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
event.setYaw((float) (yaw + cameraRot[1] + 0.8 * turnRot[1]));
|
|
||||||
event.setRoll((float) (roll + cameraRot[2] + 0.35 * turnRot[2]));
|
if (player == null) return;
|
||||||
|
|
||||||
|
if (player.getMainHandItem().is(ModTags.Items.GUN) || (player.getVehicle() != null && (player.getVehicle() instanceof ICannonEntity))) {
|
||||||
|
event.setPitch((float) (pitch + cameraRot[0] + 0.2 * turnRot[0] + 3 * velocityY));
|
||||||
|
event.setYaw((float) (yaw + cameraRot[1] + 0.8 * turnRot[1]));
|
||||||
|
event.setRoll((float) (roll + cameraRot[2] + 0.35 * turnRot[2]));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void handleBowPullAnimation(LivingEntity entity) {
|
private static void handleBowPullAnimation(LivingEntity entity) {
|
||||||
float times = 4 * Minecraft.getInstance().getDeltaFrameTime();
|
float times = 4 * Minecraft.getInstance().getDeltaFrameTime();
|
||||||
|
|
||||||
if ((entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).bowPull) {
|
if ((entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).bowPull) {
|
||||||
|
|
|
@ -44,7 +44,7 @@ public class GunEventHandler {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
|
|
||||||
if (event.phase == TickEvent.Phase.END && stack.is(ModTags.Items.GUN)) {
|
if (event.phase == TickEvent.Phase.END && stack.is(ModTags.Items.GUN)) {
|
||||||
handleGunFire(player);
|
handleGunBolt(player);
|
||||||
handleMiniGunFire(player);
|
handleMiniGunFire(player);
|
||||||
handleGunReload(player);
|
handleGunReload(player);
|
||||||
handleGunSingleReload(player);
|
handleGunSingleReload(player);
|
||||||
|
@ -55,124 +55,9 @@ public class GunEventHandler {
|
||||||
/**
|
/**
|
||||||
* 通用的武器开火流程
|
* 通用的武器开火流程
|
||||||
*/
|
*/
|
||||||
private static void handleGunFire(Player player) {
|
private static void handleGunBolt(Player player) {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (stack.is(ModTags.Items.NORMAL_GUN)) {
|
if (stack.is(ModTags.Items.NORMAL_GUN)) {
|
||||||
// double mode = stack.getOrCreateTag().getInt("fire_mode");
|
|
||||||
//
|
|
||||||
// int interval = stack.getOrCreateTag().getInt("fire_interval");
|
|
||||||
//
|
|
||||||
// if (!player.getPersistentData().getBoolean("firing") && player.getMainHandItem().getItem() == ModItems.DEVOTION.get()) {
|
|
||||||
// stack.getOrCreateTag().putDouble("fire_increase", 0);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (stack.getOrCreateTag().getInt("ammo") == 0) {
|
|
||||||
// stack.getOrCreateTag().putInt("burst_fire", 0);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if ((player.getPersistentData().getBoolean("firing") || stack.getOrCreateTag().getInt("burst_fire") > 0)
|
|
||||||
// && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading"))
|
|
||||||
// && !stack.getOrCreateTag().getBoolean("reloading")
|
|
||||||
// && !stack.getOrCreateTag().getBoolean("charging")
|
|
||||||
// && stack.getOrCreateTag().getInt("ammo") > 0
|
|
||||||
// && !player.getCooldowns().isOnCooldown(stack.getItem())
|
|
||||||
// && !stack.getOrCreateTag().getBoolean("need_bolt_action")) {
|
|
||||||
//
|
|
||||||
// playGunSounds(player);
|
|
||||||
//
|
|
||||||
// if (mode == 0) {
|
|
||||||
// player.getPersistentData().putBoolean("firing", false);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// int burstCooldown = 0;
|
|
||||||
// if (mode == 1) {
|
|
||||||
// stack.getOrCreateTag().putInt("burst_fire", (stack.getOrCreateTag().getInt("burst_fire") - 1));
|
|
||||||
// burstCooldown = stack.getOrCreateTag().getInt("burst_fire") == 0 ? interval + 4 : 0;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (stack.getOrCreateTag().getDouble("animindex") == 1) {
|
|
||||||
// stack.getOrCreateTag().putDouble("animindex", 0);
|
|
||||||
// } else {
|
|
||||||
// stack.getOrCreateTag().putDouble("animindex", 1);
|
|
||||||
// }
|
|
||||||
// /*
|
|
||||||
// 空仓挂机
|
|
||||||
// */
|
|
||||||
// if (stack.getOrCreateTag().getInt("ammo") == 1) {
|
|
||||||
// stack.getOrCreateTag().putBoolean("HoldOpen", true);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /*
|
|
||||||
// 判断是否为栓动武器(bolt_action_time > 0),并在开火后给一个需要上膛的状态
|
|
||||||
// */
|
|
||||||
// if (stack.getOrCreateTag().getDouble("bolt_action_time") > 0 && stack.getOrCreateTag().getInt("ammo") > 1) {
|
|
||||||
// stack.getOrCreateTag().putBoolean("need_bolt_action", true);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1));
|
|
||||||
// stack.getOrCreateTag().putInt("fire_animation", interval);
|
|
||||||
// player.getPersistentData().putInt("noRun_time", interval + 2);
|
|
||||||
// stack.getOrCreateTag().putDouble("flash_time", 2);
|
|
||||||
//
|
|
||||||
// stack.getOrCreateTag().putDouble("empty", 1);
|
|
||||||
//
|
|
||||||
// if (stack.getItem() == ModItems.M_60.get()) {
|
|
||||||
// stack.getOrCreateTag().putBoolean("bullet_chain", true);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (stack.getItem() == ModItems.M_4.get() || player.getMainHandItem().getItem() == ModItems.HK_416.get() || player.getMainHandItem().getItem() == ModItems.QBZ_95.get()) {
|
|
||||||
// if (stack.getOrCreateTag().getDouble("fire_sequence") == 1) {
|
|
||||||
// stack.getOrCreateTag().putDouble("fire_sequence", 0);
|
|
||||||
// } else {
|
|
||||||
// stack.getOrCreateTag().putDouble("fire_sequence", 1);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (stack.getItem() == ModItems.DEVOTION.get()) {
|
|
||||||
// stack.getOrCreateTag().putDouble("fire_increase", stack.getOrCreateTag().getDouble("fire_increase") + 0.334);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (stack.getItem() == ModItems.ABEKIRI.get()) {
|
|
||||||
// stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(InteractionHand.MAIN_HAND));
|
|
||||||
// if (player instanceof ServerPlayer serverPlayer && player.level() instanceof ServerLevel serverLevel) {
|
|
||||||
// ParticleTool.sendParticle(serverLevel, ParticleTypes.CLOUD, player.getX() + 1.8 * player.getLookAngle().x, player.getY() + player.getBbHeight() - 0.1 + 1.8 * player.getLookAngle().y,
|
|
||||||
// player.getZ() + 1.8 * player.getLookAngle().z, 30, 0.4, 0.4, 0.4, 0.005, true, serverPlayer);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (stack.getItem() == ModItems.SENTINEL.get()) {
|
|
||||||
// stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(
|
|
||||||
// iEnergyStorage -> iEnergyStorage.extractEnergy(3000, false)
|
|
||||||
// );
|
|
||||||
// stack.getOrCreateTag().putDouble("chamber_rot", 20);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// int zoomAddCooldown = 0;
|
|
||||||
// if (stack.getItem() == ModItems.MARLIN.get()) {
|
|
||||||
// if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) {
|
|
||||||
// zoomAddCooldown = 5;
|
|
||||||
// stack.getOrCreateTag().putDouble("marlin_animation_time", 15);
|
|
||||||
// stack.getOrCreateTag().putBoolean("fastfiring", false);
|
|
||||||
// } else {
|
|
||||||
// stack.getOrCreateTag().putDouble("marlin_animation_time", 10);
|
|
||||||
// stack.getOrCreateTag().putBoolean("fastfiring", true);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// int cooldown = interval + (int) stack.getOrCreateTag().getDouble("fire_sequence") - (int) stack.getOrCreateTag().getDouble("fire_increase") + burstCooldown + zoomAddCooldown;
|
|
||||||
// player.getCooldowns().addCooldown(stack.getItem(), cooldown);
|
|
||||||
//
|
|
||||||
// for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) {
|
|
||||||
// gunShoot(player);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// stack.getOrCreateTag().putBoolean("shoot", true);
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
/*
|
|
||||||
在开火动画的最后1tick,设置需要拉栓上膛的武器拉栓动画的倒计时为data里的拉栓时间
|
|
||||||
*/
|
|
||||||
if (stack.getOrCreateTag().getInt("fire_animation") == 1 && stack.getOrCreateTag().getBoolean("need_bolt_action")) {
|
if (stack.getOrCreateTag().getInt("fire_animation") == 1 && stack.getOrCreateTag().getBoolean("need_bolt_action")) {
|
||||||
stack.getOrCreateTag().putInt("bolt_action_anim", stack.getOrCreateTag().getInt("bolt_action_time") + 1);
|
stack.getOrCreateTag().putInt("bolt_action_anim", stack.getOrCreateTag().getInt("bolt_action_time") + 1);
|
||||||
player.getCooldowns().addCooldown(stack.getItem(), stack.getOrCreateTag().getInt("bolt_action_time") + 1);
|
player.getCooldowns().addCooldown(stack.getItem(), stack.getOrCreateTag().getInt("bolt_action_time") + 1);
|
||||||
|
|
Loading…
Add table
Reference in a new issue