Получение энтити

Версия Minecraft
1.12.2
1,470
19
189
Как получить энтити на которое направлено перекрестие игрока?
 
1,470
19
189
Выше код как бы. Ты вообще смотрел?
Пойми что за тебя здесь никто ничего делать не будет или за денежку иди ищи себе кодера.
Что бы ты знал, я это знаю. И знаю очень давно
 
1,470
19
189
Kotlin:
fun getMouseOver(partialTicks: Float, distance: Double, canBeCollidedWith: Boolean): Entity? {
        val mc = Minecraft.getMinecraft()
        var pointedEntity: Entity? = null
        var rayTrace: RayTraceResult?

        if(mc.renderViewEntity != null) {
            if(mc.world != null) {
                rayTrace = mc.renderViewEntity!!.rayTrace(distance, partialTicks)
                val positionVec = mc.renderViewEntity!!.positionVector
                var distanceToVec3 = distance

                if(rayTrace != null) {
                    distanceToVec3 = rayTrace.hitVec.distanceTo(positionVec)
                }

                val lookVec = mc.renderViewEntity!!.getLook(partialTicks)
                val posDistVec = positionVec.addVector(lookVec.x * distance, lookVec.y * distance, lookVec.z * distance)
                var tempVec: Vec3d? = null
                val boxExpand = 1.0
                val entities = mc.world.getEntitiesWithinAABBExcludingEntity(mc.renderViewEntity, mc.renderViewEntity!!.renderBoundingBox.expand(lookVec.x * distance, lookVec.y * distance, lookVec.z * distance).expand(boxExpand, boxExpand, boxExpand))
                var vecInsideDist = distanceToVec3

                for(i in entities.indices) {
                    val entity = entities[i]

                    if(!canBeCollidedWith || entity.canBeCollidedWith()) {
                        val borderSize = entity.collisionBorderSize.toDouble()
                        val expEntityBox = entity.renderBoundingBox.expand(borderSize, borderSize, borderSize)
                        val calculateInterceptPos = expEntityBox.calculateIntercept(positionVec, posDistVec)

                        if(expEntityBox.contains(positionVec)) {
                            if(0.0 < vecInsideDist || vecInsideDist == 0.0) {
                                pointedEntity = entity
                                tempVec = if(calculateInterceptPos == null) positionVec else calculateInterceptPos.hitVec
                                vecInsideDist = 0.0
                            }
                        } else if(calculateInterceptPos != null) {
                            val calcInterceptPosDist = positionVec.distanceTo(calculateInterceptPos.hitVec)

                            if(calcInterceptPosDist < vecInsideDist || vecInsideDist == 0.0) {
                                if(entity === mc.renderViewEntity!!.ridingEntity && !entity.canRiderInteract()) {
                                    if(vecInsideDist == 0.0) {
                                        pointedEntity = entity
                                        tempVec = calculateInterceptPos.hitVec
                                    }
                                } else {
                                    pointedEntity = entity
                                    tempVec = calculateInterceptPos.hitVec
                                    vecInsideDist = calcInterceptPosDist
                                }
                            }
                        }
                    }
                }

                if(pointedEntity != null && (vecInsideDist < distanceToVec3 || rayTrace == null)) {
                    return pointedEntity
                }
            }
        }
        return null
    }
Выдает всегда нул
@artemka3112, это не код?
 
1,470
19
189
Вышла вот такая хрень, которая возвращает нулл. Твой код не работает как надо.
Kotlin:
fun getVec3(viewEntity: Entity?, tick: Float, traceDistance: Double): Double {
        return getVec3(viewEntity, viewEntity!!.positionVector, tick, traceDistance, 0, 0.0)
    }

    private fun getVec3(viewEntity: Entity?, startPosition: Vec3d, tick: Float, traceDistance: Double, count: Int, offset: Double): Double {
        var count = count
        if(count++ <= 20 && traceDistance - offset > 0.0) {
            val vec31 = viewEntity!!.getLook(tick)
            val vec32 = startPosition.addVector(vec31.x * (traceDistance - offset), vec31.y * (traceDistance - offset), vec31.z * (traceDistance - offset))
            val objectMouseOver = viewEntity.world.rayTraceBlocks(startPosition, vec32)
            if(objectMouseOver != null) {
                val blockState = viewEntity.world.getBlockState(objectMouseOver.blockPos)
                val block = blockState.block
                if(block.javaClass.name.contains("BlockFrame")) {
                    return objectMouseOver.hitVec.distanceTo(viewEntity.positionVector)
                }
                return if(!block.getMaterial(blockState).isOpaque) {
                    getVec3(viewEntity, objectMouseOver.hitVec.addVector(vec31.x, vec31.y, vec31.z), tick, traceDistance, count, objectMouseOver.hitVec.distanceTo(startPosition))
                } else objectMouseOver.hitVec.distanceTo(viewEntity.positionVector)
            }
            return traceDistance
        }
        return traceDistance
    }

    fun getEntityItem(parDistance: Double, tick: Float): EntityItem? {
        var parDistance = parDistance
        try {
            var entity: EntityItem? = null
            val viewEntity = Minecraft.getMinecraft().renderViewEntity
            parDistance = getVec3(viewEntity, tick, parDistance)
            var closest = parDistance
            val playerPosition: Vec3d
            val lookFarCord: Vec3d
            if(viewEntity != null) {
                val worldObj = viewEntity.world
                val objectMouseOver = viewEntity.rayTrace(parDistance, 0.5f)
                playerPosition = viewEntity.positionVector
                if(objectMouseOver != null) {
                    parDistance = getVec3(viewEntity, tick, parDistance)
                }
                val dirVec = viewEntity.lookVec
                lookFarCord = playerPosition.addVector(dirVec.x * parDistance, dirVec.y * parDistance, dirVec.z * parDistance)
                val a = ArrayList(worldObj.getEntitiesWithinAABB(EntityItem::class.java, viewEntity.boundingBox.expand(dirVec.x * parDistance, dirVec.y * parDistance, dirVec.z * parDistance)))
                for(targetedEntity in a) {
                    if(targetedEntity != null) {
                        val precheck = viewEntity.getDistance(targetedEntity)
                        val mopElIntercept = targetedEntity.boundingBox.calculateIntercept(playerPosition, lookFarCord)
                        if(mopElIntercept != null && precheck < closest) {
                            entity = targetedEntity
                            closest = precheck.toDouble()
                        }
                    }
                }
            }
            if(entity != null) return entity
        } catch (localThrowable: Throwable) {
        }
        return null
    }
 

Icosider

Kotliner
Администратор
3,603
99
664
@Nix13, месье, не надо переходить на котлин если не знаете его. Код ужасен. А теперь по теме: В RendererManager есть переменная pointedEntity которая возвращает сущность на которую ты навёлся. Можно получить через mc.pointedEntity. Пробуй, должно работать.

Только на нулл не забудь проверить, так как может выбросить npe, если ты будешь где-то использовать данную переменную.
 
Сверху