使用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和他的子進程都不會被銷毀,太棒了

具體步驟是這樣的

  1. 進入tmux,敲了tmux回車就好了
  2. 敲上你啟動服務器的命令
  3. 按Ctrl+b,松開兩個鍵再按d(detach的意思)

如果你想把服務其關掉的話

  1. 敲上tmux a(attach的意思)
  2. 你又回到了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]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM