pymclevel package

Subpackages

Submodules

pymclevel.BOParser module

class pymclevel.BOParser.BO2(filename='')[source]
blocks
getSchematic()[source]
meta
class pymclevel.BOParser.BO3(filename='')[source]
getSchematic()[source]

pymclevel.biome_types module

pymclevel.block_copy module

pymclevel.block_copy.adjustCopyParameters(destLevel, sourceLevel, sourceBox, destinationPoint)[source]
pymclevel.block_copy.convertBlocks(destLevel, sourceLevel, blocks, blockData)[source]
pymclevel.block_copy.copyBlocksFrom(destLevel, sourceLevel, sourceBox, destinationPoint, blocksToCopy=None, entities=True, create=False, biomes=False, tileTicks=True, staticCommands=False, moveSpawnerPos=False, first=False, cancelCommandBlockOffset=False)[source]
pymclevel.block_copy.copyBlocksFromIter(destLevel, sourceLevel, sourceBox, destinationPoint, blocksToCopy=None, entities=True, create=False, biomes=False, tileTicks=True, staticCommands=False, moveSpawnerPos=False, regenerateUUID=False, first=False, cancelCommandBlockOffset=False)[source]

copy blocks between two infinite levels by looping through the destination’s chunks. make a sub-box of the source level for each chunk and copy block and entities in the sub box to the dest chunk.

pymclevel.block_copy.sourceMaskFunc(blocksToCopy)[source]

pymclevel.block_fill module

pymclevel.block_fill.blockReplaceTable(blocksToReplace)[source]
pymclevel.block_fill.fillBlocks(level, box, blockInfo, blocksToReplace=(), noData=False)[source]
pymclevel.block_fill.fillBlocksIter(level, box, blockInfo, blocksToReplace=(), noData=False)[source]

pymclevel.blockrotation module

pymclevel.box module

class pymclevel.box.BoundingBox(origin=(0, 0, 0), size=(0, 0, 0))[source]

Bases: object

chunkBox(level)[source]

Returns this box extended to the chunk boundaries of the given level

chunkCount
chunkPositions
expand(dx, dy=None, dz=None)[source]

Return a new box with boundaries expanded by dx, dy, dz. If only dx is passed, expands by dx in all dimensions.

height

The dimension along the Y axis

intersect(box)[source]
Return a box containing the area self and box have in common. Box will have zero volume
if there is no common area.
isChunkAligned
length

The dimension along the Z axis

maxcx

The largest chunk position contained in this box

maxcz

The largest chunk position contained in this box

maximum

The largest point of the box; origin plus size.

maxx
maxy
maxz
mincx

The smallest chunk position contained in this box

mincz

The smallest chunk position contained in this box

minx
miny
minz
origin

The smallest position in the box

positions

iterate through all of the positions within this selection box

size

The size of the box

type

alias of int

union(box)[source]

Return a box large enough to contain both self and box.

volume

The volume of the box in blocks

width

The dimension along the X axis

class pymclevel.box.FloatBox(origin=(0, 0, 0), size=(0, 0, 0))[source]

Bases: pymclevel.box.BoundingBox

type

alias of float

class pymclevel.box.Vector[source]

Bases: pymclevel.box._Vector

intfloor()[source]
length()[source]
normalize()[source]

pymclevel.cachefunc module

class pymclevel.cachefunc.Counter[source]

Bases: dict

Mapping where default values are zero

pymclevel.cachefunc.lfu_cache(maxsize=100)[source]

Least-frequenty-used cache decorator.

Arguments to the cached function must be hashable. Cache performance statistics stored in f.hits and f.misses. Clear the cache with f.clear(). http://en.wikipedia.org/wiki/Least_Frequently_Used

pymclevel.cachefunc.lru_cache(maxsize=100)[source]

Least-recently-used cache decorator.

Arguments to the cached function must be hashable. Cache performance statistics stored in f.hits and f.misses. Clear the cache with f.clear(). http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used

pymclevel.entity module

Created on Jul 23, 2011

@author: Rio

class pymclevel.entity.Entity[source]

Bases: object

classmethod Create(entityID, **kw)[source]
classmethod copyWithOffset(entity, copyOffset, regenerateUUID=False)[source]
entityList = {'Sheep': 91, 'Giant': 53, 'CaveSpider': 59, 'MinecartTNT': 45, 'MinecartCommandBlock': 40, 'XPOrb': 2, 'ItemFrame': 18, 'ThrownExpBottle': 17, 'Enderman': 58, 'EntityHorse': 100, 'Guardian': 68, 'WitherSkull': 19, 'Zombie': 54, 'LavaSlime': 62, 'Mob': 48, 'MinecartRideable': 42, 'MinecartSpawner': 47, 'PrimedTnt': 20, 'Ozelot': 98, 'Wolf': 95, 'Arrow': 10, 'Fireball': 12, 'Painting': 9, 'Skeleton': 51, 'Squid': 94, 'EyeOfEnderSignal': 15, 'Pig': 90, 'ThrownEnderpearl': 14, 'EnderCrystal': 200, 'Boat': 41, 'Blaze': 61, 'MinecartFurnace': 44, 'Silverfish': 60, 'Creeper': 50, 'ThrownPotion': 16, 'Bat': 65, 'Slime': 55, 'MinecartHopper': 46, 'LeashKnot': 8, 'EnderDragon': 63, 'MushroomCow': 96, 'Monster': 49, 'Villager': 120, 'SmallFireball': 13, 'Snowball': 11, 'PigZombie': 57, 'Witch': 66, 'Rabbit': 101, 'MinecartChest': 43, 'SnowMan': 97, 'ArmorStand': 30, 'Cow': 92, 'WitherBoss': 64, 'FireworksRocketEntity': 22, 'Item': 1, 'FallingSand': 21, 'VillagerGolem': 99, 'Ghast': 56, 'Endermite': 67, 'Spider': 52, 'Chicken': 93}
classmethod getId(v)[source]
items = ['Item', 'XPOrb', 'Painting', 'EnderCrystal', 'ItemFrame', 'WitherSkull']
maxItems = {'EntityHorse': 15, 'MinecartHopper': 5, 'MinecartChest': 27}
monsters = ['Creeper', 'Skeleton', 'Spider', 'CaveSpider', 'Giant', 'Zombie', 'Slime', 'PigZombie', 'Ghast', 'Pig', 'Sheep', 'Cow', 'Chicken', 'Squid', 'Wolf', 'Monster', 'Enderman', 'Silverfish', 'Blaze', 'Villager', 'LavaSlime', 'WitherBoss', 'Witch', 'Endermite', 'Guardian', 'Rabbit', 'Bat', 'MushroomCow', 'SnowMan', 'Ozelot', 'VillagerGolem', 'EntityHorse']
classmethod pos(tag)[source]
projectiles = ['Arrow', 'Snowball', 'Egg', 'Fireball', 'SmallFireball', 'ThrownEnderpearl', 'EyeOfEnderSignal', 'ThrownPotion', 'ThrownExpBottle', 'WitherSkull', 'FireworksRocketEntity']
classmethod setpos(tag, pos)[source]
tiles = ['PrimedTnt', 'FallingSand']
vehicles = ['MinecartRidable', 'MinecartChest', 'MinecartFurnace', 'MinecartTNTMinecartHopperMinecartSpawnerMinecartCommandBlockBoat']
class pymclevel.entity.TileEntity[source]

Bases: object

classmethod Create(tileEntityID, pos=(0, 0, 0), **kw)[source]
baseStructures = {'MobSpawner': (('EntityId', <class 'pymclevel.nbt.TAG_String'>), ('SpawnData', <class 'pymclevel.nbt.TAG_Compound'>)), 'Chest': (('Items', <class 'pymclevel.nbt.TAG_List'>),), 'Music': (('note', <class 'pymclevel.nbt.TAG_Byte'>),), 'Trap': (('Items', <class 'pymclevel.nbt.TAG_List'>),), 'Dispenser': (('Items', <class 'pymclevel.nbt.TAG_List'>),), 'Piston': (('blockId', <class 'pymclevel.nbt.TAG_Int'>), ('blockData', <class 'pymclevel.nbt.TAG_Int'>), ('facing', <class 'pymclevel.nbt.TAG_Int'>), ('progress', <class 'pymclevel.nbt.TAG_Float'>), ('extending', <class 'pymclevel.nbt.TAG_Byte'>)), 'Furnace': (('BurnTime', <class 'pymclevel.nbt.TAG_Short'>), ('CookTime', <class 'pymclevel.nbt.TAG_Short'>), ('Items', <class 'pymclevel.nbt.TAG_List'>)), 'RecordPlayer': (('Record', <class 'pymclevel.nbt.TAG_Int'>),), 'Control': (('Command', <class 'pymclevel.nbt.TAG_String'>), ('CustomName', <class 'pymclevel.nbt.TAG_String'>), ('TrackOutput', <class 'pymclevel.nbt.TAG_Byte'>), ('SuccessCount', <class 'pymclevel.nbt.TAG_Int'>)), 'Dropper': (('Items', <class 'pymclevel.nbt.TAG_List'>),), 'FlowerPot': (('Item', <class 'pymclevel.nbt.TAG_String'>), ('Data', <class 'pymclevel.nbt.TAG_Int'>)), 'Hopper': (('Items', <class 'pymclevel.nbt.TAG_List'>),), 'Cauldron': (('Items', <class 'pymclevel.nbt.TAG_List'>), ('BrewTime', <class 'pymclevel.nbt.TAG_Int'>)), 'Sign': (('Text1', <class 'pymclevel.nbt.TAG_String'>), ('Text2', <class 'pymclevel.nbt.TAG_String'>), ('Text3', <class 'pymclevel.nbt.TAG_String'>), ('Text4', <class 'pymclevel.nbt.TAG_String'>)), 'EnchantTable': (('CustomName', <class 'pymclevel.nbt.TAG_String'>),)}
classmethod copyWithOffset(tileEntity, copyOffset, staticCommands, moveSpawnerPos, first, cancelCommandBlockOffset=False)[source]
knownIDs = ['MobSpawner', 'Chest', 'Music', 'Trap', 'Dispenser', 'Piston', 'Furnace', 'RecordPlayer', 'Control', 'Dropper', 'FlowerPot', 'Hopper', 'Cauldron', 'Sign', 'EnchantTable']
maxItems = {'Dropper': 9, 'Hopper': 5, 'Cauldron': 4, 'Chest': 27, 'Trap': 9, 'Dispenser': 9, 'Furnace': 3}
otherNames = {'Note Block': 'Music', 'Monster Spawner': 'MobSpawner', 'Command Block': 'Control', 'Chest': 'Chest', 'EnchantTable': 'EnchantTable', 'Dispenser': 'Dispenser', 'Piston': 'Piston', 'Trapped Chest': 'Chest', 'Furnace': 'Furnace', 'Jukebox': 'RecordPlayer', 'Dropper': 'Dropper', 'FlowerPot': 'FlowerPot', 'Hopper': 'Hopper', 'Cauldron': 'Cauldron', 'Sign': 'Sign'}
classmethod pos(tag)[source]
classmethod setpos(tag, pos)[source]
slotNames = {'Furnace': {0: 'Raw', 1: 'Fuel', 2: 'Product'}, 'Cauldron': {0: 'Potion', 1: 'Potion', 2: 'Potion', 3: 'Reagent'}}
stringNames = {'standing_sign': 'Sign', 'ender_chest': 'Chest', 'lit_furnace': 'Furnace', 'trapped_chest': 'Chest', 'enchanting_table': 'EnchantTable', 'dropper': 'Dropper', 'chain_command_block': 'Control', 'noteblock': 'Music', 'mob_spawner': 'MobSpawner', 'dispenser': 'Dispenser', 'chest': 'Chest', 'command_block': 'Control', 'hopper': 'Hopper', 'cauldron': 'Cauldron', 'sticky_piston': 'Piston', 'piston': 'Piston', 'repeating_command_block': 'Control', 'wall_sign': 'Sign', 'furnace': 'Furnace', 'flower_pot': 'FlowerPot', 'jukebox': 'RecordPlayer'}
class pymclevel.entity.TileTick[source]

Bases: object

classmethod pos(tag)[source]

pymclevel.faces module

pymclevel.gprof2dot module

pymclevel.indev module

Created on Jul 22, 2011

@author: Rio

Indev levels:

TAG_Compound “MinecraftLevel” {

TAG_Compound “Environment” {

TAG_Short “SurroundingGroundHeight”// Height of surrounding ground (in blocks) TAG_Byte “SurroundingGroundType” // Block ID of surrounding ground TAG_Short “SurroundingWaterHeight” // Height of surrounding water (in blocks) TAG_Byte “SurroundingWaterType” // Block ID of surrounding water TAG_Short “CloudHeight” // Height of the cloud layer (in blocks) TAG_Int “CloudColor” // Hexadecimal value for the color of the clouds TAG_Int “SkyColor” // Hexadecimal value for the color of the sky TAG_Int “FogColor” // Hexadecimal value for the color of the fog TAG_Byte “SkyBrightness” // The brightness of the sky, from 0 to 100

}

TAG_List “Entities” {

TAG_Compound {

// One of these per entity on the map. // These can change a lot, and are undocumented. // Feel free to play around with them, though. // The most interesting one might be the one with ID “LocalPlayer”, which contains the player inventory

}

}

TAG_Compound “Map” {

// To access a specific block from either byte array, use the following algorithm: // Index = x + (y * Depth + z) * Width

TAG_Short “Width” // Width of the level (along X) TAG_Short “Height” // Height of the level (along Y) TAG_Short “Length” // Length of the level (along Z) TAG_Byte_Array “Blocks” // An array of Length*Height*Width bytes specifying the block types TAG_Byte_Array “Data” // An array of Length*Height*Width bytes with data for each blocks

TAG_List “Spawn” // Default spawn position {

TAG_Short x // These values are multiplied by 32 before being saved TAG_Short y // That means that the actual values are x/32.0, y/32.0, z/32.0 TAG_Short z

}

}

TAG_Compound “About” {

TAG_String “Name” // Level name TAG_String “Author” // Name of the player who made the level TAG_Long “CreatedOn” // Timestamp when the level was first created

}

}

class pymclevel.indev.MCIndevLevel(root_tag=None, filename='')[source]

Bases: pymclevel.level.EntityLevel

IMPORTANT: self.Blocks and self.Data are indexed with [x,z,y] via axis swapping to be consistent with infinite levels.

blockDataAt(x, y, z)[source]
blockLightAt(x, y, z)[source]
static decodePos(v)[source]
static encodePos(x, y, z)[source]
getPlayerOrientation(player='Ignored')[source]

returns (yaw, pitch)

getPlayerPosition(player='Ignored')[source]
materials = <MCMaterials (Indev)>
playerSpawnPosition(player=None)[source]
rotateLeft()[source]
saveToFile(filename=None)[source]
setBlockDataAt(x, y, z, newdata)[source]
setPlayerOrientation(yp, player='Ignored')[source]
setPlayerPosition(pos, player='Ignored')[source]
setPlayerSpawnPosition(pos, player=None)[source]

pymclevel.infiniteworld module

