Made the reflection stuff even worse, but it works much more reliably now

master
Wynd 2024-01-08 02:04:29 +02:00
parent 4a76c0fc82
commit 851d5149b4
1 changed files with 43 additions and 8 deletions

View File

@ -2,6 +2,7 @@ package xyz.pixelatedw.finalbeta;
import java.lang.management.ManagementFactory; import java.lang.management.ManagementFactory;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.time.Duration; import java.time.Duration;
import java.util.HashMap; import java.util.HashMap;
@ -37,12 +38,30 @@ public class WyHelper {
return INSTANCE; return INSTANCE;
} else { } else {
try { try {
Field f = Minecraft.class.getDeclaredFields()[1]; Field field = null;
f.setAccessible(true);
return (Minecraft) f.get(null); try {
} catch (SecurityException | IllegalArgumentException | IllegalAccessException e) { field = Minecraft.class.getDeclaredField("instance");
} catch (NoSuchFieldException ex) {
try {
field = Minecraft.class.getDeclaredField("field_2791");
} catch (NoSuchFieldException | SecurityException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
if (field == null) {
return null;
}
field.setAccessible(true);
return (Minecraft) field.get(null);
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;
} }
} }
@ -70,15 +89,31 @@ public class WyHelper {
} }
public static void registerWhiteWoolRecipe() { public static void registerWhiteWoolRecipe() {
Method method = RecipeRegistry.class.getDeclaredMethods()[2]; Method method = null;
method.setAccessible(true);
try { try {
// Makes new recipes for all colored wools so they can be dyed back white using bone meal method = RecipeRegistry.class.getDeclaredMethod("addShapelessRecipe", ItemInstance.class, Object[].class);
} catch (NoSuchMethodException ex) {
try {
method = RecipeRegistry.class.getDeclaredMethod("method_542", ItemInstance.class, Object[].class);
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
}
}
if (method == null) {
return;
}
try {
method.setAccessible(true);
// Makes new recipes for all colored wools so they can be dyed back
// white using bone meal
for (int colorId = 0; colorId < 16; ++colorId) { for (int colorId = 0; colorId < 16; ++colorId) {
method.invoke(RecipeRegistry.getInstance(), new ItemInstance(Tile.WOOL, 1, 0), new Object[]{ method.invoke(RecipeRegistry.getInstance(), new ItemInstance(Tile.WOOL, 1, 0), new Object[]{
new ItemInstance(Tile.WOOL, 1, WoolTile.method_2(colorId)), new ItemInstance(ItemType.dyePowder, 1, 15)}); new ItemInstance(Tile.WOOL, 1, WoolTile.method_2(colorId)), new ItemInstance(ItemType.dyePowder, 1, 15)});
} }
} catch (Exception ex) { } catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
} }