副本限制(防作弊)
副本里默认把所有能用来作弊、逃出副本或破坏地图的东西全部关掉。规则写在 rules::
plugins/CloudDungeon/config.yml的rules:是全服默认。- 每个副本的
config.yml也可以写rules:,只写想改的项目,其他沿用全服默认。
true = 允许,false = 禁止。
# dungeons/<副本>/config.yml:这个副本允许挖方块、开放鞘翅
rules:
block-break: true
elytra: true
全部规则
| 规则 | 默认 | 说明 |
|---|---|---|
block-break | false | 破坏方块 |
block-place | false | 放置方块 |
explosion-block-damage | false | 爆炸破坏地形(苦力怕、技能爆炸) |
pvp | false | 队友互打(包括用弓箭等射击) |
item-drop | true | 丢物品 |
item-pickup | true | 捡物品 |
hunger | true | 会饿;false = 饱食度不会下降 |
ender-pearl | false | 末影珍珠、末影之眼 |
chorus-fruit | false | 紫颂果传送 |
elytra | false | 鞘翅滑翔 |
firework-boost | false | 烟花加速 |
riptide | false | 激流三叉戟 |
wind-charge | false | 风弹 |
totem | false | 不死图腾(会绕过生命次数) |
ender-chest | false | 末影箱(防止把副本物品藏起来) |
buckets | false | 水桶、岩浆桶(装与倒) |
vehicles | false | 船、矿车 |
leash | false | 拴绳(拉怪) |
spawn-eggs | false | 刷怪蛋 |
throw-eggs | false | 丢鸡蛋 |
fire | false | 打火石、火焰弹(false 时火也不会蔓延) |
explosives | false | TNT、TNT 矿车、末地水晶 |
flight | false | 飞行(/fly);创造与旁观模式不受影响 |
frames-and-stands | false | 物品展示框、盔甲架、画(放置、拿取、打掉) |
trample | false | 踩坏耕地 |
bed-and-anchor | false | 右键床、重生锚(会爆炸) |
mob-drops | true | 原版怪物掉落物与 经验(MythicMobs 的掉落表不受影响) |
sun-burn | false | 副本生成的僵尸、骷髅被太阳烧(副本世界在服务器端是白天,默认关掉;被火、岩浆点燃照常) |
右键使用类的操作(珍珠、末影箱、水桶、鞘翅……)被挡下时会提示「副本内不能使用……」;破坏 / 放置方块、PVP、丢 / 捡物品这类直接无效,不提示。提示文字在 lang.yml 的 rules:。
block-break / block-place 是 false 时,开着的 break / place 触发组 所指定的方块(它的点位 / 区域里,种类也符合)仍然可以挖 / 放,挖放时会执行那个触发;其他方块照样受保护。注意冒险模式本来就挖不动、放不了方块,要用这类触发请把 environment.gamemode 改成 SURVIVAL。
名单类设置
rules:
# 额外禁止右键使用的物品(物品 ID)
blocked-items: [GOLDEN_APPLE, SNOWBALL]
# lore 含有这些文字的物品,离开副本时会被收走
bound-item-lore: ["副本限定"]
| 项目 | 说明 |
|---|---|
blocked-items | 右键无效并提示。物品 ID 写错会在 /cd admin reload 时警告 |
bound-item-lore | 副本限定物品:离开副本(任何方式)时收走;不在副本里的玩家登录时如果带着这种物品(例如当机时带出来的)也会收走。比对的是去掉颜色后的文字,只要某一行 lore 包含就算 |
副本的 rules: 里写了名单类项目,会整份取代全服默认的名单,不是追加。例如副本只写 blocked-items: [SNOWBALL],全服默认挡掉的金苹果在这个副本里就能用了。
副本里能用哪些指令写在 rules.commands,见下一节。
副本内的指令
rules:
commands:
mode: whitelist # whitelist / blacklist / leave-only / all
list: [cd, clouddungeon, dungeon, msg, tell, w, r, reply]
message: "" # 被挡下时的提示;空 = 用 lang.yml 的 rules.command-blocked
四种模式
mode | 中文写法 | 作用 |
|---|---|---|
whitelist | 白名单 | 默认。只有 list 里的指令能用,其他全部挡掉 |
blacklist | 黑名单 | list 里的指令挡掉,其他都能用 |
leave-only | 只能离开 | 除了离开副本的指令,全部挡掉(不看 list) |
all | 全部 | 不限制,什么指令都能用 |
mode 写英文或中文都可以。
list 怎么写
| 写法 | 意思 |
|---|---|
cd | 整个指令:/cd 和它底下所有子指令 |
cd party | 只算这个子指令:白名单时只开放 /cd party …,其他 /cd 子指令仍然挡掉;黑名单时只挡 /cd party …,其他 /cd 子指令照常可用 |
home* | 前缀:结尾的 * 代表「以这段开头」,home* 包含 /home、/homes、/homeset…… |
- 开头的
/和插件前缀都会忽略:/essentials:msg和msg当成同一个指令。 - 不分大小写。
message是被挡下时的提示(可用&色码),{command}= 被挡下的指令;空 = 用lang.yml的rules.command-blocked。
一定可以用的指令
不管哪种模式,离开副本的指令一定可以用:
leave-command设置的离开指令(默认/leave,包括它的别名);/cd leave(/cd quit)。
所以不用把它们写进 list;黑名单写了也挡不掉。
用权限单独开放某个指令
给玩家 clouddungeon.command.<指令> 权限,他在副本里就能用那个指令,不管 mode 是什么。例如 clouddungeon.command.spawn = 这个人在副本里可以用 /spawn。
有 clouddungeon.bypass 的人则完全不受任何副本限制(包括指令),见 谁不受限制。
Tab 补全
在副本里时,玩家不能用 的指令不会出现在指令补全清单里(按 / 再按 Tab 看不到)。进入、离开副本或掉线重连回副本时会自动刷新。
示例
只能用 /leave 离开,其他指令一律不行:
rules:
commands:
mode: leave-only
大部分指令都开放,只挡传送类(黑名单):
rules:
commands:
mode: blacklist
list: [spawn, "home*", "tpa*", warp]
message: "&c副本里不能使用 &f{command}"
只开放组队与私讯(白名单):
rules:
commands:
mode: whitelist
list: ["cd party", msg, tell, w, r, reply]
这样玩家在副本里只能用 /cd party … 和私讯,/cd 的其他子指令都不行;/leave、/cd leave 仍然可以用。
全服默认与副本覆写
plugins/CloudDungeon/config.yml的rules.commands是全服默认。- 副本的
config.yml写了rules.commands,会整份取代全服默认(mode和list一起),不是合并。例如全服是白名单,副本写mode: blacklist加list: [spawn],这个副本就变成只挡/spawn。 - 旧写法仍然可以用:
allowed-commands: [...]= 白名单,blocked-commands: [...]= 黑名单。
# 旧写法,等同 mode: whitelist
rules:
allowed-commands: [cd, msg, tell, r]
与 command 触发组
command 触发组 先执行,再检查指令规则。触发了、但这个指令本身不被规则允许(例如自己编的 /芝麻开门),会直接被吃掉,不会出现「不能使用指令」的提示。
副本规则菜单
编辑模式的编辑菜单里,「回到出生点」旁边的「副本规则」可以直接修改这个副本的 rules:(写进副本的 config.yml,保留注释,立刻重新读取):
| 按钮 | 作用 |
|---|---|
| 每一条规则 | 点击切换允许 / 禁止:绿色 = 允许,灰色 = 禁止。✎ 表示这个副本有自己的设置(覆写了全服默认);Shift+右键 = 删掉这个副本的设置,改回全服默认 |
| 副本内的指令 | 点击轮换模式:白名单 → 黑名单 → 全部关闭(只能离开)→ 全部开放 |
| 指令清单 | 用脚本编辑器的方式编辑 rules.commands.list,一行一个指令 |
| 被挡时的讯息 | 在聊天栏输入 rules.commands.message |
| 指令改回全服默认 | 删掉这个副本的 rules.commands,改回用全服的设置 |
第一次在菜单里改指令设置时,会先把目前实际生效的模式和清单(全服默认或旧写法)复制进副本的 config.yml,你是从现在生效的设置开始改,不会一改就变成空清单。
其他固定的保护
这些不需要设置,一直有效:
- 副本世界不会自然生怪,只会有副本生成的怪物(不依赖游戏规则,各版本都有效)。
- 不能传送到别的格子:副本里的人被技能、其他插件传送时,只能在自己这一格的范围内。
- 外人不能传送进来:不在副本里的人(例如
/tpa到副本中的玩家)不能进入副本世界;有clouddungeon.admin的管理员可以。 - 跑出地图会被拉回:离开地图范围(地图外围留
environment.border格,最少 16 格)或掉进虚空,会被传回存档点。 - 被传送出副本世界 = 离开副本:例如
/spawn、/home,会照离开副本处理并恢复状态。
谁不受限制
- 有
clouddungeon.bypass权限的人完全不受限制(测试用;默认没有人有,OP 也没有)。 - 有
clouddungeon.command.<指令>权限的人,在副本里可以用那个指令,见 用权限单独开放某个指令。 - 规则只在副本世界里生效,对其他世界完全没有影响。
- 在副本世界但不在任何副本里的人(例如管理员),套用全服默认的
rules:。 - 进行中的副本不受
/cd admin reload影响:规则(包括指令模式与清单)维持开始时的设置,下一场才用新的设置。
进行中修改规则:setting
脚本可以用 setting 动作在副本进行中改这一场的规则,例如打完 Boss 开放挖矿、进入竞技场阶段开 PVP:
end:
- "setting block-break true"
- "setting pvp=true elytra=true mode=survival"
DungeonPlus 的写法 $setting{break=true;place=true;mode=SURVIVAL} @init 也能直接用(放在 before.yml 就是开场前设置)。
- 可以改任何规则名称,
break/place是block-break/block-place的简写。 mode(或gamemode)= 改这一场的游戏模式,活着的人立刻切换。- 只影响这一场,下一场恢复设置文件里的规则。
- 名单类设置(
blocked-items、bound-item-lore)与指令规则(commands、allowed-commands、blocked-commands)不能用setting改。 - 规则名称写错会在控制台警告。
setting 的完整说明见 动作:环境与规则。