Files
DimDoors/StevenDimDoors/mod_pocketDim/schematic/CompactBoundsOperation.java
SenseiKiwi 210c791af4 Created Schematic Class
Separated part of the dungeon-exporting logic into a new class:
Schematic. Also created a few classes to implement important operations.
Some parts of the original exporting logic are missing now, such as
mapping certain blocks to standard IDs. That will be reimplemented in
the future. Importing schematics is not supported yet. I need to test
what's done so far.
2013-07-27 06:52:30 -04:00

74 lines
1.5 KiB
Java

package StevenDimDoors.mod_pocketDim.schematic;
import net.minecraft.world.World;
import StevenDimDoors.mod_pocketDim.Point3D;
public class CompactBoundsOperation extends WorldOperation
{
private int minX;
private int minY;
private int minZ;
private int maxX;
private int maxY;
private int maxZ;
public CompactBoundsOperation()
{
super("CompactBoundsOperation");
}
@Override
protected boolean start(World world, int x, int y, int z, int width, int height, int length)
{
minX = Integer.MAX_VALUE;
minY = Integer.MAX_VALUE;
minZ = Integer.MAX_VALUE;
maxX = x;
maxY = y;
maxZ = z;
return true;
}
@Override
protected boolean applyToBlock(World world, int x, int y, int z)
{
//This could be done more efficiently, but honestly, this is the simplest approach and it
//makes it easy for us to verify that the code is correct.
if (!world.isAirBlock(x, y, z))
{
maxX = x > maxX ? x : maxX;
maxZ = z > maxZ ? z : maxZ;
maxY = y > maxY ? y : maxY;
minX = x < minX ? x : minX;
minZ = z < minZ ? z : minZ;
minY = y < minY ? y : minY;
}
return true;
}
protected boolean finish()
{
if (minX == Integer.MAX_VALUE)
{
//The whole search space was empty!
//Compact the space to a single block.
minX = maxX;
minY = maxY;
minZ = maxZ;
return false;
}
return true;
}
public Point3D getMaxCorner()
{
return new Point3D(maxX, maxY, maxZ);
}
public Point3D getMinCorner()
{
return new Point3D(minX, minY, minZ);
}
}