内联开火procedure

This commit is contained in:
17146 2024-07-07 02:00:59 +08:00
parent e1d43284de
commit b493526cf5
4 changed files with 181 additions and 246 deletions

View file

@ -1,19 +1,16 @@
package net.mcreator.target.network.message;
import net.mcreator.target.entity.BocekArrowEntity;
import net.mcreator.target.entity.ProjectileEntity;
import net.mcreator.target.entity.*;
import net.mcreator.target.event.GunEventHandler;
import net.mcreator.target.init.TargetModEnchantments;
import net.mcreator.target.init.TargetModItems;
import net.mcreator.target.init.TargetModSounds;
import net.mcreator.target.init.TargetModTags;
import net.mcreator.target.init.*;
import net.mcreator.target.network.TargetModVariables;
import net.mcreator.target.procedures.M79fireProcedure;
import net.mcreator.target.procedures.RpgFireProcedure;
import net.mcreator.target.procedures.TaserfireProcedure;
import net.mcreator.target.tools.ItemNBTTool;
import net.mcreator.target.tools.SoundTool;
import net.minecraft.commands.CommandSource;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.entity.player.Player;
@ -59,7 +56,7 @@ public class FireMessage {
}
if (type == 0) {
handleSpecialShoot(player);
handlePlayerShoot(player);
} else if (type == 1) {
player.getPersistentData().putBoolean("firing", false);
player.getPersistentData().putDouble("minigun_firing", 0);
@ -68,33 +65,45 @@ public class FireMessage {
capability.syncPlayerVariables(player);
});
handleBowShoot(player);
if (player.getMainHandItem().getItem() == TargetModItems.BOCEK.get()) {
handleBowShoot(player);
}
}
}
private static void handleSpecialShoot(Player player) {
var mainHandItem = player.getMainHandItem();
var tag = mainHandItem.getOrCreateTag();
private static void handlePlayerShoot(Player player) {
var handItem = player.getMainHandItem();
TaserfireProcedure.execute(player);
M79fireProcedure.execute(player);
RpgFireProcedure.execute(player);
if (mainHandItem.is(TargetModTags.Items.GUN)) {
if (tag.getInt("fire_mode") == 1) {
player.getPersistentData().putBoolean("firing", false);
tag.putInt("burst_fire", (int) tag.getDouble("burst_size"));
} else {
player.getPersistentData().putBoolean("firing", true);
}
if (tag.getDouble("force_stop_reloading") == 1 && tag.getBoolean("reloading") && tag.getDouble("prepare") == 0 && tag.getInt("ammo") > 0) {
tag.putDouble("force_stop", 1);
}
if (!handItem.is(TargetModTags.Items.GUN)) {
return;
}
if (mainHandItem.is(TargetModTags.Items.GUN)
&& !(mainHandItem.getItem() == TargetModItems.BOCEK.get())
&& !(mainHandItem.getItem() == TargetModItems.MINIGUN.get())
var tag = handItem.getOrCreateTag();
if (handItem.getItem() == TargetModItems.TASER.get()) {
handleTaserFire(player);
}
if (handItem.getItem() == TargetModItems.M_79.get()) {
handleM79Fire(player);
}
if (handItem.getItem() == TargetModItems.RPG.get()) {
handleRpgFire(player);
}
if (tag.getInt("fire_mode") == 1) {
player.getPersistentData().putBoolean("firing", false);
tag.putInt("burst_fire", (int) tag.getDouble("burst_size"));
} else {
player.getPersistentData().putBoolean("firing", true);
}
if (tag.getDouble("force_stop_reloading") == 1 && tag.getBoolean("reloading") && tag.getDouble("prepare") == 0 && tag.getInt("ammo") > 0) {
tag.putDouble("force_stop", 1);
}
if (handItem.getItem() != TargetModItems.BOCEK.get()
&& handItem.getItem() != TargetModItems.MINIGUN.get()
&& tag.getInt("ammo") == 0
&& !tag.getBoolean("reloading")) {
if (!player.level().isClientSide()) {
@ -102,7 +111,7 @@ public class FireMessage {
}
}
if (mainHandItem.getItem() == TargetModItems.MINIGUN.get()) {
if (handItem.getItem() == TargetModItems.MINIGUN.get()) {
if ((player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).rifleAmmo == 0) {
if (!player.level().isClientSide()) {
SoundTool.playLocalSound(player, TargetModSounds.TRIGGER_CLICK.get(), 10, 1);
@ -116,9 +125,9 @@ public class FireMessage {
});
// 栓动武器左键手动拉栓
if (mainHandItem.is(TargetModTags.Items.GUN) && tag.getInt("bolt_action_time") > 0 && tag.getInt("ammo") > 0 && tag.getInt("bolt_action_anim") == 0) {
if (!player.getCooldowns().isOnCooldown(mainHandItem.getItem()) && mainHandItem.getOrCreateTag().getDouble("need_bolt_action") == 1) {
mainHandItem.getOrCreateTag().putInt("bolt_action_anim", mainHandItem.getOrCreateTag().getInt("bolt_action_time"));
if (tag.getInt("bolt_action_time") > 0 && tag.getInt("ammo") > 0 && tag.getInt("bolt_action_anim") == 0) {
if (!player.getCooldowns().isOnCooldown(handItem.getItem()) && handItem.getOrCreateTag().getDouble("need_bolt_action") == 1) {
handItem.getOrCreateTag().putInt("bolt_action_anim", handItem.getOrCreateTag().getInt("bolt_action_time"));
GunEventHandler.playGunBoltSounds(player);
}
}
@ -127,10 +136,6 @@ public class FireMessage {
private static void handleBowShoot(Player player) {
ItemStack stack = player.getMainHandItem();
if (stack.getItem() != TargetModItems.BOCEK.get()) {
return;
}
double power = stack.getOrCreateTag().getDouble("power");
if (player instanceof ServerPlayer serverPlayer) {
@ -224,4 +229,141 @@ public class FireMessage {
player.level().addFreshEntity(projectile);
}
private static void handleTaserFire(Player player) {
if (player.isSpectator()) return;
ItemStack stack = player.getMainHandItem();
if (!stack.getOrCreateTag().getBoolean("reloading")) {
if (!player.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getInt("ammo") > 0
&& ItemNBTTool.getInt(stack, "Power", 1200) > 400) {
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);
});
player.getCooldowns().addCooldown(stack.getItem(), 5);
if (player instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, TargetModSounds.TASER_FIRE_1P.get(), 1, 1);
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), TargetModSounds.TASER_FIRE_3P.get(), SoundSource.PLAYERS, 1, 1);
}
int volt = EnchantmentHelper.getTagEnchantmentLevel(TargetModEnchantments.VOLT_OVERLOAD.get(), stack);
int wire_length = EnchantmentHelper.getTagEnchantmentLevel(TargetModEnchantments.LONGER_WIRE.get(), stack);
Level level = player.level();
if (!level.isClientSide()) {
TaserBulletProjectileEntity taserBulletProjectile = new TaserBulletProjectileEntity(player, level, (float) stack.getOrCreateTag().getDouble("damage"), volt, wire_length);
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()));
level.addFreshEntity(taserBulletProjectile);
}
stack.getOrCreateTag().putInt("fire_animation", 4);
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1));
ItemNBTTool.setInt(stack, "Power", ItemNBTTool.getInt(stack, "Power", 1200) - 400);
}
}
}
private static void handleM79Fire(Player player) {
if (player.isSpectator()) return;
ItemStack stack = player.getMainHandItem();
if (!stack.getOrCreateTag().getBoolean("reloading")) {
if (!player.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getInt("ammo") > 0) {
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);
});
Level level = player.level();
if (!level.isClientSide()) {
int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(TargetModEnchantments.MONSTER_HUNTER.get(), stack);
GunGrenadeEntity gunGrenadeEntity = new GunGrenadeEntity(player, level, (float) stack.getOrCreateTag().getDouble("damage") * (float) stack.getOrCreateTag().getDouble("damageadd"), monsterMultiple);
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()));
level.addFreshEntity(gunGrenadeEntity);
}
// TODO 移除指令
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.getServer(), player),
("particle minecraft:cloud" + (" " + (player.getX() + 1.8 * player.getLookAngle().x)) + (" " + (player.getY() + player.getBbHeight() - 0.1 + 1.8 * player.getLookAngle().y))
+ (" " + (player.getZ() + 1.8 * player.getLookAngle().z)) + " 0.1 0.1 0.1 0.002 4 force @s"));
}
player.getCooldowns().addCooldown(stack.getItem(), 2);
if (player instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, TargetModSounds.M_79_FIRE_1P.get(), 2, 1);
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), TargetModSounds.M_79_FIRE_3P.get(), SoundSource.PLAYERS, 4, 1);
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), TargetModSounds.M_79_FAR.get(), SoundSource.PLAYERS, 6, 1);
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), TargetModSounds.M_79_VERYFAR.get(), SoundSource.PLAYERS, 12, 1);
}
stack.getOrCreateTag().putInt("fire_animation", 2);
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1));
}
}
}
private static void handleRpgFire(Player player) {
if (player.isSpectator()) return;
Level level = player.level();
ItemStack mainHandItem = player.getMainHandItem();
CompoundTag tag = mainHandItem.getOrCreateTag();
if (!tag.getBoolean("reloading") && !player.getCooldowns().isOnCooldown(mainHandItem.getItem()) && tag.getInt("ammo") > 0) {
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 (!level.isClientSide()) {
int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(TargetModEnchantments.MONSTER_HUNTER.get(), mainHandItem);
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()));
level.addFreshEntity(rocketEntity);
}
// TODO 移除指令
if (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),
("particle minecraft:cloud" + (" " + (player.getX() + 1.8 * player.getLookAngle().x)) + (" " + (player.getY() + player.getBbHeight() - 0.1 + 1.8 * player.getLookAngle().y))
+ (" " + (player.getZ() + 1.8 * player.getLookAngle().z)) + " 0.4 0.4 0.4 0.005 30 force @s"));
}
if (tag.getInt("ammo") == 1) {
tag.putBoolean("empty", true);
tag.putBoolean("close_hammer", true);
}
player.getCooldowns().addCooldown(mainHandItem.getItem(), 10);
if (player instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, TargetModSounds.RPG_FIRE_1P.get(), 2, 1);
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), TargetModSounds.RPG_FIRE_3P.get(), SoundSource.PLAYERS, 4, 1);
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), TargetModSounds.RPG_FAR.get(), SoundSource.PLAYERS, 8, 1);
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), TargetModSounds.RPG_VERYFAR.get(), SoundSource.PLAYERS, 16, 1);
}
tag.putInt("fire_animation", 2);
tag.putInt("ammo", tag.getInt("ammo") - 1);
}
}
}

