72 lines
2.9 KiB
Java
72 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.EntityType;
|
||
|
import net.minecraft.entity.LightningEntity;
|
||
|
import net.minecraft.nbt.CompoundTag;
|
||
|
import net.minecraft.util.math.Vec3d;
|
||
|
import net.minecraft.world.Heightmap;
|
||
|
|
||
|
public class LightningStage extends AIStage {
|
||
|
private int time = 0;
|
||
|
private int max_time;
|
||
|
|
||
|
public LightningStage(HerobrineEntity entity) {
|
||
|
super(entity);
|
||
|
max_time = getEntity().getRandom().nextInt((HardcodedConfig.HEROBRINE_LIGHTNING_MAX_TIME + 1) - HardcodedConfig.HEROBRINE_LIGHTNING_MIX_TIME) + HardcodedConfig.HEROBRINE_LIGHTNING_MIX_TIME;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void tick() {
|
||
|
if (time >= max_time) {
|
||
|
nextStage();
|
||
|
} else {
|
||
|
time++;
|
||
|
|
||
|
getEntity().getDataTracker().set(HerobrineEntity.POSE, HerobrineEntity.Pose.LIGHTNING);
|
||
|
|
||
|
if ((time & 2) == 0) {
|
||
|
int x = getEntity().getRandom().nextInt(HardcodedConfig.HEROBRINE_LIGHTNING_RANGE + 1);
|
||
|
int z = getEntity().getRandom().nextInt(HardcodedConfig.HEROBRINE_LIGHTNING_RANGE + 1);
|
||
|
x = x - HardcodedConfig.HEROBRINE_LIGHTNING_RANGE / 2;
|
||
|
z = z - HardcodedConfig.HEROBRINE_LIGHTNING_RANGE / 2;
|
||
|
x = x + (int) getEntity().getX();
|
||
|
z = z + (int) getEntity().getZ();
|
||
|
int y = getEntity().getEntityWorld().getTopY(Heightmap.Type.WORLD_SURFACE, x, z);
|
||
|
|
||
|
Vec3d pos = new Vec3d(x + 0.5d, y, z + 0.5d);
|
||
|
|
||
|
LightningEntity lightning = new LightningEntity(EntityType.LIGHTNING_BOLT, getEntity().getEntityWorld());
|
||
|
lightning.setCosmetic(true);
|
||
|
lightning.updatePosition(pos.getX(), pos.getY(), pos.getZ());
|
||
|
getEntity().getEntityWorld().spawnEntity(lightning);
|
||
|
|
||
|
if (getEntity().getRandom().nextDouble() <= HardcodedConfig.HEROBRINE_LIGHTNING_ENTITY_CHANCE) {
|
||
|
EntityType<?> entityType = HardcodedConfig.HEROBRINE_LIGHTNING_ENTITIES[getEntity().getRandom().nextInt(HardcodedConfig.HEROBRINE_LIGHTNING_ENTITIES.length)];
|
||
|
Entity entity = entityType.create(getEntity().getEntityWorld());
|
||
|
assert entity != null;
|
||
|
entity.updatePosition(pos.getX(), pos.getY(), pos.getZ());
|
||
|
getEntity().getEntityWorld().spawnEntity(entity);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void fromTag(CompoundTag tag) {
|
||
|
time = tag.getInt("Time");
|
||
|
max_time = tag.getInt("MaxTime");
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public CompoundTag toTag() {
|
||
|
CompoundTag data = new CompoundTag();
|
||
|
data.putInt("Time", time);
|
||
|
data.putInt("MaxTime", max_time);
|
||
|
return data;
|
||
|
}
|
||
|
}
|