[Minecraft]服务器架设指南:教你手搓MC服务器

前言

众所周知,Minecraft是一款开放世界建造游戏,玩家可以在一个由各种方块构成的无限大世界中尽情发挥创造力。通过收集资源、建造建筑、种植农作物、探索地下洞穴和与各种怪物战斗,玩家可以创造出属于自己的独特世界。无论是建造壮丽的城市、冒险探索神秘的世界还是与朋友一起合作建造,Minecraft都提供了无尽的乐趣和惊喜。无论是创造模式还是生存模式,这个游戏都能让你沉浸在一个充满无限可能性的虚拟世界中。

而能与其他的MC玩家一起联机游玩MC更是一种美妙的体验。如今又有诸多类型的服务器供大家选择,包括生存服、创造服、PVP服等等。每个服务器都有自己独特的规则和特色,玩家可以根据自己的喜好选择适合自己的服务器。

在生存服中,玩家需要收集资源、建造自己的房屋、种植农作物、养殖动物等等,过程中还可能需要与其他玩家合作或者竞争。这样的服务器模式更加注重玩家的生存能力和合作能力,使得玩家们能够在激烈的竞争中体验到刺激和成就感。

而创造服则更加注重玩家的创造力和想象力。在这样的服务器中,玩家可以拥有无限的资源,并且可以自由建造自己喜欢的建筑物和景观。无论是建造一个巨大的城堡、还是打造一个奇幻的仙境,都能够得到实现。

PVP服务器则是玩家之间的竞技场,玩家可以组队或者独自与其他玩家进行战斗。在这样的服务器中,玩家需要通过战斗技巧和策略来生存下来,并且击败其他玩家。这种模式更加注重玩家的战斗能力和战略思维,让玩家们能够感受到紧张刺激的战斗体验。

除了以上几种类型的服务器,还有许多其他的服务器类型供玩家选择。有的服务器提供了丰富多样的任务和剧情,玩家需要完成任务来获得奖励和提升自己的能力。有的服务器则提供了各种有趣的小游戏,让玩家们能够在游戏中体验到更多的乐趣和挑战。

通过与其他玩家交流、合作和竞争,玩家们能够互相学习、分享和成长。与其他玩家一起玩MC,不仅能够在游戏中获得乐趣,还能够结交到许多志同道合的朋友。Minecraft的魅力在于它创造了一个充满无限可能性的虚拟世界,而与其他玩家一起联机游玩MC则让这个世界变得更加丰富、有趣和有挑战性。无论是独自探索还是与朋友一起合作建造,MC都能够带给玩家们无尽的乐趣和惊喜。

作为一个MC的狂热爱好者,红石、建筑、指令、跑酷、pvp等MC经典玩法我都接触过。自己也游玩过很多类型的服务器,不管是生存服还是小游戏服我都体验过。后来我甚至开始打算自己创建个服务器邀请朋友一起游玩,经过一小段时间的学习后,我终于创建出了第一个属于我自己的服务器,当时成功的喜悦让我难忘,哪怕只是个小服。

后来,我决定将这个服务器做大做强,于是有了今天的小马梦幻城服务器的计划。在开发服务器的历程中我也遇到了很多有趣的东西,当然也有很多难题,不过就算遇上难题,我也会想尽办法去解决。

特别说明一下,本人并非计算机专业,欠缺计算机专业知识,但即使是这样,我也会选择去挑战一下,毕竟充满挑战的生活真的很酷。

在这里,我会给大家分享我近年来开发服务器的经验,事先说明,我并非专业人士,所以难免会出现些错误,而且我分享的是Java版MC小游戏服务器(spigot端,非网易)的开发经验,对于其它种类的大家可以自行搜索,不过还是有些经验是可以参考的,毕竟不管是哪种类型的服务器,都会有一些共同点。

最后再次声明一下,作者并非专业人士,此指南仅供参考。

第一章:创建篇

在开始创建之前,首先你需要在Java官网下载适合自己电脑或服务器系统的版本。下载完毕后,你就可以进行下一步了。

一.核心的选择

在开始创建服务端之前,你需要做好以下准备。一个服务端首先得需要一个核心,核心的种类有很多,像Paper、Spigot、Forge、Fabric等。下面是这几个核心的简单介绍:

Bukkit:一个最受欢迎的核心,提供了许多功能强大的插件,可以定制和扩展服务器的功能。
Spigot:基于Bukkit核心的优化版本,提供了更好的性能和更多的功能。
Paper:基于Spigot核心的进一步优化版本,提供了更高的性能和更多的功能。
Forge:用于modding(修改)的核心,允许玩家添加和定制游戏中的内容。
Fabric:另一个用于modding的核心,提供了更轻量级和快速的模组支持。

如今市面上又有一些整合型的核心,如Catserver,它就将Spigot,Forge,Bukkit三种核心整合在了一起,实现插件,mod互相配合。其它种类的核心,可以参考这篇文章:几乎所有服务器核心&配置服务端

在这里我会向大家展示Spigot核心的创服方法,因为我接触最多的是Spigot,也是使用次数最多的,相对其它核心,Spigot会更熟练。

创建服务端,你首先得创建个文件夹专门拿来装你服务端文件,文件夹名可以自行命名。然后你要进入Spigot的下载界面选择个你想要的版本下载(Download),核心版本对应你MC的版本,比如我要玩1.16.5的,那么我可以下载1.16.5的 Spigot核心。在跳出来的界面点击Spigot-1.16.5.jar(如下图)。

二.唤醒沉睡的核心

下载完毕后,将核心放到事先创建的文件夹内。然后在文件夹内创建个记事本文件,用于编写启动脚本。最简单的启动脚本就是(以我刚刚下载的核心为例):

java -Xms1G -Xmx2G -jar spigot-1.16.5.jar

-Xms参数设置了服务器的最小内存为1G,-Xmx参数设置了服务器的最大内存为2G,关于内存大小设置,需要从人数、服务器插件/模组、玩家活动(例如探索、建造、战斗等)等这几个因素入手。基于以上因素,以下是一般性的内存配置建议(注:请根据你的具体情况和所使用的插件、模组来实际配置。另外,确保你的服务器所在机器具备足够的物理内存来支持你设置的最大内存值):

对于较小的服务器(约5-10名玩家)

最小内存设置:建议至少设置为1GB。
最大内存设置:可以根据插件和模组的数量适当增加,通常在2-4GB之间。

对于中等规模的服务器(约10-20名玩家)

最小内存设置:建议至少设置为2-4GB。
最大内存设置:考虑玩家和活动的数量,通常在4-8GB之间。

对于大型服务器(超过20名玩家)

最小内存设置:建议至少设置为4-8GB。
最大内存设置:根据预计人数和活动量进行适当调整,通常超过8GB。

-jar 后面跟的是核心名称,注意一定是与核心一样的名字,如果你后面将核心重命名了,这边的参数得换成你重命名后的名称。

拓展:两种高级点的启动脚本:

第一种参考代码(可快捷设置java路径、最大内存、最小内存、核心,并且能自动重启,自动导出崩溃日志):


@ECHO OFF

:: java路径
set java="C:\Program Files\Java\jdk-14.0.1\bin\java.exe"
:: 设置服务端占用最大内存,单位是M或者G,1G=1024M
set Xmax=1024M
:: 设置服务端占用最小内存,单位是M或者G
set Xmin=64M
:: 设置服务端核心名称,不需要jar后缀
set Core= spigot-1.17.1

:: 以下内容不会修改轻不要修改
:MAIN
cls
title 金苹果の服务端
@echo. ---------------------------------------------------------------------
@echo.                            金苹果の服务端    
@echo.   服务器加载中,请勿随便关闭本窗口
@echo. 
@echo.   注意:关闭服务器前请在后台输入stop保存玩家数据,且出现重启标识再关
@echo.        本窗口
@echo.  
@echo.   崩溃报告: crash-report/时间最新.txt 
@echo.   服务器日志: Logs/latest.txt
@echo. ---------------------------------------------------------------------

ping -n 1 127.1>nul
echo -  服务端最小内存/最大内存:%Xmin%/%Xmax%  
@echo. 
ping -n 1 127.1>nul
echo -  服务端核心:%Core%  
@echo. 


%java% -Xmx%Xmax% -Xms%Xmin% -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -jar %Core%.jar


@echo.. ---------------------------------------------------------------------
@echo.                    MineCraft服务端已经成功关闭   
@echo. 
echo  (%time%) 服务器准备重启  
@echo. 
@echo.   注意:等待时间过后会准备重启,直接关掉窗口则为关服
@echo.  
@echo.   崩溃报告: crash-report/时间最新.txt 
@echo.   服务器日志: Logs/latest.txt
@echo. ---------------------------------------------------------------------
@echo.
timeout 10
goto MAIN

:END

第二种参考代码(可以使用数字快捷输入):

@echo OFF
@set a=0
@set title=[Pony Dream City Server]
@set core=-javaagent:authlib-injector-1.2.1.jar=https://skin.eqmemory.cn/api/yggdrasil -jar spigot-1.12.2.jar
title %title%
:setmem
::#########################################::
@set mem=1024
::在这里设置内存,只填数字,以M为单位
::请至少分配512M并且不要超过可用内存
::10人2048M,足够
::#########################################::
:menu
cls
title %title% [重启: %a%次] [内存:%mem%]
color 06
echo ╔════════  启动菜单 ═════════╗
echo ║      (输入选项并回车)      ║
echo ║                            ║
echo ║ [0] 开服   [2]打开根目录   ║
echo ║ [1] 退出   [3]刷新内存配置 ║
echo ║ [i] 信息                   ║
echo ║                            ║
echo ║ 右键此.bat文件             ║
echo ║ 选择编辑并更改内存         ║
echo ╚════════════════════════════╝
echo.
set /p in=  O(∩_∩)O → 
if %in% == 0 goto :start
if %in% == i goto :information
if %in% == 2 goto :root
if %in% == 3 goto :setmem
if %in% == 1 goto :stop
:start
cls
color 0F
echo ===================服务器启动===================
java -server -Xmx%mem%M -Xms%mem%M -jar %core%
echo %date% %time% 重启次数 [%a%] >> 启动日志.log
set /a a=%a%+1
echo ===================服务器停止===================
goto menu
:information
cls
title %title% [信息]
color 16
echo ╔══════════════════════════════════════════╗
echo ║ 服主:GoldenApplePie║
echo ║ QQ群:868240429                     ║
echo ║ 皮肤站:https://skin.eqmemory.cn/      ║
echo ║ 欢迎来到小马梦幻城服务器!                         ║
echo ╚══════════════════════════════════════════╝
timeout /t 10
goto menu
:root
start "" "."
goto menu
:stop
echo [See you next time]
PAUSE

在这边特别说明一下,保存时将其编码修改为 ANSI,防止中文出现乱码。

写完脚本后,将.txt换成.bat,你可以在保存时像上图一样将保存类型选成“所有文件”,并且在文件名后加上.bat,你也可以将文件扩展名直接打开,然后直接重命名。之后双击这个脚本。

拓:.bat文件是Windows平台上的批处理脚本文件,用于批量执行一系列命令。
以下是一些基本的.bat语法:
@echo off:用于关闭命令回显,使执行时不显示执行的命令本身。
REM:用于添加注释,不会执行注释后面的内容。
SET:用于设置变量。
ECHO:用于在命令行输出文本。
IF:用于条件判断。
FOR:用于循环操作。
GOTO:用于跳转到脚本中的标签。
CALL:用于调用另一个批处理文件。
PAUSE:用于暂停脚本的执行,等待用户按下任意键继续。
EXIT:用于退出脚本的执行。
以上是一些基本的.bat语法,可以在批处理脚本中结合这些语法来完成各种操作。具体语法的使用方式可以参考Windows的批处理文档或在线资源。

这里如果你使用“java -Xms1G -Xmx2G -jar spigot-1.16.5.jar”脚本打开1.16.5出现闪退的话,那么这是因为是服务端版本与java版本不匹配,除非你电脑内部默认的Java环境刚好与之匹配。这时候你可以选择使用刚刚拓展脚本中的第一种,因为可以直接设置Java路径,或者直接在已有的脚本内添加java路径。设置好正确的java路径后双击就不会闪退了。然后双击启动脚本,弹出一个窗口后等它加载完毕就可以进行下一步了。

附:各个版本对应的java版本:

1.7.x / 1.8.x / 1.9.x – 使用Java7(不推荐)或Java8运行
1.10.x / 1.12.x – 使用Java8运行
1.12.x / 1.13.x / 1.15.x – 使用Java8,Java9或Java12运行
1.16.x – 使用Java8,Java9,Java12或Java16运行
1.17.x – 使用Java16或Java17运行
1.18.x – 使用Java17或Java18运行
1.18.x / 1.19.x – 使用Java17或更高版本运行.

弹出窗口后,这时候你会发现文件夹内多出了一些新的文件,你需要先找到eula.txt,打开后将里面的eula=false 的false换成true, 这个eula文件就是协议,改成true就相当于同意。然后保存好协议后再次双击启动脚本,等它加载完并出现”Done”,就说明这个服务端已经创建完毕。

这时候你再次查看文件夹,你会发现又多出了一些文件,接下来我将会介绍每个文件(夹)的作用。特别说明一下,划线的文件或文件夹是要重点关注的。

logs文件夹:存放服务器日志的文件夹。

plugins文件夹:存放插件的文件夹。

world文件夹:主世界地图文件夹。

world_nether文件夹:下界地图文件夹。

world_the_end文件夹:末地地图文件夹。

banned-ips.json:服务端的配置文件,用于记录被封禁的IP地址。当一个IP地址被封禁后,该IP的用户将无法连接到MC服务器。该文件存储了被封禁的IP地址列表,每个IP地址通常包括IP地址本身和封禁的原因。管理员可以编辑该文件,添加或删除被封禁的IP地址。

banned-players.json:服务端的一个配置文件,用于记录被禁止玩家的名单。当一个玩家在MC服务器上被禁止时,其用户名会被添加到此文件中。这个文件是一个JSON格式的文本文件,其内容包含被禁止玩家的用户名列表。MC服务器在每次玩家尝试连接服务器时会检查此文件,如果玩家的用户名在该文件中,服务器将拒绝该玩家的连接。这个文件的作用是控制和管理被禁止的玩家,以维护服务器的秩序和安全性。

bukkit.yml :一种配置文件,用于配置Bukkit服务器的各种设置和功能。Bukkit是Minecraft的一个服务器软件,允许玩家创建和定制自己的Minecraft服务器。bukkit.yml文件包含了服务器的各种选项和设置,包括游戏规则、插件配置、世界生成选项、传送和经济系统设置等。通过编辑bukkit.yml文件,服务器管理员可以调整服务器的各种功能和行为,以满足特定的需求和玩家的要求。

commands.yml:配置文件,通常用于存储命令行工具的命令和参数配置信息。该文件可以包含命令的名称、描述、参数、选项等信息,以便用户可以通过命令行界面执行特定的命令。

eula.txt :服务端的End User License Agreement(最终用户许可协议)文件。它包含了Minecraft服务端软件的使用条款和条件。用户在使用Minecraft服务端之前需要同意并遵守其中的规定。eula.txt文件阐述了用户在使用Minecraft服务端软件时的权利和义务,包括但不限于不得修改、分发或出售服务端软件,不得使用服务端软件进行商业用途等。用户需要仔细阅读并同意其中的条款,才能继续使用Minecraft服务端。

help.yml服务端的帮助文件,用于提供有关游戏内命令和功能的信息。它是一个文本文件,存储了游戏内所有命令的用法、参数和说明,供玩家在游戏中查询。通过编辑help.yml文件,你可以自定义命令的帮助信息,以便玩家更好地理解和使用这些命令。

ops.json:服务端配置文件,用于管理运营员(operator)的权限。运营员是在服务器中具有特殊权限的玩家,他们可以执行一些高级操作,如管理服务器、使用特殊指令等。文件保存了每个运营员的详细信息,包括运营员的用户名、UUID(唯一标识符)以及他们的权限等级。该文件可以在服务端文件夹中找到,通常位于服务器根目录下的”ops.json”文件中。运营员可以通过在游戏中使用指令或直接编辑ops.json文件来管理其他玩家的权限。他们可以添加或删除运营员,修改运营员的权限等级,并且可以执行一些特殊指令,例如传送玩家、修改游戏模式等操作。请注意,对ops.json文件的修改需要在服务端关闭的情况下进行,并且只有具有足够权限的操作员才能修改此文件。此外,建议在对ops.json文件进行修改之前,先备份原始文件以防止意外发生。

permissions.yml配置文件,用于设置玩家的权限和权限组。它可以用于管理玩家可以进行的操作,如建造、破坏、使用指令等。在permissions.yml文件中,可以设置权限组,指定每个权限组的权限,还可以为每个玩家指定所属的权限组。

