Skywarz 是空岛战争玩法的黄金标准。这是一个测试版本,如果您发现任何漏洞,请在撰写评论前前往 GitHub 提交问题。历经七年开发与超过三万次下载,我决定完全重写最初的 Skywarz。本项目包含超过 17,000 行代码和 190 多个 Java 类,展示了我扎实的 Java 技能。插件在设计时充分考虑了安全性与未来的可扩展性。请注意,旧版本(< 2.0)已不再受支持。
核心特性
- 多竞技场与 BungeeCord 支持:支持多竞技场运行,并可集成 BungeeCord 网络。
- 团队与单人模式:支持团队作战,也兼容单人游戏。
- 数据库支持:支持 MySQL、SQLite、PostgreSQL、Microsoft SQL 等多种 SQL 数据库。
- 玩家数据与排行榜:完整的玩家统计系统与排行榜。
- 数据库查询缓存:底层采用 TTL 缓存优化数据库查询结果。
- 优先加入:拥有特定权限的玩家可优先加入满员房间。
- 宝箱刷新:可为每个竞技场单独开关宝箱刷新功能。
- 保护阶段:可为每个竞技场单独开关开局保护时间。
- 观战模式:包含传送菜单,方便观战者切换视角。
- 快速开始:允许玩家投票快速开始游戏。
- 竞技场重置:游戏结束后自动重置竞技场。
- 简易套装创建器:可通过指令快速创建套装。
- 高级套装选择器:游戏内提供直观的套装选择界面。
- 动态队伍选择器:带有动画效果的队伍选择界面。
- 粒子效果与胜利庆祝:包含丰富的粒子效果和获胜庆祝动画。
- 简易设置与高度自定义:每个竞技场都可进行深度自定义。
- 可自定义内容:
- 物品
- 告示牌
- 所有游戏消息
- 记分板
- 套装(通过 kits.yml 或游戏内创建器)
多竞技场告示牌
您可以创建用于多竞技场服务器的状态告示牌。如果使用 BungeeCord,您需要借助一个独立的、能读取目标子服务器 Motd 作为状态的 BungeeCord 告示牌插件。未来版本计划原生支持 BungeeCord 告示牌。
默认情况下,告示牌显示为绿色表示玩家理论上可以加入该比赛。
配置文件
Skywarz 包含多个配置文件,以下列出了主要文件及其核心内容。
main.yml
主配置文件,包含通用设置。
# BungeeCord 模式设置
bungeecord:
enabled: false # 设为 true 表示此服务器为专用 Skywarz 服务器,同一时间只能运行一个竞技场。
arena: <Arena> # 当 BungeeCord 启用时,此服务器代表的专用竞技场名称。
motd: # BungeeCord 模式下的服务器 Motd,可用于外部状态分析。
- '{name}'
- '{state.color} {state.name}'
fallback: lobby # 比赛结束或玩家离开时传送的回退服务器。
# 庆祝设置
celebration:
enabled: true # 是否在比赛结束后于大厅为获胜者生成庆祝效果。
firework spawn radius: 20.0 # 烟花随机生成的范围半径。
firework height: 5.0 # 烟花生成的最低高度偏移。
# 聊天设置
chat:
everyone tag: # 当玩家处于团队中时,默认只能与队友聊天。使用以下标签(不区分大小写)可发送全局消息。
- '@everyone'
- '@all'
- '@a'
# 时长设置(单位:ticks, seconds, minutes, hours, days)
duration:
phases: # 各游戏阶段的持续时间
DONE:
unit: seconds
amount: 15
IDLE:
unit: seconds
amount: 45
PLAYING:
unit: minutes
amount: 25
protection: # 玩家无敌保护时间
unit: seconds
amount: 15
chest refill: # 已打开宝箱的刷新间隔
unit: minutes
amount: 3messages.yml
语言配置文件,定义游戏内显示的所有消息。
prefix: §b[Skywarz] §r
successPrefix: §a[Skywarz]
warningPrefix: §c[Skywarz]
# 错误消息示例
errors:
generic: '{warningPrefix} Error: {0}'
syntax: '{warningPrefix} Syntax: {usage}'
in a match: '{warningPrefix} You are in a match already!'
not in a match: '{warningPrefix} You are not in a match!'
arena not found: '{warningPrefix} Cannot find arena {0}!'
permission: '{warningPrefix} You do not have the permission for this action!'
# 比赛相关消息
match:
join:
broadcast: §a[-] §7 Player §r{player.name} §7 has joined the game.
leave:
success: '{successPrefix} You left the match!'
broadcast: §c[-] §7 Player §r{player.name} §7 has left the game.scoreboards.yml
记分板配置文件,可完全自定义各游戏状态下的记分板显示。
# 空闲(等待)状态记分板
idle:
title: ' §lLobby§r '
lines:
- ' '
- 'Map:'
- §b{match.arena}
- ' '
- 'Kit:'
- '{player.kit.displayName}'
# 游戏中(存活)状态记分板
playing:
alive:
title: ' §b§lSKYWARZ§r '
lines:
- ' '
- 'Map:'
- §b{match.arena}
- ' '
- 'Time:'
- §e{match.time.left.format}
- ' '
- 'Alive:'
- §e{match.alive}
- ' '
- 'Kills:'
- §c{player.match.stats.kills}sign.yml
告示牌布局配置文件。注意:当前版本告示牌仅适用于多竞技场模式。
lines:
- '{state.color} §l[SW]'
- '{state.color} {state.name}'
- '{name}'
- '{alive}/{maxPlayers}'database.yml
数据库连接配置。支持 MySQL、PostgreSQL、Microsoft SQL、H2、Derby、HSQLDB 和 SQLite。
active: false # 设为 true 以启用数据库连接。如果连接失败,插件将停止运行。
jdbc: jdbc:mysql://<hostname>/<database> # JDBC 连接字符串
username: <username>
password: <password>chests.yml
宝箱战利品配置。可编辑物品及其在宝箱中出现的权重(权重越高,出现几率越大)。
fill slot probability: 35 # 宝箱每个格子被放入物品的概率(0-100)
items: # 物品列表
- ==: Skywarz.ChestItem
weight: 21.0
type: golden leggings
# ... 更多物品
# 可添加附魔,例如:
# - ==: Skywarz.ChestItem
# weight: 10.0
# type: diamond chestplate
# enchants:
# PROTECTION_FIRE: 2物品配置文件
位于 items/ 目录下,用于配置游戏内各种功能物品(如套装选择器、离开物品、快速开始、队伍选择器、观战者传送器)的图标、位置和菜单。
权限列表
skywarz.*:授予所有与 Skywarz 相关的权限。skywarz.play(默认):允许玩家参与 Skywarz 比赛。skywarz.priority:确保在等待阶段房间已满时,踢出一名非优先玩家为拥有此权限的玩家腾出空间。skywarz.setup:授予所有设置相关权限(管理、删除、创建竞技场等)。skywarz.stats.*:授予所有统计相关权限(读取和写入)。skywarz.stats.self(默认):允许玩家查看自己的统计数据。skywarz.stats.other:允许玩家查看其他玩家的统计数据。skywarz.stats.modify:允许修改玩家的统计数据。
指令列表
通用指令
/sw help:列出所有描述性指令。/sw join <Arena>:加入指定竞技场。权限:skywarz.play,skywarz.*/sw leave <Arena>:离开指定竞技场。权限:skywarz.play,skywarz.*(隐式)/sw stats (Player):查看(自己或他人的)统计数据。权限:skywarz.stats.self,skywarz.stats.other,skywarz.stats.,skywarz./sw stats reset <Player>:重置玩家的统计数据。权限:skywarz.stats.modify,skywarz.stats.,skywarz./sw leaderboard:查看排行榜。权限:skywarz.stats.other,skywarz.stats.,skywarz./sw arena list:列出所有竞技场。权限:skywarz.setup,skywarz.*
设置指令(按顺序使用)
/sw arena create:delete <Arena>:创建或删除一个竞技场。权限:skywarz.setup,skywarz.*/sw arena set lobby <Arena>(未保存):设置竞技场的大厅(等待)出生点。权限:skywarz.setup,skywarz.*/sw arena set spectator <Arena>(未保存):设置竞技场的观战者出生点。权限:skywarz.setup,skywarz.*/sw arena set point <Arena> <1:2>(未保存):设置游戏区域的两个对角点,定义玩家可以自由移动和游戏的范围,也是默认的竞技场重置区域。权限:skywarz.setup,skywarz.*/sw arena add spawn <Arena> <Team>(未保存):为指定竞技场和队伍添加一个出生点。出生点数量可以独立于最终队伍最大人数。玩家会在其队伍可用的出生点中随机出生。权限:skywarz.setup,skywarz.*/sw arena remove spawn <Arena> <Team> (Spawn-ID)(未保存):从指定队伍中移除给定的出生点或所有出生点。权限:skywarz.setup,skywarz.*/sw arena save <Arena>:保存并应用对竞技场的所有更改。如果该竞技场当前有比赛正在进行,更改不会应用到该场比赛。
额外竞技场规则(修改竞技场,未保存)
/sw arena set rule team.size <Arena> <Number>:更新竞技场的最大队伍人数(默认:2)。权限:skywarz.setup,skywarz.*/sw arena set rule world.weather <Arena> <clear:downfall>:更新所有参与者感知的天气环境(默认:clear)。权限:skywarz.setup,skywarz.*/sw arena set rule world.time <Arena> <Number>:更新所有参与者的世界时间(默认:6000)。权限:skywarz.setup,skywarz.*/sw arena set rule refill <Arena> <true:false>:切换指定竞技场的宝箱刷新功能(默认:true)。权限:skywarz.setup,skywarz.*/sw arena set phase.protection <Arena> <true:false>:切换指定竞技场的保护阶段(默认:true)。权限:skywarz.setup,skywarz.*
BungeeCord 指令
/sw bungee update <Arena>:当 BungeeCord 启用时,更新玩家加入服务器后进入的专用竞技场。权限:skywarz.setup,skywarz.*/sw bungee toggle (true:false):启用或禁用 BungeeCord 模式。仅在设置了有效的专用竞技场(见/sw bungee update)后生效。权限:skywarz.setup,skywarz.*
套装指令
/sw kit create <DisplayName...>:创建一个具有给定显示名称的空套装。最终名称将是去除颜色代码后的显示名称。权限:skywarz.setup,skywarz.*/sw kit edit <KitName...>:进入套装编辑模式,保存时玩家库存将一对一代表套装的库存。权限:skywarz.setup,skywarz.*/sw kit save:cancel:离开并保存或取消套装编辑模式。权限:skywarz.setup,skywarz.*- 注意:要编辑套装图标,您仍需修改
kits.yml。未来版本可能实现通过指令更新套装图标。 - 提示:您可以在套装的所有物品上使用颜色代码(使用
&符号)!
使用此插件的服务器
如果您希望您的服务器被列在此处,请向我发送私信。
开发进程
您可以在 Skywarz 的 GitHub 上跟踪开发进度、查看计划功能、当前开发内容等。
希望您喜欢这个插件。欢迎通过私信留下反馈。
请注意,这是一个测试版本,可能会出现漏洞。如果您发现漏洞,请在 GitHub 上提交问题。