9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2026-01-04 15:41:30 +00:00

Map Command Overhaul in 1.17

- Features biomes using random color (based on vanilla derivative) if a color isn't provided in the biome class
- Allows a map to be opened for packs that don't have a world open (`/iris std map overworld`)
This commit is contained in:
StrangeOne101
2021-07-14 23:01:09 +12:00
parent 147d5902ed
commit 1f2871f649
12 changed files with 1630 additions and 17 deletions

View File

@@ -0,0 +1,139 @@
package com.volmit.iris.util;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.scaffold.engine.Engine;
import com.volmit.iris.scaffold.engine.EngineCompound;
import com.volmit.iris.scaffold.engine.EngineEffects;
import com.volmit.iris.scaffold.engine.EngineFramework;
import com.volmit.iris.scaffold.engine.EngineMetrics;
import com.volmit.iris.scaffold.engine.EngineTarget;
import com.volmit.iris.scaffold.engine.EngineWorldManager;
import com.volmit.iris.scaffold.hunk.Hunk;
import com.volmit.iris.util.FakeWorld;
import lombok.Getter;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
public class FakeEngine implements Engine {
@Getter
private IrisDimension dimension;
@Getter
private World world;
public FakeEngine(IrisDimension dimension, FakeWorld world) {
this.dimension = dimension;
this.world = world;
}
@Override
public void close() { }
@Override
public boolean isClosed() {
return false;
}
@Override
public IrisDataManager getData() {
return dimension.getLoader().copy();
}
@Override
public EngineWorldManager getWorldManager() {
return null;
}
@Override
public void setParallelism(int parallelism) { }
@Override
public int getParallelism() {
return 0;
}
@Override
public EngineTarget getTarget() {
return null;
}
@Override
public EngineFramework getFramework() {
return null;
}
@Override
public void setMinHeight(int min) { }
@Override
public void recycle() { }
@Override
public int getIndex() {
return 0;
}
@Override
public int getMinHeight() {
return 0;
}
@Override
public int getHeight() {
return 64;
}
@Override
public double modifyX(double x) {
return 0;
}
@Override
public double modifyZ(double z) {
return 0;
}
@Override
public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<Biome> biomes) { }
@Override
public EngineMetrics getMetrics() {
return null;
}
@Override
public EngineEffects getEffects() {
return null;
}
@Override
public EngineCompound getCompound() {
return null;
}
@Override
public IrisBiome getFocus() {
return null;
}
@Override
public void fail(String error, Throwable e) { }
@Override
public boolean hasFailed() {
return false;
}
@Override
public int getCacheID() {
return 0;
}
@Override
public void hotload() { }
}

View File

