Marking chunk

This commit is contained in:
BruceChen 2022-09-06 15:25:27 +08:00
parent 6430f13d3e
commit c50477a712

View file

@ -9,7 +9,7 @@ namespace MinecraftClient.Commands
public class Chunk : Command public class Chunk : Command
{ {
public override string CmdName { get { return "chunk"; } } public override string CmdName { get { return "chunk"; } }
public override string CmdUsage { get { return "chunk status"; } } public override string CmdUsage { get { return "chunk status [chunkX chunkZ|locationX locationY locationZ]"; } }
public override string CmdDesc { get { return "cmd.chunk.desc"; } } public override string CmdDesc { get { return "cmd.chunk.desc"; } }
public override string Run(McClient handler, string command, Dictionary<string, object>? localVars) public override string Run(McClient handler, string command, Dictionary<string, object>? localVars)
@ -23,6 +23,10 @@ namespace MinecraftClient.Commands
{ {
World world = handler.GetWorld(); World world = handler.GetWorld();
Location current = handler.GetCurrentLocation(); Location current = handler.GetCurrentLocation();
Tuple<int, int>? markedChunkPos = ParseChunkPos(args);
(int markChunkX, int markChunkZ) = (markedChunkPos == null) ? new(current.ChunkX, current.ChunkZ) : markedChunkPos;
StringBuilder sb = new(); StringBuilder sb = new();
sb.Append("Current position"); sb.Append("Current position");
sb.Append(current.ToString()); sb.Append(current.ToString());
@ -40,7 +44,7 @@ namespace MinecraftClient.Commands
for (int dx = 0; dx < 32; ++dx) for (int dx = 0; dx < 32; ++dx)
{ {
ChunkColumn? chunkColumn = world[startX + dx, startZ + dz]; ChunkColumn? chunkColumn = world[startX + dx, startZ + dz];
if (dz == 16 && dx == 16) if ((dz == 16 && dx == 16) || (startZ + dz == markChunkZ && startX + dx == markChunkX))
sb.Append("§w"); // Player Location: background red sb.Append("§w"); // Player Location: background red
if (chunkColumn == null) if (chunkColumn == null)
@ -50,13 +54,13 @@ namespace MinecraftClient.Commands
else else
sb.Append("🟨"); // yellow sb.Append("🟨"); // yellow
if (dz == 16 && dx == 16) if ((dz == 16 && dx == 16) || (startZ + dz == markChunkZ && startX + dx == markChunkX))
sb.Append("§r"); sb.Append("§r");
} }
sb.Append('\n'); sb.Append('\n');
} }
sb.Append("PlayerLocation:§w §r, NotReceived:🔳, Loading:🟨, Loaded:🟩."); sb.Append("Player or marked chunk:§w §r, NotReceived:🔳, Loading:🟨, Loaded:🟩");
return sb.ToString(); return sb.ToString();
} }
else if (args[0] == "setloading") // Debug only! else if (args[0] == "setloading") // Debug only!
@ -121,7 +125,7 @@ namespace MinecraftClient.Commands
int chunkX, chunkZ; int chunkX, chunkZ;
if (args.Length == 1 + 3) if (args.Length == 1 + 3)
{ {
Location pos = new(int.Parse(args[1]), int.Parse(args[2]), int.Parse(args[3])); Location pos = new(double.Parse(args[1]), double.Parse(args[2]), double.Parse(args[3]));
chunkX = pos.ChunkX; chunkX = pos.ChunkX;
chunkZ = pos.ChunkZ; chunkZ = pos.ChunkZ;
} }