Skip to content

Commit 2adbf72

Browse files
Merge pull request #7 from NeonAngelThreads/1.3.1
1.3.1
2 parents abbc549 + 80245ed commit 2adbf72

36 files changed

+401
-154
lines changed

README.md

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
## Screenshots:
6161
### Running on Windows server 2019:
6262
<p align="center">
63-
<img src="assets/dolphinbot1.png">
63+
<img src="assets/dev2.png">
6464
</p>
6565

6666
## Introduction:
@@ -82,10 +82,13 @@
8282
- You can send in-game messages or execute commands form the dolphin bot terminal.
8383
- Built-in commands:
8484
-
85-
| Terminal Commands | Description |
86-
|----------------------------------------------|----------------------------------|
87-
| `reload <Plugin Name> <bot name (optional)>` | Hot-reloading a specified plugin |
88-
| `load <PLugin Name> <bot name (optional)>` | Hot-loading a specified plugin |
85+
| Terminal Commands | Description |
86+
|:--------------------------------------------:|-----------------------------------------------------|
87+
| `reload <Plugin Name> <bot name (optional)>` | Hot-reloading a specified plugin |
88+
| `load <PLugin Name> <bot name (optional)>` | Hot-loading a specified plugin |
89+
| `respawn` | Respawn the bot when in game. |
90+
| `license` (`l`, `lic`) | Show the license on the terminal |
91+
| `help` (`h`, `?`) | Show the Command menu and usages for each command |
8992

9093
- For these commands, you can press `TAB` to complete automatically.
9194
## Getting Started
@@ -281,14 +284,14 @@ each profile name, should be split with ";".
281284
Every single config option is equilibrium to option that defined by command line, and all config value including
282285
unrecognized option will be parsed, so you can add your customize config options.
283286
An example for configuring this file:
284-
```json
285-
{
286-
"server": "2b2t.xin",
287-
"port": 25565,
287+
```json
288+
{
289+
"server": "2b2t.xin",
290+
"port": 25565,
288291
"auto-reconnect": true,
289292
"packet-filter-delay": 0,
290293
"msg-send-delay": 0,
291-
"max-chunk-view": 12,
294+
"max-chunk-view": 12,
292295
"anti-AFK": true,
293296
"language": "zh",
294297
"connect-timing-out": 2000,
@@ -301,7 +304,7 @@ each profile name, should be split with ";".
301304
"enable-skin-recorder": false
302305
}
303306
}
304-
```
307+
```
305308
### Config Options:
306309
307310
| Config | Description |

assets/dev2.png

901 KB
Loading

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
<groupId>org.angellock.impl</groupId>
2424
<artifactId>DolphinBot</artifactId>
25-
<version>1.3.0-ALPHA-full</version>
25+
<version>1.3.1-RELEASE-full</version>
2626
<packaging>
2727
jar
2828
</packaging>

src/main/java/org/angellock/impl/AbstractRobot.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@
2222
import lombok.Setter;
2323
import org.angellock.impl.commands.CommandSpec;
2424
import org.angellock.impl.events.IConnectListener;
25-
import org.angellock.impl.events.IDisconnectListener;
26-
import org.angellock.impl.events.TranslatableBundle;
27-
import org.angellock.impl.events.handlers.*;
25+
import org.angellock.impl.events.handlers.ChatCommandHandler;
26+
import org.angellock.impl.events.handlers.DisconnectReasonHandler;
27+
import org.angellock.impl.events.handlers.PlayerEmergeHandler;
28+
import org.angellock.impl.events.handlers.ServerChatCommandHandler;
2829
import org.angellock.impl.events.packets.EntityMovePacket;
2930
import org.angellock.impl.events.packets.PlayerPositionPacket;
3031
import org.angellock.impl.events.packets.debugger.PacketDebugger;
@@ -34,11 +35,11 @@
3435
import org.angellock.impl.managers.ConfigManager;
3536
import org.angellock.impl.managers.ProfileObject;
3637
import org.angellock.impl.managers.TerminalCommandManager;
37-
import org.angellock.impl.plugin.Plugin;
38+
import org.angellock.impl.plugin.AbstractPlugin;
3839
import org.angellock.impl.plugin.PluginManager;
3940
import org.angellock.impl.plugin.SessionProvider;
4041
import org.angellock.impl.util.ConsoleTokens;
41-
import org.angellock.impl.util.PlainTextSerializer;
42+
import org.angellock.impl.util.TranslatableUtil;
4243
import org.geysermc.mcprotocollib.network.BuiltinFlags;
4344
import org.geysermc.mcprotocollib.network.ProxyInfo;
4445
import org.geysermc.mcprotocollib.network.Session;
@@ -59,6 +60,7 @@
5960

