You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Minecraft 1.8.9客户端模组仅单人可用,多人模式失效求助

问题分析与修复方案

问题根源

  1. 命令注册错误:你使用event.registerServerCommand()注册的是服务器端命令,多人模式下客户端发送的命令会被远程服务器验证,服务器没有该命令就会提示“未知命令”。需要注册客户端本地命令,让命令在客户端直接处理,不发送到服务器。
  2. 事件注册时机错误:FMLServerStartingEvent是服务器启动时触发的事件,客户端连接远程服务器时不会触发该事件,正常启动客户端直接进入多人模式的话,SoupCheck事件处理器不会被注册(你测试时从单人切到多人能正常工作,是因为之前单人模式已经触发过该事件完成了注册)。

修复代码

修改SoupCheckMod.java

import net.minecraft.command.CommandBase;
import net.minecraft.command.ICommandSender;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.client.ClientCommandHandler;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;

@Mod(modid = "nodropsoup", name = "No Drop Soup", version = "7.29.2023 - naogostodeprogramar")
public class SoupCheckMod {

    @Mod.EventHandler
    public void init(FMLInitializationEvent event) {
        // 客户端初始化时注册事件处理器,单人/多人客户端都会执行
        MinecraftForge.EVENT_BUS.register(new SoupCheck());
        
        // 注册客户端本地命令
        ClientCommandHandler.instance.registerCommand(new CommandBase() {
            @Override
            public String getCommandName() {
                return "nodropsoup";
            }

            @Override
            public String getCommandUsage(ICommandSender sender) {
                return "/nodropsoup";
            }

            // 客户端命令需要重写此方法,返回true表示允许客户端使用
            @Override
            public boolean canCommandSenderUseCommand(ICommandSender sender) {
                return true;
            }

            @Override
            public void processCommand(ICommandSender sender, String[] args) {
                if (SoupCheck.modEnabled) {
                    sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Mod已关闭! - by naogostodeprogramar"));
                } else {
                    sender.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Mod已开启! - by naogostodeprogramar"));
                }
                SoupCheck.modEnabled = !SoupCheck.modEnabled;
            }
        });
    }
}

关键修改点

  • 将事件处理器的注册移到FMLInitializationEvent的init方法中,确保客户端启动时就完成注册,无论单人还是多人模式都能生效。
  • 使用ClientCommandHandler.instance.registerCommand()注册客户端命令,替代服务器命令注册方式,命令会在客户端本地执行,不会发送到远程服务器,解决“未知命令”的问题。
  • 新增canCommandSenderUseCommand方法的重写,返回true确保客户端玩家可以使用该命令。

额外优化建议

不要直接通过物品的非本地化名称(getUnlocalizedName())判断物品,建议直接对比物品实例,稳定性更高:

// 替换SoupCheck.java中的物品判断逻辑
if (Minecraft.getMinecraft().thePlayer.inventory.getCurrentItem().getItem() == Items.mushroom_stew) {
    isSoup = true;
} else if (Minecraft.getMinecraft().thePlayer.inventory.getCurrentItem().getItem() == Items.bowl) {
    isSoup = false;
} else {
    isSoup = false;
}

内容的提问来源于stack exchange,提问作者Kkjajalall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:12:38