It compiles on 1.16.2

...but crashes on startup.
This commit is contained in:
Rutger Kok 2020-08-16 12:06:08 +02:00
parent 9d6867a3e9
commit 8c08d2f6af
16 changed files with 237 additions and 235 deletions

View File

@ -71,7 +71,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<version>1.16.1-R0.1-SNAPSHOT</version>
<version>1.16.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>

View File

@ -4,18 +4,18 @@ import java.lang.reflect.Field;
import java.util.Objects;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_16_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_16_R2.CraftWorld;
import net.minecraft.server.v1_16_R1.ChunkGenerator;
import net.minecraft.server.v1_16_R1.ChunkGeneratorAbstract;
import net.minecraft.server.v1_16_R1.ChunkProviderDebug;
import net.minecraft.server.v1_16_R1.ChunkProviderFlat;
import net.minecraft.server.v1_16_R1.GeneratorAccess;
import net.minecraft.server.v1_16_R1.HeightMap;
import net.minecraft.server.v1_16_R1.SeededRandom;
import net.minecraft.server.v1_16_R1.StructureManager;
import net.minecraft.server.v1_16_R1.WorldChunkManager;
import net.minecraft.server.v1_16_R1.WorldServer;
import net.minecraft.server.v1_16_R2.ChunkGenerator;
import net.minecraft.server.v1_16_R2.ChunkGeneratorAbstract;
import net.minecraft.server.v1_16_R2.ChunkProviderDebug;
import net.minecraft.server.v1_16_R2.ChunkProviderFlat;
import net.minecraft.server.v1_16_R2.GeneratorAccess;
import net.minecraft.server.v1_16_R2.HeightMap;
import net.minecraft.server.v1_16_R2.SeededRandom;
import net.minecraft.server.v1_16_R2.StructureManager;
import net.minecraft.server.v1_16_R2.WorldChunkManager;
import net.minecraft.server.v1_16_R2.WorldServer;
import nl.rutgerkok.worldgeneratorapi.BaseChunkGenerator;
import nl.rutgerkok.worldgeneratorapi.BaseTerrainGenerator;
import nl.rutgerkok.worldgeneratorapi.internal.bukkitoverrides.ChunkDataImpl;

View File