你可以在permissions.yml文件中添加和编辑以下内容:

定义权限组:可以设置不同的权限组,如管理员、玩家、VIP等,每个权限组可以有不同的权限。
分配权限:可以为每个权限组分配具体的权限,如建造、破坏、使用指令等。
分配玩家权限组:可以为每个玩家指定所属的权限组,玩家将获得该权限组所拥有的权限。

通过修改permissions.yml文件,你可以自定义和管理玩家的权限,以及控制玩家在服务器中的行为。

server.properties配置文件。它包含了各种服务器的设置选项,可以通过修改这些选项来改变服务器的行为和特性。server.properties文件包含了很多选项,包括服务器的端口号、游戏模式、难度、地图种子、最大玩家数量、白名单、生成结构、游戏规则等等。这些选项可以根据服务器管理员的需要进行调整,以满足特定的服务器需求。通过修改server.properties文件,管理员可以自定义服务器的各种设置,包括游戏的难度、是否允许创造模式、是否开启作弊等。此外,管理员还可以通过server.properties文件来配置服务器的插件和模组,以实现更多的功能和特性。

spigot.yml:服务器软件Spigot的配置文件之一。Spigot是一种优化的Minecraft服务端,它基于Bukkit开发,提供更高的性能和更多的功能。Spigot.yml包含了各种服务器相关的配置选项,可以通过修改该文件来自定义服务器的行为和功能。在Spigot.yml中,可以配置各种服务器设置,包括服务器名称、服务器图标、游戏规则、世界配置、插件设置、性能优化等等。可以通过修改Spigot.yml来调整服务器的各种参数,以满足特定的需求和优化服务器性能。需要注意的是,修改Spigot.yml之前,建议备份原始的配置文件,以防止出现配置错误导致服务器无法正常启动。同时,修改Spigot.yml的某些参数可能需要重新启动服务器才能生效。

spigot-1.16.5.jar : 服务端核心。核心提供了一个插件架构,使服务器管理员能够添加额外的功能和修改游戏体验。只有启动核心后,才能并启用相关的插件和功能。

start.bat:批处理文件,用于启动服务端程序。批处理文件是一种包含一系列命令的文本文件,可以一次性执行多个命令。

usercache.json:服务端中存储玩家UUID和用户名的文件。它用于存储最近加入过服务器的玩家的UUID和用户名的对应关系。当玩家第一次加入服务器时,服务器会生成一个唯一的UUID,并将UUID和玩家的用户名保存在usercache.json中。这样,当玩家再次加入服务器时,服务器可以根据UUID找到对应的用户名。这个文件通常位于Minecraft服务端的根目录下。

UUID(Universally Unique Identifier)是一个独一无二的标识符,用于在不同的 Minecraft 版本、服务器和服务之间唯一标识每个玩家。UUID 是由 32 个字符组成的字符串,形式为8-4-4-4-12,并以连字符分隔。通过使用 UUID,可以确保在任何 Minecraft 环境中都能准确标识特定的玩家,而不受他们在游戏内的名称更改的影响。这在跨服务器的数据交换、存档管理以及进行准确的权限控制等方面非常有用。

whitelist.json:用于定义服务器的白名单。白名单是一个列表,其中包含被允许连接和进入服务器的玩家的用户名。whitelist.json文件可以手动编辑,也可以通过命令来管理白名单。

在whitelist.json文件中,每个玩家的用户名被添加为一个对象,包含一个名为”name”的属性,属性值为玩家的用户名。例如:


{

"whitelisted": [

{

"name": "玩家1"

},

{

"name": "玩家2"

},

{

"name": "玩家3"

}

]

}

只有在白名单中列出的玩家才能连接到服务器,并在服务器中游玩。

如果你想给你服务器加一个图标的话,请选择一个64×64的png图片文件,并且直接放入服务器文件夹里,将其重命名为server-icon.png即可。

拓展:

yml文件:使用YAML(YAML Ain’t Markup Language)格式编写的文件,该格式以易读易写的方式表示数据,并且可以与多种编程语言进行交互。

json文件:JSON(JavaScript Object Notation)是一种基于文本的数据格式,用于以结构化的方式表示和交换数据。它是一种常用的数据交换格式,易于阅读和编写,并且可以被多种编程语言进行解析和生成。

三.配置

在以上文件中,你需要特别注意的是插件文件夹、三种维度地图文件夹以及server.properties。此时你可以将server.properties文件打开,你可以用电脑自带的记事本直接打开,也可以使用Visual Studio Code之类的文本编辑器打开。

下表是该文件一些比较重要的属性的介绍,至于所有属性的介绍,你可以查看WIKI

属性类型默认值描述
allow-flight布尔值false允许玩家在安装添加飞行功能的mod前提下在生存模式下飞行。允许飞行可能会使恶意破坏者更加常见,因为此设定会使他们更容易达成目的。在创造模式下无作用。false – 不允许飞行。悬空超过5秒的玩家会被踢出服务器。true – 允许飞行。玩家得以使用任何能飞行的mod飞行。
allow-nether布尔值true允许玩家进入下界。false – 下界传送门不会生效。true – 玩家可以通过下界传送门前往下界。
difficulty字符串easy定义服务器的游戏难度(例如生物对玩家造成的伤害,饥饿和中毒对玩家的影响方式等)。如果设置了旧的数字ID,则会自动转化为英文的难度名称。peaceful (0) – 和平easy (1) – 简单normal (2) – 普通hard (3) – 困难
enable-command-block布尔值false是否启用命令方块。
enable-rcon布尔值false是否允许远程访问服务器控制台。由于RCON协议传输数据时没有加密,所以不建议把RCON暴露在互联网上。RCON客户端和服务端交换的所有数据(包括RCON密码)都会泄露给正在监听此连接的人。
enforce-whitelist布尔值false在服务器上强制执行白名单。当启用后,不在白名单(前提是启用)中的用户将在服务器重新加载白名单文件后从服务器踢出。true – 不在白名单上的用户会被踢出。false – 不在白名单上的在线用户不会被踢出。
force-gamemode布尔值false强制玩家加入时为默认游戏模式。false – 玩家将以退出前的游戏模式加入true – 玩家总是以默认游戏模式加入
gamemode字符串survival定义默认游戏模式。如果值是旧用的数字,会静默转换为对应游戏模式的英文名称。survival (0) – 生存模式creative (1) – 创造模式adventure (2) – 冒险模式spectator (3) – 旁观模式
generate-structures布尔值true定义是否能生成结构(例如村庄)。false – 新生成的区块中将不包含结构。true – 新生成的区块中将包含结构。注:即使设为false,地牢仍然会生成。
level-name字符串world“level-name”的值将作为世界名称及其文件夹名。你也可以把你已生成的世界存档复制过来,然后让这个值与那个文件夹的名字保持一致,服务器就可以载入该存档。部分字符,例如 ‘ (单引号)可能需要在前面加反斜杠号 \ 才能被正常应用。
level-seed字符串空白与单人游戏类似,为你的世界定义一个种子。
level-type字符串minecraft:normal使用世界预设ID,确定地图所生成的类型。使用世界预设ID时,需要在其中的“:”前加“\”转义。原版世界预设ID可以省略其前面的“minecraft:”(即命名空间)。minecraft:normal – 带有丘陵,河谷,海洋等的标准的世界。minecraft:flat – 一个没有特性的平坦世界,可用generator-settings修改。minecraft:large_biomes – 如同预设(default)世界,但所有生物群系都更大。minecraft:amplified – 如同预设世界,但世界生成高度提高。minecraft:single_biome_surface – 单一生物群系世界,可用generator-settings修改。
max-build-height整数256玩家在游戏中能够建造的最大高度。可能会在该值较小时生成超过该值的地形。
max-players整数(0-2147483647)20服务器同时能容纳的最大玩家数量。请注意,在线玩家越多,对服务器造成的负担也就越大。同样注意,服务器的OP具有在人满的情况下强行进入服务器的能力:找到在服务器根目录下叫ops.json的文件并打开,将需要此能力的OP下的bypassesPlayerLimit选项设置为true即可(默认值为false),这意味着OP将不需要在服务器人满时等待有玩家离开后再加入。过大的数值会使客户端显示的玩家列表崩坏。
max-tick-time整数(0–(2^63 – 1))60000设置每个tick花费的最大毫秒数。超过该毫秒数时,服务器watchdog插件将停止服务器程序并附带上信息:服务器的一个tick花费了60.00秒(最长也应该只有0.05秒);判定服务器已崩溃,它将被强制关闭。遇到这种情况的时候,它会调用 System.exit(1)。译者注:如果你监测服务程序的返回代码,此时返回代码会为1。(习惯上,程序正常退出应当返回0)-1 – 完全停用watchdog插件(这个停用选项在14w32a快照中添加)
max-world-size整数(1-29999984)29999984设置可让世界边界获得的最大半径值,单位为方块。通过成功执行的命令能把世界边界设置得更大,但不会超过这里设置的最大方块限制。如果设置的max-world-size超过默认值的大小,那将不会起任何效果。例如:设置 max-world-size为1000将会有2000×2000的地图边界。设置 max-world-size为4000将会有8000×8000的地图边界。
motd字符串A Minecraft Server本属性值是玩家客户端的多人游戏服务器列表中显示的服务器信息,显示于名称下方。MOTD 支持样式代码。MOTD 支持特殊符号,比如”♥”。然而,这些符号需要转换为Unicode转义字符。你可以找到一个转换器。如果MOTD超过59个字符,服务器列表很可能会返回“通讯错误”。
network-compression-threshold整数256默认会允许n-1字节的数据包正常发送, 如果数据包为n字节或更大时会进行压缩。所以,更低的数值会使得更多的数据包被压缩,但是如果被压缩的数据包字节太小将反而使压缩后字节更大。-1 – 完全禁用数据包压缩0 – 压缩全部数据包注:以太网规范要求把小于64字节的数据包填充为64字节。因此,设置一个低于64的值可能没有什么好处。也不推荐让设置的值超过MTU(通常为1500字节)。
online-mode布尔值true是否让服务器对比Minecraft账户数据库验证登录信息。只有在你的服务器并未与Internet连接时,才将这个值设为false。如果设为false,黑客就能够使用任意假账户连接服务器!如果minecraft.net服务器宕机或不可访问,那么该值设为true的服务器会因为无法验证玩家身份而拒绝所有玩家加入。通常,这个值设为true的服务器被称为“正版服务器”。故意设定该变量为false的服务器称为“破解服务器”(也称离线服务器),这类服务器允许拥有未授权的Minecraft副本的玩家加入。true – 启用。服务器会认为自己具有Internet连接,并检查每一位连入的玩家。false – 禁用。服务器不会尝试检查玩家。
op-permission-level整数(1-4)4设定使用/op命令时OP的权限等级。所有存档会从之前的存档继承能力和命令。1 – OP可以绕过重生点保护。2 – OP可以使用所有单人游戏作弊命令(除了/publish,因为不能在服务器上使用;/debug也是)并使用命令方块。命令方块和领域服服主/管理员有此等级权限。3 – OP可以使用大多数多人游戏中独有的命令,包括 /debug,以及管理玩家的命令(/ban,/op等等)。4 – OP可以使用所有命令,包括 /stop, /save-all, /save-on 和 /save-off。
pvp布尔值true是否允许PvP。也只有在允许PvP时玩家自己的箭才会受到伤害。true – 玩家可以互相残杀。false – 玩家无法互相造成伤害(也称作玩家对战环境PvE))。注:由玩家造成的间接伤害(例如熔岩,火,TNT等,某种程度上还有水,沙子和沙砾)还是会伤害其他玩家。
query.port整数(1-65534)25565设置监听服务器的端口号(参见 enable-query)。
rate-limit整数0设置玩家被踢出服务器前,可以发送的数据包数量。设置为0表示关闭此功能。
rcon.password字符串空白设置RCON远程访问的密码(参见enable-rcon)。RCON:能允许其他应用程序通过互联网与Minecraft服务器连接并交互的远程控制台协议。
rcon.port整数(1-65534)25575设置RCON远程访问的端口号。
require-resource-pack布尔值false当此选项启用(设为true)时,玩家会被提示作出选择(是否启用服务器资源包)。如果玩家拒绝则会被服务器断开连接。
resource-pack字符串空白可选选项,可输入指向一个资源包的URI。玩家可选择是否使用该资源包。注意若该值含”:”和”=”字符,需要在其前加上反斜线(\),例如 http\://somedomain.com/somepack.zip?someparam\=somevalue 资源包大小理应不能超过50 MiB(1.15-pre5前)100 MiB(1.15-pre5到1.18-pre8)250 MiB(1.18-rc1起)注意,下载成功或失败由客户端记录,而非服务器。
resource-pack-prompt字符串空白可选,用于在使用require-resource-pack时在资源包提示界面显示自定义信息。与聊天组件语法一致,可以包含多行文本。
resource-pack-sha1字符串空白资源包的SHA-1值,必须为小写十六进制,建议填写它。这还没有用于验证资源包的完整性,但是它提高了资源包缓存的有效性和可靠性。
server-ip字符串空白将服务器与一个特定IP绑定。强烈建议留空该属性值!留空,或是填入你想让服务器绑定(监听)的IP。
server-port整数(1-65534)25565改变服务器(监听的)端口号。如果服务器在使用NAT的网络中运行,该端口必须被转发(在你有家用路由器/防火墙的前提下)。
simulation-distance整数(3-32)10设置服务端可更新实体范围的最大值,即玩家各个方向上的区块数量(是以玩家为中心的半径,不是直径)。超出此范围的实体不会被更新,对玩家也不可见。默认/推荐设置为10,如果有严重卡顿的话,减少该数值。
spawn-animals布尔值true决定动物是否可以生成。true – 动物可以正常生成。false – 动物生成后会立即消失。提示:如果你有严重的卡顿,可以设为false。
spawn-monsters布尔值true决定攻击型生物(怪物)是否可以生成。true – 启用。怪物会生成于夜晚和黑暗处。false – 禁用。不会有任何怪物。如果difficulty=0(即难度设置为和平)的话,该属性值不会有任何影响。提示:如果你有严重的卡顿,可以设为false。
spawn-protection整数16通过将该值进行2x+1的运算来决定出生点的保护半径。设置为1会保护以出生点为中心的3×3方块的区域,2会保护5×5方块的区域,3会保护7×7方块的区域,以此类推。这个选项不在第一次服务器启动时生成,只会在第一个玩家加入服务器时出现。如果服务器没有设置OP,这个选项会自动禁用。设置为0将不会禁用出生点保护,但会保护位于出生点的那一个方块(13w05a前)。设置为0会禁用出生点保护(13w05a起,参见MC-666)。
view-distance整数(3-32)10设置服务端发送给客户端的世界数据量,也就是设置玩家各个方向上的区块数量(是以玩家为中心的半径,不是直径)。它决定了服务端的可视距离。(另见渲染距离)默认/推荐设置为10,如果有严重卡顿的话,减少该数值。
white-list布尔值false启用服务器的白名单。当启用时,只有白名单上的用户才能连接服务器。白名单主要用于私人服务器,例如提供给相识的朋友、通过应用流程谨慎选择的陌生人等。false – 不使用白名单。true – 从whitelist.json文件加载白名单。注: OP会自动被视为在白名单上,所以无需再将OP加入白名单。

那么该如何配置好一个服务器呢?以一个小游戏服为例,在一个小游戏服里,pvp是个常见的玩法,因此你需要把pvp打开(pvp=true),同时,为了防止服务器误封飞行,你打开允许飞行(allow-flight=true)。如果你的小游戏是以数据包或者命令方块为基础开发的,你要开启允许命令方块(enable-command-block=true),当然,如果你不想浪费内存,你可以将下界给删了,这时候你只需要关闭下界生成(allow-nether=false),然后再将下界地图文件夹删除,重启服务器后是不会再次生成下界的。如果你想让非正版玩家进入,你可以关闭正版验证(online-mode=false)。这样就调整好了一个小游戏服的配置文件(对于其它配置视具体情况而定)。接下来再次启动你的服务器。

服务器开启后,启动对应的游戏版本,然后进入多人游戏,添加服务器,服务器地址输入0.0.0.0就行,然后你就可以进入你的服务器了。恭喜你,你已经学会如何成功创建我的世界服务端了。

作为一服之主,你还得了解一些基础的OP指令,下面是一些常用的指令:

  1. /op [玩家名称]:授予玩家管理员权限。
  2. /deop [玩家名称]:取消玩家的管理员权限。
  3. /gamemode [玩家名称] [游戏模式]:改变玩家的游戏模式,如生存模式、创造模式等。
  4. /give [玩家名称] [物品ID] [数量]:给予玩家指定数量的物品。
  5. /tp [玩家名称] [目标玩家名称]:将玩家传送到目标玩家的位置。
  6. /tp [玩家名称] [X坐标] [Y坐标] [Z坐标]:将玩家传送到指定的坐标位置。
  7. /ban [玩家名称] [封禁原因]:封禁玩家,禁止其进入服务器。
  8. /unban [玩家名称]:解封玩家,允许其重新进入服务器。
  9. /kick [玩家名称] [踢出原因]:踢出玩家,将其移出服务器。
  10. /whitelist add [玩家名称]:将玩家添加到服务器的白名单,只有白名单上的玩家才能进入服务器。
  11. /whitelist remove [玩家名称]:将玩家从服务器的白名单中移除。
  12. /kill [玩家名称]:杀死指定玩家。
  13. /time set [时间]:设置服务器时间。
  14. /weather [天气]:改变服务器的天气,如晴朗、下雨、雷暴等。
  15. /worldborder set [边界大小]:设置服务器的世界边界大小。
  16. /stop 关闭服务器。

注意:你首先得给自己OP权限,才能使用更多指令,你只要在控制台输入op <你的名字>,然后回车即可。(tip:控制台指令不需要添加”/”。)

那么最后还有个问题,你的朋友该如何进你的服务器呢?

四.邀请你的小伙伴

目前来说,你所完成的服务器只能供自己游玩,因为这是本地IP,自己的电脑当然能连。要让远在万里的朋友也能进入,我们就需要一个内网穿透工具,这个工具可以将你的内网(局域网)服务器映射到外部网络(互联网)上。

市面上有很多内网穿透工具,在这里我推荐我经常使用的:樱花。这是个免费的内网穿透工具。花一点时间注册并且实名认证(可能会花1元进行实名认证),然后选择适合你电脑系统的启动器进行下载。

下载完毕后,打开启动器,在樱花官网的首页里找到你的访问密钥(注意这个访问密钥相当于密码,请妥善保管!),将其复制在启动器的相应位置,这样你就可以登录樱花启动器了。在隧道界面点击“+”,然后选择java进程,并在右下角选择合适的节点,选择延迟低的即可,最后点击创建(如下图)。

回到隧道界面,将你刚刚创建的隧道打开,启动成功后到日志界面,找到连接IP。将其复制到服务器地址里,这样你和你的小伙伴都可以进入到你的服务器里了。

这里只演示樱花的内网穿透工具的使用方法,对于其它的穿透工具请自行查看相关教程。或者你可以尝试自己购买/租用一台服务器主机,参考教程:我的世界Minecraft服务器硬件配置需求只要239元?~从选购硬件开始~ 一步步教你搭建MC服务器。又或者你可以选择在一些不错的服务器租用平台租服,推荐:PixelCloud喵喵互联,这俩个都提供保姆般的教程,并且对新手十分友好。

至此,你已经学会如何创建一个可以和你朋友一起联机的服务器了。接下来我们要做的事就是给这个服务器升级,添加一些有用的插件。

附录:多人游戏连接服务器常见报错

Connection refused: no further information

客户端无法连接到服务器

1.服务器未运行或未启动:请确保你正在尝试连接的服务器正在运行,并已完全启动。可以联系服务器管理员确认服务器状态,并检查是否有任何问题导致服务器无法正常运行。

2.服务器地址或端口不正确:在连接时,确保你输入了正确的服务器地址和端口。如果是本地连接(局域网),请确定你在同一网络下,并提供正确的内部IP地址。

3.防火墙或安全软件阻止连接:防火墙、杀毒软件或其他安全设置可能会阻止Minecraft与服务器之间的连接。请检查你的防火墙设置,并允许Minecraft游戏流量通过防火墙。也可以尝试禁用暂时的防火墙或安全软件,然后重新连接。

4.网络连接问题:在尝试连接前,请确保你的网络连接正常工作,且没有任何故障。可以通过访问其他网站或服务测试你的网络连接。还要考虑网络拥塞或高延迟的问题,这可能导致服务器连接被拒绝。

5.服务器负载过高:如果服务器性能不足或负载过高,它可能会拒绝新的连接请求。这种情况下,稍等片刻然后再尝试连接。

Not authenticated with Minecraft.net

表示你的Minecraft客户端无法通过Mojang的认证服务器进行验证

1.登录凭据错误:请确保你提供的Minecraft账号用户名和密码是正确的。重新输入并尝试重新登录,确保没有输错或遗忘凭据。

2.Minecraft.net认证服务器问题:有时候Mojang的认证服务器会出现问题,导致无法正常验证账号。这可能是暂时性问题,可以稍等片刻然后再尝试登录。

3.防火墙或安全软件阻止连接:防火墙、杀毒软件或其他安全设置可能会干扰Minecraft与认证服务器之间的通信。请检查防火墙设置,并允许Minecraft游戏流量通过防火墙。也可以尝试禁用暂时的防火墙或安全软件,然后再次尝试登录。

4.帐户有问题:如果你的Minecraft账号被封禁或存在其他问题,可能会导致认证失败。

Outdated server! I’m still on x.x.x

意味着你的Minecraft客户端版本与服务器不兼容,需要更新游戏版本才能连接到服务器

这时候你需要下载与服务器版本匹配的版本游玩,如果你是服务器服主或管理员,可以考虑给服务器添加多版本兼容插件。

第二章:插件篇

插件是扩展和增强你的服务器功能的关键工具,它们可以为你的游戏世界带来无限的可能性。无论你是想要创建一个纯粹的生存服务器,还是构建一个创造性的世界,插件都可以帮助你实现你的愿望。

插件可以为服务器提供各种功能,例如经济系统、权限管理、技能系统、地图扩展、游戏模式切换和自定义指令等。它们可以帮助你创建一个更具挑战性和多样性的游戏环境,吸引更多的玩家加入。

在选择插件之前,你需要考虑服务器的主题和目标玩家群体。不同的插件适用于不同的游戏玩法和服务器类型。你可以浏览插件网站,如Bukkit、Spigot和Paper,来寻找适合你服务器的插件。确保仔细阅读插件的描述和评价,以确保它们与你的服务器需求相匹配。

一旦你找到了合适的插件,你需要了解如何正确安装和配置它们。在本篇中,我们将为你提供逐步的指导,帮助你完成插件的安装和设置过程。无论你是一个有经验的服务器管理员,还是一个新手,我们都将提供易于理解和操作的步骤,以确保你的插件顺利运行。

一.下载插件

在下载插件前,我来推荐几个可以找到插件资源的网站:

Bukkit:一个专门下载插件的外国网站。

Spigot: 外国的MC资源社区,在这里你可以找到非常多的插件资源。

MCBBS:MC中文论坛,也是MC的资源库,地图、材质、mod、插件等资源都很丰富。强烈推荐。

在这里,我推荐几个实用性很强的插件,大多类型的服务器都可以用到的。

  1. ViaVersion:可以让服务端跨版本。建议将ViaBackwardsViaRewind一并安装。这几个插件算是服务器必备插件。
  2. MultiworldMultiverse:多世界插件,可以在服务器里创建多个世界。
  3. EssentialsX :该插件提供了一些基本的命令和功能,如传送、家、经济等。
  4. WorldEdit : 这是一个强大的世界编辑工具,可以用来快速编辑和建造世界。
  5. WorldGuard : 这个插件用于保护你的世界,可以设置区域保护,限制建造和破坏等。
  6. LuckPerms:本插件能对玩家权限进行分组,让个别玩家能拥有自己的个别权限。也有其它种类的权限组插件。
  7. PlaceholderAPI:此插件允许服务器使用你喜欢的各种插件中的占位符。
  8. TrMenu:一个实用的菜单插件,它易于编辑、功能强大,兼容性强,是你制作服务器菜单的不二之选。(ChestCommand也是一款菜单插件,而且有专属的编辑器,但其兼容性没那么强,所以我个人还是推荐使用Trmenu,或者你也可以选择混搭。)

以上插件可以说是每个服务器必备插件,当然你也可以自行选择合适的插件进行安装。使用插件的方法有一些基本的步骤,下面我将一一为你介绍。

拓展:

占位符是一种特殊的代码,用于表示某个位置应该填充对应玩家的信息。比如在服务器的配置文件中,我们可以使用占位符来动态引用与玩家相关的数据。这些占位符的语法通常由插件或者服务器软件解析,并把它们替换为真正的玩家数据。

举个例子,想象一下有一个服务器配置文件,里面有一行文本,其中包含了 %player% 这样的占位符。当服务器处理这个配置文件时,它会将占位符 %player% 替换为正在执行命令或事件的玩家的信息。也就是说,不论哪个玩家在执行命令,这个占位符都会被替换为相应玩家的名字、UUID 或者其他需要的数据。使用占位符能够使配置文件更加灵活和动态,因为它们使得数据能够根据玩家的具体情况进行自动填充。这样,服务器可以根据玩家的情况提供不同的功能和反馈。

二.配置插件

首先,确保你已经安装了你所需要的插件。你可以从插件的官方网站或者其他可靠的来源下载插件的安装文件。一般来说,插件的安装文件是以.jar格式存在的。一旦你下载了插件的安装文件,你需要将它放置在你的服务器文件夹的”plugins”文件夹中。注意,你所下载的插件应该要与你的服务器核心(包括版本)兼容。

在将插件安装文件放置到正确的位置后,你需要重新启动你的服务器。这将使插件被服务器所识别和加载。一旦你的服务器重新启动,你可以通过插件提供的命令或者功能来使用它。不同的插件有不同的使用方式,你可以通过查看插件的官方网站或者文档来了解具体的使用方法。通常来说,插件的使用方法会在官方文档中有详细的说明。你可以在服务器的控制台中输入插件的命令,或者在游戏中使用插件的功能。如果你不确定插件的命令或者功能,可以使用插件的帮助命令来获取更多的信息。

在查看插件的使用说明时要留意它的权限节点,类似于xxxx.xxxx.xxxx或者类似于xxxx.xxxx.xxxx.xxxx或xxxx.xxxx.*(带有“*”说明开启这个插件所有指令权限),这些权限节点经常要添加进权限组插件的配置文件里,选择合适的权限给非OP玩家开放,以达到某种功能,增强玩家体验。相反你没有给予权限的玩家则无法使用该插件的指令。

当然很多插件需要进行配置才能正常工作。你可以在插件的配置文件中修改插件的设置和选项。首先找到插件的配置文件夹,文件夹基本与插件是同名的,而配置文件通常在插件文件夹下的”config”文件中。

最后,记得定期检查插件的更新。插件的开发者会不断更新插件以修复bug或者添加新的功能,确保你的插件保持最新版本可以帮助你获得更好的体验。

三.注意事项

如果你在查找插件文件夹时没有发现该插件的文件夹,即使是重启后都没出现,那么这时很有可能是因为插件与核心不兼容,所以你一定要了解插件的适用核心以及版本。

对于插件的配置文件,你要注意的是,类似于config.yml这种文件后缀是.yml的文件,yml文件是一种常用的配置文件格式,常用于存储程序的配置信息。在我的世界服务器的插件文件夹中,yml文件通常用于存储插件的配置信息。这些配置信息可以包括服务器的设置、权限、世界生成规则、物品掉落等等。通过编辑.yml文件,可以更改插件的功能和行为。

在修改和编写配置文件时,一定要记住不用破坏或者肆意删除配置文件的结构,因为配置文件的结构是为了保证系统正常运行和配置的有效性。在修改配置文件时,应该遵循以下几个原则:

1.备份原始文件:在进行任何修改之前,应该先备份原始的配置文件。这样,即使修改出现错误,也可以轻松地恢复到原始状态。

2.了解配置文件的结构:在修改配置文件之前,应该仔细研究配置文件的结构和语法规则。了解文件的各个部分的作用和相互关系,避免对配置文件的结构进行破坏或删除。

3.使用合适的编辑工具:为了避免误操作或对配置文件造成意外的破坏,应该选择合适的编辑工具。一些编辑工具提供语法高亮和自动补全等功能,可以帮助减少错误的发生。

4.逐步进行修改:在对配置文件进行修改时,应该逐步进行,每次只修改一个配置项或一个部分。修改完成后,要测试配置文件的有效性,确保系统可以正常运行。

5.注释修改的内容:为了方便日后维护和查找问题,修改配置文件时应该添加注释,说明对配置文件的修改内容和原因。这样可以提高配置文件的可读性和可维护性。

这里以Trmenu的菜单配置文件的片段代码为例(文件路径:plugins\TrMenu\menus\menu.yml),注释已给出相应的功能属性。


  '1':    # 编号
    display:
      mats: end_crystal  # 显示的材质
      name:      # 显示的名称
        - '&a&l小游戏服主大厅'
      lore:     # 显示的说明标签

        - '点击传送至小游戏服主大厅'
    actions:      # 触发时的指令
      left:          # 左击时触发的指令
        - 'close'  # 指令1:运行/close
        - 'player: stp minigames'    # 指令2:以玩家来运行/stp minigames

你需要注意的是语法结构,对于Trmenu来说,在官方的使用文档能找到所有的语法结构。以Trmenu为例,下面就是一个基础的语法结构。虽说基础,但也很重要,如果你不按照这个结构编写,大概率会报错。具体其它的语法结构你可以查看它的使用说明。

  '1':
    display:
      mats: end_crystal
      name:
        - '&a&l小游戏服主大厅'
      lore:
        - '点击传送至小游戏服主大厅'
    actions:
      left: 
        - 'close'
        - 'player: stp minigames'

#一个正确的结构,该缩进的地方就缩进


  '1':
  display:
  mats: end_crystal
    name:
       - '&a&l小游戏服主大厅'
     lore:
        - '点击传送至小游戏服主大厅'
  actions:
    left: 
       - 'close'
      - 'player: stp minigames'

# 一个错误的结构,要么没有缩进,要么缩进不完全


四.汉化

在这里还得提醒一下,在下载插件时留心是否有汉化版本或者汉化配置文件,因为很多插件都来源于国外,搬运者一般会提供汉化。如果没有汉化,你可以试着找该插件的语言配置文件,并尝试自己翻译,实在不行就找人帮忙或者机翻吧。不过,汉化也需要用心,因为一个好的汉化可以给玩家提供一个更加流畅和沉浸的游戏体验。

某建筑战争插件的英文配置文件(请忽视背景图片x)

经过汉化后的语言文件,充满活力,让人眼前一亮(by 平安小马国)

在汉化时要注意,不要将不需要汉化的地方给汉化了,这样非常有可能导致插件无法运行。比如一些占位符,如%player%、%time%,也有可能是用“{}”的,如{player}、{time}。还有就是一些颜色代码/格式(化)代码,如&a、&e之类的(在某些特定的环境或插件中,“&”可以更换为“§”),具体可以参考下面的图片。

总的来说,为了实现某一功能,你需要在各个资源站寻找相关插件,并且仔细的阅读插件的使用教程,熟知基本指令和配置文件的语法结构,同时你要关注该插件的权限节点和汉化配置。当服务器添加了这个插件后,多做几次测试,不仅能测试该插件的可行性、兼容性,而且还能让你熟悉这个插件的使用方法。

五.开发插件

那么如果你找不到一个你想要的插件,你可以尝试自己写一个,不过这个要求相对来说要高。首先你得了解计算机编程基础知识和java语言的基本语法,然后你可以按照下面的步骤开发你的插件(来源于网络):

1.了解插件开发环境:插件开发需要Java编程语言和Minecraft的API(如Bukkit或Sponge)。确保你已经安装了Java开发工具包(JDK)和Minecraft服务器。

2.设置开发环境:下载并安装所选的插件API,如Bukkit或Sponge。根据所选API的文档,设置开发环境并创建一个新的插件项目。

3.创建插件:在IDE(集成开发环境)中创建一个新的Java类,并为插件选择一个有意义的名称。在插件类中,你可以编写处理Minecraft事件和命令的代码。

4.注册事件监听器:通过继承适当的事件监听器类或实现适当的事件处理接口,将你的插件注册为一个事件监听器,以便能够处理游戏中发生的事件。

5.编写事件处理代码:根据你想要实现的功能,编写适当的事件处理代码。例如,如果你想要在玩家进入游戏时向他们发送一条欢迎消息,你可以编写一个玩家进入游戏事件的处理方法。

6.注册自定义命令:如果你想要创建自定义命令,你可以编写一个新的命令类,并在插件中注册该命令。在命令类中,你需要定义命令的名称、参数和处理方法。

7.编译和导出插件:在完成插件的开发后,将代码编译成可执行的插件文件。导出插件文件到Minecraft服务器的插件文件夹中。

8.启动服务器并测试插件:启动Minecraft服务器并进入游戏,确保你的插件正常工作。使用插件中定义的命令和功能,测试插件的各个方面。

