From a01f74957732205fd6889e764596c44b605550df Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Fri, 2 May 2025 15:00:31 +0700 Subject: [PATCH] =?UTF-8?q?refactor:=20use=20fastutil=20=F0=9F=92=A8?= =?UTF-8?q?=F0=9F=92=A8=F0=9F=92=A8=20i=20hope=20i=20didn't=20miss=20some?= =?UTF-8?q?=20things?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build-number.txt | 2 +- build.gradle | 1 + .../java/me/chayapak1/chomens_bot/Main.java | 3 ++- .../chatParsers/MinecraftChatParser.java | 3 ++- .../chomens_bot/commands/HelpCommand.java | 10 ++++----- .../chomens_bot/commands/MusicCommand.java | 22 +++++++++---------- .../chomens_bot/plugins/ChatPlugin.java | 14 +++++++----- .../plugins/ChomeNSModIntegrationPlugin.java | 8 ++++--- .../plugins/CommandHandlerPlugin.java | 3 ++- .../chomens_bot/plugins/EvalPlugin.java | 4 ++-- .../chomens_bot/plugins/IPFilterPlugin.java | 6 ++--- .../plugins/ListenerManagerPlugin.java | 4 ++-- .../plugins/MusicPlayerPlugin.java | 4 ++-- .../plugins/PlayerFilterPlugin.java | 3 ++- .../chomens_bot/plugins/PlayersPlugin.java | 5 +++-- .../chomens_bot/plugins/QueryPlugin.java | 3 ++- .../plugins/TabCompletePlugin.java | 4 ++-- .../chomens_bot/plugins/TeamPlugin.java | 3 ++- .../chomens_bot/plugins/WorldPlugin.java | 4 ++-- .../chomens_bot/song/NBSConverter.java | 16 +++++++++----- .../me/chayapak1/chomens_bot/song/Song.java | 9 ++++---- .../chomens_bot/song/SongLoaderThread.java | 3 ++- .../chomens_bot/util/ColorUtilities.java | 5 +++-- .../chomens_bot/util/ComponentUtilities.java | 12 +++++----- 24 files changed, 86 insertions(+), 65 deletions(-) diff --git a/build-number.txt b/build-number.txt index 371c709c..146f94f8 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -3047 \ No newline at end of file +3051 \ No newline at end of file diff --git a/build.gradle b/build.gradle index 07263f7a..674bf735 100644 --- a/build.gradle +++ b/build.gradle @@ -48,6 +48,7 @@ dependencies { implementation 'com.fasterxml.jackson.core:jackson-databind:2.18.3' implementation 'org.mariadb.jdbc:mariadb-java-client:3.5.2' implementation 'org.jline:jline:3.29.0' + implementation 'it.unimi.dsi:fastutil:8.5.15' implementation 'ch.qos.logback:logback-classic:1.5.17' implementation 'com.github.pircbotx:pircbotx:2.3.1' implementation 'com.github.ricksbrown:cowsay:1.1.0' diff --git a/src/main/java/me/chayapak1/chomens_bot/Main.java b/src/main/java/me/chayapak1/chomens_bot/Main.java index 598511d9..f70f51e2 100644 --- a/src/main/java/me/chayapak1/chomens_bot/Main.java +++ b/src/main/java/me/chayapak1/chomens_bot/Main.java @@ -1,6 +1,7 @@ package me.chayapak1.chomens_bot; import com.google.common.util.concurrent.ThreadFactoryBuilder; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import me.chayapak1.chomens_bot.plugins.ConsolePlugin; import me.chayapak1.chomens_bot.plugins.DatabasePlugin; import me.chayapak1.chomens_bot.plugins.DiscordPlugin; @@ -27,7 +28,7 @@ import java.util.concurrent.TimeUnit; public class Main { public static final Path stopReasonFilePath = Path.of("shutdown_reason.txt"); - public static final List bots = new ArrayList<>(); + public static final List bots = new ObjectArrayList<>(); public static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool( Math.max(1, Runtime.getRuntime().availableProcessors() / 2), diff --git a/src/main/java/me/chayapak1/chomens_bot/chatParsers/MinecraftChatParser.java b/src/main/java/me/chayapak1/chomens_bot/chatParsers/MinecraftChatParser.java index cd4890b3..b042da26 100644 --- a/src/main/java/me/chayapak1/chomens_bot/chatParsers/MinecraftChatParser.java +++ b/src/main/java/me/chayapak1/chomens_bot/chatParsers/MinecraftChatParser.java @@ -1,5 +1,6 @@ package me.chayapak1.chomens_bot.chatParsers; +import it.unimi.dsi.fastutil.objects.ObjectList; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.data.chat.ChatParser; import me.chayapak1.chomens_bot.data.chat.PlayerMessage; @@ -16,7 +17,7 @@ import java.util.UUID; public class MinecraftChatParser implements ChatParser { private final Bot bot; - private static final List keys = List.of( + private static final List keys = ObjectList.of( "chat.type.text", "chat.type.announcement", "commands.message.display.incoming", diff --git a/src/main/java/me/chayapak1/chomens_bot/commands/HelpCommand.java b/src/main/java/me/chayapak1/chomens_bot/commands/HelpCommand.java index fa2dad5d..a4a5841c 100644 --- a/src/main/java/me/chayapak1/chomens_bot/commands/HelpCommand.java +++ b/src/main/java/me/chayapak1/chomens_bot/commands/HelpCommand.java @@ -1,5 +1,6 @@ package me.chayapak1.chomens_bot.commands; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.command.Command; import me.chayapak1.chomens_bot.command.CommandContext; @@ -13,7 +14,6 @@ import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.HoverEvent; import net.kyori.adventure.text.format.NamedTextColor; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -43,7 +43,7 @@ public class HelpCommand extends Command { } public Component getCommandList (final CommandContext context) throws CommandException { - final List list = new ArrayList<>(); + final List list = new ObjectArrayList<>(); for (final TrustLevel level : TrustLevel.values()) { list.addAll(getCommandListByTrustLevel(context, level)); @@ -68,9 +68,9 @@ public class HelpCommand extends Command { } public List getCommandListByTrustLevel (final CommandContext context, final TrustLevel trustLevel) throws CommandException { - final List list = new ArrayList<>(); + final List list = new ObjectArrayList<>(); - final List commandNames = new ArrayList<>(); + final List commandNames = new ObjectArrayList<>(); for (final Command command : CommandHandlerPlugin.COMMANDS) { if (command.trustLevel != trustLevel || (command.consoleOnly && !(context instanceof ConsoleCommandContext))) @@ -113,7 +113,7 @@ public class HelpCommand extends Command { ) continue; final String actualCommandName = command.name.toLowerCase(); - final List usages = new ArrayList<>(); + final List usages = new ObjectArrayList<>(); usages.add( Component.empty() diff --git a/src/main/java/me/chayapak1/chomens_bot/commands/MusicCommand.java b/src/main/java/me/chayapak1/chomens_bot/commands/MusicCommand.java index 55d23db7..6e6da826 100644 --- a/src/main/java/me/chayapak1/chomens_bot/commands/MusicCommand.java +++ b/src/main/java/me/chayapak1/chomens_bot/commands/MusicCommand.java @@ -1,5 +1,6 @@ package me.chayapak1.chomens_bot.commands; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.command.Command; import me.chayapak1.chomens_bot.command.CommandContext; @@ -26,7 +27,6 @@ import java.net.MalformedURLException; import java.net.URI; import java.nio.file.*; import java.text.DecimalFormat; -import java.util.ArrayList; import java.util.Arrays; import java.util.Base64; import java.util.List; @@ -119,18 +119,18 @@ public class MusicCommand extends Command { if (stringPath.contains(separator) && !stringPath.isEmpty()) { final String[] splitPath = stringPath.split(separator); - final List splitPathClone = new ArrayList<>(Arrays.stream(splitPath).toList()); + final List splitPathClone = new ObjectArrayList<>(Arrays.stream(splitPath).toList()); splitPathClone.removeLast(); final Path realPath = Path.of(ROOT.toString(), String.join(separator, splitPathClone)); try (final DirectoryStream stream = Files.newDirectoryStream(realPath)) { - final List songsPaths = new ArrayList<>(); + final List songsPaths = new ObjectArrayList<>(); for (final Path eachPath : stream) songsPaths.add(eachPath); PathUtilities.sort(songsPaths); - final List songs = new ArrayList<>(); + final List songs = new ObjectArrayList<>(); for (final Path eachPath : songsPaths) songs.add(eachPath.getFileName().toString()); final String lowerCaseFile = splitPath[splitPath.length - 1].toLowerCase(); @@ -149,12 +149,12 @@ public class MusicCommand extends Command { } } else { try (final DirectoryStream stream = Files.newDirectoryStream(ROOT)) { - final List songsPaths = new ArrayList<>(); + final List songsPaths = new ObjectArrayList<>(); for (final Path eachPath : stream) songsPaths.add(eachPath); PathUtilities.sort(songsPaths); - final List songs = new ArrayList<>(); + final List songs = new ObjectArrayList<>(); for (final Path eachPath : songsPaths) songs.add(eachPath.getFileName().toString()); final String[] matchedArray = songs.stream() @@ -283,12 +283,12 @@ public class MusicCommand extends Command { if (!path.normalize().startsWith(ROOT.toString())) throw new CommandException(Component.text("no")); try (final DirectoryStream stream = Files.newDirectoryStream(path)) { - final List paths = new ArrayList<>(); + final List paths = new ObjectArrayList<>(); for (final Path eachPath : stream) paths.add(eachPath); PathUtilities.sort(paths); - final List fullList = new ArrayList<>(); + final List fullList = new ObjectArrayList<>(); int i = 0; for (final Path eachPath : paths) { final boolean isDirectory = Files.isDirectory(eachPath); @@ -327,7 +327,7 @@ public class MusicCommand extends Command { while (index <= fullList.size()) { // we MUST make a new copy of the list else everything will fard..,. - final List list = new ArrayList<>(fullList).subList(index, Math.min(index + eachSize, fullList.size())); + final List list = new ObjectArrayList<>(fullList).subList(index, Math.min(index + eachSize, fullList.size())); final Component component = Component.join(JoinConfiguration.separator(Component.space()), list); context.sendOutput(component); @@ -380,7 +380,7 @@ public class MusicCommand extends Command { final Bot bot = context.bot; final List queue = bot.music.songQueue; - final List queueWithNames = new ArrayList<>(); + final List queueWithNames = new ObjectArrayList<>(); int i = 0; for (final Song song : queue) { queueWithNames.add( @@ -530,7 +530,7 @@ public class MusicCommand extends Command { if (currentSong == null) throw new CommandException(Component.text("No song is currently playing")); - final List components = new ArrayList<>(); + final List components = new ObjectArrayList<>(); final TextColor keyColor = bot.colorPalette.secondary; final TextColor valueColor = bot.colorPalette.string; diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/ChatPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/ChatPlugin.java index e251cad8..675d4165 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/ChatPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/ChatPlugin.java @@ -2,6 +2,7 @@ package me.chayapak1.chomens_bot.plugins; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.chatParsers.KaboomChatParser; import me.chayapak1.chomens_bot.chatParsers.MinecraftChatParser; @@ -34,7 +35,10 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.Serverbound import org.jetbrains.annotations.NotNull; import java.time.Instant; -import java.util.*; +import java.util.BitSet; +import java.util.List; +import java.util.Queue; +import java.util.UUID; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; @@ -50,9 +54,9 @@ public class ChatPlugin implements Listener { private final Bot bot; - private final List chatParsers = new ArrayList<>(); + private final List chatParsers = new ObjectArrayList<>(); - public final List chatTypes = new ArrayList<>(); + public final List chatTypes = new ObjectArrayList<>(); private final Queue queue = new ConcurrentLinkedQueue<>(); @@ -341,8 +345,8 @@ public class ChatPlugin implements Listener { final Matcher colorCodeMatcher = COLOR_CODE_PATTERN.matcher(message); - final List colorCodePositions = new ArrayList<>(); - final List colorCodes = new ArrayList<>(); + final List colorCodePositions = new ObjectArrayList<>(); + final List colorCodes = new ObjectArrayList<>(); while (colorCodeMatcher.find()) { colorCodePositions.add(colorCodeMatcher.start()); diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/ChomeNSModIntegrationPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/ChomeNSModIntegrationPlugin.java index dabf6496..11b93b80 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/ChomeNSModIntegrationPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/ChomeNSModIntegrationPlugin.java @@ -2,6 +2,8 @@ package me.chayapak1.chomens_bot.plugins; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import it.unimi.dsi.fastutil.objects.ObjectList; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.chomeNSMod.Encryptor; import me.chayapak1.chomens_bot.chomeNSMod.Packet; @@ -38,7 +40,7 @@ public class ChomeNSModIntegrationPlugin implements Listener { private static final SecureRandom RANDOM = new SecureRandom(); - public static final List> SERVERBOUND_PACKETS = List.of( + public static final List> SERVERBOUND_PACKETS = ObjectList.of( ServerboundSuccessfulHandshakePacket.class, ServerboundRunCoreCommandPacket.class, ServerboundRunCommandPacket.class @@ -48,11 +50,11 @@ public class ChomeNSModIntegrationPlugin implements Listener { private final PacketHandler handler; - public final List connectedPlayers = Collections.synchronizedList(new ArrayList<>()); + public final List connectedPlayers = Collections.synchronizedList(new ObjectArrayList<>()); private final Map> receivedParts = new ConcurrentHashMap<>(); - private final List seenMetadata = Collections.synchronizedList(new ArrayList<>()); + private final List seenMetadata = Collections.synchronizedList(new ObjectArrayList<>()); public ChomeNSModIntegrationPlugin (final Bot bot) { this.bot = bot; diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/CommandHandlerPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/CommandHandlerPlugin.java index 4307e5ee..f1a05af2 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/CommandHandlerPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/CommandHandlerPlugin.java @@ -1,5 +1,6 @@ package me.chayapak1.chomens_bot.plugins; +import it.unimi.dsi.fastutil.objects.ObjectList; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.command.Command; import me.chayapak1.chomens_bot.command.CommandContext; @@ -20,7 +21,7 @@ import java.util.Arrays; import java.util.List; public class CommandHandlerPlugin implements Listener { - public static final List COMMANDS = List.of( + public static final List COMMANDS = ObjectList.of( new CommandBlockCommand(), new CowsayCommand(), new EchoCommand(), diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/EvalPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/EvalPlugin.java index b229d7aa..23567da4 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/EvalPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/EvalPlugin.java @@ -4,13 +4,13 @@ import com.google.gson.Gson; import com.google.gson.JsonArray; import io.socket.client.IO; import io.socket.client.Socket; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.data.eval.EvalFunction; import me.chayapak1.chomens_bot.data.eval.EvalOutput; import me.chayapak1.chomens_bot.evalFunctions.*; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; @@ -24,7 +24,7 @@ public class EvalPlugin { private int transactionId = 0; - private final Map> futures = new HashMap<>(); + private final Map> futures = new Object2ObjectOpenHashMap<>(); public final List functions = new ArrayList<>(); diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/IPFilterPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/IPFilterPlugin.java index e9932a88..1536217b 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/IPFilterPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/IPFilterPlugin.java @@ -1,5 +1,6 @@ package me.chayapak1.chomens_bot.plugins; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.Main; import me.chayapak1.chomens_bot.data.listener.Listener; @@ -9,7 +10,6 @@ import me.chayapak1.chomens_bot.util.LoggerUtilities; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -20,7 +20,7 @@ public class IPFilterPlugin implements Listener { private static final String REMOVE_FILTER = "DELETE FROM ipFilters WHERE ip = ?;"; private static final String CLEAR_FILTER = "DELETE FROM ipFilters;"; - public static Map localList = new LinkedHashMap<>(); + public static Map localList = new Object2ObjectOpenHashMap<>(); static { if (Main.database != null) { @@ -71,7 +71,7 @@ public class IPFilterPlugin implements Listener { } public static Map list () { - final Map output = new LinkedHashMap<>(); + final Map output = new Object2ObjectOpenHashMap<>(); try (final ResultSet result = Main.database.query(LIST_FILTERS)) { if (result == null) return output; diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/ListenerManagerPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/ListenerManagerPlugin.java index 9a7e5264..7d920d48 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/ListenerManagerPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/ListenerManagerPlugin.java @@ -1,11 +1,11 @@ package me.chayapak1.chomens_bot.plugins; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.data.listener.Listener; import net.kyori.adventure.text.Component; import java.util.Collections; -import java.util.LinkedList; import java.util.List; import java.util.function.Consumer; import java.util.function.Function; @@ -13,7 +13,7 @@ import java.util.function.Function; public class ListenerManagerPlugin { private final Bot bot; - private final List listeners = Collections.synchronizedList(new LinkedList<>()); + private final List listeners = Collections.synchronizedList(new ObjectArrayList<>()); public ListenerManagerPlugin (final Bot bot) { this.bot = bot; diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/MusicPlayerPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/MusicPlayerPlugin.java index 692972c1..e05d8cb2 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/MusicPlayerPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/MusicPlayerPlugin.java @@ -1,5 +1,6 @@ package me.chayapak1.chomens_bot.plugins; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.data.bossbar.BotBossBar; import me.chayapak1.chomens_bot.data.listener.Listener; @@ -25,7 +26,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.text.DecimalFormat; import java.util.Collections; -import java.util.LinkedList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -52,7 +52,7 @@ public class MusicPlayerPlugin implements Listener { private final Bot bot; public Song currentSong; - public final List songQueue = Collections.synchronizedList(new LinkedList<>()); + public final List songQueue = Collections.synchronizedList(new ObjectArrayList<>()); public SongLoaderThread loaderThread = null; public Loop loop = Loop.OFF; diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayerFilterPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayerFilterPlugin.java index 61d2253f..19f55f59 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayerFilterPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayerFilterPlugin.java @@ -1,5 +1,6 @@ package me.chayapak1.chomens_bot.plugins; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.Main; import me.chayapak1.chomens_bot.data.filter.FilteredPlayer; @@ -22,7 +23,7 @@ public class PlayerFilterPlugin implements Listener { private static final String REMOVE_FILTER = "DELETE FROM filters WHERE name = ?;"; private static final String CLEAR_FILTER = "DELETE FROM filters;"; - public static List localList = new ArrayList<>(); + public static List localList = new ObjectArrayList<>(); static { if (Main.database != null) { diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPlugin.java index 9464a54c..a2430fd9 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPlugin.java @@ -1,5 +1,6 @@ package me.chayapak1.chomens_bot.plugins; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.data.listener.Listener; import me.chayapak1.chomens_bot.data.player.PlayerEntry; @@ -23,9 +24,9 @@ import java.util.concurrent.TimeUnit; public class PlayersPlugin implements Listener { private final Bot bot; - public final List list = Collections.synchronizedList(new ArrayList<>()); + public final List list = Collections.synchronizedList(new ObjectArrayList<>()); - private final List pendingLeftPlayers = Collections.synchronizedList(new ArrayList<>()); + private final List pendingLeftPlayers = Collections.synchronizedList(new ObjectArrayList<>()); public PlayersPlugin (final Bot bot) { this.bot = bot; diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/QueryPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/QueryPlugin.java index 524c3ea9..05304c9b 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/QueryPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/QueryPlugin.java @@ -1,5 +1,6 @@ package me.chayapak1.chomens_bot.plugins; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.data.listener.Listener; import me.chayapak1.chomens_bot.util.UUIDUtilities; @@ -22,7 +23,7 @@ public class QueryPlugin implements Listener { public AtomicLong nextTransactionId = new AtomicLong(0); public final Map> transactions = new ConcurrentHashMap<>(); - public final List ids = Collections.synchronizedList(new ArrayList<>()); + public final List ids = Collections.synchronizedList(new ObjectArrayList<>()); public final Queue cargosQueue = new ConcurrentLinkedQueue<>(); diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/TabCompletePlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/TabCompletePlugin.java index d269d0e3..fa5d75cd 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/TabCompletePlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/TabCompletePlugin.java @@ -1,5 +1,6 @@ package me.chayapak1.chomens_bot.plugins; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.data.listener.Listener; import org.geysermc.mcprotocollib.network.Session; @@ -7,14 +8,13 @@ import org.geysermc.mcprotocollib.network.packet.Packet; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundCommandSuggestionsPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundCommandSuggestionPacket; -import java.util.HashMap; import java.util.Map; import java.util.concurrent.CompletableFuture; public class TabCompletePlugin implements Listener { private final Bot bot; private int nextTransactionId = 0; - private final Map> transactions = new HashMap<>(); + private final Map> transactions = new Object2ObjectOpenHashMap<>(); public TabCompletePlugin (final Bot bot) { this.bot = bot; diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/TeamPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/TeamPlugin.java index c7b863fe..f4170282 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/TeamPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/TeamPlugin.java @@ -1,5 +1,6 @@ package me.chayapak1.chomens_bot.plugins; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.data.listener.Listener; import me.chayapak1.chomens_bot.data.team.Team; @@ -14,7 +15,7 @@ import java.util.Collections; import java.util.List; public class TeamPlugin implements Listener { - public final List teams = Collections.synchronizedList(new ArrayList<>()); + public final List teams = Collections.synchronizedList(new ObjectArrayList<>()); public TeamPlugin (final Bot bot) { bot.listener.addListener(this); diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/WorldPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/WorldPlugin.java index f90361b3..ac40ed5a 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/WorldPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/WorldPlugin.java @@ -1,5 +1,6 @@ package me.chayapak1.chomens_bot.plugins; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.chunk.ChunkColumn; import me.chayapak1.chomens_bot.data.chunk.ChunkPos; @@ -17,7 +18,6 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.Clientbound import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.level.*; import java.util.Collection; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -31,7 +31,7 @@ public class WorldPlugin implements Listener { public String currentDimension = ""; - private final Map chunks = new HashMap<>(); + private final Map chunks = new Object2ObjectOpenHashMap<>(); public List registry = null; diff --git a/src/main/java/me/chayapak1/chomens_bot/song/NBSConverter.java b/src/main/java/me/chayapak1/chomens_bot/song/NBSConverter.java index ce81738d..9571f71f 100644 --- a/src/main/java/me/chayapak1/chomens_bot/song/NBSConverter.java +++ b/src/main/java/me/chayapak1/chomens_bot/song/NBSConverter.java @@ -3,6 +3,8 @@ package me.chayapak1.chomens_bot.song; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonParser; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.util.StringUtilities; @@ -13,7 +15,9 @@ import java.io.InputStreamReader; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.file.Path; -import java.util.*; +import java.util.Collections; +import java.util.List; +import java.util.Map; // Author: hhhzzzsss public class NBSConverter implements Converter { @@ -36,7 +40,7 @@ public class NBSConverter implements Converter { Instrument.PLING, }; - public static final Map CUSTOM_INSTRUMENT_REPLACEMENTS = new HashMap<>(); + public static final Map CUSTOM_INSTRUMENT_REPLACEMENTS = new Object2ObjectOpenHashMap<>(); static { CUSTOM_INSTRUMENT_REPLACEMENTS.put(".*glass.*", "block.glass.break"); @@ -117,7 +121,7 @@ public class NBSConverter implements Converter { loopStartTick = buffer.getShort(); } - final ArrayList nbsNotes = new ArrayList<>(); + final List nbsNotes = new ObjectArrayList<>(); long tick = -1; while (true) { final short tickJumps = buffer.getShort(); @@ -143,7 +147,7 @@ public class NBSConverter implements Converter { } } - final ArrayList nbsLayers = new ArrayList<>(); + final List nbsLayers = new ObjectArrayList<>(); if (buffer.hasRemaining()) { for (int i = 0; i < layerCount; i++) { final NBSLayer layer = new NBSLayer(); @@ -159,7 +163,7 @@ public class NBSConverter implements Converter { } } - final ArrayList customInstruments = new ArrayList<>(); + final List customInstruments = new ObjectArrayList<>(); if (buffer.hasRemaining()) { final byte customInstrumentCount = buffer.get(); for (int i = 0; i < customInstrumentCount; i++) { @@ -288,7 +292,7 @@ public class NBSConverter implements Converter { private static final List sounds = loadJsonStringArray("sounds.json"); private static List loadJsonStringArray (final String name) { - final List list = new ArrayList<>(); + final List list = new ObjectArrayList<>(); final InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream(name); assert is != null; diff --git a/src/main/java/me/chayapak1/chomens_bot/song/Song.java b/src/main/java/me/chayapak1/chomens_bot/song/Song.java index dce8946d..9a736895 100644 --- a/src/main/java/me/chayapak1/chomens_bot/song/Song.java +++ b/src/main/java/me/chayapak1/chomens_bot/song/Song.java @@ -1,17 +1,18 @@ package me.chayapak1.chomens_bot.song; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import me.chayapak1.chomens_bot.Bot; -import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; +import java.util.List; import java.util.Map; import static me.chayapak1.chomens_bot.util.StringUtilities.isNotNullAndNotBlank; // Author: hhhzzzsss & _ChipMC_ but i changed most of the stuff public class Song { - public final ArrayList notes = new ArrayList<>(); + public final List notes = new ObjectArrayList<>(); public final String originalName; public String name; public String requester = "Unknown"; @@ -22,7 +23,7 @@ public class Song { public double time = 0; // Time since start of song public long loopPosition = 0; // Milliseconds into the song to start looping - public final Map lyrics = new HashMap<>(); + public final Map lyrics = new Object2ObjectOpenHashMap<>(); public String songName; public String songAuthor; diff --git a/src/main/java/me/chayapak1/chomens_bot/song/SongLoaderThread.java b/src/main/java/me/chayapak1/chomens_bot/song/SongLoaderThread.java index 7fcdb31f..f55e5b61 100644 --- a/src/main/java/me/chayapak1/chomens_bot/song/SongLoaderThread.java +++ b/src/main/java/me/chayapak1/chomens_bot/song/SongLoaderThread.java @@ -1,5 +1,6 @@ package me.chayapak1.chomens_bot.song; +import it.unimi.dsi.fastutil.objects.ObjectList; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.util.DownloadUtilities; import net.kyori.adventure.text.Component; @@ -16,7 +17,7 @@ import java.util.stream.Stream; // Author: _ChipMC_ & hhhzzzsss but modified public class SongLoaderThread extends Thread { // should the converters be here? - public static final List converters = List.of( + public static final List converters = ObjectList.of( new MidiConverter(), new NBSConverter(), new TextFileConverter(), diff --git a/src/main/java/me/chayapak1/chomens_bot/util/ColorUtilities.java b/src/main/java/me/chayapak1/chomens_bot/util/ColorUtilities.java index 04d42609..440d61a6 100644 --- a/src/main/java/me/chayapak1/chomens_bot/util/ColorUtilities.java +++ b/src/main/java/me/chayapak1/chomens_bot/util/ColorUtilities.java @@ -1,5 +1,6 @@ package me.chayapak1.chomens_bot.util; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.format.TextFormat; @@ -13,8 +14,8 @@ import java.util.stream.Collectors; public class ColorUtilities { private static final Map formatToLegacyMap = CharacterAndFormat.defaults().stream() .collect(Collectors.toUnmodifiableMap(CharacterAndFormat::format, CharacterAndFormat::character)); - private static final Map ansiToIrcMap = new HashMap<>(); - private static final Map ansiStyleToIrcMap = new HashMap<>(); + private static final Map ansiToIrcMap = new Object2ObjectOpenHashMap<>(); + private static final Map ansiStyleToIrcMap = new Object2ObjectOpenHashMap<>(); public static TextColor getColorByString (final String _color) { final String color = _color.toLowerCase(); diff --git a/src/main/java/me/chayapak1/chomens_bot/util/ComponentUtilities.java b/src/main/java/me/chayapak1/chomens_bot/util/ComponentUtilities.java index 77584f84..3debfb37 100644 --- a/src/main/java/me/chayapak1/chomens_bot/util/ComponentUtilities.java +++ b/src/main/java/me/chayapak1/chomens_bot/util/ComponentUtilities.java @@ -3,6 +3,7 @@ package me.chayapak1.chomens_bot.util; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.kyori.adventure.text.*; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.Style; @@ -12,7 +13,6 @@ import net.kyori.adventure.text.format.TextDecoration; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; @@ -21,7 +21,7 @@ import java.util.regex.Pattern; public class ComponentUtilities { // component parsing // rewritten from chipmunkbot, a lot of stuff has changed, and also ANSI and section signs support, etc... - public static final Map LANGUAGE = new HashMap<>(); + public static final Map LANGUAGE = new Object2ObjectOpenHashMap<>(); private static final List LANGUAGES = List.of("language.json", "voiceChatLanguage.json"); @@ -34,7 +34,7 @@ public class ComponentUtilities { } private static Map loadJsonStringMap (final String name) { - final Map map = new HashMap<>(); + final Map map = new Object2ObjectOpenHashMap<>(); final InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream(name); assert is != null; @@ -75,7 +75,7 @@ public class ComponentUtilities { public static final int MAX_DEPTH = 256; - public static final Map ANSI_MAP = new HashMap<>(); + public static final Map ANSI_MAP = new Object2ObjectOpenHashMap<>(); static { ANSI_MAP.put("0", "\u001b[38;2;0;0;0m"); @@ -102,7 +102,7 @@ public class ComponentUtilities { ANSI_MAP.put("r", "\u001b[0m"); } - public static final Map DISCORD_ANSI_MAP = new HashMap<>(); + public static final Map DISCORD_ANSI_MAP = new Object2ObjectOpenHashMap<>(); static { // map totallynotskidded™ from https://github.com/PrismarineJS/prismarine-chat/blob/master/index.js#L10 @@ -134,7 +134,7 @@ public class ComponentUtilities { DISCORD_ANSI_MAP.put("r", "\u001b[0m"); } - public static final Map NAMED_TEXT_COLOR_MAP = new HashMap<>(); + public static final Map NAMED_TEXT_COLOR_MAP = new Object2ObjectOpenHashMap<>(); static { NAMED_TEXT_COLOR_MAP.put(NamedTextColor.BLACK, "0");