修改精准度

This commit is contained in:
Atsuihsio 2024-07-26 12:57:07 +08:00
parent b15a005b82
commit 6c921a9c77
7 changed files with 41 additions and 68 deletions

View file

@ -4,6 +4,7 @@ import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModItems;
import net.mcreator.target.init.TargetModTags; import net.mcreator.target.init.TargetModTags;
import net.mcreator.target.network.TargetModVariables;
import net.minecraft.client.CameraType; import net.minecraft.client.CameraType;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font; import net.minecraft.client.gui.Font;
@ -94,7 +95,7 @@ public class CrossHairOverlay {
if (player == null) return false; if (player == null) return false;
if (player.isSpectator()) return false; if (player.isSpectator()) return false;
if (!player.getMainHandItem().is(TargetModTags.Items.GUN) || !(player.getPersistentData().getDouble("zoom_animation_time") < 6)) if (!player.getMainHandItem().is(TargetModTags.Items.GUN) || (player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).zoom)
return false; return false;
return !(player.getMainHandItem().getItem() == TargetModItems.M_79.get()) return !(player.getMainHandItem().getItem() == TargetModItems.M_79.get())

View file

@ -7,6 +7,7 @@ import net.mcreator.target.init.TargetModItems;
import net.mcreator.target.init.TargetModMobEffects; import net.mcreator.target.init.TargetModMobEffects;
import net.mcreator.target.init.TargetModTags; import net.mcreator.target.init.TargetModTags;
import net.mcreator.target.network.TargetModVariables; import net.mcreator.target.network.TargetModVariables;
import net.mcreator.target.network.message.ZoomMessage;
import net.minecraft.client.CameraType; import net.minecraft.client.CameraType;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientLevel;
@ -114,7 +115,7 @@ public class ClientEventHandler {
} }
float times = 90f / fps; float times = 90f / fps;
var data = entity.getPersistentData(); var data = entity.getPersistentData();
double spread = entity.getAttributeBaseValue(TargetModAttributes.SPREAD.get()); double spread = (float) (entity.getMainHandItem().getOrCreateTag().getDouble("dev") * ZoomMessage.zoom_spread);
if (data.getDouble("crosshair") > spread) { if (data.getDouble("crosshair") > spread) {
data.putDouble("crosshair", data.getDouble("crosshair") - 0.05 * Math.pow(spread - data.getDouble("crosshair"), 2) * times); data.putDouble("crosshair", data.getDouble("crosshair") - 0.05 * Math.pow(spread - data.getDouble("crosshair"), 2) * times);

View file

@ -4,6 +4,7 @@ import net.mcreator.target.TargetMod;
import net.mcreator.target.entity.ProjectileEntity; import net.mcreator.target.entity.ProjectileEntity;
import net.mcreator.target.init.*; import net.mcreator.target.init.*;
import net.mcreator.target.network.TargetModVariables; import net.mcreator.target.network.TargetModVariables;
import net.mcreator.target.network.message.ZoomMessage;
import net.mcreator.target.tools.GunInfo; import net.mcreator.target.tools.GunInfo;
import net.mcreator.target.tools.GunsTool; import net.mcreator.target.tools.GunsTool;
import net.mcreator.target.tools.ParticleTool; import net.mcreator.target.tools.ParticleTool;
@ -353,7 +354,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) player.getAttributeBaseValue(TargetModAttributes.SPREAD.get())); (float) (heldItem.getOrCreateTag().getDouble("dev") * ZoomMessage.zoom_spread));
player.level().addFreshEntity(projectile); player.level().addFreshEntity(projectile);
} }
} }

View file

