Use a proper registry for biomes

This commit is contained in:
Matthew Miller
2019-02-16 17:27:00 +10:00
parent d6bc85ccbe
commit 1b101740fe
33 changed files with 314 additions and 326 deletions

View File

@ -30,14 +30,18 @@ import com.sk89q.worldedit.registry.state.Property;
import com.sk89q.worldedit.util.Direction;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.biome.BiomeTypes;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.properties.PropertyDirection;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.properties.PropertyInteger;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.biome.Biome;
import java.util.stream.Collectors;
@ -50,6 +54,14 @@ final class ForgeAdapter {
return new ForgeWorld(world);
}
public static Biome adapt(BiomeType biomeType) {
return Biome.REGISTRY.getObject(new ResourceLocation(biomeType.getId()));
}
public static BiomeType adapt(Biome biome) {
return BiomeTypes.get(biome.getRegistryName().toString());
}
public static Vector3 adapt(Vec3d vector) {
return Vector3.at(vector.x, vector.y, vector.z);
}

View File

@ -19,36 +19,20 @@
package com.sk89q.worldedit.forge;
import com.sk89q.worldedit.world.biome.BaseBiome;
import com.sk89q.worldedit.world.biome.BiomeData;
import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.registry.BiomeRegistry;
import net.minecraft.world.biome.Biome;
import java.util.ArrayList;
import java.util.List;
/**
* Provides access to biome data in Forge.
*/
class ForgeBiomeRegistry implements BiomeRegistry {
@Override
public BaseBiome createFromId(int id) {
return new BaseBiome(id);
}
@Override
public List<BaseBiome> getBiomes() {
List<BaseBiome> list = new ArrayList<>();
for (Biome biome : Biome.REGISTRY) {
list.add(new BaseBiome(Biome.getIdForBiome(biome)));
}
return list;
}
@Override
public BiomeData getData(BaseBiome biome) {
return new ForgeBiomeData(Biome.getBiome(biome.getId()));
public BiomeData getData(BiomeType biome) {
return new ForgeBiomeData(ForgeAdapter.adapt(biome));
}
/**

View File

@ -41,7 +41,7 @@ import com.sk89q.worldedit.util.Direction;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.util.TreeGenerator.TreeType;
import com.sk89q.worldedit.world.AbstractWorld;
import com.sk89q.worldedit.world.biome.BaseBiome;
import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockStateHolder;
@ -49,7 +49,6 @@ import com.sk89q.worldedit.world.block.BlockType;
import com.sk89q.worldedit.world.item.ItemTypes;
import com.sk89q.worldedit.world.weather.WeatherType;
import com.sk89q.worldedit.world.weather.WeatherTypes;
import net.minecraft.block.Block;
import net.minecraft.block.BlockLeaves;
import net.minecraft.block.BlockOldLeaf;
@ -262,19 +261,19 @@ public class ForgeWorld extends AbstractWorld {
}
@Override
public BaseBiome getBiome(BlockVector2 position) {
public BiomeType getBiome(BlockVector2 position) {
checkNotNull(position);
return new BaseBiome(Biome.getIdForBiome(getWorld().getBiomeForCoordsBody(new BlockPos(position.getBlockX(), 0, position.getBlockZ()))));
return ForgeAdapter.adapt(getWorld().getBiomeForCoordsBody(new BlockPos(position.getBlockX(), 0, position.getBlockZ())));
}
@Override
public boolean setBiome(BlockVector2 position, BaseBiome biome) {
public boolean setBiome(BlockVector2 position, BiomeType biome) {
checkNotNull(position);
checkNotNull(biome);
Chunk chunk = getWorld().getChunkFromBlockCoords(new BlockPos(position.getBlockX(), 0, position.getBlockZ()));
if (chunk.isLoaded()) {
chunk.getBiomeArray()[((position.getBlockZ() & 0xF) << 4 | position.getBlockX() & 0xF)] = (byte) biome.getId();
chunk.getBiomeArray()[((position.getBlockZ() & 0xF) << 4 | position.getBlockX() & 0xF)] = (byte) Biome.getIdForBiome(ForgeAdapter.adapt(biome));
return true;
}