1e2dedaafe
I changed the name filter for schematic names from CommandEndDungeonCreation to DungeonHelper, and renamed it to NamePattern. I also rewrote most of registerCustomDungeon() to be much more concise. The changes are incomplete but I'm making an intermediate commit. The aim is to change DungeonHelper into a proper singleton and to eliminate the clunky sections that manually map dungeon categories to their corresponding lists. Instead, I'll use data structures to implement that far more efficiently.
624 lines
No EOL
21 KiB
Java
624 lines
No EOL
21 KiB
Java
package StevenDimDoors.mod_pocketDim.helpers;
|
|
|
|
import java.io.File;
|
|
import java.io.FileOutputStream;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.Random;
|
|
import java.util.regex.Pattern;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.BlockContainer;
|
|
import net.minecraft.world.World;
|
|
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
import StevenDimDoors.mod_pocketDim.DungeonGenerator;
|
|
import StevenDimDoors.mod_pocketDim.LinkData;
|
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
|
import StevenDimDoors.mod_pocketDim.helpers.jnbt.ByteArrayTag;
|
|
import StevenDimDoors.mod_pocketDim.helpers.jnbt.CompoundTag;
|
|
import StevenDimDoors.mod_pocketDim.helpers.jnbt.ListTag;
|
|
import StevenDimDoors.mod_pocketDim.helpers.jnbt.NBTOutputStream;
|
|
import StevenDimDoors.mod_pocketDim.helpers.jnbt.ShortTag;
|
|
import StevenDimDoors.mod_pocketDim.helpers.jnbt.Tag;
|
|
|
|
public class DungeonHelper
|
|
{
|
|
private static DDProperties properties = null;
|
|
|
|
private Random rand = new Random();
|
|
private static final String SCHEMATIC_FILE_EXTENSION = ".schematic";
|
|
private static final int DEFAULT_DUNGEON_WEIGHT = 100;
|
|
|
|
public static Pattern NamePattern = Pattern.compile("[A-Za-z0-9_]+");
|
|
|
|
public HashMap<Integer, LinkData> customDungeonStatus = new HashMap<Integer, LinkData>();
|
|
|
|
public ArrayList<DungeonGenerator> customDungeons = new ArrayList<DungeonGenerator>();
|
|
public ArrayList<DungeonGenerator> registeredDungeons = new ArrayList<DungeonGenerator>();
|
|
|
|
private ArrayList<DungeonGenerator> weightedDungeonGenList = new ArrayList<DungeonGenerator>();
|
|
private ArrayList<DungeonGenerator> simpleHalls = new ArrayList<DungeonGenerator>();
|
|
private ArrayList<DungeonGenerator> complexHalls = new ArrayList<DungeonGenerator>();
|
|
private ArrayList<DungeonGenerator> deadEnds = new ArrayList<DungeonGenerator>();
|
|
private ArrayList<DungeonGenerator> hubs = new ArrayList<DungeonGenerator>();
|
|
private ArrayList<DungeonGenerator> mazes = new ArrayList<DungeonGenerator>();
|
|
private ArrayList<DungeonGenerator> pistonTraps = new ArrayList<DungeonGenerator>();
|
|
private ArrayList<DungeonGenerator> exits = new ArrayList<DungeonGenerator>();
|
|
|
|
public ArrayList<String> tagList = new ArrayList<String>();
|
|
|
|
public ArrayList<Integer> metadataFlipList = new ArrayList<Integer>();
|
|
public ArrayList<Integer> metadataNextList = new ArrayList<Integer>();
|
|
|
|
public DungeonGenerator defaultUp = new DungeonGenerator(0, "/schematic/simpleStairsUp.schematic", true);
|
|
|
|
public DungeonHelper()
|
|
{
|
|
if (properties == null)
|
|
properties = DDProperties.instance();
|
|
}
|
|
|
|
public boolean validateSchematicName(String name)
|
|
{
|
|
String[] dungeonData = name.split("_");
|
|
|
|
//Check for a valid number of parts
|
|
if (dungeonData.length < 3 || dungeonData.length > 4)
|
|
return false;
|
|
|
|
//Check if the category is valid
|
|
if (!tagList.contains(dungeonData[0]))
|
|
return false;
|
|
|
|
//Check if the name is valid
|
|
if (!NamePattern.matcher(dungeonData[1]).matches())
|
|
return false;
|
|
|
|
//Check if the open/closed flag is present
|
|
if (!dungeonData[2].equalsIgnoreCase("open") && !dungeonData[2].equalsIgnoreCase("closed"))
|
|
return false;
|
|
|
|
//If the weight is present, check that it is valid
|
|
if (dungeonData.length == 4)
|
|
{
|
|
try
|
|
{
|
|
int weight = Integer.parseInt(dungeonData[3]);
|
|
if (weight < 0)
|
|
return false;
|
|
}
|
|
catch (NumberFormatException e)
|
|
{
|
|
//Not a number
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public void registerCustomDungeon(File schematicFile)
|
|
{
|
|
String name = schematicFile.getName();
|
|
try
|
|
{
|
|
if (name.endsWith(SCHEMATIC_FILE_EXTENSION) && validateSchematicName(name))
|
|
{
|
|
//Strip off the file extension while splitting the file name
|
|
String[] dungeonData = name.substring(0, name.length() - SCHEMATIC_FILE_EXTENSION.length()).split("_");
|
|
|
|
String path = schematicFile.getAbsolutePath();
|
|
boolean open = dungeonData[2].equals("open");
|
|
int weight = (dungeonData.length == 4) ? Integer.parseInt(dungeonData[3]) : DEFAULT_DUNGEON_WEIGHT;
|
|
|
|
//Change this code so that instead of using IFs, we use a hash table mapping (category) -> (list)
|
|
/*while(count<weight)
|
|
{
|
|
if(name[0].equals("hub"))
|
|
{
|
|
this.hubs.add(new DungeonGenerator(weight,path,open));
|
|
}
|
|
else if(name[0].equals("simpleHall"))
|
|
{
|
|
this.simpleHalls.add(new DungeonGenerator(weight,path,open));
|
|
|
|
}
|
|
else if(name[0].equals("complexHall"))
|
|
{
|
|
this.complexHalls.add(new DungeonGenerator(weight,path,open));
|
|
|
|
}
|
|
else if(name[0].equals("trap"))
|
|
{
|
|
this.pistonTraps.add(new DungeonGenerator(weight,path,open));
|
|
|
|
}
|
|
else if(name[0].equals("deadEnd"))
|
|
{
|
|
this.deadEnds.add(new DungeonGenerator(weight,path,open));
|
|
|
|
}
|
|
else if(name[0].equals("exit"))
|
|
{
|
|
this.exits.add(new DungeonGenerator(weight,path,open));
|
|
|
|
}
|
|
else if(name[0].equals("maze"))
|
|
{
|
|
this.mazes.add(new DungeonGenerator(weight,path,open));
|
|
|
|
}
|
|
count++;
|
|
this.weightedDungeonGenList.add(new DungeonGenerator(weight,path,open));
|
|
}*/
|
|
|
|
registeredDungeons.add(new DungeonGenerator(weight, path, open));
|
|
System.out.println("Imported " + name);
|
|
}
|
|
else
|
|
{
|
|
System.out.println("Could not parse dungeon filename, not adding dungeon to generation lists");
|
|
customDungeons.add(new DungeonGenerator(0, schematicFile.getAbsolutePath(), true));
|
|
System.out.println("Imported " + name);
|
|
}
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
e.printStackTrace();
|
|
System.out.println("Failed to import " + name);
|
|
}
|
|
}
|
|
|
|
public void importCustomDungeons(String dir)
|
|
{
|
|
File file = new File(dir);
|
|
File[] schematicNames = file.listFiles();
|
|
|
|
if (schematicNames!=null)
|
|
{
|
|
for(File schematicFile: schematicNames)
|
|
{
|
|
this.registerCustomDungeon(schematicFile);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void registerFlipBlocks()
|
|
{
|
|
this.metadataFlipList.add(Block.dispenser.blockID);
|
|
this.metadataFlipList.add(Block.stairsStoneBrick.blockID);
|
|
this.metadataFlipList.add(Block.lever.blockID);
|
|
this.metadataFlipList.add(Block.stoneButton.blockID);
|
|
this.metadataFlipList.add(Block.redstoneRepeaterIdle.blockID);
|
|
this.metadataFlipList.add(Block.redstoneRepeaterActive.blockID);
|
|
this.metadataFlipList.add(Block.tripWireSource.blockID);
|
|
this.metadataFlipList.add(Block.torchWood.blockID);
|
|
this.metadataFlipList.add(Block.torchRedstoneIdle.blockID);
|
|
this.metadataFlipList.add(Block.torchRedstoneActive.blockID);
|
|
this.metadataFlipList.add(Block.doorIron.blockID);
|
|
this.metadataFlipList.add(Block.doorWood.blockID);
|
|
this.metadataFlipList.add(Block.pistonBase.blockID);
|
|
this.metadataFlipList.add(Block.pistonStickyBase.blockID);
|
|
this.metadataFlipList.add(Block.pistonExtension.blockID);
|
|
this.metadataFlipList.add(Block.redstoneComparatorIdle.blockID);
|
|
this.metadataFlipList.add(Block.redstoneComparatorActive.blockID);
|
|
this.metadataFlipList.add(Block.signPost.blockID);
|
|
this.metadataFlipList.add(Block.signWall.blockID);
|
|
this.metadataFlipList.add(Block.skull.blockID);
|
|
this.metadataFlipList.add(Block.ladder.blockID);
|
|
this.metadataFlipList.add(Block.vine.blockID);
|
|
this.metadataFlipList.add(Block.anvil.blockID);
|
|
this.metadataFlipList.add(Block.chest.blockID);
|
|
this.metadataFlipList.add(Block.chestTrapped.blockID);
|
|
this.metadataFlipList.add(Block.hopperBlock.blockID);
|
|
this.metadataFlipList.add(Block.stairsNetherBrick.blockID);
|
|
this.metadataFlipList.add(Block.stairsCobblestone.blockID);
|
|
this.metadataFlipList.add(Block.stairsNetherBrick.blockID);
|
|
this.metadataFlipList.add(Block.stairsNetherQuartz.blockID);
|
|
this.metadataFlipList.add(Block.stairsSandStone.blockID);
|
|
|
|
this.metadataNextList.add(Block.redstoneRepeaterIdle.blockID);
|
|
this.metadataNextList.add(Block.redstoneRepeaterActive.blockID);
|
|
}
|
|
|
|
public void registerDungeonTypeTags()
|
|
{
|
|
tagList.add("hub");
|
|
tagList.add("trap");
|
|
tagList.add("simpleHall");
|
|
tagList.add("complexHall");
|
|
tagList.add("exit");
|
|
tagList.add("deadEnd");
|
|
tagList.add("maze");
|
|
}
|
|
|
|
public void registerBaseDungeons()
|
|
{
|
|
this.hubs.add(new DungeonGenerator(0, "/schematics/4WayBasicHall.schematic", false));
|
|
this.hubs.add(new DungeonGenerator(0, "/schematics/4WayBasicHall.schematic", false));
|
|
this.hubs.add(new DungeonGenerator(0, "/schematics/doorTotemRuins.schematic", true));
|
|
this.hubs.add(new DungeonGenerator(0, "/schematics/hallwayTrapRooms1.schematic", false));
|
|
this.hubs.add(new DungeonGenerator(0, "/schematics/longDoorHallway.schematic", false));
|
|
this.hubs.add(new DungeonGenerator(0, "/schematics/smallRotundaWithExit.schematic", false));
|
|
this.hubs.add(new DungeonGenerator(0, "/schematics/fortRuins.schematic", true));
|
|
this.hubs.add(new DungeonGenerator(0, "/schematics/4WayHallExit.schematic", false));
|
|
this.hubs.add(new DungeonGenerator(0, "/schematics/4WayHallExit.schematic", false));
|
|
|
|
this.simpleHalls.add(new DungeonGenerator(0, "/schematics/collapsedSingleTunnel1.schematic", false));
|
|
this.simpleHalls.add(new DungeonGenerator(0, "/schematics/singleStraightHall1.schematic", false));
|
|
this.simpleHalls.add(new DungeonGenerator(0, "/schematics/smallBranchWithExit.schematic", false));
|
|
this.simpleHalls.add(new DungeonGenerator(0, "/schematics/smallSimpleLeft.schematic", false));
|
|
this.simpleHalls.add(new DungeonGenerator(0, "/schematics/smallSimpleRight.schematic", false));
|
|
this.simpleHalls.add(new DungeonGenerator(0, "/schematics/simpleStairsUp.schematic", false));
|
|
this.simpleHalls.add(new DungeonGenerator(0, "/schematics/simpleStairsDown.schematic", false));
|
|
this.simpleHalls.add(new DungeonGenerator(0, "/schematics/simpleSmallT1.schematic", false));
|
|
|
|
this.complexHalls.add(new DungeonGenerator(0, "/schematics/tntPuzzleTrap.schematic", false));
|
|
this.complexHalls.add(new DungeonGenerator(0, "/schematics/brokenPillarsO.schematic", true));
|
|
this.complexHalls.add(new DungeonGenerator(0, "/schematics/buggyTopEntry1.schematic", true));
|
|
this.complexHalls.add(new DungeonGenerator(0, "/schematics/exitRuinsWithHiddenDoor.schematic", true));
|
|
this.complexHalls.add(new DungeonGenerator(0, "/schematics/hallwayHiddenTreasure.schematic", false));
|
|
this.complexHalls.add(new DungeonGenerator(0, "/schematics/mediumPillarStairs.schematic", true));
|
|
this.complexHalls.add(new DungeonGenerator(0, "/schematics/ruinsO.schematic", true));
|
|
this.complexHalls.add(new DungeonGenerator(0, "/schematics/pitStairs.schematic", true));
|
|
|
|
this.deadEnds.add(new DungeonGenerator(0, "/schematics/azersDungeonO.schematic", false));
|
|
this.deadEnds.add(new DungeonGenerator(0, "/schematics/diamondTowerTemple1.schematic", true));
|
|
this.deadEnds.add(new DungeonGenerator(0, "/schematics/fallingTrapO.schematic", false));
|
|
this.deadEnds.add(new DungeonGenerator(0, "/schematics/hiddenStaircaseO.schematic", true));
|
|
this.deadEnds.add(new DungeonGenerator(0, "/schematics/lavaTrapO.schematic", true));
|
|
this.deadEnds.add(new DungeonGenerator(0, "/schematics/randomTree.schematic", true));
|
|
this.deadEnds.add(new DungeonGenerator(0, "/schematics/smallHiddenTowerO.schematic", true));
|
|
this.deadEnds.add(new DungeonGenerator(0, "/schematics/smallSilverfishRoom.schematic", false));
|
|
this.deadEnds.add(new DungeonGenerator(0, "/schematics/tntTrapO.schematic", false));
|
|
this.deadEnds.add(new DungeonGenerator(0, "/schematics/smallDesert.schematic", true));
|
|
this.deadEnds.add(new DungeonGenerator(0, "/schematics/smallPond.schematic", true));
|
|
|
|
this.pistonTraps.add(new DungeonGenerator(0, "/schematics/fakeTNTTrap.schematic", false));
|
|
this.pistonTraps.add(new DungeonGenerator(0, "/schematics/hallwayPitFallTrap.schematic", false));
|
|
this.pistonTraps.add(new DungeonGenerator(0, "/schematics/hallwayPitFallTrap.schematic", false));
|
|
this.pistonTraps.add(new DungeonGenerator(0, "/schematics/pistonFallRuins.schematic", false));
|
|
this.pistonTraps.add(new DungeonGenerator(0, "/schematics/pistonFloorHall.schematic", false));
|
|
this.pistonTraps.add(new DungeonGenerator(0, "/schematics/pistonFloorHall.schematic", false));
|
|
this.pistonTraps.add(new DungeonGenerator(0, "/schematics/pistonSmasherHall.schematic", false));
|
|
this.pistonTraps.add(new DungeonGenerator(0, "/schematics/simpleDropHall.schematic", false));
|
|
this.pistonTraps.add(new DungeonGenerator(0, "/schematics/wallFallcomboPistonHall.schematic", false));
|
|
this.pistonTraps.add(new DungeonGenerator(0, "/schematics/wallFallcomboPistonHall.schematic", false));
|
|
this.pistonTraps.add(new DungeonGenerator(0, "/schematics/fallingTNThall.schematic", false));
|
|
this.pistonTraps.add(new DungeonGenerator(0, "/schematics/lavaPyramid.schematic", true));
|
|
|
|
this.mazes.add(new DungeonGenerator(0, "/schematics/smallMaze1.schematic", false));
|
|
this.mazes.add(new DungeonGenerator(0, "/schematics/smallMultilevelMaze.schematic", false));
|
|
|
|
this.exits.add(new DungeonGenerator(0, "/schematics/exitCube.schematic", true));
|
|
this.exits.add(new DungeonGenerator(0, "/schematics/lockingExitHall.schematic", false));
|
|
this.exits.add(new DungeonGenerator(0, "/schematics/smallExitPrison.schematic", true));
|
|
this.exits.add(new DungeonGenerator(0, "/schematics/lockingExitHall.schematic", false));
|
|
|
|
this.weightedDungeonGenList.addAll(this.simpleHalls);
|
|
this.weightedDungeonGenList.addAll(this.exits);
|
|
this.weightedDungeonGenList.addAll(this.pistonTraps);
|
|
this.weightedDungeonGenList.addAll(this.mazes);
|
|
this.weightedDungeonGenList.addAll(this.deadEnds);
|
|
this.weightedDungeonGenList.addAll(this.complexHalls);
|
|
this.weightedDungeonGenList.addAll(this.hubs);
|
|
|
|
for(DungeonGenerator data : this.weightedDungeonGenList)
|
|
{
|
|
if(!this.registeredDungeons.contains(data))
|
|
{
|
|
this.registeredDungeons.add(data);
|
|
}
|
|
}
|
|
}
|
|
|
|
public DungeonGenerator exportDungeon(World world, int xI, int yI, int zI, String file)
|
|
{
|
|
int xMin;
|
|
int yMin;
|
|
int zMin;
|
|
|
|
int xMax;
|
|
int yMax;
|
|
int zMax;
|
|
|
|
xMin=xMax=xI;
|
|
yMin=yMax=yI;
|
|
zMin=zMax=zI;
|
|
|
|
for(int count=0;count<50;count++)
|
|
{
|
|
|
|
if(world.getBlockId(xMin, yI, zI)!=properties.PermaFabricBlockID)
|
|
{
|
|
xMin--;
|
|
}
|
|
if(world.getBlockId(xI, yMin, zI)!=properties.PermaFabricBlockID)
|
|
{
|
|
yMin--;
|
|
}
|
|
if(world.getBlockId(xI, yI, zMin)!=properties.PermaFabricBlockID)
|
|
{
|
|
zMin--;
|
|
}
|
|
if(world.getBlockId(xMax, yI, zI)!=properties.PermaFabricBlockID)
|
|
{
|
|
xMax++;
|
|
}
|
|
if(world.getBlockId(xI, yMax, zI)!=properties.PermaFabricBlockID)
|
|
{
|
|
yMax++;
|
|
}
|
|
if(world.getBlockId(xI, yI, zMax)!=properties.PermaFabricBlockID)
|
|
{
|
|
zMax++;
|
|
}
|
|
}
|
|
|
|
short width =(short) (xMax-xMin);
|
|
short height= (short) (yMax-yMin);
|
|
short length= (short) (zMax-zMin);
|
|
|
|
//ArrayList<NBTTagCompound> tileEntities = new ArrayList<NBTTagCompound>();
|
|
ArrayList<Tag> tileEntites = new ArrayList<Tag>();
|
|
byte[] blocks = new byte[width * height * length];
|
|
byte[] addBlocks = null;
|
|
byte[] blockData = new byte[width * height * length];
|
|
|
|
for (int x = 0; x < width; ++x)
|
|
{
|
|
for (int y = 0; y < height; ++y)
|
|
{
|
|
for (int z = 0; z < length; ++z)
|
|
{
|
|
int index = y * width * length + z * width + x;
|
|
int blockID = world.getBlockId(x+xMin, y+yMin, z+zMin);
|
|
int meta= world.getBlockMetadata(x+xMin, y+yMin, z+zMin);
|
|
|
|
if(blockID==properties.DimensionalDoorID)
|
|
{
|
|
blockID=Block.doorIron.blockID;
|
|
}
|
|
if(blockID==properties.WarpDoorID)
|
|
{
|
|
blockID=Block.doorWood.blockID;
|
|
|
|
}
|
|
|
|
// Save 4096 IDs in an AddBlocks section
|
|
if (blockID > 255)
|
|
{
|
|
if (addBlocks == null)
|
|
{ // Lazily create section
|
|
addBlocks = new byte[(blocks.length >> 1) + 1];
|
|
}
|
|
|
|
addBlocks[index >> 1] = (byte) (((index & 1) == 0) ?
|
|
addBlocks[index >> 1] & 0xF0 | (blockID >> 8) & 0xF
|
|
: addBlocks[index >> 1] & 0xF | ((blockID >> 8) & 0xF) << 4);
|
|
}
|
|
|
|
blocks[index] = (byte) blockID;
|
|
blockData[index] = (byte) meta;
|
|
|
|
if (Block.blocksList[blockID] instanceof BlockContainer)
|
|
{
|
|
//TODO fix this
|
|
/**
|
|
TileEntity tileEntityBlock = world.getBlockTileEntity(x+xMin, y+yMin, z+zMin);
|
|
NBTTagCompound tag = new NBTTagCompound();
|
|
tileEntityBlock.writeToNBT(tag);
|
|
|
|
CompoundTag tagC = new CompoundTag("TileEntity",Map.class.cast(tag.getTags()));
|
|
|
|
|
|
|
|
// Get the list of key/values from the block
|
|
|
|
if (tagC != null)
|
|
{
|
|
tileEntites.add(tagC);
|
|
}
|
|
**/
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
*
|
|
* this.nbtdata.setShort("Width", width);
|
|
this.nbtdata.setShort("Height", height);
|
|
this.nbtdata.setShort("Length", length);
|
|
|
|
this.nbtdata.setByteArray("Blocks", blocks);
|
|
this.nbtdata.setByteArray("Data", blockData);
|
|
*/
|
|
|
|
HashMap<String, Tag> schematic = new HashMap<String, Tag>();
|
|
|
|
schematic.put("Blocks", new ByteArrayTag("Blocks", blocks));
|
|
schematic.put("Data", new ByteArrayTag("Data", blockData));
|
|
|
|
schematic.put("Width", new ShortTag("Width", (short) width));
|
|
schematic.put("Length", new ShortTag("Length", (short) length));
|
|
schematic.put("Height", new ShortTag("Height", (short) height));
|
|
schematic.put("TileEntites", new ListTag("TileEntities", CompoundTag.class,tileEntites));
|
|
|
|
if (addBlocks != null)
|
|
{
|
|
schematic.put("AddBlocks", new ByteArrayTag("AddBlocks", addBlocks));
|
|
}
|
|
|
|
CompoundTag schematicTag = new CompoundTag("Schematic", schematic);
|
|
try
|
|
{
|
|
NBTOutputStream stream = new NBTOutputStream(new FileOutputStream(file));
|
|
stream.writeTag(schematicTag);
|
|
stream.close();
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
e.printStackTrace();
|
|
}
|
|
this.registerCustomDungeon(new File(file));
|
|
|
|
return new DungeonGenerator(0, file, true);
|
|
}
|
|
|
|
public void generateDungeonlink(LinkData incoming)
|
|
{
|
|
//DungeonGenerator dungeon = mod_pocketDim.registeredDungeons.get(new Random().nextInt(mod_pocketDim.registeredDungeons.size()));
|
|
DungeonGenerator dungeon;
|
|
int depth = dimHelper.instance.getDimDepth(incoming.locDimID)+2;
|
|
|
|
int depthWeight = rand.nextInt(depth)+rand.nextInt(depth)-2;
|
|
|
|
depth=depth-2;
|
|
// DungeonGenerator
|
|
boolean flag = true;
|
|
int count=10;
|
|
try
|
|
{
|
|
if(dimHelper.dimList.get(incoming.destDimID)!=null&&dimHelper.dimList.get(incoming.destDimID).dungeonGenerator!=null)
|
|
{
|
|
mod_pocketDim.loader.init(incoming);
|
|
dimHelper.dimList.get(incoming.destDimID).dungeonGenerator=dimHelper.dimList.get(incoming.destDimID).dungeonGenerator;
|
|
return;
|
|
}
|
|
if(incoming.destYCoord>15)
|
|
{
|
|
do
|
|
{
|
|
count--;
|
|
flag = true;
|
|
dungeon = this.weightedDungeonGenList.get(rand.nextInt(weightedDungeonGenList.size()));
|
|
|
|
if(depth<=1)
|
|
{
|
|
if(rand.nextBoolean())
|
|
{
|
|
dungeon = complexHalls.get(rand.nextInt(complexHalls.size()));
|
|
|
|
}
|
|
else if(rand.nextBoolean())
|
|
{
|
|
dungeon = hubs.get(rand.nextInt(hubs.size()));
|
|
|
|
}
|
|
else if(rand.nextBoolean())
|
|
{
|
|
dungeon = hubs.get(rand.nextInt(hubs.size()));
|
|
|
|
}
|
|
else if(deadEnds.contains(dungeon)||exits.contains(dungeon))
|
|
{
|
|
flag=false;
|
|
}
|
|
}
|
|
else if (depth<=3&&(deadEnds.contains(dungeon)||exits.contains(dungeon)||rand.nextBoolean()))
|
|
{
|
|
if(rand.nextBoolean())
|
|
{
|
|
dungeon = hubs.get(rand.nextInt(hubs.size()));
|
|
|
|
}
|
|
else if(rand.nextBoolean())
|
|
{
|
|
dungeon = mazes.get(rand.nextInt(mazes.size()));
|
|
}
|
|
else if(rand.nextBoolean())
|
|
{
|
|
dungeon = pistonTraps.get(rand.nextInt(pistonTraps.size()));
|
|
|
|
}
|
|
else
|
|
{
|
|
flag=false;
|
|
}
|
|
}
|
|
else if(rand.nextInt(3)==0&&!complexHalls.contains(dungeon))
|
|
{
|
|
if(rand.nextInt(3)==0)
|
|
{
|
|
dungeon = simpleHalls.get(rand.nextInt(simpleHalls.size()));
|
|
}
|
|
else if(rand.nextBoolean())
|
|
{
|
|
dungeon = pistonTraps.get(rand.nextInt(pistonTraps.size()));
|
|
|
|
}
|
|
else if(depth<4)
|
|
{
|
|
dungeon = hubs.get(rand.nextInt(hubs.size()));
|
|
|
|
}
|
|
}
|
|
else if(depthWeight-depthWeight/2>depth-4&&(deadEnds.contains(dungeon)||exits.contains(dungeon)))
|
|
{
|
|
if(rand.nextBoolean())
|
|
{
|
|
dungeon = simpleHalls.get(rand.nextInt(simpleHalls.size()));
|
|
}
|
|
else if(rand.nextBoolean())
|
|
{
|
|
dungeon = complexHalls.get(rand.nextInt(complexHalls.size()));
|
|
}
|
|
else if(rand.nextBoolean())
|
|
{
|
|
dungeon = pistonTraps.get(rand.nextInt(pistonTraps.size()));
|
|
|
|
}
|
|
else
|
|
{
|
|
flag=false;
|
|
}
|
|
}
|
|
else if(depthWeight>7&&hubs.contains(dungeon))
|
|
{
|
|
if(rand.nextInt(12)+5<depthWeight)
|
|
{
|
|
if(rand.nextBoolean())
|
|
{
|
|
dungeon = exits.get(rand.nextInt(exits.size()));
|
|
}
|
|
else if(rand.nextBoolean())
|
|
{
|
|
dungeon = deadEnds.get(rand.nextInt(deadEnds.size()));
|
|
}
|
|
else
|
|
{
|
|
dungeon = pistonTraps.get(rand.nextInt(pistonTraps.size()));
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
flag = false;
|
|
}
|
|
}
|
|
else if(depth>10&&hubs.contains(dungeon))
|
|
{
|
|
flag = false;
|
|
}
|
|
}
|
|
while (!flag && count > 0);
|
|
}
|
|
else
|
|
{
|
|
dungeon = defaultUp;
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
if (weightedDungeonGenList.size() > 0)
|
|
{
|
|
dungeon = weightedDungeonGenList.get(rand.nextInt(weightedDungeonGenList.size()));
|
|
}
|
|
else
|
|
{
|
|
e.printStackTrace();
|
|
return;
|
|
}
|
|
}
|
|
dimHelper.dimList.get(incoming.destDimID).dungeonGenerator = dungeon;
|
|
}
|
|
} |