84 lines
2.9 KiB
Java
84 lines
2.9 KiB
Java
package com.thebrokenrail.herobrine.entity.ai.stage;
|
|
|
|
import com.thebrokenrail.herobrine.config.HardcodedConfig;
|
|
import com.thebrokenrail.herobrine.entity.HerobrineEntity;
|
|
import com.thebrokenrail.herobrine.entity.ai.AIStage;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.TntEntity;
|
|
import net.minecraft.entity.projectile.ExplosiveProjectileEntity;
|
|
import net.minecraft.entity.projectile.FireballEntity;
|
|
import net.minecraft.nbt.CompoundTag;
|
|
import net.minecraft.sound.SoundEvents;
|
|
import net.minecraft.util.math.Vec3d;
|
|
import net.minecraft.world.GameRules;
|
|
|
|
public class FireballStage extends AIStage {
|
|
private int time = 0;
|
|
private Entity entity = null;
|
|
|
|
public FireballStage(HerobrineEntity entity) {
|
|
super(entity);
|
|
}
|
|
|
|
@Override
|
|
public void tick() {
|
|
getEntity().getDataTracker().set(HerobrineEntity.POSE, HerobrineEntity.Pose.FIREBALL);
|
|
|
|
if (entity != null) {
|
|
updatePosition();
|
|
}
|
|
if (time < HardcodedConfig.HEROBRINE_FIREBALL_TIME) {
|
|
time++;
|
|
} else if (entity == null) {
|
|
time = 0;
|
|
|
|
if (getEntity().getRandom().nextBoolean() && getEntity().getEntityWorld().getGameRules().getBoolean(GameRules.DO_MOB_GRIEFING)) {
|
|
entity = new TntEntity(getEntity().getEntityWorld(), 0, 0, 0, getEntity());
|
|
getEntity().playSound(SoundEvents.ITEM_FLINTANDSTEEL_USE);
|
|
} else {
|
|
entity = new FireballEntity(getEntity().getEntityWorld(), getEntity(), 0, 0, 0);
|
|
((FireballEntity) entity).explosionPower = 4;
|
|
getEntity().playSound(SoundEvents.ENTITY_GHAST_SHOOT);
|
|
}
|
|
entity.setNoGravity(true);
|
|
|
|
updatePosition();
|
|
|
|
getEntity().getEntityWorld().spawnEntity(entity);
|
|
} else {
|
|
time = 0;
|
|
|
|
Vec3d pos = getEntity().getRotationVec(1.0f);
|
|
entity.setVelocity(pos);
|
|
if (entity instanceof FireballEntity) {
|
|
((ExplosiveProjectileEntity) entity).posX = pos.getX() * 0.3d;
|
|
((ExplosiveProjectileEntity) entity).posY = pos.getY() * 0.3d;
|
|
((ExplosiveProjectileEntity) entity).posZ = pos.getZ() * 0.3d;
|
|
}
|
|
entity.setNoGravity(false);
|
|
|
|
nextStage();
|
|
}
|
|
}
|
|
|
|
private void updatePosition() {
|
|
Vec3d pos = getEntity().getRotationVec(1.0f).add(getEntity().getPos());
|
|
entity.updatePosition(pos.getX(), pos.getY(), pos.getZ());
|
|
entity.setVelocity(0, 0, 0);
|
|
}
|
|
|
|
@Override
|
|
public void fromTag(CompoundTag tag) {
|
|
time = tag.getInt("Time");
|
|
entity = getEntity().getServerWorld().getEntity(tag.getUuid("Entity"));
|
|
}
|
|
|
|
@Override
|
|
public CompoundTag toTag() {
|
|
CompoundTag tag = new CompoundTag();
|
|
tag.putUuid("Entity", entity.getUuid());
|
|
tag.putInt("Time", time);
|
|
return tag;
|
|
}
|
|
}
|