@ -1,7 +1,6 @@
package net.mcreator.target.event; package net.mcreator.target.event;
import net.mcreator.target.TargetMod; import net.mcreator.target.TargetMod;
import net.mcreator.target.init.TargetModAttributes;
import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModItems;
import net.mcreator.target.init.TargetModSounds; import net.mcreator.target.init.TargetModSounds;
import net.mcreator.target.init.TargetModTags; import net.mcreator.target.init.TargetModTags;
@ -27,6 +26,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.network.PacketDistributor;
@Mod.EventBusSubscriber @Mod.EventBusSubscriber
public class PlayerEventHandler { public class PlayerEventHandler {
@ -58,6 +58,7 @@ public class PlayerEventHandler {
@SubscribeEvent @SubscribeEvent
public static void onPlayerTick(TickEvent.PlayerTickEvent event) { public static void onPlayerTick(TickEvent.PlayerTickEvent event) {
Player player = event.player; Player player = event.player;
if (player == null) { if (player == null) {
return; return;
} }
@ -210,12 +211,6 @@ public class PlayerEventHandler {
capability.zooming = true; capability.zooming = true;
capability.syncPlayerVariables(player); capability.syncPlayerVariables(player);
}); });
if (player.getPersistentData().getInt("zoom_animation_time") < 10) {
player.getPersistentData().putInt("zoom_animation_time", player.getPersistentData().getInt("zoom_animation_time") + 1);
}
} else {
player.getPersistentData().putInt("zoom_animation_time", 0);
} }
} }
} }
@ -305,6 +300,16 @@ public class PlayerEventHandler {
float recoilYaw = player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).map(c -> c.recoilHorizon).orElse(0d).floatValue(); float recoilYaw = player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).map(c -> c.recoilHorizon).orElse(0d).floatValue();
if (tag.getBoolean("shoot")) {
player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
capability.recoilHorizon = 2 * Math.random() - 1;
capability.recoil = 0.1;
capability.firing = 1;
capability.syncPlayerVariables(player);
});
tag.putBoolean("shoot", false);
}
double[] recoilTimer = {0}; double[] recoilTimer = {0};
double totalTime = 20; double totalTime = 20;
int sleepTime = 2; int sleepTime = 2;
@ -390,58 +395,6 @@ public class PlayerEventHandler {
c.syncPlayerVariables(player); c.syncPlayerVariables(player);
}); });
/*
计算散布
*/
ItemStack stack = player.getMainHandItem();
double basic = stack.getOrCreateTag().getDouble("dev");
double sprint = player.isSprinting() ? 0.5 * basic : 0;
double sneaking = player.isShiftKeyDown() ? (-0.25) * basic : 0;
double prone = player.getPersistentData().getDouble("prone") > 0 ? (-0.5) * basic : 0;
double jump = player.onGround() ? 0 : 1.5 * basic;
double fire = stack.getOrCreateTag().getInt("fire_animation") > 0 ? 0.5 * basic : 0;
double ride = player.isPassenger() ? (-0.5) * basic : 0;
double walk;
if (player.getPersistentData().getDouble("move_forward") == 1 || player.getPersistentData().getDouble("move_backward") == 1 ||
player.getPersistentData().getDouble("move_left") == 1 || player.getPersistentData().getDouble("move_right") == 1) {
walk = 0.2 * basic;
} else {
walk = 0;
}
double zoom;
if (player.getPersistentData().getDouble("zoom_animation_time") > 4) {
if (stack.is(TargetModTags.Items.SNIPER_RIFLE)) {
zoom = 0.0001;
} else if (stack.is(TargetModTags.Items.SHOTGUN)) {
zoom = 0.9;
} else {
zoom = 0.0001;
}
} else {
zoom = 1;
}
double index = zoom * (basic + walk + sprint + sneaking + prone + jump + fire + ride);
if (player.getAttributeBaseValue(TargetModAttributes.SPREAD.get()) < index) {
player.getAttribute(TargetModAttributes.SPREAD.get())
.setBaseValue(player.getAttributeBaseValue(TargetModAttributes.SPREAD.get()) + 0.125 * Math.pow(index - player.getAttributeBaseValue(TargetModAttributes.SPREAD.get()), 2));
} else {
player.getAttribute(TargetModAttributes.SPREAD.get())
.setBaseValue(player.getAttributeBaseValue(TargetModAttributes.SPREAD.get()) - 0.125 * Math.pow(index - player.getAttributeBaseValue(TargetModAttributes.SPREAD.get()), 2));
}
if (player.getAttributeBaseValue(TargetModAttributes.SPREAD.get()) > 15) {
player.getAttribute(TargetModAttributes.SPREAD.get()).setBaseValue(15);
}
if (player.getAttributeBaseValue(TargetModAttributes.SPREAD.get()) < 0) {
player.getAttribute(TargetModAttributes.SPREAD.get()).setBaseValue(0);
}
recoilTimer[0]++; recoilTimer[0]++;
try { try {
Thread.sleep(sleepTime); Thread.sleep(sleepTime);

View file

@ -18,7 +18,6 @@ public class TargetModAttributes {
public static final DeferredRegister<Attribute> ATTRIBUTES = DeferredRegister.create(ForgeRegistries.ATTRIBUTES, TargetMod.MODID); public static final DeferredRegister<Attribute> ATTRIBUTES = DeferredRegister.create(ForgeRegistries.ATTRIBUTES, TargetMod.MODID);
public static final RegistryObject<Attribute> MORTAR_PITCH = ATTRIBUTES.register("mortar_pitch", () -> (new RangedAttribute("attribute." + TargetMod.MODID + ".mortar_pitch", 70, 20, 89)).setSyncable(true)); public static final RegistryObject<Attribute> MORTAR_PITCH = ATTRIBUTES.register("mortar_pitch", () -> (new RangedAttribute("attribute." + TargetMod.MODID + ".mortar_pitch", 70, 20, 89)).setSyncable(true));
public static final RegistryObject<Attribute> SPREAD = ATTRIBUTES.register("spread", () -> (new RangedAttribute("attribute." + TargetMod.MODID + ".spread", 0, 0, 1024)).setSyncable(true));
@SubscribeEvent @SubscribeEvent
public static void register(FMLConstructModEvent event) { public static void register(FMLConstructModEvent event) {
@ -28,6 +27,5 @@ public class TargetModAttributes {
@SubscribeEvent @SubscribeEvent
public static void addAttributes(EntityAttributeModificationEvent event) { public static void addAttributes(EntityAttributeModificationEvent event) {
event.add(TargetModEntities.MORTAR.get(), MORTAR_PITCH.get()); event.add(TargetModEntities.MORTAR.get(), MORTAR_PITCH.get());
event.add(EntityType.PLAYER, SPREAD.get());
} }
} }

View file

@ -250,7 +250,7 @@ public class FireMessage {
taserBulletProjectile.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ()); taserBulletProjectile.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ());
taserBulletProjectile.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) stack.getOrCreateTag().getDouble("velocity"), taserBulletProjectile.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) stack.getOrCreateTag().getDouble("velocity"),
(float) player.getAttributeBaseValue(TargetModAttributes.SPREAD.get())); (float) (stack.getOrCreateTag().getDouble("dev") * ZoomMessage.zoom_spread));
level.addFreshEntity(taserBulletProjectile); level.addFreshEntity(taserBulletProjectile);
} }
@ -277,7 +277,7 @@ public class FireMessage {
gunGrenadeEntity.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ()); gunGrenadeEntity.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ());
gunGrenadeEntity.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) stack.getOrCreateTag().getDouble("velocity"), gunGrenadeEntity.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) stack.getOrCreateTag().getDouble("velocity"),
(float) player.getAttributeBaseValue(TargetModAttributes.SPREAD.get())); (float) (stack.getOrCreateTag().getDouble("dev") * ZoomMessage.zoom_spread));
level.addFreshEntity(gunGrenadeEntity); level.addFreshEntity(gunGrenadeEntity);
} }
@ -320,7 +320,7 @@ public class FireMessage {
RpgRocketEntity rocketEntity = new RpgRocketEntity(player, level, (float) tag.getDouble("damage") * (float) tag.getDouble("damageadd"), monsterMultiple); RpgRocketEntity rocketEntity = new RpgRocketEntity(player, level, (float) tag.getDouble("damage") * (float) tag.getDouble("damageadd"), monsterMultiple);
rocketEntity.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ()); rocketEntity.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ());
rocketEntity.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) tag.getDouble("velocity"), rocketEntity.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) tag.getDouble("velocity"),
(float) player.getAttributeBaseValue(TargetModAttributes.SPREAD.get())); (float) (mainHandItem.getOrCreateTag().getDouble("dev") * ZoomMessage.zoom_spread));
level.addFreshEntity(rocketEntity); level.addFreshEntity(rocketEntity);
} }

