Created
November 22, 2022 23:13
-
-
Save iam4722202468/36630043ca89e786bb6318e296f822f8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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