Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Вызов приватных переменных в моде из ванильки

Тема в разделе "Управление сервером Bukkit", создана пользователем Firkys, 29 мар 2015.

  1. Автор темы
    Firkys

    Firkys Активный участник Пользователь

    Баллы:
    88
    Skype:
    Firkys
    Имя в Minecraft:
    Firkys
    После декомпиляции некоторых модов всегда натыкаюсь на такие вещи, как вызов приватной функции/переменой в моде из ванильного майна.

    И вот сегодня закончив работать с модом witchery, решил задать вопрос тут.
    Лично иду нубским способом, а точнее прямо в лоб... юзаю рефлексию.
    1. GenericEvents.java (MOD)
    [​IMG]
    2. GenericEvents.java (MOD)
    [​IMG]
    3. Проверяем видимость переменных в самой ванильке
    [​IMG]
    4.
    [​IMG]
    Как видим в классах самого майна, они реально имеют приватную видимость. Сама суть темы...
    1. Почему автор мода пытается изменить поля к которым нет доступа?​
    2. Почему не происходит краш в самой игре при обращении к ним?​
    3. (gradlew) Каким образом можно собрать мод, игнорируя ошибки о видимости, также не происходил краш при обращении?​
    При грамотном ответе на вопросы готов денежно отблагодарить.

     
  2. Хостинг MineCraft
    <
  3. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    1. Потому что в какой-то версии MCP/Forge Они были доступны, ищите нужную
    2. По той причине что фордж делает эти поля публичными для обратной совместимости.
    3. А вот хз, скорее всего нужно просто найти нужную версию MCP/Forge.
     
  4. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Уже обсуждалось, в байткоде игнорируется приват и все равно вызывается. Так что смело выставляй паблик и собирай.
     
  5. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Ничего подобного. Если бы было так, то JVM успешно выбросила бы исключение. Просто в конфигах AccessTransformer'а указаны нужные поля и методы для выставления публичного доступа (в байткоде меняются флаги доступа).
     

Поделиться этой страницей