Skip to content

Commit 8e060bd

Browse files
committed
feat: refactor and add /cguild command
1 parent 5f6b237 commit 8e060bd

15 files changed

Lines changed: 339 additions & 141 deletions

File tree

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,9 @@ N/A
3333
### 手順
3434

3535
1. Mod Menuが入ってる場合は設定画面を使用可能、それ以外の場合はゲーム内で`/reconnectinterchat <apiキー>`で可能
36+
37+
## Building
38+
39+
For `blueberry-*` projects, please do `gradlew shadowJar`.
40+
41+
For `fabric-*` projects, please do `gradlew build`. (don't use `-all` jars!)

blueberry-1.20/build.gradle.kts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,14 @@ blueberry {
1919
apiVersion.set("2.0.0-SNAPSHOT")
2020
}
2121

22-
repositories {
23-
// mavenLocal()
24-
mavenCentral()
25-
maven { url = uri("https://repo.azisaba.net/repository/maven-public/") }
26-
maven { url = uri("https://libraries.minecraft.net/") }
27-
maven { url = uri("https://repo.blueberry.net/repository/maven-public/") }
28-
}
29-
3022
dependencies {
3123
blueberry()
32-
implementation("org.java-websocket:Java-WebSocket:1.5.4")
24+
implementation(project(":common"))
3325
}
3426

3527
tasks {
3628
shadowJar {
29+
relocate("net.kyori", "net.azisaba.interchatmod.lib.net.kyori")
3730
relocate("org.java_websocket", "net.azisaba.interchatmod.lib.org.java_websocket")
3831
}
3932
}

blueberry-1.20/src/main/java/net/azisaba/interchatmod/blueberry/Mod.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.google.gson.JsonElement;
66
import com.google.gson.JsonObject;
77
import net.azisaba.interchatmod.blueberry.commands.GuildChatCommand;
8+
import net.azisaba.interchatmod.blueberry.commands.GuildCommand;
89
import net.azisaba.interchatmod.blueberry.commands.GuildFocusCommand;
910
import net.azisaba.interchatmod.blueberry.model.Guild;
1011
import net.blueberrymc.client.commands.ClientCommandManager;
@@ -42,6 +43,7 @@ public void onLoad() {
4243
ClientCommandManager.register("cgf", new GuildFocusCommand("cgf", this));
4344
ClientCommandManager.register("cgs", new GuildFocusCommand("cgs", this));
4445
ClientCommandManager.register("cg", new GuildChatCommand(this));
46+
ClientCommandManager.register("cguild", new GuildCommand(this));
4547
}
4648

4749
@Override
@@ -173,7 +175,7 @@ public void onChat(ClientLocalPlayerChatEvent e) {
173175
e.setMessage(e.getMessage().substring(1));
174176
return;
175177
}
176-
client.sendMessageToGuild(null, e.getMessage());
177178
e.setCancelled(true);
179+
client.sendMessageToGuild(null, e.getMessage());
178180
}
179181
}
Lines changed: 19 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,30 @@
11
package net.azisaba.interchatmod.blueberry;
22

3-
import com.google.gson.Gson;
4-
import com.google.gson.JsonNull;
5-
import com.google.gson.JsonObject;
6-
import com.google.gson.JsonPrimitive;
3+
import net.azisaba.interchatmod.common.AbstractWebSocketChatClient;
74
import net.blueberrymc.common.Blueberry;
85
import net.minecraft.client.Minecraft;
96
import net.minecraft.client.player.LocalPlayer;
107
import net.minecraft.network.chat.Component;
11-
import org.java_websocket.client.WebSocketClient;
12-
import org.java_websocket.handshake.ServerHandshake;
13-
import org.jetbrains.annotations.Nullable;
148

159
import java.net.URI;
1610

