【思路】免穷举网易我的世界可选、可多人同时使用的雪球互相传送



好,做一个互传,但现在我们的思路是白茫茫的一片,我们得想想,互传的原理是什么,无非就是,把一个人传送到另一个人,思路结束,随后思考传送由谁发起,由谁接受,确定好了之后,互传不就有了吗,执行把发起者传送到接收者就结束了。我想你已经会做了
【申明】
此为网易版
计分板snow设置为执行扔雪球后加分,平常为0,在执行选择玩家时可以到
10、11、12、13、14、15、16、17、18、19、20【10用于发起一次执行,使ID重新分配最新ID】
计分板ID执行分配ID,如我分配10人玩家依次为1、2、3、4、5、6、7、8、9、10
计分板项目直接跟数字表示分数,如snow10,表示计分板snow,分数10;
按照玩家的使用习惯区分抬头为【确认】,低头为【拒绝】,


【拿该如何将自己与对方联系起来呢?】
【计分板snow11..20代表执行发起传送的玩家,以下简称【发起】】
【计分板ID1..10代表接受传送的玩家,以下简称【接受】】

当【接受】于snow10处执行分配ID(即,刷新功能),从snow11开始对应ID1,snow12对应ID2,以此类推。。。。。。我们即可得到一种映射状态,
在数学里,映射是个术语,指两个元素的集之间元素相互“对应”的关系,为名词。映射,或者射影

(引用:百度百科词条解释)
这样,我们就可以将【发起】与服务器的每一位玩家创建起联系,通过扔雪球进行【接受】的选择;举个例子,当我们【发起】通过雪球移动到snow11时,我们进行的抬头,低头一系列的视角移动即可通过选择器(rx,rxm,ry,rym)进行检测,以达到我们【发起】要通知对方的意图,此时【接受】即可操作对方的传送请求。


【问题解疑】
同时,新的问题又诞生了,如何防止串线呢?
即【发起】发起传送后,有另一名玩家进入了接受系统,想要截胡【发起】的传送,但这是不现实的,在snow与ID建立映射(一对一)的情况下,ID与sonw也同时建立了(一对一)链接;我们再举个例子,也就是说,我们设计的传送功能在snow11发起后,只能由ID1来接受,杜绝了截胡的风险。

如何防止ID1【第三者,滑稽】在【发起】想要到达snow12状态下发起传送至ID2【接受】不被截胡呢?
我们可以设置【发起】在选择【接受】时,增加一个标签,那在什么情况下增加标签呢?当然是在【发起】抬头时增加标签,此时标签就表示【发起】已选定,在【发起】已选定后【接受】才会有效果即可


【部分功能指令】

分配ID:
scoreboard objectives add ID dummy/*激活一次*/
scoreboard players set @a ID -1/*循环,无条件,保持开启*/
scoreboard players operation @a[scores={ID=-1}] ID -= @a ID/*连锁,有条件,保持开启*/
#负负得正分配ID
/*上述三条指令可以达到从0分配至最大人数减1*/
execute @a[scores={ID=0}] ~~~ scoreboard piayers add @a ID 1/*连锁,有条件,保持开启*/
/*第四条指令可以让ID从1分配至最大人数*/

显示指令,
titleraw @a title/subtitle/actionbar {"rawtext":[{"text":"文本"}]}
json有score-selector-text-translate(以及配套使用的with)

显示所有人
execute @a[scores={snow=10}] ~~~ title @s actionbar
§6抬头刷新,请在刷新后使用
§7 §3 @a[scores={ID=1}]
§7 §3 @a[scores={ID=2}]
§7 §3 @a[scores={ID=3}]
§7 §3 @a[scores={ID=4}]
§7 §3 @a[scores={ID=5}]
§7 §3 @a[scores={ID=6}]
§7 §3 @a[scores={ID=7}]
§7 §3 @a[scores={ID=8}]
§7 §3 @a[scores={ID=9}]
§7 §3 @a[scores={ID=10}]
/*循环,无条件,保持开启*/

文本颜色有
§0 黑 #000000-§1 深蓝 #000054-§2 绿 #005400-§3 碧绿 #005454-
§4 红 #540000-§5 粉 #540054-§6 橙 #7F5400-§7 灰 #545454-
§8 深灰 #2A2A2A-§9 淡蓝 #2A2A7F等等

