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
+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