Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
SubsystemEntityBlockBehavior.cs
浏览该文件的文档.
1using Engine;
4
5namespace Game {
8
10
12
14
16
17 public override void Load(ValuesDictionary valuesDictionary) {
18 base.Load(valuesDictionary);
19 m_subsystemTerrain = Project.FindSubsystem<SubsystemTerrain>(true);
21 m_subsystemGameInfo = Project.FindSubsystem<SubsystemGameInfo>(true);
22 m_subsystemAudio = Project.FindSubsystem<SubsystemAudio>(true);
23 }
24
25 public override void OnBlockAdded(int value, int oldValue, int x, int y, int z) {
26 if(m_subsystemBlockEntities.GetBlockEntity(x, y, z) != null) {
27 Log.Error("A blockEntity already exists. The new entity does not add.");
28 return;
29 }
30 ValuesDictionary valuesDictionary = new();
32 valuesDictionary.GetValue<ValuesDictionary>("BlockEntity").SetValue("Coordinates", new Point3(x, y, z));
33 Entity entity = Project.CreateEntity(valuesDictionary);
34 Project.AddEntity(entity);
35 }
36
37 public override void OnBlockRemoved(int value, int newValue, int x, int y, int z) {
38 ComponentBlockEntity blockEntity = m_subsystemBlockEntities.GetBlockEntity(x, y, z);
39 if (blockEntity != null) {
40 Vector3 position = new Vector3(x, y, z) + new Vector3(0.5f);
41 foreach (IInventory item in blockEntity.Entity.FindComponents<IInventory>()) {
42 item.DropAllItems(position);
43 }
44 Project.RemoveEntity(blockEntity.Entity, true);
45 }
46 }
47
48 public override bool OnInteract(TerrainRaycastResult raycastResult, ComponentMiner componentMiner) {
49 ComponentBlockEntity blockEntity = m_subsystemBlockEntities.GetBlockEntity(
50 raycastResult.CellFace.X,
51 raycastResult.CellFace.Y,
52 raycastResult.CellFace.Z
53 );
54 bool isInitialNull = blockEntity == null;
56 "OnEntityBehaviorBlockInteracted",
57 loader => {
58 loader.OnEntityBehaviorBlockInteracted(raycastResult, isInitialNull, ref blockEntity);
59 return false;
60 }
61 );
62 return InteractBlockEntity(blockEntity, componentMiner);
63 }
64
65 public override bool OnInteract(MovingBlocksRaycastResult movingBlocksRaycastResult, ComponentMiner componentMiner) {
66 ComponentBlockEntity componentBlockEntity = m_subsystemBlockEntities.GetBlockEntity(movingBlocksRaycastResult.MovingBlock);
67 bool isInitialNull = componentBlockEntity == null;
69 "OnEntityBehaviorBlockInteracted",
70 loader => {
71 loader.OnEntityBehaviorBlockInteracted(movingBlocksRaycastResult, isInitialNull, ref componentBlockEntity);
72 return false;
73 }
74 );
75 return InteractBlockEntity(componentBlockEntity, componentMiner);
76 }
77
78 public virtual bool InteractBlockEntity(ComponentBlockEntity blockEntity, ComponentMiner componentMiner) => false;
79
80 public override void OnBlockStartMoving(int value, int newValue, int x, int y, int z, MovingBlock movingBlock) {
81 ComponentBlockEntity blockEntity = m_subsystemBlockEntities.GetBlockEntity(x, y, z);
82 if (blockEntity != null) {
83 m_subsystemBlockEntities.m_blockEntities.Remove(blockEntity.Coordinates);
84 m_subsystemBlockEntities.m_movingBlockEntities.Add(movingBlock, blockEntity);
85 blockEntity.MovingBlock = movingBlock;
86 }
87 }
88
89 public override void OnBlockStopMoving(int value, int oldValue, int x, int y, int z, MovingBlock movingBlock) {
90 ComponentBlockEntity blockEntity = m_subsystemBlockEntities.GetBlockEntity(movingBlock);
91 if (blockEntity != null) {
92 m_subsystemBlockEntities.m_movingBlockEntities.Remove(movingBlock);
93 m_subsystemBlockEntities.m_blockEntities.Add(new Point3(x, y, z), blockEntity);
94 blockEntity.MovingBlock = null;
95 blockEntity.Coordinates = new Point3(x, y, z);
96 }
97 }
98
99 public override void OnHitByProjectile(CellFace cellFace, WorldItem worldItem) {
100 if (worldItem.ToRemove) {
101 return;
102 }
103 ComponentBlockEntity blockEntity = m_subsystemBlockEntities.GetBlockEntity(cellFace.X, cellFace.Y, cellFace.Z);
104 blockEntity?.GatherPickable(worldItem);
105 }
106
107 public override void OnHitByProjectile(MovingBlock movingBlock, WorldItem worldItem) {
108 if (worldItem.ToRemove) {
109 return;
110 }
111 ComponentBlockEntity blockEntity = m_subsystemBlockEntities.GetBlockEntity(movingBlock);
112 blockEntity?.GatherPickable(worldItem);
113 }
114 }
115}
Engine.Vector3 Vector3
static void Error(object message)
定义 Log.cs:80
virtual void GatherPickable(WorldItem worldItem)
override void OnBlockStartMoving(int value, int newValue, int x, int y, int z, MovingBlock movingBlock)
override void Load(ValuesDictionary valuesDictionary)
override void OnHitByProjectile(CellFace cellFace, WorldItem worldItem)
override bool OnInteract(TerrainRaycastResult raycastResult, ComponentMiner componentMiner)
override void OnBlockAdded(int value, int oldValue, int x, int y, int z)
override void OnBlockRemoved(int value, int newValue, int x, int y, int z)
virtual bool InteractBlockEntity(ComponentBlockEntity blockEntity, ComponentMiner componentMiner)
override void OnHitByProjectile(MovingBlock movingBlock, WorldItem worldItem)
override void OnBlockStopMoving(int value, int oldValue, int x, int y, int z, MovingBlock movingBlock)
override bool OnInteract(MovingBlocksRaycastResult movingBlocksRaycastResult, ComponentMiner componentMiner)
ValuesDictionary ValuesDictionary
static void HookAction(string HookName, Func< ModLoader, bool > action)
执行Hook
void PopulateFromDatabaseObject(DatabaseObject databaseObject)
void DropAllItems(Vector3 position)