From 902ec9832f4d3edf721386897853438e19e9eb5d Mon Sep 17 00:00:00 2001 From: Tom Martin Date: Mon, 16 Jun 2025 10:35:15 +0100 Subject: [PATCH 1/2] Fix missing init methods due to __init__ mixin bug workaround --- .../cubicchunks/mixin/ASMConfigPlugin.java | 4 +++- .../world/level/cube/status/CubeStep.java | 19 ++++--------------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/main/java/io/github/opencubicchunks/cubicchunks/mixin/ASMConfigPlugin.java b/src/main/java/io/github/opencubicchunks/cubicchunks/mixin/ASMConfigPlugin.java index 0d56b1b8..5088c4c6 100644 --- a/src/main/java/io/github/opencubicchunks/cubicchunks/mixin/ASMConfigPlugin.java +++ b/src/main/java/io/github/opencubicchunks/cubicchunks/mixin/ASMConfigPlugin.java @@ -187,7 +187,9 @@ record PrefixMethodPair(MethodNode dasmAddedMethod, MethodNode mixinAddedMethod) List methodPairs = new ArrayList<>(); for (MethodNode methodNode : targetClass.methods) { if (methodNode.name.contains("cc_dasm$")) { - var methodNameWithoutPrefix = methodNode.name.substring(methodNode.name.indexOf("$") + 1); + var methodNameWithoutPrefix = methodNode.name.substring(methodNode.name.indexOf("$") + 1) + .replace("__init__", "").replace("__clinit__", ""); + var mixinAddedMethod = targetClass.methods.stream() .filter(m -> m.name.equals(methodNameWithoutPrefix) && m.desc.equals(methodNode.desc)).findFirst(); diff --git a/src/main/java/io/github/opencubicchunks/cubicchunks/world/level/cube/status/CubeStep.java b/src/main/java/io/github/opencubicchunks/cubicchunks/world/level/cube/status/CubeStep.java index ab62a01b..c695e368 100644 --- a/src/main/java/io/github/opencubicchunks/cubicchunks/world/level/cube/status/CubeStep.java +++ b/src/main/java/io/github/opencubicchunks/cubicchunks/world/level/cube/status/CubeStep.java @@ -63,25 +63,14 @@ public static class Builder { @AddFieldToSets(containers = ChunkToCubeSet.ChunkStep$Builder_to_CubeStep$Builder_redirects.class, field = @FieldSig(type = @Ref(ChunkStatusTask.class), name = "task")) private CubeStatusTask task = (worldGenContext, step, cache, cube) -> CompletableFuture.completedFuture(cube); - // TODO these should be dasm-copied but for some reason it didn't work when I tried + @TransformFromMethod(owner = @Ref(ChunkStep.Builder.class), value = @MethodSig("(Lnet/minecraft/world/level/chunk/status/ChunkStatus;)V")) protected Builder(ChunkStatus status) { - if (status.getParent() != status) { - throw new IllegalArgumentException("Not starting with the first status: " + status); - } else { - this.status = status; - this.parent = null; - this.directDependenciesByRadius = new ChunkStatus[0]; - } + throw new DasmFailedToApply(); } + @TransformFromMethod(owner = @Ref(ChunkStep.Builder.class), value = @MethodSig("(Lnet/minecraft/world/level/chunk/status/ChunkStatus;Lnet/minecraft/world/level/chunk/status/ChunkStep;)V")) protected Builder(ChunkStatus status, CubeStep parent) { - if (parent.targetStatus.getIndex() != status.getIndex() - 1) { - throw new IllegalArgumentException("Out of order status: " + status); - } else { - this.status = status; - this.parent = parent; - this.directDependenciesByRadius = new ChunkStatus[] { parent.targetStatus }; - } + throw new DasmFailedToApply(); } // TODO could be mixin + DASM From 2a8a1b8ccfc177967cc73619b9a5364f25fcbe53 Mon Sep 17 00:00:00 2001 From: Tom Martin Date: Mon, 16 Jun 2025 10:42:04 +0100 Subject: [PATCH 2/2] Fix spotless --- .../opencubicchunks/cubicchunks/mixin/ASMConfigPlugin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/opencubicchunks/cubicchunks/mixin/ASMConfigPlugin.java b/src/main/java/io/github/opencubicchunks/cubicchunks/mixin/ASMConfigPlugin.java index 5088c4c6..16f9df4a 100644 --- a/src/main/java/io/github/opencubicchunks/cubicchunks/mixin/ASMConfigPlugin.java +++ b/src/main/java/io/github/opencubicchunks/cubicchunks/mixin/ASMConfigPlugin.java @@ -187,8 +187,8 @@ record PrefixMethodPair(MethodNode dasmAddedMethod, MethodNode mixinAddedMethod) List methodPairs = new ArrayList<>(); for (MethodNode methodNode : targetClass.methods) { if (methodNode.name.contains("cc_dasm$")) { - var methodNameWithoutPrefix = methodNode.name.substring(methodNode.name.indexOf("$") + 1) - .replace("__init__", "").replace("__clinit__", ""); + var methodNameWithoutPrefix = methodNode.name.substring(methodNode.name.indexOf("$") + 1).replace("__init__", "") + .replace("__clinit__", ""); var mixinAddedMethod = targetClass.methods.stream() .filter(m -> m.name.equals(methodNameWithoutPrefix) && m.desc.equals(methodNode.desc)).findFirst();