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

为什么我的配置文件无法修改Minecraft服务器的MOTD?

问题修复说明

现有代码/配置的错误点

  • 监听器未注册:Main类onEnable方法仅保存了默认配置,没有将PingListener注册到服务端事件总线,事件回调完全不会触发
  • PingListener中的plugin成员未初始化,调用时会直接抛出空指针异常
  • MOTD拼接逻辑错误:plugin.getConfig().getString("motd" + "\n" + ...)是将拼接后的字符串当作配置键读取,而非读取两个键的值再拼接,永远读不到对应配置
  • 配置文件默认值非法:maxplayers配置为字符串空值,调用getInt读取时会返回默认值0,无法正常显示最大玩家数;motd、motd_line_2无默认值会导致MOTD显示为空
  • 颜色转义逻辑冗余:嵌套调用两次Utils.chat属于不必要的重复操作

修复后的代码

1. me.zavage.motd.Main

package me.zavage.motd;

import me.zavage.motd.listeners.PingListener;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {
    
    @Override
    public void onEnable() {
        saveDefaultConfig();
        // 注册监听器
        getServer().getPluginManager().registerEvents(new PingListener(this), this);
    }

}

2. me.zavage.motd.listeners.PingListener

package me.zavage.motd.listeners;

import java.io.File;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.server.ServerListPingEvent;
import me.zavage.motd.Main;
import me.zavage.motd.utils.Utils;

public class PingListener implements Listener {
    
    private Main plugin;
    
    // 增加构造方法初始化plugin
    public PingListener(Main plugin) {
        this.plugin = plugin;
    }
    
    @EventHandler
    public void onPing(ServerListPingEvent e) {
        e.setMaxPlayers(plugin.getConfig().getInt("maxplayers"));
        // 修正MOTD拼接逻辑:先读两个配置值再拼接,再统一转颜色
        String motdFull = plugin.getConfig().getString("motd") + "\n" + plugin.getConfig().getString("motd_line_2");
        e.setMotd(Utils.chat(motdFull));
        try {
            e.setServerIcon(Bukkit.loadServerIcon(new File(plugin.getConfig().getString("server_icon_path"))));
        } catch (Exception e1) {
            e1.printStackTrace();
        }
    }

}

3. config.yml 配置参考(修正默认值)

# 只能填写无小数的正整数
maxplayers: 20

motd: '§a欢迎来到我的服务器'

# MOTD第二行内容
motd_line_2: '§b请遵守服务器规则'

# 服务端根目录新建icon文件夹,将64*64像素的png图标放入后填写路径
# 路径示例:"C:\Users\user\Desktop\minecraft test server\icon\icon.png"
server_icon_path: 'icon/icon.png'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:09:03