diff --git a/build-number.txt b/build-number.txt index 9cc5e5b6..c5e035ca 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -2015 \ No newline at end of file +2021 \ No newline at end of file diff --git a/src/main/java/me/chayapak1/chomens_bot/Bot.java b/src/main/java/me/chayapak1/chomens_bot/Bot.java index f63b2d84..d261801c 100644 --- a/src/main/java/me/chayapak1/chomens_bot/Bot.java +++ b/src/main/java/me/chayapak1/chomens_bot/Bot.java @@ -77,7 +77,7 @@ public class Bot extends SessionAdapter { public CommandSpyPlugin commandSpy; public PositionPlugin position; public DatabasePlugin database; - public ServerPluginsManagerPlugin serverPluginsManager; + public ServerFeaturesPlugin serverFeatures; public SelfCarePlugin selfCare; public QueryPlugin query; public ExtrasMessengerPlugin extrasMessenger; @@ -129,7 +129,7 @@ public class Bot extends SessionAdapter { this.chat = new ChatPlugin(this); this.commandSpy = new CommandSpyPlugin(this); this.position = new PositionPlugin(this); - this.serverPluginsManager = new ServerPluginsManagerPlugin(this); + this.serverFeatures = new ServerFeaturesPlugin(this); this.selfCare = new SelfCarePlugin(this); this.query = new QueryPlugin(this); this.extrasMessenger = new ExtrasMessengerPlugin(this); diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/CorePlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/CorePlugin.java index 0ea9c8ad..191b2d9d 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/CorePlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/CorePlugin.java @@ -37,7 +37,6 @@ import java.util.concurrent.TimeUnit; public class CorePlugin extends PositionPlugin.Listener { public static final int COMMAND_BLOCK_ID = 418; - public static final int REPEATING_COMMAND_BLOCK_ID = 537; private final Bot bot; @@ -158,7 +157,7 @@ public class CorePlugin extends PositionPlugin.Listener { commandsPerTick++; - if (bot.serverPluginsManager.hasPlugin(ServerPluginsManagerPlugin.EXTRAS)) { + if (bot.serverFeatures.hasExtras) { bot.session.send(new ServerboundSetCommandBlockPacket( block, command, @@ -310,9 +309,7 @@ public class CorePlugin extends PositionPlugin.Listener { new ServerboundSetCreativeModeSlotPacket( (short) 36, new ItemStack( - bot.serverPluginsManager.hasPlugin(ServerPluginsManagerPlugin.EXTRAS) ? - REPEATING_COMMAND_BLOCK_ID : - COMMAND_BLOCK_ID, + COMMAND_BLOCK_ID, 64, dataComponents ) diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/PositionPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/PositionPlugin.java index 8fb8c220..8a2e1f17 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/PositionPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/PositionPlugin.java @@ -182,7 +182,7 @@ public class PositionPlugin extends Bot.Listener { if (y > maxY + 500 || y < minY) { String command = "/"; - if (bot.serverPluginsManager.hasPlugin(ServerPluginsManagerPlugin.ESSENTIALS)) command += "essentials:"; + if (bot.serverFeatures.hasEssentials) command += "essentials:"; command += String.format("tp ~ %s ~", maxY); diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/SelfCarePlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/SelfCarePlugin.java index 32be9085..f4ba01dc 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/SelfCarePlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/SelfCarePlugin.java @@ -34,8 +34,8 @@ public class SelfCarePlugin extends Bot.Listener { public boolean visibility = false; private int entityId; - private GameMode gamemode; - private int permissionLevel; + public GameMode gamemode; + public int permissionLevel; private int positionPacketsPerSecond = 0; private long usernameStartTime = System.currentTimeMillis(); @@ -103,8 +103,8 @@ public class SelfCarePlugin extends Bot.Listener { public void check () { final Configuration.SelfCare selfCares = bot.config.selfCare; - final boolean kaboom = bot.serverPluginsManager.hasPlugin(ServerPluginsManagerPlugin.EXTRAS); - final boolean hasEssentials = bot.serverPluginsManager.hasPlugin(ServerPluginsManagerPlugin.ESSENTIALS); + final boolean kaboom = bot.serverFeatures.hasExtras; + final boolean hasEssentials = bot.serverFeatures.hasEssentials; final boolean creayun = bot.options.creayun; diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/ServerFeaturesPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/ServerFeaturesPlugin.java new file mode 100644 index 00000000..234e95b1 --- /dev/null +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/ServerFeaturesPlugin.java @@ -0,0 +1,62 @@ +package me.chayapak1.chomens_bot.plugins; + +import me.chayapak1.chomens_bot.Bot; +import org.geysermc.mcprotocollib.network.Session; +import org.geysermc.mcprotocollib.network.event.session.DisconnectedEvent; +import org.geysermc.mcprotocollib.network.packet.Packet; +import org.geysermc.mcprotocollib.protocol.data.game.command.CommandNode; +import org.geysermc.mcprotocollib.protocol.data.game.command.CommandType; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundCommandsPacket; + +public class ServerFeaturesPlugin extends Bot.Listener { + private final Bot bot; + + public boolean hasEssentials = false; + public boolean hasExtras = false; + + public ServerFeaturesPlugin (Bot bot) { + this.bot = bot; + + bot.addListener(this); + } + + @Override + public void packetReceived (Session session, Packet packet) { + if (packet instanceof ClientboundCommandsPacket t_packet) packetReceived(t_packet); + } + + public void packetReceived (ClientboundCommandsPacket packet) { + for (CommandNode node : packet.getNodes()) { + if (!node.isExecutable() || node.getType() != CommandType.LITERAL) continue; + + final String name = node.getName(); + + if (name == null || !name.contains(":")) continue; + + // 4 or 2? + if (bot.selfCare.permissionLevel < 4) { + // it'd be weird for servers that allow OP while not having OP + if (name.equals("minecraft:op")) hasExtras = true; + + continue; + } + + final String[] split = name.split(":"); + + if (split.length < 2) continue; + + final String key = split[0].toLowerCase(); + + switch (key) { + case "extras" -> hasExtras = true; + case "essentials" -> hasEssentials = true; + } + } + } + + @Override + public void disconnected (DisconnectedEvent event) { + hasEssentials = false; + hasExtras = false; + } +} diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/ServerPluginsManagerPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/ServerPluginsManagerPlugin.java deleted file mode 100644 index ae47fd39..00000000 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/ServerPluginsManagerPlugin.java +++ /dev/null @@ -1,47 +0,0 @@ -package me.chayapak1.chomens_bot.plugins; - -import org.geysermc.mcprotocollib.network.event.session.ConnectedEvent; -import org.geysermc.mcprotocollib.network.event.session.DisconnectedEvent; -import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundCommandSuggestionsPacket; -import me.chayapak1.chomens_bot.Bot; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.CompletableFuture; - -public class ServerPluginsManagerPlugin extends Bot.Listener { - public static final String EXTRAS = "Extras"; - public static final String ESSENTIALS = "Essentials"; - - private final Bot bot; - - public List plugins = new ArrayList<>(); - - public ServerPluginsManagerPlugin (Bot bot) { - this.bot = bot; - - bot.addListener(this); - } - - @Override - public void connected (ConnectedEvent event) { - final CompletableFuture future = bot.tabComplete.tabComplete("ver "); - - future.thenApply((packet) -> { - final String[] matches = packet.getMatches(); - - // should i just use the plugins as the String array instead of a list? - plugins = new ArrayList<>(Arrays.asList(matches)); - - return packet; - }); - } - - @Override - public void disconnected (DisconnectedEvent event) { - plugins.clear(); - } - - public boolean hasPlugin (String plugin) { return plugins.contains(plugin); } -}