Changed the bed command to be able to sleep. Added relative coordinates to /dig command.

This commit is contained in:
Milutinke 2022-09-28 22:43:14 +02:00
parent 6a266c68c3
commit cd3adfa14c
5 changed files with 94 additions and 13 deletions

View file

@ -33,7 +33,7 @@ namespace MinecraftClient.ChatBots
deleteAllOnExit = Settings.Map_Delete_All_On_Unload;
notifyOnFirstUpdate = Settings.Map_Notify_On_First_Update;
RegisterChatBotCommand("maps", "bot.map.cmd.desc", "maps <list/render <id>> | maps <l/r <id>>", OnMapCommand);
RegisterChatBotCommand("maps", "bot.map.cmd.desc", "maps list|render <id> or maps l|r <id>", OnMapCommand);
}
public override void OnUnload()

View file

@ -24,9 +24,11 @@ namespace MinecraftClient.Commands
{
try
{
int x = int.Parse(args[0]);
int y = int.Parse(args[1]);
int z = int.Parse(args[2]);
Location current = handler.GetCurrentLocation();
double x = args[0].StartsWith('~') ? current.X + (args[0].Length > 1 ? double.Parse(args[0][1..]) : 0) : double.Parse(args[0]);
double y = args[1].StartsWith('~') ? current.Y + (args[1].Length > 1 ? double.Parse(args[1][1..]) : 0) : double.Parse(args[1]);
double z = args[2].StartsWith('~') ? current.Z + (args[2].Length > 1 ? double.Parse(args[2][1..]) : 0) : double.Parse(args[2]);
Location blockToBreak = new Location(x, y, z);
if (blockToBreak.DistanceSquared(handler.GetCurrentLocation().EyesLocation()) > 25)
return Translations.Get("cmd.dig.too_far");

View file

@ -1,17 +1,60 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MinecraftClient.Mapping;
using PInvoke;
namespace MinecraftClient.Commands
{
public class leaveBedCommand : Command
public class BedCommand : Command
{
public override string CmdName { get { return "leavebed"; } }
public override string CmdUsage { get { return "leavebed"; } }
public override string CmdDesc { get { return "cmd.leavebed.desc"; } }
public override string CmdName { get { return "bed"; } }
public override string CmdUsage { get { return "bed leave|sleep <x> <y> <z>"; } }
public override string CmdDesc { get { return "cmd.bed.desc"; } }
public override string Run(McClient handler, string command, Dictionary<string, object> localVars)
{
handler.SendEntityAction(Protocol.EntityActionType.LeaveBed);
return Translations.TryGet("cmd.leavebed.leaving");
string[] args = getArgs(command);
if (args.Length >= 1)
{
string subcommand = args[0].ToLower().Trim();
if (subcommand.Equals("leave") || subcommand.Equals("l"))
{
handler.SendEntityAction(Protocol.EntityActionType.LeaveBed);
return Translations.TryGet("cmd.bed.leaving");
}
if (subcommand.Equals("sleep") || subcommand.Equals("s"))
{
if (args.Length >= 3)
{
Location current = handler.GetCurrentLocation();
double x = args[1].StartsWith('~') ? current.X + (args[1].Length > 1 ? double.Parse(args[1][1..]) : 0) : double.Parse(args[1]);
double y = args[2].StartsWith('~') ? current.Y + (args[2].Length > 1 ? double.Parse(args[2][1..]) : 0) : double.Parse(args[2]);
double z = args[3].StartsWith('~') ? current.Z + (args[3].Length > 1 ? double.Parse(args[3][1..]) : 0) : double.Parse(args[3]);
Location block = new Location(x, y, z).ToFloor(), blockCenter = block.ToCenter();
if (!handler.GetWorld().GetBlock(block).Type.IsBed())
return Translations.TryGet("cmd.bed.not_a_bed", blockCenter.X, blockCenter.Y, blockCenter.Z);
bool res = handler.PlaceBlock(block, Direction.Down);
return Translations.TryGet(
"cmd.bed.trying_to_use",
blockCenter.X,
blockCenter.Y,
blockCenter.Z,
Translations.TryGet(res ? "cmd.bed.in" : "cmd.bed.not_in")
);
}
}
}
return CmdUsage;
}
}
}

View file

@ -752,6 +752,7 @@ namespace MinecraftClient.Mapping
return false;
}
}
/// <summary>
/// Check if the provided material is a liquid a player can swim into
/// </summary>
@ -768,5 +769,36 @@ namespace MinecraftClient.Mapping
return false;
}
}
/// <summary>
/// Check if the provided material is a bed
/// </summary>
/// <param name="m">Material to test</param>
/// <returns>True if the material is a bed</returns>
public static bool IsBed(this Material m)
{
switch (m)
{
case Material.BlackBed:
case Material.BlueBed:
case Material.BrownBed:
case Material.CyanBed:
case Material.GrayBed:
case Material.GreenBed:
case Material.LightBlueBed:
case Material.LightGrayBed:
case Material.LimeBed:
case Material.MagentaBed:
case Material.OrangeBed:
case Material.PinkBed:
case Material.PurpleBed:
case Material.RedBed:
case Material.WhiteBed:
case Material.YellowBed:
return true;
default:
return false;
}
}
}
}

View file

@ -344,8 +344,12 @@ cmd.inventory.found_items=Found items
cmd.inventory.no_found_items=Could not find the specified item in any of avaliable Inventories!
# Leave bed
cmd.leavebed.desc=Used to leave a bed.
cmd.leavebed.leaving=Leaving a bed.
cmd.bed.desc=Used to sleep in or leave a bed.
cmd.bed.leaving=Sending a command to leave a bed to the server.
cmd.bed.trying_to_use=Trying to sleep in a bed on location (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}). Result: {3}
cmd.bed.in=Succesfully laid in bed!
cmd.bed.not_in=Could not lay in bed. Are you trying to sleep in a bed? (PS: You must use the head block coordinates of the bed)
cmd.bed.not_a_bed=The block on (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) is not a bed!
# List
cmd.list.desc=get the player list.