Created on Jul 22, 2011

@author: Rio

pymclevel.infiniteworld.ZeroChunk(height=512)[source]
class pymclevel.infiniteworld.AnvilChunk(chunkData)[source]

Bases: pymclevel.level.LightedChunk

This is a 16x16xH chunk in an (infinite) world. The properties Blocks, Data, SkyLight, BlockLight, and Heightmap are ndarrays containing the respective blocks in the chunk file. Each array is indexed [x,z,y]. The Data, Skylight, and BlockLight arrays are automatically unpacked from nibble arrays into byte arrays for better handling.

Biomes
BlockLight
Blocks
Data
Entities
HeightMap
SkyLight
TerrainPopulated
TileEntities
TileTicks
addEntity(entityTag)[source]
addTileTick(tickTag)[source]
dirty
generateHeightMap()[source]
materials
needsLighting
removeEntitiesInBox(box)[source]
removeTileEntitiesInBox(box)[source]
removeTileTicksInBox(box)[source]
root_tag
savedTagData()[source]
class pymclevel.infiniteworld.ChunkedLevelMixin[source]

Bases: pymclevel.level.MCLevel

blockAt(x, y, z)[source]

returns 0 for blocks outside the loadable chunks. automatically loads chunks.

blockDataAt(x, y, z)[source]
blockLightAt(x, y, z)[source]
createChunk = NotImplemented
generateLights(dirtyChunkPositions=None)[source]
generateLightsIter(dirtyChunkPositions=None)[source]

dirtyChunks may be an iterable yielding (xPos,zPos) tuples if none, generate lights for all chunks that need lighting

setBlockAt(x, y, z, blockID)[source]

returns 0 for blocks outside the loadable chunks. automatically loads chunks.

setBlockDataAt(x, y, z, newdata)[source]
setBlockLightAt(x, y, z, newLight)[source]
setSkylightAt(x, y, z, lightValue)[source]
skylightAt(x, y, z)[source]
class pymclevel.infiniteworld.MCInfdevOldLevel(filename=None, create=False, random_seed=None, last_played=None, readonly=False)[source]

Bases: pymclevel.infiniteworld.ChunkedLevelMixin, pymclevel.level.EntityLevel

DayTime
GAMETYPE_CREATIVE = 1
GAMETYPE_SURVIVAL = 0
GameType
GeneratorName
Height = 256
LastPlayed
LevelName
MapFeatures
RandomSeed
SizeOnDisk
Time
VERSION_ANVIL = 19133
VERSION_MCR = 19132
acquireSessionLock()[source]
addEntity(entityTag)[source]
addTileEntity(tileEntityTag)[source]
addTileTick(tickTag)[source]
allChunks

Iterates over (xPos, zPos) tuples, one for each chunk in the level. May initiate a costly chunk scan.

biomeAt(x, z)[source]
bounds
checkSessionLock()[source]
chunkCount

Returns the number of chunks in the level. May initiate a costly chunk scan.

close()[source]

Unload all chunks and close all open filehandles. Discard any unsaved data.

containsChunk(cx, cz)[source]
containsPoint(x, y, z)[source]
copyChunkFrom(world, cx, cz)[source]

Copy a chunk from world into the same chunk position in self.

