pymclevel package¶
Subpackages¶
Submodules¶
pymclevel.BOParser module¶
pymclevel.biome_types module¶
pymclevel.block_copy module¶
-
pymclevel.block_copy.
adjustCopyParameters
(destLevel, sourceLevel, sourceBox, destinationPoint)[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_fill module¶
pymclevel.blockrotation module¶
pymclevel.box module¶
-
class
pymclevel.box.
BoundingBox
(origin=(0, 0, 0), size=(0, 0, 0))[source]¶ Bases:
object
-
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
-
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
-
pymclevel.cachefunc module¶
-
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
-
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}¶
-
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']¶
-
projectiles
= ['Arrow', 'Snowball', 'Egg', 'Fireball', 'SmallFireball', 'ThrownEnderpearl', 'EyeOfEnderSignal', 'ThrownPotion', 'ThrownExpBottle', 'WitherSkull', 'FireworksRocketEntity']¶
-
tiles
= ['PrimedTnt', 'FallingSand']¶
-
vehicles
= ['MinecartRidable', 'MinecartChest', 'MinecartFurnace', 'MinecartTNTMinecartHopperMinecartSpawnerMinecartCommandBlockBoat']¶
-
-
class
pymclevel.entity.
TileEntity
[source]¶ Bases:
object
-
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'}¶
-
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'}¶
-
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.
-
materials
= <MCMaterials (Indev)>¶
-
pymclevel.infiniteworld module¶
Created on Jul 22, 2011
@author: Rio
-
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
¶
-
dirty
¶
-
materials
¶
-
needsLighting
¶
-
root_tag
¶
-
-
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.
-
createChunk
= NotImplemented¶
-
generateLightsIter
(dirtyChunkPositions=None)[source]¶ dirtyChunks may be an iterable yielding (xPos,zPos) tuples if none, generate lights for all chunks that need lighting
-
-
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¶
-
allChunks
¶ Iterates over (xPos, zPos) tuples, one for each chunk in the level. May initiate a costly chunk scan.
-
bounds
¶
-
chunkCount
¶ Returns the number of chunks in the level. May initiate a costly chunk scan.
-
dimNo
= 0¶
-
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
¶
-
isInfinite
= True¶
-
loadedChunkLimit
= 400¶
-
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¶
-
setPlayerSpawnPosition
(pos, player=None)[source]¶ xxx if player is None then it sets the default spawn position for the world
-
size
¶
-
version
¶
-
pymclevel.items module¶
-
class
pymclevel.items.
ItemType
(id, name, maxdamage=0, damagevalue=0, stacksize=64)[source]¶ Bases:
object
-
class
pymclevel.items.
Items
(filename=None)[source]¶ Bases:
object
-
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.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
¶
-
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
-
getEntitiesInBox
(box)[source]¶ Returns a list of references to entities in this chunk, whose positions are within box
-
-
class
pymclevel.level.
FakeChunk
[source]¶ Bases:
pymclevel.level.ChunkBase
-
HeightMap
¶
-
-
class
pymclevel.level.
LightedChunk
[source]¶ Bases:
pymclevel.level.ChunkBase
-
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¶
-
adjustExtractionParameters
(box)¶
-
allChunks
¶ Returns a synthetic list of chunk positions (xPos, zPos), to fake being a chunked level format.
-
bounds
¶
-
chunkCount
¶
-
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)¶
-
fillBlocks
(level, box, blockInfo, blocksToReplace=(), noData=False)¶
-
fillBlocksIter
(level, box, blockInfo, blocksToReplace=(), noData=False)¶
-
gameVersion
¶ Return the content of the tag ‘Name’ in the tag ‘Version’, or ‘Unknown’
-
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
-
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.
-
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¶
-
players
= ['Player']¶
-
root_tag
= None¶
-
saving
= False¶
-
size
¶ Returns the level’s dimensions as a tuple (X,Y,Z)
-
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¶
-
-
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
-
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
-
-
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
-
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:
-
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
-
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
¶
-
-
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¶
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
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
pymclevel.minecraft_server module¶
-
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”)-
defaultJarStorage
= None¶
-
generateChunksInLevelIter
(level, chunks, simulate=False)¶
-
jarStorage
= None¶
-
javaExe
= 'C:/Program Files/Java/jre1.8.0_92/bin\\java.exe'¶
-
lowMemory
= False¶
-
maxRadius
= 20¶
-
minRadius
= 12¶
-
processes
= []¶
-
tempWorldCache
= {}¶
-
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
-
i
= 3¶
-
latestVersion
¶
-
-
pymclevel.minecraft_server.
alphanum_key
(key)¶
-
pymclevel.minecraft_server.
convert
(text)¶
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
-
dtype
= dtype('uint8')¶
-
tagID
= 7¶
-
-
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’
-
tagID
= 8¶
-
-
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
-
tagID
= 9¶
-
-
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¶
-
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¶
-
-
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.player module¶
pymclevel.pocket module¶
-
class
pymclevel.pocket.
PocketChunk
(cx, cz, data, world)[source]¶ Bases:
pymclevel.level.LightedChunk
-
Entities
¶
-
HeightMap
¶
-
TileEntities
¶
-
dirty
= False¶
-
filename
= 'chunks.dat'¶
-
-
class
pymclevel.pocket.
PocketChunksFile
(path)[source]¶ Bases:
object
-
CHUNK_HEADER_SIZE
= 4¶
-
SECTOR_BYTES
= 4096¶
-
chunkCount
¶
-
file
¶
-
holdFileOpen
= False¶
-
sectorCount
¶
-
usedSectors
¶
-
pymclevel.regionfile module¶
-
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
¶
-
compressMode
= 2¶
-
copyChunkFrom
(regionFile, cx, cz)[source]¶ Silently fails if regionFile does not contain the requested chunk.
-
file
¶
-
holdFileOpen
= False¶
-
sectorCount
¶
-
usedSectors
¶
-
pymclevel.run_regression_test module¶
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
¶
-
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.
-
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}¶
-
-
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¶
-