DimDoors/StevenDimDoors/mod_pocketDim/customDungeonImporter.java

145 lines
4.4 KiB
Java
Raw Normal View History

2013-06-04 14:52:06 +02:00
package StevenDimDoors.mod_pocketDim;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.BlockComparator;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.BlockDoor;
import net.minecraft.block.BlockRedstoneRepeater;
import net.minecraft.block.BlockStairs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntityChest;
import net.minecraft.tileentity.TileEntityDispenser;
import net.minecraft.util.WeightedRandomChestContent;
import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.chunk.storage.ExtendedBlockStorage;
import net.minecraftforge.common.ChestGenHooks;
import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper;
import StevenDimDoors.mod_pocketDim.helpers.jnbt.ByteArrayTag;
import StevenDimDoors.mod_pocketDim.helpers.jnbt.CompoundTag;
import StevenDimDoors.mod_pocketDim.helpers.jnbt.NBTOutputStream;
public class customDungeonImporter
{
NBTTagCompound nbtdata= new NBTTagCompound();
public static void 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;xI<50;xI++)
{
if(world.getBlockId(xMin, yI, zI)!=mod_pocketDim.blockDimWallPermID)
{
xMin--;
}
if(world.getBlockId(xI, yMin, zI)!=mod_pocketDim.blockDimWallPermID)
{
yMin--;
}
if(world.getBlockId(xI, yI, zMin)!=mod_pocketDim.blockDimWallPermID)
{
zMin--;
}
if(world.getBlockId(xMax, yI, zI)!=mod_pocketDim.blockDimWallPermID)
{
xMin++;
}
if(world.getBlockId(xI, yMax, zI)!=mod_pocketDim.blockDimWallPermID)
{
yMin++;
}
if(world.getBlockId(xI, yI, zMax)!=mod_pocketDim.blockDimWallPermID)
{
zMin++;
}
}
**/
short width = 100;//(short) (xMax-xMin);
short height= 100;//(short) (yMax-yMin);
short length= 100;//(short) (zMax=zMin);
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, y, z);
int meta= world.getBlockMetadata(x, y, z);
// 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;
}
}
}
/**
*
* 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 schematic = new HashMap();
schematic.put("Blocks", new ByteArrayTag("Blocks", blocks));
schematic.put("Data", new ByteArrayTag("Data", blockData));
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();
}
}
}