Skip to content

Commit

Permalink
Fix Mixin launch before obf map init, fix Mixin uses refmap on dev
Browse files Browse the repository at this point in the history
  • Loading branch information
kappa-maintainer committed Dec 1, 2023
1 parent 625485f commit 337a4a5
Show file tree
Hide file tree
Showing 9 changed files with 69 additions and 57 deletions.
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ buildscript {
}
}
dependencies {
classpath 'net.minecraftforge.gradle:ForgeGradle:6.0.+'
classpath 'net.minecraftforge.gradle:ForgeGradle:6.99.+'
}
}

Expand Down Expand Up @@ -1126,6 +1126,7 @@ project(':cleanroom') {
artifact userdevJar
artifact universalJar
artifact sourcesJar
artifact installerJar
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ patch_version = 0

# MAJOR.SPEC_MAJOR.SPEC_MINOR.BUILD
last_forge_version = 14.23.5.2860
new_forge_version = 15.24.0.3013
new_forge_version = 15.24.0.3014

# Minecraft & Mappings
mapping_channel = stable
Expand All @@ -26,7 +26,7 @@ installer_tools_version = 1.3.0
# Libraries
asm_version = 9.6
asm_deprecated = 7.1
bouncepad_version = 0.4.10-cursed
bouncepad_version = 0.4.11-cursed
lwjgl_version = 3.3.2-22-CLEANROOM

# Sets default memory used for Gradle commands. Can be overridden by user or command line properties.
Expand Down
Empty file modified gradlew
100644 → 100755
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

import javax.annotation.Nullable;

@IFMLLoadingPlugin.SortingIndex(Integer.MIN_VALUE + 1)
public class FMLForgePlugin implements IFMLLoadingPlugin
{
public static boolean RUNTIME_DEOBF = false;
Expand Down
49 changes: 17 additions & 32 deletions src/main/java/net/minecraftforge/fml/common/LoadController.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,57 +19,39 @@

package net.minecraftforge.fml.common;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import com.cleanroommc.bouncepad.Bouncepad;
import com.google.common.base.Throwables;
import com.google.common.collect.*;
import com.google.common.collect.ImmutableMap.Builder;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import net.minecraft.launchwrapper.Launch;
import net.minecraftforge.common.util.TextTable;
import net.minecraftforge.fml.common.LoaderState.ModState;
import net.minecraftforge.fml.common.ProgressManager.ProgressBar;
import net.minecraftforge.fml.common.discovery.ASMDataTable;
import net.minecraftforge.fml.common.event.FMLEvent;
import net.minecraftforge.fml.common.event.FMLLoadEvent;
import net.minecraftforge.fml.common.event.FMLModDisabledEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLStateEvent;
import net.minecraftforge.fml.common.event.*;
import net.minecraftforge.fml.common.eventhandler.FMLThrowingEventBus;
import net.minecraftforge.fml.common.versioning.ArtifactVersion;

import net.minecraftforge.fml.relauncher.MixinBooterPlugin;
import net.minecraftforge.fml.relauncher.mixinfix.MixinFixer;
import org.apache.logging.log4j.ThreadContext;
import org.apache.logging.log4j.message.FormattedMessage;

import com.google.common.base.Throwables;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.BiMap;
import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMap.Builder;
import com.google.common.collect.Iterables;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.common.collect.MultimapBuilder;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import org.spongepowered.asm.mixin.MixinEnvironment;
import org.spongepowered.asm.mixin.Mixins;
import org.spongepowered.asm.mixin.extensibility.IMixinProcessor;
import org.spongepowered.asm.mixin.transformer.IMixinTransformer;
import org.spongepowered.asm.mixin.transformer.Proxy;
import org.spongepowered.asm.service.MixinService;
import org.spongepowered.asm.service.mojang.MixinServiceLaunchWrapper;
import zone.rong.mixinbooter.ILateMixinLoader;

import javax.annotation.Nullable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class LoadController
{
Expand Down Expand Up @@ -203,6 +185,9 @@ public void distributeStateMessage(LoaderState state, Object... eventData)
((MixinServiceLaunchWrapper) MixinService.getService()).setDelegatedTransformers(null);
}
MixinEnvironment current = MixinEnvironment.getCurrentEnvironment();
if ((boolean)Launch.blackboard.get("fml.deobfuscatedEnvironment")) {
current.setOption(MixinEnvironment.Option.DISABLE_REFMAP, true);
}
Proxy.transformer.processor.selectConfigs(current);
Proxy.transformer.processor.prepareConfigs(current, Proxy.transformer.processor.extensions);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
import com.google.common.primitives.Ints;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.LoggerContext;
import org.spongepowered.asm.launch.MixinTweaker;

public class CoreModManager {
private static final Attributes.Name COREMODCONTAINSFMLMOD = new Attributes.Name("FMLCorePluginContainsFMLMod");
Expand Down Expand Up @@ -656,7 +657,7 @@ public static void sortTweakList()
// Basically a copy of Collections.sort pre 8u20, optimized as we know we're an array list.
// Thanks unhelpful fixer of http://bugs.java.com/view_bug.do?bug_id=8032636
ITweaker[] toSort = tweakers.toArray(new ITweaker[tweakers.size()]);
ToIntFunction<ITweaker> getOrder = o -> o instanceof FMLInjectionAndSortingTweaker ? Integer.MIN_VALUE : o instanceof FMLPluginWrapper ? ((FMLPluginWrapper)o).sortIndex : tweakSorting.getOrDefault(o.getClass().getName(), 0);
ToIntFunction<ITweaker> getOrder = o -> o instanceof FMLInjectionAndSortingTweaker ? Integer.MIN_VALUE : o instanceof FMLPluginWrapper ? ((FMLPluginWrapper)o).sortIndex : o instanceof MixinTweaker ? Integer.MIN_VALUE + 3 : tweakSorting.getOrDefault(o.getClass().getName(), 0);
Arrays.sort(toSort, (o1, o2) -> Ints.saturatedCast((long)getOrder.applyAsInt(o1) - (long)getOrder.applyAsInt(o2)));
for (int j = 0; j < toSort.length; j++) {
tweakers.set(j, toSort[j]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

import java.util.Map;

@IFMLLoadingPlugin.SortingIndex(Integer.MIN_VALUE + 1)
public class FMLCorePlugin implements IFMLLoadingPlugin
{
@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
package net.minecraftforge.fml.relauncher;

import com.cleanroommc.bouncepad.Bouncepad;
import com.llamalad7.mixinextras.MixinExtrasBootstrap;
import net.minecraft.launchwrapper.Launch;
import net.minecraftforge.common.ForgeVersion;
import net.minecraftforge.fml.relauncher.mixinfix.MixinFixer;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.spongepowered.asm.launch.GlobalProperties;
import org.spongepowered.asm.launch.MixinBootstrap;
import org.spongepowered.asm.mixin.MixinEnvironment;
import org.spongepowered.asm.mixin.Mixins;
import org.spongepowered.asm.mixin.transformer.IMixinTransformer;
Expand All @@ -17,11 +13,14 @@

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

@IFMLLoadingPlugin.Name("MixinBooter")
@IFMLLoadingPlugin.MCVersion(ForgeVersion.mcVersion)
@IFMLLoadingPlugin.SortingIndex(Integer.MIN_VALUE + 1)
@IFMLLoadingPlugin.SortingIndex(Integer.MIN_VALUE + 2)
public final class MixinBooterPlugin implements IFMLLoadingPlugin {

public static final Logger LOGGER = LogManager.getLogger("MixinBooter");
Expand Down Expand Up @@ -54,13 +53,6 @@ private static void registerExtension(IExtension extension) {
}

public MixinBooterPlugin() {
addTransformationExclusions();
initialize();
LOGGER.info("Initializing Mixins...");
MixinBootstrap.init();
LOGGER.info("Initializing MixinExtras...");
MixinExtrasBootstrap.init();
MixinFixer.patchAncientModMixinsLoadingMethod();
}

@Override
Expand All @@ -75,7 +67,7 @@ public String getModContainerClass() {

@Override
public String getSetupClass() {
return null;
return "net.minecraftforge.fml.relauncher.MixinSetup";
}

@Override
Expand Down Expand Up @@ -119,13 +111,6 @@ public String getAccessTransformerClass() {
return null;
}

private void addTransformationExclusions() {
Launch.classLoader.addTransformerExclusion("scala.");
Launch.classLoader.addTransformerExclusion("com.llamalad7.mixinextras.");
}

private void initialize() {
GlobalProperties.put(GlobalProperties.Keys.CLEANROOM_DISABLE_MIXIN_CONFIGS, new HashSet<>());
}

}
38 changes: 38 additions & 0 deletions src/main/java/net/minecraftforge/fml/relauncher/MixinSetup.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package net.minecraftforge.fml.relauncher;

import com.llamalad7.mixinextras.MixinExtrasBootstrap;
import net.minecraft.launchwrapper.Launch;
import net.minecraftforge.fml.relauncher.mixinfix.MixinFixer;
import org.spongepowered.asm.launch.GlobalProperties;
import org.spongepowered.asm.launch.MixinBootstrap;

import java.util.HashSet;
import java.util.Map;

public class MixinSetup implements IFMLCallHook {

@Override
public void injectData(Map<String, Object> data) {
addTransformationExclusions();
initialize();
MixinBooterPlugin.LOGGER.info("Initializing Mixins...");
MixinBootstrap.init();
MixinBooterPlugin.LOGGER.info("Initializing MixinExtras...");
MixinExtrasBootstrap.init();
MixinFixer.patchAncientModMixinsLoadingMethod();
}

@Override
public Void call() throws Exception {
return null;
}

private void addTransformationExclusions() {
Launch.classLoader.addTransformerExclusion("scala.");
Launch.classLoader.addTransformerExclusion("com.llamalad7.mixinextras.");
}

private void initialize() {
GlobalProperties.put(GlobalProperties.Keys.CLEANROOM_DISABLE_MIXIN_CONFIGS, new HashSet<>());
}
}

0 comments on commit 337a4a5

Please sign in to comment.