diff options
author | Alexander Harkness <bearbin@gmail.com> | 2014-03-10 19:57:12 +0100 |
---|---|---|
committer | Alexander Harkness <bearbin@gmail.com> | 2014-03-10 19:57:12 +0100 |
commit | 411c4ddd795ad00de1cecd2d1130049feb8c01c5 (patch) | |
tree | c902a2423f18b50dc8a26af5aaedb1855d97d584 /src | |
parent | Merge pull request #788 from worktycho/warnings (diff) | |
parent | Fixed compile (diff) | |
download | cuberite-411c4ddd795ad00de1cecd2d1130049feb8c01c5.tar cuberite-411c4ddd795ad00de1cecd2d1130049feb8c01c5.tar.gz cuberite-411c4ddd795ad00de1cecd2d1130049feb8c01c5.tar.bz2 cuberite-411c4ddd795ad00de1cecd2d1130049feb8c01c5.tar.lz cuberite-411c4ddd795ad00de1cecd2d1130049feb8c01c5.tar.xz cuberite-411c4ddd795ad00de1cecd2d1130049feb8c01c5.tar.zst cuberite-411c4ddd795ad00de1cecd2d1130049feb8c01c5.zip |
Diffstat (limited to '')
-rw-r--r-- | src/Simulator/FireSimulator.cpp | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/Simulator/FireSimulator.cpp b/src/Simulator/FireSimulator.cpp index 4967c83f9..26712e6e6 100644 --- a/src/Simulator/FireSimulator.cpp +++ b/src/Simulator/FireSimulator.cpp @@ -334,21 +334,33 @@ void cFireSimulator::RemoveFuelNeighbors(cChunk * a_Chunk, int a_RelX, int a_Rel for (size_t i = 0; i < ARRAYCOUNT(gNeighborCoords); i++) { BLOCKTYPE BlockType; - NIBBLETYPE BlockMeta; - if (!a_Chunk->UnboundedRelGetBlock(a_RelX + gNeighborCoords[i].x, a_RelY + gNeighborCoords[i].y, a_RelZ + gNeighborCoords[i].z, BlockType, BlockMeta)) + int X = a_RelX + gNeighborCoords[i].x; + int Z = a_RelZ + gNeighborCoords[i].z; + + cChunkPtr Neighbour = a_Chunk->GetRelNeighborChunkAdjustCoords(X, Z); + if (Neighbour == NULL) { - // Neighbor not accessible, ignore it continue; } + BlockType = Neighbour->GetBlock(X, a_RelY + gCrossCoords[i].y, Z); + if (!IsFuel(BlockType)) { continue; } + + if (BlockType == E_BLOCK_TNT) + { + int AbsX = X + Neighbour->GetPosX() * cChunkDef::Width; + int AbsZ = Z + Neighbour->GetPosZ() * cChunkDef::Width; + + m_World.SpawnPrimedTNT(AbsX, a_RelY + gNeighborCoords[i].y, AbsZ, 0); + Neighbour->SetBlock(X, a_RelY + gNeighborCoords[i].y, Z, E_BLOCK_AIR, 0); + return; + } + bool ShouldReplaceFuel = (m_World.GetTickRandomNumber(MAX_CHANCE_REPLACE_FUEL) < m_ReplaceFuelChance); - a_Chunk->UnboundedRelSetBlock( - a_RelX + gNeighborCoords[i].x, a_RelY + gNeighborCoords[i].y, a_RelZ + gNeighborCoords[i].z, - ShouldReplaceFuel ? E_BLOCK_FIRE : E_BLOCK_AIR, 0 - ); + Neighbour->SetBlock(X, a_RelY + gNeighborCoords[i].y, Z, ShouldReplaceFuel ? E_BLOCK_FIRE : E_BLOCK_AIR, 0); } // for i - Coords[] } |