This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
mcedit2/tests/mceditlib/editing_test.py

124 lines
4.0 KiB
Python

import numpy
import pytest
import logging
from mceditlib.blocktypes import blocktypeConverter
from mceditlib.export import extractSchematicFrom
from mceditlib.selection import BoundingBox
from mceditlib.worldeditor import WorldEditor
logging.basicConfig(level=logging.INFO)
__author__ = 'Rio'
def testGetEntities(any_world):
dim = any_world.getDimension()
print len(list(dim.getEntities(dim.bounds)))
def testImportAndConvert(any_world, schematic_world):
destDim = any_world.getDimension()
sourceDim = schematic_world.getDimension()
destPoint = sourceDim.bounds.origin
oldEntityCount = len(list(destDim.getEntities(BoundingBox(destPoint, sourceDim.bounds.size))))
destDim.copyBlocks(sourceDim, sourceDim.bounds, destPoint, create=True)
convertBlocks = blocktypeConverter(any_world.blocktypes, schematic_world.blocktypes)
for sourceChunk in sourceDim.getChunks():
cx = sourceChunk.cx
cz = sourceChunk.cz
destChunk = destDim.getChunk(cx, cz)
x = cx << 4
z = cz << 4
for cy in sourceChunk.bounds.sectionPositions(cx, cz):
destSection = destChunk.getSection(cy)
if destSection is None:
continue
sourceSection = sourceChunk.getSection(cy)
convertedSourceBlocks, convertedSourceData = convertBlocks(sourceSection.Blocks, sourceSection.Data)
same = (destSection.Blocks == convertedSourceBlocks)
# assert same.all()
if not same.all():
found = destSection.Blocks[~same]
expected = convertedSourceBlocks[~same]
assert (found != expected).any()
assert (oldEntityCount + len(list(sourceDim.getEntities(sourceDim.bounds)))
== len(list(destDim.getEntities(sourceDim.bounds))))
def testFill(any_world):
dim = any_world.getDimension()
bounds = dim.bounds
box = BoundingBox(bounds.origin + (bounds.size / 2), (64, bounds.height / 2, 64))
x, y, z = numpy.array(list(box.positions)).transpose()
dim.fillBlocks(box, any_world.blocktypes["planks"])
def checkEqual(a, b):
"""
:type a: ndarray
:type b: ndarray
"""
equal = a == b
if not equal.all():
assert False, "Coordinates not equal to %s: \nX: %s\nY: %s\nZ: %s" % (b, x[~equal], y[~equal], z[~equal])
for cp in box.chunkPositions():
chunk = dim.getChunk(*cp)
for cy in chunk.bounds.sectionPositions(*cp):
assert chunk.getSection(cy) is not None, "Section %s not found" % cy
checkEqual(dim.getBlocks(x, y, z).Blocks, any_world.blocktypes["planks"].ID)
dim.fillBlocks(box, any_world.blocktypes["stone"], [any_world.blocktypes["planks"]])
any_world.saveChanges()
any_world.close()
filename = any_world.filename
any_world = WorldEditor(filename)
checkEqual(any_world.getDimension().getBlocks(x, y, z).Blocks, any_world.blocktypes["stone"].ID)
def testOldReplace(any_world):
dim = any_world.getDimension()
dim.fillBlocks(BoundingBox((-11, 0, -7), (38, dim.bounds.height, 25)), any_world.blocktypes["planks"],
[any_world.blocktypes["dirt"], any_world.blocktypes["grass"]])
def testMultiReplace(any_world):
dim = any_world.getDimension()
dim.fillBlocks(BoundingBox((-11, 0, -7), (38, dim.bounds.height, 25)),
[(any_world.blocktypes["planks"], any_world.blocktypes["dirt"]),
(any_world.blocktypes["grass"], any_world.blocktypes["iron_ore"])])
def testImport(any_world, schematic_world):
dim = any_world.getDimension()
dim.copyBlocks(schematic_world.getDimension(), BoundingBox((0, 0, 0), (32, 64, 32,)), dim.bounds.origin)
any_world.saveChanges()
def testExportImport(any_world):
dim = any_world.getDimension()
schem = extractSchematicFrom(dim, dim.bounds)
schemDim = schem.getDimension()
dim.copyBlocks(schemDim, schemDim.bounds, (0, 0, 0))
if __name__ == "__main__":
pytest.main()