mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2025-07-06 20:56:41 +00:00
Implemented new biome API.
This commit is contained in:
107
src/forge/java/com/sk89q/worldedit/forge/ForgeBiomeRegistry.java
Normal file
107
src/forge/java/com/sk89q/worldedit/forge/ForgeBiomeRegistry.java
Normal file
@ -0,0 +1,107 @@
|
||||
/*
|
||||
* WorldEdit, a Minecraft world manipulation toolkit
|
||||
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||
* Copyright (C) WorldEdit team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldedit.forge;
|
||||
|
||||
import com.google.common.collect.HashBiMap;
|
||||
import com.sk89q.worldedit.world.biome.BaseBiome;
|
||||
import com.sk89q.worldedit.world.biome.BiomeData;
|
||||
import com.sk89q.worldedit.world.registry.BiomeRegistry;
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Provides access to biome data in Forge.
|
||||
*/
|
||||
class ForgeBiomeRegistry implements BiomeRegistry {
|
||||
|
||||
private static Map<Integer, BiomeGenBase> biomes = Collections.emptyMap();
|
||||
private static Map<Integer, BiomeData> biomeData = Collections.emptyMap();
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public BaseBiome createFromId(int id) {
|
||||
return new BaseBiome(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BaseBiome> getBiomes() {
|
||||
List<BaseBiome> list = new ArrayList<BaseBiome>();
|
||||
for (int biome : biomes.keySet()) {
|
||||
list.add(new BaseBiome(biome));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public BiomeData getData(BaseBiome biome) {
|
||||
return biomeData.get(biome.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Populate the internal static list of biomes.
|
||||
*
|
||||
* <p>If called repeatedly, the last call will overwrite all previous
|
||||
* calls.</p>
|
||||
*/
|
||||
static void populate() {
|
||||
Map<Integer, BiomeGenBase> biomes = HashBiMap.create();
|
||||
Map<Integer, BiomeData> biomeData = new HashMap<Integer, BiomeData>();
|
||||
|
||||
for (BiomeGenBase biome : BiomeGenBase.biomeList) {
|
||||
if ((biome == null) || (biomes.containsValue(biome))) {
|
||||
continue;
|
||||
}
|
||||
biomes.put(biome.biomeID, biome);
|
||||
biomeData.put(biome.biomeID, new ForgeBiomeData(biome));
|
||||
}
|
||||
|
||||
ForgeBiomeRegistry.biomes = biomes;
|
||||
ForgeBiomeRegistry.biomeData = biomeData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cached biome data information.
|
||||
*/
|
||||
private static class ForgeBiomeData implements BiomeData {
|
||||
private final BiomeGenBase biome;
|
||||
|
||||
/**
|
||||
* Create a new instance.
|
||||
*
|
||||
* @param biome the base biome
|
||||
*/
|
||||
private ForgeBiomeData(BiomeGenBase biome) {
|
||||
this.biome = biome;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return biome.biomeName;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,87 +0,0 @@
|
||||
/*
|
||||
* WorldEdit, a Minecraft world manipulation toolkit
|
||||
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||
* Copyright (C) WorldEdit team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldedit.forge;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
|
||||
import com.google.common.collect.BiMap;
|
||||
import com.google.common.collect.HashBiMap;
|
||||
import com.sk89q.worldedit.BiomeType;
|
||||
import com.sk89q.worldedit.BiomeTypes;
|
||||
import com.sk89q.worldedit.UnknownBiomeTypeException;
|
||||
|
||||
public class ForgeBiomeTypes implements BiomeTypes {
|
||||
private static BiMap<BiomeType, BiomeGenBase> biomes = HashBiMap.create();
|
||||
|
||||
public ForgeBiomeTypes() {
|
||||
all();
|
||||
}
|
||||
|
||||
public boolean has(String name) {
|
||||
for (BiomeGenBase biome : BiomeGenBase.biomeList) {
|
||||
if ((biome != null) && (biome.biomeName.equalsIgnoreCase(name))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public BiomeType get(String name) throws UnknownBiomeTypeException {
|
||||
if (biomes == null) {
|
||||
all();
|
||||
}
|
||||
Iterator<BiomeType> it = biomes.keySet().iterator();
|
||||
while (it.hasNext()) {
|
||||
BiomeType test = (BiomeType) it.next();
|
||||
if (test.getName().equalsIgnoreCase(name)) {
|
||||
return test;
|
||||
}
|
||||
}
|
||||
throw new UnknownBiomeTypeException(name);
|
||||
}
|
||||
|
||||
public List<BiomeType> all() {
|
||||
if (biomes.isEmpty()) {
|
||||
biomes = HashBiMap.create(new HashMap<BiomeType, BiomeGenBase>());
|
||||
for (BiomeGenBase biome : BiomeGenBase.biomeList) {
|
||||
if ((biome == null) || (biomes.containsValue(biome))) {
|
||||
continue;
|
||||
}
|
||||
biomes.put(new ForgeBiomeType(biome), biome);
|
||||
}
|
||||
}
|
||||
List<BiomeType> retBiomes = new ArrayList<BiomeType>();
|
||||
retBiomes.addAll(biomes.keySet());
|
||||
return retBiomes;
|
||||
}
|
||||
|
||||
public static BiomeType getFromBaseBiome(BiomeGenBase biome) {
|
||||
return biomes.containsValue(biome) ? (BiomeType) biomes.inverse().get(biome) : BiomeType.UNKNOWN;
|
||||
}
|
||||
|
||||
public static BiomeGenBase getFromBiomeType(BiomeType biome) {
|
||||
return (BiomeGenBase) biomes.get(biome);
|
||||
}
|
||||
}
|
@ -19,7 +19,7 @@
|
||||
|
||||
package com.sk89q.worldedit.forge;
|
||||
|
||||
import com.sk89q.worldedit.BiomeTypes;
|
||||
import com.sk89q.worldedit.world.registry.BiomeRegistry;
|
||||
import com.sk89q.worldedit.LocalConfiguration;
|
||||
import com.sk89q.worldedit.ServerInterface;
|
||||
import com.sk89q.worldedit.entity.Player;
|
||||
@ -56,13 +56,13 @@ class ForgePlatform extends ServerInterface implements MultiUserPlatform {
|
||||
|
||||
private final ForgeWorldEdit mod;
|
||||
private final MinecraftServer server;
|
||||
private final ForgeBiomeTypes biomes;
|
||||
private final ForgeBiomeRegistry biomes;
|
||||
private boolean hookingEvents = false;
|
||||
|
||||
ForgePlatform(ForgeWorldEdit mod) {
|
||||
this.mod = mod;
|
||||
this.server = FMLCommonHandler.instance().getMinecraftServerInstance();
|
||||
this.biomes = new ForgeBiomeTypes();
|
||||
this.biomes = new ForgeBiomeRegistry();
|
||||
}
|
||||
|
||||
boolean isHookingEvents() {
|
||||
@ -95,11 +95,6 @@ class ForgePlatform extends ServerInterface implements MultiUserPlatform {
|
||||
public void reload() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BiomeTypes getBiomes() {
|
||||
return this.biomes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int schedule(long delay, long period, Runnable task) {
|
||||
return -1;
|
||||
|
@ -20,7 +20,6 @@
|
||||
package com.sk89q.worldedit.forge;
|
||||
|
||||
import com.sk89q.jnbt.CompoundTag;
|
||||
import com.sk89q.worldedit.BiomeType;
|
||||
import com.sk89q.worldedit.EditSession;
|
||||
import com.sk89q.worldedit.MaxChangedBlocksException;
|
||||
import com.sk89q.worldedit.Vector;
|
||||
@ -36,7 +35,7 @@ import com.sk89q.worldedit.regions.Region;
|
||||
import com.sk89q.worldedit.util.Location;
|
||||
import com.sk89q.worldedit.util.TreeGenerator.TreeType;
|
||||
import com.sk89q.worldedit.world.AbstractWorld;
|
||||
import com.sk89q.worldedit.world.registry.LegacyWorldData;
|
||||
import com.sk89q.worldedit.world.biome.BaseBiome;
|
||||
import com.sk89q.worldedit.world.registry.WorldData;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.EntityList;
|
||||
@ -181,22 +180,23 @@ public class ForgeWorld extends AbstractWorld {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BiomeType getBiome(Vector2D position) {
|
||||
public BaseBiome getBiome(Vector2D position) {
|
||||
checkNotNull(position);
|
||||
return ForgeBiomeTypes.getFromBaseBiome(getWorld().getBiomeGenForCoords(position.getBlockX(), position.getBlockZ()));
|
||||
return new BaseBiome(getWorld().getBiomeGenForCoords(position.getBlockX(), position.getBlockZ()).biomeID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBiome(Vector2D position, BiomeType biome) {
|
||||
public boolean setBiome(Vector2D position, BaseBiome biome) {
|
||||
checkNotNull(position);
|
||||
checkNotNull(biome);
|
||||
|
||||
if (getWorld().getChunkProvider().chunkExists(position.getBlockX(), position.getBlockZ())) {
|
||||
Chunk chunk = getWorld().getChunkFromBlockCoords(position.getBlockX(), position.getBlockZ());
|
||||
if ((chunk != null) && (chunk.isChunkLoaded)) {
|
||||
chunk.getBiomeArray()[((position.getBlockZ() & 0xF) << 4 | position.getBlockX() & 0xF)] = (byte) ForgeBiomeTypes.getFromBiomeType(biome).biomeID;
|
||||
}
|
||||
Chunk chunk = getWorld().getChunkFromBlockCoords(position.getBlockX(), position.getBlockZ());
|
||||
if ((chunk != null) && (chunk.isChunkLoaded)) {
|
||||
chunk.getBiomeArray()[((position.getBlockZ() & 0xF) << 4 | position.getBlockX() & 0xF)] = (byte) biome.getId();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -317,7 +317,7 @@ public class ForgeWorld extends AbstractWorld {
|
||||
|
||||
@Override
|
||||
public WorldData getWorldData() {
|
||||
return LegacyWorldData.getInstance();
|
||||
return ForgeWorldData.getInstance();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,36 +1,53 @@
|
||||
/*
|
||||
* WorldEdit, a Minecraft world manipulation toolkit
|
||||
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||
* Copyright (C) WorldEdit team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldedit.forge;
|
||||
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
|
||||
import com.sk89q.worldedit.BiomeType;
|
||||
|
||||
public class ForgeBiomeType implements BiomeType {
|
||||
private BiomeGenBase biome;
|
||||
|
||||
public ForgeBiomeType(BiomeGenBase biome) {
|
||||
this.biome = biome;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.biome.biomeName;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* WorldEdit, a Minecraft world manipulation toolkit
|
||||
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||
* Copyright (C) WorldEdit team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldedit.forge;
|
||||
|
||||
import com.sk89q.worldedit.world.registry.BiomeRegistry;
|
||||
import com.sk89q.worldedit.world.registry.LegacyWorldData;
|
||||
|
||||
/**
|
||||
* World data for the Forge platform.
|
||||
*/
|
||||
class ForgeWorldData extends LegacyWorldData {
|
||||
|
||||
private static final ForgeWorldData INSTANCE = new ForgeWorldData();
|
||||
private final BiomeRegistry biomeRegistry = new ForgeBiomeRegistry();
|
||||
|
||||
/**
|
||||
* Create a new instance.
|
||||
*/
|
||||
ForgeWorldData() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BiomeRegistry getBiomeRegistry() {
|
||||
return biomeRegistry;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a static instance.
|
||||
*
|
||||
* @return an instance
|
||||
*/
|
||||
public static ForgeWorldData getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
}
|
@ -103,6 +103,8 @@ public class ForgeWorldEdit {
|
||||
WorldEdit.getInstance().getPlatformManager().unregister(platform);
|
||||
}
|
||||
|
||||
ForgeBiomeRegistry.populate();
|
||||
|
||||
this.platform = new ForgePlatform(this);
|
||||
|
||||
WorldEdit.getInstance().getPlatformManager().register(platform);
|
||||
|
Reference in New Issue
Block a user