139 lines
6.3 KiB
C#
139 lines
6.3 KiB
C#
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<TileEntityTimedBlockRebirth>((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<ConnectionManager>.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<TagGroup.Global>.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<TagGroup.Global>.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<TagGroup.Global>.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<TagGroup.Global>.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<TagGroup.Global>.none, false);
|
|
_world.SetBlockRPC(_clrIdx, new Vector3i(posX, posY, posZ), blockValue);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
}
|