Continued progress
This commit is contained in:
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
@@ -3,6 +3,8 @@ from mcpacker.format.report.mineralreport import MineralReport
|
||||
from mcpacker.format.report.mobspawnreport import MobSpawnReport
|
||||
from mcpacker.model.modpack import ModPack
|
||||
from mcpacker.write.compositewriter import CompositeWriter
|
||||
from mcpacker.write.datapack.metawriter import MetaWriter
|
||||
from mcpacker.write.datapack.writer import DataPackWriter
|
||||
from mcpacker.write.incontrol.spawnerwriter import SpawnerWriter
|
||||
from mcpacker.write.report.writer import ReportWriter
|
||||
from mcpacker.write.staticwriter import StaticWriter
|
||||
@@ -54,4 +56,7 @@ class Runner:
|
||||
CompositeWriter(self.pack, self.outputDir, [
|
||||
StaticWriter(self.pack, self.outputDir),
|
||||
SpawnerWriter(self.pack, self.outputDir),
|
||||
DataPackWriter(self.pack, self.outputDir, [
|
||||
MetaWriter(self.pack, self.outputDir),
|
||||
]),
|
||||
]).write()
|
||||
|
||||
@@ -15,8 +15,11 @@ class CompositeWriter(Writer):
|
||||
writers:Iterable[Writer]|None=None
|
||||
):
|
||||
super().__init__(pack, outputDir)
|
||||
self._writers:list[Writer] = list(w for w in writers or [])
|
||||
|
||||
def write(self):
|
||||
self._writers:list[Writer] = []
|
||||
for writer in (writers or []):
|
||||
self._writers.append(writer)
|
||||
|
||||
def doWrite(self):
|
||||
for writer in self._writers:
|
||||
writer.write()
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
from os.path import join
|
||||
|
||||
|
||||
# Class ############################################################################################
|
||||
|
||||
class Locator:
|
||||
|
||||
def __init__(self, basePath:str, mod:str):
|
||||
self.basePath = basePath
|
||||
self.mod = mod
|
||||
|
||||
def biomeModifier(self) -> str:
|
||||
return join(self.basePath, "data", self.mod, "neoforge", "biome_modifier")
|
||||
|
||||
def blockTag(self) -> str:
|
||||
return join(self.basePath, "data", self.mod, "tags", "blocks")
|
||||
|
||||
def configuredFeature(self) -> str:
|
||||
return join(self.basePath, "data", self.mod, "worldgen", "configured_feature")
|
||||
|
||||
def function(self) -> str:
|
||||
return join(self.basePath, "data", self.mod, "functions")
|
||||
|
||||
def placedFeature(self) -> str:
|
||||
return join(self.basePath, "data", self.mod, "worldgen", "placed_feature")
|
||||
|
||||
def structure(self) -> str:
|
||||
return join(self.basePath, "data", self.mod, "worldgen", "structure")
|
||||
|
||||
def structureNbt(self) -> str:
|
||||
return join(self.basePath, "data", self.mod, "structure")
|
||||
|
||||
def structureSet(self) -> str:
|
||||
return join(self.basePath, "data", self.mod, "worldgen", "structure_set")
|
||||
|
||||
def templatePool(self) -> str:
|
||||
return join(self.basePath, "data", self.mod, "worldgen", "template_pool")
|
||||
@@ -1,7 +0,0 @@
|
||||
import mcpacker.write.datapack.locator
|
||||
|
||||
|
||||
# Tests ############################################################################################
|
||||
|
||||
def test_syntax():
|
||||
pass
|
||||
@@ -0,0 +1,25 @@
|
||||
from mcpacker.model.modpack import ModPack
|
||||
from mcpacker.write.writer import Writer
|
||||
from pathlib import Path
|
||||
|
||||
import mcpacker.json as json
|
||||
|
||||
|
||||
# Class ############################################################################################
|
||||
|
||||
class MetaWriter(Writer):
|
||||
|
||||
def __init__(self, pack:ModPack, outputDir:Path):
|
||||
super().__init__(pack, outputDir)
|
||||
|
||||
def doWrite(self):
|
||||
path = self.locator.dataPack() / "pack.mcmeta"
|
||||
self.resetOutputFile(path)
|
||||
|
||||
with path.open("w") as file:
|
||||
file.write(json.dumps({
|
||||
"pack": {
|
||||
"pack_format": 48,
|
||||
"description": f"auto-generated overrides for {self.pack.name}"
|
||||
}
|
||||
}, indent=" "))
|
||||
@@ -0,0 +1,37 @@
|
||||
from collections.abc import Iterable
|
||||
from mcpacker.model.modpack import ModPack
|
||||
from mcpacker.write.compositewriter import CompositeWriter
|
||||
from mcpacker.write.writer import Writer
|
||||
from mcpacker.write.locator import Locator
|
||||
from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
from zipfile import ZipFile
|
||||
from zipfile import ZIP_DEFLATED
|
||||
|
||||
import mcpacker.json as json
|
||||
import os
|
||||
|
||||
|
||||
# Class ############################################################################################
|
||||
|
||||
class DataPackWriter(CompositeWriter):
|
||||
|
||||
def doWrite(self):
|
||||
outputDir = self.locator.outputDir
|
||||
archivePath = self.locator.dataPacks() / f"{self.pack.name}.jar"
|
||||
|
||||
with TemporaryDirectory() as buildDir:
|
||||
self.locator.outputDir = Path(buildDir)
|
||||
for writer in self._writers:
|
||||
writer.locator.outputDir = self.locator.outputDir
|
||||
writer.write()
|
||||
|
||||
dataPackPath = self.locator.dataPack()
|
||||
archivePath.parent.mkdir(exist_ok=True, parents=True)
|
||||
|
||||
with ZipFile(archivePath, "w", ZIP_DEFLATED) as zipFile:
|
||||
for path in dataPackPath.rglob("*"):
|
||||
if not path.is_file(): continue
|
||||
zipFile.write(path, path.relative_to(dataPackPath.parent))
|
||||
|
||||
self.locator.outputDir = outputDir
|
||||
@@ -22,11 +22,8 @@ import os
|
||||
|
||||
class SpawnerWriter(Writer):
|
||||
|
||||
def __init__(self, pack:ModPack, outputDir:Path):
|
||||
super().__init__(pack, outputDir)
|
||||
|
||||
def write(self):
|
||||
path = self.outputDir / self.pack.name / INCONTROL_CONFIG_DIR / "spawner.json"
|
||||
def doWrite(self):
|
||||
path = self.locator.inc_config()/"spawner.json"
|
||||
self.resetOutputFile(path)
|
||||
path.write_text(json.dumps(self._makeAllRules(), indent=json.INDENT))
|
||||
|
||||
|
||||
@@ -21,9 +21,9 @@ class Locator:
|
||||
* Thirst Was Taken
|
||||
"""
|
||||
|
||||
def __init__(self, pack:ModPack, outputDir:Path):
|
||||
self._pack = pack
|
||||
self._outputDir = outputDir
|
||||
def __init__(self, pack:ModPack, outputDir:Path|None=None):
|
||||
self.pack = pack
|
||||
self.outputDir = outputDir
|
||||
|
||||
def biomeModifiers(self, modName:str|None=None, dataPackName:str|None=None) -> Path:
|
||||
return self.dataPackMod(modName, dataPackName) / "neoforge" / "biome_modifier"
|
||||
@@ -38,10 +38,10 @@ class Locator:
|
||||
return self.dataPackMod(modName, dataPackName) / "worldgen" / "configured_feature"
|
||||
|
||||
def dataPack(self, dataPackName:str|None=None):
|
||||
return self.dataPacks() / (dataPackName or f"{self._pack.name}_override")
|
||||
return self.dataPacks() / (dataPackName or f"{self.pack.name}_override")
|
||||
|
||||
def dataPackMod(self, modName:str|None=None, dataPackName:str|None=None):
|
||||
return self.dataPack(dataPackName) / "data" / (modName or self._pack.name)
|
||||
return self.dataPack(dataPackName) / "data" / (modName or self.pack.name)
|
||||
|
||||
def dataPacks(self) -> Path:
|
||||
return self.root() / "datapacks"
|
||||
@@ -65,16 +65,19 @@ class Locator:
|
||||
return self.dataPackMod(modName, dataPackName) / "recipes"
|
||||
|
||||
def resourcePack(self, resourcePackName:str|None=None) -> Path:
|
||||
return self.resourcePacks() / (resourcePackName or f"{self._pack.name}_override")
|
||||
return self.resourcePacks() / (resourcePackName or f"{self.pack.name}_override")
|
||||
|
||||
def resourcePackMod(self, modName:str|None=None, resourcePackName:str|None=None) -> Path:
|
||||
return self.resourcePack(resourcePackName) / "assets" / (modName or self._pack.name)
|
||||
return self.resourcePack(resourcePackName) / "assets" / (modName or self.pack.name)
|
||||
|
||||
def resourcePacks(self) -> Path:
|
||||
return self.root() / "resourcepacks"
|
||||
|
||||
def root(self) -> Path:
|
||||
return self._outputDir / self._pack.name
|
||||
if self.outputDir == None:
|
||||
raise RuntimeError("outputDir must be set before using the locator")
|
||||
|
||||
return self.outputDir / self.pack.name
|
||||
|
||||
def structures(self, modName:str|None=None, dataPackName:str|None=None) -> Path:
|
||||
return self.dataPackMod(modName, dataPackName) / "structure"
|
||||
@@ -131,7 +134,12 @@ class Locator:
|
||||
def lod_vanilla(self) -> Path:
|
||||
return self.lod_config() / "Vanilla"
|
||||
|
||||
# ThirstWasTaken ###########################################################
|
||||
# MCPacker Mixins ##########################################################
|
||||
|
||||
def mcp_reports(self) -> Path:
|
||||
return self.root() / "reports"
|
||||
|
||||
# ThirstWasTaken Mixins ####################################################
|
||||
|
||||
def twt_config(self) -> Path:
|
||||
return self.config() / "thirst"
|
||||
|
||||
@@ -20,8 +20,8 @@ class ReportWriter(Writer):
|
||||
self.composerClass = composerClass
|
||||
self.name = Path(name)
|
||||
|
||||
def write(self) -> Self:
|
||||
path = self.outputDir/self.pack.name/"reports"/self.name
|
||||
def doWrite(self) -> Self:
|
||||
path = self.locator.mcp_reports() / self.name
|
||||
self.resetOutputFile(path)
|
||||
|
||||
composer = self.composerClass(self.pack)
|
||||
|
||||
@@ -2,11 +2,12 @@ from mcpacker.write.writer import Writer
|
||||
|
||||
# Class ############################################################################################
|
||||
|
||||
class BlockStateWiter(Writer):
|
||||
class BlockStateWriter(Writer):
|
||||
|
||||
def write(self):
|
||||
def doWrite(self):
|
||||
for mod in self.pack.resourcePack.mods:
|
||||
for blockState in mod.blockStates:
|
||||
path = self.outputDir/self.pack.name/"resourcepacks"
|
||||
path = self.locator.blockStates() # filename?
|
||||
# TODO: not implemented
|
||||
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ class StaticWriter(Writer):
|
||||
def __init__(self, pack:ModPack, outputDir:Path):
|
||||
super().__init__(pack, outputDir)
|
||||
|
||||
def write(self):
|
||||
def doWrite(self):
|
||||
sourcePath = SOURCE_BASE / self.pack.name / "static"
|
||||
targetPath = self.outputDir / self.pack.name
|
||||
targetPath = self.locator.root()
|
||||
shutil.copytree(sourcePath, targetPath, dirs_exist_ok=True)
|
||||
|
||||
@@ -2,9 +2,6 @@ from mcpacker.format.textcomposer import TextComposer
|
||||
from mcpacker.model.modpack import ModPack
|
||||
from mcpacker.write.writer import Writer
|
||||
from pathlib import Path
|
||||
from typing import Self
|
||||
|
||||
import os
|
||||
|
||||
|
||||
# Class ############################################################################################
|
||||
@@ -16,11 +13,9 @@ class TextWriter(Writer):
|
||||
self.composer = composer
|
||||
self.filePath = filePath
|
||||
|
||||
def write(self) -> Self:
|
||||
path = self.outputDir/self.pack.name/self.filePath
|
||||
def doWrite(self):
|
||||
path = self.locator.root() / self.filePath
|
||||
self.resetOutputFile(path)
|
||||
|
||||
with path.open("w") as file:
|
||||
file.write(str(self.composer.compose()))
|
||||
|
||||
return self
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
from mcpacker.model.modpack import ModPack
|
||||
from mcpacker.write.locator import Locator
|
||||
from pathlib import Path
|
||||
from typing import Self
|
||||
|
||||
@@ -11,13 +12,18 @@ import shutil
|
||||
class Writer:
|
||||
|
||||
def __init__(self, pack:ModPack, outputDir:Path):
|
||||
self.locator = Locator(pack, outputDir)
|
||||
self.pack = pack
|
||||
self.outputDir = outputDir
|
||||
|
||||
def resetOutputFile(self, file:Path):
|
||||
if file.exists():
|
||||
os.remove(file)
|
||||
|
||||
file.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
def write(self) -> Self:
|
||||
self.doWrite()
|
||||
return self
|
||||
|
||||
def doWrite(self):
|
||||
raise NotImplementedError()
|
||||
|
||||
@@ -8,8 +8,8 @@ from pytest import fixture
|
||||
|
||||
class SampleWriter(Writer):
|
||||
|
||||
def write(self):
|
||||
path = self.outputDir/self.pack.name/"samplewriter.md"
|
||||
def doWrite(self):
|
||||
path = self.locator.root() / "samplewriter.md"
|
||||
self.resetOutputFile(path)
|
||||
path.write_text("alpha bravo charlie")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user