Overhauled Schematic Importing and Exporting #56
@@ -101,4 +101,10 @@ public class Point3D implements Serializable {
|
|||||||
}
|
}
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return "(" + x + ", " + "y" + ", " + z + ")";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
@@ -17,17 +20,56 @@ public class BlockRotator
|
|||||||
private final static int SOUTH_DOOR_METADATA = 1;
|
private final static int SOUTH_DOOR_METADATA = 1;
|
||||||
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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user