9.调试和改进插件:如果在测试中发现问题或改进的空间,返回到开发环境中,调试和改进你的插件代码。

10.发布插件(可选):如果你希望与其他Minecraft玩家共享你的插件,你可以将插件上传到Minecraft插件网站或其他相关社区。

编写”我的世界”插件需要一定的编程知识和经验。如果你是初学者,可以查阅相关的插件开发教程和文档,或参考其他开发者的示例代码。同时,积极参与相关社区,与其他插件开发者交流经验和技巧。顺便说一下,本人并非专业人士,对于插件开发还处于萌新状态,这些建议仅供参考,如果你不放心,你也可以选择去询问专业人士或者在互联网上搜索。推荐教程视频(这有一个系列):我的世界插件开发

第三章:地图篇

其实按道理来说,我不应该写这一篇,但考虑到各个方面以及我自己的亲身经历(曾经我整服务器地图时出过很多幺蛾子),所以我还是得分享一下我自己在这方面的经验。

这里你可能会问,为什么要了解我的世界的地图呢?相信我这对你创建服务器来说很重要,尤其是看了我的建议后你会少走很多弯路。

首先来简单的看一下我的世界地图文件的结构,如下图(此地图的版本为1.18.2)。

advancements:存储玩家在游戏中获得的进度的文件夹。

data:存储游戏中的世界数据的文件夹。这些数据包括地图生成的地形、方块、实体、游戏规则、玩家位置等。

datapacks: 存储自定义数据包的文件夹。

DIM1:保存的是地狱维度的地图数据。

DIM-1: 存放末地维度相关文件的文件夹。

entities:包含了地图中的实体的数据信息,可以用于保存和加载地图中的实体。每个实体都有自己的实体ID、坐标、速度、属性等信息,这些信息可以在游戏中进行修改和控制。通过修改entities文件中的数据,可以对地图中的实体进行自定义和编辑。

generated:存储了游戏中生成的所有方块、结构和生物的数据。其中的structures文件夹内的nbt文件是结构文件,你可以通过结构方块来生成结构。

playerdata:存储玩家的游戏数据的文件夹。它包含了与玩家相关的信息,例如玩家的坐标、物品背包、经验等。这些数据文件是以玩家的UUID(Universally Unique Identifier)命名的,UUID是一个唯一的标识符,每个玩家都有一个对应的UUID。

poi:存储世界内与村民有关的数据。(1.14+)

region:存储地图区块数据的文件夹。每个地图区块都以文件的形式保存在这个文件夹中。每个文件的名称是根据区块的位置来命名的,例如”r.0.0.mca”表示坐标为(0, 0)的区块。这些文件存储了地图区块的方块、生物、植物以及其他实体的数据。

stats:储存玩家在此世界游玩时的统计信息。

icon.png:地图的图标文件。通常为64×64.

level.dat:存储了该世界的一些基本信息和设置,例如世界的种子、生成的地形、游戏模式、玩家的位置等。

level.dat_old:一个备份文件,它是 Minecraft 游戏中的一个文件,用于存储世界地图的数据。当你在游戏中进行一些重要的更改,例如升级游戏版本或进行世界编辑时,Minecraft 会自动在地图文件夹中创建一个 level.dat_old 文件作为备份。这样,如果出现意外情况导致地图数据丢失或损坏,你可以通过将 level.dat_old 文件重命名为 level.dat 来恢复之前的地图数据。这样,你就可以回到之前的游戏进度,而不是从头开始。

session.lock:用来锁定地图文件夹,以防止多个程序同时修改地图文件夹而导致冲突的文件。当一个程序正在访问地图文件夹时,它会在文件夹中创建一个session.lock文件,并在程序关闭时删除它。在session.lock文件存在的情况下,其他程序将无法修改地图文件夹,以避免数据损坏或冲突。当你看到session.lock文件时,表示有其他程序正在访问或修改地图文件夹。

worldgen_settings_export.json:存储世界生成设置的文件。此文件包含了生成新世界时使用的设置,如地形生成、生物群系生成、结构生成等。它记录了世界的生成参数,可以根据这些参数重新生成相同的世界。

第四章:数据包篇

在开发服务器时,可能会遇到无法找到合适的插件来实现某个特定功能的情况。然而,有时候你可能会找到一个恰好能够满足你需求的地图。那么,这个地图是如何实现类似于插件的功能呢?这就需要了解命令方块和数据包。

在 MC 中,命令方块是一种特殊的方块,可以执行预先设置好的命令。借助命令方块,你可以创建一系列的命令和触发器,以实现各种自定义功能。通过将多个命令方块连接在一起并进行适当的设置,你可以创建复杂的机制、红石电路或其他自动化系统。

另外,还有一种称为数据包(Datapack)的方式可以增加 MC 的功能。数据包是一组自定义的文件,可以向游戏中添加新的资源、函数和结构,从而修改游戏行为。使用数据包,你可以定义新的指令、创造新的物品、更改玩家的行为,甚至创建全新的游戏模式。数据包允许你对基本游戏进行修改和扩展,以实现你所需的功能。

使用命令方块集(上图)实现一些简单炫酷的粒子效果(下图)

数据包还可用于覆盖或添加新的进度、维度、函数、战利品表、谓词、配方、结构、标签、伤害类型、自定义世界生成和生物群系,而不进行任何代码修改。简单来说,数据包类似于插件,但插件使用的是java编写,而数据包是用MC内部指令编写。同时你可以把它当作命令方块集的集成代码文件。注意,数据包是1.13以后出现的,且只适用于java版。具体可以看这一篇介绍:

数据包 – Minecraft Wiki,最详细的我的世界百科 (fandom.com)

用数据包整出来的粒子特效

总之,通过命令方块和数据包,你可以在MC中实现一些类似于插件的功能。命令方块能够执行命令和创建自动化系统,而数据包则可以修改游戏的资源和行为,使你能够进行更多的定制和创造。这两种方式提供了一些灵活性,让你能够在不使用插件的情况下实现特定的功能和自定义玩法。

如果你恰好了解MC的一些指令,那么你完全可以自创个数据包,来实现你想要的功能。不过在这里我不会过多介绍如何制作数据包,具体的方法你可以自行搜索。也可以查看相关文章,或者观看教程视频。如果自己不想做,你可以在一些MC资源网站查找你想要的数据包。比如PlanetMC等。

下载好你想要的数据包后,将它放入地图文件的datapacks文件夹内,解压还是不解压都可以,只要文件夹/压缩包内直接对应数据包的目录结构就可以,不过“套娃”式的数据包是根本不会响应的。最后进入游戏你就可以在这个世界使用这个数据包的功能了。

需要注意的是,数据包也要看对应的版本,版本不对应很容易出错,或者直接不响应。下载完一个数据包请先开一个单人地图进行测试,在单人地图中使用/reload重新加载,这时候数据包也会跟着重新加载,然后按照说明就可以正常使用数据包了。

当你测试完这个数据包,准备将它丢到服务器里时,如果你服务器提前安装了多世界插件,并且创建了多个世界,打算将各种数据包分别丢入各个地图文件里,这时候你需要注意了。

你以为数据包会像插件一样,在各个世界不会有太大的影响和冲突,但残酷的是,数据包不能配合多世界插件,它们会有很明显的冲突,这些冲突表现在,你在世界A(装了数据包A)运行数据包A,但有时可能会发现会有数据包B(此数据包在世界B中)的指令提示,然后你的服务器因此变得一塌糊涂。

所以说,数据包不兼容多世界插件是个致命的缺点,这样你就只能将这些地图分开,并且分别创建服务端。当然这些冲突也不是绝对的,有些数据包配合多世界插件还是可以运行的,而为了避免冲突,最好在使用数据包和多世界插件之前,先了解它们的功能和修改内容,确保它们之间没有相互冲突的修改。如果发生冲突,可能需要进行调整或者选择使用不同的数据包或插件来解决冲突。

这里也希望有开发者能够开发出能够将插件和数据包同时兼容的多世界插件。

附:插件与数据包优缺点汇总

插件的优点:

1.功能丰富:插件可以提供更多的功能和游戏模式,如增加新的游戏规则、添加新的生物、更改游戏机制等。

2.客户端无需安装:插件可以在服务器端安装,无需玩家在本地安装,更便于多人游戏。

3.灵活性高:插件可以根据需求进行定制或修改,可以根据服务器的需求进行定制和修改。

4.社区支持:有许多插件开发者和社区提供插件支持和更新,可以增加游戏的可玩性和趣味性。

插件的缺点:

1.兼容性问题:某些插件可能与其他插件或数据包不兼容,可能会引发错误或冲突,需要进行测试和调试。

2.依赖性问题:某些插件可能依赖于特定的插件或数据包,需要进行安装和配置,增加了服务器的复杂性。

3.安全性问题:插件可能会带来安全漏洞或恶意代码,需要谨慎选择和更新插件,确保服务器的安全性。

4.性能问题:某些插件可能会占用服务器的资源,导致游戏运行缓慢或崩溃,需要进行优化和管理。

数据包的优点:

1.简单易用:数据包可以直接导入游戏,无需额外的配置和安装,更加方便和快捷。

2.可定制性:数据包可以根据需求进行定制和修改,可以根据游戏的需求进行个性化设置。

3.社区支持:有许多数据包开发者和社区提供数据包支持和更新,可以增加游戏的可玩性和趣味性。

4.轻量级:数据包相比插件来说一般比较轻量级,不会对游戏性能产生太大的影响

数据包的缺点:

1.功能局限:数据包的功能相对插件较为有限,无法进行复杂的游戏定制和修改。

2.可玩性限制:数据包的修改范围有限,无法对游戏机制进行根本性的改变,只能进行一些表面上的修改。

3.更新和支持问题:某些数据包可能会更新缓慢或停止更新,可能无法得到及时的支持和解决问题。

4.依赖性问题:某些数据包可能依赖于特定的插件或数据包,需要进行安装和配置,增加了服务器的复杂性。

5.可能不兼容:一些数据包可能不兼容游戏的版本或其他数据包,可能会导致游戏出现错误或不可预知的问题。

第五章:群组服篇

当你有很多服务端,又想让他们连在一起时,又或者在大型的服务器中,为了满足大量玩家的需求,通常会使用多个服务器进行负载均衡时,你需要构建群组服来满足这些需求。接下来我会向各位介绍Bungeecord。

Bungeecord是一种Minecraft服务器代理软件,它允许玩家在多个不同的Minecraft服务器之间切换和传送,而无需重新连接服务器。Bungeecord可以连接多个服务器,同时管理玩家的连接和传输,从而实现多服务器的联机。它还提供了一些额外的功能,如全局聊天和服务器间的玩家传送。Bungeecord可以帮助玩家在不同的游戏模式和服务器之间无缝切换,提供更好的游戏体验。

如何构建一个BungeeCord端呢?

首先你需要下载BungeeCord,下载完成后将其放入一个新建文件夹内,注意,下图内容均要下载。

然后将文件按照一定结构放置(如下图)

你放置BungeeCord的文件夹/

├─  BungeeCord.jar

│  ├─  module

│                ├─  cmd_alert.jar

│                ├─  cmd_find.jar

│                ├─  cmd_list.jar

│                ├─  cmd_send.jar

│                ├─  cmd_server.jar

└─          └─reconnect_yaml.jar

然后和spigot端一样也要写一个启动脚本用于开启BungeeCord。

示例脚本:

@echo off

Java -jar BungeeCord.jar

Pause

再然后将文件后缀改成.bat,并自行命名。完成后双击启动,出现以下界面就说明启动成功了。

这时候使用 end 关掉窗口。进入文件夹找到Config.yml开始修改配置文件。打开后是这样的(已将重要的配置标上了注释):


enforce_secure_profile: false
listeners:
- query_port: 25566               # 端口
  motd: |
    &f&ka&8---&7---&f--==&e★&b欢迎来到小马梦幻城服务器!&e★&f==--&7---&8---&f&ka
    &f&ka       &c--→&a&l推荐版本:&e&n1.12-1.17 &9QQ群:&d暂未开放&c←--       &f&ka  #标语
  tab_list: GLOBAL_PING
  query_enabled: false
  proxy_protocol: false
  forced_hosts:
    pvp.md-5.net: pvp
  ping_passthrough: false
  priorities:
  - a
  bind_local_address: true
  host: 0.0.0.0:25566
  max_players: 50
  tab_size: 60
  force_default_server: true
remote_ping_cache: -1
network_compression_threshold: 256
permissions:       
  default:
  - bungeecord.command.server
  - bungeecord.command.list
  admin:
  - bungeecord.command.alert
  - bungeecord.command.end
  - bungeecord.command.ip
  - bungeecord.command.reload
log_pings: true
connection_throttle_limit: 3
server_connect_timeout: 5000
timeout: 30000
stats: d4769f70-bc86-4d26-8e4d-43caac45ac81
player_limit: -1     
ip_forward: false
groups:
  md_5:
  - admin
remote_ping_timeout: 5000
connection_throttle: 4000
log_commands: false
prevent_proxy_connections: false
online_mode: true
forge_support: false
disabled_commands:
- disabledcommandhere
servers:               # 子服列表         
  a:                   # 子服a
    motd: '&1yee'
    address: localhost:25567       # 子服a的端口
    restricted: false
  b:                   # 子服b
    motd: yee
    address: localhost:25568
    restricted: false

以上就是BungeeCord端配置文件的示例,大家可以按照自己的需求进行修改。对于其它设置的功能自行搜索。

设置完成后,再次双击启动,然后再打开默认服的文件夹,再次打开server.properties,找到server-port,将其修改为25566。端口你可以按情况自行设置,只要与BungeeCord配置文件内的相对应即可。

端口修改完后先别着急打开,这时候你需要下载一个跨服传送插件:Stp

注意,stp插件是放在默认服或者其它服的插件文件夹里的,不是BungeeCord的插件。当然也不止一个类似于Stp的跨服传送插件。

装好插件后,BungeeCord端和默认服同时启动,进入后你就可以直接到默认服了。对于其它服务器按照上述操作也是可以连接到BungeeCord端的,在服务器里使用 /stp <服务器名> 实现跨服传送,服务器名就是你在BungeeCord配置文件里添加的服务器名。如上述示例代码中,a是默认服,在a服中你可以使用/stp b传送至b服中。

第六章:进阶篇

一个漂亮的登录大厅和一些新奇的趣味玩法都是服务器的卖点所在。本章内容主要介绍如何升级你的服务器,包括地图的选择、菜单、玩法等各个方面。你可以选择性的参考我推荐的插件、地图等资源。

一.地图

在前面的章节中我们重点介绍了如何搭建一个群组服,那么对于一个游戏服来说(别忘记我主要以游戏服为例),你要美化各个子服的地图,比如登录服要选择一个合适的登录大厅,游戏子服要选择合适的游玩场地。

大部分情况,你都可以在MC资源站中找到适合你服务器的地图,比如MC MapsMC AdminPlanetMC等。如果没有合适的地图,你可以自己尝试搭建一个,或者和其他人团队合作。要想搭建一个漂亮的地图,很考验你的艺术审美和建筑功底。

下图是小马梦幻城服务器登录服的登录大厅,我找了两个星期才找到。

找到后就是将它进行装饰,比如添加一些有用的全息字用于传递信息。

你可以试用相关插件编辑全息字,因为这样更方便。当然使用指令也是可以的,大概原理就是通过summon指令召唤个隐形的并且命名的盔甲架,指令如下:


/summon minecraft:armor_stand ~ ~ ~ {CustomName:”[{\”text\”:\”浮空字\”,\”color\”:\”gold\”,\”bold\”:false,\”italic\”:false,\”underlined\”:false,\”strikethrough\”:false,\”obfuscated\”:false}]”,Tags:[“ABC”],CustomNameVisible:1b,Invulnerable:1b,PersistenceRequired:1b,NoGravity:1b,Invisible:1}

指令讲解:(适用于java版高版本)
“浮空字”就是要显示的字,gold是颜色,这些都可以修改。
以下为解构/summon minecraft:armor_stand ~ ~1 ~
在上一格召唤盔甲架,其具有以下特性:
{CustomName:”[{\”text\”:\”浮空字\”,
名称:浮空字
\”color\”:\”gold\”,
颜色:金色
\”bold\”:false,
是否将文字加粗:否
\”italic\”:false,
是否将文字渲染为斜体:否
\”underlined\”:false,
是否添加下划线:否
\”strikethrough\”:false,
是否添加删除线:否
\”obfuscated\”:false}]”,
是否模糊处理文字:否
Tags:[“ABC”],
Tags为“ABC”
CustomNameVisible:1b,
是否在没有光标定位的情况下显示名称:是(最为重要)
Invulnerable:1b,
是否无法被破坏:是
PersistenceRequired:1b,
是否无法被自然刷新掉:是
NoGravity:1b,
无视重力:是
Invisible:1}
盔甲架隐形:是
注意事项:
1.写tag是方便操作,比如要清除盔甲架时可以/kill @e[tag=ABC]。
2.无视重力不是保持这个位置,活塞之类的方法依旧可以移动它
3.无敌代表无法打到它,所以清除它最好使用上面的指令
4.5种字体格式均针对于全部字符,可以使用。(false=否,true=是)
5.[XXX:1b]这种格式与T/F差不多,1b=是,0b=否。
6.只能用命令方块,不是因为聊天栏其他的原因,是因为这玩意太长了,聊天栏一次最多只能发255字符。
7.不  要  乱  动  转  义!!

