public override void OnNeighborBlockChanged(CellFace cellFace, int neighborX, int neighborY, int neighborZ) { int cellValue = base.SubsystemElectricity.SubsystemTerrain.Terrain.GetCellValue(cellFace.X, cellFace.Y, cellFace.Z); int num = Terrain.ExtractContents(cellValue); if (!(BlocksManager.Blocks[num] is WireBlock)) { return; } int wireFacesBitmask = WireBlock.GetWireFacesBitmask(cellValue); int num2 = wireFacesBitmask; if (WireBlock.WireExistsOnFace(cellValue, cellFace.Face)) { Point3 point = CellFace.FaceToPoint3(cellFace.Face); int cellValue2 = base.SubsystemElectricity.SubsystemTerrain.Terrain.GetCellValue(cellFace.X - point.X, cellFace.Y - point.Y, cellFace.Z - point.Z); Block block = BlocksManager.Blocks[Terrain.ExtractContents(cellValue2)]; if (!block.IsCollidable || block.IsTransparent) { num2 &= ~(1 << cellFace.Face); } } if (num2 == 0) { base.SubsystemElectricity.SubsystemTerrain.DestroyCell(0, cellFace.X, cellFace.Y, cellFace.Z, 0, noDrop: false, noParticleSystem: false); } else if (num2 != wireFacesBitmask) { int newValue = WireBlock.SetWireFacesBitmask(cellValue, num2); base.SubsystemElectricity.SubsystemTerrain.DestroyCell(0, cellFace.X, cellFace.Y, cellFace.Z, newValue, noDrop: false, noParticleSystem: false); } }
public override void Initialize() { Item.ItemBlock = new ElementBlock { BlockIndex = -1 }; Block = (ElementBlock)BlocksManager.Blocks[Index]; WireBlock = (WireBlock)BlocksManager.Blocks[WireBlock.Index]; base.Initialize(); if (!Task.IsFaulted && !Task.IsCompleted) Task.Wait(); }