我的世界1.9简单易懂的CD系统详解

时间:2018-02-09 来源:88130安卓下载 作者:佚名

  我的世界1.9简单易懂的CD系统详解。废话就不多说什么了,那下面给大家分享的则是我的世界1.9版本中CD系统的介绍哦~那不了解的玩家不妨进来看看下面的详细介绍吧!希望对大家有所帮助。

  这次给大家发一个通俗易懂的CD系统,相信可以对正在做PVP/PVE地图的各位提供一些便利。

  在下文中,你不会看到多么高深的指令逻辑,但是你可以看到整个系统的设计思路,以及完善和优化的过程。老手们觉得无聊可以点击右上角离开,同时也欢迎大家指正文中的错误。

  本文所有指令适用于Minecraft 1.9以上版本,写的时候最新版本是1.10.2,请知悉。

  本文所涉及的命令方块都是高频指令链,即以循环型命令方块(RCB)开头,后续全是连锁型命令方块(CCB),以保证指令的逻辑性和连贯性。

  在开始贴指令前,我们先来分析一下核心的功能。一般来说,CD的判定通常都是这么一个过程:

  判断使用物品 -> 设置CD时间 -> CD计时器激活 -> 冷却完毕补给

  需要注意的是,由于每个人的CD是单独计算的,因此我们不能够使用全局计时/操作,选择器和记分板的合理运用才是正确的解法。

  我们首先来谈谈触发方式。过去有很多种触发方式,例如右键、Q等等,1.9以后还可以用副手触发,与之对应的检测方法有很多,但是主要原理都是通过选择器中与记分相关的参数来实现检测,例如:

  stat.useItem.minecraft.carrot_on_a_stick

  这个判据,在你右键胡萝卜钓竿的时候会自动+1分,,假定这个记分项取名叫rightClick,你就可以通过选择器来选中

  #前置指令

  /scoreboard objectives add rightClick stat.useItem.minecraft.carrot_on_a_stick 右键探测

  #高频CB链执行

  kill @a[score_rightClick_min=1]

  scoreboard players reset @a[score_rightClick_min=1] rightClick

  这样的话,当你右键胡萝卜钓竿时,你就挂了。

  另一种是物品栏检测,更准确地说,是检测玩家NBT。例如检测副手有物品就杀掉:

  #高频执行

  scoreboard players tag @a add offhandKill {Inventory:[{Slot:-106b}]}

  replaceitem entity @a[tag=offhandKill] slot.weapon.offhand minecraft:air

  kill @a[tag=offhandKill]

  scoreboard players tag @a[tag=offhandKill] remove offhandKill

  类似的小技巧在这里就不解释了,如果有需要,欢迎提问。

  接下来,我们以模拟手枪的装填为例,来讲解这个CD系统的工作过程:假设你1号位有10个雪球,你可以右键发射,并且可以在任意时候按F来进行装填;当你打完10发雪球后,1号位替换为一个屏障,需要你手动按F来进行装填,装填耗时2秒。

  按照前面所说的,我们可以用判断使用了10发雪球的玩家,或者判断玩家的1号位是否为空。

  第一种办法比较简单,就是使用对应的判据,即stat.useItem.minecraft.snowball。但是这样容易出问题,比如你在不同的快捷栏有相同ID的道具(如雪球),那么你这个判定就会彻底乱掉,所以比较好的办法是使用物品栏检测。正好题设里触发CD时间的条件是雪球或者屏障通过按F键将物品放到副手。

  然后是设置CD时间,前面说到,由于CD是每个人单独计算的,因此不能够进行全局操作,也就是说,不能使用testfor这类指令,因此,我们需要通过记分板操作来实现这个检测。

  这里我们需要一个变量来实现计时,因此:

  #前置

  /scoreboard objectives add snowballCD dummy 装填时间

  当检测到副手有相应物品后,触发的操作是设置CD,同时还要清除物品,如下:

  #高频执行

  scoreboard players tag @a add reload {Inventory:[{Slot:-106b}]}

  replaceitem entity @a[tag=reload] slot.weapon.offhand air

  scoreboard players set @a[tag=reload] snowballCD 40

  scoreboard playesr tag @a[tag=reload] remove reload

  这样就可以完成设置冷却时间

  因为这个例子里面只有一种物品需要这么检测,所以你可以这么写,但是如果你有好多个物品要做CD系统,那么你可以给物品加上自定义NBT来方便管理,这个我会在后面提到。

  接下来我们需要计时。就我个人而言,我更喜欢减分计时,因为CD就是倒计时嘛!减分计时更容易理解。

  但是这个减分不能一直减,到一定的条件以后就要停下来,显然这个条件是分数为0的时候

  #高频执行

  scoreboard players remove @a[score_snowballCD=0,score_snowballCD_min=0] snowballCD 1

  但CD时间结束的时候,记分应当停留在-1,不需要大家进行重置,因为这个-1在后面还会派上用场。

  最后是补给物品,强烈建议大家不要在这里用give,用replaceitem:

  #接上面那条

  replaceitem entity @a[score_snowballCD=0,score_snowballCD_min=0] slot.hotbar.0 snowball 10

  乍一看好像没什么问题,但是聪明的读者一定一下子就发现了,有一个要求还没有实现,那就是打完雪球以后把1号位替换为屏障,那这要怎么做呢?

  前面说了比较简单的方法是为使用了10个雪球的玩家替换物品,同时重置该记分板,另一种办法是检测物品栏。在这里,我选择了物品栏检测,因为这不仅比较可靠,而且不会和其他物品产生冲突。什么冲突呢?比如你有两个快捷栏都有雪球,那物品你使用哪个位置的雪球,只要你打满10发,就会触发替换屏障,这是不科学的,也是不可取的,所以我选择物品栏检测。

  这个检测跟上面的还不一样,是要检测一个位置是否为空,更准确讲,是要检测该位置是不是符合我们预想的道具。

  于是我们可以这么想,给1号位有这个道具的玩家加上tag,再对CD时间为-1(即没有处于冷却时间中的玩家)进行tag反选来检测。

  这么说好像很绕,那我们直接来看:

  #高频执行

  scoreboard players tag @a[score_snowballCD=-1] add withSnowball {Inventory:[{Slot:0b}]}

  replaceitem entity @a[score_snowballCD=-1,tag=!withSnowball] slot.hotbar.0 barrier

  scoreboard plyaers tag @a[tag= withSnowball] remove withSnowball

  这样就完成了整个功能。

  如果只是一个小模组的话,这样也许已经可以了,但是实际制作地图你需要考虑很多很多的东西,接下来,我们来对上述指令进行完善和优化——

  首先,我们要引入clear指令,来防止玩家刷道具。就像上面的系统,玩家只要打开物品栏把雪球换到其他位置就可以获取到屏障,进而可以触发一次装填来刷道具,这是我们不希望看到的,于是我们要在replaceitem之前先clear。

  其次,我们要把CD计时放到补给之前。

  并且,为了不和其他道具产生冲突,同时又不能使系统过于庞大,我们可以选择对道具加上自定义NBT,来统一操作。

  由于是物品栏检测,所以最后并没有使用雪球使用判定。当然我也会给出另一种需要到雪球使用判定的场景,这个在后面会讲到。

  下面是完整的指令

  #前置记分板

  /scoreboard objectives add snowballCD dummy 装填CD

  /scoreboard players add @a snowballCD 0

  #高频执行

  scoreboard players remove @a[score_snowballCD_min=0] snowballCD 1

  clear @a[score_snowballCD=0,score_snowballCD_min=0] snowball -1 64 {reload:1}

  replaceitem entity @a[score_snowballCD=0,score_snowballCD_min=0] snowball 10 0 {reload:1}

  //装填判定

  scoreboard players tag @a[score_snowballCD=-1] add reloadAmmo {Inventory:[{Slot:-106b,tag:{reload:1}}]}

  replaceitem entity @a[score_snowballCD=-1,tag=reloadAmmo] slot.weapon.offhand air

  scoreboard players set @a[score_snowballCD=-1,tag=reloadAmmo] snowballCD 40

  scoreboard players tag @a[tag=reloadAmmo] remove reloadAmmo

  //防改位判定

  scoreboard players tag @a[score_snowballCD=-1] add withSnowball {Inventory:[{Slot:0b,tag:{reload:1}}]}

  clear @a[score_snowballCD=-1,tag=!withSnowball] snowball -1 64 {reload:1}

  clear @a[score_snowballCD=-1,tag=!withSnowball] barrier -1 64 {reload:1}

  replaceitem entity @a[score_snowballCD=-1,tag=!withSnowball] slot.hotbar.0 barrier 1 0 {reload:1,display:{Name:"按 F 重新装填"},HideFlags:63,ench:[]}

  scoreboard players tag @a[tag=withSnowball] remove withSnowball

  最后的防改位判定,对于不需要判定装填的系统,可以把其中的replaceitem那一条换成设置CD时间的指令。就我个人而言,我觉得最后防改位判定是这个CD系统的重点。原因是有时候服务器会因为卡顿没有在CD=0的瞬间补给物品,下一刻,你的CD就变成-1了,却没有得到物品补给,整个人就会傻掉。

  各位可以再看看另一种情形:

  假设2号位有3个鸡蛋,如果数量不足3,则每3秒补给1个。

  这个比较好判定,直接用相应的判据即可,完整指令如下:

  #前置指令

  /scoreboard objectives add eggUse stat.useItem.minecraft.egg 使用了鸡蛋

  /scoreboard objectives add eggCD dummy 鸡蛋CD时间

  /scorebard players add @a eggCD 0

  #高频执行

  大家可以看到,实际上就算没有最后的几条指令,也照样可以工作的……所以说这个判定属于非必要、但是是细节层面的设计。

  再来一个例子:3号位有16个雪球,打完后等30秒自动补给。

  这个跟第一个比较不一样了,它的物品ID和数量跟1号位互相冲突,因此之前那种 判断玩家使用了多少个雪球然后触发设置CD时间 的方法不可取。考虑到1号位已经有雪球,3号位的雪球还必须是打完了才能进行CD设置,所以我们需要这么来写。

  完整指令如下:

  #前置指令

  /scoreboard objectives add snowballUse stat.useItem.minecraft.snowball 雪球使用判定

  /scoreboard objectives add snowbllCD2 dummy 第2个雪球CD

  #高频执行

  scoreboard players set @a[score_snowballUse_min=1,tag=snowballSelected] ramItemCD 600 {SelectedItemSlot:2}

  clear @a[score_ramItemCD_min=600] snowball -1 64 {ramItem:1}

  scoreboard players tag @a[tag=!snowballSelected] add snowballSelected {SelectedItem:{id:"minecraft:snowball",Count:1b,tag:{ammo:2}}}

  scoreboard players tag @a[score_snowballUse_min=1,tag=snowballSelected] remove snowballSelected

  //CD计时与补给

  scoreboard players remove @a[score_snowballCD2_min=0] snowballCD2 1

  clear @a[score_snowballCD=0,score_snowballCD2_min=0] snowball -1 64 {ammo:2}

  replaceitem entity @a[score_snowballCD2=0,score_snowballCD2_min=0] snowball 10 0 {ammo:2}

  //防改位判定

  scoreboard players tag @a[score_snowballCD2=-1] add withSnowball2 {Inventory:[{Slot:2b,tag:{ammo:2}}]}

  scoreboard players tag @a[score_ snowballCD2=-1] remove withSnowball2 {Inventory:[{Slot:-106b,tag:{ammo:2}}]}

  clear @a[score_ snowballCD2=-1,tag=!withRamItem] snowball -1 64 {ammo:2}

  scoreboard players set @a[score_ramItemCD=-1,tag=!withSnowball2] ramItemCD 600

  scoreboard players tag @a[tag=withSnowball2] remove withSnowball2

  瞧!这是多么通俗易懂又好用的CD系统!

  也许这时候会有朋友说,如果东西丢出去一部分又捡回来怎么办?这样也可以刷物品啊!

  好,接下来我们来解决这个问题。

  你需要明确一点:

  你的地图是否允许物品以实体形式存在?

  这个问题关系到你是否需要对整个系统的道具进行修改。如果允许实体物品存在,那么你可以选择这几种做法:

  对所有不需要kill的实体物品添加一个tag,然后kill掉所有没有这个tag的所有实体

  给你所有的道具加上自定义NBT,然后给带有这个NBT的所有实体加上一个tag,再kill掉所有没有这个tag的实体

  给物品实体设置 PickupDelay,不可拾起。

  允许捡起,但是直接清除物品,并根据stat.pick.xxx判据和stat.drop.xxx判据来触发功能

  如果不允许实体物品形式,那么直接kill掉所有物品即可。

  该系统的基本思路至此结束。虽然这个系统看起来很简单,但是如果你道具很多的话,你最后做出来的系统不会很小。以我个人的经验看,做地图实际上比拼的是细节。因为玩家很少看你做了多少很黑科技但是毫无玩法可言的东西,而是看你的图整体表现和细节涉及。记住一句话:一个BUG=一万个BUG。

  PS:在此非常感谢我的世界玩家acordome的分享。

  以上就是我的世界1.9简单易懂的CD系统详解。更多精彩尽在游戏园我的世界专区。

  相关攻略推荐:

  我的世界Bcd码除法器装置 bcd领域新成果展示

  我的世界1.8.x方块概念ocd材质包下载

  我的世界刷CD工厂制作教程 超简易刷cd教学

  我的世界1.7.10如何解决刷CD机苦力怕不掉入坑中的问题

  我的世界1.9简单易懂的CD系统详解。废话就不多说什么了,那下面给大家分享的则是我的世界1.9版本中CD系统的介绍哦~那不了解的玩家不妨进来看看下面的详细介绍吧!希望对大家有所帮助。

  这次给大家发一个通俗易懂的CD系统,相信可以对正在做PVP/PVE地图的各位提供一些便利。

  在下文中,你不会看到多么高深的指令逻辑,但是你可以看到整个系统的设计思路,以及完善和优化的过程。老手们觉得无聊可以点击右上角离开,同时也欢迎大家指正文中的错误。

  本文所有指令适用于Minecraft 1.9以上版本,写的时候最新版本是1.10.2,请知悉。

  本文所涉及的命令方块都是高频指令链,即以循环型命令方块(RCB)开头,后续全是连锁型命令方块(CCB),以保证指令的逻辑性和连贯性。

  在开始贴指令前,我们先来分析一下核心的功能。一般来说,CD的判定通常都是这么一个过程:

  判断使用物品 -> 设置CD时间 -> CD计时器激活 -> 冷却完毕补给

  需要注意的是,由于每个人的CD是单独计算的,因此我们不能够使用全局计时/操作,选择器和记分板的合理运用才是正确的解法。

  我们首先来谈谈触发方式。过去有很多种触发方式,例如右键、Q等等,1.9以后还可以用副手触发,与之对应的检测方法有很多,但是主要原理都是通过选择器中与记分相关的参数来实现检测,例如:

  stat.useItem.minecraft.carrot_on_a_stick

  这个判据,在你右键胡萝卜钓竿的时候会自动+1分,,假定这个记分项取名叫rightClick,你就可以通过选择器来选中

  #前置指令

  /scoreboard objectives add rightClick stat.useItem.minecraft.carrot_on_a_stick 右键探测

  #高频CB链执行

  kill @a[score_rightClick_min=1]

  scoreboard players reset @a[score_rightClick_min=1] rightClick

  这样的话,当你右键胡萝卜钓竿时,你就挂了。

  另一种是物品栏检测,更准确地说,是检测玩家NBT。例如检测副手有物品就杀掉:

  #高频执行

  scoreboard players tag @a add offhandKill {Inventory:[{Slot:-106b}]}

  replaceitem entity @a[tag=offhandKill] slot.weapon.offhand minecraft:air

  kill @a[tag=offhandKill]

  scoreboard players tag @a[tag=offhandKill] remove offhandKill

  类似的小技巧在这里就不解释了,如果有需要,欢迎提问。

  接下来,我们以模拟手枪的装填为例,来讲解这个CD系统的工作过程:假设你1号位有10个雪球,你可以右键发射,并且可以在任意时候按F来进行装填;当你打完10发雪球后,1号位替换为一个屏障,需要你手动按F来进行装填,装填耗时2秒。

  按照前面所说的,我们可以用判断使用了10发雪球的玩家,或者判断玩家的1号位是否为空。

  第一种办法比较简单,就是使用对应的判据,即stat.useItem.minecraft.snowball。但是这样容易出问题,比如你在不同的快捷栏有相同ID的道具(如雪球),那么你这个判定就会彻底乱掉,所以比较好的办法是使用物品栏检测。正好题设里触发CD时间的条件是雪球或者屏障通过按F键将物品放到副手。

  然后是设置CD时间,前面说到,由于CD是每个人单独计算的,因此不能够进行全局操作,也就是说,不能使用testfor这类指令,因此,我们需要通过记分板操作来实现这个检测。

  这里我们需要一个变量来实现计时,因此:

  #前置

  /scoreboard objectives add snowballCD dummy 装填时间

  当检测到副手有相应物品后,触发的操作是设置CD,同时还要清除物品,如下:

  #高频执行

  scoreboard players tag @a add reload {Inventory:[{Slot:-106b}]}

  replaceitem entity @a[tag=reload] slot.weapon.offhand air

  scoreboard players set @a[tag=reload] snowballCD 40

  scoreboard playesr tag @a[tag=reload] remove reload

  这样就可以完成设置冷却时间

  因为这个例子里面只有一种物品需要这么检测,所以你可以这么写,但是如果你有好多个物品要做CD系统,那么你可以给物品加上自定义NBT来方便管理,这个我会在后面提到。

  接下来我们需要计时。就我个人而言,我更喜欢减分计时,因为CD就是倒计时嘛!减分计时更容易理解。

  但是这个减分不能一直减,到一定的条件以后就要停下来,显然这个条件是分数为0的时候

  #高频执行

  scoreboard players remove @a[score_snowballCD=0,score_snowballCD_min=0] snowballCD 1

  但CD时间结束的时候,记分应当停留在-1,不需要大家进行重置,因为这个-1在后面还会派上用场。

  最后是补给物品,强烈建议大家不要在这里用give,用replaceitem:

  #接上面那条

  replaceitem entity @a[score_snowballCD=0,score_snowballCD_min=0] slot.hotbar.0 snowball 10

  乍一看好像没什么问题,但是聪明的读者一定一下子就发现了,有一个要求还没有实现,那就是打完雪球以后把1号位替换为屏障,那这要怎么做呢?

  前面说了比较简单的方法是为使用了10个雪球的玩家替换物品,同时重置该记分板,另一种办法是检测物品栏。在这里,我选择了物品栏检测,因为这不仅比较可靠,而且不会和其他物品产生冲突。什么冲突呢?比如你有两个快捷栏都有雪球,那物品你使用哪个位置的雪球,只要你打满10发,就会触发替换屏障,这是不科学的,也是不可取的,所以我选择物品栏检测。

  这个检测跟上面的还不一样,是要检测一个位置是否为空,更准确讲,是要检测该位置是不是符合我们预想的道具。

  于是我们可以这么想,给1号位有这个道具的玩家加上tag,再对CD时间为-1(即没有处于冷却时间中的玩家)进行tag反选来检测。

  这么说好像很绕,那我们直接来看:

  #高频执行

  scoreboard players tag @a[score_snowballCD=-1] add withSnowball {Inventory:[{Slot:0b}]}

  replaceitem entity @a[score_snowballCD=-1,tag=!withSnowball] slot.hotbar.0 barrier

  scoreboard plyaers tag @a[tag= withSnowball] remove withSnowball

  这样就完成了整个功能。

  如果只是一个小模组的话,这样也许已经可以了,但是实际制作地图你需要考虑很多很多的东西,接下来,我们来对上述指令进行完善和优化——

  首先,我们要引入clear指令,来防止玩家刷道具。就像上面的系统,玩家只要打开物品栏把雪球换到其他位置就可以获取到屏障,进而可以触发一次装填来刷道具,这是我们不希望看到的,于是我们要在replaceitem之前先clear。

  其次,我们要把CD计时放到补给之前。

  并且,为了不和其他道具产生冲突,同时又不能使系统过于庞大,我们可以选择对道具加上自定义NBT,来统一操作。

  由于是物品栏检测,所以最后并没有使用雪球使用判定。当然我也会给出另一种需要到雪球使用判定的场景,这个在后面会讲到。

  下面是完整的指令

  #前置记分板

  /scoreboard objectives add snowballCD dummy 装填CD

  /scoreboard players add @a snowballCD 0

  #高频执行

  scoreboard players remove @a[score_snowballCD_min=0] snowballCD 1

  clear @a[score_snowballCD=0,score_snowballCD_min=0] snowball -1 64 {reload:1}

  replaceitem entity @a[score_snowballCD=0,score_snowballCD_min=0] snowball 10 0 {reload:1}

  //装填判定

  scoreboard players tag @a[score_snowballCD=-1] add reloadAmmo {Inventory:[{Slot:-106b,tag:{reload:1}}]}

  replaceitem entity @a[score_snowballCD=-1,tag=reloadAmmo] slot.weapon.offhand air

  scoreboard players set @a[score_snowballCD=-1,tag=reloadAmmo] snowballCD 40

  scoreboard players tag @a[tag=reloadAmmo] remove reloadAmmo

  //防改位判定

  scoreboard players tag @a[score_snowballCD=-1] add withSnowball {Inventory:[{Slot:0b,tag:{reload:1}}]}

  clear @a[score_snowballCD=-1,tag=!withSnowball] snowball -1 64 {reload:1}

  clear @a[score_snowballCD=-1,tag=!withSnowball] barrier -1 64 {reload:1}

  replaceitem entity @a[score_snowballCD=-1,tag=!withSnowball] slot.hotbar.0 barrier 1 0 {reload:1,display:{Name:"按 F 重新装填"},HideFlags:63,ench:[]}

  scoreboard players tag @a[tag=withSnowball] remove withSnowball

  最后的防改位判定,对于不需要判定装填的系统,可以把其中的replaceitem那一条换成设置CD时间的指令。就我个人而言,我觉得最后防改位判定是这个CD系统的重点。原因是有时候服务器会因为卡顿没有在CD=0的瞬间补给物品,下一刻,你的CD就变成-1了,却没有得到物品补给,整个人就会傻掉。

  各位可以再看看另一种情形:

  假设2号位有3个鸡蛋,如果数量不足3,则每3秒补给1个。

  这个比较好判定,直接用相应的判据即可,完整指令如下:

  #前置指令

  /scoreboard objectives add eggUse stat.useItem.minecraft.egg 使用了鸡蛋

  /scoreboard objectives add eggCD dummy 鸡蛋CD时间

  /scorebard players add @a eggCD 0

  #高频执行

  大家可以看到,实际上就算没有最后的几条指令,也照样可以工作的……所以说这个判定属于非必要、但是是细节层面的设计。

  再来一个例子:3号位有16个雪球,打完后等30秒自动补给。

  这个跟第一个比较不一样了,它的物品ID和数量跟1号位互相冲突,因此之前那种 判断玩家使用了多少个雪球然后触发设置CD时间 的方法不可取。考虑到1号位已经有雪球,3号位的雪球还必须是打完了才能进行CD设置,所以我们需要这么来写。

  完整指令如下:

  #前置指令

  /scoreboard objectives add snowballUse stat.useItem.minecraft.snowball 雪球使用判定

  /scoreboard objectives add snowbllCD2 dummy 第2个雪球CD

  #高频执行

  scoreboard players set @a[score_snowballUse_min=1,tag=snowballSelected] ramItemCD 600 {SelectedItemSlot:2}

  clear @a[score_ramItemCD_min=600] snowball -1 64 {ramItem:1}

  scoreboard players tag @a[tag=!snowballSelected] add snowballSelected {SelectedItem:{id:"minecraft:snowball",Count:1b,tag:{ammo:2}}}

  scoreboard players tag @a[score_snowballUse_min=1,tag=snowballSelected] remove snowballSelected

  //CD计时与补给

  scoreboard players remove @a[score_snowballCD2_min=0] snowballCD2 1

  clear @a[score_snowballCD=0,score_snowballCD2_min=0] snowball -1 64 {ammo:2}

  replaceitem entity @a[score_snowballCD2=0,score_snowballCD2_min=0] snowball 10 0 {ammo:2}

  //防改位判定

  scoreboard players tag @a[score_snowballCD2=-1] add withSnowball2 {Inventory:[{Slot:2b,tag:{ammo:2}}]}

  scoreboard players tag @a[score_ snowballCD2=-1] remove withSnowball2 {Inventory:[{Slot:-106b,tag:{ammo:2}}]}

  clear @a[score_ snowballCD2=-1,tag=!withRamItem] snowball -1 64 {ammo:2}

  scoreboard players set @a[score_ramItemCD=-1,tag=!withSnowball2] ramItemCD 600

  scoreboard players tag @a[tag=withSnowball2] remove withSnowball2

  瞧!这是多么通俗易懂又好用的CD系统!

  也许这时候会有朋友说,如果东西丢出去一部分又捡回来怎么办?这样也可以刷物品啊!

  好,接下来我们来解决这个问题。

  你需要明确一点:

  你的地图是否允许物品以实体形式存在?

  这个问题关系到你是否需要对整个系统的道具进行修改。如果允许实体物品存在,那么你可以选择这几种做法:

  对所有不需要kill的实体物品添加一个tag,然后kill掉所有没有这个tag的所有实体

  给你所有的道具加上自定义NBT,然后给带有这个NBT的所有实体加上一个tag,再kill掉所有没有这个tag的实体

  给物品实体设置 PickupDelay,不可拾起。

  允许捡起,但是直接清除物品,并根据stat.pick.xxx判据和stat.drop.xxx判据来触发功能

  如果不允许实体物品形式,那么直接kill掉所有物品即可。

  该系统的基本思路至此结束。虽然这个系统看起来很简单,但是如果你道具很多的话,你最后做出来的系统不会很小。以我个人的经验看,做地图实际上比拼的是细节。因为玩家很少看你做了多少很黑科技但是毫无玩法可言的东西,而是看你的图整体表现和细节涉及。记住一句话:一个BUG=一万个BUG。

  PS:在此非常感谢我的世界玩家acordome的分享。

  以上就是我的世界1.9简单易懂的CD系统详解。更多精彩尽在游戏园我的世界专区。

  相关攻略推荐:

  我的世界Bcd码除法器装置 bcd领域新成果展示

  我的世界1.8.x方块概念ocd材质包下载

  我的世界刷CD工厂制作教程 超简易刷cd教学

  我的世界1.7.10如何解决刷CD机苦力怕不掉入坑中的问题

热门搜索

手游排行榜

  • 最新排行
  • 最热排行
  • 评分最高