package org.halvors.electrometrics.common.util.location; import cpw.mods.fml.common.FMLCommonHandler; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import org.halvors.electrometrics.common.tile.TileEntity; public class Range { private int dimensionId; private int minX; private int minY; private int minZ; private int maxX; private int maxY; private int maxZ; public Range(int minX, int minY, int minZ, int maxX, int maxY, int maxZ, int dimensionId) { this.dimensionId = dimensionId; this.minX = minX; this.minY = minY; this.minZ = minZ; this.maxX = maxX; this.maxY = maxY; this.maxZ = maxZ; } public Range(Chunk chunk) { this.dimensionId = chunk.getDimensionId(); this.minX = chunk.getX() * 16; this.minY = 0; this.minZ = chunk.getZ() * 16; this.maxX = minX + 16; this.maxY = 255; this.maxZ = minZ + 16; } public Range(Location location) { this.dimensionId = location.getDimensionId(); this.minX = location.getX(); this.minY = location.getY(); this.minZ = location.getZ(); this.maxX = location.getX() + 1; this.maxY = location.getY() + 1; this.maxZ = location.getZ() + 1; } public Range(Entity entity) { this(new Location(entity)); } public Range(TileEntity tileEntity) { this(new Location(tileEntity)); } public static Range getChunkRange(EntityPlayer player) { int radius = FMLCommonHandler.instance().getMinecraftServerInstance().getConfigurationManager().getViewDistance(); return new Range(new Chunk(player)).expandChunks(radius); } public Range expandChunks(int chunks) { this.minX -= chunks * 16; this.maxX += chunks * 16; this.minZ -= chunks * 16; this.maxZ += chunks * 16; return this; } public boolean intersects(Range range) { return (maxX + 1 - 1.E-05D > range.minX) && (range.maxX + 1 - 1.E-05D > minX) && (maxY + 1 - 1.E-05D > range.minY) && (range.maxY + 1 - 1.E-05D > minY) && (maxZ + 1 - 1.E-05D > range.minZ) && (range.maxZ + 1 - 1.E-05D > minZ); } public int getDimensionId() { return dimensionId; } public int getMinX() { return minX; } public int getMinY() { return minY; } public int getMinZ() { return minZ; } public int getMaxX() { return maxX; } public int getMaxY() { return maxY; } public int getMaxZ() { return maxZ; } @Override public boolean equals(Object object) { if (object instanceof Range) { Range range = (Range) object; return range.minX == minX && range.minY == minY && range.minZ == minZ && range.maxX == maxX && range.maxY == maxY && range.maxZ == maxZ && range.dimensionId == dimensionId; } return false; } }