View file

@ -1,69 +0,0 @@
package net.mcreator.target.procedures;
import net.mcreator.target.entity.GunGrenadeEntity;
import net.mcreator.target.init.TargetModAttributes;
import net.mcreator.target.init.TargetModEnchantments;
import net.mcreator.target.init.TargetModItems;
import net.mcreator.target.init.TargetModSounds;
import net.mcreator.target.network.TargetModVariables;
import net.mcreator.target.tools.SoundTool;
import net.minecraft.commands.CommandSource;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.level.Level;
// TODO 内联这个类
public class M79fireProcedure {
public static void execute(Entity entity) {
if (entity == null) return;
if (entity instanceof Player player && !player.isSpectator()) {
ItemStack stack = player.getMainHandItem();
if (stack.getItem() == TargetModItems.M_79.get() && !stack.getOrCreateTag().getBoolean("reloading")) {
Player _plrCldCheck4 = (Player) entity;
if (!_plrCldCheck4.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getInt("ammo") > 0) {
entity.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(entity);
});
Level level = entity.level();
if (!level.isClientSide()) {
int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(TargetModEnchantments.MONSTER_HUNTER.get(), stack);
GunGrenadeEntity gunGrenadeEntity = new GunGrenadeEntity(player, level, (float) stack.getOrCreateTag().getDouble("damage") * (float) stack.getOrCreateTag().getDouble("damageadd"), monsterMultiple);
gunGrenadeEntity.setPos(entity.getX(), entity.getEyeY() - 0.1, entity.getZ());
gunGrenadeEntity.shoot(entity.getLookAngle().x, entity.getLookAngle().y, entity.getLookAngle().z, (float) stack.getOrCreateTag().getDouble("velocity"),
(float) ((LivingEntity) entity).getAttribute(TargetModAttributes.SPREAD.get()).getBaseValue());
level.addFreshEntity(gunGrenadeEntity);
}
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.getServer(), entity),
("particle minecraft:cloud" + (" " + (entity.getX() + 1.8 * entity.getLookAngle().x)) + (" " + (entity.getY() + entity.getBbHeight() - 0.1 + 1.8 * entity.getLookAngle().y))
+ (" " + (entity.getZ() + 1.8 * entity.getLookAngle().z)) + " 0.1 0.1 0.1 0.002 4 force @s"));
}
player.getCooldowns().addCooldown(stack.getItem(), 2);
if (entity instanceof ServerPlayer) {
SoundTool.playLocalSound(player, TargetModSounds.M_79_FIRE_1P.get(), 2, 1);
SoundTool.playLocalSound(player, TargetModSounds.M_79_FIRE_3P.get(), 4, 1);
SoundTool.playLocalSound(player, TargetModSounds.M_79_FAR.get(), 6, 1);
SoundTool.playLocalSound(player, TargetModSounds.M_79_VERYFAR.get(), 12, 1);
}
stack.getOrCreateTag().putInt("fire_animation", 2);
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1));
}
}
}
}
}

