Получить самый дальний блок

32
4
Представим арену скай варс, вы дерётесь с каким-то человеком и у вас осталось 4 хп и у вас есть эндер перл. Я бы хотел чтобы направление куда смотрит игрок было на самый дальний блок. Вроде это легко, а я слишком туп
 
7,099
324
1,510
Берешь все чанки, которые знает клиент, берешь все BlockPos, в которых не воздух, берешь из них тот BlockPos, который максимально удален от игрока
 
7,099
324
1,510
Ну так имея коорды целевого блоки и коорды игрока можно получить вектор взгляда на блок
 
32
4
1. Как получить все чанки
2. Как получить все блоки
3. Как это из forge в версию запихать? (modcoderpack)
 
7,099
324
1,510
Как получить все чанки
Java:
Minecraft.getMinecraft().world.getChunkProvider().chunkMapping.values()
Как получить все блоки
Java:
List<BlockPos> poses = Minecraft.getMinecraft().world.getChunkProvider().chunkMapping.values().stream()
                .map(chunk -> new BlockPos(chunk.x << 4, 0, chunk.z << 4))
                .flatMap(firstChunkPos ->
                        IntStream.range(0, 16).mapToObj(x ->
                                IntStream.range(0, 16).mapToObj(z ->
                                        IntStream.range(0, 256).mapToObj(y ->
                                                firstChunkPos.add(x, y, z)
                                        )
                                ).flatMap(Function.identity())
                        ).flatMap(Function.identity())
                )
                .collect(Collectors.toList());
Можно оптимизировать, переписав на циклы+MutableBlockPos
Как это из forge в версию запихать? (modcoderpack)
При чем здесь это? Задай отдельный вопрос про портирование
 
32
4
Java:
public BlockPos getClosetBlock(List<BlockPos> poses) {
        if(poses.isEmpty()) {
            return null;
        }
        
        BlockPos block = null;
        double closetDistance = Double.MAX_VALUE;
        for(BlockPos pos : poses) {
            double dis = pos.distanceSq(pos);
            if(closetDistance > dis) {
                block = pos;
                closetDistance = dis;
            }
        }
        
        return block;
    }

Почему он показывает не самый дальний блок?
 
7,099
324
1,510
32
4
Closest, наверное. Этот код ищет ближайший блок, а не дальний. Сам писал или скопипастил со стаковерфлоу, даже не разобравшись?
Вот я тупой. Это я сам написал. Когда получается мне нужно заменить вместо > на <? Там где сравнение
 
Сверху