EntityLib/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperPlayer.java
2024-02-23 18:31:36 +04:00

129 lines
4.1 KiB
Java

package me.tofaa.entitylib.wrapper;
import com.github.retrooper.packetevents.protocol.entity.type.EntityTypes;
import com.github.retrooper.packetevents.protocol.player.*;
import com.github.retrooper.packetevents.protocol.world.Location;
import com.github.retrooper.packetevents.util.Vector3d;
import com.github.retrooper.packetevents.wrapper.PacketWrapper;
import com.github.retrooper.packetevents.wrapper.play.server.*;
import me.tofaa.entitylib.EntityLib;
import me.tofaa.entitylib.meta.EntityMeta;
import net.kyori.adventure.text.Component;
import java.util.*;
public class WrapperPlayer extends WrapperLivingEntity {
private UserProfile profile;
private GameMode gameMode = GameMode.CREATIVE;
private Component displayName;
private boolean tablist = true;
private int latency = -1;
public WrapperPlayer(UserProfile profile, int entityId) {
super(entityId, profile.getUUID(), EntityTypes.PLAYER, EntityMeta.createMeta(entityId, EntityTypes.PLAYER));
this.profile = profile;
}
public WrapperPlayServerPlayerInfoUpdate tabListPacket() {
EnumSet<WrapperPlayServerPlayerInfoUpdate.Action> actions = EnumSet.of(
WrapperPlayServerPlayerInfoUpdate.Action.ADD_PLAYER,
WrapperPlayServerPlayerInfoUpdate.Action.UPDATE_LISTED
);
return new WrapperPlayServerPlayerInfoUpdate(
actions,
createInfo()
);
}
public List<TextureProperty> getTextures() {
return profile.getTextureProperties();
}
public WrapperPlayServerPlayerInfoRemove tabListRemovePacket() {
return new WrapperPlayServerPlayerInfoRemove(getUuid());
}
public void setGameMode(GameMode gameMode) {
this.gameMode = gameMode;
sendPacketsToViewers(new WrapperPlayServerPlayerInfoUpdate(WrapperPlayServerPlayerInfoUpdate.Action.UPDATE_GAME_MODE, createInfo()));
}
public void setDisplayName(Component displayName) {
this.displayName = displayName;
sendPacketsToViewers(new WrapperPlayServerPlayerInfoUpdate(WrapperPlayServerPlayerInfoUpdate.Action.UPDATE_DISPLAY_NAME, createInfo()));
}
public Component getDisplayName() {
return displayName;
}
public String getUsername() {
return profile.getName();
}
public List<TextureProperty> getTextureProperties() {
return profile.getTextureProperties();
}
public void setTextureProperties(List<TextureProperty> textureProperties) {
profile.setTextureProperties(textureProperties);
if (!isSpawned()) return;
WrapperPlayServerDestroyEntities destroyEntities = new WrapperPlayServerDestroyEntities(getEntityId());
WrapperPlayServerPlayerInfoRemove removePacket = new WrapperPlayServerPlayerInfoRemove(getUuid());
WrapperPlayServerPlayerInfoUpdate updatePacket = tabListPacket();
{
sendPacketToViewers(removePacket);
sendPacketToViewers(destroyEntities);
sendPacketToViewers(updatePacket);
for (UUID viewer : viewers) {
removeViewer(viewer);
addViewer(viewer);
}
}
}
public GameMode getGameMode() {
return gameMode;
}
public boolean isInTablist() {
return tablist;
}
public void setInTablist(boolean tablist) {
this.tablist = tablist;
sendPacketToViewers(tabListPacket());
if (!tablist) {
sendPacketToViewers(tabListRemovePacket());
}
}
public int getLatency() {
return latency;
}
public void setLatency(int latency) {
this.latency = latency;
sendPacketsToViewers(
new WrapperPlayServerPlayerInfoUpdate(
WrapperPlayServerPlayerInfoUpdate.Action.UPDATE_LATENCY,
createInfo()
)
);
}
protected WrapperPlayServerPlayerInfoUpdate.PlayerInfo createInfo() {
return new WrapperPlayServerPlayerInfoUpdate.PlayerInfo(
profile,
tablist,
latency,
gameMode,
displayName,
null
);
}
}