Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.minecraftforge.lex.legacyjavafixer;
- import cpw.mods.fml.common.launcher.*;
- import java.io.*;
- import net.minecraft.launchwrapper.*;
- import java.lang.reflect.*;
- import cpw.mods.fml.relauncher.*;
- import com.google.common.base.*;
- import java.net.*;
- import com.google.common.primitives.*;
- import java.util.*;
- public class LegacyJavaFixer implements ITweaker
- {
- public LegacyJavaFixer() {
- final ListIterator<ITweaker> itr = Launch.blackboard.get("Tweaks").listIterator();
- final ITweaker replacement = (ITweaker)new SortReplacement();
- while (itr.hasNext()) {
- final ITweaker t = itr.next();
- final FMLRelaunchLog log = FMLRelaunchLog.log;
- FMLRelaunchLog.info("[LegacyJavaFixer] Tweaker: " + t, new Object[0]);
- if (t instanceof FMLInjectionAndSortingTweaker) {
- itr.set(replacement);
- FMLRelaunchLog.info("[LegacyJavaFixer] Replacing tweaker %s with %s", new Object[] { t, replacement });
- }
- }
- }
- public void acceptOptions(final List<String> args, final File gameDir, final File assetsDir, final String profile) {
- }
- public String[] getLaunchArguments() {
- return new String[0];
- }
- public String getLaunchTarget() {
- return "";
- }
- public void injectIntoClassLoader(final LaunchClassLoader classLoader) {
- }
- public static class SortReplacement implements ITweaker
- {
- private boolean hasRun;
- Class<?> wrapperCls;
- Field wrapperField;
- Map<String, Integer> tweakSorting;
- SortReplacement() {
- this.hasRun = false;
- this.wrapperCls = null;
- this.wrapperField = null;
- this.tweakSorting = null;
- try {
- this.wrapperCls = Class.forName("cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper", false, SortReplacement.class.getClassLoader());
- (this.wrapperField = this.wrapperCls.getDeclaredField("sortIndex")).setAccessible(true);
- this.tweakSorting = (Map<String, Integer>)ReflectionHelper.getPrivateValue((Class)CoreModManager.class, (Object)null, new String[] { "tweakSorting" });
- }
- catch (Exception e) {
- e.printStackTrace();
- Throwables.propagate((Throwable)e);
- }
- }
- public void injectIntoClassLoader(final LaunchClassLoader classLoader) {
- if (!this.hasRun) {
- final FMLRelaunchLog log = FMLRelaunchLog.log;
- FMLRelaunchLog.info("[LegacyJavaFixer] Replacing sort", new Object[0]);
- this.sort();
- final URL is = FMLInjectionAndSortingTweaker.class.getResource("/cpw/mods/fml/common/launcher/TerminalTweaker.class");
- if (is != null) {
- final FMLRelaunchLog log2 = FMLRelaunchLog.log;
- FMLRelaunchLog.info("[LegacyJavaFixer] Detected TerminalTweaker", new Object[0]);
- final List<String> newTweaks = Launch.blackboard.get("TweakClasses");
- newTweaks.add("cpw.mods.fml.common.launcher.TerminalTweaker");
- }
- }
- this.hasRun = true;
- }
- private void sort() {
- final List<ITweaker> tweakers = Launch.blackboard.get("Tweaks");
- final ITweaker[] toSort = tweakers.toArray(new ITweaker[tweakers.size()]);
- Arrays.sort(toSort, new Comparator<ITweaker>() {
- @Override
- public int compare(final ITweaker o1, final ITweaker o2) {
- return Ints.saturatedCast(this.getIndex(o1) - this.getIndex(o2));
- }
- private int getIndex(final ITweaker t) {
- try {
- if (t instanceof SortReplacement) {
- return Integer.MIN_VALUE;
- }
- if (SortReplacement.this.wrapperCls.isInstance(t)) {
- return SortReplacement.this.wrapperField.getInt(t);
- }
- if (SortReplacement.this.tweakSorting.containsKey(t.getClass().getName())) {
- return SortReplacement.this.tweakSorting.get(t.getClass().getName());
- }
- }
- catch (Exception e) {
- Throwables.propagate((Throwable)e);
- }
- return 0;
- }
- });
- for (int j = 0; j < toSort.length; ++j) {
- tweakers.set(j, toSort[j]);
- }
- }
- public void acceptOptions(final List<String> args, final File gameDir, final File assetsDir, final String profile) {
- }
- public String[] getLaunchArguments() {
- return new String[0];
- }
- public String getLaunchTarget() {
- return "";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement