如何关闭TNT阻断伤害?

我正在制作一张地图,会有大量的爆破,我不想让它损坏街区。

我已经做了/gamerule mobGriefing false,但还是会有TNT块损坏。

有什么办法能让我把这个也关掉吗?

解决办法

所以这很复杂,但并不比[阻止玩家制作钻石剑](https://gaming.stackexchange.com/a/138526/1351)差多少。 这里最大的区别是,所有的事情都必须在同一时间发生,而且必须在每个时间发生。这就排除了我在链接答案中使用的策略;20赫兹的填充时钟几乎是必须的,而在另一个答案中我可以使用更慢、更简单的时钟。 要想让这一招奏效,你还是要禁用暴徒的悲鸣,因为我使用的是Ghast火球来制造实际的爆炸。 也可以有这样的效果,但对玩家或其他实体造成的伤害为零,我会在最后添加相关命令。

第一步是设置一个记分牌目标来追踪即将爆炸的TNT:

/scoreboard objectives add TNTGoBoom dummy

接下来,我们需要设置一个 "填充 "时钟。 你需要在一列中设置两个命令块,中间用一个空气块隔开。 在底部,输入以下命令:

fill ~ ~1 ~ ~3 ~1 ~ air

而在最上面的那个,输入这个命令:

fill ~ ~-1 ~ ~3 ~-1 ~ redstone_block

在这两个块之间放一个红石块,你就有了你的填充时钟。 理想情况下,这不会在块状边界附近,但我的块状边界,它仍然工作正常。 如果填充时钟的一部分被从内存中卸载,就会发生一些有趣的事情,但如果它是一个产卵块或者你总是在时钟附近,你就不必担心。

你应该看到在一侧还有三个红石块。 你要在红石块的旁边再放下三个指令块(最好是在上面或下面)。 按照最接近前两个命令块的顺序,你要使用的命令是::

scoreboard players set @e[type=PrimedTnt] TNTGoBoom 1 {Fuse:0b}
execute @e[type=PrimedTnt,score_TNTGoBoom=1] ~ ~ ~ summon Fireball ~ ~ ~ {direction:[0.0,-1.0,0.0],ExplosionPower:4,Fuse:0,Time:-1,TileEntityData:{CustomName:"TNT"},ActiveEffects:[{Id:14,Duration:10,Amplifier:10,Ambient:1}]}
kill @e[type=PrimedTnt,score_TNTGoBoom=1]

好了,我们来看看这三个命令。 第一条命令将TNTGoBoom目标的计分板数值设置为1,因为每个TNT都准备好在下一个时间段爆炸。 这就是我们追踪TNT的方法。 下一条命令是在TNT的确切位置召唤一个无形的火球,直接向下移动,并且具有与TNT相同的爆炸力。 这实际上会引起爆炸效果,并对玩家/实体造成伤害,但由于暴民的悲鸣被关闭,它不会破坏地形。 最后,我们 "杀死"(有效地删除)即将爆炸的TNT,这样_它就不会破坏地形。


现在,如果你想在不造成任何伤害的情况下仍然有爆炸效果,那么你需要用2个命令块来代替火球召唤命令(因此,你的填充时间又延长了一个块):

execute @e[type=PrimedTnt,score_TNTGoBoom=1] ~ ~ ~ particle hugeexplosion ~ ~ ~ 0 0 0 1
execute @e[type=PrimedTnt,score_TNTGoBoom=1] ~ ~ ~ playsound random.explode @a ~ ~ ~

这两条命令会产生TNT爆炸的粒子效果和声音,但仅此而已。 如果你用这个方法代替火球法,对世界、玩家或实体没有任何损害。


补充:所以这真的会把TNT大炮之类的东西搞乱。 我在我的创意世界中运行了这个,我之前在那里测试了一个无限的TNT炮,虽然它有点作用(射出的TNT仍然会射出一点),但它有一个倾向,就是把火球送上天空。 另外,使用这个方法意味着每个TNT块都需要单独点燃,因为在关闭暴民的情况下,火球不会照亮附近的其他人。 我相信,只要多用一点命令块的方法,就有办法解决这个问题。 事实上,我知道有一种方法可以做到这一点,只是我还没有100%掌握细节。

评论(16)

不在瓦尼拉-威廉姆斯,不在

你需要一个服务器插件或一个MOD(最好是WorldGuard)来做这个。

这里有一个很好的问题,显示了你如何能用世界卫士做这个。


来源

评论(0)

做一个装置,使一个命令块开了又关,关了又开,等等,等等,现在、 在命令块中输入/kill @e[type=PrimedTnt]。这将在tnt被设置后立即摧毁它。 很简单!

评论(2)