From 1a3db5a3bdf56a2be12f69922bd7f700c3e7710c Mon Sep 17 00:00:00 2001 From: MicrocontrollersDev Date: Tue, 15 Jul 2025 16:27:49 -0700 Subject: [PATCH 1/3] fix MC-271899 --- PATCHED.md | 1 + .../mc271899/StructureTemplateMixin.java | 31 +++++++++++++++++++ src/main/resources/debugify.mixins.json | 1 + 3 files changed, 33 insertions(+) create mode 100644 src/main/java/dev/isxander/debugify/mixins/basic/mc271899/StructureTemplateMixin.java diff --git a/PATCHED.md b/PATCHED.md index 0933aac5..91d0a47e 100644 --- a/PATCHED.md +++ b/PATCHED.md @@ -62,6 +62,7 @@ | Basic | [MC-224729](https://bugs.mojang.com/browse/MC-224729) | Partially generated chunks are not saved in some situations | | Basic | [MC-231743](https://bugs.mojang.com/browse/MC-231743) | minecraft.used:minecraft.POTTABLE_PLANT doesn't increase when placing plants into flower pots | | Basic | [MC-232869](https://bugs.mojang.com/browse/MC-232869) | Adult striders can spawn with saddles in peaceful mode | +| Basic | [MC-271899](https://bugs.mojang.com/browse/MC-271899) | StructureTemplate Palette's caches are not thread safe | ## Previously patched Bugs that this mod has patched but has been superseded by a vanilla update. diff --git a/src/main/java/dev/isxander/debugify/mixins/basic/mc271899/StructureTemplateMixin.java b/src/main/java/dev/isxander/debugify/mixins/basic/mc271899/StructureTemplateMixin.java new file mode 100644 index 00000000..c9d43ed3 --- /dev/null +++ b/src/main/java/dev/isxander/debugify/mixins/basic/mc271899/StructureTemplateMixin.java @@ -0,0 +1,31 @@ +package dev.isxander.debugify.mixins.basic.mc271899; + +import com.google.common.collect.Maps; +import dev.isxander.debugify.fixes.BugFix; +import dev.isxander.debugify.fixes.FixCategory; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +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.CallbackInfo; + +import java.util.List; +import java.util.Map; + +@BugFix(id = "MC-271899", category = FixCategory.BASIC, env = BugFix.Env.SERVER, description = "StructureTemplate Palette's caches are not thread safe") +@Mixin(StructureTemplate.Palette.class) +public class StructureTemplateMixin { + @Mutable + @Shadow + @Final + private Map> cache; + + @Inject(method = "", at = @At(value = "TAIL")) + private void newHashMap(List list, CallbackInfo ci) { + this.cache = Maps.newConcurrentMap(); + } +} diff --git a/src/main/resources/debugify.mixins.json b/src/main/resources/debugify.mixins.json index 4b1b991a..20a69c07 100644 --- a/src/main/resources/debugify.mixins.json +++ b/src/main/resources/debugify.mixins.json @@ -30,6 +30,7 @@ "basic.mc224729.ChunkMapMixin", "basic.mc231743.FlowerPotBlockMixin", "basic.mc232869.StriderMixin", + "basic.mc271899.StructureTemplateMixin", "basic.mc30391.LivingEntityMixin", "basic.mc69216.ServerPlayerMixin", "basic.mc7569.RconConsoleSourceMixin", From 021b00ce74ad3b52ca49d5afe4dbda5d338158fa Mon Sep 17 00:00:00 2001 From: MicrocontrollersDev Date: Sun, 20 Jul 2025 13:54:25 -0700 Subject: [PATCH 2/3] add small comment explanation & change method name --- .../debugify/mixins/basic/mc271899/StructureTemplateMixin.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/isxander/debugify/mixins/basic/mc271899/StructureTemplateMixin.java b/src/main/java/dev/isxander/debugify/mixins/basic/mc271899/StructureTemplateMixin.java index c9d43ed3..dc421781 100644 --- a/src/main/java/dev/isxander/debugify/mixins/basic/mc271899/StructureTemplateMixin.java +++ b/src/main/java/dev/isxander/debugify/mixins/basic/mc271899/StructureTemplateMixin.java @@ -24,8 +24,9 @@ public class StructureTemplateMixin { @Final private Map> cache; + // Use a thread-safe Concurrent Map instead @Inject(method = "", at = @At(value = "TAIL")) - private void newHashMap(List list, CallbackInfo ci) { + private void useConcurrentMap(List list, CallbackInfo ci) { this.cache = Maps.newConcurrentMap(); } } From e8a3c22d9f56a249012ae0fb18145732a8b4baf7 Mon Sep 17 00:00:00 2001 From: MicrocontrollersDev Date: Sun, 20 Jul 2025 14:48:12 -0700 Subject: [PATCH 3/3] modify shadowed field directly instead of setting it later --- .../mixins/basic/mc271899/StructureTemplateMixin.java | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/main/java/dev/isxander/debugify/mixins/basic/mc271899/StructureTemplateMixin.java b/src/main/java/dev/isxander/debugify/mixins/basic/mc271899/StructureTemplateMixin.java index dc421781..365ae429 100644 --- a/src/main/java/dev/isxander/debugify/mixins/basic/mc271899/StructureTemplateMixin.java +++ b/src/main/java/dev/isxander/debugify/mixins/basic/mc271899/StructureTemplateMixin.java @@ -9,9 +9,6 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; 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.CallbackInfo; import java.util.List; import java.util.Map; @@ -22,11 +19,5 @@ public class StructureTemplateMixin { @Mutable @Shadow @Final - private Map> cache; - - // Use a thread-safe Concurrent Map instead - @Inject(method = "", at = @At(value = "TAIL")) - private void useConcurrentMap(List list, CallbackInfo ci) { - this.cache = Maps.newConcurrentMap(); - } + private Map> cache = Maps.newConcurrentMap(); }