createChunk(cx, cz)[source]
createChunks(chunks)[source]
createChunksInBox(box)[source]
createPlayer(playerName)[source]
deleteChunk(cx, cz)[source]
deleteChunksInBox(box)[source]
dimNo = 0
dirhash(n)[source]
dirhashes = [u'0', u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8', u'9', u'a', u'b', u'c', u'd', u'e', u'f', u'g', u'h', u'i', u'j', u'k', u'l', u'm', u'n', u'o', u'p', u'q', u'r', u's', u't', u'u', u'v', u'w', u'x', u'y', u'z', u'10', u'11', u'12', u'13', u'14', u'15', u'16', u'17', u'18', u'19', u'1a', u'1b', u'1c', u'1d', u'1e', u'1f', u'1g', u'1h', u'1i', u'1j', u'1k', u'1l', u'1m', u'1n', u'1o', u'1p', u'1q', u'1r']
displayName
extractChunk(cx, cz, parentFolder)[source]
extractChunksInBox(box, parentFolder)[source]
getChunk(cx, cz)[source]

read the chunk from disk, load it, and return it.

getDimension(dimNo)[source]
getEntitiesInBox(box)[source]
getPlayerDimension(player='Player')[source]
getPlayerGameType(player='Player')[source]
getPlayerOrientation(player='Player')[source]

returns (yaw, pitch)

getPlayerPath(player, dim=0)[source]
getPlayerPosition(player='Player')[source]
getPlayerTag(player='Player')[source]
getRegionForChunk(cx, cz)[source]
getTileEntitiesInBox(box)[source]
getTileTicksInBox(box)[source]
getWorldBounds()[source]
heightMapAt(x, z)[source]
init_player_data()[source]
init_scoreboard()[source]
isInfinite = True
listDirtyChunks()[source]
loadLevelDat(create=False, random_seed=None, last_played=None)[source]
loadedChunkLimit = 400
markDirtyBox(box)[source]
markDirtyChunk(cx, cz)[source]
materials = <MCMaterials (Alpha)>
n = 63
parentWorld = None
playerSpawnPosition(player=None)[source]

xxx if player is None then it gets the default spawn position for the world if player hasn’t used a bed then it gets the default spawn position

playersFolder = None
preloadChunkPositions()[source]
preloadDimensions()[source]
removeEntitiesInBox(box)[source]
removeTileEntitiesInBox(box)[source]
removeTileTicksInBox(box)[source]
saveInPlaceGen()[source]
save_player_data(player_data)[source]
save_scoreboard(score)[source]
setBiomeAt(x, z, biomeID)[source]
setPlayerAbilities(gametype, player='Player')[source]
setPlayerDimension(d, player='Player')[source]
setPlayerGameType(gametype, player='Player')[source]
setPlayerOrientation(yp, player='Player')[source]
setPlayerPosition((x, y, z), player='Player')[source]
setPlayerSpawnPosition(pos, player=None)[source]

xxx if player is None then it sets the default spawn position for the world

setSessionLockCallback(acquire_func, lose_func)[source]
size
tileEntityAt(x, y, z)[source]
unload()[source]

Unload all chunks and close all open filehandles.

version
class pymclevel.infiniteworld.MCAlphaDimension(parentWorld, dimNo, create=False)[source]

Bases: pymclevel.infiniteworld.MCInfdevOldLevel

acquireSessionLock()[source]
checkSessionLock()[source]
dimensionNames = {1: 'The End', -1: 'Nether'}
displayName
loadLevelDat(create=False, random_seed=None, last_played=None)[source]
preloadDimensions()[source]
root_tag
saveInPlace(saveSelf=False)[source]

saving the dimension will save the parent world, which will save any other dimensions that need saving. the intent is that all of them can stay loaded at once for fast switching

pymclevel.items module

exception pymclevel.items.ItemNotFound[source]

Bases: exceptions.KeyError

class pymclevel.items.ItemType(id, name, maxdamage=0, damagevalue=0, stacksize=64)[source]

Bases: object

class pymclevel.items.Items(filename=None)[source]

Bases: object

findItem(id=0, damage=None)[source]
findItemID(id)[source]
items = {u'minecraft:firework_charge': {u'maxdamage': 0, u'name': u'Firework Star', u'optainable': True, u'texture': u'fireworks_charge.png', u'stacksize': 64, u'id': 402}, u'minecraft:flower_pot': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 140, u'name': u'Flower Pot'}, u'minecraft:cobblestone_wall': {u'maxdamage': 1, u'obtainable': True, u'stacksize': 64, u'id': 139, u'name': [u'Cobblestone Wall', u'Mossy Cobblestone Wall']}, u'minecraft:dirt': {u'maxdamage': 2, u'obtainable': True, u'stacksize': 64, u'id': 3, u'name': [u'Dirt', u'Coarse Dirt', u'Podzol']}, u'minecraft:tripwire': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 132, u'name': u'Tripwire'}, u'minecraft:record_mall': {u'maxdamage': 0, u'name': u'mall Disc', u'optainable': True, u'texture': u'record_mall.png', u'stacksize': 1, u'id': 437}, u'minecraft:iron_door': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 71, u'name': u'Iron Door'}, u'minecraft:stone_slab': {u'maxdamage': 3, u'obtainable': True, u'stacksize': 64, u'id': 44, u'name': [u'Stone Slab', u'Sandstone Slab', None, u'Cobblestone Slab', u'Bricks Slab']}, u'minecraft:pumpkin_pie': {u'maxdamage': 0, u'name': u'Pumpkin Pie', u'optainable': True, u'texture': u'pumpkin_pie.png', u'stacksize': 64, u'id': 400}, u'minecraft:lit_redstone_ore': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 74, u'name': u'Redstone Ore'}, u'minecraft:milk_bucket': {u'maxdamage': 0, u'name': u'Milk', u'optainable': True, u'texture': u'bucket_milk.png', u'stacksize': 1, u'id': 335}, u'minecraft:tnt': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 46, u'name': u'TNT'}, u'minecraft:command_block_minecart': {u'maxdamage': 0, u'name': u'Minecart with Command Block', u'optainable': True, u'texture': u'minecart_command_block.png', u'stacksize': 1, u'id': 422}, u'minecraft:bed': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 26, u'name': u'Bed'}, u'minecraft:potato': {u'maxdamage': 0, u'name': u'Potato', u'optainable': True, u'texture': u'potato.png', u'stacksize': 64, u'id': 392}, u'minecraft:jungle_fence': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 190, u'name': u'Jungle Fence'}, u'minecraft:spruce_fence_gate': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 183, u'name': u'Spruce Fence Gate'}, u'minecraft:cake': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 92, u'name': u'Cake'}, u'minecraft:glowstone_dust': {u'maxdamage': 0, u'name': u'Glowstone Dust', u'optainable': True, u'texture': u'glowstone_dust.png', u'stacksize': 64, u'id': 348}, u'minecraft:fence': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 85, u'name': u'Fence'}, u'minecraft:bowl': {u'maxdamage': 0, u'name': u'Bowl', u'optainable': True, u'texture': u'bowl.png', u'stacksize': 64, u'id': 281}, u'minecraft:wheat': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 59, u'name': u'Wheat'}, u'minecraft:noteblock': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 25, u'name': u'Note Block'}, u'minecraft:air': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 0, u'name': u'Air'}, u'minecraft:rabbit': {u'maxdamage': 0, u'name': u'Raw Rabbit', u'optainable': True, u'texture': u'rabbit_raw.png', u'stacksize': 64, u'id': 411}, u'minecraft:potion': {u'maxdamage': 32767, u'name': u'Potion', u'optainable': True, u'texture': u'potion_bottle_drinkable.png', u'stacksize': 1, u'id': 373}, u'minecraft:diamond': {u'maxdamage': 0, u'name': u'Diamond', u'optainable': True, u'texture': u'diamond.png', u'stacksize': 64, u'id': 264}, u'minecraft:brick_stairs': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 108, u'name': u'Brick Stairs'}, u'minecraft:diamond_boots': {u'maxdamage': 429, u'name': u'Diamond Boots', u'optainable': True, u'texture': u'diamond_boots.png', u'stacksize': 1, u'id': 313}, u'minecraft:bone': {u'maxdamage': 0, u'name': u'Bone', u'optainable': True, u'texture': u'bone.png', u'stacksize': 64, u'id': 352}, u'minecraft:barrier': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 166, u'name': u'Barrier'}, u'minecraft:wooden_shovel': {u'maxdamage': 59, u'name': u'Wooden Shovel', u'optainable': True, u'texture': u'wod_shovel.png', u'stacksize': 1, u'id': 269}, u'minecraft:red_sandstone': {u'maxdamage': 2, u'obtainable': True, u'stacksize': 64, u'id': 179, u'name': [u'Red Sandstone', u'Chiseled Red Sandstone', u'Smooth Red Sandstone']}, u'minecraft:pumpkin': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 86, u'name': u'Pumpkin'}, u'minecraft:ender_chest': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 130, u'name': u'Ender Chest'}, u'minecraft:cooked_beef': {u'maxdamage': 0, u'name': u'Steak', u'optainable': True, u'texture': u'beef_cooked.png', u'stacksize': 64, u'id': 364}, u'minecraft:crafting_table': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 58, u'name': u'Crafting Table'}, u'minecraft:netherrack': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 87, u'name': u'Netherrack'}, u'minecraft:iron_leggings': {u'maxdamage': 225, u'name': u'Iron Leggings', u'optainable': True, u'texture': u'iron_leggings.png', u'stacksize': 1, u'id': 308}, u'minecraft:command_block': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 137, u'name': u'Command Block'}, u'minecraft:potatoes': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 142, u'name': u'Potato'}, u'minecraft:mob_spawner': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 52, u'name': u'Monster Spawner'}, u'minecraft:lit_redstone_lamp': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 124, u'name': u'Redstone Lamp (active)'}, u'minecraft:emerald_ore': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 129, u'name': u'Emerald Ore'}, u'minecraft:bookshelf': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 47, u'name': u'Bookshelf'}, u'minecraft:iron_chestplate': {u'maxdamage': 240, u'name': u'Iron Chestplate', u'optainable': True, u'texture': u'iron_chestplate.png', u'stacksize': 1, u'id': 307}, u'minecraft:golden_axe': {u'maxdamage': 32, u'name': u'Golden Axe', u'optainable': True, u'texture': u'gold_axe.png', u'stacksize': 1, u'id': 286}, u'minecraft:leather_leggings': {u'maxdamage': 75, u'name': u'Leather Pants', u'optainable': True, u'texture': u'leather_leggings.png', u'stacksize': 1, u'id': 300}, u'minecraft:chainmail_chestplate': {u'maxdamage': 240, u'name': u'Chain Tunic', u'optainable': True, u'texture': u'chainmail_chestplate.png', u'stacksize': 1, u'id': 303}, u'minecraft:comparator': {u'maxdamage': 0, u'name': u'Redstone Comparator', u'optainable': True, u'texture': u'comparator.png', u'stacksize': 64, u'id': 404}, u'minecraft:redstone_lamp': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 123, u'name': u'Redstone Lamp (inactive)'}, u'minecraft:brick_block': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 45, u'name': u'Bricks'}, u'minecraft:melon_seeds': {u'maxdamage': 0, u'name': u'Melon Seeds', u'optainable': True, u'texture': u'seeds_melon.png', u'stacksize': 64, u'id': 362}, u'minecraft:melon': {u'maxdamage': 0, u'name': u'Melon', u'optainable': True, u'texture': u'melon.png', u'stacksize': 64, u'id': 360}, u'minecraft:redstone': {u'maxdamage': 0, u'name': u'Redstone', u'optainable': True, u'texture': u'redstone_dust.png', u'stacksize': 64, u'id': 331}, u'minecraft:stick': {u'maxdamage': 0, u'name': u'Stick', u'optainable': True, u'texture': u'stick.png', u'stacksize': 64, u'id': 280}, u'minecraft:gold_ingot': {u'maxdamage': 0, u'name': u'Gold Ingot', u'optainable': True, u'texture': u'gold_ingot.png', u'stacksize': 64, u'id': 266}, u'minecraft:sign': {u'maxdamage': 0, u'name': u'Sign', u'optainable': True, u'texture': u'sign.png', u'stacksize': 16, u'id': 323}, u'minecraft:acacia_fence_gate': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 187, u'name': u'Acacia Fence Gate'}, u'minecraft:unlit_redstone_torch': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 75, u'name': u'Redstone Torch (inactive)'}, u'minecraft:filled_map': {u'maxdamage': 32767, u'name': u'Map', u'optainable': True, u'texture': u'map_filled.png', u'stacksize': 1, u'id': 358}, u'minecraft:enchanted_book': {u'maxdamage': 0, u'name': u'Enchanted Book', u'optainable': True, u'texture': u'book_enchanted.png', u'stacksize': 1, u'id': 403}, u'minecraft:chest': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 54, u'name': u'Chest'}, u'minecraft:sea_lantern': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 169, u'name': u'Sea Lantern'}, u'minecraft:piston_head': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 34, u'name': u'Piston Extension'}, u'minecraft:wall_banner': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 177, u'name': u'Banner'}, u'minecraft:leather_chestplate': {u'maxdamage': 80, u'name': u'Leather Tunic', u'optainable': True, u'texture': u'leather_chestplate.png', u'stacksize': 1, u'id': 299}, u'minecraft:rabbit_stew': {u'maxdamage': 0, u'name': u'Rabbit Stew', u'optainable': True, u'texture': u'rabbit_stew.png', u'stacksize': 1, u'id': 413}, u'minecraft:double_stone_slab2': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 181, u'name': u'Double Red Sandstone Slab'}, u'minecraft:bucket': {u'maxdamage': 0, u'name': u'Bucket', u'optainable': True, u'texture': u'bucket_empty.png', u'stacksize': 16, u'id': 325}, u'minecraft:piston': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 33, u'name': u'Piston'}, u'minecraft:vine': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 106, u'name': u'Vines'}, u'minecraft:water_bucket': {u'maxdamage': 0, u'name': u'Water Bucket', u'optainable': True, u'texture': u'bucket_water.png', u'stacksize': 1, u'id': 326}, u'minecraft:anvil': {u'maxdamage': 2, u'obtainable': True, u'stacksize': 64, u'id': 145, u'name': [u'Anvil', u'Slightly Damaged Anvil', u'Very Damaged Anvil']}, u'minecraft:stone_hoe': {u'maxdamage': 131, u'name': u'Stone Hoe', u'optainable': True, u'texture': u'stone_hoe.png', u'stacksize': 1, u'id': 291}, u'minecraft:glass_bottle': {u'maxdamage': 0, u'name': u'Glass Bottle', u'optainable': True, u'texture': u'potion_bottle_empty.png', u'stacksize': 64, u'id': 374}, u'minecraft:beef': {u'maxdamage': 0, u'name': u'Raw Beef', u'optainable': True, u'texture': u'beef_raw.png', u'stacksize': 64, u'id': 363}, u'minecraft:stone_sword': {u'maxdamage': 131, u'name': u'Stone Sword', u'optainable': True, u'texture': u'stone_sword.png', u'stacksize': 1, u'id': 272}, u'minecraft:golden_leggings': {u'maxdamage': 105, u'name': u'Golden Leggings', u'optainable': True, u'texture': u'gold_leggings.png', u'stacksize': 1, u'id': 316}, u'minecraft:wooden_button': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 143, u'name': u'Wooden Button'}, u'minecraft:map': {u'maxdamage': 0, u'name': u'Empty Map', u'optainable': True, u'texture': u'map_empty.png', u'stacksize': 64, u'id': 395}, u'minecraft:redstone_wire': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 55, u'name': u'Redstone Wire'}, u'minecraft:magma_cream': {u'maxdamage': 0, u'name': u'Magma Cream', u'optainable': True, u'texture': u'magma_cream.png', u'stacksize': 64, u'id': 378}, u'minecraft:stone_brick_stairs': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 109, u'name': u'Stone Brick Stairs'}, u'minecraft:brown_mushroom_block': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 99, u'name': u'Brown Mushroom (block)'}, u'minecraft:gravel': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 13, u'name': u'Gravel'}, u'minecraft:diamond_helmet': {u'maxdamage': 363, u'name': u'Diamond Helmet', u'optainable': True, u'texture': u'diamond_helmet.png', u'stacksize': 1, u'id': 310}, u'minecraft:red_sandstone_stairs': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 180, u'name': u'Red Sandstone Stairs'}, u'minecraft:stained_hardened_clay': {u'maxdamage': 15, u'obtainable': True, u'stacksize': 64, u'id': 159, u'name': [u'White Stained Clay', u'Orange Stained Clay', u'Magenta Stained Clay', u'Light Blue Stained Clay', u'Yellow Stained Clay', u'Lime Stained Clay', u'Pink Stained Clay', u'Gray Stained Clay', u'Light Gray Stained Clay', u'Cyan Stained Clay', u'Purple Stained Clay', u'Blue Stained Clay', u'Brown Stained Clay', u'Green Stained Clay', u'Red Stained Clay', u'Black Stained Clay']}, u'minecraft:pumpkin_stem': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 104, u'name': u'Pumpkin Stem'}, u'minecraft:soul_sand': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 88, u'name': u'Soul Sand'}, u'minecraft:cooked_chicken': {u'maxdamage': 0, u'name': u'Cooked Chicken', u'optainable': True, u'texture': u'chicken_cooked.png', u'stacksize': 64, u'id': 366}, u'minecraft:golden_horse_armor': {u'maxdamage': 0, u'name': u'Golden Horse Armor', u'optainable': True, u'texture': u'gold_horse_armor.png', u'stacksize': 1, u'id': 418}, u'minecraft:dark_oak_door': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 197, u'name': u'Dark Oak Door'}, u'minecraft:banner': {u'maxdamage': 15, u'name': [u'Black Banner', u'Red Banner', u'Green Banner', u'Brown Banner', u'Blue Banner', u'Purple Banner', u'Cyan Banner', u'Light Gray Banner', u'Gray Banner', u'Pink Banner', u'Lime Banner', u'Yellow Banner', u'Light Blue Banner', u'Magenta Banner', u'Orange Banner', u'White Banner'], u'optainable': True, u'texture': [u'banner_black.png', u'banner_red.png', u'banner_green.png', u'banner_brown.png', u'banner_blue.png', u'banner_purple.png', u'banner_cyan.png', u'banner_silver.png', u'banner_gray.png', u'banner_pink.png', u'banner_lime.png', u'banner_yellow.png', u'banner_light_blue.png', u'banner_magenta.png', u'banner_orange.png', u'banner_white.png'], u'stacksize': 16, u'id': 425}, u'minecraft:diamond_hoe': {u'maxdamage': 1561, u'name': u'Diamond Hoe', u'optainable': True, u'texture': u'diamond_hoe.png', u'stacksize': 1, u'id': 293}, u'minecraft:writable_book': {u'maxdamage': 0, u'name': u'Book and Quill', u'optainable': True, u'texture': u'book_writeable.png', u'stacksize': 1, u'id': 386}, u'minecraft:monster_egg': {u'maxdamage': 5, u'obtainable': True, u'stacksize': 64, u'id': 97, u'name': [u'Stone Monster Egg', u'Cobblestone Monster Egg', u'Stone Brick Monster Egg', u'Mossy Stone Brick Monster Egg', u'Cracked Stone Brick Monster Egg', u'Chiseled Stone Brick Monster Egg']}, u'minecraft:record_mellohi': {u'maxdamage': 0, u'name': u'mellohi Disc', u'optainable': True, u'texture': u'record_mellohi.png', u'stacksize': 1, u'id': 438}, u'minecraft:iron_pickaxe': {u'maxdamage': 250, u'name': u'Iron Pickaxe', u'optainable': True, u'texture': u'iron_pickaxe.png', u'stacksize': 1, u'id': 257}, u'minecraft:lapis_block': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 22, u'name': u'Lapis Lazuli Block'}, u'minecraft:gold_ore': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 14, u'name': u'Gold Ore'}, u'minecraft:dark_oak_stairs': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 164, u'name': u'Dark Oak Wood Stairs'}, u'minecraft:lava': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 11, u'name': u'Lava'}, u'minecraft:leaves2': {u'maxdamage': 1, u'obtainable': True, u'stacksize': 64, u'id': 161, u'name': [u'Acacia Leaves', u'Dark Oak Leaves']}, u'minecraft:heavy_weighted_pressure_plate': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 148, u'name': u'Weighted Pressure Plate'}, u'minecraft:record_blocks': {u'maxdamage': 0, u'name': u'blocks Disc', u'optainable': True, u'texture': u'record_blocks.png', u'stacksize': 1, u'id': 434}, u'minecraft:gold_block': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 41, u'name': u'Block of Gold'}, u'minecraft:end_portal': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 119, u'name': u'End Portal'}, u'minecraft:leather_helmet': {u'maxdamage': 55, u'name': u'Leather Cap', u'optainable': True, u'texture': u'leather_helmet.png', u'stacksize': 1, u'id': 298}, u'minecraft:carrot_on_a_stick': {u'maxdamage': 25, u'name': u'Carrot on a Stick', u'optainable': True, u'texture': u'carrot_on_a_stick.png', u'stacksize': 1, u'id': 398}, u'minecraft:coal_block': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 173, u'name': u'Block of Coal'}, u'minecraft:iron_ore': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 15, u'name': u'Iron Ore'}, u'minecraft:lava_bucket': {u'maxdamage': 0, u'name': u'Lava Bucket', u'optainable': True, u'texture': u'bucket_lava.png', u'stacksize': 1, u'id': 327}, u'minecraft:nether_star': {u'maxdamage': 0, u'name': u'Nether Star', u'optainable': True, u'texture': u'nether_star.png', u'stacksize': 64, u'id': 399}, u'minecraft:trapdoor': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 96, u'name': u'Trapdoor'}, u'minecraft:diamond_leggings': {u'maxdamage': 495, u'name': u'Diamond Leggings', u'optainable': True, u'texture': u'diamond_leggings.png', u'stacksize': 1, u'id': 312}, u'minecraft:slime': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 165, u'name': u'Slime Block'}, u'minecraft:nether_brick_fence': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 113, u'name': u'Nether Brick Fence'}, u'minecraft:poisonous_potato': {u'maxdamage': 0, u'name': u'Poisonous Potato', u'optainable': True, u'texture': u'potato_poisonous.png', u'stacksize': 64, u'id': 394}, u'minecraft:prismarine': {u'maxdamage': 2, u'obtainable': True, u'stacksize': 64, u'id': 168, u'name': [u'Prismarine', u'Prismarine Bricks', u'Dark Prismarine']}, u'minecraft:leather': {u'maxdamage': 0, u'name': u'Leather', u'optainable': True, u'texture': u'leather.png', u'stacksize': 64, u'id': 334}, u'minecraft:dispenser': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 23, u'name': u'Dispenser'}, u'minecraft:acacia_door': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 196, u'name': u'Acacia Door'}, u'minecraft:stone_shovel': {u'maxdamage': 131, u'name': u'Stone Shovel', u'optainable': True, u'texture': u'stone_shovel.png', u'stacksize': 1, u'id': 273}, u'minecraft:diamond_shovel': {u'maxdamage': 1561, u'name': u'Diamond Shovel', u'optainable': True, u'texture': u'diamond_shovel.png', u'stacksize': 1, u'id': 277}, u'minecraft:mycelium': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 110, u'name': u'Mycelium'}, u'minecraft:diamond_chestplate': {u'maxdamage': 528, u'name': u'Diamond Chestplate', u'optainable': True, u'texture': u'diamond_chestplate.png', u'stacksize': 1, u'id': 311}, u'minecraft:golden_apple': {u'maxdamage': 1, u'name': u'Golden Apple', u'optainable': True, u'texture': [u'apple_golden.png', u'apple_golden_enchanted'], u'stacksize': 64, u'id': 322}, u'minecraft:lapis_ore': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 21, u'name': u'Lapis Lazuli Ore'}, u'minecraft:dye': {u'maxdamage': 15, u'name': [u'Ink Sac', u'Rose Red', u'Cactus Green', u'Cocoa Beans', u'Lapis Lazuli', u'Purple Dye', u'Cyan Dye', u'Light Gray Dye', u'Gray Dye', u'Pink Dye', u'Lime Dye', u'Dandelion Yellow', u'Light Blue Dye', u'Magenta Dye', u'Orange Dye', u'Bone Meal'], u'optainable': True, u'texture': [u'dye_powder_black.png', u'dye_powder_red.png', u'dye_powder_green.png', u'dye_powder_brown.png', u'dye_powder_blue.png', u'dye_powder_purple.png', u'dye_powder_cyan.png', u'dye_powder_silver.png', u'dye_powder_gray.png', u'dye_powder_pink.png', u'dye_powder_lime.png', u'dye_powder_yellow.png', u'dye_powder_light_blue.png', u'dye_powder_magenta.png', u'dye_powder_orange.png', u'dye_powder_white.png'], u'stacksize': 64, u'id': 351}, u'minecraft:glass_pane': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 102, u'name': u'Glass Pane'}, u'minecraft:bread': {u'maxdamage': 0, u'name': u'Bread', u'optainable': True, u'texture': u'bread.png', u'stacksize': 64, u'id': 297}, u'minecraft:name_tag': {u'maxdamage': 0, u'name': u'Name Tag', u'optainable': True, u'texture': u'name_tag.png', u'stacksize': 64, u'id': 421}, u'minecraft:web': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 30, u'name': u'Cobweb'}, u'minecraft:fishing_rod': {u'maxdamage': 64, u'name': u'Fishing Rod', u'optainable': True, u'texture': u'fishing_rod_uncast.png', u'stacksize': 1, u'id': 346}, u'minecraft:quartz': {u'maxdamage': 0, u'name': u'Nether Quartz', u'optainable': True, u'texture': u'quartz.png', u'stacksize': 64, u'id': 406}, u'minecraft:fence_gate': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 107, u'name': u'Fence Gate'}, u'minecraft:blaze_powder': {u'maxdamage': 0, u'name': u'Blaze Powder', u'optainable': True, u'texture': u'blaze_powder.png', u'stacksize': 64, u'id': 377}, u'minecraft:bedrock': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 7, u'name': u'Bedrock'}, u'minecraft:chainmail_boots': {u'maxdamage': 195, u'name': u'Chain Boots', u'optainable': True, u'texture': u'chainmail_boots.png', u'stacksize': 1, u'id': 305}, u'minecraft:wooden_sword': {u'maxdamage': 59, u'name': u'Wooden Sword', u'optainable': True, u'texture': u'wood_sword.png', u'stacksize': 1, u'id': 268}, u'minecraft:nether_brick': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 112, u'name': u'Nether Brick'}, u'minecraft:wooden_slab': {u'maxdamage': 5, u'obtainable': True, u'stacksize': 64, u'id': 126, u'name': [u'Oak Wood Slab', u'Spruce Wood Slab', u'Birch Wood Slab', u'Jungle Wood Slab', u'Acacia Wood Slab', u'Dark Oak Wood Slab']}, u'minecraft:redstone_torch': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 76, u'name': u'Redstone Torch (active)'}, u'minecraft:golden_shovel': {u'maxdamage': 32, u'name': u'Golden Shovel', u'optainable': True, u'texture': u'gold_shovel.png', u'stacksize': 1, u'id': 284}, u'minecraft:diamond_axe': {u'maxdamage': 1561, u'name': u'Diamond Axe', u'optainable': True, u'texture': u'diamond_axe.png', u'stacksize': 1, u'id': 279}, u'minecraft:slime_ball': {u'maxdamage': 0, u'name': u'Slimeball', u'optainable': True, u'texture': u'slimeball.png', u'stacksize': 64, u'id': 341}, u'minecraft:double_stone_slab': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 43, u'name': u'Double Stone Slab'}, u'minecraft:record_chirp': {u'maxdamage': 0, u'name': u'chirp Disc', u'optainable': True, u'texture': u'record_chirp.png', u'stacksize': 1, u'id': 435}, u'minecraft:quartz_stairs': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 156, u'name': u'Quartz Stairs'}, u'minecraft:sponge': {u'maxdamage': 1, u'obtainable': True, u'stacksize': 64, u'id': 19, u'name': [u'Sponge', u'Wet Sponge']}, u'minecraft:iron_shovel': {u'maxdamage': 250, u'name': u'Iron Shovel', u'optainable': True, u'texture': u'iron_shovel.png', u'stacksize': 1, u'id': 256}, u'minecraft:quartz_block': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 155, u'name': u'Block of Quartz'}, u'minecraft:cooked_porkchop': {u'maxdamage': 0, u'name': u'Cooked Porkchop', u'optainable': True, u'texture': u'porkchop_cooked.png', u'stacksize': 64, u'id': 320}, u'minecraft:diamond_sword': {u'maxdamage': 1561, u'name': u'Diamond Sword', u'optainable': True, u'texture': u'diamond_sword.png', u'stacksize': 1, u'id': 276}, u'minecraft:pumpkin_seeds': {u'maxdamage': 0, u'name': u'Pumpkin Seeds', u'optainable': True, u'texture': u'seeds_pumpkin.png', u'stacksize': 64, u'id': 361}, u'minecraft:minecart': {u'maxdamage': 0, u'name': u'Minecart', u'optainable': True, u'texture': u'minecart_normal.png', u'stacksize': 1, u'id': 328}, u'minecraft:shears': {u'maxdamage': 238, u'name': u'Shears', u'optainable': True, u'texture': u'shears.png', u'stacksize': 1, u'id': 359}, u'minecraft:iron_boots': {u'maxdamage': 195, u'name': u'Iron Boots', u'optainable': True, u'texture': u'iron_boots.png', u'stacksize': 1, u'id': 309}, u'minecraft:cooked_rabbit': {u'maxdamage': 0, u'name': u'Cooked Rabbit', u'optainable': True, u'texture': u'rabbit_cooked.png', u'stacksize': 64, u'id': 412}, u'minecraft:iron_block': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 42, u'name': u'Block of Iron'}, u'minecraft:unpowered_repeater': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 93, u'name': u'Redstone Repeater (inactive)'}, u'minecraft:end_portal_frame': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 120, u'name': u'End Portal Block'}, u'minecraft:wooden_hoe': {u'maxdamage': 59, u'name': u'Wooden Hoe', u'optainable': True, u'texture': u'wood_hoe.png', u'stacksize': 1, u'id': 290}, u'minecraft:cooked_mutton': {u'maxdamage': 0, u'name': u'Cooked Mutton', u'optainable': True, u'texture': u'mutton_cooked.png', u'stacksize': 64, u'id': 424}, u'minecraft:paper': {u'maxdamage': 0, u'name': u'Paper', u'optainable': True, u'texture': u'paper.png', u'stacksize': 64, u'id': 339}, u'minecraft:fish': {u'maxdamage': 3, u'name': [u'Raw Fish', u'Raw Salmon', u'Clownfish', u'Pufferfish'], u'optainable': True, u'texture': [u'fish_cod_raw.png', u'fish_salmon_raw.png', u'fish_clownfish_raw', u'fish_pufferfish_raw'], u'stacksize': 64, u'id': 349}, u'minecraft:spruce_door': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 193, u'name': u'Spruce Door'}, u'minecraft:compass': {u'maxdamage': 0, u'name': u'Compass', u'optainable': True, u'texture': u'compass.png', u'stacksize': 64, u'id': 345}, u'minecraft:blaze_rod': {u'maxdamage': 0, u'name': u'Blaze Rod', u'optainable': True, u'texture': u'blaze_rod.png', u'stacksize': 64, u'id': 369}, u'minecraft:tripwire_hook': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 131, u'name': u'Tripwire Hook'}, u'minecraft:tallgrass': {u'maxdamage': 2, u'obtainable': True, u'stacksize': 64, u'id': 31, u'name': [u'Shrub', u'Grass', u'Fern']}, u'minecraft:record_ward': {u'maxdamage': 0, u'name': u'ward Disc', u'optainable': True, u'texture': u'record_ward.png', u'stacksize': 1, u'id': 441}, u'minecraft:glowstone': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 89, u'name': u'Glowstone'}, u'minecraft:sticky_piston': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 29, u'name': u'Sticky Piston'}, u'minecraft:coal': {u'maxdamage': 1, u'name': [u'Coal', u'Charcoal'], u'optainable': True, u'texture': [u'coal.png', u'charcoal.png'], u'stacksize': 64, u'id': 263}, u'minecraft:stone': {u'maxdamage': 6, u'obtainable': True, u'stacksize': 64, u'id': 1, u'name': [u'Stone', u'Granite', u'Polished Granite', u'Diorite', u'Polished Diorite', u'Andesite', u'Polished Andesite']}, u'minecraft:lit_pumpkin': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 91, u'name': u"Jack o'Lantern"}, u'minecraft:mushroom_stew': {u'maxdamage': 0, u'name': u'Mushroom Stew', u'optainable': True, u'texture': u'mushroom_stew.png', u'stacksize': 1, u'id': 282}, u'minecraft:furnace_minecart': {u'maxdamage': 0, u'name': u'Minecart with Furnace', u'optainable': True, u'texture': u'minecart_furnace.png', u'stacksize': 1, u'id': 343}, u'minecraft:stone_button': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 77, u'name': u'Stone Button'}, u'minecraft:carpet': {u'maxdamage': 15, u'obtainable': True, u'stacksize': 64, u'id': 171, u'name': [u'Carpet', u'Orange Carpet', u'Magenta Carpet', u'Light Blue Carpet', u'Yellow Carpet', u'Lime Carpet', u'Pink Carpet', u'Gray Carpet', u'Light Gray Carpet', u'Cyan Carpet', u'Purple Carpet', u'Blue Carpet', u'Brown Carpet', u'Green Carpet', u'Red Carpet', u'Black Carpet']}, u'minecraft:packed_ice': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 174, u'name': u'Packed Ice'}, u'minecraft:powered_repeater': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 94, u'name': u'Redstone Repeater (active)'}, u'minecraft:sand': {u'maxdamage': 1, u'obtainable': True, u'stacksize': 64, u'id': 12, u'name': [u'Sand', u'Red Sand']}, u'minecraft:skull': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 144, u'name': u'Mob Head'}, u'minecraft:book': {u'maxdamage': 0, u'name': u'Book', u'optainable': True, u'texture': u'book_normal.png', u'stacksize': 64, u'id': 340}, u'minecraft:iron_sword': {u'maxdamage': 250, u'name': u'Iron Sword', u'optainable': True, u'texture': u'iron_sword.png', u'stacksize': 1, u'id': 267}, u'minecraft:standing_banner': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 176, u'name': u'Banner'}, u'minecraft:golden_pickaxe': {u'maxdamage': 32, u'name': u'Golden Pickaxe', u'optainable': True, u'texture': u'gold_pickaxe.png', u'stacksize': 1, u'id': 285}, u'minecraft:brick': {u'maxdamage': 0, u'name': u'Brick', u'optainable': True, u'texture': u'brick.png', u'stacksize': 64, u'id': 336}, u'minecraft:wool': {u'maxdamage': 15, u'obtainable': True, u'stacksize': 64, u'id': 35, u'name': [u'White Wool', u'Orange Wool', u'Magenta Wool', u'Light Blue Wool', u'Yellow Wool', u'Lime Wool', u'Pink Wool', u'Gray Wool', u'Light Gray Wool', u'Cyan Wool', u'Purple Wool', u'Blue Wool', u'Brown Wool', u'Green Wool', u'Red Wool', u'Black Wool']}, u'minecraft:end_stone': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 121, u'name': u'End Stone'}, u'minecraft:record_far': {u'maxdamage': 0, u'name': u'far Disc', u'optainable': True, u'texture': u'record_far.png', u'stacksize': 1, u'id': 436}, u'minecraft:unpowered_comparator': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 149, u'name': u'Redstone Comparator'}, u'minecraft:jungle_door': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 195, u'name': u'Jungle Door'}, u'minecraft:chainmail_helmet': {u'maxdamage': 165, u'name': u'Chain Helmet', u'optainable': True, u'texture': u'chainmail_helmet.png', u'stacksize': 1, u'id': 302}, u'minecraft:diamond_ore': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 56, u'name': u'Diamond Ore'}, u'minecraft:farmland': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 60, u'name': u'Farmland'}, u'minecraft:bow': {u'maxdamage': 384, u'name': u'Bow', u'optainable': True, u'texture': u'bow_standby.png', u'stacksize': 1, u'id': 261}, u'minecraft:melon_stem': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 105, u'name': u'Melon Stem'}, u'minecraft:repeater': {u'maxdamage': 0, u'name': u'Redstone Repeater', u'optainable': True, u'texture': u'repeater.png', u'stacksize': 64, u'id': 356}, u'minecraft:baked_potato': {u'maxdamage': 0, u'name': u'Baked Potato', u'optainable': True, u'texture': u'potato_baked.png', u'stacksize': 64, u'id': 393}, u'minecraft:emerald_block': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 133, u'name': u'Block of Emerald'}, u'minecraft:experience_bottle': {u'maxdamage': 0, u'name': u"Bottle o' Enchanting", u'optainable': True, u'texture': u'experience_bottle.png', u'stacksize': 64, u'id': 384}, u'minecraft:grass': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 2, u'name': u'Grass Block'}, u'minecraft:stonebrick': {u'maxdamage': 3, u'obtainable': True, u'stacksize': 64, u'id': 98, u'name': [u'Stone Bricks', u'Mossy Stone Bricks', u'Cracked Stone Bricks', u'Chiseled Stone Bricks']}, u'minecraft:daylight_detector_inverted': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 178, u'name': u'Inverted Daylight Sensor'}, u'minecraft:stone_slab2': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 182, u'name': u'Red Sandstone Slab'}, u'minecraft:ice': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 79, u'name': u'Ice'}, u'minecraft:golden_rail': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 27, u'name': u'Powered Rail'}, u'minecraft:rail': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 66, u'name': u'Rail'}, u'minecraft:cauldron': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 118, u'name': u'Cauldron'}, u'minecraft:flowing_lava': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 10, u'name': u'Lava'}, u'minecraft:stone_stairs': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 67, u'name': u'Cobblestone Stairs'}, u'minecraft:clay_ball': {u'maxdamage': 0, u'name': u'Clay', u'optainable': True, u'texture': u'clay_ball.png', u'stacksize': 64, u'id': 337}, u'minecraft:prismarine_crystals': {u'maxdamage': 0, u'name': u'Prismarine Crystals', u'optainable': True, u'texture': u'prismarine_crystals.png', u'stacksize': 64, u'id': 410}, u'minecraft:jungle_stairs': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 136, u'name': u'Jungle Wood Stairs'}, u'minecraft:gold_nugget': {u'maxdamage': 0, u'name': u'Gold Nugget', u'optainable': True, u'texture': u'gold_nugget.png', u'stacksize': 64, u'id': 371}, u'minecraft:double_plant': {u'maxdamage': 5, u'obtainable': True, u'stacksize': 64, u'id': 175, u'name': [u'Sunflower', u'Lilac', u'Double Tallgrass', u'Lange Fern', u'Rose Bush', u'Peony']}, u'minecraft:painting': {u'maxdamage': 0, u'name': u'Painting', u'optainable': True, u'texture': u'painting.png', u'stacksize': 64, u'id': 321}, u'minecraft:activator_rail': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 157, u'name': u'Activator Rail'}, u'minecraft:dark_oak_fence': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 191, u'name': u'Dark Oak Fence'}, u'minecraft:netherbrick': {u'maxdamage': 0, u'name': u'Nether Brick', u'optainable': True, u'texture': u'netherbrick.png', u'stacksize': 64, u'id': 405}, u'minecraft:oak_stairs': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 53, u'name': u'Oak Wood Stairs'}, u'minecraft:water': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 9, u'name': u'Water'}, u'minecraft:record_wait': {u'maxdamage': 0, u'name': u'wait Disc', u'optainable': True, u'texture': u'record_wait.png', u'stacksize': 1, u'id': 443}, u'minecraft:_comment': u'Datavalues not supported yet!', u'minecraft:yellow_flower': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 37, u'name': u'Dandelion'}, u'minecraft:portal': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 90, u'name': u'Portal'}, u'minecraft:coal_ore': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 16, u'name': u'Coal Ore'}, u'minecraft:diamond_horse_armor': {u'maxdamage': 0, u'name': u'Diamond Horse Armor', u'optainable': True, u'texture': u'diamond_horse_armor.png', u'stacksize': 1, u'id': 419}, u'minecraft:lever': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 69, u'name': u'Lever'}, u'minecraft:sugar': {u'maxdamage': 0, u'name': u'Sugar', u'optainable': True, u'texture': u'sugar.png', u'stacksize': 64, u'id': 353}, u'minecraft:stained_glass': {u'maxdamage': 15, u'obtainable': True, u'stacksize': 64, u'id': 95, u'name': [u'White Stained Glass', u'Orange Stained Glass', u'Magenta Stained Glass', u'Light Blue Stained Glass', u'Yellow Stained Glass', u'Lime Stained Glass', u'Pink Stained Glass', u'Gray Stained Glass', u'Light Gray Stained Glass', u'Cyan Stained Glass', u'Purple Stained Glass', u'Blue Stained Glass', u'Brown Stained Glass', u'Green Stained Glass', u'Red Stained Glass', u'Black Stained Glass']}, u'minecraft:cocoa': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 127, u'name': u'Cocoa'}, u'minecraft:iron_hoe': {u'maxdamage': 250, u'name': u'Iron Hoe', u'optainable': True, u'texture': u'iron_hoe.png', u'stacksize': 1, u'id': 292}, u'minecraft:ender_pearl': {u'maxdamage': 0, u'name': u'Ender Pearl', u'optainable': True, u'texture': u'ender_pearl.png', u'stacksize': 16, u'id': 368}, u'minecraft:written_book': {u'maxdamage': 0, u'name': u'Written Book', u'optainable': True, u'texture': u'book_written.png', u'stacksize': 1, u'id': 387}, u'minecraft:birch_fence': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 189, u'name': u'Birch Fence'}, u'minecraft:golden_boots': {u'maxdamage': 0, u'name': u'Golden Boots', u'optainable': True, u'texture': u'gold_boots.png', u'stacksize': 1, u'id': 317}, u'minecraft:boat': {u'maxdamage': 0, u'name': u'Boat', u'optainable': True, u'texture': u'boat.png', u'stacksize': 1, u'id': 333}, u'minecraft:nether_brick_stairs': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 114, u'name': u'Nether Brick Stairs'}, u'minecraft:hardened_clay': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 172, u'name': u'Hardened Clay'}, u'minecraft:trapped_chest': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 146, u'name': u'Trapped Chest'}, u'minecraft:torch': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 50, u'name': u'Torch'}, u'minecraft:jukebox': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 84, u'name': u'Jukebox'}, u'minecraft:flowing_water': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 8, u'name': u'Water'}, u'minecraft:sapling': {u'maxdamage': 5, u'obtainable': True, u'stacksize': 64, u'id': 6, u'name': [u'Oak Sapling', u'Spruce Sapling', u'Birch Sapling', u'Jungle Sapling', u'Acacia Sapling', u'Dark Oak Sapling']}, u'minecraft:emerald': {u'maxdamage': 0, u'name': u'Emerald', u'optainable': True, u'texture': u'emerald.png', u'stacksize': 64, u'id': 388}, u'minecraft:sandstone': {u'maxdamage': 2, u'obtainable': True, u'stacksize': 64, u'id': 24, u'name': [u'Sandstone', u'Chiseled Sandstone', u'Smooth Sandstone']}, u'minecraft:birch_stairs': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 135, u'name': u'Birch Wood Stairs'}, u'minecraft:light_weighted_pressure_plate': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 147, u'name': u'Weighted Pressure Plate'}, u'minecraft:standing_sign': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 63, u'name': u'Sign'}, u'minecraft:nether_wart': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 115, u'name': u'Nether Wart'}, u'minecraft:hay_block': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 170, u'name': u'Hay Block'}, u'minecraft:cookie': {u'maxdamage': 0, u'name': u'Cookie', u'optainable': True, u'texture': u'cookie.png', u'stacksize': 64, u'id': 357}, u'minecraft:tnt_minecart': {u'maxdamage': 0, u'name': u'Minecart with TNT', u'optainable': True, u'texture': u'minecart_tnt.png', u'stacksize': 1, u'id': 407}, u'minecraft:diamond_block': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 57, u'name': u'Block of Diamond'}, u'minecraft:record_11': {u'maxdamage': 0, u'name': u'11 Disc', u'optainable': True, u'texture': u'record_11.png', u'stacksize': 1, u'id': 442}, u'minecraft:golden_chestplate': {u'maxdamage': 112, u'name': u'Golden Chestplate', u'optainable': True, u'texture': u'gold_chestplate.png', u'stacksize': 1, u'id': 315}, u'minecraft:record_strad': {u'maxdamage': 0, u'name': u'strad Disc', u'optainable': True, u'texture': u'record_strad.png', u'stacksize': 1, u'id': 440}, u'minecraft:spruce_fence': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 188, u'name': u'Spruce Fence'}, u'minecraft:spruce_stairs': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 134, u'name': u'Spruce Wood Stairs'}, u'minecraft:armor_stand': {u'maxdamage': 0, u'name': u'Armor Stand', u'optainable': True, u'texture': u'wooden_armorstand.png', u'stacksize': 16, u'id': 416}, u'minecraft:red_mushroom_block': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 100, u'name': u'Red Mushroom (block)'}, u'minecraft:log': {u'maxdamage': 3, u'obtainable': True, u'stacksize': 64, u'id': 17, u'name': [u'Oak Wood', u'Spruce Wood', u'Birch Wood', u'Jungle Wood']}, u'minecraft:brewing_stand': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 117, u'name': u'Brewing Stand'}, u'minecraft:furnace': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 61, u'name': u'Furnace'}, u'minecraft:hopper_minecart': {u'maxdamage': 0, u'name': u'Minecart with Hopper', u'optainable': True, u'texture': u'minecart_hopper.png', u'stacksize': 1, u'id': 408}, u'minecraft:flint': {u'maxdamage': 0, u'name': u'Flint', u'optainable': True, u'texture': u'flint.png', u'stacksize': 64, u'id': 318}, u'minecraft:apple': {u'maxdamage': 0, u'name': u'Apple', u'optainable': True, u'texture': u'apple.png', u'stacksize': 64, u'id': 260}, u'minecraft:leaves': {u'maxdamage': 3, u'obtainable': True, u'stacksize': 64, u'id': 18, u'name': [u'Oak Leaves', u'Spruce Leaves', u'Birch Leaves', u'Jungle Leaves']}, u'minecraft:record_cat': {u'maxdamage': 0, u'name': u'cat Disc', u'optainable': True, u'texture': u'record_cat.png', u'stacksize': 1, u'id': 433}, u'minecraft:string': {u'maxdamage': 0, u'name': u'String', u'optainable': True, u'texture': u'string.png', u'stacksize': 64, u'id': 287}, u'minecraft:lit_furnace': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 62, u'name': u'Burning Furnace'}, u'minecraft:diamond_pickaxe': {u'maxdamage': 1561, u'name': u'Diamond Pickaxe', u'optainable': True, u'texture': u'diamond_pickaxe.png', u'stacksize': 1, u'id': 278}, u'minecraft:wooden_axe': {u'maxdamage': 59, u'name': u'Wooden Axe', u'optainable': True, u'texture': u'woood_axe.png', u'stacksize': 1, u'id': 271}, u'minecraft:fire_charge': {u'maxdamage': 0, u'name': u'Fire Charge', u'optainable': True, u'texture': u'fireball.png', u'stacksize': 64, u'id': 385}, u'minecraft:egg': {u'maxdamage': 0, u'name': u'Egg', u'optainable': True, u'texture': u'egg.png', u'stacksize': 16, u'id': 344}, u'minecraft:speckled_melon': {u'maxdamage': 0, u'name': u'Glistering Melon', u'optainable': True, u'texture': u'melon_speckled.png', u'stacksize': 64, u'id': 382}, u'minecraft:wooden_pickaxe': {u'maxdamage': 59, u'name': u'Wooden Pickaxe', u'optainable': True, u'texture': u'wood_pickaxe.png', u'stacksize': 1, u'id': 270}, u'minecraft:_comment2': u'Datavalues not Supported yet!', u'minecraft:fire': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 51, u'name': u'Fire'}, u'minecraft:dark_oak_fence_gate': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 186, u'name': u'Dark Oak Fence Gate'}, u'minecraft:daylight_detector': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 151, u'name': u'Daylight Sensor'}, u'minecraft:jungle_fence_gate': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 185, u'name': u'Jungle Fence Gate'}, u'minecraft:chicken': {u'maxdamage': 0, u'name': u'Raw Chicken', u'optainable': True, u'texture': u'chicken_raw.png', u'stacksize': 64, u'id': 365}, u'minecraft:gunpowder': {u'maxdamage': 0, u'name': u'Gunpowder', u'optainable': True, u'texture': u'gunpowder.png', u'stacksize': 64, u'id': 289}, u'minecraft:fermented_spider_eye': {u'maxdamage': 0, u'name': u'Fermented Spider Eye', u'optainable': True, u'texture': u'spider_eye_fermented.png', u'stacksize': 64, u'id': 376}, u'minecraft:rabbit_foot': {u'maxdamage': 0, u'name': u"Rabbit's Foot", u'optainable': True, u'texture': u'rabbit_foot.png', u'stacksize': 64, u'id': 414}, u'minecraft:planks': {u'maxdamage': 5, u'obtainable': True, u'stacksize': 64, u'id': 5, u'name': [u'Oak Wood Planks', u'Spruce Wood Planks', u'Birch Wood Planks', u'Jungle Wood Planks', u'Acacia Wood Planks', u'Dark Oak Wood Planks']}, u'minecraft:quartz_ore': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 153, u'name': u'Nether Quartz Ore'}, u'minecraft:clock': {u'maxdamage': 0, u'name': u'Clock', u'optainable': True, u'texture': u'clock.png', u'stacksize': 64, u'id': 347}, u'minecraft:acacia_stairs': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 163, u'name': u'Acacia Wood Stairs'}, u'minecraft:chainmail_leggings': {u'maxdamage': 225, u'name': u'Chain Leggings', u'optainable': True, u'texture': u'chainmail_leggings.png', u'stacksize': 1, u'id': 304}, u'minecraft:red_flower': {u'maxdamage': 8, u'obtainable': True, u'stacksize': 64, u'id': 38, u'name': [u'Poppy', u'Blue Orchid', u'Allium', u'Azure Bluet', u'Red Tulip', u'Orange Tulip', u'White Tulip', u'Pink Tulip', u'Oxeye Daisy']}, u'minecraft:stained_glass_pane': {u'maxdamage': 15, u'obtainable': True, u'stacksize': 64, u'id': 160, u'name': [u'White Stained Glass Pane', u'Orange Stained Glass Pane', u'Magenta Stained Glass Pane', u'Light Blue Stained Glass Pane', u'Yellow Stained Glass Pane', u'Lime Stained Glass Pane', u'Pink Stained Glass Pane', u'Gray Stained Glass Pane', u'Light Gray Stained Glass Pane', u'Cyan Stained Glass Pane', u'Purple Stained Glass Pane', u'Blue Stained Glass Pane', u'Brown Stained Glass Pane', u'Green Stained Glass Pane', u'Red Stained Glass Pane', u'Black Stained Glass Pane']}, u'minecraft:fireworks': {u'maxdamage': 0, u'name': u'Firework Rocket', u'optainable': True, u'texture': u'fireworks.png', u'stacksize': 64, u'id': 401}, u'minecraft:wall_sign': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 68, u'name': u'Sign'}, u'minecraft:reeds': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 83, u'name': u'Sugar Cane'}, u'minecraft:cactus': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 81, u'name': u'Cactus'}, u'minecraft:sandstone_stairs': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 128, u'name': u'Sandstone Stairs'}, u'minecraft:flint_and_steel': {u'maxdamage': 64, u'name': u'Flint and Steel', u'optainable': True, u'texture': u'flint_and_steel.png', u'stacksize': 1, u'id': 259}, u'minecraft:prismarine_shard': {u'maxdamage': 0, u'name': u'Prismarine Shard', u'optainable': True, u'texture': u'prismarine_shard.png', u'stacksize': 64, u'id': 409}, u'minecraft:brown_mushroom': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 39, u'name': u'Brown Mushroom'}, u'minecraft:piston_extension': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 36, u'name': u'Block moved by Piston'}, u'minecraft:mutton': {u'maxdamage': 0, u'name': u'Raw Mutton', u'optainable': True, u'texture': u'mutton_raw.png', u'stacksize': 64, u'id': 423}, u'minecraft:snow': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 80, u'name': u'Snow'}, u'minecraft:leather_boots': {u'maxdamage': 65, u'name': u'Leather Boots', u'optainable': True, u'texture': u'leather_boots.png', u'stacksize': 1, u'id': 301}, u'minecraft:spider_eye': {u'maxdamage': 0, u'name': u'Spider Eye', u'optainable': True, u'texture': u'spider_eye.png', u'stacksize': 64, u'id': 375}, u'minecraft:record_stal': {u'maxdamage': 0, u'name': u'stal Disc', u'optainable': True, u'texture': u'record_stal.png', u'stacksize': 1, u'id': 439}, u'minecraft:wooden_pressure_plate': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 72, u'name': u'Wooden Pressure Plate'}, u'minecraft:rotten_flesh': {u'maxdamage': 0, u'name': u'Rotten Flesh', u'optainable': True, u'texture': u'rotten_flesh.png', u'stacksize': 64, u'id': 367}, u'minecraft:birch_fence_gate': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 184, u'name': u'Birch Fence Gate'}, u'minecraft:porkchop': {u'maxdamage': 0, u'name': u'Raw Porkchop', u'optainable': True, u'texture': u'porkchop_raw.png', u'stacksize': 64, u'id': 319}, u'minecraft:snow_layer': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 78, u'name': u'Snow'}, u'minecraft:feather': {u'maxdamage': 0, u'name': u'Feather', u'optainable': True, u'texture': u'feather.png', u'stacksize': 64, u'id': 288}, u'minecraft:item_frame': {u'maxdamage': 0, u'name': u'Item Frame', u'optainable': True, u'texture': u'item_frame.png', u'stacksize': 64, u'id': 389}, u'minecraft:birch_door': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 194, u'name': u'Birch Door'}, u'minecraft:waterlily': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 111, u'name': u'Lily Pad'}, u'minecraft:golden_carrot': {u'maxdamage': 0, u'name': u'Golden Carrot', u'optainable': True, u'texture': u'carrot_golden.png', u'stacksize': 64, u'id': 396}, u'minecraft:double_wooden_slab': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 125, u'name': u'Double Wooden Slab'}, u'minecraft:log2': {u'maxdamage': 1, u'obtainable': True, u'stacksize': 64, u'id': 162, u'name': [u'Acacia Wood', u'Dark Oak Wood']}, u'minecraft:carrot': {u'maxdamage': 0, u'name': u'Carrot', u'optainable': True, u'texture': u'carrot.png', u'stacksize': 64, u'id': 391}, u'minecraft:iron_trapdoor': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 167, u'name': u'Iron Trapdoor'}, u'minecraft:stone_pickaxe': {u'maxdamage': 131, u'name': u'Stone Pickaxe', u'optainable': True, u'texture': u'stone_pickaxe.png', u'stacksize': 1, u'id': 274}, u'minecraft:deadbush': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 32, u'name': u'Dead Bush'}, u'minecraft:stone_axe': {u'maxdamage': 131, u'name': u'Stone Axe', u'optainable': True, u'texture': u'stone_axe.png', u'stacksize': 1, u'id': 275}, u'minecraft:acacia_fence': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 192, u'name': u'Acacia Fence'}, u'minecraft:redstone_ore': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 73, u'name': u'Redstone Ore'}, u'minecraft:iron_ingot': {u'maxdamage': 0, u'name': u'Iron Ingot', u'optainable': True, u'texture': u'iron_ingot.png', u'stacksize': 64, u'id': 265}, u'minecraft:golden_hoe': {u'maxdamage': 32, u'name': u'Golden Hoe', u'optainable': True, u'texture': u'gold_hoe.png', u'stacksize': 1, u'id': 294}, u'minecraft:iron_axe': {u'maxdamage': 250, u'name': u'Iron Axe', u'optainable': True, u'texture': u'iron_axe.png', u'stacksize': 1, u'id': 258}, u'minecraft:wooden_door': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 64, u'name': u'Oak Door'}, u'minecraft:ender_eye': {u'maxdamage': 0, u'name': u'Eye of Ender', u'optainable': True, u'texture': u'ender_eye.png', u'stacksize': 64, u'id': 381}, u'minecraft:rabbit_hide': {u'maxdamage': 0, u'name': u'Rabbit Hide', u'optainable': True, u'texture': u'rabbit_hide.png', u'stacksize': 64, u'id': 415}, u'minecraft:enchanting_table': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 116, u'name': u'Enchantment Table'}, u'minecraft:cooked_fish': {u'maxdamage': 1, u'name': [u'Cooked Fish', u'Cooked Salmon'], u'optainable': True, u'texture': [u'fish_cod_cooked.png', u'fish_salmon_cooked.png'], u'stacksize': 64, u'id': 350}, u'minecraft:obsidian': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 49, u'name': u'Obsidian'}, u'minecraft:glass': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 20, u'name': u'Glass'}, u'minecraft:red_mushroom': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 40, u'name': u'Red Mushroom'}, u'minecraft:iron_bars': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 101, u'name': u'Iron Bars'}, u'minecraft:wheat_seeds': {u'maxdamage': 0, u'name': u'Seeds', u'optainable': True, u'texture': u'seeds_wheat.png', u'stacksize': 64, u'id': 295}, u'minecraft:detector_rail': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 28, u'name': u'Detector Rail'}, u'minecraft:mossy_cobblestone': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 48, u'name': u'Moss Stone'}, u'minecraft:stone_pressure_plate': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 70, u'name': u'Stone Pressure Plate'}, u'minecraft:cobblestone': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 4, u'name': u'Cobblestone'}, u'minecraft:ladder': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 65, u'name': u'Ladder'}, u'minecraft:redstone_block': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 152, u'name': u'Block of Redstone'}, u'minecraft:powered_comparator': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 150, u'name': u'Redstone Comparator'}, u'minecraft:ghast_tear': {u'maxdamage': 0, u'name': u'Ghast Tear', u'optainable': True, u'texture': u'ghast_tear.png', u'stacksize': 64, u'id': 370}, u'minecraft:lead': {u'maxdamage': 0, u'name': u'Lead', u'optainable': True, u'texture': u'lead.png', u'stacksize': 64, u'id': 420}, u'minecraft:snowball': {u'maxdamage': 0, u'name': u'Snowball', u'optainable': True, u'texture': u'snowball.png', u'stacksize': 16, u'id': 332}, u'minecraft:saddle': {u'maxdamage': 0, u'name': u'Saddle', u'optainable': True, u'texture': u'saddle.png', u'stacksize': 1, u'id': 329}, u'minecraft:record_13': {u'maxdamage': 0, u'name': u'13 Disc', u'optainable': True, u'texture': u'record_13.png', u'stacksize': 1, u'id': 432}, u'minecraft:chest_minecart': {u'maxdamage': 0, u'name': u'Minecart with Chest', u'optainable': True, u'texture': u'minecart_chest.png', u'stacksize': 1, u'id': 342}, u'minecraft:dropper': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 158, u'name': u'Dropper'}, u'minecraft:dragon_egg': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 122, u'name': u'Dragon Egg'}, u'minecraft:golden_sword': {u'maxdamage': 32, u'name': u'Golden Sword', u'optainable': True, u'texture': u'gold_sword.png', u'stacksize': 1, u'id': 283}, u'minecraft:clay': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 82, u'name': u'Clay'}, u'minecraft:carrots': {u'maxdamage': 0, u'obtainable': False, u'stacksize': 64, u'id': 141, u'name': u'Carrot'}, u'minecraft:iron_helmet': {u'maxdamage': 165, u'name': u'Iron Helmet', u'optainable': True, u'texture': u'iron_helmet.png', u'stacksize': 1, u'id': 306}, u'minecraft:golden_helmet': {u'maxdamage': 77, u'name': u'Golden Helmet', u'optainable': True, u'texture': u'gold_helmet.png', u'stacksize': 1, u'id': 314}, u'minecraft:hopper': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 154, u'name': u'Hopper'}, u'minecraft:melon_block': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 103, u'name': u'Melon'}, u'minecraft:iron_horse_armor': {u'maxdamage': 0, u'name': u'Iron Horse Armor', u'optainable': True, u'texture': u'iron_horse_armor.png', u'stacksize': 1, u'id': 417}, u'minecraft:beacon': {u'maxdamage': 0, u'obtainable': True, u'stacksize': 64, u'id': 138, u'name': u'Beacon'}, u'minecraft:arrow': {u'maxdamage': 0, u'name': u'Arrow', u'optainable': True, u'texture': u'arrow.png', u'stacksize': 64, u'id': 262}, u'minecraft:spawn_egg': {u'maxdamage': 120, u'name': u'Spawn Egg', u'optainable': True, u'texture': u'spawn_egg.png', u'stacksize': 64, u'id': 383}}

