diff --git a/src/main/java/net/mcreator/target/client/screens/CrossHairOverlay.java b/src/main/java/net/mcreator/target/client/screens/CrossHairOverlay.java index e6b7da835..1ad56c23a 100644 --- a/src/main/java/net/mcreator/target/client/screens/CrossHairOverlay.java +++ b/src/main/java/net/mcreator/target/client/screens/CrossHairOverlay.java @@ -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()) diff --git a/src/main/java/net/mcreator/target/event/ClientEventHandler.java b/src/main/java/net/mcreator/target/event/ClientEventHandler.java index 0fb0940bf..6065cb2b1 100644 --- a/src/main/java/net/mcreator/target/event/ClientEventHandler.java +++ b/src/main/java/net/mcreator/target/event/ClientEventHandler.java @@ -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); diff --git a/src/main/java/net/mcreator/target/event/GunEventHandler.java b/src/main/java/net/mcreator/target/event/GunEventHandler.java index e43bc7c37..9528fadf9 100644 --- a/src/main/java/net/mcreator/target/event/GunEventHandler.java +++ b/src/main/java/net/mcreator/target/event/GunEventHandler.java @@ -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); } } diff --git a/src/main/java/net/mcreator/target/event/PlayerEventHandler.java b/src/main/java/net/mcreator/target/event/PlayerEventHandler.java index fc125aabe..3e30ee1f7 100644 --- a/src/main/java/net/mcreator/target/event/PlayerEventHandler.java +++ b/src/main/java/net/mcreator/target/event/PlayerEventHandler.java @@ -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); diff --git a/src/main/java/net/mcreator/target/init/TargetModAttributes.java b/src/main/java/net/mcreator/target/init/TargetModAttributes.java index ab7df8308..b0271da48 100644 --- a/src/main/java/net/mcreator/target/init/TargetModAttributes.java +++ b/src/main/java/net/mcreator/target/init/TargetModAttributes.java @@ -18,7 +18,6 @@ public class TargetModAttributes { public static final DeferredRegister ATTRIBUTES = DeferredRegister.create(ForgeRegistries.ATTRIBUTES, TargetMod.MODID); public static final RegistryObject MORTAR_PITCH = ATTRIBUTES.register("mortar_pitch", () -> (new RangedAttribute("attribute." + TargetMod.MODID + ".mortar_pitch", 70, 20, 89)).setSyncable(true)); - public static final RegistryObject 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()); } } diff --git a/src/main/java/net/mcreator/target/network/message/FireMessage.java b/src/main/java/net/mcreator/target/network/message/FireMessage.java index 6305a4069..1f82fb50e 100644 --- a/src/main/java/net/mcreator/target/network/message/FireMessage.java +++ b/src/main/java/net/mcreator/target/network/message/FireMessage.java @@ -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); } diff --git a/src/main/java/net/mcreator/target/network/message/ZoomMessage.java b/src/main/java/net/mcreator/target/network/message/ZoomMessage.java index acd6de849..fc625ca92 100644 --- a/src/main/java/net/mcreator/target/network/message/ZoomMessage.java +++ b/src/main/java/net/mcreator/target/network/message/ZoomMessage.java @@ -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);