修改精准度
This commit is contained in:
parent
b15a005b82
commit
6c921a9c77
7 changed files with 41 additions and 68 deletions
|
@ -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())
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Reference in a new issue