mirror of https://github.com/webbukkit/dynmap.git
Support for 1.16.5
This commit is contained in:
parent
053df84196
commit
0ebbc2bbe5
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -50,9 +57,9 @@ public class BukkitVersionHelperSpigot116_4 extends BukkitVersionHelperGeneric {
|
|||
return names;
|
||||
}
|
||||
|
||||
private IRegistry<BiomeBase> reg = null;
|
||||
private static IRegistry<BiomeBase> reg = null;
|
||||
|
||||
private IRegistry<BiomeBase> getBiomeReg() {
|
||||
public static IRegistry<BiomeBase> getBiomeReg() {
|
||||
if (reg == null) {
|
||||
reg = MinecraftServer.getServer().getCustomRegistry().b(IRegistry.ay);
|
||||
}
|
||||
|
@ -160,6 +167,29 @@ public class BukkitVersionHelperSpigot116_4 extends BukkitVersionHelperGeneric {
|
|||
}
|
||||
return 0xFFFFFF;
|
||||
}
|
||||
@SuppressWarnings("unchecked")
|
||||
public static Optional<Integer> getBiomeBaseGrassMult(BiomeBase bb) {
|
||||
if (bb == null) return Optional.empty();
|
||||
try {
|
||||
return (Optional<Integer>) grassColorField.get(bb.l());
|
||||
} catch (IllegalArgumentException | IllegalAccessException ignored) {}
|
||||
return Optional.empty();
|
||||
}
|
||||
@SuppressWarnings("unchecked")
|
||||
public static Optional<Integer> getBiomeBaseFoliageMult(BiomeBase bb) {
|
||||
if (bb == null) return Optional.empty();
|
||||
try {
|
||||
return (Optional<Integer>) 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
|
||||
|
|
|
@ -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,27 @@ 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) {
|
||||
if (bm.getResourcelocation() == null) return colormap[bm.biomeLookup()];
|
||||
BiomeBase base = BukkitVersionHelperSpigot116_4.getBiomeReg().get(MinecraftKey.a(bm.getResourcelocation()));
|
||||
return BukkitVersionHelperSpigot116_4.getBiomeBaseFoliageMult(base).orElse(colormap[bm.biomeLookup()]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColor(BiomeMap bm, int[] colormap, int x, int z) {
|
||||
if (bm.getResourcelocation() == null) return colormap[bm.biomeLookup()];
|
||||
BiomeBase base = BukkitVersionHelperSpigot116_4.getBiomeReg().get(MinecraftKey.a(bm.getResourcelocation()));
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue