Гайд Получаем хп игрока на фантайме

  • Автор темы Автор темы TheXSVV
  • Дата начала Дата начала
да, сам в шоке


я все пофиксил, я понял из-за чего были траблы, спасибо за то что сделал хп
в программировании не любят людей, которые пишут "я пофиксил" не говоря о чём была проблема и её решение. Оставь её здесь, может быть ты не один такой)
 
Окей, давайте подумаем где хп может находиться. Для начала нужно найти его в самой игре. Заходим и видим что оно прямо перед носом:
Посмотреть вложение 269806

Теперь давайте подумаем как оно может рендерится?
1. Это может быть ArmorStand который телепортируется каждый раз когда игрок двигается
2. Это objective в scoreboard
Что ты нахрен несёшь? Скорборд это же табличка справа.
Объясню: у скорборда есть 3 типа отображения: list, sidebar (табличка справа), belowName (под ником игрока).
У большинства может появиться вопрос, откуда это всё? Метод getObjectiveDisplaySlot в классе net.minecraft.scoreboard.Scoreboard:
Посмотреть вложение 269807
Посмотреть вложение 269808

Окей, давайте проверять первый способ. Для каждой сущности (entity) есть свой класс рендера. Обычно, такие классы имеют название НазваниеСущности+"Renderer". Мы проверяем ArmorStand, поэтому ищем (Ctrl + Shift + N) класс с названием ArmorStandRenderer:
image.png

Неужели он есть, вот это я маг (нет)

Смотрим какие методы в нём есть и натыкаемся на метод canRenderName. Он возвращает true когда armorstand имеет customname. Хм, ну давайте заменим его тело на return false:
image.png


