diff options
author | madmaxoft <github@xoft.cz> | 2014-04-01 21:21:11 +0200 |
---|---|---|
committer | madmaxoft <github@xoft.cz> | 2014-04-01 21:21:11 +0200 |
commit | e7e65b5005a39cd371230f7d6a4dac595cdc66a8 (patch) | |
tree | 3127513d415fafeba13e0b238bae9d499ca75acc | |
parent | cBlockArea: Added the msMask merge strategy. (diff) | |
parent | APIDump: Gave msDifference it's own table. (diff) | |
download | cuberite-e7e65b5005a39cd371230f7d6a4dac595cdc66a8.tar cuberite-e7e65b5005a39cd371230f7d6a4dac595cdc66a8.tar.gz cuberite-e7e65b5005a39cd371230f7d6a4dac595cdc66a8.tar.bz2 cuberite-e7e65b5005a39cd371230f7d6a4dac595cdc66a8.tar.lz cuberite-e7e65b5005a39cd371230f7d6a4dac595cdc66a8.tar.xz cuberite-e7e65b5005a39cd371230f7d6a4dac595cdc66a8.tar.zst cuberite-e7e65b5005a39cd371230f7d6a4dac595cdc66a8.zip |
Diffstat (limited to '')
-rw-r--r-- | MCServer/Plugins/APIDump/APIDesc.lua | 18 | ||||
-rw-r--r-- | src/BlockArea.cpp | 34 | ||||
-rw-r--r-- | src/BlockArea.h | 1 |
3 files changed, 52 insertions, 1 deletions
diff --git a/MCServer/Plugins/APIDump/APIDesc.lua b/MCServer/Plugins/APIDump/APIDesc.lua index 9bcd6edde..451b7364a 100644 --- a/MCServer/Plugins/APIDump/APIDesc.lua +++ b/MCServer/Plugins/APIDump/APIDesc.lua @@ -249,6 +249,9 @@ g_APIDesc = <tr> <td> A </td><td> B </td><td> B </td><td> A </td><td> B </td> </tr> + <tr> + <td> A </td><td> A </td><td> A </td><td> A </td><td> A </td> + </td> </tbody></table> <p> @@ -262,7 +265,20 @@ g_APIDesc = <h3>Special strategies</h3> <p>For each strategy, evaluate the table rows from top downwards, the first match wins.</p> - + + <p> + <strong>msDifference</strong> - changes all the blocks which are the same to air. Otherwise the source block gets placed. + </p> + <table><tbody<tr> + <th colspan="2"> area block </th><th> </th><th> Notes </th> + </tr><tr> + <td> * </td><td> B </td><td> B </td><td> The blocks are different so we use block B </td> + </tr><tr> + <td> B </td><td> B </td><td> Air </td><td> The blocks are the same so we get air. </td> + </tr> + </tbody></table> + + <p> <strong>msLake</strong> - used for merging areas with lava and water lakes, in the appropriate generator. </p> diff --git a/src/BlockArea.cpp b/src/BlockArea.cpp index 543dbe04d..60e4f11e5 100644 --- a/src/BlockArea.cpp +++ b/src/BlockArea.cpp @@ -173,6 +173,25 @@ static inline void MergeCombinatorSpongePrint(BLOCKTYPE & a_DstType, BLOCKTYPE a +/** Combinator used for cBlockArea::msDifference merging */ +static inline void MergeCombinatorDifference(BLOCKTYPE & a_DstType, BLOCKTYPE a_SrcType, NIBBLETYPE & a_DstMeta, NIBBLETYPE a_SrcMeta) +{ + if ((a_DstType == a_SrcType) && (a_DstMeta == a_SrcMeta)) + { + a_DstType = E_BLOCK_AIR; + a_DstMeta = 0; + } + else + { + a_DstType = a_SrcType; + a_DstMeta = a_SrcMeta; + } +} + + + + + /** Combinator used for cBlockArea::msMask merging */ static inline void MergeCombinatorMask(BLOCKTYPE & a_DstType, BLOCKTYPE a_SrcType, NIBBLETYPE & a_DstMeta, NIBBLETYPE a_SrcMeta) { @@ -724,6 +743,21 @@ void cBlockArea::Merge(const cBlockArea & a_Src, int a_RelX, int a_RelY, int a_R ); break; } // case msSpongePrint + + case msDifference: + { + InternalMergeBlocks( + m_BlockTypes, a_Src.GetBlockTypes(), + DstMetas, SrcMetas, + SizeX, SizeY, SizeZ, + SrcOffX, SrcOffY, SrcOffZ, + DstOffX, DstOffY, DstOffZ, + a_Src.GetSizeX(), a_Src.GetSizeY(), a_Src.GetSizeZ(), + m_Size.x, m_Size.y, m_Size.z, + MergeCombinatorDifference + ); + break; + } // case msDifference case msMask: { diff --git a/src/BlockArea.h b/src/BlockArea.h index 34a0ef926..c48175b8c 100644 --- a/src/BlockArea.h +++ b/src/BlockArea.h @@ -52,6 +52,7 @@ public: msImprint, msLake, msSpongePrint, + msDifference, msMask, } ; |