[Reflection] Приведение объекта к наследнику его класса.

Версия Minecraft
1.8.9
212
0
Здаров, хлопцы.
У меня тут небольшие проблемки с рефлексией - нужно заменить private поле на его точную копию, но с другим типом (Я таким образом хочу изменить код одного из методов путем перегрузки).
Как это можно сделать? Желательно без дополнительных либ, регистрации, смс и проблем с джойказино.

Для борцов за честность - нет, не чит я пишу, а скорее античит. На сервере ребятки стали юзать F3+A и F3+T для того, что бы смотреть на игроков сквозь стены (Во время перезагрузки чанков можно увидеть игроков, летающих в пустоте)
 
Dahaka написал(а):
А что не получается?
Скопировать объект? Или присвоить?

Если бы все так было просто.
Как ты знаешь, простой кастинг не сработает. Он нормально работает только вниз, но если я воспользуюсь скобками и вызову метод, то вызовется не мой, а метод из первоначального класса. Вот я и думаю над способами: на ум приходит копирование и рефлексия, но ничего конкретного пока не придумал.
 
Было бы лучше пофиксить просвечивание игроков. В таком случае нужно заглянуть в класс дальности прорисовки игрока,понять и сделать по своему с нужными условиями.
Другой,более костыльный вариант- запретить сочетание этих клавиш.
Подводные камни:
1)Игроки будут двигать ползунок прорисовки в настройках,что вызовет тот же эффект.
Решение: разрешить двигать этот ползунок только в главном меню
Обход: перезаход в игру вызовет тот же эффект
Решение: затемнять экран пока чанки не загрузятся полностью
2)Будут включать мульти-кор загрузку чанков
Решение: П1
Обход: нет
 
Oldestkon написал(а):
антивх на стороне сервера.
Типо, если между игроком и игроком есть блоки, то не отправлять пакет им друг о друге?
 
Ребят, все не так сложно. Изменение дальности прорисовки происходит в меню - вы просто не успеете из него выйти, пока у вас подгружаются чанки. К тому же, перезаход на сервер ведет к респавну в хабе(Сервер, про который идет речь, посвящен мини играм). Вопрос в другом - я решил заменить класс Minecraft, на свой, наследующий от Minecraft. В своем классе я перегрузил метод перезагрузки чанков и смогу поставить таймаут или вообще запретить при нажатых клавишах. Но вот дилемма - я не смогу заменить статичное поле theMinecraft на объект своего класса, если я не инициализирую этот объект. Проблема в том, что при инициализации Minecraft требует объект, который очень проблематично получить самому, да и этот объект потом никуда не сохраняется.

Единственный, на мой взгляд, более или менее действенный способ - скопировать все поля из текущего объекта Minecraft и присвоить их значения новому объекту моего класса. Вот как это сделать? У меня есть идея циклом с помощью рефлексии перебрать все поля, но есть ли в этом способе подводные камни?

Я пока попробую этот метод, отпишу сюда о результатах.


Подводный камень стал огромной скалой - я не могу адекватно сделать инстанцию своего класса, так как у меня нет нужно для инициализации объекта.
Есть у кого нибудь идеи?
 
А разве инстанс майнкрафта получается не с помощью геттера Minecraft.getMinecraft()? Что, если заменять возвращаемый инстанс на свой?

Или бред сморозил? Я вообще не понимаю, про что идёт речь :D
 
Tuborg написал(а):
Есть у кого нибудь идеи?

Самое простое решение, если твоей целью стоит заменить логику какого-то метода - это взять хуклибу GloomyFolken, повесить хук в начало (с ReturnCondition.ALWAYS) нужного метода и полностью переписать его логику. Что делать с приватными полями он даже отвечал.
Либа лёгкая и, кмк, абсолютно точно стоит своего места, занимаемого в проекте. Если не хочешь получить спицу в ногу при собирании очередного велосипеда - велкам.
 
Oldestkon написал(а):
Самое простое решение, если твоей целью стоит заменить логику какого-то метода - это взять хуклибу GloomyFolken, повесить хук в начало (с ReturnCondition.ALWAYS) нужного метода и полностью переписать его логику. Что делать с приватными полями он даже отвечал.
Либа лёгкая и, кмк, абсолютно точно стоит своего места, занимаемого в проекте. Если не хочешь получить спицу в ногу при собирании очередного велосипеда - велкам.
Хук либа требует регистрацию и смс Tuborg просил без сторонних либ. Можно вручную asm'ом впихнуть.
 
Назад
Сверху