使用Spigot搭建MineCraft服务器

MineCraft 这种游戏还是人多了好玩,以前的服务器放在同学的Windows电脑上,每次我们想玩的时候就让让去打开,但是总是有一些原因,想玩的时候服务器没开着,不想玩的时候服务器空开着费电。昨天一狠心,在阿里云买了个服务器,跑上了MineCraft。

服务端的选择

看了看原版的服务器,大概[spigot]是一个不错的选择,不过第三方的服务器的话[cuberite]看起来不错,试了试,性能的确完爆原版,很遗憾使用的随机数种子算法不是原版的,选不了想要的地图,放弃了,最终决定还是使用spigot。

服务器的配置

spigot 官方貌似并不提过给你下载,貌似是因为版权原因吧. 所以需要自己编译

第一步

安装java,直接在服务器操作了

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

第二步

编译spigot

wget "https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar" -O BuildTools.jar
java -jar BuildTools.jar #由于国内的网络原因,编译经常失败,多试几次

跑起来服务器

先说结论,MineCraft还是挺吃内存的,至少2G,否则根本别想玩,对延迟的要求也不低,建议40ms 左右,否则会非常不爽。
具体折腾过程是这样的,首先是来自遥远的日本的768M内存的VPS,到北京的Ping大概那就像放上去试试吧:

Java -Xms512M -Xmx512M -jar spigot.jar nogui

果然很快崩溃了

然后在Vultr的日本机房买了一个1G的服务器,这次内存给了768M,坚持了一会,但是玩的过程中明显感觉到了卡。。

方块这些静态的东西都没啥问题,但是像羊和鸡这样的Mob就有问题了,经常飞来飞去的,尤其是打怪的时候,关键的几刀总是打不出去,这就没法玩了。当然最不能忍的是最终还是崩溃了,看来还是得上2G的服务器

最终在阿里云买了一个2G 1Mbps的VPS,把服务器跑好之后直接

Java -Xms1024M -Xmx512M -jar spigot.jar nogui

果然玩的飞起,一点也不卡,而且也没有再崩溃了

让Minecraft服务其长时间运行(Daemonize the MineCraft Server)

玩过Linux的一定知道如果你ssh进去开了一个程序的话,当你挂断链接的时候这个服务就关掉了,因为你开的东西都相当于你这个shell的子进程

一般的程序,我们用nohup就好了

./server.sh
nohup ./server.sh &

但是MineCraft的服务器真是奇葩啊,试了好几次用nohup启动都登陆不进去了,研究了半天日志终于发现,原来这个服务器启动以后是需要持续的霸占stdin的,导致没法正确运行,这个也好解决,我们用tmux就好了。

tmux是terminal multiplexer的缩写,也就是终端复用器的意思,就是能把一个shell分成好几个shell 啦,当然我们要用到的功能是,如果我们在tmux里面打开一个进程之后,还可以detach下来,而这个shell和他的子进程都不会被销毁,太棒了

具体步骤是这样的

进入tmux,敲了tmux回车就好了
敲上你启动服务器的命令
按Ctrl+b,松开两个键再按d(detach的意思)

如果你想把服务其关掉的话

敲上tmux a(attach的意思)
你又回到了Minecraft服务器的后台了,这时候按Ctrl+c就好了

另外还有一个坑爹之处,minecraft服务器启动的时候当前工作目录必须有一个eula.txt 而且是必须放在一起的

简单吧,其实还可以更简单

我们可以把这两步都写成脚本, 据小伙伴测试还可以把这个脚本加到启动脚本里, 实现开机启动哦~

#!/bin/sh

SPIGOT_PATH=/var/mc/spigot.1.8/

start() {
        tmux has-session -t minecraft
        if [ $? != 0 ]
        then
                tmux new -s minecraft -d
                tmux send-keys -t minecraft "cd $SPIGOT_PATH" C-m
                tmux send-keys -t minecraft "java -Xmx1024M -Xms1024M -jar spigot.jar nogui " C-m
        fi
        echo Server started
}

stop() {

        tmux send-keys -t minecraft  C-c
        tmux kill-session -t minecraft
}

attach() {
        tmux a -t minecraft
}

status() {
        tmux has-session -t minecraft
}


case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  status)
    status
    ;;
  *)
  restart)
    stop
    start
    ;;
  status)
    status
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}" >&2
    exit 1
    ;;
esac

[spigot]
[cuberite]

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注