From 8d1dec071bfd32f0bd31c6daeb20466ed7944792 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Thu, 20 Nov 2025 18:27:04 +0100 Subject: [PATCH] stonecutter: support 1.20.1 --- build.gradle.kts | 12 ++++- .../cullleaves/CullLeavesClient.java | 53 +++++++++++++++++-- .../cullleaves/config/CullLeavesConfig.java | 0 .../cullleaves/mixin/MixinLeavesBlock.java | 0 .../mixin/MixinMangroveRootsBlock.java | 0 .../mixin/sodium/MixinBlockRenderer.java | 35 +++++++----- src/main/resources/cullleaves.mixins.json | 2 +- src/main/resources/fabric.mod.json | 4 +- versions/1.20.1-fabric/gradle.properties | 1 + .../src/main/resources/META-INF/mods.toml | 35 ++++++++++++ 10 files changed, 120 insertions(+), 22 deletions(-) mode change 100755 => 100644 src/main/java/eu/midnightdust/cullleaves/config/CullLeavesConfig.java mode change 100755 => 100644 src/main/java/eu/midnightdust/cullleaves/mixin/MixinLeavesBlock.java mode change 100755 => 100644 src/main/java/eu/midnightdust/cullleaves/mixin/MixinMangroveRootsBlock.java create mode 100644 versions/1.20.1-forge/src/main/resources/META-INF/mods.toml diff --git a/build.gradle.kts b/build.gradle.kts index f0839ca..ca28604 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -40,6 +40,8 @@ dependencies { } if (loader == "forge") { "forge"("net.minecraftforge:forge:${minecraft}-${mod.dep("forge_loader")}") + + modCompileOnly("maven.modrinth:xenon-forge:0.3.31") } if (loader == "neoforge") { "neoForge"("net.neoforged:neoforge:${mod.dep("neoforge_loader")}") @@ -57,7 +59,7 @@ loom { } } if (loader == "forge") { - forge.mixinConfigs("midnightlib.mixins.json") + forge.mixinConfigs("cullleaves.mixins.json", "cullleaves-neoforge.mixins.json") } } @@ -224,4 +226,12 @@ stonecutter { constants { arrayOf("fabric", "neoforge", "forge").forEach { it -> put(it, loader == it) } } + replacements.string { + direction = eval(current.version, ">=1.21") + replace("new ResourceLocation", "ResourceLocation.fromNamespaceAndPath") + } + replacements.string { + direction = eval(current.version, ">=1.21") + replace("me.jellysquid.mods.sodium", "net.caffeinemc.mods.sodium") + } } diff --git a/src/main/java/eu/midnightdust/cullleaves/CullLeavesClient.java b/src/main/java/eu/midnightdust/cullleaves/CullLeavesClient.java index 5e93378..6c1f67d 100644 --- a/src/main/java/eu/midnightdust/cullleaves/CullLeavesClient.java +++ b/src/main/java/eu/midnightdust/cullleaves/CullLeavesClient.java @@ -22,7 +22,7 @@ import org.slf4j.LoggerFactory; import java.io.IOException; //? fabric { -import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.resource.ResourceManagerHelper; import net.fabricmc.fabric.api.resource.ResourcePackActivationType; import net.fabricmc.loader.api.FabricLoader; @@ -48,9 +48,28 @@ import net.neoforged.neoforge.event.AddPackFindersEvent; ^///?} *///?} -//? neoforge +//? forge { +/*import net.minecraft.network.chat.Component; +import net.minecraft.server.packs.repository.Pack; +import net.minecraft.server.packs.repository.PackSource; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.ConfigScreenHandler; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.AddPackFindersEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.IExtensionPoint; +import net.minecraftforge.fml.ModList; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.forgespi.locating.IModFile; +import net.minecraftforge.network.NetworkConstants; +import net.minecraftforge.resource.PathPackResources; +*///?} + +//? neoforge || forge /*@Mod(CullLeavesClient.MOD_ID)*/ -public class CullLeavesClient /*? fabric {*/ implements ClientModInitializer /*?}*/ { +public class CullLeavesClient /*? fabric {*/ implements ModInitializer /*?}*/ { public static final String MOD_ID = "cullleaves"; public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); @@ -115,7 +134,7 @@ public class CullLeavesClient /*? fabric {*/ implements ClientModInitializer /*? //? fabric { @Override - public void onInitializeClient() { + public void onInitialize() { MidnightConfig.init(CullLeavesClient.MOD_ID, CullLeavesConfig.class); FabricLoader.getInstance().getModContainer("cullleaves").ifPresent(modContainer -> { ResourceManagerHelper.registerBuiltinResourcePack(ResourceLocation.fromNamespaceAndPath(CullLeavesClient.MOD_ID, "smartleaves"), modContainer, ResourcePackActivationType.NORMAL); @@ -153,6 +172,32 @@ public class CullLeavesClient /*? fabric {*/ implements ClientModInitializer /*? event. /^? if >= 1.21.4 {^/ addListener(ResourceLocation.fromNamespaceAndPath(CullLeavesClient.MOD_ID, "resourcepack_options"), /^?} else {^/ /^registerReloadListener( ^//^?}^/ CullLeavesClient.ReloadListener.INSTANCE); } } + *///?} else if forge { + /*public CullLeavesClient() { + MidnightConfig.init(MOD_ID, CullLeavesConfig.class); + ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (remote, server) -> true)); + ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> + new ConfigScreenHandler.ConfigScreenFactory((client, parent) -> MidnightConfig.getScreen(parent, "cullleaves"))); + //MinecraftForge.EVENT_BUS.register(new CullLeavesClientEvents()); + } + + @Mod.EventBusSubscriber(modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) + public static class CullLeavesClientEvents { + @SubscribeEvent + public static void addPackFinders(AddPackFindersEvent event) { + if (event.getPackType() == PackType.CLIENT_RESOURCES) { + registerResourcePack(event, ResourceLocation.fromNamespaceAndPath(MOD_ID, "smartleaves"), false); + } + } + private static void registerResourcePack(AddPackFindersEvent event, ResourceLocation id, boolean alwaysEnabled) { + event.addRepositorySource((profileAdder -> { + IModFile file = ModList.get().getModFileById(id.getNamespace()).getFile(); + try (PathPackResources pack = new PathPackResources(id.toString(), true, file.findResource("resourcepacks/"+id.getPath()))) { + profileAdder.accept(Pack.readMetaAndCreate(id.toString(), Component.literal(id.getNamespace()+"/"+id.getPath()), alwaysEnabled, a -> pack, PackType.CLIENT_RESOURCES, Pack.Position.TOP, PackSource.BUILT_IN)); + } catch (NullPointerException e) {e.printStackTrace();} + })); + } + } *///?} } diff --git a/src/main/java/eu/midnightdust/cullleaves/config/CullLeavesConfig.java b/src/main/java/eu/midnightdust/cullleaves/config/CullLeavesConfig.java old mode 100755 new mode 100644 diff --git a/src/main/java/eu/midnightdust/cullleaves/mixin/MixinLeavesBlock.java b/src/main/java/eu/midnightdust/cullleaves/mixin/MixinLeavesBlock.java old mode 100755 new mode 100644 diff --git a/src/main/java/eu/midnightdust/cullleaves/mixin/MixinMangroveRootsBlock.java b/src/main/java/eu/midnightdust/cullleaves/mixin/MixinMangroveRootsBlock.java old mode 100755 new mode 100644 diff --git a/src/main/java/eu/midnightdust/cullleaves/mixin/sodium/MixinBlockRenderer.java b/src/main/java/eu/midnightdust/cullleaves/mixin/sodium/MixinBlockRenderer.java index 5e945a4..e4439bf 100644 --- a/src/main/java/eu/midnightdust/cullleaves/mixin/sodium/MixinBlockRenderer.java +++ b/src/main/java/eu/midnightdust/cullleaves/mixin/sodium/MixinBlockRenderer.java @@ -1,43 +1,50 @@ package eu.midnightdust.cullleaves.mixin.sodium; -import eu.midnightdust.cullleaves.CullLeavesClient; import net.caffeinemc.mods.sodium.client.render.chunk.compile.pipeline.BlockRenderer; -import net.caffeinemc.mods.sodium.client.render.frapi.render.AbstractBlockRenderContext; - -import net.minecraft.core.BlockPos; +import eu.midnightdust.cullleaves.CullLeavesClient; import net.minecraft.world.level.block.LeavesBlock; -import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //? if >= 1.21.4 { import net.minecraft.client.renderer.block.model.BlockStateModel; -//?} else { -/*import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.core.BlockPos; +//?} else if >= 1.21 { +/*import net.minecraft.core.BlockPos; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.world.level.block.state.BlockState; +*///?} else { +/*import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildBuffers; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.pipeline.BlockRenderContext; *///?} -//? if fabric { +//? if fabric && >= 1.21 { +import net.caffeinemc.mods.sodium.client.render.frapi.render.AbstractBlockRenderContext; //?} else { /*import net.minecraft.client.Minecraft; import org.spongepowered.asm.mixin.Unique; *///?} - @Mixin(BlockRenderer.class) -public abstract class MixinBlockRenderer /*? if fabric {*/ extends AbstractBlockRenderContext /*?}*/ { - //? if neoforge { +public abstract class MixinBlockRenderer /*? if fabric && >= 1.21 {*/ extends AbstractBlockRenderContext /*?}*/ { + //? if neoforge || < 1.21 { /*@Unique private static final Minecraft cullleaves$client = Minecraft.getInstance(); *///?} - @Inject(at = @At("HEAD"), method = "renderModel", cancellable = true) + @Inject(at = @At("HEAD"), method = "renderModel", cancellable = true /*? if forge {*//*, remap = false *//*?}*/) //? if >= 1.21.4 { public void cullleaves$cancelRendering(BlockStateModel model, BlockState state, BlockPos pos, BlockPos origin, CallbackInfo ci) { - //?} else { + //?} else if >= 1.21 { /*public void cullleaves$cancelRendering(BakedModel model, BlockState state, BlockPos pos, BlockPos origin, CallbackInfo ci) { + *///?} else { + /*public void cullleaves$cancelRendering(BlockRenderContext ctx, ChunkBuildBuffers buffers, CallbackInfo ci) { + var state = ctx.state(); + var pos = ctx.pos(); *///?} - if (state.getBlock() instanceof LeavesBlock && CullLeavesClient.shouldHideBlock(/*? if fabric {*/ this.level /*?} else {*/ /*cullleaves$client.level *//*?}*/, pos)) + if (state.getBlock() instanceof LeavesBlock && CullLeavesClient.shouldHideBlock(/*? if fabric && >= 1.21 {*/ this.level /*?} else {*/ /*cullleaves$client.level *//*?}*/, pos)) ci.cancel(); } } \ No newline at end of file diff --git a/src/main/resources/cullleaves.mixins.json b/src/main/resources/cullleaves.mixins.json index 5b2174f..5d1bd45 100644 --- a/src/main/resources/cullleaves.mixins.json +++ b/src/main/resources/cullleaves.mixins.json @@ -6,7 +6,7 @@ "client": [ "MixinBlockModelRenderer", "MixinLeavesBlock", - "MixinMangroveRootsBlock", + "MixinMangroveRootsBlock" ], "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index dddd040..460666f 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -20,14 +20,14 @@ "environment": "client", "entrypoints": { - "client": [ + "main": [ "eu.midnightdust.cullleaves.CullLeavesClient" ] }, "depends": { "midnightlib": "*", - "minecraft": ">=1.21" + "minecraft": ">=1.20" }, "breaks": { "sodium": "<0.6.0" diff --git a/versions/1.20.1-fabric/gradle.properties b/versions/1.20.1-fabric/gradle.properties index 5e6477a..8521992 100644 --- a/versions/1.20.1-fabric/gradle.properties +++ b/versions/1.20.1-fabric/gradle.properties @@ -8,5 +8,6 @@ deps.neoforge_loader=[UNSUPPORTED] deps.fabric_version=0.92.3+1.20.1 deps.modmenu_version=7.2.2 +deps.sodium_version=mc1.20.1-0.5.13 loom.platform=fabric diff --git a/versions/1.20.1-forge/src/main/resources/META-INF/mods.toml b/versions/1.20.1-forge/src/main/resources/META-INF/mods.toml new file mode 100644 index 0000000..fd18c91 --- /dev/null +++ b/versions/1.20.1-forge/src/main/resources/META-INF/mods.toml @@ -0,0 +1,35 @@ +modLoader = "javafml" +loaderVersion = "[43,)" +#issueTrackerURL = "" +license = "MIT License" + +[[mods]] +modId = "${id}" +version = "${version}" +displayName = "CullLeaves" +authors = "Motschen, TeamMidnightDust" +description = ''' +Adds culling to leaf blocks, providing a huge performance boost over vanilla. +''' +logoFile = "icon.png" + +[[dependencies.cullleaves]] +modId = "forge" +mandatory = true +versionRange = "[43,)" +ordering = "NONE" +side = "CLIENT" + +[[dependencies.cullleaves]] +modId = "minecraft" +mandatory = true +versionRange = "[1.19.2,)" +ordering = "NONE" +side = "CLIENT" + +[[dependencies.cullleaves]] +modId = "midnightlib" +mandatory = true +versionRange = "[1.0.0,)" +ordering = "BEFORE" +side = "CLIENT" \ No newline at end of file