Exemple #1
0
 def __set__(self, instance, value):
     uuidInt = value.int
     least = uuidInt & 0xffffffffffffffffL
     most = (uuidInt >> 64) & 0xffffffffffffffffL
     tag = instance.rootTag
     tag["UUIDLeast"] = nbt.TAG_Long(_signed(least))
     tag["UUIDMost"] = nbt.TAG_Long(_signed(most))
     instance.dirty = True
Exemple #2
0
    def _create(self):
        chunkTag = nbt.TAG_Compound()
        chunkTag.name = ""

        levelTag = nbt.TAG_Compound()
        chunkTag["Level"] = levelTag

        levelTag["HeightMap"] = nbt.TAG_Int_Array(numpy.zeros((16, 16), 'uint32').newbyteorder())
        levelTag["TerrainPopulated"] = nbt.TAG_Byte(1)
        levelTag["xPos"] = nbt.TAG_Int(self.cx)
        levelTag["zPos"] = nbt.TAG_Int(self.cz)

        levelTag["LastUpdate"] = nbt.TAG_Long(0)

        levelTag["Entities"] = nbt.TAG_List()
        levelTag["TileEntities"] = nbt.TAG_List()

        self.rootTag = chunkTag

        self.dirty = True
Exemple #3
0
def created_nbt():

    # The root of an NBT file is always a TAG_Compound.
    level = nbt.TAG_Compound(name="MinecraftLevel")

    # Subtags of a TAG_Compound are automatically named when you use the [] operator.
    level["About"] = nbt.TAG_Compound()
    level["About"]["Author"] = nbt.TAG_String("codewarrior")
    level["About"]["CreatedOn"] = nbt.TAG_Long(time.time())

    level["Environment"] = nbt.TAG_Compound()
    level["Environment"]["SkyBrightness"] = nbt.TAG_Byte(16)
    level["Environment"]["SurroundingWaterHeight"] = nbt.TAG_Short(32)
    level["Environment"]["FogColor"] = nbt.TAG_Int(0xcccccc)

    entity = nbt.TAG_Compound()
    entity["id"] = nbt.TAG_String("Creeper")
    entity["Pos"] = nbt.TAG_List(
        [nbt.TAG_Float(d) for d in (32.5, 64.0, 33.3)])

    level["Entities"] = nbt.TAG_List([entity])

    spawn = nbt.TAG_List(
        (nbt.TAG_Short(100), nbt.TAG_Short(45), nbt.TAG_Short(55)))

    mapTag = nbt.TAG_Compound()
    mapTag["Spawn"] = spawn
    level["Map"] = mapTag

    mapTag2 = nbt.TAG_Compound([spawn])
    mapTag2.name = "Map"

    # I think it looks more familiar with [] syntax.

    l, w, h = 128, 128, 128
    mapTag["Height"] = nbt.TAG_Short(h)  # y dimension
    mapTag["Length"] = nbt.TAG_Short(l)  # z dimension
    mapTag["Width"] = nbt.TAG_Short(w)  # x dimension

    # Byte arrays are stored as numpy.uint8 arrays.

    mapTag["Blocks"] = nbt.TAG_Byte_Array()
    mapTag["Blocks"].value = numpy.zeros(
        l * w * h, dtype=numpy.uint8)  # create lots of air!

    # The blocks array is indexed (y,z,x) for indev levels, so reshape the blocks
    mapTag["Blocks"].value.shape = (h, l, w)

    # Replace the bottom layer of the indev level with wood
    mapTag["Blocks"].value[0, :, :] = 5

    # This is a great way to learn the power of numpy array slicing and indexing.

    mapTag["Data"] = nbt.TAG_Byte_Array()
    mapTag["Data"].value = numpy.zeros(l * w * h, dtype=numpy.uint8)

    # Save a few more tag types for completeness

    level["ShortArray"] = nbt.TAG_Short_Array(
        numpy.zeros((16, 16), dtype='uint16'))
    level["IntArray"] = nbt.TAG_Int_Array(numpy.zeros((16, 16),
                                                      dtype='uint32'))
    level["Float"] = nbt.TAG_Float(0.3)

    return level