1
0
mirror of https://github.com/cabaletta/baritone synced 2025-01-09 00:09:58 +00:00
baritone/schematic/SchematicLoader.java
2018-08-01 11:34:35 -04:00

78 lines
2.9 KiB
Java

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package baritone.schematic;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import baritone.util.Out;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.math.BlockPos;
/**
*
* @author galdara
*/
public class SchematicLoader {
public static File schematicDir;
private static final HashMap<File, Schematic> cachedSchematics = new HashMap<File, Schematic>();
private SchematicLoader() {
schematicDir = new File(Minecraft.getMinecraft().mcDataDir, "schematics");
schematicDir.mkdir();
for (File file : schematicDir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".schematic");
}
})) {
try {
cachedSchematics.put(file, loadFromFile(file));
} catch (IOException ex) {
Logger.getLogger(SchematicLoader.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public static SchematicLoader getLoader() {
return new SchematicLoader();
}
public final Schematic loadFromFile(File nbtFile) throws FileNotFoundException, IOException {
if (cachedSchematics.containsKey(nbtFile)) {
return cachedSchematics.get(nbtFile);
}
FileInputStream fileInputStream = new FileInputStream(nbtFile);
NBTTagCompound compound = CompressedStreamTools.readCompressed(fileInputStream);
System.out.print(compound);
int height, width, length;
height = compound.getInteger("Height");
width = compound.getInteger("Width");
length = compound.getInteger("Length");
byte[][][] blocks = new byte[width][height][length], data = new byte[width][height][length];
byte[] rawBlocks = compound.getByteArray("Blocks");
HashMap<BlockPos, Block> blocksMap = new HashMap<BlockPos, Block>();
for (int y = 0; y < height; y++) {
for (int z = 0; z < length; z++) {
for (int x = 0; x < width; x++) {
int index = y * width * length + z * width + x;
blocks[x][y][z] = rawBlocks[index];
blocksMap.put(new BlockPos(x, y, z), Block.getBlockById(rawBlocks[index]));
}
}
}
Out.log(blocksMap);
Schematic schematic = new Schematic(blocksMap, width, height, length);
cachedSchematics.put(nbtFile, schematic);
return schematic;
}
}