Better config?

This commit is contained in:
Chipmunk 2023-03-07 20:37:24 -05:00
parent e30ed17c44
commit 22cbd28379
6 changed files with 57 additions and 71 deletions

View file

@ -1,6 +1,5 @@
package land.chipmunk.chipmunkbot; package land.chipmunk.chipmunkbot;
import com.github.steveice10.mc.auth.service.AuthenticationService;
import com.github.steveice10.mc.protocol.MinecraftProtocol; import com.github.steveice10.mc.protocol.MinecraftProtocol;
import com.github.steveice10.packetlib.ProxyInfo; import com.github.steveice10.packetlib.ProxyInfo;
import com.github.steveice10.packetlib.Session; import com.github.steveice10.packetlib.Session;
@ -12,17 +11,21 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import lombok.Getter; import lombok.Getter;
import land.chipmunk.chipmunkbot.plugins.*; import land.chipmunk.chipmunkbot.plugins.*;
import java.util.List;
public class ChipmunkBot extends Client { public class ChipmunkBot extends Client {
@Getter public final ChatPlugin chat = new ChatPlugin(this); @Getter public final ChatPlugin chat = new ChatPlugin(this);
@Getter public final QueryPlugin query = new QueryPlugin(this); @Getter public final QueryPlugin query = new QueryPlugin(this);
@Getter public final PlayerListPlugin playerList = new PlayerListPlugin(this); @Getter public final PlayerListPlugin playerList = new PlayerListPlugin(this);
@Getter public final CommandManager commandManager = new CommandManager(this); @Getter public final CommandManager commandManager = new CommandManager(this);
@Getter public final ChatCommandHandler chatCommandHandler = new ChatCommandHandler(this); @Getter public final ChatCommandHandler chatCommandHandler;
@Getter public final PositionManager position = new PositionManager(this); @Getter public final PositionManager position = new PositionManager(this);
@Getter public final CommandCore core = new CommandCore(this); @Getter public final CommandCore core = new CommandCore(this);
@Getter public final SelfCarePlugin selfCare = new SelfCarePlugin(this); @Getter public final SelfCarePlugin selfCare = new SelfCarePlugin(this);
@Getter public final SongPlayer songPlayer = new SongPlayer(this); @Getter public final SongPlayer songPlayer = new SongPlayer(this);
public ChipmunkBot (ClientOptions options) { super(options); } public ChipmunkBot (Options options, List<Client> allClients) {
super(options.host, options.port, new MinecraftProtocol(options.username), null, options.reconnectDelay, allClients);
chatCommandHandler = new ChatCommandHandler(this, options.commands);
}
} }

View file

@ -1,7 +1,6 @@
package land.chipmunk.chipmunkbot; package land.chipmunk.chipmunkbot;
import com.github.steveice10.mc.auth.service.AuthenticationService; import com.github.steveice10.packetlib.packet.PacketProtocol;
import com.github.steveice10.mc.protocol.MinecraftProtocol;
import com.github.steveice10.packetlib.ProxyInfo; import com.github.steveice10.packetlib.ProxyInfo;
import com.github.steveice10.packetlib.Session; import com.github.steveice10.packetlib.Session;
import com.github.steveice10.packetlib.tcp.TcpClientSession; import com.github.steveice10.packetlib.tcp.TcpClientSession;
@ -12,21 +11,34 @@ import java.util.TimerTask;
import java.util.List; import java.util.List;
import java.util.ArrayList; import java.util.ArrayList;
import lombok.Getter; import lombok.Getter;
import lombok.Setter;
public class Client { public class Client {
@Getter private Session session; @Getter private Session session;
@Getter private final ClientOptions options;
@Getter private final List<SessionListener> listeners = new ArrayList<>(); @Getter private final List<SessionListener> listeners = new ArrayList<>();
public Client (ClientOptions options) { private String host;
this.options = new ClientOptions(options.host(), options.port(), options.protocol(), options.proxy(), options.reconnectDelay(), options.allClients()); private int port;
private PacketProtocol protocol;
private ProxyInfo proxy;
@Getter @Setter private long reconnectDelay;
@Getter @Setter private List<Client> allClients;
public Client (String host, int port, PacketProtocol protocol, ProxyInfo proxy, long reconnectDelay, List<Client> allClients) {
this.host = host;
this.port = port;
this.protocol = protocol;
this.proxy = proxy;
this.reconnectDelay = reconnectDelay;
this.allClients = allClients;
reconnect(); reconnect();
} }
public void addListener (SessionListener listener) { listeners.add(listener); } public void addListener (SessionListener listener) { listeners.add(listener); }
public void reconnect () { // ? Should this be public? public void reconnect () { // ? Should this be public?
final Session session = new TcpClientSession(options.host(), options.port(), options.protocol(), options.proxy()); final Session session = new TcpClientSession(host, port, protocol, proxy);
this.session = session; this.session = session;
session.addListener(new SessionAdapter () { session.addListener(new SessionAdapter () {
@ -41,7 +53,7 @@ public class Client {
public void disconnected (DisconnectedEvent event) { public void disconnected (DisconnectedEvent event) {
for (SessionListener listener : listeners) listener.disconnected(event); for (SessionListener listener : listeners) listener.disconnected(event);
if (options.reconnectDelay() < 0) return; if (reconnectDelay < 0) return;
TimerTask task = new TimerTask() { TimerTask task = new TimerTask() {
@Override @Override
@ -50,13 +62,10 @@ public class Client {
} }
}; };
new Timer().schedule(task, options.reconnectDelay()); new Timer().schedule(task, reconnectDelay);
} }
}); });
session.connect(); session.connect();
} }
public long reconnectDelay () { return options.reconnectDelay(); }
public List<Client> allClients () { return options.allClients(); }
} }

