blob: 778d9e57cb1d117a567f7baf191fecd5a2c364e4 [file] [log] [blame] [raw]
package com.legacy.aether.client.renders;
import java.util.List;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.EntityRenderer;
import net.minecraft.client.resources.IResourceManager;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItemFrame;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import com.legacy.aether.items.tools.ItemValkyrieTool;
import cpw.mods.fml.common.ObfuscationReflectionHelper;
public class AetherEntityRenderer extends EntityRenderer {
private Entity pointedEntity;
private final Minecraft mc;
private final EntityRenderer previous;
public AetherEntityRenderer(Minecraft mc, EntityRenderer previous, IResourceManager manager) {
super(mc, manager);
this.mc = mc;
this.previous = previous;
ObfuscationReflectionHelper.setPrivateValue(EntityRenderer.class, this, new AetherItemRenderer(mc), 7);
}
@Override
public void getMouseOver(float p_78473_1_) {
if (this.mc.renderViewEntity != null) {
if (this.mc.theWorld != null) {
ItemStack stack = this.mc.thePlayer.getCurrentEquippedItem();
if (stack == null || !(stack.getItem() instanceof ItemValkyrieTool)) {
this.previous.getMouseOver(p_78473_1_);
return;
}
this.mc.pointedEntity = null;
double d0 = 10.0D;
this.mc.objectMouseOver = this.mc.renderViewEntity.rayTrace(d0, p_78473_1_);
double d1 = d0;
Vec3 vec3 = this.mc.renderViewEntity.getPosition(p_78473_1_);
if (this.mc.playerController.extendedReach()) {
d0 = 6.0D;
d1 = 6.0D;
} else {
if (d0 > 3.0D) {
d1 = 3.0D;
}
d0 = d1;
}
if (this.mc.objectMouseOver != null) {
d1 = this.mc.objectMouseOver.hitVec.distanceTo(vec3);
}
Vec3 vec31 = this.mc.renderViewEntity.getLook(p_78473_1_);
Vec3 vec32 = vec3.addVector(vec31.xCoord * d0, vec31.yCoord * d0, vec31.zCoord * d0);
this.pointedEntity = null;
Vec3 vec33 = null;
float f1 = 1.0F;
List<?> list = this.mc.theWorld.getEntitiesWithinAABBExcludingEntity(this.mc.renderViewEntity, this.mc.renderViewEntity.boundingBox.addCoord(vec31.xCoord * d0, vec31.yCoord * d0, vec31.zCoord * d0).expand((double) f1, (double) f1, (double) f1));
double d2 = d1;
for (int i = 0; i < list.size(); ++i) {
Entity entity = (Entity) list.get(i);
if (entity.canBeCollidedWith()) {
float f2 = entity.getCollisionBorderSize();
AxisAlignedBB axisalignedbb = entity.boundingBox.expand((double) f2, (double) f2, (double) f2);
MovingObjectPosition movingobjectposition = axisalignedbb.calculateIntercept(vec3, vec32);
if (axisalignedbb.isVecInside(vec3)) {
if (0.0D < d2 || d2 == 0.0D) {
this.pointedEntity = entity;
vec33 = movingobjectposition == null ? vec3 : movingobjectposition.hitVec;
d2 = 0.0D;
}
} else if (movingobjectposition != null) {
double d3 = vec3.distanceTo(movingobjectposition.hitVec);
if (d3 < d2 || d2 == 0.0D) {
if (entity == this.mc.renderViewEntity.ridingEntity && !entity.canRiderInteract()) {
if (d2 == 0.0D) {
this.pointedEntity = entity;
vec33 = movingobjectposition.hitVec;
}
} else {
this.pointedEntity = entity;
vec33 = movingobjectposition.hitVec;
d2 = d3;
}
}
}
}
}
if (this.pointedEntity != null && (d2 < d1 || this.mc.objectMouseOver == null)) {
this.mc.objectMouseOver = new MovingObjectPosition(this.pointedEntity, vec33);
if (this.pointedEntity instanceof EntityLivingBase || this.pointedEntity instanceof EntityItemFrame) {
this.mc.pointedEntity = this.pointedEntity;
}
}
}
}
}
}