Merge remote-tracking branch 'upstream/master'

This commit is contained in:
SenseiKiwi 2014-01-24 07:18:15 -04:00
commit d8038a7165
13 changed files with 217 additions and 148 deletions

View file

@ -3,7 +3,7 @@ package StevenDimDoors.mod_pocketDim;
import java.io.File;
import net.minecraftforge.common.Configuration;
import StevenDimDoors.mod_pocketDim.ticking.MonolithSpawner;
import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
import StevenDimDoors.mod_pocketDim.world.GatewayGenerator;
public class DDProperties
@ -209,7 +209,7 @@ public class DDProperties
"Sets whether dungeon rifts generate in dimensions other than Limbo").getBoolean(true);
MonolithSpawningChance = config.get(Configuration.CATEGORY_GENERAL, "Monolith Spawning Chance", 28,
"Sets the chance (out of " + MonolithSpawner.MAX_MONOLITH_SPAWNING_CHANCE + ") that Monoliths will " +
"Sets the chance (out of " + CustomLimboPopulator.MAX_MONOLITH_SPAWNING_CHANCE + ") that Monoliths will " +
"spawn in a given Limbo chunk. The default chance is 28.").getInt();
ClusterGenerationChance = config.get(Configuration.CATEGORY_GENERAL, "Cluster Generation Chance", 2,

View file

@ -29,7 +29,7 @@ import StevenDimDoors.mod_pocketDim.schematic.InvalidSchematicException;
import StevenDimDoors.mod_pocketDim.schematic.ReplacementFilter;
import StevenDimDoors.mod_pocketDim.schematic.Schematic;
import StevenDimDoors.mod_pocketDim.ticking.MobMonolith;
import StevenDimDoors.mod_pocketDim.ticking.MonolithSpawner;
import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
import StevenDimDoors.mod_pocketDim.util.Point4D;
public class DungeonSchematic extends Schematic {
@ -260,7 +260,7 @@ public class DungeonSchematic extends Schematic {
}
//Remove end portal frames and spawn Monoliths, if allowed
boolean canSpawn = MonolithSpawner.isMobSpawningAllowed();
boolean canSpawn = CustomLimboPopulator.isMobSpawningAllowed();
for (Point3D location : monolithSpawnLocations)
{
spawnMonolith(world, location, entranceDoorLocation, turnAngle, pocketCenter, canSpawn);

View file

@ -38,7 +38,7 @@ import StevenDimDoors.mod_pocketDim.items.itemRiftRemover;
import StevenDimDoors.mod_pocketDim.ticking.CommonTickHandler;
import StevenDimDoors.mod_pocketDim.ticking.LimboDecay;
import StevenDimDoors.mod_pocketDim.ticking.MobMonolith;
import StevenDimDoors.mod_pocketDim.ticking.MonolithSpawner;
import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
import StevenDimDoors.mod_pocketDim.ticking.RiftRegenerator;
import StevenDimDoors.mod_pocketDim.tileentities.TileEntityDimDoor;
import StevenDimDoors.mod_pocketDim.tileentities.TileEntityDimDoorGold;
@ -140,8 +140,8 @@ public class mod_pocketDim
public static boolean isPlayerWearingGoogles = false;
public static DDProperties properties;
public static MonolithSpawner spawner; //Added this field temporarily. Will be refactored out later.
public static GatewayGenerator riftGen;
public static CustomLimboPopulator spawner; //Added this field temporarily. Will be refactored out later.
public static GatewayGenerator gatewayGenerator;
public static PlayerTracker tracker;
public static Block coriumBlock;
@ -175,7 +175,7 @@ public class mod_pocketDim
//Now do other stuff
MinecraftForge.EVENT_BUS.register(new EventHookContainer(properties));
riftGen = new GatewayGenerator(properties);
gatewayGenerator = new GatewayGenerator(properties);
}
@EventHandler
@ -187,7 +187,7 @@ public class mod_pocketDim
//MonolithSpawner should be initialized before any provider instances are created
//Register the other regular tick receivers as well
spawner = new MonolithSpawner(commonTickHandler, properties);
spawner = new CustomLimboPopulator(commonTickHandler, properties);
new RiftRegenerator(commonTickHandler); //No need to store the reference
LimboDecay decay = new LimboDecay(commonTickHandler, properties);
@ -220,7 +220,7 @@ public class mod_pocketDim
mod_pocketDim.limboBiome = (new BiomeGenLimbo(properties.LimboBiomeID));
mod_pocketDim.pocketBiome = (new BiomeGenPocket(properties.PocketBiomeID));
GameRegistry.registerWorldGenerator(mod_pocketDim.riftGen);
GameRegistry.registerWorldGenerator(mod_pocketDim.gatewayGenerator);
tracker = new PlayerTracker();
GameRegistry.registerPlayerTracker(tracker);
@ -288,7 +288,7 @@ public class mod_pocketDim
CraftingManager.registerRecipes(properties);
DungeonHelper.initialize();
this.riftGen.initGateways();
this.gatewayGenerator.initGateways();
/**
coriumFluid = new LiquidCorium("Corium").setDensity(1000).setTemperature(3473).setDensity(9400).setLuminosity(6).setRarity(EnumRarity.rare);

View file

@ -2,6 +2,7 @@ package StevenDimDoors.mod_pocketDim.ticking;
import java.util.ArrayList;
import java.util.Random;
import java.util.concurrent.ConcurrentLinkedQueue;
import net.minecraft.entity.Entity;
import net.minecraft.server.MinecraftServer;
@ -9,12 +10,13 @@ import net.minecraft.world.GameRules;
import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
import StevenDimDoors.mod_pocketDim.DDProperties;
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
import StevenDimDoors.mod_pocketDim.core.NewDimData;
import StevenDimDoors.mod_pocketDim.core.PocketManager;
import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper;
import StevenDimDoors.mod_pocketDim.util.ChunkLocation;
public class MonolithSpawner implements IRegularTickReceiver {
public class CustomLimboPopulator implements IRegularTickReceiver {
public static final int MAX_MONOLITH_SPAWNING_CHANCE = 100;
private static final String MOB_SPAWNING_RULE = "doMobSpawning";
@ -23,12 +25,12 @@ public class MonolithSpawner implements IRegularTickReceiver {
private static final int MONOLITH_SPAWNING_INTERVAL = 1;
private DDProperties properties;
private ArrayList<ChunkLocation> locations;
private ConcurrentLinkedQueue<ChunkLocation> locations;
public MonolithSpawner(IRegularTickSender sender, DDProperties properties)
public CustomLimboPopulator(IRegularTickSender sender, DDProperties properties)
{
this.properties = properties;
this.locations = new ArrayList<ChunkLocation>();
this.locations = new ConcurrentLinkedQueue<ChunkLocation>();
sender.registerForTicking(this, MONOLITH_SPAWNING_INTERVAL, false);
}
@ -49,6 +51,10 @@ public class MonolithSpawner implements IRegularTickReceiver {
{
//Limbo chunk
placeMonolithsInLimbo(location.DimensionID, location.ChunkX, location.ChunkZ);
World world = DimensionManager.getWorld(location.DimensionID);
mod_pocketDim.instance.gatewayGenerator.generate(world.rand, location.ChunkX, location.ChunkZ,world, world.getChunkProvider(), world.getChunkProvider());
}
else
{

View file

@ -16,6 +16,7 @@ import StevenDimDoors.mod_pocketDim.core.NewDimData;
import StevenDimDoors.mod_pocketDim.core.PocketManager;
import StevenDimDoors.mod_pocketDim.items.ItemDimensionalDoor;
import StevenDimDoors.mod_pocketDim.world.gateways.BaseGateway;
import StevenDimDoors.mod_pocketDim.world.gateways.GatewayLimbo;
import StevenDimDoors.mod_pocketDim.world.gateways.GatewaySandstonePillars;
import StevenDimDoors.mod_pocketDim.world.gateways.GatewayTwoPillars;
import cpw.mods.fml.common.IWorldGenerator;
@ -54,6 +55,8 @@ public class GatewayGenerator implements IWorldGenerator
//add gateways here
gateways.add(new GatewaySandstonePillars(this.properties));
gateways.add(defaultGateway);
gateways.add(new GatewayLimbo(this.properties));
}
@ -63,7 +66,7 @@ public class GatewayGenerator implements IWorldGenerator
//Don't generate rifts or gateways if the rift generation flag is disabled,
//the current world is a pocket dimension, or the world is remote.
//Also don't generate anything in The End.
if (world.isRemote || (!properties.WorldRiftGenerationEnabled && !(world.provider instanceof LimboProvider)) ||
if (world.isRemote || (!properties.WorldRiftGenerationEnabled) ||
(world.provider instanceof PocketProvider) || (world.provider.dimensionId == END_DIMENSION_ID))
{
return;
@ -173,60 +176,6 @@ public class GatewayGenerator implements IWorldGenerator
}
}
private static void createStoneGateway(World world, int x, int y, int z, Random random)
{
final int blockID = Block.stoneBrick.blockID;
//Replace some of the ground around the gateway with bricks
for (int xc = -GATEWAY_RADIUS; xc <= GATEWAY_RADIUS; xc++)
{
for (int zc= -GATEWAY_RADIUS; zc <= GATEWAY_RADIUS; zc++)
{
//Check that the block is supported by an opaque block.
//This prevents us from building over a cliff, on the peak of a mountain,
//or the surface of the ocean or a frozen lake.
if (world.isBlockOpaqueCube(x + xc, y - 2, z + zc))
{
//Randomly choose whether to place bricks or not. The math is designed so that the
//chances of placing a block decrease as we get farther from the gateway's center.
if (Math.abs(xc) + Math.abs(zc) < random.nextInt(2) + 3)
{
//Place Stone Bricks
world.setBlock(x + xc, y - 1, z + zc, blockID, 0, 3);
}
else if (Math.abs(xc) + Math.abs(zc) < random.nextInt(3) + 3)
{
//Place Cracked Stone Bricks
world.setBlock(x + xc, y - 1, z + zc, blockID, 2, 3);
}
}
}
}
//Use Chiseled Stone Bricks to top off the pillars around the door
world.setBlock(x, y + 2, z + 1, blockID, 3, 3);
world.setBlock(x, y + 2, z - 1, blockID, 3, 3);
//Build the columns around the door
world.setBlock(x, y + 1, z - 1, blockID, 0, 3);
world.setBlock(x, y + 1, z + 1, blockID, 0, 3);
world.setBlock(x, y, z - 1, blockID, 0, 3);
world.setBlock(x, y, z + 1, blockID, 0, 3);
}
private static void createLimboGateway(World world, int x, int y, int z, int blockID)
{
//Build the gateway out of Unraveled Fabric. Since nearly all the blocks in Limbo are of
//that type, there is no point replacing the ground.
world.setBlock(x, y + 2, z + 1, blockID, 0, 3);
world.setBlock(x, y + 2, z - 1, blockID, 0, 3);
//Build the columns around the door
world.setBlock(x, y + 1, z - 1, blockID, 0, 3);
world.setBlock(x, y + 1, z + 1, blockID, 0, 3);
world.setBlock(x, y, z - 1, blockID, 0, 3);
world.setBlock(x, y, z + 1, blockID, 0, 3);
}
private static boolean checkGatewayLocation(World world, int x, int y, int z)
{
//Check if the point is within the acceptable altitude range, the block above that point is empty,

View file

@ -18,7 +18,7 @@ import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.Event.Result;
import net.minecraftforge.event.terraingen.ChunkProviderEvent;
import StevenDimDoors.mod_pocketDim.DDProperties;
import StevenDimDoors.mod_pocketDim.ticking.MonolithSpawner;
import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
public class LimboGenerator extends ChunkProviderGenerate
{
@ -81,9 +81,9 @@ public class LimboGenerator extends ChunkProviderGenerate
}
private DDProperties properties;
private MonolithSpawner spawner;
private CustomLimboPopulator spawner;
public LimboGenerator(World world, long seed, MonolithSpawner spawner, DDProperties properties)
public LimboGenerator(World world, long seed, CustomLimboPopulator spawner, DDProperties properties)
{
super(world, seed, false);

View file

@ -14,7 +14,7 @@ import net.minecraftforge.client.IRenderHandler;
import StevenDimDoors.mod_pocketDim.CloudRenderBlank;
import StevenDimDoors.mod_pocketDim.DDProperties;
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
import StevenDimDoors.mod_pocketDim.ticking.MonolithSpawner;
import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -27,7 +27,7 @@ public class LimboProvider extends WorldProvider
private IRenderHandler skyRenderer;
private DDProperties properties;
private MonolithSpawner spawner;
private CustomLimboPopulator spawner;
public LimboProvider()
{

View file

@ -10,15 +10,15 @@ import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.ChunkProviderGenerate;
import StevenDimDoors.mod_pocketDim.core.NewDimData;
import StevenDimDoors.mod_pocketDim.core.PocketManager;
import StevenDimDoors.mod_pocketDim.ticking.MonolithSpawner;
import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
public class PocketGenerator extends ChunkProviderGenerate
{
private World worldObj;
private MonolithSpawner spawner;
private CustomLimboPopulator spawner;
public PocketGenerator(World par1World, long par2, boolean par4, MonolithSpawner spawner)
public PocketGenerator(World par1World, long par2, boolean par4, CustomLimboPopulator spawner)
{
super(par1World, par2, par4);
this.worldObj = par1World;

View file

@ -12,14 +12,14 @@ import StevenDimDoors.mod_pocketDim.CloudRenderBlank;
import StevenDimDoors.mod_pocketDim.DDProperties;
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
import StevenDimDoors.mod_pocketDim.core.PocketManager;
import StevenDimDoors.mod_pocketDim.ticking.MonolithSpawner;
import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class PocketProvider extends WorldProvider
{
private DDProperties properties;
private MonolithSpawner spawner;
private CustomLimboPopulator spawner;
private IRenderHandler skyRenderer;
public PocketProvider()

View file

@ -11,6 +11,7 @@ import StevenDimDoors.mod_pocketDim.Point3D;
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
import StevenDimDoors.mod_pocketDim.core.DimLink;
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
import StevenDimDoors.mod_pocketDim.core.NewDimData;
import StevenDimDoors.mod_pocketDim.core.PocketManager;
import StevenDimDoors.mod_pocketDim.dungeon.DungeonData;
import StevenDimDoors.mod_pocketDim.dungeon.DungeonSchematic;
@ -30,35 +31,8 @@ import net.minecraft.world.biome.BiomeGenBase;
public abstract class BaseGateway
{
//This pack is what the dungeon initially generates into from this gateway.
protected DungeonPack startingPack;
DDProperties properties;
/**Flag that determines if this gateway is tied to a specific biome.
*For compatabilities sake, we are just using string comparison to check.
**/
protected boolean isBiomeSpecific;
/**
* List of biome names that we check against. Is by default a whitelist, but the isBiomeValid method
* can be overriden for specific gateways. For example, any biome containing 'forest' would be valid if we added 'forest',
* even from other mods.
*/
protected ArrayList<String> biomeNames = new ArrayList<String>();
/**
* List containing all the .schematics attached to this gateway. Selection is random by default,
* but can be overriden for specific gateways in getSchematicToBuild
*/
protected ArrayList<String> schematicPaths= new ArrayList<String>();
//TODO not yet implemented
protected boolean surfaceGateway;
//TODO not yet implemented
protected int generationWeight;
private DDProperties properties;
public BaseGateway(DDProperties properties)
{
this.properties=properties;
@ -75,15 +49,15 @@ public abstract class BaseGateway
{
int orientation = 0;
if (this.hasSchematic())
if (this.getSchematicPath()!=null)
{
//Get the correct filters
GatewayBlockFilter filter = new GatewayBlockFilter();
DungeonSchematic schematic = this.getSchematicToBuild(world, x, y, z);
//apply filters
schematic.applyImportFilters(properties);
schematic.applyFilter(filter);
schematic.applyImportFilters(properties);
Point3D doorLocation = filter.getEntranceDoorLocation();
orientation = filter.getEntranceOrientation();
@ -99,7 +73,8 @@ public abstract class BaseGateway
this.generateRandomBits(world, x, y, z);
DimLink link = PocketManager.getDimensionData(world).createLink(x, y + 1, z, LinkTypes.DUNGEON, orientation);
PocketBuilder.generateSelectedDungeonPocket(link, mod_pocketDim.properties, this.getStartingDungeon(world.rand));
NewDimData data = PocketManager.registerPocket(PocketManager.getDimensionData(world), true);
PocketBuilder.generateSelectedDungeonPocket(link, mod_pocketDim.properties, this.getStartingDungeon(data,world.rand));
return true;
}
@ -117,7 +92,7 @@ public abstract class BaseGateway
//TODO- refine selection criteria here, this is the default case
try
{
return DungeonSchematic.readFromResource(schematicPaths.get(world.rand.nextInt(schematicPaths.size())));
return DungeonSchematic.readFromResource(this.getSchematicPath());
}
catch (Exception e)
{
@ -127,22 +102,13 @@ public abstract class BaseGateway
}
}
/**
* Use this function to generate randomized bits of the structure.
* @param world
* @param x
* @param y
* @param z
*/
abstract void generateRandomBits(World world, int x, int y, int z);
/**
* returns a dungeon from the assigned pack to start with
* @return
*/
public DungeonData getStartingDungeon(Random random)
public DungeonData getStartingDungeon(NewDimData dimension, Random random)
{
return startingPack.getRandomDungeon(random);
return getStartingPack().getNextDungeon(dimension,random);
}
/**
@ -156,22 +122,63 @@ public abstract class BaseGateway
*/
public boolean isLocationValid(World world, int x, int y, int z, BiomeGenBase biome)
{
//TODO- refine condition here as warranted
return this.isBiomeValid(biome);
}
public boolean shouldGenUnderground()
{
return !surfaceGateway;
return this.isBiomeValid(biome)&&areCoordsValid(world, x, y, z);
}
public boolean isBiomeValid(BiomeGenBase biome)
{
return !this.isBiomeSpecific || this.biomeNames.contains(biome.biomeName.toLowerCase());
if(this.getBiomeNames()!=null)
{
for(String biomeName : this.getBiomeNames())
{
if(biome.biomeName.contains(biomeName))
{
return true;
}
}
return false;
}
return true;
}
/**
* Use this function to generate randomized bits of the structure.
* @param world
* @param x
* @param y
* @param z
*/
abstract void generateRandomBits(World world, int x, int y, int z);
/**
* Decides if the given coords/world are valid
* @param world
* @param x
* @param y
* @param z
* @return
*/
public abstract boolean areCoordsValid(World world, int x, int y, int z);
public boolean hasSchematic()
{
return this.schematicPaths != null && !this.schematicPaths.isEmpty();
}
/**
* @return the pack the dungeon initially generates into from this gateway.
*/
public abstract DungeonPack getStartingPack();
/**
* Is by default a whitelist, but the isBiomeValid method
* can be overriden for specific gateways. For example, any biome containing 'forest' would be valid if we added 'forest',
* even from other mods.
* @return List of biome names that we check against.
*/
public abstract String[] getBiomeNames();
/**
* @return List containing all the .schematics attached to this gateway. Selection is random by default
*/
public abstract String getSchematicPath();
//TODO not yet implemented
public abstract boolean isSurfaceGateway();
}

View file

@ -0,0 +1,69 @@
package StevenDimDoors.mod_pocketDim.world.gateways;
import net.minecraft.world.World;
import StevenDimDoors.mod_pocketDim.DDProperties;
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
import StevenDimDoors.mod_pocketDim.items.BaseItemDoor;
import StevenDimDoors.mod_pocketDim.world.LimboProvider;
public class GatewayLimbo extends BaseGateway
{
public GatewayLimbo(DDProperties properties) {
super(properties);
// TODO Auto-generated constructor stub
}
@Override
void generateRandomBits(World world, int x, int y, int z)
{
int blockID = mod_pocketDim.blockLimbo.blockID;
//Build the gateway out of Unraveled Fabric. Since nearly all the blocks in Limbo are of
//that type, there is no point replacing the ground.
world.setBlock(x, y + 2, z + 1, blockID, 0, 3);
world.setBlock(x, y + 2, z - 1, blockID, 0, 3);
//Build the columns around the door
world.setBlock(x, y + 1, z - 1, blockID, 0, 3);
world.setBlock(x, y + 1, z + 1, blockID, 0, 3);
world.setBlock(x, y, z - 1, blockID, 0, 3);
world.setBlock(x, y, z + 1, blockID, 0, 3);
BaseItemDoor.placeDoorBlock(world, x, y, z, 0, mod_pocketDim.transientDoor);
}
@Override
public DungeonPack getStartingPack() {
// TODO Auto-generated method stub
return DungeonHelper.instance().getDungeonPack("RUINS");
}
@Override
public String[] getBiomeNames() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getSchematicPath() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isSurfaceGateway() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean areCoordsValid(World world, int x, int y, int z) {
// TODO Auto-generated method stub
return world.provider instanceof LimboProvider;
}
}

View file

@ -19,12 +19,6 @@ public class GatewaySandstonePillars extends BaseGateway
public GatewaySandstonePillars(DDProperties properties)
{
super(properties);
super.startingPack=DungeonHelper.instance().getDungeonPack("RUINS");
super.isBiomeSpecific=true;
super.biomeNames.add("desert");
surfaceGateway=true;
generationWeight = 0;
schematicPaths.add("/schematics/gateways/sandstonePillars.schematic");
}
@Override
@ -38,5 +32,30 @@ public class GatewaySandstonePillars extends BaseGateway
public void generateRandomBits(World world, int x, int y, int z)
{
}
@Override
public DungeonPack getStartingPack()
{
return DungeonHelper.instance().getDungeonPack("RUINS");
}
@Override
public String[] getBiomeNames()
{
return new String[]{"desert"};
}
@Override
public String getSchematicPath()
{
return "/schematics/gateways/sandstonePillars.schematic";
}
@Override
public boolean isSurfaceGateway()
{
return true;
}
@Override
public boolean areCoordsValid(World world, int x, int y, int z) {
// TODO Auto-generated method stub
return true;
}
}

View file

@ -6,6 +6,7 @@ import StevenDimDoors.mod_pocketDim.DDProperties;
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
import StevenDimDoors.mod_pocketDim.world.LimboProvider;
import net.minecraft.block.Block;
import net.minecraft.world.World;
@ -17,13 +18,6 @@ public class GatewayTwoPillars extends BaseGateway
public GatewayTwoPillars(DDProperties properties)
{
super(properties);
super.startingPack=DungeonHelper.instance().getDungeonPack("RUINS");
super.isBiomeSpecific=false;
super.biomeNames=null;
surfaceGateway=true;
generationWeight = 0;
schematicPaths.add("/schematics/gateways/twoPillars.schematic");
}
@Override
void generateRandomBits(World world, int x, int y, int z)
@ -56,5 +50,30 @@ public class GatewayTwoPillars extends BaseGateway
}
}
}
@Override
public DungeonPack getStartingPack() {
// TODO Auto-generated method stub
return DungeonHelper.instance().getDungeonPack("RUINS");
}
@Override
public String[] getBiomeNames() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getSchematicPath() {
// TODO Auto-generated method stub
return "/schematics/gateways/twoPillars.schematic";
}
@Override
public boolean isSurfaceGateway() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean areCoordsValid(World world, int x, int y, int z) {
// TODO Auto-generated method stub
return !(world.provider instanceof LimboProvider);
}
}