Skip to content

Instantly share code, notes, and snippets.

@iam4722202468
Created November 22, 2022 23:13
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iam4722202468/36630043ca89e786bb6318e296f822f8 to your computer and use it in GitHub Desktop.
Save iam4722202468/36630043ca89e786bb6318e296f822f8 to your computer and use it in GitHub Desktop.
package net.worldseed.mobs;
import com.google.common.collect.ImmutableList;
import net.kyori.adventure.text.Component;
import net.minestom.server.MinecraftServer;
import net.minestom.server.collision.BoundingBox;
import net.minestom.server.coordinate.Pos;
import net.minestom.server.entity.*;
import net.minestom.server.network.packet.server.SendablePacket;
import net.minestom.server.network.packet.server.play.PlayerInfoPacket;
import net.minestom.server.network.player.PlayerConnection;
import net.minestom.server.utils.time.TimeUnit;
import net.worldseed.mobs.goals.PlayerTarget;
import net.worldseed.regions.WorldSeedInstance;
import org.jetbrains.annotations.NotNull;
import worldseed.datatypes.mobs.Mob;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CompletableFuture;
public class WorldSeedMobPlayer extends WorldSeedMobImpl {
private final Entity hideNameStand;
public WorldSeedMobPlayer(Mob config, WorldSeedInstance instance, Pos pos) {
// super(config, instance, pos, EntityType.fromNamespaceId("minecraft:" + config.type().toLowerCase()));
super(config, instance, pos, EntityType.PLAYER);
super.yOffset = 1.8f;
this.hideNameStand = new Entity(EntityType.ARMOR_STAND) {
@Override
public void tick(long time) {
}
};
hideNameStand.setInvisible(true);
hideNameStand.setSilent(true);
hideNameStand.setInstance(instance, pos);
this.addPassenger(hideNameStand);
addAIGroup(
ImmutableList.of(),
ImmutableList.of(
new PlayerTarget(this, 100)
)
);
}
protected @NotNull PlayerInfoPacket getAddPlayerToList() {
final PlayerSkin skin = new PlayerSkin(this.config.skin(), this.config.signature());
List<PlayerInfoPacket.AddPlayer.Property> prop = List.of(new PlayerInfoPacket.AddPlayer.Property("textures", skin.textures(), skin.signature()));
return new PlayerInfoPacket(PlayerInfoPacket.Action.ADD_PLAYER,
new PlayerInfoPacket.AddPlayer(getUuid(), "", prop, GameMode.CREATIVE, 0, Component.empty()));
}
@Override
public void updateNewViewer(@NotNull Player player) {
player.sendPacket(getAddPlayerToList());
handleTabList(player.getPlayerConnection());
super.updateNewViewer(player);
}
private void handleTabList(PlayerConnection connection) {
MinecraftServer.getSchedulerManager().buildTask(() -> connection.sendPacket(getRemovePlayerToList())).delay(20, TimeUnit.SERVER_TICK).schedule();
}
private SendablePacket getRemovePlayerToList() {
return new PlayerInfoPacket(PlayerInfoPacket.Action.REMOVE_PLAYER, new PlayerInfoPacket.RemovePlayer(getUuid()));
}
@Override
public void remove() {
super.remove();
this.hideNameStand.remove();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment