本帖最后由 hhttll 于 2015-7-25 23:53 编辑

这是我的第二个插件,请各位多多支持,如果有什么BUG,欢迎提出来。

相信在座的很多服主看了我这个插件的名字一定是一头雾水了 —— 完全搞不清楚这个是干嘛的。我第一次把这个插件介绍给我的一个管理员的时候,他也像各位一样,完全不知道这个插件有什么卵用;但是当用了一圈下来以后,他觉得这个插件还是挺强大的。那么就让我来介绍一下这个插件到底是什么,到底怎么用。在介绍使用方法前,先来说一下这个插件能做什么:

  - 给玩家随机的带有NBT标签的物品。
  - 可调整几率的红石随机器。
  - 跨世界红石传递。
  - 用指令带动红石。
  - 制作永远用不完的发射器。
  - 以及很多你可能需要但是却无法用原版红石完成的功能。


可能许多人已经发现了,这个插件的许多功能都和红石搭边。没错,这个插件就是一个拓展原版红石功能的插件。不过,如果你现在把插件下载下来,装上,你肯定搞不懂怎么用,所以接下来的篇幅就让我来介绍一下这个尺寸只有 10KB 的插件。


基本原理:
管理员通过指令创建一些“组”,再用指令添加一些“位置”(可以在不同的世界,但是世界名字中不能有逗号)以不同的“身份”(身份为source或target)加入到创建的组中(同一个“位置”可以同时存在于不同的组中,甚至可以多次存在于同一个组中)。然后用命令方块(你自己输入也可以,但是主要还是推荐用命令方块)来执行这些组以达到各种目的。在默认情况下(reverse 模式后面说),系统会遍历指定组内的所有身份为target的位置(身份为target的位置后面简称target,同理,身份为source的位置后面简称source),对于每一个target,系统随机从所有的该组的source中挑选一个复制一份并替换到这个target。听了上面这段话,我相信所有人 —— 除了智商500+的人 —— 现在一定特别想说一句话:什么鬼?不要担心,现在就让我拿实例来解释一下。

实例 1:饥饿游戏的随机箱子
Minecraft 里玩饥饿游戏(如果不知道,我这边简要介绍一下:就是一大堆人传送到一个地图里面,然后围成一个圈,不能移动,倒计时30秒(这个随便),然后就能移动了,这个地图里面有很多的箱子,每次游戏,箱子里面都有不同的补给品。玩家要利用这些补给品击杀其他玩家,成为最后一个人,然后就赢了 —— 其实就是一个服务器提供武器的PVP大赛 233)相信各位都不陌生,但是相信大家用的都是插件版的饥饿游戏。因为如果用红石自己做,每局箱子里面的随机物品就会变得非常蛋疼 —— 必须一个一个手动添加或者编写非常非常复杂的/setblock命令。由于我非常喜欢饥饿游戏,但是却不想用那种现成的饥饿游戏插件,但是又解决不了随机箱子的问题,就写了这个插件,所以这也是我写这个插件的初衷。So,现在拿饥饿游戏来做范例再合适不过了。
首先,我们先来创建一个组,叫做 HG (名字不重要,区分大小写,HG 是 The Hunger Games 的简写)。那么就输入:
  1. /saa group create HG
复制代码
我们来看一下这个指令的组成:
  - saa: 指令的前缀,所有本插件的指令以saa开始。
  - group: 组,表示要进行组相关的操作。
  - create: 创建,表示将要进行创建组操作。
  - HG: 组名,表示要创建的组的名字。
运行完后,我们会受到一条确认消息:

这样子就算是创建完了,如果不放心的话就输入:
  1. /saa group list
复制代码
组成:
  - saa: 指令的前缀,所有本插件的指令以saa开始。
  - group: 组,表示要进行组相关的操作。
  - list: 列表,表示要列出所有的组。

可以看到已经有了HG这个组了。
组创建完成以后,就要搞有哪些奖励了。放置若干个箱子,每个箱子里面放上一批物品(就是一个组合,运行后,地图里面的那些箱子就会整个替换为你放置的每一批的物品,如果看不懂这句话就往后看结果)。我这边放置了3个箱子,第一个箱子里面放1个钻石剑,第二个箱子里面放5个苹果,第三个箱子里面放一套钻石护具(随便弄弄,当然正式搞得时候注意平衡性。)