View file

@ -1,75 +0,0 @@
package net.mcreator.target.procedures;
import net.mcreator.target.entity.RpgRocketEntity;
import net.mcreator.target.init.TargetModAttributes;
import net.mcreator.target.init.TargetModEnchantments;
import net.mcreator.target.init.TargetModItems;
import net.mcreator.target.init.TargetModSounds;
import net.mcreator.target.network.TargetModVariables;
import net.minecraft.commands.CommandSource;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.level.Level;
// TODO 内联这个类
public class RpgFireProcedure {
public static void execute(Player player) {
if (player.isSpectator()) {
return;
}
Level level = player.level();
ItemStack mainHandItem = player.getMainHandItem();
CompoundTag tag = mainHandItem.getOrCreateTag();
if (mainHandItem.getItem() == TargetModItems.RPG.get() && !tag.getBoolean("reloading") && !player.getCooldowns().isOnCooldown(mainHandItem.getItem())
&& tag.getInt("ammo") > 0) {
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 (!level.isClientSide()) {
int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(TargetModEnchantments.MONSTER_HUNTER.get(), mainHandItem);
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.getAttribute(TargetModAttributes.SPREAD.get()).getBaseValue());
level.addFreshEntity(rocketEntity);
}
if (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),
("particle minecraft:cloud" + (" " + (player.getX() + 1.8 * player.getLookAngle().x)) + (" " + (player.getY() + player.getBbHeight() - 0.1 + 1.8 * player.getLookAngle().y))
+ (" " + (player.getZ() + 1.8 * player.getLookAngle().z)) + " 0.4 0.4 0.4 0.005 30 force @s"));
}
if (tag.getInt("ammo") == 1) {
tag.putBoolean("empty", true);
tag.putBoolean("close_hammer", true);
}
player.getCooldowns().addCooldown(mainHandItem.getItem(), 10);
if (!player.level().isClientSide() && player.getServer() != null) {
player.level().playSound(null, player.blockPosition(), TargetModSounds.RPG_FIRE_1P.get(), SoundSource.PLAYERS, 2, 1);
player.level().playSound(null, player.blockPosition(), TargetModSounds.RPG_FIRE_3P.get(), SoundSource.PLAYERS, 4, 1);
player.level().playSound(null, player.blockPosition(), TargetModSounds.RPG_FAR.get(), SoundSource.PLAYERS, 8, 1);
player.level().playSound(null, player.blockPosition(), TargetModSounds.RPG_VERYFAR.get(), SoundSource.PLAYERS, 16, 1);
}
tag.putInt("fire_animation", 2);
tag.putInt("ammo", tag.getInt("ammo") - 1);
}
}
}