6061
public abstract class AbstractRobot implements ISendable, SessionProvider, IOptionalProcedures {
6162
protected TcpClientSession serverSession;
63+
@Getter
6264
protected static final Logger log = LoggerFactory.getLogger(ConsoleTokens.colorizeText("&aDolphinBot"));
6365
private final ScheduledExecutorService reconnectScheduler = Executors.newScheduledThreadPool(1);
6466
@Getter
@@ -117,7 +119,8 @@ public AbstractRobot withPassword(String password){
117119
this.infoHelper.setPassword(password);
118120
return this;
119121
}
120-
public AbstractRobot withDefaultPlugins(List<Plugin> plugins){
122+
123+
public AbstractRobot withDefaultPlugins(List<AbstractPlugin> plugins) {
121124
this.pluginManager.getDefaultPlugins().addAll(plugins);
122125
return this;
123126
}
@@ -187,19 +190,19 @@ public void connect(){
187190
catch (InterruptedException e){
188191
throw new RuntimeException(e);
189192
} catch (IllegalArgumentException e) {
190-
TranslatableBundle.warnTranslatableOf(EnumSystemEvents.PACKET_ERROR, e);
193+
TranslatableUtil.warnTranslatableOf(EnumSystemEvents.PACKET_ERROR, e);
191194
}
192195
}
193196
} finally {
194-
this.serverSession.disconnect("Interrupted");
197+
this.serverSession.disconnect("Connection was Interrupted");
195198
scheduleReconnect();
196199
}
197200
}
198201

199202
public abstract boolean canSendMessages();
200203