View file

@ -1,12 +1,15 @@
package net.mcreator.target.network.message; package net.mcreator.target.network.message;
import net.mcreator.target.entity.Mk42Entity; import net.mcreator.target.entity.Mk42Entity;
import net.mcreator.target.init.TargetModItems;
import net.mcreator.target.init.TargetModSounds; import net.mcreator.target.init.TargetModSounds;
import net.mcreator.target.init.TargetModTags;
import net.mcreator.target.network.TargetModVariables; import net.mcreator.target.network.TargetModVariables;
import net.mcreator.target.tools.SoundTool; import net.mcreator.target.tools.SoundTool;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
@ -15,6 +18,8 @@ import java.util.function.Supplier;
public class ZoomMessage { public class ZoomMessage {
private final int type; private final int type;
public static double zoom_spread = 1;
public ZoomMessage(int type) { public ZoomMessage(int type) {
this.type = type; this.type = type;
} }
@ -49,6 +54,19 @@ public class ZoomMessage {
capability.zoom = true; capability.zoom = true;
capability.syncPlayerVariables(entity); capability.syncPlayerVariables(entity);
}); });
ItemStack stack = entity.getMainHandItem();
if (stack.is(TargetModTags.Items.SNIPER_RIFLE)) {
zoom_spread = 0;
} else if (stack.is(TargetModTags.Items.SHOTGUN)) {
zoom_spread = 0.9;
} else if (stack.is(TargetModItems.MINIGUN.get())) {
zoom_spread = 1;
} else {
zoom_spread = 0.00001;
}
if (entity.isPassenger() && entity.getVehicle() instanceof Mk42Entity) { if (entity.isPassenger() && entity.getVehicle() instanceof Mk42Entity) {
if (entity instanceof ServerPlayer serverPlayer) { if (entity instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, TargetModSounds.CANNON_ZOOM_IN.get(), 2, 1); SoundTool.playLocalSound(serverPlayer, TargetModSounds.CANNON_ZOOM_IN.get(), 2, 1);
@ -64,7 +82,8 @@ public class ZoomMessage {
capability.zooming = false; capability.zooming = false;
capability.syncPlayerVariables(entity); capability.syncPlayerVariables(entity);
}); });
entity.getPersistentData().putDouble("zoom_animation_time", 0);
zoom_spread = 1;
if (entity.isPassenger() && entity.getVehicle() instanceof Mk42Entity) { if (entity.isPassenger() && entity.getVehicle() instanceof Mk42Entity) {
if (entity instanceof ServerPlayer serverPlayer) { if (entity instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, TargetModSounds.CANNON_ZOOM_OUT.get(), 2, 1); SoundTool.playLocalSound(serverPlayer, TargetModSounds.CANNON_ZOOM_OUT.get(), 2, 1);