Overhauled Schematic Importing and Exporting #56

Merged
SenseiKiwi merged 8 commits from master into master 2013-07-30 22:29:38 +00:00
9 changed files with 71 additions and 81 deletions
Showing only changes of commit 766336a259 - Show all commits

View File

@@ -101,4 +101,10 @@ public class Point3D implements Serializable {
} }
return hash; return hash;
} }
@Override
public String toString()
{
return "(" + x + ", " + "y" + ", " + z + ")";
}
} }

View File

@@ -81,25 +81,6 @@ public class CommandCreateDungeonRift extends DDCommandBase
link = dimHelper.instance.createPocket(link, true, true); link = dimHelper.instance.createPocket(link, true, true);
dimHelper.dimList.get(link.destDimID).dungeonGenerator = result; dimHelper.dimList.get(link.destDimID).dungeonGenerator = result;
sender.sendChatToPlayer("Created a rift to \"" + getSchematicName(result) + "\" dungeon (Dimension ID = " + link.destDimID + ")."); sender.sendChatToPlayer("Created a rift to \"" + getSchematicName(result) + "\" dungeon (Dimension ID = " + link.destDimID + ").");
/*try {
DungeonSchematic dungeon;
if ((new File(result.schematicPath)).exists())
{
dungeon = DungeonSchematic.readFromFile(result.schematicPath);
}
else
{
dungeon = DungeonSchematic.readFromResource(result.schematicPath);
}
dungeon.applyImportFilters(DDProperties.instance());
dungeon.copyToWorld(sender.worldObj, x, y, z);
} catch (InvalidSchematicException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}*/
} }
else else
{ {

View File

@@ -46,7 +46,7 @@ public class DungeonSchematic extends Schematic {
private static final short[] MOD_BLOCK_FILTER_EXCEPTIONS = new short[] { private static final short[] MOD_BLOCK_FILTER_EXCEPTIONS = new short[] {
STANDARD_FABRIC_OF_REALITY_ID, STANDARD_FABRIC_OF_REALITY_ID,
STANDARD_ETERNAL_FABRIC_ID//, STANDARD_ETERNAL_FABRIC_ID
//STANDARD_WARP_DOOR_ID, //STANDARD_WARP_DOOR_ID,
//STANDARD_DIMENSIONAL_DOOR_ID //STANDARD_DIMENSIONAL_DOOR_ID
}; };
@@ -108,12 +108,6 @@ public class DungeonSchematic extends Schematic {
dimensionalDoorLocations = finder.getDimensionalDoorLocations(); dimensionalDoorLocations = finder.getDimensionalDoorLocations();
monolithSpawnLocations = finder.getMonolithSpawnLocations(); monolithSpawnLocations = finder.getMonolithSpawnLocations();
//TODO: Debug prints below. Please remove them before the next release!
System.out.println(entranceDoorLocation != null ? "Entrance was found" : "Entrance was not found");
System.out.printf("There are %d exit doors in this room\n", exitDoorLocations.size());
System.out.printf("There are %d dim doors in this room\n", dimensionalDoorLocations.size());
System.out.printf("There are %d monolith spawn points in this room\n", monolithSpawnLocations.size());
//Filter out mod blocks except some of our own //Filter out mod blocks except some of our own
CompoundFilter standardizer = new CompoundFilter(); CompoundFilter standardizer = new CompoundFilter();
standardizer.addFilter(new ModBlockFilter(MAX_VANILLA_BLOCK_ID, MOD_BLOCK_FILTER_EXCEPTIONS, standardizer.addFilter(new ModBlockFilter(MAX_VANILLA_BLOCK_ID, MOD_BLOCK_FILTER_EXCEPTIONS,

View File

@@ -70,16 +70,22 @@ public class SpecialBlockFinder extends SchematicFilter {
if (blocks[index] == monolithSpawnMarkerID) if (blocks[index] == monolithSpawnMarkerID)
{ {
monolithSpawnLocations.add(schematic.calculatePoint(index)); monolithSpawnLocations.add(schematic.calculatePoint(index));
return true;
} }
else if (blocks[index] == dimensionalDoorID) if (blocks[index] == dimensionalDoorID)
{ {
indexBelow = schematic.calculateIndexBelow(index); indexBelow = schematic.calculateIndexBelow(index);
if (indexBelow >= 0 && blocks[indexBelow] == dimensionalDoorID) if (indexBelow >= 0 && blocks[indexBelow] == dimensionalDoorID)
{ {
dimensionalDoorLocations.add(schematic.calculatePoint(index)); dimensionalDoorLocations.add(schematic.calculatePoint(index));
return true;
}
else
{
return false;
} }
} }
else if (blocks[index] == warpDoorID) if (blocks[index] == warpDoorID)
{ {
indexBelow = schematic.calculateIndexBelow(index); indexBelow = schematic.calculateIndexBelow(index);
if (indexBelow >= 0 && blocks[indexBelow] == warpDoorID) if (indexBelow >= 0 && blocks[indexBelow] == warpDoorID)
@@ -88,15 +94,17 @@ public class SpecialBlockFinder extends SchematicFilter {
if (indexDoubleBelow >= 0 && blocks[indexDoubleBelow] == exitMarkerID) if (indexDoubleBelow >= 0 && blocks[indexDoubleBelow] == exitMarkerID)
{ {
exitDoorLocations.add(schematic.calculatePoint(index)); exitDoorLocations.add(schematic.calculatePoint(index));
return true;
} }
else if (entranceDoorLocation == null) else if (entranceDoorLocation == null)
{ {
entranceDoorLocation = schematic.calculatePoint(index); entranceDoorLocation = schematic.calculatePoint(index);
entranceOrientation = (metadata[indexBelow] & 3); entranceOrientation = (metadata[indexBelow] & 3);
return true;
} }
} }
} }
return true; return false;
} }
@Override @Override

View File

@@ -9,7 +9,6 @@ import java.util.HashSet;
import java.util.Random; import java.util.Random;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import net.minecraft.block.Block;
import net.minecraft.util.WeightedRandom; import net.minecraft.util.WeightedRandom;
import net.minecraft.world.World; import net.minecraft.world.World;
import StevenDimDoors.mod_pocketDim.DDProperties; import StevenDimDoors.mod_pocketDim.DDProperties;
@@ -69,8 +68,6 @@ 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<Integer> metadataFlipList = new ArrayList<Integer>();
public ArrayList<Integer> metadataNextList = new ArrayList<Integer>();
public DungeonGenerator defaultBreak = new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/somethingBroke.schematic", true); public DungeonGenerator defaultBreak = new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/somethingBroke.schematic", true);
public DungeonGenerator defaultUp = new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/simpleStairsUp.schematic", true); public DungeonGenerator defaultUp = new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/simpleStairsUp.schematic", true);
@@ -112,7 +109,6 @@ public class DungeonHelper
{ {
copyfile.copyFile("/mods/DimDoors/text/How_to_add_dungeons.txt", file.getAbsolutePath() + "/How_to_add_dungeons.txt"); copyfile.copyFile("/mods/DimDoors/text/How_to_add_dungeons.txt", file.getAbsolutePath() + "/How_to_add_dungeons.txt");
} }
registerFlipBlocks();
importCustomDungeons(properties.CustomSchematicDirectory); importCustomDungeons(properties.CustomSchematicDirectory);
registerBaseDungeons(); registerBaseDungeons();
} }
@@ -257,44 +253,6 @@ public class DungeonHelper
} }
} }
public void registerFlipBlocks()
{
metadataFlipList.add(Block.dispenser.blockID);
metadataFlipList.add(Block.stairsStoneBrick.blockID);
metadataFlipList.add(Block.lever.blockID);
metadataFlipList.add(Block.stoneButton.blockID);
metadataFlipList.add(Block.redstoneRepeaterIdle.blockID);
metadataFlipList.add(Block.redstoneRepeaterActive.blockID);
metadataFlipList.add(Block.tripWireSource.blockID);
metadataFlipList.add(Block.torchWood.blockID);
metadataFlipList.add(Block.torchRedstoneIdle.blockID);
metadataFlipList.add(Block.torchRedstoneActive.blockID);
metadataFlipList.add(Block.doorIron.blockID);
metadataFlipList.add(Block.doorWood.blockID);
metadataFlipList.add(Block.pistonBase.blockID);
metadataFlipList.add(Block.pistonStickyBase.blockID);
metadataFlipList.add(Block.pistonExtension.blockID);
metadataFlipList.add(Block.redstoneComparatorIdle.blockID);
metadataFlipList.add(Block.redstoneComparatorActive.blockID);
metadataFlipList.add(Block.signPost.blockID);
metadataFlipList.add(Block.signWall.blockID);
metadataFlipList.add(Block.skull.blockID);
metadataFlipList.add(Block.ladder.blockID);
metadataFlipList.add(Block.vine.blockID);
metadataFlipList.add(Block.anvil.blockID);
metadataFlipList.add(Block.chest.blockID);
metadataFlipList.add(Block.chestTrapped.blockID);
metadataFlipList.add(Block.hopperBlock.blockID);
metadataFlipList.add(Block.stairsNetherBrick.blockID);
metadataFlipList.add(Block.stairsCobblestone.blockID);
metadataFlipList.add(Block.stairsNetherBrick.blockID);
metadataFlipList.add(Block.stairsNetherQuartz.blockID);
metadataFlipList.add(Block.stairsSandStone.blockID);
metadataNextList.add(Block.redstoneRepeaterIdle.blockID);
metadataNextList.add(Block.redstoneRepeaterActive.blockID);
}
public void registerBaseDungeons() public void registerBaseDungeons()
{ {
hubs.add(new DungeonGenerator(2 * DEFAULT_DUNGEON_WEIGHT, "/schematics/4WayBasicHall.schematic", false)); hubs.add(new DungeonGenerator(2 * DEFAULT_DUNGEON_WEIGHT, "/schematics/4WayBasicHall.schematic", false));

View File

@@ -1,12 +1,15 @@
package StevenDimDoors.mod_pocketDim.schematic; package StevenDimDoors.mod_pocketDim.schematic;
import java.util.ArrayList;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockComparator; import net.minecraft.block.BlockComparator;
import net.minecraft.block.BlockDoor; import net.minecraft.block.BlockDoor;
import net.minecraft.block.BlockRedstoneRepeater; import net.minecraft.block.BlockRedstoneRepeater;
import net.minecraft.block.BlockStairs; import net.minecraft.block.BlockStairs;
import StevenDimDoors.mod_pocketDim.Point3D; import StevenDimDoors.mod_pocketDim.Point3D;
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper; import StevenDimDoors.mod_pocketDim.mod_pocketDim;
import StevenDimDoors.mod_pocketDim.blocks.dimDoor;
public class BlockRotator public class BlockRotator
{ {
@@ -18,16 +21,55 @@ public class BlockRotator
private final static int WEST_DOOR_METADATA = 2; private final static int WEST_DOOR_METADATA = 2;
public final static int NORTH_DOOR_METADATA = 3; public final static int NORTH_DOOR_METADATA = 3;
private final static ArrayList<Integer> metadataFlipList = new ArrayList<Integer>();
static
{
metadataFlipList.add(Block.dispenser.blockID);
metadataFlipList.add(Block.stairsStoneBrick.blockID);
metadataFlipList.add(Block.lever.blockID);
metadataFlipList.add(Block.stoneButton.blockID);
metadataFlipList.add(Block.redstoneRepeaterIdle.blockID);
metadataFlipList.add(Block.redstoneRepeaterActive.blockID);
metadataFlipList.add(Block.tripWireSource.blockID);
metadataFlipList.add(Block.torchWood.blockID);
metadataFlipList.add(Block.torchRedstoneIdle.blockID);
metadataFlipList.add(Block.torchRedstoneActive.blockID);
metadataFlipList.add(Block.doorIron.blockID);
metadataFlipList.add(Block.doorWood.blockID);
metadataFlipList.add(Block.pistonBase.blockID);
metadataFlipList.add(Block.pistonStickyBase.blockID);
metadataFlipList.add(Block.pistonExtension.blockID);
metadataFlipList.add(Block.redstoneComparatorIdle.blockID);
metadataFlipList.add(Block.redstoneComparatorActive.blockID);
metadataFlipList.add(Block.signPost.blockID);
metadataFlipList.add(Block.signWall.blockID);
metadataFlipList.add(Block.skull.blockID);
metadataFlipList.add(Block.ladder.blockID);
metadataFlipList.add(Block.vine.blockID);
metadataFlipList.add(Block.anvil.blockID);
metadataFlipList.add(Block.chest.blockID);
metadataFlipList.add(Block.chestTrapped.blockID);
metadataFlipList.add(Block.hopperBlock.blockID);
metadataFlipList.add(Block.stairsNetherBrick.blockID);
metadataFlipList.add(Block.stairsCobblestone.blockID);
metadataFlipList.add(Block.stairsNetherBrick.blockID);
metadataFlipList.add(Block.stairsNetherQuartz.blockID);
metadataFlipList.add(Block.stairsSandStone.blockID);
metadataFlipList.add(mod_pocketDim.dimDoor.blockID);
metadataFlipList.add(mod_pocketDim.ExitDoor.blockID);
}
public static int transformMetadata(int metadata, int orientation, int blockID) public static int transformMetadata(int metadata, int orientation, int blockID)
{ {
//TODO: Replace this horrible function with something prettier. We promise we will for the next version, //TODO: Replace this horrible function with something prettier. We promise we will for the next version,
//after switching to MC 1.6. //after switching to MC 1.6. PADRE, PLEASE FORGIVE ME.
//Hax to fix negative orientations //Hax to fix negative orientations
orientation += 1 << 16; orientation += 1 << 16;
orientation %= 4; orientation %= 4;
if (DungeonHelper.instance().metadataFlipList.contains(blockID)) if (metadataFlipList.contains(blockID))
{ {
switch (orientation) switch (orientation)
{ {
@@ -183,7 +225,7 @@ public class BlockRotator
break; break;
} }
} }
else if(Block.blocksList[blockID] instanceof BlockRedstoneRepeater ||Block.blocksList[blockID] instanceof BlockDoor ||blockID== Block.tripWireSource.blockID||Block.blocksList[blockID] instanceof BlockComparator) else if(Block.blocksList[blockID] instanceof BlockRedstoneRepeater || Block.blocksList[blockID] instanceof BlockDoor || Block.blocksList[blockID] instanceof dimDoor || blockID== Block.tripWireSource.blockID || Block.blocksList[blockID] instanceof BlockComparator)
{ {
switch (metadata) switch (metadata)
{ {
@@ -402,7 +444,7 @@ public class BlockRotator
} }
else if(Block.blocksList[blockID] instanceof BlockRedstoneRepeater ||Block.blocksList[blockID] instanceof BlockDoor ||blockID== Block.tripWireSource.blockID||Block.blocksList[blockID] instanceof BlockComparator) else if(Block.blocksList[blockID] instanceof BlockRedstoneRepeater ||Block.blocksList[blockID] instanceof BlockDoor || Block.blocksList[blockID] instanceof dimDoor || blockID== Block.tripWireSource.blockID||Block.blocksList[blockID] instanceof BlockComparator)
{ {
switch (metadata) switch (metadata)
{ {
@@ -629,7 +671,7 @@ public class BlockRotator
break; break;
} }
} }
else if(Block.blocksList[blockID] instanceof BlockRedstoneRepeater ||Block.blocksList[blockID] instanceof BlockDoor ||blockID== Block.tripWireSource.blockID||Block.blocksList[blockID] instanceof BlockComparator) else if(Block.blocksList[blockID] instanceof BlockRedstoneRepeater ||Block.blocksList[blockID] instanceof BlockDoor || Block.blocksList[blockID] instanceof dimDoor || blockID== Block.tripWireSource.blockID||Block.blocksList[blockID] instanceof BlockComparator)
{ {
switch (metadata) switch (metadata)
{ {

View File

@@ -48,11 +48,11 @@ public class CompoundFilter extends SchematicFilter {
{ {
for (SchematicFilter filter : filters) for (SchematicFilter filter : filters)
{ {
if (!filter.applyToBlock(index, blocks, metadata)) if (filter.applyToBlock(index, blocks, metadata))
{ {
return !filter.terminates(); return filter.terminates();
} }
} }
return true; return false;
} }
} }

View File

@@ -1,5 +1,6 @@
package StevenDimDoors.mod_pocketDim.schematic; package StevenDimDoors.mod_pocketDim.schematic;
public class ReplacementFilter extends SchematicFilter { public class ReplacementFilter extends SchematicFilter {
private short targetBlock; private short targetBlock;

View File

@@ -21,7 +21,7 @@ public class SchematicFilter {
for (int index = 0; index < blocks.length; index++) for (int index = 0; index < blocks.length; index++)
{ {
if (!applyToBlock(index, blocks, metadata) && terminates()) if (applyToBlock(index, blocks, metadata) && terminates())
return false; return false;
} }