|
|
|
@ -47,7 +47,7 @@ import net.kyori.adventure.nbt.CompoundBinaryTag;
|
|
|
|
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
|
|
|
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
|
|
|
import net.kyori.adventure.text.serializer.json.JSONOptions;
|
|
|
|
import net.kyori.adventure.text.serializer.json.JSONOptions;
|
|
|
|
import net.kyori.adventure.text.serializer.json.legacyimpl.NBTLegacyHoverEventSerializer;
|
|
|
|
import net.kyori.adventure.text.serializer.json.legacyimpl.NBTLegacyHoverEventSerializer;
|
|
|
|
import net.kyori.option.OptionState;
|
|
|
|
import net.kyori.option.OptionSchema;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Utilities for writing and reading data in the Minecraft protocol.
|
|
|
|
* Utilities for writing and reading data in the Minecraft protocol.
|
|
|
|
@ -60,10 +60,10 @@ public enum ProtocolUtils {
|
|
|
|
.downsampleColors()
|
|
|
|
.downsampleColors()
|
|
|
|
.legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get())
|
|
|
|
.legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get())
|
|
|
|
.options(
|
|
|
|
.options(
|
|
|
|
OptionState.optionState()
|
|
|
|
OptionSchema.globalSchema().stateBuilder()
|
|
|
|
// before 1.16
|
|
|
|
// before 1.16
|
|
|
|
.value(JSONOptions.EMIT_RGB, Boolean.FALSE)
|
|
|
|
.value(JSONOptions.EMIT_RGB, Boolean.FALSE)
|
|
|
|
.value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.LEGACY_ONLY)
|
|
|
|
.value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.VALUE_FIELD)
|
|
|
|
// before 1.20.3
|
|
|
|
// before 1.20.3
|
|
|
|
.value(JSONOptions.EMIT_COMPACT_TEXT_COMPONENT, Boolean.FALSE)
|
|
|
|
.value(JSONOptions.EMIT_COMPACT_TEXT_COMPONENT, Boolean.FALSE)
|
|
|
|
.value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_ID_AS_INT_ARRAY, Boolean.FALSE)
|
|
|
|
.value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_ID_AS_INT_ARRAY, Boolean.FALSE)
|
|
|
|
@ -75,10 +75,11 @@ public enum ProtocolUtils {
|
|
|
|
GsonComponentSerializer.builder()
|
|
|
|
GsonComponentSerializer.builder()
|
|
|
|
.legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get())
|
|
|
|
.legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get())
|
|
|
|
.options(
|
|
|
|
.options(
|
|
|
|
OptionState.optionState()
|
|
|
|
OptionSchema.globalSchema().stateBuilder()
|
|
|
|
// after 1.16
|
|
|
|
// after 1.16
|
|
|
|
.value(JSONOptions.EMIT_RGB, Boolean.TRUE)
|
|
|
|
.value(JSONOptions.EMIT_RGB, Boolean.TRUE)
|
|
|
|
.value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.MODERN_ONLY)
|
|
|
|
.value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.CAMEL_CASE)
|
|
|
|
|
|
|
|
.value(JSONOptions.EMIT_CLICK_EVENT_TYPE, JSONOptions.ClickEventValueMode.CAMEL_CASE)
|
|
|
|
// before 1.20.3
|
|
|
|
// before 1.20.3
|
|
|
|
.value(JSONOptions.EMIT_COMPACT_TEXT_COMPONENT, Boolean.FALSE)
|
|
|
|
.value(JSONOptions.EMIT_COMPACT_TEXT_COMPONENT, Boolean.FALSE)
|
|
|
|
.value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_ID_AS_INT_ARRAY, Boolean.FALSE)
|
|
|
|
.value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_ID_AS_INT_ARRAY, Boolean.FALSE)
|
|
|
|
@ -86,17 +87,36 @@ public enum ProtocolUtils {
|
|
|
|
.build()
|
|
|
|
.build()
|
|
|
|
)
|
|
|
|
)
|
|
|
|
.build();
|
|
|
|
.build();
|
|
|
|
|
|
|
|
private static final GsonComponentSerializer PRE_1_21_5_SERIALIZER =
|
|
|
|
|
|
|
|
GsonComponentSerializer.builder()
|
|
|
|
|
|
|
|
.legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get())
|
|
|
|
|
|
|
|
.options(
|
|
|
|
|
|
|
|
OptionSchema.globalSchema().stateBuilder()
|
|
|
|
|
|
|
|
// after 1.16
|
|
|
|
|
|
|
|
.value(JSONOptions.EMIT_RGB, Boolean.TRUE)
|
|
|
|
|
|
|
|
.value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.CAMEL_CASE)
|
|
|
|
|
|
|
|
.value(JSONOptions.EMIT_CLICK_EVENT_TYPE, JSONOptions.ClickEventValueMode.CAMEL_CASE)
|
|
|
|
|
|
|
|
// after 1.20.3
|
|
|
|
|
|
|
|
.value(JSONOptions.EMIT_COMPACT_TEXT_COMPONENT, Boolean.TRUE)
|
|
|
|
|
|
|
|
.value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_ID_AS_INT_ARRAY, Boolean.TRUE)
|
|
|
|
|
|
|
|
.value(JSONOptions.VALIDATE_STRICT_EVENTS, Boolean.TRUE)
|
|
|
|
|
|
|
|
.build()
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
.build();
|
|
|
|
private static final GsonComponentSerializer MODERN_SERIALIZER =
|
|
|
|
private static final GsonComponentSerializer MODERN_SERIALIZER =
|
|
|
|
GsonComponentSerializer.builder()
|
|
|
|
GsonComponentSerializer.builder()
|
|
|
|
.legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get())
|
|
|
|
.legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get())
|
|
|
|
.options(
|
|
|
|
.options(
|
|
|
|
OptionState.optionState()
|
|
|
|
OptionSchema.globalSchema().stateBuilder()
|
|
|
|
// after 1.16
|
|
|
|
// after 1.16
|
|
|
|
.value(JSONOptions.EMIT_RGB, Boolean.TRUE)
|
|
|
|
.value(JSONOptions.EMIT_RGB, Boolean.TRUE)
|
|
|
|
.value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.MODERN_ONLY)
|
|
|
|
.value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.SNAKE_CASE)
|
|
|
|
|
|
|
|
.value(JSONOptions.EMIT_CLICK_EVENT_TYPE, JSONOptions.ClickEventValueMode.SNAKE_CASE)
|
|
|
|
// after 1.20.3
|
|
|
|
// after 1.20.3
|
|
|
|
.value(JSONOptions.EMIT_COMPACT_TEXT_COMPONENT, Boolean.TRUE)
|
|
|
|
.value(JSONOptions.EMIT_COMPACT_TEXT_COMPONENT, Boolean.TRUE)
|
|
|
|
.value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_ID_AS_INT_ARRAY, Boolean.TRUE)
|
|
|
|
.value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_ID_AS_INT_ARRAY, Boolean.TRUE)
|
|
|
|
|
|
|
|
// after 1.21.5
|
|
|
|
|
|
|
|
.value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_KEY_AS_TYPE_AND_UUID_AS_ID, Boolean.FALSE)
|
|
|
|
.value(JSONOptions.VALIDATE_STRICT_EVENTS, Boolean.TRUE)
|
|
|
|
.value(JSONOptions.VALIDATE_STRICT_EVENTS, Boolean.TRUE)
|
|
|
|
.build()
|
|
|
|
.build()
|
|
|
|
)
|
|
|
|
)
|
|
|
|
@ -713,9 +733,12 @@ public enum ProtocolUtils {
|
|
|
|
* @return the appropriate {@link GsonComponentSerializer}
|
|
|
|
* @return the appropriate {@link GsonComponentSerializer}
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public static GsonComponentSerializer getJsonChatSerializer(ProtocolVersion version) {
|
|
|
|
public static GsonComponentSerializer getJsonChatSerializer(ProtocolVersion version) {
|
|
|
|
if (version.noLessThan(ProtocolVersion.MINECRAFT_1_20_3)) {
|
|
|
|
if (version.noLessThan(ProtocolVersion.MINECRAFT_1_21_5)) {
|
|
|
|
return MODERN_SERIALIZER;
|
|
|
|
return MODERN_SERIALIZER;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (version.noLessThan(ProtocolVersion.MINECRAFT_1_20_3)) {
|
|
|
|
|
|
|
|
return PRE_1_21_5_SERIALIZER;
|
|
|
|
|
|
|
|
}
|
|
|
|
if (version.noLessThan(ProtocolVersion.MINECRAFT_1_16)) {
|
|
|
|
if (version.noLessThan(ProtocolVersion.MINECRAFT_1_16)) {
|
|
|
|
return PRE_1_20_3_SERIALIZER;
|
|
|
|
return PRE_1_20_3_SERIALIZER;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|