Skip to content

Commit

Permalink
RFG Compat patches
Browse files Browse the repository at this point in the history
  • Loading branch information
eigenraven committed Mar 23, 2023
1 parent fed3d34 commit 0ce232b
Show file tree
Hide file tree
Showing 12 changed files with 259 additions and 31 deletions.
5 changes: 1 addition & 4 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,12 @@ jobs:
restore-keys: |
${{ runner.os }}-gradle-
- name: Setup publish token
env:
JETBRAINS_TOKEN: ${{ secrets.JETBRAINS_TOKEN }}
shell: bash
run: |
mkdir -p ~/.gradle/
echo "GRADLE_USER_HOME=$HOME/.gradle" >> "$GITHUB_ENV"
echo "mcdev.deploy.token=${JETBRAINS_TOKEN}" > ~/.gradle/gradle.properties
- name: Publish plugin
run: ./gradlew clean publishPlugin --no-daemon --stacktrace
run: ./gradlew clean assemble buildPlugin --no-daemon --stacktrace
- name: Get tag name
id: get_tag
shell: bash
Expand Down
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ kotlin.code.style=official
ideaVersion = 2022.3
ideaVersionName = 2022.3

coreVersion = 1.6.2
downloadIdeaSources = true
coreVersion = 1.6.3
downloadIdeaSources = false

pluginTomlVersion = 223.7571.59

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/*
* Minecraft Dev for IntelliJ
*
* https://minecraftdev.org
*
* Copyright (c) 2023 minecraft-dev
*
* MIT License
*/

package com.demonwav.mcdev.platform.mcp.gradle.tooling

import org.gradle.api.Project
import org.jetbrains.annotations.NotNull
import org.jetbrains.plugins.gradle.tooling.ErrorMessageBuilder
import org.jetbrains.plugins.gradle.tooling.ModelBuilderService

