Improved DungeonHelper.registerCustomDungeon()
Changed the function to use a Hashtable mapping dungeon types to their respective lists so that it wouldn't be necessary to hardcode a condition for each type. The code is much shorter now and we can add new types with ease. The next stage will be to remove weightedDungeonGetList, if possible, so that we don't have to construct a list with duplicates just to have weights. The loop that repeatedly inserted dungeons into that list has been removed anyway, but it shouldn't affect anything since custom dungeon integration was broken and weights were being ignored.
This commit is contained in:
@@ -4,6 +4,8 @@ import java.io.File;
|
|||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Hashtable;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
@@ -25,11 +27,32 @@ public class DungeonHelper
|
|||||||
{
|
{
|
||||||
private static DDProperties properties = null;
|
private static DDProperties properties = null;
|
||||||
|
|
||||||
private Random rand = new Random();
|
public static final Pattern NamePattern = Pattern.compile("[A-Za-z0-9_]+");
|
||||||
|
|
||||||
private static final String SCHEMATIC_FILE_EXTENSION = ".schematic";
|
private static final String SCHEMATIC_FILE_EXTENSION = ".schematic";
|
||||||
private static final int DEFAULT_DUNGEON_WEIGHT = 100;
|
private static final int DEFAULT_DUNGEON_WEIGHT = 100;
|
||||||
|
|
||||||
public static Pattern NamePattern = Pattern.compile("[A-Za-z0-9_]+");
|
private static final String HUB_DUNGEON_TYPE = "Hub";
|
||||||
|
private static final String TRAP_DUNGEON_TYPE = "Trap";
|
||||||
|
private static final String SIMPLE_HALL_DUNGEON_TYPE = "SimpleHall";
|
||||||
|
private static final String COMPLEX_HALL_DUNGEON_TYPE = "ComplexHall";
|
||||||
|
private static final String EXIT_DUNGEON_TYPE = "Exit";
|
||||||
|
private static final String DEAD_END_DUNGEON_TYPE = "DeadEnd";
|
||||||
|
private static final String MAZE_DUNGEON_TYPE = "Maze";
|
||||||
|
|
||||||
|
//The list of dungeon types will be kept as an array for now. If we allow new
|
||||||
|
//dungeon types in the future, then this can be changed to an ArrayList.
|
||||||
|
private static final String[] DUNGEON_TYPES = new String[] {
|
||||||
|
HUB_DUNGEON_TYPE,
|
||||||
|
TRAP_DUNGEON_TYPE,
|
||||||
|
SIMPLE_HALL_DUNGEON_TYPE,
|
||||||
|
COMPLEX_HALL_DUNGEON_TYPE,
|
||||||
|
EXIT_DUNGEON_TYPE,
|
||||||
|
DEAD_END_DUNGEON_TYPE,
|
||||||
|
MAZE_DUNGEON_TYPE
|
||||||
|
};
|
||||||
|
|
||||||
|
private Random rand = new Random();
|
||||||
|
|
||||||
public HashMap<Integer, LinkData> customDungeonStatus = new HashMap<Integer, LinkData>();
|
public HashMap<Integer, LinkData> customDungeonStatus = new HashMap<Integer, LinkData>();
|
||||||
|
|
||||||
@@ -45,15 +68,33 @@ public class DungeonHelper
|
|||||||
private ArrayList<DungeonGenerator> pistonTraps = new ArrayList<DungeonGenerator>();
|
private ArrayList<DungeonGenerator> pistonTraps = new ArrayList<DungeonGenerator>();
|
||||||
private ArrayList<DungeonGenerator> exits = 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> metadataFlipList = new ArrayList<Integer>();
|
||||||
public ArrayList<Integer> metadataNextList = new ArrayList<Integer>();
|
public ArrayList<Integer> metadataNextList = new ArrayList<Integer>();
|
||||||
|
|
||||||
public DungeonGenerator defaultUp = new DungeonGenerator(0, "/schematic/simpleStairsUp.schematic", true);
|
public DungeonGenerator defaultUp = new DungeonGenerator(0, "/schematic/simpleStairsUp.schematic", true);
|
||||||
|
private HashSet<String> dungeonTypeChecker;
|
||||||
|
private Hashtable<String, ArrayList<DungeonGenerator>> dungeonTypeMapping;
|
||||||
|
|
||||||
public DungeonHelper()
|
public DungeonHelper()
|
||||||
{
|
{
|
||||||
|
//Load the dungeon type checker with the list of all types in lowercase.
|
||||||
|
//Capitalization matters for matching in a hash set.
|
||||||
|
dungeonTypeChecker = new HashSet<String>();
|
||||||
|
for (String dungeonType : DUNGEON_TYPES)
|
||||||
|
{
|
||||||
|
dungeonTypeChecker.add(dungeonType.toLowerCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
//Add all the basic dungeon types to dungeonTypeMapping
|
||||||
|
dungeonTypeMapping.put(SIMPLE_HALL_DUNGEON_TYPE, simpleHalls);
|
||||||
|
dungeonTypeMapping.put(COMPLEX_HALL_DUNGEON_TYPE, complexHalls);
|
||||||
|
dungeonTypeMapping.put(HUB_DUNGEON_TYPE, hubs);
|
||||||
|
dungeonTypeMapping.put(EXIT_DUNGEON_TYPE, exits);
|
||||||
|
dungeonTypeMapping.put(DEAD_END_DUNGEON_TYPE, deadEnds);
|
||||||
|
dungeonTypeMapping.put(MAZE_DUNGEON_TYPE, mazes);
|
||||||
|
dungeonTypeMapping.put(TRAP_DUNGEON_TYPE, pistonTraps);
|
||||||
|
|
||||||
|
//Load our reference to the DDProperties singleton
|
||||||
if (properties == null)
|
if (properties == null)
|
||||||
properties = DDProperties.instance();
|
properties = DDProperties.instance();
|
||||||
}
|
}
|
||||||
@@ -66,8 +107,8 @@ public class DungeonHelper
|
|||||||
if (dungeonData.length < 3 || dungeonData.length > 4)
|
if (dungeonData.length < 3 || dungeonData.length > 4)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
//Check if the category is valid
|
//Check if the dungeon type is valid
|
||||||
if (!tagList.contains(dungeonData[0]))
|
if (!dungeonTypeChecker.contains(dungeonData[0].toLowerCase()))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
//Check if the name is valid
|
//Check if the name is valid
|
||||||
@@ -99,6 +140,7 @@ public class DungeonHelper
|
|||||||
public void registerCustomDungeon(File schematicFile)
|
public void registerCustomDungeon(File schematicFile)
|
||||||
{
|
{
|
||||||
String name = schematicFile.getName();
|
String name = schematicFile.getName();
|
||||||
|
String path = schematicFile.getAbsolutePath();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (name.endsWith(SCHEMATIC_FILE_EXTENSION) && validateSchematicName(name))
|
if (name.endsWith(SCHEMATIC_FILE_EXTENSION) && validateSchematicName(name))
|
||||||
@@ -106,58 +148,22 @@ public class DungeonHelper
|
|||||||
//Strip off the file extension while splitting the file name
|
//Strip off the file extension while splitting the file name
|
||||||
String[] dungeonData = name.substring(0, name.length() - SCHEMATIC_FILE_EXTENSION.length()).split("_");
|
String[] dungeonData = name.substring(0, name.length() - SCHEMATIC_FILE_EXTENSION.length()).split("_");
|
||||||
|
|
||||||
String path = schematicFile.getAbsolutePath();
|
String dungeonType = dungeonData[0].toLowerCase();
|
||||||
boolean open = dungeonData[2].equals("open");
|
boolean open = dungeonData[2].equals("open");
|
||||||
int weight = (dungeonData.length == 4) ? Integer.parseInt(dungeonData[3]) : DEFAULT_DUNGEON_WEIGHT;
|
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)
|
//Add this custom dungeon to the list corresponding to its type
|
||||||
/*while(count<weight)
|
DungeonGenerator generator = new DungeonGenerator(weight, path, open);
|
||||||
{
|
|
||||||
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));
|
|
||||||
|
|
||||||
}
|
dungeonTypeMapping.get(dungeonType).add(generator);
|
||||||
else if(name[0].equals("complexHall"))
|
weightedDungeonGenList.add(generator);
|
||||||
{
|
registeredDungeons.add(generator);
|
||||||
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);
|
System.out.println("Imported " + name);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
System.out.println("Could not parse dungeon filename, not adding dungeon to generation lists");
|
System.out.println("Could not parse dungeon filename, not adding dungeon to generation lists");
|
||||||
customDungeons.add(new DungeonGenerator(0, schematicFile.getAbsolutePath(), true));
|
customDungeons.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, path, true));
|
||||||
System.out.println("Imported " + name);
|
System.out.println("Imported " + name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -220,17 +226,6 @@ public class DungeonHelper
|
|||||||
this.metadataNextList.add(Block.redstoneRepeaterActive.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()
|
public void registerBaseDungeons()
|
||||||
{
|
{
|
||||||
this.hubs.add(new DungeonGenerator(0, "/schematics/4WayBasicHall.schematic", false));
|
this.hubs.add(new DungeonGenerator(0, "/schematics/4WayBasicHall.schematic", false));
|
||||||
|
|||||||
@@ -182,7 +182,6 @@ public class mod_pocketDim
|
|||||||
|
|
||||||
dungeonHelper.importCustomDungeons(properties.CustomSchematicDirectory);
|
dungeonHelper.importCustomDungeons(properties.CustomSchematicDirectory);
|
||||||
dungeonHelper.registerBaseDungeons();
|
dungeonHelper.registerBaseDungeons();
|
||||||
dungeonHelper.registerDungeonTypeTags();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Init
|
@Init
|
||||||
|
|||||||
Reference in New Issue
Block a user