From 7fe70356b9e2186e807f11cbaa9d0baf09e0e129 Mon Sep 17 00:00:00 2001 From: "admin@omencraft.com" Date: Sat, 5 Nov 2011 19:31:25 +0000 Subject: Change SetBlock to FastSetBlock in cRedstone.cpp and grass will now grow if any one hit block is above it. git-svn-id: http://mc-server.googlecode.com/svn/trunk@65 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/cChunk.cpp | 17 +++++++++++------ source/cRedstone.cpp | 32 ++++++++++++++++---------------- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/source/cChunk.cpp b/source/cChunk.cpp index 420ba078f..e9fd739eb 100644 --- a/source/cChunk.cpp +++ b/source/cChunk.cpp @@ -323,22 +323,27 @@ void cChunk::Tick(float a_Dt) case E_BLOCK_DIRT: { char AboveBlock = GetBlock( Index+1 ); - if( AboveBlock == 0 && GetLight( m_BlockSkyLight, Index ) > 0xf/2 ) // Half lit + if ( (AboveBlock == 0) && GetLight( m_BlockSkyLight, Index ) > 0xf/2 ) // Half lit //changed to not allow grass if any one hit object is on top { FastSetBlock( m_BlockTickX, m_BlockTickY, m_BlockTickZ, E_BLOCK_GRASS, GetLight( m_BlockMeta, Index ) ); } + if ( (g_BlockOneHitDig[AboveBlock]) && GetLight( m_BlockSkyLight, Index+1 ) > 0xf/2 ) // Half lit //ch$ + { + FastSetBlock( m_BlockTickX, m_BlockTickY, m_BlockTickZ, E_BLOCK_GRASS, GetLight( m_BlockMeta, Index ) ); + } + } break; case E_BLOCK_GRASS: { char AboveBlock = GetBlock( Index+1 ); - if( AboveBlock != 0 ) + if (!( (AboveBlock == 0) || (g_BlockOneHitDig[AboveBlock]) ) ) //changed to not allow grass if any one hit object is on top { FastSetBlock( m_BlockTickX, m_BlockTickY, m_BlockTickZ, E_BLOCK_DIRT, GetLight( m_BlockMeta, Index ) ); } } break; - case E_BLOCK_SAPLING: + case E_BLOCK_SAPLING: //todo: check meta of sapling. change m_World->GrowTree to look change trunk and leaves based on meta of sapling { FastSetBlock( m_BlockTickX, m_BlockTickY, m_BlockTickZ, E_BLOCK_AIR, GetLight( m_BlockMeta, Index ) ); m_World->GrowTree( m_BlockTickX + m_PosX*16, m_BlockTickY, m_BlockTickZ + m_PosZ*16 ); @@ -722,7 +727,7 @@ float GetOreNoise( float x, float y, float z, cNoise & a_Noise ) void cChunk::GenerateTerrain() { - + const ENUM_BLOCK_ID GrassID = E_BLOCK_GRASS; const ENUM_BLOCK_ID DirtID = E_BLOCK_DIRT; const ENUM_BLOCK_ID StoneID = E_BLOCK_STONE; @@ -733,8 +738,8 @@ void cChunk::GenerateTerrain() const ENUM_BLOCK_ID IronID = E_BLOCK_IRON_ORE; const ENUM_BLOCK_ID GoldID = E_BLOCK_GOLD_ORE; const ENUM_BLOCK_ID DiamondID = E_BLOCK_DIAMOND_ORE; - const ENUM_BLOCK_ID RedID = E_BLOCK_REDSTONE_ORE; - + const ENUM_BLOCK_ID RedID = E_BLOCK_REDSTONE_ORE; + /* const ENUM_BLOCK_ID GrassID = E_BLOCK_AIR; const ENUM_BLOCK_ID DirtID = E_BLOCK_AIR; diff --git a/source/cRedstone.cpp b/source/cRedstone.cpp index d61d50cbb..1d865373b 100644 --- a/source/cRedstone.cpp +++ b/source/cRedstone.cpp @@ -18,53 +18,53 @@ void cRedstone::ChangeRedstoneTorch( int fillx, int filly, int fillz, bool added metadata = 0; } - cWorld* World = cRoot::Get()->GetWorld(); + //cWorld* World = cRoot::Get()->GetWorld(); - if ( ( (int)World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) { + if ( ( (int)m_World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) { LightRedstone( fillx+1, filly, fillz, metadata ); } - if ( ( (int)World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) { + if ( ( (int)m_World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) { LightRedstone( fillx-1, filly, fillz, metadata ); } - if ( ( (int)World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) ) { + if ( ( (int)m_World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) ) { LightRedstone( fillx, filly, fillz+1, metadata ); } - if ( ( (int)World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) ) { + if ( ( (int)m_World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) ) { LightRedstone( fillx, filly, fillz-1, metadata ); } - if ( ( (int)World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) { + if ( ( (int)m_World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) { LightRedstone( fillx+1, filly-1, fillz, metadata ); } - if ( ( (int)World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) { + if ( ( (int)m_World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) { LightRedstone( fillx-1, filly-1, fillz, metadata ); } - if ( ( (int)World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) ) { + if ( ( (int)m_World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) ) { LightRedstone( fillx, filly-1, fillz+1, metadata ); } - if ( ( (int)World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) ) { + if ( ( (int)m_World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) ) { LightRedstone( fillx, filly-1, fillz-1, metadata ); } - if ( ( (int)World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) { + if ( ( (int)m_World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) { LightRedstone( fillx+1, filly+1, fillz, metadata ); } - if ( ( (int)World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) { + if ( ( (int)m_World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) { LightRedstone( fillx-1, filly+1, fillz, metadata ); } - if ( ( (int)World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) ) { + if ( ( (int)m_World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) ) { LightRedstone( fillx, filly+1, fillz+1, metadata ); } - if ( ( (int)World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) ) { + if ( ( (int)m_World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) ) { LightRedstone( fillx, filly+1, fillz-1, metadata ); } } void cRedstone::LightRedstone( int fillx, int filly, int fillz, char metadata) { - cWorld* World = cRoot::Get()->GetWorld(); - if ( ( (int)World->GetBlock( fillx, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)World->GetBlockMeta( fillx, filly, fillz) != metadata ) ) { - World->SetBlock( fillx, filly, fillz, (char)E_BLOCK_REDSTONE_WIRE, metadata ); + //cWorld* World = cRoot::Get()->GetWorld(); + if ( ( (int)m_World->GetBlock( fillx, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz) != metadata ) ) { + m_World->FastSetBlock( fillx, filly, fillz, (char)E_BLOCK_REDSTONE_WIRE, metadata ); LightRedstone(fillx-1,filly,fillz,metadata); LightRedstone(fillx+1,filly,fillz,metadata); LightRedstone(fillx,filly,fillz-1,metadata); -- cgit v1.2.3