import java.util.ArrayList;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
public class Vec3Modded {
public static double Vec3Moded(EntityLivingBase viewEntity, float tick, double traceDistance) {
return Vec3Moded(viewEntity, viewEntity.getPosition(tick), tick, traceDistance, 0, 0.0D);
}
private static double Vec3Moded(EntityLivingBase viewEntity, Vec3 startPosition, float tick, double traceDistance, int count, double offset) {
if ((count++ <= 20) && (traceDistance - offset > 0.0D)) {
Vec3 vec31 = viewEntity.getLook(tick);
Vec3 vec32 = startPosition.addVector(vec31.xCoord * (traceDistance - offset), vec31.yCoord * (traceDistance - offset), vec31.zCoord * (traceDistance - offset));
MovingObjectPosition objectMouseOver = viewEntity.worldObj.rayTraceBlocks(startPosition, vec32);
if (objectMouseOver != null) {
Block block = viewEntity.worldObj.getBlock(objectMouseOver.blockX, objectMouseOver.blockY, objectMouseOver.blockZ);
if (block != null) {
if (block.getClass().getName().contains("BlockFrame")) {
return objectMouseOver.hitVec.distanceTo(viewEntity.getPosition(tick));
}
if (!block.getMaterial().isOpaque()) {
return Vec3Moded(viewEntity, objectMouseOver.hitVec.addVector(vec31.xCoord, vec31.yCoord, vec31.zCoord), tick, traceDistance, count, objectMouseOver.hitVec.distanceTo(startPosition));
}
return objectMouseOver.hitVec.distanceTo(viewEntity.getPosition(tick));
}
}
return traceDistance;
}
return traceDistance;
}
public static EntityItem getEntityItem(double parDistance, float tick) {
try {
EntityLivingBase viewEntity = Minecraft.getMinecraft().renderViewEntity;
parDistance = Vec3Moded(viewEntity, tick, parDistance);
EntityItem toReturn = null;
double closest = parDistance;
Vec3 playerPosition;
Vec3 lookFarCoord;
if (viewEntity != null) {
World worldObj = viewEntity.worldObj;
MovingObjectPosition objectMouseOver = viewEntity.rayTrace(parDistance, 0.5F);
playerPosition = viewEntity.getPosition(1.0F);
if (objectMouseOver != null) {
parDistance = Vec3Moded(viewEntity, tick, parDistance);
}
Vec3 dirVec = viewEntity.getLookVec();
lookFarCoord = playerPosition.addVector(dirVec.xCoord * parDistance, dirVec.yCoord * parDistance, dirVec.zCoord * parDistance);
ArrayList<EntityItem> a = new ArrayList(worldObj.getEntitiesWithinAABB(EntityItem.class, viewEntity.boundingBox.copy().addCoord(dirVec.xCoord * parDistance, dirVec.yCoord * parDistance, dirVec.zCoord * parDistance)));
for (EntityItem targettedEntity : a) {
if (targettedEntity != null) {
double precheck = viewEntity.getDistanceToEntity(targettedEntity);
MovingObjectPosition mopElIntercept = targettedEntity.boundingBox.calculateIntercept(playerPosition, lookFarCoord);
if ((mopElIntercept != null) && (precheck < closest)) {
toReturn = targettedEntity;
closest = precheck;
}
}
}
}
if (toReturn != null) {
return toReturn;
}
} catch (Throwable localThrowable) {}
return null;
}
public static Entity getEntity(double parDistance, float tick) {
try {
EntityLivingBase viewEntity = Minecraft.getMinecraft().renderViewEntity;
parDistance = Vec3Moded(viewEntity, tick, parDistance);
Entity toReturn = null;
double closest = parDistance;
Vec3 playerPosition;
Vec3 lookFarCoord;
if (viewEntity != null) {
World worldObj = viewEntity.worldObj;
MovingObjectPosition objectMouseOver = viewEntity.rayTrace(parDistance, 0.5F);
playerPosition = viewEntity.getPosition(1.0F);
if (objectMouseOver != null) {
parDistance = Vec3Moded(viewEntity, tick, parDistance);
}
Vec3 dirVec = viewEntity.getLookVec();
lookFarCoord = playerPosition.addVector(dirVec.xCoord * parDistance, dirVec.yCoord * parDistance, dirVec.zCoord * parDistance);
ArrayList<Entity> a = new ArrayList(worldObj.getEntitiesWithinAABB(EntityItem.class, viewEntity.boundingBox.copy().addCoord(dirVec.xCoord * parDistance, dirVec.yCoord * parDistance, dirVec.zCoord * parDistance)));
for (Entity targettedEntity : a) {
if (targettedEntity != null) {
double precheck = viewEntity.getDistanceToEntity(targettedEntity);
MovingObjectPosition mopElIntercept = targettedEntity.boundingBox.calculateIntercept(playerPosition, lookFarCoord);
if ((mopElIntercept != null) && (precheck < closest)) {
toReturn = targettedEntity;
closest = precheck;
}
}
}
}
if (toReturn != null) {
return toReturn;
}
} catch (Throwable localThrowable) {}
return null;
}
}