2014-08-06 18:49:32 -04:00
|
|
|
package mekanism.api;
|
|
|
|
|
|
2014-08-07 21:33:17 -04:00
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
|
|
|
import cpw.mods.fml.common.FMLCommonHandler;
|
2014-08-06 18:49:32 -04:00
|
|
|
|
|
|
|
|
public class Range4D
|
|
|
|
|
{
|
|
|
|
|
public int dimensionId;
|
|
|
|
|
|
|
|
|
|
public int xMin;
|
|
|
|
|
public int yMin;
|
|
|
|
|
public int zMin;
|
|
|
|
|
public int xMax;
|
|
|
|
|
public int yMax;
|
|
|
|
|
public int zMax;
|
|
|
|
|
|
|
|
|
|
public Range4D(int minX, int minY, int minZ, int maxX, int maxY, int maxZ, int dimension)
|
|
|
|
|
{
|
|
|
|
|
xMin = minX;
|
|
|
|
|
yMin = minY;
|
|
|
|
|
zMin = minZ;
|
|
|
|
|
xMax = maxX;
|
|
|
|
|
yMax = maxY;
|
|
|
|
|
zMax = maxZ;
|
|
|
|
|
|
|
|
|
|
dimensionId = dimension;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Range4D(Chunk3D chunk)
|
|
|
|
|
{
|
|
|
|
|
xMin = chunk.xCoord*16;
|
|
|
|
|
yMin = 0;
|
|
|
|
|
zMin = chunk.zCoord*16;
|
|
|
|
|
xMax = xMin+16;
|
2014-08-07 21:33:17 -04:00
|
|
|
yMax = 255;
|
|
|
|
|
zMax = zMin+16;
|
2015-03-22 21:40:23 -04:00
|
|
|
|
|
|
|
|
dimensionId = chunk.dimensionId;
|
2014-08-06 18:49:32 -04:00
|
|
|
}
|
|
|
|
|
|
2014-08-07 21:33:17 -04:00
|
|
|
public Range4D(Coord4D coord)
|
2014-08-06 18:49:32 -04:00
|
|
|
{
|
2014-08-07 21:33:17 -04:00
|
|
|
xMin = coord.xCoord;
|
|
|
|
|
yMin = coord.yCoord;
|
|
|
|
|
zMin = coord.zCoord;
|
2014-08-06 18:49:32 -04:00
|
|
|
|
2014-08-07 21:33:17 -04:00
|
|
|
xMax = coord.xCoord+1;
|
|
|
|
|
yMax = coord.yCoord+1;
|
|
|
|
|
zMax = coord.zCoord+1;
|
2015-03-22 21:40:23 -04:00
|
|
|
|
|
|
|
|
dimensionId = coord.dimensionId;
|
2014-08-07 21:33:17 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Range4D getChunkRange(EntityPlayer player)
|
|
|
|
|
{
|
|
|
|
|
int radius = FMLCommonHandler.instance().getMinecraftServerInstance().getConfigurationManager().getViewDistance();
|
2014-08-06 18:49:32 -04:00
|
|
|
|
2014-08-07 21:33:17 -04:00
|
|
|
return new Range4D(new Chunk3D(player)).expandChunks(radius);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Range4D expandChunks(int chunks)
|
|
|
|
|
{
|
|
|
|
|
xMin -= chunks*16;
|
|
|
|
|
xMax += chunks*16;
|
|
|
|
|
zMin -= chunks*16;
|
|
|
|
|
zMax += chunks*16;
|
2014-08-06 18:49:32 -04:00
|
|
|
|
2014-08-07 21:33:17 -04:00
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public boolean intersects(Range4D range)
|
|
|
|
|
{
|
|
|
|
|
return (xMax+1 - 1.E-05D > range.xMin) && (range.xMax+1 - 1.E-05D > xMin) && (yMax+1 - 1.E-05D > range.yMin) && (range.yMax+1 - 1.E-05D > yMin) && (zMax+1 - 1.E-05D > range.zMin) && (range.zMax+1 - 1.E-05D > zMin);
|
2014-08-06 18:49:32 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Range4D clone()
|
|
|
|
|
{
|
|
|
|
|
return new Range4D(xMin, yMin, zMin, xMax, yMax, zMax, dimensionId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public String toString()
|
|
|
|
|
{
|
|
|
|
|
return "[Range4D: " + xMin + ", " + yMin + ", " + zMin + ", " + xMax + ", " + yMax + ", " + zMax + ", dim=" + dimensionId + "]";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public boolean equals(Object obj)
|
|
|
|
|
{
|
|
|
|
|
return obj instanceof Range4D &&
|
|
|
|
|
((Range4D)obj).xMin == xMin &&
|
|
|
|
|
((Range4D)obj).yMin == yMin &&
|
|
|
|
|
((Range4D)obj).zMin == zMin &&
|
|
|
|
|
((Range4D)obj).xMax == xMax &&
|
|
|
|
|
((Range4D)obj).yMax == yMax &&
|
|
|
|
|
((Range4D)obj).zMax == zMax &&
|
|
|
|
|
((Range4D)obj).dimensionId == dimensionId;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public int hashCode()
|
|
|
|
|
{
|
|
|
|
|
int code = 1;
|
|
|
|
|
code = 31 * code + xMin;
|
|
|
|
|
code = 31 * code + yMin;
|
|
|
|
|
code = 31 * code + zMin;
|
|
|
|
|
code = 31 * code + xMax;
|
|
|
|
|
code = 31 * code + yMax;
|
|
|
|
|
code = 31 * code + zMax;
|
|
|
|
|
code = 31 * code + dimensionId;
|
|
|
|
|
return code;
|
|
|
|
|
}
|
|
|
|
|
}
|