本帖最后由 1582952890 于 2017-9-16 20:45 编辑
1. 插件介绍
把图片直接导入地图上显示的插件大家都见得多了,那在地图上直接作画呢?
如果你以前没见过能在地图上画画的插件,那这款插件就能满足你的猎奇欲望!
如果你以前觉得用方块堆像素画很抖M,没事,这个插件更抖M!
想象一下,在Minecraft里面写生,是什么样的感受,难道你不想试一下吗?
http://v.youku.com/v_show/id_XMTUwOTAzOTMwNA==.html
想在纯原版的服务器里玩街机游戏?可能吗?可能!这个插件就帮你实现!
想在Minecraft中开游戏机厅?想拥有个人电脑?这个插件就帮你实现!
不要三四千,不要一两千,更不需要九九八!!
github:
https://github.com/aegistudio/MapPainting
spigotmc:
https://www.spigotmc.org/resources/map-painting.19823/
(本插件全部免费,但为了确保作者不会弃坑,精神上的鼓励还是需要的。。。
可以的话github上求个小星星,spigotmc上给个五星,作者会很开心然后更的更快,更牛逼了!
)
2. 如何画画?
2.1 创建画布
想要画画,没有画布怎么行!
你的地图就是你的画布。
你可以拿着一张已经用过的地图(不能是空白地图),把他变成一张画布。
或者你可以直接输入创建指令,但这需要输入/mpp confirm指令进行确认。
然后手里拿着画布,输入/mpp create <画布类型> <画布名称>。
图中创建了类型为normal的128x128静态方形画布。
然后回车,如果成功会有提示。
你也可以不拿着用过的地图就创建一个新的画布!
但为了确保你的服务器的地图数量不会爆炸,这个操作需要一次确认。
|
2.2 删除画布
当你不想要一个画布的时候,你可以输入destroy命令,让他变成一张普通的地图:
- 输入/mpp destroy <画布名称>,等提示可以删除时,输入/mpp confirm就可以了。
- 手里直接拿着那张画布,输入/mpp destroy,等提示可以删除,再输入/mpp confirm。
(注意你需要mpp.manager权限,或者你是画布的拥有者且有mpp.destroy权限,才可以执行删除画布操作!)
|
2.3 画画!
要画画,首先把画布镶嵌到展示框里面。
然后拿起染料在上面一抹!(目前是用染料,以后可能会变)。
就是这么简单。
|
2.4 将画送给别人
当你创建了一幅画的时候,你就是这张画的拥有者,但是你可以将这张画的所有权转交给别人。
当你需要转交所有权时,你可以:
- 输入/mpp chown <receiver> <name>,receiver是你需要转交给的人,name是画的名称。
- 手里拿着画,然后输入/mpp chown <receiver>。
(注意你需要mpp.manager权限,或者你是画布的拥有者,才可以执行转移所有权操作!)
这是一条危险指令,你还需要输入/mpp confirm才能实际地转移。
|
2.5 让你的小伙伴和你一起画!
当你的小伙伴拿起画笔在你图上画时,你会发现他根本无法画。
这是当然的了,要是谁都能在你的画上面乱涂,那还得了?
不过你还是可以让你的小伙伴和你一起画的,只需要一条指令。
当你想要你的小伙伴和你一起画的时候,你需要为你的画添加画家:
输入指令/mpp chmod <+/-painter>... [<name>]。其中+表示把玩家添加为画家,-表示把玩家从画家队伍里移除。
把画拿在手上,直接输入/mpp chmod <+/-painter>...。
可以一次性指定多个画家,例如输入/mpp chmod +zhangsan +lisi -wangwu,之类的。
(注意你需要mpp.manager权限,或者你是画布的拥有者,才可以执行增删画家操作!)
这样你的小伙伴就能和你一起画了。
|
2.6 你需要更多的颜色吗?
当你在使用染料的时候,你会不会觉得,染料只有16种颜色,而Minecraft的地图有144种颜色,那画不出这么多中颜色岂不是很浪费?
不,你可以用染料合成颜料,颜料再进行勾兑,直到调出你满意的颜色为止。
颜料有两种混合方法:加水的和不加水的。
当加水的时候,需要放入一个水桶和2~8个染料或颜料。
当不加水的时候,2~9个染料或颜料。
两种合成方法,颜料(和水桶)的顺序都是随机的。
输出的颜料是离当前颜料颜色最相近的染料的图标。
我们可以进行这样一个实验:首先需要准备黄色和青色染料。
猜一下,这两种颜色会合成什么颜色?左下角是黄色,右上角是青色。
你可以不加水来合成颜料,这时颜料的颜色是左右两种颜色的平均,且数量为所有颜料之和。
这种情况是你把原来的颜料磨碎,然后均匀混合的结果。
这种情况常常用于调节颜料的深浅,但不利于调节颜料的颜色。
如果你希望调节颜料的颜色的话,请加入水。
加水之后,颜料的颜色为加入的颜料的颜色之和,但只输出一个颜料,相当于把颜料进行了勾兑。
合成之后,水桶会变成空桶,而不会消耗。
然后,把颜色画出来!看一下是不是和你想象中的一样?
|
2.7 合成颜料桶!
使用颜料来回涂抹填充是已经很费劲的事情。俗话说,工欲善其事,必先利其器。
除了颜料以外,你还可以使用方便的工具,比如说,颜料桶。
首先,你需要一桶牛奶(也可以是颜料桶),然后,你需要一个颜料。然后把他们放到合成栏里面。排列顺序随意。
(注意,这个过程后在合成栏的牛奶不会变成铁桶而是直接消失,所以别指望用这个来刷物品)
合出来了之后,就要对可怜的目标下手了,比如图中这个方形,我们只要轻轻的对着里面的白色区域一按。
就是这么简单。
注意:请不要食用颜料桶中的颜料,请不要食用颜料桶中的颜料,请不要食用颜料桶中的颜料。
重要的事情需要说三次。
|
2.8 哎呦!画错了!
常在河边走,哪有不湿鞋?相信各位玩家都有一不小心手抖了的经历。
如果被抹掉的地方非常简单,拿出颜料把它擦掉就可以了,如果画掉的地方比较复杂,那相信你已经气不打一处来了。
不过不用怕,我们有undo指令!
像图中那样吧,假设我们想撤销那条向下画的线,我们只需要输入/mpp undo。
可能你会发现你撤销的不明显,就像图中那样。别怕,按上调出上一条指令,然后再undo。往复几次。
渐渐地你就可以回退到原来的状态了。
顺便与undo对应的还有redo指令,如果你undo多了,可以用redo来重做被撤销的操作。
|
2.9 提高像素风
使用/mpp create normal指令创建的画布默认是128*128大小的,这也是Minecraft里面一张地图的分辨率。
但是很多时候我们绘制像素画不需要这么高的分辨率,这样绘制低分辨率的画的时候非常麻烦。
不用怕,当你需要绘制像素风更加浓烈的画时,你可以指定normal画布的分辨率。
你只需要使用指令/mpp create normal <画布名称> <分辨率>,就可以获得更低分辨率的画了。(图中画布名称为pixellike,分辨率为16)。
分辨率的取值范围为1~128,而且为整数。
当你创建了低分辨率的画布时,你会发现绘制低像素画会变得更加简单!
|
2.10 拷贝画布
所谓拷贝/克隆就是获得一张和原来一模一样但是完全独立的画。
使用拷贝操作可以完全保留原有的两张画,对一张的修改不会影响另一张。
输入/mpp create clone <新画布的名称> <原有画布的名称>就可以拷贝一张画。(如图,我把一张名为pixellike的画拷贝为newPixelLike。)
通过这么一条简单的指令,就可以完全拷贝一张原有的画。
对拷贝之后的画的修改不会影响原来的画!
|
3. 如何玩游戏?
3.1 加载游戏
3.2 如何设计一个脚本游戏?(
开发者专题)
这是一个开发者专题,在进入之前请确保你有一定的编程能力。
如果只有我一个人写游戏那太没意思了,大家一起玩才有意思!
所以我决定开放API,大家都可以写。
首先我来讲述一下进行游戏时应该遵循的设计思路。
当然你可以不按照我的思路设计,但如果你按照我的思路写的话,你会获得我的API的无敌加速开发buff。
最好能看得懂UML。看不懂也没关系,可以看下面的文字。。。
你设计的游戏应该由一系列状态组成,并且为有限状态机(FSM)的结构。考察图上面的这个游戏。
当游戏开始的时候,游戏会无条件进入标题界面(Title),这时玩家可以选择开始游戏(startGame),或者显示排名(seeRanking)。
当玩家在玩游戏(Game),游戏结束之后,会进入GameOver界面。进入GameOver界面后,会查看玩家是否取得了高分。
如果取得了高分,就让玩家输入自己的名字,然后进入排行榜。否则直接进入排行榜。
在排行版可以通过选择返回标题界面(backToTitle),再次进入标题界面(Title)。
当你确定好游戏的状态之后,你就可以开始添加动作(action)了。
每个状态都可以有三类动作:entry动作,do动作和exit动作。
所谓entry动作是指,进入这个状态的动作。比如图中,几乎每个状态都有entry动作,动作都是显示对应的界面。
所谓do动作是指,在这个状态中需要做的事情。比如在Game状态,就需要更新游戏数据和更新游戏的画面。
所谓exit动作是指,退出这个状态的动作。比如在GameOver状态中,退出时需要判断玩家的分数是否达到了游戏的排行榜。
当你按照完成上面这两步设计之后,你就可以按照我的思路进行具体的编码了。
接下来讲述一下大致的API结构。
当你使用脚本API时,你能交互的对象主要有三个:
回调表(Callback):你的脚本将函数注册到回调表中,这样当发生外部事件(例如玩家输入、游戏刷新时),就会调用你注册的函数。你也可以通过回调表切换状态。
图形(Graphic):你的脚本将修改图形来实现画面的显示。
卡带(Cassette):你的脚本把数据存放到Cassette中,确保游戏中断并恢复之后,能保存之前的状态。
至此,或许你还不明白按照我的思路来设计游戏,将会得到什么好处,甚至连如何进行编码都不知道。
不过不用担心,接下来的三个专题将会分别对这些内容进行详细的讲解!
|
3.3 脚本如何与游戏进行交互?(
开发者专题)
当你开始编程之前,首先最需要知道的,是脚本如何和游戏进行交互。
当你输入了一条/mpp create script指令之后,到生成对应画布,开始游戏之间,究竟发生了什么?
我们先从这个画布从来没在你的服务器上存在过开始吧。(它对应的是图中的起始状态)
编译
当你敲入/mpp create script指令之后,你就正式进入了脚本的状态转换了,你进入的第一个状态叫编译(compile)。
所谓编译,就是验证你的脚本有没有语法错误,如果你的脚本编译失败(compileFailed),那就会导致脚本直接创建失败。
重启
接下来,由于你是第一次创建画布,所以你会进入一个叫重启(reboot)的状态。
所谓重启,就相当于按下关闭游戏的电源,进入重启状态之后,会调用你的脚本的main函数!
你要在你的main函数中,完成对卡带的查看和初始化,回调表的初始化,等等。
(当然你现在还不知道卡带和回调表是什么,这些将会在后面的专题中解释)
进入工作状态
重启完成后,你的插件就会开始工作了,进入工作(working)状态。
你的脚本的状态刷新是通过回调表完成的。
- 例如当游戏刻更新时,就会调用你脚本注册在回调表中的tick类型函数。
- 当玩家点击画布时,就会调用你脚本注册在回调表里的hotspot类型函数。
- 你的脚本也可以有内部的状态转换,例如画面切换等。这时你可以通过告知回调表状态转换,回调表会调用注册的entry类型和exit类型函数。
发生中断/挂起
当MapPaiinting插件被禁用,也就是当服务器重启或关闭时,就会进入中断(interrupt)状态。
当发生中断的时候,你脚本的所有信息,包括当前显示的画面,当前的回调表中注册的函数,当前的内部状态,以及你放在卡带中的数据,都会保存!
而且在中断的时候,你的脚本如果正确编写了的话,基本无法知道当前是否发生了中断。
从中断/挂起恢复
当MapPainting被再度启用时,也就是服务器重启完成或者再度开启时,就会从中断状态再度进入编译状态。
在中断状态和编译状态之间,如果你修改了原来的脚本的话,就会编译你修改之后的脚本。
再度恢复工作
如果你的脚本没有编译错误的话,你的脚本会重新进入工作状态。
但是进入工作状态之前,是不会再进入重启状态的,也就是说,你的main函数未经要求的话,是不会被调用第二次的。
进入工作状态之后,会恢复上次保存的画面,中断表以及卡带,继续执行。如果正常的话,你的游戏会从上次中断之后继续执行。
|
3.4 使用回调表(
开发者专题)
回调表是脚本注册相应的回调函数,供发生特定的事件的时候调用的对象。
你可以在脚本中访问callback对象来访问插件的回调表,也可以使用简写i来访问访问。
回调表的作用域对于脚本来说是全局的,不必预先声明就可以调用的。
注册回调函数
使用
//下面两个中任意一个均可
callback.<type>(<group>, <paramList>);
callback.group(<group>).<type>(<paramList>);
的语法,可以把函数注册到回调表中。
其中<type>是回调表的类型,<group>是回调表组名称(下面有说明,可以为null),<paramList>是具体的参数列表。
插件可以注册到回调表的函数主要有四类:hotspot,tick,entry,exit。
hotspot类型
[指定画布某一方形区域为热区域,当用户点击这一块区域的时候,就会调用注册的回调函数。
//下面两个中任意一个均可
callback.hotspot(<group>, <name>, <x1>,<y1>,<x1>,<y2>);
callback.group(<group>).hotspot(<name>, <x1>,<y1>,<x1>,<y2>);
参数列表中:
- name:将要被注册的回调函数的名称
- x1:热区域起始点的x坐标。
- y1:热区域起始点的y坐标。
- x2:热区域终止点的x坐标。
- y2:热区域终止点的x坐标。
你注册的hotspot回调函数需要形式如下:
function <name>(x, y, who) {...}
参数列表中:
- x:玩家点击的x坐标。
- y:玩家点击的y坐标。
- who:哪个玩家点击的。
tick类型
当游戏画布发生更新(一般是游戏刻更新)时,就会调用注册的回调函数。
//下面两个中任意一个均可
callback.tick(<group>, <name>);
callback.group(<group>).tick(<name>);
参数列表中:
你注册的tick回调函数需要形式如下:
function <name>() {...}
entry和exit类型
当进入某个状态时,会调用entry类型的函数。
//下面两个中任意一个均可
callback.entry(<group>, <name>);
callback.group(<group>).entry(<name>);
参数列表中:
当退出某个状态时,会调用exit类型的函数。
//下面两个中任意一个均可
callback.exit(<group>, <name>);
callback.group(<group>).exit(<name>);
参数列表中:
你注册的tick回调函数需要形式如下:
function <name>(prestate, poststate) {...}
参数列表中:
- prestate:退出的状态。
- poststate:进入的状态。
回调表组
在前面的例子中可以看到,注册回调函数的时候,你可以将它注册到特定的回调表组中。
注册到某一回调表组中的函数,只有在当前回调表组为该组时,才会发生作用。
你可以通过callback.change(<group>);切换回调表组。其中group是组名。
还记得我们在3.2中讨论的根据状态机来设计游戏么?
在游戏设计游戏的时候,我们将游戏划分为一系列状态,并且规定了不同状态的动作。
在API中,我们一般认为回调组名代表的就是当前的状态。
entry动作对应entry类型的回调函数,exit动作对应exit类型的回调函数。
do动作对应tick类型的回调函数,而各种触发由hotpost来监听,并且通过change函数来转换。
|
3.5 绘制图形(
开发者专题)
图形是当前向用户展现的画面。既然是脚本画布,向用户显示对应的图像是必不可少的。
你可以在脚本中访问graphic对象来绘制图形,也可以使用简写g来访问访问。
图形的作用域对于脚本来说是全局的,不必预先声明就可以调用的。
绘制像素
你可以通过graphic.set(<x>,<y>,<color>);来改变画面中一个像素。
其中x和y是画面的坐标,画面的坐标的原点在画面的左下角!
color是需要改成的颜色。color需要是java.awt.Color类型的。
所以一般而言,绘制像素的函数也写成:graphic.set(<x>,<y>,new java.awt.Color(<r>,<g>,<b>));
获取像素颜色
与绘制像素相对的,你可以通过调用来获取graphic.get(<x>,<y>);像素颜色。
获取的颜色对象是java.awt.Color类型的。
清空画布
有的时候,你可能需要以某种颜色清空整个画面。
通过调用graphic.clear(<color>);,就可以清空画布的内容了。
提交更改
你对画面的修改并不会马上被用户看到(估计你也不想让用户看到你画画的过程)。
当你完成了一次画面的更改的时候,你可以通过调用graphic.repaint();函数向用户显示画面。
|
3.6 使用卡带(
开发者专题)
所谓卡带,就是游戏用于存储数据的地方。
为了保证游戏的数据即使中断也不会被抹消,你需要把数据存放在卡带里。
所有不存放在卡带里面的数据,一旦经过中断/挂起状态,就会丢失!
你可以在脚本中访问cassette对象来访问卡带,也可以使用简写c来访问访问。
图形的作用域对于脚本来说是全局的,不必预先声明就可以调用的。
卡带本质上是一种类json对象,有点类似于Minecraft中的NBT(但又不完全一样)。
你可以完全通过字段访问(cassette.<字段名>)的方式来存取数据。
例如通过cassette.time=10,你就可以把数据10存放到卡带的time字段中,下次访问time就可以获得10,即使服务器经过重启也不会丢失。
目前卡带支持存放任意JSON对象,你可以把一个复杂的JSON对象存放到卡带中,也不会造成数据丢失。
目前支持的JSON对象包含:未定义值/空值、布尔值、整数、长整数、双精度浮点数、字符串、数组、函数(没错,函数)、由前面类型组成的JSON对象。
|
4. 指令
所有指令均以/mpp开头,mpp是MaP Painting的简写。
- /mpp:查看mpp的所有子指令及他们的描述。
- /mpp create <type> <name>:创建一张画布。手里需要拿着一张用过的地图。当手里不拿着地图时,需要进行确认。
- /mpp create normal <name> <1~128>:创建一张覆盖整个地图的方形画布。参数为画布的分辨率。
- /mpp create clone <name> <cloned>:完全拷贝一个已经存在的画布。参数为需要拷贝的画布名称。
- /mpp create wrap <name> [<initWrapped>]:创建一个包裹画布,画布里面的内容可以通过控制指令更换。参数是一开始被包裹的画布名称。
- /mpp create script <name> <script> [<language>]:创建一个脚本画布。参数script是脚本的文件名,language是脚本的语言,默认为ECMAScript。
- /mpp chown <receiver> [<name>]:将手里的画布或者指定名称的画布的所有权转交给别人。其中receiver是要转交的人,name是画布的名字(可选)。
- /mpp chmod <+/-painter>... [<name>]:修改手里或者指定名称的画布的画家队伍。可以一次指定多个画家。painter是画家的用户名,name是画布的名称(可选)。
- /mpp destroy [<name>]:将手里或者指定名称的画布删除。其中name是画布的名称(可选)。
- /mpp pigment <color>:获得指定RGB颜色的颜料。其中color是颜色表达式,参看下面。
- /mpp undo <name>:撤销刚才进行过的操作。可以指定撤销哪个画布的。
- /mpp redo <name>:重做刚才进行过的操作。可以指定重做哪个画布的。
- /mpp list:显示玩家拥有的所有画布。
- /mpp confirm:确认玩家需要执行的危险指令(危险指令以红色标注)。
颜色表达式用于表达颜色,它的格式有两种:
- 专家表达式:虽然是专家其实是最不专家的。这种表达式需要的是颜色的名称,例如red是红,green是绿,等等。可以在配置文件里面自定义。
- RGB表达式:RGB表达式使用16进制的rgb值表达颜色。例如#ffffff表示白色(不是红色,别老想着烧死异性恋),#00ffff表示青色。
5. 配置文件
用英文写插件是基本礼仪,不过有中文配置,覆盖掉原来的config.yml然后reload即可。
- tool:
- pencil:
- tipMessage: 在[$x, $y]处用($r, $g, $b)颜色点了一笔。
- lineMessage: 用($r, $g, $b)颜色从[$x1, $y1]到[$x2, $y2]画了一条线。
- paintBucket:
- fillMessage: 在[$x, $y]使用($r, $g, $b)颜色进行填充。
- palette:
- identifier: §r§t调色物品
- cyan: §r§b§l青色含量:§r
- magenta: §r§d§l洋红色含量:§r
- yellow: §r§e§l黄色含量:§r
- fillBucket: §r颜料桶
- drinkPaintBucket: §k====§r好喝吗?§k=====
- command:
- subcommand:
- create:
- description: 根据给定参数创建一张新的画布。
- onlyPlayer: §c只有玩家可以使用创建画布的指令。
- mapAlreadyBound: 你手里拿着的地图已经和一个画布链接起来了。你可以进行确认来创建一张新的地图。
- canvasAlreadyExisted: §c画布§b$canvasName§c已经存在!
- typeUnsupported: §c画布类型§a$typeName§c在这个服务器上不支持!
- bound: 你成功创建了画布§b$canvasName§r!
- noCreatePermission: §c你没有创建类型为§a$typeName§c的画布的权限!
- subcommand:
- normal:
- description: 一个覆盖整个地图的方形画布。
- invalidFormat: §c你指定的画布大小格式不对!请输入整数!
- outOfRange: §c你输入的画布太大或太小了!
- clone:
- description: 一份指定画布的独立拷贝。
- clonedUnspecified: §c在拷贝之前你需要指定画布的名称!
- canvasNotExists: §c不能拷贝画布§b$canvasName§c!指定的画布§b$canvasName§c不存在!
- notHoldingMap: 你手里没有拿着一张地图。如果你想凭空创建一张画布的话,请进行确认。
- tooManyMap: §c看起来你分服务器上已经有太多的地图了,不能创建新的画布!
- destroy:
- description: 删除一张画布,使得它再度成为一张地图。
- onlyPlayer: §c只有玩家才能在使用删除画布指令时不指定画布名称!
- canvasNotExists: §c不能删除§b$canvasName§c!你指定的画布§b$canvasName§c不存在!
- noPermission: §c你既不是画布§b$canvasName§c的持有者又不是没有画布管理权限!
- unbound: 你成功删除了画布§b$canvasName§r!
- confirm:
- nothingToConfirm: §c你没有需要确认的指令!只有在执行了危险指令之后才需要进行确认!
- pleaseConfirm: 你正在执行一条危险指令!如果你真要执行的话,请输入§e/mpp confirm§r。
- description: 当你执行危险指令之前进行确认。
- chown:
- description: 将你手中的或你指定的画布的所有权转给别人。
- onlyPlayer: §c只有玩家才能在使用变更所有权指令时不指定画布名称!
- canvasNotExists: §c不能变更§b$canvasName§c的所有权,指定的画布§b$canvasName§c不存在!
- ownershipChanged: 你成功地把画布§b$canvasName§r的所有权转给了§9$newOwner§r!
- ownershipGained: 你刚刚获得了画布§b$canvasName§r的所有权!
- notHolding: §c你要么在手里拿着一张画布,要么指定画布的名称!
- noChownPermission: §c你没有权限变更画布啊§b$canvasName§c的拥有者!
- chmod:
- description: 管理你手中的或你指定的画布的画家。
- onlyPlayer: §c只有玩家才能在使用模式变更指令是不指定画布名称!
- canvasNotExists: §c不可以添加或删除§b$canvasName§c的画家!指定的画布§b$canvasName§c不存在!
- painterModified: 你成功管理了画布§b$canvasName§r的画家!
- painterAdded: 你被添加为画布§b$canvasName§r的画家!
- painterRemoved: 你不再是画布§b$canvasName§r的画家了。
- notHolding: §c你要么在手里拿着一张画布,要么指定画布的名称!
- noChmodPermission: §c你没有权限管理画布§b$canvasName§c的画家!
- pigment:
- description: 给玩家一个特定颜色的颜料。
- onlyPlayer: §c只有在线的玩家才能使用颜料指令!
- noPermission: §c你没有使用颜料指令的权限!
- invalidFormat: §c你输入的颜色格式不正确!请输入一个整数!
- list:
- description: 显示你拥有的所有画布。
- noPossess: §c你没有拥有任何画布!
- entry: §b$name§r
- possess: 你拥有的画布有:$list.
- undo:
- description: 撤销你刚才进行的操作。
- nothingToUndo: §c在画布§b$canvasName§c上你没有可以撤销的操作!
- noUndoPermission: §c你没有在画布§b$canvasName§c上撤销权限!
- undoFinish: 你成功地撤销了在画布§b$canvasName§r上§n$memoto§r的操作!
- noModifiedCanvas: §c在撤销之前,你需要指定画布名称或者在某一画布上进行操作!
- canvasNotExists: §c不能在画布§b$canvasName§c上进行撤销!指定的画布§b$canvasName§c不存在!
- redo:
- description: 重做你刚才撤销了的操作。
- nothingToRedo: §c在画布§b$canvasName§c上你没有可以重做的操作!
- noRedoPermission: §c你没有在画布§b$canvasName§c上重做的权限!
- redoFinish: 你成功地重做了在画布§b$canvasName§r上§n$memoto§r的操作!
- noModifiedCanvas: §c在重做之前,你需要指定画布名称或者在某一画布上进行操作!
- canvasNotExists: §c不能在画布§b$canvasName§c上进行重做!指定的画布§b$canvasName§c不存在!
- listing: 正在列出§e$prefix§r的§l子命令§r:
- nextPage: 请输入§e$prefix $nextPage§r来查看更多§l子命令§r。
- lastPage: 这已经是§e$prefix§r的§l子命令§r列表的最后一页了。
- commandsPerPage: 5
- canvas:
- map: {}
复制代码
6. 权限
该插件有两类权限,一类是显式的权限,能在权限配置文件或插件中配置;另一类是隐式的权限,取决于本插件的状态。
- mpp.paint:玩家在他拥有的画布上画画的的权限。默认为true。
- mpp.interact:玩家与任意一张画布交互的权限。默认为true。
- mpp.command:使用/mpp指令的权限。默认为true。
- mpp.create.*:使用/mpp create指令创建任何一种画布的指令。
- - mpp.create.normal:创建类型为normal的画布的指令。默认为true。
- - mpp.create.clone:拷贝已有的画布。默认为true。
- mpp.chown:变更玩家所拥有的画布所有权的权限。默认为true。
- mpp.chmod:管理玩家自己拥有的画布的画家的权限。默认为true。
- mpp.destroy:删除玩家自己拥有的画布的权限。默认为true。
- mpp.undo:在自己拥有的画布上进行撤销。默认为true。
- mpp.redo:在自己拥有的画布上进行重做。默认为true。
- mpp.manager:对任意一张画布使用管理指令的权限。默认为op。
- mpp.pigment:直接使用指令获得某一种颜色的指令。默认为op。
复制代码- mpp.owner:拥有一张画布的权限,当玩家是画布的拥有者时为真,可以使用画布管理指令。
- mpp.painter:在一张画布上使用绘画工具的权限,当玩家在画布的画家列表中时为真。
复制代码
7. 更新日志
1.5.6(去地图化更新)(2016-4-18)
1. 使用挂画物品代替地图物品,再也不需要合成地图和物品展示框了,很开心!
2. API更新,现在画布可以知道自己被放置在什么地方,以及什么时候被从世界中移除。
1.5.3b(颜料桶漏洞修复)(2016-4-4)
- 修复了在1.9.x的版本中合成颜料桶会造成原料和产物都丢失的漏洞。
- 加入了命令自动补全功能,可以自动补全命令和画布名称。
|
1.5.2b(刷新漏洞修复)(2016-4-4)
由于Minecraft服务器本身地图刷新机制的缘故,地图扔到地上时刷新会减慢,影响实时性要求比较高的画布的体验。
本次更新修复了地图刷新漏洞,重写了地图刷新的代码,优化了刷新机制。 |
1.5b(接口更新)(2016-4-2)
- 加入不同的图形算法,脚本和其他插件可以通过资源服务获得对应的算法。
- 加入插件画布服务(PluginCanvasService),其他插件可以通过该接口向MapPainting注册画布,MapPainting为其他画布提供画布的创建、维护等功能。
- 加入插件命令服务(PluginCommandService),其他插件可以通过该接口向MapPainting注册画布命令。支持注册一般的指令、创建指令和控制指令。
- 加入资源管理器(AssetManager),脚本和其他插件可以通过该接口获得算法、字体(待实现)和图像(待实现)等资源。
|
1.4b(脚本更新)(2016-3-23)
- 加入脚本类型的画布。脚本类型的画布可以加载脚本,然后就可以玩游戏。
- 完成最初始版的脚本编程API。脚本可以通过graphics(图形),callback(回调表)和cassette(卡带)与脚本画布进行交互。
- 加入控制命令。玩家可以通过指令来控制画布的内容,譬如画点、画线、填充等。
- 加入包裹类型的画布。可以他通过控制命令切换包裹画布的内容
- 加入颜色表达式,取代原来的rgb参数。
- 支持专家颜色表达式。可以通过颜色名来指定颜色。
- 支持RGB颜色表达式,可以输入颜色的十六进制代码来指定颜色
|
1.3b(操作性更新)(2016-3-19)
- 加入了undo/redo指令,用于对画布上误操作的撤销/重做。
- 允许玩家对绘画操作和填充操作进行撤销/重做。
- 加入了clone指令,使得玩家可以复制一张已经存在的画布。
- 修改了mpp格式,使得mpp文件可以直接在各个服务器之间进行复制迁移。(不兼容以前的版本,深表歉意)
- 可以在不拿着地图的情况下,直接使用create指令创建新的地图。(需要/mpp comfirm进行确认)
- 允许玩家创建不同分辨率的normal类型画布,以适应绘制低分辨率画的需求。
|
(该版本不兼容以前的任何版本,如果有需要迁移的画可以私信开发者提供迁移服务)
1.2b(
颜料更新)(2016-3-14)
- 加入了颜料物品,颜料是特殊的染料。
- 允许直接使用颜料进行混合,组合出不同色彩的颜料。(颜料颜色为24位真彩色)
- 颜料可以像以前的染料一样,直接在地图上进行绘制。(地图颜色取决于地图本身支持的颜色种类,目前为36*4)
- 加入了pigment指令,允许玩家获得指定RGB颜色的颜料。
- 加入了list指令,玩家现在可以查看自己所拥有的画布了。
- 加入了颜料桶物品,颜料桶可以使用颜料和牛奶合成。
- 颜料桶可以在画面中使用,将与被选择颜色相同的附近区域填充为颜料桶颜色。
- 颜料桶可以喝,但是后果自负。
|
1.1b (
所有权更新)(2016-3-12)
- 修正了旋转物品展示框之后绘画出问题的Bug。
- 修正了有时保存画面会出错的bug。(注意不能以1.0b兼容!)
- 加入了confirm指令,当用户需要执行类似destroy等的指令的时候可用!
- 允许用户直接删除他手里的画布(如果有的话)。
- 加入了chown指令,允许玩家变更画布的所有权。
- 加入了chmod指令,允许玩家指定画布的画家(能在画布上画画的人)。
|
(该版本不兼容以前的任何版本)
1.0b(2016-3-11)
- 可以使用create和unbind指令来创建和解绑画布。
- 可以使用和保存normal类型的画布。(目前为128*128的白色背景画布。)
- 可以使用染料作为铅笔工具。
|
A:首先虽然我知道这俩东西,不过我做这个完全是某个姓鸡名排的服主让我做的。啊并不是,是我自己要做的。从代码上我没参考他们的代码,他们的代码也没有我的代码,毕竟他们不能在展示框里面的地图上画画是吧。然后一个导图片到地图里面一个在地图上画画你觉得想法上有什么联系?