Skip to content
This repository was archived by the owner on Jan 30, 2025. It is now read-only.

Commit 710daac

Browse files
committed
Add support for FTBRanks reformatted messages.
Fixes #1
1 parent 2b270b3 commit 710daac

File tree

4 files changed

+78
-37
lines changed

4 files changed

+78
-37
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ apply plugin: 'org.spongepowered.mixin'
3333

3434

3535
//Build variables
36-
version = "1.1.1"
36+
version = "1.1.2"
3737
group = "lv.id.bonne.vhdiscord"
3838
archivesBaseName = "VaultHuntersDiscordIntegration"
3939

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# This is required to provide enough memory for the Minecraft decompilation process.
33
org.gradle.jvmargs=-Xmx3G
44
org.gradle.daemon=false
5-
changelog=Upgraded to VaultHunters update 9
5+
changelog=Added FTBRanks message formatting support
66
releaseType = BETA
77
mcVersion = 1.18.2
88
vhVersion=4514035

src/main/java/lv/id/bonne/vhdiscord/dcintegration/mixin/MixinForgeMessageUtils.java

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -62,27 +62,47 @@ public static MessageEmbed genItemStackEmbedIfAvailable(final Component componen
6262

6363
final JsonObject json = JsonParser.parseString(Component.Serializer.toJson(component)).getAsJsonObject();
6464

65-
if (json.has("with"))
65+
if (json.has("with") && json.get("with").isJsonArray())
6666
{
67-
final JsonArray withArray = json.getAsJsonArray("with");
67+
// This is how quarks shares items in chat.
68+
return MixinForgeMessageUtils.searchAndParseArray(json.getAsJsonArray("with"));
69+
}
70+
else if (json.has("extra") && json.get("extra").isJsonArray())
71+
{
72+
// This is how FTBRank shares items in chat.
73+
return MixinForgeMessageUtils.searchAndParseArray(json.getAsJsonArray("extra"));
74+
}
75+
else
76+
{
77+
return null;
78+
}
79+
}
80+
6881

69-
for (JsonElement object : withArray)
82+
/**
83+
* This method search for "show_item" hoverEvent and crafts MessageEmbed for VaultHunters items
84+
* from it.
85+
* @param array of json objects.
86+
* @return MessageEmbed text for item, or null.
87+
*/
88+
private static MessageEmbed searchAndParseArray(JsonArray array)
89+
{
90+
for (JsonElement object : array)
91+
{
92+
if (object instanceof JsonObject singleElement)
7093
{
71-
if (object instanceof JsonObject singleElement)
94+
if (singleElement.has("hoverEvent"))
7295
{
73-
if (singleElement.has("hoverEvent"))
74-
{
75-
final JsonObject hoverEvent = singleElement.getAsJsonObject("hoverEvent");
96+
final JsonObject hoverEvent = singleElement.getAsJsonObject("hoverEvent");
7697

77-
if (hoverEvent.has("action") &&
78-
hoverEvent.get("action").getAsString().equals("show_item") &&
79-
hoverEvent.has("contents"))
98+
if (hoverEvent.has("action") &&
99+
hoverEvent.get("action").getAsString().equals("show_item") &&
100+
hoverEvent.has("contents"))
101+
{
102+
if (hoverEvent.getAsJsonObject("contents").has("tag"))
80103
{
81-
if (hoverEvent.getAsJsonObject("contents").has("tag"))
82-
{
83-
return MixinForgeMessageUtils.parseJsonArgs(
84-
hoverEvent.getAsJsonObject("contents").getAsJsonObject());
85-
}
104+
return MixinForgeMessageUtils.parseJsonArgs(
105+
hoverEvent.getAsJsonObject("contents").getAsJsonObject());
86106
}
87107
}
88108
}

src/main/java/lv/id/bonne/vhdiscord/mc2discord/mixin/MixinEvents.java

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public class MixinEvents
7070
@Overwrite(remap = false)
7171
public static void onMinecraftChatMessageEvent(ServerChatEvent event)
7272
{
73-
boolean messageParsed = false;
73+
boolean messageParsed;
7474

7575
final net.minecraft.network.chat.Component msg = event.getComponent();
7676
final JsonObject json = JsonParser.parseString(Component.Serializer.toJson(msg)).getAsJsonObject();
@@ -79,37 +79,58 @@ public static void onMinecraftChatMessageEvent(ServerChatEvent event)
7979
event.getPlayer().getDisplayName().getString(),
8080
event.getPlayer().getGameProfile().getId());
8181

82-
if (json.has("with"))
82+
if (json.has("with") && json.get("with").isJsonArray())
8383
{
84-
final JsonArray withArray = json.getAsJsonArray("with");
84+
messageParsed = MixinEvents.searchAndParseArray(player, json.getAsJsonArray("with"));
85+
}
86+
else if (json.has("extra") && json.get("extra").isJsonArray())
87+
{
88+
messageParsed = MixinEvents.searchAndParseArray(player, json.getAsJsonArray("extra"));
89+
}
90+
else
91+
{
92+
messageParsed = false;
93+
}
94+
95+
if (!messageParsed)
96+
{
97+
MinecraftEvents.onMinecraftChatMessageEvent(event.getMessage(), player);
98+
}
99+
}
100+
85101

86-
for (JsonElement object : withArray)
102+
/**
103+
* This method search for "show_item" hoverEvent and crafts MessageEmbed for VaultHunters items
104+
* from it.
105+
* @param player Player who sends the chat message.
106+
* @param array of json objects.
107+
* @return MessageEmbed text for item, or null.
108+
*/
109+
private static boolean searchAndParseArray(Player player, JsonArray array)
110+
{
111+
for (JsonElement object : array)
112+
{
113+
if (object instanceof JsonObject singleElement)
87114
{
88-
if (object instanceof JsonObject singleElement)
115+
if (singleElement.has("hoverEvent"))
89116
{
90-
if (singleElement.has("hoverEvent"))
91-
{
92-
final JsonObject hoverEvent = singleElement.getAsJsonObject("hoverEvent");
117+
final JsonObject hoverEvent = singleElement.getAsJsonObject("hoverEvent");
93118

94-
if (hoverEvent.has("action") &&
95-
hoverEvent.get("action").getAsString().equals("show_item") &&
96-
hoverEvent.has("contents"))
119+
if (hoverEvent.has("action") &&
120+
hoverEvent.get("action").getAsString().equals("show_item") &&
121+
hoverEvent.has("contents"))
122+
{
123+
if (hoverEvent.getAsJsonObject("contents").has("tag"))
97124
{
98-
if (hoverEvent.getAsJsonObject("contents").has("tag"))
99-
{
100-
messageParsed = MixinEvents.parseAndSendMessage(player,
101-
hoverEvent.getAsJsonObject("contents").getAsJsonObject());
102-
}
125+
return MixinEvents.parseAndSendMessage(player,
126+
hoverEvent.getAsJsonObject("contents").getAsJsonObject());
103127
}
104128
}
105129
}
106130
}
107131
}
108132

109-
if (!messageParsed)
110-
{
111-
MinecraftEvents.onMinecraftChatMessageEvent(event.getMessage(), player);
112-
}
133+
return false;
113134
}
114135

115136

0 commit comments

Comments
 (0)