-
Notifications
You must be signed in to change notification settings - Fork 37
/
CustomBuildableExample.cs
69 lines (55 loc) · 2.59 KB
/
CustomBuildableExample.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using BepInEx;
using Nautilus.Crafting;
using Nautilus.Assets;
using Nautilus.Assets.Gadgets;
using Nautilus.Utility;
using UnityEngine;
using Nautilus.Assets.PrefabTemplates;
#if SUBNAUTICA
using Ingredient = CraftData.Ingredient;
#endif
namespace Nautilus.Examples;
[BepInPlugin("com.snmodding.nautilus.custombuildable", "Nautilus Custom Buildable Example Mod", PluginInfo.PLUGIN_VERSION)]
[BepInDependency("com.snmodding.nautilus")]
public class CustomBuildableExample : BaseUnityPlugin
{
private void Awake()
{
BuildableTallLocker.Register();
}
}
public static class BuildableTallLocker
{
public static PrefabInfo Info { get; } = PrefabInfo.WithTechType("TallLocker", "Tall Locker", "A tall locker.")
// set the icon to that of the vanilla locker:
.WithIcon(SpriteManager.Get(TechType.Locker));
public static void Register()
{
// create prefab:
CustomPrefab prefab = new CustomPrefab(Info);
// copy the model of a vanilla wreck piece (which looks like a taller locker):
CloneTemplate lockerClone = new CloneTemplate(Info, "cd34fecd-794c-4a0c-8012-dd81b77f2840");
// modify the cloned model:
lockerClone.ModifyPrefab += obj =>
{
// allow it to be placced inside bases and submarines on the ground, and can be rotated:
ConstructableFlags constructableFlags = ConstructableFlags.Inside | ConstructableFlags.Rotatable | ConstructableFlags.Ground | ConstructableFlags.Submarine;
// find the object that holds the model:
GameObject model = obj.transform.Find("submarine_locker_04").gameObject;
// this line is only necessary for the tall locker so that the door is also part of the model:
obj.transform.Find("submarine_locker_03_door_01").parent = model.transform;
// add all components necessary for it to be built:
PrefabUtils.AddConstructable(obj, Info.TechType, constructableFlags, model);
// allow it to be opened as a storage container:
PrefabUtils.AddStorageContainer(obj, "StorageRoot", "TallLocker", 3, 8, true);
};
// assign the created clone model to the prefab itself:
prefab.SetGameObject(lockerClone);
// assign it to the correct tab in the builder tool:
prefab.SetPdaGroupCategory(TechGroup.InteriorModules, TechCategory.InteriorModule);
// set recipe:
prefab.SetRecipe(new RecipeData(new Ingredient(TechType.Titanium, 3), new Ingredient(TechType.Glass, 1)));
// finally, register it into the game:
prefab.Register();
}
}