2 Commits

Author SHA1 Message Date
Martin Prokoph
8d1dec071b stonecutter: support 1.20.1 2025-11-20 18:27:04 +01:00
Martin Prokoph
673a936bf7 stonecutter: support 1.21.1 2025-11-20 17:04:34 +01:00
12 changed files with 154 additions and 22 deletions

View File

@@ -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")
}
}

View File

@@ -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;
@@ -40,13 +40,36 @@ import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.client.event.AddClientReloadListenersEvent;
import net.neoforged.neoforge.event.AddPackFindersEvent;
//? if >= 1.21.4 {
import net.neoforged.neoforge.client.event.AddClientReloadListenersEvent;
//?} else {
/^import net.neoforged.neoforge.client.event.RegisterClientReloadListenersEvent;
^///?}
*///?}
//? 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);
@@ -111,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);
@@ -145,8 +168,34 @@ public class CullLeavesClient /*? fabric {*/ implements ClientModInitializer /*?
}
}
@SubscribeEvent
public static void onResourceReload(AddClientReloadListenersEvent event) {
event.addListener(ResourceLocation.fromNamespaceAndPath(CullLeavesClient.MOD_ID, "resourcepack_options"), CullLeavesClient.ReloadListener.INSTANCE);
public static void onResourceReload(/^? if >= 1.21.4 {^/ AddClientReloadListenersEvent /^?} else {^//^RegisterClientReloadListenersEvent ^//^?}^/ event) {
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();}
}));
}
}
*///?}

View File

View File

@@ -4,7 +4,6 @@ import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import eu.midnightdust.cullleaves.CullLeavesClient;
import net.minecraft.client.renderer.block.ModelBlockRenderer;
import net.minecraft.client.renderer.block.model.BlockModelPart;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.LeavesBlock;
@@ -14,12 +13,22 @@ 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.BlockModelPart;
import java.util.List;
//?} else {
/*import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.util.RandomSource;
*///?}
@Mixin(ModelBlockRenderer.class)
public class MixinBlockModelRenderer {
@Inject(at = @At("HEAD"), method = "tesselateBlock", cancellable = true)
//? if >= 1.21.4 {
private void cullleaves$cancelRendering(BlockAndTintGetter world, List<BlockModelPart> parts, BlockState state, BlockPos pos, PoseStack matrices, VertexConsumer vertexConsumer, boolean cull, int overlay, CallbackInfo ci) {
//?} else {
/*private void cullleaves$cancelRendering(BlockAndTintGetter world, BakedModel bakedModel, BlockState state, BlockPos pos, PoseStack matrices, VertexConsumer vertexConsumer, boolean cull, RandomSource randomSource, long l, int overlay, CallbackInfo ci) {
*///?}
if (state.getBlock() instanceof LeavesBlock &&
CullLeavesClient.shouldHideBlock(world, pos)) ci.cancel();
}

View File

View File

@@ -1,22 +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.client.renderer.block.model.BlockStateModel;
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;
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 && >= 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 extends AbstractBlockRenderContext {
@Inject(at = @At("HEAD"), method = "renderModel", cancellable = true)
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 /*? if forge {*//*, remap = false *//*?}*/)
//? if >= 1.21.4 {
public void cullleaves$cancelRendering(BlockStateModel model, BlockState state, BlockPos pos, BlockPos origin, CallbackInfo ci) {
if (state.getBlock() instanceof LeavesBlock && CullLeavesClient.shouldHideBlock(this.level, pos))
//?} 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 && >= 1.21 {*/ this.level /*?} else {*/ /*cullleaves$client.level *//*?}*/, pos))
ci.cancel();
}
}
}

View File

@@ -6,7 +6,7 @@
"client": [
"MixinBlockModelRenderer",
"MixinLeavesBlock",
"MixinMangroveRootsBlock",
"MixinMangroveRootsBlock"
],
"injectors": {
"defaultRequire": 1

View File

@@ -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"

View File

@@ -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

View File

@@ -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"

View File

@@ -8,6 +8,6 @@ deps.neoforge_loader=21.1.66
deps.fabric_version=0.114.0+1.21.1
deps.modmenu_version=[UNSUPPORTED]
deps.sodium_version=mc1.21.1-0.6.13
loom.platform=neoforge