pymclevel.javalevel module

Created on Jul 22, 2011

@author: Rio

class pymclevel.javalevel.MCJavaLevel(filename, data)[source]

Bases: pymclevel.level.MCLevel

Height
Length
Width
blockDataAt(*args)[source]
static guessSize(data)[source]
saveInPlaceGen()[source]
setBlockDataAt(*args)[source]

pymclevel.level module

Created on Jul 22, 2011

@author: Rio

class pymclevel.level.ChunkBase[source]

Bases: pymclevel.level.EntityLevel

BlockLight = NotImplemented
Blocks = NotImplemented
Data = NotImplemented
Height
HeightMap = NotImplemented
Length = 16
SkyLight = NotImplemented
Width = 16
bounds
chunkChanged(needsLighting=True)[source]
chunkPosition = NotImplemented
dirty = False
getChunkSlicesForBox(box)[source]

Given a BoundingBox enclosing part of the world, return a smaller box enclosing the part of this chunk intersecting the given box, and a tuple of slices that can be used to select the corresponding parts of this chunk’s block and data arrays.

materials
needsLighting = False
class pymclevel.level.EntityLevel[source]

Bases: pymclevel.level.MCLevel

Abstract subclass of MCLevel that adds default entity behavior

addEntities(entities)[source]
addEntity(entityTag)[source]
addTileEntity(tileEntityTag)[source]
addTileTick(tickTag)[source]
addTileTicks(tileTicks)[source]
getEntitiesInBox(box)[source]

