- 243
- 28
- 202
Здравствуйте. Создал свой EntityItem класс с наследованием оригинального, спавню в EntityWorldJoinEvent вместо оригинального EntityItem (хочу изменить способ подбора). Предмет появляется, всё нормально. В оверлее пытаюсь получить энтити предмета для отрисовки информации о нём и пр., но получаю оригинальный EntityItem вместо своего класса. Собственно как такое возможно и как это исправить?
Вот как получаю энтити предмета:
Вот как получаю энтити предмета:
Код:
public Entity getTargetedEntity(float partialTicks, double distance, boolean canBeCollidedWith) {
Entity pointedEntity = null;
MovingObjectPosition rayTrace = null;
if (this.mc.renderViewEntity != null) {
if (this.mc.theWorld != null) {
rayTrace = this.mc.renderViewEntity.rayTrace(distance, partialTicks);
Vec3 positionVec = this.mc.renderViewEntity.getPosition(partialTicks);
double distanceToVec3 = distance;
if (rayTrace != null) {
distanceToVec3 = rayTrace.hitVec.distanceTo(positionVec);
}
Vec3 lookVec = this.mc.renderViewEntity.getLook(partialTicks);
Vec3 posDistVec = positionVec.addVector(lookVec.xCoord * distance, lookVec.yCoord * distance, lookVec.zCoord * distance);
Vec3 tempVec = null;
double boxExpand = 1.0F;
List<Entity> entities = this.mc.theWorld.getEntitiesWithinAABBExcludingEntity(this.mc.renderViewEntity, this.mc.renderViewEntity.boundingBox.addCoord(lookVec.xCoord * distance, lookVec.yCoord * distance, lookVec.zCoord * distance).expand(boxExpand, boxExpand, boxExpand));
double vecInsideDist = distanceToVec3;
for (int i = 0; i < entities.size(); i++) {
Entity entity = entities.get(i);
if (!canBeCollidedWith || entity.canBeCollidedWith()) {
double borderSize = entity.getCollisionBorderSize();
AxisAlignedBB expEntityBox = entity.boundingBox.expand(borderSize, borderSize, borderSize);
MovingObjectPosition calculateInterceptPos = expEntityBox.calculateIntercept(positionVec, posDistVec);
if (expEntityBox.isVecInside(positionVec)) {
if (0.0D < vecInsideDist || vecInsideDist == 0.0D) {
pointedEntity = entity;
tempVec = calculateInterceptPos == null ? positionVec : calculateInterceptPos.hitVec;
vecInsideDist = 0.0D;
}
}
else if (calculateInterceptPos != null) {
double calcInterceptPosDist = positionVec.distanceTo(calculateInterceptPos.hitVec);
if (calcInterceptPosDist < vecInsideDist || vecInsideDist == 0.0D) {
if (entity == this.mc.renderViewEntity.ridingEntity && !entity.canRiderInteract()) {
if (vecInsideDist == 0.0D) {
pointedEntity = entity;
tempVec = calculateInterceptPos.hitVec;
}
}
else {
pointedEntity = entity;
tempVec = calculateInterceptPos.hitVec;
vecInsideDist = calcInterceptPosDist;
}
}
}
}
}
if (pointedEntity != null && (vecInsideDist < distanceToVec3 || rayTrace == null)) {
return pointedEntity;
}
}
}
return null;
}