public class BlockTempBlockRebirth : Block { public int totalDuration = 0; public override bool AllowBlockTriggers { get { return true; } } public BlockTempBlockRebirth() { this.HasTileEntity = true; } public override void Init() { base.Init(); } protected virtual void addTileEntity(WorldBase world, Chunk _chunk, Vector3i _blockPos, BlockValue _blockValue) { TileEntityTimedBlockRebirth tileTimedBlockPlot = new TileEntityTimedBlockRebirth(_chunk); tileTimedBlockPlot.localChunkPos = World.toBlock(_blockPos); tileTimedBlockPlot.duration = 0; _chunk.AddTileEntity(tileTimedBlockPlot); } protected virtual void removeTileEntity(WorldBase world, Chunk _chunk, Vector3i _blockPos, BlockValue _blockValue) { _chunk.RemoveTileEntityAt((World)world, World.toBlock(_blockPos)); } public override void OnBlockRemoved(WorldBase world, Chunk _chunk, Vector3i _blockPos, BlockValue _blockValue) { base.OnBlockRemoved(world, _chunk, _blockPos, _blockValue); TileEntityTimedBlockRebirth tileTimedBlockPlot = world.GetTileEntity(_chunk.ClrIdx, _blockPos) as TileEntityTimedBlockRebirth; if (tileTimedBlockPlot != null) { tileTimedBlockPlot.OnDestroy(); } this.removeTileEntity(world, _chunk, _blockPos, _blockValue); } public override void OnBlockAdded(WorldBase _world, Chunk _chunk, Vector3i _blockPos, BlockValue _blockValue) { base.OnBlockAdded(_world, _chunk, _blockPos, _blockValue); this.addTileEntity(_world, _chunk, _blockPos, _blockValue); if (!SingletonMonoBehaviour.Instance.IsServer) return; if (GameManager.Instance.IsEditMode()) return; _blockValue.meta = 0; if (this.Properties.Values.ContainsKey("Duration")) { this.totalDuration = Int32.Parse(this.Properties.Values["Duration"]); } _world.GetWBT().AddScheduledBlockUpdate(_chunk.ClrIdx, _blockPos, this.blockID, 20UL); } public override bool UpdateTick(WorldBase _world, int _clrIdx, Vector3i _blockPos, BlockValue _blockValue, bool _bRandomTick, ulong _ticksIfLoaded, GameRandom _rnd) { TileEntityTimedBlockRebirth tileTimedBlockPlot = _world.GetTileEntity(_clrIdx, _blockPos) as TileEntityTimedBlockRebirth; if (tileTimedBlockPlot != null) { tileTimedBlockPlot.duration++; //Log.Out("BlockTimedBlockRebirth-UpdateTick _blockPos: " + _blockPos); //Log.Out("BlockTimedBlockRebirth-UpdateTick tileTimedBlockPlot.duration: " + tileTimedBlockPlot.duration); if (tileTimedBlockPlot.duration < this.totalDuration) { _world.GetWBT().AddScheduledBlockUpdate(_clrIdx, _blockPos, this.blockID, 20UL); } else { BlockValue blockValue; int posX = _blockPos.x; int posY = _blockPos.y; int posZ = _blockPos.z; Chunk chunk = (Chunk)_world.GetChunkFromWorldPos(_blockPos); //Log.Out("BlockTimedBlockRebirth-UpdateTick _blockValue.Block.GetBlockName()" + _blockValue.Block.GetBlockName()); if (_blockValue.Block.GetBlockName() == "FuriousRamsayTemporaryDefenseBlock:billboard") { //Log.Out("BlockTimedBlockRebirth-UpdateTick FuriousRamsayTemporaryDefenseBlock" + _blockPos); posX = _blockPos.x - 2; posY = _blockPos.y; posZ = _blockPos.z; blockValue = Block.GetBlockValue("air", true); blockValue = BlockPlaceholderMap.Instance.Replace(blockValue, _world.GetGameRandom(), chunk, posX, posY, posZ, FastTags.none, false); _world.SetBlockRPC(_clrIdx, new Vector3i(posX, posY, posZ), blockValue); //Log.Out("BlockTimedBlockRebirth-UpdateTick posX, posY, posZ: " + posX + ", " + posY + ", " + posZ); posX = _blockPos.x + 2; posY = _blockPos.y; posZ = _blockPos.z; blockValue = Block.GetBlockValue("air", true); blockValue = BlockPlaceholderMap.Instance.Replace(blockValue, _world.GetGameRandom(), chunk, posX, posY, posZ, FastTags.none, false); _world.SetBlockRPC(_clrIdx, new Vector3i(posX, posY, posZ), blockValue); //Log.Out("BlockTimedBlockRebirth-UpdateTick posX, posY, posZ: " + posX + ", " + posY + ", " + posZ); posX = _blockPos.x; posY = _blockPos.y; posZ = _blockPos.z - 2; blockValue = Block.GetBlockValue("air", true); blockValue = BlockPlaceholderMap.Instance.Replace(blockValue, _world.GetGameRandom(), chunk, posX, posY, posZ, FastTags.none, false); _world.SetBlockRPC(_clrIdx, new Vector3i(posX, posY, posZ), blockValue); //Log.Out("BlockTimedBlockRebirth-UpdateTick posX, posY, posZ: " + posX + ", " + posY + ", " + posZ); posX = _blockPos.x; posY = _blockPos.y; posZ = _blockPos.z + 2; blockValue = Block.GetBlockValue("air", true); blockValue = BlockPlaceholderMap.Instance.Replace(blockValue, _world.GetGameRandom(), chunk, posX, posY, posZ, FastTags.none, false); _world.SetBlockRPC(_clrIdx, new Vector3i(posX, posY, posZ), blockValue); //Log.Out("BlockTimedBlockRebirth-UpdateTick posX, posY, posZ: " + posX + ", " + posY + ", " + posZ); } posX = _blockPos.x; posY = _blockPos.y; posZ = _blockPos.z; blockValue = Block.GetBlockValue("air", true); blockValue = BlockPlaceholderMap.Instance.Replace(blockValue, _world.GetGameRandom(), chunk, posX, posY, posZ, FastTags.none, false); _world.SetBlockRPC(_clrIdx, new Vector3i(posX, posY, posZ), blockValue); } } return true; } }