View file

@ -1,63 +0,0 @@
package net.mcreator.target.procedures;
import net.mcreator.target.entity.TaserBulletProjectileEntity;
import net.mcreator.target.init.TargetModAttributes;
import net.mcreator.target.init.TargetModEnchantments;
import net.mcreator.target.init.TargetModItems;
import net.mcreator.target.init.TargetModSounds;
import net.mcreator.target.network.TargetModVariables;
import net.mcreator.target.tools.ItemNBTTool;
import net.mcreator.target.tools.SoundTool;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.level.Level;
// TODO 内联这个类
public class TaserfireProcedure {
public static final String TAG_POWER = "Power";
public static void execute(Entity entity) {
if (entity == null) return;
if (entity instanceof Player player && !player.isSpectator()) {
ItemStack stack = player.getMainHandItem();
if (stack.getItem() == TargetModItems.TASER.get() && !stack.getOrCreateTag().getBoolean("reloading")) {
Player _plrCldCheck4 = (Player) entity;
if (!_plrCldCheck4.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getInt("ammo") > 0 && ItemNBTTool.getInt(stack, TAG_POWER, 1200) > 400) {
entity.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(entity);
});
player.getCooldowns().addCooldown(stack.getItem(), 5);
if (entity instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, TargetModSounds.TASER_FIRE_1P.get(), 1, 1);
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), TargetModSounds.TASER_FIRE_3P.get(), SoundSource.PLAYERS, 1, 1);
}
int volt = EnchantmentHelper.getTagEnchantmentLevel(TargetModEnchantments.VOLT_OVERLOAD.get(), stack);
int wire_length = EnchantmentHelper.getTagEnchantmentLevel(TargetModEnchantments.LONGER_WIRE.get(), stack);
Level level = entity.level();
if (!level.isClientSide()) {
TaserBulletProjectileEntity taserBulletProjectile = new TaserBulletProjectileEntity(player, level, (float) stack.getOrCreateTag().getDouble("damage"), volt, wire_length);
taserBulletProjectile.setPos(entity.getX(), entity.getEyeY() - 0.1, entity.getZ());
taserBulletProjectile.shoot(entity.getLookAngle().x, entity.getLookAngle().y, entity.getLookAngle().z, (float) stack.getOrCreateTag().getDouble("velocity"),
(float) ((LivingEntity) entity).getAttribute(TargetModAttributes.SPREAD.get()).getBaseValue());
level.addFreshEntity(taserBulletProjectile);
}
stack.getOrCreateTag().putInt("fire_animation", 4);
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1));
ItemNBTTool.setInt(stack, TAG_POWER, ItemNBTTool.getInt(stack, TAG_POWER, 1200) - 400);
}
}
}
}
}