要制作一个仅在客户端安装的Forge mod,你需要在代码中对客户端和服务端进行区分,并在mod的配置文件中设置仅客户端加载。

首先,你需要创建一个新的mod项目。在项目的build.gradle中,确保你使用的是正确的Minecraft版本(1.20.1)和Forge版本。以下是一个示例:

buildscript {
    repositories {
        jcenter()
        maven {
            name = "forge"
            url = "http://files.minecraftforge.net/maven"
        }
    }
    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:3.+'
    }
}

apply plugin: 'net.minecraftforge.gradle.forge'
// 如果你需要运行客户端和服务端的模块,取消下面两行的注释
// apply plugin: 'net.minecraftforge.gradle.forge.server'
// apply plugin: 'net.minecraftforge.gradle.forge.client'

version = "1.0"
group = "com.example"

minecraft {
    version = "1.20.1"
    // 如果你需要运行客户端和服务端的模块,取消下面两行的注释
    // runDir = "run"
    // mappings = "snapshot_20211230"
}

dependencies {
    // 客户端的依赖库
    // 例如,如果你想使用GuiScreen类,请添加以下依赖
    // compile 'net.minecraft:client:1.20.1'
    
    // 服务端的依赖库
    // 例如,如果你想使用ServerCommandSource类,请添加以下依赖
    // compile 'net.minecraft:server:1.20.1'
    
    // 共享的依赖库
    // 例如,如果你想使用Item类,请添加以下依赖
    // compile 'net.minecraft:shared:1.20.1'
}

// 客户端的模块
// 如果你需要运行客户端和服务端的模块,取消下面两行的注释
// sourceSets {
//     main {
//         if (project.plugins.hasPlugin('net.minecraftforge.gradle.forge.server')) {
//             output.dirs = [minecraft.runDir + "/mods"]
//         }
//     }
// }

// 服务端的模块
// 如果你需要运行客户端和服务端的模块,取消下面两行的注释
// sourceSets {
//     main {
//         if (project.plugins.hasPlugin('net.minecraftforge.gradle.forge.client')) {
//             output.dirs = [minecraft.runDir + "/mods"]
//         }
//     }
// }

在你的mod主类中,你可以使用DistExecutor类来区分客户端和服务端的代码。以下是一个示例:

import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

@Mod("examplemod")
public class ExampleMod {
    @OnlyIn(Dist.CLIENT)
    public static void clientSetup(FMLClientSetupEvent event) {
        // 仅在客户端加载的代码
    }

    public static void commonSetup(FMLCommonSetupEvent event) {
        // 在客户端和服务端都加载的代码
    }

    // 其他mod事件处理方法等...

    @Mod.EventBusSubscriber(modid = "examplemod", bus = Mod.EventBusSubscriber.Bus.MOD)
    public static class ModEventSubscriber {
        @OnlyIn(Dist.CLIENT)
        @SubscribeEvent
        public static void onClientSetup(FMLClientSetupEvent event) {
            ExampleMod.clientSetup(event);
        }

        @SubscribeEvent
        public static void onCommonSetup(FMLCommonSetupEvent event) {
            ExampleMod.commonSetup(event);
        }

        // 其他mod事件处理方法等...
    }
}

最后,在你的mod的配置文件(例如src/main/resources/META-INF/mods.toml)中,你可以设置仅客户端加载。以下是一个示例:

[mod]
modId = "examplemod"
version = "1.0.0"
displayName = "Example Mod"
authorList = ["Your Name"]
description = "An example mod for Minecraft 1.20.1"

[[dependencies.examplemod]]
modId = "forge"
versionRange = "[37.0.0,)"
mandatory = true
side = "CLIENT"

在这个示例中,side = "CLIENT"表示该mod仅在客户端加载。

完成这些步骤后,你可以使用Gradle的runClient任务来运行客户端,并使用runServer任务来运行服务端。确保你在运行客户端时正确安装了你的mod,并在运行服务端时不安装该mod。

希望这可以帮助到你制作一个仅在客户端安装的Forge mod

Minecraft 1201 Forge制作mod设置仅客户端需装服务端不能装Minecraft 版本1201

原文地址: https://www.cveoy.top/t/topic/iTn8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录