根据上面的原理,我用python手搓了一个我的世界全息字生成器,大家可以直接下载下来使用。


如果你不擅长指令,你可以使用插件来编辑全息字。我个人推荐Decent Holograms插件(进入链接即可查看教程和下载),此插件不仅兼容性好,而且易于操作,功能丰富,值得下载。

二.菜单

  菜单通常是指游戏中的交互界面。通过菜单,玩家可以进行各种操作和设置,比如选择物品、调整设置、查看任务等。菜单可以帮助玩家更方便地管理自己的游戏进程和进行相应的配置。

以下是一个典型的菜单设计:

1.菜单标题:菜单应该有一个清晰的标题,以便玩家知道这是什么菜单。

2.选项列表:菜单应该列出不同的选项供玩家选择。

3.状态指示:可以在每个选项旁边显示一些状态指示,如符号或颜色,来告诉玩家该选项的可用性或是否已经被选择。

4.子菜单:某些选项可能会打开一个子菜单,其中包含更多的选项。这样可以实现层级式菜单结构。

5.操作方式:给出每个选项的操作方式,例如按下特定的键或输入命令。

6.返回选项:为了方便玩家,菜单应该提供一个返回选项,让玩家回到上一个菜单或主菜单。

7.可自定义性:玩家可能希望自定义一些设置,所以菜单应该提供一些选项供玩家进行调整。

8.美观性:一个好看的菜单设计可以增加玩家的游戏体验。使用合适的字体、颜色、背景等来使菜单看起来漂亮。

9.简洁性:菜单设计应该尽可能简洁明了,避免过多的选项和不必要的复杂性。

综上所述,一个良好的”我的世界”服务器菜单应该是清晰、简洁、易于导航并具有可自定义的功能。它应该提供玩家所需的选项,并通过美观的视觉效果增强用户体验。

(小马梦幻城服务器的“魔法菜单”,基于TrMenu.)

如今市面上有很多菜单插件,例如ChestCommandsTrMenuCommandPanels等。我当初使用的是ChestCommands,后面才开始使用TrMenu,再然后才发现的CommandPanels。

我个人推荐TrMenu和CommandPanels,这两款插件都有着功能丰富,兼容性强,较易操作的优点。

三.计分板

计分板(Scoreboard)是一个功能强大的系统,可以用于跟踪和显示玩家或实体的分数、统计数据和其他自定义变量。它可以帮助服务器管理者在游戏中创建和管理各种计分统计、成就和排行榜。

以下是一些”我的世界”计分板的常见用途和特点:

1.排行榜:通过计分板,服务器管理者可以根据不同的分数统计,创建玩家排行榜,并在游戏中向玩家展示排名。

2.记录团队分数:计分板可以在多人游戏中记录不同团队或玩家的得分,比如计算两个团队的击杀数或进球数。

3.玩家排名:通过计分板,可以显示玩家之间的排名和积分榜,让玩家在游戏中竞争并提高兴趣。

4.进度追踪:计分板可以用于追踪任务或目标的完成情况,给玩家提供一个清晰的指标来衡量他们的进度。

5.游戏时间:计分板可以记录玩家的在线时间,使管理员和玩家能够准确地了解每个玩家的活动时间。

6.统计数据:通过计分板,管理员可以跟踪和监控各种统计数据,如玩家的死亡次数、采集的资源数量等。

7.提示和消息:计分板上的信息可以帮助管理员向玩家提供重要提示、规则说明或服务器公告。

8.自定义功能:计分板可以根据服务器管理者的需求进行自定义设置和功能设计,以满足特定的游戏玩法或服务器需求。

想要创建个计分板你同样也有两种方法,一种通过指令,一种通过插件。计分板的指令本体为/scoreboard,在这里就不占用过多的篇幅来介绍计分板指令了,有兴趣可以查看相关教程。

计分板的指令多而杂,所以我还是建议利用插件来创建计分板,这样更快捷。这里我推荐TitleManager插件,该插件不仅可以让你方便快捷地创建计分板,而且还能编辑欢迎标题、编辑玩家列表、编辑欢迎副标题、编辑动画效果,可以说功能比较强大。但最后你还是得知道一件事,就是在没有优化之前,计分板有时会耗很多服务器资源。

四、域名

在前面的章节中,我们尝试使用了自己的电脑利用内网穿透工具创建出了一个临时的服务器,但如果你想要搭建一个能长期运行下去的服务器的话,仅仅用你的电脑是不大现实的。

当然,前面我们也说了,如果要搭建一个真正意义上的服务器,你需要的是一台合适的机子和一个域名的。至于如何选择服务器,前文有相关的参考链接,在这我不多做赘述,本小节的目的是探讨域名的创建。

那么什么是域名?拿一个网址举个例子,比如我的博客的网址:blog.goldenapplepie.xyz ,这个网址就可以称为一个域名,但网址和域名在某些场合意义又不一样,网址就是浏览器地址栏中的文本集合,它包含域名。域名也可以称为网址,但网址不能都称为域名。举个例子来说,比如这篇文章的网址:https://blog.goldenapplepie.xyz/?p=915,它就不是个域名,因为它还包含了路径/目录,所以它只能悲称为一个网址。对于域名在这里就不多做介绍了,想了解更多你可以观看这个视频(有时间最好把这个系列都看完,很有用的科普教程视频):

【白话科普】域名?网址?原来域名是这么个玩意 啊!终于听懂了 | 互联网的运作原理 | 网站上线发布分享教程系列内容第三期_哔哩哔哩_bilibili

当你购买了一个自己的域名后,你要做的就是解析。整个域名的作用就可以理解成,访问一个地址,然后通过域名的解析,访问到另一个地址,这一连接可以通过域名解析来完成。域名的解析分为好多种,来实现多种不同地址的解析。图示如下:

通常,IP地址初始为 XXX.XXX.XXX.XXX ,这就叫做数字IP,假如我们的ip为sdns.hka2.starzv.com.,而且我们买好的域名为 goldenapplepie.xyz ,如果要将地址 blog.goldenapplepie.xyz 解析到 sdns.hka2.starzv.com.(以我博客为例) ,在你的域名提供商那边添加一个解析记录,就像这样:

解析完成后就可以通过blog.goldenapplepie.xyz来访问了。

对于MC服务器,如果服务器提供商提供的是一串数字IP,那么得做个额外操作。如下图:

先用IP创建一个新域名的解析记录(A记录),这个新域名类似于桥梁,上面图片的例子就是gappdc.goldenapplepie.xyz,其对应的IP为XX.XX.XXX.XXX(打码x),然后继续利用这个新域名创建一条新的解析记录(SRV记录,要按照格式填写:优先级、空格、权重、空格、端口、空格、主机名),最后在主机记录填写_minecraft._tcp.xxx,本例中xxx即为mcpdc,所以最终你的MC服务器地址为:mcpdc.goldenapplepie.xyz,然后进入游戏填上这个地址就可以访问服务器了。

五.管理

服务器管理系统是确保服务器平稳运行和玩家积极体验的关键组成部分。一个良好的管理系统可以提供一系列工具和功能,使管理员能够有效管理、配置和维护服务器。

MC服务器本身就自带了一些管理指令,比如/op、/ban之类的,但这些基础的指令无法满足更多的要求,所以我们要为服务器添加一些管理型的插件。一下就是一些实用的管理插件/工具:

举报插件:比如CaterReportBC,该插件兼容的版本广,功能也十分丰富,而且便于操作,适合作为首选的举报插件。或者使用PlayerReport,自带GUI,操作更简单。

网页管理

NekoMaid(插件),此插件功能十分丰富,便于管理操作,但十分考验技术。

MCSManager(软件工具),此工具的功能也十分丰富,也是我本人目前一直在使用的服务器管理工具。它能远程提供一个可操作的服务器面板,让你可以通过电脑或手机远程管理服务器。

其它类型的管理:

MiraiMC(插件):这是基于Mirai机器人(QQ机器人)开发的服务器插件,你可以利用QQ机器人来管理你的服务器,实现了QQ群远程管理。而且其附属的各类子插件也十分丰富,比如能跨服(与QQ群)聊天的YinwuChat插件,还有集管理,聊天,查询于一身的LinearBot插件……

不过使用Mirai也是很考验技术的,而且Mirai也经常因封控而变得不稳定,所以Mirai放在这也只是推荐,并不是非要不可。

反作弊:反作弊系统在服务器中能够维护公平竞争、保护服务器安全、支持经济平衡、提供良好社区环境,并确保玩家享受到令人满意的游戏体验。因此,很有必要给你的服务器打造个强大的反作弊系统。

推荐反作弊插件:NoCheatPlus

六.登录

对于你自己的服务器,你可能不希望任何人都可以随意进入,因此需要在服务器登录方面做一些处理。登录是一种记录玩家并提供安全保护的方式,也便于日后查询可疑玩家的信息。如果你的服务器完全开放给公众,则无需特别添加登录相关插件。但如果你担心安全问题,建议你在登录方面做一些改进。

我的世界服务器共有三种账号模式登录:离线模式、外置登录模式、正版模式。离线模式和外置登录几乎是完全免费的(为什么说几乎呢,主要是有的外置登录会要求收费)。离线模式登录是最快捷,最便宜的(完全免费)登录方式,这边推荐个登录插件:TzLogin,该插件完全由GUI操作,使用起来十分方便。或者使用类似的登录插件,如FastLogin等。

但离线登录也有些限制,比如,如果服务器没装SkinsRestorer插件(一个在离线模式的服务器显示正版皮肤的插件),那么所有玩家就只能显示默认皮肤。

你还可以使用白名单来添加你信任的玩家。白名单是一种服务器设置,它可以控制谁可以登录和进入服务器游玩。只有被加入白名单的玩家才能连接到服务器,这是一种有效的方式来限制服务器的访问。

以下是使用白名单的步骤:

访问服务器配置文件:在服务器文件夹中找到名为”server.properties”的配置文件。

开启白名单功能:在该配置文件中找到名为”white-list”或”enable-whitelist”的选项,将其设为”true”,以启用白名单功能。如果没有找到这个选项,你可以手动添加一行代码:”white-list=true”。

添加玩家到白名单:在同一个服务器文件夹中找到名为”whitelist.json”或”white-list.txt”的文件(取决于你所使用的服务器版本)。在这个文件中,每个玩家应占一行,输入他们的用户名(或UUID)。或者,在white-list.txt文件中,每行写入一个玩家名字即可。

保存并重新启动服务器:保存修改后的配置文件,并重启服务器,以使白名单设置生效。

现在,只有被添加到白名单的玩家才能够连接和进入服务器。其他没有被添加到白名单的玩家将无法登录服务器。请注意,只有服务器管理员可以添加或删除玩家到白名单。这可以通过指令“/whitelist add [玩家名字]”和“/whitelist remove [玩家名字]”来进行操作。

不过我个人推荐的是皮肤站登录。皮肤站是指一个在线平台或网站,玩家可以在这里浏览、上传、下载和分享我的世界角色皮肤。

通过皮肤站,玩家可以完成以下操作:

浏览皮肤:你可以在皮肤站上浏览其他玩家上传的各种皮肤,这包括创意、现实、动画等各种不同类型的皮肤。你可以选择一个你喜欢的皮肤,并下载到本地使用。

上传皮肤:如果你有自己设计的皮肤或从其他地方获取的皮肤,你可以将其上传到皮肤站,然后与其他玩家分享。这样其他玩家就可以使用你的皮肤。

下载皮肤:皮肤站上提供了大量的免费皮肤下载,你可以根据自己的喜好和风格选择和下载适合自己的皮肤。下载后,你可以将其应用到自己的我的世界角色上。

编辑皮肤:一些皮肤站还提供在线编辑工具,让你可以在网页上直接对皮肤进行编辑和自定义。通过这些工具,你可以绘制、调整颜色或添加图案,以创作出独特的皮肤。

总之,我的世界皮肤站为玩家提供了方便快捷地获取和分享各种皮肤的平台,帮助玩家个性化自己的角色外观,并与其他玩家交流和展示自己的创意。你甚至可以利用皮肤站搭建个服务器官网(具体的细节会在后面的篇章中提及)。

你可以使用那些公开的皮肤站使用,当然也可以搭建个私人的给自己和朋友使用。这里推荐的是Blessing Skin Server。需要注意的是,搭建一个完整的皮肤站可能需要涉及更多技术细节和个性化的定制。如果没有必要的技术知识,你可能需要寻求专业开发人员的帮助。这边推荐一个教程:

手把手教你搭建自己的 blessing-skin 皮肤站并使用高大上的 authlib-injector 外置登录(mcbbs.net)

利用authlib-injector插件,配合Blessing Skin Server,你的服务器就可以让已通过服务器验证的外置登录玩家或已购买正版账号的玩家进入。那么如何为服务器添加个皮肤站认证呢?

首先你得下载好authlib-injector,并将其放入服务器根目录里(不是插件文件夹里),然后编辑启动脚本:

Java -Xms1G -Xmx1G -javaagent:authlib-injector-1.2.1.jar=<YggdrasilAPI认证服务器地址> -jar spigot-1.12.2.jar

这边要注意authlib-injector的版本,如示例脚本中的是1.2.1。YggdrasilAPI认证服务器地址因皮肤站的域名而异,如https://xxx.xxxxxx.xx/api/yggdrasil。对于其它参数功能在前文已说明,这里就不多做赘述。

接下来打开服务器配置文件“server.properties”,将里面的online-mode=false修改成online-mode=true,然后启动服务器即可加载配置。如果你的服务器是群组服,那么你只需要将authlib-injector放入BungeeCord端的根目录里,并打开config.yml修改online_mode: false为online_mode: true,同时,你还得将authlib-injector分别放入每个子服的根目录里,不用修改子服配置文件中的online-mode(=false),万事俱备后启动服务器即可完成配置。

七.官网

我的世界服务器官网提供了一个重要的平台,用于宣传、推广和管理服务器,与玩家沟通和互动,提供下载和支持,促进社区建设,并确保服务器的规范和可持续发展。它不仅是一个玩家了解服务器、参与交流的窗口,也是服务器管理团队与玩家沟通和互动的桥梁。

一个完善的我的世界服务器官网应该具备以下功能(仅供参考):

服务器介绍:提供关于服务器的详细介绍,包括游戏模式、特色功能、玩家数量等信息。这有助于新玩家了解并选择加入服务器。

新闻和公告:发布服务器的最新消息、更新内容、活动信息等。确保玩家可以及时了解到服务器的动态和重要通知。

客户端下载:提供最新版本的服务器客户端下载链接,让玩家能够方便地获取并安装服务器客户端。

规则和指南:列出服务器的规则和准则,确保玩家了解游戏的行为规范,并遵守服务器的规则。同时提供一些游戏指南和帮助,帮助玩家更好地开始游戏。

社区交流:设立一个论坛或社交媒体平台,用于玩家之间的交流和互动。玩家可以分享经验、提问、组队等,增强社区的凝聚力。

玩家排名和统计:展示服务器的玩家排名、经济统计、战斗统计等数据。这不仅能留下玩家的足迹,还激发着玩家的竞争意识,促进玩家间更多的互动。

捐赠和特权:提供捐赠选项,让玩家可以支持服务器的运营与发展,并提供一些额外的特权或奖励作为回报。

客服支持:设置一个联系方式,使玩家能够与服务器管理员或客服团队取得联系,寻求技术支持或处理问题。

图片和视频展示:通过美观的图片和吸引人的游戏视频展示,向玩家呈现服务器的独特魅力,吸引更多玩家加入。

登录系统:如果需要,可设置用户登录系统,以便玩家可以注册账户、管理个人资料、上传自己的皮肤等。

服务器数据检测:如果可以,官网可以提供一个服务器数据检测窗口,用于检测服务器人数、延迟等数据。

不过搭建一个服务器官网不是个轻松活,你需要具备计算机编程和web前端知识,不然很难打造出合适的官网。不过幸运的是,一些资源站内会开源一些MC服务器官网的模板(比如IEcraft),或者你可以利用网络资源学习搭建一个网站(毕竟技多不压身,多学个技能也是很不错的)。

八.充值

