finished dungeon export basic implementation
This commit is contained in:
parent
40551fe013
commit
fa15c13d37
7 changed files with 196 additions and 63 deletions
|
@ -757,7 +757,7 @@ public class SchematicLoader
|
||||||
int blockMetaData=loader.blockData[index];
|
int blockMetaData=loader.blockData[index];
|
||||||
NBTTagList tileEntity = loader.tileentities;
|
NBTTagList tileEntity = loader.tileentities;
|
||||||
HashMap tileEntityMap= new HashMap();
|
HashMap tileEntityMap= new HashMap();
|
||||||
int size = tileEntity.tagCount();
|
//int size = tileEntity.tagCount();
|
||||||
|
|
||||||
|
|
||||||
if(blockToReplace==Block.doorIron.blockID)
|
if(blockToReplace==Block.doorIron.blockID)
|
||||||
|
|
|
@ -68,12 +68,28 @@ public class CommandAddDungeonRift extends CommandBase
|
||||||
this.getCommandSenderAsPlayer(var1).sendChatToPlayer(dungeonName);
|
this.getCommandSenderAsPlayer(var1).sendChatToPlayer(dungeonName);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(DungeonGenerator dungeonGen : mod_pocketDim.customDungeons)
|
||||||
|
{
|
||||||
|
String dungeonName =dungeonGen.schematicPath;
|
||||||
|
if(dungeonName.contains("DimDoors_Custom_schematics"))
|
||||||
|
{
|
||||||
|
dungeonName= dungeonName.substring(dungeonName.indexOf("DimDoors_Custom_schematics")+26);
|
||||||
|
}
|
||||||
|
|
||||||
|
dungeonName =dungeonName.replace("/", "").replace(".", "").replace("schematics", "").replace("schematic", "");
|
||||||
|
|
||||||
|
|
||||||
|
this.getCommandSenderAsPlayer(var1).sendChatToPlayer(dungeonName);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(var2.length!=0)
|
else if(var2.length!=0)
|
||||||
{
|
{
|
||||||
for(DungeonGenerator dungeonGen : mod_pocketDim.registeredDungeons)
|
for(DungeonGenerator dungeonGen : mod_pocketDim.registeredDungeons)
|
||||||
|
|
||||||
{
|
{
|
||||||
String dungeonName =dungeonGen.schematicPath.toLowerCase();
|
String dungeonName =dungeonGen.schematicPath.toLowerCase();
|
||||||
|
|
||||||
|
@ -93,7 +109,37 @@ public class CommandAddDungeonRift extends CommandBase
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(DungeonGenerator dungeonGen : mod_pocketDim.customDungeons)
|
||||||
|
{
|
||||||
|
String dungeonName =dungeonGen.schematicPath.toLowerCase();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(dungeonName.contains(var2[0].toLowerCase()))
|
||||||
|
{
|
||||||
|
|
||||||
|
link = dimHelper.instance.createPocket(link,true, true);
|
||||||
|
|
||||||
|
dimHelper.dimList.get(link.destDimID).dungeonGenerator=dungeonGen;
|
||||||
|
|
||||||
|
this.getCommandSenderAsPlayer(var1).sendChatToPlayer("Genned dungeon " +dungeonName);
|
||||||
|
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(var2!=null&&!var2[0].equals("random"))
|
if(var2!=null&&!var2[0].equals("random"))
|
||||||
{
|
{
|
||||||
this.getCommandSenderAsPlayer(var1).sendChatToPlayer("could not find dungeon, 'list' for list of dungeons");
|
this.getCommandSenderAsPlayer(var1).sendChatToPlayer("could not find dungeon, 'list' for list of dungeons");
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
package StevenDimDoors.mod_pocketDim.commands;
|
package StevenDimDoors.mod_pocketDim.commands;
|
||||||
|
|
||||||
|
import StevenDimDoors.mod_pocketDim.DungeonGenerator;
|
||||||
import StevenDimDoors.mod_pocketDim.customDungeonImporter;
|
import StevenDimDoors.mod_pocketDim.customDungeonImporter;
|
||||||
|
import StevenDimDoors.mod_pocketDim.dimHelper;
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
import net.minecraft.command.CommandBase;
|
import net.minecraft.command.CommandBase;
|
||||||
import net.minecraft.command.ICommandSender;
|
import net.minecraft.command.ICommandSender;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
|
||||||
public class CommandEndDungeonCreation extends CommandBase
|
public class CommandEndDungeonCreation extends CommandBase
|
||||||
{
|
{
|
||||||
|
@ -19,18 +22,41 @@ public class CommandEndDungeonCreation extends CommandBase
|
||||||
public void processCommand(ICommandSender var1, String[] var2)
|
public void processCommand(ICommandSender var1, String[] var2)
|
||||||
|
|
||||||
{
|
{
|
||||||
int x = (int) this.getCommandSenderAsPlayer(var1).posX;
|
|
||||||
int y = (int) this.getCommandSenderAsPlayer(var1).posY;
|
EntityPlayer player =this.getCommandSenderAsPlayer(var1);
|
||||||
int z = (int) this.getCommandSenderAsPlayer(var1).posZ;
|
|
||||||
|
if(!customDungeonImporter.customDungeonStatus.containsKey(player.worldObj.provider.dimensionId))
|
||||||
|
{
|
||||||
|
if(var2.length==0)
|
||||||
|
{
|
||||||
|
player.sendChatToPlayer("Must have started dungeon creation, use argument OVERRIDE to export anyway");
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(!var2[1].contains("OVERRIDE"))
|
||||||
|
{
|
||||||
|
player.sendChatToPlayer("Must have started dungeon creation, use argument OVERRIDE to export anyway");
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int x = (int) player.posX;
|
||||||
|
int y = (int) player.posY;
|
||||||
|
int z = (int) player.posZ;
|
||||||
|
|
||||||
if(var2.length==0)
|
if(var2.length==0)
|
||||||
{
|
{
|
||||||
System.out.println("Must name file");
|
player.sendChatToPlayer("Must name file");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
customDungeonImporter.exportDungeon(this.getCommandSenderAsPlayer(var1).worldObj, x, y, z, mod_pocketDim.schematicContainer+"/"+var2[0]);
|
DungeonGenerator newDungeon = customDungeonImporter.exportDungeon(player.worldObj, x, y, z, mod_pocketDim.schematicContainer+"/"+var2[0]+".schematic");
|
||||||
this.getCommandSenderAsPlayer(var1).sendChatToPlayer("created dungeon schematic in " +mod_pocketDim.schematicContainer+"/"+var2[0]);
|
player.sendChatToPlayer("created dungeon schematic in " +mod_pocketDim.schematicContainer+"/"+var2[0]+".schematic");
|
||||||
|
mod_pocketDim.customDungeons.add(newDungeon);
|
||||||
|
|
||||||
|
dimHelper.instance.teleportToPocket(player.worldObj, customDungeonImporter.customDungeonStatus.get(player.worldObj.provider.dimensionId), player);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
package StevenDimDoors.mod_pocketDim.commands;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import cpw.mods.fml.common.FMLCommonHandler;
|
||||||
|
|
||||||
|
import StevenDimDoors.mod_pocketDim.DimData;
|
||||||
|
import StevenDimDoors.mod_pocketDim.LinkData;
|
||||||
|
import StevenDimDoors.mod_pocketDim.customDungeonImporter;
|
||||||
|
import StevenDimDoors.mod_pocketDim.dimHelper;
|
||||||
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import net.minecraft.command.CommandBase;
|
||||||
|
import net.minecraft.command.ICommandSender;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
public class CommandPrintDungeonData extends CommandBase
|
||||||
|
{
|
||||||
|
public String getCommandName()//the name of our command
|
||||||
|
{
|
||||||
|
return "print_dungeon_data";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void processCommand(ICommandSender var1, String[] var2)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ import cpw.mods.fml.common.FMLCommonHandler;
|
||||||
|
|
||||||
import StevenDimDoors.mod_pocketDim.DimData;
|
import StevenDimDoors.mod_pocketDim.DimData;
|
||||||
import StevenDimDoors.mod_pocketDim.LinkData;
|
import StevenDimDoors.mod_pocketDim.LinkData;
|
||||||
|
import StevenDimDoors.mod_pocketDim.customDungeonImporter;
|
||||||
import StevenDimDoors.mod_pocketDim.dimHelper;
|
import StevenDimDoors.mod_pocketDim.dimHelper;
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
import net.minecraft.command.CommandBase;
|
import net.minecraft.command.CommandBase;
|
||||||
|
@ -37,6 +38,7 @@ public class CommandStartDungeonCreation extends CommandBase
|
||||||
link = dimHelper.instance.createPocket(link,true, false);
|
link = dimHelper.instance.createPocket(link,true, false);
|
||||||
|
|
||||||
dimHelper.instance.teleportToPocket(player.worldObj, link, player);
|
dimHelper.instance.teleportToPocket(player.worldObj, link, player);
|
||||||
|
customDungeonImporter.customDungeonStatus.put(player.worldObj.provider.dimensionId, dimHelper.instance.getLinkDataFromCoords(link.destXCoord, link.destYCoord, link.destZCoord, link.destDimID));
|
||||||
|
|
||||||
this.getCommandSenderAsPlayer(var1).sendChatToPlayer("DimID = "+ link.destDimID);
|
this.getCommandSenderAsPlayer(var1).sendChatToPlayer("DimID = "+ link.destDimID);
|
||||||
|
|
||||||
|
|
|
@ -29,14 +29,16 @@ import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper;
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.jnbt.ByteArrayTag;
|
import StevenDimDoors.mod_pocketDim.helpers.jnbt.ByteArrayTag;
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.jnbt.CompoundTag;
|
import StevenDimDoors.mod_pocketDim.helpers.jnbt.CompoundTag;
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.jnbt.NBTOutputStream;
|
import StevenDimDoors.mod_pocketDim.helpers.jnbt.NBTOutputStream;
|
||||||
|
import StevenDimDoors.mod_pocketDim.helpers.jnbt.ShortTag;
|
||||||
|
|
||||||
public class customDungeonImporter
|
public class customDungeonImporter
|
||||||
{
|
{
|
||||||
NBTTagCompound nbtdata= new NBTTagCompound();
|
NBTTagCompound nbtdata= new NBTTagCompound();
|
||||||
|
|
||||||
|
public static HashMap<Integer, LinkData> customDungeonStatus = new HashMap<Integer, LinkData>();
|
||||||
|
|
||||||
|
|
||||||
public static void exportDungeon(World world, int xI, int yI, int zI, String file)
|
public static DungeonGenerator exportDungeon(World world, int xI, int yI, int zI, String file)
|
||||||
{
|
{
|
||||||
int xMin;
|
int xMin;
|
||||||
int yMin;
|
int yMin;
|
||||||
|
@ -49,8 +51,8 @@ public class customDungeonImporter
|
||||||
xMin=xMax=xI;
|
xMin=xMax=xI;
|
||||||
yMin=yMax=yI;
|
yMin=yMax=yI;
|
||||||
zMin=zMax=zI;
|
zMin=zMax=zI;
|
||||||
/**
|
|
||||||
for(int count=0;xI<50;xI++)
|
for(int count=0;count<50;count++)
|
||||||
{
|
{
|
||||||
|
|
||||||
if(world.getBlockId(xMin, yI, zI)!=mod_pocketDim.blockDimWallPermID)
|
if(world.getBlockId(xMin, yI, zI)!=mod_pocketDim.blockDimWallPermID)
|
||||||
|
@ -67,21 +69,21 @@ public class customDungeonImporter
|
||||||
}
|
}
|
||||||
if(world.getBlockId(xMax, yI, zI)!=mod_pocketDim.blockDimWallPermID)
|
if(world.getBlockId(xMax, yI, zI)!=mod_pocketDim.blockDimWallPermID)
|
||||||
{
|
{
|
||||||
xMin++;
|
xMax++;
|
||||||
}
|
}
|
||||||
if(world.getBlockId(xI, yMax, zI)!=mod_pocketDim.blockDimWallPermID)
|
if(world.getBlockId(xI, yMax, zI)!=mod_pocketDim.blockDimWallPermID)
|
||||||
{
|
{
|
||||||
yMin++;
|
yMax++;
|
||||||
}
|
}
|
||||||
if(world.getBlockId(xI, yI, zMax)!=mod_pocketDim.blockDimWallPermID)
|
if(world.getBlockId(xI, yI, zMax)!=mod_pocketDim.blockDimWallPermID)
|
||||||
{
|
{
|
||||||
zMin++;
|
zMax++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
**/
|
|
||||||
short width = 100;//(short) (xMax-xMin);
|
short width =(short) (xMax-xMin);
|
||||||
short height= 100;//(short) (yMax-yMin);
|
short height= (short) (yMax-yMin);
|
||||||
short length= 100;//(short) (zMax=zMin);
|
short length= (short) (zMax-zMin);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -89,12 +91,13 @@ public class customDungeonImporter
|
||||||
byte[] addBlocks = null;
|
byte[] addBlocks = null;
|
||||||
byte[] blockData = new byte[width * height * length];
|
byte[] blockData = new byte[width * height * length];
|
||||||
|
|
||||||
for (int x = 0; x < width; ++x) {
|
for (int x = 0; x < width; ++x)
|
||||||
|
{
|
||||||
for (int y = 0; y < height; ++y) {
|
for (int y = 0; y < height; ++y) {
|
||||||
for (int z = 0; z < length; ++z) {
|
for (int z = 0; z < length; ++z) {
|
||||||
int index = y * width * length + z * width + x;
|
int index = y * width * length + z * width + x;
|
||||||
int blockID = world.getBlockId(x, y, z);
|
int blockID = world.getBlockId(x+xMin, y+yMin, z+zMin);
|
||||||
int meta= world.getBlockMetadata(x, y, z);
|
int meta= world.getBlockMetadata(x+xMin, y+yMin, z+zMin);
|
||||||
// Save 4096 IDs in an AddBlocks section
|
// Save 4096 IDs in an AddBlocks section
|
||||||
if (blockID > 255) {
|
if (blockID > 255) {
|
||||||
if (addBlocks == null) { // Lazily create section
|
if (addBlocks == null) { // Lazily create section
|
||||||
|
@ -124,6 +127,10 @@ public class customDungeonImporter
|
||||||
HashMap schematic = new HashMap();
|
HashMap schematic = new HashMap();
|
||||||
schematic.put("Blocks", new ByteArrayTag("Blocks", blocks));
|
schematic.put("Blocks", new ByteArrayTag("Blocks", blocks));
|
||||||
schematic.put("Data", new ByteArrayTag("Data", blockData));
|
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));
|
||||||
if (addBlocks != null) {
|
if (addBlocks != null) {
|
||||||
schematic.put("AddBlocks", new ByteArrayTag("AddBlocks", addBlocks));
|
schematic.put("AddBlocks", new ByteArrayTag("AddBlocks", addBlocks));
|
||||||
}
|
}
|
||||||
|
@ -140,6 +147,7 @@ public class customDungeonImporter
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
return new DungeonGenerator(0,file,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -209,6 +209,9 @@ public class mod_pocketDim
|
||||||
|
|
||||||
public static ArrayList<DungeonGenerator> exits = new ArrayList<DungeonGenerator>();
|
public static ArrayList<DungeonGenerator> exits = new ArrayList<DungeonGenerator>();
|
||||||
|
|
||||||
|
public static ArrayList<DungeonGenerator> customDungeons = new ArrayList<DungeonGenerator>();
|
||||||
|
|
||||||
|
|
||||||
public static ArrayList metadataFlipList = new ArrayList();
|
public static ArrayList metadataFlipList = new ArrayList();
|
||||||
public static ArrayList metadataNextList = new ArrayList();
|
public static ArrayList metadataNextList = new ArrayList();
|
||||||
|
|
||||||
|
@ -314,7 +317,16 @@ public class mod_pocketDim
|
||||||
{
|
{
|
||||||
String[] name = schematicFile.getName().split("_");
|
String[] name = schematicFile.getName().split("_");
|
||||||
|
|
||||||
|
if(name.length<4)
|
||||||
|
{
|
||||||
|
System.out.println("Importing custom dungeon gen mechanics failed, adding to secondary list");
|
||||||
|
this.customDungeons.add(new DungeonGenerator(0,schematicFile.getAbsolutePath(),true));
|
||||||
|
System.out.println("Imported "+schematicFile.getName());
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
boolean open= name[2].equals("open");
|
boolean open= name[2].equals("open");
|
||||||
|
|
||||||
int weight = Integer.parseInt(name[3].replace(".schematic", ""));
|
int weight = Integer.parseInt(name[3].replace(".schematic", ""));
|
||||||
|
@ -362,6 +374,10 @@ public class mod_pocketDim
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
|
|
Loading…
Reference in a new issue