Skip to content

Commit 86beeb0

Browse files
committed
Properly pass registry lookup to text (de)serialization
Fixed complex messages (eg. with item hover event)
1 parent 1aa2230 commit 86beeb0

File tree

5 files changed

+17
-8
lines changed

5 files changed

+17
-8
lines changed

blockbot-api/src/main/java/io/github/quiltservertools/blockbotapi/sender/MessageSender.java

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.quiltservertools.blockbotapi.sender;
22

3+
import net.minecraft.registry.RegistryWrapper;
34
import net.minecraft.server.command.ServerCommandSource;
45
import net.minecraft.server.network.ServerPlayerEntity;
56
import net.minecraft.text.Text;
@@ -9,11 +10,13 @@ public class MessageSender {
910
private final Text name;
1011
private final Text displayName;
1112
private final MessageType type;
13+
private final RegistryWrapper.WrapperLookup wrapperLookup;
1214

13-
public MessageSender(Text name, Text displayName, @NotNull MessageType type) {
15+
public MessageSender(Text name, Text displayName, @NotNull MessageType type, RegistryWrapper.WrapperLookup wrapperLookup) {
1416
this.name = name;
1517
this.displayName = displayName;
1618
this.type = type;
19+
this.wrapperLookup = wrapperLookup;
1720
}
1821

1922
public static MessageSender of(ServerCommandSource commandSource, MessageType type) {
@@ -28,7 +31,8 @@ public static MessageSender of(ServerCommandSource commandSource, MessageType ty
2831
sender = new MessageSender(
2932
Text.literal(commandSource.getName()),
3033
commandSource.getDisplayName(),
31-
type
34+
type,
35+
commandSource.getRegistryManager()
3236
);
3337
}
3438
return sender;
@@ -47,6 +51,10 @@ public Text getDisplayName() {
4751
return displayName;
4852
}
4953

54+
public RegistryWrapper.WrapperLookup getWrapperLookup() {
55+
return wrapperLookup;
56+
}
57+
5058
public enum MessageType {
5159
REGULAR,
5260
EMOTE,

blockbot-api/src/main/java/io/github/quiltservertools/blockbotapi/sender/PlayerMessageSender.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class PlayerMessageSender extends MessageSender {
88
private final ServerPlayerEntity player;
99

1010
public PlayerMessageSender(ServerPlayerEntity player, MessageType type) {
11-
super(player.getName(), player.getDisplayName(), type);
11+
super(player.getName(), player.getDisplayName(), type, player.server.getRegistryManager());
1212
this.profile = player.getGameProfile();
1313
this.player = player;
1414
}

build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ allprojects {
8888
repositories {
8989
mavenCentral()
9090
maven("https://maven.nucleoid.xyz/")
91-
maven("https://maven.kotlindiscord.com/repository/maven-public/")
91+
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
9292
}
9393

9494
dependencies {

src/main/kotlin/io/github/quiltservertools/blockbotdiscord/extensions/BlockBotApiExtension.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ class BlockBotApiExtension : Extension(), Bot {
136136
val emojiString = EmojiParser.parseToAliases(message.content)
137137
var content: MutableText =
138138
if (config[ChatRelaySpec.convertMarkdown]) minecraftSerializer.serialize(emojiString)
139-
.toNative() else emojiString.literal()
139+
.toNative(server.registryManager) else emojiString.literal()
140140
content = convertEmojiToTranslatable(content)
141141
if (message.referencedMessage != null) {
142142
val reply = config.getReplyMsg(
@@ -285,7 +285,7 @@ class BlockBotApiExtension : Extension(), Bot {
285285

286286
override fun onChatMessage(sender: MessageSender, message: Text) {
287287
BlockBotDiscord.launch {
288-
var content = discordSerializer.serialize(message.toAdventure(), DiscordSerializerOptions(false, false, KeybindComponent::keybind, TranslatableComponent::key))
288+
var content = discordSerializer.serialize(message.toAdventure(sender.wrapperLookup), DiscordSerializerOptions(false, false, KeybindComponent::keybind, TranslatableComponent::key))
289289
if (config[ChatRelaySpec.escapeIngameMarkdown]) {
290290
content = MinecraftSerializer.INSTANCE.escapeMarkdown(content)
291291
}

src/main/kotlin/io/github/quiltservertools/blockbotdiscord/utility/Extensions.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import net.fabricmc.loader.api.FabricLoader
88
import net.kyori.adventure.text.Component
99
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer
1010
import net.minecraft.registry.DynamicRegistryManager
11+
import net.minecraft.registry.RegistryWrapper
1112
import net.minecraft.server.network.ServerPlayerEntity
1213
import net.minecraft.text.MutableText
1314
import net.minecraft.text.Text
@@ -24,8 +25,8 @@ fun Message.summary(): String {
2425

2526
fun GameProfile.getTextures() = Iterables.getFirst(this.properties.get("textures"), null)?.value
2627

27-
fun Component.toNative(): MutableText = Text.Serialization.fromJson(GsonComponentSerializer.gson().serialize(this), DynamicRegistryManager.EMPTY)?: Text.empty()
28+
fun Component.toNative(wrapperLookup: RegistryWrapper.WrapperLookup): MutableText = Text.Serialization.fromJson(GsonComponentSerializer.gson().serialize(this), DynamicRegistryManager.EMPTY)?: Text.empty()
2829

29-
fun Text.toAdventure() = GsonComponentSerializer.gson().deserialize(Text.Serialization.toJsonString(this, DynamicRegistryManager.EMPTY))
30+
fun Text.toAdventure(wrapperLookup: RegistryWrapper.WrapperLookup) = GsonComponentSerializer.gson().deserialize(Text.Serialization.toJsonString(this, wrapperLookup))
3031

3132
fun ServerPlayerEntity.isVanished() = FabricLoader.getInstance().isModLoaded("melius-vanish") && VanishAPI.isVanished(this)

0 commit comments

Comments
 (0)