104 lines
No EOL
3.6 KiB
C#
104 lines
No EOL
3.6 KiB
C#
using System;
|
|
using System.Linq;
|
|
using Gamecraft.Wires;
|
|
using GamecraftModdingAPI;
|
|
using GamecraftModdingAPI.Blocks;
|
|
using GamecraftModdingAPI.Utility;
|
|
using RobocraftX.CommandLine.Custom;
|
|
using uREPL;
|
|
|
|
namespace BlockMod
|
|
{
|
|
public class CommandUtils
|
|
{
|
|
private BlockSelections _blockSelections;
|
|
|
|
public CommandUtils(BlockSelections blockSelections)
|
|
{
|
|
_blockSelections = blockSelections;
|
|
}
|
|
|
|
private void RegisterBlockCommandInternal(string name, string desc, Action<string, Block[], Block> action)
|
|
{
|
|
RuntimeCommands.Register<string>(name, a1 =>
|
|
{
|
|
action(a1, _blockSelections.blocks, _blockSelections.refBlock);
|
|
}, desc);
|
|
ConsoleCommands.RegisterWithChannel<string>(name, (a1, ch) =>
|
|
{
|
|
Console.WriteLine($"Command {name} with args {a1} and channel {ch} executing");
|
|
var blks = _blockSelections.SelectBlocks(ch);
|
|
action(a1, blks, blks[0]);
|
|
}, ChannelType.Object, desc);
|
|
}
|
|
|
|
public void RegisterBlockCommand(string name, string desc, Action<float, float, float, Block[], Block> action)
|
|
{
|
|
RegisterBlockCommandInternal(name, desc, (args, bs, b) =>
|
|
{
|
|
var argsa = args.Split(' ');
|
|
if (argsa.Length < 3)
|
|
{
|
|
Log.Error("Too few arguments. Needed arguments are: <x> <y> <z> and [id] is optional.");
|
|
return;
|
|
}
|
|
|
|
if (!float.TryParse(argsa[0], out float x) || !float.TryParse(argsa[1], out float y) ||
|
|
!float.TryParse(argsa[2], out float z))
|
|
{
|
|
Log.Error("Could not parse arguments as floats.");
|
|
return;
|
|
}
|
|
|
|
if (argsa.Length > 3)
|
|
{
|
|
if (argsa[3].Length == 0)
|
|
{
|
|
Log.Error("Missing channel.");
|
|
return;
|
|
}
|
|
|
|
var blocks = _blockSelections.SelectBlocks(argsa[3][0]);
|
|
if (_blockSelections.CheckNoBlocks(blocks)) return;
|
|
action(x, y, z, blocks, blocks[0]);
|
|
}
|
|
else if (!_blockSelections.CheckNoBlocks(bs))
|
|
action(x, y, z, bs, b);
|
|
});
|
|
}
|
|
|
|
public void RegisterBlockCommand(string name, string desc, Action<string, byte, Block[], Block> action)
|
|
{
|
|
RegisterBlockCommandInternal(name, desc, (args, bs, b) =>
|
|
{
|
|
var argsa = args.Split(' ');
|
|
if (argsa.Length < 2)
|
|
{
|
|
Log.Error("Too few arguments. Needed arguments are: <color> <darkness> and [id] is optional.");
|
|
return;
|
|
}
|
|
|
|
if (!byte.TryParse(argsa[1], out byte darkness))
|
|
{
|
|
Log.Error("Could not parse color darkness.");
|
|
return;
|
|
}
|
|
|
|
if (argsa.Length > 2)
|
|
{
|
|
if (argsa[2].Length == 0)
|
|
{
|
|
Log.Error("Missing channel.");
|
|
return;
|
|
}
|
|
|
|
var blocks = _blockSelections.SelectBlocks(argsa[2][0]);
|
|
if (_blockSelections.CheckNoBlocks(blocks)) return;
|
|
action(argsa[0], darkness, blocks, blocks[0]);
|
|
}
|
|
else if(!_blockSelections.CheckNoBlocks(bs))
|
|
action(argsa[0], darkness, bs, b);
|
|
});
|
|
}
|
|
}
|
|
} |