This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
Herobrine-Rewoven/src/main/java/com/thebrokenrail/herobrine/entity/ai/stage/TeleportStage.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;
}
}