final class McpModelRFGBuilderImpl implements ModelBuilderService {

@Override
boolean canBuild(String modelName) {
return McpModelRFG.name == modelName
}

@Override
Object buildAll(String modelName, Project project) {
System.err.println("Attempting build of " + modelName + " in " + project)
def extension = project.extensions.findByName('minecraft')
if (extension == null) {
return null
}

def mcpTasksObj = project.extensions.findByName('mcpTasks')
if (mcpTasksObj == null) {
return null
}

if (project.tasks.findByName("generateForgeSrgMappings") == null) {
return null
}

def mappingFiles = project.tasks.generateForgeSrgMappings.outputs.files.files.collect { it.absolutePath }
def atFiles = mcpTasksObj.deobfuscationATs.files.collect {it}
System.err.println("Done build of " + modelName + " in " + project)
try {
def implObj = new McpModelRFGImpl(extension.mcVersion.get(), extension.mcpMappingChannel.get() + "-" + extension.mcpMappingVersion.get(), mappingFiles.toSet(), atFiles)
System.err.println("Impl: " + implObj)
return implObj
} catch (Throwable t) {
System.err.println(t.message)
t.printStackTrace()
throw t
}
}

@Override
ErrorMessageBuilder getErrorMessageBuilder(@NotNull Project project, @NotNull Exception e) {
return ErrorMessageBuilder.create(
project, e, "MinecraftDev import errors"
).withDescription("Unable to build MinecraftDev MCP project configuration")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
* Minecraft Dev for IntelliJ
*
* https://minecraftdev.org
*
* Copyright (c) 2023 minecraft-dev
*
* MIT License
*/

package com.demonwav.mcdev.platform.mcp.gradle.tooling

import groovy.transform.CompileStatic

@CompileStatic
final class McpModelRFGImpl implements McpModelRFG, Serializable {

final String minecraftVersion
final String mcpVersion
final Set<String> mappingFiles
final List<File> accessTransformers

McpModelRFGImpl(String minecraftVersion, String mcpVersion, Set<String> mappingFiles, List<File> accessTransformers) {
this.minecraftVersion = minecraftVersion
this.mcpVersion = mcpVersion
this.mappingFiles = mappingFiles
this.accessTransformers = accessTransformers
}

@Override
public String toString() {
return "McpModelRFGImpl{" +
"minecraftVersion='" + minecraftVersion + '\'' +
", mcpVersion='" + mcpVersion + '\'' +
", mappingFiles=" + mappingFiles +
", accessTransformers=" + accessTransformers +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/*
* Minecraft Dev for IntelliJ
*
* https://minecraftdev.org
*
* Copyright (c) 2023 minecraft-dev
*
* MIT License
*/

package com.demonwav.mcdev.platform.mcp.gradle.tooling;

import java.io.File;
import java.util.List;
import java.util.Set;

public interface McpModelRFG extends McpModel {
String getMinecraftVersion();
Set<String> getMappingFiles();
List<File> getAccessTransformers();
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ com.demonwav.mcdev.platform.mcp.gradle.tooling.fabricloom.FabricLoomModelBuilder
com.demonwav.mcdev.platform.mcp.gradle.tooling.vanillagradle.VanillaGradleModelBuilderImpl
com.demonwav.mcdev.platform.mcp.gradle.tooling.McpModelFG2BuilderImpl
com.demonwav.mcdev.platform.mcp.gradle.tooling.McpModelFG3BuilderImpl
com.demonwav.mcdev.platform.mcp.gradle.tooling.McpModelRFGBuilderImpl
9 changes: 9 additions & 0 deletions src/main/kotlin/facet/MinecraftFacetDetector.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import com.demonwav.mcdev.platform.PlatformType
import com.demonwav.mcdev.platform.architectury.framework.ARCHITECTURY_LIBRARY_KIND
import com.demonwav.mcdev.platform.architectury.framework.ArchitecturyGradleData
import com.demonwav.mcdev.platform.fabric.framework.FABRIC_LIBRARY_KIND
import com.demonwav.mcdev.platform.forge.framework.FORGE_LIBRARY_KIND
import com.demonwav.mcdev.platform.mcp.framework.MCP_LIBRARY_KIND
import com.demonwav.mcdev.platform.mcp.gradle.tooling.archloom.ArchitecturyModel
import com.demonwav.mcdev.platform.sponge.framework.SPONGE_LIBRARY_KIND
import com.demonwav.mcdev.util.ifEmpty
Expand Down Expand Up @@ -176,6 +178,13 @@ class MinecraftFacetDetector : StartupActivity {

platformKinds.add(SPONGE_LIBRARY_KIND)
}
if (m.name.endsWith(".patchedMc", ignoreCase = false)) {
// RetroFuturaGradle decompiled MC sources
platformKinds.add(FORGE_LIBRARY_KIND)
platformKinds.add(MCP_LIBRARY_KIND)
libraryVersions[FORGE_LIBRARY_KIND] = "1.0"
libraryVersions[MCP_LIBRARY_KIND] = "1.0"
}
return@forEach true
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,10 @@ package com.demonwav.mcdev.platform.mcp.gradle

import com.demonwav.mcdev.platform.mcp.gradle.datahandler.McpModelFG2Handler
import com.demonwav.mcdev.platform.mcp.gradle.datahandler.McpModelFG3Handler
import com.demonwav.mcdev.platform.mcp.gradle.datahandler.McpModelRFGHandler
import com.demonwav.mcdev.platform.mcp.gradle.tooling.McpModelFG2
import com.demonwav.mcdev.platform.mcp.gradle.tooling.McpModelFG3
import com.demonwav.mcdev.platform.mcp.gradle.tooling.McpModelRFG
import com.demonwav.mcdev.util.runGradleTask
import com.intellij.openapi.externalSystem.model.DataNode
import com.intellij.openapi.externalSystem.model.project.ModuleData
Expand All @@ -26,7 +28,7 @@ class McpProjectResolverExtension : AbstractProjectResolverExtension() {

// Register our custom Gradle tooling API model in IntelliJ's project resolver
override fun getExtraProjectModelClasses(): Set<Class<out Any>> =
setOf(McpModelFG2::class.java, McpModelFG3::class.java)
setOf(McpModelFG2::class.java, McpModelFG3::class.java, McpModelRFG::class.java)

override fun getToolingExtensionsClasses() = extraProjectModelClasses

Expand Down Expand Up @@ -79,6 +81,6 @@ class McpProjectResolverExtension : AbstractProjectResolverExtension() {
}

companion object {
private val handlers = listOf(McpModelFG2Handler, McpModelFG3Handler)
private val handlers = listOf(McpModelFG2Handler, McpModelFG3Handler, McpModelRFGHandler)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
* Minecraft Dev for IntelliJ
*
* https://minecraftdev.org
*
* Copyright (c) 2023 minecraft-dev
*
* MIT License
*/

package com.demonwav.mcdev.platform.mcp.gradle.datahandler

import com.demonwav.mcdev.platform.mcp.McpModuleSettings
import com.demonwav.mcdev.platform.mcp.gradle.McpModelData
import com.demonwav.mcdev.platform.mcp.gradle.tooling.McpModelRFG
import com.demonwav.mcdev.platform.mcp.srg.SrgType
import com.intellij.openapi.externalSystem.model.DataNode
import com.intellij.openapi.externalSystem.model.project.ModuleData
import org.gradle.tooling.model.idea.IdeaModule
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
import org.jetbrains.plugins.gradle.service.project.ProjectResolverContext

object McpModelRFGHandler : McpModelDataHandler {

override fun build(
gradleModule: IdeaModule,
node: DataNode<ModuleData>,
resolverCtx: ProjectResolverContext
) {
val data = resolverCtx.getExtraProject(gradleModule, McpModelRFG::class.java) ?: return

val state = McpModuleSettings.State(
data.minecraftVersion,
data.mcpVersion,
data.mappingFiles.find { it.endsWith("mcp-srg.srg") },
SrgType.SRG,
data.minecraftVersion
)

val modelData = McpModelData(
node.data,
state,
"generateForgeSrgMappings",
data.accessTransformers
)

node.createChild(
McpModelData.KEY,
McpModelData(
node.data,
McpModuleSettings.State(
data.minecraftVersion,
data.mcpVersion,
data.mappingFiles.find { it.endsWith("mcp-srg.srg") },
SrgType.SRG
),
"generateForgeSrgMappings",
data.accessTransformers
)
)

for (child in node.children) {
val childData = child.data
if (childData is GradleSourceSetData) {
child.createChild(McpModelData.KEY, modelData.copy(module = childData))
}
}
}
}
18 changes: 16 additions & 2 deletions src/main/kotlin/platform/mixin/util/AsmUtil.kt
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import com.intellij.ide.highlighter.JavaFileType
import com.intellij.openapi.module.Module
import com.intellij.openapi.progress.ProcessCanceledException
import com.intellij.openapi.project.Project
import com.intellij.openapi.project.guessModuleDir
import com.intellij.openapi.roots.CompilerModuleExtension
import com.intellij.openapi.util.RecursionManager
import com.intellij.psi.JavaPsiFacade
Expand Down Expand Up @@ -168,7 +169,17 @@ fun findClassNodeByPsiClass(psiClass: PsiClass, module: Module? = psiClass.findM
// find compiler output
if (module == null) return null
val fqn = psiClass.fullQualifiedName ?: return null
var parentDir = CompilerModuleExtension.getInstance(module)?.compilerOutputPath ?: return null
val cme = CompilerModuleExtension.getInstance(module) ?: return null
var parentDir = if (module.name.endsWith("patchedMc")) {
// Guess module dir -> MOD/build/rfg/minecraft-src/java
module.guessModuleDir()
?.parent?.parent?.parent
?.findFileByRelativePath("classes")
?.findFileByRelativePath("java")
?.findFileByRelativePath("patchedMc") ?: return null
} else {
cme.compilerOutputPath ?: return null
}
val packageName = fqn.substringBeforeLast('.', "")
if (packageName.isNotEmpty()) {
for (dir in packageName.split('.')) {
Expand Down Expand Up @@ -335,7 +346,10 @@ fun ClassNode.findSourceClass(project: Project, scope: GlobalSearchScope, canDec
val stubFile = stubClass.containingFile ?: return@findQualifiedClass null
val classFile = stubFile.virtualFile
if (classFile != null) {
val sourceFile = JavaEditorFileSwapper.findSourceFile(project, classFile)
// RFG patch: Minecraft is a SourceSet and not a library
val sourceFile = if (classFile.extension == "java")
classFile else
JavaEditorFileSwapper.findSourceFile(project, classFile)
if (sourceFile != null) {
val sourceClass = (PsiManager.getInstance(project).findFile(sourceFile) as? PsiJavaFile)
?.classes?.firstOrNull()
Expand Down
6 changes: 3 additions & 3 deletions src/main/resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@
<depends optional="true" config-file="toml-support.xml">org.toml.lang</depends>

<id>com.demonwav.minecraft-dev</id>
<name>Minecraft Development</name>
<vendor email="[email protected]" url="https://minecraftdev.org/">minecraft-dev</vendor>
<name>Minecraft Development (RFG-enabled fork)</name>
<vendor email="[email protected]" url="https://eigenraven.me/">eigenraven</vendor>

<description><![CDATA[
Brings support for Bukkit, Spigot, Paper, Sponge, Forge, Fabric, Architectury, MCP, Mixin, Velocity, BungeeCord and Waterfall projects to Intellij IDEA.
Brings support for Bukkit, Spigot, Paper, Sponge, Forge, Fabric, Architectury, MCP, Mixin, Velocity, BungeeCord and Waterfall projects to Intellij IDEA. RetroFuturaGradle-enabled
]]></description>

<resource-bundle>messages.MinecraftDevelopment</resource-bundle>
Expand Down
Loading

0 comments on commit 0ce232b

Please sign in to comment.