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

PoC Life
Пользователь
Статус
Оффлайн
Регистрация
22 Авг 2022
Сообщения
324
Реакции[?]
47
Поинты[?]
37K
да, сам в шоке


я все пофиксил, я понял из-за чего были траблы, спасибо за то что сделал хп
в программировании не любят людей, которые пишут "я пофиксил" не говоря о чём была проблема и её решение. Оставь её здесь, может быть ты не один такой)
 
Начинающий
Статус
Онлайн
Регистрация
20 Июн 2022
Сообщения
100
Реакции[?]
0
Поинты[?]
0
Окей, давайте подумаем где хп может находиться. Для начала нужно найти его в самой игре. Заходим и видим что оно прямо перед носом:
Посмотреть вложение 269806

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

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

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

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


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


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

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


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

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

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


Я так понимаю у большинства людей хп игрока используется очень много где (не только в таргетхуде), поэтому давайте менять переменную health у нашего target. Добавляйте это куда хотите, лично я добавлю это в килку:
Java:
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());
            }
        }
В этой базе у меня нету таргет худа, поэтому я просто отрисую хп текстом:
достойно:seemsgood:
 
Начинающий
Статус
Оффлайн
Регистрация
15 Янв 2024
Сообщения
6
Реакции[?]
0
Поинты[?]
0
я сделал это добавил в таргетхуд и ауру но всеравно 1020 хп я и пытался сам вывести хп с скорборда но всеравно не получается
 
PoC Life
Пользователь
Статус
Оффлайн
Регистрация
22 Авг 2022
Сообщения
324
Реакции[?]
47
Поинты[?]
37K
FIX:
Java:
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());
                        }
                    }
куда это вставлять - думайте сами
 
Забаненный
Статус
Оффлайн
Регистрация
29 Дек 2023
Сообщения
138
Реакции[?]
1
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Начинающий
Статус
Оффлайн
Регистрация
15 Янв 2024
Сообщения
6
Реакции[?]
0
Поинты[?]
0
FIX:
Java:
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 хп но думаю уже не очень важно
 
Forge Api ;-;
Начинающий
Статус
Оффлайн
Регистрация
3 Май 2023
Сообщения
722
Реакции[?]
16
Поинты[?]
12K
Забаненный
Статус
Оффлайн
Регистрация
14 Фев 2023
Сообщения
70
Реакции[?]
0
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Окей, давайте подумаем где хп может находиться. Для начала нужно найти его в самой игре. Заходим и видим что оно прямо перед носом:
Посмотреть вложение 269806

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

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

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

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


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


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

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


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

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

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


Я так понимаю у большинства людей хп игрока используется очень много где (не только в таргетхуде), поэтому давайте менять переменную health у нашего target. Добавляйте это куда хотите, лично я добавлю это в килку:
Java:
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());
            }
        }
В этой базе у меня нету таргет худа, поэтому я просто отрисую хп текстом:
полезно
 
Начинающий
Статус
Оффлайн
Регистрация
15 Янв 2023
Сообщения
61
Реакции[?]
0
Поинты[?]
0
спасибо тебе бро (спастил) кому помочь дс terixyt нереклама
 
Последнее редактирование:
Новичок
Статус
Оффлайн
Регистрация
11 Фев 2024
Сообщения
1
Реакции[?]
0
Поинты[?]
0
Ахахахахахаахахх кто то реально будет так делать когда в майн есть команда playre.getHealht()
 
Забаненный
Статус
Оффлайн
Регистрация
29 Дек 2023
Сообщения
138
Реакции[?]
1
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
PoC Life
Пользователь
Статус
Оффлайн
Регистрация
22 Авг 2022
Сообщения
324
Реакции[?]
47
Поинты[?]
37K
Забаненный
Статус
Оффлайн
Регистрация
14 Фев 2023
Сообщения
70
Реакции[?]
0
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
PoC Life
Пользователь
Статус
Оффлайн
Регистрация
22 Авг 2022
Сообщения
324
Реакции[?]
47
Поинты[?]
37K
чтобы твой клиент (майнкрафт) получил хп ему должен отправить инфу об этом сервер. Ну они берут и меняют оригинальное хп на фейковое у себя на сервере
 
Начинающий
Статус
Оффлайн
Регистрация
13 Июн 2023
Сообщения
21
Реакции[?]
0
Поинты[?]
0
Как сделать все таки вместо 1020 нормально значение хп?
 
Сверху Снизу