diff --git a/DynmapCore/src/main/java/org/dynmap/common/BiomeMap.java b/DynmapCore/src/main/java/org/dynmap/common/BiomeMap.java index a7b08b46..1f5950b7 100644 --- a/DynmapCore/src/main/java/org/dynmap/common/BiomeMap.java +++ b/DynmapCore/src/main/java/org/dynmap/common/BiomeMap.java @@ -3,6 +3,7 @@ package org.dynmap.common; import java.util.Arrays; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import org.dynmap.hdmap.HDBlockModels; @@ -44,6 +45,7 @@ public class BiomeMap { private int watercolormult; private int grassmult; private int foliagemult; + private Optional biomeObj = Optional.empty(); private final String id; private final String resourcelocation; private final int index; @@ -308,4 +310,10 @@ public class BiomeMap { public String toString() { return String.format("%s(%s)", id, resourcelocation); } + public @SuppressWarnings("unchecked") Optional getBiomeObject() { + return (Optional) biomeObj; + } + public void setBiomeObject(Object biomeObj) { + this.biomeObj = Optional.of(biomeObj); + } } diff --git a/DynmapCore/src/main/java/org/dynmap/common/chunk/GenericMapChunkCache.java b/DynmapCore/src/main/java/org/dynmap/common/chunk/GenericMapChunkCache.java index 18aaaad6..55f0cc44 100644 --- a/DynmapCore/src/main/java/org/dynmap/common/chunk/GenericMapChunkCache.java +++ b/DynmapCore/src/main/java/org/dynmap/common/chunk/GenericMapChunkCache.java @@ -181,7 +181,7 @@ public abstract class GenericMapChunkCache extends MapChunkCache { for (int dz = -1; dz <= 1; dz++) { BiomeMap bm = getBiomeRel(dx, dz); if (bm == BiomeMap.NULL) continue; - int rmult = bm.getModifiedGrassMultiplier(colormap[bm.biomeLookup()]); + int rmult = getGrassColor(bm, colormap, getX() + dx, getZ() + dz); raccum += (rmult >> 16) & 0xFF; gaccum += (rmult >> 8) & 0xFF; baccum += rmult & 0xFF; @@ -212,7 +212,7 @@ public abstract class GenericMapChunkCache extends MapChunkCache { for (int dz = -1; dz <= 1; dz++) { BiomeMap bm = getBiomeRel(dx, dz); if (bm == BiomeMap.NULL) continue; - int rmult = bm.getModifiedFoliageMultiplier(colormap[bm.biomeLookup()]); + int rmult = getFoliageColor(bm, colormap, getX() + dx, getZ() + dz); raccum += (rmult >> 16) & 0xFF; gaccum += (rmult >> 8) & 0xFF; baccum += rmult & 0xFF; @@ -546,6 +546,14 @@ public abstract class GenericMapChunkCache extends MapChunkCache { } } + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getModifiedGrassMultiplier(colormap[bm.biomeLookup()]); + } + + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getModifiedFoliageMultiplier(colormap[bm.biomeLookup()]); + } + private class OurEndMapIterator extends OurMapIterator { OurEndMapIterator(int x0, int y0, int z0) { super(x0, y0, z0); diff --git a/bukkit-helper-116-4/src/main/java/org/dynmap/bukkit/helper/v116_4/BukkitVersionHelperSpigot116_4.java b/bukkit-helper-116-4/src/main/java/org/dynmap/bukkit/helper/v116_4/BukkitVersionHelperSpigot116_4.java index 26b87b2f..2ea990b2 100644 --- a/bukkit-helper-116-4/src/main/java/org/dynmap/bukkit/helper/v116_4/BukkitVersionHelperSpigot116_4.java +++ b/bukkit-helper-116-4/src/main/java/org/dynmap/bukkit/helper/v116_4/BukkitVersionHelperSpigot116_4.java @@ -20,6 +20,7 @@ import java.lang.reflect.Method; import java.util.HashMap; import java.util.IdentityHashMap; import java.util.List; +import java.util.Optional; /** @@ -28,10 +29,16 @@ import java.util.List; public class BukkitVersionHelperSpigot116_4 extends BukkitVersionHelperGeneric { private final boolean unsafeAsync; private Field watercolorfield; + private static Field grassColorField; + private static Field foliageColorField; + private static Field grassColorModifierField; public BukkitVersionHelperSpigot116_4() { Class biomefog = getNMSClass("net.minecraft.server.BiomeFog"); watercolorfield = getPrivateField(biomefog, new String[] { "c" }, int.class); + grassColorField = getPrivateField(biomefog, new String[] { "g" }, Optional.class); + foliageColorField = getPrivateField(biomefog, new String[] { "f" }, Optional.class); + grassColorModifierField = getPrivateField(biomefog, new String[] { "h" }, BiomeFog.GrassColor.class); this.unsafeAsync = true; } @@ -160,6 +167,29 @@ public class BukkitVersionHelperSpigot116_4 extends BukkitVersionHelperGeneric { } return 0xFFFFFF; } + @SuppressWarnings("unchecked") + public static Optional getBiomeBaseGrassMult(BiomeBase bb) { + if (bb == null) return Optional.empty(); + try { + return (Optional) grassColorField.get(bb.l()); + } catch (IllegalArgumentException | IllegalAccessException ignored) {} + return Optional.empty(); + } + @SuppressWarnings("unchecked") + public static Optional getBiomeBaseFoliageMult(BiomeBase bb) { + if (bb == null) return Optional.empty(); + try { + return (Optional) foliageColorField.get(bb.l()); + } catch (IllegalArgumentException | IllegalAccessException ignored) {} + return Optional.empty(); + } + public static BiomeFog.GrassColor getBiomeBaseGrassModifier(BiomeBase bb) { + if (bb == null) return BiomeFog.GrassColor.NONE; + try { + return (BiomeFog.GrassColor) grassColorModifierField.get(bb.l()); + } catch (IllegalArgumentException | IllegalAccessException ignored) {} + return BiomeFog.GrassColor.NONE; + } /** Get temperature from biomebase */ @Override diff --git a/bukkit-helper-116-4/src/main/java/org/dynmap/bukkit/helper/v116_4/MapChunkCache116_4.java b/bukkit-helper-116-4/src/main/java/org/dynmap/bukkit/helper/v116_4/MapChunkCache116_4.java index e046e4fd..7c1b6665 100644 --- a/bukkit-helper-116-4/src/main/java/org/dynmap/bukkit/helper/v116_4/MapChunkCache116_4.java +++ b/bukkit-helper-116-4/src/main/java/org/dynmap/bukkit/helper/v116_4/MapChunkCache116_4.java @@ -6,12 +6,14 @@ import org.bukkit.World; import org.bukkit.craftbukkit.v1_16_R3.CraftWorld; import org.dynmap.DynmapChunk; import org.dynmap.bukkit.helper.BukkitWorld; +import org.dynmap.common.BiomeMap; import org.dynmap.common.chunk.GenericChunk; import org.dynmap.common.chunk.GenericChunkCache; import org.dynmap.common.chunk.GenericMapChunkCache; import java.io.IOException; import java.util.List; +import java.util.Optional; /** * Container for managing chunks - dependent upon using chunk snapshots, since rendering is off server thread @@ -62,5 +64,26 @@ public class MapChunkCache116_4 extends GenericMapChunkCache { this.w = dw.getWorld(); super.setChunks(dw, chunks); } + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + Optional base = bm.getBiomeObject(); + return BukkitVersionHelperSpigot116_4.getBiomeBaseFoliageMult(base.orElse(null)).orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeBase base = bm.getBiomeObject().orElse(null); + if (base == null) return bm.getModifiedGrassMultiplier(colormap[bm.biomeLookup()]); + int grassMult = BukkitVersionHelperSpigot116_4.getBiomeBaseGrassMult(base).orElse(colormap[bm.biomeLookup()]); + BiomeFog.GrassColor modifier = BukkitVersionHelperSpigot116_4.getBiomeBaseGrassModifier(base); + if (modifier == BiomeFog.GrassColor.DARK_FOREST) { + return ((grassMult & 0xfefefe) + 0x28340a) >> 1; + } else if (modifier == BiomeFog.GrassColor.SWAMP) { + double var5 = BiomeBase.f.a(x * 0.0225, z * 0.0225, false); + return var5 < -0.1 ? 0x4c763c : 0x6a7039; + } else { + return grassMult; + } + } } diff --git a/bukkit-helper-117/src/main/java/org/dynmap/bukkit/helper/v117/MapChunkCache117.java b/bukkit-helper-117/src/main/java/org/dynmap/bukkit/helper/v117/MapChunkCache117.java index b92d76a0..9d5c790d 100644 --- a/bukkit-helper-117/src/main/java/org/dynmap/bukkit/helper/v117/MapChunkCache117.java +++ b/bukkit-helper-117/src/main/java/org/dynmap/bukkit/helper/v117/MapChunkCache117.java @@ -1,9 +1,12 @@ package org.dynmap.bukkit.helper.v117; +import net.minecraft.world.level.biome.BiomeBase; +import net.minecraft.world.level.biome.BiomeFog; import org.bukkit.World; import org.bukkit.craftbukkit.v1_17_R1.CraftWorld; import org.dynmap.DynmapChunk; import org.dynmap.bukkit.helper.BukkitWorld; +import org.dynmap.common.BiomeMap; import org.dynmap.common.chunk.GenericChunk; import org.dynmap.common.chunk.GenericChunkCache; import org.dynmap.common.chunk.GenericMapChunkCache; @@ -16,6 +19,7 @@ import net.minecraft.world.level.chunk.storage.ChunkRegionLoader; import java.io.IOException; import java.util.List; +import java.util.Optional; /** * Container for managing chunks - dependent upon using chunk snapshots, since rendering is off server thread @@ -66,4 +70,16 @@ public class MapChunkCache117 extends GenericMapChunkCache { this.w = dw.getWorld(); super.setChunks(dw, chunks); } + + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getBiomeObject().map(BiomeBase::l).flatMap(BiomeFog::e).orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeFog fog = bm.getBiomeObject().map(BiomeBase::l).orElse(null); + if (fog == null) return colormap[bm.biomeLookup()]; + return fog.g().a(x, z, fog.f().orElse(colormap[bm.biomeLookup()])); + } } diff --git a/bukkit-helper-118-2/src/main/java/org/dynmap/bukkit/helper/v118_2/MapChunkCache118_2.java b/bukkit-helper-118-2/src/main/java/org/dynmap/bukkit/helper/v118_2/MapChunkCache118_2.java index 21b94ea3..966bba72 100644 --- a/bukkit-helper-118-2/src/main/java/org/dynmap/bukkit/helper/v118_2/MapChunkCache118_2.java +++ b/bukkit-helper-118-2/src/main/java/org/dynmap/bukkit/helper/v118_2/MapChunkCache118_2.java @@ -1,6 +1,8 @@ package org.dynmap.bukkit.helper.v118_2; import net.minecraft.server.MinecraftServer; +import net.minecraft.world.level.biome.BiomeBase; +import net.minecraft.world.level.biome.BiomeFog; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.craftbukkit.v1_18_R2.CraftServer; @@ -9,6 +11,7 @@ import org.dynmap.DynmapChunk; import org.dynmap.MapManager; import org.dynmap.bukkit.helper.BukkitVersionHelper; import org.dynmap.bukkit.helper.BukkitWorld; +import org.dynmap.common.BiomeMap; import org.dynmap.common.chunk.GenericChunk; import org.dynmap.common.chunk.GenericChunkCache; import org.dynmap.common.chunk.GenericMapChunkCache; @@ -96,4 +99,16 @@ public class MapChunkCache118_2 extends GenericMapChunkCache { this.w = dw.getWorld(); super.setChunks(dw, chunks); } + + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getBiomeObject().map(BiomeBase::j).flatMap(BiomeFog::e).orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeFog fog = bm.getBiomeObject().map(BiomeBase::j).orElse(null); + if (fog == null) return colormap[bm.biomeLookup()]; + return fog.g().a(x, z, fog.f().orElse(colormap[bm.biomeLookup()])); + } } diff --git a/bukkit-helper-118/src/main/java/org/dynmap/bukkit/helper/v118/MapChunkCache118.java b/bukkit-helper-118/src/main/java/org/dynmap/bukkit/helper/v118/MapChunkCache118.java index f9bb442c..6269a004 100644 --- a/bukkit-helper-118/src/main/java/org/dynmap/bukkit/helper/v118/MapChunkCache118.java +++ b/bukkit-helper-118/src/main/java/org/dynmap/bukkit/helper/v118/MapChunkCache118.java @@ -1,5 +1,7 @@ package org.dynmap.bukkit.helper.v118; +import net.minecraft.world.level.biome.BiomeBase; +import net.minecraft.world.level.biome.BiomeFog; import org.bukkit.ChunkSnapshot; import org.bukkit.World; import org.bukkit.block.Biome; @@ -85,4 +87,17 @@ public class MapChunkCache118 extends GenericMapChunkCache { this.w = dw.getWorld(); super.setChunks(dw, chunks); } + + + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getBiomeObject().map(BiomeBase::j).flatMap(BiomeFog::e).orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeFog fog = bm.getBiomeObject().map(BiomeBase::j).orElse(null); + if (fog == null) return colormap[bm.biomeLookup()]; + return fog.g().a(x, z, fog.f().orElse(colormap[bm.biomeLookup()])); + } } diff --git a/bukkit-helper-119/src/main/java/org/dynmap/bukkit/helper/v119/MapChunkCache119.java b/bukkit-helper-119/src/main/java/org/dynmap/bukkit/helper/v119/MapChunkCache119.java index 5ecbc277..7a08ac41 100644 --- a/bukkit-helper-119/src/main/java/org/dynmap/bukkit/helper/v119/MapChunkCache119.java +++ b/bukkit-helper-119/src/main/java/org/dynmap/bukkit/helper/v119/MapChunkCache119.java @@ -1,10 +1,13 @@ package org.dynmap.bukkit.helper.v119; +import net.minecraft.world.level.biome.BiomeBase; +import net.minecraft.world.level.biome.BiomeFog; import org.bukkit.World; import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; import org.dynmap.DynmapChunk; import org.dynmap.bukkit.helper.BukkitVersionHelper; import org.dynmap.bukkit.helper.BukkitWorld; +import org.dynmap.common.BiomeMap; import org.dynmap.common.chunk.GenericChunk; import org.dynmap.common.chunk.GenericChunkCache; import org.dynmap.common.chunk.GenericMapChunkCache; @@ -94,4 +97,16 @@ public class MapChunkCache119 extends GenericMapChunkCache { this.w = dw.getWorld(); super.setChunks(dw, chunks); } + + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getBiomeObject().map(BiomeBase::j).flatMap(BiomeFog::e).orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeFog fog = bm.getBiomeObject().map(BiomeBase::j).orElse(null); + if (fog == null) return colormap[bm.biomeLookup()]; + return fog.g().a(x, z, fog.f().orElse(colormap[bm.biomeLookup()])); + } } diff --git a/fabric-1.16.4/src/main/java/org/dynmap/fabric_1_16_4/DynmapPlugin.java b/fabric-1.16.4/src/main/java/org/dynmap/fabric_1_16_4/DynmapPlugin.java index 9cebfd15..1297f99b 100644 --- a/fabric-1.16.4/src/main/java/org/dynmap/fabric_1_16_4/DynmapPlugin.java +++ b/fabric-1.16.4/src/main/java/org/dynmap/fabric_1_16_4/DynmapPlugin.java @@ -396,6 +396,7 @@ public class DynmapPlugin { bmap.setWaterColorMultiplier(watermult); Log.verboseinfo("Set watercolormult for " + bmap.toString() + " (" + i + ") to " + Integer.toHexString(watermult)); } + bmap.setBiomeObject(bb); } } if (cnt > 0) diff --git a/fabric-1.16.4/src/main/java/org/dynmap/fabric_1_16_4/FabricMapChunkCache.java b/fabric-1.16.4/src/main/java/org/dynmap/fabric_1_16_4/FabricMapChunkCache.java index 8d845aa7..8d0e1d3f 100644 --- a/fabric-1.16.4/src/main/java/org/dynmap/fabric_1_16_4/FabricMapChunkCache.java +++ b/fabric-1.16.4/src/main/java/org/dynmap/fabric_1_16_4/FabricMapChunkCache.java @@ -7,12 +7,16 @@ import net.minecraft.server.world.ThreadedAnvilChunkStorage; import net.minecraft.util.math.ChunkPos; import net.minecraft.world.ChunkSerializer; import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeEffects; import net.minecraft.world.chunk.ChunkManager; import net.minecraft.world.chunk.ChunkStatus; import org.dynmap.DynmapChunk; import org.dynmap.Log; +import org.dynmap.common.BiomeMap; import org.dynmap.common.chunk.GenericChunk; import org.dynmap.common.chunk.GenericMapChunkCache; +import org.dynmap.fabric_1_16_4.mixin.BiomeEffectsAccessor; import java.util.*; @@ -85,5 +89,29 @@ public class FabricMapChunkCache extends GenericMapChunkCache { } return gc; } + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getBiomeObject() + .map(Biome::getEffects) + .map(BiomeEffectsAccessor.class::cast) + .flatMap(BiomeEffectsAccessor::getFoliageColor) + .orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeEffectsAccessor effects = (BiomeEffectsAccessor) bm.getBiomeObject().map(Biome::getEffects).orElse(null); + if (effects == null) return colormap[bm.biomeLookup()]; + int grassMult = effects.getGrassColor().orElse(colormap[bm.biomeLookup()]); + BiomeEffects.GrassColorModifier modifier = effects.getGrassColorModifier(); + if (modifier == BiomeEffects.GrassColorModifier.DARK_FOREST) { + return ((grassMult & 0xfefefe) + 0x28340a) >> 1; + } else if (modifier == BiomeEffects.GrassColorModifier.SWAMP) { + double var5 = Biome.FOLIAGE_NOISE.sample(x * 0.0225, z * 0.0225, false); + return var5 < -0.1 ? 0x4c763c : 0x6a7039; + } else { + return grassMult; + } + } } diff --git a/fabric-1.16.4/src/main/java/org/dynmap/fabric_1_16_4/mixin/BiomeEffectsAccessor.java b/fabric-1.16.4/src/main/java/org/dynmap/fabric_1_16_4/mixin/BiomeEffectsAccessor.java index edaf842c..8992d789 100644 --- a/fabric-1.16.4/src/main/java/org/dynmap/fabric_1_16_4/mixin/BiomeEffectsAccessor.java +++ b/fabric-1.16.4/src/main/java/org/dynmap/fabric_1_16_4/mixin/BiomeEffectsAccessor.java @@ -4,8 +4,16 @@ import net.minecraft.world.biome.BiomeEffects; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; +import java.util.Optional; + @Mixin(BiomeEffects.class) public interface BiomeEffectsAccessor { @Accessor int getWaterColor(); + @Accessor + Optional getFoliageColor(); + @Accessor + Optional getGrassColor(); + @Accessor + BiomeEffects.GrassColorModifier getGrassColorModifier(); } diff --git a/fabric-1.17.1/src/main/java/org/dynmap/fabric_1_17_1/DynmapPlugin.java b/fabric-1.17.1/src/main/java/org/dynmap/fabric_1_17_1/DynmapPlugin.java index e37d4cf2..bea87f23 100644 --- a/fabric-1.17.1/src/main/java/org/dynmap/fabric_1_17_1/DynmapPlugin.java +++ b/fabric-1.17.1/src/main/java/org/dynmap/fabric_1_17_1/DynmapPlugin.java @@ -397,6 +397,7 @@ public class DynmapPlugin { bmap.setWaterColorMultiplier(watermult); Log.verboseinfo("Set watercolormult for " + bmap.toString() + " (" + i + ") to " + Integer.toHexString(watermult)); } + bmap.setBiomeObject(bb); } } if (cnt > 0) diff --git a/fabric-1.17.1/src/main/java/org/dynmap/fabric_1_17_1/FabricMapChunkCache.java b/fabric-1.17.1/src/main/java/org/dynmap/fabric_1_17_1/FabricMapChunkCache.java index efc410f8..2b433330 100644 --- a/fabric-1.17.1/src/main/java/org/dynmap/fabric_1_17_1/FabricMapChunkCache.java +++ b/fabric-1.17.1/src/main/java/org/dynmap/fabric_1_17_1/FabricMapChunkCache.java @@ -7,10 +7,13 @@ import net.minecraft.server.world.ThreadedAnvilChunkStorage; import net.minecraft.util.math.ChunkPos; import net.minecraft.world.ChunkSerializer; import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeEffects; import net.minecraft.world.chunk.ChunkManager; import net.minecraft.world.chunk.ChunkStatus; import org.dynmap.DynmapChunk; import org.dynmap.Log; +import org.dynmap.common.BiomeMap; import org.dynmap.common.chunk.GenericChunk; import org.dynmap.common.chunk.GenericMapChunkCache; @@ -83,4 +86,15 @@ public class FabricMapChunkCache extends GenericMapChunkCache { } return gc; } + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getBiomeObject().map(Biome::getEffects).flatMap(BiomeEffects::getFoliageColor).orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeEffects effects = bm.getBiomeObject().map(Biome::getEffects).orElse(null); + if (effects == null) return colormap[bm.biomeLookup()]; + return effects.getGrassColorModifier().getModifiedGrassColor(x, z, effects.getGrassColor().orElse(colormap[bm.biomeLookup()])); + } } diff --git a/fabric-1.18.2/src/main/java/org/dynmap/fabric_1_18_2/DynmapPlugin.java b/fabric-1.18.2/src/main/java/org/dynmap/fabric_1_18_2/DynmapPlugin.java index f75589c0..84fdeb43 100644 --- a/fabric-1.18.2/src/main/java/org/dynmap/fabric_1_18_2/DynmapPlugin.java +++ b/fabric-1.18.2/src/main/java/org/dynmap/fabric_1_18_2/DynmapPlugin.java @@ -374,6 +374,7 @@ public class DynmapPlugin { bmap.setWaterColorMultiplier(watermult); Log.verboseinfo("Set watercolormult for " + bmap.toString() + " (" + i + ") to " + Integer.toHexString(watermult)); } + bmap.setBiomeObject(bb); } } if (cnt > 0) diff --git a/fabric-1.18.2/src/main/java/org/dynmap/fabric_1_18_2/FabricMapChunkCache.java b/fabric-1.18.2/src/main/java/org/dynmap/fabric_1_18_2/FabricMapChunkCache.java index f7394767..0aa74c1d 100644 --- a/fabric-1.18.2/src/main/java/org/dynmap/fabric_1_18_2/FabricMapChunkCache.java +++ b/fabric-1.18.2/src/main/java/org/dynmap/fabric_1_18_2/FabricMapChunkCache.java @@ -12,6 +12,7 @@ import net.minecraft.util.registry.Registry; import net.minecraft.world.ChunkSerializer; import net.minecraft.world.World; import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeEffects; import net.minecraft.world.chunk.ChunkManager; import net.minecraft.world.chunk.ChunkStatus; @@ -100,4 +101,15 @@ public class FabricMapChunkCache extends GenericMapChunkCache { } return gc; } + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getBiomeObject().map(Biome::getEffects).flatMap(BiomeEffects::getFoliageColor).orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeEffects effects = bm.getBiomeObject().map(Biome::getEffects).orElse(null); + if (effects == null) return colormap[bm.biomeLookup()]; + return effects.getGrassColorModifier().getModifiedGrassColor(x, z, effects.getGrassColor().orElse(colormap[bm.biomeLookup()])); + } } diff --git a/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/DynmapPlugin.java b/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/DynmapPlugin.java index 83cf5c55..66fa1d9c 100644 --- a/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/DynmapPlugin.java +++ b/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/DynmapPlugin.java @@ -367,6 +367,7 @@ public class DynmapPlugin { bmap.setWaterColorMultiplier(watermult); Log.verboseinfo("Set watercolormult for " + bmap.toString() + " (" + i + ") to " + Integer.toHexString(watermult)); } + bmap.setBiomeObject(bb); } } if (cnt > 0) diff --git a/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/FabricMapChunkCache.java b/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/FabricMapChunkCache.java index cc575c4e..cf10e17c 100644 --- a/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/FabricMapChunkCache.java +++ b/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/FabricMapChunkCache.java @@ -12,6 +12,7 @@ import net.minecraft.util.registry.Registry; import net.minecraft.world.ChunkSerializer; import net.minecraft.world.World; import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeEffects; import net.minecraft.world.chunk.ChunkManager; import net.minecraft.world.chunk.ChunkStatus; @@ -100,4 +101,15 @@ public class FabricMapChunkCache extends GenericMapChunkCache { } return gc; } + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getBiomeObject().map(Biome::getEffects).flatMap(BiomeEffects::getFoliageColor).orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeEffects effects = bm.getBiomeObject().map(Biome::getEffects).orElse(null); + if (effects == null) return colormap[bm.biomeLookup()]; + return effects.getGrassColorModifier().getModifiedGrassColor(x, z, effects.getGrassColor().orElse(colormap[bm.biomeLookup()])); + } } diff --git a/fabric-1.19.1/src/main/java/org/dynmap/fabric_1_19_1/DynmapPlugin.java b/fabric-1.19.1/src/main/java/org/dynmap/fabric_1_19_1/DynmapPlugin.java index 0e898c1c..f7e309ee 100644 --- a/fabric-1.19.1/src/main/java/org/dynmap/fabric_1_19_1/DynmapPlugin.java +++ b/fabric-1.19.1/src/main/java/org/dynmap/fabric_1_19_1/DynmapPlugin.java @@ -362,6 +362,7 @@ public class DynmapPlugin { bmap.setWaterColorMultiplier(watermult); Log.verboseinfo("Set watercolormult for " + bmap.toString() + " (" + i + ") to " + Integer.toHexString(watermult)); } + bmap.setBiomeObject(bb); } } if (cnt > 0) diff --git a/fabric-1.19.1/src/main/java/org/dynmap/fabric_1_19_1/FabricMapChunkCache.java b/fabric-1.19.1/src/main/java/org/dynmap/fabric_1_19_1/FabricMapChunkCache.java index 4b6a2a12..867ae29b 100644 --- a/fabric-1.19.1/src/main/java/org/dynmap/fabric_1_19_1/FabricMapChunkCache.java +++ b/fabric-1.19.1/src/main/java/org/dynmap/fabric_1_19_1/FabricMapChunkCache.java @@ -12,6 +12,7 @@ import net.minecraft.util.registry.Registry; import net.minecraft.world.ChunkSerializer; import net.minecraft.world.World; import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeEffects; import net.minecraft.world.chunk.ChunkManager; import net.minecraft.world.chunk.ChunkStatus; @@ -101,4 +102,15 @@ public class FabricMapChunkCache extends GenericMapChunkCache { } return gc; } + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getBiomeObject().map(Biome::getEffects).flatMap(BiomeEffects::getFoliageColor).orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeEffects effects = bm.getBiomeObject().map(Biome::getEffects).orElse(null); + if (effects == null) return colormap[bm.biomeLookup()]; + return effects.getGrassColorModifier().getModifiedGrassColor(x, z, effects.getGrassColor().orElse(colormap[bm.biomeLookup()])); + } } diff --git a/fabric-1.19/src/main/java/org/dynmap/fabric_1_19/DynmapPlugin.java b/fabric-1.19/src/main/java/org/dynmap/fabric_1_19/DynmapPlugin.java index f209550b..1b84835e 100644 --- a/fabric-1.19/src/main/java/org/dynmap/fabric_1_19/DynmapPlugin.java +++ b/fabric-1.19/src/main/java/org/dynmap/fabric_1_19/DynmapPlugin.java @@ -362,6 +362,7 @@ public class DynmapPlugin { bmap.setWaterColorMultiplier(watermult); Log.verboseinfo("Set watercolormult for " + bmap.toString() + " (" + i + ") to " + Integer.toHexString(watermult)); } + bmap.setBiomeObject(bb); } } if (cnt > 0) diff --git a/fabric-1.19/src/main/java/org/dynmap/fabric_1_19/FabricMapChunkCache.java b/fabric-1.19/src/main/java/org/dynmap/fabric_1_19/FabricMapChunkCache.java index 4e63d359..41eed383 100644 --- a/fabric-1.19/src/main/java/org/dynmap/fabric_1_19/FabricMapChunkCache.java +++ b/fabric-1.19/src/main/java/org/dynmap/fabric_1_19/FabricMapChunkCache.java @@ -12,6 +12,7 @@ import net.minecraft.util.registry.Registry; import net.minecraft.world.ChunkSerializer; import net.minecraft.world.World; import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeEffects; import net.minecraft.world.chunk.ChunkManager; import net.minecraft.world.chunk.ChunkStatus; @@ -101,4 +102,15 @@ public class FabricMapChunkCache extends GenericMapChunkCache { } return gc; } + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getBiomeObject().map(Biome::getEffects).flatMap(BiomeEffects::getFoliageColor).orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeEffects effects = bm.getBiomeObject().map(Biome::getEffects).orElse(null); + if (effects == null) return colormap[bm.biomeLookup()]; + return effects.getGrassColorModifier().getModifiedGrassColor(x, z, effects.getGrassColor().orElse(colormap[bm.biomeLookup()])); + } } diff --git a/forge-1.16.5/src/main/java/org/dynmap/forge_1_16_5/DynmapPlugin.java b/forge-1.16.5/src/main/java/org/dynmap/forge_1_16_5/DynmapPlugin.java index 29104fe4..728504e3 100644 --- a/forge-1.16.5/src/main/java/org/dynmap/forge_1_16_5/DynmapPlugin.java +++ b/forge-1.16.5/src/main/java/org/dynmap/forge_1_16_5/DynmapPlugin.java @@ -1442,6 +1442,7 @@ public class DynmapPlugin bmap.setWaterColorMultiplier(watermult); Log.verboseinfo("Set watercolormult for " + bmap.toString() + " (" + i + ") to " + Integer.toHexString(watermult)); } + bmap.setBiomeObject(bb); } } if(cnt > 0) diff --git a/forge-1.16.5/src/main/java/org/dynmap/forge_1_16_5/ForgeMapChunkCache.java b/forge-1.16.5/src/main/java/org/dynmap/forge_1_16_5/ForgeMapChunkCache.java index 33369cf2..5d2e9320 100644 --- a/forge-1.16.5/src/main/java/org/dynmap/forge_1_16_5/ForgeMapChunkCache.java +++ b/forge-1.16.5/src/main/java/org/dynmap/forge_1_16_5/ForgeMapChunkCache.java @@ -4,6 +4,8 @@ import java.util.List; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeAmbience; import net.minecraft.world.chunk.AbstractChunkProvider; import net.minecraft.world.chunk.ChunkStatus; import net.minecraft.world.chunk.IChunk; @@ -13,6 +15,7 @@ import net.minecraft.world.server.ServerWorld; import org.dynmap.DynmapChunk; import org.dynmap.Log; +import org.dynmap.common.BiomeMap; import org.dynmap.common.chunk.GenericChunk; import org.dynmap.common.chunk.GenericChunkCache; import org.dynmap.common.chunk.GenericMapChunkCache; @@ -77,4 +80,25 @@ public class ForgeMapChunkCache extends GenericMapChunkCache { return null; } } + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getBiomeObject().map(Biome::getAmbience) + .flatMap(BiomeAmbience::getFoliageColor) + .orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeAmbience effects = bm.getBiomeObject().map(Biome::getAmbience).orElse(null); + if (effects == null) return colormap[bm.biomeLookup()]; + BiomeAmbience.GrassColorModifier modifier = effects.getGrassColorModifier(); + if (modifier == BiomeAmbience.GrassColorModifier.DARK_FOREST) { + return ((effects.getGrassColor().orElse(colormap[bm.biomeLookup()]) & 0xfefefe) + 0x28340a) >> 1; + } else if (modifier == BiomeAmbience.GrassColorModifier.SWAMP) { + double d0 = Biome.INFO_NOISE.noiseAt(x * 0.0225D, z * 0.0225D, false); + return d0 < -0.1D ? 0x4c763c : 0x6a7039; + } else { + return effects.getGrassColor().orElse(colormap[bm.biomeLookup()]); + } + } } diff --git a/forge-1.17.1/src/main/java/org/dynmap/forge_1_17_1/DynmapPlugin.java b/forge-1.17.1/src/main/java/org/dynmap/forge_1_17_1/DynmapPlugin.java index 7f405300..9479e425 100644 --- a/forge-1.17.1/src/main/java/org/dynmap/forge_1_17_1/DynmapPlugin.java +++ b/forge-1.17.1/src/main/java/org/dynmap/forge_1_17_1/DynmapPlugin.java @@ -1422,6 +1422,7 @@ public class DynmapPlugin bmap.setWaterColorMultiplier(watermult); Log.verboseinfo("Set watercolormult for " + bmap.toString() + " (" + i + ") to " + Integer.toHexString(watermult)); } + bmap.setBiomeObject(bb); } } if(cnt > 0) diff --git a/forge-1.17.1/src/main/java/org/dynmap/forge_1_17_1/ForgeMapChunkCache.java b/forge-1.17.1/src/main/java/org/dynmap/forge_1_17_1/ForgeMapChunkCache.java index 520f8e13..ebf9625d 100644 --- a/forge-1.17.1/src/main/java/org/dynmap/forge_1_17_1/ForgeMapChunkCache.java +++ b/forge-1.17.1/src/main/java/org/dynmap/forge_1_17_1/ForgeMapChunkCache.java @@ -2,8 +2,11 @@ package org.dynmap.forge_1_17_1; import java.util.List; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeSpecialEffects; import org.dynmap.DynmapChunk; import org.dynmap.Log; +import org.dynmap.common.BiomeMap; import org.dynmap.common.chunk.GenericChunk; import org.dynmap.common.chunk.GenericChunkCache; import org.dynmap.common.chunk.GenericMapChunkCache; @@ -70,4 +73,17 @@ public class ForgeMapChunkCache extends GenericMapChunkCache { return null; } } + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getBiomeObject().map(Biome::getSpecialEffects) + .flatMap(BiomeSpecialEffects::getFoliageColorOverride) + .orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeSpecialEffects effects = bm.getBiomeObject().map(Biome::getSpecialEffects).orElse(null); + if (effects == null) return colormap[bm.biomeLookup()]; + return effects.getGrassColorModifier().modifyColor(x, z, effects.getGrassColorOverride().orElse(colormap[bm.biomeLookup()])); + } } diff --git a/forge-1.18.2/src/main/java/org/dynmap/forge_1_18_2/DynmapPlugin.java b/forge-1.18.2/src/main/java/org/dynmap/forge_1_18_2/DynmapPlugin.java index aec39852..d71fdc82 100644 --- a/forge-1.18.2/src/main/java/org/dynmap/forge_1_18_2/DynmapPlugin.java +++ b/forge-1.18.2/src/main/java/org/dynmap/forge_1_18_2/DynmapPlugin.java @@ -1423,6 +1423,7 @@ public class DynmapPlugin bmap.setWaterColorMultiplier(watermult); Log.verboseinfo("Set watercolormult for " + bmap.toString() + " (" + i + ") to " + Integer.toHexString(watermult)); } + bmap.setBiomeObject(bb); } } if(cnt > 0) diff --git a/forge-1.18.2/src/main/java/org/dynmap/forge_1_18_2/ForgeMapChunkCache.java b/forge-1.18.2/src/main/java/org/dynmap/forge_1_18_2/ForgeMapChunkCache.java index 01148433..51f45c6e 100644 --- a/forge-1.18.2/src/main/java/org/dynmap/forge_1_18_2/ForgeMapChunkCache.java +++ b/forge-1.18.2/src/main/java/org/dynmap/forge_1_18_2/ForgeMapChunkCache.java @@ -2,8 +2,11 @@ package org.dynmap.forge_1_18_2; import java.util.List; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeSpecialEffects; import org.dynmap.DynmapChunk; import org.dynmap.Log; +import org.dynmap.common.BiomeMap; import org.dynmap.common.chunk.GenericChunk; import org.dynmap.common.chunk.GenericChunkCache; import org.dynmap.common.chunk.GenericMapChunkCache; @@ -86,4 +89,17 @@ public class ForgeMapChunkCache extends GenericMapChunkCache { return null; } } + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getBiomeObject().map(Biome::getSpecialEffects) + .flatMap(BiomeSpecialEffects::getFoliageColorOverride) + .orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeSpecialEffects effects = bm.getBiomeObject().map(Biome::getSpecialEffects).orElse(null); + if (effects == null) return colormap[bm.biomeLookup()]; + return effects.getGrassColorModifier().modifyColor(x, z, effects.getGrassColorOverride().orElse(colormap[bm.biomeLookup()])); + } } diff --git a/forge-1.18/src/main/java/org/dynmap/forge_1_18/DynmapPlugin.java b/forge-1.18/src/main/java/org/dynmap/forge_1_18/DynmapPlugin.java index 05cdbf63..0fce39fb 100644 --- a/forge-1.18/src/main/java/org/dynmap/forge_1_18/DynmapPlugin.java +++ b/forge-1.18/src/main/java/org/dynmap/forge_1_18/DynmapPlugin.java @@ -1423,6 +1423,7 @@ public class DynmapPlugin bmap.setWaterColorMultiplier(watermult); Log.verboseinfo("Set watercolormult for " + bmap.toString() + " (" + i + ") to " + Integer.toHexString(watermult)); } + bmap.setBiomeObject(bb); } } if(cnt > 0) diff --git a/forge-1.18/src/main/java/org/dynmap/forge_1_18/ForgeMapChunkCache.java b/forge-1.18/src/main/java/org/dynmap/forge_1_18/ForgeMapChunkCache.java index fbcf362d..476613c8 100644 --- a/forge-1.18/src/main/java/org/dynmap/forge_1_18/ForgeMapChunkCache.java +++ b/forge-1.18/src/main/java/org/dynmap/forge_1_18/ForgeMapChunkCache.java @@ -2,8 +2,11 @@ package org.dynmap.forge_1_18; import java.util.List; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeSpecialEffects; import org.dynmap.DynmapChunk; import org.dynmap.Log; +import org.dynmap.common.BiomeMap; import org.dynmap.common.chunk.GenericChunk; import org.dynmap.common.chunk.GenericChunkCache; import org.dynmap.common.chunk.GenericMapChunkCache; @@ -86,4 +89,17 @@ public class ForgeMapChunkCache extends GenericMapChunkCache { return null; } } + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getBiomeObject().map(Biome::getSpecialEffects) + .flatMap(BiomeSpecialEffects::getFoliageColorOverride) + .orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeSpecialEffects effects = bm.getBiomeObject().map(Biome::getSpecialEffects).orElse(null); + if (effects == null) return colormap[bm.biomeLookup()]; + return effects.getGrassColorModifier().modifyColor(x, z, effects.getGrassColorOverride().orElse(colormap[bm.biomeLookup()])); + } } diff --git a/forge-1.19.2/src/main/java/org/dynmap/forge_1_19_2/DynmapPlugin.java b/forge-1.19.2/src/main/java/org/dynmap/forge_1_19_2/DynmapPlugin.java index 0b8ad8b5..6bf9f67e 100644 --- a/forge-1.19.2/src/main/java/org/dynmap/forge_1_19_2/DynmapPlugin.java +++ b/forge-1.19.2/src/main/java/org/dynmap/forge_1_19_2/DynmapPlugin.java @@ -1424,6 +1424,7 @@ public class DynmapPlugin bmap.setWaterColorMultiplier(watermult); Log.verboseinfo("Set watercolormult for " + bmap.toString() + " (" + i + ") to " + Integer.toHexString(watermult)); } + bmap.setBiomeObject(bb); } } if(cnt > 0) diff --git a/forge-1.19.2/src/main/java/org/dynmap/forge_1_19_2/ForgeMapChunkCache.java b/forge-1.19.2/src/main/java/org/dynmap/forge_1_19_2/ForgeMapChunkCache.java index a46d23dd..0f9d7f2d 100644 --- a/forge-1.19.2/src/main/java/org/dynmap/forge_1_19_2/ForgeMapChunkCache.java +++ b/forge-1.19.2/src/main/java/org/dynmap/forge_1_19_2/ForgeMapChunkCache.java @@ -3,8 +3,11 @@ package org.dynmap.forge_1_19_2; import java.util.List; import java.util.NoSuchElementException; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeSpecialEffects; import org.dynmap.DynmapChunk; import org.dynmap.Log; +import org.dynmap.common.BiomeMap; import org.dynmap.common.chunk.GenericChunk; import org.dynmap.common.chunk.GenericChunkCache; import org.dynmap.common.chunk.GenericMapChunkCache; @@ -87,4 +90,17 @@ public class ForgeMapChunkCache extends GenericMapChunkCache { return null; } } + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getBiomeObject().map(Biome::getSpecialEffects) + .flatMap(BiomeSpecialEffects::getFoliageColorOverride) + .orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeSpecialEffects effects = bm.getBiomeObject().map(Biome::getSpecialEffects).orElse(null); + if (effects == null) return colormap[bm.biomeLookup()]; + return effects.getGrassColorModifier().modifyColor(x, z, effects.getGrassColorOverride().orElse(colormap[bm.biomeLookup()])); + } } diff --git a/forge-1.19/src/main/java/org/dynmap/forge_1_19/DynmapPlugin.java b/forge-1.19/src/main/java/org/dynmap/forge_1_19/DynmapPlugin.java index c97c6455..5098992d 100644 --- a/forge-1.19/src/main/java/org/dynmap/forge_1_19/DynmapPlugin.java +++ b/forge-1.19/src/main/java/org/dynmap/forge_1_19/DynmapPlugin.java @@ -1424,6 +1424,7 @@ public class DynmapPlugin bmap.setWaterColorMultiplier(watermult); Log.verboseinfo("Set watercolormult for " + bmap.toString() + " (" + i + ") to " + Integer.toHexString(watermult)); } + bmap.setBiomeObject(bb); } } if(cnt > 0) diff --git a/forge-1.19/src/main/java/org/dynmap/forge_1_19/ForgeMapChunkCache.java b/forge-1.19/src/main/java/org/dynmap/forge_1_19/ForgeMapChunkCache.java index 7231843b..4af2b806 100644 --- a/forge-1.19/src/main/java/org/dynmap/forge_1_19/ForgeMapChunkCache.java +++ b/forge-1.19/src/main/java/org/dynmap/forge_1_19/ForgeMapChunkCache.java @@ -3,8 +3,11 @@ package org.dynmap.forge_1_19; import java.util.List; import java.util.NoSuchElementException; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeSpecialEffects; import org.dynmap.DynmapChunk; import org.dynmap.Log; +import org.dynmap.common.BiomeMap; import org.dynmap.common.chunk.GenericChunk; import org.dynmap.common.chunk.GenericChunkCache; import org.dynmap.common.chunk.GenericMapChunkCache; @@ -87,4 +90,17 @@ public class ForgeMapChunkCache extends GenericMapChunkCache { return null; } } + @Override + public int getFoliageColor(BiomeMap bm, int[] colormap, int x, int z) { + return bm.getBiomeObject().map(Biome::getSpecialEffects) + .flatMap(BiomeSpecialEffects::getFoliageColorOverride) + .orElse(colormap[bm.biomeLookup()]); + } + + @Override + public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) { + BiomeSpecialEffects effects = bm.getBiomeObject().map(Biome::getSpecialEffects).orElse(null); + if (effects == null) return colormap[bm.biomeLookup()]; + return effects.getGrassColorModifier().modifyColor(x, z, effects.getGrassColorOverride().orElse(colormap[bm.biomeLookup()])); + } } diff --git a/spigot/src/main/java/org/dynmap/bukkit/DynmapPlugin.java b/spigot/src/main/java/org/dynmap/bukkit/DynmapPlugin.java index c4f6c3cf..6fa416b1 100644 --- a/spigot/src/main/java/org/dynmap/bukkit/DynmapPlugin.java +++ b/spigot/src/main/java/org/dynmap/bukkit/DynmapPlugin.java @@ -875,6 +875,7 @@ public class DynmapPlugin extends JavaPlugin implements DynmapAPI { bmap.setWaterColorMultiplier(watermult); Log.verboseinfo("Set watercolormult for " + bmap.toString() + " (" + i + ") to " + Integer.toHexString(watermult)); } + bmap.setBiomeObject(bb); } } if(cnt > 0) {