开服玩生存最头疼的事就是熊孩子拿TNT炸家,想保护特定方块不被炸毁,答案很直接:服务器端用插件圈地或设置方块保护,原版则靠游戏规则关闭爆炸破坏。
下面按场景拆开讲,从原版指令到主流插件,再到防炸细节,全部走实操路线。
我的世界服务器怎么设置tnt不破坏方块:先分清服务器类型
你手里的服务器分两类,处理方式完全不同。
- 原版服务端(Vanilla):不带任何插件接口,只能用游戏规则指令。
- 插件服务端(Spigot / Paper / Purpur):支持装插件,保护方块的方案多得多。
如果你是开服新手,多数情况会选插件端,因为后续加领地、查熊孩子记录都方便,但不管哪种,先看原版的基础设置。
原版指令:一条命令关掉TNT地形破坏
在原版服务器控制台或游戏内输入:
/gamerule mobGriefing false
mobGriefing 控制所有非玩家实体的方块破坏行为,包括苦力怕、末影人、恶魂火球,以及TNT实体,设成 false 后,TNT爆炸时不再破坏任何方块,但伤害玩家和生物的效果保留。
这里有个关键细节:如果你只想禁止TNT炸方块,却允许苦力怕炸掉地形,原版规则做不到,mobGriefing是一刀切,不区分爆炸来源。
另一个常用指令,限制TNT自身生成:
/gamerule doTileDrops false
这条不是防炸,而是禁止方块被破坏后掉落物品,配合mobGriefing一起用,能防止利用TNT刷物品,不过多数服务器用不上,因为真正要保护的是建筑,不是防刷物品。
用命令方块实现“指定方块不可破坏”
原版还有一个技巧,用命令方块自动修复被炸毁的方块,原理是检测TNT爆炸位置,然后瞬间把特定方块放回去。
举个例子,你想保护坐标 (100, 64, 100) 的钻石块:
/execute if block 100 64 100 minecraft:air run setblock 100 64 100 minecraft:diamond_block
放在循环命令方块里,每 tick 执行一次,TNT炸掉钻石块后,命令方块立刻重建,缺点是延迟极低也可能有卡顿,且只适合保护少量方块。
业内专家的共识是:命令方块方案适合原版单机或小服务器应急,规模稍大必须上插件,性能和稳定性都强得多。
插件保护:真正能指定方块不被炸的解决方案
插件端的设计逻辑是
圈地与方块粘液,两个思路各有对应插件。
WorldGuard 区域级防爆
WorldGuard 是Bukkit系服务器最老牌的领地保护插件,安装后需要配合 WorldEdit 一起用。
核心指令流程:
- 用世界编辑工具选定区域
手持木斧(默认工具)左键点一个角,右键点对角
- 输入以下指令创建保护区
/rg claim 保护区名称
给这个区域加上防爆标记
/rg flag 保护区名称 tnt deny
/rg flag 保护区名称 creeper deny
/rg flag 保护区名称 explosion deny
具体到你的需求:tnt deny 直接禁止TNT在区域内爆炸,explosion deny 覆盖所有爆炸类伤害。
如果你只想保护某个方块而不锁整个区域,WorldGuard也能做到,但更推荐下一种方案。
GriefPrevention 按人圈地,TNT拆不掉
GriefPrevention(以下简称GP)走的是“信任制”路线,玩家用手里的金锄头左键圈地,右键拉对角,系统自动生成领地。
关键设置项(在 config.yml 里):
Claims.ProtectionBlocks:控制每个方块需要多少材料才能圈地Claims.Explosions:设成false后,领地内所有爆炸不破坏方块
相比WorldGuard,GP对新手更友好,安装后基本不用调默认参数,TNT天然对领地无效。
CoreProtect 被炸了也能一键还原
严格说CoreProtect不是防炸插件,而是方块记录与回滚插件,它记录每个方块的放置、破坏、容器操作。
当TNT炸了房子,执行:
/co inspect
进入检查模式,右键被炸区域,查询谁在这里动过手脚,或者直接回滚指定范围内的所有方块变更:
/co rollback t:24h r:10
意思是回滚10格范围内最近24小时的所有方块改动。
组合拳是最优解:WorldGuard设防爆 + CoreProtect做兜底,就算插件失效被炸了也能查记录、一秒还原。
不同服务器的TNT保护策略对比如下
| 方案类型 | 保护粒度 | 适合场景 | 配置难度 | 推荐指数 |
|---|---|---|---|---|
| 原版mobGriefing | 所有爆炸 | 原版生存、无插件 | 极低 | |
| 命令方块重建 | 单个方块 | 保护特定方块 | 中等 | |
| WorldGuard | 区域整体 | 公共建筑、高频交易区 | 中等 | |
| GriefPrevention | 玩家个人领地 | 生存服玩家自治 | 低 | |
| CoreProtect | 全记录+回滚 | 所有服务器必备 | 低 |
多数情况下建议WorldGuard + CoreProtect双开,一个负责防炸,一个负责溯源,哪个插件出故障都有退路。
如何指定某一种方块不被TNT破坏且其余正常破坏
方案保护的都是“区域”,如果你想实现“某方块方框内免疫爆炸,但其他区域TNT照常炸”,单靠插件还不够,需要搭配亲和力插件或耐久插件。
我亲测好用的一个思路:用WorldGuard标记两块区域,一块设 tnt deny,另一块设 tnt allow,然后用命令方块把“允许爆炸”区域的TNT引到“不允许爆炸”区域时,让爆炸威力被插件取消。
但说实话,不同场景玩法差别不小:
- 如果你想做空岛战争地图:把地图用WorldGuard全图圈起来,设
explosion deny,TNT在竞技场里只能伤人不能拆地。 - 如果你想做建筑服:全局设
mobGriefing false,另建一块“爆炸试验区”开allow,方便玩家测试TNT大炮。 - 如果是纯生存服:给玩家GP圈地权限,野外随便炸,家附近绝对安全。
配置WorldGuard后TNT仍然炸方块的原因排查
经常看到有人问“我设置了tnt deny怎么还是被炸了”,这里列出最常见的几种情况:
- 插件版本与服务端不对应:WorldGuard有免费版和付费版之分,Paper服务端必须用对应版本,否则配置不生效
- 区域圈错位置:用
rg list查看当前所在区域,确认你的建筑在保护区范围内 - 权限组绕过限制:如果你是OP,OP默认无视所有区域限制,需要给自己加权限节点才能测试防爆
- TNT点燃瞬间爆炸的延迟问题:TNT点燃后有一定延迟才产生爆炸,这个延迟内如果TNT实体被活塞推入保护区,某些版本的WorldGuard会判定异常
行业共识认为,排错思路应该从“区域是否加载”“插件是否启用”“权限是否覆盖”三个层面逐层往下查。
这是避免TNT破坏的终极配置模板
给刚开服的朋友一个可以直接复制的配置路径(以Spigot 1.20+为例):
第一步:在 server.properties 里关闭出生点地形破坏
spawn-protection=16
这个参数保护出生点周围16格范围,默认值就有,但注意它只对非OP玩家生效。
第二步:插件文件夹 plugins/WorldGuard/worlds/<世界名>/config.yml 里添加:
block-tnt-explosion: true
不同版本字段名有差异,建议直接进游戏用命令设置而不是改配置文件。
第三步:如果你要保护的是“某种方块”,用WorldGuard的 member-deny 机制不适合,改用在区域内放置一个隐藏的命令方块,执行高频检查:
/execute unless block <坐标> <方块ID> run setblock <坐标> <方块ID>
放在循环、无条件、保持开启的命令方块里。
TNT防炸的常见问题解答
为什么我的服务器mobGriefing设置了false但TNT还能炸掉方块?
大概率是你设的是世界规则但服务器有多世界插件,每个世界都有独立的 gamerule 设置,用 /gamerule mobGriefing false 只影响你当前所在的世界,需要在每个世界都执行一遍,另外一个原因是你把 mobGriefing 和 blockExplosion 搞混了,某些插件自带的爆炸事件不经过原版规则,被插件接管后原版设置可能失效。
如何只让TNT不破坏某个方块而不影响其他方块?
原版做不到按方块类型区分爆炸伤害,插件里 ArkCraft 或 ProtectionStones 可以做到,以ProtectionStones为例:给特定方块绑定“保护石”属性,挖掘这个方块会生成一圈保护区域,区域内TNT完全无效,配置时需要注意方块ID冲突,例如钻石块既想当货币又想当保护石,需要通过插件设置里调优先级。
我的服务器是基岩版,怎么设置TNT不破坏地形?
基岩版服务器(如BDS官方服务端)没有 gamerule mobGriefing 这样的全局规则,但可以在 server.properties 中找到 tnt-explosion-damage 参数,设成 false 即可关闭TNT的地形破坏,网易版开服则需要在“服务器设置”里寻找“TNT伤害”选项,如果找不到就改用插件方案,基岩版也支持部分Java版插件(需通过Geyser中间件转发,但延迟较高)。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/725491.html