Returns a list of references to entities in this chunk, whose positions are within box

getTileEntitiesInBox(box)[source]

Returns a list of references to tile entities in this chunk, whose positions are within box

getTileTicksInBox(box)[source]
removeEntities(func)[source]
removeEntitiesInBox(box)[source]
removeTileEntities(func)[source]
removeTileEntitiesInBox(box)[source]
removeTileTicks(func)[source]
removeTileTicksInBox(box)[source]
tileEntityAt(x, y, z)[source]
class pymclevel.level.FakeChunk[source]

Bases: pymclevel.level.ChunkBase

HeightMap
class pymclevel.level.LightedChunk[source]

Bases: pymclevel.level.ChunkBase

chunkChanged(calcLighting=True)[source]

You are required to call this function after you are done modifying the chunk. Pass False for calcLighting if you know your changes will not change any lights.

genFastLights()[source]
generateHeightMap()[source]
class pymclevel.level.MCLevel[source]

Bases: object

MCLevel is an abstract class providing many routines to the different level types, including a common copyEntitiesFrom built on class-specific routines, and a dummy getChunk/allChunks for the finite levels.

MCLevel subclasses must have Width, Length, and Height attributes. The first two are always zero for infinite levels. Subclasses must also have Blocks, and optionally Data and BlockLight.

