Skip to content

Commit

Permalink
Patch subaquatic
Browse files Browse the repository at this point in the history
  • Loading branch information
kappa-maintainer committed Apr 19, 2024
1 parent fcca93b commit 183fb83
Show file tree
Hide file tree
Showing 11 changed files with 146 additions and 4 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ https://github.com/CleanroomMC/Fugue/releases/latest
* Smooth Font
* Water Power
* Survival Inc.
* Subauqatic (Temporary)

## Note
Add + to start of the file if it's not there.
19 changes: 18 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,18 @@ repositories {
name "tterrag" //EnderCore
url "https://maven.tterrag.com/"
}
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
forRepositories(fg.repository) // Only add this if you're using ForgeGradle, otherwise remove this line
filter {
includeGroup "maven.modrinth"
}
}
mavenCentral()
}

Expand Down Expand Up @@ -180,8 +192,12 @@ dependencies {

//Water Power
compileOnly(fg.deobf("curse.maven:waterpower-224579:2464789"))
implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.9.23'

// Subaquatic
compileOnly(fg.deobf("maven.modrinth:subaquatic:8I38sNEh"))


implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.9.23'

// Mixin and it's common libraries
annotationProcessor 'org.ow2.asm:asm:9.6'
Expand All @@ -206,6 +222,7 @@ jar {
'FMLCorePlugin': 'com.cleanroommc.fugue.common.FugueLoadingPlugin',
'ForceLoadAsMod': true,
'MixinConfigs': 'fugue.mixin.mod.json,fugue.mixin.init.json',
'ModType': 'CRL',
//'FMLAT': 'accesstransformer.cfg',
'Implementation-Title': project.name,
'Implementation-Version': mod_version,
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ mappings_version=39-1.12
mod_id=fugue
mod_name=Fugue
mod_main_class=Fugue
mod_version=0.14.0-beta
mod_version=0.14.1-beta
mod_base_package=com.cleanroommc.fugue
mod_authors=kappa_maintainer
mod_description=A mod that patch dead mods for Cleanroom
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.cleanroommc.fugue.transformer.loliasm.JavaFixesTransformer;
import com.cleanroommc.fugue.transformer.loliasm.LoliFMLCallHookTransformer;
import com.cleanroommc.fugue.transformer.loliasm.LoliReflectorTransformer;
import com.cleanroommc.fugue.transformer.subaquatic.PluginEntityTransformer;
import com.cleanroommc.fugue.transformer.tickcentral.*;
import com.cleanroommc.fugue.transformer.universal.*;
import net.minecraft.launchwrapper.Launch;
Expand Down Expand Up @@ -88,6 +89,10 @@ public class FugueLoadingPlugin implements IFMLLoadingPlugin {
if (FugueConfig.modPatchConfig.enableSurvivialInc) {
TransformerDelegate.registerExplicitTransformerByInstance(new ForgeASMInjectorTransformer(), "enginecrafter77.survivalinc.util.ForgeASMInjector");
}
if (FugueConfig.modPatchConfig.enableSubaquatic) {
TransformerDelegate.registerExplicitTransformerByInstance(new PluginEntityTransformer(), "git.jbredwards.subaquatic.mod.asm.plugin.vanilla.entity.PluginEntity");
TransformerDelegate.registerExplicitTransformerByInstance(new SubaquaticIMTransformer(), "net.minecraft.world.gen.layer.GenLayer");
}
if (FugueConfig.getCodeSourcePatchTargets.length > 0) {
TransformerDelegate.registerExplicitTransformerByInstance(new ITweakerTransformer(), FugueConfig.getCodeSourcePatchTargets);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
case "howlingmoon" -> Loader.isModLoaded("howlingmoon") && FugueConfig.modPatchConfig.enableHowlingMoon;
case "customnpcs" -> Loader.isModLoaded("customnpcs") && FugueConfig.modPatchConfig.enableCustomNPC;
case "waterpower" -> Loader.isModLoaded("waterpower") && FugueConfig.modPatchConfig.enableWaterPower;
case "subaquatic" -> Loader.isModLoaded("subaquatic") && FugueConfig.modPatchConfig.enableSubaquatic;
default -> true;
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,6 @@ public class ModPatchConfig {
public boolean enableSurvivialInc = true;
@Config.Name("Enable Water Power Patch")
public boolean enableWaterPower = true;
@Config.Name("Enable Subaquatic Patch")
public boolean enableSubaquatic = true;
}
5 changes: 4 additions & 1 deletion src/main/java/com/cleanroommc/fugue/helper/HookHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import top.outlands.foundation.TransformerDelegate;
import top.outlands.foundation.boot.ActualClassLoader;
import top.outlands.foundation.boot.JVMDriverHolder;
import top.outlands.foundation.boot.UnsafeHolder;

import java.io.IOException;
import java.io.InputStream;
Expand Down Expand Up @@ -67,7 +68,9 @@ public static InputStream open(URL instance) throws IOException {
}

public static Field getField(Class<?> clazz, String name) throws NoSuchFieldException {
if (!clazz.equals(LaunchClassLoader.class)) return JVMDriverHolder.findField(clazz, name);
if (!clazz.equals(LaunchClassLoader.class)) {
return clazz.getDeclaredField(name);
}
if (name.equals("transformers") || name.equals("renameTransformer")) {
HookHelper.transformers = TransformerDelegate.getTransformers();
return HookHelper.class.getDeclaredField(name);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.cleanroommc.fugue.mixin.subaquatic;

import git.jbredwards.subaquatic.mod.common.capability.IBubbleColumn;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

import javax.annotation.Nonnull;
import java.util.Map;
import java.util.function.Supplier;

@Mixin(value = IBubbleColumn.class, remap = false)
public interface IBubbleColumnMixin {
@Shadow @Final @Nonnull public static Map<Class<?>, Supplier<IBubbleColumn>> BUBBLE_COLUMN_FACTORY = null;

@Shadow
public static Supplier<IBubbleColumn> getHandlerForClass(@Nonnull Class<?> clazzIn) {
return null;
}

@Inject(method = "getHandlerForClass", at = @At("HEAD"), cancellable = true)
private static void fixCME(@Nonnull Class<?> clazzIn, CallbackInfoReturnable<Supplier<IBubbleColumn>> cir) {
if(clazzIn == Object.class) throw new IllegalArgumentException("Class has no bubble column handler, this should never happen!");
cir.setReturnValue(() -> {
if(BUBBLE_COLUMN_FACTORY.containsKey(clazzIn)) {
return BUBBLE_COLUMN_FACTORY.get(clazzIn).get();
} else {
return getHandlerForClass(clazzIn.getSuperclass()).get();
}
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.cleanroommc.fugue.transformer;

import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.*;
import top.outlands.foundation.IExplicitTransformer;

public class SubaquaticIMTransformer implements IExplicitTransformer {
@Override
public byte[] transform(byte[] bytes) {
ClassNode classNode = new ClassNode();
ClassReader classReader = new ClassReader(bytes);
classReader.accept(classNode, 0);
if (classNode.methods != null)
{
for (MethodNode methodNode : classNode.methods)
{
if (methodNode.name.equals("func_151618_b")) {
InsnList instructions = methodNode.instructions;
if (instructions != null)
{
for (AbstractInsnNode insnNode : instructions)
{
if (insnNode.getOpcode() == Opcodes.INVOKESTATIC && insnNode instanceof MethodInsnNode methodInsnNode)
{
if (methodInsnNode.owner.equals("git/jbredwards/subaquatic/api/biome/IOceanBiome") && (methodInsnNode.name.equals("isOcean")))
{
methodInsnNode.itf = true;
}
}
}
}
}
}
}
ClassWriter classWriter = new ClassWriter(0);

classNode.accept(classWriter);
return classWriter.toByteArray();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.cleanroommc.fugue.transformer.subaquatic;

import com.cleanroommc.fugue.common.Fugue;
import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.expr.ExprEditor;
import javassist.expr.NewExpr;
import top.outlands.foundation.IExplicitTransformer;

import java.io.ByteArrayInputStream;

public class PluginEntityTransformer implements IExplicitTransformer {
@Override
public byte[] transform(byte[] bytes) {
try {
CtClass cc = ClassPool.getDefault().makeClass(new ByteArrayInputStream(bytes));
cc.getDeclaredMethod("transform").instrument(new ExprEditor() {
@Override
public void edit(NewExpr e) throws CannotCompileException {
if (e.getLineNumber() == 58 && e.getClassName().equals("org.objectweb.asm.tree.VarInsnNode")) {
e.replace(
"""
$_ = $proceed(25, 26);
""");
}
}
});
bytes = cc.toBytecode();
} catch (Throwable t) {
Fugue.LOGGER.error(t);
}
return bytes;
}
}
3 changes: 2 additions & 1 deletion src/main/resources/fugue.mixin.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@
"solarflux.SolarFluxMixin",
"xaeroplus.ChunkHighlightSavingCacheMixin",
"xaeroplus.XaeroPlusSettingsReflectionHaxMixin",
"waterpower.ClassEngineMixin"
"waterpower.ClassEngineMixin",
"subaquatic.IBubbleColumnMixin"
],
"client": [
"custommainmenu.SlideshowMixin",
Expand Down

0 comments on commit 183fb83

Please sign in to comment.