Add remaining flora & fauna spawns

This commit is contained in:
Andrew Miner
2025-10-20 18:27:19 -06:00
parent 464b68fcbe
commit 0a7fe05c4f
60 changed files with 2205 additions and 243 deletions
@@ -0,0 +1,446 @@
from mcpacker.model.core.altitude import Altitude
from mcpacker.model.core.ecology.biomefilter import BiomeFilter as BF
from mcpacker.model.core.flora.plantspawn import PlantSpawn
from mcpacker.model.core.resourceid import ResourceId
from mcpacker.model.modpack import ModPack
import mcpacker.model.core.altitude as AL
import mcpacker.model.core.ecology.flora as FL
import mcpacker.model.core.ecology.geology as GE
import mcpacker.model.core.ecology.heat as HE
import mcpacker.model.core.ecology.humidity as HU
import mcpacker.model.core.ecology.soil as SO
import mcpacker.model.core.ecology.water as WA
import mcpacker.model.core.scarcity as SC
# Functions ########################################################################################
def addPlantSpawns(pack:ModPack):
plants = pack.world.plants
spawns = pack.world.plantSpawns
# Crop Patches #############################################################
spawns.add(PlantSpawn(
plant = plants["athelas"],
altitude = AL.span(AL.LOWLANDS, AL.HILLS),
biomeFilters = BF([FL.CANOPY, HE.TEMPERATE]),
scarcity = SC.SPARSE,
))
spawns.add(PlantSpawn(
plant = plants["beetroot"],
altitude = AL.LOWLANDS,
biomeFilters = BF([FL.FOREST, HE.BOREAL, SO.ACIDIC]),
scarcity = SC.COMMON,
))
spawns.add(PlantSpawn(
plant = plants["bellpepper"],
altitude = AL.LOWLANDS,
biomeFilters = BF([FL.CLEARING, HE.TROPICAL, HU.WET, WA.INLAND]),
scarcity = SC.COMMON,
))
spawns.add(PlantSpawn(
plant = plants["blueberry"],
altitude = AL.span(AL.UPLANDS, AL.ALPINE),
biomeFilters = BF([FL.within(FL.FOREST, FL.FIELD), HE.BOREAL]),
scarcity = SC.SPARSE,
))
spawns.add(PlantSpawn(
plant = plants["brownmushroom"],
altitude = AL.span(AL.SOIL, AL.ALPINE),
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]),
],
scarcity = SC.COMMON,
))
spawns.add(PlantSpawn(
plant = plants["cabbage"],
altitude = AL.HILLS,
biomeFilters = BF([(HE.SUBTROPICAL, HE.TEMPERATE), SO.SANDY, WA.COAST]),
scarcity = SC.COMMON,
))
spawns.add(PlantSpawn(
plant = plants["carrot"],
altitude = AL.LOWLANDS,
biomeFilters = BF(
[(FL.FOREST, FL.CLEARING), HE.TEMPERATE, SO.LOAMY],
[ResourceId.parse("flower_forest")],
),
scarcity = SC.COMMON,
))
spawns.add(PlantSpawn(
plant = plants["coffee"],
altitude = AL.span(AL.HILLS, AL.ALPINE),
biomeFilters = BF([FL.CANOPY, HE.TROPICAL, HU.WET]),
scarcity = SC.SPARSE,
))
spawns.add(PlantSpawn(
plant = plants["corn"],
altitude = AL.span(AL.LOWLANDS, AL.UPLANDS),
biomeFilters = BF([FL.FIELD, HE.SUBTROPICAL, (SO.LOAMY, SO.SANDY)]),
scarcity = SC.COMMON,
))
spawns.add(PlantSpawn(
plant = plants["cotton"],
altitude = AL.LOWLANDS,
biomeFilters = BF([FL.FIELD, HE.SUBTROPICAL, HU.DRY, (SO.LOAMY, SO.SANDY)]),
scarcity = SC.UNCOMMON,
))
spawns.add(PlantSpawn(
plant = plants["currant"],
altitude = AL.span(AL.UPLANDS, AL.ALPINE),
biomeFilters = BF([FL.within(FL.FOREST, FL.FIELD), (HE.BOREAL, HE.FROZEN)]),
scarcity = SC.UNCOMMON,
))
spawns.add(PlantSpawn(
plant = plants["cranberry"],
altitude = AL.DUNES,
biomeFilters = BF([HU.WET, SO.PEATY]),
scarcity = SC.UNCOMMON,
))
# NOTE: Due to a bug in Supplementaries, flax can *only* be planted on sand, despite the actual
# plant requiring an entirely different soil. Therefore, we're imaginging *this* so-called
# "flax" as a fiberous, desert-dwelling cousin.
spawns.add(PlantSpawn(
plant = plants["flax"],
altitude = AL.DUNES,
biomeFilters = BF([FL.BARREN, HU.DRY, SO.SANDY]),
scarcity = SC.COMMON,
))
spawns.add(PlantSpawn(
plant = plants["hamimelon"],
altitude = AL.span(AL.LOWLANDS, AL.UPLANDS),
biomeFilters = BF([FL.FIELD, HE.SUBTROPICAL, HU.DRY, (SO.LOAMY, SO.SANDY)]),
scarcity = SC.RARE,
))
spawns.add(PlantSpawn(
plant = plants["hemp"],
altitude = AL.span(AL.DUNES, AL.UPLANDS),
biomeFilters = BF(
[FL.FIELD, HE.TEMPERATE, HU.DAMP, SO.LOAMY],
[ResourceId.parse("sunflower_plains")]
),
scarcity = SC.UNCOMMON,
))
spawns.add(PlantSpawn(
plant = plants["lemon"],
altitude = AL.UPLANDS,
biomeFilters = BF([FL.FIELD, HE.SUBTROPICAL, HU.DRY]),
scarcity = SC.SPARSE,
))
spawns.add(PlantSpawn(
plant = plants["melon"],
altitude = AL.LOWLANDS,
biomeFilters = BF([FL.CLEARING, HE.TROPICAL, HU.WET], [SO.FUNGAL]),
scarcity = SC.SPARSE,
))
spawns.add(PlantSpawn(
plant = plants["onion"],
altitude = AL.span(AL.UPLANDS, AL.HILLS),
biomeFilters = BF([FL.FOREST, HE.TEMPERATE, HU.DAMP, SO.ACIDIC]),
scarcity = SC.SPARSE,
))
# NOTE: Due to a bug in Fruits Delight, pineapple can *only* be planted on sand: despite this
# in now way reflecting the plant's actual ecology. As such, we have to imagine these as
# a more cactus-like cousin of actual pineapples.
spawns.add(PlantSpawn(
plant = plants["pineapple"],
altitude = AL.LOWLANDS,
biomeFilters = BF([FL.BARREN, HE.TROPICAL, HU.DRY, SO.SANDY]),
scarcity = SC.SPARSE,
# TODO: add sand as substrate in addplants.py
))
spawns.add(PlantSpawn(
plant = plants["potato"],
altitude = AL.span(AL.UPLANDS, AL.HILLS),
biomeFilters = BF([FL.FOREST, HE.BOREAL, HU.DAMP, SO.ACIDIC]),
scarcity = SC.UNCOMMON,
))
spawns.add(PlantSpawn(
plant = plants["pumpkin"],
altitude = AL.LOWLANDS,
biomeFilters = BF([FL.FIELD, HE.TEMPERATE, SO.LOAMY]),
scarcity = SC.UNUSUAL,
))
spawns.add(PlantSpawn(
plant = plants["redmushroom"],
altitude = AL.span(AL.SOIL, AL.ALPINE),
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]),
],
scarcity = SC.UNCOMMON,
))
spawns.add(PlantSpawn(
plant = plants["rice"],
altitude = AL.SURFACE,
biomeFilters = BF([(HE.SUBTROPICAL, HE.TEMPERATE), (WA.RIVER, WA.SWAMP)]),
scarcity = SC.COMMON,
))
spawns.add(PlantSpawn(
plant = plants["sugarcane"],
altitude = AL.DUNES,
biomeFilters = BF([(HE.TROPICAL, HE.TEMPERATE), (WA.RIVER, WA.SWAMP)]),
scarcity = SC.COMMON,
))
spawns.add(PlantSpawn(
plant = plants["sunflower"],
altitude = AL.span(AL.LOWLANDS, AL.UPLANDS),
biomeFilters = BF([ResourceId.parse("sunflower_plains")]),
scarcity = SC.CARPET,
))
spawns.add(PlantSpawn(
plant = plants["tomato"],
altitude = AL.span(AL.UPLANDS, AL.HILLS),
biomeFilters = BF([FL.CLEARING, HE.TROPICAL, HU.WET], [SO.FUNGAL]),
scarcity = SC.UNCOMMON,
))
spawns.add(PlantSpawn(
plant = plants["wheat"],
altitude = AL.span(AL.LOWLANDS, AL.UPLANDS),
biomeFilters = BF([FL.FIELD, HE.TEMPERATE, HU.DAMP, SO.LOAMY]),
scarcity = SC.COMMON,
))
# Flower Patches ###########################################################
spawns.add(PlantSpawn(
plant = plants["allium"],
altitude = AL.span(AL.UPLANDS, AL.HILLS),
biomeFilters = BF([FL.FOREST, HE.TEMPERATE, HU.DAMP, SO.ACIDIC]),
scarcity = SC.UNCOMMON,
))
spawns.add(PlantSpawn(
plant = plants["azurebluet"],
altitude = AL.span(AL.UPLANDS, AL.ALPINE),
biomeFilters = BF([FL.FIELD, (HE.TEMPERATE, HE.BOREAL), HU.DAMP, (SO.LOAMY, SO.PEATY)]),
scarcity = SC.SPARSE,
))
spawns.add(PlantSpawn(
plant = plants["blueorchid"],
altitude = AL.span(AL.LOWLANDS, AL.UPLANDS),
biomeFilters = BF([FL.CANOPY, HE.TROPICAL, HU.WET]),
scarcity = SC.RARE,
))
spawns.add(PlantSpawn(
plant = plants["cornflower"],
altitude = AL.span(AL.UPLANDS, AL.ALPINE),
biomeFilters = BF([FL.FIELD, HE.TEMPERATE, (SO.LOAMY, SO.PEATY)]),
scarcity = SC.COMMON,
))
spawns.add(PlantSpawn(
plant = plants["daisy"],
altitude = AL.span(AL.UPLANDS, AL.ALPINE),
biomeFilters = BF([FL.FIELD, (HE.TEMPERATE, HE.BOREAL)]),
scarcity = SC.UNCOMMON,
))
spawns.add(PlantSpawn(
plant = plants["dandelion"],
altitude = AL.span(AL.DUNES, AL.HILLS),
biomeFilters = BF(
[(FL.CLEARING, FL.FIELD)],
[HE.FROZEN, HU.WET, SO.FUNGAL, SO.ROCKY, ResourceId.parse("flower_forest")]),
scarcity = SC.COMMON,
))
spawns.add(PlantSpawn(
plant = plants["lilac"],
altitude = AL.LOWLANDS,
biomeFilters = BF([FL.FOREST, HE.TEMPERATE, HU.DAMP, SO.LOAMY]),
scarcity = SC.UNUSUAL,
))
spawns.add(PlantSpawn(
plant = plants["lily"],
altitude = AL.span(AL.LOWLANDS, AL.UPLANDS),
biomeFilters = BF([FL.FOREST, (HE.TEMPERATE, HE.BOREAL), HU.DAMP, SO.ACIDIC]),
scarcity = SC.RARE,
))
spawns.add(PlantSpawn(
plant = plants["peony"],
altitude = AL.LOWLANDS,
biomeFilters = BF([FL.CLEARING, HE.TEMPERATE, HU.DAMP, SO.ROCKY]),
scarcity = SC.SPARSE,
))
spawns.add(PlantSpawn(
plant = plants["poppy"],
altitude = AL.span(AL.DUNES, AL.UPLANDS),
biomeFilters = BF(
[FL.FIELD, (HE.SUBTROPICAL, HE.TEMPERATE), (HU.DRY, HU.DAMP)],
[SO.FUNGAL]
),
scarcity = SC.SPARSE,
))
spawns.add(PlantSpawn(
plant = plants["rose_black"],
altitude = AL.HILLS,
biomeFilters = BF([FL.CANOPY, HE.TEMPERATE]),
scarcity = SC.RARE,
))
spawns.add(PlantSpawn(
plant = plants["rose_bush"],
altitude = AL.span(AL.UPLANDS, AL.ALPINE),
biomeFilters = BF([FL.FOREST, (HE.TEMPERATE, HE.BOREAL), SO.LOAMY]),
scarcity = SC.UNUSUAL,
))
spawns.add(PlantSpawn(
plant = plants["tulip_orange"],
altitude = AL.span(AL.DUNES, AL.LOWLANDS),
biomeFilters = BF([ResourceId.parse("flower_forest")]),
scarcity = SC.UNUSUAL,
))
spawns.add(PlantSpawn(
plant = plants["tulip_pink"],
altitude = AL.span(AL.DUNES, AL.LOWLANDS),
biomeFilters = BF([ResourceId.parse("flower_forest")]),
scarcity = SC.SPARSE,
))
spawns.add(PlantSpawn(
plant = plants["tulip_red"],
altitude = AL.span(AL.DUNES, AL.LOWLANDS),
biomeFilters = BF([ResourceId.parse("flower_forest")]),
scarcity = SC.COMMON,
))
spawns.add(PlantSpawn(
plant = plants["tulip_white"],
altitude = AL.span(AL.DUNES, AL.LOWLANDS),
biomeFilters = BF([ResourceId.parse("flower_forest")]),
scarcity = SC.UNCOMMON,
))
# Trees ####################################################################
spawns.add(PlantSpawn(
plant = plants["apple"],
altitude = AL.span(AL.LOWLANDS, AL.UPLANDS),
biomeFilters = BF(
[(FL.FOREST, FL.CLEARING), HE.TEMPERATE, SO.LOAMY],
[ResourceId.parse("flower_forest")],
),
scarcity = SC.SPARSE,
))
spawns.add(PlantSpawn(
plant = plants["bayberry"],
altitude = AL.span(AL.DUNES, AL.UPLANDS),
biomeFilters = BF([HE.TEMPERATE, (SO.ROCKY, SO.SANDY), WA.COAST]),
scarcity = SC.SPARSE,
))
spawns.add(PlantSpawn(
plant = plants["durian"],
altitude = AL.HILLS,
biomeFilters = BF([FL.within(FL.CANOPY, FL.CLEARING), HE.TROPICAL, HU.WET, SO.ACIDIC]),
scarcity = SC.UNUSUAL,
))
spawns.add(PlantSpawn(
plant = plants["fig"],
altitude = AL.span(AL.UPLANDS, AL.HILLS),
biomeFilters = BF([HE.SUBTROPICAL, HU.DRY, SO.SANDY], [FL.BARREN]),
scarcity = SC.UNCOMMON,
))
spawns.add(PlantSpawn(
plant = plants["hawberry"],
altitude = AL.span(AL.UPLANDS, AL.HILLS),
biomeFilters = BF([(FL.FOREST, FL.CLEARING), HE.TEMPERATE, (SO.ACIDIC, SO.LOAMY)]),
scarcity = SC.SPARSE,
))
spawns.add(PlantSpawn(
plant = plants["lychee"],
altitude = AL.UPLANDS,
biomeFilters = BF([FL.CLEARING, HE.TROPICAL, HU.WET], [SO.FUNGAL]),
scarcity = SC.SPARSE,
))
spawns.add(PlantSpawn(
plant = plants["mango"],
altitude = AL.LOWLANDS,
biomeFilters = BF(
[FL.within(FL.CANOPY, FL.CLEARING), HE.TROPICAL, (HU.DAMP, HU.WET), SO.ACIDIC]
),
scarcity = SC.UNCOMMON,
))
spawns.add(PlantSpawn(
plant = plants["mangosteen"],
altitude = AL.UPLANDS,
biomeFilters = BF([FL.CANOPY, HE.TROPICAL, HU.WET, SO.ACIDIC]),
scarcity = SC.UNUSUAL,
))
spawns.add(PlantSpawn(
plant = plants["orange"],
altitude = AL.LOWLANDS,
biomeFilters = BF([FL.FIELD, HE.SUBTROPICAL, HU.DRY]),
scarcity = SC.SPARSE,
))
spawns.add(PlantSpawn(
plant = plants["peach"],
altitude = AL.span(AL.LOWLANDS, AL.UPLANDS),
biomeFilters = BF([FL.CLEARING, HE.TEMPERATE, HU.DAMP, SO.ROCKY]),
scarcity = SC.UNCOMMON,
))
spawns.add(PlantSpawn(
plant = plants["pear"],
altitude = AL.span(AL.LOWLANDS, AL.UPLANDS),
biomeFilters = BF([FL.CLEARING, HE.TEMPERATE, HU.DAMP, (SO.ACIDIC, SO.LOAMY)]),
scarcity = SC.UNCOMMON,
))
spawns.add(PlantSpawn(
plant = plants["persimmon"],
altitude = AL.span(AL.LOWLANDS, AL.UPLANDS),
biomeFilters = BF([FL.FOREST, HE.TEMPERATE, SO.LOAMY]),
scarcity = SC.UNCOMMON,
))