Применяем изменения (перезапуском клиента или hotswap'ом) и смотрим:
image.png


Над кейсами пропали надписи, а у игроков они остались. => делаем вывод, что это не armorstand.

Проверяем 2 догадку про scoreboard. Давайте получим scoreboard, если вы не знаете как то попробуйте перенести свои мысли на английский язык.
я хочу "получить scoreboard" -> "get scoreboard" -> "getScoreboard()". Ищем (Ctrl + Shift + F):
image.png


Так, получается, что мы может получить scoreboard имея world, а world можно получить из mc, который у нас есть. Окей, получили scoreboard, давайте посмотрим какие методы в нём есть и натыкаемся на getObjectivesForEntity (получи objectives для сущности (не знаю как правильнее перевести)).

Окей, пробуем. getObjectivesForEntity возвращает Map<ScoreObjective, Score>. Давайте перечислим их:
image.png

Теперь у нас есть два экземпляра: ScoreObjective и Score. Давайте посмотрим, что у них есть. Так, видим что у ScoreObjective есть getDisplayName(), а у Score есть getScorePoints(). Давайте выведим их:
image.png


Я так понимаю у большинства людей хп игрока используется очень много где (не только в таргетхуде), поэтому давайте менять переменную health у нашего target. Добавляйте это куда хотите, лично я добавлю это в килку:
Java:
Expand Collapse Copy
if (target != тгдд) {
            for (Map.Entry<ScoreObjective, Score> entry : mc.world.getScoreboard().getObjectivesForEntity(target.getName().getString()).entrySet()) {
                ScoreObjective objective = entry.getKey();
                Score score = entry.getValue();

                target.setHealth(score.getScorePoints());
            }
        }
В этой базе у меня нету таргет худа, поэтому я просто отрисую хп текстом:
image.png
достойно:seemsgood:
 
я сделал это добавил в таргетхуд и ауру но всеравно 1020 хп я и пытался сам вывести хп с скорборда но всеравно не получается
 
FIX:
Java:
Expand Collapse Copy
for (PlayerEntity playerEntity : mc.world.getPlayers()) {
                        for (Map.Entry<ScoreObjective, Score> entry : mc.world.getScoreboard().getObjectivesForEntity(playerEntity.getName().getString()).entrySet()) {
                            ScoreObjective objective = entry.getKey();
                            Score score = entry.getValue();

                            playerEntity.setHealth(score.getScorePoints());
                        }
                    }

куда это вставлять - думайте сами
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
FIX:
Java:
Expand Collapse Copy
for (PlayerEntity playerEntity : mc.world.getPlayers()) {
                        for (Map.Entry<ScoreObjective, Score> entry : mc.world.getScoreboard().getObjectivesForEntity(playerEntity.getName().getString()).entrySet()) {
                            ScoreObjective objective = entry.getKey();
                            Score score = entry.getValue();

                            playerEntity.setHealth(score.getScorePoints());
                        }
                    }

куда это вставлять - думайте сами
спасибо заработало но в тх всеравно 1020 хп но думаю уже не очень важно
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Окей, давайте подумаем где хп может находиться. Для начала нужно найти его в самой игре. Заходим и видим что оно прямо перед носом:
Посмотреть вложение 269806

Теперь давайте подумаем как оно может рендерится?
1. Это может быть ArmorStand который телепортируется каждый раз когда игрок двигается
2. Это objective в scoreboard
Что ты нахрен несёшь? Скорборд это же табличка справа.
Объясню: у скорборда есть 3 типа отображения: list, sidebar (табличка справа), belowName (под ником игрока).
У большинства может появиться вопрос, откуда это всё? Метод getObjectiveDisplaySlot в классе net.minecraft.scoreboard.Scoreboard:
Посмотреть вложение 269807
Посмотреть вложение 269808

Окей, давайте проверять первый способ. Для каждой сущности (entity) есть свой класс рендера. Обычно, такие классы имеют название НазваниеСущности+"Renderer". Мы проверяем ArmorStand, поэтому ищем (Ctrl + Shift + N) класс с названием ArmorStandRenderer:
image.png

Неужели он есть, вот это я маг (нет)

Смотрим какие методы в нём есть и натыкаемся на метод canRenderName. Он возвращает true когда armorstand имеет customname. Хм, ну давайте заменим его тело на return false:
image.png


Применяем изменения (перезапуском клиента или hotswap'ом) и смотрим:
image.png


Над кейсами пропали надписи, а у игроков они остались. => делаем вывод, что это не armorstand.

Проверяем 2 догадку про scoreboard. Давайте получим scoreboard, если вы не знаете как то попробуйте перенести свои мысли на английский язык.
я хочу "получить scoreboard" -> "get scoreboard" -> "getScoreboard()". Ищем (Ctrl + Shift + F):
image.png


Так, получается, что мы может получить scoreboard имея world, а world можно получить из mc, который у нас есть. Окей, получили scoreboard, давайте посмотрим какие методы в нём есть и натыкаемся на getObjectivesForEntity (получи objectives для сущности (не знаю как правильнее перевести)).

Окей, пробуем. getObjectivesForEntity возвращает Map<ScoreObjective, Score>. Давайте перечислим их:
image.png

Теперь у нас есть два экземпляра: ScoreObjective и Score. Давайте посмотрим, что у них есть. Так, видим что у ScoreObjective есть getDisplayName(), а у Score есть getScorePoints(). Давайте выведим их:
image.png


Я так понимаю у большинства людей хп игрока используется очень много где (не только в таргетхуде), поэтому давайте менять переменную health у нашего target. Добавляйте это куда хотите, лично я добавлю это в килку:
Java:
Expand Collapse Copy
if (target != тгдд) {
            for (Map.Entry<ScoreObjective, Score> entry : mc.world.getScoreboard().getObjectivesForEntity(target.getName().getString()).entrySet()) {
                ScoreObjective objective = entry.getKey();
                Score score = entry.getValue();

                target.setHealth(score.getScorePoints());
            }
        }
В этой базе у меня нету таргет худа, поэтому я просто отрисую хп текстом:
image.png
полезно
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
чтобы твой клиент (майнкрафт) получил хп ему должен отправить инфу об этом сервер. Ну они берут и меняют оригинальное хп на фейковое у себя на сервере
 
Назад
Сверху Снизу