Spaces:
Build error
Build error
package net.minecraft.server.commands; | |
import com.google.common.collect.BiMap; | |
import com.google.common.collect.ImmutableBiMap; | |
import com.mojang.brigadier.CommandDispatcher; | |
import com.mojang.brigadier.arguments.IntegerArgumentType; | |
import com.mojang.brigadier.arguments.StringArgumentType; | |
import com.mojang.brigadier.context.CommandContext; | |
import com.mojang.logging.LogUtils; | |
import java.io.IOException; | |
import javax.annotation.Nullable; | |
import net.minecraft.commands.CommandSourceStack; | |
import net.minecraft.commands.Commands; | |
import net.minecraft.network.chat.Component; | |
import net.minecraft.resources.ResourceKey; | |
import net.minecraft.server.chase.ChaseClient; | |
import net.minecraft.server.chase.ChaseServer; | |
import net.minecraft.world.level.Level; | |
import org.slf4j.Logger; | |
public class ChaseCommand { | |
private static final Logger LOGGER = LogUtils.getLogger(); | |
private static final String DEFAULT_CONNECT_HOST = "localhost"; | |
private static final String DEFAULT_BIND_ADDRESS = "0.0.0.0"; | |
private static final int DEFAULT_PORT = 10000; | |
private static final int BROADCAST_INTERVAL_MS = 100; | |
public static BiMap<String, ResourceKey<Level>> DIMENSION_NAMES = ImmutableBiMap.of("o", Level.OVERWORLD, "n", Level.NETHER, "e", Level.END); | |
private static ChaseServer chaseServer; | |
private static ChaseClient chaseClient; | |
public static void register(CommandDispatcher<CommandSourceStack> p_196078_) { | |
p_196078_.register( | |
Commands.literal("chase") | |
.then( | |
Commands.literal("follow") | |
.then( | |
Commands.argument("host", StringArgumentType.string()) | |
.executes(p_196104_ -> follow(p_196104_.getSource(), StringArgumentType.getString(p_196104_, "host"), 10000)) | |
.then( | |
Commands.argument("port", IntegerArgumentType.integer(1, 65535)) | |
.executes( | |
p_196102_ -> follow( | |
p_196102_.getSource(), | |
StringArgumentType.getString(p_196102_, "host"), | |
IntegerArgumentType.getInteger(p_196102_, "port") | |
) | |
) | |
) | |
) | |
.executes(p_196100_ -> follow(p_196100_.getSource(), "localhost", 10000)) | |
) | |
.then( | |
Commands.literal("lead") | |
.then( | |
Commands.argument("bind_address", StringArgumentType.string()) | |
.executes(p_196098_ -> lead(p_196098_.getSource(), StringArgumentType.getString(p_196098_, "bind_address"), 10000)) | |
.then( | |
Commands.argument("port", IntegerArgumentType.integer(1024, 65535)) | |
.executes( | |
p_196096_ -> lead( | |
p_196096_.getSource(), | |
StringArgumentType.getString(p_196096_, "bind_address"), | |
IntegerArgumentType.getInteger(p_196096_, "port") | |
) | |
) | |
) | |
) | |
.executes(p_196088_ -> lead(p_196088_.getSource(), "0.0.0.0", 10000)) | |
) | |
.then(Commands.literal("stop").executes(p_196080_ -> stop(p_196080_.getSource()))) | |
); | |
} | |
private static int stop(CommandSourceStack p_196082_) { | |
if (chaseClient != null) { | |
chaseClient.stop(); | |
p_196082_.sendSuccess(() -> Component.literal("You have now stopped chasing"), false); | |
chaseClient = null; | |
} | |
if (chaseServer != null) { | |
chaseServer.stop(); | |
p_196082_.sendSuccess(() -> Component.literal("You are no longer being chased"), false); | |
chaseServer = null; | |
} | |
return 0; | |
} | |
private static boolean alreadyRunning(CommandSourceStack p_196090_) { | |
if (chaseServer != null) { | |
p_196090_.sendFailure(Component.literal("Chase server is already running. Stop it using /chase stop")); | |
return true; | |
} else if (chaseClient != null) { | |
p_196090_.sendFailure(Component.literal("You are already chasing someone. Stop it using /chase stop")); | |
return true; | |
} else { | |
return false; | |
} | |
} | |
private static int lead(CommandSourceStack p_196084_, String p_196085_, int p_196086_) { | |
if (alreadyRunning(p_196084_)) { | |
return 0; | |
} else { | |
chaseServer = new ChaseServer(p_196085_, p_196086_, p_196084_.getServer().getPlayerList(), 100); | |
try { | |
chaseServer.start(); | |
p_196084_.sendSuccess( | |
() -> Component.literal("Chase server is now running on port " + p_196086_ + ". Clients can follow you using /chase follow <ip> <port>"), | |
false | |
); | |
} catch (IOException ioexception) { | |
LOGGER.error("Failed to start chase server", (Throwable)ioexception); | |
p_196084_.sendFailure(Component.literal("Failed to start chase server on port " + p_196086_)); | |
chaseServer = null; | |
} | |
return 0; | |
} | |
} | |
private static int follow(CommandSourceStack p_196092_, String p_196093_, int p_196094_) { | |
if (alreadyRunning(p_196092_)) { | |
return 0; | |
} else { | |
chaseClient = new ChaseClient(p_196093_, p_196094_, p_196092_.getServer()); | |
chaseClient.start(); | |
p_196092_.sendSuccess( | |
() -> Component.literal( | |
"You are now chasing " | |
+ p_196093_ | |
+ ":" | |
+ p_196094_ | |
+ ". If that server does '/chase lead' then you will automatically go to the same position. Use '/chase stop' to stop chasing." | |
), | |
false | |
); | |
return 0; | |
} | |
} | |
} |