用于以编程方式创建和编辑minecraft数据包的python库
mcpack的Python项目详细描述
mcpack
A python library for programmatically creating and editing Minecraft data packs. Requires python 3.7.
frommcpackimportDataPack,Functionpack=DataPack('My cool pack','This is the description of my pack.')pack['my_cool_pack:hello']=Function('say Hello, world!\n''give @s minecraft:dead_bush\n')pack.dump('.minecraft/saves/New World/datapacks')
安装
确保您使用的是Python3.7或更高版本。可以使用pip
安装包。
$ pip install mcpack
使用mcpack
Check out the examples for a quick overview.
创建数据包
DataPack
类表示minecraft数据包。
frommcpackimportDataPackpack=DataPack('Test','Test description.')print(pack.name)# 'Test'print(pack.description)# 'Test description.'print(pack.pack_format)# 1print(pack.namespaces)# defaultdict(<class 'mcpack.Namespace'>, {})
可以使用^ {< CD3>}类方法加载已经存在的数据包。
frommcpackimportDataPackpack=DataPack.load('.minecraft/save/New World/datapacks/Test')
dump
方法允许您生成实际的minecraft数据包。如果数据包已经存在,则该方法将引发^ {< CD5> }。通过将^ {< CD6> }参数设置为^ {CD7}},可以显式重写现有数据包。
frommcpackimportDataPackpack=DataPack('Test','Test description.')pack.dump('.minecraft/save/New World/datapacks')pack.dump('.minecraft/save/New World/datapacks',overwrite=True)
名称空间
Namespace
对象保存对数据包项的引用,对每种类型的项使用单独的字典。
frommcpackimportNamespacenamespace=Namespace()print(namespace.advancements)# {}print(namespace.functions)# {}print(namespace.loot_tables)# {}print(namespace.recipes)# {}print(namespace.structures)# {}print(namespace.block_tags)# {}print(namespace.item_tags)# {}print(namespace.fluid_tags)# {}print(namespace.function_tags)# {}print(namespace.entity_type_tags)# {}
可以使用namespaces
属性将命名空间添加到DataPack
对象。请注意,您通常不需要自己创建名称空间。如果你想编辑一个命名空间,你只需要检索它,并且^ {CD11}}将为你创建一个空命名空间,如果它不存在。
frommcpackimportDataPackpack=DataPack('Test','Test description.')print(pack.namespaces['test'])# Namespace(...)
为了更加方便,对象的__getitem__
和__setitem__
方法被映射到namespaces
属性。这意味着您可以直接从DataPack
对象访问名称空间。
print(pack['test'])# Namespace(...)
将项添加到名称空间非常简单。只需将它们添加到各自的词典中。
frommcpackimport(DataPack,Advancement,Function,LootTable,Recipe,Structure,BlockTag,ItemTag,FluidTag,FunctionTag,EntityTypeTag)pack=DataPack('Test','Test description.')pack['test'].advancements['foo']=Advancement(...)pack['test'].functions['foo/spam']=Function(...)pack['test'].loot_tables['foo/egg']=LootTable(...)pack['test'].recipes['bar']=Recipe(...)pack['test'].structures['bar/spam']=Structure(...)pack['test'].block_tags['bar/egg']=BlockTag(...)pack['test'].item_tags['baz']=ItemTag(...)pack['test'].fluid_tags['baz/spam']=FluidTag(...)pack['test'].function_tags['baz/egg']=FunctionTag(...)pack['test'].entity_type_tags['qux']=EntityTypeTag(...)
也可以直接使用DataPack
对象。__setitem__
方法实际上检查键是否看起来像namespace:path
,并自动分派项。我们现在可以将前面的代码简化很多。
frommcpackimport(DataPack,Advancement,Function,LootTable,Recipe,Structure,BlockTag,ItemTag,FluidTag,FunctionTag,EntityTypeTag)pack=DataPack('Test','Test description.')pack['test:foo']=Advancement(...)pack['test:foo/spam']=Function(...)pack['test:foo/egg']=LootTable(...)pack['test:bar']=Recipe(...)pack['test:bar/spam']=Structure(...)pack['test:bar/egg']=BlockTag(...)pack['test:baz']=ItemTag(...)pack['test:baz/spam']=FluidTag(...)pack['test:baz/egg']=FunctionTag(...)pack['test:qux']=EntityTypeTag(...)
进展
Advancement
物体代表了雷射艇的进步。
frommcpackimportDataPack,Advancementpack=DataPack('Test','Test description.')pack['test:foo']=Advancement()advancement=pack['test'].advancements['foo']print(advancement.display)# Noneprint(advancement.parent)# Noneprint(advancement.criteria)# {}print(advancement.requirements)# Noneprint(advancement.rewards)# None
所有属性都可以在构造函数中设置。它们反映了高级json文件格式的根属性。
Check out the wiki for further details.
功能
Function
对象表示minecraft函数。
frommcpackimportDataPack,Functionpack=DataPack('Test','Test description.')pack['test:foo']=Function()function=pack['test'].functions['foo']print(function.body)# ''
可以在构造函数中设置body
属性。函数体对应于实际.mcfunction
文件的内容。
Check out the wiki for further details.
战利品表
LootTable
对象表示minecraft战利品表。
frommcpackimportDataPack,LootTablepack=DataPack('Test','Test description.')pack['test:foo']=LootTable()loot_table=pack['test'].loot_tables['foo']print(loot_table.pools)# []print(loot_table.type)# 'generic'print(loot_table.functions)# None
所有属性都可以在构造函数中设置。它们反映了loot表json文件格式的根属性。
Check out the wiki for further details.
配方
Recipe
对象表示minecraft配方。
frommcpackimportDataPack,Recipepack=DataPack('Test','Test description.')pack['test:foo']=Recipe()recipe=pack['test'].recipes['foo']print(recipe.type)# 'crafting_shaped'print(recipe.group)# Noneprint(recipe.pattern)# []print(recipe.key)# {}print(recipe.ingredient)# Noneprint(recipe.ingredients)# Noneprint(recipe.result)# {}print(recipe.experience)# Noneprint(recipe.cookingtime)# Noneprint(recipe.count)# None
所有属性都可以在构造函数中设置。它们镜像配方json文件格式的根属性。
Check out the wiki for further details.
结构
Structure
对象表示minecraft结构。
frommcpackimportDataPack,Structurepack=DataPack('Test','Test description.')pack['test:foo']=Structure()structure=pack['test'].structures['foo']print(structure.data_version)# Int(1503)print(structure.author)# String('')print(structure.size)# List[Int]([0, 0, 0])print(structure.palette)# List[State]([])print(structure.palettes)# List[List[State]]([])print(structure.blocks)# List[Block]([])print(structure.entities)# List[Entity]([])
所有属性都可以在构造函数中设置。它们反映结构nbt文件格式的根属性。mcpack
使用^{Structure
类继承自一个nbtlib
模式,该模式负责用适当的nbt标记包装python值。
Check out the wiki for further details.
标签
BlockTag
、ItemTag
、FluidTag
、FunctionTag
和EntityTypeTag
对象分别表示minecraft块、项、流体、函数和实体类型标记。它们在结构上都是相同的,唯一的区别是它们被写入的名称空间目录。
frommcpackimportDataPack,BlockTagpack=DataPack('Test','Test description.')pack['test:foo']=BlockTag()block_tag=pack['test'].block_tags['foo']print(block_tag.values)# []print(block_tag.replace)# False
可以在构造函数中设置values
和replace
属性。它们镜像标记json文件格式的根属性。
Check out the wiki for further details.
贡献
欢迎捐款。此项目使用^{
$ curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
现在您应该能够安装所需的依赖项。
$ poetry install
您可以使用poetry run pytest
运行测试。
$ poetry run pytest
该项目还可以下载最新的minecraft版本,并对vanilla数据包运行测试。您可以使用--vanilla
标志启用这些测试。
$ poetry run pytest --vanilla
许可证-MIT