- Баллы
- 76
- Имя в Minecraft
- Kurumi
В общем, у меня вроде получилось сделать как я хотел, но у меня появилась неприятная проблема.
Итак, если я сажаю (пакетом) на игрока что-либо в качестве пассажира и отправляю этот пакет всем игрокам, тогда пассажир будет ездить на игроке и все надписи над головой будут видно, НО при этом пропадает никнейм игрока. на котором сидит пассажир

Такое происходит только если сажаю на игрока что-либо. Хз как это фиксить
Мейби нужно каким-то пакетом обновить никнейм игрока?
Итак, если я сажаю (пакетом) на игрока что-либо в качестве пассажира и отправляю этот пакет всем игрокам, тогда пассажир будет ездить на игроке и все надписи над головой будут видно, НО при этом пропадает никнейм игрока. на котором сидит пассажир

Такое происходит только если сажаю на игрока что-либо. Хз как это фиксить
Мейби нужно каким-то пакетом обновить никнейм игрока?
Код:
public class Nameplate {
private WrapperPlayServerSpawnEntityLiving spawnPacket;
private WrapperPlayServerSpawnEntityLiving spawnSlimePacket;
private WrapperPlayServerEntityMetadata metadataPacket;
private WrapperPlayServerEntityMetadata metadataSlimePacket;
private WrapperPlayServerEntityDestroy destroyPacket;
private WrapperPlayServerMount mountPacket; //slime on player
private WrapperPlayServerMount standMounPacket; //armor stand on slime
private Player source;
public Nameplate(Location location, String name, Player player) {
Random random = new Random();
int[] ids = new int[] { random.nextInt(0X7FFFFFFF), random.nextInt(0X7FFFFFFF) };
int entityID = ids[1];
int slimeID = ids[0];
this.source = player;
this.spawnPacket = new WrapperPlayServerSpawnEntityLiving();
this.spawnSlimePacket = new WrapperPlayServerSpawnEntityLiving();
this.metadataPacket = new WrapperPlayServerEntityMetadata();
this.metadataSlimePacket = new WrapperPlayServerEntityMetadata();
this.destroyPacket = new WrapperPlayServerEntityDestroy();
this.mountPacket = new WrapperPlayServerMount();
this.standMounPacket = new WrapperPlayServerMount();
spawnSlimePacket.setEntityID(slimeID);
spawnSlimePacket.setType(EntityType.SLIME);
spawnSlimePacket.setX(location.getX());
spawnSlimePacket.setY(location.getY());
spawnSlimePacket.setZ(location.getZ());
destroyPacket.setEntityIds(new int[] {entityID, slimeID});
spawnPacket.setEntityID(entityID);
spawnPacket.setType(EntityType.ARMOR_STAND);
spawnPacket.setX(location.getX());
spawnPacket.setY(location.getY());
spawnPacket.setZ(location.getZ());
settingsUpMetadata(entityID, slimeID, name);
mountPacket.setEntityID(player.getEntityId());
mountPacket.setPassengerIds(new int[] {ids[0]});
standMounPacket.setEntityID(ids[0]);
standMounPacket.setPassengerIds(new int[] {ids[1]});
}
private void settingsUpMetadata(int entityID, int slimeId, String name) {
metadataPacket.setEntityID(entityID);
metadataSlimePacket.setEntityID(slimeId);
WrappedDataWatcher dataWatcher = new WrappedDataWatcher(metadataPacket.getMetadata());
WrappedDataWatcher slimeWatcher = new WrappedDataWatcher(metadataSlimePacket.getMetadata());
WrappedDataWatcher.WrappedDataWatcherObject isInvisibleIndex = new WrappedDataWatcher.WrappedDataWatcherObject(0, WrappedDataWatcher.Registry.get(Byte.class));
WrappedDataWatcher.WrappedDataWatcherObject customName = new WrappedDataWatcher.WrappedDataWatcherObject(2, WrappedDataWatcher.Registry.get(String.class));
WrappedDataWatcher.WrappedDataWatcherObject nameVisible = new WrappedDataWatcher.WrappedDataWatcherObject(3, WrappedDataWatcher.Registry.get(Boolean.class));
WrappedDataWatcher.WrappedDataWatcherObject small = new WrappedDataWatcher.WrappedDataWatcherObject(11, WrappedDataWatcher.Registry.get(Byte.class));
WrappedDataWatcher.WrappedDataWatcherObject size = new WrappedDataWatcher.WrappedDataWatcherObject(12, WrappedDataWatcher.Registry.get(Integer.class));
slimeWatcher.setObject(isInvisibleIndex, (byte) 0x20);
slimeWatcher.setObject(size, 1);
metadataSlimePacket.setMetadata(slimeWatcher.getWatchableObjects());
dataWatcher.setObject(isInvisibleIndex, (byte) 0x20);
dataWatcher.setObject(customName, name);
dataWatcher.setObject(nameVisible, true);
dataWatcher.setObject(small, (byte) (0x01 | 0x10 | 0x08));
metadataPacket.setMetadata(dataWatcher.getWatchableObjects());
}
private void sendSpawn(Player player) {
spawnPacket.sendPacket(player);
spawnSlimePacket.sendPacket(player);
metadataSlimePacket.sendPacket(player);
metadataPacket.sendPacket(player);
mountPacket.sendPacket(player);
standMounPacket.sendPacket(player);
}
public void updatePackets() {
for(Player player : Bukkit.getOnlinePlayers()) {
if(!player.getUniqueId().equals(source.getUniqueId()))
sendSpawn(player);
}
}
public void destroyPackets() {
for (Player player : Bukkit.getOnlinePlayers())
if (!player.getUniqueId().equals(source.getUniqueId()))
sendDestroyPacket(player);
}
private void sendDestroyPacket(Player player) {
destroyPacket.sendPacket(player);
}
}
Главное чтобы работало.