Как мне редактировать файлы классов модов Minecraft?

Я пытаюсь отредактировать одну строку в моде Pam’s Harvestcraft. Причина в том, что в игре эти «сады» внутри мода появляются слишком часто. Для этого мода есть файл конфигурации, однако минимально возможное значение для редкости = 1 все еще слишком велико. Эта редкость — int, и я хочу изменить его на float внутри файла .class jar этого мода, чтобы я мог использовать 0,5 или что-то меньшее, чем 1, чтобы уменьшить вероятность появления этих садов.

Я копирую и вставляю файл .class в intelliJ, но он доступен только для чтения. Написание собственного текстового файла и изменение расширения на .class, очевидно, повреждают файл.

Последний час я пытался найти ответ в Google. Люди говорят, что вам, возможно, потребуется настроить среду моддинга, декомпилировать код, а затем перекомпилировать его после изменений. Это кажется слишком длинным для простой строки редактирования кода.

Изменить: я еще не понял этого. Кое-что добавить: я загрузил этот редактор файлов классов http://dirty-joe.com/, он позволяет мне редактировать поле с int, чтобы оно было плавающим. Однако с этим есть 2 проблемы;

1, мне также нужно отредактировать метод, который getInt () для getFloat (), что я не могу сделать.

2, Когда я сохраняю недавно отредактированный файл класса, затем пытаюсь снова открыть его с помощью этого редактора JOE, ЭТО ВЫДАЕТ МНЕ ОШИБКУ ФАЙЛА. Это показало мне, что если я отредактирую файл класса, он все равно его повредит.


Технически вы можете это сделать, но это будет неприятно. Если бы это было просто изменение переменной, это могло бы быть просто, но теперь вы также говорите об изменении типа поля.

Есть несколько способов сделать это, и я не вижу один из них указан, поэтому я упомяну об этом.

Во-первых, вы можете декомпилировать/перекомпилировать. Я пробовал делать это однажды раньше, и это действительно не работает. В результате перекомпиляции возникло множество ошибок, потому что это не будет полностью точной декомпиляцией.

Второй вариант, и он был бы самым простым, если бы не нужно было изменять тип поля, редактирует машинный код. Java компилируется в ассемблерный код, который специально используется JVM. Вы найдете инструкцию, измените значение, и вы станете золотым. (Я говорю самый простой, но если вы никогда раньше не видели сборки, для вас все будет похоже на греческое.)

Вернемся к проблеме: вы говорите об изменении типа данных. Этого будет недостаточно. Вам нужно будет изменить не только тип данных, но и каждое место , где используется этот тип данных и вызывается его метод get . Каждое место, которое вызывается геттером, ожидает возвращаемого значения типа int. Если это float , переходящий в int , он будет автоматически преобразован в int .

Вот как бы вы это сделали, но на самом деле это не стоит вашего времени. Просто попросите разработчика сделать для вас обновление. Фактически, если это мод, о котором вы говорите, он уже имеет открытый исходный код, и вы можете вносить изменения самостоятельно.


Отправьте запрос или запрос на включение на странице HarvestCraft на GitHub.

Кроме того, вы можете скачать исходный код оттуда, внести изменения и скомпилировать версию, которую вы можете использовать для себя. Для этого вам, конечно же, придется настроить среду разработки Forge, но это тоже не так сложно:

  1. Перейдите на страницу загрузки Forge
  2. Загрузите MDK для соответствующей версии Minecraft.
  3. Разархивируйте в каталог
  4. Запустите gradlew setupDecompWorkspace и gradlew setupEclipse из командной строки в этом каталоге
  5. Загрузите и установите Eclipse
  6. Добавьте каталог src HarvestCraft в каталог src Forge (так что содержимое одного попадает в другой Forge/src/java , а не Forge/src/src/java ).
  7. Запустите Eclipse, скажите ему открыть существующее рабочее пространство, укажите его там, где вы установили Forge.
  8. Внесите изменения
  9. Запустите gradlew build
  10. Получите результирующую банку из Forge/builds/lib
Оцените статью
Gamicon.ru
Добавить комментарий