修改射速所用的渲染事件,重写趴下判定和精准度机制

This commit is contained in:
Atsuihsio 2024-09-21 17:13:26 +08:00
parent 9a4bcf0de6
commit a7ca9e07e2
37 changed files with 122 additions and 94 deletions

View file

@ -15,6 +15,8 @@ import software.bernie.geckolib.core.animatable.model.CoreGeoBone;
import software.bernie.geckolib.core.animation.AnimationState; import software.bernie.geckolib.core.animation.AnimationState;
import software.bernie.geckolib.model.GeoModel; import software.bernie.geckolib.model.GeoModel;
import static net.mcreator.superbwarfare.event.PlayerEventHandler.isProne;
public class DevotionItemModel extends GeoModel<DevotionItem> { public class DevotionItemModel extends GeoModel<DevotionItem> {
@Override @Override
public ResourceLocation getAnimationResource(DevotionItem animatable) { public ResourceLocation getAnimationResource(DevotionItem animatable) {
@ -627,7 +629,7 @@ public class DevotionItemModel extends GeoModel<DevotionItem> {
move.setRotY(Mth.DEG_TO_RAD * (float) turnRotY); move.setRotY(Mth.DEG_TO_RAD * (float) turnRotY);
move.setRotZ(2.7f * (float) mph + Mth.DEG_TO_RAD * (float) turnRotZ); move.setRotZ(2.7f * (float) mph + Mth.DEG_TO_RAD * (float) turnRotZ);
if (player.getPersistentData().getDouble("prone") > 0) { if (isProne(player)) {
l.setRotX(1.5f); l.setRotX(1.5f);
r.setRotX(1.5f); r.setRotX(1.5f);
} }

View file

@ -15,6 +15,8 @@ import software.bernie.geckolib.core.animatable.model.CoreGeoBone;
import software.bernie.geckolib.core.animation.AnimationState; import software.bernie.geckolib.core.animation.AnimationState;
import software.bernie.geckolib.model.GeoModel; import software.bernie.geckolib.model.GeoModel;
import static net.mcreator.superbwarfare.event.PlayerEventHandler.isProne;
public class M60ItemModel extends GeoModel<M60Item> { public class M60ItemModel extends GeoModel<M60Item> {
@Override @Override
public ResourceLocation getAnimationResource(M60Item animatable) { public ResourceLocation getAnimationResource(M60Item animatable) {
@ -49,7 +51,7 @@ public class M60ItemModel extends GeoModel<M60Item> {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return; if (!stack.is(ModTags.Items.GUN)) return;
if (player.getPersistentData().getDouble("prone") > 0) { if (isProne(player)) {
l.setRotX(1.5f); l.setRotX(1.5f);
r.setRotX(1.5f); r.setRotX(1.5f);
} }

View file

@ -90,8 +90,8 @@ public class M98bItemModel extends GeoModel<M98bItem> {
root.setPosX(movePosX); root.setPosX(movePosX);
root.setPosY((float) swayY + movePosY); root.setPosY((float) swayY + movePosY);
root.setRotX((float) swayX); root.setRotX((float) swayX);
root.setRotY(movePosX); root.setRotY(0.2f * movePosX);
root.setRotZ(movePosX + moveRotZ); root.setRotZ(0.2f * movePosX + moveRotZ);
move.setPosX(9.3f * (float) mph); move.setPosX(9.3f * (float) mph);
move.setPosY(-2f * (float) vY); move.setPosY(-2f * (float) vY);

View file

@ -15,6 +15,8 @@ import software.bernie.geckolib.core.animatable.model.CoreGeoBone;
import software.bernie.geckolib.core.animation.AnimationState; import software.bernie.geckolib.core.animation.AnimationState;
import software.bernie.geckolib.model.GeoModel; import software.bernie.geckolib.model.GeoModel;
import static net.mcreator.superbwarfare.event.PlayerEventHandler.isProne;
public class Mk14ItemModel extends GeoModel<Mk14Item> { public class Mk14ItemModel extends GeoModel<Mk14Item> {
@Override @Override
public ResourceLocation getAnimationResource(Mk14Item animatable) { public ResourceLocation getAnimationResource(Mk14Item animatable) {
@ -46,7 +48,7 @@ public class Mk14ItemModel extends GeoModel<Mk14Item> {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return; if (!stack.is(ModTags.Items.GUN)) return;
if (player.getPersistentData().getDouble("prone") > 0) { if (isProne(player)) {
l.setRotX(-1.5f); l.setRotX(-1.5f);
r.setRotX(-1.5f); r.setRotX(-1.5f);
} }

View file

@ -15,6 +15,8 @@ import software.bernie.geckolib.core.animatable.model.CoreGeoBone;
import software.bernie.geckolib.core.animation.AnimationState; import software.bernie.geckolib.core.animation.AnimationState;
import software.bernie.geckolib.model.GeoModel; import software.bernie.geckolib.model.GeoModel;
import static net.mcreator.superbwarfare.event.PlayerEventHandler.isProne;
public class Ntw20Model extends GeoModel<Ntw20Item> { public class Ntw20Model extends GeoModel<Ntw20Item> {
@Override @Override
public ResourceLocation getAnimationResource(Ntw20Item animatable) { public ResourceLocation getAnimationResource(Ntw20Item animatable) {
@ -60,7 +62,7 @@ public class Ntw20Model extends GeoModel<Ntw20Item> {
double fp = ClientEventHandler.firePos; double fp = ClientEventHandler.firePos;
double fr = ClientEventHandler.fireRot; double fr = ClientEventHandler.fireRot;
if (player.getPersistentData().getDouble("prone") > 0) { if (isProne(player)) {
l.setRotX(-1.5f); l.setRotX(-1.5f);
r.setRotX(-1.5f); r.setRotX(-1.5f);
} }

View file

@ -3,6 +3,7 @@ package net.mcreator.superbwarfare.client.screens;
import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModItems;
import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.init.ModTags;
import net.minecraft.client.CameraType; import net.minecraft.client.CameraType;
@ -38,10 +39,7 @@ public class CrossHairOverlay {
return; return;
} }
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
boolean zoom = GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) == GLFW.GLFW_PRESS; double spread = ClientEventHandler.gunSpread;
double normalSpread = stack.getOrCreateTag().getDouble("spread");
double zoomSpread = stack.getOrCreateTag().getDouble("zoomSpread");
double spread = (zoom ? zoomSpread : normalSpread);
RenderSystem.disableDepthTest(); RenderSystem.disableDepthTest();
RenderSystem.depthMask(false); RenderSystem.depthMask(false);
@ -51,11 +49,11 @@ public class CrossHairOverlay {
RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShaderColor(1, 1, 1, 1);
if (shouldRenderCrossHair(player) || stack.is(ModItems.MINIGUN.get()) || (stack.is(ModItems.BOCEK.get()) && stack.getOrCreateTag().getBoolean("HoloHidden"))) { if (shouldRenderCrossHair(player) || stack.is(ModItems.MINIGUN.get()) || (stack.is(ModItems.BOCEK.get()) && stack.getOrCreateTag().getBoolean("HoloHidden"))) {
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/point.png"), w / 2f - 7.5f, h / 2f - 8, 0, 0, 16, 16, 16, 16); preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/point.png"), w / 2f - 7.5f, h / 2f - 7.5f, 0, 0, 16, 16, 16, 16);
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 9.5f - 2.8f * spread), h / 2f - 8, 0, 0, 16, 16, 16, 16); preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 13.5f - 2.8f * spread), h / 2f - 7.5f, 0, 0, 16, 16, 16, 16);
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 6.5f + 2.8f * spread), h / 2f - 8, 0, 0, 16, 16, 16, 16); preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 2.5f + 2.8f * spread), h / 2f - 7.5f, 0, 0, 16, 16, 16, 16);
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f, (float) (h / 2f - 7 + 2.8f * spread), 0, 0, 16, 16, 16, 16); preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f, (float) (h / 2f - 2.5f + 2.8f * spread), 0, 0, 16, 16, 16, 16);
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f, (float) (h / 2f - 10 - 2.8f * spread), 0, 0, 16, 16, 16, 16); preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f, (float) (h / 2f - 13.5f - 2.8f * spread), 0, 0, 16, 16, 16, 16);
} }
float ww = w / 2f - 7.5f + (float) (2 * (Math.random() - 0.5f)); float ww = w / 2f - 7.5f + (float) (2 * (Math.random() - 0.5f));

View file

@ -27,12 +27,14 @@ import net.minecraftforge.client.event.RenderGuiOverlayEvent;
import net.minecraftforge.client.event.RenderHandEvent; import net.minecraftforge.client.event.RenderHandEvent;
import net.minecraftforge.client.event.ViewportEvent; import net.minecraftforge.client.event.ViewportEvent;
import net.minecraftforge.client.gui.overlay.VanillaGuiOverlay; import net.minecraftforge.client.gui.overlay.VanillaGuiOverlay;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
import static net.mcreator.superbwarfare.entity.DroneEntity.ROT_X; import static net.mcreator.superbwarfare.entity.DroneEntity.ROT_X;
import static net.mcreator.superbwarfare.entity.DroneEntity.ROT_Z; import static net.mcreator.superbwarfare.entity.DroneEntity.ROT_Z;
import static net.mcreator.superbwarfare.event.PlayerEventHandler.isProne;
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT)
public class ClientEventHandler { public class ClientEventHandler {
@ -72,6 +74,8 @@ public class ClientEventHandler {
public static double pullPos = 0; public static double pullPos = 0;
public static double bowPos = 0; public static double bowPos = 0;
public static double handPos = 0; public static double handPos = 0;
public static double gunSpread = 0;
public static double fireSpread = 0;
public static MillisTimer clientTimer = new MillisTimer(); public static MillisTimer clientTimer = new MillisTimer();
@ -102,13 +106,63 @@ public class ClientEventHandler {
return !mc.isWindowActive(); return !mc.isWindowActive();
} }
private static boolean isMove() {
return Minecraft.getInstance().options.keyLeft.isDown()
|| Minecraft.getInstance().options.keyRight.isDown()
|| Minecraft.getInstance().options.keyUp.isDown()
|| Minecraft.getInstance().options.keyDown.isDown();
}
@SubscribeEvent @SubscribeEvent
public static void handleWeaponFire(RenderHandEvent event) { public static void handleWeaponFire(TickEvent.RenderTickEvent event) {
if (notInGame()) return;
ClientLevel level = Minecraft.getInstance().level; ClientLevel level = Minecraft.getInstance().level;
Player player = Minecraft.getInstance().player; Player player = Minecraft.getInstance().player;
if (GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_LEFT) == GLFW.GLFW_PRESS && player != null && level != null && player.getMainHandItem().is(ModTags.Items.NORMAL_GUN)) { if (notInGame()) return;
ItemStack stack = player.getMainHandItem(); if (player == null) return;
if (level == null) return;
ItemStack stack = player.getMainHandItem();
//精准度
float times = Minecraft.getInstance().getDeltaFrameTime();
double basicDev = stack.getOrCreateTag().getDouble("spread");
double walk = isMove() ? 0.75 * basicDev : 0;
double sprint = player.isSprinting() ? 1.25 * basicDev : 0;
double crouching = player.isCrouching() ? -0.15 * basicDev : 0;
double prone = isProne(player) ? -0.3 * basicDev : 0;
double jump = player.onGround() ? 0 * basicDev : 1.5 * basicDev;
double ride = player.onGround() ? -0.25 * basicDev : 0;
double zoomSpread;
if (stack.is(ModTags.Items.SNIPER_RIFLE)) {
zoomSpread = 1 - (0.995 * zoomTime);
} else if (stack.is(ModTags.Items.SHOTGUN) || stack.is(ModItems.MINIGUN.get())) {
zoomSpread = 1 - (0.25 * zoomTime);
}
else {
zoomSpread = 1 - (0.9 * zoomTime);
}
double spread = stack.is(ModTags.Items.SHOTGUN) || stack.is(ModItems.MINIGUN.get()) ? 1.2 * zoomSpread * (basicDev + 0.2 * (walk + sprint + crouching + prone + jump + ride) + fireSpread) : zoomSpread * (0.4 * basicDev + walk + sprint + crouching + prone + jump + ride + 0.6 * fireSpread);
if (gunSpread < spread) {
gunSpread += 0.07 * Math.pow(spread - gunSpread, 2) * times;
} else {
gunSpread -= 0.07 * Math.pow(spread - gunSpread, 2) * times;
}
// player.displayClientMessage(Component.literal(new java.text.DecimalFormat("####").format(gunSpread)), true);
// 开火部分
if (GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_LEFT) == GLFW.GLFW_PRESS && player.getMainHandItem().is(ModTags.Items.NORMAL_GUN)) {
double customRpm = 0; double customRpm = 0;
@ -132,7 +186,7 @@ public class ClientEventHandler {
} }
if (clientTimer.getProgress() >= cooldown) { if (clientTimer.getProgress() >= cooldown) {
ModUtils.PACKET_HANDLER.sendToServer(new ShootMessage(0)); ModUtils.PACKET_HANDLER.sendToServer(new ShootMessage(spread));
clientTimer.setProgress((long) (clientTimer.getProgress() - cooldown)); clientTimer.setProgress((long) (clientTimer.getProgress() - cooldown));
} }
@ -231,9 +285,9 @@ public class ClientEventHandler {
double pose; double pose;
var data = entity.getPersistentData(); var data = entity.getPersistentData();
if (entity.isShiftKeyDown() && entity.getBbHeight() >= 1 && data.getDouble("prone") == 0) { if (entity.isShiftKeyDown() && entity.getBbHeight() >= 1 && isProne((Player) entity)) {
pose = 0.85; pose = 0.85;
} else if (data.getDouble("prone") > 0) { } else if (isProne((Player) entity)) {
pose = entity.getMainHandItem().getOrCreateTag().getDouble("bipod") == 1 ? 0 : 0.25f; pose = entity.getMainHandItem().getOrCreateTag().getDouble("bipod") == 1 ? 0 : 0.25f;
} else { } else {
pose = 1; pose = 1;
@ -266,10 +320,7 @@ public class ClientEventHandler {
moveRotZ = Mth.clamp(moveRotZ - 0.007 * times, 0, 0.14) * (1 - zoomTime); moveRotZ = Mth.clamp(moveRotZ - 0.007 * times, 0, 0.14) * (1 - zoomTime);
} }
if ((Minecraft.getInstance().options.keyLeft.isDown() if (isMove() && firePosTimer == 0) {
|| Minecraft.getInstance().options.keyRight.isDown()
|| Minecraft.getInstance().options.keyUp.isDown()
|| Minecraft.getInstance().options.keyDown.isDown()) && firePosTimer == 0) {
if (moveYTime < 1.25) { if (moveYTime < 1.25) {
moveYTime += 1.2 * on_ground * times * move_speed; moveYTime += 1.2 * on_ground * times * move_speed;
} else { } else {
@ -317,11 +368,13 @@ public class ClientEventHandler {
} }
if (movePosHorizon < 0) { if (movePosHorizon < 0) {
movePosHorizon += 2 * times * Math.pow(movePosHorizon, 2) * (1 - zoomTime); movePosHorizon += 4 * times * Math.pow(movePosHorizon, 2);
} else { } else {
movePosHorizon -= 2 * times * Math.pow(movePosHorizon, 2) * (1 - zoomTime); movePosHorizon -= 4 * times * Math.pow(movePosHorizon, 2);
} }
movePosHorizon *= (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) {
@ -358,8 +411,16 @@ public class ClientEventHandler {
firePosTimer = 0.001; firePosTimer = 0.001;
fireRotTimer = 0.001; fireRotTimer = 0.001;
firePosZ = 0.1; firePosZ = 0.1;
fireSpread += 10;
} }
fireSpread = Mth.clamp(fireSpread - 0.2 * (Math.pow(fireSpread, 2) * times), 0 ,100);
// Player player = Minecraft.getInstance().player;
// if (player != null) {
// player.displayClientMessage(Component.literal(new java.text.DecimalFormat("####").format(fireSpread)), true);
// }
firePosZ = Mth.clamp(firePosZ - 0.01 * times, 0, 0.6); firePosZ = Mth.clamp(firePosZ - 0.01 * times, 0, 0.6);
if (0 < firePosTimer) { if (0 < firePosTimer) {
@ -396,6 +457,9 @@ public class ClientEventHandler {
fireRotTimer = 0; fireRotTimer = 0;
fireRot = 0; fireRot = 0;
} }
} }
private static void handlePlayerBreath(LivingEntity entity) { private static void handlePlayerBreath(LivingEntity entity) {

View file

@ -124,7 +124,7 @@ public class GunEventHandler {
stack.getOrCreateTag().putBoolean("shoot", true); stack.getOrCreateTag().putBoolean("shoot", true);
for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) { for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) {
gunShoot(player); gunShoot(player, 2 * stack.getOrCreateTag().getDouble("spread"));
} }
player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
@ -230,7 +230,7 @@ public class GunEventHandler {
} }
} }
public static void gunShoot(Player player) { public static void gunShoot(Player player, double spared) {
ItemStack heldItem = player.getMainHandItem(); ItemStack heldItem = player.getMainHandItem();
if (!player.level().isClientSide()) { if (!player.level().isClientSide()) {
@ -238,8 +238,6 @@ public class GunEventHandler {
float damage = (float) (heldItem.getOrCreateTag().getDouble("damage") + heldItem.getOrCreateTag().getDouble("sentinelChargeDamage")) * (float) heldItem.getOrCreateTag().getDouble("levelDamageMultiple"); float damage = (float) (heldItem.getOrCreateTag().getDouble("damage") + heldItem.getOrCreateTag().getDouble("sentinelChargeDamage")) * (float) heldItem.getOrCreateTag().getDouble("levelDamageMultiple");
boolean zoom = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom; boolean zoom = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom;
double spread = heldItem.getOrCreateTag().getDouble("spread");
double zoomSpread = heldItem.getOrCreateTag().getDouble("zoomSpread");
ProjectileEntity projectile = new ProjectileEntity(player.level()) ProjectileEntity projectile = new ProjectileEntity(player.level())
.shooter(player) .shooter(player)
@ -285,7 +283,7 @@ public class GunEventHandler {
projectile.setPos(player.getX() - 0.1 * player.getLookAngle().x, player.getEyeY() - 0.1 - 0.1 * player.getLookAngle().y, player.getZ() + -0.1 * player.getLookAngle().z); projectile.setPos(player.getX() - 0.1 * player.getLookAngle().x, player.getEyeY() - 0.1 - 0.1 * player.getLookAngle().y, player.getZ() + -0.1 * player.getLookAngle().z);
projectile.shoot(player.getLookAngle().x, player.getLookAngle().y + 0.0005f, player.getLookAngle().z, 1 * (float) heldItem.getOrCreateTag().getDouble("velocity"), projectile.shoot(player.getLookAngle().x, player.getLookAngle().y + 0.0005f, player.getLookAngle().z, 1 * (float) heldItem.getOrCreateTag().getDouble("velocity"),
(float) (zoom ? zoomSpread : spread)); (float) spared);
player.level().addFreshEntity(projectile); player.level().addFreshEntity(projectile);
} }
} }

View file

@ -77,7 +77,6 @@ public class PlayerEventHandler {
if (event.phase == TickEvent.Phase.END) { if (event.phase == TickEvent.Phase.END) {
if (stack.is(ModTags.Items.GUN)) { if (stack.is(ModTags.Items.GUN)) {
handleWeaponSway(player); handleWeaponSway(player);
handlePlayerProne(player);
handlePlayerSprint(player); handlePlayerSprint(player);
handleWeaponLevel(player); handleWeaponLevel(player);
handleAmmoCount(player); handleAmmoCount(player);
@ -85,6 +84,7 @@ public class PlayerEventHandler {
handleChangeFireRate(player); handleChangeFireRate(player);
handleBocekPulling(player); handleBocekPulling(player);
handleGunRecoil(player); handleGunRecoil(player);
isProne(player);
} }
handleGround(player); handleGround(player);
@ -95,14 +95,22 @@ public class PlayerEventHandler {
} }
} }
public static boolean isProne(Player player) {
Level level = player.level();
if (player.getBbHeight() <= 1) return true;
return player.isCrouching() && level.getBlockState(BlockPos.containing(player.getX() + 0.7 * player.getLookAngle().x, player.getY() + 0.5, player.getZ() + 0.7 * player.getLookAngle().z)).canOcclude() && !level.getBlockState(BlockPos.containing(player.getX() + 0.7 * player.getLookAngle().x, player.getY() + 1.5, player.getZ() + 0.7 * player.getLookAngle().z)).canOcclude();
}
private static void handleWeaponSway(Player player) { private static void handleWeaponSway(Player player) {
if (player.getMainHandItem().is(ModTags.Items.GUN)) { if (player.getMainHandItem().is(ModTags.Items.GUN)) {
float pose; float pose;
var data = player.getPersistentData(); var data = player.getPersistentData();
if (player.isCrouching() && player.getBbHeight() >= 1 && data.getDouble("prone") == 0) { if (player.isCrouching() && player.getBbHeight() >= 1 && !isProne(player)) {
pose = 0.85f; pose = 0.85f;
} else if (player.getPersistentData().getDouble("prone") > 0) { } else if (isProne(player)) {
pose = player.getMainHandItem().getOrCreateTag().getDouble("bipod") == 1 ? 0 : 0.25f; pose = player.getMainHandItem().getOrCreateTag().getDouble("bipod") == 1 ? 0 : 0.25f;
} else { } else {
pose = 1; pose = 1;
@ -231,26 +239,6 @@ public class PlayerEventHandler {
} }
} }
/**
* 判断玩家是否趴下
*/
private static void handlePlayerProne(Player player) {
Level level = player.level();
if (player.getBbHeight() <= 1) {
player.getPersistentData().putDouble("prone", 3);
}
if (player.isCrouching() && level.getBlockState(BlockPos.containing(player.getX() + 0.7 * player.getLookAngle().x, player.getY() + 0.5, player.getZ() + 0.7 * player.getLookAngle().z)).canOcclude()
&& !level.getBlockState(BlockPos.containing(player.getX() + 0.7 * player.getLookAngle().x, player.getY() + 1.5, player.getZ() + 0.7 * player.getLookAngle().z)).canOcclude()) {
player.getPersistentData().putDouble("prone", 3);
}
if (player.getPersistentData().getDouble("prone") > 0) {
player.getPersistentData().putDouble("prone", (player.getPersistentData().getDouble("prone") - 1));
}
}
/** /**
* 判断玩家是否在奔跑 * 判断玩家是否在奔跑
*/ */
@ -436,10 +424,10 @@ public class PlayerEventHandler {
计算后坐力 计算后坐力
*/ */
float rx, ry; float rx, ry;
if (player.isShiftKeyDown() && player.getBbHeight() >= 1 && player.getPersistentData().getDouble("prone") == 0) { if (player.isShiftKeyDown() && player.getBbHeight() >= 1 && !isProne(player)) {
rx = 0.7f; rx = 0.7f;
ry = 0.8f; ry = 0.8f;
} else if (player.getPersistentData().getDouble("prone") > 0) { } else if (isProne(player)) {
if (tag.getDouble("bipod") == 1) { if (tag.getDouble("bipod") == 1) {
rx = 0.05f; rx = 0.05f;
ry = 0.1f; ry = 0.1f;

View file

@ -275,7 +275,6 @@ public class ModVariables {
public boolean tacticalSprint = false; public boolean tacticalSprint = false;
public int tacticalSprintTime = 600; public int tacticalSprintTime = 600;
public boolean tacticalSprintExhaustion = false; public boolean tacticalSprintExhaustion = false;
public boolean breath = false; public boolean breath = false;
public int breathTime = 160; public int breathTime = 160;
public boolean breathExhaustion = false; public boolean breathExhaustion = false;

View file

@ -22,31 +22,31 @@ import static net.mcreator.superbwarfare.event.GunEventHandler.gunShoot;
import static net.mcreator.superbwarfare.event.GunEventHandler.playGunSounds; import static net.mcreator.superbwarfare.event.GunEventHandler.playGunSounds;
public class ShootMessage { public class ShootMessage {
private final int type; private final double spared;
public ShootMessage(int type) { public ShootMessage(double spared) {
this.type = type; this.spared = spared;
} }
public static ShootMessage decode(FriendlyByteBuf buffer) { public static ShootMessage decode(FriendlyByteBuf buffer) {
return new ShootMessage(buffer.readInt()); return new ShootMessage(buffer.readDouble());
} }
public static void encode(ShootMessage message, FriendlyByteBuf buffer) { public static void encode(ShootMessage message, FriendlyByteBuf buffer) {
buffer.writeInt(message.type); buffer.writeDouble(message.spared);
} }
public static void handler(ShootMessage message, Supplier<NetworkEvent.Context> contextSupplier) { public static void handler(ShootMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
NetworkEvent.Context context = contextSupplier.get(); NetworkEvent.Context context = contextSupplier.get();
context.enqueueWork(() -> { context.enqueueWork(() -> {
if (context.getSender() != null) { if (context.getSender() != null) {
pressAction(context.getSender(), message.type); pressAction(context.getSender(), message.spared);
} }
}); });
context.setPacketHandled(true); context.setPacketHandled(true);
} }
public static void pressAction(Player player, int type) { public static void pressAction(Player player, double spared) {
Level level = player.level(); Level level = player.level();
if (!level.isLoaded(player.blockPosition())) { if (!level.isLoaded(player.blockPosition())) {
@ -55,7 +55,6 @@ public class ShootMessage {
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"); double mode = stack.getOrCreateTag().getInt("fire_mode");
int interval = stack.getOrCreateTag().getInt("fire_interval"); int interval = stack.getOrCreateTag().getInt("fire_interval");
@ -150,7 +149,7 @@ public class ShootMessage {
player.getCooldowns().addCooldown(stack.getItem(), cooldown); player.getCooldowns().addCooldown(stack.getItem(), cooldown);
for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) { for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) {
gunShoot(player); gunShoot(player, spared);
} }
playGunSounds(player); playGunSounds(player);

View file

@ -2,7 +2,6 @@
"zoom_speed": 0.95, "zoom_speed": 0.95,
"zoom": 1.25, "zoom": 1.25,
"spread": 3.5, "spread": 3.5,
"zoomSpread": 3,
"recoil_x": 0.006, "recoil_x": 0.006,
"recoil_y": 0.018, "recoil_y": 0.018,
"damage": 2.5, "damage": 2.5,

View file

@ -2,7 +2,6 @@
"zoom_speed": 1.4, "zoom_speed": 1.4,
"zoom": 1.25, "zoom": 1.25,
"spread": 4, "spread": 4,
"zoomSpread": 3,
"recoil_x": 0.005, "recoil_x": 0.005,
"recoil_y": 0.026, "recoil_y": 0.026,
"damage": 3, "damage": 3,

View file

@ -2,7 +2,6 @@
"zoom_speed": 1.1, "zoom_speed": 1.1,
"zoom": 1.25, "zoom": 1.25,
"spread": 4, "spread": 4,
"zoomSpread": 0.1,
"recoil_x": 0.0025, "recoil_x": 0.0025,
"recoil_y": 0.012, "recoil_y": 0.012,
"damage": 8.5, "damage": 8.5,

View file

@ -2,7 +2,6 @@
"zoom_speed": 0.9, "zoom_speed": 0.9,
"zoom": 2, "zoom": 2,
"spread": 5, "spread": 5,
"zoomSpread": 0.1,
"bipod": 1, "bipod": 1,
"recoil_x": 0.0018, "recoil_x": 0.0018,
"recoil_y": 0.01, "recoil_y": 0.01,

View file

@ -2,7 +2,6 @@
"zoom_speed": 1.9, "zoom_speed": 1.9,
"zoom": 1.25, "zoom": 1.25,
"spread": 2.5, "spread": 2.5,
"zoomSpread": 0.2,
"recoil_x": 0.004, "recoil_x": 0.004,
"recoil_y": 0.013, "recoil_y": 0.013,
"damage": 5.5, "damage": 5.5,

View file

@ -2,7 +2,6 @@
"zoom_speed": 1.9, "zoom_speed": 1.9,
"zoom": 1.25, "zoom": 1.25,
"spread": 2.5, "spread": 2.5,
"zoomSpread": 0.2,
"recoil_x": 0.004, "recoil_x": 0.004,
"recoil_y": 0.013, "recoil_y": 0.013,
"damage": 5.5, "damage": 5.5,

View file

@ -2,7 +2,6 @@
"zoom_speed": 1.3, "zoom_speed": 1.3,
"zoom": 1.25, "zoom": 1.25,
"spread": 3.5, "spread": 3.5,
"zoomSpread": 0.1,
"recoil_x": 0.0016, "recoil_x": 0.0016,
"recoil_y": 0.009, "recoil_y": 0.009,
"damage": 7.5, "damage": 7.5,

View file

@ -2,7 +2,6 @@
"zoom_speed": 1, "zoom_speed": 1,
"zoom": 1.25, "zoom": 1.25,
"spread": 7, "spread": 7,
"zoomSpread": 0.01,
"recoil_x": 0.004, "recoil_x": 0.004,
"recoil_y": 0.04, "recoil_y": 0.04,
"damage": 65, "damage": 65,

View file

@ -2,7 +2,6 @@
"zoom_speed": 1.05, "zoom_speed": 1.05,
"zoom": 1.25, "zoom": 1.25,
"spread": 5, "spread": 5,
"zoomSpread": 0.001,
"recoil_x": 0.002, "recoil_x": 0.002,
"recoil_y": 0.063, "recoil_y": 0.063,
"damage": 35, "damage": 35,

View file

@ -2,7 +2,6 @@
"zoom_speed": 1.7, "zoom_speed": 1.7,
"zoom": 1.25, "zoom": 1.25,
"spread": 2.5, "spread": 2.5,
"zoomSpread": 0.2,
"recoil_x": 0.006, "recoil_x": 0.006,
"recoil_y": 0.018, "recoil_y": 0.018,
"damage": 9.5, "damage": 9.5,

View file

@ -2,7 +2,6 @@
"zoom_speed": 1.15, "zoom_speed": 1.15,
"zoom": 1.25, "zoom": 1.25,
"spread": 4, "spread": 4,
"zoomSpread": 0.1,
"recoil_x": 0.0015, "recoil_x": 0.0015,
"recoil_y": 0.011, "recoil_y": 0.011,
"damage": 7, "damage": 7,

View file

@ -2,7 +2,6 @@
"zoom_speed": 0.85, "zoom_speed": 0.85,
"zoom": 1.25, "zoom": 1.25,
"spread": 5, "spread": 5,
"zoomSpread": 0.1,
"bipod": 1, "bipod": 1,
"recoil_x": 0.004, "recoil_x": 0.004,
"recoil_y": 0.014, "recoil_y": 0.014,

View file

@ -2,7 +2,6 @@
"zoom_speed": 1.1, "zoom_speed": 1.1,
"zoom": 1.25, "zoom": 1.25,
"spread": 3, "spread": 3,
"zoomSpread": 2.7,
"recoil_x": 0.009, "recoil_x": 0.009,
"recoil_y": 0.04, "recoil_y": 0.04,
"damage": 3, "damage": 3,

View file

@ -4,7 +4,6 @@
"min_zoom": 4, "min_zoom": 4,
"max_zoom": 8, "max_zoom": 8,
"spread": 6, "spread": 6,
"zoomSpread": 0.001,
"recoil_x": 0.007, "recoil_x": 0.007,
"recoil_y": 0.013, "recoil_y": 0.013,
"damage": 38, "damage": 38,

View file

@ -2,7 +2,6 @@
"zoom_speed": 1.1, "zoom_speed": 1.1,
"zoom": 1.25, "zoom": 1.25,
"spread": 2, "spread": 2,
"zoomSpread": 0.1,
"recoil_x": 0.004, "recoil_x": 0.004,
"recoil_y": 0.031, "recoil_y": 0.031,
"damage": 16, "damage": 16,

View file

@ -1,7 +1,6 @@
{ {
"zoom": 1, "zoom": 1,
"spread": 2.5, "spread": 2.5,
"zoomSpread": 2.5,
"recoil_x": 0.012, "recoil_x": 0.012,
"recoil_y": 0.011, "recoil_y": 0.011,
"damage": 8, "damage": 8,

View file

@ -4,7 +4,6 @@
"min_zoom": 1.25, "min_zoom": 1.25,
"max_zoom": 6, "max_zoom": 6,
"spread": 5, "spread": 5,
"zoomSpread": 0.01,
"bipod": 1, "bipod": 1,
"recoil_x": 0.006, "recoil_x": 0.006,
"recoil_y": 0.014, "recoil_y": 0.014,

View file

@ -2,7 +2,6 @@
"zoom_speed": 0.9, "zoom_speed": 0.9,
"zoom": 3.5, "zoom": 3.5,
"spread": 4.8, "spread": 4.8,
"zoomSpread": 0.001,
"recoil_x": 0.002, "recoil_x": 0.002,
"recoil_y": 0.063, "recoil_y": 0.063,
"damage": 33, "damage": 33,

View file

@ -5,7 +5,6 @@
"max_zoom": 6, "max_zoom": 6,
"bipod": 1, "bipod": 1,
"spread": 8, "spread": 8,
"zoomSpread": 0.05,
"recoil_x": 0.01, "recoil_x": 0.01,
"recoil_y": 0.038, "recoil_y": 0.038,
"damage": 100, "damage": 100,

View file

@ -2,7 +2,6 @@
"zoom_speed": 1.25, "zoom_speed": 1.25,
"zoom": 1.25, "zoom": 1.25,
"spread": 3.7, "spread": 3.7,
"zoomSpread": 0.1,
"recoil_x": 0.0013, "recoil_x": 0.0013,
"recoil_y": 0.009, "recoil_y": 0.009,
"damage": 7.5, "damage": 7.5,

View file

@ -2,7 +2,6 @@
"zoom_speed": 1, "zoom_speed": 1,
"zoom": 1.25, "zoom": 1.25,
"spread": 5.5, "spread": 5.5,
"zoomSpread": 0.1,
"bipod": 1, "bipod": 1,
"recoil_x": 0.0035, "recoil_x": 0.0035,
"recoil_y": 0.012, "recoil_y": 0.012,

View file

@ -2,7 +2,6 @@
"zoom_speed": 0.95, "zoom_speed": 0.95,
"zoom": 3, "zoom": 3,
"spread": 6, "spread": 6,
"zoomSpread": 0.001,
"recoil_x": 0.007, "recoil_x": 0.007,
"recoil_y": 0.018, "recoil_y": 0.018,
"damage": 35, "damage": 35,

View file

@ -2,7 +2,6 @@
"zoom_speed": 1, "zoom_speed": 1,
"zoom": 1.25, "zoom": 1.25,
"spread": 4.5, "spread": 4.5,
"zoomSpread": 0.1,
"recoil_x": 0.004, "recoil_x": 0.004,
"recoil_y": 0.015, "recoil_y": 0.015,
"damage": 9.5, "damage": 9.5,

View file

@ -2,7 +2,6 @@
"zoom_speed": 0.9, "zoom_speed": 0.9,
"zoom": 4, "zoom": 4,
"spread": 5.5, "spread": 5.5,
"zoomSpread": 0.1,
"recoil_x": 0.008, "recoil_x": 0.008,
"recoil_y": 0.015, "recoil_y": 0.015,
"damage": 18, "damage": 18,

View file

@ -2,7 +2,6 @@
"zoom_speed": 1.7, "zoom_speed": 1.7,
"zoom": 1.25, "zoom": 1.25,
"spread": 3, "spread": 3,
"zoomSpread": 0.1,
"recoil_x": 0.005, "recoil_x": 0.005,
"recoil_y": 0.032, "recoil_y": 0.032,
"damage": 19, "damage": 19,

View file

@ -2,7 +2,6 @@
"zoom_speed": 1.6, "zoom_speed": 1.6,
"zoom": 1.25, "zoom": 1.25,
"spread": 2.3, "spread": 2.3,
"zoomSpread": 0.15,
"recoil_x": 0.007, "recoil_x": 0.007,
"recoil_y": 0.007, "recoil_y": 0.007,
"damage": 4.5, "damage": 4.5,