63 lines
3.6 KiB
Java
63 lines
3.6 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|