1. Code:
    public class ZeroLoader : PluginLoader
        {
            private Dictionary<string, Type> plugins = new Dictionary<string, Type>();        public ZeroLoader()
            {
                this.GetType().Assembly.GetTypes().Where(t => t.Namespace == "Oxide.Ext.Zero.Plugins").ToList().ForEach(t => plugins.Add(t.Name, t));
            }        public override Plugin Load(string directory, string name)
            {
                if (plugins.ContainsKey(name))
                {
                    object obj = Activator.CreateInstance(plugins[name], true);
                    if (obj != null)
                    {
                        Plugin plugin = (Plugin) obj;
                        return plugin;
                    } else
                        Interface.Oxide.LogError("Plugin <"+name+"> is not initialized!");
                }
                return null;
            }        public override IEnumerable<string> ScanDirectory(string directory) => plugins.Keys;
        }
    Code:
    public class ZeroExtension : Extension
        {
            public ZeroExtension(ExtensionManager manager) : base(manager) { }        public override string Name => "Zero";
            public override string Author => "TheRyuzaki";
            public override VersionNumber Version => new VersionNumber(0,0,1);        public override void Load()
            {
                SingletonType<ZeroExtension>.Setup(this);
                Manager.RegisterPluginLoader(SingletonType<ZeroLoader>.Instance);
            }
        }
    Code:
     public class ZeroPlayer : RustPlugin
        {
            public ZeroPlayer()
            {
                this.Name = this.GetType().Name;
                this.Author = SingletonType<ZeroExtension>.Instance.Author;
                this.Version = new VersionNumber(0,0,1);
            }        private void Unload() => Interface.Oxide.LogWarning("Unload");
            private void Loaded() => Interface.Oxide.LogWarning("Loaded");    }
    Screenshot
    What is it? Need fixed =(
     
  2. Code:
    public override Plugin Load(string directory, string name)
            {
                if (plugins.ContainsKey(name))
                {
                    object obj = Activator.CreateInstance(plugins[name], true);
                    if (obj != null)
                    {
                        CSharpPlugin plugin = (CSharpPlugin) obj;
                        plugin.Loader = this;
                        plugin.Watcher = new FSWatcher(Interface.Oxide.PluginDirectory, ".zero");
                        return plugin;
                    } else
                        Interface.Oxide.LogError("Plugin <"+name+"> is not initialized!");
                }
                return null;
            }
    this is good code - Oxide default - dont have Watcher to plugin!