在上一篇文章中,我们介绍了如何在本地使用minecraft。但是,如果小伙伴想要一起玩同一个地图,就需要一个minecraft服务器。最简单的方法就是在单机游戏的情况下对局域网开放,这种方法是一种临时提供大家玩耍的途径;另一种比较复杂的方法就是需要有一台闲置的电脑,在上面运行minecraft服务器版本。接下来我会介绍这两种方法,重点在第二种方法上。
这个时候,你可以改变游戏的一些属性,
比如game mode,可以换成上帝模式或者其他;以及是否允许使用作弊码。调整完游戏属性后,点击开始。这个时候你的游戏就作为一个临时的服务器面向局域网开放。游戏会为你分配一个端口号,并在屏幕上显示,在这个例子里是38413。
1.3. 其他人加入
加入
大家就可以一起玩耍了。 这样建立服务器有明显的优缺点
优点: 方便快捷,易于操作。适用于临时玩一会,或者向朋友分享自己的地图。
缺点: 建立服务器的人不能下线,如果建立服务器的玩家不想玩了,也必须保持自己是登入状态。这个时候如果想要离开电脑,无法保证自己人物的安全(被怪物袭击)。另外,如果希望局域网之外的小伙伴可以玩的话,这样建立服务器是无法加入的,需要一个公网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