Skip to content

Commit aed08bb

Browse files
committed
Add permissions and player commands.
1 parent 80fdd2e commit aed08bb

4 files changed

Lines changed: 78 additions & 0 deletions

File tree

Essentials/EntityCommands.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
using System.Text;
55
using System.Threading.Tasks;
66
using Torch.Commands;
7+
using Torch.Commands.Permissions;
8+
using VRage.Game.ModAPI;
79
using VRage.ModAPI;
810
using VRageMath;
911

@@ -13,6 +15,7 @@ namespace Essentials
1315
public class EntityCommands : CommandModule
1416
{
1517
[Command("stop", "Stops an entity from moving")]
18+
[Permission(MyPromoteLevel.Moderator)]
1619
public void Stop()
1720
{
1821
if (!Utilities.TryGetEntityByNameOrId(Context.Args.FirstOrDefault(), out IMyEntity entity))
@@ -26,6 +29,7 @@ public void Stop()
2629
}
2730

2831
[Command("delete", "Delete an entity.")]
32+
[Permission(MyPromoteLevel.Moderator)]
2933
public void Delete()
3034
{
3135
if (!Utilities.TryGetEntityByNameOrId(Context.Args.FirstOrDefault(), out IMyEntity entity))

Essentials/GridCommands.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Sandbox.Game.Entities;
77
using Sandbox.ModAPI;
88
using Torch.Commands;
9+
using Torch.Commands.Permissions;
910
using VRage.Game.Entity.EntityComponents;
1011
using VRage.Game.ModAPI;
1112
using VRage.ModAPI;
@@ -16,6 +17,7 @@ namespace Essentials
1617
public class GridCommands : CommandModule
1718
{
1819
[Command("setowner", "Sets grid ownership to the given player or ID.", "Usage: setowner <grid> <newowner>")]
20+
[Permission(MyPromoteLevel.Moderator)]
1921
public void SetOwner()
2022
{
2123
var firstArg = Context.Args.FirstOrDefault();

Essentials/PlayerCommands.cs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using Torch.Commands;
7+
using Torch.Commands.Permissions;
8+
using VRage.Game.ModAPI;
9+
10+
namespace Essentials
11+
{
12+
public class PlayerCommands : CommandModule
13+
{
14+
[Command("kick", "Kick a player from the game.")]
15+
[Permission(MyPromoteLevel.Moderator)]
16+
public void Kick()
17+
{
18+
var player = Utilities.GetPlayerByNameOrId(Context.Args.FirstOrDefault());
19+
if (player != null)
20+
{
21+
Context.Torch.Multiplayer.KickPlayer(player.SteamUserId);
22+
Context.Respond($"Player '{player.DisplayName}' kicked.");
23+
}
24+
else
25+
{
26+
Context.Respond("Player not found.");
27+
}
28+
}
29+
30+
[Command("ban", "Ban a player from the game.")]
31+
[Permission(MyPromoteLevel.Moderator)]
32+
public void Ban()
33+
{
34+
var player = Utilities.GetPlayerByNameOrId(Context.Args.FirstOrDefault());
35+
if (player != null)
36+
{
37+
Context.Torch.Multiplayer.BanPlayer(player.SteamUserId);
38+
Context.Respond($"Player '{player.DisplayName}' banned.");
39+
}
40+
else
41+
{
42+
Context.Respond("Player not found.");
43+
}
44+
}
45+
46+
[Command("unban", "Unban a player from the game.")]
47+
[Permission(MyPromoteLevel.Moderator)]
48+
public void Unban()
49+
{
50+
var player = Utilities.GetPlayerByNameOrId(Context.Args.FirstOrDefault());
51+
if (player != null)
52+
{
53+
Context.Torch.Multiplayer.BanPlayer(player.SteamUserId, false);
54+
Context.Respond($"Player '{player.DisplayName}' unbanned.");
55+
}
56+
else
57+
{
58+
Context.Respond("Player not found.");
59+
}
60+
}
61+
}
62+
}

Essentials/Utilities.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
using System.Text;
55
using System.Threading.Tasks;
66
using Sandbox.ModAPI;
7+
using Torch;
8+
using VRage.Game.ModAPI;
79
using VRage.ModAPI;
810

911
namespace Essentials
@@ -17,5 +19,13 @@ public static bool TryGetEntityByNameOrId(string nameOrId, out IMyEntity entity)
1719

1820
return MyAPIGateway.Entities.TryGetEntityByName(nameOrId, out entity);
1921
}
22+
23+
public static IMyPlayer GetPlayerByNameOrId(string nameOrSteamId)
24+
{
25+
if (ulong.TryParse(nameOrSteamId, out ulong id))
26+
return TorchBase.Instance.Multiplayer.GetPlayerBySteamId(id);
27+
28+
return TorchBase.Instance.Multiplayer.GetPlayerByName(nameOrSteamId);
29+
}
2030
}
2131
}

0 commit comments

Comments
 (0)