diff --git a/R2API.ContentManagement/CatalogBlockers.cs b/R2API.ContentManagement/CatalogBlockers.cs index 1900b5d0..eb7b5081 100644 --- a/R2API.ContentManagement/CatalogBlockers.cs +++ b/R2API.ContentManagement/CatalogBlockers.cs @@ -40,7 +40,8 @@ internal static class CatalogBlockers {typeof(EntityState), true }, {typeof(ExpansionDef), true }, {typeof(EntitlementDef), true }, - {typeof(MiscPickupDef), true } + {typeof(MiscPickupDef), true }, + {typeof(CraftableDef), true } //The rest are catalogs that arent added by scriptable objects or game objects yet. }; @@ -144,5 +145,8 @@ private static void SetAvailability(bool availability) [SystemInitializer(typeof(MiscPickupCatalog))] private static void BlockMiscPickupDefs() => SetAvailability(false); + [SystemInitializer(typeof(CraftableCatalog))] + private static void BlockMiscCraftableDefs() => SetAvailability(false); + #endregion } diff --git a/R2API.ContentManagement/ContentAddition.cs b/R2API.ContentManagement/ContentAddition.cs index 36534680..9dda4da4 100644 --- a/R2API.ContentManagement/ContentAddition.cs +++ b/R2API.ContentManagement/ContentAddition.cs @@ -696,6 +696,23 @@ public static SerializableEntityStateType AddEntityState(Type entityStateType, o wasAdded = false; return new SerializableEntityStateType(); } + + /// + /// Adds a CraftableDef to your Mod's ContentPack + /// + /// The CraftableDef to Add + /// true if valid and added, false if one of the requirements is not met + public static bool AddCraftableDef(CraftableDef craftableDef) + { + var asm = GetNonAPICaller(); + if (CatalogBlockers.GetAvailability()) + { + R2APIContentManager.HandleContentAddition(asm, craftableDef); + return true; + } + RejectContent(craftableDef, asm, "craftableDef", "But the CraftableCatalog has already initailized!"); + return false; + } #endregion #region Util Methods diff --git a/R2API.ContentManagement/R2APIContentManager.cs b/R2API.ContentManagement/R2APIContentManager.cs index c226fc49..5036a659 100644 --- a/R2API.ContentManagement/R2APIContentManager.cs +++ b/R2API.ContentManagement/R2APIContentManager.cs @@ -308,6 +308,7 @@ internal static void HandleContentAddition(Assembly assembly, UnityObject conten case ExpansionDef exd: AddSafe(ref scp.expansionDefs, exd, scp.name); added = true; break; case EntitlementDef end: AddSafe(ref scp.entitlementDefs, end, scp.name); added = true; break; case MiscPickupDef mpd: AddSafe(ref scp.miscPickupDefs, mpd, scp.name); added = true; break; + case CraftableDef cd: AddSafe(ref scp.craftableDefs, cd, scp.name); added = true; break; } if (!added) { diff --git a/R2API.ContentManagement/R2APIContentPackProvider.cs b/R2API.ContentManagement/R2APIContentPackProvider.cs index 8a45acbd..3accdc6b 100644 --- a/R2API.ContentManagement/R2APIContentPackProvider.cs +++ b/R2API.ContentManagement/R2APIContentPackProvider.cs @@ -74,6 +74,7 @@ private void LogContentsFromContentPack() log.AddRange(contentPack.expansionDefs.assetInfos.Select(ai => $"{ai.assetName} ({ai.asset.GetType().Name})")); log.AddRange(contentPack.entitlementDefs.assetInfos.Select(ai => $"{ai.assetName} ({ai.asset.GetType().Name})")); log.AddRange(contentPack.miscPickupDefs.assetInfos.Select(ai => $"{ai.assetName} ({ai.asset.GetType().Name})")); + log.AddRange(contentPack.craftableDefs.assetInfos.Select(ai => $"{ai.assetName} ({ai.asset.GetType().Name})")); ContentManagementPlugin.Logger.LogDebug(string.Join("\n", log)); } } diff --git a/R2API.ContentManagement/R2APISerializableContentPack.cs b/R2API.ContentManagement/R2APISerializableContentPack.cs index d0a0512d..23e26a0e 100644 --- a/R2API.ContentManagement/R2APISerializableContentPack.cs +++ b/R2API.ContentManagement/R2APISerializableContentPack.cs @@ -75,6 +75,8 @@ public class R2APISerializableContentPack : ScriptableObject public GameEndingDef[] gameEndingDefs = Array.Empty(); public MiscPickupDef[] miscPickupDefs = Array.Empty(); + + public CraftableDef[] craftableDefs = Array.Empty(); #endregion #region Entity States @@ -129,6 +131,7 @@ private ContentPack CreateContentPackPrivate() cp.entityStateConfigurations.Add(entityStateConfigurations); cp.expansionDefs.Add(expansionDefs); cp.entitlementDefs.Add(entitlementDefs); + cp.craftableDefs.Add(craftableDefs); List list = new List(); for (int i = 0; i < entityStateTypes.Length; i++)