修改激光的淡出方法

This commit is contained in:
17146 2024-12-02 03:07:08 +08:00
parent 59926f020f
commit 256b235fc0
4 changed files with 33 additions and 9 deletions

View file

@ -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();

View file

@ -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) {

View file

@ -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());

View file

@ -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;
}
}