C#:
using System;
using Newtonsoft.Json;
namespace Oxide.Plugins
{
[Info("NoTwig", "wGw", "1.0.4")]
[Description("Building-blocked players cannot place building blocks. TC auth uses the server as-is.")]
public class NoTwig : RustPlugin
{
private ConfigData _config;
private class ConfigData
{
[JsonProperty("Block twig")]
public bool BlockTwig = true;
[JsonProperty("Block ladders")]
public bool BlockLadders = false;
}
protected override void LoadDefaultConfig() => _config = new ConfigData();
protected override void LoadConfig()
{
base.LoadConfig();
try
{
_config = Config.ReadObject<ConfigData>();
if (_config == null) throw new Exception();
}
catch
{
PrintError("Config corrupt - loading defaults.");
LoadDefaultConfig();
}
SaveConfig();
}
protected override void SaveConfig() => Config.WriteObject(_config, true);
protected override void LoadDefaultMessages()
{
lang.RegisterMessages(new System.Collections.Generic.Dictionary<string, string>
{
["NoBuild"] = "Hard no."
}, this);
}
private object CanBuild(Planner planner, Construction construction, Construction.Target target)
{
if (planner == null || construction == null)
return null;
if (!_config.BlockTwig && !_config.BlockLadders)
return null;
BasePlayer player = planner.GetOwnerPlayer();
if (player == null || player.IsBuildingAuthed())
return null;
if (!player.IsBuildingBlocked())
return null;
bool deny = false;
if (_config.BlockTwig && IsBuildingCore(construction))
deny = true;
else if (_config.BlockLadders && IsWoodenLadder(construction))
deny = true;
if (!deny)
return null;
player.ChatMessage(lang.GetMessage("NoBuild", this, player.UserIDString));
return false;
}
private static bool IsBuildingCore(Construction construction)
{
string name = construction.fullName;
return name != null && name.IndexOf("building core", StringComparison.OrdinalIgnoreCase) >= 0;
}
private static bool IsWoodenLadder(Construction construction)
{
string name = construction.fullName;
return name != null && name.IndexOf("ladder.wooden", StringComparison.OrdinalIgnoreCase) >= 0;
}
}
}