优化粒子效果相关方法

This commit is contained in:
17146 2024-05-21 13:56:59 +08:00
parent 9acd95fa5c
commit 3b29c8e7c4
2 changed files with 19 additions and 16 deletions

View file

@ -7,10 +7,9 @@ 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;
import net.mcreator.target.network.TargetModVariables; import net.mcreator.target.network.TargetModVariables;
import net.mcreator.target.tools.GunsTool; import net.mcreator.target.tools.ParticleTool;
import net.mcreator.target.tools.SoundTool; import net.mcreator.target.tools.SoundTool;
import net.minecraft.commands.CommandSource; import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
@ -109,8 +108,9 @@ public class GunEventHandler {
Thread recoilThread = new Thread(recoilRunnable); Thread recoilThread = new Thread(recoilRunnable);
recoilThread.start(); recoilThread.start();
} }
/*
通用的武器开火流程 /**
* 通用的武器开火流程
*/ */
private static void handleGunFire(Player player) { private static void handleGunFire(Player player) {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
@ -154,6 +154,7 @@ public class GunEventHandler {
if (stack.getOrCreateTag().getInt("ammo") == 1) { if (stack.getOrCreateTag().getInt("ammo") == 1) {
stack.getOrCreateTag().putDouble("gj", 1); stack.getOrCreateTag().putDouble("gj", 1);
} }
/* /*
判断是否为栓动武器bolt_action_time > 0并在开火后给一个需要上膛的状态 判断是否为栓动武器bolt_action_time > 0并在开火后给一个需要上膛的状态
*/ */
@ -181,12 +182,9 @@ public class GunEventHandler {
if (player.getMainHandItem().getItem() == TargetModItems.ABEKIRI.get()) { if (player.getMainHandItem().getItem() == TargetModItems.ABEKIRI.get()) {
stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(InteractionHand.MAIN_HAND)); stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(InteractionHand.MAIN_HAND));
if (!player.level().isClientSide() && player.getServer() != null) { if (player instanceof ServerPlayer serverPlayer && player.level() instanceof ServerLevel serverLevel) {
player.getServer().getCommands().performPrefixedCommand( ParticleTool.sendParticle(serverLevel, ParticleTypes.CLOUD, player.getX() + 1.8 * player.getLookAngle().x, player.getY() + player.getBbHeight() - 0.1 + 1.8 * player.getLookAngle().y,
new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), player.level() instanceof ServerLevel ? (ServerLevel) player.level() : null, 4, player.getName().getString(), player.getDisplayName(), player.getZ() + 1.8 * player.getLookAngle().z, 30, 0.4, 0.4, 0.4, 0.005, true, serverPlayer);
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"));
} }
} }
@ -207,7 +205,6 @@ public class GunEventHandler {
stack.getOrCreateTag().putDouble("marlin_animation_time", 15); stack.getOrCreateTag().putDouble("marlin_animation_time", 15);
stack.getOrCreateTag().putDouble("fastfiring", 0); stack.getOrCreateTag().putDouble("fastfiring", 0);
} else { } else {
zoom_add_cooldown = 0;
stack.getOrCreateTag().putDouble("marlin_animation_time", 10); stack.getOrCreateTag().putDouble("marlin_animation_time", 10);
stack.getOrCreateTag().putDouble("fastfiring", 1); stack.getOrCreateTag().putDouble("fastfiring", 1);
} }
@ -219,8 +216,8 @@ public class GunEventHandler {
for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) { for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) {
gunShoot(player); gunShoot(player);
} }
} }
/* /*
在开火动画的最后1tick设置需要拉栓上膛的武器拉栓动画的倒计时为data里的拉栓时间 在开火动画的最后1tick设置需要拉栓上膛的武器拉栓动画的倒计时为data里的拉栓时间
*/ */
@ -237,8 +234,9 @@ public class GunEventHandler {
} }
} }
} }
/*
加特林开火流程 /**
* 加特林开火流程
*/ */
private static void handleMiniGunFire(Player player) { private static void handleMiniGunFire(Player player) {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();

View file

@ -15,10 +15,15 @@ public class ParticleTool {
public static <T extends ParticleOptions> void sendParticle(ServerLevel level, T particle, double x, double y, double z, int count, public static <T extends ParticleOptions> void sendParticle(ServerLevel level, T particle, double x, double y, double z, int count,
double xOffset, double yOffset, double zOffset, double speed, boolean force) { double xOffset, double yOffset, double zOffset, double speed, boolean force) {
for (ServerPlayer serverPlayer : level.players()) { for (ServerPlayer serverPlayer : level.players()) {
level.sendParticles(serverPlayer, particle, force, x, y, z, count, xOffset, yOffset, zOffset, speed); sendParticle(level, particle, x, y, z, count, xOffset, yOffset, zOffset, speed, force, serverPlayer);
} }
} }
public static <T extends ParticleOptions> void sendParticle(ServerLevel level, T particle, double x, double y, double z, int count,
double xOffset, double yOffset, double zOffset, double speed, boolean force, ServerPlayer viewer) {
level.sendParticles(viewer, particle, force, x, y, z, count, xOffset, yOffset, zOffset, speed);
}
public static void spawnMediumExplosionParticles(Level level, Vec3 pos) { public static void spawnMediumExplosionParticles(Level level, Vec3 pos) {
double x = pos.x; double x = pos.x;
double y = pos.y; double y = pos.y;