Hello大家好,好久不见Long time no see how are you?
这一次我将教大家如何制作全自动牧场!完全可以挂机繁殖哦!
首先我们需要一个发射器,64个小麦,一个下界之星,丢到一起便会给你一本叫做spawn的书,把书本丢出去即可召唤。
然后会刷出一个
之后我们带上绿宝石,选择货币数目,就可以让他工作啦!(我不会告诉你他手上的小麦可以拿走然后无限刷的)
点击刷出栅栏的话(那个最长的蓝色的字体),就会在有资源的牧场主刷出栅栏,方便围栏!
现在的牧场主还不会工作,只有当附近有可以繁殖的生物时才会工作
任何可以繁衍的生物(除豹猫狼这些帮助人的外)都可以哦!
这些生物都是可以的!
有时候你如果丢出了2本Kill,那么一旦他们堆叠就会损失一本Kill,怎么办?用手撸了牧场主即可。。。
不仅仅是这样,您可以召唤多个牧场主,在不同的地方进行工作,他们有着独立的资源也就是说你给牧场主a64个绿宝石,b32个,他们之间不会影响!
2.思路分析&核心原理(X1)
首先还是用最简单的方法:
- entitydata @e[type=Sheep] {}
这时会说:
- [19:37:31] 数据标签未更改:{DropChances:[0:0.085f,1:0.085f,2:0.085f,3:0.085f,4:0.085f,],Age:0,UUIDLeast:-4618480467231505568L,Attributes:[0:{Name:"generic.maxHealth",Base:8.0d,},1:{Name:"generic.knockbackResistance",Base:0.0d,},2:{Name:"generic.movementSpeed",Base:0.23000000417232513d,},3:{Name:"generic.followRange",Base:16.0d,Modifiers:[0:{Name:"Random spawn bonus",UUIDLeast:-9042086803578269536L,Operation:1,Amount:0.005889469616381579d,UUIDMost:4697804841568651493L,},],},],Motion:[0:0.0d,1:-0.0784000015258789d,2:0.0d,],Health:8s,HealF:8.0f,Fire:-1s,Invulnerable:0b,DeathTime:0s,ForcedAge:0,AbsorptionAmount:0.0f,Equipment:[0:{},1:{},2:{},3:{},4:{},],InLove:0,OnGround:1b,HurtTime:0s,UUIDMost:1012396528339667404L,HurtByTimestamp:0,Dimension:0,Air:300s,Color:0b,Pos:[0:-55.001462884135556d,1:4.0d,2:-1635.9861097729147d,],CanPickUpLoot:0b,PortalCooldown:0,PersistenceRequired:0b,Sheared:0b,Leashed:0b,FallDistance:0.0f,Rotation:[0:224.29837f,1:0.0f,],}
注意其中的Age和InLove
Age:距离繁殖的剩余时间,负数表示未成年
InLove:寻找配偶的时间,交配后会变为0
引自Minecraftwiki。
所以我们要利用这2个NBT。
首先我们创建dummy变量1,2,3,4,InLove
虽然空白kongbaiyo说过尽量不要用数字和汉语变量,但是只是汉语变量无法探测而已,算了。。。
变量:1为丢出去的物品探测,2为探测牧场主附近是否有可以繁殖生物,3为stats探测玩家有没有足够的绿宝石,4为符合要求的可以繁殖的生物,InLove是显示和探测牧场主的资源。
- scoreboard players set @e[type=Item] 1 1 {OnGround:1b,Item:{id:minecraft:nether_star,Count:1b,Damage:0s}}
- scoreboard players set @e[type=Item] 1 2 {OnGround:1b,Item:{id:minecraft:dispenser,Count:1b,Damage:0s}}
- scoreboard players set @e[type=Item] 1 3 {OnGround:1b,Item:{id:minecraft:wheat,Count:64b,Damage:0s}}
然后以他们三个为中心杀了他们如果有输出就给book即可。
- scoreboard players set @e[type=Item] 1 4 {OnGround:1b,Item:{id:minecraft:book,Damage:0s,Count:1b,tag:{ench:[{}],display:{Name:"Spawn",Lore:["Use Q"]}}}}
附魔的book只要输入{ench[{}]}即可。这样就变成了唯一。
把丢出的刷出牧场主的书加分,然后以他为中心刷出牧场主。
- execute @e[type=Item,score_1=4,score_1_min=4] ~ ~ ~ summon ArmorStand ~ ~ ~ {Equipment:[{id:minecraft:wheat,Count:1b},{id:minecraft:diamond_boots},{id:minecraft:diamond_leggings},{id:minecraft:diamond_chestplate},{id:minecraft:skull,Damage:3s}],ShowArms:1b,CustomName:"1",DisabledSlots:2039326,NoBasePlate:1b,NoGravity:1b}
- tellraw @p {text:"感谢您使用全自动牧场机!站到一个牧场主旁边,点击以下文字就可以启动啦!货币是一个绿宝石/两只动物。",color:green}
- tellraw @p {text:" 1/2 |",color:red,clickEvent:{action:run_command,value:"/setblock -125 5 -1504 redstone_block"},extra:[{text:" 4/8 |",color:red,clickEvent:{action:run_command,value:"/setblock -125 5 -1505 redstone_block"}},{text:" 8/16 |",color:yellow,clickEvent:{action:run_command,value:"/setblock -125 5 -1506 redstone_block"}},{text:" 16/32 |",color:yellow,clickEvent:{action:run_command,value:"/setblock -125 5 -1507 redstone_block"}},{text:" 32/64 |",color:green,clickEvent:{action:run_command,value:"/setblock -125 5 -1508 redstone_block"}},{text:" 64/128 |",color:green,clickEvent:{action:run_command,value:"/setblock -125 5 -1509 redstone_block"}},{text:" 显示牧场主的资源数 |",color:green,clickEvent:{action:run_command,value:"/scoreboard objectives setdisplay sidebar InLove"}},{text:" 关闭显示 |",color:red,clickEvent:{action:run_command,value:"/scoreboard objectives setdisplay sidebar"}},{text:" 在正在运行的牧场主旁边放置围栏(确保周围没有方块)",color:blue,clickEvent:{action:run_command,value:"/setblock -125 5 -1510 redstone_block"}}]}
为什么放置栅栏不直接execute呢?因为2个execute在tellraw命令里面会让命令失效(bug?)。
放置红石块在某处激活。
- kill @e[type=Item,score_1=4,score_1_min=4]
杀了spawn书
以下是如何进行交易。
- /stats block -125 5 -1497 set AffectedItems @p 3
- /clear @p emerald 1 0
注意clear的第一个是变量damage,后面的才是数量。这样就可以知道玩家有多少绿宝石了,之后用execute探测即可,有输出就扣除玩家绿宝石然后加分。
下面是如何让生物繁殖(最重要!)
- execute @e[type=ArmorStand,name=1,score_InLove_min=1] ~ ~ ~ scoreboard players set @e[type=!Player,r=10] 4 1 {Age:0,InLove:0}
- execute @e[type=!Player,score_4_min=1,c=2] ~ ~ ~ scoreboard players set @e[type=ArmorStand,score_InLove_min=1,name=1,c=1] 2 1
第一个就是把可以繁殖的生物(只有他们有这两个NBT)加分,如果牧场主旁边有这种生物,那么把牧场主加分并探测。
- scoreboard players remove @e[type=ArmorStand,name=1,score_InLove_min=1,score_2_min=1] InLove 1
移除所有的牧场主资源1分,如果可以的话,输出:
- execute @e[type=ArmorStand,score_2_min=1,name=1] ~ ~ ~ entitydata @e[type=!Player,score_4_min=1,r=10,c=2] {InLove:1000000000,Age:0}
这个c=2貌似没有作用打不打无所谓。。。
这样可以让那些生物获得繁殖的欲望,默认的InLove是500,但是这里不能设置为500,因为如果是单数的生物,那么有一只就包含欲望但是不能繁殖,这样的话当他的欲望到0时候又会扣分然后产生欲望,一直循环到有生物和他交配。所以数字要大!
如果可以,那么输出:
- scoreboard players reset @e[type=!Player] 4
- scoreboard players set @e[type=ArmorStand,name=1,score_2_min=1] 2 0
重置所有牧场主和生物,防止生物过多导致崩溃。
OK啦,上面就是所有原理,由于苦逼学生党没有那么多时间讲解所以就说到这里,如果不懂可以私信问我,我会一一解答。
如果您耐心地看到这里,那么存档您可以拿去研究了:
@zwh007
@贰逼