Support for 1.16.5

This commit is contained in:
mastermc05 2022-10-22 14:24:49 +03:00
parent 053df84196
commit 0ebbc2bbe5
2 changed files with 56 additions and 2 deletions

View File

@ -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

View File

@ -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;
}
}
}