From dd3fd3c9d280c1f474464c0b8e879d9f2fb084ae Mon Sep 17 00:00:00 2001 From: Daenges <57369924+Daenges@users.noreply.github.com> Date: Wed, 29 Dec 2021 15:34:40 +0100 Subject: [PATCH] Add "-f" to the /move command (#1874) --- MinecraftClient/Commands/Move.cs | 39 ++++++++++++++++----------- MinecraftClient/Resources/lang/de.ini | 1 + MinecraftClient/Resources/lang/en.ini | 3 ++- 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/MinecraftClient/Commands/Move.cs b/MinecraftClient/Commands/Move.cs index 8b375d4b..e68131d0 100644 --- a/MinecraftClient/Commands/Move.cs +++ b/MinecraftClient/Commands/Move.cs @@ -1,7 +1,6 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; -using System.Text; using MinecraftClient.Mapping; namespace MinecraftClient.Commands @@ -9,30 +8,36 @@ namespace MinecraftClient.Commands public class Move : Command { public override string CmdName { get { return "move"; } } - public override string CmdUsage { get { return "move "; } } - public override string CmdDesc { get { return "walk or start walking."; } } + 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) { - string[] args = getArgs(command); - string argStr = getArg(command).Trim().ToLower(); + List args = getArgs(command.ToLower()).ToList(); + bool takeRisk = false; - if (argStr == "on") + if (args.Contains("-f")) + { + takeRisk = true; + args.Remove("-f"); + } + + if (args[0] == "on") { handler.SetTerrainEnabled(true); return Translations.Get("cmd.move.enable"); } - else if (argStr == "off") + else if (args[0] == "off") { handler.SetTerrainEnabled(false); return Translations.Get("cmd.move.disable"); } else if (handler.GetTerrainEnabled()) { - if (args.Length == 1) + if (args.Count == 1) { Direction direction; - switch (argStr) + switch (args[0]) { case "up": direction = Direction.Up; break; case "down": direction = Direction.Down; break; @@ -41,16 +46,17 @@ namespace MinecraftClient.Commands case "north": direction = Direction.North; break; case "south": direction = Direction.South; break; case "get": return handler.GetCurrentLocation().ToString(); - default: return Translations.Get("cmd.look.unknown", argStr); + default: return Translations.Get("cmd.look.unknown", args[0]); } if (Movement.CanMove(handler.GetWorld(), handler.GetCurrentLocation(), direction)) { - handler.MoveTo(Movement.Move(handler.GetCurrentLocation(), direction)); - return Translations.Get("cmd.move.moving", argStr); + if (handler.MoveTo(Movement.Move(handler.GetCurrentLocation(), direction), allowUnsafe: takeRisk)) + return Translations.Get("cmd.move.moving", args[0]); + else return takeRisk ? Translations.Get("cmd.move.dir_fail") : Translations.Get("cmd.move.suggestforce"); } else return Translations.Get("cmd.move.dir_fail"); } - else if (args.Length == 3) + else if (args.Count == 3) { try { @@ -58,9 +64,10 @@ namespace MinecraftClient.Commands int y = int.Parse(args[1]); int z = int.Parse(args[2]); Location goal = new Location(x, y, z); - if (handler.MoveTo(goal)) + + if (handler.MoveTo(goal, allowUnsafe: takeRisk)) return Translations.Get("cmd.move.walk", goal); - return Translations.Get("cmd.move.fail", goal); + else return takeRisk ? Translations.Get("cmd.move.fail", goal) : Translations.Get("cmd.move.suggestforce", goal); } catch (FormatException) { return GetCmdDescTranslated(); } } diff --git a/MinecraftClient/Resources/lang/de.ini b/MinecraftClient/Resources/lang/de.ini index 95c48e12..eda6a17d 100644 --- a/MinecraftClient/Resources/lang/de.ini +++ b/MinecraftClient/Resources/lang/de.ini @@ -310,6 +310,7 @@ cmd.move.moving=Laufe {0} cmd.move.dir_fail=Kann nicht in diese Richtung laufen. cmd.move.walk=Gehe nach {0} cmd.move.fail=Konnte Pfad nach {0} nicht berechnen. +cmd.move.suggestforce=Weg nach {0} konnte nicht berechnet werden. Benutze den -f Parameter, um unsichere Wege zu aktivieren. # Reco cmd.reco.desc=Starte neu und verbinde erneut zum Server. diff --git a/MinecraftClient/Resources/lang/en.ini b/MinecraftClient/Resources/lang/en.ini index 88fd780d..d24b922a 100644 --- a/MinecraftClient/Resources/lang/en.ini +++ b/MinecraftClient/Resources/lang/en.ini @@ -310,6 +310,7 @@ cmd.move.moving=Moving {0} cmd.move.dir_fail=Cannot move in that direction. cmd.move.walk=Walking 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. # Reco cmd.reco.desc=restart and reconnect to the server. @@ -503,4 +504,4 @@ bot.scriptScheduler.task=triggeronfirstlogin: {0}\n triggeronlogin: {1}\n trigge # TestBot bot.testBot.told=Bot: {0} told me : {1} -bot.testBot.said=Bot: {0} said : {1} \ No newline at end of file +bot.testBot.said=Bot: {0} said : {1}