Gateways completed

Also added limbo gateways
This commit is contained in:
StevenRS11
2014-01-23 22:10:46 -05:00
parent bc3438d995
commit 30d789518d
13 changed files with 216 additions and 147 deletions

View File

@@ -3,7 +3,7 @@ package StevenDimDoors.mod_pocketDim;
import java.io.File; import java.io.File;
import net.minecraftforge.common.Configuration; import net.minecraftforge.common.Configuration;
import StevenDimDoors.mod_pocketDim.ticking.MonolithSpawner; import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
import StevenDimDoors.mod_pocketDim.world.GatewayGenerator; import StevenDimDoors.mod_pocketDim.world.GatewayGenerator;
public class DDProperties public class DDProperties
@@ -209,7 +209,7 @@ public class DDProperties
"Sets whether dungeon rifts generate in dimensions other than Limbo").getBoolean(true); "Sets whether dungeon rifts generate in dimensions other than Limbo").getBoolean(true);
MonolithSpawningChance = config.get(Configuration.CATEGORY_GENERAL, "Monolith Spawning Chance", 28, 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(); "spawn in a given Limbo chunk. The default chance is 28.").getInt();
ClusterGenerationChance = config.get(Configuration.CATEGORY_GENERAL, "Cluster Generation Chance", 2, 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.ReplacementFilter;
import StevenDimDoors.mod_pocketDim.schematic.Schematic; import StevenDimDoors.mod_pocketDim.schematic.Schematic;
import StevenDimDoors.mod_pocketDim.ticking.MobMonolith; import StevenDimDoors.mod_pocketDim.ticking.MobMonolith;
import StevenDimDoors.mod_pocketDim.ticking.MonolithSpawner; import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
import StevenDimDoors.mod_pocketDim.util.Point4D; import StevenDimDoors.mod_pocketDim.util.Point4D;
public class DungeonSchematic extends Schematic { public class DungeonSchematic extends Schematic {
@@ -260,7 +260,7 @@ public class DungeonSchematic extends Schematic {
} }
//Remove end portal frames and spawn Monoliths, if allowed //Remove end portal frames and spawn Monoliths, if allowed
boolean canSpawn = MonolithSpawner.isMobSpawningAllowed(); boolean canSpawn = CustomLimboPopulator.isMobSpawningAllowed();
for (Point3D location : monolithSpawnLocations) for (Point3D location : monolithSpawnLocations)
{ {
spawnMonolith(world, location, entranceDoorLocation, turnAngle, pocketCenter, canSpawn); 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.CommonTickHandler;
import StevenDimDoors.mod_pocketDim.ticking.LimboDecay; import StevenDimDoors.mod_pocketDim.ticking.LimboDecay;
import StevenDimDoors.mod_pocketDim.ticking.MobMonolith; 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.ticking.RiftRegenerator;
import StevenDimDoors.mod_pocketDim.tileentities.TileEntityDimDoor; import StevenDimDoors.mod_pocketDim.tileentities.TileEntityDimDoor;
import StevenDimDoors.mod_pocketDim.tileentities.TileEntityDimDoorGold; import StevenDimDoors.mod_pocketDim.tileentities.TileEntityDimDoorGold;
@@ -140,8 +140,8 @@ public class mod_pocketDim
public static boolean isPlayerWearingGoogles = false; public static boolean isPlayerWearingGoogles = false;
public static DDProperties properties; public static DDProperties properties;
public static MonolithSpawner spawner; //Added this field temporarily. Will be refactored out later. public static CustomLimboPopulator spawner; //Added this field temporarily. Will be refactored out later.
public static GatewayGenerator riftGen; public static GatewayGenerator gatewayGenerator;
public static PlayerTracker tracker; public static PlayerTracker tracker;
public static Block coriumBlock; public static Block coriumBlock;
@@ -175,7 +175,7 @@ public class mod_pocketDim
//Now do other stuff //Now do other stuff
MinecraftForge.EVENT_BUS.register(new EventHookContainer(properties)); MinecraftForge.EVENT_BUS.register(new EventHookContainer(properties));
riftGen = new GatewayGenerator(properties); gatewayGenerator = new GatewayGenerator(properties);
} }
@EventHandler @EventHandler
@@ -187,7 +187,7 @@ public class mod_pocketDim
//MonolithSpawner should be initialized before any provider instances are created //MonolithSpawner should be initialized before any provider instances are created
//Register the other regular tick receivers as well //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 new RiftRegenerator(commonTickHandler); //No need to store the reference
LimboDecay decay = new LimboDecay(commonTickHandler, properties); LimboDecay decay = new LimboDecay(commonTickHandler, properties);
@@ -220,7 +220,7 @@ public class mod_pocketDim
mod_pocketDim.limboBiome = (new BiomeGenLimbo(properties.LimboBiomeID)); mod_pocketDim.limboBiome = (new BiomeGenLimbo(properties.LimboBiomeID));
mod_pocketDim.pocketBiome = (new BiomeGenPocket(properties.PocketBiomeID)); mod_pocketDim.pocketBiome = (new BiomeGenPocket(properties.PocketBiomeID));
GameRegistry.registerWorldGenerator(mod_pocketDim.riftGen); GameRegistry.registerWorldGenerator(mod_pocketDim.gatewayGenerator);
tracker = new PlayerTracker(); tracker = new PlayerTracker();
GameRegistry.registerPlayerTracker(tracker); GameRegistry.registerPlayerTracker(tracker);
@@ -288,7 +288,7 @@ public class mod_pocketDim
CraftingManager.registerRecipes(properties); CraftingManager.registerRecipes(properties);
DungeonHelper.initialize(); DungeonHelper.initialize();
this.riftGen.initGateways(); this.gatewayGenerator.initGateways();
/** /**
coriumFluid = new LiquidCorium("Corium").setDensity(1000).setTemperature(3473).setDensity(9400).setLuminosity(6).setRarity(EnumRarity.rare); 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.ArrayList;
import java.util.Random; import java.util.Random;
import java.util.concurrent.ConcurrentLinkedQueue;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
@@ -9,12 +10,13 @@ import net.minecraft.world.GameRules;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager; import net.minecraftforge.common.DimensionManager;
import StevenDimDoors.mod_pocketDim.DDProperties; import StevenDimDoors.mod_pocketDim.DDProperties;
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
import StevenDimDoors.mod_pocketDim.core.NewDimData; import StevenDimDoors.mod_pocketDim.core.NewDimData;
import StevenDimDoors.mod_pocketDim.core.PocketManager; import StevenDimDoors.mod_pocketDim.core.PocketManager;
import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper; import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper;
import StevenDimDoors.mod_pocketDim.util.ChunkLocation; 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; public static final int MAX_MONOLITH_SPAWNING_CHANCE = 100;
private static final String MOB_SPAWNING_RULE = "doMobSpawning"; 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 static final int MONOLITH_SPAWNING_INTERVAL = 1;
private DDProperties properties; 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.properties = properties;
this.locations = new ArrayList<ChunkLocation>(); this.locations = new ConcurrentLinkedQueue<ChunkLocation>();
sender.registerForTicking(this, MONOLITH_SPAWNING_INTERVAL, false); sender.registerForTicking(this, MONOLITH_SPAWNING_INTERVAL, false);
} }
@@ -49,6 +51,10 @@ public class MonolithSpawner implements IRegularTickReceiver {
{ {
//Limbo chunk //Limbo chunk
placeMonolithsInLimbo(location.DimensionID, location.ChunkX, location.ChunkZ); 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 else
{ {

View File

@@ -16,6 +16,7 @@ import StevenDimDoors.mod_pocketDim.core.NewDimData;
import StevenDimDoors.mod_pocketDim.core.PocketManager; import StevenDimDoors.mod_pocketDim.core.PocketManager;
import StevenDimDoors.mod_pocketDim.items.ItemDimensionalDoor; import StevenDimDoors.mod_pocketDim.items.ItemDimensionalDoor;
import StevenDimDoors.mod_pocketDim.world.gateways.BaseGateway; 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.GatewaySandstonePillars;
import StevenDimDoors.mod_pocketDim.world.gateways.GatewayTwoPillars; import StevenDimDoors.mod_pocketDim.world.gateways.GatewayTwoPillars;
import cpw.mods.fml.common.IWorldGenerator; import cpw.mods.fml.common.IWorldGenerator;
@@ -54,6 +55,8 @@ public class GatewayGenerator implements IWorldGenerator
//add gateways here //add gateways here
gateways.add(new GatewaySandstonePillars(this.properties)); 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, //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. //the current world is a pocket dimension, or the world is remote.
//Also don't generate anything in The End. //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)) (world.provider instanceof PocketProvider) || (world.provider.dimensionId == END_DIMENSION_ID))
{ {
return; 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) 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, //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.Event.Result;
import net.minecraftforge.event.terraingen.ChunkProviderEvent; import net.minecraftforge.event.terraingen.ChunkProviderEvent;
import StevenDimDoors.mod_pocketDim.DDProperties; import StevenDimDoors.mod_pocketDim.DDProperties;
import StevenDimDoors.mod_pocketDim.ticking.MonolithSpawner; import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
public class LimboGenerator extends ChunkProviderGenerate public class LimboGenerator extends ChunkProviderGenerate
{ {
@@ -81,9 +81,9 @@ public class LimboGenerator extends ChunkProviderGenerate
} }
private DDProperties properties; 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); super(world, seed, false);

View File

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

View File

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

View File

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

View File

@@ -11,6 +11,7 @@ import StevenDimDoors.mod_pocketDim.Point3D;
import StevenDimDoors.mod_pocketDim.mod_pocketDim; import StevenDimDoors.mod_pocketDim.mod_pocketDim;
import StevenDimDoors.mod_pocketDim.core.DimLink; import StevenDimDoors.mod_pocketDim.core.DimLink;
import StevenDimDoors.mod_pocketDim.core.LinkTypes; import StevenDimDoors.mod_pocketDim.core.LinkTypes;
import StevenDimDoors.mod_pocketDim.core.NewDimData;
import StevenDimDoors.mod_pocketDim.core.PocketManager; import StevenDimDoors.mod_pocketDim.core.PocketManager;
import StevenDimDoors.mod_pocketDim.dungeon.DungeonData; import StevenDimDoors.mod_pocketDim.dungeon.DungeonData;
import StevenDimDoors.mod_pocketDim.dungeon.DungeonSchematic; import StevenDimDoors.mod_pocketDim.dungeon.DungeonSchematic;
@@ -30,34 +31,7 @@ import net.minecraft.world.biome.BiomeGenBase;
public abstract class BaseGateway public abstract class BaseGateway
{ {
//This pack is what the dungeon initially generates into from this gateway. DDProperties properties;
protected DungeonPack startingPack;
/**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) public BaseGateway(DDProperties properties)
{ {
@@ -75,7 +49,7 @@ public abstract class BaseGateway
{ {
int orientation = 0; int orientation = 0;
if (this.hasSchematic()) if (this.getSchematicPath()!=null)
{ {
//Get the correct filters //Get the correct filters
GatewayBlockFilter filter = new GatewayBlockFilter(); GatewayBlockFilter filter = new GatewayBlockFilter();
@@ -99,7 +73,8 @@ public abstract class BaseGateway
this.generateRandomBits(world, x, y, z); this.generateRandomBits(world, x, y, z);
DimLink link = PocketManager.getDimensionData(world).createLink(x, y + 1, z, LinkTypes.DUNGEON, orientation); 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; return true;
} }
@@ -117,7 +92,7 @@ public abstract class BaseGateway
//TODO- refine selection criteria here, this is the default case //TODO- refine selection criteria here, this is the default case
try try
{ {
return DungeonSchematic.readFromResource(schematicPaths.get(world.rand.nextInt(schematicPaths.size()))); return DungeonSchematic.readFromResource(this.getSchematicPath());
} }
catch (Exception e) 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 * returns a dungeon from the assigned pack to start with
* @return * @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) public boolean isLocationValid(World world, int x, int y, int z, BiomeGenBase biome)
{ {
//TODO- refine condition here as warranted return this.isBiomeValid(biome)&&areCoordsValid(world, x, y, z);
return this.isBiomeValid(biome);
}
public boolean shouldGenUnderground()
{
return !surfaceGateway;
} }
public boolean isBiomeValid(BiomeGenBase biome) 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;
} }
public boolean hasSchematic() /**
{ * Use this function to generate randomized bits of the structure.
return this.schematicPaths != null && !this.schematicPaths.isEmpty(); * @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);
/**
* @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) public GatewaySandstonePillars(DDProperties properties)
{ {
super(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 @Override
@@ -38,5 +32,30 @@ public class GatewaySandstonePillars extends BaseGateway
public void generateRandomBits(World world, int x, int y, int z) 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.mod_pocketDim;
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack; import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper; import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
import StevenDimDoors.mod_pocketDim.world.LimboProvider;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.world.World; import net.minecraft.world.World;
@@ -17,13 +18,6 @@ public class GatewayTwoPillars extends BaseGateway
public GatewayTwoPillars(DDProperties properties) public GatewayTwoPillars(DDProperties properties)
{ {
super(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 @Override
void generateRandomBits(World world, int x, int y, int z) 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);
}
} }