充值是游戏常用的盈利方式,玩家可以通过充值购买游戏内虚拟货币或者直接获取游戏内物品和服务。充值系统允许玩家使用真实货币进行充值,并将其转换成游戏内的虚拟货币或者直接购买游戏内物品等相关内容。

在游戏充值系统中,有几个关键的注意事项需要特别关注,并向玩家提供以下信息:

1.安全性: 强调游戏充值系统的安全性措施,保护玩家的个人和支付信息。告知玩家仅使用官方渠道进行充值,并避免使用未经授权的第三方平台或来源进行付款。

2.充值政策: 向玩家明确介绍充值规则、限制、退款政策以及虚拟货币的使用范围。确保玩家清楚了解充值行为的相应规定和权益。

3.价值传达: 清晰地说明虚拟货币或购买的游戏物品的真实价值,避免误导或混淆玩家。确保虚拟物品的特性和效果清楚可见,不涉及任何模糊或欺诈的描述。

4.费用透明: 清楚标示相关费用和成本,包括充值金额、手续费和汇率转换等。提醒玩家虚拟货币与实际货币之间的兑换比例和可能存在的额外费用。

5.充值历史记录: 提醒玩家保存充值收据、充值历史记录和交易详情。这有助于玩家在出现争议或问题时提供证据,并且能够及时与客服部门进行沟通和解决。

6.法律合规: 强调遵守相关法律法规和消费者权益保护法规定。确保充值系统符合适用的法律要求,包括数据隐私保护和未成年人保护。

7.虚拟货币管理: 告知玩家虚拟货币的特性和用途,并提醒他们不要将虚拟货币视为实际货币等价物。

推荐充值插件:GeekRewardPlusMinePayAifadianPayCYpay

九.优化

当你服务器装载了越来越多的插件和地图后,性能会有明显的下降。而优化对于提升游戏体验和提供流畅的游戏环境非常重要。优化要从硬件和软件两个方面入手。

硬件方面,你可以考虑服务器的中央处理器(CPU)、系统内存(RAM)、硬盘类型(选择更好的固态硬盘SSD)、散热(避免因过热而导致性能下降或硬件损坏)等方面;软件部分,你可以为服务器架构性能监控系统,通过使用监控工具来跟踪服务器的负载、内存使用情况、网络延迟等指标,可以及时发现潜在问题并进行调整和优化。

同时你可以为你服务器加装一些优化和性能检测插件,比如ClearEntity(定期清理掉落物和实体)、Spark(服务器性能监测)、Chunky(地图区块预生成)等。你也可以重新配置服务器根目录下的配置文件。

具体优化步骤:

1.服务器核心选择

服务器核心的版本及种类也会跟服务器性能挂钩。你选择的服务器核心软件可能会在性能和 API 方面产生巨大差异。当前有多种可行的流行服务器核心,但也有一些核心由于各种原因不那么推荐。

首先,你应该优先选择较高版本服务器,而不是1.7.10, 1.8.8, 1.12.2这些扁平化之前版本。

对于核心种类首选推荐:

Paper – 最流行的服务器软件,不仅提高了核心性能,同时还修复了游戏玩法和机制的不一致的问题。

Pufferfish – 是能进一步提高服务器性能的Paper分叉。

Purpur – Pufferfish 分叉专注于功能和定制自由。

你当然可以尝试:

Mohist/CatServer – 基于Paper/Spigot加上Forge,可以兼容模组和插件,但是目前缺乏高版本兼容性以及其本身就存在一定数量bug。

Bukkit/CraftBukkit/Spigot – 与其他服务端相比,在性能方面非常过时,但也可以使用。

不过Spigot 和 Paper 提供的设置可以大大提高性能。接下来会讲解了在不影响游戏性的情况下充分利用服务器的设置,以减少卡顿/提升人数上限/提升TPS。

  • 启动脚本的设置:

在服务器启动脚本中,也有一些可用于优化性能的参数可以配置。普通的启动脚本代码为 java -Xms2G -Xmx2G -jar paper.jar –nogui ,可以通过更改-Xms和-Xmx参数中的数字来设置 RAM 的量。–nogui 禁用 Vanilla 的 GUI,因此在使用命令行时不会出现双重界面。

高阶的启动脚本:更方便调整内存大小,可以指定java位置,适用于一个主机多个java版本。


@ECHO OFF

TITLE 服务端

::----设置开服使用内存

SET RAM=10000M

::----设置开服核心名字

SET SERVER=CATSERVER-5D66F2E-UNIVERSAL.JAR

::----设置开服优化参数

 SET SETCANSHU=-XX:+USEG1GC -SERVER -XX:+USEFASTACCESSORMETHODS -XX:+OPTIMIZESTRINGCONCAT -XX:+AGGRESSIVEOPTS -XX:MAXGCPAUSEMILLIS=10 -XX:+USESTRINGDEDUPLICATION

CLS

COLOR A0

ECHO  - - - - - -

ECHO  当前时间:%DATE% %TM1%点%TM2%分

@ECHO. -----------------------------------------------------------------

@ECHO.                         MINECRAFT服务器

@ECHO.                     服务器即将开启,请等待

@ECHO.

@ECHO.           注意:关闭服务器前请在后台输入STOP保存玩家数据

@ECHO.                      否则可能会出现回档情况

@ECHO.

@ECHO. -----------------------------------------------------------------

CHOICE /T 2 /D Y /N >NUL

:RESTART

CLS

COLOR 79

@ECHO.- 预备开服前工作准备...

CHOICE /T 2 /D Y /N >NUL

@ECHO.

@ECHO.- [ 设置开服内存:%MONEY% ]

CHOICE /T 2 /D Y /N >NUL

@ECHO.

@ECHO.- [ 设置开服核心为:%SERVER% ]

CHOICE /T 2 /D Y /N >NUL

@ECHO.

@ECHO.- [ 设置开服优化参数:%SETCANSHU% ]

CHOICE /T 2 /D Y /N >NUL

@ECHO.

@ECHO.- 预备开服工作完毕,准备启动服务器,开服过程请耐心等待...

@ECHO.

@ECHO. ---------------------------------------------------------------

@ECHO.

COLOR 3F

CHOICE /T 2 /D Y /N >NUL

::----设置JAVA路径

 "C:\PROGRAM FILES\JAVA\JRE1.8.0_261\BIN\JAVA.EXE" -XMS%RAM% -XMX%RAM% %SETCANSHU% -JAR %SERVER% NOGUI

COLOR 4F

@ECHO.

@ECHO. ----------------------------------------------------------

@ECHO.╋ 服务器已经关闭,如需重启请按任意键,不需要请直接关掉本框 ╋

@ECHO. ----------------------------------------------------------

@ECHO.

PAUSE

GOTO RESTART

注:设置 Xms 和 Xmx 值时,如果你的主机有 8000M 内存,请不要直接填写 8000M。建议将你的 Xmx/Xms 减少大约1000-1500M以避免内存不足影响你的服务器。这也为操作系统留出了使用内存的空间。

如果你拥有并使用超过 12GB 的内存,请调整以下内容(本文不赘述参数具体含义,若需了解请查阅相关资料):

-XX:G1NewSizePercent=40
-XX:G1MaxNewSizePercent=50
-XX:G1HeapRegionSize=16M
-XX:G1ReservePercent=15
-XX:InitiatingHeapOccupancyPercent=20

  • 服务器配置文件内的参数配置

【BUKKIT.YML】

spawn-limits

默认值:monsters:70, animals:10, water-animals:15, water-ambient:20, ambient:15

推荐值:monsters:50, animals:8, water-animals:7, water-ambient:10, ambient:1

性能影响:重

 不过如果monsters的值变少,就意味着会有更少的怪物。然而,我们也不能设置得太低,否则会影响刷怪速度。在某些服务器上,我们可能需要关注怪物生成的速度。

chunk-gc.period-in-ticks

默认值: 600

推荐值: 400

性能影响: 中等

这样可以更快地卸载区块。更少的tick意味着更少的 TPS 消耗。

ticks-per:

默认值:monster-spawns:1,water-spawns:1,water-ambient-spawns:1,ambient-spawns:1

推荐值:monster-spawns:5,water-spawns:11,water-ambient-spawns:21,ambient-spawns:31

性能影响:中等

限制小怪的公式是[playercount] * [limit],其中“玩家数”是服务器上的当前玩家数量。从逻辑上讲,数字越小,你看到的小怪就越少。除此之外,per-player-mob-spawn也会进一步限制怪物的生成,确保它们在玩家之间平均分布。但在某些游戏模式中,自然生成的怪物是游戏玩法的重要组成部分。如果你适当地调整mob-spawn-range参数,你可以减少生成的范围至20或更少。将mob-spawn-range设置较低会给每个玩家周围带来更多的小怪物。如果你正在使用Paper作为服务器软件,你还可以在paper-world配置中为每个世界设置生物限制。

autosave

默认值:6000 (通常)

推荐值:6000

性能影响: N/A

这表示启用了 Bukkit 的世界保存和运行频率(以tick计)。默认情况下它应该是 6000,不过有时也可能是 0(禁用)。

注意:如果你正在使用服务器或插件进行世界保存,请立即停止!这仅仅是一个已经过时的/save-all命令。

【SPIGOT.YML】

save-user-cache-on-stop-only

默认值: false

推荐值: true

性能影响:中等

保存用户数据的方式,false为持续保存,true为只在服务器停止/重启时保存。注意:进行定期备份以避免在罕见的致命崩溃事件中丢失数据。

entity-activation-range

默认值: animals:32, monsters:32, raiders: 48, misc:16

推荐值:animals:16, monsters:24, raiders: 48, misc:8

性能影响:中等

这是用于设置实体激活范围的选项。这个范围指定了玩家与实体之间的距离,在超出这个距离后,实体将进入”非活跃”状态。换句话说,当玩家离开一段距离后,实体将被冻结,不再执行动作或计算。通过调整entity-activation-range的值,你可以控制实体在玩家附近的活跃范围,从而对服务器性能进行优化。

tick-inactive-villagers

默认值: true

推荐值: false

性能影响: 中等

   用于控制非活跃村民的更新频率。在游戏中,当玩家离开一定范围时,附近的村民将进入非活跃状态,即停止进行更新和计算。通过调整tick-inactive-villagers的值,你可以设置非活跃村民更新的间隔时间(以游戏刻为单位)。较大的值会减少非活跃村民的更新频率,从而减轻服务器负担,但可能会导致村民在玩家回到附近时出现稍微的延迟。相反,较小的值会增加非活跃村民的更新频率,但可能会对服务器性能产生更大的压力。

merge-radius

默认值: item:2.5, exp:3.0

推荐值: item:4.0, exp:6.0

性能影响: 中等

这是用于设置方块合并半径。当方块被破坏或掉落时,游戏会尝试自动合并附近的相同类型的方块,以减少服务器上的方块数量和资源消耗。merge-radius定义了方块合并的范围,即在多大半径内的相同方块将会被合并。较小的值会导致更频繁但局部的方块合并,而较大的值则会较少但涉及更广阔的地区进行方块合并。根据服务器的性能和需求,你可以调整merge-radius来平衡块的合并和服务器性能之间的关系。

【SERVER.PROPERTIES】

simulation-distance

推荐值: 4-8

性能影响: 中

用于设置模拟距离(Simulation Distance)的选项。模拟距离表示玩家周围方块的加载范围。

当玩家在游戏中移动时,服务器会加载和模拟一定范围内的方块,并处理与这些方块相关的事件和行为。通过调整simulation-distance的值,你可以控制服务器加载和模拟的方块范围。较小的值意味着服务器只会加载玩家非常接近的方块,从而减少服务器的负荷。而较大的值将导致服务器加载更远的方块,但可能会对服务器性能产生更大的压力。

根据服务器的硬件性能和网络条件,你可以适当调整simulation-distance来平衡游戏体验和服务器性能之间的关系。

view-distance

默认值: 10

推荐值: 4-8

性能影响: 重

用于设置视野距离(View Distance)的选项。视野距离指定了玩家周围可见的方块范围。

当玩家在游戏中探索时,服务器会加载并发送一定范围内的方块信息给客户端,以供玩家观察和交互。通过调整view-distance的值,你可以控制这个可见范围的大小。较大的视野距离意味着玩家可以看到更远处的方块,但也会增加服务器的负荷和网络流量。相反,较小的视野距离会限制玩家的视野范围,但可以减轻服务器的压力。

根据服务器的硬件性能、玩家数量和网络条件,你可以适当调整view-distance来平衡游戏体验和服务器性能之间的关系。需要注意的是,视野距离的调整可能会对游戏体验产生影响,因为玩家将能够看到更少或更多的环境细节。

【PER-WORLD-SETTINGS】

Spigot/Paper的一个功能,有超过80%的服主并不知道。你可以选择开启一些设定只在指定世界生效。

world-settings:

      default:

         keep-spawn-loaded: true

          auto-save-interval: 6000

          anti-xray:

              enabled: true

     world_nether:

         keep-spawn-loaded: false

         auto-save-interval: 9020

         anti-xray:

             enabled: false

     world_the_end:

         keep-spawn-loaded: false

         false auto-save-interval: 11050

         anti-xray:

             enabled: false

默认(default)是优先级较低的全局设置。例如,我想在地狱世界(world_nether),取消出生点强加载(keep-spawn-loaded),就可以设置为false,以节省一个世界对服务器造成额外的资源利用。

更多内容请查阅:服务器优化指南

附1:服务端性能检测(内部指令)

MSPT:

Paper 提供了一个/mspt命令,该命令将告诉你服务器计算最近的回应所花费的时间。如果你看到的第一个和第二个值低于 50,那么恭喜!你的服务器没有滞后!如果第三个值超过 50,则意味着至少有 1 个刻度需要更长的时间。这是完全正常的,并且不时发生,所以不要惊慌。

Timings:

查看服务器滞后时可能发生的情况的好方法是利用Timings。Timings 是一种工具,可让你准确了解哪些任务花费的时间最长。这是最基本的故障排除工具,当你寻求有关延迟的帮助时,你很可能会需要这个。

要获取服务器的时间,你需要先执行/timings on,然后稍等片刻后执行/timings paste命令并单击你提供的链接。如果你不知道这个链接的内容,请寻求专业人士帮助。

附2:性能测量名词:

TPS – 每秒游戏刻数

TPS 代表TicksPerSecond,表示每秒钟服务器处理游戏逻辑的次数。服务器以20 TPS的速度来执行所有任务。这些任务包括怪物移动、作物生长和玩家与方块交互等。当TPS低于20时,意味着服务器运行有延迟,可能需要跳过一些任务以确保重要任务按时执行。明显的TPS下降通常会引起一些小问题,比如怪物会间歇性卡顿,方块可能无法正常挖掘等。而严重的情况可能导致整个服务器出现停滞甚至崩溃的情况。

TPS 参考评级:

20.0 = 完美无瑕 – 干得好。

19.95-19.99 = 很好 – 不明显的 TPS 损失。大多数服务器都在这范围。

18.5-19.94 = 一般 – 可能有一些卡顿,但不会破坏游戏。

16.0-18.4 = 差 – 如果这是你的平均水平,你肯定需要解决这个问题。

<16.0 = 无法玩…

Ping – 连接延迟

Ping(又称延迟)反映了数据在客户端和服务器主机之间处理和传输所需的时间(以毫秒为单位)。客户端与服务器的地理距离越远,此传输可能需要的时间就越长。对 ping 的其他常见影响是拥塞或连接缓慢。

作为服务器服主,你应该将服务器托管在你更喜欢拥有玩家基础的区域或能够接纳广泛玩家的区域。

示例:如果你的玩家集中在广东省,你应该组一个在广东中部例如广州服务器,深圳客户端到广州云服务器参考ping值为7ms;如果你的玩家分布在全国,可以考虑上海/南京/北京等中原城市的服务器。

Ping 评分:

1-90 = 太棒了!

91-179 = 好 – 在 PvP 中可能有轻微的劣势。

180-299 = 差 – 与方块/玩家/实体互动时经常出现延迟。

300-499 = 差 – 几乎无法游玩。

500+ = 假设你的带宽稳定,是时候找到离你更近的服务器了。

FPS – 客户端延迟

不要将 TPS 与FPS混淆(帧数秒)。FPS 反映了客户端处理和显示游戏/服务器想要渲染的内容的能力。FPS 是 100% 由客户端影响,与服务器性能无关。

服务器可以帮助 FPS 做的唯一一件事就是削减服务器功能,以便上古 PC 可以跟上,但即使这样也不太可能对帧数产生很大的差别。建议不要减少服务器功能,而是向玩家推荐一个名为推荐值ifine的流行客户端模块,当然升级电脑才是治本方法。

FPS 评级

注意:这些FPS假设你在非图形密集位置的平均水平。

