修改精准度

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 net.mcreator.target.init.TargetModItems;
import net.mcreator.target.init.TargetModTags;
import net.mcreator.target.network.TargetModVariables;
import net.minecraft.client.CameraType;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
@ -94,7 +95,7 @@ public class CrossHairOverlay {
if (player == null) 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 !(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.TargetModTags;
import net.mcreator.target.network.TargetModVariables;
import net.mcreator.target.network.message.ZoomMessage;
import net.minecraft.client.CameraType;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel;
@ -114,7 +115,7 @@ public class ClientEventHandler {
}
float times = 90f / fps;
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) {
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.init.*;
import net.mcreator.target.network.TargetModVariables;
import net.mcreator.target.network.message.ZoomMessage;
import net.mcreator.target.tools.GunInfo;
import net.mcreator.target.tools.GunsTool;
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.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);
}
}

View file

@ -1,7 +1,6 @@
package net.mcreator.target.event;
import net.mcreator.target.TargetMod;
import net.mcreator.target.init.TargetModAttributes;
import net.mcreator.target.init.TargetModItems;
import net.mcreator.target.init.TargetModSounds;
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.network.PacketDistributor;
@Mod.EventBusSubscriber
public class PlayerEventHandler {
@ -58,6 +58,7 @@ public class PlayerEventHandler {
@SubscribeEvent
public static void onPlayerTick(TickEvent.PlayerTickEvent event) {
Player player = event.player;
if (player == null) {
return;
}
@ -210,12 +211,6 @@ public class PlayerEventHandler {
capability.zooming = true;
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();
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 totalTime = 20;
int sleepTime = 2;
@ -390,58 +395,6 @@ public class PlayerEventHandler {
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]++;
try {
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 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
public static void register(FMLConstructModEvent event) {
@ -28,6 +27,5 @@ public class TargetModAttributes {
@SubscribeEvent
public static void addAttributes(EntityAttributeModificationEvent event) {
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.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);
}
@ -277,7 +277,7 @@ public class FireMessage {
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"),
(float) player.getAttributeBaseValue(TargetModAttributes.SPREAD.get()));
(float) (stack.getOrCreateTag().getDouble("dev") * ZoomMessage.zoom_spread));
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);
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"),
(float) player.getAttributeBaseValue(TargetModAttributes.SPREAD.get()));
(float) (mainHandItem.getOrCreateTag().getDouble("dev") * ZoomMessage.zoom_spread));
level.addFreshEntity(rocketEntity);
}

View file

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