83 lines
2.9 KiB
Java
83 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.nbt.CompoundTag;
|
||
|
import net.minecraft.network.MessageType;
|
||
|
import net.minecraft.network.packet.s2c.play.GameMessageS2CPacket;
|
||
|
import net.minecraft.particle.ParticleTypes;
|
||
|
import net.minecraft.sound.SoundCategory;
|
||
|
import net.minecraft.sound.SoundEvents;
|
||
|
import net.minecraft.text.TranslatableText;
|
||
|
import net.minecraft.util.Util;
|
||
|
import net.minecraft.util.math.BlockPos;
|
||
|
|
||
|
import java.util.Objects;
|
||
|
import java.util.UUID;
|
||
|
|
||
|
public class TeleportStage extends AIStage {
|
||
|
private int time = 0;
|
||
|
private UUID target = null;
|
||
|
private BlockPos targetPos = null;
|
||
|
|
||
|
public TeleportStage(HerobrineEntity entity) {
|
||
|
super(entity);
|
||
|
}
|
||
|
|
||
|
public TeleportStage(HerobrineEntity entity, UUID target) {
|
||
|
this(entity);
|
||
|
this.target = target;
|
||
|
}
|
||
|
|
||
|
public TeleportStage(HerobrineEntity entity, BlockPos targetPos) {
|
||
|
this(entity);
|
||
|
this.targetPos = targetPos;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void tick() {
|
||
|
if (time < HardcodedConfig.HEROBRINE_TELEPORT_TIME) {
|
||
|
time++;
|
||
|
getEntity().getServerWorld().spawnParticles(ParticleTypes.PORTAL, getEntity().getX(), getEntity().getRandomBodyY() - 0.25d, getEntity().getZ(), 6, 0.2d, 0.2d, 0.2d, 0.4d);
|
||
|
} else {
|
||
|
Entity targetEntity = getEntity().getServerWorld().getEntity(target);
|
||
|
if (targetEntity != null) {
|
||
|
getEntity().playSound(SoundEvents.ITEM_CHORUS_FRUIT_TELEPORT);
|
||
|
getEntity().updatePosition(targetEntity.getX() + 0.5d, targetEntity.getY(), targetEntity.getZ() + 0.5d);
|
||
|
getEntity().playSound(SoundEvents.ITEM_CHORUS_FRUIT_TELEPORT);
|
||
|
Objects.requireNonNull(getEntity().getEntityWorld().getServer()).getPlayerManager().sendToAll(new GameMessageS2CPacket(new TranslatableText(getEntity().getMessageKey("hello"), getEntity().getDisplayName(), targetEntity.getDisplayName()), MessageType.CHAT, Util.NIL_UUID));
|
||
|
}
|
||
|
nextStage();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void fromTag(CompoundTag tag) {
|
||
|
time = tag.getInt("Time");
|
||
|
if (!tag.contains("Target")) {
|
||
|
int x = tag.getInt("X");
|
||
|
int y = tag.getInt("Y");
|
||
|
int z = tag.getInt("X");
|
||
|
targetPos = new BlockPos(x, y, z);
|
||
|
} else {
|
||
|
target = tag.getUuid("Target");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public CompoundTag toTag() {
|
||
|
CompoundTag tag = new CompoundTag();
|
||
|
tag.putInt("Time", time);
|
||
|
if (targetPos != null) {
|
||
|
tag.putInt("X", targetPos.getX());
|
||
|
tag.putInt("Y", targetPos.getY());
|
||
|
tag.putInt("Z", targetPos.getZ());
|
||
|
} else {
|
||
|
tag.putUuid("Target", target);
|
||
|
}
|
||
|
return tag;
|
||
|
}
|
||
|
}
|