diff --git a/src/main/java/net/mcreator/target/procedures/BowPullAnimationProcedure.java b/src/main/java/net/mcreator/target/procedures/BowPullAnimationProcedure.java new file mode 100644 index 000000000..4ae4f41ef --- /dev/null +++ b/src/main/java/net/mcreator/target/procedures/BowPullAnimationProcedure.java @@ -0,0 +1,78 @@ +package net.mcreator.target.procedures; + +import net.mcreator.target.network.TargetModVariables; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.Entity; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.ViewportEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(value = Dist.CLIENT) +public class BowPullAnimationProcedure { + + @SubscribeEvent + public static void computeCameraAngles(ViewportEvent.ComputeCameraAngles event) { + ClientLevel level = Minecraft.getInstance().level; + Entity entity = event.getCamera().getEntity(); + if (level != null) { + execute(entity); + } + } + + private static void execute(Entity entity) { + float fps = Minecraft.getInstance().getFps(); + if (fps <= 0) { + fps = 1f; + } + float times = 90f / fps; + CompoundTag persistentData = entity.getPersistentData(); + if ((entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).bowpull) { + if (persistentData.getDouble("pulltime") < 1) { + persistentData.putDouble("pulltime", (persistentData.getDouble("pulltime") + 0.014 * times)); + } else { + persistentData.putDouble("pulltime", 1); + } + } else { + if (persistentData.getDouble("pulltime") > 0) { + persistentData.putDouble("pulltime", (persistentData.getDouble("pulltime") - 0.009 * times)); + } else { + persistentData.putDouble("pulltime", 0); + } + } + persistentData.putDouble("pullpos", (0.5 * Math.cos(Math.PI * Math.pow(Math.pow(persistentData.getDouble("pulltime"), 2) - 1, 2)) + 0.5)); + if ((entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).bowpull) { + if (persistentData.getDouble("bowtime") < 1) { + persistentData.putDouble("bowtime", (persistentData.getDouble("bowtime") + 0.014 * times)); + } else { + persistentData.putDouble("bowtime", 1); + } + } else { + if (persistentData.getDouble("bowtime") > 0) { + persistentData.putDouble("bowtime", (persistentData.getDouble("bowtime") - 1 * times)); + } else { + persistentData.putDouble("bowtime", 0); + } + } + persistentData.putDouble("bowpos", (0.5 * Math.cos(Math.PI * Math.pow(Math.pow(persistentData.getDouble("bowtime"), 2) - 1, 2)) + 0.5)); + if ((entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).bowpull) { + if (persistentData.getDouble("handtime") < 1) { + persistentData.putDouble("handtime", (persistentData.getDouble("handtime") + 0.014 * times)); + } else { + persistentData.putDouble("handtime", 1); + } + persistentData.putDouble("handpos", (0.5 * Math.cos(Math.PI * Math.pow(Math.pow(persistentData.getDouble("handtime"), 2) - 1, 2)) + 0.5)); + } else { + if (persistentData.getDouble("handtime") > 0) { + persistentData.putDouble("handtime", (persistentData.getDouble("handtime") - 0.04 * times)); + } else { + persistentData.putDouble("handtime", 0); + } + if (persistentData.getDouble("handtime") > 0 && persistentData.getDouble("handtime") < 0.5) { + persistentData.putDouble("handpos", (0.5 * Math.cos(Math.PI * Math.pow(Math.pow(persistentData.getDouble("handtime"), 2) - 1, 2)) + 0.5)); + } + } + } +} diff --git a/src/main/java/net/mcreator/target/procedures/BowlooseProcedure.java b/src/main/java/net/mcreator/target/procedures/BowlooseProcedure.java index d125f8415..0c9291677 100644 --- a/src/main/java/net/mcreator/target/procedures/BowlooseProcedure.java +++ b/src/main/java/net/mcreator/target/procedures/BowlooseProcedure.java @@ -4,6 +4,7 @@ import net.mcreator.target.entity.BocekarrowEntity; import net.mcreator.target.init.TargetModEntities; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.network.TargetModVariables; +import net.mcreator.target.tools.GunsTool; import net.minecraft.commands.CommandSource; import net.minecraft.commands.CommandSourceStack; import net.minecraft.server.level.ServerLevel; @@ -57,7 +58,7 @@ public class BowlooseProcedure { } } else { for (int index0 = 0; index0 < 10; index0++) { - BulletFireNormalProcedure.execute(player); + GunsTool.spawnBullet(player); } if (!player.level().isClientSide() && player.getServer() != null) { diff --git a/src/main/java/net/mcreator/target/procedures/BowpullanimProcedure.java b/src/main/java/net/mcreator/target/procedures/BowpullanimProcedure.java deleted file mode 100644 index 82b5bfdf2..000000000 --- a/src/main/java/net/mcreator/target/procedures/BowpullanimProcedure.java +++ /dev/null @@ -1,95 +0,0 @@ -package net.mcreator.target.procedures; - -import net.mcreator.target.network.TargetModVariables; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.ViewportEvent; -import net.minecraftforge.eventbus.api.Event; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; - -import javax.annotation.Nullable; - -@Mod.EventBusSubscriber(value = Dist.CLIENT) -public class BowpullanimProcedure { - private static ViewportEvent.ComputeCameraAngles _provider = null; - - private static void setAngles(float yaw, float pitch, float roll) { - _provider.setYaw(yaw); - _provider.setPitch(pitch); - _provider.setRoll(roll); - } - - @SubscribeEvent - public static void computeCameraangles(ViewportEvent.ComputeCameraAngles event) { - _provider = event; - ClientLevel level = Minecraft.getInstance().level; - Entity entity = _provider.getCamera().getEntity(); - if (level != null) { - Vec3 entPos = entity.getPosition((float) _provider.getPartialTick()); - execute(_provider, entity); - } - } - - public static void execute(Entity entity) { - execute(null, entity); - } - - private static void execute(@Nullable Event event, Entity entity) { - if (entity == null) - return; - float fps = Minecraft.getInstance().getFps(); - if (fps <= 0) { - fps = 1f; - } - float times = 90f / fps; - if ((entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).bowpull) { - if (entity.getPersistentData().getDouble("pulltime") < 1) { - entity.getPersistentData().putDouble("pulltime", (entity.getPersistentData().getDouble("pulltime") + 0.014 * times)); - } else { - entity.getPersistentData().putDouble("pulltime", 1); - } - } else { - if (entity.getPersistentData().getDouble("pulltime") > 0) { - entity.getPersistentData().putDouble("pulltime", (entity.getPersistentData().getDouble("pulltime") - 0.009 * times)); - } else { - entity.getPersistentData().putDouble("pulltime", 0); - } - } - entity.getPersistentData().putDouble("pullpos", (0.5 * Math.cos(Math.PI * Math.pow(Math.pow(entity.getPersistentData().getDouble("pulltime"), 2) - 1, 2)) + 0.5)); - if ((entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).bowpull) { - if (entity.getPersistentData().getDouble("bowtime") < 1) { - entity.getPersistentData().putDouble("bowtime", (entity.getPersistentData().getDouble("bowtime") + 0.014 * times)); - } else { - entity.getPersistentData().putDouble("bowtime", 1); - } - } else { - if (entity.getPersistentData().getDouble("bowtime") > 0) { - entity.getPersistentData().putDouble("bowtime", (entity.getPersistentData().getDouble("bowtime") - 1 * times)); - } else { - entity.getPersistentData().putDouble("bowtime", 0); - } - } - entity.getPersistentData().putDouble("bowpos", (0.5 * Math.cos(Math.PI * Math.pow(Math.pow(entity.getPersistentData().getDouble("bowtime"), 2) - 1, 2)) + 0.5)); - if ((entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).bowpull) { - if (entity.getPersistentData().getDouble("handtime") < 1) { - entity.getPersistentData().putDouble("handtime", (entity.getPersistentData().getDouble("handtime") + 0.014 * times)); - } else { - entity.getPersistentData().putDouble("handtime", 1); - } - entity.getPersistentData().putDouble("handpos", (0.5 * Math.cos(Math.PI * Math.pow(Math.pow(entity.getPersistentData().getDouble("handtime"), 2) - 1, 2)) + 0.5)); - } else { - if (entity.getPersistentData().getDouble("handtime") > 0) { - entity.getPersistentData().putDouble("handtime", (entity.getPersistentData().getDouble("handtime") - 0.04 * times)); - } else { - entity.getPersistentData().putDouble("handtime", 0); - } - if (entity.getPersistentData().getDouble("handtime") > 0 && entity.getPersistentData().getDouble("handtime") < 0.5) { - entity.getPersistentData().putDouble("handpos", (0.5 * Math.cos(Math.PI * Math.pow(Math.pow(entity.getPersistentData().getDouble("handtime"), 2) - 1, 2)) + 0.5)); - } - } - } -} diff --git a/src/main/java/net/mcreator/target/procedures/BulletFireNormalProcedure.java b/src/main/java/net/mcreator/target/procedures/BulletFireNormalProcedure.java deleted file mode 100644 index 02132b796..000000000 --- a/src/main/java/net/mcreator/target/procedures/BulletFireNormalProcedure.java +++ /dev/null @@ -1,62 +0,0 @@ -package net.mcreator.target.procedures; - -import net.mcreator.target.entity.ProjectileEntity; -import net.mcreator.target.init.TargetModAttributes; -import net.mcreator.target.init.TargetModItems; -import net.mcreator.target.network.TargetModVariables; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; - -public class BulletFireNormalProcedure { - public static void execute(Player player) { - ItemStack heldItem = player.getMainHandItem(); - player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.recoilhorizon = Math.random() < 0.5 ? -1 : 1; - capability.recoil = 0.1; - capability.firing = 1; - capability.syncPlayerVariables(player); - }); - - if (!player.level().isClientSide()) { - float damage; - float headshot = (float) heldItem.getOrCreateTag().getDouble("headshot"); - float velocity = 4 * (float) heldItem.getOrCreateTag().getDouble("speed"); - - if (heldItem.getItem() == TargetModItems.BOCEK.get()) { - - damage = 0.008333333f * (float) heldItem.getOrCreateTag().getDouble("damage") * (float) heldItem.getOrCreateTag().getDouble("speed") * (float) heldItem.getOrCreateTag().getDouble("damageadd"); - - ProjectileEntity projectile = new ProjectileEntity(player.level()) - .shooter(player) - .damage(damage) - .headShot(headshot); - - if (heldItem.getOrCreateTag().getBoolean("beast")) { - projectile.beast(); - } - - projectile.setPos((player.getX() + (-0.5) * player.getLookAngle().x), (player.getEyeY() - 0.1 + (-0.5) * player.getLookAngle().y), (player.getZ() + (-0.5) * player.getLookAngle().z)); - projectile.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, 1 * velocity, 2.5f); - player.level().addFreshEntity(projectile); - - } else { - damage = (float) (heldItem.getOrCreateTag().getDouble("damage") + heldItem.getOrCreateTag().getDouble("adddamage")) - * (float) heldItem.getOrCreateTag().getDouble("damageadd"); - - ProjectileEntity projectile = new ProjectileEntity(player.level()) - .shooter(player) - .damage(damage) - .headShot(headshot); - - if (heldItem.getOrCreateTag().getBoolean("beast")) { - projectile.beast(); - } - - projectile.setPos((player.getX() + (-0.5) * player.getLookAngle().x), (player.getEyeY() - 0.1 + (-0.5) * player.getLookAngle().y), (player.getZ() + (-0.5) * player.getLookAngle().z)); - projectile.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, 1 * (float) heldItem.getOrCreateTag().getDouble("velocity"), - (float) player.getAttribute(TargetModAttributes.SPREAD.get()).getBaseValue()); - player.level().addFreshEntity(projectile); - } - } - } -} diff --git a/src/main/java/net/mcreator/target/procedures/KraberfireProcedure.java b/src/main/java/net/mcreator/target/procedures/KraberfireProcedure.java index 33d6b5df9..7277a16be 100644 --- a/src/main/java/net/mcreator/target/procedures/KraberfireProcedure.java +++ b/src/main/java/net/mcreator/target/procedures/KraberfireProcedure.java @@ -1,6 +1,7 @@ package net.mcreator.target.procedures; import net.mcreator.target.init.TargetModItems; +import net.mcreator.target.tools.GunsTool; import net.minecraft.commands.CommandSource; import net.minecraft.commands.CommandSourceStack; import net.minecraft.server.level.ServerLevel; @@ -15,7 +16,7 @@ public class KraberfireProcedure { if (usehand.getItem() == TargetModItems.KRABER.get() && usehand.getOrCreateTag().getDouble("reloading") == 0 && !player.getCooldowns().isOnCooldown(usehand.getItem()) && usehand.getOrCreateTag().getDouble("ammo") > 0) { usehand.getOrCreateTag().putDouble("fireanim", 40); - BulletFireNormalProcedure.execute(player); + GunsTool.spawnBullet(player); player.getCooldowns().addCooldown(usehand.getItem(), 40); if (!player.level().isClientSide() && player.getServer() != null) { diff --git a/src/main/java/net/mcreator/target/procedures/M870fireProcedure.java b/src/main/java/net/mcreator/target/procedures/M870fireProcedure.java index af7cfd0f5..cd7f790c9 100644 --- a/src/main/java/net/mcreator/target/procedures/M870fireProcedure.java +++ b/src/main/java/net/mcreator/target/procedures/M870fireProcedure.java @@ -1,6 +1,7 @@ package net.mcreator.target.procedures; import net.mcreator.target.init.TargetModItems; +import net.mcreator.target.tools.GunsTool; import net.minecraft.commands.CommandSource; import net.minecraft.commands.CommandSourceStack; import net.minecraft.server.level.ServerLevel; @@ -18,7 +19,7 @@ public class M870fireProcedure { if (usehand.getItem() == TargetModItems.M_870.get() && usehand.getOrCreateTag().getDouble("reloading") == 0 && !player.getCooldowns().isOnCooldown(usehand.getItem()) && usehand.getOrCreateTag().getDouble("ammo") > 0) { for (int index0 = 0; index0 < 12; index0++) { - BulletFireNormalProcedure.execute(player); + GunsTool.spawnBullet(player); } player.getCooldowns().addCooldown(usehand.getItem(), 13); usehand.getOrCreateTag().putDouble("recoil", 1); diff --git a/src/main/java/net/mcreator/target/procedures/M98bfireProcedure.java b/src/main/java/net/mcreator/target/procedures/M98bfireProcedure.java index 633160ab1..860ed1189 100644 --- a/src/main/java/net/mcreator/target/procedures/M98bfireProcedure.java +++ b/src/main/java/net/mcreator/target/procedures/M98bfireProcedure.java @@ -1,6 +1,7 @@ package net.mcreator.target.procedures; import net.mcreator.target.init.TargetModItems; +import net.mcreator.target.tools.GunsTool; import net.minecraft.commands.CommandSource; import net.minecraft.commands.CommandSourceStack; import net.minecraft.server.level.ServerLevel; @@ -15,7 +16,7 @@ public class M98bfireProcedure { if (usehand.getItem() == TargetModItems.M_98B.get() && usehand.getOrCreateTag().getDouble("reloading") == 0 && !(player.getCooldowns().isOnCooldown(usehand.getItem())) && usehand.getOrCreateTag().getDouble("ammo") > 0) { usehand.getOrCreateTag().putDouble("fireanim", 17); - BulletFireNormalProcedure.execute(player); + GunsTool.spawnBullet(player); player.getCooldowns().addCooldown(usehand.getItem(), 17); if (!player.level().isClientSide() && player.getServer() != null) { diff --git a/src/main/java/net/mcreator/target/procedures/MarlinfireProcedure.java b/src/main/java/net/mcreator/target/procedures/MarlinfireProcedure.java index 8f82dea25..24abbce44 100644 --- a/src/main/java/net/mcreator/target/procedures/MarlinfireProcedure.java +++ b/src/main/java/net/mcreator/target/procedures/MarlinfireProcedure.java @@ -2,6 +2,7 @@ package net.mcreator.target.procedures; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.network.TargetModVariables; +import net.mcreator.target.tools.GunsTool; import net.minecraft.commands.CommandSource; import net.minecraft.commands.CommandSourceStack; import net.minecraft.server.level.ServerLevel; @@ -27,7 +28,7 @@ public class MarlinfireProcedure { usehand.getOrCreateTag().putDouble("fastfiring", 1); usehand.getOrCreateTag().putDouble("firing", 10); } - BulletFireNormalProcedure.execute(player); + GunsTool.spawnBullet(player); if (!player.level().isClientSide() && player.getServer() != null) { player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, diff --git a/src/main/java/net/mcreator/target/procedures/MinigunautofireProcedure.java b/src/main/java/net/mcreator/target/procedures/MinigunautofireProcedure.java index 6946cd158..1dc1e8d92 100644 --- a/src/main/java/net/mcreator/target/procedures/MinigunautofireProcedure.java +++ b/src/main/java/net/mcreator/target/procedures/MinigunautofireProcedure.java @@ -2,6 +2,7 @@ package net.mcreator.target.procedures; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.network.TargetModVariables; +import net.mcreator.target.tools.GunsTool; import net.minecraft.commands.CommandSource; import net.minecraft.commands.CommandSourceStack; import net.minecraft.server.level.ServerLevel; @@ -69,7 +70,7 @@ public class MinigunautofireProcedure { player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), ("playsound target:minigun_veryfar player @a ~ ~ ~ 24 " + (1 - 0.025 * Math.abs(40 - usehand.getOrCreateTag().getDouble("heat"))))); } } - BulletFireNormalProcedure.execute(player); + GunsTool.spawnBullet(player); player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { capability.rifleammo = player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables()).rifleammo - 1; diff --git a/src/main/java/net/mcreator/target/procedures/SentinelFireProcedure.java b/src/main/java/net/mcreator/target/procedures/SentinelFireProcedure.java index 974901054..ce986a061 100644 --- a/src/main/java/net/mcreator/target/procedures/SentinelFireProcedure.java +++ b/src/main/java/net/mcreator/target/procedures/SentinelFireProcedure.java @@ -2,6 +2,7 @@ package net.mcreator.target.procedures; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.network.TargetModVariables; +import net.mcreator.target.tools.GunsTool; import net.minecraft.commands.CommandSource; import net.minecraft.commands.CommandSourceStack; import net.minecraft.server.level.ServerLevel; @@ -53,7 +54,7 @@ public class SentinelFireProcedure { player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "playsound target:sentinel_veryfar player @a ~ ~ ~ 24 1"); } } - BulletFireNormalProcedure.execute(player); + GunsTool.spawnBullet(player); usehand.getOrCreateTag().putDouble("crot", 20); player.getCooldowns().addCooldown(usehand.getItem(), 23); usehand.getOrCreateTag().putDouble("ammo", (usehand.getOrCreateTag().getDouble("ammo") - 1)); diff --git a/src/main/java/net/mcreator/target/procedures/VecBurstFireProcedure.java b/src/main/java/net/mcreator/target/procedures/VecBurstFireProcedure.java index 87d392a5e..f3036f7e8 100644 --- a/src/main/java/net/mcreator/target/procedures/VecBurstFireProcedure.java +++ b/src/main/java/net/mcreator/target/procedures/VecBurstFireProcedure.java @@ -1,6 +1,7 @@ package net.mcreator.target.procedures; import net.mcreator.target.init.TargetModItems; +import net.mcreator.target.tools.GunsTool; import net.minecraft.commands.CommandSource; import net.minecraft.commands.CommandSourceStack; import net.minecraft.resources.ResourceLocation; @@ -21,32 +22,32 @@ public class VecBurstFireProcedure { } } - private static void execute(Player entity) { + private static void execute(Player player) { ItemStack usehand; - usehand = entity.getMainHandItem(); + usehand = player.getMainHandItem(); if (usehand.is(ItemTags.create(new ResourceLocation("target:gun")))) { if (usehand.getOrCreateTag().getDouble("firemode") == 1) { - entity.getPersistentData().putDouble("firing", 0); + player.getPersistentData().putDouble("firing", 0); } if (usehand.getOrCreateTag().getDouble("ammo") == 0) { usehand.getOrCreateTag().putDouble("burst", 0); } } if (usehand.getItem() == TargetModItems.VECTOR.get() && usehand.getOrCreateTag().getDouble("reloading") == 0 && usehand.getOrCreateTag().getDouble("ammo") > 0 - && !(entity.getCooldowns().isOnCooldown(usehand.getItem())) && usehand.getOrCreateTag().getDouble("burst") > 0) { + && !(player.getCooldowns().isOnCooldown(usehand.getItem())) && usehand.getOrCreateTag().getDouble("burst") > 0) { - entity.getCooldowns().addCooldown(usehand.getItem(), usehand.getOrCreateTag().getDouble("burst") == 1 ? 5 : 1); + player.getCooldowns().addCooldown(usehand.getItem(), usehand.getOrCreateTag().getDouble("burst") == 1 ? 5 : 1); usehand.getOrCreateTag().putDouble("burst", (usehand.getOrCreateTag().getDouble("burst") - 1)); - BulletFireNormalProcedure.execute(entity); - if (!entity.level().isClientSide() && entity.getServer() != null) { - entity.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, entity.position(), entity.getRotationVector(), (ServerLevel) entity.level(), 4, - entity.getName().getString(), entity.getDisplayName(), entity.level().getServer(), entity), "playsound target:vector_fire_1p player @a ~ ~ ~ 2 1"); - entity.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, entity.position(), entity.getRotationVector(), (ServerLevel) entity.level(), 4, - entity.getName().getString(), entity.getDisplayName(), entity.level().getServer(), entity), "playsound target:vector_fire_1p player @s ~ ~ ~ 4 1"); - entity.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, entity.position(), entity.getRotationVector(), (ServerLevel) entity.level(), 4, - entity.getName().getString(), entity.getDisplayName(), entity.level().getServer(), entity), "playsound target:vector_far player @a ~ ~ ~ 6 1"); - entity.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, entity.position(), entity.getRotationVector(), (ServerLevel) entity.level(), 4, - entity.getName().getString(), entity.getDisplayName(), entity.level().getServer(), entity), "playsound target:vector_veryfar player @a ~ ~ ~ 12 1"); + GunsTool.spawnBullet(player); + if (!player.level().isClientSide() && player.getServer() != null) { + player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, + player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "playsound target:vector_fire_1p player @a ~ ~ ~ 2 1"); + player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, + player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "playsound target:vector_fire_1p player @s ~ ~ ~ 4 1"); + player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, + player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "playsound target:vector_far player @a ~ ~ ~ 6 1"); + player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, + player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "playsound target:vector_veryfar player @a ~ ~ ~ 12 1"); } usehand.getOrCreateTag().putDouble("fireanim", 2); usehand.getOrCreateTag().putDouble("ammo", (usehand.getOrCreateTag().getDouble("ammo") - 1)); diff --git a/src/main/java/net/mcreator/target/tools/GunsTool.java b/src/main/java/net/mcreator/target/tools/GunsTool.java index b008c424f..d75ee60f8 100644 --- a/src/main/java/net/mcreator/target/tools/GunsTool.java +++ b/src/main/java/net/mcreator/target/tools/GunsTool.java @@ -2,10 +2,15 @@ package net.mcreator.target.tools; import com.google.gson.stream.JsonReader; import net.mcreator.target.TargetMod; +import net.mcreator.target.entity.ProjectileEntity; +import net.mcreator.target.init.TargetModAttributes; +import net.mcreator.target.init.TargetModItems; import net.mcreator.target.network.GunsDataMessage; import net.mcreator.target.network.TargetModVariables; +import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraftforge.event.entity.player.PlayerEvent; @@ -80,4 +85,45 @@ public class GunsTool { public static void serverStarted(ServerStartedEvent event) { initJsonData(event.getServer().getResourceManager()); } + + public static void spawnBullet(Player player) { + ItemStack heldItem = player.getMainHandItem(); + player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { + capability.recoilhorizon = Math.random() < 0.5 ? -1 : 1; + capability.recoil = 0.1; + capability.firing = 1; + capability.syncPlayerVariables(player); + }); + + if (player.level().isClientSide()) return; + + CompoundTag tag = heldItem.getOrCreateTag(); + double damage; + float headshot = (float) tag.getDouble("headshot"); + float velocity = 4 * (float) tag.getDouble("speed"); + + var projectile = new ProjectileEntity(player.level()) + .shooter(player) + .headShot(headshot); + if (tag.getBoolean("beast")) { + projectile.beast(); + } + projectile.setPos(player.getX() + -0.5 * player.getLookAngle().x, player.getEyeY() - 0.1 + (-0.5) * player.getLookAngle().y, player.getZ() + (-0.5) * player.getLookAngle().z); + + if (heldItem.getItem() == TargetModItems.BOCEK.get()) { + damage = 0.008333333 * tag.getDouble("damage") * tag.getDouble("speed") * tag.getDouble("damageadd"); + projectile.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, velocity, 2.5f); + } else { + damage = (tag.getDouble("damage") + tag.getDouble("adddamage")) * tag.getDouble("damageadd"); + + projectile.shoot(player.getLookAngle().x, + player.getLookAngle().y, + player.getLookAngle().z, + (float) tag.getDouble("velocity"), + (float) player.getAttribute(TargetModAttributes.SPREAD.get()).getBaseValue()); + } + + projectile.damage((float) damage); + player.level().addFreshEntity(projectile); + } }