17-
public class WebSocketChatClient extends WebSocketClient {
18-
private final Gson gson = new Gson();
11+
public class WebSocketChatClient extends AbstractWebSocketChatClient {
1912
private final Mod mod;
2013
private final Minecraft minecraft;
21-
private long openAt;
2214

2315
public WebSocketChatClient(URI uri, Mod mod, Minecraft minecraft) {
2416
super(uri);
2517
this.mod = mod;
2618
this.minecraft = minecraft;
2719
}
2820

21+
@Override
22+
protected void sendJsonMessage(String json) {
23+
sendMessage(Component.Serializer.fromJson(json));
24+
}
25+
2926
private void sendMessage(Component component) {
27+
if (component == null) return;
3028
mod.getLogger().info("[WS] {}", component.getString());
3129
if (ICConfig.hideEverything) return;
3230
LocalPlayer player = minecraft.player;
@@ -35,65 +33,27 @@ private void sendMessage(Component component) {
3533
}
3634

3735
@Override
38-
public void onOpen(ServerHandshake handshakedata) {
39-
openAt = System.currentTimeMillis();
40-
auth(ICConfig.apiKey);
41-
mod.trySwitch();
42-
sendMessage(Component.literal("Connected to guild chat."));
36+
protected String getApiKey() {
37+
return ICConfig.apiKey;
4338
}
4439

4540
@Override
46-
public void onMessage(String message) {
47-
JsonObject obj = gson.fromJson(message, JsonObject.class);
48-
if (obj.has("message") && !Mod.isInAzisaba()) {
49-
sendMessage(Component.literal(obj.get("message").getAsString()));
50-
}
41+
protected boolean isInAzisaba() {
42+
return Mod.isInAzisaba();
5143
}
5244

5345
@Override
54-
public void onClose(int code, String reason, boolean remote) {
55-
mod.getLogger().info("Disconnected from server");
56-
if (System.currentTimeMillis() - openAt < 1000) {
57-
sendMessage(Component.literal("Disconnected from guild chat. Please check credentials and try reloading."));
58-
return;
59-
}
60-
if (remote) {
61-
sendMessage(Component.literal("Disconnected from guild chat, reconnecting after 15 seconds"));
62-
Blueberry.getUtil().getClientScheduler().runTaskLaterAsynchronously(mod, 1000 * 15, mod::reconnect);
63-
}
46+
protected void trySwitch() {
47+
mod.trySwitch();
6448
}
6549

6650
@Override
67-
public void onError(Exception ex) {
68-
mod.getLogger().error("WebSocket error", ex);
69-
}
70-
71-
public void auth(String key) {
72-
JsonObject obj = new JsonObject();
73-
obj.addProperty("type", "auth");
74-
obj.addProperty("key", key);
75-
send(gson.toJson(obj));
76-
}
77-
78-
public void switchServer(String server) {
79-
JsonObject obj = new JsonObject();
80-
obj.addProperty("type", "switch_server");
81-
obj.addProperty("server", server);
82-
send(gson.toJson(obj));
83-
}
84-
85-
public void selectGuild(long id) {
86-
JsonObject obj = new JsonObject();
87-
obj.addProperty("type", "select");
88-
obj.addProperty("guildId", id);
89-
send(gson.toJson(obj));
51+
protected void scheduleReconnect() {
52+
Blueberry.getUtil().getClientScheduler().runTaskLaterAsynchronously(mod, 1000 * 15, mod::reconnect);
9053
}
9154

92-
public void sendMessageToGuild(@Nullable Long guildId, String message) {
93-
JsonObject obj = new JsonObject();
94-
obj.addProperty("type", "message");
95-
obj.add("guildId", guildId == null ? JsonNull.INSTANCE : new JsonPrimitive(guildId));
96-
obj.addProperty("message", message);
97-
send(gson.toJson(obj));
55+
@Override
56+
public void onError(Exception ex) {
57+
mod.getLogger().error("WebSocket error", ex);
9858
}
9959
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package net.azisaba.interchatmod.blueberry.commands;
2+
3+
import com.mojang.brigadier.CommandDispatcher;
4+
import com.mojang.brigadier.arguments.StringArgumentType;
5+
import net.azisaba.interchatmod.blueberry.Mod;
6+
import net.blueberrymc.client.commands.ClientCommandHandler;
7+
import net.minecraft.commands.CommandSourceStack;
8+
import net.minecraft.commands.Commands;
9+
import org.jetbrains.annotations.NotNull;
10+
11+
public class GuildCommand implements ClientCommandHandler {
12+
private final Mod mod;
13+
14+
public GuildCommand(Mod mod) {
15+
this.mod = mod;
16+
}
17+
18+
@Override
19+
public void register(@NotNull CommandDispatcher<CommandSourceStack> commandDispatcher) {
20+
commandDispatcher.register(
21+
Commands.literal("cguild")
22+
.then(Commands.literal("invite")
23+
.then(Commands.argument("player", StringArgumentType.word())
24+
.executes(ctx -> executeInvite(StringArgumentType.getString(ctx, "player")))
25+
)
26+
)
27+
.then(Commands.literal("accept")
28+
.then(Commands.argument("guild", StringArgumentType.word())
29+
.executes(ctx -> executeRespondInvite(StringArgumentType.getString(ctx, "guild"), true))
30+
)
31+
)
32+
.then(Commands.literal("reject")
33+
.then(Commands.argument("guild", StringArgumentType.word())
34+
.executes(ctx -> executeRespondInvite(StringArgumentType.getString(ctx, "guild"), false))
35+
)
36+
)
37+
.then(Commands.literal("nick")
38+
.executes(ctx -> executeNick(null))
39+
.then(Commands.argument("nickname", StringArgumentType.greedyString())
40+
.executes(ctx -> executeNick(StringArgumentType.getString(ctx, "nickname")))
41+
)
42+
)
43+
);
44+
}
45+
46+
private int executeInvite(String player) {
47+
mod.client.invite(player);
48+
return 1;
49+
}
50+
51+
private int executeRespondInvite(String guildName, boolean accept) {
52+
mod.client.respondInvite(guildName, accept);
53+
return 1;
54+
}
55+
56+
private int executeNick(String nickname) {
57+
mod.client.nick(nickname);
58+
return 1;
59+
}
60+
}

build.gradle.kts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
11
plugins {
22
java
3+
`java-library`
34
id("com.github.johnrengelman.shadow") version "8.1.1"
45
}
56

67
allprojects {
78
apply {
89
plugin("java")
10+
plugin("java-library")
911
plugin("com.github.johnrengelman.shadow")
1012
}
1113

1214
group = "net.azisaba.interchatmod"
13-
version = "0.0.1"
15+
version = "0.1.0"
16+
17+
repositories {
18+
// mavenLocal()
19+
mavenCentral()
20+
maven { url = uri("https://repo.azisaba.net/repository/maven-public/") }
21+
maven { url = uri("https://libraries.minecraft.net/") }
22+
maven { url = uri("https://repo.blueberrymc.net/repository/maven-public/") }
23+
}
1424

1525
tasks {
1626
compileJava {

common/build.gradle.kts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
java.toolchain.languageVersion.set(JavaLanguageVersion.of(8))
2+
3+
val adventureVersion by project.properties
4+
5+
dependencies {
6+
api("net.kyori:adventure-api:$adventureVersion")
7+
api("net.kyori:adventure-text-serializer-legacy:$adventureVersion")
8+
api("net.kyori:adventure-text-serializer-gson:$adventureVersion")
9+
api("org.java-websocket:Java-WebSocket:1.5.4")
10+
}

0 commit comments

Comments
 (0)