Register Living World command root
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
package com.livingworld.commands;
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.mojang.brigadier.CommandDispatcher;
|
||||
import com.mojang.brigadier.arguments.IntegerArgumentType;
|
||||
|
||||
import net.minecraft.commands.CommandSourceStack;
|
||||
import net.minecraft.commands.Commands;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
||||
import com.livingworld.core.simulation.SimulationManager;
|
||||
import com.livingworld.modules.ModuleRegistry;
|
||||
import com.livingworld.regions.RegionManager;
|
||||
|
||||
/**
|
||||
* Registers the root Living World debug command tree.
|
||||
*/
|
||||
public final class LivingWorldCommandRoot {
|
||||
|
||||
private static final int OPERATOR_PERMISSION_LEVEL = 2;
|
||||
|
||||
private LivingWorldCommandRoot() {
|
||||
}
|
||||
|
||||
public static void register(
|
||||
CommandDispatcher<CommandSourceStack> dispatcher,
|
||||
RegionManager regionManager,
|
||||
ModuleRegistry moduleRegistry,
|
||||
SimulationManager simulationManager) {
|
||||
if (dispatcher == null) {
|
||||
throw new IllegalArgumentException("dispatcher must not be null");
|
||||
}
|
||||
if (regionManager == null) {
|
||||
throw new IllegalArgumentException("regionManager must not be null");
|
||||
}
|
||||
if (moduleRegistry == null) {
|
||||
throw new IllegalArgumentException("moduleRegistry must not be null");
|
||||
}
|
||||
if (simulationManager == null) {
|
||||
throw new IllegalArgumentException("simulationManager must not be null");
|
||||
}
|
||||
|
||||
dispatcher.register(Commands.literal("lw")
|
||||
.requires(source -> source.hasPermission(OPERATOR_PERMISSION_LEVEL))
|
||||
.then(Commands.literal("status")
|
||||
.executes(context -> showStatus(
|
||||
context.getSource(), regionManager, moduleRegistry, simulationManager)))
|
||||
.then(Commands.literal("region")
|
||||
.then(Commands.literal("info")
|
||||
.executes(context -> placeholder(
|
||||
context.getSource(), "Region inspection is not connected yet."))))
|
||||
.then(Commands.literal("modules")
|
||||
.then(Commands.literal("list")
|
||||
.executes(context -> listModules(
|
||||
context.getSource(), moduleRegistry))))
|
||||
.then(Commands.literal("simulate")
|
||||
.then(Commands.argument("ticks", IntegerArgumentType.integer(1, 1000))
|
||||
.executes(context -> placeholder(
|
||||
context.getSource(), "Forced simulation is not connected yet.")))));
|
||||
}
|
||||
|
||||
private static int showStatus(
|
||||
CommandSourceStack source,
|
||||
RegionManager regionManager,
|
||||
ModuleRegistry moduleRegistry,
|
||||
SimulationManager simulationManager) {
|
||||
String message = "Living World status: activeRegions=" + regionManager.getActiveRegions().size()
|
||||
+ ", enabledModules=" + moduleRegistry.getEnabledModules().size()
|
||||
+ ", simulationTick=" + simulationManager.getSimulationTickCounter();
|
||||
source.sendSuccess(() -> Component.literal(message), false);
|
||||
return 1;
|
||||
}
|
||||
|
||||
private static int listModules(
|
||||
CommandSourceStack source,
|
||||
ModuleRegistry moduleRegistry) {
|
||||
String moduleIds = moduleRegistry.getAllModules().stream()
|
||||
.map(module -> module.getModuleId()
|
||||
+ (module.getMetadata().defaultEnabled() ? " [enabled]" : " [disabled]"))
|
||||
.collect(Collectors.joining(", "));
|
||||
if (moduleIds.isEmpty()) {
|
||||
moduleIds = "none";
|
||||
}
|
||||
String message = "Living World modules: " + moduleIds;
|
||||
source.sendSuccess(() -> Component.literal(message), false);
|
||||
return 1;
|
||||
}
|
||||
|
||||
private static int placeholder(CommandSourceStack source, String message) {
|
||||
source.sendFailure(Component.literal(message));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user