C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
using Newtonsoft.Json;
namespace Oxide.Plugins
{
[Info("Storage Blocker", "Orange", "1.1.0")]
[Description("Allows to setup items that can't be moved to certain containers")]
public class StorageBlocker : RustPlugin
{
#region Oxide Hooks
ItemContainer.CanAcceptResult CanAcceptItem(ItemContainer container, Item item, int targetPos)
{
return CheckConiner(container?.entityOwner?.ShortPrefabName ?? "null", item?.info?.shortname ?? "null");
}
#endregion
#region Configuration
private ConfigData config;
private class ConfigData
{
[JsonProperty(PropertyName = "Container (shortname) - list of items (shortname)")]
public Dictionary<string, List<string>> containers;
}
private ConfigData GetDefaultConfig()
{
return new ConfigData
{
containers = new Dictionary<string, List<string>>
{
["box.example"] = new List<string>
{
"item.example",
"item.example",
"item.example"
},
["box.wooden.large"] = new List<string>
{
"battery.small",
"blood"
}
}
};
}
protected override void LoadConfig()
{
base.LoadConfig();
try
{
config = Config.ReadObject<ConfigData>();
}
catch
{
LoadDefaultConfig();
}
SaveConfig();
}
protected override void LoadDefaultConfig()
{
PrintError("Configuration file is corrupt(or not exists), creating new one!");
config = GetDefaultConfig();
}
protected override void SaveConfig()
{
Config.WriteObject(config);
}
#endregion
#region Helpers
private ItemContainer.CanAcceptResult CheckConiner(string container, string item)
{
if (!config.containers.ContainsKey(container))
{
return ItemContainer.CanAcceptResult.CanAccept;
}
return config.containers[container].Contains(item) ? ItemContainer.CanAcceptResult.CannotAccept : ItemContainer.CanAcceptResult.CanAccept;
}
#endregion
}
}