NBTParse Documentation
Transcription
NBTParse Documentation
NBTParse Documentation Release 0.2.0.dev0 Kevin Norris February 11, 2015 Contents 1 API Reference 1.1 nbtparse Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 exceptions Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Subpackages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 4 4 2 Indices and tables 53 Python Module Index 55 i ii NBTParse Documentation, Release 0.2.0.dev0 NBTParse is a set of tools for working with Named Binary Tags, the data format used by Minecraft. The project is still under active development and many things don’t quite work right. Watch this space! Contents: Contents 1 NBTParse Documentation, Release 0.2.0.dev0 2 Contents CHAPTER 1 API Reference Contents • nbtparse Package • exceptions Module • Subpackages 1.1 nbtparse Package Named Binary Tag manipulation tools. This package contains various utilities for manipulating NBT-formatted data. NBT is used by Minecraft to store a variety of data and metadata. • syntax contains modules relating to low-level NBT syntax. • semantics contains modules relating to intermediate-level constructs. • minecraft contains modules directly relating to Minecraft’s file and data structures. NBTParse logs to loggers with the same names as its modules and packages. You can therefore control logging for the entire package via the NBTParse root logger: nbtparse_root_logger = logging.getLogger('nbtparse') By default (as of Python 3.4), the logging package will emit warnings and more severe logged events on sys.stderr, while dropping less severe events. Consult the logging documentation if you wish to override this behavior. nbtparse.__version__ = ‘0.3.0.dev0’ The version number string for NBTParse, or None if version information is not available. The numbering scheme is strictly compatible with PEP 440 and loosely compatible with Semantic Versioning, allowing some deviations from the latter to satisfy the former. Strictly speaking, NBTParse does not comply with SemVer at all, and the above link is at best misleading. This results from SemVer’s heavy use of the MUST keyword. Note: As a matter of policy, this value ends in .dev0 on the trunk. Since the version number is not changed from one commit to the next, trunk snapshots may appear to have the same version number even if they are materially different. Such snapshots are not official releases. 3 NBTParse Documentation, Release 0.2.0.dev0 1.2 exceptions Module exception nbtparse.exceptions.ClassWarning Bases: builtins.UserWarning Warning issued when a class definition is dubious. exception nbtparse.exceptions.ConcurrentError Bases: builtins.Exception Exception raised when concurrent operations conflict. NBTParse is generally not thread-safe. These exceptions are usually only raised in response to process-level concurrency (e.g. while interacting with the filesystem). Thread safety violations may cause this exception to be raised, but you should not depend on this behavior. exception nbtparse.exceptions.IncompleteSequenceError Bases: nbtparse.exceptions.MalformedNBTError Raised if a sequence is incomplete (i.e. we hit EOF too early). exception nbtparse.exceptions.MalformedNBTError Bases: builtins.Exception Base class of all exceptions caused by malformed or invalid NBT. NBT does not provide any easy method to recover from this sort of error. The source file’s offset pointer is not reset, because it might not be possible to do so. If you want to seek back to the beginning, do so manually. exception nbtparse.exceptions.NoSuchTagTypeError Bases: nbtparse.exceptions.MalformedNBTError Raised if an unrecognized tag type is used. exception nbtparse.exceptions.ParserError Bases: builtins.Exception Exception raised by minecraft.ids.read_config(). Raised if the config file is ill-formed. exception nbtparse.exceptions.SliceWarning Bases: builtins.UserWarning Warning issued when using dubious slicing syntax. exception nbtparse.exceptions.ValueWarning Bases: builtins.UserWarning Warning issued when passing dubious values. 1.3 Subpackages 1.3.1 minecraft Package 4 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 Contents • • • • • • • • • minecraft Package entity Module entityfactory Module ids Module item Module level Module mobs Module projectile Module Subpackages minecraft Package Minecraft-related NBTParse modules. The modules in this package all relate to high-level files and data structures. For instance, nbtparse.minecraft.level contains the LevelFile class, which can read and write the level.dat file in a standard Minecraft save. entity Module Classes for Minecraft entities. nbtparse.minecraft.entity.CoordinateField Field for a TAG_List of coordinates. Pythonic equivalent is a tuple with two or three elements depending on whether or not Y is included. Elements may be ints or floats depending on the underlying datatype. class nbtparse.minecraft.entity.Entity(*args, **kwargs) Bases: nbtparse.semantics.nbtobject.NBTObject A Minecraft entity. Subclasses of Entity may be declared with an extra parameter like this: class Foo(Entity, id='Foo'): pass Such subclasses have an ID field attached to them automatically, with an appropriate default value. Entities are hashable and compare equal if they have the same UUID (and the same type()). air_ticks How much longer until this entity begins to drown. Starts at 300 when above water and goes down when underwater. At zero, lose 1 health per second. dimension Which dimension we’re in. Note: This information is stored elsewhere; it is not known why Minecraft stores it here as well. fall_distance Distance this entity has fallen. 1.3. Subpackages 5 NBTParse Documentation, Release 0.2.0.dev0 Farther distances will result in greater fall damage on landing. fire_ticks How much longer this entity will be aflame. Equal to -1 if not on fire. Larger negative values make it temporarily fireproof. id What kind of entity this is. entityfactory can use this to create subclasses of Entity automatically. invulnerable Whether entity is immune to all damage. Also applies to nonliving entities. motion Velocity at which this entity is moving. Stored as an (x, y, z) tuple. mount NBTObject field called Riding on_ground Whether this entity is touching the ground. portal_cooldown Number of ticks until this entity passes through a portal. Starts at 900 and counts down when in a portal. Switch dimensions at zero. pos Position of this entity, in (x, y, z) form. Values may be fractional. rotation Rotation of this entity. Stored as (yaw, pitch). Roll is not supported. uuid Universally unique identifier for this entity. Should be unique across every Minecraft world. Cannot be changed once the entity is constructed. Creating a new entity will set this to a new UUID. If it is necessary to initialize this field, you may modify _uuid instead. This field is a wrapper for that value. As the name suggests, it must not be modified outside __init__(). Since the UUID is used in calculating the hash(), violating this rule is a Bad Idea. class nbtparse.minecraft.entity.EntityMeta(name, bases, dct, *args, id=None, **kwargs) Bases: nbtparse.semantics.nbtobject.NBTMeta Metaclass for entities. The ID of the entity should be passed as a class keyword argument called id, as follows: class FooEntity(Entity, id='foo'): pass This will create a top-level field with the given string as its default value, for the entity’s ID. If no ID is specified this way, you are responsible for creating the field yourself. If the class neither creates an ID field nor passes an 6 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 ID keyword argument, it cannot be instantiated. This may be done deliberately, typically on abstract classes that aren’t meant to be instantiated. Although ID fields are subject to inheritance like any other, inheriting them doesn’t count for the purposes of this rule. entityfactory Module Module for producing entity.Entity instances. nbtparse.minecraft.entityfactory.from_nbt(nbt: nbtparse.syntax.tags.CompoundTag, *, default_class: nbtparse.semantics.nbtobject.NBTMeta=<class ‘nbtparse.minecraft.entity.Entity’>) → nbtparse.semantics.nbtobject.NBTObject Factory function for making entities and tile entities from raw NBT. Uses appropriate subclasses (usually of Entity and TileEntity) where necessary. The choice of subclass is made via the ids module, and may be altered by registering a custom namespace or re-registering a custom version of the standard namespace. Tries to defend against invalid input. If there is no ID or the ID is unrecognized, a warning will be logged on the module’s logger, and a plain instance of default_class is returned instead. ids Module Module for looking up blocks, items, entities, etc. by name or number. Lookups are performed via all_ids; the rest of the section documents the objects returned by it and how to manage the available namespaces. nbtparse.minecraft.ids.ALLOWED_TYPES = frozenset({‘item’, ‘entity’, ‘block’}) The different types of identifiers allowed class nbtparse.minecraft.ids.BlockID(*, name: str=None, block_number: int=None, item_id: nbtparse.minecraft.ids.ItemID, light: int=0, transparent: bool=False, opacity: int=None, physics: bool=False) Bases: nbtparse.minecraft.ids.Named Information about a block ID. block_number The number used internally when storing this block in terrain. item_id The ItemID for the item version of this block. light The amount of light this block emits. opacity The amount of light this block impedes. None if transparent is False. physics True if this block falls by itself. renumber(new_id: str) → ‘BlockID’ Duplicate this block ID with a different number 1.3. Subpackages 7 NBTParse Documentation, Release 0.2.0.dev0 transparent Whether this block is transparent. type Always equal to ‘block’. class nbtparse.minecraft.ids.ClassID(*args, name=None, **kwargs) Bases: nbtparse.minecraft.ids.Named Abstract class for IDs which identify NBT objects. resolve_class() → nbtparse.semantics.nbtobject.NBTMeta Returns a subclass of NBTObject. The subclass is suitable for objects with this ID. This may involve importing the class from another module if it is not already imported. class nbtparse.minecraft.ids.EntityID(class_name: str) Bases: nbtparse.minecraft.ids.ClassID Information about a (tile) entity ID. class_name The fully-qualified name of this (tile) entity’s class. Formatted as follows: some.module.name:SomeClassName resolve_class() → nbtparse.semantics.nbtobject.NBTMeta Returns the class used to create instances of this (tile) entity. This may involve importing the class. type Always equal to ‘entity’. class nbtparse.minecraft.ids.ItemID(*, name: str=None, max_stack: int=64) Bases: nbtparse.minecraft.ids.ClassID Information about an item ID. max_stack How large stacks of this item may get. resolve_class() → nbtparse.semantics.nbtobject.NBTMeta Return Item. type Always equal to ‘item’. class nbtparse.minecraft.ids.Named(*args, name=None, **kwargs) Bases: builtins.object Root of the ID hierarchy; all IDs have names. name The name of this ID, or None if no name was specified. Named objects are renamed when placed into a namespace. rename(new_name: str) → ‘Named’ Duplicate this named object with a different name. 8 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 class nbtparse.minecraft.ids.Namespace(contents: {<class ‘str’>: <class ‘nbtparse.minecraft.ids.Named’>}, numericals: {<class ‘int’>: <class ‘str’>}) Bases: collections.abc.Mapping A Minecraft namespace. Namespaces associate block names and numbers with each other, and store additional information about blocks, items, and entities. A namespace maps names and numbers to instances of the various FooID classes defined in the ids module. Iterating over a namespace will only produce the names, since every numbered block also has a name. nbtparse.minecraft.ids.STANDARD_NAMESPACE_NAME = ‘minecraft’ The name of the “standard” namespace, containing ID’s used by vanilla Minecraft nbtparse.minecraft.ids.all_ids = <all_ids: mapping from strings to identifiers> Mapping from ‘namespace:identifier’ strings to Named objects. The primary interface to the ids module. Use like a dictionary: all_ids['minecraft:stone'] Indexing with a number produces the corresponding block: all_ids['minecraft:1'] Indexing without a namespace will search every registered namespace in reverse order of registration (i.e. most recently registered first): all_ids['stone'] Bare integers may also be looked up: all_ids[1] nbtparse.minecraft.ids.get_namespace(name: str) → nbtparse.minecraft.ids.Namespace Produce the block namespace with the given name. Namespaces are immutable, so you should not use this mechanism to alter a namespace in-place. Instead, re-register the modified version of the namespace with register_namespace(). Raises a KeyError if no such namespace exists. nbtparse.minecraft.ids.main() Run this module as a script. nbtparse.minecraft.ids.read_config(infile: io.TextIOBase) parse.minecraft.ids.Namespace Read a configuration file and produce a namespace dictionary. → nbt- Return a suitable argument to register_namespace(). Config file format is simple JSON, encoded in UTF-8: { "stone": { "id": 1, "item_identifier": { "id": 1, "item_identifier": null, "max_stack": 64, "type": "item" } 1.3. Subpackages 9 NBTParse Documentation, Release 0.2.0.dev0 "light": 0, "opacity": null, "transparent": false, "type": "block" } } Null values may be omitted, except that id and type are mandatory and must not be null. If the above format is not followed or the file is invalid JSON, a ParserError is raised. nbtparse.minecraft.ids.register_namespace(name: str, namespace: parse.minecraft.ids.Namespace) Register a new namespace of ID’s. nbt- You may register a new version of the standard namespace (’minecraft’). Doing so will “hide” the official version. You can always unregister your custom version later, and the official version will be automatically re-registered. nbtparse.minecraft.ids.unregister_namespace(name: str) Remove the given namespace, preventing lookups. Attempting to unregister the standard namespace (i.e. ’minecraft’) will automatically re-register the “default” version of the standard namespace. nbtparse.minecraft.ids.write_config(outfile: io.TextIOBase, namespace: parse.minecraft.ids.Namespace, *, pprint=False) Write a configuration file. nbt- Use a format suitable for read_config(). Nulls are omitted. item Module Classes for items and XP orbs. class nbtparse.minecraft.item.DroppedItem(*args, **kwargs) Bases: nbtparse.minecraft.item.ItemEntity An item dropped on the ground. id Usually equal to ‘Item’ item NBTObject field called Item class nbtparse.minecraft.item.Item(*args, **kwargs) Bases: nbtparse.semantics.nbtobject.NBTObject An inventory item. Not an entity; only stores item-related information. count byte field called Count damage short integer field called Damage id string (unicode) field called id 10 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 slot byte field called Slot class nbtparse.minecraft.item.ItemEntity(*args, **kwargs) Bases: nbtparse.minecraft.entity.Entity Superclass of dropped item and XP orbs. age short integer field called Age health short integer field called Health class nbtparse.minecraft.item.XPOrb(*args, **kwargs) Bases: nbtparse.minecraft.item.ItemEntity An experience orb. id Usually equal to ‘XPOrb’ value short integer field called Value level Module class nbtparse.minecraft.level.LevelFile(*args, **kwargs) Bases: nbtparse.semantics.filetype.GzippedNBTFile Represents a level.dat file. cheats Whether cheats are enabled. features Whether or not structures are generated. game_type The game mode. generator The name of the generator used to create the level. Note: This is not a vanity field. Minecraft uses it to decide how to populate empty chunks. Putting an arbitrary string here may cause problems generator_options Custom superflat settings. Empty for other generators. generator_version Version number of the generator. hardcore Whether hardcore mode is enabled. initialized Whether world has undergone “running initial simulation...” 1.3. Subpackages 11 NBTParse Documentation, Release 0.2.0.dev0 last_played Time (in UTC) when level was last loaded. name The name of the level. player The player. May not exist in multiplayer. static prepare_load(nbt: nbtparse.syntax.tags.CompoundTag) parse.syntax.tags.CompoundTag Unwrap the argument. → nbt- static prepare_save(nbt: nbtparse.syntax.tags.CompoundTag) parse.syntax.tags.CompoundTag Wrap the argument in a singleton CompoundTag. → nbt- rain_time Number of ticks until raining changes. raining Whether rain and snow are falling on the level. rules Level custom rules. seed Seed for the world generator. size Estimated size of the level on disk. Currently ignored by Minecraft. spawn Coordinates of the level’s spawn. thunder_time Number of ticks until thundering changes. thundering Whether a lightning storm is happening. ticks Age of the level in ticks. time_of_day Age in the level in thousandths of in-game hours. version The NBT version of this level; should be 19133. class nbtparse.minecraft.level.Rules(*args, **kwargs) Bases: nbtparse.semantics.nbtobject.NBTObject Class representing a collection of game rules. Part of a typical level. command_block_output Field called commandBlockOutput 12 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 do_fire_tick Field called doFireTick do_mob_loot Field called doMobLoot do_mob_spawning Field called doMobSpawning do_tile_drops Field called doTileDrops keep_inventory Field called keepInventory mob_griefing Field called mobGriefing nbtparse.minecraft.level.StringBooleanField Represents a boolean stored in a TAG_String (‘true’ or ‘false’). mobs Module All the mobs in vanilla minecraft. class nbtparse.minecraft.mobs.Abilities(*args, **kwargs) Bases: nbtparse.semantics.nbtobject.NBTObject A set of abilities for a player. fly_speed floating point field called flySpeed flying boolean field called flying instabuild boolean field called instabuild invulnerable boolean field called invulnerable may_build boolean field called mayBuild may_fly boolean field called mayfly walk_speed floating point field called walkSpeed class nbtparse.minecraft.mobs.Attribute(*args, **kwargs) Bases: nbtparse.semantics.nbtobject.NBTObject An attribute, usually attached to a mob. base floating point (high precision) field called Base modifiers list field called Modifiers 1.3. Subpackages 13 NBTParse Documentation, Release 0.2.0.dev0 name string (unicode) field called Name class nbtparse.minecraft.mobs.Bat(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob A bat. A small flying mob. Drops nothing. hanging boolean field called BatFlags id Usually equal to ‘Bat’ class nbtparse.minecraft.mobs.Blaze(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob A blaze. Flying ranged mob that shoots fire. id Usually equal to ‘Blaze’ class nbtparse.minecraft.mobs.Breedable(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob A mob which can be bred. age integer field called Age in_love integer field called InLove class nbtparse.minecraft.mobs.CaveSpider(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob A cave spider. A small poisonous spider. id Usually equal to ‘CaveSpider’ class nbtparse.minecraft.mobs.Chicken(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Breedable A chicken. Small mob. Lays eggs and drops feathers. id Usually equal to ‘Chicken’ class nbtparse.minecraft.mobs.Cow(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Breedable A cow. Large mob. Produces milk. Drops leather and beef. id Usually equal to ‘Cow’ 14 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 class nbtparse.minecraft.mobs.Creeper(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob The infamous creeper. A 2-block tall hostile mob with an explosive attack that destroys blocks. explosion_radius byte field called ExplosionRadius fuse short integer field called Fuse id Usually equal to ‘Creeper’ powered boolean field called powered class nbtparse.minecraft.mobs.EnderDragon(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob The Ender Dragon. The final boss. id Usually equal to ‘EnderDragon’ class nbtparse.minecraft.mobs.Enderman(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob An enderman. Endermen are 3-block tall neutral mobs that can carry blocks around. carried short integer field called carried carried_data short integer field called carriedData id Usually equal to ‘Enderman’ class nbtparse.minecraft.mobs.Ghast(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob A ghast. A large floating mob that shoots fireballs and breaks blocks. id Usually equal to ‘Ghast’ class nbtparse.minecraft.mobs.Giant(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob A giant. A very large zombie. Doesn’t spawn naturally. id Usually equal to ‘Giant’ 1.3. Subpackages 15 NBTParse Documentation, Release 0.2.0.dev0 nbtparse.minecraft.mobs.HealthField A field for a mob’s health. class nbtparse.minecraft.mobs.Horse(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Breedable A horse. A tall rideable mob. armor NBTObject field called ArmorItem bred boolean field called Bred chested boolean field called ChestedHorse eating boolean field called EatingHaystack has_reproduced boolean field called HasReproduced id Usually equal to ‘EntityHorse’ items list field called Items owner_name string (unicode) field called OwnerName saddle NBTObject field called SaddleItem tame boolean field called Tame temper integer field called Temper type Field called Type variant integer field called Variant class nbtparse.minecraft.mobs.HorseType Bases: enum.Enum The valid values for Horse.type. donkey = None Indicates a donkey. horse = None Indicates a regular horse. mule = None Indicates a mule. skeleton = None Indicates a skeleton horse; not naturally spawned. 16 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 zombie = None Indicates a zombie horse; not naturally spawned. class nbtparse.minecraft.mobs.IronGolem(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob An iron golem. A large defensive mob that also spawns naturally to protect villages. id Usually equal to ‘VillagerGolem’ player_created boolean field called PlayerCreated class nbtparse.minecraft.mobs.Leash(*args, **kwargs) Bases: nbtparse.semantics.nbtobject.NBTObject A leash for a mob. Only represents one “end” of the leash Exactly one of uuid and coords should exist. coords Multi-field combining (‘X’, ‘Y’, ‘Z’) uuid Universally unique identifier field split between UUIDMost and UUIDLeast class nbtparse.minecraft.mobs.MagmaCube(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Slime A magma cube. A slime from The Nether. id Usually equal to ‘LavaSlime’ class nbtparse.minecraft.mobs.Mob(*args, **kwargs) Bases: nbtparse.minecraft.entity.Entity A mob, in minecraft terms. Do not instantiate directly, instead use a subclass. absorption floating point field called AbsorptionAmount active_effects list field called ActiveEffects attack_ticks short integer field called AttackTime attributes list field called Attributes can_pickup_loot boolean field called CanPickUpLoot death_ticks short integer field called DeathTime 1.3. Subpackages 17 NBTParse Documentation, Release 0.2.0.dev0 drop_chances tuple field called DropChances equipment tuple field called Equipment health Multi-field combining (‘Health’, ‘HealthF’) hurt_ticks short integer field called HurtTime leash NBTObject field called Leash leashed boolean field called Leashed name string (unicode) field called CustomName name_visible boolean field called CustomNameVisible persistent boolean field called PersistenceRequired class nbtparse.minecraft.mobs.Modifier(*args, **kwargs) Bases: nbtparse.semantics.nbtobject.NBTObject An attribute modifier. amount floating point (high precision) field called Amount name string (unicode) field called Name operation integer field called Operation uuid Universally unique identifier field split between UUIDMost and UUIDLeast class nbtparse.minecraft.mobs.Mooshroom(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Breedable A Mooshroom (mushroom-cow) Like the cow, but produces mushroom stew instead of milk. Can be shorn into a regular cow, dropping mushrooms. id Usually equal to ‘MushroomCow’ class nbtparse.minecraft.mobs.Ocelot(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Tameable, nbtparse.minecraft.mobs.Breedable An ocelot. A tameable mob. cat_type integer field called CatType 18 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 id Usually equal to ‘Ozelot’ class nbtparse.minecraft.mobs.Offer(*args, **kwargs) Bases: nbtparse.semantics.nbtobject.NBTObject An individual villager offer. buy NBTObject field called buy buy_secondary NBTObject field called buyB max_uses integer field called maxUses sell NBTObject field called sell uses integer field called uses class nbtparse.minecraft.mobs.OfferList(*args, **kwargs) Bases: nbtparse.semantics.nbtobject.NBTObject, collections.abc.MutableSequence List of offers a villager has. For convenience, sequence-related functionality is redirected to self.recipes. insert(index, value) recipes list field called Recipes class nbtparse.minecraft.mobs.OfferListMeta(name, bases, dct) Bases: nbtparse.semantics.nbtobject.NBTMeta, abc.ABCMeta Metaclass for OfferList. class nbtparse.minecraft.mobs.Pig(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Breedable A pig. A short mob that drops porkchops. id Usually equal to ‘Pig’ saddle boolean field called Saddle class nbtparse.minecraft.mobs.Player(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob, nbtparse.semantics.filetype.GzippedNBTFile A player, and the accompanying player.dat file. abilities NBTObject field called abilities dimension integer field called Dimension ender_items list field called EnderItems 1.3. Subpackages 19 NBTParse Documentation, Release 0.2.0.dev0 food_exhaustion integer field called foodExhaustionLevel food_level integer field called foodLevel food_saturation integer field called foodSaturationLevel food_timer integer field called foodTickTimer inventory list field called Inventory mode integer field called playerGameType score integer field called Score selected_item_slot integer field called SelectedItemSlot sleep_timer short integer field called SleepTimer sleeping boolean field called Sleeping spawn Multi-field combining (‘SpawnX’, ‘SpawnY’, ‘SpawnZ’) spawn_forced boolean field called SpawnForced xp_level integer field called XpLevel xp_progress integer field called XpP xp_total integer field called XpTotal class nbtparse.minecraft.mobs.PotionEffect(*args, **kwargs) Bases: nbtparse.semantics.nbtobject.NBTObject A potion effect, usually attached to a mob. ambient boolean field called Ambient amplifier byte field called Amplifier duration integer field called Duration id byte field called id class nbtparse.minecraft.mobs.Sheep(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Breedable 20 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 A sheep. A mob that can be shorn for wool. color byte field called Color id Usually equal to ‘Sheep’ sheared boolean field called Sheared class nbtparse.minecraft.mobs.Silverfish(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob A silverfish. Small swarming mob that hides in tile entities. id Usually equal to ‘Silverfish’ class nbtparse.minecraft.mobs.Skeleton(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob A skeleton. A ranged mob with a bow and arrows. id Usually equal to ‘Skeleton’ wither boolean field called SkeletonType class nbtparse.minecraft.mobs.Slime(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob A slime. A variable-sized mob which divides on death. id Usually equal to ‘Slime’ size integer field called Size class nbtparse.minecraft.mobs.SnowGolem(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob A snow golem (snowman). A mob that throws snowballs at hostile mobs. id Usually equal to ‘SnowMan’ class nbtparse.minecraft.mobs.Spider(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob A spider. A large short mob that can climb walls. 1.3. Subpackages 21 NBTParse Documentation, Release 0.2.0.dev0 id Usually equal to ‘Spider’ class nbtparse.minecraft.mobs.Squid(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob A squid. An underwater mob that drops ink sacs. id Usually equal to ‘Squid’ class nbtparse.minecraft.mobs.Tameable(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob A mob which can be tamed. Horses are not tamed conventionally and are not Tameable. owner string (unicode) field called Owner sitting boolean field called Sitting class nbtparse.minecraft.mobs.Villager(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Breedable A villager. A passive mob that players can trade with. id Usually equal to ‘Villager’ offers NBTObject field called Offers profession Field called Profession riches integer field called Riches class nbtparse.minecraft.mobs.VillagerProfession Bases: enum.Enum The valid values for Villager.profession. butcher = None A butcher, with a white apron. farmer = None A farmer, with a brown robe. generic = None A “generic” villager, with a green robe. Not spawned naturally. librarian = None A librarian, with a white robe. priest = None A priest, with a purple robe. 22 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 smith = None A blacksmith, with a black apron. class nbtparse.minecraft.mobs.Witch(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob A witch. A ranged mob that throws potions. id Usually equal to ‘Witch’ class nbtparse.minecraft.mobs.Wither(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob A wither. A boss mob the player has to construct from wither skeletons. id Usually equal to ‘WitherBoss’ invulnerable integer field called Invul class nbtparse.minecraft.mobs.Wolf(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Breedable, nbtparse.minecraft.mobs.Tameable angry boolean field called Angry collar_color byte field called CollarColor id Usually equal to ‘Wolf’ class nbtparse.minecraft.mobs.Zombie(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Mob A zombie. A mob that can convert villagers into more zombies. conversion_time integer field called ConversionTime id Usually equal to ‘Zombie’ is_baby boolean field called IsBaby is_villager boolean field called IsVillager class nbtparse.minecraft.mobs.ZombiePigman(*args, **kwargs) Bases: nbtparse.minecraft.mobs.Zombie anger short integer field called Anger id Usually equal to ‘PigZombie’ 1.3. Subpackages 23 NBTParse Documentation, Release 0.2.0.dev0 projectile Module Classes for projectiles, such as snowballs and arrows. class nbtparse.minecraft.projectile.AbstractFireball(*args, **kwargs) Bases: nbtparse.minecraft.projectile.Projectile Any fireball-like thing. direction tuple field called direction class nbtparse.minecraft.projectile.Arrow(*args, **kwargs) Bases: nbtparse.minecraft.projectile.Projectile An arrow. Fired by a player or a skeleton. damage floating point (high precision) field called damage id Usually equal to ‘Arrow’ in_data byte field called inData pickup integer field called pickup player boolean field called player class nbtparse.minecraft.projectile.Egg(*args, **kwargs) Bases: nbtparse.minecraft.projectile.Projectile A thrown egg. id Usually equal to ‘Egg’ class nbtparse.minecraft.projectile.Fireball(*args, **kwargs) Bases: nbtparse.minecraft.projectile.AbstractFireball A regular fireball. id Usually equal to ‘Fireball’ class nbtparse.minecraft.projectile.Projectile(*args, **kwargs) Bases: nbtparse.minecraft.entity.Entity A projectile. A fast-moving entity like an arrow or snowball. coords Multi-field combining (‘xTile’, ‘yTile’, ‘zTile’) in_ground boolean field called inGround in_tile byte field called inTile 24 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 shake byte field called shake class nbtparse.minecraft.projectile.SmallFireball(*args, **kwargs) Bases: nbtparse.minecraft.projectile.AbstractFireball A small fireball. id Usually equal to ‘SmallFireball’ class nbtparse.minecraft.projectile.Thrown(*args, **kwargs) Bases: nbtparse.minecraft.projectile.Projectile Anything thrown by players (and only players). owner_name string (unicode) field called ownerName class nbtparse.minecraft.projectile.ThrownEnderpearl(*args, **kwargs) Bases: nbtparse.minecraft.projectile.Thrown A thrown enderpearl. Teleports the player on landing. id Usually equal to ‘ThrownEnderpearl’ class nbtparse.minecraft.projectile.ThrownExpBottle(*args, **kwargs) Bases: nbtparse.minecraft.projectile.Thrown A thrown Bottle o’ Enchanting. id Usually equal to ‘ThrownExpBottle’ class nbtparse.minecraft.projectile.ThrownPotion(*args, **kwargs) Bases: nbtparse.minecraft.projectile.Thrown A thrown splash potion. id Usually equal to ‘ThrownPotion’ potion NBTObject field called Potion potion_value integer field called potionValue class nbtparse.minecraft.projectile.ThrownSnowball(*args, **kwargs) Bases: nbtparse.minecraft.projectile.Thrown A thrown snowball. id Usually equal to ‘Snowball’ class nbtparse.minecraft.projectile.WitherSkull(*args, **kwargs) Bases: nbtparse.minecraft.projectile.AbstractFireball A wither skull. id Usually equal to ‘WitherSkull’ 1.3. Subpackages 25 NBTParse Documentation, Release 0.2.0.dev0 Subpackages terrain Package Contents • • • • • terrain Package dimension Module region Module chunk Module voxel Module – Performance of the voxel module • filters Module • tile Module terrain Package Terrain-related NBTParse modules. This package consists of modules relating to Minecraft terrain. The basic unit of terrain manipulation is voxel.VoxelBuffer, which is used to store blocks of terrain and tile entity data compactly. dimension Module class nbtparse.minecraft.terrain.dimension.Dimension(path: str, *, max_cache: int=5, fill_value: nbtparse.minecraft.terrain._voxel.Block=None) Bases: builtins.object A dimension, in Minecraft terms. A collection of (usually) contiguous regions. May be indexed and sliced using block coordinates. Indexing is similar to that of voxel.VoxelBuffer, except that X and Z coordinates are absolute, and X and Z slices must have both a start and an end. Dimensions are not thread-safe. atomic Make the following operations atomic. Either every change made within the block will be saved to disk, or none of those changes are saved to disk. This should not be confused with the other three ACID guarantees (particularly isolation). The transaction is aborted if and only if an exception is raised (but see below). Can be used as a context manager or decorator: @dim.atomic def atomic_function(): # Things in here will happen atomically. with dim.atomic: # Things in here will happen atomically In some circumstances, you may need to call recover_atomic(). This is generally only necessary if the system crashed or lost power while actually saving regions to disk. The method may roll back a partially-committed transaction to ensure atomicity, or it may complete the transaction. 26 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 It is legal to call save_all() while in this context. Doing so creates a sort of “checkpoint”; if an exception is raised, the context rolls back to the last checkpoint. There is an implicit checkpoint at the beginning of the context. Nested invocations are legal but have no effect. This consumes memory more aggressively than normal operations. It ignores the max_cache attribute for the sake of correctness. Warning: This is not the same as thread safety. If you require thread safety, use explicit locking. Multiple threads attempting to enter or exit the atomic context at the same time can cause data corruption, and the rest of the class is similarly unsafe for concurrent access. Note: Atomicity is only guaranteed on systems where os.replace() is atomic and os.fsync() can be used on a directory. Most POSIX-compliant systems should satisfy these requirements. Windows most likely fails the second and perhaps the first as well. cache_size Number of regions currently cached. Should always be <= max_cache, except inside a Dimension.atomic invocation. entities Sliceable collection of entities. Provides a similar slicing API to the dimension itself, except that extended slicing and ordinary indexing are unsupported. Slicing the object returns a set of entities. Slices may also be assigned to and deleted. As with dimensions, all slices must be fully-qualified, except for Y-dimension slices. Unlike with dimensions, slice indices may be fractional. Other collection-related operations are not currently supported. Note: The slices are sets, not lists. Duplicate entities with the same UUID and type are not supported and will be silently coalesced. max_cache The maximum number of regions to keep cached at once. If zero, no regions will be cached; every lookup will hit the disk. Note: Even if this is zero, some regions will be cached for short periods of time during slicing operations. This is because slice assignment may need to hit multiple regions at once. The cache size will also be unrestricted by this parameter while inside a Dimension.atomic invocation. If -1, the cache size is unlimited; once a region has been loaded, it will not be unloaded. recover_atomic() → bool Recover from a failure during atomic or save_all(). Call this method if a system crash or other severe problem occurs while exiting an atomic block. It is not necessary to call this method if the crash occurred while control was still inside the block. The method should also be called if save_all() raised an exception, even if it did so inside an atomic block. Return True if the changes were saved, False if the changes were rolled back. Also return True if the Dimension is already in a “clean” state and recovery is unnecessary. 1.3. Subpackages 27 NBTParse Documentation, Release 0.2.0.dev0 Warning: Do not call this method while a save is in progress. Doing so will likely cause severe data corruption. This rule applies regardless of which process is performing the save. save_all() raises a ConcurrentError to indicate that it believes a save cannot be safely made at the current time. Calling this method will override that safety check. save_all() Save every region currently cached. Regions which are no longer cached have already been saved. Prefer correctness over speed; provide the same guarantees as Dimension.atomic. A ConcurrentError is raised if another save appears to have been in progress when this method was called. Under no circumstances are two or more save_all() calls allowed to run concurrently on the same directory; all but one will always fail with an exception. If an exception is raised under other circumstances, it is recommended to call recover_atomic(). save_fast() Save every region currently cached (like save_all()). Prefer speed over correctness; do not provide any guarantees beyond those of the basic region caching system. region Module class nbtparse.minecraft.terrain.region.Region(region_x: int, region_z: int) Bases: collections.abc.MutableMapping A Minecraft region file. region_x and region_z should be the region coordinates (as they appear in the filename). Standard constructor creates an empty region. load() loads a region from a file. For both loading and saving, files generally need to be seekable. This may pose a problem if you want to send a region over the network or through a pipe. Depending on your memory and disk resources, you may be able to use io.BytesIO or tempfile as temporary buffers. Contains individual chunks. Access chunk (1, 2), in chunk coordinates, as follows: r = Region.load(...) chunk = r[1, 2] No slicing. A KeyError is raised if the chunk does not exist. You may use absolute or relative coordinates as you please; they will be translated into positive relative coordinates via modulus. You may also replace one chunk with another. clear() Mark this region as empty. Equivalent to deleting every chunk from the region, but quite a bit faster. classmethod load(region_x: int, region_z: int, src: _io.BufferedReader) Load a region from disk (or another I/O-like object). src must support seeking in both directions. save(dest: _io.BufferedWriter) Save the state of this region. dest must support seeking in both directions. 28 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 chunk Module nbtparse.minecraft.terrain.chunk.BlockField Exposes the blocks in a section. If default is None, a new empty buffer will be created as the default. class nbtparse.minecraft.terrain.chunk.Chunk(*args, **kwargs) Bases: nbtparse.semantics.nbtobject.NBTObject entities List of Entity objects. height_map The height map for this chunk. Note: It is planned that a lighting engine will manage this attribute automatically. This is not yet implemented. static prepare_load(nbt: nbtparse.syntax.tags.CompoundTag) parse.syntax.tags.CompoundTag Unwrap nbt from a singleton CompoundTag. → nbt- static prepare_save(nbt: nbtparse.syntax.tags.CompoundTag) parse.syntax.tags.CompoundTag Wrap nbt in a singleton CompoundTag. → nbt- sections Mutable mapping from Y-indices to Sections. Y-indices which are not present in the underlying NBT will be automagically created as empty sections upon attempting to retrieve them. The key in this mapping will override the y_index attribute if they disagree. Note: It is acceptable to replace this mapping with an entirely different mapping. If you do so, the magic creation of missing sections will very likely not work. If you prefer creating sections explicitly, code like the following will disable the magic: c = Chunk.from_nbt(...) c.sections = dict(c.sections) tiles List of TileEntity objects. Note: This attribute is generally managed by the Region which created this chunk. Manually changing it is usually unnecessary. class nbtparse.minecraft.terrain.chunk.HeightMap(intlist: [<class ‘int’>]) Bases: collections.abc.MutableMapping The height map of a chunk. Maps coordinates to heights: hm[3, 4] = 5 Keys may not be inserted or deleted, and must be pairs of integers. Intlist should be the raw list of integers as saved by Minecraft. to_raw() → [<class ‘int’>] Returns the raw list used by Minecraft. 1.3. Subpackages 29 NBTParse Documentation, Release 0.2.0.dev0 nbtparse.minecraft.terrain.chunk.HeightMapField Field for HeightMap. class nbtparse.minecraft.terrain.chunk.Section(*args, **kwargs) Bases: nbtparse.semantics.nbtobject.NBTObject blocks VoxelBuffer of this section. y_index The Y-index of this section. From 0 to 15 inclusive. nbtparse.minecraft.terrain.chunk.SectionDictField Field for the sections of a chunk. Keys are y_index, values are sections. voxel Module Terrain editing at the level of individual blocks. Note: This is the pure Python version of the module. Pass --cython to setup.py to install the Cython version. class nbtparse.minecraft.terrain.voxel.Block(id: int, data: int=0) Bases: builtins.object A basic block, not including tile entity data. Blocks are not NBTObjects because Minecraft does not store them that way. They cannot be serialized directly to NBT. Instead, Minecraft stores blocks in groups called chunks. id is the block id, a nonnegative integer. data is the damage value, also a nonnegative integer. Blocks compare equal if they have the same id and data. Blocks are immutable and hashable. data The block damage value. id The block ID. class nbtparse.minecraft.terrain.voxel.VoxelBuffer(length: int, height: int, width: int) Bases: builtins.object A 3D buffer of blocks. Stores block IDs and damage values in much the same way as Minecraft: a “packed” format involving 8-bit strings (i.e. bytearray). Basic constructor will create a buffer full of air (block ID 0). Blocks may be retrieved or changed with standard subscription. Slicing is also acceptable, and assigning a block to a slice is interpreted as filling the slice with the block. However, it is not possible to resize a buffer once created. Replacing a single block with subscription will erase the accompanying tile entity. Slicing is a shallow copy, and will only duplicate references to tile entities. Slicing a VoxelBuffer is a potentially expensive operation. It is linear in the total volume sliced, which sounds fine until we realize that the volume of a cube is (logically enough) cubic in the edge length. Slices covering an entire VoxelBuffer are very fast, as they are optimized into a single memory copy. This currently does not apply to any other slices. Manipulating individual blocks is relatively fast, however. VoxelBuffers can be iterated. This is done in the rather esoteric YZX order rather than the conventional XYZ order because the former is more natural in practice. The VoxelBuffer.enumerate() method may be 30 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 used to prepend (x, y, z) coordinates in much the same way as the builtin enumerate() does. Standard iteration is marginally faster than the following code, because it skips some unnecessary sanity checks: for y in range(vb.height): for z in range(vb.width): for x in range(vb.length): yield vb[x, y, z] If you want to iterate in the XYZ ordering instead, use xyz(). Note: Do not write this, as it does not work: vb = VoxelBuffer(length, height, width) block = vb[x][y][z] Instead, write this: vb = VoxelBuffer(length, height, width) block = vb[x, y, z] enumerate() Iterate over the blocks in the buffer, with coordinates. Produces the (x, y, z) coordinates of each block in addition to the block itself: for (x, y, z), block in vb.enumerate(): # block is equivalent to vb[x, y, z] classmethod from_raw(ids: bytes, addids: bytes, damages: bytes, length: int, height: int, width: int) Create a new VoxelBuffer from the provided buffers. These buffers should be bytes objects (or acceptable to bytes()). Each byte or nybble should correspond to a block, in the same format as minecraft stores terrain data. No tile entities will be attached to the terrain. You must do this manually. Do not use this to duplicate a VoxelBuffer. Instead, take a slice of the entire buffer. height The height (Y-axis) of the buffer. length The length (X-axis) of the buffer. Note: This should not be confused with the len() of the buffer, which is the product of the length, width, and height (i.e. the volume), for consistency with iteration. tilemap Mutable mapping from coordinates to tile entities. Overwriting a single block with subscription will delete the corresponding entry from this mapping, even if the block is otherwise unchanged. Overwriting a slice of blocks will replace the entries with the equivalent entries from the other buffer. Example code: vb.tilemap[(x, y, z)] = tile.TileEntity(...) The following is exactly equivalent and, in the opinion of the author, more readable: 1.3. Subpackages 31 NBTParse Documentation, Release 0.2.0.dev0 vb.tilemap[x, y, z] = tile.TileEntity(...) Note: This is a mapping, not a 3D array or similar. It cannot be sliced and negative indices will not be converted into positive indices. Note: Coordinates are always relative to the origin of the VoxelBuffer, as with subscription. This means they do not correspond to the TileEntity.coords attribute. Furthermore, said attribute will be ignored and overwritten with the coordinates provided to this mapping when the chunk is placed into a region. to_raw() -> (<class ‘bytes’>, <class ‘bytes’>, <class ‘bytes’>) Return the raw buffers as used by Minecraft. unwatch(observer: <built-in function callable>) Unregister a previously-registered observer. Undoes a previous call to watch(). KeyError is raised if the observer was never registered. Observers are not automatically unregistered, so it is important to call this method manually if you intend the VoxelBuffer to outlive the observers. watch(observer: <built-in function callable>) Register an observer. The observer will be called with three arguments every time the buffer is modified. The arguments will be one of the following: •The (x, y, z) coordinates of the single block which has changed. •Three range objects, describing the set of blocks which have changed (the range of X coordinates, Y coordinates, and Z coordinates). The observer must be hashable. If this is a problem, wrap it in a lambda expression. Changes to tilemap will not trigger notifications. width The width (Z-axis) of the buffer. xyz() Iterate over the blocks in the buffer, in XYZ order. Produces coordinates, just like VoxelBuffer.enumerate(). Performance of the voxel module The voxel module is implemented both in pure Python and in Cython. When you import it, you will receive the most performant version available. When running setup.py on a system with a compatible version of Cython, pass the --cython flag to request the inclusion of the Cython version. Otherwise, it is excluded by default. The Cython version is, generally speaking, far more performant than the Python version, unless you happen to be a PyPy user. Both versions are optimized under the assumption that tile entities are relatively rare and most blocks are ordinary blocks. This assumption allows the Cython version to release the GIL when copying memory. It should be possible, in principle, to realize considerable gains from parallelism here. However, the current implementation does not do so. The Cython version of the module implements the buffer protocol, as described in PEP 3118. This allows C code fast access to the underlying memory backing a VoxelBuffer. VoxelBuffers provide buffers compatible with the flag value PyBUF_RECORDS. Each element is an unsigned short with native byte order (i.e. the format string is H). 32 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 The block ID is stored in the 12 least significant bits, and the data value is stored in the next 4 bits. On those arcane architectures where unsigned short is not 16 bits, the remaining high bits are ignored. Note: As an implementation detail, buffers are contiguous in the YZX order (that is, with the second index changing least often and the first index changing most often). This behavior is not contractual, but it may help you maximize CPU cache hits. Warning: Modifications made through the buffer protocol will not trigger notifications to any observers which may be registered. filters Module class nbtparse.minecraft.terrain.filters.Filter(vb: nbtparse.minecraft.terrain._voxel.VoxelBuffer) Bases: collections.abc.Mapping Filter for rapidly finding all blocks of a given type. Keys are Block objects or integers. Values are sets of (x, y, z) 3-tuples. Filters maintain the following invariants: vb = VoxelBuffer(...) # with arbitrary contents block = Block(number, data) filter = Filter(vb) ((x, y, z) in filter[block]) == (vb[x, y, z] == block) ((x, y, z) in filter[number]) == (vb[x, y, z].id == number) The filter updates automatically when the VoxelBuffer changes. Initially constructing a filter is expensive, but keeping it up-to-date is relatively cheap. You may realize performance gains by constructing a single filter and reusing it many times. Integer keys will not appear in iteration, because the same information is already available via block keys. close() Close this filter so it can no longer be used. Filters slow down the VoxelBuffers they are attached to. Closing them is good practice. Using a filter as a context manager will close it automatically when the context is exited: with Filter(vb) as filt: pass Closing a filter twice is legal and has no effect. Doing anything else with a closed filter will raise a RuntimeError. copy_vb() → nbtparse.minecraft.terrain._voxel.VoxelBuffer Return a copy of the VoxelBuffer and attach to it. This will detach the filter from the original VoxelBuffer, so it will track the copy instead. This is equivalent to the following code, but significantly faster: filter.close() copy = vb[...] filter = Filter(copy) tile Module 1.3. Subpackages 33 NBTParse Documentation, Release 0.2.0.dev0 class nbtparse.minecraft.terrain.tile.AbstractDispenser(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.Container A dropper or dispenser. items Things to dispense or drop. class nbtparse.minecraft.terrain.tile.Beacon(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.TileEntity A beacon. id Usually equal to ‘Beacon’ levels How tall the pyramid is primary The primary power selected (as a potion ID) secondary The secondary power selected (as a potion ID) class nbtparse.minecraft.terrain.tile.Cauldron(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.Container A brewing stand (not actually a cauldron). brew_time How long the brewing stand has been brewing. Measured in ticks. id Usually equal to ‘Cauldron’ items The items in the brewing stand. Slots numbered from 0 to 3 inclusive. class nbtparse.minecraft.terrain.tile.Chest(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.Container A single chest. Double chests are two of these next to each other. id Usually equal to ‘Chest’ items List of items in the chest. Slots go from 0 to 26. 0 is the top left corner. class nbtparse.minecraft.terrain.tile.Comparator(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.TileEntity A comparator. id Usually equal to ‘Comparator’ output Strength of the output signal. 34 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 Will very likely be overwritten on the next block update. class nbtparse.minecraft.terrain.tile.Container(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.TileEntity One of several different kinds of containers. Consult the id to determine which kind. custom_name The custom name of this container. Rename using an anvil. lock Optional string specifying a “lock item.” Players not carrying the lock item will be unable to open the container. class nbtparse.minecraft.terrain.tile.Control(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.Container A control block. command The command to send on activation. id Usually equal to ‘Control’ last_output Output from most-recently executed command. success_count Strength of the redstone output. Used for commands like /testfor. Only updates on activation. track_output Unknown. class nbtparse.minecraft.terrain.tile.DaylightSensor(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.TileEntity A daylight sensor. id Usually equal to ‘DLDetector’ class nbtparse.minecraft.terrain.tile.Dispenser(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.AbstractDispenser A dispenser. id Usually equal to ‘Trap’ class nbtparse.minecraft.terrain.tile.Dropper(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.AbstractDispenser A dropper. id Usually equal to ‘Dropper’ 1.3. Subpackages 35 NBTParse Documentation, Release 0.2.0.dev0 class nbtparse.minecraft.terrain.tile.EndPortal(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.TileEntity An end portal. id Usually equal to ‘Airportal’ class nbtparse.minecraft.terrain.tile.FlowerPot(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.TileEntity A flower pot. flower_type Data value of the contents of the pot. id Usually equal to ‘FlowerPot’ item Block ID of the contents of the pot. Most block ID’s will not work; generally only plants are allowed. class nbtparse.minecraft.terrain.tile.Furnace(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.Container A furnace. burn_time Number of ticks of fuel remaining. cook_time Number of ticks current item has been cooking for When this reaches 300, item is done. id Usually equal to ‘Furnace’ items List of items, with slot field. Slot 0 is the cooking item, slot 1 is the fuel, and slot 2 is the output. class nbtparse.minecraft.terrain.tile.Hopper(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.Container A hopper. cooldown Time until the next transfer. Zero if no transfer is imminent. id Usually equal to ‘Hopper’ items Items in the hopper class nbtparse.minecraft.terrain.tile.Music(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.TileEntity A music block. 36 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 id Usually equal to ‘Music’ note Pitch of the block. Every right click increases this by 1. In music theory terms, this measures the number of semitones above F# (octave 3). Values may range from 0 to 24 inclusive, or two full octaves. class nbtparse.minecraft.terrain.tile.Piston(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.TileEntity A piston. block_data Data (damage) value of the moving block. block_id Block ID of the moving block. extending Whether we are extending. facing Direction the piston is facing. id Usually equal to ‘Piston’ progress How far the block has moved. class nbtparse.minecraft.terrain.tile.RecordPlayer(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.TileEntity A jukebox. id Usually equal to ‘RecordPlayer’ record_id Item ID of the record being played. Zero if the jukebox is empty. record_item The record in the jukebox. Can place other items here as well. class nbtparse.minecraft.terrain.tile.Sign(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.TileEntity A sign. id Usually equal to ‘Sign’ line1 First line of text. If longer than 16 characters, excess is discarded. line2 Second line of text. 1.3. Subpackages 37 NBTParse Documentation, Release 0.2.0.dev0 line3 Third line of text. line4 Fourth (last) line of text. class nbtparse.minecraft.terrain.tile.Skull(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.TileEntity A skull on the ground. id Usually equal to ‘Skull’ rotation Rotation (same as sign data values). skull_id Data value of the skull. skull_name Name of player whose skull it is. class nbtparse.minecraft.terrain.tile.SpawnPotential(*args, **kwargs) Bases: nbtparse.semantics.nbtobject.NBTObject One possible spawn from a spawner. properties Tags to copy to the entity to spawn. type ID of the entity to spawn weight Relative likelihood that this spawn will be used. Must be positive. class nbtparse.minecraft.terrain.tile.Spawner(*args, **kwargs) Bases: nbtparse.minecraft.terrain.tile.TileEntity A mob spawner. delay Time until next spawn in ticks. If set to -1 (the default for newly-created Spawners), randomize this value, entity_id, and spawn_data when a player comes in range. entity_id The ID of the next entity spawned. id Usually equal to ‘MobSpawner’ max_delay Maximum allowed delay, when Minecraft generates it. max_entities Maximum entities to spawn. If this is exceeded, stop spawning until some of the entities go out of range. 38 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 min_delay Minimum allowed delay, when Minecraft generates it. player_range Maximum distance from a player. If no player is within this range, the spawner will shut down. spawn_count Number of mobs to spawn at once. spawn_data Tags to copy to the next entity spawned. spawn_potentials List of SpawnPotentials. Used to fill in some of the fields of this object after each spawn. spawn_range How far away from the spawner to spawn. X and Y are both indepently constrained by this radius, so the target area is square rather than circular. class nbtparse.minecraft.terrain.tile.TileEntity(*args, **kwargs) Bases: nbtparse.semantics.nbtobject.NBTObject A tile entity. Stores additional data about a block. coords The coordinates of this tile entity. Note: region.Region will usually overwrite this attribute with the appropriate value; you do not need to work with it directly. id A string identifying the type of tile entity. 1.3.2 semantics Package Contents • • • • semantics Package fields Module filetype Module nbtobject Module semantics Package Modules relating to NBT semantics The modules in this package provide intermediate constructs to simplify working with NBT. Their primary purpose is making nbtparse.minecraft modules less repetitive and easier to understand. Nothing in this package directly relates to Minecraft itself, however, so you may find uses for it in other contexts. 1.3. Subpackages 39 NBTParse Documentation, Release 0.2.0.dev0 fields Module A field is part of a TAG_Compound that corresponds to a top-level tag. It knows how to translate a tag or group of tags into a Pythonic value and back again, and uses the descriptor protocol to make this translation seamless. Typical usage would be something like this: class FooFile(NBTFile): bar = LongField(u'Bar') Thereafter, when saving or loading a FooFile, the top-level TAG_Long called Bar will be accessible under the attribute bar. The NBT version is still accessible under the FooFile.data attribute (or by calling the to_nbt() method, which is usually more correct). Fields are a thin abstraction over the data dict in an NBTObject; modifying the dict may cause Fields to misbehave. Idea shamelessly stolen from Django, but massively simplified. nbtparse.semantics.fields.AbstractField Root of the Field class hierarchy. nbtparse.semantics.fields.BooleanField Field for a TAG_Byte acting as a boolean. nbtparse.semantics.fields.ByteArrayField Field for a TAG_Byte_Array. nbtparse.semantics.fields.ByteField Field for a TAG_Byte acting as an integer. nbtparse.semantics.fields.DoubleField Field for a TAG_Double. nbtparse.semantics.fields.EnumField Field for an enumerated type. See enum. nbtparse.semantics.fields.FloatField Field for a TAG_Float. nbtparse.semantics.fields.IntArrayField Field for a TAG_Int_Array. nbtparse.semantics.fields.IntField Field for a TAG_Int. nbtparse.semantics.fields.ListField Field for a TAG_List. The ListTag will be given an id of content_id for the elements. nbtparse.semantics.fields.LongField Field for a TAG_Long. nbtparse.semantics.fields.MultiField Field combining multiple top-level tags into one object. Controls a series of one or more top-level tags which should be combined into a single Pythonic object. If the tags are enclosed in a TAG_Compound, consider using an NBTObjectField instead. 40 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 This is an abstract class. to_python() will be called with the same number of arguments as nbt_names has elements, in the same order specified, and should return a value acceptable to from_python(), which should produce a sequence of the same values passed as arguments to to_python(). If a tag does not exist, to_python() will be passed None instead of the corresponding tag. from_python() produces a None value, the corresponding tag will be skipped. If default should be a value acceptable to from_python(), which will be called when setting the field to its default value. nbtparse.semantics.fields.MutableField Mutable variant of a field. Caches the Pythonic value and holds a reference to it. Such a value can be safely mutated in-place. Needed for mutable types like lists, as well as immutable types whose contents may be mutable, such as tuples. The cache_key must be unique within the object. By convention, it is the nbt_name or nbt_names attribute. It must be hashable but has no other restrictions. This class must precede any class which overrides __get__(), __set__(), and/or __delete__() in the method resolution order. In particular, it must precede MultiField or SingleField. If you do not understand what that means, just make sure your code looks like this: class FooField(MutableField, SingleField): pass ...rather than like this: class FooField(SingleField, MutableField): pass Combining with ReadOnly is inadvisable and will generate a warning. nbtparse.semantics.fields.NBTObjectField Field for an NBTObject. Usually a TAG_Compound but exact contents will vary. In other words, a brand-new instance of the object will be created, with all its fields set to their default values. nbtparse.semantics.fields.ObjectListField Field for a TAG_List of NBTObjects. nbtparse.semantics.fields.ObjectTupleField Field for a TAG_List of NBTObjects, as a tuple. class nbtparse.semantics.fields.ReadOnly(wrapped: nbtparse.semantics.fields.AbstractField) Bases: builtins.object Field wrapper which disallows modification. __set__() and __delete__() raise an AttributeError. __get__() is silently forwarded to the wrapped field. Other field operations are not implemented at all. Because __get__() forwards all accesses, including class-level access, it will cause the docstring and repr() of the wrapped field to appear instead of the docstring and repr() of the wrapper. Wrappers of this type are suitable for computing __hash__(), and for other scenarios in which a value must not change after construction. This wrapper does not inherit from AbstractField, because it behaves rather differently from real fields and would otherwise confuse some of the NBTObject machinery. As a consequence, it will not be set to its default value by the standard NBTObject __init__(). If you want this functionality included, expose wrapped as an underscore-prefixed field. 1.3. Subpackages 41 NBTParse Documentation, Release 0.2.0.dev0 Note: If the wrapped field is a MutableField, the read-only restriction may not be observed if client code modifies the return value of __get__() in-place. Because this combination makes little sense anyway, a warning is raised when it occurs. wrapped The wrapped field, which may be modified directly. It is recommended to expose this as an underscore-prefixed field on the class, as an escape-hatch for __init__() and the like. Such an underscore-prefixed field will also receive a set_default() if __init__() has not been overridden, and will appear in field-by-field introspection (while the immutable wrapper will not). nbtparse.semantics.fields.ShortField Field for a TAG_Short. nbtparse.semantics.fields.SingleField Field for a single top-level tag. This is an abstract class. to_python() is passed an NBT tag (see nbtparse.syntax.tags) and should return some object. That object should be acceptable to from_python(), which should return the equivalent NBT tag. nbtparse.semantics.fields.TupleListField Field for a TAG_List; converts to a tuple. This should not be confused with TupleMultiField, which takes several top-level tags and wraps them together into a single field. This takes a single TAG_List and converts it into a tuple. ListField takes a single TAG_List and converts it into a list. nbtparse.semantics.fields.TupleMultiField Field which combines several tags into a tuple. to_pythons and from_pythons should be sequences of functions which translate each item listed in nbt_names into its corresponding Python value. nbtparse.semantics.fields.UTCField Field for a TAG_Long holding a Unix timestamp. Note that this is always in UTC. See datetime for documentation. nbtparse.semantics.fields.UUIDField Field which combines two TAG_Long‘s into a UUID. A default of None will generate a new UUID every time. Assigning None in the ordinary fashion is equivalent to deleting the field. nbtparse.semantics.fields.UnicodeField Field for a TAG_String. nbtparse.semantics.fields.self_reference(field_name: str, nbt_name: str) → function Class decorator to allow a class’s fields to refer to the class itself. Typical usage: @self_reference('parent', u'ParentFoo') class Foo(NBTObject): pass Now Foo.parent is an NBTObjectField for a Foo. 42 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 filetype Module Provides classes for working with NBT files as objects. These classes extend nbtparse.semantics.nbtobject and provide save and load methods so the file can be easily (de)serialized. class nbtparse.semantics.filetype.GzippedNBTFile(*args, **kwargs) Bases: nbtparse.semantics.filetype.NBTFile Gzipped variant of NBTFile. classmethod load(input: io.BufferedIOBase) Creates a new NBTFile from the gzipped input file-like. save(output: io.BufferedIOBase, rootname: str=’‘) Writes this file to output as gzipped NBT. class nbtparse.semantics.filetype.NBTFile(*args, **kwargs) Bases: nbtparse.semantics.nbtobject.NBTObject Simple class for handling NBT encoded files holistically. An entire NBT file is read and decoded via tags.decode_named, and then converted into a Pythonic object. classmethod load(input: io.BufferedIOBase) Creates a new NBTFile from the input file-like. Returns (rootname, NBTFile), where rootname is the name of the root tag. Conventional NBTObjects do not make use of their external names, so if you intend to use it somewhere, you need to capture it here. save(output: io.BufferedIOBase, rootname: str=’‘) Writes this file to output as NBT. The root tag will be called rootname. nbtobject Module NBT high-level object-oriented class NBTObject is an object-oriented wrapper for CompoundTag, designed to expose its fields in a standard and welldocumented fashion. class nbtparse.semantics.nbtobject.NBTMeta(name, bases, dct) Bases: builtins.type Metaclass for NBTObjects. Allows NBTObjects to track their fields upon creation. all_fields() → collections.abc.Set Return a set of all fields attached to this class. Includes fields whose names begin with underscores. attach_field(field: nbtparse.semantics.fields.AbstractField, field_name: str) Attaches the given field with the given name to the class. Changing a class after it’s created is usually a Bad Idea; this method is meant to be used in class decorators and other contexts where you can be reasonably sure the class has not yet been instantiated. 1.3. Subpackages 43 NBTParse Documentation, Release 0.2.0.dev0 detach_field(field_name: str) Detaches the field with the given name from the class. Changing a class after it’s created is usually a Bad Idea; this method is meant to be used in class decorators and other contexts where you can be reasonably sure the class has not yet been instantiated. fields() → collections.abc.Set Return a set of the public fields attached to this class. The elements of the set are strings whose names correspond to those of the fields. They are suitable arguments for getattr() and setattr(). Does not include fields whose names begin with underscores. class nbtparse.semantics.nbtobject.NBTObject(*args, **kwargs) Bases: builtins.object Thin wrapper over a TAG_Compound. Typically houses one or more fields. Calling the constructor directly will create an empty object with all fields set to their default values, except for any specifically initialized as keyword arguments. Calling from_nbt() will populate fields from the provided NBT. Note: If the default of a field is None, that field will be set to None, which is equivalent to leaving it empty. Such fields will not be present in the generated NBT unless their values are changed by hand. In some cases, this means newly created objects will require modification before they can be meaningfully saved. Some fields don’t observe the above semantics and will do something different when the default is None. This is noted in the fields documentation where applicable. Such fields will still erase their contents if explicitly set to None. classmethod all_fields() → collections.abc.Set Forwards to NBTMeta.all_fields(), which see. data = None The underlying CompoundTag for this NBTObject. Fields store and retrieve instance data in this attribute. It is largely used as-is when calling to_nbt(), but some fields may customize this process in their save() methods. Some NBTObjects will also alter the output by overriding to_nbt(). For these reasons, direct manipulation of this attribute is discouraged. It may still prove useful for debugging or for cases where a key is not controlled by any field. classmethod fields() → collections.abc.Set Forwards to NBTMeta.fields(), which see. classmethod from_bytes(raw: bytes) Deserialize a new NBTObject from a bytes object. The name of the root tag is discarded. classmethod from_nbt(nbt: nbtparse.syntax.tags.CompoundTag) Creates a new NBTObject from the given NBT representation. Stores the given NBT in the data attribute of the newly-created object. Also calls the load() methods of all the fields. classmethod prepare_load(nbt: nbtparse.syntax.tags.CompoundTag) parse.syntax.tags.CompoundTag Hook called during from_nbt() with the loaded NBT. 44 → nbt- Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 Should return a CompoundTag after (for instance) unwrapping data inside a singleton CompoundTag or performing other transformations. Unless overridden, return argument unchanged. This hook runs before any fields’ load() methods are called. It is the first hook after the NBT has been loaded. Note: Unlike prepare_save(), this method must be callable as a class method. In practice, both methods can often be implemented as static methods anyway. prepare_save(nbt: nbtparse.syntax.tags.CompoundTag) → nbtparse.syntax.tags.CompoundTag Hook called during to_nbt() with the to-be-saved NBT. Should return a CompoundTag after (for instance) wrapping data inside a singleton CompoundTag or performing other transformations. Unless overridden, return argument unchanged. This hook runs after all fields’ save() methods are called. It is the last hook before the NBT is saved. to_bytes() → bytes Serialize this NBTObject directly to a bytes object. The root tag will have no name. to_nbt() → nbtparse.syntax.tags.CompoundTag Returns an NBT representation of this object. By default, return self.data, which is sufficient if all data is kept in fields. Also calls the save() methods of all the fields. 1.3.3 syntax Package Contents • syntax Package • tags Module syntax Package Utilities relating to low-level NBT syntax. The package currently consists of a single module, plus a class that used to be a module: • tags provides object-oriented NBT encoding and decoding. • ids provides tag ID’s (e.g. ids.TAG_Byte is 1). class nbtparse.syntax.ids Bases: enum.IntEnum Defines various tag ID’s. Formerly a module, now implemented as a class. This provides various benefits while retaining compatibility and a straightforward interface. 1.3. Subpackages 45 NBTParse Documentation, Release 0.2.0.dev0 TAG_Byte = None ID of a TAG_Byte TAG_Byte_Array = None ID of a TAG_Byte_Array TAG_Compound = None ID of a TAG_Compound TAG_Double = None ID of a TAG_Double TAG_End = None ID of a TAG_End TAG_Float = None ID of a TAG_Float TAG_Int = None ID of a TAG_Int TAG_Int_Array = None ID of a TAG_Int_Array TAG_List = None ID of a TAG_List TAG_Long = None ID of a TAG_Long TAG_Short = None ID of a TAG_Short TAG_String = None ID of a TAG_String tags Module Types for the various NBT tags. Every tag type has a corresponding Pythonic class. Most of these are subclasses of various built-in classes with additional NBT encoding and decoding functionality. Generally speaking, TAG_Foo‘s counterpart will be called FooTag. Most tags are immutable and hashable, and use a values-based definition of equality; this is usually inherited from the corresponding built-in class. The tags all inherit from TagMixin, an abstract mixin class. TagMixin provides some method implementations and a great deal of high-level documentation; if a particular tag’s documentation is unclear, consult TagMixin as well. TagMixin.decode_named() is also exposed at the module level for convenience. This module will also log the encoding and decoding process via logging; the logger has the same name as the module. Since encoding and decoding are generally very low-level processes, nearly everything is logged at the DEBUG level; some irregularities when decoding are logged at WARNING, and irregularities while encoding will instead generate ordinary warnings (i.e. warnings.warn()). See the logging documentation for instructions on how to access this data or ignore it. class nbtparse.syntax.tags.ByteArrayTag Bases: nbtparse.syntax.tags.TagMixin, builtins.bytes Represents a TAG_Byte_Array. 46 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 Derives from bytes, and can be used anywhere that bytes would be valid. Note that this is generally not used to represent text because it lacks encoding information; see StringTag for that. classmethod decode_payload(input: io.BufferedIOBase, errors: str=’strict’) Read a TAG_Byte_Array payload into a new ByteArrayTag. encode_payload(output: io.BufferedIOBase, errors: str=’strict’) → int Writes this tag as a sequence of raw bytes to output. Returns the total number of bytes written, including the length. tag_id Equal to ids.TAG_Byte_Array. class nbtparse.syntax.tags.ByteTag Bases: nbtparse.syntax.tags.TagMixin, builtins.int Represents a TAG_Byte. Derives from int, and can be used anywhere an int is valid. classmethod decode_payload(input: io.BufferedIOBase, errors: str=’strict’) → int Decode a fixed-width value from input. Value is 1 bytes wide. encode_payload(output: io.BufferedIOBase, errors=’strict’) Encode a fixed-width value to output. If the value is too large to fit into the appropriate representation, an OverflowError will result. tag_id Equal to ids.TAG_Byte. class nbtparse.syntax.tags.CompoundTag Bases: nbtparse.syntax.tags.TagMixin, builtins.dict Represents a TAG_Compound. Unlike most other tags, this tag is mutable and unhashable. Derives from dict and may be used in place of one. Keys are names, values are tags. The terminating TAG_End is handled automatically; you do not need to worry about it. This implementation does not preserve the order of the tags; this is explicitly permitted under the NBT standard. classmethod decode_payload(input: io.BufferedIOBase, errors: str=’strict’) Decodes a series of named tags into a new CompoundTag. encode_payload(output: io.BufferedIOBase, errors: str=’strict’) → int Encodes contents as a series of named tags. Tags are fully formed, including ids and names. Errors is passed to the Unicode encoder for encoding names, and to the individual tag encoders. tag_id Equal to ids.TAG_Compound. 1.3. Subpackages 47 NBTParse Documentation, Release 0.2.0.dev0 class nbtparse.syntax.tags.DoubleTag Bases: nbtparse.syntax.tags.TagMixin, builtins.float Represents a TAG_Double. Derives from float, and can be used anywhere a float is valid. classmethod decode_payload(input: io.BufferedIOBase, errors: str=’strict’) → int Decode a fixed-width value from input. Value is 8 bytes wide. encode_payload(output: io.BufferedIOBase, errors=’strict’) Encode a fixed-width value to output. If the value is too large to fit into the appropriate representation, an OverflowError will result. tag_id Equal to ids.TAG_Double. class nbtparse.syntax.tags.EndTag Bases: nbtparse.syntax.tags.TagMixin Represents a TAG_End. EndTags always compare equal to one another, are immutable and hashable, and are considered False by bool(). Subclassing it is probably not a great idea. For all practical purposes, you can think of EndTag() as the tag equivalent of None. You probably won’t need this very often; TAG_End mostly only shows up as the terminating sentinel value for TAG_Compound, and CompoundTag handles that automatically. It’s here if you need it, though. classmethod decode_payload(input: io.BufferedIOBase, errors: str=’strict’) Returns an EndTag Does not interact with input at all. encode_named(name: str, output: io.BufferedIOBase, errors: str=’strict’) → int Writes a single null byte to output. encode_payload(output: io.BufferedIOBase, errors: str=’strict’) → int Does nothing, since TAG_End has no payload. tag_id Equal to ids.TAG_End. class nbtparse.syntax.tags.FloatTag Bases: nbtparse.syntax.tags.TagMixin, builtins.float Represents a TAG_Float. Derives from float, and can be used anywhere a float is valid. classmethod decode_payload(input: io.BufferedIOBase, errors: str=’strict’) → int Decode a fixed-width value from input. Value is 4 bytes wide. encode_payload(output: io.BufferedIOBase, errors=’strict’) Encode a fixed-width value to output. If the value is too large to fit into the appropriate representation, an OverflowError will result. tag_id Equal to ids.TAG_Float. 48 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 class nbtparse.syntax.tags.IntArrayTag Bases: nbtparse.syntax.tags.TagMixin, builtins.list Represents a TAG_Int_Array. Unlike most other tags, this tag is mutable and unhashable. Derives from list and may be used in place of one. classmethod decode_payload(input: io.BufferedIOBase, errors: str=’strict’) Decodes a series of integers into a new IntArrayTag. encode_payload(output, errors=’strict’) Encodes contents as a series of integers. tag_id Equal to ids.TAG_Int_Array. class nbtparse.syntax.tags.IntTag Bases: nbtparse.syntax.tags.TagMixin, builtins.int Represents a TAG_Int. Derives from int, and can be used anywhere an int is valid. classmethod decode_payload(input: io.BufferedIOBase, errors: str=’strict’) → int Decode a fixed-width value from input. Value is 4 bytes wide. encode_payload(output: io.BufferedIOBase, errors=’strict’) Encode a fixed-width value to output. If the value is too large to fit into the appropriate representation, an OverflowError will result. tag_id Equal to ids.TAG_Int. class nbtparse.syntax.tags.ListTag(iterable=None, content_id=None) Bases: nbtparse.syntax.tags.TagMixin, builtins.list Represents a TAG_List. Unlike most other tags, this tag is mutable and unhashable. instance.content_id identifies the type of the tags listed in this tag. During initialization, ListTag will attempt to guess content_id if it is not provided. If the list is empty, it defaults to None and the list will not be encodable. content_id Identifies the tag id of the tags listed in this TAG_List. Starts at None if the list was initially empty and a content_id was not provided. While this is None, the tag cannot be encoded. classmethod decode_payload(input: io.BufferedIOBase, errors: str=’strict’) Decode a list of tags. encode_payload(output: io.BufferedIOBase, errors: str=’strict’) → int Encodes a series of tag payloads to output. Returns the total number of bytes written, including metadata. tag_id Equal to ids.TAG_List. 1.3. Subpackages 49 NBTParse Documentation, Release 0.2.0.dev0 class nbtparse.syntax.tags.LongTag Bases: nbtparse.syntax.tags.TagMixin, builtins.int Represents a TAG_Long. Derives from long, and can be used anywhere a long is valid. classmethod decode_payload(input: io.BufferedIOBase, errors: str=’strict’) → int Decode a fixed-width value from input. Value is 8 bytes wide. encode_payload(output: io.BufferedIOBase, errors=’strict’) Encode a fixed-width value to output. If the value is too large to fit into the appropriate representation, an OverflowError will result. tag_id Equal to ids.TAG_Long. class nbtparse.syntax.tags.ShortTag Bases: nbtparse.syntax.tags.TagMixin, builtins.int Represents a TAG_Short. Derives from int, and can be used anywhere an int is valid. classmethod decode_payload(input: io.BufferedIOBase, errors: str=’strict’) → int Decode a fixed-width value from input. Value is 2 bytes wide. encode_payload(output: io.BufferedIOBase, errors=’strict’) Encode a fixed-width value to output. If the value is too large to fit into the appropriate representation, an OverflowError will result. tag_id Equal to ids.TAG_Short. class nbtparse.syntax.tags.StringTag Bases: nbtparse.syntax.tags.TagMixin, builtins.str Represents a TAG_String. Derives from str and can be used anywhere that str is valid. classmethod decode_payload(input: io.BufferedIOBase, errors: str=’strict’) Reads a TAG_String payload into a new StringTag. TAG_String is always in UTF-8. Errors is passed to the Unicode encoder. The default value of ‘strict’ will cause any problems (e.g. invalid UTF-8) to raise a UnicodeError. encode_payload(output: io.BufferedIOBase, errors: str=’strict’) → int Writes this tag as UTF-8 to output. Returns total bytes written, including length. Errors is passed to the Unicode encoder. The default value of ’strict’ will cause any problems (e.g. invalid surrogates) to raise a UnicodeError. tag_id Equal to ids.TAG_String. 50 Chapter 1. API Reference NBTParse Documentation, Release 0.2.0.dev0 class nbtparse.syntax.tags.TagMixin Bases: builtins.object Abstract mixin class for tags. All NBT tags inherit from TagMixin. classmethod decode_named(input: io.BufferedIOBase, errors: str=’strict’) Decode a named tag from input and returns (name, tag). Reads from input; see decode_payload() for some caveats related to this. Errors will be passed to the Unicode decoder when decoding the name and payload. classmethod decode_payload(input: io.BufferedIOBase, errors: str=’strict’) Decode a payload from input. Reads from input and returns an instance of this tag. input should provide a read() method but is otherwise unconstrained in type. If a string needs to be decoded, pass errors to the Unicode decoder; ignored on tags which don’t need to encode strings. Note: input.read() must perform any buffering that may be necessary to the underlying I/O; if it returns less data than was requested, that will be interpreted as EOF. io.BufferedIOBase and its subclasses satisfy this requirement when in non-interactive mode, but may raise BlockingIOError if in non-blocking mode. If you want to use non-blocking I/O here, look into event-driven frameworks; many provide non-blocking file and socket implementations with buffer-like behavior. encode_named(name: str, output: io.BufferedIOBase, errors: str=’strict’) → int Encode this tag with a name (e.g. in a TAG_Compound). Writes to output and returns bytes written; see encode_payload() for some caveats related to this. Name should be a unicode object, not a string. errors will be used in encoding the name and payload of this tag. encode_payload(output: io.BufferedIOBase, errors: str=’strict’) → int Encode the payload of this tag. Writes to output and returns number of bytes written. Output should provide a write() method but is otherwise unconstrained in type. If a string needs to be encoded, pass errors to the Unicode encoder; ignored on tags which don’t need to encode strings. If a value is out of range, an OverflowError may result. Note: output.write() must perform any buffering that may be necessary to the underlying I/O; it should write its entire argument, unless something has gone wrong. io.BufferedIOBase and its subclasses satisfy this requirement when in non-interactive mode, but may raise BlockingIOError if in non-blocking mode. If you want to use non-blocking I/O here, look into event-driven frameworks; many provide non-blocking file and socket implementations with buffer-like behavior. tag_id The ID of this tag (e.g. 1 for a TAG_Byte). nbtparse.syntax.tags.decode_named = <bound method ABCMeta.decode_named of <class ‘nbtparse.syntax.tags.TagM Same as TagMixin.decode_named() 1.3. Subpackages 51 NBTParse Documentation, Release 0.2.0.dev0 nbtparse.syntax.tags.decode_payload(input, tag_id: int, errors: parse.syntax.tags.TagMixin Decode a payload with tag ID tag_id. str=’strict’) → nbt- Helper function to look up the appropriate class and call its decode_payload() method. 52 Chapter 1. API Reference CHAPTER 2 Indices and tables • genindex • modindex • search 53 NBTParse Documentation, Release 0.2.0.dev0 54 Chapter 2. Indices and tables Python Module Index n nbtparse, 3 nbtparse.exceptions, 4 nbtparse.minecraft, 5 nbtparse.minecraft.entity, 5 nbtparse.minecraft.entityfactory, 7 nbtparse.minecraft.ids, 7 nbtparse.minecraft.item, 10 nbtparse.minecraft.level, 11 nbtparse.minecraft.mobs, 13 nbtparse.minecraft.projectile, 24 nbtparse.minecraft.terrain, 26 nbtparse.minecraft.terrain.chunk, 29 nbtparse.minecraft.terrain.dimension, 26 nbtparse.minecraft.terrain.filters, 33 nbtparse.minecraft.terrain.region, 28 nbtparse.minecraft.terrain.tile, 33 nbtparse.minecraft.terrain.voxel, 30 nbtparse.semantics, 39 nbtparse.semantics.fields, 40 nbtparse.semantics.filetype, 43 nbtparse.semantics.nbtobject, 43 nbtparse.syntax, 45 nbtparse.syntax.tags, 46 55 NBTParse Documentation, Release 0.2.0.dev0 56 Python Module Index Index Symbols attributes (nbtparse.minecraft.mobs.Mob attribute), 17 __version__ (in module nbtparse), 3 B A base (nbtparse.minecraft.mobs.Attribute attribute), 13 Bat (class in nbtparse.minecraft.mobs), 14 Beacon (class in nbtparse.minecraft.terrain.tile), 34 Blaze (class in nbtparse.minecraft.mobs), 14 Block (class in nbtparse.minecraft.terrain.voxel), 30 block_data (nbtparse.minecraft.terrain.tile.Piston attribute), 37 block_id (nbtparse.minecraft.terrain.tile.Piston attribute), 37 block_number (nbtparse.minecraft.ids.BlockID attribute), 7 BlockField (in module nbtparse.minecraft.terrain.chunk), 29 BlockID (class in nbtparse.minecraft.ids), 7 blocks (nbtparse.minecraft.terrain.chunk.Section attribute), 30 BooleanField (in module nbtparse.semantics.fields), 40 bred (nbtparse.minecraft.mobs.Horse attribute), 16 Breedable (class in nbtparse.minecraft.mobs), 14 brew_time (nbtparse.minecraft.terrain.tile.Cauldron attribute), 34 burn_time (nbtparse.minecraft.terrain.tile.Furnace attribute), 36 butcher (nbtparse.minecraft.mobs.VillagerProfession attribute), 22 buy (nbtparse.minecraft.mobs.Offer attribute), 19 buy_secondary (nbtparse.minecraft.mobs.Offer attribute), 19 ByteArrayField (in module nbtparse.semantics.fields), 40 ByteArrayTag (class in nbtparse.syntax.tags), 46 ByteField (in module nbtparse.semantics.fields), 40 ByteTag (class in nbtparse.syntax.tags), 47 Abilities (class in nbtparse.minecraft.mobs), 13 abilities (nbtparse.minecraft.mobs.Player attribute), 19 absorption (nbtparse.minecraft.mobs.Mob attribute), 17 AbstractDispenser (class in nbtparse.minecraft.terrain.tile), 33 AbstractField (in module nbtparse.semantics.fields), 40 AbstractFireball (class in nbtparse.minecraft.projectile), 24 active_effects (nbtparse.minecraft.mobs.Mob attribute), 17 age (nbtparse.minecraft.item.ItemEntity attribute), 11 age (nbtparse.minecraft.mobs.Breedable attribute), 14 air_ticks (nbtparse.minecraft.entity.Entity attribute), 5 all_fields() (nbtparse.semantics.nbtobject.NBTMeta method), 43 all_fields() (nbtparse.semantics.nbtobject.NBTObject class method), 44 all_ids (in module nbtparse.minecraft.ids), 9 ALLOWED_TYPES (in module nbtparse.minecraft.ids), 7 ambient (nbtparse.minecraft.mobs.PotionEffect attribute), 20 amount (nbtparse.minecraft.mobs.Modifier attribute), 18 amplifier (nbtparse.minecraft.mobs.PotionEffect attribute), 20 anger (nbtparse.minecraft.mobs.ZombiePigman attribute), 23 angry (nbtparse.minecraft.mobs.Wolf attribute), 23 armor (nbtparse.minecraft.mobs.Horse attribute), 16 Arrow (class in nbtparse.minecraft.projectile), 24 atomic (nbtparse.minecraft.terrain.dimension.Dimension attribute), 26 C attach_field() (nbtparse.semantics.nbtobject.NBTMeta cache_size (nbtparse.minecraft.terrain.dimension.Dimension method), 43 attribute), 27 attack_ticks (nbtparse.minecraft.mobs.Mob attribute), 17 can_pickup_loot (nbtparse.minecraft.mobs.Mob atAttribute (class in nbtparse.minecraft.mobs), 13 tribute), 17 57 NBTParse Documentation, Release 0.2.0.dev0 carried (nbtparse.minecraft.mobs.Enderman attribute), 15 carried_data (nbtparse.minecraft.mobs.Enderman attribute), 15 cat_type (nbtparse.minecraft.mobs.Ocelot attribute), 18 Cauldron (class in nbtparse.minecraft.terrain.tile), 34 CaveSpider (class in nbtparse.minecraft.mobs), 14 cheats (nbtparse.minecraft.level.LevelFile attribute), 11 Chest (class in nbtparse.minecraft.terrain.tile), 34 chested (nbtparse.minecraft.mobs.Horse attribute), 16 Chicken (class in nbtparse.minecraft.mobs), 14 Chunk (class in nbtparse.minecraft.terrain.chunk), 29 class_name (nbtparse.minecraft.ids.EntityID attribute), 8 ClassID (class in nbtparse.minecraft.ids), 8 ClassWarning, 4 clear() (nbtparse.minecraft.terrain.region.Region method), 28 close() (nbtparse.minecraft.terrain.filters.Filter method), 33 collar_color (nbtparse.minecraft.mobs.Wolf attribute), 23 color (nbtparse.minecraft.mobs.Sheep attribute), 21 command (nbtparse.minecraft.terrain.tile.Control attribute), 35 command_block_output (nbtparse.minecraft.level.Rules attribute), 12 Comparator (class in nbtparse.minecraft.terrain.tile), 34 CompoundTag (class in nbtparse.syntax.tags), 47 ConcurrentError, 4 Container (class in nbtparse.minecraft.terrain.tile), 35 content_id (nbtparse.syntax.tags.ListTag attribute), 49 Control (class in nbtparse.minecraft.terrain.tile), 35 conversion_time (nbtparse.minecraft.mobs.Zombie attribute), 23 cook_time (nbtparse.minecraft.terrain.tile.Furnace attribute), 36 cooldown (nbtparse.minecraft.terrain.tile.Hopper attribute), 36 CoordinateField (in module nbtparse.minecraft.entity), 5 coords (nbtparse.minecraft.mobs.Leash attribute), 17 coords (nbtparse.minecraft.projectile.Projectile attribute), 24 coords (nbtparse.minecraft.terrain.tile.TileEntity attribute), 39 copy_vb() (nbtparse.minecraft.terrain.filters.Filter method), 33 count (nbtparse.minecraft.item.Item attribute), 10 Cow (class in nbtparse.minecraft.mobs), 14 Creeper (class in nbtparse.minecraft.mobs), 14 custom_name (nbtparse.minecraft.terrain.tile.Container attribute), 35 data (nbtparse.minecraft.terrain.voxel.Block attribute), 30 data (nbtparse.semantics.nbtobject.NBTObject attribute), 44 DaylightSensor (class in nbtparse.minecraft.terrain.tile), 35 death_ticks (nbtparse.minecraft.mobs.Mob attribute), 17 decode_named (in module nbtparse.syntax.tags), 51 decode_named() (nbtparse.syntax.tags.TagMixin class method), 51 decode_payload() (in module nbtparse.syntax.tags), 51 decode_payload() (nbtparse.syntax.tags.ByteArrayTag class method), 47 decode_payload() (nbtparse.syntax.tags.ByteTag class method), 47 decode_payload() (nbtparse.syntax.tags.CompoundTag class method), 47 decode_payload() (nbtparse.syntax.tags.DoubleTag class method), 48 decode_payload() (nbtparse.syntax.tags.EndTag class method), 48 decode_payload() (nbtparse.syntax.tags.FloatTag class method), 48 decode_payload() (nbtparse.syntax.tags.IntArrayTag class method), 49 decode_payload() (nbtparse.syntax.tags.IntTag class method), 49 decode_payload() (nbtparse.syntax.tags.ListTag class method), 49 decode_payload() (nbtparse.syntax.tags.LongTag class method), 50 decode_payload() (nbtparse.syntax.tags.ShortTag class method), 50 decode_payload() (nbtparse.syntax.tags.StringTag class method), 50 decode_payload() (nbtparse.syntax.tags.TagMixin class method), 51 delay (nbtparse.minecraft.terrain.tile.Spawner attribute), 38 detach_field() (nbtparse.semantics.nbtobject.NBTMeta method), 43 Dimension (class in nbtparse.minecraft.terrain.dimension), 26 dimension (nbtparse.minecraft.entity.Entity attribute), 5 dimension (nbtparse.minecraft.mobs.Player attribute), 19 direction (nbtparse.minecraft.projectile.AbstractFireball attribute), 24 Dispenser (class in nbtparse.minecraft.terrain.tile), 35 do_fire_tick (nbtparse.minecraft.level.Rules attribute), 12 do_mob_loot (nbtparse.minecraft.level.Rules attribute), 13 D do_mob_spawning (nbtparse.minecraft.level.Rules attribute), 13 damage (nbtparse.minecraft.item.Item attribute), 10 damage (nbtparse.minecraft.projectile.Arrow attribute), do_tile_drops (nbtparse.minecraft.level.Rules attribute), 13 24 58 Index NBTParse Documentation, Release 0.2.0.dev0 donkey (nbtparse.minecraft.mobs.HorseType attribute), 16 DoubleField (in module nbtparse.semantics.fields), 40 DoubleTag (class in nbtparse.syntax.tags), 47 drop_chances (nbtparse.minecraft.mobs.Mob attribute), 17 DroppedItem (class in nbtparse.minecraft.item), 10 Dropper (class in nbtparse.minecraft.terrain.tile), 35 duration (nbtparse.minecraft.mobs.PotionEffect attribute), 20 E eating (nbtparse.minecraft.mobs.Horse attribute), 16 Egg (class in nbtparse.minecraft.projectile), 24 encode_named() (nbtparse.syntax.tags.EndTag method), 48 encode_named() (nbtparse.syntax.tags.TagMixin method), 51 encode_payload() (nbtparse.syntax.tags.ByteArrayTag method), 47 encode_payload() (nbtparse.syntax.tags.ByteTag method), 47 encode_payload() (nbtparse.syntax.tags.CompoundTag method), 47 encode_payload() (nbtparse.syntax.tags.DoubleTag method), 48 encode_payload() (nbtparse.syntax.tags.EndTag method), 48 encode_payload() (nbtparse.syntax.tags.FloatTag method), 48 encode_payload() (nbtparse.syntax.tags.IntArrayTag method), 49 encode_payload() (nbtparse.syntax.tags.IntTag method), 49 encode_payload() (nbtparse.syntax.tags.ListTag method), 49 encode_payload() (nbtparse.syntax.tags.LongTag method), 50 encode_payload() (nbtparse.syntax.tags.ShortTag method), 50 encode_payload() (nbtparse.syntax.tags.StringTag method), 50 encode_payload() (nbtparse.syntax.tags.TagMixin method), 51 ender_items (nbtparse.minecraft.mobs.Player attribute), 19 EnderDragon (class in nbtparse.minecraft.mobs), 15 Enderman (class in nbtparse.minecraft.mobs), 15 EndPortal (class in nbtparse.minecraft.terrain.tile), 35 EndTag (class in nbtparse.syntax.tags), 48 entities (nbtparse.minecraft.terrain.chunk.Chunk attribute), 29 entities (nbtparse.minecraft.terrain.dimension.Dimension attribute), 27 Index Entity (class in nbtparse.minecraft.entity), 5 entity_id (nbtparse.minecraft.terrain.tile.Spawner attribute), 38 EntityID (class in nbtparse.minecraft.ids), 8 EntityMeta (class in nbtparse.minecraft.entity), 6 enumerate() (nbtparse.minecraft.terrain.voxel.VoxelBuffer method), 31 EnumField (in module nbtparse.semantics.fields), 40 equipment (nbtparse.minecraft.mobs.Mob attribute), 18 explosion_radius (nbtparse.minecraft.mobs.Creeper attribute), 15 extending (nbtparse.minecraft.terrain.tile.Piston attribute), 37 F facing (nbtparse.minecraft.terrain.tile.Piston attribute), 37 fall_distance (nbtparse.minecraft.entity.Entity attribute), 5 farmer (nbtparse.minecraft.mobs.VillagerProfession attribute), 22 features (nbtparse.minecraft.level.LevelFile attribute), 11 fields() (nbtparse.semantics.nbtobject.NBTMeta method), 44 fields() (nbtparse.semantics.nbtobject.NBTObject class method), 44 Filter (class in nbtparse.minecraft.terrain.filters), 33 fire_ticks (nbtparse.minecraft.entity.Entity attribute), 6 Fireball (class in nbtparse.minecraft.projectile), 24 FloatField (in module nbtparse.semantics.fields), 40 FloatTag (class in nbtparse.syntax.tags), 48 flower_type (nbtparse.minecraft.terrain.tile.FlowerPot attribute), 36 FlowerPot (class in nbtparse.minecraft.terrain.tile), 36 fly_speed (nbtparse.minecraft.mobs.Abilities attribute), 13 flying (nbtparse.minecraft.mobs.Abilities attribute), 13 food_exhaustion (nbtparse.minecraft.mobs.Player attribute), 19 food_level (nbtparse.minecraft.mobs.Player attribute), 20 food_saturation (nbtparse.minecraft.mobs.Player attribute), 20 food_timer (nbtparse.minecraft.mobs.Player attribute), 20 from_bytes() (nbtparse.semantics.nbtobject.NBTObject class method), 44 from_nbt() (in module nbtparse.minecraft.entityfactory), 7 from_nbt() (nbtparse.semantics.nbtobject.NBTObject class method), 44 from_raw() (nbtparse.minecraft.terrain.voxel.VoxelBuffer class method), 31 Furnace (class in nbtparse.minecraft.terrain.tile), 36 fuse (nbtparse.minecraft.mobs.Creeper attribute), 15 59 NBTParse Documentation, Release 0.2.0.dev0 G game_type (nbtparse.minecraft.level.LevelFile attribute), 11 generator (nbtparse.minecraft.level.LevelFile attribute), 11 generator_options (nbtparse.minecraft.level.LevelFile attribute), 11 generator_version (nbtparse.minecraft.level.LevelFile attribute), 11 generic (nbtparse.minecraft.mobs.VillagerProfession attribute), 22 get_namespace() (in module nbtparse.minecraft.ids), 9 Ghast (class in nbtparse.minecraft.mobs), 15 Giant (class in nbtparse.minecraft.mobs), 15 GzippedNBTFile (class in nbtparse.semantics.filetype), 43 H hanging (nbtparse.minecraft.mobs.Bat attribute), 14 hardcore (nbtparse.minecraft.level.LevelFile attribute), 11 has_reproduced (nbtparse.minecraft.mobs.Horse attribute), 16 health (nbtparse.minecraft.item.ItemEntity attribute), 11 health (nbtparse.minecraft.mobs.Mob attribute), 18 HealthField (in module nbtparse.minecraft.mobs), 15 height (nbtparse.minecraft.terrain.voxel.VoxelBuffer attribute), 31 height_map (nbtparse.minecraft.terrain.chunk.Chunk attribute), 29 HeightMap (class in nbtparse.minecraft.terrain.chunk), 29 HeightMapField (in module nbtparse.minecraft.terrain.chunk), 29 Hopper (class in nbtparse.minecraft.terrain.tile), 36 Horse (class in nbtparse.minecraft.mobs), 16 horse (nbtparse.minecraft.mobs.HorseType attribute), 16 HorseType (class in nbtparse.minecraft.mobs), 16 hurt_ticks (nbtparse.minecraft.mobs.Mob attribute), 18 I id (nbtparse.minecraft.entity.Entity attribute), 6 id (nbtparse.minecraft.item.DroppedItem attribute), 10 id (nbtparse.minecraft.item.Item attribute), 10 id (nbtparse.minecraft.item.XPOrb attribute), 11 id (nbtparse.minecraft.mobs.Bat attribute), 14 id (nbtparse.minecraft.mobs.Blaze attribute), 14 id (nbtparse.minecraft.mobs.CaveSpider attribute), 14 id (nbtparse.minecraft.mobs.Chicken attribute), 14 id (nbtparse.minecraft.mobs.Cow attribute), 14 id (nbtparse.minecraft.mobs.Creeper attribute), 15 id (nbtparse.minecraft.mobs.EnderDragon attribute), 15 id (nbtparse.minecraft.mobs.Enderman attribute), 15 id (nbtparse.minecraft.mobs.Ghast attribute), 15 id (nbtparse.minecraft.mobs.Giant attribute), 15 60 id (nbtparse.minecraft.mobs.Horse attribute), 16 id (nbtparse.minecraft.mobs.IronGolem attribute), 17 id (nbtparse.minecraft.mobs.MagmaCube attribute), 17 id (nbtparse.minecraft.mobs.Mooshroom attribute), 18 id (nbtparse.minecraft.mobs.Ocelot attribute), 18 id (nbtparse.minecraft.mobs.Pig attribute), 19 id (nbtparse.minecraft.mobs.PotionEffect attribute), 20 id (nbtparse.minecraft.mobs.Sheep attribute), 21 id (nbtparse.minecraft.mobs.Silverfish attribute), 21 id (nbtparse.minecraft.mobs.Skeleton attribute), 21 id (nbtparse.minecraft.mobs.Slime attribute), 21 id (nbtparse.minecraft.mobs.SnowGolem attribute), 21 id (nbtparse.minecraft.mobs.Spider attribute), 21 id (nbtparse.minecraft.mobs.Squid attribute), 22 id (nbtparse.minecraft.mobs.Villager attribute), 22 id (nbtparse.minecraft.mobs.Witch attribute), 23 id (nbtparse.minecraft.mobs.Wither attribute), 23 id (nbtparse.minecraft.mobs.Wolf attribute), 23 id (nbtparse.minecraft.mobs.Zombie attribute), 23 id (nbtparse.minecraft.mobs.ZombiePigman attribute), 23 id (nbtparse.minecraft.projectile.Arrow attribute), 24 id (nbtparse.minecraft.projectile.Egg attribute), 24 id (nbtparse.minecraft.projectile.Fireball attribute), 24 id (nbtparse.minecraft.projectile.SmallFireball attribute), 25 id (nbtparse.minecraft.projectile.ThrownEnderpearl attribute), 25 id (nbtparse.minecraft.projectile.ThrownExpBottle attribute), 25 id (nbtparse.minecraft.projectile.ThrownPotion attribute), 25 id (nbtparse.minecraft.projectile.ThrownSnowball attribute), 25 id (nbtparse.minecraft.projectile.WitherSkull attribute), 25 id (nbtparse.minecraft.terrain.tile.Beacon attribute), 34 id (nbtparse.minecraft.terrain.tile.Cauldron attribute), 34 id (nbtparse.minecraft.terrain.tile.Chest attribute), 34 id (nbtparse.minecraft.terrain.tile.Comparator attribute), 34 id (nbtparse.minecraft.terrain.tile.Control attribute), 35 id (nbtparse.minecraft.terrain.tile.DaylightSensor attribute), 35 id (nbtparse.minecraft.terrain.tile.Dispenser attribute), 35 id (nbtparse.minecraft.terrain.tile.Dropper attribute), 35 id (nbtparse.minecraft.terrain.tile.EndPortal attribute), 36 id (nbtparse.minecraft.terrain.tile.FlowerPot attribute), 36 id (nbtparse.minecraft.terrain.tile.Furnace attribute), 36 id (nbtparse.minecraft.terrain.tile.Hopper attribute), 36 id (nbtparse.minecraft.terrain.tile.Music attribute), 36 id (nbtparse.minecraft.terrain.tile.Piston attribute), 37 id (nbtparse.minecraft.terrain.tile.RecordPlayer attribute), 37 id (nbtparse.minecraft.terrain.tile.Sign attribute), 37 Index NBTParse Documentation, Release 0.2.0.dev0 id (nbtparse.minecraft.terrain.tile.Skull attribute), 38 id (nbtparse.minecraft.terrain.tile.Spawner attribute), 38 id (nbtparse.minecraft.terrain.tile.TileEntity attribute), 39 id (nbtparse.minecraft.terrain.voxel.Block attribute), 30 ids (class in nbtparse.syntax), 45 in_data (nbtparse.minecraft.projectile.Arrow attribute), 24 in_ground (nbtparse.minecraft.projectile.Projectile attribute), 24 in_love (nbtparse.minecraft.mobs.Breedable attribute), 14 in_tile (nbtparse.minecraft.projectile.Projectile attribute), 24 IncompleteSequenceError, 4 initialized (nbtparse.minecraft.level.LevelFile attribute), 11 insert() (nbtparse.minecraft.mobs.OfferList method), 19 instabuild (nbtparse.minecraft.mobs.Abilities attribute), 13 IntArrayField (in module nbtparse.semantics.fields), 40 IntArrayTag (class in nbtparse.syntax.tags), 48 IntField (in module nbtparse.semantics.fields), 40 IntTag (class in nbtparse.syntax.tags), 49 inventory (nbtparse.minecraft.mobs.Player attribute), 20 invulnerable (nbtparse.minecraft.entity.Entity attribute), 6 invulnerable (nbtparse.minecraft.mobs.Abilities attribute), 13 invulnerable (nbtparse.minecraft.mobs.Wither attribute), 23 IronGolem (class in nbtparse.minecraft.mobs), 17 is_baby (nbtparse.minecraft.mobs.Zombie attribute), 23 is_villager (nbtparse.minecraft.mobs.Zombie attribute), 23 Item (class in nbtparse.minecraft.item), 10 item (nbtparse.minecraft.item.DroppedItem attribute), 10 item (nbtparse.minecraft.terrain.tile.FlowerPot attribute), 36 item_id (nbtparse.minecraft.ids.BlockID attribute), 7 ItemEntity (class in nbtparse.minecraft.item), 11 ItemID (class in nbtparse.minecraft.ids), 8 items (nbtparse.minecraft.mobs.Horse attribute), 16 items (nbtparse.minecraft.terrain.tile.AbstractDispenser attribute), 34 items (nbtparse.minecraft.terrain.tile.Cauldron attribute), 34 items (nbtparse.minecraft.terrain.tile.Chest attribute), 34 items (nbtparse.minecraft.terrain.tile.Furnace attribute), 36 items (nbtparse.minecraft.terrain.tile.Hopper attribute), 36 L last_output (nbtparse.minecraft.terrain.tile.Control attribute), 35 last_played (nbtparse.minecraft.level.LevelFile attribute), 11 Leash (class in nbtparse.minecraft.mobs), 17 leash (nbtparse.minecraft.mobs.Mob attribute), 18 leashed (nbtparse.minecraft.mobs.Mob attribute), 18 length (nbtparse.minecraft.terrain.voxel.VoxelBuffer attribute), 31 LevelFile (class in nbtparse.minecraft.level), 11 levels (nbtparse.minecraft.terrain.tile.Beacon attribute), 34 librarian (nbtparse.minecraft.mobs.VillagerProfession attribute), 22 light (nbtparse.minecraft.ids.BlockID attribute), 7 line1 (nbtparse.minecraft.terrain.tile.Sign attribute), 37 line2 (nbtparse.minecraft.terrain.tile.Sign attribute), 37 line3 (nbtparse.minecraft.terrain.tile.Sign attribute), 37 line4 (nbtparse.minecraft.terrain.tile.Sign attribute), 38 ListField (in module nbtparse.semantics.fields), 40 ListTag (class in nbtparse.syntax.tags), 49 load() (nbtparse.minecraft.terrain.region.Region class method), 28 load() (nbtparse.semantics.filetype.GzippedNBTFile class method), 43 load() (nbtparse.semantics.filetype.NBTFile class method), 43 lock (nbtparse.minecraft.terrain.tile.Container attribute), 35 LongField (in module nbtparse.semantics.fields), 40 LongTag (class in nbtparse.syntax.tags), 49 M MagmaCube (class in nbtparse.minecraft.mobs), 17 main() (in module nbtparse.minecraft.ids), 9 MalformedNBTError, 4 max_cache (nbtparse.minecraft.terrain.dimension.Dimension attribute), 27 max_delay (nbtparse.minecraft.terrain.tile.Spawner attribute), 38 max_entities (nbtparse.minecraft.terrain.tile.Spawner attribute), 38 max_stack (nbtparse.minecraft.ids.ItemID attribute), 8 max_uses (nbtparse.minecraft.mobs.Offer attribute), 19 may_build (nbtparse.minecraft.mobs.Abilities attribute), 13 may_fly (nbtparse.minecraft.mobs.Abilities attribute), 13 min_delay (nbtparse.minecraft.terrain.tile.Spawner attribute), 38 K Mob (class in nbtparse.minecraft.mobs), 17 keep_inventory (nbtparse.minecraft.level.Rules attribute), mob_griefing (nbtparse.minecraft.level.Rules attribute), 13 13 mode (nbtparse.minecraft.mobs.Player attribute), 20 Index 61 NBTParse Documentation, Release 0.2.0.dev0 Modifier (class in nbtparse.minecraft.mobs), 18 modifiers (nbtparse.minecraft.mobs.Attribute attribute), 13 Mooshroom (class in nbtparse.minecraft.mobs), 18 motion (nbtparse.minecraft.entity.Entity attribute), 6 mount (nbtparse.minecraft.entity.Entity attribute), 6 mule (nbtparse.minecraft.mobs.HorseType attribute), 16 MultiField (in module nbtparse.semantics.fields), 40 Music (class in nbtparse.minecraft.terrain.tile), 36 MutableField (in module nbtparse.semantics.fields), 41 ObjectTupleField (in module nbtparse.semantics.fields), 41 Ocelot (class in nbtparse.minecraft.mobs), 18 Offer (class in nbtparse.minecraft.mobs), 19 OfferList (class in nbtparse.minecraft.mobs), 19 OfferListMeta (class in nbtparse.minecraft.mobs), 19 offers (nbtparse.minecraft.mobs.Villager attribute), 22 on_ground (nbtparse.minecraft.entity.Entity attribute), 6 opacity (nbtparse.minecraft.ids.BlockID attribute), 7 operation (nbtparse.minecraft.mobs.Modifier attribute), 18 N output (nbtparse.minecraft.terrain.tile.Comparator attribute), 34 name (nbtparse.minecraft.ids.Named attribute), 8 owner (nbtparse.minecraft.mobs.Tameable attribute), 22 name (nbtparse.minecraft.level.LevelFile attribute), 12 owner_name (nbtparse.minecraft.mobs.Horse attribute), name (nbtparse.minecraft.mobs.Attribute attribute), 13 16 name (nbtparse.minecraft.mobs.Mob attribute), 18 owner_name (nbtparse.minecraft.projectile.Thrown atname (nbtparse.minecraft.mobs.Modifier attribute), 18 tribute), 25 name_visible (nbtparse.minecraft.mobs.Mob attribute), 18 P Named (class in nbtparse.minecraft.ids), 8 ParserError, 4 Namespace (class in nbtparse.minecraft.ids), 8 persistent (nbtparse.minecraft.mobs.Mob attribute), 18 NBTFile (class in nbtparse.semantics.filetype), 43 physics (nbtparse.minecraft.ids.BlockID attribute), 7 NBTMeta (class in nbtparse.semantics.nbtobject), 43 pickup (nbtparse.minecraft.projectile.Arrow attribute), 24 NBTObject (class in nbtparse.semantics.nbtobject), 44 NBTObjectField (in module nbtparse.semantics.fields), Pig (class in nbtparse.minecraft.mobs), 19 Piston (class in nbtparse.minecraft.terrain.tile), 37 41 Player (class in nbtparse.minecraft.mobs), 19 nbtparse (module), 3 player (nbtparse.minecraft.level.LevelFile attribute), 12 nbtparse.exceptions (module), 4 player (nbtparse.minecraft.projectile.Arrow attribute), 24 nbtparse.minecraft (module), 5 player_created (nbtparse.minecraft.mobs.IronGolem atnbtparse.minecraft.entity (module), 5 tribute), 17 nbtparse.minecraft.entityfactory (module), 7 player_range (nbtparse.minecraft.terrain.tile.Spawner atnbtparse.minecraft.ids (module), 7 tribute), 39 nbtparse.minecraft.item (module), 10 portal_cooldown (nbtparse.minecraft.entity.Entity atnbtparse.minecraft.level (module), 11 tribute), 6 nbtparse.minecraft.mobs (module), 13 pos (nbtparse.minecraft.entity.Entity attribute), 6 nbtparse.minecraft.projectile (module), 24 potion (nbtparse.minecraft.projectile.ThrownPotion atnbtparse.minecraft.terrain (module), 26 tribute), 25 nbtparse.minecraft.terrain.chunk (module), 29 potion_value (nbtparse.minecraft.projectile.ThrownPotion nbtparse.minecraft.terrain.dimension (module), 26 attribute), 25 nbtparse.minecraft.terrain.filters (module), 33 PotionEffect (class in nbtparse.minecraft.mobs), 20 nbtparse.minecraft.terrain.region (module), 28 powered (nbtparse.minecraft.mobs.Creeper attribute), 15 nbtparse.minecraft.terrain.tile (module), 33 prepare_load() (nbtparse.minecraft.level.LevelFile static nbtparse.minecraft.terrain.voxel (module), 30 method), 12 nbtparse.semantics (module), 39 prepare_load() (nbtparse.minecraft.terrain.chunk.Chunk nbtparse.semantics.fields (module), 40 static method), 29 nbtparse.semantics.filetype (module), 43 prepare_load() (nbtparse.semantics.nbtobject.NBTObject nbtparse.semantics.nbtobject (module), 43 class method), 44 nbtparse.syntax (module), 45 prepare_save() (nbtparse.minecraft.level.LevelFile static nbtparse.syntax.tags (module), 46 method), 12 NoSuchTagTypeError, 4 prepare_save() (nbtparse.minecraft.terrain.chunk.Chunk note (nbtparse.minecraft.terrain.tile.Music attribute), 37 static method), 29 O prepare_save() (nbtparse.semantics.nbtobject.NBTObject method), 45 ObjectListField (in module nbtparse.semantics.fields), 41 62 Index NBTParse Documentation, Release 0.2.0.dev0 priest (nbtparse.minecraft.mobs.VillagerProfession attribute), 22 primary (nbtparse.minecraft.terrain.tile.Beacon attribute), 34 profession (nbtparse.minecraft.mobs.Villager attribute), 22 progress (nbtparse.minecraft.terrain.tile.Piston attribute), 37 Projectile (class in nbtparse.minecraft.projectile), 24 properties (nbtparse.minecraft.terrain.tile.SpawnPotential attribute), 38 save_fast() (nbtparse.minecraft.terrain.dimension.Dimension method), 28 score (nbtparse.minecraft.mobs.Player attribute), 20 secondary (nbtparse.minecraft.terrain.tile.Beacon attribute), 34 Section (class in nbtparse.minecraft.terrain.chunk), 30 SectionDictField (in module nbtparse.minecraft.terrain.chunk), 30 sections (nbtparse.minecraft.terrain.chunk.Chunk attribute), 29 seed (nbtparse.minecraft.level.LevelFile attribute), 12 selected_item_slot (nbtparse.minecraft.mobs.Player atR tribute), 20 rain_time (nbtparse.minecraft.level.LevelFile attribute), self_reference() (in module nbtparse.semantics.fields), 42 sell (nbtparse.minecraft.mobs.Offer attribute), 19 12 shake (nbtparse.minecraft.projectile.Projectile attribute), raining (nbtparse.minecraft.level.LevelFile attribute), 12 24 read_config() (in module nbtparse.minecraft.ids), 9 sheared (nbtparse.minecraft.mobs.Sheep attribute), 21 ReadOnly (class in nbtparse.semantics.fields), 41 recipes (nbtparse.minecraft.mobs.OfferList attribute), 19 Sheep (class in nbtparse.minecraft.mobs), 20 record_id (nbtparse.minecraft.terrain.tile.RecordPlayer ShortField (in module nbtparse.semantics.fields), 42 ShortTag (class in nbtparse.syntax.tags), 50 attribute), 37 record_item (nbtparse.minecraft.terrain.tile.RecordPlayer Sign (class in nbtparse.minecraft.terrain.tile), 37 Silverfish (class in nbtparse.minecraft.mobs), 21 attribute), 37 RecordPlayer (class in nbtparse.minecraft.terrain.tile), 37 SingleField (in module nbtparse.semantics.fields), 42 sitting (nbtparse.minecraft.mobs.Tameable attribute), 22 recover_atomic() (nbtparse.minecraft.terrain.dimension.Dimension size (nbtparse.minecraft.level.LevelFile attribute), 12 method), 27 size (nbtparse.minecraft.mobs.Slime attribute), 21 Region (class in nbtparse.minecraft.terrain.region), 28 register_namespace() (in module nbtparse.minecraft.ids), Skeleton (class in nbtparse.minecraft.mobs), 21 skeleton (nbtparse.minecraft.mobs.HorseType attribute), 10 16 rename() (nbtparse.minecraft.ids.Named method), 8 Skull (class in nbtparse.minecraft.terrain.tile), 38 renumber() (nbtparse.minecraft.ids.BlockID method), 7 resolve_class() (nbtparse.minecraft.ids.ClassID method), skull_id (nbtparse.minecraft.terrain.tile.Skull attribute), 38 8 resolve_class() (nbtparse.minecraft.ids.EntityID method), skull_name (nbtparse.minecraft.terrain.tile.Skull attribute), 38 8 resolve_class() (nbtparse.minecraft.ids.ItemID method), sleep_timer (nbtparse.minecraft.mobs.Player attribute), 20 8 sleeping (nbtparse.minecraft.mobs.Player attribute), 20 riches (nbtparse.minecraft.mobs.Villager attribute), 22 SliceWarning, 4 rotation (nbtparse.minecraft.entity.Entity attribute), 6 rotation (nbtparse.minecraft.terrain.tile.Skull attribute), Slime (class in nbtparse.minecraft.mobs), 21 slot (nbtparse.minecraft.item.Item attribute), 10 38 SmallFireball (class in nbtparse.minecraft.projectile), 25 Rules (class in nbtparse.minecraft.level), 12 smith (nbtparse.minecraft.mobs.VillagerProfession atrules (nbtparse.minecraft.level.LevelFile attribute), 12 tribute), 22 SnowGolem (class in nbtparse.minecraft.mobs), 21 S spawn (nbtparse.minecraft.level.LevelFile attribute), 12 saddle (nbtparse.minecraft.mobs.Horse attribute), 16 spawn (nbtparse.minecraft.mobs.Player attribute), 20 saddle (nbtparse.minecraft.mobs.Pig attribute), 19 save() (nbtparse.minecraft.terrain.region.Region method), spawn_count (nbtparse.minecraft.terrain.tile.Spawner attribute), 39 28 spawn_data (nbtparse.minecraft.terrain.tile.Spawner atsave() (nbtparse.semantics.filetype.GzippedNBTFile tribute), 39 method), 43 spawn_forced (nbtparse.minecraft.mobs.Player attribute), save() (nbtparse.semantics.filetype.NBTFile method), 43 20 save_all() (nbtparse.minecraft.terrain.dimension.Dimension method), 28 Index 63 NBTParse Documentation, Release 0.2.0.dev0 spawn_potentials (nbtparse.minecraft.terrain.tile.Spawner attribute), 39 spawn_range (nbtparse.minecraft.terrain.tile.Spawner attribute), 39 Spawner (class in nbtparse.minecraft.terrain.tile), 38 SpawnPotential (class in nbtparse.minecraft.terrain.tile), 38 Spider (class in nbtparse.minecraft.mobs), 21 Squid (class in nbtparse.minecraft.mobs), 22 STANDARD_NAMESPACE_NAME (in module nbtparse.minecraft.ids), 9 StringBooleanField (in module nbtparse.minecraft.level), 13 StringTag (class in nbtparse.syntax.tags), 50 success_count (nbtparse.minecraft.terrain.tile.Control attribute), 35 T TAG_Byte (nbtparse.syntax.ids attribute), 45 TAG_Byte_Array (nbtparse.syntax.ids attribute), 46 TAG_Compound (nbtparse.syntax.ids attribute), 46 TAG_Double (nbtparse.syntax.ids attribute), 46 TAG_End (nbtparse.syntax.ids attribute), 46 TAG_Float (nbtparse.syntax.ids attribute), 46 tag_id (nbtparse.syntax.tags.ByteArrayTag attribute), 47 tag_id (nbtparse.syntax.tags.ByteTag attribute), 47 tag_id (nbtparse.syntax.tags.CompoundTag attribute), 47 tag_id (nbtparse.syntax.tags.DoubleTag attribute), 48 tag_id (nbtparse.syntax.tags.EndTag attribute), 48 tag_id (nbtparse.syntax.tags.FloatTag attribute), 48 tag_id (nbtparse.syntax.tags.IntArrayTag attribute), 49 tag_id (nbtparse.syntax.tags.IntTag attribute), 49 tag_id (nbtparse.syntax.tags.ListTag attribute), 49 tag_id (nbtparse.syntax.tags.LongTag attribute), 50 tag_id (nbtparse.syntax.tags.ShortTag attribute), 50 tag_id (nbtparse.syntax.tags.StringTag attribute), 50 tag_id (nbtparse.syntax.tags.TagMixin attribute), 51 TAG_Int (nbtparse.syntax.ids attribute), 46 TAG_Int_Array (nbtparse.syntax.ids attribute), 46 TAG_List (nbtparse.syntax.ids attribute), 46 TAG_Long (nbtparse.syntax.ids attribute), 46 TAG_Short (nbtparse.syntax.ids attribute), 46 TAG_String (nbtparse.syntax.ids attribute), 46 TagMixin (class in nbtparse.syntax.tags), 50 tame (nbtparse.minecraft.mobs.Horse attribute), 16 Tameable (class in nbtparse.minecraft.mobs), 22 temper (nbtparse.minecraft.mobs.Horse attribute), 16 Thrown (class in nbtparse.minecraft.projectile), 25 ThrownEnderpearl (class in nbtparse.minecraft.projectile), 25 ThrownExpBottle (class in nbtparse.minecraft.projectile), 25 ThrownPotion (class in nbtparse.minecraft.projectile), 25 64 ThrownSnowball (class in nbtparse.minecraft.projectile), 25 thunder_time (nbtparse.minecraft.level.LevelFile attribute), 12 thundering (nbtparse.minecraft.level.LevelFile attribute), 12 ticks (nbtparse.minecraft.level.LevelFile attribute), 12 TileEntity (class in nbtparse.minecraft.terrain.tile), 39 tilemap (nbtparse.minecraft.terrain.voxel.VoxelBuffer attribute), 31 tiles (nbtparse.minecraft.terrain.chunk.Chunk attribute), 29 time_of_day (nbtparse.minecraft.level.LevelFile attribute), 12 to_bytes() (nbtparse.semantics.nbtobject.NBTObject method), 45 to_nbt() (nbtparse.semantics.nbtobject.NBTObject method), 45 to_raw() (nbtparse.minecraft.terrain.chunk.HeightMap method), 29 to_raw() (nbtparse.minecraft.terrain.voxel.VoxelBuffer method), 32 track_output (nbtparse.minecraft.terrain.tile.Control attribute), 35 transparent (nbtparse.minecraft.ids.BlockID attribute), 7 TupleListField (in module nbtparse.semantics.fields), 42 TupleMultiField (in module nbtparse.semantics.fields), 42 type (nbtparse.minecraft.ids.BlockID attribute), 8 type (nbtparse.minecraft.ids.EntityID attribute), 8 type (nbtparse.minecraft.ids.ItemID attribute), 8 type (nbtparse.minecraft.mobs.Horse attribute), 16 type (nbtparse.minecraft.terrain.tile.SpawnPotential attribute), 38 U UnicodeField (in module nbtparse.semantics.fields), 42 unregister_namespace() (in module nbtparse.minecraft.ids), 10 unwatch() (nbtparse.minecraft.terrain.voxel.VoxelBuffer method), 32 uses (nbtparse.minecraft.mobs.Offer attribute), 19 UTCField (in module nbtparse.semantics.fields), 42 uuid (nbtparse.minecraft.entity.Entity attribute), 6 uuid (nbtparse.minecraft.mobs.Leash attribute), 17 uuid (nbtparse.minecraft.mobs.Modifier attribute), 18 UUIDField (in module nbtparse.semantics.fields), 42 V value (nbtparse.minecraft.item.XPOrb attribute), 11 ValueWarning, 4 variant (nbtparse.minecraft.mobs.Horse attribute), 16 version (nbtparse.minecraft.level.LevelFile attribute), 12 Villager (class in nbtparse.minecraft.mobs), 22 Index NBTParse Documentation, Release 0.2.0.dev0 VillagerProfession (class in nbtparse.minecraft.mobs), 22 VoxelBuffer (class in nbtparse.minecraft.terrain.voxel), 30 W walk_speed (nbtparse.minecraft.mobs.Abilities attribute), 13 watch() (nbtparse.minecraft.terrain.voxel.VoxelBuffer method), 32 weight (nbtparse.minecraft.terrain.tile.SpawnPotential attribute), 38 width (nbtparse.minecraft.terrain.voxel.VoxelBuffer attribute), 32 Witch (class in nbtparse.minecraft.mobs), 23 Wither (class in nbtparse.minecraft.mobs), 23 wither (nbtparse.minecraft.mobs.Skeleton attribute), 21 WitherSkull (class in nbtparse.minecraft.projectile), 25 Wolf (class in nbtparse.minecraft.mobs), 23 wrapped (nbtparse.semantics.fields.ReadOnly attribute), 42 write_config() (in module nbtparse.minecraft.ids), 10 X xp_level (nbtparse.minecraft.mobs.Player attribute), 20 xp_progress (nbtparse.minecraft.mobs.Player attribute), 20 xp_total (nbtparse.minecraft.mobs.Player attribute), 20 XPOrb (class in nbtparse.minecraft.item), 11 xyz() (nbtparse.minecraft.terrain.voxel.VoxelBuffer method), 32 Y y_index (nbtparse.minecraft.terrain.chunk.Section attribute), 30 Z Zombie (class in nbtparse.minecraft.mobs), 23 zombie (nbtparse.minecraft.mobs.HorseType attribute), 16 ZombiePigman (class in nbtparse.minecraft.mobs), 23 Index 65
Similar documents
Get Cheap Minecraft Server Hosting Provider in US
Many experience service providers are available online, which are dedicated to make your Minecraft Hosting in a very easy and affordable, possible way. Buy the best & cheap Minecraft server hosting from Bisecthosting.com in the US at affordable prices. Visit Us: https://www.bisecthosting.com/
More information