201204
public void scheduleReconnect() {
202-
TranslatableBundle.infoTranslatableOf(EnumSystemEvents.RECONNECT);
205+
TranslatableUtil.infoTranslatableOf(EnumSystemEvents.RECONNECT);
203206
try {
204207
Thread.sleep(this.config().getReconnectDelay());
205208
} catch (InterruptedException e) {

src/main/java/org/angellock/impl/ChatMessageManager.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import lombok.Getter;
2020
import org.angellock.impl.util.ConsoleTokens;
21+
import org.angellock.impl.util.TranslatableUtil;
2122
import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket;
2223
import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundChatCommandPacket;
2324
import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundChatPacket;
@@ -59,14 +60,18 @@ private boolean isCommand(String msg){
5960
private void sendMessagePacket(String message){
6061
if (!this.isCommand(message)) {
6162
MinecraftPacket msgPacket = new ServerboundChatPacket(message, Instant.now().toEpochMilli(), System.currentTimeMillis(), null, 0, new BitSet());
62-
log.info(ConsoleTokens.colorizeText("&7Sending in-game chat message: &b&l&o{}"), message);
63+
log.info(TranslatableUtil.getFormattedMessage(EnumSystemEvents.CHAT_MESSAGE_SEND, message));
6364
this.instance.sendPacket(msgPacket);
6465
} else {
65-
boolean valid = this.instance.commandManager.callCommand(message, instance);
66-
if(!valid){
67-
MinecraftPacket cmd = new ServerboundChatCommandPacket(message.replaceFirst("/", ""));
68-
log.info(ConsoleTokens.colorizeText("&6Sending chat Command: &b&l&o{}"), message);
69-
this.instance.sendPacket(cmd);
66+
try {
67+
boolean valid = this.instance.commandManager.callCommand(message, instance);
68+
if (!valid) {
69+
MinecraftPacket cmd = new ServerboundChatCommandPacket(message.replaceFirst("/", ""));
70+
log.info(TranslatableUtil.getFormattedMessage(EnumSystemEvents.CHAT_COMMAND_SEND, message));
71+
this.instance.sendPacket(cmd);
72+
}
73+
} catch (Exception e) {
74+
log.warn("An exception occurred: &7{}", e.getMessage());
7075
}
7176
}
7277
}

src/main/java/org/angellock/impl/EnumSystemEvents.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,39 @@
2121
@Getter
2222
public enum EnumSystemEvents {
2323
COMMAND_NOT_FOUND("command.notfound"),
24+
COMMAND_NAME("command.name"),
25+
COMMAND_ALIASES("command.aliases"),
26+
COMMAND_PROVIDER("command.provider"),
27+
COMMAND_USAGE("command.usage"),
28+
COMMAND_DESCRIPTION("command.description"),
29+
PLUGIN_LISTENER_LOAD("plugin.listener.load"),
30+
PLUGIN_LOAD("plugin.load"),
31+
PLUGIN_EVENT_HANDLER_LOAD("plugin.event.handler.load"),
32+
PLUGIN_DISABLE("plugin.disable"),
33+
PLUGIN_EVENT_HANDLER_DISABLE("plugin.event.handler.remove"),
2434
RECONNECT("server.reconnect"),
2535
CONNECT("server.connect"),
2636
DISCONNECT("server.disconnect"),
2737
PACKET_ERROR("packet.error"),
2838
DOLPHIN_TIMING_RESET("dolphin.timing.reset"),
2939
SERVER_PLAYER_GAMEMODE("server.player.gamemode"),
40+
3041
SERVER_WORLD_JOIN("server.world.join"),
42+
CHAT_MESSAGE_SEND("chat.message.send"),
43+
CHAT_COMMAND_SEND("chat.command.send"),
3144
SERVER_CONNECTION_ESTABLISHED("server.connection.established"),
3245
LOGIN_STATEMACHINE_TRANSIT("dolphin.statemachine.login.transit"),
46+
PLUGIN_LOAD_COMMANDS("plugin.load.command"),
47+
PLUGIN_LOAD_TERMINAL_COMMANDS("plugin.load.terminal.command"),
48+
PLUGIN_LOAD_COMPLETE("plugin.load.complete"),
3349
PLAYER_INFO_CRACKED("info.cracked"),
34-
PLAYER_INFO_ONLINE("info.online");
50+
PLAYER_INFO_ONLINE("info.online"),
51+
CHAT_COMMAND_DETECTED("chat.command.detected"),
52+
PROXY_CONFIG_INVALID("proxy.config.invalid"),
53+
DOLPHIN_BOTS_LOAD("dolphin.bot.load"),
54+
PROXY_CONFIG_LOAD("proxy.config.load"),
55+
CONFIG_FILE_LOADED("bot.config.file.loaded"),
56+
COMMANDLINE_LOADED("commandline.enabled");
3557

3658
private final String spaceName;
3759

src/main/java/org/angellock/impl/RobotPlayer.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717
package org.angellock.impl;
1818

1919
import lombok.Setter;
20-
import org.angellock.impl.events.TranslatableBundle;
2120
import org.angellock.impl.ingame.IPlayer;
2221
import org.angellock.impl.managers.ConfigManager;
2322
import org.angellock.impl.plugin.PluginManager;
2423
import org.angellock.impl.util.ConsoleTokens;
24+
import org.angellock.impl.util.TranslatableUtil;
2525
import org.angellock.impl.util.math.Position;
2626
import org.cloudburstmc.math.vector.Vector3i;
2727
import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction;
@@ -58,19 +58,19 @@ public boolean canSendMessages() {
5858

5959
@Override
6060
public void onJoin() {
61-
log.info(ConsoleTokens.colorizeText("&7[{}] &2Connection was established!"), this.getProfileName());
61+
log.info(TranslatableUtil.getFormattedMessage(EnumSystemEvents.SERVER_CONNECTION_ESTABLISHED, this.getProfileName()));
6262
}
6363

6464
@Override
6565
public void onQuit(String reason) {
6666
long millis = System.currentTimeMillis() - this.connectTime;
6767
log.info(ConsoleTokens.colorizeText("[{}] &7Session Duration: &f{}ms"), this.getProfileName(), millis);
68-
TranslatableBundle.infoTranslatableOf(EnumSystemEvents.DISCONNECT, reason);
68+
TranslatableUtil.infoTranslatableOf(EnumSystemEvents.DISCONNECT, reason);
6969
this.getPluginManager().disableAllPlugins(this);
7070
this.getSession().getChannel().close();
7171
this.getSession().getChannel().deregister();
7272
this.getSession().getChannel().closeFuture();
73-
TranslatableBundle.infoTranslatableOf(EnumSystemEvents.DOLPHIN_TIMING_RESET);
73+
TranslatableUtil.infoTranslatableOf(EnumSystemEvents.DOLPHIN_TIMING_RESET);
7474
}
7575

7676
@Override
@@ -81,7 +81,7 @@ public void onKicked() {
8181
@Override
8282
public void onPreLogin() {
8383
this.connectTime = System.currentTimeMillis();
84-
TranslatableBundle.infoTranslatableOf(EnumSystemEvents.CONNECT, this.config().getServer(), String.valueOf(this.config().getPort()));
84+
TranslatableUtil.infoTranslatableOf(EnumSystemEvents.CONNECT, this.config().getServer(), String.valueOf(this.config().getPort()));
8585
}
8686

8787
@Override

src/main/java/org/angellock/impl/Start.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.angellock.impl.managers.BotManager;
2525
import org.angellock.impl.managers.ConfigManager;
2626
import org.angellock.impl.util.ConsoleTokens;
27+
import org.angellock.impl.util.TranslatableUtil;
2728
import org.angellock.impl.win32terminal.AnsiEscapes;
2829
import org.jetbrains.annotations.Nullable;
2930
import org.jline.reader.LineReader;
@@ -95,7 +96,7 @@ public static void main(String[] args) {
9596
} else {
9697
AnsiEscapes.printArt(ARCHIVE_VERSION);
9798
config.printConfigSpec();
98-
log.info(ConsoleTokens.colorizeText("&8Loading bots..."));
99+
log.info(TranslatableUtil.getFormattedMessage(EnumSystemEvents.DOLPHIN_BOTS_LOAD));
99100
botManager.startAll();
100101
}
101102

@@ -104,23 +105,24 @@ public static void main(String[] args) {
104105
private static void getTerminal(AbstractRobot dolphinBot) {
105106
LineReader reader = AnsiEscapes.getReader();
106107
terminalInput = new Thread(() -> {
107-
try {
108-
while (true) {
108+
while (true) {
109+
try {
109110
String s = reader.readLine(ConsoleTokens.colorizeText("&lTerminal>&b"));
110111
ChatMessageManager messageManager = dolphinBot.getMessageManager();
111112
if (messageManager != null) {
112113
dolphinBot.getMessageManager().putMessage(s);
113114
}
115+
} catch (UserInterruptException w) {
116+
if (exit) {
117+
System.exit(0);
118+
} else {
119+
log.warn("To exit DolphinBot, press Ctrl + C again.");
120+
exit = true;
121+
}
122+
} catch (Throwable e) {
123+
e.printStackTrace();
124+
log.info(ConsoleTokens.colorizeText("&8Failed to send message: &7{}"), e.getMessage());
114125
}
115-
} catch (UserInterruptException w) {
116-
if (exit){
117-
System.exit(0);
118-
} else {
119-
log.warn("To exit DolphinBot, press Ctrl + C again.");
120-
exit = true;
121-
}
122-
} catch (Throwable e) {
123-
log.info(ConsoleTokens.colorizeText("&8Failed to send message: &7{}"), e.getLocalizedMessage());
124126
}
125127
});
126128
terminalInput.start();

src/main/java/org/angellock/impl/commands/AbstractBuilder.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,38 @@
1616

1717
package org.angellock.impl.commands;
1818

19+
import org.angellock.impl.plugin.AbstractPlugin;
20+
1921
public abstract class AbstractBuilder<T> {
2022
protected String commandName = "";
2123
protected String description;
24+
protected AbstractPlugin provider;
25+
26+
protected String usage;
2227

2328
protected String[] aliases = new String[0];
2429

30+
public AbstractBuilder<T> withName(String name) {
31+
this.commandName = name;
32+
return this;
33+
}
34+
35+
public AbstractBuilder<T> withUsage(String name) {
36+
this.usage = name;
37+
return this;
38+
}
39+
40+
public AbstractBuilder<T> withProvider(AbstractPlugin plugin) {
41+
this.provider = plugin;
42+
return this;
43+
}
44+
2545
public AbstractBuilder<T> withDescription(String description){
2646
this.description = description;
2747
return this;
2848
}
2949

30-
public AbstractBuilder<T> withAliases(String[] aliases){
50+
public AbstractBuilder<T> withAliases(String... aliases) {
3151
this.aliases = aliases;
3252
return this;
3353
}

src/main/java/org/angellock/impl/commands/AbstractCommand.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public abstract class AbstractCommand {
2727
@Getter
2828
protected final String name;
2929
protected ICommandAction action;
30+
@Getter
3031
@Setter
3132
protected String description;
3233
@Getter
@@ -47,10 +48,6 @@ public void setAliases(String[] aliases) {
4748
this.aliases = List.of(aliases);
4849
}
4950

50-
public String getDescription() {
51-
return description;
52-
}
53-
5451
public boolean isAnAliasOf(String alias) {
5552
return this.aliases.contains(alias);
5653
}

0 commit comments

Comments
 (0)