198 lines
7.6 KiB
TypeScript
198 lines
7.6 KiB
TypeScript
export type SeedMapDimension = 'overworld' | 'nether' | 'end'
|
|
|
|
export type SeedMapBiomeCategory =
|
|
| 'beach'
|
|
| 'cave'
|
|
| 'desert'
|
|
| 'forest'
|
|
| 'ice'
|
|
| 'jungle'
|
|
| 'mesa'
|
|
| 'mountains'
|
|
| 'mushroom'
|
|
| 'ocean'
|
|
| 'plains'
|
|
| 'river'
|
|
| 'savanna'
|
|
| 'swamp'
|
|
| 'taiga'
|
|
| 'nether'
|
|
| 'end'
|
|
|
|
export type SeedMapBiome = {
|
|
id: number
|
|
dimensions: readonly SeedMapDimension[]
|
|
category: SeedMapBiomeCategory
|
|
color: string
|
|
}
|
|
|
|
export type SeedMapBiomeGroup = {
|
|
category: SeedMapBiomeCategory
|
|
dimension: SeedMapDimension
|
|
biomes: SeedMapBiome[]
|
|
}
|
|
|
|
const OVERWORLD: readonly SeedMapDimension[] = ['overworld']
|
|
const NETHER: readonly SeedMapDimension[] = ['nether']
|
|
const END: readonly SeedMapDimension[] = ['end']
|
|
|
|
/**
|
|
* Java biome ids as used by cubiomes, grouped for the picker. Colors mirror
|
|
* the native renderer's cubiomes palette so the picker and map stay aligned.
|
|
*/
|
|
export const SEED_MAP_BIOMES: readonly SeedMapBiome[] = [
|
|
{ id: 16, dimensions: OVERWORLD, category: 'beach', color: '#FADE55' },
|
|
{ id: 26, dimensions: OVERWORLD, category: 'beach', color: '#FAF0C0' },
|
|
{ id: 25, dimensions: OVERWORLD, category: 'beach', color: '#A2A284' },
|
|
{ id: 183, dimensions: OVERWORLD, category: 'cave', color: '#031F29' },
|
|
{ id: 174, dimensions: OVERWORLD, category: 'cave', color: '#4E3012' },
|
|
{ id: 175, dimensions: OVERWORLD, category: 'cave', color: '#283C00' },
|
|
{ id: 187, dimensions: OVERWORLD, category: 'cave', color: '#C8C828' },
|
|
{ id: 2, dimensions: OVERWORLD, category: 'desert', color: '#FA9418' },
|
|
{ id: 27, dimensions: OVERWORLD, category: 'forest', color: '#307444' },
|
|
{ id: 185, dimensions: OVERWORLD, category: 'forest', color: '#FF91C8' },
|
|
{ id: 29, dimensions: OVERWORLD, category: 'forest', color: '#40511A' },
|
|
{ id: 132, dimensions: OVERWORLD, category: 'forest', color: '#2D8E49' },
|
|
{ id: 4, dimensions: OVERWORLD, category: 'forest', color: '#056621' },
|
|
{ id: 178, dimensions: OVERWORLD, category: 'forest', color: '#47726C' },
|
|
{ id: 155, dimensions: OVERWORLD, category: 'forest', color: '#589C6C' },
|
|
{ id: 186, dimensions: OVERWORLD, category: 'forest', color: '#696D95' },
|
|
{ id: 34, dimensions: OVERWORLD, category: 'forest', color: '#5B7352' },
|
|
{ id: 181, dimensions: OVERWORLD, category: 'ice', color: '#B0B3CE' },
|
|
{ id: 11, dimensions: OVERWORLD, category: 'ice', color: '#A0A0FF' },
|
|
{ id: 140, dimensions: OVERWORLD, category: 'ice', color: '#B4DCDC' },
|
|
{ id: 168, dimensions: OVERWORLD, category: 'jungle', color: '#849500' },
|
|
{ id: 21, dimensions: OVERWORLD, category: 'jungle', color: '#507B0A' },
|
|
{ id: 23, dimensions: OVERWORLD, category: 'jungle', color: '#60930F' },
|
|
{ id: 37, dimensions: OVERWORLD, category: 'mesa', color: '#D94515' },
|
|
{ id: 165, dimensions: OVERWORLD, category: 'mesa', color: '#FF6D3D' },
|
|
{ id: 38, dimensions: OVERWORLD, category: 'mesa', color: '#B09765' },
|
|
{ id: 180, dimensions: OVERWORLD, category: 'mountains', color: '#DCDCC8' },
|
|
{ id: 177, dimensions: OVERWORLD, category: 'mountains', color: '#60A445' },
|
|
{ id: 179, dimensions: OVERWORLD, category: 'mountains', color: '#C4C4C4' },
|
|
{ id: 182, dimensions: OVERWORLD, category: 'mountains', color: '#7B8F74' },
|
|
{ id: 131, dimensions: OVERWORLD, category: 'mountains', color: '#888888' },
|
|
{ id: 3, dimensions: OVERWORLD, category: 'mountains', color: '#606060' },
|
|
{ id: 14, dimensions: OVERWORLD, category: 'mushroom', color: '#FF00FF' },
|
|
{ id: 46, dimensions: OVERWORLD, category: 'ocean', color: '#202070' },
|
|
{ id: 49, dimensions: OVERWORLD, category: 'ocean', color: '#202038' },
|
|
{ id: 50, dimensions: OVERWORLD, category: 'ocean', color: '#404090' },
|
|
{ id: 48, dimensions: OVERWORLD, category: 'ocean', color: '#000040' },
|
|
{ id: 24, dimensions: OVERWORLD, category: 'ocean', color: '#000030' },
|
|
{ id: 10, dimensions: OVERWORLD, category: 'ocean', color: '#7070D6' },
|
|
{ id: 45, dimensions: OVERWORLD, category: 'ocean', color: '#000090' },
|
|
{ id: 0, dimensions: OVERWORLD, category: 'ocean', color: '#000070' },
|
|
{ id: 44, dimensions: OVERWORLD, category: 'ocean', color: '#0000AC' },
|
|
{ id: 1, dimensions: OVERWORLD, category: 'plains', color: '#8DB360' },
|
|
{ id: 12, dimensions: OVERWORLD, category: 'plains', color: '#FFFFFF' },
|
|
{ id: 129, dimensions: OVERWORLD, category: 'plains', color: '#B5DB88' },
|
|
{ id: 7, dimensions: OVERWORLD, category: 'river', color: '#0000FF' },
|
|
{ id: 35, dimensions: OVERWORLD, category: 'savanna', color: '#BDB25F' },
|
|
{ id: 36, dimensions: OVERWORLD, category: 'savanna', color: '#A79D64' },
|
|
{ id: 163, dimensions: OVERWORLD, category: 'savanna', color: '#E5DA87' },
|
|
{ id: 184, dimensions: OVERWORLD, category: 'swamp', color: '#2CCC8E' },
|
|
{ id: 6, dimensions: OVERWORLD, category: 'swamp', color: '#07F9B2' },
|
|
{ id: 32, dimensions: OVERWORLD, category: 'taiga', color: '#596651' },
|
|
{ id: 160, dimensions: OVERWORLD, category: 'taiga', color: '#818E79' },
|
|
{ id: 30, dimensions: OVERWORLD, category: 'taiga', color: '#31554A' },
|
|
{ id: 5, dimensions: OVERWORLD, category: 'taiga', color: '#0B6A5F' },
|
|
{ id: 8, dimensions: NETHER, category: 'nether', color: '#572526' },
|
|
{ id: 170, dimensions: NETHER, category: 'nether', color: '#4D3A2E' },
|
|
{ id: 171, dimensions: NETHER, category: 'nether', color: '#981A11' },
|
|
{ id: 172, dimensions: NETHER, category: 'nether', color: '#49907B' },
|
|
{ id: 173, dimensions: NETHER, category: 'nether', color: '#645F63' },
|
|
{ id: 9, dimensions: END, category: 'end', color: '#8080FF' },
|
|
{ id: 40, dimensions: END, category: 'end', color: '#4B4BAB' },
|
|
{ id: 41, dimensions: END, category: 'end', color: '#C9C959' },
|
|
{ id: 42, dimensions: END, category: 'end', color: '#B5B536' },
|
|
{ id: 43, dimensions: END, category: 'end', color: '#7070CC' },
|
|
]
|
|
|
|
/** Display names for the Java biome ids shown in the picker. */
|
|
export const SEED_MAP_BIOME_NAMES: Readonly<Record<number, string>> = {
|
|
0: 'Ocean',
|
|
1: 'Plains',
|
|
2: 'Desert',
|
|
3: 'Windswept Hills',
|
|
4: 'Forest',
|
|
5: 'Taiga',
|
|
6: 'Swamp',
|
|
7: 'River',
|
|
8: 'Nether Wastes',
|
|
9: 'The End',
|
|
10: 'Frozen Ocean',
|
|
11: 'Frozen River',
|
|
12: 'Snowy Plains',
|
|
14: 'Mushroom Fields',
|
|
16: 'Beach',
|
|
21: 'Jungle',
|
|
23: 'Sparse Jungle',
|
|
24: 'Deep Ocean',
|
|
25: 'Stony Shore',
|
|
26: 'Snowy Beach',
|
|
27: 'Birch Forest',
|
|
29: 'Dark Forest',
|
|
30: 'Snowy Taiga',
|
|
32: 'Old Growth Pine Taiga',
|
|
34: 'Windswept Forest',
|
|
35: 'Savanna',
|
|
36: 'Savanna Plateau',
|
|
37: 'Badlands',
|
|
38: 'Wooded Badlands',
|
|
40: 'Small End Islands',
|
|
41: 'End Midlands',
|
|
42: 'End Highlands',
|
|
43: 'End Barrens',
|
|
44: 'Warm Ocean',
|
|
45: 'Lukewarm Ocean',
|
|
46: 'Cold Ocean',
|
|
48: 'Deep Lukewarm Ocean',
|
|
49: 'Deep Cold Ocean',
|
|
50: 'Deep Frozen Ocean',
|
|
129: 'Sunflower Plains',
|
|
131: 'Windswept Gravelly Hills',
|
|
132: 'Flower Forest',
|
|
140: 'Ice Spikes',
|
|
155: 'Old Growth Birch Forest',
|
|
160: 'Old Growth Spruce Taiga',
|
|
163: 'Windswept Savanna',
|
|
165: 'Eroded Badlands',
|
|
168: 'Bamboo Jungle',
|
|
170: 'Soul Sand Valley',
|
|
171: 'Crimson Forest',
|
|
172: 'Warped Forest',
|
|
173: 'Basalt Deltas',
|
|
174: 'Dripstone Caves',
|
|
175: 'Lush Caves',
|
|
177: 'Meadow',
|
|
178: 'Grove',
|
|
179: 'Snowy Slopes',
|
|
180: 'Jagged Peaks',
|
|
181: 'Frozen Peaks',
|
|
182: 'Stony Peaks',
|
|
183: 'Deep Dark',
|
|
184: 'Mangrove Swamp',
|
|
185: 'Cherry Grove',
|
|
186: 'Pale Garden',
|
|
187: 'Sulfur Caves',
|
|
}
|
|
|
|
export function seedMapBiomeGroups(): SeedMapBiomeGroup[] {
|
|
const groups = new Map<SeedMapBiomeCategory, SeedMapBiomeGroup>()
|
|
for (const biome of SEED_MAP_BIOMES) {
|
|
const dimension = biome.dimensions[0] ?? 'overworld'
|
|
const group = groups.get(biome.category) ?? {
|
|
category: biome.category,
|
|
dimension,
|
|
biomes: [],
|
|
}
|
|
group.biomes.push(biome)
|
|
groups.set(biome.category, group)
|
|
}
|
|
return [...groups.values()]
|
|
}
|
|
|
|
export function seedMapBiomeSlug(name: string): string {
|
|
return name.toLocaleLowerCase().replaceAll(' ', '-')
|
|
}
|