mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
156 lines
3.7 KiB
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;
|
|
}
|
|
|
|
}
|