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.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
import mcpacker.model.altitude as AL
@@ -41,34 +44,39 @@ class BiomeReport(ReportComposer):
def _composeFaunaSection(self, biome:Biome):
self.line().line("Fauna:").indent()
faunaLineCount = 0
faunaLines:list[tuple[Mob, Altitude]] = []
for mob in self.pack.world.mobs:
altitude = None
for spawn in self.pack.world.mobSpawns:
if spawn.mob != mob: continue
if not spawn.habitat.accepts(biome): continue
if spawn.ecotype.location == LO.CAVE: continue
altitude = AL.span(altitude or spawn.habitat.altitude, spawn.habitat.altitude)
if altitude != None:
self.line(f"{mob.name} @ {altitude}")
faunaLineCount += 1
faunaLines.append((mob, altitude))
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.outdent() # fauna
def _composeFloraSection(self, biome:Biome):
self.line().line("Flora:").indent()
floraLineCount = 0
floraLines:list[tuple[Plant, Altitude]] = []
for spawn in self.pack.world.plantSpawns:
if not spawn.habitat.accepts(biome): continue
self.line(f"{spawn.plant.name} @ {spawn.habitat.altitude}")
floraLineCount += 1
floraLines.append((spawn.plant, spawn.habitat.altitude))
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.outdent() # flora
+13 -6
View File
@@ -1,4 +1,5 @@
from mcpacker.format.report.composer import ReportComposer
from mcpacker.model.ecology.biomefilter import BiomeFilter
from mcpacker.model.ecology.biometrait import BiomeTrait
from mcpacker.model.modpack import ModPack
from pathlib import Path
@@ -10,17 +11,17 @@ class MobSpawnReport(ReportComposer):
def doCompose(self):
for mob in self.pack.world.mobs:
self.line(f"Mob: {mob.name}")
self.indent()
self.line(f"Mob: {mob.name}").indent()
needsDelimiter = False
habitat = None
for spawn in self.pack.world.mobSpawns:
if spawn.mob != mob: continue
habitat = spawn.habitat
ecotype = spawn.ecotype
self.line().text("Spawn: ").line(spawn.name)
self.indent()
self.line().text("Spawn: ").line(spawn.name).indent()
self.text("altitude: ").line(habitat.altitude)
self.text("biomeFilter: ")
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("location: ").line(ecotype.location)
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()
@@ -86,4 +86,6 @@ def test_write(report:MobSpawnReport):
group: troup (3 to 6)
location: outside
scarcity: common
Biomes:
""").strip()
+2 -3
View File
@@ -1,4 +1,3 @@
from collections.abc import Sequence
from collections.abc import Iterable
from mcpacker.model.resourceid import ResourceId
from mcpacker.model.ecology.biome import Biome
@@ -43,8 +42,8 @@ class BiomeFilter:
def __init__(
self,
required:Sequence[BiomeTrait|ResourceId|Sequence[BiomeTrait]]|None=None,
prohibited:Sequence[BiomeTrait|ResourceId]|None=None,
required:Iterable[BiomeTrait|ResourceId|Iterable[BiomeTrait]]|None=None,
prohibited:Iterable[BiomeTrait|ResourceId]|None=None,
):
self.required = list(required or [])
self.prohibited = list(prohibited or [])
+2 -2
View File
@@ -54,6 +54,6 @@ class Habitat:
def accepts(self, biome:Biome) -> bool:
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",
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",
@@ -35,7 +35,7 @@ def addBiomes(pack:ModPack):
))
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",
@@ -119,11 +119,11 @@ def addBiomes(pack:ModPack):
))
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",
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",
@@ -187,11 +187,11 @@ def addBiomes(pack:ModPack):
))
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",
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",
@@ -22,8 +22,8 @@ def addMineralSpawns(pack:ModPack):
# Aluminum Family ##########################################################
b.start(minerals["basalt"])
b.biomeFilters = BF([HE.TROPICAL, HU.SOAKED, WA.INLAND])
b.save("aluminum-indicator")
b.biomeFilters = BF([HE.TROPICAL, (HU.WET, HU.SOAKED)], [SO.FUNGAL, WA.OCEAN])
b.save("aluminum-indicator-basalt")
b.switch(minerals["aluminum"])
b.altitude = AL.span(AL.SUBSTRATE, AL.OVERBURDEN)
@@ -48,7 +48,7 @@ def addMineralSpawns(pack:ModPack):
b.start(minerals["tuff"])
b.biomeFilters = BF([GE.SEDIMENTARY, HE.TEMPERATE, HU.SOAKED])
b.save("coal-indicator")
b.save("coal-indicator-tuff")
b.switch(minerals["coal"])
b.altitude = AL.span(AL.SUBSTRATE, AL.OVERBURDEN)
@@ -69,37 +69,61 @@ def addMineralSpawns(pack:ModPack):
b.scarcity = SC.UNUSUAL
b.save("coal-tertiary-iron")
# Copper Family ############################################################
# Copper (oxidizedcap) Family ##############################################
b.start(minerals["diorite"])
b.biomeFilters = BF([GE.SEDIMENTARY, HE.SUBTROPICAL, HU.DRY])
b.save("copper-indicator")
b.start(minerals["sandstone"])
b.biomeFilters = BF([GE.SEDIMENTARY, HE.SUBTROPICAL, (HU.ARID, HU.DRY)])
b.save("copper-oxidizedcap-indicator-sandstone")
b.switch(minerals["copper"])
b.altitude = AL.CRUST
b.bulk = BU.MEDIUM
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.altitude = AL.MANTLE
b.bulk = BU.SMALL
b.scarcity = SC.UNUSUAL
b.save("copper-secondary-redstone")
b.save("copper-porphyry-secondary-redstone")
b.switch(minerals["gold"])
b.altitude = AL.span(AL.CRUST, AL.MANTLE)
b.bulk = BU.TINY
b.scarcity = SC.RARE
b.save("copper-tertiary-gold")
b.save("copper-porphyry-tertiary-gold")
# Gold Family ##############################################################
b.start(minerals["marble"])
b.biomeFilters = BF([GE.METAMORPHIC, HE.BOREAL, HU.DRY])
b.save("gold-indicator")
b.biomeFilters = BF([GE.METAMORPHIC, (HE.BOREAL, HE.FROZEN), SO.ROCKY])
b.save("gold-indicator-marble")
b.start(minerals["quartz"])
b.switch(minerals["quartz"])
b.altitude = AL.span(AL.CRAGS, AL.PEAKS)
b.bulk = BU.MEDIUM
b.scarcity = SC.SPARSE
@@ -123,37 +147,65 @@ def addMineralSpawns(pack:ModPack):
b.scarcity = SC.RARE
b.save("gold-quarternary-emerald")
# Iron Family ##############################################################
# Iron (banded) Family ##############################################################
b.start(minerals["andesite"])
b.biomeFilters = BF([GE.SEDIMENTARY, HE.TEMPERATE, HU.WET])
b.save("iron-indicator")
b.start(minerals["diorite"])
b.biomeFilters = BF(
[FL.within(FL.CANOPY, FL.CLEARING), GE.METAMORPHIC, (HE.BOREAL, HE.FROZEN)]
)
b.save("iron-banded-indicator-diorite")
b.start(minerals["iron"])
b.altitude = AL.CRUST
b.bulk = BU.MEDIUM
b.scarcity = SC.COMMON
b.save("iron-primary-iron")
b.switch(minerals["iron"])
b.altitude = AL.span(AL.OVERBURDEN, AL.CRUST)
b.bulk = BU.LARGE
b.scarcity = SC.UNCOMMON
b.save("iron-banded-primary-iron")
b.switch(minerals["quartz"])
b.altitude = AL.CRUST
b.bulk = BU.SMALL
b.altitude = AL.span(AL.OVERBURDEN, AL.CRUST)
b.bulk = BU.MEDIUM
b.scarcity = SC.UNUSUAL
b.save("iron-secondary-quartz")
b.save("iron-banded-secondary-quartz")
b.switch(minerals["uranium"])
b.altitude = AL.MANTLE
b.bulk = BU.TINY
b.altitude = AL.CRUST
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.save("iron-tertiary-uranium")
b.save("iron-bog-tertiary-uranium")
# Lead Family ##############################################################
b.start(minerals["dolostone"])
b.biomeFilters = BF([GE.SEDIMENTARY, HE.TEMPERATE, HU.DAMP])
b.save("lead-indicator")
b.biomeFilters = BF([FL.FIELD, GE.SEDIMENTARY, HE.TEMPERATE, HU.DAMP])
b.save("lead-indicator-dolostone")
b.start(minerals["lead"])
b.switch(minerals["lead"])
b.altitude = AL.CRUST
b.bulk = BU.MEDIUM
b.scarcity = SC.SPARSE
@@ -171,6 +223,87 @@ def addMineralSpawns(pack:ModPack):
b.scarcity = SC.UNUSUAL
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 ##########################################################
b.start(minerals["sulfur"])
@@ -187,7 +320,7 @@ def addMineralSpawns(pack:ModPack):
b.start(minerals["chalk"])
b.biomeFilters = BF([GE.SEDIMENTARY, HE.TROPICAL, HU.ARID])
b.save("salt-indicator")
b.save("salt-indicator-chalk")
b.switch(minerals["salt"])
b.altitude = AL.span(AL.CRUST, AL.MANTLE)
@@ -219,11 +352,35 @@ def addMineralSpawns(pack:ModPack):
b.scarcity = SC.COMMON
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 ###############################################################
b.start(minerals["granite"])
b.biomeFilters = BF([GE.IGNEOUS, HE.BOREAL, HU.DRY])
b.save("tin-indicator")
b.biomeFilters = BF([GE.IGNEOUS, HE.BOREAL, SO.ROCKY])
b.save("tin-indicator-granite")
b.switch(minerals["tin"])
b.altitude = AL.CRUST
@@ -237,6 +394,34 @@ def addMineralSpawns(pack:ModPack):
b.scarcity = SC.UNUSUAL
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
+45 -45
View File
@@ -9,58 +9,58 @@ import mcpacker.model.fauna.active as AC
def addMobs(pack:ModPack):
mobs = pack.world.mobs
mobs.add(Mob("animalplus:raccoon", AC.NOCTURNAL))
mobs.add(Mob("animalplus:red_panda", AC.CREPUSCULAR))
mobs.add(Mob("bearminimum:black_bear", AC.CREPUSCULAR))
mobs.add(Mob("bearminimum:brown_bear", AC.CREPUSCULAR))
mobs.add(Mob("cold_sweat:chameleon", AC.DIURNAL))
mobs.add(Mob("crabbersdelight:crab", AC.CREPUSCULAR))
mobs.add(Mob("animalplus:raccoon", AC.NOCTURNAL))
mobs.add(Mob("animalplus:red_panda", AC.CREPUSCULAR))
mobs.add(Mob("bearminimum:black_bear", AC.CREPUSCULAR))
mobs.add(Mob("bearminimum:brown_bear", AC.CREPUSCULAR))
mobs.add(Mob("cold_sweat:chameleon", AC.DIURNAL))
mobs.add(Mob("crabbersdelight:crab", AC.CREPUSCULAR))
mobs.add(Mob("immersiveengineering:bulwark"))
mobs.add(Mob("immersiveengineering:commando"))
mobs.add(Mob("immersiveengineering:fusilier"))
mobs.add(Mob("minecraft:armadillo", AC.NOCTURNAL))
mobs.add(Mob("minecraft:blaze", AC.ANY))
mobs.add(Mob("minecraft:bogged", AC.MIDNIGHT))
mobs.add(Mob("minecraft:camel", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:cat", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:cave_spider", AC.NOCTURNAL))
mobs.add(Mob("minecraft:chicken", AC.DIURNAL))
mobs.add(Mob("minecraft:cod", AC.DIURNAL))
mobs.add(Mob("minecraft:cow", AC.DIURNAL))
mobs.add(Mob("minecraft:creeper", AC.STORMY))
mobs.add(Mob("minecraft:dolphin", AC.DIURNAL))
mobs.add(Mob("minecraft:donkey", AC.DIURNAL))
mobs.add(Mob("minecraft:drowned", AC.MIDNIGHT))
mobs.add(Mob("minecraft:armadillo", AC.NOCTURNAL))
mobs.add(Mob("minecraft:blaze", AC.ANY))
mobs.add(Mob("minecraft:bogged", AC.MIDNIGHT))
mobs.add(Mob("minecraft:camel", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:cat", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:cave_spider", AC.NOCTURNAL))
mobs.add(Mob("minecraft:chicken", AC.DIURNAL))
mobs.add(Mob("minecraft:cod", AC.DIURNAL))
mobs.add(Mob("minecraft:cow", AC.DIURNAL))
mobs.add(Mob("minecraft:creeper", AC.STORMY))
mobs.add(Mob("minecraft:dolphin", AC.DIURNAL))
mobs.add(Mob("minecraft:donkey", AC.DIURNAL))
mobs.add(Mob("minecraft:drowned", AC.MIDNIGHT))
mobs.add(Mob("minecraft:enderman"))
mobs.add(Mob("minecraft:evoker"))
mobs.add(Mob("minecraft:fox", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:frog", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:glow_squid", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:goat", AC.DIURNAL))
mobs.add(Mob("minecraft:fox", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:frog", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:glow_squid", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:goat", AC.DIURNAL))
mobs.add(Mob("minecraft:hoglin"))
mobs.add(Mob("minecraft:horse", AC.DIURNAL))
mobs.add(Mob("minecraft:husk", AC.MIDNIGHT))
mobs.add(Mob("minecraft:llama", AC.DIURNAL))
mobs.add(Mob("minecraft:magma_cube", AC.ANY))
mobs.add(Mob("minecraft:mooshroom", AC.DIURNAL))
mobs.add(Mob("minecraft:mule", AC.DIURNAL))
mobs.add(Mob("minecraft:ocelot", AC.NOCTURNAL))
mobs.add(Mob("minecraft:panda", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:parrot", AC.DIURNAL))
mobs.add(Mob("minecraft:pig", AC.DIURNAL))
mobs.add(Mob("minecraft:horse", AC.DIURNAL))
mobs.add(Mob("minecraft:husk", AC.MIDNIGHT))
mobs.add(Mob("minecraft:llama", AC.DIURNAL))
mobs.add(Mob("minecraft:magma_cube", AC.ANY))
mobs.add(Mob("minecraft:mooshroom", AC.DIURNAL))
mobs.add(Mob("minecraft:mule", AC.DIURNAL))
mobs.add(Mob("minecraft:ocelot", AC.NOCTURNAL))
mobs.add(Mob("minecraft:panda", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:parrot", AC.DIURNAL))
mobs.add(Mob("minecraft:pig", AC.DIURNAL))
mobs.add(Mob("minecraft:pillager"))
mobs.add(Mob("minecraft:polar_bear", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:pufferfish", AC.DIURNAL))
mobs.add(Mob("minecraft:rabbit", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:polar_bear", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:pufferfish", AC.DIURNAL))
mobs.add(Mob("minecraft:rabbit", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:ravager"))
mobs.add(Mob("minecraft:salmon", AC.DIURNAL))
mobs.add(Mob("minecraft:sheep", AC.DIURNAL))
mobs.add(Mob("minecraft:salmon", AC.DIURNAL))
mobs.add(Mob("minecraft:sheep", AC.DIURNAL))
mobs.add(Mob("minecraft:skeleton"))
mobs.add(Mob("minecraft:slime", AC.RAINY))
mobs.add(Mob("minecraft:spider", AC.NOCTURNAL))
mobs.add(Mob("minecraft:squid", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:tropical_fish", AC.DIURNAL))
mobs.add(Mob("minecraft:turtle", AC.NOCTURNAL))
mobs.add(Mob("minecraft:slime", AC.RAINY))
mobs.add(Mob("minecraft:spider", AC.NOCTURNAL))
mobs.add(Mob("minecraft:squid", AC.CREPUSCULAR))
mobs.add(Mob("minecraft:tropical_fish", AC.DIURNAL))
mobs.add(Mob("minecraft:turtle", AC.NOCTURNAL))
mobs.add(Mob("minecraft:vex"))
mobs.add(Mob("minecraft:villager"))
mobs.add(Mob("minecraft:vindicator"))
@@ -69,7 +69,7 @@ def addMobs(pack:ModPack):
mobs.add(Mob("minecraft:witch"))
mobs.add(Mob("minecraft:wither_skeleton"))
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:zombie_villager", AC.MIDNIGHT))
mobs.add(Mob("minecraft:zombie_villager", AC.MIDNIGHT))
mobs.add(Mob("minecraft:zombie"))
+29 -38
View File
@@ -29,7 +29,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["animalplus:raccoon"])
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.group = GR.merge(GR.SOLO, GR.PAIR)
b.scarcity = SC.UNCOMMON
@@ -41,7 +41,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["animalplus:red_panda"])
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.group = GR.merge(GR.SOLO, GR.PAIR)
b.scarcity = SC.SPARSE
@@ -53,32 +53,19 @@ def addMobSpawns(pack:ModPack):
b.seasons = SE.AUTUMN
b.group = GR.merge(GR.SOLO, GR.FAMILY)
b.scarcity = SC.UNCOMMON
b.save("blackbear-temperate-autumn")
b.save("blackbear-autumn")
b.seasons = [SE.SPRING, SE.SUMMER]
b.scarcity = SC.SPARSE
b.save("blackbear-temperate-springsummer")
b.save("blackbear-springsummer")
b.seasons = SE.WINTER
b.scarcity = SC.UNUSUAL
b.save("blackbear-temperate-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.save("blackbear-winter")
b.start(mobs["minecraft:armadillo"])
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.group = GR.merge(GR.SOLO, GR.PAIR)
b.scarcity = SC.COMMON
@@ -106,7 +93,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["bearminimum:brown_bear"])
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.group = GR.SOLO
b.scarcity = SC.SPARSE
@@ -122,7 +109,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:camel"])
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.group = GR.FAMILY
b.scarcity = SC.UNUSUAL
@@ -141,7 +128,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["cold_sweat:chameleon"])
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.group = GR.merge(GR.SOLO, GR.FAMILY)
b.scarcity = SC.COMMON
@@ -153,7 +140,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:chicken"])
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.group = GR.TROUP
b.scarcity = SC.COMMON
@@ -173,8 +160,10 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:cow"])
b.altitude = AL.span(AL.LOWLANDS, AL.UPLANDS)
b.biomeFilters = \
BF([HE.within(HE.SUBTROPICAL, HE.BOREAL), [HU.DAMP, HU.DRY], FL.FIELD], [SO.FUNGAL])
b.biomeFilters = BF(
[FL.FIELD, HE.within(HE.SUBTROPICAL, HE.BOREAL), (HU.DAMP, HU.DRY)],
[SO.FUNGAL, SO.ROCKY]
)
b.seasons = [SE.SPRING, SE.SUMMER]
b.group = GR.HERD
b.scarcity = SC.SPARSE
@@ -188,19 +177,19 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["crabbersdelight:crab"])
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.group = GR.SOLO
b.scarcity = SC.UNCOMMON
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.save("crab-cool")
b.start(mobs["minecraft:dolphin"])
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.seasons = SE.SUMMER
b.group = GR.FAMILY
@@ -213,7 +202,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:donkey"])
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.group = GR.FAMILY
b.scarcity = SC.SPARSE
@@ -226,7 +215,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:fox"])
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.group = GR.FAMILY
b.scarcity = SC.UNCOMMON
@@ -239,7 +228,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:frog"])
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.scarcity = SC.COMMON
b.seasons = SE.SUMMER
@@ -307,7 +296,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:ocelot"])
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.scarcity = SC.RARE
b.seasons = SE.ALL
@@ -315,7 +304,7 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:panda"])
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.scarcity = SC.UNUSUAL
b.seasons = SE.exclude(SE.SPRING)
@@ -327,13 +316,13 @@ def addMobSpawns(pack:ModPack):
b.start(mobs["minecraft:parrot"])
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.scarcity = SC.COMMON
b.seasons = SE.ALL
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.save("parrot-clearing")
@@ -341,7 +330,9 @@ def addMobSpawns(pack:ModPack):
b.altitude = AL.span(AL.LOWLANDS, AL.HILLS)
b.biomeFilters = BF([
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.scarcity = SC.COMMON
@@ -395,7 +386,7 @@ def addMobSpawns(pack:ModPack):
b.save("rabbit-temperate-winter")
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.scarcity = SC.SPARSE
b.seasons = SE.exclude(SE.SUMMER)
@@ -515,6 +506,6 @@ def addMobSpawns(pack:ModPack):
b.scarcity = SC.UNUSUAL
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.save("wolf-savanna")
+7 -7
View File
@@ -64,13 +64,6 @@ def addPlants(pack:ModPack):
radius = 3,
))
plants.add(Patch(
name = "cabbage",
blocks = f"{FD}:wild_cabbages",
density = DE.THIN,
radius = 4,
))
plants.add(Patch(
name = "carrot",
blocks = f"{FD}:wild_carrots",
@@ -142,6 +135,13 @@ def addPlants(pack:ModPack):
radius = 3,
))
plants.add(Patch(
name = "lettuce",
blocks = f"{FD}:wild_cabbages",
density = DE.THIN,
radius = 4,
))
plants.add(Patch(
name = "melon",
blocks = f"{MC}:melon",
@@ -37,7 +37,7 @@ def addPlantSpawns(pack:ModPack):
b.start(plants["bellpepper"])
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.save("bellpepper")
@@ -48,21 +48,14 @@ def addPlantSpawns(pack:ModPack):
b.save("blueberry")
b.start(plants["brownmushroom"])
b.altitude = AL.span(AL.SOIL, AL.ALPINE)
b.biomeFilters = [
BF([(FL.CANOPY, FL.FOREST), (HE.TEMPERATE, HE.BOREAL), (SO.LOAMY, SO.CLAYEY)], [WA.OCEAN]),
BF([HU.WET], [HE.FROZEN, WA.OCEAN, WA.RIVER]),
BF([SO.FUNGAL]),
]
b.altitude = AL.span(AL.SOIL, AL.UPLANDS)
b.biomeFilters = BF(
[HU.within(HU.DAMP, HU.SOAKED), (SO.CLAYEY, SO.LOAMY, SO.FUNGAL)],
[HE.FROZEN, WA.OCEAN, WA.RIVER]
)
b.scarcity = SC.COMMON
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.altitude = AL.LOWLANDS
b.biomeFilters = BF(
@@ -73,7 +66,7 @@ def addPlantSpawns(pack:ModPack):
b.start(plants["coffee"])
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.save("coffee")
@@ -97,7 +90,7 @@ def addPlantSpawns(pack:ModPack):
b.start(plants["cranberry"])
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.save("cranberry")
@@ -106,13 +99,13 @@ def addPlantSpawns(pack:ModPack):
# "flax" as a fiberous, desert-dwelling cousin.
b.start(plants["flax"])
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.save("flax")
b.start(plants["hamimelon"])
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.save("hamimelon")
@@ -130,9 +123,15 @@ def addPlantSpawns(pack:ModPack):
b.scarcity = SC.SPARSE
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.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.save("melon")
@@ -147,7 +146,7 @@ def addPlantSpawns(pack:ModPack):
# a more cactus-like cousin of actual pineapples.
b.start(plants["pineapple"])
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
# TODO: add sand as substrate in addplants.py
b.save("pineapple")
@@ -165,12 +164,11 @@ def addPlantSpawns(pack:ModPack):
b.save("pumpkin")
b.start(plants["redmushroom"])
b.altitude = AL.span(AL.SOIL, AL.ALPINE)
b.biomeFilters = [
BF([(FL.CANOPY, FL.FOREST), (HE.TEMPERATE, HE.BOREAL), (SO.LOAMY, SO.CLAYEY)]),
BF([HU.WET], [HE.FROZEN, WA.OCEAN, WA.RIVER]),
BF([SO.FUNGAL]),
]
b.altitude = AL.span(AL.SOIL, AL.UPLANDS)
b.biomeFilters = BF(
[HU.within(HU.DAMP, HU.SOAKED), (SO.ACIDIC, SO.CLAYEY, SO.FUNGAL)],
[HE.FROZEN, WA.OCEAN, WA.RIVER]
)
b.scarcity = SC.UNCOMMON
b.save("redmushroom")
@@ -193,8 +191,8 @@ def addPlantSpawns(pack:ModPack):
b.save("sunflower")
b.start(plants["tomato"])
b.altitude = AL.span(AL.UPLANDS, AL.HILLS)
b.biomeFilters = BF([FL.CLEARING, HE.TROPICAL, HU.WET], [SO.FUNGAL])
b.altitude = AL.UPLANDS
b.biomeFilters = BF([FL.CLEARING, HE.TROPICAL, (HU.DAMP, HU.SOAKED)], [SO.FUNGAL])
b.scarcity = SC.UNCOMMON
b.save("tomato")
@@ -220,7 +218,7 @@ def addPlantSpawns(pack:ModPack):
b.start(plants["blueorchid"])
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.save("blueorchid")
@@ -326,8 +324,8 @@ def addPlantSpawns(pack:ModPack):
b.save("bayberry-tree")
b.start(plants["durian"])
b.altitude = AL.HILLS
b.biomeFilters = BF([FL.within(FL.CANOPY, FL.CLEARING), HE.TROPICAL, HU.WET, SO.ACIDIC])
b.altitude = AL.UPLANDS
b.biomeFilters = BF([FL.FOREST, HE.TROPICAL, SO.ACIDIC])
b.scarcity = SC.UNUSUAL
b.save("durian-tree")
@@ -338,28 +336,26 @@ def addPlantSpawns(pack:ModPack):
b.save("fig-tree")
b.start(plants["hawberry"])
b.altitude = AL.span(AL.UPLANDS, AL.HILLS)
b.biomeFilters = BF([(FL.FOREST, FL.CLEARING), HE.TEMPERATE, (SO.ACIDIC, SO.LOAMY)])
b.altitude = AL.span(AL.LOWLANDS, AL.UPLANDS)
b.biomeFilters = BF([(FL.FOREST, FL.CLEARING), HE.TEMPERATE, SO.ACIDIC])
b.scarcity = SC.SPARSE
b.save("hawberry-tree")
b.start(plants["lychee"])
b.altitude = AL.UPLANDS
b.biomeFilters = BF([FL.CLEARING, HE.TROPICAL, HU.WET], [SO.FUNGAL])
b.altitude = AL.LOWLANDS
b.biomeFilters = BF([FL.CANOPY, HE.TROPICAL, HU.SOAKED])
b.scarcity = SC.SPARSE
b.save("lychee-tree")
b.start(plants["mango"])
b.altitude = AL.LOWLANDS
b.biomeFilters = BF(
[FL.within(FL.CANOPY, FL.CLEARING), HE.TROPICAL, (HU.DAMP, HU.WET), SO.ACIDIC]
)
b.biomeFilters = BF([FL.CANOPY, HE.TROPICAL, HU.SOAKED])
b.scarcity = SC.UNCOMMON
b.save("mango-tree")
b.start(plants["mangosteen"])
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.save("mangosteen-tree")
@@ -383,6 +379,6 @@ def addPlantSpawns(pack:ModPack):
b.start(plants["persimmon"])
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.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