Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
d8038a7165
13 changed files with 217 additions and 148 deletions
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
{
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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()
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue