/// <summary> /// Allow an Identifiable.Id to be put into a <see cref="SiloStorage"/> inventory /// </summary> /// <param name="typeId"></param> /// <param name="id"></param> public static void RegisterSiloAmmo(SiloStorage.StorageType typeId, Identifiable.Id id) { if (!siloPrefabs.ContainsKey(typeId)) { siloPrefabs[typeId] = new HashSet <Identifiable.Id>(); } siloPrefabs[typeId].Add(id); }
internal static void InjectStorageAmmo(SiloStorage.StorageType type, HashSet <Identifiable.Id> idSet) { if (!STORAGE_AMMO.ContainsKey(type)) { return; } idSet.UnionWith(STORAGE_AMMO[type]); }
public static void Postfix(SiloStorage.StorageType type, HashSet <Identifiable.Id> __result) { if (!AmmoRegistry.siloPrefabs.ContainsKey(type)) { return; } foreach (var v in AmmoRegistry.siloPrefabs[type]) { __result.Add(v); } }
/// <summary> /// Registers a new ammo for the storage inventories /// </summary> /// <param name="type">The type of storage to register to</param> /// <param name="id">The id to register</param> public static void RegisterStorageAmmo(SiloStorage.StorageType type, Identifiable.Id id) { if (ModLoader.CurrentStep != LoadingState.REGISTER) { throw new Exception("You can only register things during the 'Register' step"); } if (!STORAGE_AMMO.ContainsKey(type)) { STORAGE_AMMO.Add(type, new HashSet <Identifiable.Id>(Identifiable.idComparer)); } STORAGE_AMMO[type].Add(id); }
private static bool GetContents_Prefix(SiloStorage.StorageType type, ref HashSet <Identifiable.Id> @return) { FieldInfo cacheField = typeof(StorageTypeExtensions).GetField("getContentsCache", BindingFlags.Static | BindingFlags.NonPublic); Dictionary <SiloStorage.StorageType, HashSet <Identifiable.Id> > cache = cacheField?.GetValue(null) as Dictionary <SiloStorage.StorageType, HashSet <Identifiable.Id> >; if (cache != null && cache.ContainsKey(type)) { @return = cache[type]; return(false); } HashSet <Identifiable.Id> idSet = new HashSet <Identifiable.Id>(Identifiable.idComparer); switch (type) { case SiloStorage.StorageType.NON_SLIMES: IdentifiableRegistry.PopulateHashSet(idSet, IdentifiableType.NON_SLIME, IdentifiableType.ORNAMENT, IdentifiableType.ECHO, IdentifiableType.ECHO_NOTE); break; case SiloStorage.StorageType.PLORT: IdentifiableRegistry.PopulateHashSet(idSet, IdentifiableType.PLORT); break; case SiloStorage.StorageType.FOOD: IdentifiableRegistry.PopulateHashSet(idSet, IdentifiableType.FOOD, IdentifiableType.CHICK); break; case SiloStorage.StorageType.CRAFTING: IdentifiableRegistry.PopulateHashSet(idSet, IdentifiableType.PLORT, IdentifiableType.CRAFT); break; case SiloStorage.StorageType.ELDER: IdentifiableRegistry.PopulateHashSet(idSet, IdentifiableType.ELDER); break; } idSet.Remove(Identifiable.Id.QUICKSILVER_PLORT); AmmoRegistry.InjectStorageAmmo(type, idSet); cache?.Add(type, idSet); cacheField?.SetValue(null, cache); @return = idSet; return(false); }
// Methods protected override bool ValidSiloAmmo(SiloStorage.StorageType type) => false;
protected override bool ValidSiloAmmo(SiloStorage.StorageType type) => type == SiloStorage.StorageType.NON_SLIMES || type == SiloStorage.StorageType.FOOD || (IsElder && type == SiloStorage.StorageType.ELDER);
protected override bool ValidSiloAmmo(SiloStorage.StorageType type) { return(false); }
// Methods protected override bool ValidSiloAmmo(SiloStorage.StorageType type) => type == SiloStorage.StorageType.NON_SLIMES || type == SiloStorage.StorageType.FOOD;
internal static bool IsStorageTypeRegistered(SiloStorage.StorageType type) => !VANILLA_STORAGE_TYPE.Contains(type) && STORAGE_AMMO.ContainsKey(type);
// Methods protected virtual bool ValidSiloAmmo(SiloStorage.StorageType type) => type == SiloStorage.StorageType.NON_SLIMES;