Files
7d2dXG/Mods/zzz_REBIRTH__Utils/Scripts/Blocks/BlockTempBlockRebirth.cs
Nathaniel Cosford e06f2bd282 Add All Mods
2025-05-29 23:33:28 +09:30

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;
}
}