aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaven Szewczyk <git@kubasz.xyz>2023-01-24 16:06:42 +0000
committerGitHub <noreply@github.com>2023-01-24 17:06:42 +0100
commit0f46044ba9f95cb732bf2a82e35430e01c72bc1b (patch)
treee997f3dc0a6333547b24f856a2dd50a3d0c5aa92
parent7366deae4a0e4404799ab17dfde0a7ba7d4cb54f (diff)
downloadGT5-Unofficial-0f46044ba9f95cb732bf2a82e35430e01c72bc1b.tar.gz
GT5-Unofficial-0f46044ba9f95cb732bf2a82e35430e01c72bc1b.tar.bz2
GT5-Unofficial-0f46044ba9f95cb732bf2a82e35430e01c72bc1b.zip
Make reflection Java 12+ compatible (#517)
-rw-r--r--build.gradle11
-rw-r--r--dependencies.gradle3
-rw-r--r--src/main/java/gtPlusPlus/GTplusplus.java2
-rw-r--r--src/main/java/gtPlusPlus/core/util/reflect/ReflectionUtils.java67
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/creative/GregtechMetaCreativeEnergyBuffer.java17
5 files changed, 35 insertions, 65 deletions
diff --git a/build.gradle b/build.gradle
index 2dc32c9f20..505ad92b1a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,4 +1,4 @@
-//version: 1673027205
+//version: 1674409054
/*
DO NOT CHANGE THIS FILE!
Also, you may replace this file at any time if there is an update available.
@@ -144,6 +144,7 @@ propertyDefaultIfUnset("modrinthProjectId", "")
propertyDefaultIfUnset("modrinthRelations", "")
propertyDefaultIfUnset("curseForgeProjectId", "")
propertyDefaultIfUnset("curseForgeRelations", "")
+propertyDefaultIfUnset("minimizeShadowedDependencies", true)
String javaSourceDir = "src/main/java/"
String scalaSourceDir = "src/main/scala/"
@@ -411,7 +412,9 @@ shadowJar {
attributes(getManifestAttributes())
}
- minimize() // This will only allow shading for actually used classes
+ if (minimizeShadowedDependencies.toBoolean()) {
+ minimize() // This will only allow shading for actually used classes
+ }
configurations = [
project.configurations.shadowImplementation,
project.configurations.shadowCompile
@@ -554,7 +557,9 @@ task shadowDevJar(type: ShadowJar) {
attributes(getManifestAttributes())
}
- minimize() // This will only allow shading for actually used classes
+ if (minimizeShadowedDependencies.toBoolean()) {
+ minimize() // This will only allow shading for actually used classes
+ }
configurations = [
project.configurations.shadowImplementation,
project.configurations.shadowCompile
diff --git a/dependencies.gradle b/dependencies.gradle
index 08b9fb200c..bcdcc706d3 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -1,10 +1,11 @@
dependencies {
+ compile('com.github.GTNewHorizons:GTNHLib:0.0.10:dev')
compile('com.github.GTNewHorizons:GT5-Unofficial:5.09.41.232:dev')
compile("com.github.GTNewHorizons:StructureLib:1.2.0-beta.2:dev")
compile("com.github.GTNewHorizons:ModularUI:1.0.46:dev") {transitive=false}
compile("com.github.GTNewHorizons:NotEnoughItems:2.3.20-GTNH:dev")
compile('com.github.GTNewHorizons:CodeChickenCore:1.1.7:dev')
- compile('com.github.GTNewHorizons:CodeChickenLib:1.1.5.6:dev')
+ compile('com.github.GTNewHorizons:CodeChickenLib:1.1.5.7:dev')
compile('net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev')
compile('com.github.GTNewHorizons:NewHorizonsCoreMod:1.9.125:dev')
diff --git a/src/main/java/gtPlusPlus/GTplusplus.java b/src/main/java/gtPlusPlus/GTplusplus.java
index cea985301f..a5e80f5569 100644
--- a/src/main/java/gtPlusPlus/GTplusplus.java
+++ b/src/main/java/gtPlusPlus/GTplusplus.java
@@ -64,7 +64,7 @@ import net.minecraft.launchwrapper.Launch;
name = CORE.name,
version = CORE.VERSION,
dependencies =
- "required-after:Forge; after:TConstruct; after:PlayerAPI; after:dreamcraft; after:IC2; after:ihl; after:psychedelicraft; required-after:gregtech; after:Forestry; after:MagicBees; after:CoFHCore; after:Growthcraft; after:Railcraft; after:CompactWindmills; after:ForbiddenMagic; after:MorePlanet; after:PneumaticCraft; after:ExtraUtilities; after:Thaumcraft; after:rftools; after:simplyjetpacks; after:BigReactors; after:EnderIO; after:tectech; after:GTRedtech; after:beyondrealitycore; after:OpenBlocks; after:IC2NuclearControl; after:TGregworks; after:StevesCarts; after:xreliquary;")
+ "required-after:Forge; after:TConstruct; after:PlayerAPI; after:dreamcraft; after:IC2; after:ihl; after:psychedelicraft; required-after:gregtech; after:Forestry; after:MagicBees; after:CoFHCore; after:Growthcraft; after:Railcraft; after:CompactWindmills; after:ForbiddenMagic; after:MorePlanet; after:PneumaticCraft; after:ExtraUtilities; after:Thaumcraft; after:rftools; after:simplyjetpacks; after:BigReactors; after:EnderIO; after:tectech; after:GTRedtech; after:beyondrealitycore; after:OpenBlocks; after:IC2NuclearControl; after:TGregworks; after:StevesCarts; after:xreliquary; required-after:gtnhlib@[0.0.10,)")
public class GTplusplus implements ActionListener {
public static enum INIT_PHASE {
diff --git a/src/main/java/gtPlusPlus/core/util/reflect/ReflectionUtils.java b/src/main/java/gtPlusPlus/core/util/reflect/ReflectionUtils.java
index c493ce1aa9..f770cb0e97 100644
--- a/src/main/java/gtPlusPlus/core/util/reflect/ReflectionUtils.java
+++ b/src/main/java/gtPlusPlus/core/util/reflect/ReflectionUtils.java
@@ -1,6 +1,7 @@
package gtPlusPlus.core.util.reflect;
import com.google.common.reflect.ClassPath;
+import com.gtnewhorizon.gtnhlib.reflect.Fields;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.util.data.StringUtils;
import java.io.IOException;
@@ -20,12 +21,14 @@ import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.ArrayUtils;
+@SuppressWarnings({"unchecked", "rawtypes"})
public class ReflectionUtils {
- public static Map<String, Class<?>> mCachedClasses = new LinkedHashMap<String, Class<?>>();
- public static Map<String, CachedMethod> mCachedMethods = new LinkedHashMap<String, CachedMethod>();
- public static Map<String, CachedField> mCachedFields = new LinkedHashMap<String, CachedField>();
- public static Map<String, CachedConstructor> mCachedConstructors = new LinkedHashMap<String, CachedConstructor>();
+ public static Map<String, Class<?>> mCachedClasses = new LinkedHashMap<>();
+ public static Map<String, CachedMethod> mCachedMethods = new LinkedHashMap<>();
+ public static Map<String, CachedField> mCachedFields = new LinkedHashMap<>();
+ public static Map<String, CachedConstructor> mCachedConstructors = new LinkedHashMap<>();
+ public static Map<Field, Fields.ClassFields.Field> mCachedFieldAccessors = new LinkedHashMap<>();
private static class CachedConstructor {
@@ -78,6 +81,11 @@ public class ReflectionUtils {
}
}
+ private static Fields.ClassFields.Field cacheAccessor(Field f) {
+ return mCachedFieldAccessors.computeIfAbsent(f, (field) -> Fields.ofClass(field.getDeclaringClass())
+ .getUntypedField(Fields.LookupType.DECLARED_IN_HIERARCHY, field.getName()));
+ }
+
private static boolean cacheClass(Class<?> aClass) {
if (aClass == null) {
return false;
@@ -448,29 +456,12 @@ public class ReflectionUtils {
@Deprecated
public static void setFinalStatic(Field field, Object newValue) throws Exception {
- field.setAccessible(true);
- Field modifiersField = Field.class.getDeclaredField("modifiers");
- modifiersField.setAccessible(true);
- modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
- field.set(null, newValue);
+ cacheAccessor(field).setValue(null, newValue);
}
public static void setByte(Object clazz, String fieldName, byte newValue) throws Exception {
Field nameField = getField(clazz.getClass(), fieldName);
- nameField.setAccessible(true);
- int modifiers = nameField.getModifiers();
- Field modifierField = nameField.getClass().getDeclaredField("modifiers");
- modifiers = modifiers & ~Modifier.FINAL;
- modifierField.setAccessible(true);
- modifierField.setInt(nameField, modifiers);
- // Utils.LOG_INFO("O-"+(byte) nameField.get(clazz) + " | "+newValue);
- nameField.setByte(clazz, newValue);
- // Utils.LOG_INFO("N-"+(byte) nameField.get(clazz));
-
- /*final Field fieldA = getField(clazz.getClass(), fieldName);
- fieldA.setAccessible(true);
- fieldA.setByte(clazz, newValue);*/
-
+ cacheAccessor(nameField).setValue(null, newValue);
}
public static boolean invoke(Object objectInstance, String methodName, Class[] parameters, Object[] values) {
@@ -808,11 +799,6 @@ public class ReflectionUtils {
m = aClass.getDeclaredMethod(aMethodName, aTypes);
if (m != null) {
m.setAccessible(true);
- int modifiers = m.getModifiers();
- Field modifierField = m.getClass().getDeclaredField("modifiers");
- modifiers = modifiers & ~Modifier.FINAL;
- modifierField.setAccessible(true);
- modifierField.setInt(m, modifiers);
}
} catch (Throwable t) {
Logger.REFLECTION("Method: Internal Lookup Failed: " + aMethodName);
@@ -834,11 +820,6 @@ public class ReflectionUtils {
c = aClass.getDeclaredConstructor(aTypes);
if (c != null) {
c.setAccessible(true);
- int modifiers = c.getModifiers();
- Field modifierField = c.getClass().getDeclaredField("modifiers");
- modifiers = modifiers & ~Modifier.FINAL;
- modifierField.setAccessible(true);
- modifierField.setInt(c, modifiers);
}
} catch (Throwable t) {
Logger.REFLECTION("Constructor: Internal Lookup Failed: " + aClass.getName());
@@ -859,14 +840,9 @@ public class ReflectionUtils {
Constructor<?> c = aClass.getConstructor(aTypes);
if (c != null) {
c.setAccessible(true);
- int modifiers = c.getModifiers();
- Field modifierField = c.getClass().getDeclaredField("modifiers");
- modifiers = modifiers & ~Modifier.FINAL;
- modifierField.setAccessible(true);
- modifierField.setInt(c, modifiers);
}
return c;
- } catch (final NoSuchMethodException | IllegalArgumentException | IllegalAccessException e) {
+ } catch (final NoSuchMethodException | IllegalArgumentException e) {
final Class<?> superClass = aClass.getSuperclass();
if (superClass == null || superClass == Object.class) {
throw e;
@@ -1018,18 +994,7 @@ public class ReflectionUtils {
* Set the value of a field reflectively.
*/
private static void setFieldValue_Internal(Object owner, Field field, Object value) throws Exception {
- makeModifiable(field);
- field.set(owner, value);
- }
-
- /**
- * Force the field to be modifiable and accessible.
- */
- private static void makeModifiable(Field nameField) throws Exception {
- nameField.setAccessible(true);
- Field modifiers = getField(Field.class, "modifiers");
- modifiers.setAccessible(true);
- modifiers.setInt(nameField, nameField.getModifiers() & ~Modifier.FINAL);
+ cacheAccessor(field).setValue(owner, value);
}
public static boolean doesFieldExist(String clazz, String string) {
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/creative/GregtechMetaCreativeEnergyBuffer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/creative/GregtechMetaCreativeEnergyBuffer.java
index 9bfaa40972..d99ff30b20 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/creative/GregtechMetaCreativeEnergyBuffer.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/creative/GregtechMetaCreativeEnergyBuffer.java
@@ -2,6 +2,7 @@ package gtPlusPlus.xmod.gregtech.common.tileentities.generators.creative;
import static gregtech.api.enums.GT_Values.V;
+import com.gtnewhorizon.gtnhlib.reflect.Fields;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Textures;
import gregtech.api.interfaces.ITexture;
@@ -13,13 +14,10 @@ import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.math.MathUtils;
import gtPlusPlus.core.util.minecraft.PlayerUtils;
-import gtPlusPlus.core.util.reflect.ReflectionUtils;
import gtPlusPlus.core.util.sys.KeyboardUtils;
import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock;
import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.CustomIcon;
import gtPlusPlus.xmod.gregtech.common.tileentities.storage.GregtechMetaEnergyBuffer;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -208,6 +206,8 @@ public class GregtechMetaCreativeEnergyBuffer extends GregtechMetaEnergyBuffer {
super.loadNBTData(aNBT);
}
+ private static Fields.ClassFields<GregtechMetaCreativeEnergyBuffer>.Field<ITexture[][][]> mTexturesAccessor;
+
@Override
public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
if (KeyboardUtils.isShiftKeyDown()) {
@@ -220,18 +220,17 @@ public class GregtechMetaCreativeEnergyBuffer extends GregtechMetaEnergyBuffer {
}
this.markDirty();
try {
- Field field = ReflectionUtils.getField(this.getClass(), "mTextures");
- field.setAccessible(true);
- Field modifiersField = Field.class.getDeclaredField("modifiers");
- modifiersField.setAccessible(true);
- modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
+ if (mTexturesAccessor == null) {
+ mTexturesAccessor = Fields.ofClass(GregtechMetaCreativeEnergyBuffer.class)
+ .getField(Fields.LookupType.PUBLIC, "mTextures", ITexture[][][].class);
+ }
ITexture[][][] V = getTextureSet(null);
if (V != null) {
Logger.REFLECTION("Got Valid Textures.");
if (this.getBaseMetaTileEntity().isClientSide()) {
Logger.REFLECTION("Clientside Call.");
Logger.REFLECTION("Refreshing Textures on buffer.");
- field.set(this, V);
+ mTexturesAccessor.setValue(this, V);
Logger.REFLECTION("Refreshed Textures on buffer.");
} else {
Logger.REFLECTION("Serverside Call.");