Hbm-s-Nuclear-Tech-GIT/com/hbm/handler/MultiblockHandlerXR.java

156 lines
3.7 KiB
Java

package com.hbm.handler;
import com.hbm.blocks.BlockDummyable;
import net.minecraft.block.Block;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class MultiblockHandlerXR {
//when looking north
// U D N S W E
public static int[] uni = new int[] { 3, 0, 4, 4, 4, 4 };
public static boolean checkSpace(World world, int x, int y, int z, int[] dim, int ox, int oy, int oz, ForgeDirection dir) {
if(dim == null || dim.length != 6)
return false;
int count = 0;
int[] rot = rotate(dim, dir);
for(int a = x - rot[4]; a <= x + rot[5]; a++) {
for(int b = y - rot[1]; b <= y + rot[0]; b++) {
for(int c = z - rot[2]; c <= z + rot[3]; c++) {
//if the position matches the just placed block, the space counts as unoccupied
if(a == ox && b == oy && c == oz)
continue;
if(!world.getBlock(a, b, c).canPlaceBlockAt(world, a, b, c)) {
return false;
}
count++;
if(count > 2000) {
System.out.println("checkspace: ded " + a + " " + b + " " + c + " " + x + " " + y + " " + z);
return false;
}
}
}
}
return true;
}
public static void fillSpace(World world, int x, int y, int z, int[] dim, Block block, ForgeDirection dir) {
if(dim == null || dim.length != 6)
return;
int count = 0;
int[] rot = rotate(dim, dir);
BlockDummyable.safeRem = true;
for(int a = x - rot[4]; a <= x + rot[5]; a++) {
for(int b = y - rot[1]; b <= y + rot[0]; b++) {
for(int c = z - rot[2]; c <= z + rot[3]; c++) {
int meta = 0;
if(b < y) {
meta = ForgeDirection.DOWN.ordinal();
} else if(b > y) {
meta = ForgeDirection.UP.ordinal();
} else if(a < x) {
meta = ForgeDirection.WEST.ordinal();
} else if(a > x) {
meta = ForgeDirection.EAST.ordinal();
} else if(c < z) {
meta = ForgeDirection.NORTH.ordinal();
} else if(c > z) {
meta = ForgeDirection.SOUTH.ordinal();
} else {
continue;
}
world.setBlock(a, b, c, block, meta, 3);
count++;
if(count > 2000) {
System.out.println("fillspace: ded " + a + " " + b + " " + c + " " + x + " " + y + " " + z);
BlockDummyable.safeRem = false;
return;
}
}
}
}
BlockDummyable.safeRem = false;
}
@Deprecated
public static void emptySpace(World world, int x, int y, int z, int[] dim, Block block, ForgeDirection dir) {
if(dim == null || dim.length != 6)
return;
int count = 0;
System.out.println("emptyspace is deprecated and shouldn't even be executed");
int[] rot = rotate(dim, dir);
for(int a = x - rot[4]; a <= x + rot[5]; a++) {
for(int b = y - rot[1]; b <= y + rot[0]; b++) {
for(int c = z - rot[2]; c <= z + rot[3]; c++) {
if(world.getBlock(a, b, c) == block)
world.setBlockToAir(a, b, c);
count++;
if(count > 2000) {
System.out.println("emptyspace: ded " + a + " " + b + " " + c);
return;
}
}
}
}
}
public static int[] rotate(int[] dim, ForgeDirection dir) {
if(dim == null)
return null;
if(dir == ForgeDirection.SOUTH)
return dim;
if(dir == ForgeDirection.NORTH) {
// U D N S W E
return new int[] { dim[0], dim[1], dim[3], dim[2], dim[5], dim[4] };
}
if(dir == ForgeDirection.EAST) {
// U D N S W E
return new int[] { dim[0], dim[1], dim[5], dim[4], dim[2], dim[3] };
}
if(dir == ForgeDirection.WEST) {
// U D N S W E
return new int[] { dim[0], dim[1], dim[4], dim[5], dim[3], dim[2] };
}
return dim;
}
}