60+ = 完美 – 任何超过 60 FPS 对 Minecraft 来说都是多余的。考虑将 FPS 限制在 80 以下,以避免对硬件造成不必要的压力。

40-59= 很好 – 应该没有问题。

25-39 = 好 – 偶尔呈现延迟。输入图形密集区域时会出现问题。

15-24 = 差 – 不断出现渲染故障。可能在图形密集区域冻结,关闭光影。

1-10 = 错误 – 客户端应显着减少图形设置,关闭光影。

后记

本教程的编写过程中,我经历了许多学习和探索的时刻。回顾整个过程,我想分享一些自己的感受和总结。

对于很多人而言,开始搭建和管理自己的我的世界服务器可能是一项难题。所以我决定将自己的知识和经验分享给大家,并希望能够帮助他们克服挑战,顺利创建属于自己的服务器。

通过编写这篇教程,我更加深入地了解了我的世界服务器的各个方面。从选择适合的主机和插件,到配置和管理服务器,我努力提供尽可能详细和清晰的指导。在编写教程的过程中,我不仅从自己的经验中获益良多,还通过查阅相关文档和与其他玩家交流获取了更多知识。这个过程使我对我的世界服务器有了更深入的了解,并提高了自己的技能。

我希望这篇教程能够对那些想要创建自己我的世界服务器的人提供有益的指导和启发。如果你正读着这篇后记,那么说明你已经完成了整个教程。我真诚地希望这个教程能够为你带来帮助,并使你能够成功建立并管理一台出色的我的世界服务器。

最后,我要感谢所有阅读和使用这篇教程的读者。你们的支持和反馈是我前进和改进的动力。如果你对这篇教程有任何意见或建议,欢迎随时与我分享。祝愿大家在自己的我的世界服务器上玩得开心,并享受到创造和探索的乐趣!

再次感谢你们的阅读和支持。

附录1

这篇附录,我将会讲解几个使用插件的案例(会持续更新)。你可以学到如何通过多个插件配合,以实现某功能。事先说明,我的方法不一定是最完美的,仅作为参考思路。

案例一:构建VIP系统

构建VIP(Very Important Person)系统的主要思路是:利用权限组插件及相关指令为有成为VIP条件的玩家添加权限或将其添加进某权限组。

下面给出个例子:

PlayerParticles插件可以让玩家创建自定义粒子特效组,那么我们的任务就是将此功能只开放给VIP玩家。此例中使用的权限组插件为LuckPerms.

首先我们得先了解两款插件使用方法,重点在于PlayerParticles的权限节点和LuckPerms的指令。

服务器插件加载完毕后,先利用权限组插件创建一个“VIP”(子级)组(父级组为默认组,配置好了普通玩家的权限节点),然后将PlayerParticles的权限节点(注意别将管理员权限节点加进去)加到此组内(如下图),重新加载插件后,权限生效。

生效后,普通玩家就无法使用PlayerParticles的功能,而位于“VIP”组的玩家才可以使用。当玩家拥有成为VIP的条件时,你可以灵活利用权限组的添加命令,将此玩家添加进“VIP”组内。

你也可以继续添加其它插件的权限,为VIP玩家提供一些额外的奖励和福利,以增强他们的游戏体验。这可以包括VIP专属的特殊装备、称号、头衔、颜色等。

案例二:创建VIP开通系统

创建VIP开通系统的基本思路:利用相关指令和可交互以触发指令的功能(如利用NPC触发、菜单触发等),构建可操作的VIP开通系统。

下面给个例子:利用一定数量的点券,让玩家开通30天VIP。这里利用菜单触发,使用到的插件是CommandPanels,因为此菜单插件有个has节功能,利用此功能,可以实现当玩家点券不足时无法开通的功能。

