空空叶博客 学习与开发博客

MC服务器新手教程

2017-05-17

Minecraft除了单机一个人玩外,还能局域网与朋友联机玩,除此之外,还能连接到远程服务器,与不同地区的玩家一起玩耍. 那么,该如何开启一个MC服务器呢?

注: 此教程的系统环境为windows,服务端采用spigot.

一. MC服务器是什么?

MC可以单机玩,也可以联机玩,联机主要有两种方式:

一种是局域网内联机,这种方式只要打开MC客户端,然后在游戏内点击开启局域网模式,在同一个局域网内的客户端就能连上了, 适合几个人在一起玩,但只能是MC原版的玩法,没有额外的功能,比较单调.

另一种就是开启MC服务器联机,这种方式更加通用,不同地区的玩家都能加入进来,而且通过插件可以改变游戏的玩法,此教程讨论的就是这种方式.

通过MC服务器,不同地区的玩家可以一起玩,一起建筑,一起打怪,还可以通过插件来改变游戏的玩法,增加更多的特性,比如增加金币功能(打怪掉落金币,可以用金币购买其它玩家的物品),增加领地功能(防止其它人破坏你的建筑)等.

二. MC服务器怎么开?

开服主要有以下几种方式:

自己电脑上开服

一般用做测试目的.

比如本地开个服,测试一下指定版本的某个插件能否正常使用.

你可能会问,我用这种方式开服,其它人有办法连接上来吗? 可以百度一下动态IP,内网IP端口映射,这里暂时不作过多介绍.

租用服务器开服

可以在淘宝或百度上搜索服务器租用,租用其它服务商的服务器, 一般可以租VPS独立主机, VPS通常用的虚拟化技术,就是在一台服务器上弄出多个独立的系统出租给不同的用户,因此稳定性相对差些, 独立主机则是对应物理机,质量相对更高,但也更贵.

初期开服适合使用这种方式.

购买服务器托管

这种方式初期购买花费较高(购买服务器物理机的费用),然后找机房托管,托管费通常相对比租用要便宜点.

优点很明显,服务器是你自己的,质量与性能都有保证,一般正规的大服都会采用此方式.

但难度也摆在那里,从购买机器,挑选机房,运送机器,怎么不被坑就看你的能力了.

租用专门的MC服务器

因为MC开服需求比较大,因此也出现了很多专业的MC服务器出租商, 他们可能提供专门的MC服务器网页管理系统方便管理服务器, 也可能针对MC服务端在网络,性能,稳定性上做了一些优化.

这种是比较推荐的方式,适合大多数人使用.

总结

不管选用哪种方式开服,主要还看服务提供商的质量,比如是否有断电,崩服,重启的情况,网络质量是否稳定,是否会掉线等.

三. 服务端介绍

MC服务端本质只是一个java软件,下载下来后只有一个jar文件,需要先安装java,然后用java来打开这个jar文件,服务端就启动了.

有哪几种服务端?

一般流行将服务端分为插件服MOD服两类,每类都有多个服务端可供选择,此教程只讨论插件服,以下是几种最流行插件服的服务端:

  • 官服(vanilla): 指的是MC官方服务端,但功能比较简单(一般不会直接使用此服务端开服)
  • 水桶服(Bukkit/CraftBukkit)(官网): 这是社区开发的服务端,在官服的基础上增加了丰富的功能(此服务端因为某些原因,已经不再更新).

    Bukkit与CraftBukkit的区别?Bukkit是一个接口,CraftBukkit是它的实现

  • 水龙头服(Spigot)(官网): 此服务端是在水桶服之后出的,最显著的特点是在水桶服的基础上做了优化,提高了性能(推荐!目前最流行的)
  • PaperSpigot(官网): 此服务端在水龙头服的基础上做了优化,但目前在稳定性上不如水龙头服(可以尝试)

数据存在哪里?

你可能会问,服务端开启后,数据存在哪里?

  • 服务端本身的数据默认存放在文件里,比如服务端的配置文件,比如你在游戏中使用命令设置玩家为op,那op信息也保存在文件中,再比如改变了游戏世界,那世界的改变也会保存在世界文件里
  • 插件数据一般也存放在文件里,但有些插件可能会将数据存放在数据库

服务端目录介绍

以spigot服务端为例,不同版本的服务端目录/文件结构可能存在差异

其中最重要的目录/文件如下:

  • plugins: 插件目录,这是非常重要的目录,里面放着你的全部插件
    • xxx.jar: 插件目录内的jar文件就是插件(一般文件名与插件名相同,但也可以改,比如从英文改成中文方便理解)
    • 插件名: 一般插件目录内会有一个与插件名一致的文件夹,这就是插件数据文件夹,通常用来保存插件的配置与数据.
  • server.properties: 官服的配置文件(说明)
  • bukkit.yml: 水桶服的配置文件(说明)
  • spigot.yml: 水龙头服的配置文件(说明)

其它的目录/文件如下:

  • world是主世界目录/world_nether是地狱世界目录/world_the_end是末地世界目录
  • ops.json文件保存op列表(op就是管理员,权限最大)
  • whitelist.json文件保存白名单列表(需要在官服的配置文件内启用白名单)
  • banned-ips.json文件保存封禁的IP列表
  • permissions.yml文件是服务端自带的权限系统的配置文件(但功能比较简单,一般用权限插件代替)
  • banned-players.json文件保存封禁的玩家列表

四. 服务端下载

官方下载

官方没有提供现成的服务端,需要你去手动构建指定版本的服务端,此方法可以用来获取最新的服务端,但缺点是复杂且容易失败.

官方提供了一个构建工具BuildTools(使用方法)

简单步骤说明如下:

  1. 下载Java(运行minecraft需要java,开服同样需要它)
  2. 下载Git(这是版本控制工具,开发者常用的)
  3. 下载BuildTools(这是开发spigot的作者弄的构建工具,就是运行后会给你自动下载文件,组装文件,并产出最终可用的服务端文件)
  4. (windows系统下)打开git bash界面(不能使用普通的命令行界面),输入java -jar BuildTools.jar来运行它,在经过漫长的构建过程后,会生成一堆文件
  5. 那个spigot-x.x.x.jar就是最终的服务端产出了

第三方下载

一般情况下,从第三方下载已经构建好的服务端比较合适,比如:

五. 服务端运行

安装java

推荐安装最新版本的java8,有两种方式:

  1. 非安装版(有时也被称作绿色版),指下载后解压出文件夹直接使用,但缺点是在命令行窗口中必须输入完整的java文件路径
  2. 安装版,下载后是一个可执行文件(如以exe或msi为后缀的),双击运行再按提示安装,安装结束后打开命令行窗口,输入java便会有提示(因为安装时已经把java的路径添加到了系统的PATH环境变量中,所以系统能找到java命令)

如何确认java安装成功?输入java --version即可,如果看到了java版本,说明安装成功了,反之,如果提示命令未找到,则可能没有安装成功.

如果你用的是非安装版,比如解压出文件夹jre1.8C:\Program Files,

则必须使用命令"C:\Program Files\jre1.8\bin\java" --version,注意如果目录含有空格,则必须用引号包围起来.

启动服务端

一般使用bat脚本来启动服务端,步骤如下:

  1. 将下载的服务端文件复制到任意空目录中
  2. 在目录内新建一个名为start.bat(后缀是bat就行)的文件
  3. 用文件编辑器(推荐Notepad++)打开后输入java -jar xxx.jar(其中xxx.jar换成服务端的jar名),然后保存
  4. 双击刚新建的start.bat脚本文件,会出现一个命令行窗口,启动过程中会不断地输出日志.
  5. 日志基本上都是英文的(因为服务端的作者是外国人),在日志刷得基本上结束后,会看到类似Done (14.786s)! For help, type "help" or "?"的信息,服务端就算启动完成了.
  6. 如果服务端与客户端在同一台电脑上,则在打开游戏客户端后添加服务器,输入IP地址localhost就可以进服了
双击start.bat脚本后,命令行窗口闪了一下就退了?

如果出现这种情况,一般是java路径没配置之类的原因,可以用文本编辑器打开start.bat脚本文件,在最后面换一行,然后输入pause, 这样命令行窗口就不会立即退出,可以看到出错原因.

第一次运行服务端,没启动成功?

在第一次启动服务端时,会提示You need to agree to the EULA in order to run the server. Go to eula.txt for more info.然后自动停止.

你需要打开生成的eula.txt,将里面的eula=false改成eula=true然后保存(表示同意服务端相关的协议), 再启动服务端就可以了.

客户端进不去服务器?

默认服务端可能开启的是正版模式,因此如果你不是正版登录的(盗版登录/离线登录),就会进不去服,可以打开server.properties文件,将online-mode=true改成online-mode=false再重新启动服务端就可以了.

关闭服务端

一般使用命令来关闭服务端,在控制台界面输入stop即可.

要注意的是,不要直接点命令窗口右上角的关闭按钮,否则关闭的只是命令窗口,服务端还在后台运行着. 这样下次启动服务端时会提示**** FAILED TO BIND TO PORT!,即端口被占用了. 如果出现这种情况,打开任务管理器,找到服务端的java进程然后杀死,但这种非正常的关闭会导致数据保存不完整.


上一篇 面向对象基础

目录