Fine tune spawns across all biomes

This commit is contained in:
Andrew Miner
2025-10-28 23:23:06 -06:00
parent 5ccd48908a
commit e3e870377a
12 changed files with 438 additions and 191 deletions
+19 -11
View File
@@ -1,7 +1,10 @@
from mcpacker.model.modpack import ModPack
from mcpacker.model.geology.mineralspawn import MineralSpawn
from mcpacker.model.ecology.biome import Biome
from mcpacker.format.report.composer import ReportComposer from mcpacker.format.report.composer import ReportComposer
from mcpacker.model.altitude import Altitude
from mcpacker.model.ecology.biome import Biome
from mcpacker.model.fauna.mob import Mob
from mcpacker.model.flora.plant import Plant
from mcpacker.model.geology.mineralspawn import MineralSpawn
from mcpacker.model.modpack import ModPack
from pathlib import Path from pathlib import Path
import mcpacker.model.altitude as AL import mcpacker.model.altitude as AL
@@ -41,34 +44,39 @@ class BiomeReport(ReportComposer):
def _composeFaunaSection(self, biome:Biome): def _composeFaunaSection(self, biome:Biome):
self.line().line("Fauna:").indent() self.line().line("Fauna:").indent()
faunaLineCount = 0 faunaLines:list[tuple[Mob, Altitude]] = []
for mob in self.pack.world.mobs: for mob in self.pack.world.mobs:
altitude = None altitude = None
for spawn in self.pack.world.mobSpawns: for spawn in self.pack.world.mobSpawns:
if spawn.mob != mob: continue
if not spawn.habitat.accepts(biome): continue if not spawn.habitat.accepts(biome): continue
if spawn.ecotype.location == LO.CAVE: continue if spawn.ecotype.location == LO.CAVE: continue
altitude = AL.span(altitude or spawn.habitat.altitude, spawn.habitat.altitude) altitude = AL.span(altitude or spawn.habitat.altitude, spawn.habitat.altitude)
if altitude != None: if altitude != None:
self.line(f"{mob.name} @ {altitude}") faunaLines.append((mob, altitude))
faunaLineCount += 1
if faunaLineCount == 0: for line in sorted(faunaLines, reverse=True, key=lambda p: (p[1].bottom, p[1].top)):
self.line(f"{line[0]} @ {line[1]}")
if len(faunaLines) == 0:
self.line("<no fauna>") self.line("<no fauna>")
self.outdent() # fauna self.outdent() # fauna
def _composeFloraSection(self, biome:Biome): def _composeFloraSection(self, biome:Biome):
self.line().line("Flora:").indent() self.line().line("Flora:").indent()
floraLineCount = 0 floraLines:list[tuple[Plant, Altitude]] = []
for spawn in self.pack.world.plantSpawns: for spawn in self.pack.world.plantSpawns:
if not spawn.habitat.accepts(biome): continue if not spawn.habitat.accepts(biome): continue
self.line(f"{spawn.plant.name} @ {spawn.habitat.altitude}") floraLines.append((spawn.plant, spawn.habitat.altitude))
floraLineCount += 1
if floraLineCount == 0: for line in sorted(floraLines, reverse=True, key=lambda p: (p[1].bottom, p[1].top)):
self.line(f"{line[0]} @ {line[1]}")
if len(floraLines) == 0:
self.line("<no flora>") self.line("<no flora>")
self.outdent() # flora self.outdent() # flora
+13 -6
View File
@@ -1,4 +1,5 @@
from mcpacker.format.report.composer import ReportComposer from mcpacker.format.report.composer import ReportComposer
from mcpacker.model.ecology.biomefilter import BiomeFilter
from mcpacker.model.ecology.biometrait import BiomeTrait from mcpacker.model.ecology.biometrait import BiomeTrait
from mcpacker.model.modpack import ModPack from mcpacker.model.modpack import ModPack
from pathlib import Path from pathlib import Path
@@ -10,17 +11,17 @@ class MobSpawnReport(ReportComposer):
def doCompose(self): def doCompose(self):
for mob in self.pack.world.mobs: for mob in self.pack.world.mobs:
self.line(f"Mob: {mob.name}") self.line(f"Mob: {mob.name}").indent()
self.indent()
needsDelimiter = False needsDelimiter = False
habitat = None
for spawn in self.pack.world.mobSpawns: for spawn in self.pack.world.mobSpawns:
if spawn.mob != mob: continue if spawn.mob != mob: continue
habitat = spawn.habitat habitat = spawn.habitat
ecotype = spawn.ecotype ecotype = spawn.ecotype
self.line().text("Spawn: ").line(spawn.name) self.line().text("Spawn: ").line(spawn.name).indent()
self.indent()
self.text("altitude: ").line(habitat.altitude) self.text("altitude: ").line(habitat.altitude)
self.text("biomeFilter: ") self.text("biomeFilter: ")
self.line(" -OR- ".join(str(b) for b in habitat.biomeFilters)) self.line(" -OR- ".join(str(b) for b in habitat.biomeFilters))
@@ -29,7 +30,13 @@ class MobSpawnReport(ReportComposer):
self.text("group: ").line(ecotype.group) self.text("group: ").line(ecotype.group)
self.text("location: ").line(ecotype.location) self.text("location: ").line(ecotype.location)
self.text("scarcity: ").line(ecotype.scarcity) self.text("scarcity: ").line(ecotype.scarcity)
self.outdent() self.outdent() # spawn
self.outdent() if habitat:
self.line().line("Biomes:").indent()
for biome in BiomeFilter.collate(self.pack.world.biomes, habitat.biomeFilters):
self.line(biome)
self.outdent() # biomes
self.outdent() # mob
self.line() self.line()
@@ -86,4 +86,6 @@ def test_write(report:MobSpawnReport):
group: troup (3 to 6) group: troup (3 to 6)
location: outside location: outside
scarcity: common scarcity: common
Biomes:
""").strip() """).strip()
+2 -3
View File
@@ -1,4 +1,3 @@
from collections.abc import Sequence
from collections.abc import Iterable from collections.abc import Iterable
from mcpacker.model.resourceid import ResourceId from mcpacker.model.resourceid import ResourceId
from mcpacker.model.ecology.biome import Biome from mcpacker.model.ecology.biome import Biome
@@ -43,8 +42,8 @@ class BiomeFilter:
def __init__( def __init__(
self, self,
required:Sequence[BiomeTrait|ResourceId|Sequence[BiomeTrait]]|None=None, required:Iterable[BiomeTrait|ResourceId|Iterable[BiomeTrait]]|None=None,
prohibited:Sequence[BiomeTrait|ResourceId]|None=None, prohibited:Iterable[BiomeTrait|ResourceId]|None=None,
): ):
self.required = list(required or []) self.required = list(required or [])
self.prohibited = list(prohibited or []) self.prohibited = list(prohibited or [])
+2 -2
View File
@@ -54,6 +54,6 @@ class Habitat:
def accepts(self, biome:Biome) -> bool: def accepts(self, biome:Biome) -> bool:
for biomeFilter in self.biomeFilters: for biomeFilter in self.biomeFilters:
if not biomeFilter.accepts(biome): return False if biomeFilter.accepts(biome): return True
return True return False
+6 -6
View File
@@ -27,7 +27,7 @@ def addBiomes(pack:ModPack):
)) ))
biomes.add(Biome("helsinki", "minecraft:birch_forest", biomes.add(Biome("helsinki", "minecraft:birch_forest",
FL.FOREST, GE.SEDIMENTARY, HE.TEMPERATE, HU.WET, SO.ACIDIC, WA.INLAND FL.FOREST, GE.SEDIMENTARY, HE.TEMPERATE, HU.DAMP, SO.ACIDIC, WA.INLAND
)) ))
biomes.add(Biome("tokyo", "minecraft:cherry_grove", biomes.add(Biome("tokyo", "minecraft:cherry_grove",
@@ -35,7 +35,7 @@ def addBiomes(pack:ModPack):
)) ))
biomes.add(Biome("boston", "minecraft:cold_ocean", biomes.add(Biome("boston", "minecraft:cold_ocean",
FL.BARREN, GE.SEDIMENTARY, HE.BOREAL, HU.DAMP, SO.CLAYEY, WA.OCEAN FL.BARREN, GE.SEDIMENTARY, HE.BOREAL, HU.WET, SO.CLAYEY, WA.OCEAN
)) ))
biomes.add(Biome("freiburg", "minecraft:dark_forest", biomes.add(Biome("freiburg", "minecraft:dark_forest",
@@ -119,11 +119,11 @@ def addBiomes(pack:ModPack):
)) ))
biomes.add(Biome("sanfrancisco", "minecraft:ocean", biomes.add(Biome("sanfrancisco", "minecraft:ocean",
FL.BARREN, GE.IGNEOUS, HE.TEMPERATE, HU.DAMP, SO.SANDY, WA.OCEAN FL.BARREN, GE.IGNEOUS, HE.TEMPERATE, HU.WET, SO.SANDY, WA.OCEAN
)) ))
biomes.add(Biome("minsk", "minecraft:old_growth_birch_forest", biomes.add(Biome("minsk", "minecraft:old_growth_birch_forest",
FL.FOREST, GE.SEDIMENTARY, HE.TEMPERATE, HU.WET, SO.SANDY, WA.INLAND FL.FOREST, GE.SEDIMENTARY, HE.TEMPERATE, HU.DAMP, SO.ACIDIC, WA.INLAND
)) ))
biomes.add(Biome("stpetersburg", "minecraft:old_growth_pine_taiga", biomes.add(Biome("stpetersburg", "minecraft:old_growth_pine_taiga",
@@ -187,11 +187,11 @@ def addBiomes(pack:ModPack):
)) ))
biomes.add(Biome("irkutsk", "minecraft:taiga", biomes.add(Biome("irkutsk", "minecraft:taiga",
FL.FOREST, GE.IGNEOUS, HE.BOREAL, HU.DAMP, SO.ACIDIC, WA.INLAND FL.FOREST, GE.METAMORPHIC, HE.BOREAL, HU.DAMP, SO.ACIDIC, WA.INLAND
)) ))
biomes.add(Biome("nassau", "minecraft:warm_ocean", biomes.add(Biome("nassau", "minecraft:warm_ocean",
FL.BARREN, GE.SEDIMENTARY, HE.TROPICAL, HU.SOAKED, SO.SANDY, WA.COAST FL.BARREN, GE.SEDIMENTARY, HE.TROPICAL, HU.SOAKED, SO.SANDY, WA.OCEAN
)) ))
biomes.add(Biome("stirling", "minecraft:windswept_forest", biomes.add(Biome("stirling", "minecraft:windswept_forest",
@@ -22,8 +22,8 @@ def addMineralSpawns(pack:ModPack):
# Aluminum Family ########################################################## # Aluminum Family ##########################################################
b.start(minerals["basalt"]) b.start(minerals["basalt"])
b.biomeFilters = BF([HE.TROPICAL, HU.SOAKED, WA.INLAND]) b.biomeFilters = BF([HE.TROPICAL, (HU.WET, HU.SOAKED)], [SO.FUNGAL, WA.OCEAN])
b.save("aluminum-indicator") b.save("aluminum-indicator-basalt")
b.switch(minerals["aluminum"]) b.switch(minerals["aluminum"])
b.altitude = AL.span(AL.SUBSTRATE, AL.OVERBURDEN) b.altitude = AL.span(AL.SUBSTRATE, AL.OVERBURDEN)
@@ -48,7 +48,7 @@ def addMineralSpawns(pack:ModPack):
b.start(minerals["tuff"]) b.start(minerals["tuff"])
b.biomeFilters = BF([GE.SEDIMENTARY, HE.TEMPERATE, HU.SOAKED]) b.biomeFilters = BF([GE.SEDIMENTARY, HE.TEMPERATE, HU.SOAKED])
b.save("coal-indicator") b.save("coal-indicator-tuff")
b.switch(minerals["coal"]) b.switch(minerals["coal"])
b.altitude = AL.span(AL.SUBSTRATE, AL.OVERBURDEN) b.altitude = AL.span(AL.SUBSTRATE, AL.OVERBURDEN)
@@ -69,37 +69,61 @@ def addMineralSpawns(pack:ModPack):
b.scarcity = SC.UNUSUAL b.scarcity = SC.UNUSUAL
b.save("coal-tertiary-iron") b.save("coal-tertiary-iron")
# Copper Family ############################################################ # Copper (oxidizedcap) Family ##############################################
b.start(minerals["diorite"]) b.start(minerals["sandstone"])
b.biomeFilters = BF([GE.SEDIMENTARY, HE.SUBTROPICAL, HU.DRY]) b.biomeFilters = BF([GE.SEDIMENTARY, HE.SUBTROPICAL, (HU.ARID, HU.DRY)])
b.save("copper-indicator") b.save("copper-oxidizedcap-indicator-sandstone")
b.switch(minerals["copper"]) b.switch(minerals["copper"])
b.altitude = AL.CRUST b.altitude = AL.CRUST
b.bulk = BU.MEDIUM b.bulk = BU.MEDIUM
b.scarcity = SC.UNCOMMON b.scarcity = SC.UNCOMMON
b.save("copper-primary-copper") b.save("copper-oxidizedcap-primary-copper")
b.switch(minerals["iron"])
b.altitude = AL.CRUST
b.bulk = BU.SMALL
b.scarcity = SC.UNUSUAL
b.save("copper-oxidizedcap-secondary-iron")
b.switch(minerals["sulfur"])
b.altitude = AL.CRUST
b.bulk = BU.TINY
b.scarcity = SC.RARE
b.save("copper-oxidizedcap-tertiary-sulfur")
# Copper (porphyry) Family ##################################################
b.start(minerals["diorite"])
b.biomeFilters = BF([GE.IGNEOUS, (HE.SUBTROPICAL, HE.FROZEN), SO.ROCKY])
b.save("copper-porphyry-indicator-diorite")
b.switch(minerals["copper"])
b.altitude = AL.CRUST
b.bulk = BU.MEDIUM
b.scarcity = SC.UNCOMMON
b.save("copper-porphyry-primary-copper")
b.switch(minerals["redstone"]) b.switch(minerals["redstone"])
b.altitude = AL.MANTLE b.altitude = AL.MANTLE
b.bulk = BU.SMALL b.bulk = BU.SMALL
b.scarcity = SC.UNUSUAL b.scarcity = SC.UNUSUAL
b.save("copper-secondary-redstone") b.save("copper-porphyry-secondary-redstone")
b.switch(minerals["gold"]) b.switch(minerals["gold"])
b.altitude = AL.span(AL.CRUST, AL.MANTLE) b.altitude = AL.span(AL.CRUST, AL.MANTLE)
b.bulk = BU.TINY b.bulk = BU.TINY
b.scarcity = SC.RARE b.scarcity = SC.RARE
b.save("copper-tertiary-gold") b.save("copper-porphyry-tertiary-gold")
# Gold Family ############################################################## # Gold Family ##############################################################
b.start(minerals["marble"]) b.start(minerals["marble"])
b.biomeFilters = BF([GE.METAMORPHIC, HE.BOREAL, HU.DRY]) b.biomeFilters = BF([GE.METAMORPHIC, (HE.BOREAL, HE.FROZEN), SO.ROCKY])
b.save("gold-indicator") b.save("gold-indicator-marble")
b.start(minerals["quartz"]) b.switch(minerals["quartz"])
b.altitude = AL.span(AL.CRAGS, AL.PEAKS) b.altitude = AL.span(AL.CRAGS, AL.PEAKS)
b.bulk = BU.MEDIUM b.bulk = BU.MEDIUM
b.scarcity = SC.SPARSE b.scarcity = SC.SPARSE
@@ -123,37 +147,65 @@ def addMineralSpawns(pack:ModPack):
b.scarcity = SC.RARE b.scarcity = SC.RARE
b.save("gold-quarternary-emerald") b.save("gold-quarternary-emerald")
# Iron Family ############################################################## # Iron (banded) Family ##############################################################
b.start(minerals["andesite"]) b.start(minerals["diorite"])
b.biomeFilters = BF([GE.SEDIMENTARY, HE.TEMPERATE, HU.WET]) b.biomeFilters = BF(
b.save("iron-indicator") [FL.within(FL.CANOPY, FL.CLEARING), GE.METAMORPHIC, (HE.BOREAL, HE.FROZEN)]
)
b.save("iron-banded-indicator-diorite")
b.start(minerals["iron"]) b.switch(minerals["iron"])
b.altitude = AL.CRUST b.altitude = AL.span(AL.OVERBURDEN, AL.CRUST)
b.bulk = BU.MEDIUM b.bulk = BU.LARGE
b.scarcity = SC.COMMON b.scarcity = SC.UNCOMMON
b.save("iron-primary-iron") b.save("iron-banded-primary-iron")
b.switch(minerals["quartz"]) b.switch(minerals["quartz"])
b.altitude = AL.CRUST b.altitude = AL.span(AL.OVERBURDEN, AL.CRUST)
b.bulk = BU.SMALL b.bulk = BU.MEDIUM
b.scarcity = SC.UNUSUAL b.scarcity = SC.UNUSUAL
b.save("iron-secondary-quartz") b.save("iron-banded-secondary-quartz")
b.switch(minerals["uranium"]) b.switch(minerals["uranium"])
b.altitude = AL.MANTLE b.altitude = AL.CRUST
b.bulk = BU.TINY b.bulk = BU.SMALL
b.scarcity = SC.UNCOMMON
b.save("iron-banded-tertiary-uranium")
# Iron (bog) Family ##############################################################
b.start(minerals["andesite"])
b.biomeFilters = BF([FL.FOREST, GE.SEDIMENTARY, HE.TEMPERATE], [WA.SWAMP])
b.save("iron-bog-indicator-andesite")
b.switch(minerals["coal"])
b.altitude = AL.SOIL
b.bulk = BU.SMALL
b.depositType = DE.DISK
b.scarcity = SC.UNCOMMON
b.save("iron-bog-primary-coal")
b.switch(minerals["iron"])
b.altitude = AL.span(AL.SOIL, AL.DUNES)
b.bulk = BU.MEDIUM
b.depositType = DE.DISK
b.scarcity = SC.UNCOMMON
b.save("iron-bog-secondary-iron")
b.switch(minerals["uranium"])
b.altitude = AL.SOIL
b.bulk = BU.SMALL
b.scarcity = SC.RARE b.scarcity = SC.RARE
b.save("iron-tertiary-uranium") b.save("iron-bog-tertiary-uranium")
# Lead Family ############################################################## # Lead Family ##############################################################
b.start(minerals["dolostone"]) b.start(minerals["dolostone"])
b.biomeFilters = BF([GE.SEDIMENTARY, HE.TEMPERATE, HU.DAMP]) b.biomeFilters = BF([FL.FIELD, GE.SEDIMENTARY, HE.TEMPERATE, HU.DAMP])
b.save("lead-indicator") b.save("lead-indicator-dolostone")
b.start(minerals["lead"]) b.switch(minerals["lead"])
b.altitude = AL.CRUST b.altitude = AL.CRUST
b.bulk = BU.MEDIUM b.bulk = BU.MEDIUM
b.scarcity = SC.SPARSE b.scarcity = SC.SPARSE
@@ -171,6 +223,87 @@ def addMineralSpawns(pack:ModPack):
b.scarcity = SC.UNUSUAL b.scarcity = SC.UNUSUAL
b.save("lead-tertiary-silver") b.save("lead-tertiary-silver")
# Ocean (igneous) Family ###################################################
b.start(minerals["basalt"])
b.biomeFilters = BF([GE.IGNEOUS, WA.OCEAN])
b.save("ocean-igneous-indicator-basalt")
b.switch(minerals["tin"])
b.altitude = AL.CRUST
b.bulk = BU.MEDIUM
b.depositType = DE.VEIN
b.scarcity = SC.UNCOMMON
b.save("ocean-igneous-primary-tin")
b.switch(minerals["copper"])
b.altitude = AL.CRUST
b.bulk = BU.SMALL
b.depositType = DE.VEIN
b.scarcity = SC.SPARSE
b.save("ocean-igneous-secondary-copper")
b.switch(minerals["diamond"])
b.altitude = AL.MANTLE
b.bulk = BU.TINY
b.depositType = DE.VEIN
b.scarcity = SC.RARE
b.save("ocean-igneous-tertiary-diamond")
# Ocean (metamorphic) Family ###############################################
b.start(minerals["marble"])
b.biomeFilters = BF([GE.METAMORPHIC, WA.OCEAN])
b.save("ocean-metamorphic-indicator-marble")
b.switch(minerals["quartz"])
b.altitude = AL.CRUST
b.bulk = BU.LARGE
b.depositType = DE.STRATA
b.scarcity = SC.COMMON
b.save("ocean-metamorphic-primary-quartz")
b.switch(minerals["gold"])
b.altitude = AL.CRUST
b.bulk = BU.SMALL
b.depositType = DE.VEIN
b.scarcity = SC.UNUSUAL
b.save("ocean-metamorphic-secondary-gold")
b.switch(minerals["emerald"])
b.altitude = AL.MANTLE
b.bulk = BU.TINY
b.depositType = DE.VEIN
b.scarcity = SC.RARE
b.save("ocean-metamorphic-tertiary-emerald")
# Ocean (sedimentary) Family ###############################################
b.start(minerals["sandstone"])
b.biomeFilters = BF([GE.SEDIMENTARY, WA.OCEAN])
b.save("ocean-sedimentary-indicator-sandstone")
b.switch(minerals["iron"])
b.altitude = AL.CRUST
b.bulk = BU.MEDIUM
b.depositType = DE.STRATA
b.scarcity = SC.UNCOMMON
b.save("ocean-sedimentary-primary-iron")
b.switch(minerals["nickel"])
b.altitude = AL.CRUST
b.bulk = BU.SMALL
b.depositType = DE.DISK
b.scarcity = SC.SPARSE
b.save("ocean-sedimentary-secondary-nickel")
b.switch(minerals["lapis"])
b.altitude = AL.CRUST
b.bulk = BU.LARGE
b.depositType = DE.VEIN
b.scarcity = SC.SPARSE
b.save("ocean-sedimentary-tertiary-lapis")
# Plutonic Family ########################################################## # Plutonic Family ##########################################################
b.start(minerals["sulfur"]) b.start(minerals["sulfur"])
@@ -187,7 +320,7 @@ def addMineralSpawns(pack:ModPack):
b.start(minerals["chalk"]) b.start(minerals["chalk"])
b.biomeFilters = BF([GE.SEDIMENTARY, HE.TROPICAL, HU.ARID]) b.biomeFilters = BF([GE.SEDIMENTARY, HE.TROPICAL, HU.ARID])
b.save("salt-indicator") b.save("salt-indicator-chalk")
b.switch(minerals["salt"]) b.switch(minerals["salt"])
b.altitude = AL.span(AL.CRUST, AL.MANTLE) b.altitude = AL.span(AL.CRUST, AL.MANTLE)
@@ -219,11 +352,35 @@ def addMineralSpawns(pack:ModPack):
b.scarcity = SC.COMMON b.scarcity = SC.COMMON
b.save("soil-special-peat") b.save("soil-special-peat")
# Silver Family ###############################################################
b.start(minerals["diorite"])
b.biomeFilters = BF([GE.METAMORPHIC, HE.TEMPERATE, HU.SOAKED])
b.save("silver-indicator-diorite")
b.switch(minerals["quartz"])
b.altitude = AL.span(AL.CRUST, AL.LOWLANDS)
b.bulk = BU.MEDIUM
b.scarcity = SC.UNCOMMON
b.save("silver-primary-quartz")
b.switch(minerals["lead"])
b.altitude = AL.span(AL.SOIL, AL.OVERBURDEN)
b.bulk = BU.MEDIUM
b.scarcity = SC.SPARSE
b.save("silver-secondary-lead")
b.switch(minerals["silver"])
b.altitude = AL.CRUST
b.bulk = BU.SMALL
b.scarcity = SC.SPARSE
b.save("silver-tertiary-silver")
# Tin Family ############################################################### # Tin Family ###############################################################
b.start(minerals["granite"]) b.start(minerals["granite"])
b.biomeFilters = BF([GE.IGNEOUS, HE.BOREAL, HU.DRY]) b.biomeFilters = BF([GE.IGNEOUS, HE.BOREAL, SO.ROCKY])
b.save("tin-indicator") b.save("tin-indicator-granite")
b.switch(minerals["tin"]) b.switch(minerals["tin"])
b.altitude = AL.CRUST b.altitude = AL.CRUST
@@ -237,6 +394,34 @@ def addMineralSpawns(pack:ModPack):
b.scarcity = SC.UNUSUAL b.scarcity = SC.UNUSUAL
b.save("tin-secondary-copper") b.save("tin-secondary-copper")
# Volcanic Family ##########################################################
b.start(minerals["basalt"])
b.biomeFilters = BF([GE.IGNEOUS, SO.FUNGAL])
b.save("volcanic-indicator-basalt")
b.switch(minerals["sulfur"])
b.altitude = AL.span(AL.LOWLANDS, AL.CRUST)
b.bulk = BU.MEDIUM
b.scarcity = SC.UNCOMMON
b.save("volcanic-primary-sulfur")
b.switch(minerals["magma"])
b.altitude = AL.span(AL.SOIL, AL.CRUST)
b.bulk = BU.MEDIUM
b.scarcity = SC.SPARSE
b.save("volcanic-secondary-magma")
b.switch(minerals["diamond"])
b.altitude = AL.span(AL.CRUST, AL.MANTLE)
b.bulk = BU.TINY
b.depositType = DE.VEIN
b.scarcity = SC.UNUSUAL
b.save("volcanic-tertiary-diamond")
# TODO: All the Taiga biomes are missing mineral deposits
# TODO: Mushroom Fields doesn't have any minerals
""" """
vein strata vein strata
+45 -45
View File
@@ -9,58 +9,58 @@ import mcpacker.model.fauna.active as AC
def addMobs(pack:ModPack): def addMobs(pack:ModPack):
mobs = pack.world.mobs mobs = pack.world.mobs
mobs.add(Mob("animalplus:raccoon", AC.NOCTURNAL)) mobs.add(Mob("animalplus:raccoon", AC.NOCTURNAL))
mobs.add(Mob("animalplus:red_panda", AC.CREPUSCULAR)) mobs.add(Mob("animalplus:red_panda", AC.CREPUSCULAR))
mobs.add(Mob("bearminimum:black_bear", AC.CREPUSCULAR)) mobs.add(Mob("bearminimum:black_bear", AC.CREPUSCULAR))
mobs.add(Mob("bearminimum:brown_bear", AC.CREPUSCULAR)) mobs.add(Mob("bearminimum:brown_bear", AC.CREPUSCULAR))
mobs.add(Mob("cold_sweat:chameleon", AC.DIURNAL)) mobs.add(Mob("cold_sweat:chameleon", AC.DIURNAL))
mobs.add(Mob("crabbersdelight:crab", AC.CREPUSCULAR)) mobs.add(Mob("crabbersdelight:crab", AC.CREPUSCULAR))
mobs.add(Mob("immersiveengineering:bulwark")) mobs.add(Mob("immersiveengineering:bulwark"))
mobs.add(Mob("immersiveengineering:commando")) mobs.add(Mob("immersiveengineering:commando"))
mobs.add(Mob("immersiveengineering:fusilier")) mobs.add(Mob("immersiveengineering:fusilier"))
mobs.add(Mob("minecraft:armadillo", AC.NOCTURNAL)) mobs.add(Mob("minecraft:armadillo", AC.NOCTURNAL))
mobs.add(Mob("minecraft:blaze", AC.ANY)) mobs.add(Mob("minecraft:blaze", AC.ANY))
mobs.add(Mob("minecraft:bogged", AC.MIDNIGHT)) mobs.add(Mob("minecraft:bogged", AC.MIDNIGHT))
mobs.add(Mob("minecraft:camel", AC.CREPUSCULAR)) mobs.add(Mob("minecraft:camel", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:cat", AC.CREPUSCULAR)) mobs.add(Mob("minecraft:cat", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:cave_spider", AC.NOCTURNAL)) mobs.add(Mob("minecraft:cave_spider", AC.NOCTURNAL))
mobs.add(Mob("minecraft:chicken", AC.DIURNAL)) mobs.add(Mob("minecraft:chicken", AC.DIURNAL))
mobs.add(Mob("minecraft:cod", AC.DIURNAL)) mobs.add(Mob("minecraft:cod", AC.DIURNAL))
mobs.add(Mob("minecraft:cow", AC.DIURNAL)) mobs.add(Mob("minecraft:cow", AC.DIURNAL))
mobs.add(Mob("minecraft:creeper", AC.STORMY)) mobs.add(Mob("minecraft:creeper", AC.STORMY))
mobs.add(Mob("minecraft:dolphin", AC.DIURNAL)) mobs.add(Mob("minecraft:dolphin", AC.DIURNAL))
mobs.add(Mob("minecraft:donkey", AC.DIURNAL)) mobs.add(Mob("minecraft:donkey", AC.DIURNAL))
mobs.add(Mob("minecraft:drowned", AC.MIDNIGHT)) mobs.add(Mob("minecraft:drowned", AC.MIDNIGHT))
mobs.add(Mob("minecraft:enderman")) mobs.add(Mob("minecraft:enderman"))
mobs.add(Mob("minecraft:evoker")) mobs.add(Mob("minecraft:evoker"))
mobs.add(Mob("minecraft:fox", AC.CREPUSCULAR)) mobs.add(Mob("minecraft:fox", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:frog", AC.CREPUSCULAR)) mobs.add(Mob("minecraft:frog", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:glow_squid", AC.CREPUSCULAR)) mobs.add(Mob("minecraft:glow_squid", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:goat", AC.DIURNAL)) mobs.add(Mob("minecraft:goat", AC.DIURNAL))
mobs.add(Mob("minecraft:hoglin")) mobs.add(Mob("minecraft:hoglin"))
mobs.add(Mob("minecraft:horse", AC.DIURNAL)) mobs.add(Mob("minecraft:horse", AC.DIURNAL))
mobs.add(Mob("minecraft:husk", AC.MIDNIGHT)) mobs.add(Mob("minecraft:husk", AC.MIDNIGHT))
mobs.add(Mob("minecraft:llama", AC.DIURNAL)) mobs.add(Mob("minecraft:llama", AC.DIURNAL))
mobs.add(Mob("minecraft:magma_cube", AC.ANY)) mobs.add(Mob("minecraft:magma_cube", AC.ANY))
mobs.add(Mob("minecraft:mooshroom", AC.DIURNAL)) mobs.add(Mob("minecraft:mooshroom", AC.DIURNAL))
mobs.add(Mob("minecraft:mule", AC.DIURNAL)) mobs.add(Mob("minecraft:mule", AC.DIURNAL))
mobs.add(Mob("minecraft:ocelot", AC.NOCTURNAL)) mobs.add(Mob("minecraft:ocelot", AC.NOCTURNAL))
mobs.add(Mob("minecraft:panda", AC.CREPUSCULAR)) mobs.add(Mob("minecraft:panda", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:parrot", AC.DIURNAL)) mobs.add(Mob("minecraft:parrot", AC.DIURNAL))
mobs.add(Mob("minecraft:pig", AC.DIURNAL)) mobs.add(Mob("minecraft:pig", AC.DIURNAL))
mobs.add(Mob("minecraft:pillager")) mobs.add(Mob("minecraft:pillager"))
mobs.add(Mob("minecraft:polar_bear", AC.CREPUSCULAR)) mobs.add(Mob("minecraft:polar_bear", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:pufferfish", AC.DIURNAL)) mobs.add(Mob("minecraft:pufferfish", AC.DIURNAL))
mobs.add(Mob("minecraft:rabbit", AC.CREPUSCULAR)) mobs.add(Mob("minecraft:rabbit", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:ravager")) mobs.add(Mob("minecraft:ravager"))
mobs.add(Mob("minecraft:salmon", AC.DIURNAL)) mobs.add(Mob("minecraft:salmon", AC.DIURNAL))
mobs.add(Mob("minecraft:sheep", AC.DIURNAL)) mobs.add(Mob("minecraft:sheep", AC.DIURNAL))
mobs.add(Mob("minecraft:skeleton")) mobs.add(Mob("minecraft:skeleton"))
mobs.add(Mob("minecraft:slime", AC.RAINY)) mobs.add(Mob("minecraft:slime", AC.RAINY))
mobs.add(Mob("minecraft:spider", AC.NOCTURNAL)) mobs.add(Mob("minecraft:spider", AC.NOCTURNAL))
mobs.add(Mob("minecraft:squid", AC.CREPUSCULAR)) mobs.add(Mob("minecraft:squid", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:tropical_fish", AC.DIURNAL)) mobs.add(Mob("minecraft:tropical_fish", AC.DIURNAL))
mobs.add(Mob("minecraft:turtle", AC.NOCTURNAL)) mobs.add(Mob("minecraft:turtle", AC.NOCTURNAL))
mobs.add(Mob("minecraft:vex")) mobs.add(Mob("minecraft:vex"))
mobs.add(Mob("minecraft:villager")) mobs.add(Mob("minecraft:villager"))
mobs.add(Mob("minecraft:vindicator")) mobs.add(Mob("minecraft:vindicator"))
@@ -69,7 +69,7 @@ def addMobs(pack:ModPack):
mobs.add(Mob("minecraft:witch")) mobs.add(Mob("minecraft:witch"))
mobs.add(Mob("minecraft:wither_skeleton")) mobs.add(Mob("minecraft:wither_skeleton"))
mobs.add(Mob("minecraft:wither")) mobs.add(Mob("minecraft:wither"))
mobs.add(Mob("minecraft:wolf", AC.NOCTURNAL)) mobs.add(Mob("minecraft:wolf", AC.NOCTURNAL))
mobs.add(Mob("minecraft:zoglin")) mobs.add(Mob("minecraft:zoglin"))
mobs.add(Mob("minecraft:zombie_villager", AC.MIDNIGHT)) mobs.add(Mob("minecraft:zombie_villager", AC.MIDNIGHT))
mobs.add(Mob("minecraft:zombie")) mobs.add(Mob("minecraft:zombie"))
+29 -38
View File
@@ -29,7 +29,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["animalplus:raccoon"]) b.start(mobs["animalplus:raccoon"])
b.altitude = AL.span(AL.LOWLANDS, AL.HILLS) b.altitude = AL.span(AL.LOWLANDS, AL.HILLS)
b.biomeFilters = BF([(FL.CANOPY, FL.FOREST), HE.within(HE.TEMPERATE, HE.BOREAL)]) b.biomeFilters = BF([(FL.CANOPY, FL.FOREST), HE.TEMPERATE])
b.seasons = SE.exclude(SE.WINTER) b.seasons = SE.exclude(SE.WINTER)
b.group = GR.merge(GR.SOLO, GR.PAIR) b.group = GR.merge(GR.SOLO, GR.PAIR)
b.scarcity = SC.UNCOMMON b.scarcity = SC.UNCOMMON
@@ -41,7 +41,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["animalplus:red_panda"]) b.start(mobs["animalplus:red_panda"])
b.altitude = AL.span(AL.UPLANDS, AL.HILLS) b.altitude = AL.span(AL.UPLANDS, AL.HILLS)
b.biomeFilters = BF([ResourceId.parse("bamboo_forest")]) b.biomeFilters = BF([ResourceId.parse("bamboo_jungle")])
b.seasons = SE.ALL b.seasons = SE.ALL
b.group = GR.merge(GR.SOLO, GR.PAIR) b.group = GR.merge(GR.SOLO, GR.PAIR)
b.scarcity = SC.SPARSE b.scarcity = SC.SPARSE
@@ -53,32 +53,19 @@ def addMobSpawns(pack:ModPack):
b.seasons = SE.AUTUMN b.seasons = SE.AUTUMN
b.group = GR.merge(GR.SOLO, GR.FAMILY) b.group = GR.merge(GR.SOLO, GR.FAMILY)
b.scarcity = SC.UNCOMMON b.scarcity = SC.UNCOMMON
b.save("blackbear-temperate-autumn") b.save("blackbear-autumn")
b.seasons = [SE.SPRING, SE.SUMMER] b.seasons = [SE.SPRING, SE.SUMMER]
b.scarcity = SC.SPARSE b.scarcity = SC.SPARSE
b.save("blackbear-temperate-springsummer") b.save("blackbear-springsummer")
b.seasons = SE.WINTER b.seasons = SE.WINTER
b.scarcity = SC.UNUSUAL b.scarcity = SC.UNUSUAL
b.save("blackbear-temperate-winter") b.save("blackbear-winter")
b.biomeFilters = BF([HE.BOREAL, (FL.CANOPY, FL.FOREST)])
b.seasons = SE.AUTUMN
b.scarcity = SC.SPARSE
b.save("blackbear-boreal-autumn")
b.seasons = [SE.SPRING, SE.SUMMER]
b.scarcity = SC.UNUSUAL
b.save("blackbear-boreal-springsummer")
b.seasons = SE.WINTER
b.scarcity = SC.RARE
b.save("blackbear-boreal-winter")
b.start(mobs["minecraft:armadillo"]) b.start(mobs["minecraft:armadillo"])
b.altitude = AL.LOWLANDS b.altitude = AL.LOWLANDS
b.biomeFilters = BF([HE.SUBTROPICAL, HU.DRY, SO.CLAYEY]) b.biomeFilters = BF([HE.SUBTROPICAL, HU.ARID, (SO.CLAYEY, SO.ROCKY)])
b.seasons = SE.SUMMER b.seasons = SE.SUMMER
b.group = GR.merge(GR.SOLO, GR.PAIR) b.group = GR.merge(GR.SOLO, GR.PAIR)
b.scarcity = SC.COMMON b.scarcity = SC.COMMON
@@ -106,7 +93,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["bearminimum:brown_bear"]) b.start(mobs["bearminimum:brown_bear"])
b.altitude = AL.span(AL.LOWLANDS, AL.ALPINE) b.altitude = AL.span(AL.LOWLANDS, AL.ALPINE)
b.biomeFilters = BF([HE.BOREAL, (FL.CANOPY, FL.FOREST)]) b.biomeFilters = BF([(FL.CANOPY, FL.FOREST), HE.BOREAL])
b.seasons = SE.AUTUMN b.seasons = SE.AUTUMN
b.group = GR.SOLO b.group = GR.SOLO
b.scarcity = SC.SPARSE b.scarcity = SC.SPARSE
@@ -122,7 +109,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:camel"]) b.start(mobs["minecraft:camel"])
b.altitude = AL.span(AL.DUNES, AL.LOWLANDS) b.altitude = AL.span(AL.DUNES, AL.LOWLANDS)
b.biomeFilters = BF([HE.TROPICAL, HU.DRY, FL.BARREN, SO.SANDY]) b.biomeFilters = BF([HE.TROPICAL, HU.ARID, SO.SANDY])
b.seasons = SE.DRY b.seasons = SE.DRY
b.group = GR.FAMILY b.group = GR.FAMILY
b.scarcity = SC.UNUSUAL b.scarcity = SC.UNUSUAL
@@ -141,7 +128,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["cold_sweat:chameleon"]) b.start(mobs["cold_sweat:chameleon"])
b.altitude = AL.span(AL.DUNES, AL.UPLANDS) b.altitude = AL.span(AL.DUNES, AL.UPLANDS)
b.biomeFilters = BF([(FL.CANOPY, FL.FOREST), HE.TROPICAL, HU.WET, WA.INLAND]) b.biomeFilters = BF([(FL.CANOPY, FL.FOREST), HE.TROPICAL, HU.SOAKED])
b.seasons = SE.WET b.seasons = SE.WET
b.group = GR.merge(GR.SOLO, GR.FAMILY) b.group = GR.merge(GR.SOLO, GR.FAMILY)
b.scarcity = SC.COMMON b.scarcity = SC.COMMON
@@ -153,7 +140,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:chicken"]) b.start(mobs["minecraft:chicken"])
b.altitude = AL.span(AL.LOWLANDS, AL.UPLANDS) b.altitude = AL.span(AL.LOWLANDS, AL.UPLANDS)
b.biomeFilters = BF([FL.CLEARING, HE.TROPICAL, HU.WET], [SO.FUNGAL]) b.biomeFilters = BF([FL.CLEARING, HE.TROPICAL, HU.SOAKED], [SO.FUNGAL])
b.seasons = SE.SUMMER b.seasons = SE.SUMMER
b.group = GR.TROUP b.group = GR.TROUP
b.scarcity = SC.COMMON b.scarcity = SC.COMMON
@@ -173,8 +160,10 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:cow"]) b.start(mobs["minecraft:cow"])
b.altitude = AL.span(AL.LOWLANDS, AL.UPLANDS) b.altitude = AL.span(AL.LOWLANDS, AL.UPLANDS)
b.biomeFilters = \ b.biomeFilters = BF(
BF([HE.within(HE.SUBTROPICAL, HE.BOREAL), [HU.DAMP, HU.DRY], FL.FIELD], [SO.FUNGAL]) [FL.FIELD, HE.within(HE.SUBTROPICAL, HE.BOREAL), (HU.DAMP, HU.DRY)],
[SO.FUNGAL, SO.ROCKY]
)
b.seasons = [SE.SPRING, SE.SUMMER] b.seasons = [SE.SPRING, SE.SUMMER]
b.group = GR.HERD b.group = GR.HERD
b.scarcity = SC.SPARSE b.scarcity = SC.SPARSE
@@ -188,19 +177,19 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["crabbersdelight:crab"]) b.start(mobs["crabbersdelight:crab"])
b.altitude = AL.DUNES b.altitude = AL.DUNES
b.biomeFilters = BF([WA.COAST, [HE.TROPICAL, HE.SUBTROPICAL]]) b.biomeFilters = BF([(HE.TROPICAL, HE.SUBTROPICAL), WA.COAST])
b.seasons = SE.ALL b.seasons = SE.ALL
b.group = GR.SOLO b.group = GR.SOLO
b.scarcity = SC.UNCOMMON b.scarcity = SC.UNCOMMON
b.save("crab-warm") b.save("crab-warm")
b.biomeFilters = BF([WA.COAST, [HE.TEMPERATE, HE.BOREAL]]) b.biomeFilters = BF([(HE.TEMPERATE, HE.BOREAL), WA.COAST])
b.scarcity = SC.SPARSE b.scarcity = SC.SPARSE
b.save("crab-cool") b.save("crab-cool")
b.start(mobs["minecraft:dolphin"]) b.start(mobs["minecraft:dolphin"])
b.altitude = AL.span(AL.SURFACE, AL.DEEPS) b.altitude = AL.span(AL.SURFACE, AL.DEEPS)
b.biomeFilters = BF([WA.OCEAN, [HE.SUBTROPICAL, HE.TEMPERATE]]) b.biomeFilters = BF([(HE.SUBTROPICAL, HE.TEMPERATE), WA.OCEAN])
b.location = LO.WATER b.location = LO.WATER
b.seasons = SE.SUMMER b.seasons = SE.SUMMER
b.group = GR.FAMILY b.group = GR.FAMILY
@@ -213,7 +202,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:donkey"]) b.start(mobs["minecraft:donkey"])
b.altitude = AL.span(AL.UPLANDS, AL.HILLS) b.altitude = AL.span(AL.UPLANDS, AL.HILLS)
b.biomeFilters = BF([HE.SUBTROPICAL, HU.DRY, FL.FIELD]) b.biomeFilters = BF([FL.CLEARING, HE.SUBTROPICAL, HU.DRY])
b.seasons = [SE.SUMMER, SE.AUTUMN] b.seasons = [SE.SUMMER, SE.AUTUMN]
b.group = GR.FAMILY b.group = GR.FAMILY
b.scarcity = SC.SPARSE b.scarcity = SC.SPARSE
@@ -226,7 +215,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:fox"]) b.start(mobs["minecraft:fox"])
b.altitude = AL.span(AL.LOWLANDS, AL.HILLS) b.altitude = AL.span(AL.LOWLANDS, AL.HILLS)
b.biomeFilters = BF([HE.within(HE.TEMPERATE, HE.FROZEN), FL.FOREST]) b.biomeFilters = BF([FL.FOREST, HE.within(HE.TEMPERATE, HE.FROZEN), SO.ACIDIC])
b.seasons = [SE.SPRING] b.seasons = [SE.SPRING]
b.group = GR.FAMILY b.group = GR.FAMILY
b.scarcity = SC.UNCOMMON b.scarcity = SC.UNCOMMON
@@ -239,7 +228,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:frog"]) b.start(mobs["minecraft:frog"])
b.altitude = AL.span(AL.SURFACE, AL.DUNES) b.altitude = AL.span(AL.SURFACE, AL.DUNES)
b.biomeFilters = BF([(HE.TROPICAL, HE.TEMPERATE), HU.WET, WA.SWAMP]) b.biomeFilters = BF([WA.SWAMP])
b.group = GR.HERD b.group = GR.HERD
b.scarcity = SC.COMMON b.scarcity = SC.COMMON
b.seasons = SE.SUMMER b.seasons = SE.SUMMER
@@ -307,7 +296,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:ocelot"]) b.start(mobs["minecraft:ocelot"])
b.altitude = AL.span(AL.LOWLANDS, AL.HILLS) b.altitude = AL.span(AL.LOWLANDS, AL.HILLS)
b.biomeFilters = BF([FL.CANOPY, HE.TROPICAL, HU.WET]) b.biomeFilters = BF([FL.CANOPY, HE.TROPICAL])
b.group = GR.SOLO b.group = GR.SOLO
b.scarcity = SC.RARE b.scarcity = SC.RARE
b.seasons = SE.ALL b.seasons = SE.ALL
@@ -315,7 +304,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:panda"]) b.start(mobs["minecraft:panda"])
b.altitude = AL.span(AL.LOWLANDS, AL.UPLANDS) b.altitude = AL.span(AL.LOWLANDS, AL.UPLANDS)
b.biomeFilters = BF([ResourceId.parse("bamboo_forest")]) b.biomeFilters = BF([ResourceId.parse("bamboo_jungle")])
b.group = GR.SOLO b.group = GR.SOLO
b.scarcity = SC.UNUSUAL b.scarcity = SC.UNUSUAL
b.seasons = SE.exclude(SE.SPRING) b.seasons = SE.exclude(SE.SPRING)
@@ -327,13 +316,13 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:parrot"]) b.start(mobs["minecraft:parrot"])
b.altitude = AL.span(AL.DUNES, AL.HILLS) b.altitude = AL.span(AL.DUNES, AL.HILLS)
b.biomeFilters = BF([(FL.CANOPY, FL.FOREST), HE.TROPICAL, HU.WET]) b.biomeFilters = BF([FL.CANOPY, HE.TROPICAL])
b.group = GR.PAIR b.group = GR.PAIR
b.scarcity = SC.COMMON b.scarcity = SC.COMMON
b.seasons = SE.ALL b.seasons = SE.ALL
b.save("parrot-canopyforest") b.save("parrot-canopyforest")
b.biomeFilters = BF([FL.CLEARING, HE.TROPICAL, HU.WET], [SO.FUNGAL]) b.biomeFilters = BF([FL.CLEARING, HE.TROPICAL], [SO.FUNGAL])
b.scarcity = SC.UNCOMMON b.scarcity = SC.UNCOMMON
b.save("parrot-clearing") b.save("parrot-clearing")
@@ -341,7 +330,9 @@ def addMobSpawns(pack:ModPack):
b.altitude = AL.span(AL.LOWLANDS, AL.HILLS) b.altitude = AL.span(AL.LOWLANDS, AL.HILLS)
b.biomeFilters = BF([ b.biomeFilters = BF([
FL.within(FL.CANOPY, FL.CLEARING), FL.within(FL.CANOPY, FL.CLEARING),
HE.within(HE.SUBTROPICAL, HE.TEMPERATE) HE.within(HE.SUBTROPICAL, HE.BOREAL),
SO.LOAMY,
]) ])
b.group = GR.TROUP b.group = GR.TROUP
b.scarcity = SC.COMMON b.scarcity = SC.COMMON
@@ -395,7 +386,7 @@ def addMobSpawns(pack:ModPack):
b.save("rabbit-temperate-winter") b.save("rabbit-temperate-winter")
b.altitude = AL.span(AL.DUNES, AL.LOWLANDS) b.altitude = AL.span(AL.DUNES, AL.LOWLANDS)
b.biomeFilters = BF([FL.BARREN, HE.TROPICAL, HU.DRY]) b.biomeFilters = BF([FL.BARREN, HE.TROPICAL, HU.ARID])
b.group = GR.PAIR b.group = GR.PAIR
b.scarcity = SC.SPARSE b.scarcity = SC.SPARSE
b.seasons = SE.exclude(SE.SUMMER) b.seasons = SE.exclude(SE.SUMMER)
@@ -515,6 +506,6 @@ def addMobSpawns(pack:ModPack):
b.scarcity = SC.UNUSUAL b.scarcity = SC.UNUSUAL
b.save("wolf-arctic") b.save("wolf-arctic")
b.biomeFilters = BF([(FL.CLEARING, FL.FIELD), HE.SUBTROPICAL, WA.INLAND]) b.biomeFilters = BF([(FL.CLEARING, FL.FIELD), HE.SUBTROPICAL, WA.INLAND], [SO.ROCKY])
b.scarcity = SC.SPARSE b.scarcity = SC.SPARSE
b.save("wolf-savanna") b.save("wolf-savanna")
+7 -7
View File
@@ -64,13 +64,6 @@ def addPlants(pack:ModPack):
radius = 3, radius = 3,
)) ))
plants.add(Patch(
name = "cabbage",
blocks = f"{FD}:wild_cabbages",
density = DE.THIN,
radius = 4,
))
plants.add(Patch( plants.add(Patch(
name = "carrot", name = "carrot",
blocks = f"{FD}:wild_carrots", blocks = f"{FD}:wild_carrots",
@@ -142,6 +135,13 @@ def addPlants(pack:ModPack):
radius = 3, radius = 3,
)) ))
plants.add(Patch(
name = "lettuce",
blocks = f"{FD}:wild_cabbages",
density = DE.THIN,
radius = 4,
))
plants.add(Patch( plants.add(Patch(
name = "melon", name = "melon",
blocks = f"{MC}:melon", blocks = f"{MC}:melon",
@@ -37,7 +37,7 @@ def addPlantSpawns(pack:ModPack):
b.start(plants["bellpepper"]) b.start(plants["bellpepper"])
b.altitude = AL.LOWLANDS b.altitude = AL.LOWLANDS
b.biomeFilters = BF([FL.CLEARING, HE.TROPICAL, HU.WET, WA.INLAND]) b.biomeFilters = BF([FL.CLEARING, HE.TROPICAL, HU.SOAKED, WA.INLAND])
b.scarcity = SC.COMMON b.scarcity = SC.COMMON
b.save("bellpepper") b.save("bellpepper")
@@ -48,21 +48,14 @@ def addPlantSpawns(pack:ModPack):
b.save("blueberry") b.save("blueberry")
b.start(plants["brownmushroom"]) b.start(plants["brownmushroom"])
b.altitude = AL.span(AL.SOIL, AL.ALPINE) b.altitude = AL.span(AL.SOIL, AL.UPLANDS)
b.biomeFilters = [ b.biomeFilters = BF(
BF([(FL.CANOPY, FL.FOREST), (HE.TEMPERATE, HE.BOREAL), (SO.LOAMY, SO.CLAYEY)], [WA.OCEAN]), [HU.within(HU.DAMP, HU.SOAKED), (SO.CLAYEY, SO.LOAMY, SO.FUNGAL)],
BF([HU.WET], [HE.FROZEN, WA.OCEAN, WA.RIVER]), [HE.FROZEN, WA.OCEAN, WA.RIVER]
BF([SO.FUNGAL]), )
]
b.scarcity = SC.COMMON b.scarcity = SC.COMMON
b.save("brownmushroom") b.save("brownmushroom")
b.start(plants["cabbage"])
b.altitude = AL.HILLS
b.biomeFilters = BF([(HE.SUBTROPICAL, HE.TEMPERATE), SO.SANDY, WA.COAST])
b.scarcity = SC.COMMON
b.save("cabbage")
b.start(plants["carrot"]) b.start(plants["carrot"])
b.altitude = AL.LOWLANDS b.altitude = AL.LOWLANDS
b.biomeFilters = BF( b.biomeFilters = BF(
@@ -73,7 +66,7 @@ def addPlantSpawns(pack:ModPack):
b.start(plants["coffee"]) b.start(plants["coffee"])
b.altitude = AL.span(AL.HILLS, AL.ALPINE) b.altitude = AL.span(AL.HILLS, AL.ALPINE)
b.biomeFilters = BF([FL.CANOPY, HE.TROPICAL, HU.WET]) b.biomeFilters = BF([FL.CANOPY, HE.TROPICAL, HU.SOAKED])
b.scarcity = SC.SPARSE b.scarcity = SC.SPARSE
b.save("coffee") b.save("coffee")
@@ -97,7 +90,7 @@ def addPlantSpawns(pack:ModPack):
b.start(plants["cranberry"]) b.start(plants["cranberry"])
b.altitude = AL.DUNES b.altitude = AL.DUNES
b.biomeFilters = BF([HU.WET, SO.PEATY]) b.biomeFilters = BF([(HE.TEMPERATE, HE.BOREAL), WA.SWAMP])
b.scarcity = SC.UNCOMMON b.scarcity = SC.UNCOMMON
b.save("cranberry") b.save("cranberry")
@@ -106,13 +99,13 @@ def addPlantSpawns(pack:ModPack):
# "flax" as a fiberous, desert-dwelling cousin. # "flax" as a fiberous, desert-dwelling cousin.
b.start(plants["flax"]) b.start(plants["flax"])
b.altitude = AL.DUNES b.altitude = AL.DUNES
b.biomeFilters = BF([FL.BARREN, HU.DRY, SO.SANDY]) b.biomeFilters = BF([FL.BARREN, HU.ARID, SO.SANDY])
b.scarcity = SC.COMMON b.scarcity = SC.COMMON
b.save("flax") b.save("flax")
b.start(plants["hamimelon"]) b.start(plants["hamimelon"])
b.altitude = AL.span(AL.LOWLANDS, AL.UPLANDS) b.altitude = AL.span(AL.LOWLANDS, AL.UPLANDS)
b.biomeFilters = BF([FL.FIELD, HE.SUBTROPICAL, HU.DRY, (SO.LOAMY, SO.SANDY)]) b.biomeFilters = BF([FL.FIELD, HE.SUBTROPICAL, HU.ARID, (SO.LOAMY, SO.SANDY)])
b.scarcity = SC.RARE b.scarcity = SC.RARE
b.save("hamimelon") b.save("hamimelon")
@@ -130,9 +123,15 @@ def addPlantSpawns(pack:ModPack):
b.scarcity = SC.SPARSE b.scarcity = SC.SPARSE
b.save("lemon") b.save("lemon")
b.start(plants["lettuce"])
b.altitude = AL.HILLS
b.biomeFilters = BF([FL.FIELD, HE.TEMPERATE, SO.SANDY])
b.scarcity = SC.COMMON
b.save("lettuce")
b.start(plants["melon"]) b.start(plants["melon"])
b.altitude = AL.LOWLANDS b.altitude = AL.LOWLANDS
b.biomeFilters = BF([FL.CLEARING, HE.TROPICAL, HU.WET], [SO.FUNGAL]) b.biomeFilters = BF([FL.CLEARING, HE.TROPICAL, HU.SOAKED], [SO.FUNGAL])
b.scarcity = SC.SPARSE b.scarcity = SC.SPARSE
b.save("melon") b.save("melon")
@@ -147,7 +146,7 @@ def addPlantSpawns(pack:ModPack):
# a more cactus-like cousin of actual pineapples. # a more cactus-like cousin of actual pineapples.
b.start(plants["pineapple"]) b.start(plants["pineapple"])
b.altitude = AL.LOWLANDS b.altitude = AL.LOWLANDS
b.biomeFilters = BF([FL.BARREN, HE.TROPICAL, HU.DRY, SO.SANDY]) b.biomeFilters = BF([FL.BARREN, HE.TROPICAL, HU.ARID, SO.SANDY])
b.scarcity = SC.SPARSE b.scarcity = SC.SPARSE
# TODO: add sand as substrate in addplants.py # TODO: add sand as substrate in addplants.py
b.save("pineapple") b.save("pineapple")
@@ -165,12 +164,11 @@ def addPlantSpawns(pack:ModPack):
b.save("pumpkin") b.save("pumpkin")
b.start(plants["redmushroom"]) b.start(plants["redmushroom"])
b.altitude = AL.span(AL.SOIL, AL.ALPINE) b.altitude = AL.span(AL.SOIL, AL.UPLANDS)
b.biomeFilters = [ b.biomeFilters = BF(
BF([(FL.CANOPY, FL.FOREST), (HE.TEMPERATE, HE.BOREAL), (SO.LOAMY, SO.CLAYEY)]), [HU.within(HU.DAMP, HU.SOAKED), (SO.ACIDIC, SO.CLAYEY, SO.FUNGAL)],
BF([HU.WET], [HE.FROZEN, WA.OCEAN, WA.RIVER]), [HE.FROZEN, WA.OCEAN, WA.RIVER]
BF([SO.FUNGAL]), )
]
b.scarcity = SC.UNCOMMON b.scarcity = SC.UNCOMMON
b.save("redmushroom") b.save("redmushroom")
@@ -193,8 +191,8 @@ def addPlantSpawns(pack:ModPack):
b.save("sunflower") b.save("sunflower")
b.start(plants["tomato"]) b.start(plants["tomato"])
b.altitude = AL.span(AL.UPLANDS, AL.HILLS) b.altitude = AL.UPLANDS
b.biomeFilters = BF([FL.CLEARING, HE.TROPICAL, HU.WET], [SO.FUNGAL]) b.biomeFilters = BF([FL.CLEARING, HE.TROPICAL, (HU.DAMP, HU.SOAKED)], [SO.FUNGAL])
b.scarcity = SC.UNCOMMON b.scarcity = SC.UNCOMMON
b.save("tomato") b.save("tomato")
@@ -220,7 +218,7 @@ def addPlantSpawns(pack:ModPack):
b.start(plants["blueorchid"]) b.start(plants["blueorchid"])
b.altitude = AL.span(AL.LOWLANDS, AL.UPLANDS) b.altitude = AL.span(AL.LOWLANDS, AL.UPLANDS)
b.biomeFilters = BF([FL.CANOPY, HE.TROPICAL, HU.WET]) b.biomeFilters = BF([FL.CANOPY, HE.TROPICAL, HU.SOAKED])
b.scarcity = SC.RARE b.scarcity = SC.RARE
b.save("blueorchid") b.save("blueorchid")
@@ -326,8 +324,8 @@ def addPlantSpawns(pack:ModPack):
b.save("bayberry-tree") b.save("bayberry-tree")
b.start(plants["durian"]) b.start(plants["durian"])
b.altitude = AL.HILLS b.altitude = AL.UPLANDS
b.biomeFilters = BF([FL.within(FL.CANOPY, FL.CLEARING), HE.TROPICAL, HU.WET, SO.ACIDIC]) b.biomeFilters = BF([FL.FOREST, HE.TROPICAL, SO.ACIDIC])
b.scarcity = SC.UNUSUAL b.scarcity = SC.UNUSUAL
b.save("durian-tree") b.save("durian-tree")
@@ -338,28 +336,26 @@ def addPlantSpawns(pack:ModPack):
b.save("fig-tree") b.save("fig-tree")
b.start(plants["hawberry"]) b.start(plants["hawberry"])
b.altitude = AL.span(AL.UPLANDS, AL.HILLS) b.altitude = AL.span(AL.LOWLANDS, AL.UPLANDS)
b.biomeFilters = BF([(FL.FOREST, FL.CLEARING), HE.TEMPERATE, (SO.ACIDIC, SO.LOAMY)]) b.biomeFilters = BF([(FL.FOREST, FL.CLEARING), HE.TEMPERATE, SO.ACIDIC])
b.scarcity = SC.SPARSE b.scarcity = SC.SPARSE
b.save("hawberry-tree") b.save("hawberry-tree")
b.start(plants["lychee"]) b.start(plants["lychee"])
b.altitude = AL.UPLANDS b.altitude = AL.LOWLANDS
b.biomeFilters = BF([FL.CLEARING, HE.TROPICAL, HU.WET], [SO.FUNGAL]) b.biomeFilters = BF([FL.CANOPY, HE.TROPICAL, HU.SOAKED])
b.scarcity = SC.SPARSE b.scarcity = SC.SPARSE
b.save("lychee-tree") b.save("lychee-tree")
b.start(plants["mango"]) b.start(plants["mango"])
b.altitude = AL.LOWLANDS b.altitude = AL.LOWLANDS
b.biomeFilters = BF( b.biomeFilters = BF([FL.CANOPY, HE.TROPICAL, HU.SOAKED])
[FL.within(FL.CANOPY, FL.CLEARING), HE.TROPICAL, (HU.DAMP, HU.WET), SO.ACIDIC]
)
b.scarcity = SC.UNCOMMON b.scarcity = SC.UNCOMMON
b.save("mango-tree") b.save("mango-tree")
b.start(plants["mangosteen"]) b.start(plants["mangosteen"])
b.altitude = AL.UPLANDS b.altitude = AL.UPLANDS
b.biomeFilters = BF([FL.CANOPY, HE.TROPICAL, HU.WET, SO.ACIDIC]) b.biomeFilters = BF([FL.CANOPY, HE.TROPICAL, HU.SOAKED])
b.scarcity = SC.UNUSUAL b.scarcity = SC.UNUSUAL
b.save("mangosteen-tree") b.save("mangosteen-tree")
@@ -383,6 +379,6 @@ def addPlantSpawns(pack:ModPack):
b.start(plants["persimmon"]) b.start(plants["persimmon"])
b.altitude = AL.span(AL.LOWLANDS, AL.UPLANDS) b.altitude = AL.span(AL.LOWLANDS, AL.UPLANDS)
b.biomeFilters = BF([FL.FOREST, HE.TEMPERATE, SO.LOAMY]) b.biomeFilters = BF([FL.FIELD, HE.TEMPERATE, SO.LOAMY])
b.scarcity = SC.UNCOMMON b.scarcity = SC.UNCOMMON
b.save("persimmon-tree") b.save("persimmon-tree")
@@ -0,0 +1,59 @@
# Core Conceptual Mods:
* Alex's Mobs
* Cold Sweat
* Dynamic Trees
* Farmer's Delight
* Immersive Engineering
* Immersive Healing
* Railcraft Reborn
* Serene Seasons
* Thirst Was Taken
* Tectonic
# Extensions
* Brewin' and Chewin'
* Butchery
* Corn Delight
* Crabber's Delight
* Egg Delight
* Engineer's Delight
* Fruits Delight
* Miner's Delight
* Ocean's Delight
* Pizza Delight
* Realistic Wheat
* Rustic Delight
# Atmosphere & Decor
* Bear Minimum
* Chisels & Bits
* Comforts
* Dramatic Doors
* Dramatic Surroundings
* Flower Patch
* Flower Seeds
* Macaw's Bridges
* Macaw's Fences and Walls
* Macaw's Paths and Paving
* Macaw's Stairs
* Macaw's Windows
* Simplest Copper Gear
* Sky's Overworld Quartz
* Small Ships
* Storage Drawers
* Supplementaries
# Game Mechanics
* Better Safe Bed
* Biome Spawn Point
* Carry On
* Chunk Loaders
* InControl!
* Map Atlases
* Simple Finite Water Control
* Stack Refill
* You're in Grave Danger