以下是示例代码,相关地方做了注释。在看下面的代码前,你需要仔细阅读CommandPanels的说明文档。(“#”后面为注释部分)


      '11':                                           # 编号
        material: nether star                         # 材质
        name: '&b&l购买VIP月卡 &c&l30天 (黄金券不足)'   # 名称
        lore:                                         # 标签
        - '&7称号 &6&l[大会员]%player_name%'
        - '&c权限列表:'
        - '&c(略)'
        - '&c价格: 300黄金券'
        commands:                                     # 点击时触发的指令
        - cpc
        - msg= &e&l>> &c&l黄金券不足!
        has0:                                         # 创建has节
          value0: '%playerpoints_points% ISGREATER'   # has节变量
          compare0: 300                               # has节变量的值
          material: nether star
          name: '&b&l购买VIP月卡 &c&l30天'
          lore:
          - '&7称号 &6&l[大会员]%player_name%'
          - '&c权限列表:'
          - '&c(略)'
          - '&c价格: 300黄金券'
          commands:
          - cpc
          - console= points take %player_name% 300                 # 将玩家的300点券拿走
          - console= lp user %player_uuid% parent removetemp vip   # 将玩家移出VIP权限组
          - console= lp user %player_uuid% parent addtemp vip 30d  # 将玩家添加进VIP权限组,持续时间为30天
          - title= %player_name% 10 30 10 &3&l购买成功/n/&a&l已为你开通30天VIP
        stack: 1 

(以上示例代码你可以随意复制和修改。在完整的复制到你的菜单配置文件前,请注意每行代码的缩进)

通过上面的代码,你可以利用菜单创建个VIP开通系统。当玩家点券不足300时,has节的内容就不会显示(包括名字、标签、材质、指令等),只有当玩家有足够的点券时,has节的内容才会触发。这是因为我们在此has节定义了一个比较对象和方式(value),并利用占位符“%playerpoints_points%”表示玩家的点券数量,后面又将比较标准值(compare)定义为“300”。也就是说,has节功能最核心的地方就在“value”和“compare”。

你可以通过修改“compare”来调整触发的点券数量,如果你的兑换货币不是点券,你可以利用其它货币插件和系统的占位符,将“value”的参数替换。其实不光VIP开通,你还可以利用has节来创建商店,方法思路和VIP开通系统一模一样。

案例三:点歌菜单

有些服务器有点歌的功能,这是利用了类似于ZMusic的点歌插件实现的(具体可以查阅ZMusic的说明文档)。但很多时候服务器只为玩家提供了点歌插件的帮助指令,这使得点歌成了件麻烦事。所以为了解决这个麻烦,我们可以制作个点歌菜单,让点歌更快捷更方便。

此例中我们使用的点歌插件为ZMusic,菜单插件为TrMenu和CommandPanels。还是那句话,在看代码前,请阅读相关插件的说明文档。

TrMenu:我们可以利用TrMenu的玩家输入功能(只需要把相关指令参数替换为 {meta:input}。如私人点歌指令为zm music 163 <歌名>,我们可以将“<歌名>”换成“{meta:input}”)。完整代码如下:


Title:
- '&c&l点歌菜单'
TITLE-UPDATE: 40
Shape:
  - '#########'
  - '#`私人点歌`#`全服点歌`#`搜索歌曲`#`导入歌单`#'
  - '####`红石音乐歌单`####'
  - '#`停止播放`#`循环播放`#`网易云热评`#`强制播放`#'
  - '#########'

Events:
  Open:
   - 'sound: BLOCK_NOTE_BLOCK_PLING-0.5-2'
  Close:
   - 'sound: BLOCK_CHEST_CLOSE-0.5-2'
Options:
  Hide-Player-Inventory: true
  Min-Click-Delay: 200
BUTTONS:
  '#':
    display:
      mats: BLACK_STAINED_GLASS_PANE
      name:
        - '&e&l>>>&f&l分割板&e&l<<<'
      lore:
      - '&a如果点完歌后只显示了歌词并且已经装了前置但是并没有声音,'
      - '&a那么请多尝试几次。若仍然无声音,请在QQ群内反馈!'
      - '-------------------------------------'
      - '&7搜索源对应:'
      - ' &b163 &a- &b网易云'
      - ' &bkugou &a- &b酷狗音乐'
      - ' &bkuwo &a- &b酷我音乐(暂未开放)'
      - ' &bbilibili &a- &b哔哩哔哩音乐(暂未开放)'
      - ' &bqq &a- &bQQ音乐(已下架)'
      - ' ------------------------------------'
      - ' &c备用线路:请输入指令&e/music help&c查看更多消息'
      - ' &c或者直接输入&e/music search [歌名] [作者]&c来点歌'
      - ' ------------------------------------'
      - ' &e感谢&a&nhttps://music.eqmemory.cn&e提供网易云API服务!'
    actions:
      all: 
        - ['sound: BLOCK_NOTE_BLOCK_PLING-1-2']
  '全服点歌':
    display:
      material: head:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNGE2MzdlYjA5ZWFhZTAyN2U1OTc1MWUyZDQ5OWFjNjg2MWExNzc3ZTlhYmEzZmUxOGZkOTFmN2QxNDFkIn19fQ==
      name: '&f&l&m[&a&l全服点歌&f&l&m]'
      lore:
      - ''
      - '&b&l输入[歌名] [作者] 歌名必填 作者选填'
      - '&f[&a消耗500金币&f]'
      - '&f[&a全服点歌 其他玩家&f]'
      - '&f[&a点击公告音乐可听&f]'
    actions:
      all:
        - close
        - catcher:
            name:
              type: chat
              start: 
                - 'title: &b&l输入[歌名] [作者] 歌名必填 作者选填 20 60 20'
                - 'tell: &8'
                - 'tell: &7输入后以 &f回车键 &7结束'
                - 'tell: &7取消点歌输入 &fCancel &7结束'
                - 'tell: &7默认音源&b网易云音乐'
                - 'tell: &8'
              cancel: 'tell: &7已取消操作'
              end:
                - 'player: zm music 163 {meta:input}'
  '私人点歌':
    display:
      material: head:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWU2ZmRkYWFhY2VkNDQyZmY4NDFmZDU5NmUzYzk3N2JiMmNkZjkyMGVmYmMxOGFkMWU5YjdhNTU5Y2E5YzkifX19
      name: '&f&l&m[&a&l私人点歌&f&l&m]'
      lore:
      - ''
      - '&b&l输入[歌名] [作者] 歌名必填 作者选填'
      - '&f[&a免费播放音乐&f]'
      - '&f[&a仅自己可听&f]'
    actions:
      ALL:
        - close
        - catcher:
            name:
              type: chat
              start: 
                - 'title: &b&l输入[歌名] [作者] 歌名必填 作者选填 20 60 20'
                - 'tell: &8'
                - 'tell: &7输入后以 &f回车键 &7结束'
                - 'tell: &7取消点歌输入 &fCancel &7结束'
                - 'tell: &7默认音源&b网易云音乐'
                - 'tell: &8'
              cancel: 'tell: &7已取消操作'
              end:
                - 'op: zm play 163 {meta:input}'
  '搜索歌曲':
    display:
      material: head:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWQ2M2I0Y2FkN2YzNzRjMTJiZWNjMWFmNDE3YmFjNjg5NzFlNzljMWQ0NzNjOWNjY2M2YWJmZjI3NzJlIn19fQ==
      name: '&f&l&m[&a&l搜索歌曲&f&l&m]'
      lore:
      - ''
      - '&b/zm search [搜索源] [歌名] [演唱]'
      - '&f[&a通过歌名搜索一个音乐&f]'
      - '&f[&a返回十首音乐的列表&f]'
    actions:
      all:
        - 'player: zm help search'
        - close
  '导入歌单':
    display:
      material: head:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzM4MmNmNjk3YjRjN2Q1ZTQ3ZWY4MjIyMzRhNWNiZGZlMWNjNDRmYTY1NWQ3MjcxNWM2OTNkZjU0MjU1N2IifX19
      name: '&f&l&m[&a&l查看歌单&f&l&m]'
      lore:
      - ''
      - '&b/zm playlist [平台] [子命令]'
      - '&f[&a支持QQ/网易云歌单&f]'
      - '&f[&a如果平台为&btype&a则为设置歌单播放方式&f]'
      - '&f[&f目前支持&f]'
      - '&f[&bnormal - 顺序播放&f]'
      - '&f[&bloop - 循环播放&f]'
      - '&f[&brandom - 随机播放&f]'
      - ''
      - '&b左键查看-已保存网易云音乐歌单'
      - '&b右键查看-已保存QQ音乐歌单'
    actions:
      left:
        - 'player: zm playlist 163 list'
        - close
      right:
        - 'player: zm playlist qq list'
        - close
  '循环播放':
    display:
      material: head:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjUwMzdiMmU3NGZiNjI2Njk2YWM4MTI2YzE0NDY4OWY1MTgyODc4ZjA5MzEyMzhhM2MxYWZkZmE5YWEifX19
      name: '&f&l&m[&a&l循环播放&f&l&m]'
      lore:
      - ''
      - '&b&a切换歌曲的循环状态'
      - '&f[&4开启/关闭歌曲循环&f]'
    actions:
      all: 
        - 'player: zm loop'
        - close
  '停止播放':
    display:
      material: head:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmViMWZhYjA2Njk2ZDZhZjc2ZGY5MjYzNzJhYzc4ZGQ5NjdjODQ5YzUzZGMxM2Y5MGUwNTc4MjVkNThlMyJ9fX0=

      name: '&f&l&m[&a&l停止播放&f&l&m]'
      lore:
      - ''
      - '&b&a关闭正在播放的歌曲'
      - '&f[&4强制播放也可关闭&f]'
    actions:
      all: 
        - 'player: zm stop'
        - close
  '网易云热评':
    display:
      material: head:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzhhNjczNWMyMjc1YTg3ZDhhMzg5MWIwZmYzYTRhNmU3MGQ0OTUzMjM0NzBhMWQ0ZmJkZWU4MDU1MDYzMDJjYiJ9fX0=
      name: '&f&l&m[&a&l网易云热评&f&l&m]'
      lore:
      - ''
      - '&b/zm 163hot [歌名]'
      - '&f[&a获取网易云音乐热评前三&f]'
    actions:
      all: 
        - 'player: zm 163hot'
        - close
  '强制播放':
    display:
      material: head:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNGIzMWU4MWU0NzQ4ZGZiZGE5OTA0ZmQxY2Y1OTIwMjllZjEzYzcyYzU2MDc4YjNiYWIyMDNjNDg5MDQ2MDViNyJ9fX0=
      name: '&f&l&m[&e&l强制播放&f&l&m]'
      lore:
      - ''
      - '&b/zm playall [歌名]'
      - '&f[&4强制播放歌曲&f]'
      - '&f[&4此权限未开放给玩家&f]'
    actions:
      all: 
        - 'tell: &c你的权限不足哦!请不要点我!'
        - close

CommandPanels:与TrMenu一样,CommandPanels也有个玩家输入功能。利用“player-input”参数,创建玩家输入,指令部分与TrMenu同理,只不过不再是{meta:input},而是%cp-player-input%。完整代码如下:


panels:
  music:
    perm: default
    rows: 5
    title: '&e&l点歌菜单'
    sound-on-open: BLOCK_NOTE_BLOCK_CHIME
    commands-on-open:
    - open= example_middle_one {Middle}
    - open= example_bottom {Bottom}
    empty: PINK_STAINED_GLASS_PANE
    item:
      '10':
        material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNGE2MzdlYjA5ZWFhZTAyN2U1OTc1MWUyZDQ5OWFjNjg2MWExNzc3ZTlhYmEzZmUxOGZkOTFmN2QxNDFkIn19fQ==
        name: '&f&l&m[&a&l全服点歌&f&l&m]'
        lore:
        - ''
        - '&b&l输入[歌名] [作者] 歌名必填 作者选填'
        - '&f[&a消耗500金币&f]'
        - '&f[&a全服点歌 其他玩家&f]'
        - '&f[&a点击公告音乐可听&f]'
        player-input:
        - "zm music 163 %cp-player-input%"
        commands:
        - title= %player_name% 20 20 20 &b&l输入[歌名] [作者] /n/歌名必填 作者选填
        - msg= &b&l输入[歌名] [作者] 歌名必填 作者选填
        - msg= &8
        - msg= &7输入后以 &f回车键 &7结束
        - msg= &7取消点歌输入 &fCancel &7结束
        - msg= &7默认音源&b网易云音乐
        - msg= &8
        - cpc
        stack: 1
      '12':
        material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWU2ZmRkYWFhY2VkNDQyZmY4NDFmZDU5NmUzYzk3N2JiMmNkZjkyMGVmYmMxOGFkMWU5YjdhNTU5Y2E5YzkifX19
        name: '&f&l&m[&a&l私人点歌&f&l&m]'
        lore:
        - ''
        - '&b&l输入[歌名] [作者] 歌名必填 作者选填'
        - '&f[&a免费播放音乐&f]'
        - '&f[&a仅自己可听&f]'
        player-input:
        - "zm play 163 %cp-player-input%"
        commands:
        - title= %player_name% 20 20 20 &b&l输入[歌名] [作者] /n/歌名必填 作者选填
        - msg= &b&l输入[歌名] [作者] 歌名必填 作者选填
        - msg= &8
        - msg= &7输入后以 &f回车键 &7结束
        - msg= &7取消点歌输入 &fCancel &7结束
        - msg= &7默认音源&b网易云音乐
        - msg= &8
        - cpc
        stack: 1
      '14':
        material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWQ2M2I0Y2FkN2YzNzRjMTJiZWNjMWFmNDE3YmFjNjg5NzFlNzljMWQ0NzNjOWNjY2M2YWJmZjI3NzJlIn19fQ==
        name: '&f&l&m[&a&l搜索歌曲&f&l&m]'
        lore:
        - ''
        - '&b/zm search [搜索源] [歌名] [演唱]'
        - '&f[&a通过歌名搜索一个音乐&f]'
        - '&f[&a返回十首音乐的列表&f]'
        commands:
        - zm help search
        - cpc
        stack: 1
      '16':
        material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzM4MmNmNjk3YjRjN2Q1ZTQ3ZWY4MjIyMzRhNWNiZGZlMWNjNDRmYTY1NWQ3MjcxNWM2OTNkZjU0MjU1N2IifX19
        name: '&f&l&m[&a&l查看歌单&f&l&m]'
        lore:
        - ''
        - '&b/zm playlist [平台] [子命令]'
        - '&f[&a支持网易云歌单&f]'
        - '&f[&f目前支持&f]'
        - '&f[&bnormal - 顺序播放&f]'
        - '&f[&bloop - 循环播放&f]'
        - '&f[&brandom - 随机播放&f]'
        - ''
        - '&b点击查看-已保存网易云音乐歌单'
        commands:
        - cpc
        - zm playlist 163 list
        stack: 1
      '28':
        material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjUwMzdiMmU3NGZiNjI2Njk2YWM4MTI2YzE0NDY4OWY1MTgyODc4ZjA5MzEyMzhhM2MxYWZkZmE5YWEifX19
        name: '&f&l&m[&a&l循环播放&f&l&m]'
        lore:
        - ''
        - '&b&a切换歌曲的循环状态'
        - '&f[&4开启/关闭歌曲循环&f]'
        commands:
        - zm loop
        - cpc
        stack: 1
      '30':
        material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmViMWZhYjA2Njk2ZDZhZjc2ZGY5MjYzNzJhYzc4ZGQ5NjdjODQ5YzUzZGMxM2Y5MGUwNTc4MjVkNThlMyJ9fX0=
        name: '&f&l&m[&a&l停止播放&f&l&m]'
        lore:
        - ''
        - '&b&a关闭正在播放的歌曲'
        - '&f[&4强制播放也可关闭&f]'
        commands:
        - zm stop
        - cpc
        stack: 1
      '32':
        material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNGIzMWU4MWU0NzQ4ZGZiZGE5OTA0ZmQxY2Y1OTIwMjllZjEzYzcyYzU2MDc4YjNiYWIyMDNjNDg5MDQ2MDViNyJ9fX0=
        name: '&f&l&m[&a&l网易云热评&f&l&m]'
        lore:
        - ''
        - '&b/zm 163hot [歌名]'
        - '&f[&a获取网易云音乐热评前三&f]'
        commands:
        - zm 163hot
        - cpc
        stack: 1
      '34':
        material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzhhNjczNWMyMjc1YTg3ZDhhMzg5MWIwZmYzYTRhNmU3MGQ0OTUzMjM0NzBhMWQ0ZmJkZWU4MDU1MDYzMDJjYiJ9fX0=
        name: '&f&l&m[&e&l强制播放&f&l&m]'
        lore:
        - ''
        - '&b/zm playall [歌名]'
        - '&f[&4强制播放歌曲&f]'
        - '&f[&4此权限未开放给玩家&f]'
        commands:
        - msg= &c你的权限不足哦!请不要点我!
        - cpc
        stack: 1
      '22':
        material: enchanted_book
        name: '&e&l>>>&f&l特别说明&e&l<<<'
        lore:
        - '&a如果点完歌后只显示了歌词并且已经装了前置但是并没有声音,'
        - '&a那么请多尝试几次。若仍然无声音,请在QQ群内反馈!'
        - '-------------------------------------'
        - '&7搜索源对应:'
        - ' &b163 &a- &b网易云(推荐)'
        - ' &bkuwo &a- &b酷我音乐(暂未开放)'
        - ' &bbilibili &a- &b哔哩哔哩音乐(暂未开放)'
        - ' &bqq &a- &bQQ音乐(已下架)'
        - '------------------------------------'
        - '&e本服网易云API服务由&a&lEYPA API&e提供'
        enchanted: true
        commands:
        - msg= &a&l[&a&l点歌菜单&a&l] &b&l>> &e&lMade by &6&lGoldenApplePie


以上就是利用两种菜单插件创建点歌菜单的例子。利用菜单插件的输入参数功能不仅可以创建方便快捷的点歌菜单,还可以实现兑换码输入等需要玩家自定义参数的功能。

附录2

这篇附录,我来分享一些我使用过的插件,也许这些插件中就有你需要的。记住,就算插件的数量有限,但用它们组合出来的玩法的无限的。(插件来源:MC AdminIEcraftBukkitSpigot等)

(注:插件分享会持续更新)

  1. SheepQuest:抢羊大战,是个很有意思的玩法。玩法简介:玩家会在竞技场内被分为四个队伍,竞技场的中心点会不间断的生成羊,玩家需要用特殊工具捕捉羊并将其安全带回队伍领地(并获得1分),途中如果被攻击,羊会被击落,最终得分最高的队伍胜利!适用于游戏服。
  2. XgpLottery: 拥有保底机制、抽奖记录、GUI界面操作的抽奖插件。
  3. Quests:一个任务插件,让玩家可以完成各种丰富多彩的任务并获得奖励!任务可以是破坏/放置怪物,杀死生物/玩家,到达指定地点等等,甚至可以是回答出一道问题。适用于RPG服。
  4. SkillAPI:一个强大的 RPG 插件, 允许创建自定义技能或职业。适用于RPG服。
  5. Friends for Spigot:一款存在五年以上的老牌好友插件,可以通过此插件在服务器添加好友和组队。
  6. CowMonthCard:一个很不错的月卡插件,有很多可以自定义的内容。
  7. DeluxeHub: 一款将计分板、自动公告、玩家隐藏、菜单等集成一体的大厅插件。
  8. MailBox:一款十分有用的邮箱插件,可以通过邮件向玩家发送物品与金钱,或让玩家在领取时执行指令。
  9. EasyGUIShop: 一款功能十分丰富的商店插件,可以让你在我的世界中体验开网店的乐趣。
  10. LiteSignIn:这是一个使用门槛低、不需要编辑一堆花里胡哨选项的签到插件,虽然叫做简易签到,但它的功能也不少,麻雀虽小五脏俱全。
  11. RadioBoard:一个功能强大的基于数据包的多功能地图插件,它具有广泛的API和优化的代码,可提供最佳的性能和游戏体验,RadioBoard能够创建电路板并允许用户自定义重要的内容,从图像,GIF到按钮和开关。
  12. ArtMap:该款插件可以让玩家合成画布和画架然后使用颜料来在画布上涂色,完成后即可将画作转为地图物品,可将其放置在展示框上.还可以通过绘制多服拼接画来合成一张完整的大图。
  13. The Bridge:战桥玩法插件,可以自定义场地,自定义队伍。(推荐该作者的系列插件,如保卫村庄、建筑战争等)。适用于游戏服。
  14. SocialMedia: 仿Hypixel的社交系统,访问个人社交网站的插件。可以对接QQ、VChat、BiLiBiLi、网易云、抖音..
  15. GameBox:通过GUI来玩一些有趣的小游戏,包括扫雷、宝石消消乐等。
  16. MythicMobs:可以通过此插件自定义怪物。适用于RPG服。
  17. RevivedLocyItem:自定义技能+特效+RPG物品。适用于RPG服。
  18. PlayerParticles: 玩家自定义粒子特效。
  19. ZMusic:功能强大的音乐系统,可以让你在服务器点歌。
  20. EZColors:通过此插件,你可以自定义聊天字体颜色。
  21. BlueMap:一个可以把世界转变为网页版的3D地图插件,你可以在你的Web浏览器中像游戏一样查看你的世界或者从高处俯瞰获得地形概况。适用于生存服。
  22. GadgetsMenu:小游戏大厅必备趣味道具插件。
  23. CrackShot:枪械服必备插件,可以让你自定义枪械属性,功能十分强大。
  24. Essentials:基础插件,拥有经济、商店、私聊、跨世界传送等功能,十分适合生存服。
  25. LegendaryChallenges:每日任务插件,超多自定义内容,并且采用GUI操作。
  26. JulySafe: 服务器优化,实体清理,掉落物清理,高频红石限制 
  27. ScreenInMC:此插件可以通过地图画,在Minecraft中拼接出一个显示器,可以播放图片、动态图、视频、访问网站、连接VNC。
  28. mc-go-cqhttp:让你的服务器登录QQ机器人,可以替代MiraiMC,可能配置起来会麻烦点。
  29. DungeonPlus:一个功能强大的副本插件。适用于RPG服。
  30. NuclearWasteWater:一款以核污染水为主题的插件。
  31. ShadowLevels:一款等级奖励插件。
  32. [付费]CinematicStudio:可以让你创建流畅的过场动画的插件,并且使用GUI编辑。
  33. Slimefun:粘液科技插件,火遍生存服的玩法插件。
  34. BiliBiliToper:依据玩家投稿的视频的标题/简介/标签来判断视频是否和你的服务器相关,每当玩家发布一个视频,便给与奖励并通告全服来观着。
  35. BiliReward:插件可以判断玩家是否给视频点赞、投币、关注,实现B站与服务器的双向引流。
  36. ReturnReward:让很久没上服务器的玩家获得指定奖励,不同时长不同奖励
  37. Typewriter:—款在网页上编辑的任务插件。
  38. PlayerBirthday:让玩家设置生日。
  39. Global:帮你完成一些小游戏服务器基础设置。
  40. Friends:带GUI的好友与组队系统。
  41. Plugin Portal:一款可以在游戏中安装插件的插件。
  42. WkKit:功能十分齐全的礼包插件,可以拓展签到、邮箱、兑换码等功能。
  43. RealSurvival :饮水、睡眠、体温、负重、体力、生病 。还给你真实的世界。
  44. ExcellentCrates:一款拥有超多自定义功能的抽奖插件。
  45. SuperLobbyDeluxe:超级大厅管理插件,拥有超多功能。
  46. QiuhuaBackpack:角色系统
  47. NeigeItems:万能随机物品库
  48. Banker:多功能MM战利品分配
  49. NotQuests:另一种任务系统
  50. MiniAnnouncement:显示自动公告, 不同玩家不同内容
  51. Questscrolls:每日任务卷轴
  52. MiniMOTD:可自定义假玩家以及RGB颜色
  53. PlayerReleaseTasks:让玩家来发布任务吧
  54. [付费]CarouselSelector:更酷炫的可交互3D菜单
  55. [付费]Miphone:让你的玩家使用手机吧
  56. [付费]LobbyGames:拥有多种高质量小游戏且创建方便的小游戏插件
  57. ConditionalEvents:自定义事件,通过检测某一设定的事件来触发另一个事件。
  58. MonsterPlus:三大特色:怪物系统,物品系统,设计图系统
  59. ArmorStandTools:自定义盔甲架模型GUI操作系统
  60. TzSurveyStatistics:调查玩家来源 | 新玩家礼包 | 邀请礼包
  61. BetonQuest:一个高级和强大的任务脚本插件
  62. StarHandBook:让玩家不断探索,解锁图鉴获得奖励
  63. One day:轻量化真实世界时间天气同步插件
  64. LimitedTimeItem:限时物品
  65. Money From Mobs:打怪掉金币
  66. ItemCommand:给物品绑定自定义动作
  67. LegendarySevenDayGift:类网游的新手七日礼包
  68. BetterFishing:一款功能强大的钓鱼插件
  69. BentoBox:空岛生存 | 酸岛生存 | 洞穴生存 | 方块闯关 | 边界闯关
  70. FairyChat:一款功能丰富的插件
  71. BNes:在服务器里和小伙伴一起玩FC游戏
  72. DPStamina:地牢体力,门票功能,跨服支持
  73. MangoTili:轻量级的体力系统
  74. ModelAPI:不使用mod创建实体模型
  75. MillerChatPlus:多功能聊天管理系统
  76. XinXinPlayerPropose:自定义提议箱|让玩家通过指令提出对服务器的建议吧
  77. FabledSkyblock:更好的空岛生存插件|内置大量GUI
  78. SelfHomeMain:很好用的家园系统,创造只属于自己的家园世界。
  79. DiceFurniture:家具插件1
  80. Furniturelibary:家具插件2
  81. PotionExpansion:很意思的药水拓展玩法
  82. BailianBot:基于阿里云百炼,创建服务器自己的大模型问答bot
  83. CustomStatusbar:自定义状态条、它不仅仅是可以用来制作口渴、健康值
  84. NetworkWatchdog:服务器网络状态看门狗:服务器断网后避免硬重启时丢数据
  85. AIMC:MC x 文心一言,给你的服务器接入大语言客服
  86. SeekInventory:打开/查询/备份玩家的背包
  87. Dynmap:卫星地图|让玩家的建筑实时显示在网页上
  88. CtScore:自定义积分系统
  89. Skript:一款英语及格就能学会的编程语言
  90. Aurelium Skills:适用于生存服或RPG服的技能插件
  91. FileAutoBackup:服务器自动备份系统
  92. BiliBiliRewards:更好的三连插件,让玩家发布视频宣传服务器
  93. MythicTotem:自定义凋零式BOSS召唤图腾,RPG服适用
  94. PlayerBalancer:大型群组必备BC插件多合一,负载均衡/匹配队列
  95. AntiAttackRL:是一款免费、可靠、更新频繁、多平台的压测防御插件
  96. Tooltips:创建各式各样的提示消息
  97. PowerCamera:快捷的制作过场动画镜头
  98. Animatorstand:盔甲架做boss
  99. PlayerIntensify:玩家强化插件
  100. CustomBiologyDrop:自定义生物掉落
  101. PlayerLevel:自定义RPG等级控制
  102. PVPRewards:PVP奖励,内置积分商城、段位、排行榜
  103. GeekCosmetics:时装插件
  104. [付费] AdvancedReporter:更好的举报系统,支持网页管理
  105. ServerPingLib:直接通过IP地址获取目标服务器信息
  106. Seasons:季节插件
  107. Ultimate Antibot:反压测
  108. MagicPaper:使用魔法创造服务器
  109. JoinOpt:聊天悬浮字,点击事件,自动指令
  110. PlayerInv:GUI仓库插件 | F键打开
  111. MCG:后门插件扫描|联网管控|敏感行为阻止
  112. UltimateTimber:支持高版本的真实砍树插件
  113. XinxinProblem:自定义问答系统|答题礼包
  114. XiWeather :更多天气效果|酸雨|雷暴|雾霾|流星雨|彩虹|冰雹|大风
  115. CSNKTools:一款将广播消息、计分板、数据库、网站、音乐等功能集于一身的插件
  116. Companions:高度自定义的宠物插件
  117. Confirm Menu:确认菜单,在执行指令之前先确认它
  118. RPGAssistant:可设置权限怪(必须需要XX权限才可以打此怪),指定名称的物品不能被丢弃,击杀指定怪物执行指定指令,手持指定物品出现指定聊天称号
  119. Fancy Physics:更真实的物理引擎
  120. AkariLevel:自定义RPG等级
  121. COI-Realm:一款小游戏:岛屿冲突
  122. AIDAMC:查看服务器硬件信息

评论

  1. LinkTech
    Windows Edge
    8 月前
    2023-9-15 20:10:48

    好耶!!!博主用心了!୧(๑•̀⌄•́๑)૭

  2. 博主 置顶
    Windows Edge
    已编辑
    5 月前
    2023-12-02 16:58:41

    挖几个坑:
    1.数据库教程;
    2.官网/皮肤站教程;
    3.网页地图教程;
    4.QQ机器人教程;
    5.资源包;
    6.数据包;
    7.创造服、生存服、小游戏服、RPG服四大种类服务器的创建示例。
    能填的有时间尽量填,填不了的就摆烂吧(bushi)
    已填的坑:
    1.域名教程;
    2.优化教程。

  3. 博主 置顶
    Windows Edge
    已编辑
    2 月前
    2024-2-20 18:51:52

    由于MCBBS停运,导致文章中(尤其是附录2)大数插件链接无法访问。经过抢修,恢复了大多数的插件链接。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