The Config class provides static methods to load and save configuration data from config/voxyworldgenv2.json. It automatically generates a default configuration on first run based on system hardware.
Static Fields
DATA
The current configuration data instance.
public static ConfigData DATA
Global configuration data instance. Access fields directly:
enabled (boolean) - Master enable switch
showF3MenuStats (boolean) - Show stats in F3 debug menu
generationRadius (int) - Chunk generation radius around players
maxActiveTasks (int) - Maximum concurrent generation tasks
maxQueueSize (int) - Maximum queue size (legacy)
saveNormalChunks (boolean) - Whether to save generated chunks to disk
update_interval (int) - Legacy field for compatibility
Example:
import com.ethan.voxyworldgenv2.core.Config;
// Read config values
boolean enabled = Config.DATA.enabled;
int radius = Config.DATA.generationRadius;
int maxTasks = Config.DATA.maxActiveTasks;
System.out.println("Generation radius: " + radius);
Static Methods
load()
Load configuration from disk. If the config file doesn’t exist, generates a default configuration based on system hardware and saves it.
public static void load()
Behavior:
- First run: Auto-configures based on CPU cores and available memory, then saves
- Subsequent runs: Loads from
config/voxyworldgenv2.json
- On error: Logs error and retains existing
DATA values
Example:
// Load config on server startup
Config.load();
System.out.println("Loaded config with radius: " + Config.DATA.generationRadius);
save()
Save the current configuration to disk as JSON.
public static void save()
Example:
import com.ethan.voxyworldgenv2.core.Config;
import com.ethan.voxyworldgenv2.core.ChunkGenerationManager;
// Modify config
Config.DATA.generationRadius = 256;
Config.DATA.maxActiveTasks = 30;
// Save to disk
Config.save();
// Notify manager to reload
ChunkGenerationManager.getInstance().scheduleConfigReload();
ConfigData Class
The ConfigData inner class holds all configuration values.
public static class ConfigData {
public boolean enabled = true;
public boolean showF3MenuStats = true;
public int generationRadius = 128;
public int update_interval = 20; // legacy field for Compat
public int maxQueueSize = 20000;
public int maxActiveTasks = 20;
public boolean saveNormalChunks = true;
}
Fields
Master enable switch for chunk generation
Display generation statistics in F3 debug overlay
Chunk generation radius around players (in chunks). For Tellus worlds, the effective radius is max(generationRadius, 128)
Maximum number of concurrent chunk generation tasks. Higher values increase speed but use more resources
Legacy field maintained for compatibility
If false, generated chunks are marked as LOD-only and not saved to disk. Useful for reducing world size when using client-side LOD mods
Legacy field maintained for compatibility
Configuration File Location
The configuration file is located at:
config/voxyworldgenv2.json
Relative to the Minecraft instance directory (typically .minecraft/ or server root).
{
"enabled": true,
"showF3MenuStats": true,
"generationRadius": 128,
"update_interval": 20,
"maxQueueSize": 20000,
"maxActiveTasks": 20,
"saveNormalChunks": true
}
Usage Examples
Reading Configuration
import com.ethan.voxyworldgenv2.core.Config;
public class MyMod {
public void checkConfig() {
Config.load();
if (!Config.DATA.enabled) {
System.out.println("Voxy World Gen is disabled");
return;
}
System.out.println("Generation Settings:");
System.out.println(" Radius: " + Config.DATA.generationRadius + " chunks");
System.out.println(" Max Tasks: " + Config.DATA.maxActiveTasks);
System.out.println(" Save Chunks: " + Config.DATA.saveNormalChunks);
}
}
Modifying Configuration Programmatically
import com.ethan.voxyworldgenv2.core.Config;
import com.ethan.voxyworldgenv2.core.ChunkGenerationManager;
public class ConfigHelper {
// Set generation radius and apply changes
public static void setGenerationRadius(int radius) {
Config.DATA.generationRadius = Math.max(16, Math.min(512, radius));
Config.save();
ChunkGenerationManager.getInstance().scheduleConfigReload();
}
// Enable/disable generation
public static void setEnabled(boolean enabled) {
Config.DATA.enabled = enabled;
Config.save();
ChunkGenerationManager.getInstance().scheduleConfigReload();
}
// Performance preset
public static void applyPerformancePreset(String preset) {
switch (preset) {
case "low":
Config.DATA.maxActiveTasks = 10;
Config.DATA.generationRadius = 64;
break;
case "medium":
Config.DATA.maxActiveTasks = 20;
Config.DATA.generationRadius = 128;
break;
case "high":
Config.DATA.maxActiveTasks = 40;
Config.DATA.generationRadius = 256;
break;
}
Config.save();
ChunkGenerationManager.getInstance().scheduleConfigReload();
}
}
Creating a Config GUI
import com.ethan.voxyworldgenv2.core.Config;
import com.ethan.voxyworldgenv2.core.ChunkGenerationManager;
public class ConfigScreen {
private int tempRadius;
private int tempMaxTasks;
private boolean tempSaveChunks;
public void open() {
// Load current values
Config.load();
tempRadius = Config.DATA.generationRadius;
tempMaxTasks = Config.DATA.maxActiveTasks;
tempSaveChunks = Config.DATA.saveNormalChunks;
// Show GUI...
}
public void onSave() {
// Apply changes
Config.DATA.generationRadius = tempRadius;
Config.DATA.maxActiveTasks = tempMaxTasks;
Config.DATA.saveNormalChunks = tempSaveChunks;
// Save and reload
Config.save();
ChunkGenerationManager.getInstance().scheduleConfigReload();
}
public void onCancel() {
// Discard changes, reload from disk
Config.load();
}
}
Runtime Configuration Validation
import com.ethan.voxyworldgenv2.core.Config;
public class ConfigValidator {
public static void validateAndFix() {
Config.load();
boolean needsSave = false;
// Clamp generation radius
if (Config.DATA.generationRadius < 16) {
Config.DATA.generationRadius = 16;
needsSave = true;
} else if (Config.DATA.generationRadius > 512) {
Config.DATA.generationRadius = 512;
needsSave = true;
}
// Clamp max tasks
if (Config.DATA.maxActiveTasks < 1) {
Config.DATA.maxActiveTasks = 1;
needsSave = true;
} else if (Config.DATA.maxActiveTasks > 100) {
Config.DATA.maxActiveTasks = 100;
needsSave = true;
}
if (needsSave) {
Config.save();
System.out.println("Fixed invalid config values");
}
}
}
Auto-Configuration
On first run, the mod automatically configures itself based on system resources:
// From Config.load() source:
int cores = Runtime.getRuntime().availableProcessors();
long maxMemory = Runtime.getRuntime().maxMemory() / (1024 * 1024); // MB
// Defaults:
DATA.maxActiveTasks = 20;
DATA.generationRadius = 128;
Users can adjust these values through the config file or programmatically.
Thread Safety
load() and save() are NOT thread-safe - call from server thread only
- Reading
Config.DATA fields is safe from any thread
- Modifying
Config.DATA should be followed by save() and scheduleConfigReload()
Best Practices
-
Always call
scheduleConfigReload() after modifying config:
Config.DATA.generationRadius = 256;
Config.save();
ChunkGenerationManager.getInstance().scheduleConfigReload();
-
Validate user input before applying:
int radius = Math.max(16, Math.min(512, userInput));
Config.DATA.generationRadius = radius;
-
Load config early during mod initialization:
@Override
public void onInitialize() {
Config.load();
// Other initialization...
}
-
Don’t modify during generation - use
scheduleConfigReload() to apply changes safely on the next tick
See Also