Миксины для Чайников! Практика.

Миксины для Чайников! Практика.

Sainthozier

Стрелочник
623
11
369
Maven repo? Давно уже к этому шло, ещё с начала осени, если не ошибаюсь, многие перешли на зеркало.
Можешь юзать https://dist.creeper.host/Sponge/maven.
 

will0376

Токсичная личность
2,058
55
572
может кто хелпануть? собрал проект(миксины, вырезалка, пакетка и етк.) - не генерируется рефмапа. Без неё отваливаются все миксины

АПД:
 
Последнее редактирование:

Sainthozier

Стрелочник
623
11
369
Там разраб негодует, что сейчас многие юзают direct-ссылку на репу creeperhost'a, поэтому говорит юзать эту: https://repo.spongepowered.org/repository/maven-public/. Старая теперь тоже работает, но вроде бы выступает только редиректом на новую. Я не тестил.
 
4,045
63
645
Итак, вы собрали джарник, закинули в папку mods, но игра не запускается и в логах написано
Unable to launch java.lang.ClassNotFoundException: org.spongepowered.asm.launch.MixinTweaker?
А что делать, если всё работало в среде, собралось, в джарнике появились два жисона и та самая заветная строчка в манифесте, но собранный мод всё равно открывается без миксинов и хуки не работают даже если положить миксины в папку mods?
 

GoogleTan

Картошка :3
1,354
43
310
Продолжаю битву с миксинами! Версия майна 1.15.2.
1. у меня есть миксин в блок, он добавляет проперти и все работает, но если я проперти вынесу в соседний файл то все падает с
java.lang.NoClassDefFoundError: Could not initialize class net.minecraft.block.Blocks at net.minecraft.item.Items.<clinit>(Items.java:17)
2. Как зашадовить методы, определенные в классе-родителе класса, куда я хукаюсь?

build.gradle:
buildscript {
    repositories {
        maven { url = 'https://files.minecraftforge.net/maven' }
        jcenter()
        mavenCentral()
        maven {
            name = 'sponge'
            url = 'https://repo.spongepowered.org/maven'
        }
    }
    dependencies {
        classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true
        classpath 'org.spongepowered:mixingradle:0.6-SNAPSHOT'
    }
}

apply plugin: 'net.minecraftforge.gradle'

group = 'ru.googletan'
version = '0.0.1A'
archivesBaseName = 'lavalogging'

sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8'

minecraft {
    mappings channel: 'stable', version: '60-1.15'

    accessTransformer = file('src/main/resources/META-INF/lavalogging_at.cfg')
    runs {
        client {
            workingDirectory project.file('run')
            property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
            property 'forge.logging.console.level', 'debug'

            mods {
                lavalocking {
                    source sourceSets.main
                }
            }
        }

        server {
            workingDirectory project.file('run')
            property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
            property 'forge.logging.console.level', 'debug'

            mods { lavalocking {source sourceSets.main } }
        }

        data
        {
            workingDirectory project.file('run')
            property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
            property 'forge.logging.console.level', 'debug'
            args '--mod', 'lavalogging', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')

            mods { lavalocking { source sourceSets.main } }
        }
    }
}

sourceSets.main.resources { srcDir 'src/generated/resources' }

dependencies
{
    minecraft 'net.minecraftforge:forge:1.15.2-31.2.50'
    compile fileTree("./lib/")
}

// Example for how to get properties into the manifest for reading by the runtime..
jar {
    manifest {
        attributes([
                "Specification-Title"     : "lavalocking",
                "Specification-Vendor"    : "GoogleTan",
                "Specification-Version"   : "1", // We are version 1 of ourselves
                "Implementation-Title"    : project.name,
                "Implementation-Version"  : project.version,
                "Implementation-Vendor"   : "GoogleTan",
                "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
        ])
    }
}

jar.finalizedBy('reobfJar')

sourceSets { main { ext.refMap = 'mixins.lavalogging.refmap.json'} }

jar {
    manifest {
        attributes 'FMLAT': 'lavalogging_at.cfg'
    }
    manifest.attributes(
            'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker',
            'MixinConfigs': 'mixins.lavalogging.json',
            'FMLCorePluginContainsFMLMod': 'true',
            'ForceLoadAsMod': 'true',
    )
}
 
Последнее редактирование:

GoogleTan

Картошка :3
1,354
43
310
[Как зашадовить методы], (определенные в классе-родителе класса, (куда я хукаюсь))? (кудя я хукаюсь), относится к слову "класса".
унаследоваться
От класса, куда я хукаюсь, или от родителя?
1. Что за пропертисы?
Java:
net.minecraft.state.BooleanProperty
 
154
17
96
@GoogleTan Проверь, чтобы в пакете твоих миксинов были только миксины. Все вспомогательные классы и интерфейсы нужно выносить за него, ибо он и все вложенные пакеты убираются из classpath при запуске.
Зашадовить методы класса родителя не получится, если они переопределены в таргет классе. В ином случае ровно так же, как и обычные методы. Если нужно использовать родительский метод, можно сделать миксин абстрактным (и в большинстве случаев это следует делать всегда), унаследоваться от родителя и в нужном месте использовать super.

