From c75595a5e27b57a61dce759c0536fe5fcc43b8f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojt=C4=9Bch=20=C5=A0okala?= Date: Sun, 15 Mar 2026 23:17:12 +0100 Subject: [PATCH] [1.12.2] implement pregen command --- .../common/commands/CommandInitializer.java | 14 +- .../common/commands/PregenCommand.java | 122 ++++++++++++++++-- 2 files changed, 121 insertions(+), 15 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/commands/CommandInitializer.java b/common/src/main/java/com/seibel/distanthorizons/common/commands/CommandInitializer.java index fd3db3273..42a1739b5 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/commands/CommandInitializer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/commands/CommandInitializer.java @@ -47,7 +47,7 @@ public class CommandInitializer public String getName() { return "dh"; } @Override - public String getUsage(ICommandSender sender) { return "/dh "; } + public String getUsage(ICommandSender sender) { return "/dh "; } @Override public void execute(MinecraftServer server, ICommandSender sender, String[] args) @@ -56,11 +56,11 @@ public class CommandInitializer { if (DEBUG_CODEC_CRASH_MESSAGE) { - sender.sendMessage(new TextComponentString("Usage: /dh ")); + sender.sendMessage(new TextComponentString("Usage: /dh ")); } else { - sender.sendMessage(new TextComponentString("Usage: /dh MC_1_12_2 extends AbstractCommand #endif { private PregenManager getPregenManager() { @@ -31,6 +40,101 @@ public class PregenCommand extends AbstractCommand return world.getPregenManager(); } + #if MC_VER <= MC_1_12_2 + public void execute(MinecraftServer server, ICommandSender sender, String[] args) + { + if (args.length < 2) + { + sender.sendMessage(new TextComponentString("Usage: /dh pregen ")); + return; + } + + switch (args[1]) + { + case "status": + { + String statusString = this.getPregenManager().getStatusString(); + sender.sendMessage(new TextComponentString( + statusString != null ? statusString : "Pregen is not running")); + break; + } + case "start": + { + if (args.length < 5) + { + sender.sendMessage(new TextComponentString("Usage: /dh pregen start ")); + return; + } + + try + { + String dimensionName = args[2]; + int x = Integer.parseInt(args[3]); + int z = Integer.parseInt(args[4]); + int chunkRadius = args.length >= 6 ? Integer.parseInt(args[5]) : 32; + + // find the world by dimension name + WorldServer world = null; + for (WorldServer w : server.worlds) + { + if (w.provider.getDimensionType().getName().equals(dimensionName)) + { + world = w; + break; + } + } + + if (world == null) + { + sender.sendMessage(new TextComponentString("Unknown dimension: " + dimensionName)); + return; + } + + sender.sendMessage(new TextComponentString("Starting pregen. Progress will be in the server console.")); + + final ICommandSender finalSender = sender; + CompletableFuture future = this.getPregenManager().startPregen( + ServerLevelWrapper.getWrapper(world), + new DhBlockPos2D(x, z), + chunkRadius + ); + + future.whenComplete((result, throwable) -> { + if (throwable instanceof CancellationException) + { + finalSender.sendMessage(new TextComponentString("Pregen is cancelled")); + return; + } + else if (throwable != null) + { + finalSender.sendMessage(new TextComponentString("Pregen failed: " + throwable.getMessage())); + return; + } + finalSender.sendMessage(new TextComponentString("Pregen is complete")); + }); + } + catch (NumberFormatException e) + { + sender.sendMessage(new TextComponentString("Invalid number format")); + } + break; + } + case "stop": + { + CompletableFuture runningPregen = this.getPregenManager().getRunningPregen(); + if (runningPregen == null) + { + sender.sendMessage(new TextComponentString("Pregen is not running")); + return; + } + runningPregen.cancel(true); + break; + } + default: + sender.sendMessage(new TextComponentString("Unknown subcommand: " + args[1])); + } + } + #else @Override public LiteralArgumentBuilder buildCommand() { @@ -110,5 +214,5 @@ public class PregenCommand extends AbstractCommand runningPregen.cancel(true); return 1; } - + #endif }