Получение кастомного EntityItem

Версия Minecraft
1.7.10
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;   
    }
 
1,560
86
204
AustereTony написал(а):
Здравствуйте. Создал свой 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;   
    }

Так, увы, не получится. Используй ивенты или меняй классы
 
Сверху