import java.util.ArrayList;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
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 Vec3Modedd {
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 Return = 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))
{
Return = targettedEntity;
closest = precheck;
}
}
}
}
if (Return != null) {
return Return;
}
}
catch (Throwable localThrowable) {}
return null;
}
}