From 256b235fc0171df0bb2146a36e5c8f584a911da3 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Mon, 2 Dec 2024 03:07:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=BF=80=E5=85=89=E7=9A=84?= =?UTF-8?q?=E6=B7=A1=E5=87=BA=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../capability/LaserCapability.java | 9 ++++++++ .../capability/LaserHandler.java | 22 ++++++++++++++----- .../projectile/AbstractLaserEntity.java | 2 +- .../superbwarfare/item/BeamTest.java | 9 +++++--- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/capability/LaserCapability.java b/src/main/java/com/atsuishio/superbwarfare/capability/LaserCapability.java index 060457b4b..53a6aee0d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/capability/LaserCapability.java +++ b/src/main/java/com/atsuishio/superbwarfare/capability/LaserCapability.java @@ -26,6 +26,8 @@ public class LaserCapability { void stop(); + void end(); + } public static class LaserCapabilityImpl implements ILaserCapability { @@ -53,6 +55,13 @@ public class LaserCapability { } } + @Override + public void end() { + if (this.laserHandler != null) { + this.laserHandler.end(); + } + } + @Override public CompoundTag serializeNBT() { CompoundTag tag = new CompoundTag(); diff --git a/src/main/java/com/atsuishio/superbwarfare/capability/LaserHandler.java b/src/main/java/com/atsuishio/superbwarfare/capability/LaserHandler.java index cc7ad83b4..fdff3308b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/capability/LaserHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/capability/LaserHandler.java @@ -4,19 +4,16 @@ import com.atsuishio.superbwarfare.entity.projectile.AbstractLaserEntity; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.LivingEntity; public class LaserHandler { - public final int coolingTick; public boolean isUsing; public final LivingEntity entity; public final AbstractLaserEntity laserEntity; private int tick; - public LaserHandler(LivingEntity entity, AbstractLaserEntity laserEntity, int coolingTick) { - this.coolingTick = coolingTick; + public LaserHandler(LivingEntity entity, AbstractLaserEntity laserEntity) { this.entity = entity; this.laserEntity = laserEntity; } @@ -28,7 +25,6 @@ public class LaserHandler { if (this.entity.level() instanceof ServerLevel level) { level.addFreshEntity(this.laserEntity); } - this.entity.swing(InteractionHand.MAIN_HAND, true); } public void tick() { @@ -41,9 +37,25 @@ public class LaserHandler { } } + /** + * 终止光束,并带有淡出效果 + */ public void stop() { if (!this.isUsing) return; + this.isUsing = false; + this.tick = 0; + if (this.laserEntity != null) { + this.laserEntity.setDuration(3); + } + } + + /** + * 直接终止光束 + */ + public void end() { + if (!this.isUsing) return; + this.isUsing = false; this.tick = 0; if (this.laserEntity != null) { diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/AbstractLaserEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/AbstractLaserEntity.java index fdb3c7fdd..7adfde160 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/AbstractLaserEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/AbstractLaserEntity.java @@ -71,7 +71,7 @@ public abstract class AbstractLaserEntity extends Entity implements TraceableEnt this.beamTick(); - if ((!this.on && this.ticker.isStopped()) || (this.caster != null && !caster.isAlive())) { + if ((!this.on && this.ticker.isStopped()) || (this.caster != null && !this.caster.isAlive())) { this.discard(); } this.ticker.changeTimer(this.on && this.isAccumulating()); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/BeamTest.java b/src/main/java/com/atsuishio/superbwarfare/item/BeamTest.java index f6e15bf0c..38cd011f5 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/BeamTest.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/BeamTest.java @@ -36,13 +36,12 @@ public class BeamTest extends Item { float yHeadRotAngle = (float) Math.toRadians(player.yHeadRot + 90); float xHeadRotAngle = (float) (float) -Math.toRadians(player.getXRot()); LaserEntity laserEntity = new LaserEntity(player.level(), player, px, py, pz, yHeadRotAngle, xHeadRotAngle, 6000); - capability.init(new LaserHandler(player, laserEntity, 0)); + capability.init(new LaserHandler(player, laserEntity)); capability.start(); if (!stack.getOrCreateTag().getBoolean("LaserFiring") && !(player.getCooldowns().isOnCooldown(stack.getItem()))) { stack.getOrCreateTag().putBoolean("LaserFiring", true); } - } }); @@ -57,7 +56,6 @@ public class BeamTest extends Item { stack.getOrCreateTag().putInt("FireTick", stack.getOrCreateTag().getInt("FireTick") + 1); } - if (stack.getOrCreateTag().getInt("FireTick") >= 14) { if (entity instanceof ServerPlayer serverPlayer) { serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SENTINEL_CHARGE_FIRE_3P.get(), SoundSource.PLAYERS, 1, 1); @@ -91,4 +89,9 @@ public class BeamTest extends Item { public int getUseDuration(ItemStack stack) { return 15; } + + @Override + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { + return slotChanged; + } }