Height = None
Length = None
Width = None
addEntities(entities)[source]
addEntity(entityTag)[source]
addTileEntity(entityTag)[source]
addTileTick(entityTag)[source]
addTileTicks(tileTicks)[source]
adjustExtractionParameters(box)
allChunks

Returns a synthetic list of chunk positions (xPos, zPos), to fake being a chunked level format.

blockAt(x, y, z)[source]
blockDataAt(x, y, z)[source]
blockLightAt(x, y, z)[source]
bounds
chunkCount
close()[source]
containsChunk(cx, cz)[source]
containsPoint(x, y, z)[source]
copyBlocksFrom(destLevel, sourceLevel, sourceBox, destinationPoint, blocksToCopy=None, entities=True, create=False, biomes=False, tileTicks=True, staticCommands=False, moveSpawnerPos=False, first=False, cancelCommandBlockOffset=False)
copyBlocksFromIter(destLevel, sourceLevel, sourceBox, destinationPoint, blocksToCopy=None, entities=True, create=False, biomes=False, tileTicks=True, staticCommands=False, moveSpawnerPos=False, regenerateUUID=False, first=False, cancelCommandBlockOffset=False)

copy blocks between two infinite levels by looping through the destination’s chunks. make a sub-box of the source level for each chunk and copy block and entities in the sub box to the dest chunk.

dimNo = 0
displayName
entityClass

alias of Entity

extractAnySchematic(level, box)
extractAnySchematicIter(level, box)
extractSchematic(sourceLevel, box, entities=True, cancelCommandBlockOffset=False)
extractSchematicIter(sourceLevel, box, entities=True, cancelCommandBlockOffset=False)
extractZipSchematic(sourceLevel, box, zipfilename=None, entities=True)
extractZipSchematicIter(sourceLevel, box, zipfilename=None, entities=True, cancelCommandBlockOffset=False)
fakeBlocksForChunk(cx, cz)[source]
fakeDataForChunk(cx, cz)[source]
fillBlocks(level, box, blockInfo, blocksToReplace=(), noData=False)
fillBlocksIter(level, box, blockInfo, blocksToReplace=(), noData=False)
flipEastWest()[source]
flipNorthSouth()[source]
flipVertical()[source]
gameVersion

Return the content of the tag ‘Name’ in the tag ‘Version’, or ‘Unknown’

generateLights(dirtyChunks=None)[source]
generateLightsIter(dirtyChunks=None)[source]
getAllChunkSlices()[source]
getChunk(cx, cz)[source]

Synthesize a FakeChunk object representing the chunk at the given position. Subclasses override fakeBlocksForChunk and fakeDataForChunk to fill in the chunk arrays

getChunkSlices(box)[source]
getChunks(chunks=None)[source]

pass a list of chunk coordinate tuples to get an iterator yielding AnvilChunks. pass nothing for an iterator of every chunk in the level. the chunks are automatically loaded.

getEntitiesInBox(box)[source]
getPlayerDimension(player='Player')[source]
getPlayerOrientation(player='Player')[source]
getPlayerPosition(player='Player')[source]
getTileEntitiesInBox(box)[source]
getTileTicksInBox(box)[source]
getWorldBounds()[source]
isInfinite = False
classmethod isLevel(filename)[source]

Tries to find out whether the given filename can be loaded by this class. Returns True or False.

Subclasses should implement _isLevel, _isDataLevel, or _isTagLevel.

materials = <MCMaterials (Classic)>
parentWorld = None
playerSpawnPosition(player=None)[source]
players = ['Player']
removeEntitiesInBox(box)[source]
removeTileEntitiesInBox(box)[source]
removeTileTicksInBox(box)[source]
roll()[source]
root_tag = None
rotateLeft()[source]
saveInPlace()[source]
saveInPlaceGen()[source]
saving = False
setBlockAt(x, y, z, blockID)[source]
setBlockDataAt(x, y, z, newdata)[source]
setPlayerDimension(d, player='Player')[source]
setPlayerOrientation(yp, player='Player')[source]
setPlayerPosition(pos, player='Player')[source]
setPlayerSpawnPosition(pos, player=None)[source]
setSkylightAt(*args)[source]
size

Returns the level’s dimensions as a tuple (X,Y,Z)

skylightAt(*args)[source]
tileEntityAt(x, y, z)[source]
world = None
pymclevel.level.computeChunkHeightMap(materials, blocks, HeightMap=None)[source]

Computes the HeightMap array for a chunk, which stores the lowest y-coordinate of each column where the sunlight is still at full strength. The HeightMap array is indexed z,x contrary to the blocks array which is x,z,y.

If HeightMap is passed, fills it with the result and returns it. Otherwise, returns a new array.

pymclevel.level.extractHeights(array)[source]

Given an array of bytes shaped (x, z, y), return the coordinates of the highest non-zero value in each y-column into heightMap

pymclevel.level.getSlices(box, height)[source]
call this method to iterate through a large slice of the world by
visiting each chunk and indexing its data with a subslice.

this returns an iterator, which yields 3-tuples containing: + a pair of chunk coordinates (cx, cz), + a x,z,y triplet of slices that can be used to index the AnvilChunk’s data arrays, + a x,y,z triplet representing the relative location of this subslice within the requested world slice.

Note the different order of the coordinates between the ‘slices’ triplet and the ‘offset’ triplet. x,z,y ordering is used only to index arrays, since it reflects the order of the blocks in memory. In all other places, including an entity’s ‘Pos’, the order is x,y,z.

pymclevel.leveldb module

pymclevel.leveldbpocket module

exception pymclevel.leveldbpocket.InvalidPocketLevelDBWorldException[source]

Bases: exceptions.Exception

class pymclevel.leveldbpocket.PocketLeveldbChunk(cx, cz, world, data=None, create=False)[source]

Bases: pymclevel.level.LightedChunk

Entities
HeightMap
TileEntities
dirty = False
savedData()[source]

Returns the data of the chunk to save to the database. :return: str of 83200 bytes of chunk data.

shapeChunkData()[source]

Determines the shape of the terrain data. :return:

class pymclevel.leveldbpocket.PocketLeveldbDatabase(path, create=False)[source]

Bases: object

Not to be confused with leveldb_mcpe.DB A PocketLeveldbDatabase is an interface around leveldb_mcpe.DB, providing various functions to load/write chunk data, and access the level.dat file. The leveldb_mcpe.DB object handles the actual leveldb database. To access the actual database, world_db() should be called.

close()[source]

Should be called before deleting this instance of the level. Not calling this method may result in corrupted worlds :return: None

deleteChunk(cx, cz, batch=None, writeOptions=None)[source]
getAllChunks(readOptions=None)[source]

Returns a list of all chunks that have terrain data in the database. Chunks with only Entities or TileEntities are ignored. :param readOptions: ReadOptions :return: list

getAllPlayerData(readOptions=None)[source]

Returns the raw NBT data of all players in the database. Every player is stored as player_<player-id>. The single-player player is stored as ~local_player :param readOptions: :return: dictonary key, value: key: player-id, value = player nbt data as str

holdDatabaseOpen = True
loadChunk(cx, cz, world)[source]
Parameters:
  • cz (cx,) – int Coordinates of the chunk
  • world – PocketLeveldbWorld
Returns:

PocketLeveldbChunk

saveChunk(chunk, batch=None, writeOptions=None)[source]
Parameters:
  • chunk – PocketLeveldbChunk
  • batch – WriteBatch
  • writeOptions – WriteOptions
Returns:

None

savePlayer(player, playerData, batch=None, writeOptions=None)[source]
world_db(*args, **kwds)[source]

Opens a leveldb and keeps it open until editing finished. :yield: DB

class pymclevel.leveldbpocket.PocketLeveldbWorld(filename=None, create=False, random_seed=None, last_played=None, readonly=False)[source]

Bases: pymclevel.infiniteworld.ChunkedLevelMixin, pymclevel.level.MCLevel

