在上一篇文章中,我们介绍了如何在本地使用minecraft。但是,如果小伙伴想要一起玩同一个地图,就需要一个minecraft服务器。最简单的方法就是在单机游戏的情况下对局域网开放,这种方法是一种临时提供大家玩耍的途径;另一种比较复杂的方法就是需要有一台闲置的电脑,在上面运行minecraft服务器版本。接下来我会介绍这两种方法,重点在第二种方法上。
1.1. 首先进入一个单人游戏
1.2. 进入游戏后按esc调出菜单,选择对局域网开放。
这个时候,你可以改变游戏的一些属性, 比如game mode,可以换成上帝模式或者其他;以及是否允许使用作弊码。调整完游戏属性后,点击开始。这个时候你的游戏就作为一个临时的服务器面向局域网开放。游戏会为你分配一个端口号,并在屏幕上显示,在这个例子里是38413。
1.3. 其他人加入
首先,你需要知道你自己的局域网ip,一般在网络设置里。网上教程有很多,比如: windows linux 假设你的地址是192.0.0.102其他人打开minecraft选中多人游戏 选择直接连接,然后让小伙伴在地址栏填入你的ip地址和端口号,中间用冒号:连接 本例中,填入192.0.0.102:38413。点击加入 大家就可以一起玩耍了。 这里要注意一下,minecraft是用人名来区分玩家,所以大家不要取一个名字。名字的取法在上一篇文章有讲。这样建立服务器有明显的优缺点 优点: 方便快捷,易于操作。适用于临时玩一会,或者向朋友分享自己的地图。 缺点: 建立服务器的人不能下线,如果建立服务器的玩家不想玩了,也必须保持自己是登入状态。这个时候如果想要离开电脑,无法保证自己人物的安全(被怪物袭击)。另外,如果希望局域网之外的小伙伴可以玩的话,这样建立服务器是无法加入的,需要一个公网ip。
现在我们就来讲一讲,如果我想让更多的人参与到minecraft里如何建立服务器。
如果只有一台闲置电脑放在家里,那么建立的服务器并不具有公网ip,只能供局域网里的小伙伴玩。要想解决这个问题,可以使用花生壳等产品。 另一种方法,直接租一个服务器,方法有很多。我租用的是阿里云服务器,最便宜的大概是100块钱一个月,也可以按小时租,大概0.7元一小时。
这里我们统称上面两种电脑称为服务器。服务器的系统windows或者linux都可以。我个人喜欢linux一些,所以选取的阿里云的ubuntu 16.06 64位的系统。下面也以该系统为例介绍建立服务器。
要在服务器里也安装jre,安装方法同上一篇单机版相同。
据说可以在官网下载,但是我真是没找到地址… 所以我在azminecraft(点击下载)下载的,这里有两点要注意的:
服务器版本要尽量和本地游戏版本一致。所以我下载的是1.10.2版本的服务器需要下载的文件只有一个 windows下载后缀为.exe或.jar文件 linux下载后缀为.jar文件我下载的文件名为minecraft_server.1.10.2.jar
将该文件拷贝到服务器里,假设拷贝到minecraft_server文件夹里。
首先我们先来运行一下服务器程序,产生必要的一些文件。
$ java -Xms512m -Xmx1024m -jar minecraft_server.1.10.2.jar nogui第一次运行,程序会自动退出,提示需要同意协议。本地会多出eula.txt文件
#By changing the setting below to TRUE you are indicating your agreement to our ULA (https://account.mojang.com/documents/minecraft_eula). #Wed Sep 17 16:44:43 CST 2014 eula=true将eula=false改为eula=true保存退出即可。 第二次运行
$ java -Xms512m -Xmx1024m -jar minecraft_server.1.10.2.jar nogui这个时候程序不会退出,会按照默认设置生成一个世界。用ctrl-C 手动退出。这个时候可以看到本地多了很多文件。
-rw-rw-r-- 1 2 Jun 7 21:36 banned-ips.json -rw-rw-r-- 1 2 Jun 7 21:36 banned-players.json drwxrwxr-x 2 4096 Jun 7 18:39 config/ -rw-rw-r-- 1 180 Jun 7 14:38 eula.txt drwxrwxr-x 2 4096 Jun 8 08:03 logs/ -rw-r--r-- 1 9459897 Jun 7 14:30 minecraft_server.1.10.2.jar -rw-rw-r-- 1 145 Jun 7 21:36 minecraft_service.log -rw-rw-r-- 1 2 Jun 7 21:36 ops.json -rw-rw-r-- 1 756 Jun 7 21:36 server.properties -rw-rw-r-- 1 101 Jun 8 08:11 usercache.json -rw-rw-r-- 1 50 Jun 7 18:05 usernamecache.json -rw-rw-r-- 1 2 Jun 7 14:39 whitelist.json drwxrwxr-x 8 4096 Jun 8 10:23 world/world文件夹中储存的是默认创建的世界。
server.properties文件是服务器配置文件,里面包含了服务器的设置以及生成世界的配置。 我们只需将文件中
online-mode=true
改为
online-mode=false
该配置问价其他选项的说明参考我的世界百科。
第三次运行
$ java -Xms512m -Xmx1024m -jar minecraft_server.1.10.2.jar nogui这个时候最基本服务器建设就结束了。小伙伴们只要在多人游戏里,输入服务器的ip和端口号(ip:端口号,默认的端口号是25565),就可以加入到服务器中。 这个时候,可以试一试大家能不能加入。
如果不能加入有一下几个问题: 1. 服务器的防火墙阻断了minecraft端口,需要添加防火墙规则,允许tcp 25565端口。 2. java问题,推荐大家全部使用oracle的java,之前我尝试用openjdk的java死活连不上。
因为我们希望能够使用forge的mod插件,所以需要安装forge。
可以去官网下载,下载universal版本。要注意要和游戏版本对应。这里我下载1.10.2版本。 文件名为forge-1.10.2-12.18.3.2185-universal.jar 将该文件拷贝到服务器minecraft_server文件夹下。
运行forge
$ java -Xms512m -Xmx1024m -jar forge-1.10.2-12.18.3.2185-universal.jar nogui这个时候会报错误,因为缺少必要的库函数。我们需要把本地客户端里的库函数拷贝到服务器里。 找到本地.minecraft中libraries文件夹,将该文件夹拷贝到服务器的minecraft_server文件夹下。再次运行forge
$ java -Xms512m -Xmx1024m -jar forge-1.10.2-12.18.3.2185-universal.jar nogui等待一会,可以看到服务器重新启动了之前创建world存档。说明forge加载成功。ctrl-C退出。可以看到本地多了mods文件夹,该文件夹用来存放mod文件。
为使得服务器支持小地图,我们需要加载liteloader插件。 将本地客户端.minecraft/mods文件夹下的liteloader-1.10.2-release.jar拷贝到服务器下minecraft_server/mods文件夹下。
对于forge的mod,只需要将mod文件拷贝到服务器的mods文件夹及客户端的mods文件夹就可以了。 对于liteloader的mod,比如小地图voxelMapmod。不需要将mod文件(mod_voxelMap_1.6.21_for_1.10.2.litemod)拷贝到mods文件夹下,否则会引起错误。
再一次运行,服务器就建立完成了。
$ java -Xms512m -Xmx1024m -jar forge-1.10.2-12.18.3.2185-universal.jar nogui直接在终端运行服务器,如果退出终端,那么服务器也会随之终端。所以最好能将服务器在后台运行。 需要使用screen命令,具体的screen命令如何使用请参考网上众多教程。
最后附上我写的利用screen开关服务器的脚本。很久之前写的,语法有一些不规范的地方,大家多多包含
文件名: mcserver.sh
#!/bin/sh if [ "$1" == --help ];then printf " ==========================================\n" printf " -r\t如果存在minecraft_service则重新启动\n" printf " -kf\t如果存在minecraft_service则kill掉该进程\n" printf " -s\t查看minecra_service的状态\n" printf " -f\t将minecraft调至前台\n" printf " --help\t帮助\n" printf " ------------------------------------------\n" exit 0 fi declare -a pid_screen declare pid if [ "$1" == -f ];then pid_screen=$(screen -list | grep 'minecraft_service'|cut -d . -f 1) printf ${pid_screen} if [ -n ${pid_screen} ];then if [ ${#pid_screen[*]} -eq 1 ];then screen -r minecraft_service else printf "\t有多个minecraft_service\n" screen -list fi else printf "\t后台没有minecraft_service\n" exit 0 fi exit 0 fi #查询是否已经开启minecraft pid=$(ps -ef | grep forge-1.10.2-12 | egrep -v 'grep|screen|tee|SCREEN' | awk '{ printf $2}') if [ -n "$1" ]; then if [ "$1" == -r ];then if [ -n "$pid" ];then kill $pid fi # echo "kill" elif [ "$1" == -kf ];then if [ -n "$pid" ];then kill $pid fi pid_screen=$(screen -list | grep 'minecraft_service'|cut -d . -f 1 ) if [ ${#pid_screen[*]} -eq 1 ];then kill $pid_screen exit 0 fi elif [ "$1" == -ka ];then if [ -n "$pid" ];then kill $pid fi pid_screen=$(screen -list | grep 'minecraft_service'|cut -d . -f 1) kill $pid_screen exit 0 elif [ "$1" == -s ]; then if [ -n "$pid" ]; then printf "\tminecraft在运行\n" ps -ef | grep forge-1.10.2-12 | egrep -v 'grep|screen|tee|SCREEN' else printf "\tminecraft服务没有运行\n" fi exit 0 else printf "\t参数不正确\n使用--help可查看参数\n" exit 0 fi else printf "\t参数不正确\n使用--help可查看参数\n" exit 0 fi unset pid unset pid_screen date >> ./minecraft_service.log screen -R minecraft_service java -Xms512m -Xmx1024m -jar forge-1.10.2-12.18.3.2185-universal.jar nogui| tee -a ./minecraft_service.log使用方法
# 调用帮助 $ bash ./mcserver.sh --help # 在screen中打开服务器 $ bash ./mcserver.sh -r # 结束现有开启的服务器 $ bash ./mcserver.sh -kf # 查看服务器运行状态 $ bash ./mcserver.sh -s # 将后台的screen调至前台 $ bash ./mcserver.sh -f