Tab-list
This commit is contained in:
@@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import mc.core.network.NetStream;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.UUID;
|
||||
|
||||
@Slf4j
|
||||
public abstract class NetStream_p340 extends NetStream {
|
||||
@@ -70,4 +71,15 @@ public abstract class NetStream_p340 extends NetStream {
|
||||
writeBytes(buf);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID readUUID() {
|
||||
return new UUID(readLong(), readLong());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeUUID(UUID uuid) {
|
||||
writeLong(uuid.getMostSignificantBits());
|
||||
writeLong(uuid.getLeastSignificantBits());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,11 +60,13 @@ public enum State {
|
||||
.put(PluginMessagePacket.class, 0x18)
|
||||
.put(KeepAlivePacket.class, 0x1F)
|
||||
.put(JoinGamePacket.class, 0x23)
|
||||
.put(PlayerAbilitiesPacket.class, 0x2C)
|
||||
.put(PlayerListItemPacket.class, 0x2E)
|
||||
.put(PlayerPositionAndLookPacket.class, 0x2F)
|
||||
.put(SpawnPositionPacket.class, 0x46)
|
||||
.put(TimeUpdatePacket.class, 0x47)
|
||||
.put(TitlePacket.class, 0x48)
|
||||
.put(PlayerAbilitiesPacket.class, 0x2C)
|
||||
.put(PlayerPositionAndLookPacket.class, 0x2F)
|
||||
.put(PlayerListHeaderAndFooterPacket.class, 0x4A)
|
||||
.build()
|
||||
);
|
||||
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* DmitriyMX <dimon550@gmail.com>
|
||||
* 2018-07-11
|
||||
*/
|
||||
package mc.core.network.proto_1_12_2.packets;
|
||||
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
import mc.core.network.NetStream;
|
||||
import mc.core.network.SCPacket;
|
||||
import mc.core.network.proto_1_12_2.serializers.TextSerializer;
|
||||
import mc.core.text.Text;
|
||||
|
||||
@Setter
|
||||
@ToString
|
||||
public class PlayerListHeaderAndFooterPacket implements SCPacket {
|
||||
// To remove the header/footer, send a empty translatable component: {"translate":""}
|
||||
private Text header;
|
||||
private Text footer;
|
||||
|
||||
@Override
|
||||
public void writeSelf(NetStream netStream) {
|
||||
if (header == null) {
|
||||
netStream.writeString("{\"translate\":\"\"}");
|
||||
} else {
|
||||
netStream.writeString(TextSerializer.serialize(header).toString());
|
||||
}
|
||||
|
||||
if (footer == null) {
|
||||
netStream.writeString("{\"translate\":\"\"}");
|
||||
} else {
|
||||
netStream.writeString(TextSerializer.serialize(footer).toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* DmitriyMX <dimon550@gmail.com>
|
||||
* 2018-07-11
|
||||
*/
|
||||
package mc.core.network.proto_1_12_2.packets;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import mc.core.network.NetStream;
|
||||
import mc.core.network.SCPacket;
|
||||
import mc.core.network.proto_1_12_2.serializers.TextSerializer;
|
||||
import mc.core.player.PlayerMode;
|
||||
import mc.core.text.Text;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@Slf4j
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
public class PlayerListItemPacket implements SCPacket {
|
||||
public static final int ACTION_ADD_PLAYER = 0,
|
||||
ACTION_UPDATE_GAMEMODE = 1,
|
||||
ACTION_UPDATE_LATENCY = 2,
|
||||
ACTION_UPDATE_DISPLAY_NAME = 3,
|
||||
ACTION_REMOVE_PLAYER = 4;
|
||||
|
||||
@Data
|
||||
@ToString
|
||||
public static class PlayerData {
|
||||
private UUID uuid;
|
||||
private String name;
|
||||
private Properties properties = new Properties();
|
||||
private PlayerMode gameMode;
|
||||
private int ping;
|
||||
private boolean hasDisplayName = false;
|
||||
private Text displayName;
|
||||
}
|
||||
|
||||
private int action;
|
||||
private List<PlayerData> listPlayers = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public void writeSelf(NetStream netStream) {
|
||||
netStream.writeVarInt(action);
|
||||
netStream.writeVarInt(listPlayers.size());
|
||||
|
||||
for (PlayerData playerData : listPlayers) {
|
||||
netStream.writeUUID(playerData.uuid);
|
||||
|
||||
if (action == ACTION_ADD_PLAYER) {
|
||||
netStream.writeString(playerData.name);
|
||||
netStream.writeVarInt(playerData.properties.size());
|
||||
|
||||
for (Map.Entry<Object, Object> entry : playerData.properties.entrySet()) {
|
||||
netStream.writeString(entry.getKey().toString());
|
||||
netStream.writeString(entry.getValue().toString());
|
||||
netStream.writeBoolean(false); // Is Signed
|
||||
}
|
||||
}
|
||||
|
||||
if (action == ACTION_ADD_PLAYER || action == ACTION_UPDATE_GAMEMODE) {
|
||||
netStream.writeVarInt(playerData.gameMode.getId());
|
||||
}
|
||||
|
||||
if (action == ACTION_ADD_PLAYER || action == ACTION_UPDATE_LATENCY) {
|
||||
netStream.writeVarInt(playerData.ping);
|
||||
}
|
||||
|
||||
if (action == ACTION_ADD_PLAYER || action == ACTION_UPDATE_DISPLAY_NAME) {
|
||||
netStream.writeBoolean(playerData.hasDisplayName);
|
||||
if (playerData.hasDisplayName) {
|
||||
netStream.writeString(TextSerializer.serialize(playerData.displayName).toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user