@@ -0,0 +1,506 @@
package com.volmit.iris.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
/**
* Credit to https://github.com/lzyzsd/AndroidRandomColor
*/
public class RandomColor {
public static int hueOffset = 0;
public static class ColorInfo {
Range hueRange;
Range saturationRange;
Range brightnessRange;
List<Range> lowerBounds;
public ColorInfo(Range hueRange, Range saturationRange, Range brightnessRange, List<Range> lowerBounds) {
this.hueRange = hueRange;
this.saturationRange = saturationRange;
this.brightnessRange = brightnessRange;
this.lowerBounds = lowerBounds;
}
public Range getHueRange() {
return hueRange;
}
public void setHueRange(Range hueRange) {
this.hueRange = hueRange;
}
public Range getSaturationRange() {
return saturationRange;
}
public void setSaturationRange(Range saturationRange) {
this.saturationRange = saturationRange;
}
public Range getBrightnessRange() {
return brightnessRange;
}
public void setBrightnessRange(Range brightnessRange) {
this.brightnessRange = brightnessRange;
}
public List<Range> getLowerBounds() {
return lowerBounds;
}
public void setLowerBounds(List<Range> lowerBounds) {
this.lowerBounds = lowerBounds;
}
}
public static class Range {
int start;
int end;
public Range(int start, int end) {
this.start = start;
this.end = end;
}
public boolean contain(int value) {
return value >= start && value <= end;
}
@Override
public String toString() {
return "start: " + start + " end: " + end;
}
}
private Random random;
public static enum SaturationType {
RANDOM, MONOCHROME, HIGH, LOW, MEDIUM
}
public static enum Luminosity {
BRIGHT, LIGHT, DARK, RANDOM
}
public static class Options {
int hue;
SaturationType saturationType;
Luminosity luminosity;
public int getHue() {
return hue;
}
public void setHue(int hue) {
this.hue = hue;
}
public SaturationType getSaturationType() {
return saturationType;
}
public void setSaturationType(SaturationType saturationType) {
this.saturationType = saturationType;
}
public Luminosity getLuminosity() {
return luminosity;
}
public void setLuminosity(Luminosity luminosity) {
this.luminosity = luminosity;
}
}
private HashMap<String, ColorInfo> colors = new HashMap<>();
public RandomColor() {
loadColorBounds();
random = new Random();
}
public RandomColor(long seed){
loadColorBounds();
random = new Random();
random.setSeed(seed);
}
private int getColor(int hue, int saturation, int brightness) {
return java.awt.Color.getHSBColor((float)(hue + hueOffset % 360) / 360, (float)saturation / 100, (float)brightness / 100).getRGB();
}
public int randomColor() {
return randomColor(0, null, null);
}
public int randomColor(int value, SaturationType saturationType, Luminosity luminosity) {
int hue = value;
hue = pickHue(hue);
int saturation = pickSaturation(hue, saturationType, luminosity);
int brightness = pickBrightness(hue, saturation, luminosity);
return getColor(hue, saturation, brightness);
}
public int randomColor(Color color, SaturationType saturationType, Luminosity luminosity) {
int hue = pickHue(color.name());
int saturation = pickSaturation(hue, saturationType, luminosity);
int brightness = pickBrightness(hue, saturation, luminosity);
return getColor(hue, saturation, brightness);
}
public int[] randomColor(int count) {
if (count <= 0) {
throw new IllegalArgumentException("count must be greater than 0");
}
int[] colors = new int[count];
for (int i = 0; i < count; i++) {
colors[i] = randomColor();
}
return colors;
}
public int randomColor(Color color) {
int hue = pickHue(color.name());
int saturation = pickSaturation(color, null, null);
int brightness = pickBrightness(color, saturation, null);
int colorValue = getColor(hue, saturation, brightness);
return colorValue;
}
public int[] random(Color color, int count) {
if (count <= 0) {
throw new IllegalArgumentException("count must be greater than 0");
}
int[] colors = new int[count];
for (int i = 0; i < count; i++) {
colors[i] = randomColor(color);
}
return colors;
}
private int pickHue(int hue) {
Range hueRange = getHueRange(hue);
return doPickHue(hueRange);
}
private int doPickHue(Range hueRange) {
int hue = randomWithin(hueRange);
// Instead of storing red as two seperate ranges,
// we group them, using negative numbers
if (hue < 0) {
hue = 360 + hue;
}
return hue;
}
private int pickHue(String name) {
Range hueRange = getHueRange(name);
return doPickHue(hueRange);
}
private Range getHueRange(int number) {
if (number < 360 && number > 0) {
return new Range(number, number);
}
return new Range(0, 360);
}
private Range getHueRange(String name) {
if (colors.containsKey(name)) {
return colors.get(name).getHueRange();
}
return new Range(0, 360);
}
private int pickSaturation(int hue, SaturationType saturationType, Luminosity luminosity) {
return pickSaturation(getColorInfo(hue), saturationType, luminosity);
}
private int pickSaturation(Color color, SaturationType saturationType, Luminosity luminosity) {
ColorInfo colorInfo = colors.get(color.name());
return pickSaturation(colorInfo, saturationType, luminosity);
}
private int pickSaturation(ColorInfo colorInfo, SaturationType saturationType, Luminosity luminosity) {
if (saturationType != null) {
switch (saturationType) {
case RANDOM:
return randomWithin(new Range(0, 100));
case MONOCHROME:
return 0;
case HIGH:
return randomWithin(new Range(75, 100));
case MEDIUM:
return randomWithin(new Range(55, 75));
case LOW:
return randomWithin(new Range(35, 55));
}
}
if (colorInfo == null) {
return 0;
}
Range saturationRange = colorInfo.getSaturationRange();
int min = saturationRange.start;
int max = saturationRange.end;
if (luminosity != null) {
switch (luminosity) {
case LIGHT:
min = 55;
break;
case BRIGHT:
min = max - 10;
break;
case DARK:
max = 55;
break;
}
}
return randomWithin(new Range(min, max));
}
private int pickBrightness(int hue, int saturation, Luminosity luminosity) {
ColorInfo colorInfo = getColorInfo(hue);
return pickBrightness(colorInfo, saturation, luminosity);
}
private int pickBrightness(Color color, int saturation, Luminosity luminosity) {
ColorInfo colorInfo = colors.get(color.name());
return pickBrightness(colorInfo, saturation, luminosity);
}
private int pickBrightness(ColorInfo colorInfo, int saturation, Luminosity luminosity) {
int min = getMinimumBrightness(colorInfo, saturation),
max = 100;
if (luminosity != null) {
switch (luminosity) {
case DARK:
max = min + 20;
break;
case LIGHT:
min = (max + min) / 2;
break;
case RANDOM:
min = 0;
max = 100;
break;
}
}
return randomWithin(new Range(min, max));
}
private int getMinimumBrightness(ColorInfo colorInfo, int saturation) {
if (colorInfo == null) {
return 0;
}
List<Range> lowerBounds = colorInfo.getLowerBounds();
for (int i = 0; i < lowerBounds.size() - 1; i++) {
int s1 = lowerBounds.get(i).start,
v1 = lowerBounds.get(i).end;
if (i == lowerBounds.size() - 1) {
break;
}
int s2 = lowerBounds.get(i + 1).start,
v2 = lowerBounds.get(i + 1).end;
if (saturation >= s1 && saturation <= s2) {
float m = (v2 - v1)/(float) (s2 - s1),
b = v1 - m*s1;
return (int) (m*saturation + b);
}
}
return 0;
}
private ColorInfo getColorInfo(int hue) {
// Maps red colors to make picking hue easier
if (hue >= 334 && hue <= 360) {
hue-= 360;
}
for(String key : colors.keySet()) {
ColorInfo colorInfo = colors.get(key);
if (colorInfo.getHueRange() != null && colorInfo.getHueRange().contain(hue)) {
return colorInfo;
}
}
return null;
}
private int randomWithin (Range range) {
return (int) Math.floor(range.start + random.nextDouble()*(range.end + 1 - range.start));
}
public void defineColor(String name, Range hueRange, List<Range> lowerBounds) {
int sMin = lowerBounds.get(0).start;
int sMax = lowerBounds.get(lowerBounds.size() - 1).start;
int bMin = lowerBounds.get(lowerBounds.size() - 1).end;
int bMax = lowerBounds.get(0).end;
colors.put(name, new ColorInfo(hueRange, new Range(sMin, sMax), new Range(bMin, bMax), lowerBounds));
}
private void loadColorBounds() {
List<Range> lowerBounds1 = new ArrayList<>();
lowerBounds1.add(new Range(0, 0));
lowerBounds1.add(new Range(100, 0));
defineColor(
Color.MONOCHROME.name(),
new Range(0, 0),
lowerBounds1
);
List<Range> lowerBounds2 = new ArrayList<>();
lowerBounds2.add(new Range(20, 100));
lowerBounds2.add(new Range(30, 92));
lowerBounds2.add(new Range(40, 89));
lowerBounds2.add(new Range(50, 85));
lowerBounds2.add(new Range(60, 78));
lowerBounds2.add(new Range(70, 70));
lowerBounds2.add(new Range(80, 60));
lowerBounds2.add(new Range(90, 55));
lowerBounds2.add(new Range(100, 50));
defineColor(
Color.RED.name(),
new Range(-26, 18),
lowerBounds2
);
List<Range> lowerBounds3 = new ArrayList<Range>();
lowerBounds3.add(new Range(20, 100));
lowerBounds3.add(new Range(30, 93));
lowerBounds3.add(new Range(40, 88));
lowerBounds3.add(new Range(50, 86));
lowerBounds3.add(new Range(60, 85));
lowerBounds3.add(new Range(70, 70));
lowerBounds3.add(new Range(100, 70));
defineColor(
Color.ORANGE.name(),
new Range(19, 46),
lowerBounds3
);
List<Range> lowerBounds4 = new ArrayList<>();
lowerBounds4.add(new Range(25, 100));
lowerBounds4.add(new Range(40, 94));
lowerBounds4.add(new Range(50, 89));
lowerBounds4.add(new Range(60, 86));
lowerBounds4.add(new Range(70, 84));
lowerBounds4.add(new Range(80, 82));
lowerBounds4.add(new Range(90, 80));
lowerBounds4.add(new Range(100, 75));
defineColor(
Color.YELLOW.name(),
new Range(47, 62),
lowerBounds4
);
List<Range> lowerBounds5 = new ArrayList<>();
lowerBounds5.add(new Range(30, 100));
lowerBounds5.add(new Range(40, 90));
lowerBounds5.add(new Range(50, 85));
lowerBounds5.add(new Range(60, 81));
lowerBounds5.add(new Range(70, 74));
lowerBounds5.add(new Range(80, 64));
lowerBounds5.add(new Range(90, 50));
lowerBounds5.add(new Range(100, 40));
defineColor(
Color.GREEN.name(),
new Range(63,178),
lowerBounds5
);
List<Range> lowerBounds6 = new ArrayList<>();
lowerBounds6.add(new Range(20, 100));
lowerBounds6.add(new Range(30, 86));
lowerBounds6.add(new Range(40, 80));
lowerBounds6.add(new Range(50, 74));
lowerBounds6.add(new Range(60, 60));
lowerBounds6.add(new Range(70, 52));
lowerBounds6.add(new Range(80, 44));
lowerBounds6.add(new Range(90, 39));
lowerBounds6.add(new Range(100, 35));
defineColor(
Color.BLUE.name(),
new Range(179, 257),
lowerBounds6
);
List<Range> lowerBounds7 = new ArrayList<>();
lowerBounds7.add(new Range(20, 100));
lowerBounds7.add(new Range(30, 87));
lowerBounds7.add(new Range(40, 79));
lowerBounds7.add(new Range(50, 70));
lowerBounds7.add(new Range(60, 65));
lowerBounds7.add(new Range(70, 59));
lowerBounds7.add(new Range(80, 52));
lowerBounds7.add(new Range(90, 45));
lowerBounds7.add(new Range(100, 42));
defineColor(
Color.PURPLE.name(),
new Range(258, 282),
lowerBounds7
);
List<Range> lowerBounds8 = new ArrayList<>();
lowerBounds8.add(new Range(20, 100));
lowerBounds8.add(new Range(30, 90));
lowerBounds8.add(new Range(40, 86));
lowerBounds8.add(new Range(60, 84));
lowerBounds8.add(new Range(80, 80));
lowerBounds8.add(new Range(90, 75));
lowerBounds8.add(new Range(100, 73));
defineColor(
Color.PINK.name(),
new Range(283, 334),
lowerBounds8
);
}
public static enum Color {
MONOCHROME, RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE, PINK
}
}

