Skip to content

Commit

Permalink
Added config page & settings
Browse files Browse the repository at this point in the history
  • Loading branch information
Nixuge committed Jun 30, 2023
1 parent 22fe6b0 commit caf3f16
Show file tree
Hide file tree
Showing 6 changed files with 145 additions and 10 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
mod_id=serverlistbufferfixer
mod_name=Serverlist Buffer Fixer
mod_group=me.nixuge.serverlistbufferfixer
mod_version=1.0.0
mod_version=1.0.1
mod_author=["Nixuge"]
mod_description=A mod that fixes the slow/infinite server data loading in the multiplayer menu. Also prevents you from spamming 'refresh' too much.
minecraft_version=1.8.9
Expand Down
34 changes: 28 additions & 6 deletions src/main/java/me/nixuge/serverlistbufferfixer/McMod.java
Original file line number Diff line number Diff line change
@@ -1,30 +1,52 @@
package me.nixuge.serverlistbufferfixer;

import java.io.File;

import lombok.Getter;
import lombok.Setter;
import me.nixuge.serverlistbufferfixer.config.ConfigCache;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;

@Mod(
modid = McMod.MOD_ID,
name = McMod.NAME,
version = McMod.VERSION,
guiFactory = "me.nixuge.serverlistbufferfixer.gui.GuiFactory",
clientSideOnly = true
)

@Setter
public class McMod {
public static final String MOD_ID = "serverlistbufferfixer";
public static final String NAME = "Serverlist Buffer Fixer";
public static final String VERSION = "1.0.0";
public static final String VERSION = "1.0.1";


@Getter
@Mod.Instance(value = McMod.MOD_ID)
private static McMod instance;

//@Mod.EventHandler
//public void preInit(final FMLPreInitializationEvent event) {
// Keeping that to setup the config later
// (timeout & custom messages?)
//}
@Getter
private Configuration configuration;
@Getter
private String configDirectory;
@Getter
private ConfigCache configCache;

@Mod.EventHandler
public void preInit(final FMLPreInitializationEvent event) {
this.configDirectory = event.getModConfigurationDirectory().toString();
final File path = new File(this.configDirectory + File.separator + McMod.MOD_ID + ".cfg");
this.configuration = new Configuration(path);
this.configCache = new ConfigCache(this.configuration);
}

@Mod.EventHandler
public void init(final FMLInitializationEvent event) {
MinecraftForge.EVENT_BUS.register(configCache);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package me.nixuge.serverlistbufferfixer.config;

import lombok.Getter;
import me.nixuge.serverlistbufferfixer.McMod;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.client.event.ConfigChangedEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

@Getter
public class ConfigCache {
private final Configuration configuration;

private int maxThreadCountPinger;
private int maxThreadCountTimeout;
private int serverTimeout;

public ConfigCache(final Configuration configuration) {
this.configuration = configuration;
this.loadConfiguration();
this.configuration.save();
}

private void loadConfiguration() {
// Enable
this.maxThreadCountPinger = this.configuration.getInt(
"Max threadcount (Pinger)",
"General",
50,
5,
500,
"Max numbers of threads for the server pinger. Mc defaults to 5, this mods defaults to 50. Those threads are lightweight so shouldn't cause performance issues, and are only used when loading/reloading servers. Requires a Minecraft restart."
);
this.maxThreadCountTimeout = this.configuration.getInt(
"Max threadcount (timeouts)",
"General",
100,
10,
1000,
"Max numbers of threads for the server timeout. Usually double of the max threadcount for the server pinger. This mods defaults to 100. Those threads are lightweight so shouldn't cause performance issues, and are only used when loading/reloading servers. Requires a Minecraft restart."
);
this.serverTimeout = this.configuration.getInt(
"Server fetching timeout",
"General",
4,
1,
60,
"Timeout for fetching a server's data."
);

}

@SubscribeEvent
public void onConfigurationChangeEvent(final ConfigChangedEvent.OnConfigChangedEvent event) {
this.configuration.save();
if (event.modID.equalsIgnoreCase(McMod.MOD_ID)) {
this.loadConfiguration();
}
}
}
29 changes: 29 additions & 0 deletions src/main/java/me/nixuge/serverlistbufferfixer/gui/GuiFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package me.nixuge.serverlistbufferfixer.gui;

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import net.minecraftforge.fml.client.IModGuiFactory;

import java.util.HashSet;
import java.util.Set;

public class GuiFactory implements IModGuiFactory {
@Override
public void initialize(final Minecraft minecraftInstance) {
}

@Override
public Class<? extends GuiScreen> mainConfigGuiClass() {
return ModGuiConfig.class;
}

@Override
public Set<RuntimeOptionCategoryElement> runtimeGuiCategories() {
return new HashSet<>();
}

@Override
public RuntimeOptionGuiHandler getHandlerFor(final RuntimeOptionCategoryElement element) {
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package me.nixuge.serverlistbufferfixer.gui;

import me.nixuge.serverlistbufferfixer.McMod;
import net.minecraft.client.gui.GuiScreen;
import net.minecraftforge.common.config.ConfigElement;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.client.config.GuiConfig;

public class ModGuiConfig extends GuiConfig {
public ModGuiConfig(final GuiScreen guiScreen) {
super(
guiScreen,
new ConfigElement(McMod.getInstance().getConfiguration().getCategory(Configuration.CATEGORY_GENERAL)).getChildElements(),
McMod.MOD_ID,
false,
false,
McMod.NAME + " Configuration"
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.SneakyThrows;
import me.nixuge.serverlistbufferfixer.McMod;
import me.nixuge.serverlistbufferfixer.config.ConfigCache;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiMultiplayer;
import net.minecraft.client.multiplayer.ServerData;
Expand Down Expand Up @@ -31,8 +33,11 @@ public class ServerListEntryNormalMixin {
@Shadow
private static ThreadPoolExecutor field_148302_b;

private static final int MAX_THREAD_COUNT_PINGER = 50;
private static final int MAX_THREAD_COUNT_TIMEOUT = 100;
// still callign mcMod.getinstance.getconfigcache just in case
private static final int MAX_THREAD_COUNT_PINGER = McMod.getInstance().getConfigCache().getMaxThreadCountPinger();
private static final int MAX_THREAD_COUNT_TIMEOUT = McMod.getInstance().getConfigCache().getMaxThreadCountTimeout();

private static final ConfigCache config = McMod.getInstance().getConfigCache();

// Note: if servers are added, this will be inaccurate
// But it should be good enough still
Expand Down Expand Up @@ -80,7 +85,7 @@ public Future<?> drawEntry(ThreadPoolExecutor instance, Runnable r) {
return field_148302_b.submit(new Runnable() {
public void run() {
try {
future.get(4, TimeUnit.SECONDS);
future.get(config.getServerTimeout(), TimeUnit.SECONDS);
} catch (TimeoutException e1) {
setServerFail(EnumChatFormatting.RED + "Timed out");
} catch (ExecutionException e2) {
Expand Down

0 comments on commit caf3f16

Please # to comment.