Advertisement
Guest User

123

a guest
May 20th, 2018
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.07 KB | None | 0 0
  1. package net.minecraftforge.lex.legacyjavafixer;
  2.  
  3. import cpw.mods.fml.common.launcher.*;
  4. import java.io.*;
  5. import net.minecraft.launchwrapper.*;
  6. import java.lang.reflect.*;
  7. import cpw.mods.fml.relauncher.*;
  8. import com.google.common.base.*;
  9. import java.net.*;
  10. import com.google.common.primitives.*;
  11. import java.util.*;
  12.  
  13. public class LegacyJavaFixer implements ITweaker
  14. {
  15. public LegacyJavaFixer() {
  16. final ListIterator<ITweaker> itr = Launch.blackboard.get("Tweaks").listIterator();
  17. final ITweaker replacement = (ITweaker)new SortReplacement();
  18. while (itr.hasNext()) {
  19. final ITweaker t = itr.next();
  20. final FMLRelaunchLog log = FMLRelaunchLog.log;
  21. FMLRelaunchLog.info("[LegacyJavaFixer] Tweaker: " + t, new Object[0]);
  22. if (t instanceof FMLInjectionAndSortingTweaker) {
  23. itr.set(replacement);
  24. FMLRelaunchLog.info("[LegacyJavaFixer] Replacing tweaker %s with %s", new Object[] { t, replacement });
  25. }
  26. }
  27. }
  28.  
  29. public void acceptOptions(final List<String> args, final File gameDir, final File assetsDir, final String profile) {
  30. }
  31.  
  32. public String[] getLaunchArguments() {
  33. return new String[0];
  34. }
  35.  
  36. public String getLaunchTarget() {
  37. return "";
  38. }
  39.  
  40. public void injectIntoClassLoader(final LaunchClassLoader classLoader) {
  41. }
  42.  
  43. public static class SortReplacement implements ITweaker
  44. {
  45. private boolean hasRun;
  46. Class<?> wrapperCls;
  47. Field wrapperField;
  48. Map<String, Integer> tweakSorting;
  49.  
  50. SortReplacement() {
  51. this.hasRun = false;
  52. this.wrapperCls = null;
  53. this.wrapperField = null;
  54. this.tweakSorting = null;
  55. try {
  56. this.wrapperCls = Class.forName("cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper", false, SortReplacement.class.getClassLoader());
  57. (this.wrapperField = this.wrapperCls.getDeclaredField("sortIndex")).setAccessible(true);
  58. this.tweakSorting = (Map<String, Integer>)ReflectionHelper.getPrivateValue((Class)CoreModManager.class, (Object)null, new String[] { "tweakSorting" });
  59. }
  60. catch (Exception e) {
  61. e.printStackTrace();
  62. Throwables.propagate((Throwable)e);
  63. }
  64. }
  65.  
  66. public void injectIntoClassLoader(final LaunchClassLoader classLoader) {
  67. if (!this.hasRun) {
  68. final FMLRelaunchLog log = FMLRelaunchLog.log;
  69. FMLRelaunchLog.info("[LegacyJavaFixer] Replacing sort", new Object[0]);
  70. this.sort();
  71. final URL is = FMLInjectionAndSortingTweaker.class.getResource("/cpw/mods/fml/common/launcher/TerminalTweaker.class");
  72. if (is != null) {
  73. final FMLRelaunchLog log2 = FMLRelaunchLog.log;
  74. FMLRelaunchLog.info("[LegacyJavaFixer] Detected TerminalTweaker", new Object[0]);
  75. final List<String> newTweaks = Launch.blackboard.get("TweakClasses");
  76. newTweaks.add("cpw.mods.fml.common.launcher.TerminalTweaker");
  77. }
  78. }
  79. this.hasRun = true;
  80. }
  81.  
  82. private void sort() {
  83. final List<ITweaker> tweakers = Launch.blackboard.get("Tweaks");
  84. final ITweaker[] toSort = tweakers.toArray(new ITweaker[tweakers.size()]);
  85. Arrays.sort(toSort, new Comparator<ITweaker>() {
  86. @Override
  87. public int compare(final ITweaker o1, final ITweaker o2) {
  88. return Ints.saturatedCast(this.getIndex(o1) - this.getIndex(o2));
  89. }
  90.  
  91. private int getIndex(final ITweaker t) {
  92. try {
  93. if (t instanceof SortReplacement) {
  94. return Integer.MIN_VALUE;
  95. }
  96. if (SortReplacement.this.wrapperCls.isInstance(t)) {
  97. return SortReplacement.this.wrapperField.getInt(t);
  98. }
  99. if (SortReplacement.this.tweakSorting.containsKey(t.getClass().getName())) {
  100. return SortReplacement.this.tweakSorting.get(t.getClass().getName());
  101. }
  102. }
  103. catch (Exception e) {
  104. Throwables.propagate((Throwable)e);
  105. }
  106. return 0;
  107. }
  108. });
  109. for (int j = 0; j < toSort.length; ++j) {
  110. tweakers.set(j, toSort[j]);
  111. }
  112. }
  113.  
  114. public void acceptOptions(final List<String> args, final File gameDir, final File assetsDir, final String profile) {
  115. }
  116.  
  117. public String[] getLaunchArguments() {
  118. return new String[0];
  119. }
  120.  
  121. public String getLaunchTarget() {
  122. return "";
  123. }
  124. }
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement