zoukankan      html  css  js  c++  java
  • 使用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]

  • 相关阅读:
    VBA操作IE
    Eclipse中Git图标表示内容
    sqldeveloper更改语言设定
    VBA-FileToFileUpdate
    VBA-UTF-8文件的操作
    Null项目参与排序
    阿里云的学生机如何开放全部端口
    .net core3.1 webapi + vue + element-ui upload组件实现文件上传
    .net core控制台使用log4net
    vue2.x中使用三元表达式绑定class的时候遇到的坑
  • 原文地址:https://www.cnblogs.com/ospider/p/5116740.html
Copyright © 2011-2022 走看看