Archived
0
This commit is contained in:
2018-07-11 19:53:17 +03:00
parent 444f532f11
commit 222c04603f
6 changed files with 162 additions and 2 deletions

View File

@@ -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());
}
}

View File

@@ -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()
);

View File

@@ -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());
}
}
}

View File

@@ -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());
}
}
}
}
}