/** * Called when a block is destroyed by an entity. It cam be useful for separating things out if needed depending on what * entity destroyed it. */ public override bool OnBlockDestroyedBy(WorldBase _world, int _clrIdx, Vector3i _blockPos, BlockValue _blockValue, int _entityId, bool _bUseHarvestTool) { TileEntityBlockTransformer tileEntityBlockTransformer = _world.GetTileEntity(_clrIdx, _blockPos) as TileEntityBlockTransformer; if (tileEntityBlockTransformer != null) { tileEntityBlockTransformer.OnDestroy(); } LocalPlayerUI uiforPlayer = LocalPlayerUI.GetUIForPlayer(GameManager.Instance.World.GetEntity(_entityId) as EntityPlayerLocal); if (null != uiforPlayer && uiforPlayer.windowManager.IsWindowOpen("looting") && ((XUiC_LootWindow)uiforPlayer.xui.GetWindow("windowLooting").Controller).GetLootBlockPos() == _blockPos) { uiforPlayer.windowManager.Close("looting"); } if (tileEntityBlockTransformer != null) { _world.GetGameManager().DropContentOfLootContainerServer(_blockValue, _blockPos, tileEntityBlockTransformer.entityId); } return(true); }
/** * This is called when block is removed. We want to destroy existing tile entity too. */ public override void OnBlockRemoved(WorldBase _world, Chunk _chunk, Vector3i _blockPos, BlockValue _blockValue) { if (!_blockValue.ischild) { this.shape.OnBlockRemoved(_world, _chunk, _blockPos, _blockValue); if (this.isMultiBlock) { this.multiBlockPos.RemoveChilds(_world, _chunk.ClrIdx, _blockPos, _blockValue); return; } } else if (this.isMultiBlock) { this.multiBlockPos.RemoveParentBlock(_world, _chunk.ClrIdx, _blockPos, _blockValue); } TileEntityBlockTransformer tileEntityBlockTransformer = _world.GetTileEntity(_chunk.ClrIdx, _blockPos) as TileEntityBlockTransformer; if (tileEntityBlockTransformer != null) { tileEntityBlockTransformer.OnDestroy(); } this.removeTileEntity(_world, _chunk, _blockPos, _blockValue); }