Code/net/minecraft/world/entity/projectile/windcharge/WindCharge.java

76 lines
2.9 KiB
Java

package net.minecraft.world.entity.projectile.windcharge;
import java.util.Optional;
import java.util.function.Function;
import javax.annotation.Nullable;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.tags.BlockTags;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.projectile.ProjectileDeflection;
import net.minecraft.world.level.ExplosionDamageCalculator;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.SimpleExplosionDamageCalculator;
import net.minecraft.world.phys.Vec3;
public class WindCharge extends AbstractWindCharge {
private static final ExplosionDamageCalculator EXPLOSION_DAMAGE_CALCULATOR = new SimpleExplosionDamageCalculator(
true, false, Optional.of(1.22F), BuiltInRegistries.BLOCK.get(BlockTags.BLOCKS_WIND_CHARGE_EXPLOSIONS).map(Function.identity())
);
private static final float RADIUS = 1.2F;
private static final float MIN_CAMERA_DISTANCE_SQUARED = Mth.square(3.5F);
private int noDeflectTicks = 5;
public WindCharge(EntityType<? extends AbstractWindCharge> p_330526_, Level p_330063_) {
super(p_330526_, p_330063_);
}
public WindCharge(Player p_336321_, Level p_330515_, double p_330095_, double p_333760_, double p_334828_) {
super(EntityType.WIND_CHARGE, p_330515_, p_336321_, p_330095_, p_333760_, p_334828_);
}
public WindCharge(Level p_333074_, double p_329691_, double p_335041_, double p_329004_, Vec3 p_342087_) {
super(EntityType.WIND_CHARGE, p_329691_, p_335041_, p_329004_, p_342087_, p_333074_);
}
@Override
public void tick() {
super.tick();
if (this.noDeflectTicks > 0) {
this.noDeflectTicks--;
}
}
@Override
public boolean deflect(ProjectileDeflection p_342982_, @Nullable Entity p_343086_, @Nullable Entity p_342755_, boolean p_342935_) {
return this.noDeflectTicks > 0 ? false : super.deflect(p_342982_, p_343086_, p_342755_, p_342935_);
}
@Override
protected void explode(Vec3 p_342202_) {
this.level()
.explode(
this,
null,
EXPLOSION_DAMAGE_CALCULATOR,
p_342202_.x(),
p_342202_.y(),
p_342202_.z(),
1.2F,
false,
Level.ExplosionInteraction.TRIGGER,
ParticleTypes.GUST_EMITTER_SMALL,
ParticleTypes.GUST_EMITTER_LARGE,
SoundEvents.WIND_CHARGE_BURST
);
}
@Override
public boolean shouldRenderAtSqrDistance(double p_365272_) {
return this.tickCount < 2 && p_365272_ < MIN_CAMERA_DISTANCE_SQUARED ? false : super.shouldRenderAtSqrDistance(p_365272_);
}
}