А вообще чето я ожил, скоро обновление закачу. Тем более что в последние версии форжа 1.15 и 1.16 НАКОНЕЦ ТО добавили миксины в основную либу, так что грех их не использовать!!!
 

GoogleTan

Картошка :3
1,354
43
310
Погоди, они теперь в фордже?
 
154
17
96
Да, начиная с версии Forge 1.15.2-31.2.44+ и 1.16.1-32.0.72+ вроде бы. Еще не пробовал, но вероятно не нужно будет танцев с бубном больше
 
154
17
96
GlassSpirit обновил(а) ресурс Миксины для Чайников! Практика. новой записью:

Обновление JustMixins и примеров SweetMixin

Обновлены JustMixins и примеры SweetMixin, добавлен пример для 1.15+ (использование форка FG 1.2 для 1.7.10, FG 4+ для 1.12 и 1.15, миксины обновлены до версии 0.8.3).
Отполированы разделы настройки среды и сборки мода.
Подготовка к написанию отдельной теоретической части по работе миксинов.

Узнать больше об этом обновлении...
 
154
17
96
А вообще, нужно кому перевод и адаптация официальной документации?
Там вообще много всего интересного: как работают миксины изнутри, как справляются с обфускацией, с наложением методов.
Да и описание большинства доступных функций можно из явадоков перетащить в теорию, с описанием как и где их можно использовать...
Делать теоретическую часть короче или нет?
 

GoogleTan

Картошка :3
1,354
43
310
Посмотри как миксины подключает minecraft dev. Там не надо каждый раз вставлять в конфигурацию запуска строку.
 
27
1
2
Нужна хелпа с установкой Gradle. Делаю мод на 1.7.10, скачал файлы с репозитория JustMixins/SweetMixin_Forge_1_7_10 at master · GlassSpirit/JustMixins. Попробовал импортнуть проект в Idea, почему-то он качал только Gradle 2.6. Удалил папку с градлом и скачать через коммандную строку gradlew.bat wrapper --gradle-version 2.8. Почему-то в обоих случаю вылезает одно и тоже:
Лог.:
* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating root project 'gothicgamemod'.
        at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:93)
        at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl$1.run(DefaultScriptPluginFactory.java:148)
        at org.gradle.configuration.ProjectScriptTarget.addConfiguration(ProjectScriptTarget.java:72)
        at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:153)
        at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:38)
        at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:25)
        at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:55)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:499)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:86)
        at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:42)
        at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:35)
        at org.gradle.initialization.DefaultGradleLauncher$2.run(DefaultGradleLauncher.java:125)
        at org.gradle.internal.Factories$1.create(Factories.java:22)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:122)
        at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
        at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
        at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:77)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:47)
        at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51)
        at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28)
        at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43)
        at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:170)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
        at org.gradle.launcher.Main.doAction(Main.java:33)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
        at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:35)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:108)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:63)
Caused by: java.lang.NoSuchMethodError: org.gradle.api.Project.findProperty(Ljava/lang/String;)Ljava/lang/Object;
        at net.minecraftforge.gradle.ProjectUtils.getBooleanProperty(ProjectUtils.java:10)
        at net.minecraftforge.gradle.user.UserBasePlugin.applyPlugin(UserBasePlugin.java:65)
        at net.minecraftforge.gradle.user.patch.UserPatchBasePlugin.applyPlugin(UserPatchBasePlugin.java:32)
        at net.minecraftforge.gradle.common.BasePlugin.apply(BasePlugin.java:153)
        at net.minecraftforge.gradle.common.BasePlugin.apply(BasePlugin.java:49)
        at org.gradle.api.internal.plugins.ImperativeOnlyPluginApplicator.applyImperative(ImperativeOnlyPluginApplicator.java:35)
        at org.gradle.api.internal.plugins.RuleBasedPluginApplicator.applyImperative(RuleBasedPluginApplicator.java:44)
        at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:144)
        at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:112)
        at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyType(DefaultObjectConfigurationAction.java:112)
        at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$200(DefaultObjectConfigurationAction.java:35)
        at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$3.run(DefaultObjectConfigurationAction.java:79)
        at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:135)
        at org.gradle.api.internal.project.AbstractPluginAware.apply(AbstractPluginAware.java:46)
        at org.gradle.api.plugins.PluginAware$apply.call(Unknown Source)
        at org.gradle.api.internal.project.ProjectScript.apply(ProjectScript.groovy:34)
        at org.gradle.api.Script$apply$0.callCurrent(Unknown Source)
        at build_5yp5xtcus1pm9f5upgxv9jau1.run(E:\MineModding\1.7.10\gothicgamemod\build.gradle:17)
        at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:91)
        ... 50 more
 
Сверху