View file

@ -1,34 +0,0 @@
package land.chipmunk.chipmunkbot;
import com.github.steveice10.mc.auth.service.AuthenticationService;
import com.github.steveice10.mc.protocol.MinecraftProtocol;
import com.github.steveice10.packetlib.ProxyInfo;
import com.github.steveice10.packetlib.Session;
import com.github.steveice10.packetlib.tcp.TcpClientSession;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.ArrayList;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ClientOptions {
private String host;
private int port;
private MinecraftProtocol protocol;
private ProxyInfo proxy;
private long reconnectDelay = 1000l;
private List<Client> allClients = new ArrayList<>();
/* public ClientOptions profile (GameProfile profile) {
protocol(new MinecraftProtocol(profile));
return this;
} */
public ClientOptions username (String username) {
protocol(new MinecraftProtocol(username));
return this;
}
}

View file

@ -18,14 +18,12 @@ import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.ArrayList; import java.util.ArrayList;
import com.google.gson.JsonObject;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.Gson; import com.google.gson.Gson;
public class Main { public class Main {
private static JsonObject getConfig (File file) throws IOException { private static Configuration getConfig (File file) throws IOException {
final Gson gson = new Gson();
if (!file.exists()) { if (!file.exists()) {
// Read the default config // Read the default config
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("default_config.json"); InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("default_config.json");
@ -45,27 +43,19 @@ public class Main {
System.out.println("The config.json file was not found, so a default one was created."); System.out.println("The config.json file was not found, so a default one was created.");
// Return the default config (instead of reading again, for efficiency) // Return the default config (instead of reading again, for efficiency)
return JsonParser.parseString(defaultConfig).getAsJsonObject(); return gson.fromJson(defaultConfig, Configuration.class);
} }
InputStream opt = new FileInputStream(file); InputStream opt = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(opt)); BufferedReader reader = new BufferedReader(new InputStreamReader(opt));
return JsonParser.parseReader(reader).getAsJsonObject(); return gson.fromJson(reader, Configuration.class);
}
public static ClientOptions parseClientOptions (JsonObject options) {
return new ClientOptions()
.host(options.has("host") ? options.get("host").getAsString() : "0.0.0.0")
.port(options.has("port") ? options.get("port").getAsInt() : 25565)
.username(options.has("username") ? options.get("username").getAsString() : "Player")
.reconnectDelay(options.has("reconnectDelay") ? options.get("reconnectDelay").getAsLong() : 0l);
} }
public static void main (String[] arguments) { public static void main (String[] arguments) {
System.out.println("ChipmunkBot is starting..."); System.out.println("ChipmunkBot is starting...");
JsonObject config = null; Configuration config = null;
try { try {
config = getConfig(new File(arguments.length > 0 ? arguments[0] : "config.json")); config = getConfig(new File(arguments.length > 0 ? arguments[0] : "config.json"));
} catch (Exception exception) { } catch (Exception exception) {
@ -75,12 +65,13 @@ public class Main {
List<Client> allClients = new ArrayList<>(); List<Client> allClients = new ArrayList<>();
for (JsonElement element : config.get("bots").getAsJsonArray()) { for (Options options : config.bots) {
ClientOptions options = parseClientOptions(element.getAsJsonObject()); final Client client = new ChipmunkBot(options, allClients);
options.allClients(allClients);
final Client client = new ChipmunkBot(options); // TODO: Maybe create a list of some sort
allClients.add(client); allClients.add(client);
} }
} }
private static class Configuration {
public Options[] bots;
}
} }

View file

@ -0,0 +1,15 @@
package land.chipmunk.chipmunkbot;
public class Options {
public String host = "0.0.0.0";
public int port = 25565;
public String username = "Player";
// public ProxyInfo proxy;
public long reconnectDelay = 1000;
public Commands commands = new Commands();
public class Commands {
public String prefix = "default.";
}
}

View file

@ -1,6 +1,7 @@
package land.chipmunk.chipmunkbot.plugins; package land.chipmunk.chipmunkbot.plugins;
import land.chipmunk.chipmunkbot.ChipmunkBot; import land.chipmunk.chipmunkbot.ChipmunkBot;
import land.chipmunk.chipmunkbot.Options;
import land.chipmunk.chipmunkbot.command.CommandSource; import land.chipmunk.chipmunkbot.command.CommandSource;
import land.chipmunk.chipmunkbot.command.PlayerCommandSource; import land.chipmunk.chipmunkbot.command.PlayerCommandSource;
import land.chipmunk.chipmunkbot.command.ComponentMessage; import land.chipmunk.chipmunkbot.command.ComponentMessage;
@ -18,10 +19,11 @@ import lombok.Setter;
public class ChatCommandHandler extends ChatPlugin.Listener { public class ChatCommandHandler extends ChatPlugin.Listener {
private ChipmunkBot client; private ChipmunkBot client;
@Getter @Setter private String prefix = "'"; // TODO: Don't hardcode this @Getter @Setter private String prefix;
public ChatCommandHandler (ChipmunkBot client) { public ChatCommandHandler (ChipmunkBot client, Options.Commands options) {
this.client = client; this.client = client;
this.prefix = options.prefix;
client.chat().addListener((ChatPlugin.Listener) this); client.chat().addListener((ChatPlugin.Listener) this);
} }