Fixed cuboid algorithm! Multiblock now code-wise functions properly
Signing off. Night all!
This commit is contained in:
parent
935b257f51
commit
796ab2eee2
1 changed files with 131 additions and 129 deletions
|
@ -31,137 +31,139 @@ public class BatteryUpdateProtocol
|
||||||
*/
|
*/
|
||||||
public void loopThrough(TileEntity tile)
|
public void loopThrough(TileEntity tile)
|
||||||
{
|
{
|
||||||
World worldObj = tile.worldObj;
|
if(structureFound == null)
|
||||||
|
|
||||||
int origX = tile.xCoord, origY = tile.yCoord, origZ = tile.zCoord;
|
|
||||||
|
|
||||||
boolean isCorner = true;
|
|
||||||
boolean rightBlocks = true;
|
|
||||||
|
|
||||||
Set<Vector3> locations = new HashSet<Vector3>();
|
|
||||||
|
|
||||||
int xmin = 0, xmax = 0, ymin = 0, ymax = 0, zmin = 0, zmax = 0;
|
|
||||||
|
|
||||||
int x = 0, y = 0, z = 0;
|
|
||||||
|
|
||||||
if((isViableNode(origX + 1, origY, origZ) && isViableNode(origX - 1, origY, origZ)) ||
|
|
||||||
(isViableNode(origX, origY + 1, origZ) && isViableNode(origX, origY - 1, origZ)) ||
|
|
||||||
(isViableNode(origX, origY, origZ + 1) && isViableNode(origX, origY, origZ - 1)))
|
|
||||||
{
|
{
|
||||||
isCorner = false;
|
World worldObj = tile.worldObj;
|
||||||
}
|
|
||||||
|
int origX = tile.xCoord, origY = tile.yCoord, origZ = tile.zCoord;
|
||||||
if(isCorner)
|
|
||||||
{
|
boolean isCorner = true;
|
||||||
if(isViableNode(origX+1, origY, origZ))
|
boolean rightBlocks = true;
|
||||||
{
|
|
||||||
xmin = 0;
|
Set<Vector3> locations = new HashSet<Vector3>();
|
||||||
|
|
||||||
while(isViableNode(origX+x+1, origY, origZ))
|
int xmin = 0, xmax = 0, ymin = 0, ymax = 0, zmin = 0, zmax = 0;
|
||||||
{
|
|
||||||
x++;
|
int x = 0, y = 0, z = 0;
|
||||||
}
|
|
||||||
|
if((isBattery(origX + 1, origY, origZ) && isBattery(origX - 1, origY, origZ)) ||
|
||||||
xmax = x;
|
(isBattery(origX, origY + 1, origZ) && isBattery(origX, origY - 1, origZ)) ||
|
||||||
}
|
(isBattery(origX, origY, origZ + 1) && isBattery(origX, origY, origZ - 1)))
|
||||||
else {
|
|
||||||
xmax = 0;
|
|
||||||
|
|
||||||
while(isViableNode(origX+x-1, origY, origZ))
|
|
||||||
{
|
|
||||||
x--;
|
|
||||||
}
|
|
||||||
|
|
||||||
xmin = x;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isViableNode(origX, origY+1, origZ))
|
|
||||||
{
|
|
||||||
ymin = 0;
|
|
||||||
|
|
||||||
while(isViableNode(origX, origY+y+1, origZ))
|
|
||||||
{
|
|
||||||
y++;
|
|
||||||
}
|
|
||||||
|
|
||||||
ymax = y;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ymax = 0;
|
|
||||||
|
|
||||||
while(isViableNode(origX, origY+y-1 ,origZ))
|
|
||||||
{
|
|
||||||
y--;
|
|
||||||
}
|
|
||||||
|
|
||||||
ymin = y;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isViableNode(origX, origY, origZ+1))
|
|
||||||
{
|
|
||||||
zmin = 0;
|
|
||||||
|
|
||||||
while(isViableNode(origX, origY, origZ+z+1))
|
|
||||||
{
|
|
||||||
z++;
|
|
||||||
}
|
|
||||||
|
|
||||||
zmax = z;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
zmax = 0;
|
|
||||||
|
|
||||||
while(isViableNode(origX, origY, origZ+z-1))
|
|
||||||
{
|
|
||||||
z--;
|
|
||||||
}
|
|
||||||
|
|
||||||
zmin = z;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(x = xmin; x <= xmax; x++)
|
|
||||||
{
|
|
||||||
for(y = ymin; y <= ymax; y++)
|
|
||||||
{
|
|
||||||
for(z = zmin; z <= zmax; z++)
|
|
||||||
{
|
|
||||||
if(!isViableNode(origX+x, origY+y, origZ+z))
|
|
||||||
{
|
|
||||||
rightBlocks = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
locations.add(new Vector3(tile).translate(new Vector3(x, y, z)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!rightBlocks)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!rightBlocks)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(locations.size() >= 1 && locations.size() < 512)
|
|
||||||
{
|
|
||||||
if(rightBlocks && isCorner)
|
|
||||||
{
|
{
|
||||||
SynchronizedBatteryData structure = new SynchronizedBatteryData();
|
isCorner = false;
|
||||||
structure.locations = locations;
|
}
|
||||||
structure.length = Math.abs(xmax-xmin)+1;
|
|
||||||
structure.height = Math.abs(ymax-ymin)+1;
|
if(isCorner)
|
||||||
structure.width = Math.abs(zmax-zmin)+1;
|
{
|
||||||
|
if(isBattery(origX+1, origY, origZ))
|
||||||
if(structure.locations.contains(new Vector3(pointer)))
|
{
|
||||||
|
xmin = 0;
|
||||||
|
|
||||||
|
while(isBattery(origX+x+1, origY, origZ))
|
||||||
|
{
|
||||||
|
x++;
|
||||||
|
}
|
||||||
|
|
||||||
|
xmax = x;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
xmax = 0;
|
||||||
|
|
||||||
|
while(isBattery(origX+x-1, origY, origZ))
|
||||||
|
{
|
||||||
|
x--;
|
||||||
|
}
|
||||||
|
|
||||||
|
xmin = x;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isBattery(origX, origY+1, origZ))
|
||||||
|
{
|
||||||
|
ymin = 0;
|
||||||
|
|
||||||
|
while(isBattery(origX, origY+y+1, origZ))
|
||||||
|
{
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
|
||||||
|
ymax = y;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ymax = 0;
|
||||||
|
|
||||||
|
while(isBattery(origX, origY+y-1 ,origZ))
|
||||||
|
{
|
||||||
|
y--;
|
||||||
|
}
|
||||||
|
|
||||||
|
ymin = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isBattery(origX, origY, origZ+1))
|
||||||
|
{
|
||||||
|
zmin = 0;
|
||||||
|
|
||||||
|
while(isBattery(origX, origY, origZ+z+1))
|
||||||
|
{
|
||||||
|
z++;
|
||||||
|
}
|
||||||
|
|
||||||
|
zmax = z;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
zmax = 0;
|
||||||
|
|
||||||
|
while(isBattery(origX, origY, origZ+z-1))
|
||||||
|
{
|
||||||
|
z--;
|
||||||
|
}
|
||||||
|
|
||||||
|
zmin = z;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(x = xmin; x <= xmax; x++)
|
||||||
|
{
|
||||||
|
for(y = ymin; y <= ymax; y++)
|
||||||
|
{
|
||||||
|
for(z = zmin; z <= zmax; z++)
|
||||||
|
{
|
||||||
|
if(!isBattery(origX+x, origY+y, origZ+z))
|
||||||
|
{
|
||||||
|
rightBlocks = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
locations.add(new Vector3(tile).translate(new Vector3(x, y, z)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!rightBlocks)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!rightBlocks)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(locations.size() >= 1 && locations.size() < 512)
|
||||||
|
{
|
||||||
|
if(rightBlocks && isCorner)
|
||||||
{
|
{
|
||||||
structureFound = structure;
|
SynchronizedBatteryData structure = new SynchronizedBatteryData();
|
||||||
return;
|
structure.locations = locations;
|
||||||
|
structure.length = Math.abs(xmax-xmin)+1;
|
||||||
|
structure.height = Math.abs(ymax-ymin)+1;
|
||||||
|
structure.width = Math.abs(zmax-zmin)+1;
|
||||||
|
|
||||||
|
if(structure.locations.contains(new Vector3(pointer)))
|
||||||
|
{
|
||||||
|
structureFound = structure;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -182,7 +184,7 @@ public class BatteryUpdateProtocol
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isViableNode(int x, int y, int z)
|
private boolean isBattery(int x, int y, int z)
|
||||||
{
|
{
|
||||||
if(pointer.worldObj.getBlockTileEntity(x, y, z) instanceof TileEntityBattery)
|
if(pointer.worldObj.getBlockTileEntity(x, y, z) instanceof TileEntityBattery)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue