Исправления в Thermos

Версия Minecraft
1.7.10
355
2
17
Добро, в термосе есть такая тема, как встроенный авто-спам.
NetHandlerPlayServer 766 строка.

Собирать ядро по этому гиту моторно, слишком много зависимостей и погуглив уже информацию о сборе чую что там еще и ошибки сверху при сборке. Поэтому думал просто достать файл, декомпильнуть и поправить, но уж беда в том, что такого файла нет уже в самом ядре, да и большинства файлов ванилы, такие как EntityPlayer и прочие - тоже нет, как и обфусцированный вариантов а-ля abs, лишь парочка аналоговых лежит. Как такое фиксануть, более простым путём?
 
355
2
17
Была мысль, но хочется поподробнее разобрать как все-таки оно устроено, где же все эти классы с тем же EntityPlayerMP, а то к примеру плагины которые используют NMS не работают, т.к. не могут получить правильный getHandler. Мало ли возникнет необходимость править ядро в больших масштабах чем позволят трансформеры.
 

Icosider

Kotliner
Администратор
3,603
99
664
@Sunrise, потому что ядро патчит майновский сервер, вот и нету в самом ядре этих классов. Я в своё время пытался собрать термос, но поверь, если ты ранее не участвовал в его разработки, то либы недостающие будет найти нереально, а помимо либ, там ещё какая-то своя зависимость у ядра. Проще забить и хукнуться в нужный метод. Лично я использую миксины ими всё что угодно можно сделать в коде. Хоть внедрять модом баккит api.
 
355
2
17
Насколько я понял, Миксины это аналогия тех же трансформеров только по круче? Работает ли с Термос ядром 1.7.10?
И еще момент, раз он патчит майн, там на гите есть собственно сорсы эти патчей NetHandlerPlayServer, может есть какой-то вариант именно этот патч скомпилить? В ядре по логике это файлик binpatches.pack.lzma, но он запакован и без понятия как.
 
1,159
38
544

Icosider

Kotliner
Администратор
3,603
99
664
Миксины это аналогия тех же трансформеров только по круче
Не аналогия, а вообще там и используется форджевский трансформер.
Работает ли с Термос ядром 1.7.10?
Да, сам лично ими модифицирую ядро, проблем не возникало
И еще момент, раз он патчит майн, там на гите есть собственно сорсы эти патчей NetHandlerPlayServer, может есть какой-то вариант именно этот патч скомпилить?
Хз, проще миксинами это сделать, чем с патчами возиться, да и патчи сами по себе зло от которого лучше избавиться
В ядре по логике это файлик binpatches.pack.lzma, но он запакован и без понятия как.
Эм, тем же 7-zip

миксины разве работают под 1.7.10?
А почему не должны? Трансформер не менялся со времён 1.7 и по сей день

Аннотация 2020-04-25 150219.png
 
355
2
17
Ну там внутри собственно binpatches.pack, а эта срань уже просто так не открывается.

Можешь дать краткий инструктаж по его настройке и примером изменения куска с if()?
А то в тех доках можно на неделю влипнуть, а решение нужно плюс-минус срочным.

Он ставится как отдельный проект и подключается к граблям с модом, или наоборот?

P.S.
Еще и через их доки попал на Minecraft Development, что-то интересное, работал кто с этим плагином?
 

Icosider

Kotliner
Администратор
3,603
99
664
что-то интересное, работал кто с этим плагином?
У меня данный плагин. Особой пользы от него не вижу.
Он ставится как отдельный проект и подключается к граблям с модом, или наоборот?
Делаешь зависимость, даёшь ему ссылки на srg файлы через процессор аннотаций(в граблях такая штука есть) и указываешь сам конфиг миксинов из проекта. Собираешь, на выходе забираешь в джарник refmap файл.
Можешь дать краткий инструктаж по его настройке и примером изменения куска с if()?
Я не знаю, что ты конкретно хочешь, но у миксина есть аннотации Inject, Replace(очень удобная штука), Overrwrite. Есть ещё и другие крутые аннотации, но они не столь нужны будут для решения данной задачи. Доки простые, буквально на пару часиков, но там лишь малая часть того, что миксины умеют
 
355
2
17
Я не знаю, что ты конкретно хочешь

Вырезать из NetHandlerPlayerServer в методе processChatMessage кусочек кода

Java:
if (chatSpamField.addAndGet(this, 20) > 200 && !this.serverController.getConfigurationManager().func_152596_g(this.playerEntity.getGameProfile()))
{
    this.kickPlayerFromServer("disconnect.spam");
    if (p_147354_1_.hasPriority())
    {
        Waitable waitable = new Waitable()
        {
            
            @Override
            protected Object evaluate()
            {
                NetHandlerPlayServer.this.kickPlayerFromServer("disconnect.spam");
                return null;
            }
        };
        
        this.serverController.processQueue.add(waitable);

        try
        {
            waitable.get();
        } catch (InterruptedException e)
        {
               Thread.currentThread().interrupt();
        } catch (ExecutionException e)
        {
            throw new RuntimeException(e);
        }
    } else
    {
        this.kickPlayerFromServer("disconnect.spam");
    }
}

Этот кусочек вставляется патчем, поэтому нужно чтобы уже после патча произошла вырезка этой срани.

В Idea работает обычный импорт проекта, или использовать тот плагин? А то в доке как раз про плагин написано для Idea.
 

Icosider

Kotliner
Администратор
3,603
99
664
1. Ну попробуй миксинами пробиться, на счёт ифа не знаю, в доках вроде было
2. Миксины сработают уже после патчей, ибо в начале всё патчится, а потом только "выдаётся" доступ трансформерам
3. Плагин работает только для новых версий, на старых без плагина
 

Icosider

Kotliner
Администратор
3,603
99
664
Лови мой скрипт сборки:
Gradle (Groovy):
def outSrgFile = "$buildDir/outSrg.srg"
def outRefMapFile = "$buildDir/mixin.modid.refmap.json"

minecraft {
    version = "1.7.10-10.13.4.1614-1.7.10"
    runDir = "run"
}

configurations {
    shade
    compile.extendsFrom(shade)
}

repositories {
    mavenCentral()
    maven {
        name = "Spongepowered"
        url = "https://repo.spongepowered.org/maven"
    }
}

dependencies {
    shade "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.71"
    shade "org.jetbrains.kotlin:kotlin-reflect:1.3.71"

    shade('org.spongepowered:mixin:0.7.11-SNAPSHOT') {
        exclude module: 'launchwrapper'
        exclude module: 'guava'
        exclude module: 'gson'
        exclude module: 'commons-io'
        exclude module: 'commons-codec'
        exclude module: 'asm-commons'
    }
}

jar {
    destinationDir = file("$rootDir/compiled")
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE

    from outRefMapFile;
    exclude "net/minecraft/**"

    manifest.attributes(
            'FMLCorePlugin': 'yourmodname.common.mixin.MixinLoader',
            'FMLCorePluginContainsFMLMod': 'true',
            'ForceLoadAsMod': 'true',
            'MixinConfigs': 'mixin.modid.json',
            'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker',
            'TweakOrder': 0
    )

    configurations.shade.each { dep ->
        from(project.zipTree(dep))
    }
}

afterEvaluate {
    tasks.compileJava.options.compilerArgs += [
            "-AreobfSrgFile=${tasks.reobf.srg}",
            "-AoutSrgFile=${outSrgFile}",
            "-AoutRefMapFile=${outRefMapFile}"
    ]
}
reobf {
    addExtraSrgFile outSrgFile
}
 
355
2
17
Делаешь зависимость, даёшь ему ссылки на srg файлы через процессор аннотаций(в граблях такая штука есть) и указываешь сам конфиг миксинов из проекта. Собираешь, на выходе забираешь в джарник refmap файл.

Перечитываю сотый раз, сложный контент.

Какую и где конкретно зависимость? В конфиге граблей или просто как модуль новый?
Srg файлы это которые с mcp? joined.srg?
Процессор аннотаций? Я сегодня только впервые узнал о Миксине..)

example который там в src какой-то вообще не example.
 
355
2
17
Это конечно спасибо, но тут явно без парочки чашек кофе не разобраться.
Хотя я даже нашел некий пример Git
Осталось понять, как прикрутить его и собрать, а то доки миксина говной воняют, вместо краткого примера - картинки логики
 
355
2
17
Погоди-ка, те сорсы которые на гите микса, это для того чтобы просто собрать эти вот файлы?

1587821204382.png

И их уже использовать как зависимости в моде? Модифицируя свой gradle.build под твой?
А в саму папку модов потом подкидывать в mods? Или чет я где-то не так понял?
 

Icosider

Kotliner
Администратор
3,603
99
664
Я тебе скинул скрипт сборки граблей уже готовый, кидаешь всё от миксина к себе в скрипт или берёшь мой, запускаешь проект и начинаешь писать свои миксины, всё. Что непонятного?))
 
355
2
17
Мне сама развертка этого всего не понятна, если просто закинуть твой скрипт в билд оно его даже не проинициализирует:

Could not find method minecraft() for arguments [build_5zv2jrde6yu9o3ii95e6xh0qf$_run_closure1@236ef907] on root project 'MixinThermos' of type org.gradle.api.Project.

Оно и не удивительно, нужно ведь понять откуда ноги то растут, конфиг самого микса то собственно тоже нужно достать откуда-то, в гите о нём не вижу ничего
 

Icosider

Kotliner
Администратор
3,603
99
664
Потому что я не полный скрипт скинул, ты должен как в mdk указать buildscript блок, minecraft блок и т.п. Проще нужными частями взять из моего скрипта и закинуть к себе, чем бездумно копировать и вставлять.
 
355
2
17
Ну тобишь принцип развертки как я описал выше? Мне нужно подключить к своему ForgeGradle проекту эти джарники как зависимости, настроить в gradle.build по аналогии твоего скрипта. Верно?

Остается только понять откуда брать актуальный srg и mixin.json файлы
 
Сверху