好了,然后就要把它们以source身份添加到HG组里面去了。在OP模式下或者拥有saa.admin权限节点的条件下,无论创造还是生存,手持木棍,左键单击第一个箱子(创造模式下手持木棍将不会破坏方块,而是进行选择操作)。这时候,你会看到左下角一行绿字:已选择。

这时候,系统已经记录了你选择的方块是哪个,如果不放心,可以输入:
  1. /saa info
复制代码
组成:
  - saa: 指令的前缀,所有本插件的指令以saa开始。
  - info: 信息,表示你要查看选择信息。

好了,可以看到选择应该是正常了。这时候输入:
  1. /saa source HG
复制代码
组成:
  - saa: 指令的前缀,所有本插件的指令以saa开始。
  - source: 表示要将当前选择的位置以source身份添加。
  - HG: 表示要将当前选择的位置添加到HG组。

看到添加完成就说明添加成功了。

然后再次输入:
  1. /saa info
复制代码
来确认是否添加成功,

可以看到后面又多了一个追踪信息,显示这是HG组中的一个source。
对着后面那2个箱子做同样的操作,就不截图了。
这时候我们可以跑到饥饿游戏的地图里面了,因为我是本地调试,所以没有什么饥饿游戏的地图,那么我就象征性地跑到很远的地方 —— 末地。

什么...有条末影龙?!/killall一下...

嗯,很好,然后放4个箱子(其实放什么都可以,因为这4个位置会被source替换),表示在饥饿游戏地图里面的4个奖励箱子。

然后用木棍选择一个箱子,输入:
  1. /saa target HG
复制代码
组成:
  - saa: 指令的前缀,所有本插件的指令以saa开始。
  - target: 表示要将当前选择的位置以target身份添加。
  - HG: 表示要将当前选择的位置添加到HG组。
然后再次输入:
  1. /saa info
复制代码
来确认是否添加成功,

可以看到已经添加成功了,身份是target。用同样的方法添加剩下3个箱子,不截图了。
好了,终于到了最后一步,执行这个组,输入:
  1. /saa run HG
复制代码
组成:
  - saa: 指令的前缀,所有本插件的指令以saa开始。
  - run: 运行,表示要运行一个组。
  - HG: 表示要运行HG组。

可以看到,运行成功了,依次处理了4个target,我们打开4个箱子看一下里面有什么:
其中一个放的是苹果,两个放的是钻石剑,还有一个放的是钻石套。(没什么好截图的...)
我对这个结果表示非常满意,让我来解释一下为什么会有这个结果:首先它会遍历每一个target,到第一个target,它就随机从那3个source中选择1个出来,比如选了苹果,然后它把这个苹果的箱子替换到了target的位置,这也就是为什么第一个是苹果。至于为什么有两个钻石剑,是因为遍历到第2、3个target的时候,随机的结果都是装钻石剑的那个source,所以自然会有两个装的都是钻石剑。因此运行/saa run之后,所有的箱子装的东西都一样的可能性也是有的,不过几率很小。好了,如果到这里,你对这个插件的基本了解都没有,那么你真的没救了。如果大概看懂了,就请看下一个实例 —— 跨世界红石传递。

实例 2:跨世界红石传递
这并不是这个插件的初衷,但是意外地发现居然还有这个功能。由于单人区块加载问题,所以这里的演示在同一个世界,如果要跨世界传递,方法也是一样的,但是得保证区块在加载。先来看布局:

然后是3个紫色方框框起来的位置的身份信息:
A:

B:

C:

原理:当踩下踏板时,红石激活下面那个命令方块,执行组ON,然后遍历ON组的TARGET,当然只有一个,然后随机挑选一个SOURCE,当然也只有一个,于是就把B位置的那个红石块替换到了A位置。松开踏板后,那个非门启动,激活上面那个命令方块,执行组OFF,然后遍历OFF组的TARGET,还是只有一个,然后随机挑选一个SOURCE,当然也还是只有一个,于是把C位置的那个玻璃替换到了A位置。那个玻璃其实是可以替换为(空气在内)的任何不发出红石信号的方块的。有人可能会说,这个setblock也行啊,对此我只想说,setblock不能跨世界好不好...而且还要计算坐标,麻烦、、