GameType
GeneratorName
Height = 128
LastPlayed
Length = 0
LevelName
RandomSeed
SizeOnDisk
Time
Width = 0
addEntity(entityTag)[source]

Adds an entity to the level. :param entityTag: nbt.TAG_Compound containing the entity’s data. :return:

addTileEntity(tileEntityTag)[source]

Adds an entity to the level. :param tileEntityTag: nbt.TAG_Compound containing the Tile entity’s data. :return:

addTileTick(tickTag)[source]

MCPE doesn’t have Tile Ticks, so this can’t be added. :param tickTag: nbt.TAG_Compound :return: None

allChunks
Returns:list with all chunks in the world.
bounds

Returns a boundingbox containing the entire level :return: pymclevel.box.BoundingBox

chunksNeedingLighting

Generator containing all chunks that need lighting. :yield: int (cx, cz) Coordinates of the chunk

close()[source]

Unload all chunks and close all open file-handlers. Discard any unsaved data.

containsChunk(cx, cz)[source]

Determines if the chunk exist in this world. :param cx, cz: int, Coordinates of the chunk :return: bool (if chunk exists)

createChunk(cx, cz)[source]

Creates an empty chunk at given cx, cz coordinates, and stores it in self._loadedChunks :param cx, cz: int, Coordinates of the chunk :return:

defaultDisplayName()[source]
deleteChunk(cx, cz, batch=None)[source]

Deletes a chunk at given cx, cz. Deletes using the batch if batch is given, uses world_db() otherwise. :param cx, cz Coordinates of the chunk :param batch WriteBatch :return: None

deleteChunksInBox(box)[source]

Deletes all chunks in a given box. :param box pymclevel.box.BoundingBox :return: None

entityClass

alias of PocketEntity

getChunk(cx, cz)[source]

Used to obtain a chunk from the database. :param cx, cz: cx, cz coordinates of the chunk :return: PocketLeveldbChunk

getEntitiesInBox(box)[source]

Returns the Entities in given box. :param box: pymclevel.box.BoundingBox :return: list of nbt.TAG_Compound

getPlayerDimension(player='Player')[source]

Always returns 0, as MCPE only has the overworld dimension. :param player: string of the name of the player. “Player” for SSP player, player_<client-id> for SMP player. :return: int

getPlayerGameType(player='Player')[source]

Obtains the players gametype. :param player: string of the name of the player. “Player” for SSP player, player_<client-id> for SMP player. :return: int (0=survival, 1=creative, 2=adventure, 3=spectator)

getPlayerOrientation(player='Player')[source]

Gets the players orientation. :param player: string of the name of the player. “Player” for SSP player, player_<client-id> for SMP player. :return: tuple int (yaw, pitch)

static getPlayerPath(player, dim=0)[source]

player.py loads players from files, but PE caches them differently. This is necessary to make it work. :param player: str :param dim: int :return: str

getPlayerPosition(player='Player')[source]

Gets the players position :param player: string of the name of the player. “Player” for SSP player, player_<client-id> for SMP player. :return: tuple int (x, y, z): Coordinates of the player.

getPlayerTag(player='Player')[source]

Obtains a player from the world. :param player: string of the name of the player. “Player” for SSP player, player_<client-id> for SMP player. :return: nbt.TAG_Compound, root tag of the player.

getTileEntitiesInBox(box)[source]

Returns the Tile Entities in given box. :param box: pymclevel.box.BoundingBox :return: list of nbt.TAG_Compound

getTileTicksInBox(box)[source]

Always returns None, as MCPE has no TileTicks. :param box: pymclevel.box.BoundingBox :return: list

isInfinite = True
loadLevelDat(create=False, random_seed=None, last_played=None)[source]

Loads the level.dat from the worldfolder. :param create: bool. If it’s True, a fresh level.dat will be created instead. :param random_seed: long :param last_played: long :return: None

markDirtyBox(box)[source]
markDirtyChunk(cx, cz)[source]
materials = <MCMaterials (Pocket)>
noTileTicks = True
oldPlayerFolderFormat = False
playerData
playerSpawnPosition(player=None)[source]

Returns the default spawn position for the world. If player is given, the players spawn is returned instead. :param player: nbt.TAG_Compound, root tag of the player. :return: tuple int (x, y, z), coordinates of the spawn.

playerTagCache = {}
players
removeEntitiesInBox(box)[source]

Removes all entities in given box :param box: pymclevel.box.BoundingBox :return: int, count of entities removed

removeTileEntitiesInBox(box)[source]

Removes all tile entities in given box :param box: pymclevel.box.BoundingBox :return: int, count of tile entities removed

removeTileTicksInBox(box)[source]

MCPE doesn’t have TileTicks, so this does nothing. :param box: pymclevel.box.BoundingBox :return: int, count of TileTicks removed.

saveGeneratedChunk(cx, cz, tempChunkBytes)[source]

Chunks get generated using Anvil generation. This is a (slow) way of importing anvil chunk bytes and converting them to MCPE chunk data. Could definitely use some improvements, but at least it works. :param cx, cx: Coordinates of the chunk :param tempChunkBytes: str. Raw MCRegion chunk data. :return:

saveInPlaceGen()[source]

Save all chunks to the database, and write the root_tag back to level.dat.

static setPlayerAbilities(gametype, player='Player')[source]

This method is just to override the standard one, as MCPE has no abilities, as it seems. :parm gametype, int of gamemode player gets set at. :param player: string of the name of the player. “Player” for SSP player, player_<client-id> for SMP player.

setPlayerGameType(gametype, player='Player')[source]

Sets the game type for player :param gametype: int (0=survival, 1=creative, 2=adventure, 3=spectator) :param player: string of the name of the player. “Player” for SSP player, player_<client-id> for SMP player. :return: None

setPlayerOrientation(yp, player='Player')[source]

Gets the players orientation. :param player: string of the name of the player. “Player” for SSP player, player_<client-id> for SMP player. :param yp: int tuple (yaw, pitch) :return: None

setPlayerPosition((x, y, z), player='Player')[source]

Sets the players position to x, y, z :param (x, y, z): tuple of the coordinates of the player :param player: string of the name of the player. “Player” for SSP player, player_<client-id> for SMP player. :return:

setPlayerSpawnPosition(pos, player=None)[source]

Sets the worlds spawn point to pos. If player is given, sets that players spawn point instead. :param pos: tuple int (x, y, z) :param player: nbt.TAG_Compound, root tag of the player :return: None

size
tileEntityAt(x, y, z)[source]

Retrieves a tile tick at given x, y, z coordinates :param x: int :param y: int :param z: int :return: nbt.TAG_Compound or None

unload()[source]

Unload all chunks and close all open file-handlers.

pymclevel.leveldbpocket.TagProperty(tagName, tagType, default_or_func=None)[source]

Copied from infiniteworld.py. Custom property object to handle NBT-tag properties. :param tagName: str, Name of the NBT-tag :param tagType: int, (nbt.TAG_TYPE) Type of the NBT-tag :param default_or_func: function or default value. If function, function should return the default. :return: property

pymclevel.leveldbpocket.loadNBTCompoundList(data, littleEndian=True)[source]

Loads a list of NBT Compound tags from a bunch of data. Uses sep to determine where the next Compound tag starts. :param data: str, the NBT to load from :param littleEndian: bool. Determines endianness :return: list of TAG_Compounds

pymclevel.materials module

class pymclevel.materials.MCMaterials(defaultName='Unused Block')[source]

Bases: object

AllSlabs
AllStairs
addBlock(blockID, blockData=0, **kw)[source]
addJSONBlock(kw)[source]
addJSONBlocks(blockyaml)[source]
addJSONBlocksFromFile(filename)[source]
blockWithID(block_id, data=0)[source]
blocksMatching(name, names=None)[source]
defaultBrightness = 0
defaultColor = (201, 119, 240, 255)
defaultOpacity = 15
defaultTex = [31, 31]
defaultTexture = (496, 496)
get(key, default=None)[source]
setup_blockstates(blockstate_definition_file)[source]
t = 496

pymclevel.mclevel module

MCLevel interfaces

Sample usage:

import mclevel

# Call mclevel.fromFile to identify and open any of these four file formats: # # Classic levels - gzipped serialized java objects. Returns an instance of MCJavalevel # Indev levels - gzipped NBT data in a single file. Returns an MCIndevLevel # Schematics - gzipped NBT data in a single file. Returns an MCSchematic. # MCSchematics have the special method rotateLeft which will reorient torches, stairs, and other tiles appropriately. # Alpha levels - world folder structure containing level.dat and chunk folders. Single or Multiplayer. # Can accept a path to the world folder or a path to the level.dat. Returns an MCInfdevOldLevel

# Load a Classic level. level = mclevel.fromFile(“server_level.dat”);

# fromFile identified the file type and returned a MCJavaLevel. MCJavaLevel doesn’t actually know any java. It guessed the # location of the Blocks array by starting at the end of the file and moving backwards until it only finds valid blocks. # It also doesn’t know the dimensions of the level. This is why you have to tell them to MCEdit via the filename. # This works here too: If the file were 512 wide, 512 long, and 128 high, I’d have to name it “server_level_512_512_128.dat” # # This is one area for improvement.

# Classic and Indev levels have all of their blocks in one place. blocks = level.Blocks

# Sand to glass. blocks[blocks == level.materials.Sand.ID] = level.materials.Glass.ID

# Save the file with another name. This only works for non-Alpha levels. level.saveToFile(“server_level_glassy.dat”);

# Load an Alpha world # Loading an Alpha world immediately scans the folder for chunk files. This takes longer for large worlds. ourworld = mclevel.fromFile(“C:MinecraftOurWorld”);

# Convenience method to load a numbered world from the saves folder. world1 = mclevel.loadWorldNumber(1);

# Find out which chunks are present. Doing this will scan the chunk folders the # first time it is used. If you already know where you want to be, skip to # world1.getChunk(xPos, zPos)

chunkPositions = list(world1.allChunks)

# allChunks returns an iterator that yields a (xPos, zPos) tuple for each chunk xPos, zPos = chunkPositions[0];

# retrieve an AnvilChunk object. this object will load and decompress # the chunk as needed, and remember whether it needs to be saved or relighted

chunk = world1.getChunk(xPos, zPos)

### Access the data arrays of the chunk like so: # Take note that the array is indexed x, z, y. The last index corresponds to # height or altitude.

blockType = chunk.Blocks[0,0,64] chunk.Blocks[0,0,64] = 1

# Access the chunk’s Entities and TileEntities as arrays of TAG_Compound as # they appear in the save format.

# Entities usually have Pos, Health, and id # TileEntities usually have tileX, tileY, tileZ, and id # For more information, google “Chunk File Format”

for entity in chunk.Entities:
if entity[“id”].value == “Spider”:
entity[“Health”].value = 50

# Accessing one byte at a time from the Blocks array is very slow in Python. # To get around this, we have methods to access multiple bytes at once. # The first technique is slicing. You can use slicing to restrict your access # to certain depth levels, or to extract a column or a larger section from the # array. Standard python slice notation is used.

# Set the top half of the array to 0. The : says to use the entire array along # that dimension. The syntax []= indicates we are overwriting part of the array chunk.Blocks[:,:,64:] = 0

# Using [] without = creates a ‘view’ on part of the array. This is not a # copy, it is a reference to a portion of the original array. midBlocks = chunk.Blocks[:,:,32:64]

# Here’s a gotcha: You can’t just write ‘midBlocks = 0’ since it will replace # the ‘midBlocks’ reference itself instead of accessing the array. Instead, do # this to access and overwrite the array using []= syntax. midBlocks[:] = 0

# The second is masking. Using a comparison operator ( <, >, ==, etc ) # against the Blocks array will return a ‘mask’ that we can use to specify # positions in the array.

# Create the mask from the result of the equality test. fireBlocks = ( chunk.Blocks==world.materials.Fire.ID )

# Access Blocks using the mask to set elements. The syntax is the same as # using []= with slices chunk.Blocks[fireBlocks] = world.materials.Leaves.ID

# You can also combine mask arrays using logical operations (&, |, ^) and use # the mask to access any other array of the same shape. # Here we turn all trees into birch trees.

# Extract a mask from the Blocks array to find the locations of tree trunks. # Or | it with another mask to find the locations of leaves. # Use the combined mask to access the Data array and set those locations to birch

# Note that the Data, BlockLight, and SkyLight arrays have been # unpacked from 4-bit arrays to numpy uint8 arrays. This makes them much easier # to work with.

treeBlocks = ( chunk.Blocks == world.materials.Wood.ID ) treeBlocks |= ( chunk.Blocks == world.materials.Leaves.ID ) chunk.Data[treeBlocks] = 2 # birch

# The chunk doesn’t know you’ve changed any of that data. Call chunkChanged() # to let it know. This will mark the chunk for lighting calculation, # recompression, and writing to disk. It will also immediately recalculate the # chunk’s HeightMap and fill the SkyLight only with light falling straight down. # These are relatively fast and were added here to aid MCEdit.

chunk.chunkChanged();

# To recalculate all of the dirty lights in the world, call generateLights world.generateLights();

# Move the player and his spawn world.setPlayerPosition( (0, 67, 0) ) # add 3 to make sure his head isn’t in the ground. world.setPlayerSpawnPosition( (0, 64, 0) )

# Save the level.dat and any chunks that have been marked for writing to disk # This also compresses any chunks marked for recompression. world.saveInPlace();

# Advanced use: # The getChunkSlices method returns an iterator that returns slices of chunks within the specified range. # the slices are returned as tuples of (chunk, slices, point)

# chunk: The AnvilChunk object we’re interested in. # slices: A 3-tuple of slice objects that can be used to index chunk’s data arrays # point: A 3-tuple of floats representing the relative position of this subslice within the larger slice. # # Take caution: # the point tuple is ordered (x,y,z) in accordance with the tuples used to initialize a bounding box # however, the slices tuple is ordered (x,z,y) for easy indexing into the arrays.

# Here is an old version of MCInfdevOldLevel.fillBlocks in its entirety:

def fillBlocks(self, box, blockType, blockData = 0):

chunkIterator = self.getChunkSlices(box)

for (chunk, slices, point) in chunkIterator:
chunk.Blocks[slices] = blockType chunk.Data[slices] = blockData chunk.chunkChanged();

Copyright 2010 David Rio Vierra

exception pymclevel.mclevel.LoadingError[source]

Bases: exceptions.RuntimeError

pymclevel.mclevel.fromFile(filename, loadInfinite=True, readonly=False)[source]

The preferred method for loading Minecraft levels of any type. pass False to loadInfinite if you’d rather not load infdev levels.

pymclevel.mclevel.loadWorld(name)[source]
pymclevel.mclevel.loadWorldNumber(i)[source]

pymclevel.mclevelbase module

Created on Jul 22, 2011

@author: Rio

exception pymclevel.mclevelbase.ChunkAccessDenied[source]

Bases: pymclevel.mclevelbase.ChunkNotPresent

Exception that is raised when a chunk is trying to be read from disk while saving is taking place

exception pymclevel.mclevelbase.ChunkConcurrentException[source]