@ -5,12 +5,13 @@ import java.util.List;
import java.util.Objects;
import org.bukkit.block.Biome;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftBlock;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftBlock;
import com.google.common.collect.ImmutableSet;
import net.minecraft.server.v1_16_R1.BiomeBase;
import net.minecraft.server.v1_16_R1.WorldChunkManager;
import net.minecraft.server.v1_16_R2.BiomeBase;
import net.minecraft.server.v1_16_R2.RegistryGeneration;
import net.minecraft.server.v1_16_R2.WorldChunkManager;
import nl.rutgerkok.worldgeneratorapi.BiomeGenerator;
/**
@ -48,7 +49,7 @@ public final class BiomeGeneratorImpl implements BiomeGenerator {
.get(this.internal);
for (BiomeBase biome : biomeBases) {
biomes.add(CraftBlock.biomeBaseToBiome(biome));
biomes.add(CraftBlock.biomeBaseToBiome(RegistryGeneration.WORLDGEN_BIOME, biome));
}
return biomes.build();
} catch (IllegalAccessException e) {
@ -60,7 +61,7 @@ public final class BiomeGeneratorImpl implements BiomeGenerator {
@Override
public Biome getZoomedOutBiome(int x, int y, int z) {
return CraftBlock.biomeBaseToBiome(internal.getBiome(x, y, z));
return CraftBlock.biomeBaseToBiome(RegistryGeneration.WORLDGEN_BIOME, internal.getBiome(x, y, z));
}
}

View File

@ -6,74 +6,75 @@ import org.bukkit.Material;
import org.bukkit.block.Biome;
import org.bukkit.block.BlockState;
import org.bukkit.block.data.BlockData;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftBanner;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftBarrel;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftBeacon;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftBeehive;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftBell;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftBlastFurnace;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftBlock;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftBlockEntityState;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftBlockState;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftBrewingStand;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftCampfire;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftChest;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftCommandBlock;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftComparator;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftCreatureSpawner;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftDaylightDetector;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftDispenser;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftDropper;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftEnchantingTable;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftEndGateway;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftEnderChest;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftFurnaceFurnace;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftHopper;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftJigsaw;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftJukebox;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftLectern;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftShulkerBox;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftSign;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftSkull;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftSmoker;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftStructureBlock;
import org.bukkit.craftbukkit.v1_16_R1.block.data.CraftBlockData;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftBanner;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftBarrel;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftBeacon;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftBeehive;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftBell;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftBlastFurnace;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftBlock;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftBlockEntityState;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftBlockState;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftBrewingStand;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftCampfire;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftChest;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftCommandBlock;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftComparator;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftCreatureSpawner;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftDaylightDetector;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftDispenser;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftDropper;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftEnchantingTable;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftEndGateway;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftEnderChest;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftFurnaceFurnace;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftHopper;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftJigsaw;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftJukebox;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftLectern;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftShulkerBox;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftSign;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftSkull;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftSmoker;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftStructureBlock;
import org.bukkit.craftbukkit.v1_16_R2.block.data.CraftBlockData;
import net.minecraft.server.v1_16_R1.BlockPosition;
import net.minecraft.server.v1_16_R1.BlockPosition.MutableBlockPosition;
import net.minecraft.server.v1_16_R1.IBlockData;
import net.minecraft.server.v1_16_R1.IChunkAccess;
import net.minecraft.server.v1_16_R1.NBTTagCompound;
import net.minecraft.server.v1_16_R1.RegionLimitedWorldAccess;
import net.minecraft.server.v1_16_R1.TileEntity;
import net.minecraft.server.v1_16_R1.TileEntityBanner;
import net.minecraft.server.v1_16_R1.TileEntityBarrel;
import net.minecraft.server.v1_16_R1.TileEntityBeacon;
import net.minecraft.server.v1_16_R1.TileEntityBeehive;
import net.minecraft.server.v1_16_R1.TileEntityBell;
import net.minecraft.server.v1_16_R1.TileEntityBlastFurnace;
import net.minecraft.server.v1_16_R1.TileEntityBrewingStand;
import net.minecraft.server.v1_16_R1.TileEntityCampfire;
import net.minecraft.server.v1_16_R1.TileEntityChest;
import net.minecraft.server.v1_16_R1.TileEntityCommand;
import net.minecraft.server.v1_16_R1.TileEntityComparator;
import net.minecraft.server.v1_16_R1.TileEntityDispenser;
import net.minecraft.server.v1_16_R1.TileEntityDropper;
import net.minecraft.server.v1_16_R1.TileEntityEnchantTable;
import net.minecraft.server.v1_16_R1.TileEntityEndGateway;
import net.minecraft.server.v1_16_R1.TileEntityEnderChest;
import net.minecraft.server.v1_16_R1.TileEntityFurnaceFurnace;
import net.minecraft.server.v1_16_R1.TileEntityHopper;
import net.minecraft.server.v1_16_R1.TileEntityJigsaw;
import net.minecraft.server.v1_16_R1.TileEntityJukeBox;
import net.minecraft.server.v1_16_R1.TileEntityLectern;
import net.minecraft.server.v1_16_R1.TileEntityLightDetector;
import net.minecraft.server.v1_16_R1.TileEntityMobSpawner;
import net.minecraft.server.v1_16_R1.TileEntityShulkerBox;
import net.minecraft.server.v1_16_R1.TileEntitySign;
import net.minecraft.server.v1_16_R1.TileEntitySkull;
import net.minecraft.server.v1_16_R1.TileEntitySmoker;
import net.minecraft.server.v1_16_R1.TileEntityStructure;
import net.minecraft.server.v1_16_R2.BlockPosition;
import net.minecraft.server.v1_16_R2.BlockPosition.MutableBlockPosition;
import net.minecraft.server.v1_16_R2.IBlockData;
import net.minecraft.server.v1_16_R2.IChunkAccess;
import net.minecraft.server.v1_16_R2.NBTTagCompound;
import net.minecraft.server.v1_16_R2.RegionLimitedWorldAccess;
import net.minecraft.server.v1_16_R2.RegistryGeneration;
import net.minecraft.server.v1_16_R2.TileEntity;
import net.minecraft.server.v1_16_R2.TileEntityBanner;
import net.minecraft.server.v1_16_R2.TileEntityBarrel;
import net.minecraft.server.v1_16_R2.TileEntityBeacon;
import net.minecraft.server.v1_16_R2.TileEntityBeehive;
import net.minecraft.server.v1_16_R2.TileEntityBell;
import net.minecraft.server.v1_16_R2.TileEntityBlastFurnace;
import net.minecraft.server.v1_16_R2.TileEntityBrewingStand;
import net.minecraft.server.v1_16_R2.TileEntityCampfire;
import net.minecraft.server.v1_16_R2.TileEntityChest;
import net.minecraft.server.v1_16_R2.TileEntityCommand;
import net.minecraft.server.v1_16_R2.TileEntityComparator;
import net.minecraft.server.v1_16_R2.TileEntityDispenser;
import net.minecraft.server.v1_16_R2.TileEntityDropper;
import net.minecraft.server.v1_16_R2.TileEntityEnchantTable;
import net.minecraft.server.v1_16_R2.TileEntityEndGateway;
import net.minecraft.server.v1_16_R2.TileEntityEnderChest;
import net.minecraft.server.v1_16_R2.TileEntityFurnaceFurnace;
import net.minecraft.server.v1_16_R2.TileEntityHopper;
import net.minecraft.server.v1_16_R2.TileEntityJigsaw;
import net.minecraft.server.v1_16_R2.TileEntityJukeBox;
import net.minecraft.server.v1_16_R2.TileEntityLectern;
import net.minecraft.server.v1_16_R2.TileEntityLightDetector;
import net.minecraft.server.v1_16_R2.TileEntityMobSpawner;
import net.minecraft.server.v1_16_R2.TileEntityShulkerBox;
import net.minecraft.server.v1_16_R2.TileEntitySign;
import net.minecraft.server.v1_16_R2.TileEntitySkull;
import net.minecraft.server.v1_16_R2.TileEntitySmoker;
import net.minecraft.server.v1_16_R2.TileEntityStructure;
import nl.rutgerkok.worldgeneratorapi.decoration.DecorationArea;
class DecorationAreaImpl implements DecorationArea {
@ -93,7 +94,7 @@ class DecorationAreaImpl implements DecorationArea {
@Override
public Biome getBiome(int x, int z) {
reusableBlockPos.c(x, 0, z);
return CraftBlock.biomeBaseToBiome(internal.getBiome(reusableBlockPos));
return CraftBlock.biomeBaseToBiome(RegistryGeneration.WORLDGEN_BIOME, internal.getBiome(reusableBlockPos));
}
@Override

View File

@ -7,14 +7,14 @@ import java.util.List;
import java.util.Set;
import org.bukkit.block.Biome;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftBlock;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftBlock;
import com.mojang.serialization.Codec;
import net.minecraft.server.v1_16_R1.BiomeBase;
import net.minecraft.server.v1_16_R1.Biomes;
import net.minecraft.server.v1_16_R1.IRegistry;
import net.minecraft.server.v1_16_R1.WorldChunkManager;
import net.minecraft.server.v1_16_R2.BiomeBase;
import net.minecraft.server.v1_16_R2.Biomes;
import net.minecraft.server.v1_16_R2.RegistryGeneration;
import net.minecraft.server.v1_16_R2.WorldChunkManager;
import nl.rutgerkok.worldgeneratorapi.BiomeGenerator;
import nl.rutgerkok.worldgeneratorapi.WorldGeneratorApi;
@ -26,17 +26,19 @@ public class InjectedBiomeGenerator extends WorldChunkManager {
* generators.) Instead, we serialize as if we are a biome generator that
* generates only oceans.
*/
private static final Codec<InjectedBiomeGenerator> DUMMY_CODEC = IRegistry.BIOME.fieldOf(
private static final Codec<InjectedBiomeGenerator> DUMMY_CODEC = RegistryGeneration.WORLDGEN_BIOME.fieldOf(
"[" + WorldGeneratorApi.class.getSimpleName()
+ "] Custom biome generators cannot be stored in the level.dat, please ignore this error")
.xmap(biome -> new InjectedBiomeGenerator(), biomeGenToSerialize -> {
// Serializes as a single-biome generator
return Biomes.OCEAN;
return RegistryGeneration.WORLDGEN_BIOME.a(Biomes.OCEAN);
})
.stable().codec();
private static List<BiomeBase> toBiomeBase(Set<Biome> biomes) {
return biomes.stream().map(CraftBlock::biomeToBiomeBase).collect(toList());
return biomes.stream()
.map(biome -> CraftBlock.biomeToBiomeBase(RegistryGeneration.WORLDGEN_BIOME, biome))
.collect(toList());
}
/**
@ -63,7 +65,7 @@ public class InjectedBiomeGenerator extends WorldChunkManager {
* generator.
*/
private InjectedBiomeGenerator() {
super(Arrays.asList(Biomes.OCEAN));
super(Arrays.asList(RegistryGeneration.WORLDGEN_BIOME.a(Biomes.OCEAN)));
this.biomeGenerator = (x, y, z) -> Biome.OCEAN;
}
@ -84,6 +86,7 @@ public class InjectedBiomeGenerator extends WorldChunkManager {
@Override
public BiomeBase getBiome(int x, int y, int z) {
return CraftBlock.biomeToBiomeBase(biomeGenerator.getZoomedOutBiome(x, y, z));
return CraftBlock.biomeToBiomeBase(RegistryGeneration.WORLDGEN_BIOME,
biomeGenerator.getZoomedOutBiome(x, y, z));
}
}

View File

@ -13,10 +13,11 @@ import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftBlock;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftBlock;
import net.minecraft.server.v1_16_R1.BiomeBase;
import net.minecraft.server.v1_16_R1.Biomes;
import net.minecraft.server.v1_16_R2.BiomeBase;
import net.minecraft.server.v1_16_R2.Biomes;
import net.minecraft.server.v1_16_R2.RegistryGeneration;
import nl.rutgerkok.worldgeneratorapi.WorldGeneratorApi;
import nl.rutgerkok.worldgeneratorapi.WorldRef;
import nl.rutgerkok.worldgeneratorapi.property.AbstractProperty;
@ -56,20 +57,21 @@ public final class PropertyRegistryImpl implements PropertyRegistry {
private final Map<NamespacedKey, AbstractProperty> properties = new ConcurrentHashMap<>();
public PropertyRegistryImpl() {
addMinecraftBiomeFloatProperty(TEMPERATURE, BiomeBase::getTemperature);
addMinecraftBiomeFloatProperty(TEMPERATURE, BiomeBase::k);
addMinecraftBiomeFloatProperty(WETNESS, BiomeBase::getHumidity);
addMinecraftBiomeFloatProperty(BASE_HEIGHT, BiomeBase::k);
addMinecraftBiomeFloatProperty(HEIGHT_VARIATION, BiomeBase::o);
addMinecraftBiomeFloatProperty(BASE_HEIGHT, BiomeBase::h);
addMinecraftBiomeFloatProperty(HEIGHT_VARIATION, BiomeBase::j);
addMinecraftWorldProperty(WORLD_SEED, world -> (Long) world.getSeed(), -1L);
addSeaLevelProperty(SEA_LEVEL, world -> (float) world.getSeaLevel());
}
private void addMinecraftBiomeFloatProperty(NamespacedKey name, Function<BiomeBase, Float> value) {
FloatProperty property = new FloatProperty(name, value.apply(Biomes.b)) {
FloatProperty property = new FloatProperty(name,
value.apply(RegistryGeneration.WORLDGEN_BIOME.a(Biomes.PLAINS))) {
@Override
public float getBiomeDefault(Biome biome) {
BiomeBase base = CraftBlock.biomeToBiomeBase(biome);
BiomeBase base = CraftBlock.biomeToBiomeBase(RegistryGeneration.WORLDGEN_BIOME, biome);
return value.apply(base);
}

View File

@ -10,22 +10,23 @@ import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Supplier;
import net.minecraft.server.v1_16_R1.BiomeBase;
import net.minecraft.server.v1_16_R1.BiomeManager;
import net.minecraft.server.v1_16_R1.BlockPosition;
import net.minecraft.server.v1_16_R1.ChunkCoordIntPair;
import net.minecraft.server.v1_16_R1.ChunkGenerator;
import net.minecraft.server.v1_16_R1.CrashReport;
import net.minecraft.server.v1_16_R1.IChunkAccess;
import net.minecraft.server.v1_16_R1.IRegistry;
import net.minecraft.server.v1_16_R1.ProtoChunk;
import net.minecraft.server.v1_16_R1.RegionLimitedWorldAccess;
import net.minecraft.server.v1_16_R1.ReportedException;
import net.minecraft.server.v1_16_R1.SeededRandom;
import net.minecraft.server.v1_16_R1.StructureManager;
import net.minecraft.server.v1_16_R1.WorldGenCarverWrapper;
import net.minecraft.server.v1_16_R1.WorldGenStage;
import net.minecraft.server.v1_16_R2.BiomeBase;
import net.minecraft.server.v1_16_R2.BiomeManager;
import net.minecraft.server.v1_16_R2.BiomeSettingsGeneration;
import net.minecraft.server.v1_16_R2.BlockPosition;
import net.minecraft.server.v1_16_R2.ChunkCoordIntPair;
import net.minecraft.server.v1_16_R2.ChunkGenerator;
import net.minecraft.server.v1_16_R2.CrashReport;
import net.minecraft.server.v1_16_R2.IChunkAccess;
import net.minecraft.server.v1_16_R2.ProtoChunk;
import net.minecraft.server.v1_16_R2.RegionLimitedWorldAccess;
import net.minecraft.server.v1_16_R2.ReportedException;
import net.minecraft.server.v1_16_R2.SeededRandom;
import net.minecraft.server.v1_16_R2.StructureManager;
import net.minecraft.server.v1_16_R2.WorldGenCarverWrapper;
import net.minecraft.server.v1_16_R2.WorldGenStage;
import nl.rutgerkok.worldgeneratorapi.BaseChunkGenerator;
import nl.rutgerkok.worldgeneratorapi.BaseChunkGenerator.GeneratingChunk;
import nl.rutgerkok.worldgeneratorapi.decoration.BaseDecorationType;
@ -62,7 +63,6 @@ public final class WorldDecoratorImpl implements WorldDecorator {
return biomeManager.a(blockPosition);
}
@Override
public List<BaseChunkGenerator> getCustomBaseDecorations(BaseDecorationType type) {
Objects.requireNonNull(type, "type");
@ -109,25 +109,25 @@ public final class WorldDecoratorImpl implements WorldDecorator {
ChunkCoordIntPair chunkcoordintpair = ichunkaccess.getPos();
int i = chunkcoordintpair.x;
int j = chunkcoordintpair.z;
BiomeBase biomeBase = this.getBiome(biomeManager, chunkcoordintpair.l());
BiomeSettingsGeneration biomeConfig = this.getBiome(biomeManager, chunkcoordintpair.l()).e();
BitSet bitset = ((ProtoChunk) ichunkaccess).b(stage);
for(int k = i - 8; k <= i + 8; ++k) {
for(int l = j - 8; l <= j + 8; ++l) {
List<WorldGenCarverWrapper<?>> list = biomeBase.a(stage);
ListIterator<WorldGenCarverWrapper<?>> listiterator = list.listIterator();
for (int k = i - 8; k <= i + 8; ++k) {
for (int l = j - 8; l <= j + 8; ++l) {
List<Supplier<WorldGenCarverWrapper<?>>> list = biomeConfig.a(stage);
ListIterator<Supplier<WorldGenCarverWrapper<?>>> listiterator = list.listIterator();
while(listiterator.hasNext()) {
int i1 = listiterator.nextIndex();
WorldGenCarverWrapper<?> worldgencarverwrapper = listiterator.next();
while (listiterator.hasNext()) {
int i1 = listiterator.nextIndex();
WorldGenCarverWrapper<?> worldgencarverwrapper = listiterator.next().get();
seededrandom.c(seed + i1, k, l);
if (worldgencarverwrapper.a(seededrandom, k, l)) {
worldgencarverwrapper.a(ichunkaccess, (blockposition) -> {
if (worldgencarverwrapper.a(seededrandom, k, l)) {
worldgencarverwrapper.a(ichunkaccess, (blockposition) -> {
return this.getBiome(biomeManager, blockposition);
}, seededrandom, seaLevel, k, l, i, j, bitset);
}
}
}
}
}
}
}
@ -171,12 +171,12 @@ public final class WorldDecoratorImpl implements WorldDecorator {
// Spawn default decorations
if (!this.disabledDecorations.contains(type)) {
try {
biomebase.a(decorationStage, structureManager, chunkGenerator, populationArea, chunkSeed,
seededrandom, blockposition);
biomebase.a(structureManager, chunkGenerator, populationArea, chunkSeed, seededrandom,
blockposition);
} catch (Exception var18) {
CrashReport crashreport = CrashReport.a(var18, "Biome decoration");
crashreport.a("Generation").a("CenterX", i).a("CenterZ", j).a("Step", decorationStage)
.a("Seed", chunkSeed).a("Biome", IRegistry.BIOME.getKey(biomebase));
crashreport.a("Generation").a("CenterX", i).a("CenterZ", j).a("Seed", chunkSeed).a("Biome",
biomebase);
throw new ReportedException(crashreport);
}
}

View File

@ -10,7 +10,7 @@ import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.command.PluginCommand;
import org.bukkit.command.TabExecutor;
import org.bukkit.craftbukkit.v1_16_R1.CraftServer;
import org.bukkit.craftbukkit.v1_16_R2.CraftServer;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.world.WorldUnloadEvent;

View File

@ -7,16 +7,14 @@ import java.util.Objects;
import javax.annotation.Nullable;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_16_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_16_R1.generator.CustomChunkGenerator;
import org.bukkit.craftbukkit.v1_16_R2.CraftWorld;
import org.bukkit.craftbukkit.v1_16_R2.generator.CustomChunkGenerator;
import net.minecraft.server.v1_16_R1.ChunkGenerator;
import net.minecraft.server.v1_16_R1.ChunkGeneratorAbstract;
import net.minecraft.server.v1_16_R1.ChunkProviderServer;
import net.minecraft.server.v1_16_R1.GeneratorSettingBase;
import net.minecraft.server.v1_16_R1.GeneratorSettings;
import net.minecraft.server.v1_16_R1.WorldChunkManager;
import net.minecraft.server.v1_16_R1.WorldServer;
import net.minecraft.server.v1_16_R2.ChunkGenerator;
import net.minecraft.server.v1_16_R2.ChunkProviderServer;
import net.minecraft.server.v1_16_R2.GeneratorSettingBase;
import net.minecraft.server.v1_16_R2.WorldChunkManager;
import net.minecraft.server.v1_16_R2.WorldServer;
import nl.rutgerkok.worldgeneratorapi.BaseChunkGenerator;
import nl.rutgerkok.worldgeneratorapi.BaseNoiseGenerator;
import nl.rutgerkok.worldgeneratorapi.BaseTerrainGenerator;
@ -29,6 +27,10 @@ import nl.rutgerkok.worldgeneratorapi.internal.bukkitoverrides.NoiseToTerrainGen
final class WorldGeneratorImpl implements WorldGenerator {
private static GeneratorSettingBase createDefaultSettings() {
return GeneratorSettingBase.i();
}
private static GeneratorSettingBase extractSettings(ChunkGenerator chunkGenerator, long seed) {
try {
// First, unwrap Bukkit generator if necessary
@ -38,16 +40,11 @@ final class WorldGeneratorImpl implements WorldGenerator {
}
// Then, extract the settings
return (GeneratorSettingBase) ReflectionUtil.getFieldOfType(chunkGenerator, GeneratorSettingBase.class).get(chunkGenerator);
return (GeneratorSettingBase) ReflectionUtil.getFieldOfType(chunkGenerator, GeneratorSettingBase.class)
.get(chunkGenerator);
} catch (IllegalAccessException | IllegalArgumentException | NoSuchElementException e) {
// Get default settings
ChunkGeneratorAbstract standardGenerator = GeneratorSettings.a(seed);
try {
return (GeneratorSettingBase) ReflectionUtil
.getFieldOfType(standardGenerator, GeneratorSettingBase.class).get(chunkGenerator);
} catch (IllegalAccessException e1) {
throw new RuntimeException("Failed to extract settings", e1);
}
return createDefaultSettings();
}
}

View File

@ -3,10 +3,11 @@ package nl.rutgerkok.worldgeneratorapi.internal.bukkitoverrides;
import java.util.Objects;
import org.bukkit.block.Biome;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftBlock;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftBlock;
import org.bukkit.generator.ChunkGenerator.BiomeGrid;
import net.minecraft.server.v1_16_R1.BiomeStorage;
import net.minecraft.server.v1_16_R2.BiomeStorage;
import net.minecraft.server.v1_16_R2.RegistryGeneration;
public final class BiomeGridImpl implements BiomeGrid {
private final BiomeStorage biomeStorage;
@ -17,17 +18,19 @@ public final class BiomeGridImpl implements BiomeGrid {
@Override
public Biome getBiome(final int x, final int z) {
return CraftBlock.biomeBaseToBiome(this.biomeStorage.getBiome(x >> 2, 0, z >> 2));
return CraftBlock.biomeBaseToBiome(RegistryGeneration.WORLDGEN_BIOME,
this.biomeStorage.getBiome(x >> 2, 0, z >> 2));
}
@Override
public Biome getBiome(int x, int y, int z) {
return CraftBlock.biomeBaseToBiome(this.biomeStorage.getBiome(x >> 2, y >> 2, z >> 2));
return CraftBlock.biomeBaseToBiome(RegistryGeneration.WORLDGEN_BIOME,
this.biomeStorage.getBiome(x >> 2, y >> 2, z >> 2));
}
/**
* Gets the internal biome storage.
*
*
* @return The biome storage.
*/
public BiomeStorage getHandle() {
@ -36,11 +39,13 @@ public final class BiomeGridImpl implements BiomeGrid {
@Override
public void setBiome(int x, int z, Biome biome) {
this.biomeStorage.setBiome(x >> 2, 0, z >> 2, CraftBlock.biomeToBiomeBase(biome));
this.biomeStorage.setBiome(x >> 2, 0, z >> 2,
CraftBlock.biomeToBiomeBase(RegistryGeneration.WORLDGEN_BIOME, biome));
}
@Override
public void setBiome(int x, int y, int z, Biome biome) {
this.biomeStorage.setBiome(x >> 2, y >> 2, z >> 2, CraftBlock.biomeToBiomeBase(biome));
this.biomeStorage.setBiome(x >> 2, y >> 2, z >> 2,
CraftBlock.biomeToBiomeBase(RegistryGeneration.WORLDGEN_BIOME, biome));
}
}

View File

@ -2,12 +2,12 @@ package nl.rutgerkok.worldgeneratorapi.internal.bukkitoverrides;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import org.bukkit.craftbukkit.v1_16_R1.block.data.CraftBlockData;
import org.bukkit.craftbukkit.v1_16_R2.block.data.CraftBlockData;
import org.bukkit.generator.ChunkGenerator.ChunkData;
import net.minecraft.server.v1_16_R1.BlockPosition.MutableBlockPosition;
import net.minecraft.server.v1_16_R1.IBlockData;
import net.minecraft.server.v1_16_R1.IChunkAccess;
import net.minecraft.server.v1_16_R2.BlockPosition.MutableBlockPosition;
import net.minecraft.server.v1_16_R2.IBlockData;
import net.minecraft.server.v1_16_R2.IChunkAccess;
public final class ChunkDataImpl implements ChunkData {
private final IChunkAccess internal;

View File

@ -13,35 +13,35 @@ import org.bukkit.generator.ChunkGenerator.ChunkData;
import com.mojang.serialization.Codec;
import net.minecraft.server.v1_16_R1.BiomeBase;
import net.minecraft.server.v1_16_R1.BiomeBase.BiomeMeta;
import net.minecraft.server.v1_16_R1.BiomeManager;
import net.minecraft.server.v1_16_R1.BlockColumn;
import net.minecraft.server.v1_16_R1.BlockPosition;
import net.minecraft.server.v1_16_R1.BlockPosition.MutableBlockPosition;
import net.minecraft.server.v1_16_R1.Blocks;
import net.minecraft.server.v1_16_R1.ChunkCoordIntPair;
import net.minecraft.server.v1_16_R1.ChunkGenerator;
import net.minecraft.server.v1_16_R1.ChunkGeneratorAbstract;
import net.minecraft.server.v1_16_R1.EnumCreatureType;
import net.minecraft.server.v1_16_R1.GeneratorAccess;
import net.minecraft.server.v1_16_R1.GeneratorSettingBase;
import net.minecraft.server.v1_16_R1.HeightMap;
import net.minecraft.server.v1_16_R1.HeightMap.Type;
import net.minecraft.server.v1_16_R1.IBlockAccess;
import net.minecraft.server.v1_16_R1.IBlockData;
import net.minecraft.server.v1_16_R1.IChunkAccess;
import net.minecraft.server.v1_16_R1.NoiseGenerator;
import net.minecraft.server.v1_16_R1.NoiseGenerator3;
import net.minecraft.server.v1_16_R1.NoiseGeneratorOctaves;
import net.minecraft.server.v1_16_R1.NoiseSettings;
import net.minecraft.server.v1_16_R1.RegionLimitedWorldAccess;
import net.minecraft.server.v1_16_R1.SeededRandom;
import net.minecraft.server.v1_16_R1.SpawnerCreature;
import net.minecraft.server.v1_16_R1.StructureGenerator;
import net.minecraft.server.v1_16_R1.StructureManager;
import net.minecraft.server.v1_16_R1.WorldChunkManager;
import net.minecraft.server.v1_16_R1.WorldGenStage.Features;
import net.minecraft.server.v1_16_R2.BiomeBase;
import net.minecraft.server.v1_16_R2.BiomeManager;
import net.minecraft.server.v1_16_R2.BiomeSettingsMobs;
import net.minecraft.server.v1_16_R2.BlockColumn;
import net.minecraft.server.v1_16_R2.BlockPosition;
import net.minecraft.server.v1_16_R2.BlockPosition.MutableBlockPosition;
import net.minecraft.server.v1_16_R2.Blocks;
import net.minecraft.server.v1_16_R2.ChunkCoordIntPair;
import net.minecraft.server.v1_16_R2.ChunkGenerator;
import net.minecraft.server.v1_16_R2.ChunkGeneratorAbstract;
import net.minecraft.server.v1_16_R2.EnumCreatureType;
import net.minecraft.server.v1_16_R2.GeneratorAccess;
import net.minecraft.server.v1_16_R2.GeneratorSettingBase;
import net.minecraft.server.v1_16_R2.HeightMap;
import net.minecraft.server.v1_16_R2.HeightMap.Type;
import net.minecraft.server.v1_16_R2.IBlockAccess;
import net.minecraft.server.v1_16_R2.IBlockData;
import net.minecraft.server.v1_16_R2.IChunkAccess;
import net.minecraft.server.v1_16_R2.NoiseGenerator;
import net.minecraft.server.v1_16_R2.NoiseGenerator3;
import net.minecraft.server.v1_16_R2.NoiseGeneratorOctaves;
import net.minecraft.server.v1_16_R2.NoiseSettings;
import net.minecraft.server.v1_16_R2.RegionLimitedWorldAccess;
import net.minecraft.server.v1_16_R2.SeededRandom;
import net.minecraft.server.v1_16_R2.SpawnerCreature;
import net.minecraft.server.v1_16_R2.StructureGenerator;
import net.minecraft.server.v1_16_R2.StructureManager;
import net.minecraft.server.v1_16_R2.WorldChunkManager;
import net.minecraft.server.v1_16_R2.WorldGenStage.Features;
import nl.rutgerkok.worldgeneratorapi.BaseChunkGenerator.GeneratingChunk;
import nl.rutgerkok.worldgeneratorapi.BaseTerrainGenerator;
import nl.rutgerkok.worldgeneratorapi.BaseTerrainGenerator.HeightType;
@ -346,7 +346,7 @@ public final class InjectedChunkGenerator extends ChunkGenerator {
}
@Override
public List<BiomeMeta> getMobsFor(BiomeBase biomebase, StructureManager structuremanager,
public List<BiomeSettingsMobs.c> getMobsFor(BiomeBase biomebase, StructureManager structuremanager,
EnumCreatureType enumcreaturetype, BlockPosition blockposition) {
if (structuremanager.a(blockposition, true, StructureGenerator.SWAMP_HUT).e()) {
if (enumcreaturetype == EnumCreatureType.MONSTER) {

View File

@ -9,39 +9,36 @@ import java.util.function.Predicate;
import javax.annotation.Nullable;
import org.bukkit.craftbukkit.v1_16_R1.block.data.CraftBlockData;
import org.bukkit.craftbukkit.v1_16_R2.block.data.CraftBlockData;
import net.minecraft.server.v1_16_R1.BlockColumn;
import net.minecraft.server.v1_16_R1.BlockPosition.MutableBlockPosition;
import net.minecraft.server.v1_16_R1.Blocks;
import net.minecraft.server.v1_16_R1.ChunkCoordIntPair;
import net.minecraft.server.v1_16_R1.ChunkGeneratorAbstract;
import net.minecraft.server.v1_16_R1.ChunkSection;
import net.minecraft.server.v1_16_R1.GeneratorAccess;
import net.minecraft.server.v1_16_R1.GeneratorSettingBase;
import net.minecraft.server.v1_16_R1.GeneratorSettings;
import net.minecraft.server.v1_16_R1.HeightMap;
import net.minecraft.server.v1_16_R1.HeightMap.Type;
import net.minecraft.server.v1_16_R1.IBlockAccess;
import net.minecraft.server.v1_16_R1.IBlockData;
import net.minecraft.server.v1_16_R1.IChunkAccess;
import net.minecraft.server.v1_16_R1.MathHelper;
import net.minecraft.server.v1_16_R1.NoiseSettings;
import net.minecraft.server.v1_16_R1.ProtoChunk;
import net.minecraft.server.v1_16_R1.SectionPosition;
import net.minecraft.server.v1_16_R1.StructureBoundingBox;
import net.minecraft.server.v1_16_R1.StructureGenerator;
import net.minecraft.server.v1_16_R1.StructureManager;
import net.minecraft.server.v1_16_R1.StructurePiece;
import net.minecraft.server.v1_16_R1.SystemUtils;
import net.minecraft.server.v1_16_R1.WorldGenFeatureDefinedStructureJigsawJunction;
import net.minecraft.server.v1_16_R1.WorldGenFeatureDefinedStructurePoolTemplate.Matching;
import net.minecraft.server.v1_16_R1.WorldGenFeaturePillagerOutpostPoolPiece;
import net.minecraft.server.v1_16_R2.BlockColumn;
import net.minecraft.server.v1_16_R2.BlockPosition.MutableBlockPosition;
import net.minecraft.server.v1_16_R2.Blocks;
import net.minecraft.server.v1_16_R2.ChunkCoordIntPair;
import net.minecraft.server.v1_16_R2.ChunkSection;
import net.minecraft.server.v1_16_R2.GeneratorAccess;
import net.minecraft.server.v1_16_R2.GeneratorSettingBase;
import net.minecraft.server.v1_16_R2.HeightMap;
import net.minecraft.server.v1_16_R2.HeightMap.Type;
import net.minecraft.server.v1_16_R2.IBlockAccess;
import net.minecraft.server.v1_16_R2.IBlockData;
import net.minecraft.server.v1_16_R2.IChunkAccess;
import net.minecraft.server.v1_16_R2.MathHelper;
import net.minecraft.server.v1_16_R2.NoiseSettings;
import net.minecraft.server.v1_16_R2.ProtoChunk;
import net.minecraft.server.v1_16_R2.SectionPosition;
import net.minecraft.server.v1_16_R2.StructureBoundingBox;
import net.minecraft.server.v1_16_R2.StructureGenerator;
import net.minecraft.server.v1_16_R2.StructureManager;
import net.minecraft.server.v1_16_R2.StructurePiece;
import net.minecraft.server.v1_16_R2.SystemUtils;
import net.minecraft.server.v1_16_R2.WorldGenFeatureDefinedStructureJigsawJunction;
import net.minecraft.server.v1_16_R2.WorldGenFeatureDefinedStructurePoolTemplate.Matching;
import net.minecraft.server.v1_16_R2.WorldGenFeaturePillagerOutpostPoolPiece;
import nl.rutgerkok.worldgeneratorapi.BaseNoiseGenerator;
import nl.rutgerkok.worldgeneratorapi.BaseNoiseGenerator.TerrainSettings;
import nl.rutgerkok.worldgeneratorapi.BaseTerrainGenerator;
import nl.rutgerkok.worldgeneratorapi.BiomeGenerator;
import nl.rutgerkok.worldgeneratorapi.internal.ReflectionUtil;
import nl.rutgerkok.worldgeneratorapi.internal.bukkitoverrides.InjectedChunkGenerator.GeneratingChunkImpl;
public final class NoiseToTerrainGenerator implements BaseTerrainGenerator {
@ -82,15 +79,9 @@ public final class NoiseToTerrainGenerator implements BaseTerrainGenerator {
}
private static NoiseSettings defaultNoiseSettings() {
// I don't know how to properly construct the default settings, so I'm using this for now
ChunkGeneratorAbstract defaultGenerator = GeneratorSettings.a(0);
try {
GeneratorSettingBase settings = (GeneratorSettingBase) ReflectionUtil.getFieldOfType(defaultGenerator, GeneratorSettingBase.class).get(defaultGenerator);
return settings.b();
} catch (IllegalAccessException e) {
throw new RuntimeException("Failed to create default noise settings", e);
}
return GeneratorSettingBase.i().b();
}
private final int l;
private final int m;
private final int n;

View File

@ -7,8 +7,9 @@ import org.bukkit.block.Biome;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import net.minecraft.server.v1_16_R1.WorldChunkManager;
import net.minecraft.server.v1_16_R1.WorldChunkManagerOverworld;
import net.minecraft.server.v1_16_R2.RegistryGeneration;
import net.minecraft.server.v1_16_R2.WorldChunkManager;
import net.minecraft.server.v1_16_R2.WorldChunkManagerOverworld;
import nl.rutgerkok.worldgeneratorapi.BiomeGenerator;
import nl.rutgerkok.worldgeneratorapi.internal.BiomeGeneratorImpl;
import nl.rutgerkok.worldgeneratorapi.internal.InjectedBiomeGenerator;
@ -23,7 +24,8 @@ public class BiomeGeneratorImplTest {
@Test
public void isGetStructureBiomesInSync() {
// Create vanilla biome generator
WorldChunkManager worldChunkManager = new WorldChunkManagerOverworld(10, false, false);
WorldChunkManager worldChunkManager = new WorldChunkManagerOverworld(10, false, false,
RegistryGeneration.WORLDGEN_BIOME);
// Check the structures
BiomeGeneratorImpl biomeGenerator = new BiomeGeneratorImpl(worldChunkManager);

View File

@ -8,7 +8,7 @@ import org.bukkit.World;
import org.bukkit.plugin.Plugin;
import org.mockito.Mockito;
import net.minecraft.server.v1_16_R1.DispenserRegistry;
import net.minecraft.server.v1_16_R2.DispenserRegistry;
public class TestFactory {

View File

@ -65,7 +65,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.16.1-R0.1-SNAPSHOT</version>
<version>1.16.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
<exclusions>
<exclusion> <!-- Let's not put the outdated JUnit 4 on our build path -->