package WayofTime.alchemicalWizardry.common.demonVillage; import WayofTime.alchemicalWizardry.ModBlocks; import net.minecraft.block.Block; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; public class GridSpaceHolder { public GridSpace[][] area; public int negXRadius; //These variables indicate how much the grid has expanded from the 1x1 public int posXRadius; //matrix in each direction public int negZRadius; public int posZRadius; public GridSpaceHolder() { area = new GridSpace[1][1]; area[0][0] = new GridSpace(); } public void expandAreaInNegX() { GridSpace[][] newGrid = new GridSpace[negXRadius + posXRadius + 2][negZRadius + posZRadius + 1]; for(int i=0; i<=negZRadius + posZRadius; i++) { newGrid[0][i] = new GridSpace(); } for(int i=0; i<=negXRadius + posXRadius; i++) { for(int j=0; j<=negZRadius + posZRadius; j++) { newGrid[i+1][j] = area[i][j]; } } area = newGrid; negXRadius += 1; } public void expandAreaInPosX() { GridSpace[][] newGrid = new GridSpace[negXRadius + posXRadius + 2][negZRadius + posZRadius + 1]; for(int i=0; i<=negZRadius + posZRadius; i++) { newGrid[negXRadius + posXRadius + 1][i] = new GridSpace(); } for(int i=0; i<=negXRadius + posXRadius; i++) { for(int j=0; j<=negZRadius + posZRadius; j++) { newGrid[i][j] = area[i][j]; } } area = newGrid; posXRadius += 1; } public void expandAreaInNegZ() { GridSpace[][] newGrid = new GridSpace[negXRadius + posXRadius + 1][negZRadius + posZRadius + 2]; System.out.println("x " + newGrid.length + "z " + newGrid[0].length); for(int i=0; i<=negXRadius + posXRadius; i++) { newGrid[i][0] = new GridSpace(); } for(int i=0; i<=negXRadius + posXRadius; i++) { for(int j=0; j<=negZRadius + posZRadius; j++) { newGrid[i][j+1] = area[i][j]; } } area = newGrid; negZRadius += 1; } public void expandAreaInPosZ() { GridSpace[][] newGrid = new GridSpace[negXRadius + posXRadius + 1][negZRadius + posZRadius + 2]; for(int i=0; i<=negXRadius + posXRadius; i++) { newGrid[i][negZRadius + posZRadius + 1] = new GridSpace(); } for(int i=0; i<=negXRadius + posXRadius; i++) { for(int j=0; j<=negZRadius + posZRadius; j++) { newGrid[i][j] = area[i][j]; } } area = newGrid; posZRadius += 1; } public GridSpace getGridSpace(int x, int z) { if(x > posXRadius|| x < -negXRadius || z > posZRadius || z < -negZRadius) { return new GridSpace(); }else { return (area[x + negXRadius][z + negZRadius]); } } public void setGridSpace(int x, int z, GridSpace space) { if(x > posXRadius) { this.expandAreaInPosX(); this.setGridSpace(x, z, space); return; }else if(x < -negXRadius) { this.expandAreaInNegX(); this.setGridSpace(x, z, space); return; }else if(z > posZRadius) { this.expandAreaInPosZ(); this.setGridSpace(x, z, space); return; }else if(z < -negZRadius) { this.expandAreaInNegZ(); this.setGridSpace(x, z, space); return; }else { area[x + negXRadius][z + negZRadius] = space; } } public boolean doesContainAll(GridSpaceHolder master, int xInit, int zInit, ForgeDirection dir) { if(master != null) { System.out.println("negXRadius: " + negXRadius + " posXRadius: " + posXRadius + " negZRadius: " + negZRadius + " posZRadius: " + posZRadius); for(int i=-negXRadius; i<=posXRadius; i++) { for(int j=-negZRadius; j<=posZRadius; j++) { GridSpace thisSpace = this.getGridSpace(i, j); if(thisSpace.isEmpty()) { continue; } System.out.println("x: " + i + " z: " + j); int xOff = 0; int zOff = 0; switch(dir) { case SOUTH: xOff = -i; zOff = -j; break; case WEST: xOff = j; zOff = -i; break; case EAST: xOff = -j; zOff = i; break; default: xOff = i; zOff = j; break; } if(!master.getGridSpace(xInit + xOff, zInit + zOff).isEmpty()) { return false; } } } return true; } return false; } public void setAllGridSpaces(int xInit, int zInit, int yLevel, ForgeDirection dir, int type, GridSpaceHolder master) { System.out.println("Grid space selected: (" + xInit + "," + zInit + ")"); if(master != null) { for(int i=-negXRadius; i<=posXRadius; i++) { for(int j=-negZRadius; j<=posZRadius; j++) { GridSpace thisSpace = this.getGridSpace(i, j); if(thisSpace.isEmpty()) { continue; } int xOff = 0; int zOff = 0; switch(dir) { case SOUTH: xOff = -i; zOff = -j; break; case WEST: xOff = j; zOff = -i; break; case EAST: xOff = -j; zOff = i; break; default: xOff = i; zOff = j; break; } System.out.println("Grid space (" + (xInit + xOff) + "," + (zInit + zOff) + ")"); master.setGridSpace(xInit + xOff, zInit + zOff, new GridSpace(type, yLevel)); } } } } public void destroyAllInGridSpaces(World world, int xCoord, int yCoord, int zCoord, ForgeDirection dir) { for(int i=-negXRadius; i<=posXRadius; i++) { for(int j=-negZRadius; j<=posZRadius; j++) { GridSpace thisSpace = this.getGridSpace(i, j); if(thisSpace.isEmpty()) { continue; } int xOff = 0; int zOff = 0; switch(dir) { case SOUTH: xOff = -i; zOff = -j; break; case WEST: xOff = j; zOff = -i; break; case EAST: xOff = -j; zOff = i; break; default: xOff = i; zOff = j; break; } for(int l = -2; l<=2; l++) { for(int m = -2; m<=2; m++) { Block block = world.getBlock(xCoord + xOff*5 + l, yCoord, zCoord + zOff*5 + m); if(block == ModBlocks.blockDemonPortal) { continue; } world.setBlockToAir(xCoord + xOff*5 + l, yCoord, zCoord + zOff*5 + m); } } } } } public int getNumberOfGridSpaces() { int num = 0; for(int i=-this.negXRadius; i<=this.posXRadius; i++) { for(int j=-this.negZRadius; j<=this.posZRadius; j++) { if(!this.getGridSpace(i, j).isEmpty()) { num++; } } } return num; } }