def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk): depth = op.options['Depth'] blocktype = op.options['Block'] blocks = chunk.Blocks[slices] data = chunk.Data[slices] brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'], brushBox.origin, brushBoxThisChunk, op.options['Noise'], op.options['Hollow']) if op.options['Only Change Natural Earth']: try: # try to get the block mask from the topsoil filter import topsoil # @UnresolvedImport blockmask = topsoil.naturalBlockmask() blockmask[blocktype.ID] = True blocktypeMask = blockmask[blocks] except Exception as e: print(repr(e), " while using blockmask from filters.topsoil") blocktypeMask = blocks != 0 else: # topsoil any block blocktypeMask = blocks != 0 if depth < 0: blocktypeMask &= (blocks != blocktype.ID) if len(blocktypeMask) == 0: return heightmap = extractHeights(blocktypeMask) for x, z in itertools.product(*list(map(xrange, heightmap.shape))): h = heightmap[x, z] if h >= brushBoxThisChunk.height: continue if depth > 0: idx = x, z, slice(max(0, h - depth), h) else: # negative depth values mean to put a layer above the surface idx = x, z, slice(h, min(blocks.shape[2], h - depth)) mask = brushMask[idx] blocks[idx][mask] = blocktype.ID data[idx][mask] = blocktype.blockData createTileEntities(blocktype, brushBoxThisChunk, chunk)
def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk): brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'], brushBox.origin, brushBoxThisChunk, op.options['Noise'], op.options['Hollow']) blocks = chunk.Blocks[slices] data = chunk.Data[slices] airFill = op.options['Fill Air'] if not airFill: airtable = numpy.zeros((materials.id_limit, 16), dtype='bool') airtable[0] = True replaceMaskAir = airtable[blocks, data] brushMask &= ~replaceMaskAir chunk.Blocks[slices][brushMask] = op.options['Block'].ID chunk.Data[slices][brushMask] = op.options['Block'].blockData createTileEntities(op.options['Block'], brushBoxThisChunk, chunk)
def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk): brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'], brushBox.origin, brushBoxThisChunk, op.options['Noise'], op.options['Hollow']) blocks = chunk.Blocks[slices] data = chunk.Data[slices] if op.options['Block'].wildcard: print("Wildcard replace") blocksToReplace = [] for i in range(16): blocksToReplace.append(op.editor.level.materials.blockWithID(op.options['Block'].ID, i)) else: blocksToReplace = [op.options['Block']] replaceTable = block_fill.blockReplaceTable(blocksToReplace) replaceMask = replaceTable[blocks, data] brushMask &= replaceMask chunk.Blocks[slices][brushMask] = op.options['Block To Replace With'].ID chunk.Data[slices][brushMask] = op.options['Block To Replace With'].blockData createTileEntities(op.options['Block To Replace With'], brushBoxThisChunk, chunk)
def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk): brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'], brushBox.origin, brushBoxThisChunk, op.options['Noise'], op.options['Hollow']) blocks = chunk.Blocks[slices] data = chunk.Data[slices] if op.options['Block'].wildcard: print "Wildcard replace" blocksToReplace = [] for i in range(16): blocksToReplace.append(op.editor.level.materials.blockWithID(op.options['Block'].ID, i)) else: blocksToReplace = [op.options['Block']] replaceTable = block_fill.blockReplaceTable(blocksToReplace) replaceMask = replaceTable[blocks, data] brushMask &= replaceMask chunk.Blocks[slices][brushMask] = op.options['Block To Replace With'].ID chunk.Data[slices][brushMask] = op.options['Block To Replace With'].blockData createTileEntities(op.options['Block To Replace With'], brushBoxThisChunk, chunk)
def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk): brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'], brushBox.origin, brushBoxThisChunk, op.options['Noise'], op.options['Hollow']) replaceWith1 = op.options['Block 1'] chanceA = op.options['Weight 1'] replaceWith2 = op.options['Block 2'] chanceB = op.options['Weight 2'] replaceWith3 = op.options['Block 3'] chanceC = op.options['Weight 3'] replaceWith4 = op.options['Block 4'] chanceD = op.options['Weight 4'] totalChance = chanceA + chanceB + chanceC + chanceD if totalChance == 0: print "Total Chance value can't be 0." return blocks = chunk.Blocks[slices] data = chunk.Data[slices] if op.options['Block'].wildcard: print "Wildcard replace" blocksToReplace = [] for i in range(16): blocksToReplace.append( op.editor.level.materials.blockWithID(op.options['Block'].ID, i)) else: blocksToReplace = [op.options['Block']] replaceTable = block_fill.blockReplaceTable(blocksToReplace) replaceMask = replaceTable[blocks, data] brushMask &= replaceMask brushMaskOption1 = numpy.copy(brushMask) brushMaskOption2 = numpy.copy(brushMask) brushMaskOption3 = numpy.copy(brushMask) brushMaskOption4 = numpy.copy(brushMask) x = -1 for _ in brushMask: x += 1 y = -1 for _ in brushMask[x]: y += 1 z = -1 for _ in brushMask[x][y]: z += 1 if brushMask[x][y][z]: randomChance = random.randint(1, totalChance) if chanceA >= randomChance: brushMaskOption1[x][y][z] = True brushMaskOption2[x][y][z] = False brushMaskOption3[x][y][z] = False brushMaskOption4[x][y][z] = False continue if chanceA + chanceB >= randomChance: brushMaskOption1[x][y][z] = False brushMaskOption2[x][y][z] = True brushMaskOption3[x][y][z] = False brushMaskOption4[x][y][z] = False continue if chanceA + chanceB + chanceC >= randomChance: brushMaskOption1[x][y][z] = False brushMaskOption2[x][y][z] = False brushMaskOption3[x][y][z] = True brushMaskOption4[x][y][z] = False continue if chanceA + chanceB + chanceC + chanceD >= randomChance: brushMaskOption1[x][y][z] = False brushMaskOption2[x][y][z] = False brushMaskOption3[x][y][z] = False brushMaskOption4[x][y][z] = True continue blocks[brushMaskOption1] = replaceWith1.ID data[brushMaskOption1] = replaceWith1.blockData blocks[brushMaskOption2] = replaceWith2.ID data[brushMaskOption2] = replaceWith2.blockData blocks[brushMaskOption3] = replaceWith3.ID data[brushMaskOption3] = replaceWith3.blockData blocks[brushMaskOption4] = replaceWith4.ID data[brushMaskOption4] = replaceWith4.blockData UsedAlready = [] createTileEntities(replaceWith1, brushBoxThisChunk, chunk) UsedAlready.append(replaceWith1.ID) if replaceWith2.ID not in UsedAlready: createTileEntities(replaceWith2, brushBoxThisChunk, chunk) UsedAlready.append(replaceWith2.ID) if replaceWith3.ID not in UsedAlready: createTileEntities(replaceWith3, brushBoxThisChunk, chunk) UsedAlready.append(replaceWith3.ID) if replaceWith4.ID not in UsedAlready: createTileEntities(replaceWith4, brushBoxThisChunk, chunk)
except Exception, e: print repr(e), " while using blockmask from filters.topsoil" blocktypeMask = blocks != 0 else: # topsoil any block blocktypeMask = blocks != 0 if depth < 0: blocktypeMask &= (blocks != blocktype.ID) if len(blocktypeMask) == 0: return heightmap = extractHeights(blocktypeMask) for x, z in itertools.product(*map(xrange, heightmap.shape)): h = heightmap[x, z] if h >= brushBoxThisChunk.height: continue if depth > 0: idx = x, z, slice(max(0, h - depth), h) else: # negative depth values mean to put a layer above the surface idx = x, z, slice(h, min(blocks.shape[2], h - depth)) mask = brushMask[idx] blocks[idx][mask] = blocktype.ID data[idx][mask] = blocktype.blockData createTileEntities(blocktype, brushBoxThisChunk, chunk)
def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk): brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'], brushBox.origin, brushBoxThisChunk, op.options['Noise'], op.options['Hollow']) replaceWith1 = op.options['Block 1'] chanceA = op.options['Weight 1'] replaceWith2 = op.options['Block 2'] chanceB = op.options['Weight 2'] replaceWith3 = op.options['Block 3'] chanceC = op.options['Weight 3'] replaceWith4 = op.options['Block 4'] chanceD = op.options['Weight 4'] totalChance = chanceA + chanceB + chanceC + chanceD if totalChance == 0: print "Total Chance value can't be 0." return blocks = chunk.Blocks[slices] data = chunk.Data[slices] if op.options['Block'].wildcard: print "Wildcard replace" blocksToReplace = [] for i in range(16): blocksToReplace.append(op.editor.level.materials.blockWithID(op.options['Block'].ID, i)) else: blocksToReplace = [op.options['Block']] replaceTable = block_fill.blockReplaceTable(blocksToReplace) replaceMask = replaceTable[blocks, data] brushMask &= replaceMask brushMaskOption1 = numpy.copy(brushMask) brushMaskOption2 = numpy.copy(brushMask) brushMaskOption3 = numpy.copy(brushMask) brushMaskOption4 = numpy.copy(brushMask) x = -1 for _ in brushMask: x += 1 y = -1 for _ in brushMask[x]: y += 1 z = -1 for _ in brushMask[x][y]: z += 1 if brushMask[x][y][z]: randomChance = random.randint(1, totalChance) if chanceA >= randomChance: brushMaskOption1[x][y][z] = True brushMaskOption2[x][y][z] = False brushMaskOption3[x][y][z] = False brushMaskOption4[x][y][z] = False continue if chanceA + chanceB >= randomChance: brushMaskOption1[x][y][z] = False brushMaskOption2[x][y][z] = True brushMaskOption3[x][y][z] = False brushMaskOption4[x][y][z] = False continue if chanceA + chanceB + chanceC >= randomChance: brushMaskOption1[x][y][z] = False brushMaskOption2[x][y][z] = False brushMaskOption3[x][y][z] = True brushMaskOption4[x][y][z] = False continue if chanceA + chanceB + chanceC + chanceD >= randomChance: brushMaskOption1[x][y][z] = False brushMaskOption2[x][y][z] = False brushMaskOption3[x][y][z] = False brushMaskOption4[x][y][z] = True continue blocks[brushMaskOption1] = replaceWith1.ID data[brushMaskOption1] = replaceWith1.blockData blocks[brushMaskOption2] = replaceWith2.ID data[brushMaskOption2] = replaceWith2.blockData blocks[brushMaskOption3] = replaceWith3.ID data[brushMaskOption3] = replaceWith3.blockData blocks[brushMaskOption4] = replaceWith4.ID data[brushMaskOption4] = replaceWith4.blockData UsedAlready = [] createTileEntities(replaceWith1, brushBoxThisChunk, chunk) UsedAlready.append(replaceWith1.ID) if replaceWith2.ID not in UsedAlready: createTileEntities(replaceWith2, brushBoxThisChunk, chunk) UsedAlready.append(replaceWith2.ID) if replaceWith3.ID not in UsedAlready: createTileEntities(replaceWith3, brushBoxThisChunk, chunk) UsedAlready.append(replaceWith3.ID) if replaceWith4.ID not in UsedAlready: createTileEntities(replaceWith4, brushBoxThisChunk, chunk)
def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk): brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'], brushBox.origin, brushBoxThisChunk, op.options['Noise'], op.options['Hollow']) blocks = chunk.Blocks[slices] data = chunk.Data[slices] airFill = op.options['Fill Air'] replaceWith1 = op.options['Block 1'] chanceA = op.options['Weight 1'] replaceWith2 = op.options['Block 2'] chanceB = op.options['Weight 2'] replaceWith3 = op.options['Block 3'] chanceC = op.options['Weight 3'] replaceWith4 = op.options['Block 4'] chanceD = op.options['Weight 4'] totalChance = chanceA + chanceB + chanceC + chanceD if totalChance == 0: print("Total Chance value can't be 0.") return if not airFill: airtable = numpy.zeros((materials.id_limit, 16), dtype='bool') airtable[0] = True replaceMaskAir = airtable[blocks, data] brushMask &= ~replaceMaskAir brushMaskOption1 = numpy.copy(brushMask) brushMaskOption2 = numpy.copy(brushMask) brushMaskOption3 = numpy.copy(brushMask) brushMaskOption4 = numpy.copy(brushMask) x = -1 for _ in brushMask: x += 1 y = -1 for _ in brushMask[x]: y += 1 z = -1 for _ in brushMask[x][y]: z += 1 if brushMask[x][y][z]: randomChance = random.randint(1, totalChance) if chanceA >= randomChance: brushMaskOption1[x][y][z] = True brushMaskOption2[x][y][z] = False brushMaskOption3[x][y][z] = False brushMaskOption4[x][y][z] = False continue if chanceA + chanceB >= randomChance: brushMaskOption1[x][y][z] = False brushMaskOption2[x][y][z] = True brushMaskOption3[x][y][z] = False brushMaskOption4[x][y][z] = False continue if chanceA + chanceB + chanceC >= randomChance: brushMaskOption1[x][y][z] = False brushMaskOption2[x][y][z] = False brushMaskOption3[x][y][z] = True brushMaskOption4[x][y][z] = False continue if chanceA + chanceB + chanceC + chanceD >= randomChance: brushMaskOption1[x][y][z] = False brushMaskOption2[x][y][z] = False brushMaskOption3[x][y][z] = False brushMaskOption4[x][y][z] = True continue blocks[brushMaskOption1] = replaceWith1.ID data[brushMaskOption1] = replaceWith1.blockData blocks[brushMaskOption2] = replaceWith2.ID data[brushMaskOption2] = replaceWith2.blockData blocks[brushMaskOption3] = replaceWith3.ID data[brushMaskOption3] = replaceWith3.blockData blocks[brushMaskOption4] = replaceWith4.ID data[brushMaskOption4] = replaceWith4.blockData UsedAlready = [] createTileEntities(replaceWith1, brushBoxThisChunk, chunk) UsedAlready.append(replaceWith1.ID) if replaceWith2.ID not in UsedAlready: createTileEntities(replaceWith2, brushBoxThisChunk, chunk) UsedAlready.append(replaceWith2.ID) if replaceWith3.ID not in UsedAlready: createTileEntities(replaceWith3, brushBoxThisChunk, chunk) UsedAlready.append(replaceWith3.ID) if replaceWith4.ID not in UsedAlready: createTileEntities(replaceWith4, brushBoxThisChunk, chunk)
def applyToChunkSlices(self, op, chunk, slices, brushBox, brushBoxThisChunk): brushMask = createBrushMask(op.tool.getBrushSize(), op.options['Style'], brushBox.origin, brushBoxThisChunk, op.options['Noise'], op.options['Hollow']) blocks = chunk.Blocks[slices] data = chunk.Data[slices] airFill = op.options['Fill Air'] replaceWith1 = op.options['Block 1'] chanceA = op.options['Weight 1'] replaceWith2 = op.options['Block 2'] chanceB = op.options['Weight 2'] replaceWith3 = op.options['Block 3'] chanceC = op.options['Weight 3'] replaceWith4 = op.options['Block 4'] chanceD = op.options['Weight 4'] totalChance = chanceA + chanceB + chanceC + chanceD if totalChance == 0: print "Total Chance value can't be 0." return if not airFill: airtable = numpy.zeros((materials.id_limit, 16), dtype='bool') airtable[0] = True replaceMaskAir = airtable[blocks, data] brushMask &= ~replaceMaskAir brushMaskOption1 = numpy.copy(brushMask) brushMaskOption2 = numpy.copy(brushMask) brushMaskOption3 = numpy.copy(brushMask) brushMaskOption4 = numpy.copy(brushMask) x = -1 for _ in brushMask: x += 1 y = -1 for _ in brushMask[x]: y += 1 z = -1 for _ in brushMask[x][y]: z += 1 if brushMask[x][y][z]: randomChance = random.randint(1, totalChance) if chanceA >= randomChance: brushMaskOption1[x][y][z] = True brushMaskOption2[x][y][z] = False brushMaskOption3[x][y][z] = False brushMaskOption4[x][y][z] = False continue if chanceA + chanceB >= randomChance: brushMaskOption1[x][y][z] = False brushMaskOption2[x][y][z] = True brushMaskOption3[x][y][z] = False brushMaskOption4[x][y][z] = False continue if chanceA + chanceB + chanceC >= randomChance: brushMaskOption1[x][y][z] = False brushMaskOption2[x][y][z] = False brushMaskOption3[x][y][z] = True brushMaskOption4[x][y][z] = False continue if chanceA + chanceB + chanceC + chanceD >= randomChance: brushMaskOption1[x][y][z] = False brushMaskOption2[x][y][z] = False brushMaskOption3[x][y][z] = False brushMaskOption4[x][y][z] = True continue blocks[brushMaskOption1] = replaceWith1.ID data[brushMaskOption1] = replaceWith1.blockData blocks[brushMaskOption2] = replaceWith2.ID data[brushMaskOption2] = replaceWith2.blockData blocks[brushMaskOption3] = replaceWith3.ID data[brushMaskOption3] = replaceWith3.blockData blocks[brushMaskOption4] = replaceWith4.ID data[brushMaskOption4] = replaceWith4.blockData UsedAlready = [] createTileEntities(replaceWith1, brushBoxThisChunk, chunk) UsedAlready.append(replaceWith1.ID) if replaceWith2.ID not in UsedAlready: createTileEntities(replaceWith2, brushBoxThisChunk, chunk) UsedAlready.append(replaceWith2.ID) if replaceWith3.ID not in UsedAlready: createTileEntities(replaceWith3, brushBoxThisChunk, chunk) UsedAlready.append(replaceWith3.ID) if replaceWith4.ID not in UsedAlready: createTileEntities(replaceWith4, brushBoxThisChunk, chunk)