Move datapack objects to the format package

This commit is contained in:
Andrew Miner
2025-10-16 15:41:24 -06:00
parent 2da1a38c69
commit 87b6362d12
36 changed files with 88 additions and 88 deletions
+49
View File
@@ -0,0 +1,49 @@
from collections.abc import Iterable
from mcpacker.format.datapack.moddata import ModData
# Class ############################################################################################
class DataPack:
"""
A collection of data used to configure a Minecraft instance.
see: https://minecraft.wiki/w/Data_pack
"""
def __init__(self, name:str, mods:Iterable[ModData]|None=None):
self.name = name
self._mods:dict[str,ModData] = {}
self._defaultMod:ModData|None = None
for mod in (mods or []):
self.add(mod)
def add(self, mod:ModData) -> "DataPack":
if not self._defaultMod:
self._defaultMod = mod
self._mods[mod.name] = mod
return self
def get(self, name:str) -> ModData:
result = self._mods.get(name, None)
if not result:
result = self._mods[name] = ModData(name)
return result
@property
def defaultMod(self) -> ModData|None:
return self._defaultMod
@defaultMod.setter
def defaultMod(self, mod:ModData):
if mod:
existingModData = self.get(mod.name)
if not existingModData:
self.add(mod)
elif existingModData != mod:
raise Exception(f"Datapack already has a mod named {mod.name}")
self._defaultMod = mod
@@ -1,4 +1,4 @@
import mcpacker.model.datapack import mcpacker.format.datapack
# Tests ############################################################################################ # Tests ############################################################################################
@@ -1,4 +1,4 @@
from mcpacker.model.datapack.blockstate import BlockState from mcpacker.format.datapack.blockstate import BlockState
from pytest import fixture from pytest import fixture
@@ -1,6 +1,6 @@
from mcpacker.json import JsonBlob from mcpacker.json import JsonBlob
from mcpacker.model.datapack.blockstate import BlockState from mcpacker.format.datapack.blockstate import BlockState
from mcpacker.model.datapack.blockstateprovider import BlockStateProvider from mcpacker.format.datapack.blockstateprovider import BlockStateProvider
from typing import Any from typing import Any
@@ -1,5 +1,5 @@
from mcpacker.model.datapack.blockstate import BlockState from mcpacker.format.datapack.blockstate import BlockState
from mcpacker.model.datapack.blockstateprovider.simplestateprovider import SimpleStateProvider from mcpacker.format.datapack.blockstateprovider.simplestateprovider import SimpleStateProvider
from pytest import fixture from pytest import fixture
@@ -1,9 +1,9 @@
from mcpacker.model.datapack.configuredfeature import ConfiguredFeature from mcpacker.format.datapack.configuredfeature import ConfiguredFeature
from typing import Any from typing import Any
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
if TYPE_CHECKING: if TYPE_CHECKING:
from mcpacker.model.datapack.placedfeature import PlacedFeature from mcpacker.format.datapack.placedfeature import PlacedFeature
# Class ############################################################################################ # Class ############################################################################################
@@ -1,6 +1,6 @@
from mcpacker.model.datapack.blockstate import BlockState from mcpacker.format.datapack.blockstate import BlockState
from mcpacker.model.datapack.blockstateprovider.simplestateprovider import SimpleStateProvider from mcpacker.format.datapack.blockstateprovider.simplestateprovider import SimpleStateProvider
from mcpacker.model.datapack.configuredfeature.simpleblock import SimpleBlock from mcpacker.format.datapack.configuredfeature.simpleblock import SimpleBlock
from pytest import fixture from pytest import fixture
@@ -1,6 +1,6 @@
from mcpacker.json import JsonBlob from mcpacker.json import JsonBlob
from mcpacker.model.datapack.blockstateprovider import BlockStateProvider from mcpacker.format.datapack.blockstateprovider import BlockStateProvider
from mcpacker.model.datapack.configuredfeature import ConfiguredFeature from mcpacker.format.datapack.configuredfeature import ConfiguredFeature
from typing import Any from typing import Any
@@ -1,6 +1,6 @@
from mcpacker.model.datapack.blockstate import BlockState from mcpacker.format.datapack.blockstate import BlockState
from mcpacker.model.datapack.blockstateprovider.simplestateprovider import SimpleStateProvider from mcpacker.format.datapack.blockstateprovider.simplestateprovider import SimpleStateProvider
from mcpacker.model.datapack.configuredfeature.simpleblock import SimpleBlock from mcpacker.format.datapack.configuredfeature.simpleblock import SimpleBlock
from pytest import fixture from pytest import fixture
@@ -1,4 +1,4 @@
from mcpacker.model.datapack.heightmaptype import HeightMapType from mcpacker.format.datapack.heightmaptype import HeightMapType
# Tests ############################################################################################ # Tests ############################################################################################
@@ -1,5 +1,5 @@
from mcpacker.model.datapack.configuredfeature import ConfiguredFeature from mcpacker.format.datapack.configuredfeature import ConfiguredFeature
from mcpacker.model.datapack.placedfeature import PlacedFeature from mcpacker.format.datapack.placedfeature import PlacedFeature
from typing import Any from typing import Any
@@ -1,4 +1,4 @@
import mcpacker.model.datapack.moddata import mcpacker.format.datapack.moddata
# Tests ############################################################################################ # Tests ############################################################################################
@@ -1,4 +1,4 @@
from mcpacker.model.datapack.placement import Placement from mcpacker.format.datapack.placement import Placement
# Class ############################################################################################ # Class ############################################################################################
@@ -1,4 +1,4 @@
from mcpacker.model.datapack.placedfeature import PlacedFeature from mcpacker.format.datapack.placedfeature import PlacedFeature
# Tests ############################################################################################ # Tests ############################################################################################
@@ -1,4 +1,4 @@
from mcpacker.model.datapack.placement import Placement from mcpacker.format.datapack.placement import Placement
from typing import Any from typing import Any
# Class ############################################################################################ # Class ############################################################################################
@@ -1,4 +1,4 @@
from mcpacker.model.datapack.placement.biome import Biome from mcpacker.format.datapack.placement.biome import Biome
from pytest import fixture from pytest import fixture
@@ -1,5 +1,5 @@
from mcpacker.model.datapack.heightmaptype import HeightMapType from mcpacker.format.datapack.heightmaptype import HeightMapType
from mcpacker.model.datapack.placement import Placement from mcpacker.format.datapack.placement import Placement
from typing import Any from typing import Any
# Class ############################################################################################ # Class ############################################################################################
@@ -1,5 +1,5 @@
from mcpacker.model.datapack.heightmaptype import WORLD_SURFACE from mcpacker.format.datapack.heightmaptype import WORLD_SURFACE
from mcpacker.model.datapack.placement.heightmap import HeightMap from mcpacker.format.datapack.placement.heightmap import HeightMap
from pytest import fixture from pytest import fixture
@@ -1,4 +1,4 @@
from mcpacker.model.datapack.placement import Placement from mcpacker.format.datapack.placement import Placement
from typing import Any from typing import Any
# Class ############################################################################################ # Class ############################################################################################
@@ -1,4 +1,4 @@
from mcpacker.model.datapack.placement.insquare import InSquare from mcpacker.format.datapack.placement.insquare import InSquare
from pytest import fixture from pytest import fixture
@@ -1,4 +1,4 @@
from mcpacker.model.datapack.placement import Placement from mcpacker.format.datapack.placement import Placement
from typing import Any from typing import Any
# Class ############################################################################################ # Class ############################################################################################
@@ -1,4 +1,4 @@
from mcpacker.model.datapack.placement.rarityfilter import RarityFilter from mcpacker.format.datapack.placement.rarityfilter import RarityFilter
from pytest import fixture from pytest import fixture
@@ -1,6 +1,6 @@
from collections.abc import Iterable from collections.abc import Iterable
from collections.abc import Mapping from collections.abc import Mapping
from mcpacker.model.datapack.recipe import Recipe from mcpacker.format.datapack.recipe import Recipe
from mcpacker.model.core.resourceid import ResourceId from mcpacker.model.core.resourceid import ResourceId
@@ -1,5 +1,5 @@
from pytest import fixture from pytest import fixture
from mcpacker.model.datapack.recipe.shapedrecipe import ShapedRecipe from mcpacker.format.datapack.recipe.shapedrecipe import ShapedRecipe
# Fixtures ######################################################################################### # Fixtures #########################################################################################
@@ -1,7 +1,7 @@
from collections.abc import Iterable from collections.abc import Iterable
from collections.abc import Mapping from collections.abc import Mapping
from mcpacker.model.core.resourceid import ResourceId from mcpacker.model.core.resourceid import ResourceId
from mcpacker.model.datapack.recipe import Recipe from mcpacker.format.datapack.recipe import Recipe
# Class ############################################################################################ # Class ############################################################################################
@@ -1,5 +1,5 @@
from pytest import fixture from pytest import fixture
from mcpacker.model.datapack.recipe.shapelessrecipe import ShapelessRecipe from mcpacker.format.datapack.recipe.shapelessrecipe import ShapelessRecipe
# Fixtures ######################################################################################### # Fixtures #########################################################################################
+1 -1
View File
@@ -3,7 +3,7 @@ from mcpacker.model.resourcepack.variant import Variant
from mcpacker.model.resourcepack.model import Model from mcpacker.model.resourcepack.model import Model
from mcpacker.model.modpack import ModPack from mcpacker.model.modpack import ModPack
from mcpacker.model.core.resourceid import ResourceId from mcpacker.model.core.resourceid import ResourceId
from mcpacker.model.datapack.recipe.shapedrecipe import ShapedRecipe from mcpacker.format.datapack.recipe.shapedrecipe import ShapedRecipe
# Class ############################################################################################ # Class ############################################################################################
-49
View File
@@ -1,49 +0,0 @@
from collections.abc import Iterable
from mcpacker.model.datapack.moddata import ModData
# Class ############################################################################################
class DataPack:
"""
A collection of data used to configure a Minecraft instance.
see: https://minecraft.wiki/w/Data_pack
"""
def __init__(self, name:str, mods:Iterable[ModData]|None=None):
self.name = name
self._mods:dict[str,ModData] = {}
self._defaultMod:ModData|None = None
for mod in (mods or []):
self.add(mod)
def add(self, mod:ModData) -> "DataPack":
if not self._defaultMod:
self._defaultMod = mod
self._mods[mod.name] = mod
return self
def get(self, name:str) -> ModData:
result = self._mods.get(name, None)
if not result:
result = self._mods[name] = ModData(name)
return result
@property
def defaultMod(self) -> ModData|None:
return self._defaultMod
@defaultMod.setter
def defaultMod(self, mod:ModData):
if mod:
existingModData = self.get(mod.name)
if not existingModData:
self.add(mod)
elif existingModData != mod:
raise Exception(f"Datapack already has a mod named {mod.name}")
self._defaultMod = mod
+1 -1
View File
@@ -1,6 +1,6 @@
from collections.abc import Iterable from collections.abc import Iterable
from mcpacker.model.core.world import World from mcpacker.model.core.world import World
from mcpacker.model.datapack import DataPack from mcpacker.format.datapack import DataPack
from mcpacker.model.mod import Mod from mcpacker.model.mod import Mod
from mcpacker.model.resourcepack import ResourcePack from mcpacker.model.resourcepack import ResourcePack
from typing import Callable from typing import Callable
@@ -1,5 +1,5 @@
from mcpacker.model.modpack import ModPack from mcpacker.model.modpack import ModPack
from mcpacker.model.datapack import DataPack from mcpacker.format.datapack import DataPack
# Functions ######################################################################################## # Functions ########################################################################################