View File

@@ -0,0 +1,128 @@
package com.volmit.iris.util;
import org.apache.commons.lang3.tuple.ImmutableTriple;
import org.apache.commons.lang3.tuple.Triple;
import org.bukkit.block.Biome;
import com.volmit.iris.util.RandomColor.*;
public class VanillaBiomeMap {
private static KMap<Biome, Integer> BIOME_HEX = new KMap<>();
private static KMap<Biome, Color> BIOME_COLOR = new KMap<>();
private static KMap<Biome, Luminosity> BIOME_LUMINOSITY = new KMap<>();
private static KMap<Biome, SaturationType> BIOME_SATURATION = new KMap<>();
private static KMap<Biome, Short> BIOME_IDs = new KMap<>();
private static void add(Biome biome, int color, short id, Color randomColor, Luminosity luminosity, SaturationType saturation) {
BIOME_HEX.put(biome, color);
BIOME_COLOR.put(biome, randomColor);
if (luminosity != null) BIOME_LUMINOSITY.put(biome, luminosity);
if (saturation != null) BIOME_SATURATION.put(biome, saturation);
BIOME_IDs.put(biome, id);
}
private static void add(Biome biome, int color, short id, Color randomColor, Luminosity luminosity) {
add(biome, color, id, randomColor, luminosity, null);
}
public static int getColor(Biome biome) {
return BIOME_HEX.get(biome);
}
public static Color getColorType(Biome biome) {
return BIOME_COLOR.get(biome);
}
public static Luminosity getColorLuminosity(Biome biome) {
return BIOME_LUMINOSITY.get(biome);
}
public static SaturationType getColorSaturatiom(Biome biome) {
return BIOME_SATURATION.get(biome);
}
public static short getId(Biome biome) {
return BIOME_IDs.get(biome);
}
static {
add(Biome.OCEAN, 0x000070, (short) 0, Color.BLUE, Luminosity.BRIGHT, SaturationType.MEDIUM);
add(Biome.PLAINS, 0x8DB360, (short) 1, Color.GREEN, Luminosity.LIGHT, SaturationType.MEDIUM);
add(Biome.DESERT, 0xFA9418, (short) 2, Color.YELLOW, Luminosity.LIGHT, SaturationType.MEDIUM);
add(Biome.MOUNTAINS, 0x606060, (short) 3, Color.MONOCHROME, Luminosity.BRIGHT, null);
add(Biome.FOREST, 0x056621, (short) 4, Color.GREEN, Luminosity.BRIGHT);
add(Biome.TAIGA, 0x0B6659, (short) 5, Color.GREEN, Luminosity.BRIGHT, SaturationType.MEDIUM);
add(Biome.SWAMP, 0x07F9B2, (short) 6, Color.ORANGE, Luminosity.DARK, SaturationType.MEDIUM);
add(Biome.RIVER, 0x0000FF, (short) 7, Color.BLUE, Luminosity.LIGHT, SaturationType.LOW);
add(Biome.NETHER_WASTES, 0xBF3B3B, (short) 8, Color.RED, Luminosity.LIGHT, SaturationType.MEDIUM);
add(Biome.THE_END, 0x8080FF, (short) 9, Color.PURPLE, Luminosity.LIGHT, SaturationType.LOW);
add(Biome.FROZEN_OCEAN, 0x7070D6, (short) 10, Color.BLUE, Luminosity.BRIGHT, SaturationType.MEDIUM);
add(Biome.FROZEN_RIVER, 0xA0A0FF, (short) 11, Color.BLUE, Luminosity.BRIGHT, SaturationType.MEDIUM);
add(Biome.SNOWY_TUNDRA, 0xFFFFFF, (short) 12, Color.MONOCHROME, Luminosity.LIGHT);
add(Biome.SNOWY_MOUNTAINS, 0xA0A0A0, (short) 13, Color.MONOCHROME, Luminosity.LIGHT);
add(Biome.MUSHROOM_FIELDS, 0xFF00FF, (short) 14, Color.PURPLE, Luminosity.BRIGHT);
add(Biome.MUSHROOM_FIELD_SHORE, 0xA000FF, (short) 15, Color.PURPLE, Luminosity.BRIGHT);
add(Biome.BEACH, 0xFADE55, (short) 16, Color.YELLOW, Luminosity.LIGHT, SaturationType.LOW);
add(Biome.DESERT_HILLS, 0xD25F12, (short) 17, Color.YELLOW, Luminosity.LIGHT, SaturationType.MEDIUM);
add(Biome.WOODED_HILLS, 0x22551C, (short) 18, Color.GREEN, Luminosity.LIGHT);
add(Biome.TAIGA_HILLS, 0x163933, (short) 19, Color.GREEN, Luminosity.BRIGHT, SaturationType.MEDIUM);
add(Biome.MOUNTAIN_EDGE, 0x72789A, (short) 20, Color.MONOCHROME, Luminosity.BRIGHT);
add(Biome.JUNGLE, 0x537B09, (short) 21, Color.GREEN, Luminosity.BRIGHT, SaturationType.HIGH);
add(Biome.JUNGLE_HILLS, 0x2C4205, (short) 22, Color.GREEN, Luminosity.DARK, SaturationType.HIGH);
add(Biome.JUNGLE_EDGE, 0x628B17, (short) 23, Color.GREEN, Luminosity.BRIGHT, SaturationType.HIGH);
add(Biome.DEEP_OCEAN, 0x000030, (short) 24, Color.BLUE, Luminosity.DARK);
add(Biome.STONE_SHORE, 0xA2A284, (short) 25, Color.GREEN, Luminosity.DARK);
add(Biome.SNOWY_BEACH, 0xFAF0C0, (short) 26, Color.YELLOW, Luminosity.LIGHT);
add(Biome.BIRCH_FOREST, 0x307444, (short) 27, Color.GREEN, Luminosity.LIGHT);
add(Biome.BIRCH_FOREST_HILLS, 0x1F5F32, (short) 28, Color.GREEN, Luminosity.LIGHT);
add(Biome.DARK_FOREST, 0x40511A, (short) 29, Color.GREEN, Luminosity.DARK);
add(Biome.SNOWY_TAIGA, 0x31554A, (short) 30, Color.BLUE, Luminosity.LIGHT);
add(Biome.SNOWY_TAIGA_HILLS, 0x243F36, (short) 31, Color.BLUE, Luminosity.LIGHT);
add(Biome.GIANT_TREE_TAIGA, 0x596651, (short) 32, Color.ORANGE, Luminosity.LIGHT);
add(Biome.GIANT_TREE_TAIGA_HILLS, 0x454F3E, (short) 33, Color.ORANGE, Luminosity.LIGHT);
add(Biome.WOODED_MOUNTAINS, 0x507050, (short) 34, Color.MONOCHROME, Luminosity.BRIGHT);
add(Biome.SAVANNA, 0xBDB25F, (short) 35, Color.GREEN, Luminosity.LIGHT);
add(Biome.SAVANNA_PLATEAU, 0xA79D64, (short) 36, Color.GREEN, Luminosity.LIGHT);
add(Biome.BADLANDS, 0xD94515, (short) 37, Color.ORANGE, Luminosity.BRIGHT, SaturationType.MEDIUM);
add(Biome.WOODED_BADLANDS_PLATEAU, 0xB09765, (short) 38, Color.ORANGE, Luminosity.BRIGHT, SaturationType.HIGH);
add(Biome.BADLANDS_PLATEAU, 0xCA8C65, (short) 39, Color.ORANGE, Luminosity.BRIGHT, SaturationType.HIGH);
add(Biome.END_MIDLANDS, 0x8080FF, (short) 41, Color.YELLOW, Luminosity.LIGHT, SaturationType.LOW);
add(Biome.END_HIGHLANDS, 0x8080FF, (short) 42, Color.PURPLE, Luminosity.LIGHT, SaturationType.LOW);
add(Biome.END_BARRENS, 0x8080FF, (short) 43, Color.PURPLE, Luminosity.LIGHT, SaturationType.MEDIUM);
add(Biome.WARM_OCEAN, 0x0000AC, (short) 44, Color.BLUE, Luminosity.BRIGHT, SaturationType.LOW);
add(Biome.LUKEWARM_OCEAN, 0x000090, (short) 45, Color.BLUE, Luminosity.BRIGHT, SaturationType.MEDIUM);
add(Biome.COLD_OCEAN, 0x202070, (short) 46, Color.BLUE, Luminosity.BRIGHT, SaturationType.HIGH);
add(Biome.DEEP_WARM_OCEAN, 0x000050, (short) 47, Color.BLUE, Luminosity.DARK, SaturationType.LOW);
add(Biome.DEEP_LUKEWARM_OCEAN, 0x000040, (short) 48, Color.BLUE, Luminosity.DARK, SaturationType.MEDIUM);
add(Biome.DEEP_COLD_OCEAN, 0x202038, (short) 49, Color.BLUE, Luminosity.DARK, SaturationType.HIGH);
add(Biome.DEEP_FROZEN_OCEAN, 0x404090, (short) 50, Color.BLUE, Luminosity.LIGHT, SaturationType.LOW);
add(Biome.THE_VOID, 0x000000, (short) 127, Color.MONOCHROME, Luminosity.DARK);
add(Biome.SUNFLOWER_PLAINS, 0xB5DB88, (short) 129, Color.GREEN, Luminosity.LIGHT, SaturationType.LOW);
add(Biome.DESERT_LAKES, 0xFFBC40, (short) 130, Color.BLUE, Luminosity.LIGHT, SaturationType.LOW);
add(Biome.GRAVELLY_MOUNTAINS, 0x888888, (short) 131, Color.MONOCHROME, Luminosity.LIGHT);
add(Biome.FLOWER_FOREST, 0x2D8E49, (short) 132, Color.RED, Luminosity.LIGHT, SaturationType.LOW);
add(Biome.TAIGA_MOUNTAINS, 0x338E81, (short) 133, Color.GREEN, Luminosity.DARK, SaturationType.MEDIUM);
add(Biome.SWAMP_HILLS, 0x2FFFDA, (short) 134, Color.ORANGE, Luminosity.DARK, SaturationType.MEDIUM);
add(Biome.ICE_SPIKES, 0xB4DCDC, (short) 140, Color.BLUE, Luminosity.LIGHT, SaturationType.LOW);
add(Biome.MODIFIED_JUNGLE, 0x7BA331, (short) 149, Color.GREEN, Luminosity.BRIGHT, SaturationType.HIGH);
add(Biome.MODIFIED_JUNGLE_EDGE, 0x8AB33F, (short) 151, Color.GREEN, Luminosity.BRIGHT, SaturationType.HIGH);
add(Biome.TALL_BIRCH_FOREST, 0x589C6C, (short) 155, Color.GREEN, Luminosity.LIGHT);
add(Biome.TALL_BIRCH_HILLS, 0x47875A, (short) 156, Color.GREEN, Luminosity.LIGHT);
add(Biome.DARK_FOREST_HILLS, 0x687942, (short) 157, Color.GREEN, Luminosity.DARK);
add(Biome.SNOWY_TAIGA_MOUNTAINS, 0x597D72, (short) 158, Color.BLUE, Luminosity.LIGHT);
add(Biome.GIANT_SPRUCE_TAIGA, 0x818E79, (short) 160, Color.ORANGE, Luminosity.DARK, SaturationType.HIGH);
add(Biome.GIANT_SPRUCE_TAIGA_HILLS, 0x6D7766, (short) 161, Color.ORANGE, Luminosity.DARK, SaturationType.HIGH);
add(Biome.GRAVELLY_MOUNTAINS, 0x789878, (short) 162, Color.MONOCHROME, Luminosity.LIGHT);
add(Biome.SHATTERED_SAVANNA, 0xE5DA87, (short) 163, Color.ORANGE, Luminosity.LIGHT, SaturationType.HIGH);
add(Biome.SHATTERED_SAVANNA_PLATEAU, 0xCFC58C, (short) 164, Color.ORANGE, Luminosity.LIGHT, SaturationType.HIGH);
add(Biome.ERODED_BADLANDS, 0xFF6D3D, (short) 165, Color.ORANGE, Luminosity.LIGHT, SaturationType.HIGH);
add(Biome.MODIFIED_WOODED_BADLANDS_PLATEAU, 0xD8BF8D, (short) 166, Color.ORANGE, Luminosity.BRIGHT);
add(Biome.MODIFIED_BADLANDS_PLATEAU, 0xF2B48D, (short) 167, Color.ORANGE, Luminosity.BRIGHT);
add(Biome.BAMBOO_JUNGLE, 0x768E14, (short) 168, Color.GREEN, Luminosity.BRIGHT, SaturationType.HIGH);
add(Biome.BAMBOO_JUNGLE_HILLS, 0x3B470A, (short) 169, Color.GREEN, Luminosity.BRIGHT, SaturationType.HIGH);
add(Biome.SOUL_SAND_VALLEY, 0x5E3830, (short) 170, Color.BLUE, Luminosity.BRIGHT, SaturationType.MEDIUM);
add(Biome.CRIMSON_FOREST, 0xDD0808, (short) 171, Color.RED, Luminosity.DARK, SaturationType.HIGH);
add(Biome.WARPED_FOREST, 0x49907B, (short) 172, Color.BLUE, Luminosity.BRIGHT);
add(Biome.BASALT_DELTAS, 0x403636, (short) 173, Color.MONOCHROME, Luminosity.DARK);
}
}