This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
TrueCraft/TrueCraft.Core/Logic/ItemRepository.cs
2015-06-26 17:56:07 -06:00

66 lines
1.9 KiB
C#

using System;
using TrueCraft.API.Logic;
using System.Collections.Generic;
using System.Linq;
using TrueCraft.API.Entities;
using TrueCraft.API;
using TrueCraft.API.World;
namespace TrueCraft.Core.Logic
{
public class ItemRepository : IItemRepository
{
public ItemRepository()
{
ItemProviders = new List<IItemProvider>();
}
private readonly List<IItemProvider> ItemProviders = new List<IItemProvider>();
public IItemProvider GetItemProvider(short id)
{
// TODO: Binary search
for (int i = 0; i < ItemProviders.Count; i++)
{
if (ItemProviders[i].ID == id)
return ItemProviders[i];
}
return null;
}
public void RegisterItemProvider(IItemProvider provider)
{
int i;
for (i = ItemProviders.Count - 1; i >= 0; i--)
{
if (provider.ID == ItemProviders[i].ID)
{
ItemProviders[i] = provider; // Override
return;
}
if (ItemProviders[i].ID < provider.ID)
break;
}
ItemProviders.Insert(i + 1, provider);
}
public void DiscoverItemProviders()
{
var providerTypes = new List<Type>();
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (var type in assembly.GetTypes().Where(t =>
typeof(IItemProvider).IsAssignableFrom(t) && !t.IsAbstract))
{
providerTypes.Add(type);
}
}
providerTypes.ForEach(t =>
{
var instance = (IItemProvider)Activator.CreateInstance(t);
RegisterItemProvider(instance);
});
}
}
}