diff options
| author | Johann Bernhardt <johann.bernhardt@tum.de> | 2021-12-12 19:38:06 +0100 |
|---|---|---|
| committer | Johann Bernhardt <johann.bernhardt@tum.de> | 2021-12-12 19:38:06 +0100 |
| commit | 311ab89f93558233a40079f7cb16605b141b5346 (patch) | |
| tree | c5f44ef47f441a57c5f57aa801f639c7879ed760 /src/main/java/gtPlusPlus/preloader | |
| parent | 896143b96132f5ac54aa8d8f7386f27487e5e530 (diff) | |
| download | GT5-Unofficial-311ab89f93558233a40079f7cb16605b141b5346.tar.gz GT5-Unofficial-311ab89f93558233a40079f7cb16605b141b5346.tar.bz2 GT5-Unofficial-311ab89f93558233a40079f7cb16605b141b5346.zip | |
Move sources and resources
Diffstat (limited to 'src/main/java/gtPlusPlus/preloader')
45 files changed, 18338 insertions, 0 deletions
diff --git a/src/main/java/gtPlusPlus/preloader/CORE_Preloader.java b/src/main/java/gtPlusPlus/preloader/CORE_Preloader.java new file mode 100644 index 0000000000..49209307f7 --- /dev/null +++ b/src/main/java/gtPlusPlus/preloader/CORE_Preloader.java @@ -0,0 +1,33 @@ +package gtPlusPlus.preloader; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import cpw.mods.fml.common.versioning.ArtifactVersion; + +public class CORE_Preloader { + + public static final String NAME = "GT++ Preloader"; + public static final String MODID = "GT++_Preloader"; + public static final String VERSION = "0.5-Beta"; + public static final List<ArtifactVersion> DEPENDENCIES; + public static final String JAVA_VERSION = System.getProperty("java.version"); + + public static File MC_DIR; + public static boolean DEV_ENVIRONMENT = false; + public static boolean DEBUG_MODE = false; + public static boolean enableOldGTcircuits = false; + public static int enableWatchdogBGM = 0; + + public static void setMinecraftDirectory(File aDir) { + MC_DIR = aDir; + } + + static { + ArrayList<ArtifactVersion> deps = new ArrayList<ArtifactVersion>(); + //deps.add("required-before:gregtech;"); + DEPENDENCIES = Collections.unmodifiableList(deps); + } +} diff --git a/src/main/java/gtPlusPlus/preloader/ChunkDebugger.java b/src/main/java/gtPlusPlus/preloader/ChunkDebugger.java new file mode 100644 index 0000000000..06964d31fa --- /dev/null +++ b/src/main/java/gtPlusPlus/preloader/ChunkDebugger.java @@ -0,0 +1,54 @@ +package gtPlusPlus.preloader; + +import java.util.LinkedHashMap; +import java.util.Map; + +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.Pair; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeChunkManager.Ticket; + +public class ChunkDebugger { + + + public static final Map<Integer, Pair<String, String>> mChunkTicketsMap = new LinkedHashMap<Integer, Pair<String, String>>(); + public static final Map<String, Pair<String, String>> mChunksLoadedByModsMap = new LinkedHashMap<String, Pair<String, String>>(); + + public static void storeTicketToCache(Ticket aTicket, World aWorld) { + mChunkTicketsMap.put(aTicket.hashCode(), new Pair<String, String>(aTicket.getModId(), ""+aTicket.world.provider.dimensionId)); + Logger.REFLECTION("Ticket created by "+aTicket.getModId()+" for dimension "+aTicket.world.provider.dimensionId); + } + + public static void storeLoadChunkToCache(Ticket aTicket, ChunkCoordIntPair aChunk) { + mChunksLoadedByModsMap.put(aChunk.toString(), new Pair<String, String>(aTicket.getModId(), aChunk.toString())); + Logger.REFLECTION("Chunk Loaded by "+aTicket.getModId()+" at position "+aChunk.toString()+" for dimension "+aTicket.world.provider.dimensionId); + } + + public static void removeTicketFromCache(Ticket aTicket) { + Pair<String, String> aPair = mChunkTicketsMap.get(aTicket.hashCode()); + String aKey = aPair.getKey(); + if (aKey == null) { + aKey = "Invalid ModId"; + } + Logger.REFLECTION("Ticket released by "+aKey+" for dimension "+aTicket.world.provider.dimensionId); + mChunkTicketsMap.remove(aTicket.hashCode()); + } + + public static void removeLoadedChunkFromCache(ChunkCoordIntPair aChunk) { + if (aChunk == null || aChunk.toString() == null) { + return; + } + Pair<String, String> aPair = mChunksLoadedByModsMap.get(aChunk.toString()); + if (aPair == null) { + return; + } + String aKey = aPair.getKey(); + String aValue = aPair.getValue(); + if (aKey != null && aValue != null) { + Logger.REFLECTION("Chunk Unloaded by "+aKey+" at position "+aChunk.toString()+""); + } + mChunksLoadedByModsMap.remove(aChunk.toString()); + } + +} diff --git a/src/main/java/gtPlusPlus/preloader/CustomClassLoader.java b/src/main/java/gtPlusPlus/preloader/CustomClassLoader.java new file mode 100644 index 0000000000..56394c11f0 --- /dev/null +++ b/src/main/java/gtPlusPlus/preloader/CustomClassLoader.java @@ -0,0 +1,57 @@ +package gtPlusPlus.preloader; + +import java.security.AllPermission; +import java.security.CodeSource; +import java.security.Permissions; +import java.security.ProtectionDomain; +import java.security.cert.Certificate; +import java.util.HashMap; + +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.tree.ClassNode; + +public class CustomClassLoader extends ClassLoader { + + private HashMap<String, ClassNode> classes = new HashMap<String, ClassNode>(); + + @Override + + public Class<?> loadClass(String name) throws ClassNotFoundException { + return findClass(name); + } + + @Override + + protected Class<?> findClass(String name) throws ClassNotFoundException { + ClassNode node = classes.get(name.replace('.', '/')); + if (node != null) + return nodeToClass(node); + else + return super.findClass(name); + } + + public final void addNode(ClassNode node) { + classes.put(node.name, node); + } + + private final Class<?> nodeToClass(ClassNode node) { + if (super.findLoadedClass(node.name) != null) + return findLoadedClass(node.name); + ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); + node.accept(cw); + byte[] b = cw.toByteArray(); + return defineClass(node.name.replace('/', '.'), b, 0, b.length, getDomain()); + } + + private final ProtectionDomain getDomain() { + CodeSource code = new CodeSource(null, (Certificate[]) null); + return new ProtectionDomain(code, getPermissions()); + } + + private final Permissions getPermissions() { + Permissions permissions = new Permissions(); + permissions.add(new AllPermission()); + return permissions; + } + +}
\ No newline at end of file diff --git a/src/main/java/gtPlusPlus/preloader/DevHelper.java b/src/main/java/gtPlusPlus/preloader/DevHelper.java new file mode 100644 index 0000000000..70a3c53073 --- /dev/null +++ b/src/main/java/gtPlusPlus/preloader/DevHelper.java @@ -0,0 +1,7139 @@ +package gtPlusPlus.preloader; + +import java.io.IOException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +import gtPlusPlus.api.objects.data.Pair; +import gtPlusPlus.api.objects.data.weakref.WeakAutoMap; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import net.minecraft.launchwrapper.Launch; + +public class DevHelper { + + private static final DevHelper mInstance; + public static final boolean mIsValidHelper; + + static { + mInstance = new DevHelper(); + if (DevHelperInternals.init()) { + mIsValidHelper = true; + } + else { + mIsValidHelper = false; + } + } + + public DevHelper() { + + } + + + + public static boolean isObfuscatedEnvironment() { + // Are we in a 'decompiled' environment? + boolean deobfuscatedEnvironment = false; + byte[] bs; + try { + bs = Launch.classLoader.getClassBytes("net.minecraft.world.World"); + if (bs != null) { + deobfuscatedEnvironment = true; + } else { + deobfuscatedEnvironment = false; + } + } catch (IOException e) { + } + return !deobfuscatedEnvironment; + } + + @SuppressWarnings("rawtypes") + public static Method getForgeMethod(Class c, String s, Class... varags) { + String s1, s2; + Method a, b; + s1 = s; + s2 = getSRG(s); + try { + a = ReflectionUtils.getMethod(c, s1, varags); + if (a != null) { + return a; + } + else { + b = ReflectionUtils.getMethod(c, s2, varags); + if (b != null) { + return b; + } + } + } + catch (Exception e) {} + return null; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + private static synchronized final DevHelper getInstance() { + return mInstance; + } + + public static synchronized final boolean isValidHelperObject() { + return mIsValidHelper; + } + + public static String getSRG(String mForgeName) { + String aSRG = DevHelperInternals.forgeToSrg.get(mForgeName); + return aSRG != null ? aSRG : "BAD_SRG_NAME"; + } + + public static String getForge(String mSrgName) { + String aForgeName = DevHelperInternals.srgToForge.get(mSrgName); + return aForgeName != null ? aForgeName : "BAD_FORGE_NAME"; + } + + public static String getMinecraftClassName(String adeObName, boolean obfuscated) { + if (obfuscated) { + return getObfuscated(adeObName); + } + return adeObName; + } + + public static String getObfuscated(String mDeob) { + String obfuscatedClassname = DevHelperInternals.deObToOb.get(mDeob); + obfuscatedClassname = obfuscatedClassname != null ? obfuscatedClassname : "BAD_OBFUSCATED_CLASS_NAME"; + if (obfuscatedClassname.equals("BAD_OBFUSCATED_CLASS_NAME")) { + Preloader_Logger.INFO("[Fix] Failed to Get Deobfuscated name for "+mDeob); + } + return obfuscatedClassname; + } + + public static String getDeobfuscated(String mOb) { + String deobfuscatedClassname = DevHelperInternals.obToDeOb.get(mOb); + return deobfuscatedClassname != null ? deobfuscatedClassname : "BAD_DEOBFUSCATED_CLASS_NAME"; + } + + public static class DevHelperInternals { + public static final Map<String, String> srgToForge = new HashMap<String, String>(); + public static final Map<String, String> forgeToSrg = new HashMap<String, String>(); + private static WeakAutoMap<Pair<String, String>> mInitMap = new WeakAutoMap<Pair<String, String>>(); + + //Obfuscation + public static final Map<String, String> obToDeOb = new HashMap<String, String>(); + public static final Map<String, String> deObToOb = new HashMap<String, String>(); + private static WeakAutoMap<Pair<String, String>> mObInitMap = new WeakAutoMap<Pair<String, String>>(); + + private static boolean init() { + init1(); + init2(); + init3(); + init4(); + if (mInitMap.size() > 0) { + for (Pair<String, String> p : mInitMap) { + if (p != null) { + String srg = p.getKey(); + String forge = p.getValue(); + srgToForge.put(srg, forge); + forgeToSrg.put(forge, srg); + } + } + } + + if (mObInitMap.size() > 0) { + for (Pair<String, String> p : mObInitMap) { + if (p != null) { + String ob = p.getKey(); + String deOb = p.getValue(); + obToDeOb.put(ob, deOb); + deObToOb.put(deOb, ob); + } + } + } + Preloader_Logger.INFO("[DevHelper] mInitMap size: "+mInitMap.size()); + Preloader_Logger.INFO("[DevHelper] mObInitMap size: "+mObInitMap.size()); + + Preloader_Logger.INFO("[DevHelper] srgToForge size: "+srgToForge.size()); + Preloader_Logger.INFO("[DevHelper] forgeToSrg size: "+forgeToSrg.size()); + Preloader_Logger.INFO("[DevHelper] obToDeOb size: "+obToDeOb.size()); + Preloader_Logger.INFO("[DevHelper] deObToOb size: "+deObToOb.size()); + + if (srgToForge.size() > 0 && forgeToSrg.size() > 0 && obToDeOb.size() > 0 && deObToOb.size() > 0) { + if (srgToForge.size() == forgeToSrg.size() && obToDeOb.size() == deObToOb.size()) { + return true; + } + else { + if (srgToForge.size() != forgeToSrg.size()) { + int aKey1 = 0; + int aKey2 = 0; + HashMap<Integer, String> aMissingForgeNames = new HashMap<Integer, String>(); + HashMap<Integer, String> aMissingSrgNames = new HashMap<Integer, String>(); + Preloader_Logger.INFO("Mismatch between mapped Forge and Srg names, finding missing values."); + if (srgToForge.size() > forgeToSrg.size()) { + Preloader_Logger.INFO("More SRG Keys detected."); + for (String aKey : srgToForge.keySet()) { + if (!forgeToSrg.containsValue(aKey)) { + aMissingSrgNames.put(aKey1++, aKey); + } + } + } + else if (srgToForge.size() < forgeToSrg.size()) { + Preloader_Logger.INFO("More Forge Keys detected."); + for (String aKey : forgeToSrg.keySet()) { + if (!srgToForge.containsValue(aKey)) { + aMissingForgeNames.put(aKey2++, aKey); + } + } + } + if (!aMissingForgeNames.isEmpty()) { + for (String missingVal : aMissingForgeNames.values()) { + //Preloader_Logger.WARNING("Missing Forge value: "+missingVal); + } + } + if (!aMissingSrgNames.isEmpty()) { + for (String missingVal : aMissingSrgNames.values()) { + //Preloader_Logger.WARNING("Missing SRG value: "+missingVal); + } + } + } + if (obToDeOb.size() != deObToOb.size()) { + int aKey1 = 0; + int aKey2 = 0; + HashMap<Integer, String> aMissingObfNames = new HashMap<Integer, String>(); + HashMap<Integer, String> aMissingDeObfNames = new HashMap<Integer, String>(); + Preloader_Logger.INFO("Mismatch between mapped Obfuscated and Deobfuscated names, finding missing values."); + if (obToDeOb.size() > deObToOb.size()) { + Preloader_Logger.INFO("More Obfuscated Keys detected."); + for (String aKey : obToDeOb.keySet()) { + if (!deObToOb.containsValue(aKey)) { + aMissingObfNames.put(aKey1++, aKey); + } + } + } + else if (obToDeOb.size() < deObToOb.size()) { + Preloader_Logger.INFO("More Deobfuscated Keys detected."); + for (String aKey : deObToOb.keySet()) { + if (!obToDeOb.containsValue(aKey)) { + aMissingDeObfNames.put(aKey2++, aKey); + } + } + } + if (!aMissingObfNames.isEmpty()) { + for (String missingVal : aMissingObfNames.values()) { + Preloader_Logger.WARNING("Missing Obfuscated value: "+missingVal); + } + } + if (!aMissingDeObfNames.isEmpty()) { + for (String missingVal : aMissingDeObfNames.values()) { + Preloader_Logger.WARNING("Missing Deobfuscated value: "+missingVal); + } + } + } + } + } + + // return true anyway as some keys will mismatch. + return true; + } + + private static void init1() { + mInitMap.put(new Pair<String, String>("func_100011_g", "getIsPotionDurationMax")); + mInitMap.put(new Pair<String, String>("func_100012_b", "setPotionDurationMax")); + mInitMap.put(new Pair<String, String>("func_100015_a", "isKeyDown")); + mInitMap.put(new Pair<String, String>("func_102007_a", "canInsertItem")); + mInitMap.put(new Pair<String, String>("func_102008_b", "canExtractItem")); + mInitMap.put(new Pair<String, String>("func_104002_bU", "isNoDespawnRequired")); + mInitMap.put(new Pair<String, String>("func_104055_i", "setForceGamemode")); + mInitMap.put(new Pair<String, String>("func_104056_am", "getForceGamemode")); + mInitMap.put(new Pair<String, String>("func_104112_b", "saveExtraData")); + mInitMap.put(new Pair<String, String>("func_104140_m", "saveChunkData")); + mInitMap.put(new Pair<String, String>("func_110123_P", "onChunkLoad")); + mInitMap.put(new Pair<String, String>("func_110124_au", "getUniqueID")); + mInitMap.put(new Pair<String, String>("func_110125_a", "setParticleIcon")); + mInitMap.put(new Pair<String, String>("func_110128_b", "onBroken")); + mInitMap.put(new Pair<String, String>("func_110130_b", "getKnotForBlock")); + mInitMap.put(new Pair<String, String>("func_110131_b", "removeFrameFromMap")); + mInitMap.put(new Pair<String, String>("func_110138_aP", "getMaxHealth")); + mInitMap.put(new Pair<String, String>("func_110139_bj", "getAbsorptionAmount")); + mInitMap.put(new Pair<String, String>("func_110140_aT", "getAttributeMap")); + mInitMap.put(new Pair<String, String>("func_110142_aN", "getCombatTracker")); + mInitMap.put(new Pair<String, String>("func_110143_aJ", "getHealth")); + mInitMap.put(new Pair<String, String>("func_110144_aD", "getLastAttacker")); + mInitMap.put(new Pair<String, String>("func_110145_l", "dismountEntity")); + mInitMap.put(new Pair<String, String>("func_110147_ax", "applyEntityAttributes")); + mInitMap.put(new Pair<String, String>("func_110148_a", "getEntityAttribute")); + mInitMap.put(new Pair<String, String>("func_110149_m", "setAbsorptionAmount")); + mInitMap.put(new Pair<String, String>("func_110159_bB", "updateLeashedState")); + mInitMap.put(new Pair<String, String>("func_110160_i", "clearLeashed")); + mInitMap.put(new Pair<String, String>("func_110161_a", "onSpawnWithEgg")); + mInitMap.put(new Pair<String, String>("func_110162_b", "setLeashedToEntity")); + mInitMap.put(new Pair<String, String>("func_110163_bv", "enablePersistence")); + mInitMap.put(new Pair<String, String>("func_110164_bC", "allowLeashing")); + mInitMap.put(new Pair<String, String>("func_110165_bF", "recreateLeash")); + mInitMap.put(new Pair<String, String>("func_110166_bE", "getLeashedToEntity")); + mInitMap.put(new Pair<String, String>("func_110167_bD", "getLeashed")); + mInitMap.put(new Pair<String, String>("func_110171_b", "setHomeArea")); + mInitMap.put(new Pair<String, String>("func_110172_bL", "getHomePosition")); + mInitMap.put(new Pair<String, String>("func_110173_bK", "isWithinHomeDistanceCurrentPosition")); + mInitMap.put(new Pair<String, String>("func_110174_bM", "getMaximumHomeDistance")); + mInitMap.put(new Pair<String, String>("func_110175_bO", "hasHome")); + mInitMap.put(new Pair<String, String>("func_110176_b", "isWithinHomeDistance")); + mInitMap.put(new Pair<String, String>("func_110177_bN", "detachHome")); + mInitMap.put(new Pair<String, String>("func_110195_a", "addGrowth")); + mInitMap.put(new Pair<String, String>("func_110198_t", "increaseTemper")); + mInitMap.put(new Pair<String, String>("func_110199_f", "openGUI")); + mInitMap.put(new Pair<String, String>("func_110200_cJ", "canMate")); + mInitMap.put(new Pair<String, String>("func_110202_bQ", "getHorseVariant")); + mInitMap.put(new Pair<String, String>("func_110204_cc", "isEatingHaystack")); + mInitMap.put(new Pair<String, String>("func_110206_u", "setJumpPower")); + mInitMap.put(new Pair<String, String>("func_110207_m", "setChested")); + mInitMap.put(new Pair<String, String>("func_110208_b", "setHorseWatchableBoolean")); + mInitMap.put(new Pair<String, String>("func_110209_cd", "isRearing")); + mInitMap.put(new Pair<String, String>("func_110212_cp", "getVariantTexturePaths")); + mInitMap.put(new Pair<String, String>("func_110214_p", "setHorseType")); + mInitMap.put(new Pair<String, String>("func_110215_cj", "getHorseJumpStrength")); + mInitMap.put(new Pair<String, String>("func_110216_r", "spawnHorseParticles")); + mInitMap.put(new Pair<String, String>("func_110217_cl", "getAngrySoundName")); + mInitMap.put(new Pair<String, String>("func_110218_cm", "getMaxTemper")); + mInitMap.put(new Pair<String, String>("func_110219_q", "setRearing")); + mInitMap.put(new Pair<String, String>("func_110220_cK", "makeHorseRear")); + mInitMap.put(new Pair<String, String>("func_110221_n", "setHasReproduced")); + mInitMap.put(new Pair<String, String>("func_110222_cv", "isSterile")); + mInitMap.put(new Pair<String, String>("func_110223_p", "getRearingAmount")); + mInitMap.put(new Pair<String, String>("func_110224_ci", "dropChests")); + mInitMap.put(new Pair<String, String>("func_110227_p", "setEatingHaystack")); + mInitMap.put(new Pair<String, String>("func_110228_bR", "isAdultHorse")); + mInitMap.put(new Pair<String, String>("func_110229_cs", "canCarryChest")); + mInitMap.put(new Pair<String, String>("func_110231_cz", "makeHorseRearWithSound")); + mInitMap.put(new Pair<String, String>("func_110233_w", "getHorseWatchableBoolean")); + mInitMap.put(new Pair<String, String>("func_110234_j", "setHorseTamed")); + mInitMap.put(new Pair<String, String>("func_110235_q", "setHorseVariant")); + mInitMap.put(new Pair<String, String>("func_110238_s", "setTemper")); + mInitMap.put(new Pair<String, String>("func_110240_a", "dropItemsInChest")); + mInitMap.put(new Pair<String, String>("func_110243_cf", "getHasReproduced")); + mInitMap.put(new Pair<String, String>("func_110244_cA", "dropChestItems")); + mInitMap.put(new Pair<String, String>("func_110246_bZ", "isHorseJumping")); + mInitMap.put(new Pair<String, String>("func_110247_cG", "setHorseTexturePaths")); + mInitMap.put(new Pair<String, String>("func_110248_bS", "isTame")); + mInitMap.put(new Pair<String, String>("func_110249_cI", "openHorseMouth")); + mInitMap.put(new Pair<String, String>("func_110250_a", "getClosestHorse")); + mInitMap.put(new Pair<String, String>("func_110251_o", "setHorseSaddled")); + mInitMap.put(new Pair<String, String>("func_110252_cg", "getTemper")); + mInitMap.put(new Pair<String, String>("func_110254_bY", "getHorseSize")); + mInitMap.put(new Pair<String, String>("func_110255_k", "setHorseJumping")); + mInitMap.put(new Pair<String, String>("func_110256_cu", "isUndead")); + mInitMap.put(new Pair<String, String>("func_110257_ck", "isHorseSaddled")); + mInitMap.put(new Pair<String, String>("func_110258_o", "getGrassEatingAmount")); + mInitMap.put(new Pair<String, String>("func_110259_cr", "canWearArmor")); + mInitMap.put(new Pair<String, String>("func_110260_d", "getHorseArmorIndex")); + mInitMap.put(new Pair<String, String>("func_110261_ca", "isChested")); + mInitMap.put(new Pair<String, String>("func_110262_ch", "prepareChunkForSpawn")); |
