Skip to content

Commit

Permalink
Support OptiForge running under development environment.
Browse files Browse the repository at this point in the history
Add the function about removing OptiFine class locator if MixinBootstrap didn't install.
  • Loading branch information
ZekerZhayard committed Apr 25, 2020
1 parent 495c0b2 commit ae17fdb
Show file tree
Hide file tree
Showing 17 changed files with 265 additions and 170 deletions.
18 changes: 16 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# OptiForge ([CurseForge](https://www.curseforge.com/minecraft/mc-mods/optiforge))

*Compatibility: (2020-04-20)*
 *OptiForge-0.1.11*
*Compatibility: (2020-04-25)*
 *OptiForge-0.1.12*
 *Forge-1.15.2-31.1.39 or newer version*
 *OptiFine-1.15.2-G1-pre7 or newer version*

Expand All @@ -15,5 +15,19 @@

*Notice: If you find a bug, please report it to OptiForge first unless you are sure it is an OptiFine bug.*

### For Development Environment

1. There is a project called [OptiFineDevTweaker](https://github.com/OpenCubicChunks/OptiFineDevTweaker) can help us use OptiFine under development environment. You should put OptiFine itself and OptiFineDevTweaker mod to `<projectDir>/run/mods` folder.
2. If your project doesn't depend on Mixin, you should put MixinBootstrap mod to mods folder.
3. You should also put OptiForge jar with `-deobf` suffix to mods folder.

*Notice:*
*1. If you redefined your Gradle user home, you should add a VM argument:*
*`-Dofdev.mcjar=<gradle.user.home>\caches\forge_gradle\minecraft_repo\versions\1.15.2\client.jar`*
*2. OptiFineDevTweaker will dump all deobfuscated OptiFine classes to `./run/.optifineDev.classes` folder.*
*3. There are some useful Mixin properties for debugging: [Mixin Java System Properties](https://github.com/SpongePowered/Mixin/wiki/Mixin-Java-System-Properties)*
*I recommend you add `-Dmixin.debug.export=true`, it can dump all mixed classes to `./run/.mixin.out/class` folder.*
*4. The recommended mcp mappings version is `snapshot_20200407-1.15.1`*

## Screenshots
![OF0.png](https://i.loli.net/2020/03/31/IBfv1ShQt7wVY2u.png)
91 changes: 46 additions & 45 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -46,41 +46,7 @@ minecraft {
property "forge.logging.console.level", "debug"

mods {
examplemod {
source sourceSets.main
}
}
}

server {
workingDirectory project.file("run")

// Recommended logging data for a userdev environment
property "forge.logging.markers", "SCAN,REGISTRIES,REGISTRYDUMP"

// Recommended logging level for the console
property "forge.logging.console.level", "debug"

mods {
examplemod {
source sourceSets.main
}
}
}

data {
workingDirectory project.file("run")

// Recommended logging data for a userdev environment
property "forge.logging.markers", "SCAN,REGISTRIES,REGISTRYDUMP"

// Recommended logging level for the console
property "forge.logging.console.level", "debug"

args "--mod", "examplemod", "--all", "--output", file("src/generated/resources/")

mods {
examplemod {
optiforge {
source sourceSets.main
}
}
Expand Down Expand Up @@ -124,18 +90,53 @@ dependencies {
}

// Example for how to get properties into the manifest for reading by the runtime..
def attrs = [
"Specification-Title": "OptiForge",
"Specification-Vendor": "ZekerZhayard",
"Specification-Version": "1", // We are version 1 of ourselves
"Implementation-Title": project.name,
"Implementation-Version": "${version}",
"Implementation-Vendor" :"ZekerZhayard",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
"MixinConnector": "io.github.zekerzhayard.optiforge.asm.MixinConnector"
]

jar {
manifest {
attributes([
"Specification-Title": "OptiForge",
"Specification-Vendor": "ZekerZhayard",
"Specification-Version": "1", // We are version 1 of ourselves
"Implementation-Title": project.name,
"Implementation-Version": "${version}",
"Implementation-Vendor" :"ZekerZhayard",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
"MixinConnector": "io.github.zekerzhayard.optiforge.asm.MixinConnector"
])
attributes(attrs)
}
}

task sourcesJar(type: Jar) {
manifest {
attributes(attrs)
}
from sourceSets.main.allSource
archiveName = "${archivesBaseName}-${version}-sources.${extension}"
}

task deobfJar(type: Jar) {
manifest {
attributes(attrs)
}
from sourceSets.main.output
archiveName = "${archivesBaseName}-${version}-deobf.${extension}"
}

artifacts {
archives sourcesJar
archives deobfJar
}

processResources {
def pros = ["minecraft_version": "${minecraft_version}", "optifine_version": "${optifine_version}", "forge_version": "${forge_version}"]
inputs.properties pros
from sourceSets.main.resources.srcDirs, {
include "requiredmods.properties"
expand pros
}
from sourceSets.main.resources.srcDirs, {
exclude "requiredmods.properties"
}
}

Expand Down
5 changes: 4 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false

mod_version=0.1.11
mod_version=0.1.12
# G1_pre7
optifine_version=7.1.7
minecraft_version=1.15.2
forge_version=31.1.39
forge_gradle_version=3.0.169
mcp_mappings=20200407-1.15.1
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import java.util.ServiceLoader;
import java.util.Set;

import cpw.mods.modlauncher.Launcher;
import io.github.zekerzhayard.optiforge.asm.transformers.ITransformer;
import io.github.zekerzhayard.optiforge.asm.utils.ASMUtils;
import net.minecraftforge.fml.loading.FMLLoader;
Expand All @@ -16,7 +17,6 @@
import org.objectweb.asm.tree.ClassNode;
import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
import org.spongepowered.asm.util.Bytecode;

public class MixinConfigPlugin implements IMixinConfigPlugin {
private final static Logger LOGGER = LogManager.getLogger("OptiForge");
Expand Down Expand Up @@ -53,13 +53,14 @@ public void onLoad(String mixinPackage) {
this.checked = true;
} catch (Exception e) {
LOGGER.error("An unexpected issue occurred when loading transformers and all mixin classes will not apply: ", e);
checked = false;
this.checked = false;
}
}

@Override
public String getRefMapperConfig() {
return null;
// If we are under development environment, we needn't reference mappings.
return Launcher.INSTANCE.environment().findNameMapping("srg").isPresent() ? null : "mixins.optiforge.refmap.json";
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package io.github.zekerzhayard.optiforge.asm.fml;

import java.util.Collections;
import java.util.List;
import java.util.Set;
import javax.annotation.Nonnull;

import cpw.mods.modlauncher.api.IEnvironment;
import cpw.mods.modlauncher.api.ITransformationService;
import cpw.mods.modlauncher.api.ITransformer;

/**
* If someone used wrong forge version or didn't install MixinBootstrap, use this class to replace OptiFineTransformationService.
*/
public class FakeOptiFineTransformationService implements ITransformationService {
@Nonnull
@Override
public String name() {
return "OptiFine";
}

@Override
public void initialize(@Nonnull IEnvironment environment) {

}

@Override
public void beginScanning(@Nonnull IEnvironment environment) {

}

@Override
public void onLoad(@Nonnull IEnvironment env, @Nonnull Set<String> otherServices) {

}

@Nonnull
@Override
@SuppressWarnings("rawtypes")
public List<ITransformer> transformers() {
return Collections.emptyList();
}
}
Loading

0 comments on commit ae17fdb

Please sign in to comment.