Add writers to create plant spawn file
This commit is contained in:
@@ -18,6 +18,6 @@ class PatchConfiguredFeature:
|
|||||||
"tries": self.patch.attempts(),
|
"tries": self.patch.attempts(),
|
||||||
"xz_spread": self.patch.radius,
|
"xz_spread": self.patch.radius,
|
||||||
"y_spread": self.patch.radius / 2,
|
"y_spread": self.patch.radius / 2,
|
||||||
"feature": f"{self.pack.name}:plant/{self.patch.name}",
|
"feature": f"{self.pack.name}:crop/{self.patch.name}",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ def test_asJsonBlob(blob:JsonBlob):
|
|||||||
"tries": 58,
|
"tries": 58,
|
||||||
"xz_spread": 3,
|
"xz_spread": 3,
|
||||||
"y_spread": 1.5,
|
"y_spread": 1.5,
|
||||||
"feature": "test:plant/poppy"
|
"feature": "test:crop/poppy"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
""").strip()
|
""").strip()
|
||||||
|
|||||||
@@ -26,3 +26,6 @@ class Spawn[SpawnableKind: Spawnable, EcotypeKind: Ecotype]:
|
|||||||
f"spawnable={self.spawnable!r}"
|
f"spawnable={self.spawnable!r}"
|
||||||
")"
|
")"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
return self.name
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ from mcpacker.write.datapack.disablefeaturewriter import DisableFeatureWriter
|
|||||||
from mcpacker.write.datapack.disablespawnwriter import DisableSpawnWriter
|
from mcpacker.write.datapack.disablespawnwriter import DisableSpawnWriter
|
||||||
from mcpacker.write.datapack.metawriter import DataPackMetaWriter
|
from mcpacker.write.datapack.metawriter import DataPackMetaWriter
|
||||||
from mcpacker.write.datapack.writer import DataPackWriter
|
from mcpacker.write.datapack.writer import DataPackWriter
|
||||||
|
from mcpacker.write.datapack.plantwriter import PlantWriter
|
||||||
from mcpacker.write.incontrol.spawnerwriter import SpawnerWriter
|
from mcpacker.write.incontrol.spawnerwriter import SpawnerWriter
|
||||||
from mcpacker.write.report.writer import ReportWriter
|
from mcpacker.write.report.writer import ReportWriter
|
||||||
from mcpacker.write.resourcepack.metawriter import ResourcePackMetaWriter
|
from mcpacker.write.resourcepack.metawriter import ResourcePackMetaWriter
|
||||||
@@ -74,6 +75,7 @@ class Runner:
|
|||||||
DataPackWriter(p, o, [
|
DataPackWriter(p, o, [
|
||||||
DataPackMetaWriter(p, o, 48),
|
DataPackMetaWriter(p, o, 48),
|
||||||
DepositWriter(p, o),
|
DepositWriter(p, o),
|
||||||
|
PlantWriter(p, o),
|
||||||
DisableFeatureWriter(p, o),
|
DisableFeatureWriter(p, o),
|
||||||
DisableSpawnWriter(p, o),
|
DisableSpawnWriter(p, o),
|
||||||
]),
|
]),
|
||||||
|
|||||||
@@ -0,0 +1,119 @@
|
|||||||
|
from mcpacker.format.datapack.biomemodifier.addfeature import AddFeatureBiomeModifier
|
||||||
|
from mcpacker.format.datapack.configuredfeature.crop import CropConfiguredFeature
|
||||||
|
from mcpacker.format.datapack.configuredfeature.patch import PatchConfiguredFeature
|
||||||
|
from mcpacker.format.datapack.configuredfeature.tree import TreeConfiguredFeature
|
||||||
|
from mcpacker.format.datapack.placedfeature.crop import CropPlacedFeature
|
||||||
|
from mcpacker.format.datapack.placedfeature.patch import PatchPlacedFeature
|
||||||
|
from mcpacker.write.writer import Writer
|
||||||
|
from mcpacker.model.flora.patch import Patch
|
||||||
|
from mcpacker.model.flora.tree import Tree
|
||||||
|
from mcpacker.model.modpack import ModPack
|
||||||
|
from mcpacker.write.json import dumps
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import mcpacker.model.altitude as AL
|
||||||
|
import mcpacker.format.datapack.generationstep as GE
|
||||||
|
|
||||||
|
|
||||||
|
# Class ############################################################################################
|
||||||
|
|
||||||
|
class PlantWriter(Writer):
|
||||||
|
|
||||||
|
def __init__(self, pack:ModPack, outputDir:Path):
|
||||||
|
super().__init__(pack, outputDir)
|
||||||
|
|
||||||
|
def doWrite(self):
|
||||||
|
self._writeBiomeModifiers()
|
||||||
|
self._writeCropConfiguredFeatures()
|
||||||
|
self._writeCropPlacedFeatures()
|
||||||
|
self._writePatchConfiguredFeatures()
|
||||||
|
self._writePatchPlacedFeatures()
|
||||||
|
self._writeTreeConfiguredFeatures()
|
||||||
|
self._writeTreePlacedFeatures()
|
||||||
|
|
||||||
|
# Private Methods ##########################################################
|
||||||
|
|
||||||
|
def _writeBiomeModifiers(self):
|
||||||
|
modName = self.pack.name
|
||||||
|
|
||||||
|
for biome in self.pack.world.biomes:
|
||||||
|
features:list[str] = []
|
||||||
|
for spawn in self.pack.world.plantSpawns:
|
||||||
|
if not spawn.habitat.accepts(biome): continue
|
||||||
|
|
||||||
|
kind = None
|
||||||
|
if isinstance(spawn.plant, Patch):
|
||||||
|
kind = "patch"
|
||||||
|
if isinstance(spawn.plant, Tree):
|
||||||
|
kind = "tree"
|
||||||
|
|
||||||
|
if not kind: continue
|
||||||
|
|
||||||
|
features.append(f"{self.pack.name}:{kind}/{spawn.plant.name}")
|
||||||
|
|
||||||
|
modifier = AddFeatureBiomeModifier(str(biome.gameId), features, GE.STRONGHOLDS)
|
||||||
|
path = self.locator.biomeModifiers() / f"add_{biome.gameId.name!s}_plants.json"
|
||||||
|
self.resetOutputFile(path)
|
||||||
|
path.write_text(dumps(modifier.asJsobBlob()))
|
||||||
|
|
||||||
|
def _writeCropConfiguredFeatures(self):
|
||||||
|
for spawn in self.pack.world.plantSpawns:
|
||||||
|
if not isinstance(spawn.plant, Patch): continue
|
||||||
|
|
||||||
|
feature = CropConfiguredFeature(spawn.plant)
|
||||||
|
path = self.locator.configuredFeatures() / "crop" / f"{spawn.name}.json"
|
||||||
|
self.resetOutputFile(path)
|
||||||
|
path.write_text(dumps(feature.asJsonBlob()))
|
||||||
|
|
||||||
|
def _writeCropPlacedFeatures(self):
|
||||||
|
for spawn in self.pack.world.plantSpawns:
|
||||||
|
if not isinstance(spawn.plant, Patch): continue
|
||||||
|
|
||||||
|
feature = CropPlacedFeature(self.pack, spawn)
|
||||||
|
path = self.locator.placedFeatures() / "crop" / f"{spawn.name}.json"
|
||||||
|
self.resetOutputFile(path)
|
||||||
|
path.write_text(dumps(feature.asJsonBlob()))
|
||||||
|
|
||||||
|
def _writePatchConfiguredFeatures(self):
|
||||||
|
for spawn in self.pack.world.plantSpawns:
|
||||||
|
if not isinstance(spawn.plant, Patch): continue
|
||||||
|
|
||||||
|
feature = PatchConfiguredFeature(self.pack, spawn.plant)
|
||||||
|
path = self.locator.configuredFeatures() / "patch" / f"{spawn!s}.json"
|
||||||
|
self.resetOutputFile(path)
|
||||||
|
path.write_text(dumps(feature.asJsonBlob()))
|
||||||
|
|
||||||
|
def _writePatchPlacedFeatures(self):
|
||||||
|
for spawn in self.pack.world.plantSpawns:
|
||||||
|
if not isinstance(spawn.plant, Patch): continue
|
||||||
|
|
||||||
|
for altitude in AL.ALL:
|
||||||
|
band = AL.intersect(altitude, spawn.habitat.altitude)
|
||||||
|
if not band: continue
|
||||||
|
|
||||||
|
feature = PatchPlacedFeature(self.pack, spawn, altitude)
|
||||||
|
path = self.locator.placedFeatures() / "patch" / f"{spawn!s}_{band.name!s}.json"
|
||||||
|
self.resetOutputFile(path)
|
||||||
|
path.write_text(dumps(feature.asJsonBlob()))
|
||||||
|
|
||||||
|
def _writeTreeConfiguredFeatures(self):
|
||||||
|
for spawn in self.pack.world.plantSpawns:
|
||||||
|
if not isinstance(spawn.plant, Tree): continue
|
||||||
|
|
||||||
|
feature = TreeConfiguredFeature(spawn.plant)
|
||||||
|
path = self.locator.configuredFeatures() / "tree" / f"{spawn!s}.json"
|
||||||
|
self.resetOutputFile(path)
|
||||||
|
path.write_text(dumps(feature.asJsonBlob()))
|
||||||
|
|
||||||
|
def _writeTreePlacedFeatures(self):
|
||||||
|
for spawn in self.pack.world.plantSpawns:
|
||||||
|
if not isinstance(spawn.plant, Tree): continue
|
||||||
|
|
||||||
|
for altitude in AL.ALL:
|
||||||
|
band = AL.intersect(altitude, spawn.habitat.altitude)
|
||||||
|
if not band: continue
|
||||||
|
|
||||||
|
feature = PatchPlacedFeature(self.pack, spawn, altitude)
|
||||||
|
path = self.locator.placedFeatures() / "tree" / f"{spawn!s}_{band.name!s}.json"
|
||||||
|
self.resetOutputFile(path)
|
||||||
|
path.write_text(dumps(feature.asJsonBlob()))
|
||||||
Reference in New Issue
Block a user