mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
90 lines
4.9 KiB
Java
90 lines
4.9 KiB
Java
package com.hbm.commands;
|
|
|
|
import com.hbm.config.GeneralConfig;
|
|
import com.hbm.handler.threading.PacketThreading;
|
|
import com.hbm.main.MainRegistry;
|
|
import com.hbm.util.BobMathUtil;
|
|
import net.minecraft.command.CommandBase;
|
|
import net.minecraft.command.ICommandSender;
|
|
import net.minecraft.util.ChatComponentText;
|
|
import net.minecraft.util.EnumChatFormatting;
|
|
|
|
import java.lang.management.ManagementFactory;
|
|
import java.lang.management.ThreadInfo;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
import static com.hbm.handler.threading.PacketThreading.totalCnt;
|
|
|
|
public class CommandPacketInfo extends CommandBase {
|
|
@Override
|
|
public String getCommandName() {
|
|
return "ntmpackets";
|
|
}
|
|
|
|
@Override
|
|
public String getCommandUsage(ICommandSender sender) {
|
|
return EnumChatFormatting.RED + "/ntmpackets [info/resetState/toggleThreadingStatus/forceLock/forceUnlock]";
|
|
}
|
|
|
|
@Override
|
|
public void processCommand(ICommandSender sender, String[] args) {
|
|
|
|
if (args.length > 0) {
|
|
switch (args[0]) {
|
|
case "resetState":
|
|
PacketThreading.hasTriggered = false;
|
|
PacketThreading.clearCnt = 0;
|
|
return;
|
|
case "toggleThreadingStatus":
|
|
GeneralConfig.enablePacketThreading = !GeneralConfig.enablePacketThreading; // Force toggle.
|
|
PacketThreading.init(); // Reinit threads.
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Packet sending status toggled to " + GeneralConfig.enablePacketThreading + "."));
|
|
return;
|
|
case "forceLock":
|
|
PacketThreading.lock.lock(); // oh my fucking god never do this please unless you really have to
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Packet thread lock acquired, this may freeze the main thread!"));
|
|
MainRegistry.logger.error("Packet thread lock acquired by {}, this may freeze the main thread!", sender.getCommandSenderName());
|
|
return;
|
|
case "forceUnlock":
|
|
PacketThreading.lock.unlock();
|
|
MainRegistry.logger.warn("Packet thread lock released by {}.", sender.getCommandSenderName());
|
|
return;
|
|
case "info":
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.GOLD + "NTM Packet Debugger v1.2"));
|
|
|
|
if (PacketThreading.isTriggered() && GeneralConfig.enablePacketThreading)
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Packet Threading Errored, check log."));
|
|
else if (GeneralConfig.enablePacketThreading)
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Packet Threading Active"));
|
|
else
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Packet Threading Inactive"));
|
|
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "Thread Pool Info"));
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "# Threads (total): " + PacketThreading.threadPool.getPoolSize()));
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "# Threads (core): " + PacketThreading.threadPool.getCorePoolSize()));
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "# Threads (idle): " + (PacketThreading.threadPool.getPoolSize() - PacketThreading.threadPool.getActiveCount())));
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "# Threads (maximum): " + PacketThreading.threadPool.getMaximumPoolSize()));
|
|
|
|
for (ThreadInfo thread : ManagementFactory.getThreadMXBean().dumpAllThreads(false, false))
|
|
if (thread.getThreadName().startsWith(PacketThreading.threadPrefix)) {
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.GOLD + "Thread Name: " + thread.getThreadName()));
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "Thread ID: " + thread.getThreadId()));
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "Thread state: " + thread.getThreadState()));
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "Locked by: " + (thread.getLockOwnerName() == null ? "None" : thread.getLockName())));
|
|
}
|
|
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.GOLD + "Packet Info: "));
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "Amount total: " + totalCnt));
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "Amount remaining: " + PacketThreading.threadPool.getQueue().size()));
|
|
|
|
if (totalCnt != 0)
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "% Remaining to process: " + BobMathUtil.roundDecimal(((double) PacketThreading.threadPool.getQueue().size() / totalCnt) * 100, 2) + "%"));
|
|
|
|
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "Time spent waiting on thread(s) last tick: " + BobMathUtil.roundDecimal(TimeUnit.MILLISECONDS.convert(PacketThreading.nanoTimeWaited, TimeUnit.NANOSECONDS), 4) + "ms"));
|
|
return;
|
|
}
|
|
}
|
|
sender.addChatMessage(new ChatComponentText(getCommandUsage(sender)));
|
|
}
|
|
}
|