实例 3:红石随机器 —— reverse 介绍
reverse 并不是反转 target 和 source,而是遍历的对象从 target 换为 source。因为如果我们要做红石随机器(输入一个信号,在多个输出端中随机一个输出)遍历 输出端的那几个 target,替换为红石块或是玻璃,将会导致的后果是:有多个红石块的出现或者一个都没有。因此,我们需要遍历 source(假定为一个红石块),然后随机在一个 target 输出,这样就可以保证有且只有一个输出了。要想遍历 source 而不是 target,只需要在 run 指令后面加上一个 reverse 即可。例如:
  1. /saa run random reverse
复制代码
组成:
  - saa: 指令的前缀,所有本插件的指令以saa开始。
  - run: 运行,表示要运行一个组。
  - random: 表示要运行random组。
  - reverse: 表示要以reverse模式运行。
好了介绍完机制请看成品图(目前这个是无论输入多长时间的红石信号,都只会在任意一个输出端输出短短一个信号,这个机器稍稍经过修改就可以变成输出端的信号持续到输入端的信号结束为止,再次触发输入端就会再随机一个输出端发出持续信号,至于如何修改,请各位自己动动脑筋,提示:和上例特别类似的方法)。

身份信息如下:
A:

B:

C:

原理,踩下踏板后,运行random组,遍历所有的source,当然只有一个B位置的红石块,然后随机分配到四个A的玻璃中的一个。红石块放置完成之后,触发各自向左的红石线并向下传递到一起的那条竖着的那条红石线。向左的红石线完成输出。竖着的红石线触发底下的命令方块,执行组clear,依次遍历4个target,每个target都从仅有的一个source(即C位置)中随机一个,当然随机到的是玻璃,这样替换掉那四个A(其中3个应该原来就是是玻璃,剩下的一个就是random组放置的红石块)。

其他功能展望
相信各位看得出来,这个插件是提供了一套很基础的功能,然后通过一系列的组合完成了许许多多的功能。这个插件到底能做哪些事,我也不知道,但是我想在这里提示一下各位以研发出更多的功能:一个方块可以为A组的target,又是B组的source,这样可以完成2次传递,有什么用,我没想出来;一个方块可以是A组的多次source,这样被选择的几率也大大增加了;这个插件相当于1.7.2里面弱化的clone指令,但是可以跨世界;这个插件可以复制带NBT标签的物品;由于这个插件记录的是位置而不是选择时的方块,它可以用来实时检测某个位置的方块。上述功能看上去很乱,但是相信各位第一次看到计分板时也觉得很乱,用着用着就发现了新的功能,就不怎么乱了。所以我坚信,这个插件是一个能改变MC界的插件。←口出狂言2333.

命令表
/saa help 查看帮助信息。
/saa group list 列出所有组。
/saa group create <组名> 创建一个新的组。
/saa group remove <组名> 删除一个组,同时会删除所有在这个组内的方块的身份。(在别的组内的身份不影响)
/saa source <组名> 将当前选择的位置以 source 身份添加至某个指定的组。
/saa target <组名> 将当前选择的位置以 target 身份添加至某个制定的组。
/saa remove [组名] 将当前选择的这个方块从指定的某个组中删除身份。如果不指定组,将会删除在所有组内的身份。
/saa info 查看当前选择的方块和该方块在各个组内的身份。
/saa run <组名> 运行某个组。
/saa run <组名> reverse 以reverse模式运行某个组。reverse模式的介绍请看实例3。


权限
saa.admin 默认OP。访问整个插件所有命令的权限以及使用木棍选择方块的权限。

关于配置
本插件无配置,全指令操作。

关于漏洞提交
提交漏洞或者建议不要用评分,你用评分我怎么回复你...

兼容性测试
本插件仅在1.7.2进行测试,理论支持所有主流版本(这次的数据读写用的java自带的,1.8应该不会有问题了)。

下载地址
最新版
SCAutoAllocation_V1.0.jar(多广告)
SCAutoAllocation_V1.0.jar(少广告)
您使用多广告的链接下载,我可以拿到一点点钱,但是如果用少广告的链接下载,我一分钱也拿不到。所以,请各位用多广告的链接下载,谢谢。不使用无广告的百度云的原因有两个:1、百度云不能统计下载次数。2、度婊先不限速,收集了大量的资源,现在开始限速了,买会员才能满速,这种行为我表示强烈的愤怒。

原创插件分享出来不容易,所以...还有一件最重要的事情...
求金粒人气!主要是人气!