From 9888efc17d7ba38b1ed5a9f055069d2ff58d4df4 Mon Sep 17 00:00:00 2001 From: Alexdoru <57050655+Alexdoru@users.noreply.github.com> Date: Thu, 29 Aug 2024 02:13:44 +0200 Subject: [PATCH 1/4] delete broken ASM code that never did anything in the full pack and that crashes the game anyways when you enable it --- .../core/asm/GCLoadingPlugin.java | 33 ++----- .../galacticraft/core/asm/GCTransformer.java | 80 ----------------- .../ServerConfigurationManagerVisitor.java | 68 -------------- .../core/asm/TransformerFactory.java | 52 ----------- .../entities/player/GCEntityPlayerMP.java | 89 ------------------- 5 files changed, 6 insertions(+), 316 deletions(-) delete mode 100644 src/main/java/micdoodle8/mods/galacticraft/core/asm/GCTransformer.java delete mode 100644 src/main/java/micdoodle8/mods/galacticraft/core/asm/ServerConfigurationManagerVisitor.java delete mode 100644 src/main/java/micdoodle8/mods/galacticraft/core/asm/TransformerFactory.java delete mode 100644 src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityPlayerMP.java diff --git a/src/main/java/micdoodle8/mods/galacticraft/core/asm/GCLoadingPlugin.java b/src/main/java/micdoodle8/mods/galacticraft/core/asm/GCLoadingPlugin.java index 59d69e8b15..21297c5c37 100644 --- a/src/main/java/micdoodle8/mods/galacticraft/core/asm/GCLoadingPlugin.java +++ b/src/main/java/micdoodle8/mods/galacticraft/core/asm/GCLoadingPlugin.java @@ -1,11 +1,6 @@ package micdoodle8.mods.galacticraft.core.asm; -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -13,29 +8,18 @@ import com.gtnewhorizon.gtnhmixins.IEarlyMixinLoader; import cpw.mods.fml.relauncher.IFMLLoadingPlugin; -import cpw.mods.fml.relauncher.IFMLLoadingPlugin.MCVersion; -import cpw.mods.fml.relauncher.IFMLLoadingPlugin.Name; -import cpw.mods.fml.relauncher.IFMLLoadingPlugin.SortingIndex; -import cpw.mods.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions; import micdoodle8.mods.galacticraft.core.Constants; import micdoodle8.mods.galacticraft.core.mixins.Mixins; -/** - * Holds the rest of GC's class patching code. - */ -@TransformerExclusions("micdoodle8.mods.galacticraft.core.asm") -@MCVersion("1.7.10") -@Name(Constants.COREMOD_NAME_SIMPLE) -@SortingIndex(1500) +@IFMLLoadingPlugin.MCVersion("1.7.10") +@IFMLLoadingPlugin.Name(Constants.COREMOD_NAME_SIMPLE) public class GCLoadingPlugin implements IFMLLoadingPlugin, IEarlyMixinLoader { - static final Logger LOGGER = LogManager.getLogger(Constants.COREMOD_NAME_SIMPLE); - static boolean dev; - static File debugOutputDir; + private static final Logger LOGGER = LogManager.getLogger(Constants.COREMOD_NAME_SIMPLE); @Override public String[] getASMTransformerClass() { - return new String[] { "micdoodle8.mods.galacticraft.core.asm.GCTransformer" }; + return null; } @Override @@ -49,12 +33,7 @@ public String getSetupClass() { } @Override - public void injectData(Map data) { - dev = !(boolean) data.get("runtimeDeobfuscationEnabled"); - debugOutputDir = new File((File) data.get("mcLocation"), ".asm"); - // noinspection ResultOfMethodCallIgnored - debugOutputDir.mkdir(); - } + public void injectData(Map data) {} @Override public String getAccessTransformerClass() { diff --git a/src/main/java/micdoodle8/mods/galacticraft/core/asm/GCTransformer.java b/src/main/java/micdoodle8/mods/galacticraft/core/asm/GCTransformer.java deleted file mode 100644 index 5f6da3ec86..0000000000 --- a/src/main/java/micdoodle8/mods/galacticraft/core/asm/GCTransformer.java +++ /dev/null @@ -1,80 +0,0 @@ -package micdoodle8.mods.galacticraft.core.asm; - -import static micdoodle8.mods.galacticraft.core.asm.GCLoadingPlugin.debugOutputDir; -import static org.objectweb.asm.Opcodes.ASM5; - -import java.io.File; -import java.io.PrintWriter; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - -import net.minecraft.launchwrapper.IClassTransformer; - -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.util.TraceClassVisitor; - -import com.google.common.collect.ImmutableMap; - -public class GCTransformer implements IClassTransformer { - - private static final boolean DEBUG = Boolean.getBoolean("glease.debugasm"); - private static final ConcurrentMap transformCounts = new ConcurrentHashMap<>(); - private final Map transformers = ImmutableMap.builder() - .put( - "net.minecraft.server.management.ServerConfigurationManager", - new TransformerFactory(ServerConfigurationManagerVisitor::new)) - .build(); - - static void catching(Exception e) { - GCLoadingPlugin.LOGGER.fatal("Something went very wrong with class transforming! Aborting!!!", e); - throw new RuntimeException("Transforming class", e); - } - - @Override - public byte[] transform(String name, String transformedName, byte[] basicClass) { - final TransformerFactory factory = this.transformers.get(name); - if (factory == null || factory.isInactive()) { - return basicClass; - } - GCLoadingPlugin.LOGGER.info("Transforming class {}", name); - final ClassReader cr = new ClassReader(basicClass); - final ClassWriter cw = new ClassWriter(factory.isExpandFrames() ? ClassWriter.COMPUTE_FRAMES : 0); - // we are very probably the last one to run. - byte[] transformedBytes = null; - if (DEBUG) { - final int curCount = transformCounts.compute(transformedName, (k, v) -> v == null ? 0 : v + 1); - final String infix = curCount == 0 ? "" : "_" + curCount; - try (PrintWriter origOut = new PrintWriter(new File(debugOutputDir, name + infix + "_orig.txt"), "UTF-8"); - PrintWriter tranOut = new PrintWriter( - new File(debugOutputDir, name + infix + "_tran.txt"), - "UTF-8")) { - cr.accept( - new TraceClassVisitor(factory.apply(ASM5, new TraceClassVisitor(cw, tranOut)), origOut), - factory.isExpandFrames() ? ClassReader.SKIP_FRAMES : 0); - transformedBytes = cw.toByteArray(); - } catch (final Exception e) { - GCLoadingPlugin.LOGGER - .warn("Unable to transform with debug output on. Now retrying without debug output.", e); - } - } - if (transformedBytes == null || transformedBytes.length == 0) { - try { - cr.accept(factory.apply(ASM5, cw), factory.isExpandFrames() ? ClassReader.SKIP_FRAMES : 0); - transformedBytes = cw.toByteArray(); - } catch (final Exception e) { - catching(e); - } - } - if (transformedBytes == null || transformedBytes.length == 0) { - if (!DEBUG) { - GCLoadingPlugin.LOGGER.fatal( - "Null or empty byte array created. Transforming will rollback as a last effort attempt to make things work! However features will not function!"); - return basicClass; - } - catching(new RuntimeException("Null or empty byte array created. This will not work well!")); - } - return transformedBytes; - } -} diff --git a/src/main/java/micdoodle8/mods/galacticraft/core/asm/ServerConfigurationManagerVisitor.java b/src/main/java/micdoodle8/mods/galacticraft/core/asm/ServerConfigurationManagerVisitor.java deleted file mode 100644 index 5e0d80df5e..0000000000 --- a/src/main/java/micdoodle8/mods/galacticraft/core/asm/ServerConfigurationManagerVisitor.java +++ /dev/null @@ -1,68 +0,0 @@ -package micdoodle8.mods.galacticraft.core.asm; - -import static micdoodle8.mods.galacticraft.core.asm.GCLoadingPlugin.dev; -import static org.objectweb.asm.Opcodes.INVOKESPECIAL; -import static org.objectweb.asm.Opcodes.NEW; - -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.MethodVisitor; - -/** - * This cannot be a mixin, as it'd otherwise break on thermos server - *

- * Scrubs ServerConfigurationManager for new EntityPlayerMP and replace it with new GCEntityPlayerMP - */ -public class ServerConfigurationManagerVisitor extends ClassVisitor { - - public ServerConfigurationManagerVisitor(int api, ClassVisitor cv) { - super(api, cv); - } - - @Override - public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - return new EntityPlayerMPReplacer(this.api, super.visitMethod(access, name, desc, signature, exceptions), name); - } - - private static class EntityPlayerMPReplacer extends MethodVisitor { - - private static final String REPLACEMENT_CLASS_INTERNAL_NAME = "micdoodle8/mods/galacticraft/core/entities/player/GCEntityPlayerMP"; - private final String methodName; - - public EntityPlayerMPReplacer(int api, MethodVisitor mv, String methodName) { - super(api, mv); - this.methodName = methodName; - } - - @Override - public void visitTypeInsn(int opcode, String type) { - if (opcode == NEW - && (dev ? "net/minecraft/entity/player/EntityPlayerMP".equals(type) : "mw".equals(type))) { - GCLoadingPlugin.LOGGER.debug( - "Replacing NEW {} with NEW micdoodle8/mods/galacticraft/core/entities/player/GCEntityPlayerMP in {}", - type, - this.methodName); - super.visitTypeInsn(NEW, REPLACEMENT_CLASS_INTERNAL_NAME); - } else { - super.visitTypeInsn(opcode, type); - } - } - - @Override - public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { - if (opcode == INVOKESPECIAL && "".equals(name) - && (dev ? "net/minecraft/entity/player/EntityPlayerMP".equals(owner) : "mw".equals(owner))) { - GCLoadingPlugin.LOGGER.debug( - "Replacing INVOKESPECIAL {}{}{} with NEW micdoodle8/mods/galacticraft/core/entities/player/GCEntityPlayerMP{}{} in {}", - owner, - name, - desc, - name, - desc, - this.methodName); - super.visitMethodInsn(opcode, REPLACEMENT_CLASS_INTERNAL_NAME, name, desc, itf); - } else { - super.visitMethodInsn(opcode, owner, name, desc, itf); - } - } - } -} diff --git a/src/main/java/micdoodle8/mods/galacticraft/core/asm/TransformerFactory.java b/src/main/java/micdoodle8/mods/galacticraft/core/asm/TransformerFactory.java deleted file mode 100644 index 1204591a3a..0000000000 --- a/src/main/java/micdoodle8/mods/galacticraft/core/asm/TransformerFactory.java +++ /dev/null @@ -1,52 +0,0 @@ -package micdoodle8.mods.galacticraft.core.asm; - -import java.util.function.BiFunction; - -import org.objectweb.asm.ClassVisitor; - -import cpw.mods.fml.relauncher.FMLLaunchHandler; -import cpw.mods.fml.relauncher.Side; - -class TransformerFactory { - - private final BiFunction factory; - private final Side activeSide; - private final boolean expandFrames; - - public TransformerFactory(BiFunction factory) { - this(factory, null, false); - } - - public TransformerFactory(BiFunction factory, boolean expandFrames) { - this(factory, null, expandFrames); - } - - public TransformerFactory(BiFunction factory, Side activeSide) { - this(factory, activeSide, false); - } - - /** - * @param factory the constructor of actual ClassVisitor. First argument is api level. Second argument is - * downstream ClassVisitor - * @param activeSide the side this transformer will be active on. null for both side. - * @param expandFrames whether the frames need to be recalculated - */ - public TransformerFactory(BiFunction factory, Side activeSide, - boolean expandFrames) { - this.factory = factory; - this.activeSide = activeSide; - this.expandFrames = expandFrames; - } - - public boolean isInactive() { - return this.activeSide != null && this.activeSide != FMLLaunchHandler.side(); - } - - public final ClassVisitor apply(int api, ClassVisitor downstream) { - return this.factory.apply(api, downstream); - } - - public boolean isExpandFrames() { - return this.expandFrames; - } -} diff --git a/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityPlayerMP.java b/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityPlayerMP.java deleted file mode 100644 index f0bf94752a..0000000000 --- a/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityPlayerMP.java +++ /dev/null @@ -1,89 +0,0 @@ -package micdoodle8.mods.galacticraft.core.entities.player; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.management.ItemInWorldManager; -import net.minecraft.util.DamageSource; -import net.minecraft.world.WorldServer; - -import com.mojang.authlib.GameProfile; - -import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; -import micdoodle8.mods.galacticraft.core.GalacticraftCore; -import micdoodle8.mods.galacticraft.core.tile.TileEntityTelemetry; -import micdoodle8.mods.galacticraft.core.util.WorldUtil; - -/** - * Do not reference this or test 'intance of' this in your code: if PlayerAPI is installed, GCEntityPlayerMP will not be - * used. - */ -public class GCEntityPlayerMP extends EntityPlayerMP { - - public GCEntityPlayerMP(MinecraftServer server, WorldServer world, GameProfile profile, - ItemInWorldManager itemInWorldManager) { - super(server, WorldUtil.getStartWorld(world), profile, itemInWorldManager); - if (this.worldObj != world) { - GCPlayerStats.get(this).startAdventure(WorldUtil.getDimensionName(this.worldObj.provider)); - } - } - - // Server-only method - @Override - public void clonePlayer(EntityPlayer oldPlayer, boolean keepInv) { - super.clonePlayer(oldPlayer, keepInv); - GalacticraftCore.proxy.player.clonePlayer(this, oldPlayer, keepInv); - TileEntityTelemetry.updateLinkedPlayer((EntityPlayerMP) oldPlayer, this); - } - - @Override - public void updateRidden() { - GalacticraftCore.proxy.player.updateRiddenPre(this); - super.updateRidden(); - GalacticraftCore.proxy.player.updateRiddenPost(this); - } - - @Override - public void mountEntity(Entity par1Entity) { - if (!GalacticraftCore.proxy.player.mountEntity(this, par1Entity)) { - super.mountEntity(par1Entity); - } - } - - @Override - public void moveEntity(double par1, double par3, double par5) { - super.moveEntity(par1, par3, par5); - GalacticraftCore.proxy.player.moveEntity(this, par1, par3, par5); - } - - @Override - public void wakeUpPlayer(boolean par1, boolean par2, boolean par3) { - if (!GalacticraftCore.proxy.player.wakeUpPlayer(this, par1, par2, par3)) { - super.wakeUpPlayer(par1, par2, par3); - } - } - - @Override - public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) { - par2 = GalacticraftCore.proxy.player.attackEntityFrom(this, par1DamageSource, par2); - - if (par2 == -1) { - return false; - } - - return super.attackEntityFrom(par1DamageSource, par2); - } - - @Override - public void knockBack(Entity p_70653_1_, float p_70653_2_, double impulseX, double impulseZ) { - GalacticraftCore.proxy.player.knockBack(this, p_70653_1_, p_70653_2_, impulseX, impulseZ); - } - - @Override - public void setInPortal() { - if (!(this.worldObj.provider instanceof IGalacticraftWorldProvider)) { - super.setInPortal(); - } - } -} From fef5572a70e062eeb67b8cee72390fb9a5bc1552 Mon Sep 17 00:00:00 2001 From: Alexdoru <57050655+Alexdoru@users.noreply.github.com> Date: Thu, 29 Aug 2024 02:38:01 +0200 Subject: [PATCH 2/4] spotless --- .../mods/galacticraft/core/asm/GCLoadingPlugin.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/micdoodle8/mods/galacticraft/core/asm/GCLoadingPlugin.java b/src/main/java/micdoodle8/mods/galacticraft/core/asm/GCLoadingPlugin.java index 21297c5c37..13db04ef95 100644 --- a/src/main/java/micdoodle8/mods/galacticraft/core/asm/GCLoadingPlugin.java +++ b/src/main/java/micdoodle8/mods/galacticraft/core/asm/GCLoadingPlugin.java @@ -1,6 +1,10 @@ package micdoodle8.mods.galacticraft.core.asm; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; From 57ad1edf99f01647f9cb9ab185f9dc5cf022a3f5 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Thu, 29 Aug 2024 08:21:05 +0200 Subject: [PATCH 3/4] update --- dependencies.gradle | 8 ++++---- settings.gradle | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index e9f36622ec..4b2014e6ef 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,10 +1,10 @@ dependencies { - implementation('com.github.GTNewHorizons:GT5-Unofficial:5.09.48.113:dev') - implementation('com.github.GTNewHorizons:TinkersConstruct:1.12.5-GTNH:dev') - implementation('com.github.GTNewHorizons:NotEnoughItems:2.6.19-GTNH:dev') + implementation('com.github.GTNewHorizons:GT5-Unofficial:5.09.49.35:dev') + implementation('com.github.GTNewHorizons:TinkersConstruct:1.12.8-GTNH:dev') + implementation('com.github.GTNewHorizons:NotEnoughItems:2.6.26-GTNH:dev') api('net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev') - compileOnly('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-418-GTNH:api') + compileOnly('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-442-GTNH:api') compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.39:api') compileOnly('curse.maven:cofh-lib-220333:2388748') compileOnly('curse.maven:PlayerAPI-228969:2248928') diff --git a/settings.gradle b/settings.gradle index 54797868d3..242692e5d7 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.25' + id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.26' } From c6d398a493ed8effb392eeecc11d379429ce951b Mon Sep 17 00:00:00 2001 From: Raven Szewczyk Date: Sat, 31 Aug 2024 19:02:46 +0100 Subject: [PATCH 4/4] Do not depend on itself --- dependencies.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 4b2014e6ef..55b9bdcaf7 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,5 +1,7 @@ dependencies { - implementation('com.github.GTNewHorizons:GT5-Unofficial:5.09.49.35:dev') + implementation('com.github.GTNewHorizons:GT5-Unofficial:5.09.49.35:dev') { + exclude group: "com.github.GTNewHorizons", module: "Galacticraft" + } implementation('com.github.GTNewHorizons:TinkersConstruct:1.12.8-GTNH:dev') implementation('com.github.GTNewHorizons:NotEnoughItems:2.6.26-GTNH:dev') api('net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev')