From 94fd8b118de50caa9863b8e9f73b024e1d491ff8 Mon Sep 17 00:00:00 2001 From: BruceChen Date: Mon, 25 Jul 2022 18:11:10 +0800 Subject: [PATCH] "/move X Y Z" now moves the player to the center of the block first --- MinecraftClient/Commands/Move.cs | 18 +++++++++++++++--- MinecraftClient/Mapping/Location.cs | 2 +- MinecraftClient/Resources/lang/en.ini | 2 +- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/MinecraftClient/Commands/Move.cs b/MinecraftClient/Commands/Move.cs index 4ccd033a..8b5fecab 100644 --- a/MinecraftClient/Commands/Move.cs +++ b/MinecraftClient/Commands/Move.cs @@ -8,7 +8,7 @@ namespace MinecraftClient.Commands public class Move : Command { public override string CmdName { get { return "move"; } } - public override string CmdUsage { get { return "move [-f]"; } } + public override string CmdUsage { get { return "move [-f]"; } } public override string CmdDesc { get { return "walk or start walking. \"-f\": force unsafe movements like falling or touching fire"; } } public override string Run(McClient handler, string command, Dictionary localVars) @@ -63,6 +63,13 @@ namespace MinecraftClient.Commands case "west": direction = Direction.West; break; case "north": direction = Direction.North; break; case "south": direction = Direction.South; break; + case "center": + { + Location current = handler.GetCurrentLocation(); + Location currentCenter = new Location(Math.Floor(current.X) + 0.5, current.Y, Math.Floor(current.Z) + 0.5); + handler.MoveTo(currentCenter, allowDirectTeleport: true); + return Translations.Get("cmd.move.walk", currentCenter, current); + } case "get": return handler.GetCurrentLocation().ToString(); default: return Translations.Get("cmd.look.unknown", args[0]); } @@ -85,8 +92,13 @@ namespace MinecraftClient.Commands if (handler.GetWorld().GetChunkColumn(goal) == null || handler.GetWorld().GetChunkColumn(goal).FullyLoaded == false) return Translations.Get("cmd.move.chunk_not_loaded"); - else if (handler.MoveTo(goal, allowUnsafe: takeRisk)) - return Translations.Get("cmd.move.walk", goal); + + Location current = handler.GetCurrentLocation(); + Location currentCenter = new Location(Math.Floor(current.X) + 0.5, current.Y, Math.Floor(current.Z) + 0.5); + handler.MoveTo(currentCenter, allowDirectTeleport: true); + + if (handler.MoveTo(goal, allowUnsafe: takeRisk)) + return Translations.Get("cmd.move.walk", goal, current); else return takeRisk ? Translations.Get("cmd.move.fail", goal) : Translations.Get("cmd.move.suggestforce", goal); } catch (FormatException) { return GetCmdDescTranslated(); } diff --git a/MinecraftClient/Mapping/Location.cs b/MinecraftClient/Mapping/Location.cs index e8f2178d..9dab848a 100644 --- a/MinecraftClient/Mapping/Location.cs +++ b/MinecraftClient/Mapping/Location.cs @@ -307,7 +307,7 @@ namespace MinecraftClient.Mapping /// String representation of the location public override string ToString() { - return String.Format("X:{0} Y:{1} Z:{2}", X, Y, Z); + return String.Format("X:{0:0.00} Y:{1:0.00} Z:{2:0.00}", X, Y, Z); } } } diff --git a/MinecraftClient/Resources/lang/en.ini b/MinecraftClient/Resources/lang/en.ini index c3f5901e..c773e62c 100644 --- a/MinecraftClient/Resources/lang/en.ini +++ b/MinecraftClient/Resources/lang/en.ini @@ -314,7 +314,7 @@ cmd.move.enable=Enabling Terrain and Movements on next server login, respawn or cmd.move.disable=Disabling Terrain and Movements. cmd.move.moving=Moving {0} cmd.move.dir_fail=Cannot move in that direction. -cmd.move.walk=Walking to {0} +cmd.move.walk=Walking from {1} to {0} cmd.move.fail=Failed to compute path to {0} cmd.move.suggestforce=Failed to compute a safe path to {0}. Try -f parameter to allow unsafe movements. cmd.move.gravity.enabled=Gravity is enabled.