Bases: exceptions.Exception

Exception that is raised when a chunk is being modified while saving is taking place

exception pymclevel.mclevelbase.ChunkMalformed[source]

Bases: pymclevel.mclevelbase.ChunkNotPresent

exception pymclevel.mclevelbase.ChunkNotPresent[source]

Bases: exceptions.Exception

exception pymclevel.mclevelbase.PlayerNotFound[source]

Bases: exceptions.Exception

exception pymclevel.mclevelbase.RegionMalformed[source]

Bases: exceptions.Exception

pymclevel.mclevelbase.exhaust(_iter)[source]

Functions named ending in “Iter” return an iterable object that does long-running work and yields progress information on each call. exhaust() is used to implement the non-Iter equivalents

pymclevel.mclevelbase.notclosing(*args, **kwds)[source]

pymclevel.minecraft_server module

exception pymclevel.minecraft_server.JavaNotFound[source]

Bases: exceptions.RuntimeError

class pymclevel.minecraft_server.MCServerChunkGenerator(version=None, jarfile=None, jarStorage=None)[source]

Bases: object

Generates chunks using minecraft_server.jar. Uses a ServerJarStorage to store different versions of minecraft_server.jar in an application support folder.

from pymclevel import *

Example usage:

gen = MCServerChunkGenerator() # with no arguments, use the newest
# server version in the cache, or download # the newest one automatically

level = loadWorldNamed(“MyWorld”)

gen.generateChunkInLevel(level, 12, 24)

Using an older version:

gen = MCServerChunkGenerator(“Beta 1.6.5”)
static addEULA(tempDir)[source]
classmethod clearWorldCache()[source]
copyChunkAtPosition(tempWorld, level, cx, cz)[source]
createLevel(level, box, simulate=False, **kw)[source]
createLevelIter(level, box, simulate=False, worldType='DEFAULT', **kw)[source]
createReadme()[source]
defaultJarStorage = None
generateAtPosition(tempWorld, tempDir, cx, cz)[source]
generateAtPositionIter(tempWorld, tempDir, cx, cz, simulate=False)[source]
generateChunkInLevel(level, cx, cz)[source]
generateChunksInLevel(level, chunks)[source]
generateChunksInLevelIter(level, chunks, simulate=False)
generateChunksInLevelIter_new(level, chunks, simulate=False)[source]
generateChunksInLevelIter_old(level, chunks, simulate=False)[source]
classmethod getDefaultJarStorage()[source]
jarStorage = None
javaExe = 'C:/Program Files/Java/jre1.8.0_92/bin\\java.exe'
lowMemory = False
maxRadius = 20
minRadius = 12
processes = []
runServer(startingDir)[source]
tempWorldCache = {}
tempWorldForLevel(level)[source]
classmethod terminateProcesses()[source]
worldCacheDir = 'c:\\users\\jonathan\\appdata\\local\\temp\\pymclevel_MCServerChunkGenerator'
class pymclevel.minecraft_server.ServerJarStorage(cacheDir=None)[source]

Bases: object

broken_versions = ['Beta 1.9 Prerelease 1', 'Beta 1.9 Prerelease 2', 'Beta 1.9 Prerelease 3']
cacheDir = u'C:\\Users\\Jonathan\\Documents\\MCEdit\\ServerJarStorage'
cacheNewVersion(filename, allowDuplicate=True)[source]

Finds the version number from the server jar at filename and copies it into the proper subfolder of the server jar cache folder

checksumForVersion(v)[source]
downloadCurrentServer(getSnapshot)[source]
getJarfile(version=None)[source]
i = 3
jarfileForVersion(v)[source]
latestVersion
reloadVersions()[source]
exception pymclevel.minecraft_server.VersionNotFound[source]

Bases: exceptions.RuntimeError

pymclevel.minecraft_server.alphanum_key(key)
pymclevel.minecraft_server.convert(text)
pymclevel.minecraft_server.findJava()[source]
pymclevel.minecraft_server.getVersions(doSnapshot)[source]
pymclevel.minecraft_server.readProperties(filename)[source]
pymclevel.minecraft_server.saveProperties(filename, properties)[source]
pymclevel.minecraft_server.sort_nicely(l)[source]

Sort the given list in the way that humans expect.

pymclevel.minecraft_server.which(program)[source]

pymclevel.nbt module

Named Binary Tag library. Serializes and deserializes TAG_* objects to and from binary data. Load a Minecraft level by calling nbt.load(). Create your own TAG_* objects and set their values. Save a TAG_* object to a file or StringIO object.

Read the test functions at the end of the file to get started.

This library requires Numpy. Get it here: http://new.scipy.org/download.html

Official NBT documentation is here: http://www.minecraft.net/docs/NBT.txt

Copyright 2010 David Rio Vierra

class pymclevel.nbt.TAG_Byte(value=0, name='')[source]

Bases: pymclevel.nbt.TAG_Value

data_type

alias of int

fmt = <Struct object at 0x0000000009AC8068>
tagID = 1
class pymclevel.nbt.TAG_Short(value=0, name='')[source]

Bases: pymclevel.nbt.TAG_Value

data_type

alias of int

fmt = <Struct object at 0x0000000009AC80D8>
tagID = 2
class pymclevel.nbt.TAG_Int(value=0, name='')[source]

Bases: pymclevel.nbt.TAG_Value

data_type

alias of int

fmt = <Struct object at 0x0000000009AC8148>
tagID = 3
class pymclevel.nbt.TAG_Long(value=0, name='')[source]

Bases: pymclevel.nbt.TAG_Value

data_type

alias of long

fmt = <Struct object at 0x0000000009AC81B8>
tagID = 4
class pymclevel.nbt.TAG_Float(value=0, name='')[source]

Bases: pymclevel.nbt.TAG_Value

data_type

alias of float

fmt = <Struct object at 0x0000000009AC8228>
tagID = 5
class pymclevel.nbt.TAG_Double(value=0, name='')[source]

Bases: pymclevel.nbt.TAG_Value

data_type

alias of float

fmt = <Struct object at 0x0000000009AC8298>
tagID = 6
class pymclevel.nbt.TAG_Byte_Array(value=None, name='')[source]

Bases: pymclevel.nbt.TAG_Value

Like a string, but for binary data. Four length bytes instead of two. Value is a numpy array, and you can change its elements

data_type(value)[source]
dtype = dtype('uint8')
classmethod load_from(ctx)[source]
tagID = 7
write_value(buf)[source]
class pymclevel.nbt.TAG_String(value='', name='')[source]

Bases: pymclevel.nbt.TAG_Value

String in UTF-8 The value parameter must be a ‘unicode’ or a UTF-8 encoded ‘str’

data_type(value)[source]
classmethod load_from(ctx)[source]
tagID = 8
write_value(buf)[source]
class pymclevel.nbt.TAG_List(value=None, name='', list_type=1)[source]

Bases: pymclevel.nbt.TAG_Value, _abcoll.MutableSequence

A homogenous list of unnamed data of a single TAG_* type. Once created, the type can only be changed by emptying the list and adding an element of the new type. If created with no arguments, returns a list of TAG_Compound

Empty lists in the wild have been seen with type TAG_Byte

check_tag(value)[source]
data_type(val)[source]
insert(index, value)[source]
classmethod load_from(ctx)[source]
tagID = 9
write_value(buf)[source]
class pymclevel.nbt.TAG_Compound(value=None, name='')[source]

Bases: pymclevel.nbt.TAG_Value, _abcoll.MutableMapping

A heterogenous list of named tags. Names must be unique within the TAG_Compound. Add tags to the compound using the subscript operator []. This will automatically name the tags.

ALLOW_DUPLICATE_KEYS = False
add(value)[source]
static check_value(val)[source]
data_type(val)[source]
get_all(key)[source]
classmethod load_from(ctx)[source]
save(filename_or_buf=None, compressed=True)[source]

Save the TAG_Compound element to a file. Since this element is the root tag, it can be named.

Pass a filename to save the data to a file. Pass a file-like object (with a read() method) to write the data to that object. Pass nothing to return the data as a string.

tagID = 10
write_value(buf)[source]
class pymclevel.nbt.TAG_Int_Array(value=None, name='')[source]

Bases: pymclevel.nbt.TAG_Byte_Array

An array of big-endian 32-bit integers

dtype = dtype('>u4')
tagID = 11
class pymclevel.nbt.TAG_Short_Array(value=None, name='')[source]

Bases: pymclevel.nbt.TAG_Int_Array

An array of big-endian 16-bit integers. Not official, but used by some mods.

dtype = dtype('>u2')
tagID = 12
pymclevel.nbt.load(filename='', buf=None)[source]

Unserialize data from an NBT file and return the root TAG_Compound object. If filename is passed, reads from the file, otherwise uses data from buf. Buf can be a buffer object with a read() method or a string containing NBT data.

pymclevel.nbt.gunzip(data)[source]

pymclevel.player module

class pymclevel.player.Player(playerNBTFile)[source]
XP_Level
gametype
healf
health
inventory
name
pos
rot
save()[source]
uuid

pymclevel.pocket module

class pymclevel.pocket.PocketChunk(cx, cz, data, world)[source]

Bases: pymclevel.level.LightedChunk

Entities
HeightMap
TileEntities
dirty = False
filename = 'chunks.dat'
shapeChunkData()[source]
unpackChunkData()[source]
class pymclevel.pocket.PocketChunksFile(path)[source]

Bases: object

CHUNK_HEADER_SIZE = 4
SECTOR_BYTES = 4096
chunkCoords()[source]
chunkCount
close()[source]
containsChunk(cx, cz)[source]
file
getOffset(cx, cz)[source]
holdFileOpen = False
loadChunk(cx, cz, world)[source]
repair()[source]
saveChunk(chunk)[source]
sectorCount
setOffset(cx, cz, offset)[source]
usedSectors
writeSector(sectorNumber, data, format)[source]
class pymclevel.pocket.PocketWorld(filename)[source]

Bases: pymclevel.infiniteworld.ChunkedLevelMixin, pymclevel.level.MCLevel

Height = 128
Length = 512
Width = 512
allChunks
chunksNeedingLighting
containsChunk(cx, cz)[source]
getChunk(cx, cz)[source]
isInfinite = True
materials = <MCMaterials (Pocket)>
saveInPlaceGen()[source]

pymclevel.regionfile module

exception pymclevel.regionfile.ChunkTooBig[source]

Bases: exceptions.ValueError

class pymclevel.regionfile.MCRegionFile(path, regionCoords)[source]

Bases: object

CHUNK_HEADER_SIZE = 5
SECTOR_BYTES = 4096
SECTOR_INTS = 1024
VERSION_DEFLATE = 2
VERSION_GZIP = 1
chunkCount
close()[source]
compressMode = 2
containsChunk(cx, cz)[source]
copyChunkFrom(regionFile, cx, cz)[source]

Silently fails if regionFile does not contain the requested chunk.

file
getOffset(cx, cz)[source]
getTimestamp(cx, cz)[source]
holdFileOpen = False
readChunk(cx, cz)[source]
repair()[source]
saveChunk(cx, cz, uncompressedData)[source]
sectorCount
setOffset(cx, cz, offset)[source]
setTimestamp(cx, cz, timestamp=None)[source]
usedSectors
writeSector(sectorNumber, data, format)[source]
pymclevel.regionfile.deflate(data)[source]
pymclevel.regionfile.inflate(data)[source]

pymclevel.run_regression_test module

exception pymclevel.run_regression_test.RegressionError[source]

Bases: exceptions.Exception

pymclevel.run_regression_test.calculate_result(directory)[source]
pymclevel.run_regression_test.directory_clone(*args, **kwds)[source]
pymclevel.run_regression_test.do_test(test_data, result_check, arguments=())[source]

Run a regression test on the given world.

result_check - sha1 of the recursive tree generated arguments - arguments to give to mce.py on execution

pymclevel.run_regression_test.do_test_match_output(test_data, result_check, arguments=())[source]
pymclevel.run_regression_test.generate_file_list(directory)[source]
pymclevel.run_regression_test.launch_subprocess(directory, arguments, env=None)[source]
pymclevel.run_regression_test.main(argv)[source]
pymclevel.run_regression_test.sha1_file(name, checksum=None)[source]
pymclevel.run_regression_test.temporary_directory(*args, **kwds)[source]

pymclevel.schematic module

Created on Jul 22, 2011

@author: Rio

class pymclevel.schematic.MCSchematic(shape=None, root_tag=None, filename=None, mats='Alpha')[source]

Bases: pymclevel.level.EntityLevel

Biomes
Blocks
Data
Entities
Height
Length
Materials
TileEntities
TileTicks
Width
blockDataAt(x, y, z)[source]
classmethod chestWithItemID(itemID, count=64, damage=0)[source]

Creates a chest with a stack of ‘itemID’ in each slot. Optionally specify the count of items in each stack. Pass a negative value for damage to create unnaturally sturdy tools.

flipEastWest()[source]
flipEastWestBlocks()[source]
flipNorthSouth()[source]
flipNorthSouthBlocks()[source]
flipVertical()[source]

xxx delete stuff

flipVerticalBlocks()[source]
getChunk(cx, cz)[source]
materials = <MCMaterials (Alpha)>
paintingMap = {'BurningSkull': 4, 'Wanderer': 1, 'DonkeyKong': 4, 'Aztec2': 1, 'Wasteland': 1, 'Match': 2, 'Plant': 1, 'Creebet': 2, 'Void': 2, 'Alban': 1, 'Pool': 2, 'Stage': 2, 'Pigscene': 4, 'Aztec': 1, 'Courbet': 2, 'Sunset': 2, 'SkullAndRoses': 2, 'Bomb': 1, 'Skeleton': 4, 'Kebab': 1, 'Pointer': 4, 'Fighters': 4, 'Wither': 2, 'Sea': 2, 'Graham': 1}
roll()[source]

xxx rotate stuff - destroys biomes

rollBlocks()[source]

rolls the blocks direction without the block location

rotateLeft()[source]
rotateLeftBlocks()[source]

rotateLeft the blocks direction without there location

saveToFile(filename=None)[source]

save to file named filename, or use self.filename. XXX NOT THREAD SAFE AT ALL.

setBlockDataAt(x, y, z, newdata)[source]
class pymclevel.schematic.INVEditChest(root_tag, filename)[source]

Bases: pymclevel.schematic.MCSchematic

Blocks = array([[[54]]], dtype=uint8)
Data = array([[[0]]], dtype=uint8)
Entities = <TAG_List name='' list_type=<class 'pymclevel.nbt.TAG_Byte'> length=0>
Height = 1
Length = 1
Materials = <MCMaterials (Alpha)>
TileEntities
Width = 1
class pymclevel.schematic.StructureNBT(filename=None, root_tag=None, size=None, mats=<MCMaterials (Alpha)>)[source]

Bases: object

Author
Blocks
Entities
Palette
SUPPORTED_VERSIONS = [1]
Size
Version
classmethod fromSchematic(schematic)[source]
get_palette_index(name, properties=None)[source]
get_state(index)[source]
save(filename='')[source]
toSchematic()[source]

pymclevel.test_leveldb module

Module contents