aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kubatech/api/helpers
diff options
context:
space:
mode:
authorJakub <53441451+kuba6000@users.noreply.github.com>2023-06-15 17:53:16 +0200
committerGitHub <noreply@github.com>2023-06-15 17:53:16 +0200
commitcb383c824c3f799e678fb98f29661d79b5a13836 (patch)
treec27ec3672eb0cb1726565bf28ae2655404496231 /src/main/java/kubatech/api/helpers
parentb2c2a6dfe91696d4ecada95e5e43806ddb144ece (diff)
downloadGT5-Unofficial-cb383c824c3f799e678fb98f29661d79b5a13836.tar.gz
GT5-Unofficial-cb383c824c3f799e678fb98f29661d79b5a13836.tar.bz2
GT5-Unofficial-cb383c824c3f799e678fb98f29661d79b5a13836.zip
Use mixins accessors + some misc fixes (#77)
* Change reflections to mixins * Wrap witchery checking * Remove more repeating code * hmm * test generation * test * client sided * Update CommandCustomDrops.java * Update MobRecipeLoader.java * Save to static variable * Imports * Log message * Convert InfernalHelper to mixin accessors * Update build.gradle * One more * Return class nodes to optimize * Translations mixin * Automatically add commands * Fixes * Fix https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/12021 * Update kubatech.java * Update CommonProxy.java * Unnecessary qualified reference * Simplify ItemUtils * Check if single player diffrently * Remove accessor for infernal-mobs
Diffstat (limited to 'src/main/java/kubatech/api/helpers')
-rw-r--r--src/main/java/kubatech/api/helpers/InfernalHelper.java231
-rw-r--r--src/main/java/kubatech/api/helpers/ReflectionHelper.java63
2 files changed, 63 insertions, 231 deletions
diff --git a/src/main/java/kubatech/api/helpers/InfernalHelper.java b/src/main/java/kubatech/api/helpers/InfernalHelper.java
deleted file mode 100644
index e3c0db456b..0000000000
--- a/src/main/java/kubatech/api/helpers/InfernalHelper.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * spotless:off
- * KubaTech - Gregtech Addon
- * Copyright (C) 2022 - 2023 kuba6000
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this library. If not, see <https://www.gnu.org/licenses/>.
- * spotless:on
- */
-
-package kubatech.api.helpers;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-
-import net.minecraft.entity.EntityLivingBase;
-import net.minecraft.item.ItemStack;
-
-import atomicstryker.infernalmobs.common.InfernalMobsCore;
-import atomicstryker.infernalmobs.common.mods.api.ModifierLoader;
-
-@SuppressWarnings("unchecked")
-public class InfernalHelper {
-
- private static Method isClassAllowed = null;
-
- public static boolean isClassAllowed(EntityLivingBase e) {
- try {
- if (isClassAllowed == null) {
- isClassAllowed = InfernalMobsCore.class.getDeclaredMethod("isClassAllowed", EntityLivingBase.class);
- isClassAllowed.setAccessible(true);
- }
- return (boolean) isClassAllowed.invoke(InfernalMobsCore.instance(), e);
- } catch (Throwable exception) {
- exception.printStackTrace();
- }
- return false;
- }
-
- private static Method checkEntityClassForced = null;
-
- public static boolean checkEntityClassForced(EntityLivingBase e) {
- try {
- if (checkEntityClassForced == null) {
- checkEntityClassForced = InfernalMobsCore.class
- .getDeclaredMethod("checkEntityClassForced", EntityLivingBase.class);
- checkEntityClassForced.setAccessible(true);
- }
- return (boolean) checkEntityClassForced.invoke(InfernalMobsCore.instance(), e);
- } catch (Throwable exception) {
- exception.printStackTrace();
- }
- return false;
- }
-
- private static Field modifierLoaders = null;
-
- public static ArrayList<ModifierLoader<?>> getModifierLoaders() {
- try {
- if (modifierLoaders == null) {
- modifierLoaders = InfernalMobsCore.class.getDeclaredField("modifierLoaders");
- modifierLoaders.setAccessible(true);
- }
- return (ArrayList<ModifierLoader<?>>) modifierLoaders.get(InfernalMobsCore.instance());
- } catch (Throwable exception) {
- exception.printStackTrace();
- }
- return new ArrayList<>();
- }
-
- private static Field eliteRarity;
-
- public static int getEliteRarity() {
- try {
- if (eliteRarity == null) {
- eliteRarity = InfernalMobsCore.class.getDeclaredField("eliteRarity");
- eliteRarity.setAccessible(true);
- }
- return eliteRarity.getInt(InfernalMobsCore.instance());
- } catch (Throwable exception) {
- exception.printStackTrace();
- }
- return 15;
- }
-
- private static Field ultraRarity;
-
- public static int getUltraRarity() {
- try {
- if (ultraRarity == null) {
- ultraRarity = InfernalMobsCore.class.getDeclaredField("ultraRarity");
- ultraRarity.setAccessible(true);
- }
- return ultraRarity.getInt(InfernalMobsCore.instance());
- } catch (Throwable exception) {
- exception.printStackTrace();
- }
- return 15;
- }
-
- private static Field infernoRarity;
-
- public static int getInfernoRarity() {
- try {
- if (infernoRarity == null) {
- infernoRarity = InfernalMobsCore.class.getDeclaredField("infernoRarity");
- infernoRarity.setAccessible(true);
- }
- return infernoRarity.getInt(InfernalMobsCore.instance());
- } catch (Throwable exception) {
- exception.printStackTrace();
- }
- return 15;
- }
-
- private static Field minEliteModifiers;
-
- public static int getMinEliteModifiers() {
- try {
- if (minEliteModifiers == null) {
- minEliteModifiers = InfernalMobsCore.class.getDeclaredField("minEliteModifiers");
- minEliteModifiers.setAccessible(true);
- }
- return minEliteModifiers.getInt(InfernalMobsCore.instance());
- } catch (Throwable exception) {
- exception.printStackTrace();
- }
- return 15;
- }
-
- private static Field minUltraModifiers;
-
- public static int getMinUltraModifiers() {
- try {
- if (minUltraModifiers == null) {
- minUltraModifiers = InfernalMobsCore.class.getDeclaredField("minUltraModifiers");
- minUltraModifiers.setAccessible(true);
- }
- return minUltraModifiers.getInt(InfernalMobsCore.instance());
- } catch (Throwable exception) {
- exception.printStackTrace();
- }
- return 15;
- }
-
- private static Field minInfernoModifiers;
-
- public static int getMinInfernoModifiers() {
- try {
- if (minInfernoModifiers == null) {
- minInfernoModifiers = InfernalMobsCore.class.getDeclaredField("minInfernoModifiers");
- minInfernoModifiers.setAccessible(true);
- }
- return minInfernoModifiers.getInt(InfernalMobsCore.instance());
- } catch (Throwable exception) {
- exception.printStackTrace();
- }
- return 15;
- }
-
- private static Field dimensionBlackList;
-
- public static ArrayList<Integer> getDimensionBlackList() {
- try {
- if (dimensionBlackList == null) {
- dimensionBlackList = InfernalMobsCore.class.getDeclaredField("dimensionBlackList");
- dimensionBlackList.setAccessible(true);
- }
- return (ArrayList<Integer>) dimensionBlackList.get(InfernalMobsCore.instance());
- } catch (Throwable exception) {
- exception.printStackTrace();
- }
- return new ArrayList<>();
- }
-
- private static Field dropIdListElite;
-
- public static ArrayList<ItemStack> getDropIdListElite() {
- try {
- if (dropIdListElite == null) {
- dropIdListElite = InfernalMobsCore.class.getDeclaredField("dropIdListElite");
- dropIdListElite.setAccessible(true);
- }
- return (ArrayList<ItemStack>) dropIdListElite.get(InfernalMobsCore.instance());
- } catch (Throwable exception) {
- exception.printStackTrace();
- }
- return new ArrayList<>();
- }
-
- private static Field dropIdListUltra;
-
- public static ArrayList<ItemStack> getDropIdListUltra() {
- try {
- if (dropIdListUltra == null) {
- dropIdListUltra = InfernalMobsCore.class.getDeclaredField("dropIdListUltra");
- dropIdListUltra.setAccessible(true);
- }
- return (ArrayList<ItemStack>) dropIdListUltra.get(InfernalMobsCore.instance());
- } catch (Throwable exception) {
- exception.printStackTrace();
- }
- return new ArrayList<>();
- }
-
- private static Field dropIdListInfernal;
-
- public static ArrayList<ItemStack> getDropIdListInfernal() {
- try {
- if (dropIdListInfernal == null) {
- dropIdListInfernal = InfernalMobsCore.class.getDeclaredField("dropIdListInfernal");
- dropIdListInfernal.setAccessible(true);
- }
- return (ArrayList<ItemStack>) dropIdListInfernal.get(InfernalMobsCore.instance());
- } catch (Throwable exception) {
- exception.printStackTrace();
- }
- return new ArrayList<>();
- }
-}
diff --git a/src/main/java/kubatech/api/helpers/ReflectionHelper.java b/src/main/java/kubatech/api/helpers/ReflectionHelper.java
index 63fd6bd633..8f2234f052 100644
--- a/src/main/java/kubatech/api/helpers/ReflectionHelper.java
+++ b/src/main/java/kubatech/api/helpers/ReflectionHelper.java
@@ -20,9 +20,23 @@
package kubatech.api.helpers;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.Objects;
+import java.util.jar.JarFile;
+import java.util.stream.Collectors;
+
+import net.minecraft.launchwrapper.Launch;
+
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.tree.ClassNode;
public class ReflectionHelper {
@@ -140,4 +154,53 @@ public class ReflectionHelper {
return defaultValue;
}
}
+
+ /**
+ * Gets all classes in a specific package path, works only for jar files.
+ *
+ * @param packageName The package name
+ * @return The class nodes
+ */
+ public static Collection<ClassNode> getClasses(String packageName) throws IOException, SecurityException {
+ ClassLoader classLoader = Thread.currentThread()
+ .getContextClassLoader();
+ assert classLoader != null;
+ String packagePath = packageName.replace('.', '/');
+ URL resource = classLoader.getResource(packagePath);
+ if (resource == null) throw new FileNotFoundException();
+ if (!resource.getProtocol()
+ .equals("jar")) return Collections.emptySet();
+ String jarPath = resource.getPath();
+
+ try (JarFile jar = new JarFile(jarPath.substring(5, jarPath.indexOf('!')))) {
+ return jar.stream()
+ .filter(
+ j -> !j.isDirectory() && j.getName()
+ .startsWith(packagePath)
+ && j.getName()
+ .endsWith(".class"))
+ .map(j -> {
+ try {
+ String name = j.getName();
+ URL jarResource = Launch.classLoader.getResource(name);
+ if (jarResource == null) return null;
+ byte[] bytes;
+ try (InputStream is = jarResource.openStream()) {
+ bytes = new byte[(int) j.getSize()];
+ if (is.read(bytes) != bytes.length) return null;
+ if (is.available() > 0) return null;
+ }
+
+ ClassNode cn = new ClassNode();
+ ClassReader cr = new ClassReader(bytes);
+ cr.accept(cn, 0);
+
+ return cn;
+ } catch (IOException ignored) {}
+ return null;
+ })
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+ }
+ }
}