Small refactors #7
7 changed files with 32 additions and 109 deletions
build.gradle
src/main/java/me/chayapak1/chomens_bot
|
@ -110,6 +110,10 @@ application {
|
||||||
mainClass = 'me.chayapak1.chomens_bot.Main'
|
mainClass = 'me.chayapak1.chomens_bot.Main'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
run {
|
||||||
|
standardInput = System.in
|
||||||
|
}
|
||||||
|
|
||||||
tasks.withType(JavaCompile).configureEach {
|
tasks.withType(JavaCompile).configureEach {
|
||||||
options.encoding = 'UTF-8'
|
options.encoding = 'UTF-8'
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,10 +6,11 @@ import me.chayapak1.chomens_bot.util.RandomStringUtilities;
|
||||||
import net.kyori.adventure.key.Key;
|
import net.kyori.adventure.key.Key;
|
||||||
import org.geysermc.mcprotocollib.auth.GameProfile;
|
import org.geysermc.mcprotocollib.auth.GameProfile;
|
||||||
import org.geysermc.mcprotocollib.network.BuiltinFlags;
|
import org.geysermc.mcprotocollib.network.BuiltinFlags;
|
||||||
|
import org.geysermc.mcprotocollib.network.ClientSession;
|
||||||
import org.geysermc.mcprotocollib.network.Session;
|
import org.geysermc.mcprotocollib.network.Session;
|
||||||
import org.geysermc.mcprotocollib.network.event.session.*;
|
import org.geysermc.mcprotocollib.network.event.session.*;
|
||||||
|
import org.geysermc.mcprotocollib.network.factory.ClientNetworkSessionFactory;
|
||||||
import org.geysermc.mcprotocollib.network.packet.Packet;
|
import org.geysermc.mcprotocollib.network.packet.Packet;
|
||||||
import org.geysermc.mcprotocollib.network.tcp.TcpClientSession;
|
|
||||||
import org.geysermc.mcprotocollib.protocol.MinecraftProtocol;
|
import org.geysermc.mcprotocollib.protocol.MinecraftProtocol;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.HandPreference;
|
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.HandPreference;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.setting.ChatVisibility;
|
import org.geysermc.mcprotocollib.protocol.data.game.setting.ChatVisibility;
|
||||||
|
@ -42,7 +43,7 @@ public class Bot {
|
||||||
|
|
||||||
public GameProfile profile;
|
public GameProfile profile;
|
||||||
|
|
||||||
public Session session;
|
public ClientSession session;
|
||||||
|
|
||||||
public boolean printDisconnectedCause = false;
|
public boolean printDisconnectedCause = false;
|
||||||
|
|
||||||
|
@ -167,7 +168,10 @@ public class Bot {
|
||||||
if (_username == null) username = RandomStringUtilities.generate(8);
|
if (_username == null) username = RandomStringUtilities.generate(8);
|
||||||
else username = _username;
|
else username = _username;
|
||||||
|
|
||||||
Session session = new TcpClientSession(host, port, new MinecraftProtocol(username), null);
|
final ClientSession session = ClientNetworkSessionFactory.factory()
|
||||||
|
.setAddress(host, port)
|
||||||
|
.setProtocol(new MinecraftProtocol(username))
|
||||||
|
.create();
|
||||||
|
|
||||||
this.session = session;
|
this.session = session;
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
package me.chayapak1.chomens_bot.plugins;
|
package me.chayapak1.chomens_bot.plugins;
|
||||||
|
|
||||||
import me.chayapak1.chomens_bot.Bot;
|
import me.chayapak1.chomens_bot.Bot;
|
||||||
import me.chayapak1.chomens_bot.util.ColorUtilities;
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.TextColor;
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
|
import net.kyori.adventure.util.HSVLike;
|
||||||
|
|
||||||
public class BruhifyPlugin extends TickPlugin.Listener {
|
public class BruhifyPlugin extends TickPlugin.Listener {
|
||||||
private final Bot bot;
|
private final Bot bot;
|
||||||
|
@ -12,7 +12,7 @@ public class BruhifyPlugin extends TickPlugin.Listener {
|
||||||
|
|
||||||
private int startHue = 0;
|
private int startHue = 0;
|
||||||
|
|
||||||
public BruhifyPlugin (Bot bot) {
|
public BruhifyPlugin(Bot bot) {
|
||||||
this.bot = bot;
|
this.bot = bot;
|
||||||
|
|
||||||
bot.tick.addListener(this);
|
bot.tick.addListener(this);
|
||||||
|
@ -29,8 +29,8 @@ public class BruhifyPlugin extends TickPlugin.Listener {
|
||||||
Component component = Component.empty();
|
Component component = Component.empty();
|
||||||
|
|
||||||
for (char character : displayName.toCharArray()) {
|
for (char character : displayName.toCharArray()) {
|
||||||
String color = String.format("#%06x", ColorUtilities.hsvToRgb(hue, 100, 100));
|
component = component.append(Component.text(character)
|
||||||
component = component.append(Component.text(character).color(TextColor.fromHexString(color)));
|
.color(TextColor.color(HSVLike.hsvLike(hue / 360.0f, 1, 1))));
|
||||||
hue = (hue + increment) % 360;
|
hue = (hue + increment) % 360;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,6 @@ import me.chayapak1.chomens_bot.voiceChat.NetworkMessage;
|
||||||
import me.chayapak1.chomens_bot.voiceChat.customPayload.JoinGroupPacket;
|
import me.chayapak1.chomens_bot.voiceChat.customPayload.JoinGroupPacket;
|
||||||
import me.chayapak1.chomens_bot.voiceChat.customPayload.SecretPacket;
|
import me.chayapak1.chomens_bot.voiceChat.customPayload.SecretPacket;
|
||||||
import me.chayapak1.chomens_bot.voiceChat.packets.*;
|
import me.chayapak1.chomens_bot.voiceChat.packets.*;
|
||||||
import me.chayapak1.chomens_bot.voiceChat.packets.*;
|
|
||||||
|
|
||||||
import java.net.*;
|
import java.net.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -69,17 +68,11 @@ public class VoiceChatPlugin extends Bot.Listener {
|
||||||
if (_packet.getChannel().equals(Key.key("voicechat:secret"))) { // fard
|
if (_packet.getChannel().equals(Key.key("voicechat:secret"))) { // fard
|
||||||
final byte[] bytes = _packet.getData();
|
final byte[] bytes = _packet.getData();
|
||||||
final FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.wrappedBuffer(bytes));
|
final FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.wrappedBuffer(bytes));
|
||||||
|
|
||||||
final SecretPacket secretPacket = new SecretPacket().fromBytes(buf);
|
final SecretPacket secretPacket = new SecretPacket().fromBytes(buf);
|
||||||
|
initializationData = new InitializationData(secretPacket);
|
||||||
|
|
||||||
initializationData = new InitializationData(bot.session.getHost(), secretPacket);
|
final InetSocketAddress mcAddress = (InetSocketAddress) bot.session.getRemoteAddress();
|
||||||
|
socketAddress = new InetSocketAddress(mcAddress.getAddress(), initializationData.serverPort);
|
||||||
try {
|
|
||||||
final InetAddress address = InetAddress.getByName(bot.session.getHost());
|
|
||||||
socketAddress = new InetSocketAddress(address, initializationData.serverPort);
|
|
||||||
} catch (UnknownHostException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
socket = new ClientVoiceChatSocket();
|
socket = new ClientVoiceChatSocket();
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -2,12 +2,17 @@ package me.chayapak1.chomens_bot.util;
|
||||||
|
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import net.kyori.adventure.text.format.TextColor;
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
|
import net.kyori.adventure.text.format.TextFormat;
|
||||||
|
import net.kyori.adventure.text.serializer.legacy.CharacterAndFormat;
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class ColorUtilities {
|
public class ColorUtilities {
|
||||||
|
private static final Map<TextFormat, Character> formatToLegacyMap = CharacterAndFormat.defaults().stream()
|
||||||
|
.collect(Collectors.toUnmodifiableMap(CharacterAndFormat::format, CharacterAndFormat::character));
|
||||||
private static final Map<Integer, String> ansiToIrcMap = new HashMap<>();
|
private static final Map<Integer, String> ansiToIrcMap = new HashMap<>();
|
||||||
private static final Map<Integer, String> ansiStyleToIrcMap = new HashMap<>();
|
private static final Map<Integer, String> ansiStyleToIrcMap = new HashMap<>();
|
||||||
|
|
||||||
|
@ -16,80 +21,15 @@ public class ColorUtilities {
|
||||||
|
|
||||||
if (color.startsWith("#")) return TextColor.fromHexString(color);
|
if (color.startsWith("#")) return TextColor.fromHexString(color);
|
||||||
else {
|
else {
|
||||||
// am i reinventing the wheel here?
|
// am i reinventing the wheel here? Yes.
|
||||||
return switch (color) {
|
return Optional.ofNullable(NamedTextColor.NAMES.value(color))
|
||||||
case "black" -> NamedTextColor.BLACK;
|
.orElse(NamedTextColor.WHITE);
|
||||||
case "dark_blue" -> NamedTextColor.DARK_BLUE;
|
|
||||||
case "dark_green" -> NamedTextColor.DARK_GREEN;
|
|
||||||
case "dark_aqua" -> NamedTextColor.DARK_AQUA;
|
|
||||||
case "dark_red" -> NamedTextColor.DARK_RED;
|
|
||||||
case "dark_purple" -> NamedTextColor.DARK_PURPLE;
|
|
||||||
case "gold" -> NamedTextColor.GOLD;
|
|
||||||
case "gray" -> NamedTextColor.GRAY;
|
|
||||||
case "dark_gray" -> NamedTextColor.DARK_GRAY;
|
|
||||||
case "blue" -> NamedTextColor.BLUE;
|
|
||||||
case "green" -> NamedTextColor.GREEN;
|
|
||||||
case "aqua" -> NamedTextColor.AQUA;
|
|
||||||
case "red" -> NamedTextColor.RED;
|
|
||||||
case "light_purple" -> NamedTextColor.LIGHT_PURPLE;
|
|
||||||
case "yellow" -> NamedTextColor.YELLOW;
|
|
||||||
default -> NamedTextColor.WHITE;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Author: ChatGPT
|
public static char getClosestChatColor(int rgb) {
|
||||||
public static int hsvToRgb (int hue, int saturation, int value) {
|
final NamedTextColor closestNamed = NamedTextColor.nearestTo(TextColor.color(rgb));
|
||||||
Color color = Color.getHSBColor(hue / 360.0f, saturation / 100.0f, value / 100.0f);
|
return formatToLegacyMap.get(closestNamed);
|
||||||
return color.getRGB() & 0xFFFFFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final ChatColor[] COLORS = {
|
|
||||||
new ChatColor("0", 0x000000),
|
|
||||||
new ChatColor("1", 0x0000aa),
|
|
||||||
new ChatColor("2", 0x00aa00),
|
|
||||||
new ChatColor("3", 0x00aaaa),
|
|
||||||
new ChatColor("4", 0xaa0000),
|
|
||||||
new ChatColor("5", 0xaa00aa),
|
|
||||||
new ChatColor("6", 0xffaa00),
|
|
||||||
new ChatColor("7", 0xaaaaaa),
|
|
||||||
new ChatColor("8", 0x555555),
|
|
||||||
new ChatColor("9", 0x5555ff),
|
|
||||||
new ChatColor("a", 0x55ff55),
|
|
||||||
new ChatColor("b", 0x55ffff),
|
|
||||||
new ChatColor("c", 0xff5555),
|
|
||||||
new ChatColor("d", 0xff55ff),
|
|
||||||
new ChatColor("e", 0xffff55),
|
|
||||||
new ChatColor("f", 0xffffff)
|
|
||||||
};
|
|
||||||
|
|
||||||
public static String getClosestChatColor(int rgb) {
|
|
||||||
int r = (rgb >> 16) & 0xFF;
|
|
||||||
int g = (rgb >> 8) & 0xFF;
|
|
||||||
int b = rgb & 0xFF;
|
|
||||||
|
|
||||||
ChatColor closest = null;
|
|
||||||
int smallestDiff = 0;
|
|
||||||
|
|
||||||
for (ChatColor color : COLORS) {
|
|
||||||
if (color.rgb == rgb) {
|
|
||||||
return color.colorName;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check by the greatest diff of the 3 values
|
|
||||||
int rAverage = (color.r + r) / 2;
|
|
||||||
int rDiff = color.r - r;
|
|
||||||
int gDiff = color.g - g;
|
|
||||||
int bDiff = color.b - b;
|
|
||||||
int diff = ((2 + (rAverage >> 8)) * rDiff * rDiff)
|
|
||||||
+ (4 * gDiff * gDiff)
|
|
||||||
+ ((2 + ((255 - rAverage) >> 8)) * bDiff * bDiff);
|
|
||||||
if (closest == null || diff < smallestDiff) {
|
|
||||||
closest = color;
|
|
||||||
smallestDiff = diff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return closest.colorName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Author: ChatGPT
|
// Author: ChatGPT
|
||||||
|
@ -168,19 +108,4 @@ public class ColorUtilities {
|
||||||
|
|
||||||
return result.toString();
|
return result.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class ChatColor {
|
|
||||||
|
|
||||||
private final String colorName;
|
|
||||||
private final int rgb;
|
|
||||||
private final int r, g, b;
|
|
||||||
|
|
||||||
public ChatColor(String colorName, int rgb) {
|
|
||||||
this.colorName = colorName;
|
|
||||||
this.rgb = rgb;
|
|
||||||
r = (rgb >> 16) & 0xFF;
|
|
||||||
g = (rgb >> 8) & 0xFF;
|
|
||||||
b = rgb & 0xFF;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -216,8 +216,7 @@ public class ComponentUtilities {
|
||||||
// gets the closest color to the hex
|
// gets the closest color to the hex
|
||||||
|
|
||||||
final int rgb = Integer.parseInt(code.substring(1), 16);
|
final int rgb = Integer.parseInt(code.substring(1), 16);
|
||||||
|
final String chatColor = Character.toString(ColorUtilities.getClosestChatColor(rgb));
|
||||||
final String chatColor = ColorUtilities.getClosestChatColor(rgb);
|
|
||||||
|
|
||||||
ansiCode = ansiMap.get(chatColor);
|
ansiCode = ansiMap.get(chatColor);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -6,7 +6,6 @@ import me.chayapak1.chomens_bot.voiceChat.customPayload.SecretPacket;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class InitializationData {
|
public class InitializationData {
|
||||||
public final String serverIP;
|
|
||||||
public final int serverPort;
|
public final int serverPort;
|
||||||
public final UUID playerUUID;
|
public final UUID playerUUID;
|
||||||
public final UUID secret;
|
public final UUID secret;
|
||||||
|
@ -17,8 +16,7 @@ public class InitializationData {
|
||||||
public final boolean groupsEnabled;
|
public final boolean groupsEnabled;
|
||||||
public final boolean allowRecording;
|
public final boolean allowRecording;
|
||||||
|
|
||||||
public InitializationData(String serverIP, SecretPacket secretPacket) {
|
public InitializationData(SecretPacket secretPacket) {
|
||||||
this.serverIP = serverIP;
|
|
||||||
this.serverPort = secretPacket.serverPort;
|
this.serverPort = secretPacket.serverPort;
|
||||||
this.playerUUID = secretPacket.playerUUID;
|
this.playerUUID = secretPacket.playerUUID;
|
||||||
this.secret = secretPacket.secret;
|
this.secret = secretPacket.secret;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue