Minecraft 1.19.1

This commit is contained in:
LOOHP 2022-07-28 18:07:31 +08:00
parent 42559d83f0
commit ace420a017
15 changed files with 1556 additions and 1387 deletions

View File

@ -24,7 +24,7 @@
<groupId>com.loohp</groupId>
<artifactId>Limbo</artifactId>
<name>Limbo</name>
<version>0.6.16-ALPHA</version>
<version>0.6.17-ALPHA</version>
<description>Standalone Limbo Minecraft Server.</description>
<url>https://github.com/LOOHP/Limbo</url>
@ -136,7 +136,7 @@
</executions>
</plugin>
</plugins>
<finalName>${project.artifactId}-${project.version}-1.19</finalName>
<finalName>${project.artifactId}-${project.version}-1.19.1</finalName>
</build>
<profiles>

View File

@ -131,8 +131,8 @@ public class Limbo {
//===========================
public final String SERVER_IMPLEMENTATION_VERSION = "1.19";
public final int SERVER_IMPLEMENTATION_PROTOCOL = 759;
public final String SERVER_IMPLEMENTATION_VERSION = "1.19.1";
public final int SERVER_IMPLEMENTATION_PROTOCOL = 760;
public final String LIMBO_IMPLEMENTATION_VERSION;
private AtomicBoolean isRunning;

View File

@ -618,7 +618,7 @@ public class ClientConnection extends Thread {
PacketPlayInTabComplete request = (PacketPlayInTabComplete) packetIn;
String[] command = CustomStringUtils.splitStringToArgs(request.getText().substring(1));
List<TabCompleteMatches> matches = new ArrayList<TabCompleteMatches>(Limbo.getInstance().getPluginManager().getTabOptions(player, command).stream().map(each -> new TabCompleteMatches(each)).collect(Collectors.toList()));
List<TabCompleteMatches> matches = new ArrayList<>(Limbo.getInstance().getPluginManager().getTabOptions(player, command).stream().map(each -> new TabCompleteMatches(each)).collect(Collectors.toList()));
int start = CustomStringUtils.getIndexOfArg(request.getText(), command.length - 1) + 1;
int length = command[command.length - 1].length();

View File

@ -1,99 +0,0 @@
/*
* This file is part of Limbo.
*
* Copyright (C) 2022. LoohpJames <jamesloohp@gmail.com>
* Copyright (C) 2022. Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.loohp.limbo.network.protocol.packets;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.time.Instant;
import java.util.Optional;
import java.util.UUID;
import com.loohp.limbo.utils.DataTypeIO;
import com.loohp.limbo.utils.NetworkEncryptionUtils;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
public class ClientboundPlayerChatPacket extends PacketOut {
private Component signedContent;
private Optional<Component> unsignedContent;
private int position;
private UUID sender;
private Instant time;
private NetworkEncryptionUtils.SignatureData saltSignature;
public ClientboundPlayerChatPacket(Component signedContent, Optional<Component> unsignedContent, int position, UUID sender, Instant time, NetworkEncryptionUtils.SignatureData saltSignature) {
this.signedContent = signedContent;
this.unsignedContent = unsignedContent;
this.position = position;
this.sender = sender;
this.time = time;
this.saltSignature = saltSignature;
}
public Component getSignedContent() {
return signedContent;
}
public Optional<Component> getUnsignedContent() {
return unsignedContent;
}
public int getPosition() {
return position;
}
public UUID getSender() {
return sender;
}
public Instant getTime() {
return time;
}
public NetworkEncryptionUtils.SignatureData getSaltSignature() {
return saltSignature;
}
@Override
public byte[] serializePacket() throws IOException {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
DataOutputStream output = new DataOutputStream(buffer);
output.writeByte(Packet.getPlayOut().get(getClass()));
DataTypeIO.writeString(output, GsonComponentSerializer.gson().serialize(signedContent), StandardCharsets.UTF_8);
if (unsignedContent.isPresent()) {
output.writeBoolean(true);
DataTypeIO.writeString(output, GsonComponentSerializer.gson().serialize(unsignedContent.get()), StandardCharsets.UTF_8);
} else {
output.writeBoolean(false);
}
DataTypeIO.writeVarInt(output, position);
DataTypeIO.writeUUID(output, sender);
output.writeLong(time.toEpochMilli());
NetworkEncryptionUtils.SignatureData.write(output, saltSignature);
return buffer.toByteArray();
}
}

View File

@ -31,19 +31,19 @@ import java.nio.charset.StandardCharsets;
public class ClientboundSystemChatPacket extends PacketOut {
private Component message;
private int position;
private boolean overlay;
public ClientboundSystemChatPacket(Component message, int position) {
public ClientboundSystemChatPacket(Component message, boolean overlay) {
this.message = message;
this.position = position;
this.overlay = overlay;
}
public Component getMessage() {
return message;
}
public int getPosition() {
return position;
public boolean isOverlay() {
return overlay;
}
@Override
@ -53,7 +53,7 @@ public class ClientboundSystemChatPacket extends PacketOut {
DataOutputStream output = new DataOutputStream(buffer);
output.writeByte(Packet.getPlayOut().get(getClass()));
DataTypeIO.writeString(output, GsonComponentSerializer.gson().serialize(message), StandardCharsets.UTF_8);
DataTypeIO.writeVarInt(output, position);
output.writeBoolean(overlay);
return buffer.toByteArray();
}

View File

@ -25,25 +25,29 @@ import java.nio.charset.StandardCharsets;
import java.time.Instant;
import com.loohp.limbo.utils.DataTypeIO;
import com.loohp.limbo.utils.NetworkEncryptionUtils;
import com.loohp.limbo.utils.NetworkEncryptionUtils.SignatureData;
import com.loohp.limbo.utils.LastSeenMessages;
import com.loohp.limbo.utils.MessageSignature;
public class PacketPlayInChat extends PacketIn {
private String message;
private Instant time;
private NetworkEncryptionUtils.SignatureData signature;
private boolean previewed;
private long salt;
private MessageSignature signature;
private boolean signedPreview;
private LastSeenMessages.b lastSeenMessages;
public PacketPlayInChat(String message, Instant time, SignatureData signature, boolean previewed) {
public PacketPlayInChat(String message, Instant time, long salt, MessageSignature signature, boolean signedPreview, LastSeenMessages.b lastSeenMessages) {
this.message = message;
this.time = time;
this.salt = salt;
this.signature = signature;
this.previewed = previewed;
this.signedPreview = signedPreview;
this.lastSeenMessages = lastSeenMessages;
}
public PacketPlayInChat(DataInputStream in) throws IOException {
this(DataTypeIO.readString(in, StandardCharsets.UTF_8), Instant.ofEpochMilli(in.readLong()), new NetworkEncryptionUtils.SignatureData(in), in.readBoolean());
this(DataTypeIO.readString(in, StandardCharsets.UTF_8), Instant.ofEpochMilli(in.readLong()), in.readLong(), new MessageSignature(in), in.readBoolean(), new LastSeenMessages.b(in));
}
public String getMessage() {
@ -54,12 +58,19 @@ public class PacketPlayInChat extends PacketIn {
return time;
}
public SignatureData getSignature() {
public MessageSignature getSignature() {
return signature;
}
public boolean isPreviewed() {
return previewed;
public boolean isSignedPreview() {
return signedPreview;
}
public long getSalt() {
return salt;
}
public LastSeenMessages.b getLastSeenMessages() {
return lastSeenMessages;
}
}

View File

@ -19,45 +19,40 @@
package com.loohp.limbo.network.protocol.packets;
import com.loohp.limbo.utils.ArgumentSignatures;
import com.loohp.limbo.utils.DataTypeIO;
import com.loohp.limbo.utils.NetworkEncryptionUtils.ArgumentSignatures;
import com.loohp.limbo.utils.LastSeenMessages;
import java.io.DataInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
public class ServerboundChatCommandPacket extends PacketIn {
private String command;
private Instant time;
private long salt;
private ArgumentSignatures argumentSignatures;
private boolean commandPreview;
private LastSeenMessages.b lastSeenMessages;
public ServerboundChatCommandPacket(String command, Instant time, ArgumentSignatures argumentSignatures, boolean commandPreview) {
public ServerboundChatCommandPacket(String command, Instant time, long salt, ArgumentSignatures argumentSignatures, boolean commandPreview, LastSeenMessages.b lastSeenMessages) {
this.command = command;
this.time = time;
this.salt = salt;
this.argumentSignatures = argumentSignatures;
this.commandPreview = commandPreview;
this.lastSeenMessages = lastSeenMessages;
}
public ServerboundChatCommandPacket(DataInputStream in) throws IOException {
this.command = DataTypeIO.readString(in, StandardCharsets.UTF_8);
this.time = Instant.ofEpochMilli(in.readLong());
long salt = in.readLong();
int size = DataTypeIO.readVarInt(in);
Map<String, byte[]> signatures = new HashMap<>(size);
for (int i = 0; i < size; i++) {
String key = DataTypeIO.readString(in, StandardCharsets.UTF_8);
int arraySize = DataTypeIO.readVarInt(in);
byte[] value = new byte[arraySize];
in.readFully(value);
signatures.put(key, value);
}
this.argumentSignatures = new ArgumentSignatures(salt, signatures);
this.salt = in.readLong();
this.argumentSignatures = new ArgumentSignatures(in);
this.commandPreview = in.readBoolean();
this.lastSeenMessages = new LastSeenMessages.b(in);
}
public String getCommand() {
@ -68,6 +63,10 @@ public class ServerboundChatCommandPacket extends PacketIn {
return time;
}
public long getSalt() {
return salt;
}
public ArgumentSignatures getArgumentSignatures() {
return argumentSignatures;
}
@ -76,4 +75,7 @@ public class ServerboundChatCommandPacket extends PacketIn {
return commandPreview;
}
public LastSeenMessages.b getLastSeenMessages() {
return lastSeenMessages;
}
}

View File

@ -44,8 +44,8 @@ import com.loohp.limbo.network.protocol.packets.PacketPlayOutResourcePackSend;
import com.loohp.limbo.network.protocol.packets.PacketPlayOutRespawn;
import com.loohp.limbo.utils.BungeecordAdventureConversionUtils;
import com.loohp.limbo.utils.GameMode;
import com.loohp.limbo.utils.MessageSignature;
import com.loohp.limbo.utils.NamespacedKey;
import com.loohp.limbo.utils.NetworkEncryptionUtils;
import net.kyori.adventure.audience.MessageType;
import net.kyori.adventure.bossbar.BossBar;
import net.kyori.adventure.identity.Identity;
@ -304,7 +304,7 @@ public class Player extends LivingEntity implements CommandSender {
chat(message, verbose, null, Instant.now());
}
public void chat(String message, boolean verbose, NetworkEncryptionUtils.SignatureData saltSignature, Instant time) {
public void chat(String message, boolean verbose, MessageSignature saltSignature, Instant time) {
if (Limbo.getInstance().getServerProperties().isAllowChat()) {
PlayerChatEvent event = Limbo.getInstance().getEventsManager().callEvent(new PlayerChatEvent(this, CHAT_DEFAULT_FORMAT, message, false));
if (!event.isCancelled()) {
@ -393,7 +393,7 @@ public class Player extends LivingEntity implements CommandSender {
}
public void setTitleTimer(int fadeIn, int stay, int fadeOut) {
sendTitlePart(TitlePart.TIMES, Title.Times.of(Duration.ofMillis(fadeIn * 50), Duration.ofMillis(stay * 50), Duration.ofMillis(fadeOut * 50)));
sendTitlePart(TitlePart.TIMES, Title.Times.times(Duration.ofMillis(fadeIn * 50), Duration.ofMillis(stay * 50), Duration.ofMillis(fadeOut * 50)));
}
@Deprecated
@ -409,7 +409,7 @@ public class Player extends LivingEntity implements CommandSender {
}
public void setTitleSubTitle(String title, String subTitle, int fadeIn, int stay, int fadeOut) {
sendTitlePart(TitlePart.TIMES, Title.Times.of(Duration.ofMillis(fadeIn * 50), Duration.ofMillis(stay * 50), Duration.ofMillis(fadeOut * 50)));
sendTitlePart(TitlePart.TIMES, Title.Times.times(Duration.ofMillis(fadeIn * 50), Duration.ofMillis(stay * 50), Duration.ofMillis(fadeOut * 50)));
sendTitlePart(TitlePart.SUBTITLE, LegacyComponentSerializer.legacySection().deserialize(subTitle));
sendTitlePart(TitlePart.TITLE, LegacyComponentSerializer.legacySection().deserialize(title));
}
@ -419,7 +419,7 @@ public class Player extends LivingEntity implements CommandSender {
sendMessage(source, message, type, null, Instant.now());
}
public void sendMessage(Identity source, Component message, MessageType type, NetworkEncryptionUtils.SignatureData signature, Instant time) {
public void sendMessage(Identity source, Component message, MessageType type, MessageSignature signature, Instant time) {
try {
PacketOut chat;
switch (type) {
@ -434,7 +434,7 @@ public class Player extends LivingEntity implements CommandSender {
*/
case SYSTEM:
default:
chat = new ClientboundSystemChatPacket(message, 1);
chat = new ClientboundSystemChatPacket(message, false);
break;
}
clientConnection.sendPacket(chat);
@ -469,7 +469,7 @@ public class Player extends LivingEntity implements CommandSender {
@Override
public void sendActionBar(Component message) {
try {
ClientboundSystemChatPacket chat = new ClientboundSystemChatPacket(message, 2);
ClientboundSystemChatPacket chat = new ClientboundSystemChatPacket(message, true);
clientConnection.sendPacket(chat);
} catch (IOException ignored) {}
}

View File

@ -0,0 +1,112 @@
/*
* This file is part of Limbo.
*
* Copyright (C) 2022. LoohpJames <jamesloohp@gmail.com>
* Copyright (C) 2022. Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.loohp.limbo.utils;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class ArgumentSignatures {
public static final ArgumentSignatures EMPTY = new ArgumentSignatures(Collections.emptyList());
private static final int MAX_ARGUMENT_COUNT = 8;
private static final int MAX_ARGUMENT_NAME_LENGTH = 16;
private List<a> entries;
public ArgumentSignatures(List<a> entries) {
this.entries = entries;
}
public ArgumentSignatures(DataInputStream in) throws IOException {
int size = DataTypeIO.readVarInt(in);
entries = new ArrayList<>(8);
for (int i = 0; i < size; i++) {
entries.add(new ArgumentSignatures.a(in));
}
}
public List<a> getEntries() {
return entries;
}
public MessageSignature get(String s) {
Iterator<ArgumentSignatures.a> iterator = this.entries.iterator();
ArgumentSignatures.a argumentsignatures_a;
do {
if (!iterator.hasNext()) {
return MessageSignature.EMPTY;
}
argumentsignatures_a = iterator.next();
} while (!argumentsignatures_a.name.equals(s));
return argumentsignatures_a.signature;
}
public void write(DataOutputStream out) throws IOException {
DataTypeIO.writeVarInt(out, entries.size());
for (ArgumentSignatures.a argumentsignatures_a : entries) {
argumentsignatures_a.write(out);
}
}
public static class a {
private String name;
private MessageSignature signature;
public a(String name, MessageSignature signature) {
this.name = name;
this.signature = signature;
}
public String getName() {
return name;
}
public MessageSignature getSignature() {
return signature;
}
public a(DataInputStream in) throws IOException {
this(DataTypeIO.readString(in, StandardCharsets.UTF_8), new MessageSignature(in));
}
public void write(DataOutputStream out) throws IOException {
DataTypeIO.writeString(out, name, StandardCharsets.UTF_8);
this.signature.write(out);
}
}
@FunctionalInterface
public interface b {
MessageSignature sign(String s, String s1);
}
}

View File

@ -0,0 +1,140 @@
/*
* This file is part of Limbo.
*
* Copyright (C) 2022. LoohpJames <jamesloohp@gmail.com>
* Copyright (C) 2022. Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.loohp.limbo.utils;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
public class LastSeenMessages {
public static LastSeenMessages EMPTY = new LastSeenMessages(Collections.emptyList());
public static final int LAST_SEEN_MESSAGES_MAX_LENGTH = 5;
private List<a> entries;
public LastSeenMessages(List<LastSeenMessages.a> entries) {
this.entries = entries;
}
public LastSeenMessages(DataInputStream in) throws IOException {
int size = DataTypeIO.readVarInt(in);
entries = new ArrayList<>(size);
for (int i = 0; i < size; i++) {
entries.add(new LastSeenMessages.a(in));
}
}
public void write(DataOutputStream out) throws IOException {
DataTypeIO.writeVarInt(out, entries.size());
for (LastSeenMessages.a lastseenmessages_a : entries) {
lastseenmessages_a.write(out);
}
}
public void updateHash(DataOutputStream dataoutput) throws IOException {
Iterator<a> iterator = this.entries.iterator();
while (iterator.hasNext()) {
LastSeenMessages.a lastseenmessages_a = iterator.next();
UUID uuid = lastseenmessages_a.getProfileId();
MessageSignature messagesignature = lastseenmessages_a.getLastSignature();
dataoutput.writeByte(70);
dataoutput.writeLong(uuid.getMostSignificantBits());
dataoutput.writeLong(uuid.getLeastSignificantBits());
dataoutput.write(messagesignature.getBytes());
}
}
public static class a {
private UUID profileId;
private MessageSignature lastSignature;
public UUID getProfileId() {
return profileId;
}
public MessageSignature getLastSignature() {
return lastSignature;
}
public a(UUID profileId, MessageSignature lastSignature) {
this.profileId = profileId;
this.lastSignature = lastSignature;
}
public a(DataInputStream in) throws IOException {
this(DataTypeIO.readUUID(in), new MessageSignature(in));
}
public void write(DataOutputStream out) throws IOException {
DataTypeIO.writeUUID(out, this.profileId);
this.lastSignature.write(out);
}
}
public static class b {
private LastSeenMessages lastSeen;
private Optional<a> lastReceived;
public b(LastSeenMessages lastSeen, Optional<LastSeenMessages.a> lastReceived) {
this.lastSeen = lastSeen;
this.lastReceived = lastReceived;
}
public b(DataInputStream in) throws IOException {
this.lastSeen = new LastSeenMessages(in);
if (in.readBoolean()) {
this.lastReceived = Optional.of(new LastSeenMessages.a(in));
} else {
this.lastReceived = Optional.empty();
}
}
public void write(DataOutputStream out) throws IOException {
this.lastSeen.write(out);
if (lastReceived.isPresent()) {
out.writeBoolean(true);
lastReceived.get().write(out);
} else {
out.writeBoolean(false);
}
}
public LastSeenMessages getLastSeen() {
return lastSeen;
}
public Optional<a> getLastReceived() {
return lastReceived;
}
}
}

View File

@ -0,0 +1,92 @@
/*
* This file is part of Limbo.
*
* Copyright (C) 2022. LoohpJames <jamesloohp@gmail.com>
* Copyright (C) 2022. Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.loohp.limbo.utils;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.Base64;
public class MessageSignature {
public static final MessageSignature EMPTY = new MessageSignature(new byte[0]);
private byte[] bytes;
public MessageSignature(byte[] bytes) {
this.bytes = bytes;
}
public byte[] getBytes() {
return bytes;
}
public MessageSignature(DataInputStream in) throws IOException {
this.bytes = new byte[DataTypeIO.readVarInt(in)];
in.readFully(bytes);
}
public void write(DataOutputStream out) throws IOException {
out.write(this.bytes.length);
out.write(this.bytes);
}
public boolean isEmpty() {
return this.bytes.length == 0;
}
public ByteBuffer asByteBuffer() {
return !this.isEmpty() ? ByteBuffer.wrap(this.bytes) : null;
}
public boolean equals(Object object) {
boolean flag;
if (this != object) {
label22:
{
if (object instanceof MessageSignature) {
MessageSignature messagesignature = (MessageSignature) object;
if (Arrays.equals(this.bytes, messagesignature.bytes)) {
break label22;
}
}
flag = false;
return flag;
}
}
flag = true;
return flag;
}
public int hashCode() {
return Arrays.hashCode(this.bytes);
}
public String toString() {
return !this.isEmpty() ? Base64.getEncoder().encodeToString(this.bytes) : "empty";
}
}

View File

@ -1,84 +0,0 @@
/*
* This file is part of Limbo.
*
* Copyright (C) 2022. LoohpJames <jamesloohp@gmail.com>
* Copyright (C) 2022. Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.loohp.limbo.utils;
import com.google.common.primitives.Longs;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Map;
public class NetworkEncryptionUtils {
public static class SignatureData {
public static final SignatureData NONE = new SignatureData(0L, new byte[0]);
private long salt;
private byte[] signature;
public SignatureData(long salt, byte[] signature) {
this.salt = salt;
this.signature = signature;
}
public SignatureData(DataInputStream in) throws IOException {
this.salt = in.readLong();
int length = DataTypeIO.readVarInt(in);
this.signature = new byte[length];
in.readFully(this.signature);
}
public boolean isSignaturePresent() {
return this.signature.length > 0;
}
public static void write(DataOutputStream out, SignatureData signatureData) throws IOException {
out.writeLong(signatureData.salt);
DataTypeIO.writeVarInt(out, signatureData.signature.length);
out.write(signatureData.signature);
}
public byte[] getSalt() {
return Longs.toByteArray(this.salt);
}
}
public static class ArgumentSignatures {
private long salt;
private Map<String, byte[]> signatures;
public ArgumentSignatures(long salt, Map<String, byte[]> signatures) {
this.salt = salt;
this.signatures = signatures;
}
public long getSalt() {
return salt;
}
public Map<String, byte[]> getSignatures() {
return signatures;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -12,44 +12,43 @@
"PacketLoginOutPluginMessaging": "0x04"
},
"PlayIn": {
"0x11": "PacketPlayInKeepAlive",
"0x03": "ServerboundChatCommandPacket",
"0x04": "PacketPlayInChat",
"0x14": "PacketPlayInPositionAndLook",
"0x13": "PacketPlayInPosition",
"0x15": "PacketPlayInRotation",
"0x0C": "PacketPlayInPluginMessaging",
"0x08": "PacketPlayInTabComplete",
"0x27": "PacketPlayInHeldItemChange",
"0x23": "PacketPlayInResourcePackStatus"
"0x12": "PacketPlayInKeepAlive",
"0x04": "ServerboundChatCommandPacket",
"0x05": "PacketPlayInChat",
"0x15": "PacketPlayInPositionAndLook",
"0x14": "PacketPlayInPosition",
"0x16": "PacketPlayInRotation",
"0x0D": "PacketPlayInPluginMessaging",
"0x09": "PacketPlayInTabComplete",
"0x28": "PacketPlayInHeldItemChange",
"0x24": "PacketPlayInResourcePackStatus"
},
"PlayOut": {
"PacketPlayOutLogin": "0x23",
"PacketPlayOutPositionAndLook": "0x36",
"PacketPlayOutSpawnPosition": "0x4A",
"ClientboundPlayerChatPacket": "0x30",
"ClientboundSystemChatPacket": "0x5F",
"PacketPlayOutPlayerAbilities": "0x2F",
"ClientboundLevelChunkWithLightPacket": "0x1F",
"PacketPlayOutUnloadChunk": "0x1A",
"PacketPlayOutKeepAlive": "0x1E",
"PacketPlayOutPlayerInfo": "0x34",
"PacketPlayOutUpdateViewPosition": "0x48",
"PacketPlayOutDisconnect": "0x17",
"PacketPlayOutPluginMessaging": "0x15",
"PacketPlayOutLogin": "0x25",
"PacketPlayOutPositionAndLook": "0x39",
"PacketPlayOutSpawnPosition": "0x4D",
"ClientboundSystemChatPacket": "0x62",
"PacketPlayOutPlayerAbilities": "0x31",
"ClientboundLevelChunkWithLightPacket": "0x21",
"PacketPlayOutUnloadChunk": "0x1C",
"PacketPlayOutKeepAlive": "0x20",
"PacketPlayOutPlayerInfo": "0x37",
"PacketPlayOutUpdateViewPosition": "0x4B",
"PacketPlayOutDisconnect": "0x19",
"PacketPlayOutPluginMessaging": "0x16",
"PacketPlayOutTabComplete": "0x0E",
"PacketPlayOutDeclareCommands": "0x0F",
"PacketPlayOutRespawn": "0x3B",
"PacketPlayOutGameState": "0x1B",
"PacketPlayOutEntityDestroy": "0x38",
"PacketPlayOutEntityMetadata": "0x4D",
"PacketPlayOutRespawn": "0x3E",
"PacketPlayOutGameState": "0x1D",
"PacketPlayOutEntityDestroy": "0x3B",
"PacketPlayOutEntityMetadata": "0x50",
"PacketPlayOutSpawnEntity": "0x00",
"PacketPlayOutHeldItemChange": "0x47",
"PacketPlayOutPlayerListHeaderFooter": "0x60",
"PacketPlayOutResourcePackSend": "0x3A",
"ClientboundSetTitlesAnimationPacket": "0x5B",
"ClientboundSetTitleTextPacket": "0x5A",
"ClientboundSetSubtitleTextPacket": "0x58",
"PacketPlayOutHeldItemChange": "0x4A",
"PacketPlayOutPlayerListHeaderFooter": "0x63",
"PacketPlayOutResourcePackSend": "0x3D",
"ClientboundSetTitlesAnimationPacket": "0x5E",
"ClientboundSetTitleTextPacket": "0x5D",
"ClientboundSetSubtitleTextPacket": "0x5B",
"ClientboundClearTitlesPacket": "0x0D"
},
"StatusIn": {

View File

@ -4302,47 +4302,53 @@
"minecraft:item_interact_start": {
"protocol_id": 29
},
"minecraft:lightning_strike": {
"minecraft:jukebox_play": {
"protocol_id": 30
},
"minecraft:note_block_play": {
"minecraft:jukebox_stop_play": {
"protocol_id": 31
},
"minecraft:piston_contract": {
"minecraft:lightning_strike": {
"protocol_id": 32
},
"minecraft:piston_extend": {
"minecraft:note_block_play": {
"protocol_id": 33
},
"minecraft:prime_fuse": {
"minecraft:piston_contract": {
"protocol_id": 34
},
"minecraft:projectile_land": {
"minecraft:piston_extend": {
"protocol_id": 35
},
"minecraft:projectile_shoot": {
"minecraft:prime_fuse": {
"protocol_id": 36
},
"minecraft:sculk_sensor_tendrils_clicking": {
"minecraft:projectile_land": {
"protocol_id": 37
},
"minecraft:shear": {
"minecraft:projectile_shoot": {
"protocol_id": 38
},
"minecraft:shriek": {
"minecraft:sculk_sensor_tendrils_clicking": {
"protocol_id": 39
},
"minecraft:splash": {
"minecraft:shear": {
"protocol_id": 40
},
"minecraft:step": {
"minecraft:shriek": {
"protocol_id": 41
},
"minecraft:swim": {
"minecraft:splash": {
"protocol_id": 42
},
"minecraft:teleport": {
"minecraft:step": {
"protocol_id": 43
},
"minecraft:swim": {
"protocol_id": 44
},
"minecraft:teleport": {
"protocol_id": 45
}
},
"protocol_id": 0