<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://mineplugin.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=9032676</id>
	<title>Minecraft插件百科 - 用户贡献 [zh-cn]</title>
	<link rel="self" type="application/atom+xml" href="https://mineplugin.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=9032676"/>
	<link rel="alternate" type="text/html" href="https://mineplugin.org/%E7%89%B9%E6%AE%8A:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/9032676"/>
	<updated>2026-04-24T00:57:49Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://mineplugin.org/index.php?title=Bukkit/%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B&amp;diff=1203</id>
		<title>Bukkit/插件开发教程</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=Bukkit/%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B&amp;diff=1203"/>
		<updated>2015-08-07T17:46:30Z</updated>

		<summary type="html">&lt;p&gt;9032676：​/* Block Manipulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{模板:待翻译}}&lt;br /&gt;
本页面英文原文内容来源 [http://wiki.bukkit.org/Plugin_Tutorial]&lt;br /&gt;
== 介绍  ==&lt;br /&gt;
&lt;br /&gt;
这篇内容丰富的教程旨在帮助你学会如何开发Bukkit插件.这一篇教程不可能完全涉及到Bukkit中所有的可能性,而是最基本的一般概述. 前提是你懂得Java这门语言,并在IDE中设置好你的工作区,此教程介绍了大多数Bukkit插件所必需的语法结构.&lt;br /&gt;
&lt;br /&gt;
== 学习Java  ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;理解这些教程需要具备Java这门编程语言的基本知识.&#039;&#039;&#039;如果你刚开始学习Java或者需要重温一下相关知识，下面有一个并不完整的网站列表可供参考.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;[http://docs.oracle.com/javase/tutorial/ Oracle&#039;s Java Tutorials]&amp;lt;/big&amp;gt; - 官方教程&lt;br /&gt;
*[http://www.java2s.com/Tutorial/Java/CatalogJava.htm Java2s.com] - 教程&lt;br /&gt;
*[http://www.javacoffeebreak.com/java101/java101.html Java 101] - 教程&lt;br /&gt;
*[http://math.hws.edu/javanotes/ JavaNotes] - 免费的在线教科书&lt;br /&gt;
*[http://thenewboston.org/list.php?cat=31 TheNewBoston] - 视频教程.&lt;br /&gt;
&lt;br /&gt;
== 开发环境  ==&lt;br /&gt;
&lt;br /&gt;
在编写一个插件前 (或学习Java前) 你需要配置一个开发者环境，这个包括但不限于安装IDE (Integrated Development Environment，集成开发环境)。接下来的教程中有关于Eclipse上IDE的操作指南。&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;更多信息，请参见 [[Bukkit/插件开发教程-建立工作区|建立工作区]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
你&#039;&#039;&#039;必须&#039;&#039;&#039;下载&#039;&#039;&#039;Java&#039;&#039;&#039;开发者使用的Eclipse构建版本, &#039;&#039;&#039;不是&#039;&#039;&#039; &#039;&#039;&#039;Java EE&#039;&#039;&#039;开发者的版本。 Java EE 开发者的版本不包含此教程需要的Maven支持。&lt;br /&gt;
&lt;br /&gt;
== 新建插件开发项目  ==&lt;br /&gt;
=== 创建一个新的项目 ===&lt;br /&gt;
&lt;br /&gt;
在开始工作之前，你需要先在Eclipse中配置好工作区和文件. 打开Eclipse,然后依次点击&#039;&#039;File -&amp;gt; New -&amp;gt; Project:&#039;&#039;来创建一个新的项目.&lt;br /&gt;
&lt;br /&gt;
[[Image:Newproject.png]] &lt;br /&gt;
&lt;br /&gt;
现在,打开&#039;&#039;Maven&#039;&#039;文件夹, 然后选择&#039;&#039;Maven Project&#039;&#039;.点击next,之后在下一个菜单中选择&#039;&#039;Create a simple project&#039;&#039;, 再次点击&#039;&#039;Next&#039;&#039;:&lt;br /&gt;
如果你看不到&#039;&#039;Maven&#039;&#039;文件夹, 那么你需要[http://eclipse.org/m2e/download/ 下载m2eclipse]&lt;br /&gt;
&lt;br /&gt;
[[Image:Newproject2.png]] &lt;br /&gt;
&lt;br /&gt;
现在，你需要给你的组用户命名，就像下面这样:&lt;br /&gt;
* 如果你拥有一个域名，package则填写逆转的域名地址. &lt;br /&gt;
** 例如: i-am-a-bukkit-developer.com 你的package地址即是com.i_am_a_bukkit_developer [http://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html source]&lt;br /&gt;
** 避免使用一个不属于你自己的域名.&lt;br /&gt;
* 没有域名? 这里有几种方法可供选择。&lt;br /&gt;
*# 在资源管理站点创建一个用户，比如GitHub或是sourceforge&lt;br /&gt;
*#* 对于使用GitHub的用户, 请参照[http://pages.github.com/ 这里的说明] 之后你将获得一个子域名,所以你的package地址是io.github.&amp;lt;username&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
*# 使用你的邮箱.  例如: &amp;lt;username&amp;gt;@gmail.com格式的邮箱应输入com.gmail.&amp;lt;username&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
*# 最不济的方法.：  使用独特的组名命名方式，这应当是你最后的解决方法。&lt;br /&gt;
&lt;br /&gt;
以下几个地址不能作为package中的地址前缀:&lt;br /&gt;
* org.bukkit&lt;br /&gt;
* net.bukkit&lt;br /&gt;
* com.bukkit&lt;br /&gt;
* net.minecraft&lt;br /&gt;
&lt;br /&gt;
完成基础的组名以后，你需要在最后加上插件的名称. 在这里用 GitHub页面作为讲解的实例.  如果你创建了一个名为 &#039;&#039;TestPlugin&#039;&#039;的插件，那么完整的组名是&#039;&#039;io.github.&amp;lt;username&amp;gt;&#039;&#039;, 你的工程名也是 &#039;&#039;TestPlugin&#039;&#039;. 至于版本，默认即可，稍后可以修改。&lt;br /&gt;
完成向导:&lt;br /&gt;
&lt;br /&gt;
[[Image:Newproject3.png]] &lt;br /&gt;
&lt;br /&gt;
如果这是你首次使用Eclipse, 点击右上角的&amp;quot;X&amp;quot; 来关闭Welcome提示页面. 现在，你的窗口视图看起来就像下面的图片这样:&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipsemain.png]] &lt;br /&gt;
&lt;br /&gt;
点击工程名称右边的箭头来进行下一步，现在我们正式开始。&lt;br /&gt;
=== 添加Bukkit API ===&lt;br /&gt;
&lt;br /&gt;
在开发插件之前，你需要添加 Bukkit API库文件到你的项目，作为一个dependency, 你也可以添加其他你想实用的API.&lt;br /&gt;
&lt;br /&gt;
找到项目文件夹中部的&#039;&#039;pom.xml&#039;&#039;并双击进行编辑. 点击&#039;&#039;pom.xml&#039;&#039;中部的 tab,你将会看到下图所示内容:&lt;br /&gt;
&lt;br /&gt;
[[Image:Pomeditor.png]]&lt;br /&gt;
&lt;br /&gt;
如果你想使用Java 6以上版本的语言特性,你需要指定搭建项目的Java版本.复制并粘贴以下内容(设定项目只能使用Java 7及以下的版本)到 &#039;&#039;&amp;lt;/project&amp;gt;&#039;&#039;之前: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    &amp;lt;build&amp;gt;&lt;br /&gt;
       &amp;lt;plugins&amp;gt;&lt;br /&gt;
           &amp;lt;plugin&amp;gt;&lt;br /&gt;
               &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;
               &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
               &amp;lt;configuration&amp;gt;&lt;br /&gt;
                   &amp;lt;nowiki&amp;gt;&amp;amp;lt;&amp;lt;/nowiki&amp;gt;source&amp;gt;1.7&amp;lt;/source&amp;gt;&lt;br /&gt;
                   &amp;lt;target&amp;gt;1.7&amp;lt;/target&amp;gt;&lt;br /&gt;
               &amp;lt;/configuration&amp;gt;&lt;br /&gt;
           &amp;lt;/plugin&amp;gt;&lt;br /&gt;
       &amp;lt;/plugins&amp;gt;&lt;br /&gt;
    &amp;lt;/build&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
你或许想使用其他版本,例如 &amp;lt;code&amp;gt;1.8&amp;lt;/code&amp;gt; 使用Java 8. 请注意 [http://mcstats.org/global/ 根据MCStats数据统计], 大多数服主选择了Java 7, 所以使用Java 8会使许多服务器无法运行你的插件. 如果你使用Java 1.7的特性, Eclipse将会在报错代码&amp;quot;error&amp;quot;中建议你更改语言版本.同意即可.&lt;br /&gt;
&lt;br /&gt;
在位于代码中段的&#039;&#039;&amp;lt;/project&amp;gt;&#039;&#039;之前粘贴以下内容(这段代码告诉Eclipse关于Bukkit&#039;s repository的地址): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    &amp;lt;repositories&amp;gt;&lt;br /&gt;
        &amp;lt;repository&amp;gt;&lt;br /&gt;
            &amp;lt;id&amp;gt;bukkit-repo&amp;lt;/id&amp;gt;&lt;br /&gt;
            &amp;lt;url&amp;gt;http://repo.bukkit.org/content/groups/public/&amp;lt;/url&amp;gt;&lt;br /&gt;
        &amp;lt;/repository&amp;gt;&lt;br /&gt;
    &amp;lt;/repositories&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
然后继续在 &#039;&#039;&amp;lt;/project&amp;gt;&#039;&#039;前粘贴以下内容 (这段代码告诉Eclipse搭建插件的Bukkit版本): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    &amp;lt;dependencies&amp;gt;&lt;br /&gt;
        &amp;lt;dependency&amp;gt;&lt;br /&gt;
            &amp;lt;groupId&amp;gt;org.bukkit&amp;lt;/groupId&amp;gt;&lt;br /&gt;
            &amp;lt;artifactId&amp;gt;bukkit&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
            &amp;lt;version&amp;gt;1.7.2-R0.3&amp;lt;/version&amp;gt;&lt;br /&gt;
            &amp;lt;type&amp;gt;jar&amp;lt;/type&amp;gt;&lt;br /&gt;
            &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;
        &amp;lt;/dependency&amp;gt;&lt;br /&gt;
    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
你也可以修改这里的Bukkit版本.你可以在[http://repo.bukkit.org/content/groups/public/org/bukkit/bukkit/ here]这里通过查看 maven-metadata.xml文件下的版本列表来获取可用的服务端版本号.&lt;br /&gt;
&lt;br /&gt;
当你完成上述步骤后,&#039;&#039;pom.xml&#039;&#039;中的内容应该是这样:&lt;br /&gt;
&lt;br /&gt;
[[Image:Finishedpom.png]]&lt;br /&gt;
&lt;br /&gt;
通过菜单 &#039;&#039;File -&amp;gt; Save&#039;&#039;或者按住 &amp;lt;code&amp;gt;Ctrl + S&amp;lt;/code&amp;gt; 来保存&#039;&#039;pom.xml&#039;&#039;文件 .  之后, 右键项目标题，然后依次选择 &#039;&#039;Maven -&amp;gt; Update Project&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Bukkit Java文档 ===&lt;br /&gt;
&lt;br /&gt;
 如果你曾经使用过Eclipse和Java，你会知道当你将鼠标准心移至class或者 method中的代码部分时，一个含有相关文档内容的黄色小框会弹出来. 这就是（Java的）Java文档。&lt;br /&gt;
 &lt;br /&gt;
 你可以[http://download.oracle.com/javase/6/docs/api/ Oracle website 在线获取]它.。Bukkit同样拥有文档，这些文档内容包含了关于API中method和class的有用描述。&lt;br /&gt;
 &lt;br /&gt;
 你可以在[http://jd.bukkit.org/apidocs/ 这]找到它 (Beta版的Java文档在[http://jd.bukkit.org/beta/apidocs/ 这]找, 新开发出来的Java文档在  &lt;br /&gt;
 &lt;br /&gt;
 [http://jd.bukkit.org/dev/apidocs/ 这]) （明明都一样好吗）。为了在Eclipse里使用Java文档,这样的话当你的鼠标停留在Bukkit的class和method上时，&lt;br /&gt;
 &lt;br /&gt;
 （Bukkit的）Java文档就会冒出来。 &lt;br /&gt;
&lt;br /&gt;
 首先右键在侧边栏里的&amp;quot;Maven Dependencies&amp;quot;下面的Bukkit jar,选择&amp;quot;Properties&amp;quot;.选中窗口左边的&#039;&#039;Javadoc Location&#039;&#039;, 并粘贴如下网址 &lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;http://jd.bukkit.org/apidocs/&#039;&#039;&#039; (或者上面的测试版/最新版 Java文档链接也好) 到&amp;quot;Javadoc URL&amp;quot;下面的输入框内. 就像这样: &lt;br /&gt;
&lt;br /&gt;
[[Image:Bukkitjavadocs.png]] &lt;br /&gt;
&lt;br /&gt;
 点击 &amp;quot;Validate&amp;quot;,然后再点击&amp;quot;OK&amp;quot;就完成了.现在Bukkit Javadocs已经连接到Bukkit提供的资源,同时你也可以通过Eclipse来获得帮助类文档信息了.&lt;br /&gt;
&lt;br /&gt;
=== 创建一个包 ===&lt;br /&gt;
&lt;br /&gt;
 现在你需要创建一个包，它将储存所有我们需要使用的Java类文件. 右键展开&#039;&#039;src/main/java&#039;&#039;折叠并选择 &#039;&#039;New &amp;amp;gt; Package&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
[[Image:Newpackage.png]] &lt;br /&gt;
&lt;br /&gt;
 包名的话，先写上你的组名，然后加个点，再写上你的小写Artifact ID。举例, 如果你的组名是&#039;&#039;io.github.name&#039;&#039;，你的artifact名是 &#039;&#039;TestPlugin&#039;&#039;。&lt;br /&gt;
 &lt;br /&gt;
 你的包名就应该是&#039;&#039;io.github.name.testplugin&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== 创建插件的类文件 ===&lt;br /&gt;
&lt;br /&gt;
既然我们已经建立好了我们的项目，我们接下来可以开始添加类文件以及制作插件了. 插件的主类指的是拓展(extends)JavaPlugin的类文件. 在你的插件中只能有一个类文件拓展JavaPlugin，无论直接还是间接. 先创建你的主类文件并保持名称与插件名一致是个很好的习惯.右键你之前新建的包,并选择&amp;amp;nbsp; &#039;&#039;New &amp;amp;gt; Class&#039;&#039;.你将会创建一个新的类文件，就像下面这样&lt;br /&gt;
&lt;br /&gt;
 package {$GroupName}.{$ArtifactName};&lt;br /&gt;
 &lt;br /&gt;
 import org.bukkit.plugin.java.JavaPlugin;&lt;br /&gt;
 &lt;br /&gt;
 public final class {$ArtifactName} extends JavaPlugin {&lt;br /&gt;
    &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
警告： 插件绝对不应该调用自己的构造函数并实例化&lt;br /&gt;
&lt;br /&gt;
=== 创建plugin.yml ===&lt;br /&gt;
&lt;br /&gt;
你已经创建了项目和主类，如果你想要Bukkit能够加载你的插件，你还必须创建 &#039;&#039;&#039;[[Plugin YAML|plugin.yml]]&#039;&#039;&#039; 文件. 这个文件包含有基础的插件信息，如果缺失这个文件，你的插件也将会失效. 此时你需要右键&#039;&#039;src/main/resources&#039;&#039;. 选择&#039;&#039;New &amp;amp;gt; File&#039;&#039;. 命名为&amp;quot;&#039;&#039;&#039;plugin.yml&#039;&#039;&#039;&amp;quot; 并右键完成新文件的创建.Eclipse会打开默认的文本编辑窗口来显示&#039;&#039;&#039;plugin.yml&#039;&#039;&#039;文件中空白的内容并提供编辑. &#039;&#039;(Hint:&amp;amp;nbsp;如果你想要使得你的工作空间更加规整，关闭文本编辑器并将&#039;&#039;&#039;plugin.yml&#039;&#039;&#039; 文件拖到主工作空间(拖到文件目录的右边) 之后你就可以在eclipse中编辑文件了.)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
有三个基础的内容需要在plugin.yml写明. &lt;br /&gt;
: name:  插件名称. &lt;br /&gt;
: main: [http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.7 插件主类的完整，合法名称] . &lt;br /&gt;
: version: 插件当前版本号. &lt;br /&gt;
&lt;br /&gt;
最简单的 &#039;&#039;&#039;plugin.yml&#039;&#039;&#039; 文件内就像这样&amp;amp;nbsp;: &lt;br /&gt;
&lt;br /&gt;
 name: {插件名称}&lt;br /&gt;
 main: {包名}.{主类}&lt;br /&gt;
 version: {版本号}&lt;br /&gt;
&lt;br /&gt;
 PS:插件的包名经常会包括插件的名称，所以看到这个的时候不要感到惊讶。&lt;br /&gt;
    你的主类是否是你的插件名取决于你之前的命名方式，时刻记住这一点很重要。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;更多例子&#039;&#039;&#039;, 请看[[#Example_Files_and_Templates]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
此时你的插件已经可以被Bukkit加载了,同时服务端日志也会开始记录你的插件. 不过它现在什么用都没有!&lt;br /&gt;
&lt;br /&gt;
== onEnable()和onDisable()方法  ==&lt;br /&gt;
&lt;br /&gt;
这些方法将在插件启用与卸载时生效. 默认情况下，你的插件在被加载时会调用这些方法，所以你可以在这里注册你需要用到的事件和提供一些调试信息. &amp;lt;code&amp;gt;onEnable()&amp;lt;/code&amp;gt; 方法会在插件启用时被调用, 需要包含初始化插件的逻辑语句. &amp;lt;code&amp;gt;onDisable()&amp;lt;/code&amp;gt; 方法会在插件卸载时被调用，需要包含清理(clean up)插件的逻辑语句和连接声明(associated state)。此外，插件可以重写 &amp;lt;code&amp;gt;onLoad()&amp;lt;/code&amp;gt; 方法来在插件载入时执行附加的逻辑语句。&lt;br /&gt;
&lt;br /&gt;
=== onEnable()和onDisable()方法介绍  ===&lt;br /&gt;
&lt;br /&gt;
在前面的章节中，我们在主类创建了&amp;lt;code&amp;gt;onEnable()&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;onDisable()&amp;lt;/code&amp;gt; 方法. 此时，这些代码看起来就像下面这样&lt;br /&gt;
&lt;br /&gt;
 package {$TopLevelDomain}.{$Domain}.{$PluginName};&lt;br /&gt;
 &lt;br /&gt;
 import org.bukkit.plugin.java.JavaPlugin;&lt;br /&gt;
 &lt;br /&gt;
 public final class {$PluginName} extends JavaPlugin {&lt;br /&gt;
     @Override&lt;br /&gt;
     public void onEnable() {&lt;br /&gt;
         // 插件载入时要执行的代码（略）&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     @Override&lt;br /&gt;
     public void onDisable() {&lt;br /&gt;
         // 插件卸载时要执行的代码（略）&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
这些方法已经创建，但目前它们还没有任何作用.&lt;br /&gt;
注意: 不需要添加代码来实现输出信息&amp;quot;{$PluginName} has been enabled!&amp;quot; ，因为bukkit会自动输出此类信息&lt;br /&gt;
有关更多事件的信息请查看 [[Event_API_Reference|这里]].&lt;br /&gt;
&lt;br /&gt;
=== 发送提示信息 ===&lt;br /&gt;
&lt;br /&gt;
 插件能够输出信息至控制台与服务器日志。这是通过调用插件记录器里正确的方法来实现的。首先我们必须调用 &amp;lt;code&amp;gt;getLogger()&amp;lt;/code&amp;gt; 方法来检索该插件的记录器，&lt;br /&gt;
 &lt;br /&gt;
 然后我们就可以开始记录信息了。&lt;br /&gt;
&lt;br /&gt;
我们通过调用&amp;lt;code&amp;gt;onEnable()&amp;lt;/code&amp;gt;方法可以实现输出信息。 我们需要在&amp;lt;code&amp;gt;onEnable()&amp;lt;/code&amp;gt;方法下面插入如下代码：&lt;br /&gt;
&lt;br /&gt;
 getLogger().info(&amp;quot;onEnable has been invoked!&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
在 &amp;lt;code&amp;gt;&#039;&#039;&#039;onDisable()&#039;&#039;&#039;&amp;lt;/code&amp;gt;方法里面，你也可以做类似的事情，不过要改改输出信息。&lt;br /&gt;
&lt;br /&gt;
此时你的主类文件就像这样: &lt;br /&gt;
&lt;br /&gt;
 package {$TopLevelDomain}.{$Domain}.{$PluginName};&lt;br /&gt;
 &lt;br /&gt;
 import org.bukkit.plugin.java.JavaPlugin;&lt;br /&gt;
 &lt;br /&gt;
 public final class {$PluginName} extends JavaPlugin {&lt;br /&gt;
         @Override&lt;br /&gt;
         public void onEnable() {&lt;br /&gt;
             getLogger().info(&amp;quot;onEnable has been invoked!&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
         @Override&lt;br /&gt;
         public void onDisable() {&lt;br /&gt;
         getLogger().info(&amp;quot;onDisable has been invoked!&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== 防止重载后插件失效 ===&lt;br /&gt;
&lt;br /&gt;
你需要知道的是，插件并不只会伴随服务器关闭、启动而重载，你的插件也可能会被其他插件启用、关闭，或是在服务器运行时使用/reload命令. &lt;br /&gt;
假设服务器启动之后一会儿后，你的插件才被启用，这时便是危险的,因为服务器中可能已经有玩家在线、额外的世界被加载以及很多预想不到的不同之处(与&amp;quot;插件同服务器同时加载&amp;quot;的情况相比较). &lt;br /&gt;
&lt;br /&gt;
举个例子来说:&lt;br /&gt;
* 你有一个用来储存HashMap中的玩家登入信息的插件&lt;br /&gt;
* 你希望该信息对所有玩家都可见&lt;br /&gt;
* 一名管理员使用/reload命令&lt;br /&gt;
* 你的插件被卸载，所有储存的数据都丢失了&lt;br /&gt;
* 你的插件被再次启用时，一些玩家已经在线&lt;br /&gt;
* 这些玩家在HashMap并没有储存的信息&lt;br /&gt;
* 你试图重新获得他们的信息，但是失败了!&lt;br /&gt;
&lt;br /&gt;
为了插件重载以后能够正常工作, 你需要在插件启用时加载所有已经在线的玩家的信息并将之储存在HashMap中.&lt;br /&gt;
&lt;br /&gt;
 for (Player player : Bukkit.getServer().getOnlinePlayers()) {&lt;br /&gt;
     playerList.put(player.getName(), playerData(player));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== 监听器  ==&lt;br /&gt;
监听器是一种方法被调用来对事件作出反应的类.所有的监听器使用 org.bukkit.event.Listener接口.更多有关监听器创建的细节,&lt;br /&gt;
:: &#039;&#039; 请查看: [[Event API Reference]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 指令  ==&lt;br /&gt;
&lt;br /&gt;
=== onCommand() 方法  ===&lt;br /&gt;
&lt;br /&gt;
 现在你已经知道如何注册一个事件并做出响应,但是如果你只是想要在命令输入之后做出响应呢? 你可以使用 &amp;lt;code&amp;gt;&#039;&#039;&#039;onCommand&#039;&#039;&#039;&amp;lt;/code&amp;gt;方法.&lt;br /&gt;
 &lt;br /&gt;
 这个代码的作用是当玩家输入“/”时，监听该操作并执行相关语句&amp;quot;/&amp;quot; . 举个例子来说.输入 &amp;quot;/do something&amp;quot; 将会执行 &amp;lt;code&amp;gt;&#039;&#039;&#039;onCommand&#039;&#039;&#039;&amp;lt;/code&amp;gt;方法.&lt;br /&gt;
 &lt;br /&gt;
 此种情况下，因为没有特定的行为被编程，所以并不会发生任何事情。&lt;br /&gt;
&lt;br /&gt;
 请避免使用和bukkit所提供的指令重名的指令, 然后深思你的指令名的唯一性。 &lt;br /&gt;
 &lt;br /&gt;
 例如.指令&amp;quot;give&amp;quot;已经被好几个插件使用了, 如果你执行了另外一个&amp;quot;give&amp;quot;指令, 你的插件将会和这些插件冲突。&lt;br /&gt;
&lt;br /&gt;
 你必须在插件的&amp;quot;plugins.yml&amp;quot;注册你的指令 否则这个方法将不会被触发。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&#039;&#039;&#039;onCommand&#039;&#039;&#039;&amp;lt;/code&amp;gt;方法必须返回一个布尔值（true或false）。 &lt;br /&gt;
 &lt;br /&gt;
 如果返回值是true，你不会看到什么明显的事情发生。 &lt;br /&gt;
 &lt;br /&gt;
 但如果返回值是false，则会返回你的plugin.yml里的&#039;usage:property&#039;然后发送给命令使用者. &lt;br /&gt;
&lt;br /&gt;
当使用 &amp;lt;code&amp;gt;&#039;&#039;&#039;onCommand&#039;&#039;&#039;&amp;lt;/code&amp;gt;方法时, 你需要填写4个参数. &lt;br /&gt;
&lt;br /&gt;
 *&amp;lt;code&amp;gt;&#039;&#039;&#039;CommandSender sender&#039;&#039;&#039;&amp;lt;/code&amp;gt; - 发送命令的对象&lt;br /&gt;
 &lt;br /&gt;
 *&amp;lt;code&amp;gt;&#039;&#039;&#039;Command cmd&#039;&#039;&#039;&amp;lt;/code&amp;gt; - 被执行的指令&lt;br /&gt;
 &lt;br /&gt;
 *&amp;lt;code&amp;gt;&#039;&#039;&#039;String commandLabel&#039;&#039;&#039;&amp;lt;/code&amp;gt; - 被执行指令的别名&lt;br /&gt;
 &lt;br /&gt;
 *&amp;lt;code&amp;gt;&#039;&#039;&#039;String[] args&#039;&#039;&#039;&amp;lt;/code&amp;gt; - 该指令的自变量数组。&lt;br /&gt;
 &lt;br /&gt;
例如.指令 &#039;&#039;/hello abc def&#039;&#039; 中， &#039;&#039;abc&#039;&#039; 会被存放进args[0]中, &#039;&#039;def&#039;&#039; 被存放进args[1]中。&lt;br /&gt;
&lt;br /&gt;
==== 设置命令  ====&lt;br /&gt;
 @Override&lt;br /&gt;
 public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {&lt;br /&gt;
     if (cmd.getName().equalsIgnoreCase(&amp;quot;basic&amp;quot;)) { // 如果玩家输入了/basic则执行如下内容...&lt;br /&gt;
     // 所需要执行的事（此处略）&lt;br /&gt;
         return true;&lt;br /&gt;
     } //如果以上内容成功执行，则返回true &lt;br /&gt;
     // 如果执行失败，则返回false.&lt;br /&gt;
     return false;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 每当使用&amp;lt;code&amp;gt;&#039;&#039;&#039;onCommand&#039;&#039;&#039;&amp;lt;/code&amp;gt;方法时， 在每个方法后面都加上一个 return false; 是一个惯例。 &lt;br /&gt;
 &lt;br /&gt;
 返回false会显示在plugin.yml里设置的usage信息 (看下面). 用这种方法的话，一旦执行出错便会显示usage信息。&lt;br /&gt;
&lt;br /&gt;
 每当方法return一个值的时候，这个方法就会退出，所以return true的时候，在它下面的代码就会被跳过, &lt;br /&gt;
 &lt;br /&gt;
 除非return语句在一个if的嵌套中，或者类似的嵌套情况。 &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&#039;&#039;&#039;.equalsIgnoreCase(&amp;quot;basic&amp;quot;)&#039;&#039;&#039;&amp;lt;/code&amp;gt;代表忽略英文大小写. 在这种情况下,字符串&amp;quot;BAsIc&amp;quot; 和 &amp;quot;BasiC&amp;quot;和 basic相同，代码会被照常执行。&lt;br /&gt;
&lt;br /&gt;
和以前一样，加两行import在你的java文件头&lt;br /&gt;
&lt;br /&gt;
 import org.bukkit.command.Command;&lt;br /&gt;
 &lt;br /&gt;
 import org.bukkit.command.CommandSender;&lt;br /&gt;
&lt;br /&gt;
=== 在Plugin.yml中添加你的指令  ===&lt;br /&gt;
&lt;br /&gt;
你需要添加你的指令到 &#039;&#039;&#039;plugin.yml&#039;&#039;&#039; 文件里. 如下是指令/basic添加到 &#039;&#039;&#039;plugin.yml&#039;&#039;&#039;的例子（请在plugins.yml的末尾添加如下代码）: &lt;br /&gt;
&lt;br /&gt;
commands:&lt;br /&gt;
   basic:&lt;br /&gt;
      description: This is a demo command.&lt;br /&gt;
      usage: /&amp;lt;command&amp;gt; [player]&lt;br /&gt;
      permission: &amp;lt;plugin name&amp;gt;.basic&lt;br /&gt;
      permission-message: You don&#039;t have &amp;lt;permission&amp;gt;&amp;lt;/source&amp;gt; &amp;lt;/code&amp;gt; &amp;lt;/blockquote&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;&#039;&#039;basic&#039;&#039;&#039;&amp;lt;/code&amp;gt; - 指令名称&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;&#039;&#039;description&#039;&#039;&#039;&amp;lt;/code&amp;gt; - 指令描述&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;&#039;&#039;usage&#039;&#039;&#039;&amp;lt;/code&amp;gt; - 在oncommand方法return false后显示的用法提示。尽量简洁, 使别人能够理解指令是什么以及如何使用它。&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;&#039;&#039;permission&#039;&#039;&#039;&amp;lt;/code&amp;gt; - 被一些显示帮助信息的插件使用，用来决定向玩家显示哪个指令（完全不对劲吧！）。&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;&#039;&#039;&#039;permission-message&#039;&#039;&#039;&amp;lt;/code&amp;gt; - 当玩家使用了这个指令而没有权限时输出的信息。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 PS:yml文件使用两个空格作为制表符,使用tab键输入制表符会导致错误。&lt;br /&gt;
&lt;br /&gt;
===控制台指令vs玩家指令===&lt;br /&gt;
&lt;br /&gt;
 你可能注意到了上文的&amp;lt;code&amp;gt;&#039;&#039;&#039;CommandSender sender&#039;&#039;&#039;&amp;lt;/code&amp;gt;参数. &amp;lt;code&amp;gt;&#039;&#039;&#039;CommandSender&#039;&#039;&#039;&amp;lt;/code&amp;gt; 是个Bukkit接口，&lt;br /&gt;
 &lt;br /&gt;
 它有两个（对插件编写者）有用的子类：&amp;lt;code&amp;gt;&#039;&#039;&#039;Player&#039;&#039;&#039;&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;&#039;&#039;&#039;ConsoleCommandSender&#039;&#039;&#039;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
 所以当你编写插件的时候, 确定这个指令从控制台发出后能完全正常工作是十分必要的,&lt;br /&gt;
 &lt;br /&gt;
 那些只能由在线玩家执行的指令 &#039;&#039;只能&#039;&#039; 由一个在线玩家执行。&lt;br /&gt;
 &lt;br /&gt;
 有的插件在判断命令执 行对象不是玩家时仅仅用return进行处理 (比如当有人从控制台发出指令), &lt;br /&gt;
 &lt;br /&gt;
 即便这些指令能够在控制台完美运行（比如改变天气的指令）。&lt;br /&gt;
&lt;br /&gt;
一个判断sender的方法: &lt;br /&gt;
 @Override&lt;br /&gt;
 public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {&lt;br /&gt;
         if (cmd.getName().equalsIgnoreCase(&amp;quot;basic&amp;quot;)) { //如果玩家输入了/basic则执行如下内容...&lt;br /&gt;
             // 所需要执行的事（此处略）&lt;br /&gt;
             return true;&lt;br /&gt;
         } else if (cmd.getName().equalsIgnoreCase(&amp;quot;basic2&amp;quot;)) {&lt;br /&gt;
             if (!(sender instanceof Player)) { //如果sender与Player类不匹配&lt;br /&gt;
                 sender.sendMessage(&amp;quot;This command can only be run by a player.&amp;quot;);&lt;br /&gt;
             } else {&lt;br /&gt;
                 Player player = (Player) sender;&lt;br /&gt;
                    // 所需要执行的事（此处略）&lt;br /&gt;
             }&lt;br /&gt;
                 return true;&lt;br /&gt;
         }&lt;br /&gt;
         return false;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 在这个例子里，指令&#039;&#039;&#039;basic&#039;&#039;&#039;能由任何人发出 - 一个在线的玩家, 或者服务器后台的op. &lt;br /&gt;
 &lt;br /&gt;
 但是指令&#039;&#039;&#039;basic2&#039;&#039;&#039;只能由一个在线的玩家发出. &lt;br /&gt;
&lt;br /&gt;
 大体上说,你应该允许尽可能多的指令在控制台和玩家聊天框里都正常执行. &lt;br /&gt;
 &lt;br /&gt;
 需要在线玩家执行的指令可以使用以上例子中的机制来检测&amp;lt;code&amp;gt;&#039;&#039;&#039;CommandSender&#039;&#039;&#039;&amp;lt;/code&amp;gt;是一个玩家. &lt;br /&gt;
 &lt;br /&gt;
 很多指令广泛依靠于一些玩家的属性（例如可以被tp或被给予物品等等）。&lt;br /&gt;
&lt;br /&gt;
 如果你想更进一步, 你可以对你的指令的自变量做一些额外的检测， 例如传送指令在提供玩家ID的情况下（也只有在这种情况下）可以在控制台被执行。&lt;br /&gt;
&lt;br /&gt;
=== 使用独立的 CommandExecutor class  ===&lt;br /&gt;
&lt;br /&gt;
 以上的例子必须把 &amp;lt;code&amp;gt;&#039;&#039;&#039;onCommand()&#039;&#039;&#039;&amp;lt;/code&amp;gt; 方法放在插件的主类里。&lt;br /&gt;
 &lt;br /&gt;
 对于小插件来说，这是极好的,但如果你要写一个大点的插件,把你的 &amp;lt;code&amp;gt;&#039;&#039;&#039;onCommand()&#039;&#039;&#039;&amp;lt;/code&amp;gt;方法放在独立的类里将会很有意义。&lt;br /&gt;
 &lt;br /&gt;
 幸运的是，这并不难: &lt;br /&gt;
&lt;br /&gt;
*在你的包里创建一个新类. 命名为&#039;&#039;&#039;MyPluginCommandExecutor&#039;&#039;&#039;之类的 (当然，要把&#039;&#039;&#039;MyPlugin&#039;&#039;&#039;替换成你制作的插件的名字)。 这个类 &#039;&#039;&#039;必须&#039;&#039;&#039; 继承Bukkit 的&#039;&#039;&#039;CommandExecutor&#039;&#039;&#039;接口。&lt;br /&gt;
&lt;br /&gt;
*在你的插件的&amp;lt;code&amp;gt;&#039;&#039;&#039;onEnable()&#039;&#039;&#039;&amp;lt;/code&amp;gt;方法中,你需要实例化你创建的命令执行类(CommandExecutor class), 然后做一个像下面一样的调用：&amp;lt;code&amp;gt;getCommand(&amp;quot;basic&amp;quot;).setExecutor(myExecutor);&amp;lt;/code&amp;gt;&lt;br /&gt;
 其中&amp;quot;basic&amp;quot;是我们需要操控的指令, &amp;lt;code&amp;gt;myExecutor&amp;lt;/code&amp;gt; 是我们创建的实例.&lt;br /&gt;
&lt;br /&gt;
废话少说直接吔我例子: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MyPlugin.java&#039;&#039;&#039; (插件的主类): &lt;br /&gt;
 @Override&lt;br /&gt;
 public void onEnable() {&lt;br /&gt;
         // 如果你没有在plugins.yml注册过指令的话，此处会抛出空指针异常！&lt;br /&gt;
         this.getCommand(&amp;quot;basic&amp;quot;).setExecutor(new MyPluginCommandExecutor(this));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;MyPluginCommandExecutor.java&#039;&#039;&#039;（独立CommandExecutor类）: &lt;br /&gt;
 public class MyPluginCommandExecutor implements CommandExecutor {&lt;br /&gt;
         private final MyPlugin plugin;&lt;br /&gt;
 &lt;br /&gt;
         public MyPluginCommandExecutor(MyPlugin plugin) {&lt;br /&gt;
             this.plugin = plugin; // Store the plugin in situations where you need it.&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
         @Override&lt;br /&gt;
         public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {&lt;br /&gt;
             // 和以前一样执行就好…&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 请注意我们是如何把主类里的对象指向&#039;&#039;&#039;MyPluginCommandExecutor&#039;&#039;&#039;的. 这允许我们轻易的使用主类对象的方法（如果我们需要的话）。&lt;br /&gt;
&lt;br /&gt;
 这么做的话, 我们便能更好的组织代码 - 如果 &amp;lt;code&amp;gt;&#039;&#039;&#039;onCommand()&#039;&#039;&#039;&amp;lt;/code&amp;gt; 方法又大又复杂, 它就能被划分为子类，从而不使插件的主类显得凌乱。&lt;br /&gt;
&lt;br /&gt;
 PS：如果你的插件含有多个指令的话, 你需要为每一个指令单独设立一个commandexecutor.&lt;br /&gt;
&lt;br /&gt;
=== 写一个安全的指令 ===&lt;br /&gt;
 当写一个指令的时候,别进行任何假设（很重要）, 例如假设执行者一定是个玩家. 请牢记以下原则:&lt;br /&gt;
&lt;br /&gt;
==== 在命令执行前确定发出者是玩家 ====&lt;br /&gt;
&lt;br /&gt;
使用简单的例子来进行检测:&lt;br /&gt;
&lt;br /&gt;
 @Override&lt;br /&gt;
 public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {&lt;br /&gt;
         if (sender instanceof Player) {&lt;br /&gt;
             Player player = (Player) sender;&lt;br /&gt;
             // do something&lt;br /&gt;
         } else {&lt;br /&gt;
             sender.sendMessage(&amp;quot;You must be a player!&amp;quot;);&lt;br /&gt;
             return false;&lt;br /&gt;
         }&lt;br /&gt;
             // do something&lt;br /&gt;
         return false;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== 检测自变量个数 ====&lt;br /&gt;
&lt;br /&gt;
 别老是认为玩家都能打对正确数量的自变量. &lt;br /&gt;
&lt;br /&gt;
 @Override&lt;br /&gt;
 public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {&lt;br /&gt;
         if (args.length &amp;gt; 4) {&lt;br /&gt;
             sender.sendMessage(&amp;quot;Too many arguments!&amp;quot;);&lt;br /&gt;
             return false;&lt;br /&gt;
         } &lt;br /&gt;
         if (args.length &amp;lt; 2) {&lt;br /&gt;
             sender.sendMessage(&amp;quot;Not enough arguments!&amp;quot;);&lt;br /&gt;
             return false;&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== 在获取玩家之前先检测他们是否在线 ====&lt;br /&gt;
&lt;br /&gt;
 有时你想通过命令发出者打出的ID来获取其他玩家，请确保他们在线再说！&lt;br /&gt;
&lt;br /&gt;
 @Override&lt;br /&gt;
 public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {&lt;br /&gt;
         Player target = (Bukkit.getServer().getPlayer(args[0]));&lt;br /&gt;
         if (target == null) {&lt;br /&gt;
             sender.sendMessage(args[0] + &amp;quot; is not online!&amp;quot;);&lt;br /&gt;
             return false;&lt;br /&gt;
         }&lt;br /&gt;
         return false;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 如果你想对离线玩家进行操作，&amp;lt;code&amp;gt;&#039;&#039;&#039;OfflinePlayer&#039;&#039;&#039;&amp;lt;/code&amp;gt;类提供了基础操作的方法.&lt;br /&gt;
&lt;br /&gt;
== 插件的配置/设置  ==&lt;br /&gt;
Bukkit API 为插件提供了一种简便的方法，用来管理用户自定义的设置。同时，通过这种方法也可以储存数据。&lt;br /&gt;
:: &#039;&#039;详情请查看: [[Configuration API Reference]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 权限  ==&lt;br /&gt;
&lt;br /&gt;
With the new Bukkit API for permissions, they couldn&#039;t be easier. 检测玩家是否拥有权限，可以使用以下代码: &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;if (player.hasPermission(&amp;quot;some.pointless.permission&amp;quot;)) {&lt;br /&gt;
   //执行此段代码(有权限)&lt;br /&gt;
} else {&lt;br /&gt;
   //执行此段代码(无权限)&lt;br /&gt;
}&amp;lt;/source&amp;gt; &amp;lt;/blockquote&amp;gt; &lt;br /&gt;
你也可以检测一个权限节点是否被定义过，(等效于 Java 语言中的&#039;&#039;&#039;null&#039;&#039;&#039;)，使用下面的方法: &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;boolean isPermissionSet(String name)&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
你或许对此抱有疑惑:为什么这段代码中没有任何用户群的信息？因为它们并不是必需的. 之前这段代码想要实现的主要功能之一就是根据用户群格式化聊天信息. 但其实使用权限就可以很容易地完成这项工作.你可以在聊天插件的配置文件中定义权限与前缀的对应关系. 举例来说，&amp;quot;someChat.prefix.admin&amp;quot; 权限可以对应前缀[Admin].当拥有此权限的玩家发出聊天信息时 ，聊天前缀便是[Admin]. &lt;br /&gt;
&lt;br /&gt;
另一个想要实现的主要功能则是给所有拥有权限的在线用户发一条信息.你可以这样做: &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;for (Player player: Bukkit.getServer().getOnlinePlayers()) {&lt;br /&gt;
    if (player.hasPermission(&amp;quot;send.receive.message&amp;quot;)) {&lt;br /&gt;
        player.sendMessage(&amp;quot;You were sent a message&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt; &amp;lt;/blockquote&amp;gt; &lt;br /&gt;
看到这里你可能会问，若是没有权限组我该如何配置玩家的 [[权限]] ？既然 [[Bukkit]] API 本身并没有提供用户组的预设, 你必须通过安装一款权限组插件，像 [[permissionsBukkit]]  这样的插件来帮助你配置用户群. &#039;&#039;&#039;API 只是提供接口而不是提供implementation.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=== 配置权限 ===&lt;br /&gt;
&lt;br /&gt;
If you want more control over your permissions, for example default values or children then you should consider adding them to your &#039;&#039;[[plugin.yml]]&#039;&#039;. This is completely optional, however it is advised. Below is an example permissions config that would be appended to the end of your existing &#039;&#039;plugin.yml&#039;&#039;: &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;permissions:&lt;br /&gt;
    doorman.*:&lt;br /&gt;
        description: Gives access to all doorman commands&lt;br /&gt;
        children:&lt;br /&gt;
            doorman.kick: true&lt;br /&gt;
            doorman.ban: true&lt;br /&gt;
            doorman.knock: true&lt;br /&gt;
            doorman.denied: false&lt;br /&gt;
    doorman.kick:&lt;br /&gt;
        description: Allows you to kick a user&lt;br /&gt;
        default: op&lt;br /&gt;
    doorman.ban:&lt;br /&gt;
        description: Allows you to ban a user&lt;br /&gt;
        default: op&lt;br /&gt;
    doorman.knock:&lt;br /&gt;
        description: Knocks on the door!&lt;br /&gt;
        default: true&lt;br /&gt;
    doorman.denied:&lt;br /&gt;
        description: Prevents this user from entering the door&amp;lt;/source&amp;gt; &amp;lt;/code&amp;gt; &amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Firstly, each permission your plugin uses is defined as a child node of the &#039;&#039;permissions&#039;&#039; node. Each permission can then optionally have a description, a default value, and children. &lt;br /&gt;
&lt;br /&gt;
==== Defaults  ====&lt;br /&gt;
&lt;br /&gt;
By default when a permission isn&#039;t defined for a player&amp;amp;nbsp;&#039;&#039;hasPermission&#039;&#039;&amp;amp;nbsp;will return false. Inside your plugin.yml you can change this by setting the default node to be one of four values: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;true&#039;&#039;&#039; - The permission will be true by default. &lt;br /&gt;
*&#039;&#039;&#039;false&#039;&#039;&#039; - The permission will by false by default. &lt;br /&gt;
*&#039;&#039;&#039;op&#039;&#039;&#039; - If the player is an op then this will be true. &lt;br /&gt;
*&#039;&#039;&#039;not op&#039;&#039;&#039; - If the player is not an op then this will be true.&lt;br /&gt;
&lt;br /&gt;
==== Children  ====&lt;br /&gt;
&lt;br /&gt;
Before now you will probably be used to the * permission to automatically assign all sub permissions. This has changed with the bukkit API and you can now define the child permissions. This allows for a lot more flexibility. Below is an example of how you do this: &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;permissions:&lt;br /&gt;
    doorman.*:&lt;br /&gt;
        description: Gives access to all doorman commands&lt;br /&gt;
        children:&lt;br /&gt;
            doorman.kick: true&lt;br /&gt;
            doorman.ban: true&lt;br /&gt;
            doorman.knock: true&lt;br /&gt;
            doorman.denied: false&amp;lt;/source&amp;gt; &amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Here the &#039;&#039;doorman.*&#039;&#039; permission has several child permissions assigned to it. The way child permissions work is when &#039;&#039;doorman.*&#039;&#039; is set to true, the child permissions are set to their values defined in the &#039;&#039;plugin.yml&#039;&#039;. If however &#039;&#039;doorman.*&#039;&#039; was set to false then all child permissions would be inverted.&lt;br /&gt;
&lt;br /&gt;
=== Setting your own permissions  ===&lt;br /&gt;
&lt;br /&gt;
If you wish to know about developing your own permissions plugins (Ones that actually set permissions) then check out the tutorial on&amp;amp;nbsp;[[Developing a permissions plugin]].&lt;br /&gt;
&lt;br /&gt;
== Scheduling Tasks and Background Tasks  ==&lt;br /&gt;
&lt;br /&gt;
Currently, Minecraft servers operate nearly all of the game logic in one thread, so each individual task that happens in the game needs to be kept very short. A complicated piece of code in your plugin has the potential to cause huge delays and lag spikes to the game logic, if not handled properly. &lt;br /&gt;
&lt;br /&gt;
Luckily, Bukkit has support for scheduling code in your plugin. You can submit a Runnable task to occur once in the future, or on a recurring basis, or you can spin off a whole new independent thread that can perform lengthy tasks in parallel with the game logic. &lt;br /&gt;
&lt;br /&gt;
There is a separate [[Scheduler Programming]] tutorial which introduces the Scheduler, and gives more information on using it to schedule synchronous tasks, and on kicking off asynchronous tasks in Bukkit. &lt;br /&gt;
&lt;br /&gt;
== 方块操控&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
这是一个很容易的方法创建、获取或修改一个方块, 例如当你想要修改往你头上数第五格的方块时, 首先你需要做的是获取你当前的坐标点, 然后往你当前的坐标点的Y轴加上五, 获取目标方块后我们便能够很容易地修改它了, 例子如下:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
@EventHandler&lt;br /&gt;
public void onPlayerMove(PlayerMoveEvent event) {&lt;br /&gt;
    // Get the player&#039;s location.&lt;br /&gt;
    Location loc = event.getPlayer().getLocation();&lt;br /&gt;
    // Sets loc to five above where it used to be. Note that this doesn&#039;t change the player&#039;s position.&lt;br /&gt;
    loc.setY(loc.getY() + 5);&lt;br /&gt;
    // Gets the block at the new location.&lt;br /&gt;
    Block b = loc.getBlock();&lt;br /&gt;
    // Sets the block to type id 1 (stone).&lt;br /&gt;
    b.setType(Material.STONE);&lt;br /&gt;
}&amp;lt;/source&amp;gt; &amp;lt;/blockquote&amp;gt; &lt;br /&gt;
The above code gets the player&#039;s location, gets the block five above it, and sets it to stone. Note that once you have a &amp;lt;code&amp;gt;Block&amp;lt;/code&amp;gt;, there are other things you can do besides set its type. Consult the JavaDocs for more information.&lt;br /&gt;
&lt;br /&gt;
You can use a similar concept to generate buildings and individual blocks programmatically through the use of algorithms. For example, to generate a solid cube, you could use nested &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loops to loop over an entire cube and fill it in. &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void generateCube(Location loc, int length) {&lt;br /&gt;
    // Set one corner of the cube to the given location.&lt;br /&gt;
    // Uses getBlockN() instead of getN() to avoid casting to an int later.&lt;br /&gt;
    int x1 = loc.getBlockX(); &lt;br /&gt;
    int y1 = loc.getBlockY();&lt;br /&gt;
    int z1 = loc.getBlockZ();&lt;br /&gt;
&lt;br /&gt;
    // Figure out the opposite corner of the cube by taking the corner and adding length to all coordinates.&lt;br /&gt;
    int x2 = x1 + length;&lt;br /&gt;
    int y2 = y1 + length;&lt;br /&gt;
    int z2 = z1 + length;&lt;br /&gt;
&lt;br /&gt;
    World world = loc.getWorld();&lt;br /&gt;
&lt;br /&gt;
    // Loop over the cube in the x dimension.&lt;br /&gt;
    for (int xPoint = x1; xPoint &amp;lt;= x2; xPoint++) { &lt;br /&gt;
        // Loop over the cube in the y dimension.&lt;br /&gt;
        for (int yPoint = y1; yPoint &amp;lt;= y2; yPoint++) {&lt;br /&gt;
            // Loop over the cube in the z dimension.&lt;br /&gt;
            for (int zPoint = z1; zPoint &amp;lt;= z2; zPoint++) {&lt;br /&gt;
                // Get the block that we are currently looping over.&lt;br /&gt;
                Block currentBlock = world.getBlockAt(xPoint, yPoint, zPoint);&lt;br /&gt;
                // Set the block to type 57 (Diamond block!)&lt;br /&gt;
                currentBlock.setType(Material.DIAMOND_BLOCK);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
This method will construct a 3D cube or cuboid with the given length and starting point. As for deleting blocks simply follow the same method for creating them but set the ID to 0 (air).&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== (Player) Inventory Manipulation  ==&lt;br /&gt;
&lt;br /&gt;
This section mostly covers player inventory manipulation, but the same applies to chest inventory manipulation as well if you find out how to get a chest&#039;s inventory&amp;amp;nbsp;:P. Here is a simple example of inventory manipulation: &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public void onPlayerJoin(PlayerJoinEvent evt) {&lt;br /&gt;
    Player player = evt.getPlayer(); // The player who joined&lt;br /&gt;
    PlayerInventory inventory = player.getInventory(); // The player&#039;s inventory&lt;br /&gt;
    ItemStack itemstack = new ItemStack(Material.DIAMOND, 64); // A stack of diamonds&lt;br /&gt;
        &lt;br /&gt;
    if (inventory.contains(itemstack)) {&lt;br /&gt;
        inventory.addItem(itemstack); // Adds a stack of diamonds to the player&#039;s inventory&lt;br /&gt;
        player.sendMessage(&amp;quot;Welcome! You seem to be reeeally rich, so we gave you some more diamonds!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt; &amp;lt;/blockquote&amp;gt; &lt;br /&gt;
So inside onPlayerJoin we first make a few variables to make our job easier: player, inventory and itemstack. Inventory is the player&#039;s inventory and itemstack is a ItemStack that has 64 diamonds. After that we check if the player&#039;s inventory contains a stack of diamonds. If the player has a stack of diamonds, we give him/her another stack with inventory.addItem(itemstack) and send a message. So inventory manipulation isn&#039;t actually that hard, if we wanted we could remove the stack of diamonds by simply replacing inventory.addItem(itemstack) with inventory.remove(itemstack) and change the message a little bit. Hopefully this helped!&lt;br /&gt;
&lt;br /&gt;
== Item Manipulation ==&lt;br /&gt;
&lt;br /&gt;
When dealing with items in the code, you use the ItemStack class for looking up and setting all information on that stack.&lt;br /&gt;
&lt;br /&gt;
=== Enchantments ===&lt;br /&gt;
&lt;br /&gt;
To enchant an item you must first know the [http://www.minecraftwiki.net/wiki/Data_values Item Code] and the [http://www.minecraftwiki.net/wiki/Talk:Enchanting#Effect_IDs Effect ID].  Enchantments themselves cannot be instantiated (new Enchantment() won&#039;t work) because they&#039;re abstract, so you must use an EnchantmentWrapper. If you want to enchant items that can&#039;t be enchanted inside normal SMP, use addUnsafeEnchantment() instead of addEnchantment()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int itemCode = 280;  //use the item code you want here&lt;br /&gt;
int effectId = 20;  //use the enchantment code you want here&lt;br /&gt;
int enchantmentLevel = 100;&lt;br /&gt;
&lt;br /&gt;
ItemStack myItem = new ItemStack(itemCode);  //new item of item code&lt;br /&gt;
Enchantment myEnchantment = new EnchantmentWrapper(effectId);  //new enchantment of effect id&lt;br /&gt;
myItem.addEnchantment(myEnchantment, enchantmentLevel);  //enchant the item&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ItemMeta ===&lt;br /&gt;
You can set the display name of an item by doing this.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String myDisplayName = &amp;quot;Awesome Sword&amp;quot;; //use the displayname you want here&lt;br /&gt;
 &lt;br /&gt;
ItemStack myItem = new ItemStack(Material.DIAMOND_SWORD);  //your item&lt;br /&gt;
ItemMeta im = myItem.getItemMeta(); //get the itemmeta of the item&lt;br /&gt;
im.setDisplayName(myDisplayName); //set the displayname&lt;br /&gt;
myItem.setItemMeta(im); //give the item the new itemmeta&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
You can also set the lores of an item. The lores are the small annotations on an item, like &amp;quot;+5 attack damage&amp;quot; on a stone sword.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
List&amp;lt;String&amp;gt; lores = new ArrayList&amp;lt;String&amp;gt;();&lt;br /&gt;
lores.add(&amp;quot;Example lore&amp;quot;, &amp;quot;this one comes on line 2&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
ItemStack myItem = new ItemStack(Material.DIAMOND_SWORD);  //your item&lt;br /&gt;
ItemMeta im = myItem.getItemMeta(); //get the itemmeta of the item again&lt;br /&gt;
im.setLore(lores); //add the lores of course&lt;br /&gt;
myItem.setItemMeta(im); //give the item the new itemmeta&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Maps, and Sets, and Lists, Oh My!  ==&lt;br /&gt;
&lt;br /&gt;
Besides the Map/HashMap classes, Java offers many other data structures. They offer these different classes because there are times when a Map is not the most appropriate. Here&#039;s a separate page for discussing [[Java data structure classes]] in more detail. &lt;br /&gt;
&lt;br /&gt;
=== HashMaps and How to Use Them  ===&lt;br /&gt;
&amp;lt;big&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Keep in mind to never use a player in a hashmap!&#039;&#039;&#039;&lt;br /&gt;
You need to use Strings instead. So use &amp;quot;p.getName()&amp;quot; to add, remove or check if a list contains a player.&lt;br /&gt;
Saving a player as an object causes huge memory leaks.&lt;br /&gt;
&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When making a plugin you will get to a point where just using single variables to state an event has happened or a condition has been met will be insufficient, due to more than one player performing that action/event. &lt;br /&gt;
&lt;br /&gt;
This was the problem I had with one of my old plugins, Zones, now improved and re-named to Regions. I was getting most of these errors because I didn&#039;t consider how the plugin would behave on an actual server with more than one on at any given time. I was using a single boolean variable to check whether players were in the region or not and obviously this wouldn&#039;t work as the values for each individual player need to be separate. So if one player was in a region and one was out the variable would constantly be changing which could/would/did cause numerous errors. &lt;br /&gt;
&lt;br /&gt;
A HashMap is an excellent way of doing this. A HashMap is a way of mapping/assigning a value to a key. You could set up the HashMap so that the key is a player and the value could be anything you want, however the useful things with HashMaps is that one key can only contain one value and there can be no duplicate keys. So say for example I put &amp;quot;adam&amp;quot; as the key and assigned a value of &amp;quot;a&amp;quot; to it. That would work as intended, but then say afterwards I wanted to assign the value of &amp;quot;b&amp;quot; to key &amp;quot;adam&amp;quot; I would be able to and would get no errors but the value of &amp;quot;a&amp;quot; assigned to key &amp;quot;adam&amp;quot; in the HashMap would be overwritten because HashMaps cannot contain duplicate values. &lt;br /&gt;
&lt;br /&gt;
==== Defining a HashMap  ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public Map&amp;lt;KeyType, DataType&amp;gt; HashMapName = new HashMap&amp;lt;&amp;gt;(); //Example syntax&lt;br /&gt;
&lt;br /&gt;
// Example Declaration&lt;br /&gt;
public Map&amp;lt;String, Boolean&amp;gt; pluginEnabled = new HashMap&amp;lt;&amp;gt;();&lt;br /&gt;
public Map&amp;lt;String, Boolean&amp;gt; isGodMode = new HashMap&amp;lt;&amp;gt;();&lt;br /&gt;
&amp;lt;/source&amp;gt; &amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Keep that code in mind because we will be using it for the rest of the tutorial on HashMaps. So, for example lets create a simple function which will toggle whether the plugin has been enabled or not. Firstly, inside your on command function which I explained earlier you will need to create a function to send the player name to the function and adjust the players state accordingly. &lt;br /&gt;
&lt;br /&gt;
So inside on command you&#039;ll need this, the function name can be different but for the sake of simplicity it&#039;s best if you keep it the same. &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;Player player = (Player) sender;&lt;br /&gt;
togglePluginState(player);&amp;lt;/source&amp;gt; &amp;lt;/blockquote&amp;gt; &lt;br /&gt;
This code above will cast the value of sender to player and pass that argument to the function togglePluginState(). But now we need to create our togglePluginState() function. &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public void togglePluginState(Player player) {&lt;br /&gt;
    // Notice how we use the player name as the key here,&lt;br /&gt;
    // not the player object&lt;br /&gt;
    String playerName = player.getName();&lt;br /&gt;
    if (pluginEnabled.containsKey(playerName)) {&lt;br /&gt;
        if (pluginEnabled.get(playerName)) {&lt;br /&gt;
            pluginEnabled.put(playerName, false);&lt;br /&gt;
            player.sendMessage(&amp;quot;Plugin disabled&amp;quot;);&lt;br /&gt;
        } else {&lt;br /&gt;
            pluginEnabled.put(playerName, true);&lt;br /&gt;
            player.sendMessage(&amp;quot;Plugin enabled&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    } else {&lt;br /&gt;
        pluginEnabled.put(playerName, true); //If you want plugin disabled by default change this value to false.&lt;br /&gt;
        player.sendMessage(&amp;quot;Plugin enabled&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt; &amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Now, what this code is doing is checking if the HashMap first contains the key player, so if it has been put into the HashMap, if it is then we check the value of the HashMap key by get(player); if this is true then set value to false and send the player a message, else if the value is false then do the opposite, set the value to true and send a message again. But if the HashMap does not contain the key player then we can assume that this is their first run/use so we change the default value and add the player to the HashMap.&lt;br /&gt;
&lt;br /&gt;
==== More Ideas for HashMaps  ====&lt;br /&gt;
&lt;br /&gt;
A HashMap (or really any kind of Map in Java) is an association. It allows quick and efficient lookup of some sort of &#039;&#039;&#039;value&#039;&#039;&#039;, given a unique &#039;&#039;&#039;key&#039;&#039;&#039;. Anywhere this happens in your code, a Map may be your solution. &lt;br /&gt;
&lt;br /&gt;
Here are a few other ideas which are ideally suited to using Maps. As you will see, it doesn&#039;t have to be data that you store per player, but can be any kind of data that needs to be &amp;quot;translated&amp;quot; from one form to another. &lt;br /&gt;
&lt;br /&gt;
===== Data Value Lookups  =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public Map&amp;lt;String, Integer&amp;gt; wool_colors = new HashMap&amp;lt;&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
// Run this on plugin startup (ideally reading from a file instead of copied out row by row):&lt;br /&gt;
wool_colors.put(&amp;quot;orange&amp;quot;, 1);&lt;br /&gt;
wool_colors.put(&amp;quot;magenta&amp;quot;, 2);&lt;br /&gt;
wool_colors.put(&amp;quot;light blue&amp;quot;, 3);&lt;br /&gt;
   ..&lt;br /&gt;
wool_colors.put(&amp;quot;black&amp;quot;, 15);&lt;br /&gt;
&lt;br /&gt;
// Run this in response to user commands - turn &amp;quot;green&amp;quot; into 13&lt;br /&gt;
int datavalue = 0;&lt;br /&gt;
if (wool_colors.containsKey(argument)) {&lt;br /&gt;
    datavalue = wool_colors.get(argument);&lt;br /&gt;
} else {&lt;br /&gt;
    try { datavalue = Integer.parseInt(argument); }&lt;br /&gt;
    catch (Exception e) {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt; &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Saving/Loading a HashMap  ====&lt;br /&gt;
&lt;br /&gt;
Once you know how to work with HashMaps, you probably want to know how to save and load the HashMap data. Saving and loading HashMap data is appropriate if &lt;br /&gt;
&lt;br /&gt;
*you don&#039;t want an administrator to edit the data manually&lt;br /&gt;
&lt;br /&gt;
*you need to save data in binary format (too complex to organize for YAML)&lt;br /&gt;
&lt;br /&gt;
*you want to avoid parsing block names and/or other objects from freeform text&lt;br /&gt;
&lt;br /&gt;
This is very simple way how to save any HashMap. You can replace HashMap&amp;amp;lt;String, Integer&amp;amp;gt; with any type of HashMap you want. Let&#039;s take an example HashMap with code to save it:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
        HashMap&amp;lt;String, Integer&amp;gt; mapToSave = new HashMap&amp;lt;String,Integer&amp;gt;();&lt;br /&gt;
        public void save(HashMap&amp;lt;String, Integer&amp;gt; map, String path) {&lt;br /&gt;
	try {&lt;br /&gt;
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(path));&lt;br /&gt;
		oos.writeObject(map);&lt;br /&gt;
		oos.flush();&lt;br /&gt;
		oos.close();&lt;br /&gt;
		//Handle I/O exceptions&lt;br /&gt;
	} catch(Exception e) {&lt;br /&gt;
		e.printStackTrace();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ...&lt;br /&gt;
&lt;br /&gt;
save(mapToSave, getDataFolder() + File.separator + &amp;quot;example.bin&amp;quot;);&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
You can see it&#039;s really easy. Loading works very very similar but we use ObjectInputStream instead of ObjectOutputStream ,FileInputStream instead of FileOutputStream,readObject() instead of writeObject() and we return the HashMap. &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public HashMap&amp;lt;String, Integer&amp;gt; load(String path) {&lt;br /&gt;
	try {&lt;br /&gt;
		ObjectInputStream ois = new ObjectInputStream(new FileInputStream(path));&lt;br /&gt;
		Object result = ois.readObject();&lt;br /&gt;
		//you can feel free to cast result to HashMap&amp;lt;String, Integer&amp;gt; if you know there&#039;s that HashMap in the file&lt;br /&gt;
		return (HashMap&amp;lt;String, Integer&amp;gt;)result;&lt;br /&gt;
	} catch(Exception e) {&lt;br /&gt;
		e.printStackTrace();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ...&lt;br /&gt;
&lt;br /&gt;
HashMap&amp;lt;Integer, String&amp;gt; loadedMap;&lt;br /&gt;
&lt;br /&gt;
String path = getDataFolder() + File.separator + &amp;quot;example.bin&amp;quot;;&lt;br /&gt;
File file = new File(path);&lt;br /&gt;
&lt;br /&gt;
if (file.exists()) { // check if file exists before loading to avoid errors!&lt;br /&gt;
	loadedMap  = load(path);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
You can use this &amp;quot;API&amp;quot; for saving/loading HashMaps, ArrayLists, and all Objects which implement Serializable or Externalizable interface.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;/** SLAPI = Saving/Loading API&lt;br /&gt;
 * API for Saving and Loading Objects.&lt;br /&gt;
 * Everyone has permission to include this code in their plugins as they wish :)&lt;br /&gt;
 * @author Tomsik68&amp;lt;tomsik68@gmail.com&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
public class SLAPI&lt;br /&gt;
{&lt;br /&gt;
	public static &amp;lt;T extends Object&amp;gt; void save(T obj,String path) throws Exception&lt;br /&gt;
	{&lt;br /&gt;
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(path));&lt;br /&gt;
		oos.writeObject(obj);&lt;br /&gt;
		oos.flush();&lt;br /&gt;
		oos.close();&lt;br /&gt;
	}&lt;br /&gt;
	public static &amp;lt;T extends Object&amp;gt; T load(String path) throws Exception&lt;br /&gt;
	{&lt;br /&gt;
		ObjectInputStream ois = new ObjectInputStream(new FileInputStream(path));&lt;br /&gt;
		T result = (T)ois.readObject();&lt;br /&gt;
		ois.close();&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/source&amp;gt; &amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Example implementation of this API: &#039;&#039;&#039;I&#039;m skipping some part of code in this source&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public class Example extends JavaPlugin {&lt;br /&gt;
	private ArrayList&amp;lt;Object&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void onEnable() {&lt;br /&gt;
            try {&lt;br /&gt;
		list = SLAPI.load(&amp;quot;example.bin&amp;quot;);&lt;br /&gt;
            } catch(Exception e) {&lt;br /&gt;
                //handle the exception&lt;br /&gt;
                e.printStackTrace();&lt;br /&gt;
            }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void onDisable()	{&lt;br /&gt;
            try {&lt;br /&gt;
		SLAPI.save(list,&amp;quot;example.bin&amp;quot;);&lt;br /&gt;
            } catch(Exception e) {&lt;br /&gt;
                 e.printStackTrace();&lt;br /&gt;
            }&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/source&amp;gt; &amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Note #1: This will work un-modified with almost all well-known Java types like Integer, String, HashMap. It will also work for some Bukkit types as well. If you&#039;re writing your own data object classes, and you may want to save their state using this technique, you should read about Java&#039;s Serializable or Externalizable interface. The only difference between Externalizable and Serializable is, that Serializable automatically takes all of class&#039;s fields and tries to serialize them, while Externalizable allows you to define method for reading and writing the Object. It&#039;s easy to add to your code, and it will make your data persistent with very little work required. No more parsing!&lt;br /&gt;
&lt;br /&gt;
Note #2: This API doesn&#039;t support changes. Once you change something in the class, data files saved with older version of your plugin won&#039;t load correctly. &lt;br /&gt;
&lt;br /&gt;
===== Tips &amp;amp; Examples =====&lt;br /&gt;
&lt;br /&gt;
1.) Simplify your save structure&lt;br /&gt;
&lt;br /&gt;
Try to use as much simple types as possible. E.g. if you want to save player, save their UUID instead. If you want to save world, save its UUID. If you want to save location, save x,y,z world UUID. DO NOT DIRECTLY SAVE BUKKIT TYPES!&lt;br /&gt;
&lt;br /&gt;
2.) Save version number along with data&lt;br /&gt;
&lt;br /&gt;
You should always remember, that you don&#039;t know what you&#039;ll be saving in the same file tomorrow. Will you ever migrate this file because of newer version of your plugin, bukkit, or minecraft? You don&#039;t know!&lt;br /&gt;
&lt;br /&gt;
3.) Migrate older files&lt;br /&gt;
&lt;br /&gt;
If your plugin finds older version of some file, it should update the file accordingly and change version number.&lt;br /&gt;
&lt;br /&gt;
== Metadata  ==&lt;br /&gt;
&lt;br /&gt;
Bukkit is trying to make plugin development as easy as possible, so HashMaps with key of type Player, Entity, World or even a Block were replaced by Metadata. Metadata is some kind of alternative to HashMap. It allows you to add custom &amp;quot;fields&amp;quot; to Players, Entities, Worlds and Blocks. These things are all members of Metadatable class(check [http://jd.bukkit.org/doxygen/de/d59/interfaceorg_1_1bukkit_1_1metadata_1_1MetadataValue.html#ab49975fe013a0626dd29d3b85c63a82f])It works very simply. Everything that is Metadatable holds its own HashMap of Metadata which you have access to. That means, for example, if you&#039;re creating an economy plugin, you would need a HashMap of Player and Float or Double. With Metadata, you don&#039;t have to! You just attach to player new metadata value, and that&#039;s it!&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Why to use Metadata  ===&lt;br /&gt;
&lt;br /&gt;
* Metadata is all handled by Bukkit, which makes it a very good alternative to HashMaps. &lt;br /&gt;
* Metadata can be used to share information between plugins.&lt;br /&gt;
&lt;br /&gt;
=== Why not use Metadata&amp;lt;br&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
* Slightly more difficult to get the value.&lt;br /&gt;
* It is not saved on shutdown (but then again, neither are any Maps that you create).&lt;br /&gt;
&lt;br /&gt;
=== Getting &amp;amp;amp; Setting Metadata  ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setMetadata(Metadatable object, String key, Object value, Plugin plugin) {&lt;br /&gt;
  object.setMetadata(key, new FixedMetadataValue(plugin,value));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Object getMetadata(Metadatable object, String key, Plugin plugin) {&lt;br /&gt;
  List&amp;lt;MetadataValue&amp;gt; values = object.getMetadata(key);  &lt;br /&gt;
  for (MetadataValue value : values) {&lt;br /&gt;
     // Plugins are singleton objects, so using == is safe here&lt;br /&gt;
     if (value.getOwningPlugin() == plugin) {&lt;br /&gt;
        return value.value();&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
  return null;&lt;br /&gt;
}&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Note: If you&#039;re manipulating with numbers, booleans or strings, use convenient method to get the result. For example, you can use asInt(), asString() or asBoolean() instead of value to find out the value.&lt;br /&gt;
&lt;br /&gt;
== Databases  ==&lt;br /&gt;
&lt;br /&gt;
Sometimes flat files aren&#039;t enough for what your looking to do, this is where databases come in. The most common database engines available on Linux/Mac/Windows machines typically run on some flavor of SQL (Structured Query Language).&lt;br /&gt;
&lt;br /&gt;
Software offering SQL allow you to create databases with columns and header to identify to contents of each cell. Think of it as a spreadsheet on steroids, where every column you set up in your database can enforce rules to ensure integrity. Apart from being more organised than a simple custom data file, SQL provides faster access and better searching than flat files. &lt;br /&gt;
&lt;br /&gt;
The SQL standard helps applications like Bukkit implement database storage for their data in a consistent way. Unfortunately, there&#039;s more than one SQL-ready database engine, and each has minor differences in how to configure and use it. Which one you choose may depend on your particular needs. (Some plugins even offer configurable options to connect to multiple database engines!) &lt;br /&gt;
&lt;br /&gt;
=== SQLite  ===&lt;br /&gt;
&lt;br /&gt;
Alta189 has written a [http://forums.bukkit.org/threads/lib-tut-mysql-sqlite-bukkit-drivers.33849/ fantastic SQLite tutorial] which I suggest you watch if you&#039;re interested in using SQL in your plugins, included with the tutorials is a handy library you can download and import to make using SQL easier. Once you have watched these video tutorials I would suggest you go and learn some SQL syntax, it&#039;s very straightforward and shouldn&#039;t take you long to pick up. SQL Tutorials [http://www.w3schools.com/sql/default.asp @W3Schools] and [http://www.1keydata.com/sql/sql.html @1Keydata]. &lt;br /&gt;
&lt;br /&gt;
SQLite is great for very simple databases, because there&#039;s no server concerns to set up. Just make a few calls to create a new database and table. It&#039;s easy to back up: just copy the whole database file in one go. SQLite is a little bit weaker at data integrity, flexibility in data types, and it may not be something you would want to trust for huge databases of millions of rows. But for a new plugin in development, it&#039;s often easiest and fastest to get the SQL basics squared away with SQLite, even if you &amp;quot;graduate&amp;quot; to a more server-class database engine later.&lt;br /&gt;
&lt;br /&gt;
=== MySQL  ===&lt;br /&gt;
&lt;br /&gt;
Another popular SQL database engine is called MySQL. It is closer to server-grade than SQLite, where many popular companies or websites depend on it for millions of webpage hits every day. With that security comes a little bit steeper learning-curve, because MySQL has more tunable parameters and capabilities. &lt;br /&gt;
&lt;br /&gt;
The coding for plugins accessing MySQL is mostly the same as tiny SQLite or mega-sized Oracle, with only small differences in syntax here or there. But the administration has room to grow. You may want to set up accounts and privileges inside your MySQL setup. You may want to set up SQL scripts that organize your backups and rollback to previous states. &lt;br /&gt;
&lt;br /&gt;
== 部署你的插件  ==&lt;br /&gt;
&lt;br /&gt;
 总之你写好的你的插件,如何把它变成一个可安装在服务端的jar文件呢?&lt;br /&gt;
 &lt;br /&gt;
 首先我们需要建立一个水桶服务器。 [http://wiki.bukkit.org/Setting_up_a_server 在这里] 能找到开服相关信息.接下来你需要把插件导出为一个.jar文件，&lt;br /&gt;
 &lt;br /&gt;
 这样你就能在你的服务器里运行它。 在Eclipse里, 右键工程，点击&#039;&#039;Run as &amp;gt; Maven install&#039;&#039;即可:&lt;br /&gt;
&lt;br /&gt;
[[Image:Maveninstall.png]]&lt;br /&gt;
&lt;br /&gt;
 将来呢, 当你对插件进行了改动后,在做上述操作之前，如果你想删除之前的.jar文件，你可以右键工程，点击 &#039;&#039;Run as &amp;gt; Maven clean&#039;&#039; 。 &lt;br /&gt;
 &lt;br /&gt;
 如果你在编译插件时遇到了问题,  请检查你的JDK是否正确安装， 并浏览[[建立工作区]]条目。&lt;br /&gt;
 &lt;br /&gt;
 如果你在Eclipse控制台看到了和JDK有关的错误，你可能需要手动调整JDK,因为Eclipse的检测可能发生了错误。 &lt;br /&gt;
 &lt;br /&gt;
 点击&#039;&#039;Window -&amp;gt; Preferences&#039;&#039;, 然后是&#039;&#039;Java -&amp;gt; Installed JREs&#039;&#039;。选中你最近安装的JDK作为Java运行环境（JRE）并添加, 并取消掉原来那个报错的JDK:&lt;br /&gt;
&lt;br /&gt;
[[Image:Jrelocation.png]]&lt;br /&gt;
&lt;br /&gt;
 如果你的工程成功被编译,JAR文件会生产在 &#039;&#039;target&#039;&#039; 目录下，具体在Eclipse的工作空间里名字为工程名的文件夹中。&lt;br /&gt;
 &lt;br /&gt;
 这个JAR文件就是一个能正常工作的Bukkit插件了。当然前提是你的plugin.yml里没出差错。&lt;br /&gt;
 &lt;br /&gt;
 你可以把这个jar文件丢到服务器的plugins文件夹里,重载或重启服务器,就可以测试你的新插件啦。&lt;br /&gt;
 &lt;br /&gt;
 为了连接上使用你自己的电脑开的服务器 ,在多人游戏的ip里填上你的本地ip即可。&lt;br /&gt;
 &lt;br /&gt;
 如果出现了错误而你又不能解决的话, 试试这里[http://forums.bukkit.org/forums/plugin-development.5/ plugin development forum], &lt;br /&gt;
 &lt;br /&gt;
 在这里提问[http://wiki.bukkit.org/IRC bukkitdev IRC channel],或者重新阅读wiki。&lt;br /&gt;
 &lt;br /&gt;
 当你做完了一个实用的插件,可以考虑把它发表在这里[http://dev.bukkit.org/ dev.bukkit]（为了Bukkit社区的访问量）。&lt;br /&gt;
 &lt;br /&gt;
 以上可知,JAR格式是默认压缩生成的(JAR文件基于ZIP文件的格式)。这么说来，在上传插件到Bukkit上时把JAR文件压缩成ZIP只会增加文件体积罢了。&lt;br /&gt;
 &lt;br /&gt;
 而且呢, 放在JAR中的config文件可以在检测不到插件目录（插件自动生成的文件夹，名字与插件名相同，里面是该插件的配置）下的config文件时自动生成。&lt;br /&gt;
 &lt;br /&gt;
 所以我们一般不把jar文件转换成其他格式。&lt;br /&gt;
&lt;br /&gt;
== 导入其它插件 ==&lt;br /&gt;
你可能会希望编辑其它那些有源代码的插件. 如果插件在它的目录下有&#039;&#039;pom.xml&#039;&#039;(大多数知名插件,例如WorldEdit和Essentials都有),你可以通过点击&#039;&#039;File -&amp;gt; Import&#039;&#039;来把它作为一个工程导入, 然后打开&#039;&#039;Maven&#039;&#039;项并选择&#039;&#039;Existing Maven Projects&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[Image:Importmaven.png]]&lt;br /&gt;
&lt;br /&gt;
然后选择&#039;&#039;pom.xml&#039;&#039;所在的目录,这个工程就应该出现在你的侧边栏里了。就像平常一样编辑并编译它吧。&lt;br /&gt;
&lt;br /&gt;
== 小贴士  ==&lt;br /&gt;
&lt;br /&gt;
=== 使玩家着火 ===&lt;br /&gt;
&lt;br /&gt;
 Bukkit API有很多碉堡的功能。以下是实现一些功能的代码片段。 &lt;br /&gt;
&lt;br /&gt;
下面的代码运行一个玩家使另一个玩家着火。通过类似于&#039;&#039;&#039;/ignite Notch&#039;&#039;&#039;这样的指令，这个指令会让 Notch 着火。&lt;br /&gt;
&lt;br /&gt;
 @Override&lt;br /&gt;
 public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {&lt;br /&gt;
     // 使用 equalsIgnoreCase() 来忽视大小写&lt;br /&gt;
     if (cmd.getName().equalsIgnoreCase(&amp;quot;ignite&amp;quot;)) {&lt;br /&gt;
         // 确保玩家只输入了一个自变量(要被点着的玩家名).&lt;br /&gt;
         if (args.length != 1) {&lt;br /&gt;
             // 当return false时，该指令的使用信息会显示出来。&lt;br /&gt;
             return false;&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
         // 确保命令发出者是个玩家.&lt;br /&gt;
         if (!(sender instanceof Player)) {&lt;br /&gt;
             sender.sendMessage(&amp;quot;Only players can set other players on fire.&amp;quot;);&lt;br /&gt;
             sender.sendMessage(&amp;quot;This is an arbitrary requirement for demonstration purposes only.&amp;quot;);&lt;br /&gt;
             return true;&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
         // 获取那个要被点着的玩家. 请注意下标起始是0，不是1.&lt;br /&gt;
         Player target = Bukkit.getServer().getPlayer(args[0]);&lt;br /&gt;
 &lt;br /&gt;
         // 确保这个玩家在线。&lt;br /&gt;
         if (target == null) {&lt;br /&gt;
             sender.sendMessage(args[0] + &amp;quot; is not currently online.&amp;quot;);&lt;br /&gt;
             return true;&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
         // 让这个玩家着火1000 ticks (一秒钟大概有20ticks,所以总共是50秒).&lt;br /&gt;
         target.setFireTicks(1000);&lt;br /&gt;
         return true;&lt;br /&gt;
     }&lt;br /&gt;
     return false;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== 干掉玩家  ===&lt;br /&gt;
&lt;br /&gt;
 和标题一样.这里是要干掉某个玩家。 &lt;br /&gt;
&lt;br /&gt;
在你的onCommand方法里使用这个: &lt;br /&gt;
&lt;br /&gt;
 @Override&lt;br /&gt;
 public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {&lt;br /&gt;
     if (cmd.getName().equalsIgnoreCase(&amp;quot;KillPlayer&amp;quot;)) {&lt;br /&gt;
         Player target = sender.getServer().getPlayer(args[0]);&lt;br /&gt;
          // 确保玩家在线.&lt;br /&gt;
         if (target == null) {&lt;br /&gt;
             sender.sendMessage(args[0] + &amp;quot; is not currently online.&amp;quot;);&lt;br /&gt;
             return true;&lt;br /&gt;
         }&lt;br /&gt;
         target.setHealth(0); &lt;br /&gt;
     }&lt;br /&gt;
     return false;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
这里有个小扩展,会使用一个爆炸来杀死玩家: &lt;br /&gt;
&lt;br /&gt;
 float explosionPower = 4F; //爆炸等级 - TNT的爆炸等级默认是4F&lt;br /&gt;
 Player target = sender.getWorld().getPlayer(args[0]);&lt;br /&gt;
 target.getWorld().createExplosion(target.getLocation(), explosionPower);&lt;br /&gt;
 target.setHealth(0);&lt;br /&gt;
&lt;br /&gt;
=== 创造一个假爆炸  ===&lt;br /&gt;
&lt;br /&gt;
这段代码会生产一个看起来和听起来与TNT/苦力怕产生的爆炸一样的效果。但是不会对实体和方块产生破坏。 在保留爆炸的艺术的同时又削弱了爆炸的威力，真是太有用了（&lt;br /&gt;
 @EventHandler&lt;br /&gt;
 public void onExplosionPrime(ExplosionPrimeEvent event) {	&lt;br /&gt;
     Entity entity = event.getEntity();&lt;br /&gt;
 &lt;br /&gt;
     // 如果事件和点燃的TNT有关,执行一些代码（又略）&lt;br /&gt;
     if (entity instanceof TNTPrimed) {&lt;br /&gt;
         entity.getWorld().createExplosion(entity.getLocation(), 0);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== 使一个玩家对另外一个玩家隐形  ===&lt;br /&gt;
&lt;br /&gt;
 通过输入指令，能让指令执行者对特定的玩家隐形。 然而其他人仍然能看到指令执行者。&lt;br /&gt;
&lt;br /&gt;
 @Override&lt;br /&gt;
 public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {&lt;br /&gt;
     if (cmd.getName().equalsIgnoreCase(&amp;quot;HideMe&amp;quot;) &amp;amp;&amp;amp; args.length == 1) {&lt;br /&gt;
         if (!(sender instanceof Player)) {&lt;br /&gt;
             sender.sendMessage(&amp;quot;Only players can use this command!&amp;quot;);&lt;br /&gt;
             return true;&lt;br /&gt;
         }&lt;br /&gt;
         // 检测指令执行者是玩家后，我们便可以安全的进行强制转换类操作。&lt;br /&gt;
        Player s = (Player) sender;&lt;br /&gt;
 &lt;br /&gt;
        // 获取命令执行者指定的玩家&lt;br /&gt;
        Player target = Bukkit.getServer().getPlayer(args[0]);&lt;br /&gt;
        if (target == null) {&lt;br /&gt;
            sender.sendMessage(&amp;quot;Player &amp;quot; + args[0] + &amp;quot; is not online.&amp;quot;);&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
        // 将 s 从 target 的视野中隐藏起来.&lt;br /&gt;
        target.hidePlayer(s);&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== 在玩家准星所指处生产闪电 ===&lt;br /&gt;
&lt;br /&gt;
如下代码运行手持鱼竿的玩家通过点击来生成闪电 (当然要用准星瞄准)。 真是个简单好玩的恶作剧（。&lt;br /&gt;
&lt;br /&gt;
 @EventHandler&lt;br /&gt;
 public void onPlayerInteractBlock(PlayerInteractEvent event) {&lt;br /&gt;
     Player player = event.getPlayer();&lt;br /&gt;
     if (player.getItemInHand().getType() == Material.FISHING_ROD) {&lt;br /&gt;
         // 在给定坐标中生成一道闪电. 在本例中, 这个坐标是玩家准星瞄准的地方.&lt;br /&gt;
         // 只能指向200格以内的坐标.&lt;br /&gt;
         player.getWorld().strikeLightning(player.getTargetBlock(null, 200).getLocation());&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== 自动格式 ===&lt;br /&gt;
&lt;br /&gt;
 Eclipse提供了将你的代码自动转成Oracle规定的格式, 修正了不符合常规的缩进, 空格等等。 在侧边栏选中你的项目,然后选择&#039;&#039;Source -&amp;gt; Format&#039;&#039;即可对其进行更改。&lt;br /&gt;
&lt;br /&gt;
== 插件需求专区  ==&lt;br /&gt;
&lt;br /&gt;
http://forums.bukkit.org/forums/plugin-requests.13/&lt;br /&gt;
&lt;br /&gt;
== 范例文件和样板  ==&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/Bukkit/SamplePlugin/ Bukkit/SamplePlugin on GitHub]&lt;br /&gt;
&lt;br /&gt;
*[http://pastebin.com/wpeTPx7N Example.Java]&lt;br /&gt;
&lt;br /&gt;
*[http://pastebin.com/MTwaAVCT ExamplePlayerListener.Java]&lt;br /&gt;
&lt;br /&gt;
*[http://pastebin.com/6FLixfH3 ExampleBlockListener.Java]&lt;br /&gt;
&lt;br /&gt;
*[http://pastebin.com/8UZ6pkWC ExampleEntityListener.Java]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have any more questions on this matter, don&#039;t hesitate to visit the BukkitDev [[IRC]] channel and ask!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:教程]]&lt;br /&gt;
[[Category:大篇幅条目]]&lt;/div&gt;</summary>
		<author><name>9032676</name></author>
	</entry>
	<entry>
		<id>https://mineplugin.org/index.php?title=MobArena&amp;diff=1069</id>
		<title>MobArena</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=MobArena&amp;diff=1069"/>
		<updated>2015-07-03T17:01:44Z</updated>

		<summary type="html">&lt;p&gt;9032676：​/* 权限 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{待搬运}}&lt;br /&gt;
{{Bukkit Plugin Infobox&lt;br /&gt;
|版本=v0.96.9&lt;br /&gt;
|兼容服务端版本=1.8.1&lt;br /&gt;
|网址=http://dev.bukkit.org/bukkit-plugins/mobarena/}}&lt;br /&gt;
[[Category:娱乐]][[Category:机械]]&lt;br /&gt;
=安装=&lt;br /&gt;
安装MobArena其实很简单，只需以下四步:&lt;br /&gt;
*关闭服务器&amp;lt;del&amp;gt;咳咳，当然是关你自己的服务器啦&amp;lt;/del&amp;gt;.&lt;br /&gt;
*从论坛主题或是Bukkit Dev站点的项目页下载jar文件.&lt;br /&gt;
*将jar文件拖入服务端的plugins文件夹中.&lt;br /&gt;
*重启服务端. &lt;br /&gt;
之后，配置文件 (config.yml) 以及一个宣告文本(announcements.yml) 会自动创建在plugins/MobArena/路径下.&lt;br /&gt;
文件结构如下:&lt;br /&gt;
&lt;br /&gt;
 plugins/&lt;br /&gt;
     MobArena.jar&lt;br /&gt;
     MobArena/&lt;br /&gt;
         config.yml&lt;br /&gt;
         announcements.yml&lt;br /&gt;
此时此刻, 或许你想直接开始设置竞技场, 但是你需要先看看配置文件，并把它配置成你喜欢的样子&amp;lt;del&amp;gt;就是说，还是根据情况配置一下吧&amp;lt;/del&amp;gt;. 你可以在配置文件自定义MobArena的设置，职业，奖励，波数（怪物类型）&lt;br /&gt;
&lt;br /&gt;
=建立竞技场=&lt;br /&gt;
==建造一个竞技场==&lt;br /&gt;
完整的竞技场应该包含一个可以选择职业的准备区域，一个竞技场地以及观察点(离开点) &lt;br /&gt;
下面是各个选项的讲解&lt;br /&gt;
&lt;br /&gt;
大厅：&lt;br /&gt;
 玩家加入游戏之前将会在大厅选择职业.一个建造好的游戏大厅会有每一个职业的选择牌子，玩家通过点击牌子可以获取一个职业, 还有一个铁块, 玩家可以通过点击铁块来表示他们已经准备好开始游戏.牌子必须在第一行写上职业的名字（区分大小写）,但是无论你在另外三行上写什么，都不会被怪物竞技场识别，你是不能写上 ,所以你不会得到确认的信息（如果有，那是另一个插件）&lt;br /&gt;
&lt;br /&gt;
竞技场地：&lt;br /&gt;
 这里是玩家和怪物搏斗的地方.竞技场地会有墙，可能会有一个屋顶 , 这样玩家和怪物就不能跑出去了. 这使得玩家们不会只是在竞技场外闲逛。.&lt;br /&gt;
&lt;br /&gt;
观察点: &lt;br /&gt;
 当玩家想要观看一场战斗时,他们可以使用/ma spec 命令来传送到竞技场的观察点. 这同样也是竞技场中玩家死去后会传送到的地方,前提是在配置文件中，把 spectate-after-death设置为ture. 这块区域要保证观看者不能走出去闲逛（进入竞技场地或者离远竞技场）因为在观看过程中，玩家是无敌的.&lt;br /&gt;
&lt;br /&gt;
离开点: &lt;br /&gt;
 在使用 /ma leave命令后,玩家和观察者会被传送到原来所在的地方,除非竞技场有一个离开点(只是可选). 使用离开点,可以准确控制玩家在游戏后去何处.&lt;br /&gt;
&lt;br /&gt;
关于区域，传送点等，&lt;br /&gt;
&lt;br /&gt;
当竞技场建好后，就是设置怪物竞技场的区域和传送点的时候了。在设置它们前，我们先来看看他们有什么作用.&lt;br /&gt;
&lt;br /&gt;
区域: &lt;br /&gt;
 一个竞技场需要一个竞技区域,然后还可以有一个准备区域，怪物竞技场会使用这些区域来确保玩家不会作弊（通过破坏竞技场来走出区域）,然后确保怪物竞技场所产生的怪物会在里面产生. 怪物竞技场非常排外（不要局外人）, 所以也最好把不想要的生物排除在外. 区域是通过区域工具来设置的.&lt;br /&gt;
&lt;br /&gt;
传送点: &lt;br /&gt;
 当玩家加入一个怪物竞技场的游戏时，他们会被传送到准备区域中的准备点来选择职业和准备开始游戏（通过点击铁块）.当每个人都准备好的时候，玩家会被传送到竞技场内的竞技场出生点。观察者会被传送到竞技场的观察点来进入观察区域,当游戏结束的时候，玩家和观察者会被传送到他们传送来之前的地方，或者去可选的离开点,传送点会用传送点工具来设置。.&lt;br /&gt;
&lt;br /&gt;
出生点: &lt;br /&gt;
 这里的出生点指的是怪物出生的地点.怪物竞技场只会在附近有玩家的出生点产出怪物（十五个方格的半径）.需要注意的是，怪物的数量不随着按照出生点的数量改变，只会因为在配置文件中波数的倍率改变和玩家的数量所改变.出生点可以通过出生点工具来设置。.&lt;br /&gt;
&lt;br /&gt;
容器: &lt;br /&gt;
 容器就是竞技场里的箱子，回收站等。 这些容器将会在一场游戏后重置其内部空间为初始值。只有被声明了的容器才会更新其存储空间，所以仅仅在竞技场里放一个箱子可不够 - 它还需要被用工具声明。&lt;br /&gt;
&lt;br /&gt;
==设置模式==&lt;br /&gt;
我们能用配置模式来设置竞技场。 当我们进入配置模式时，物品栏将会被保存 并给我们一套金工具 （工具栏）， 每一个都有其独特作用。同时我们也可以飞行，使得我们在竞技场附近移动时更加快捷方便一些，最后，但不是绝对，我们不能够聊天或者使用普通命令如果在在配置模式下的话，因为配置模式和你建立起了独立会话（即你所发表的信息都是针对插件的。）&lt;br /&gt;
&lt;br /&gt;
 进入设置模式的方法：输入/ma setup 竞技场名，值得提醒的是，如果服务器中只有一个竞技场，你不用输入竞技场的名字，如果竞技场没有设置完毕或者没有被创造，首先使用/ma addarena 竞技场名来创造它&lt;br /&gt;
&lt;br /&gt;
 离开设置模式的方法：聊天框内输入done，注意不是命令，是聊天信息，没有斜杠&lt;br /&gt;
&lt;br /&gt;
另外，如果你刚安装怪物竞技场插件，会有一个预置的，名称为default竞技场存在于配置文件中，如果你想要一个不同的名字，你需要先创造一个新竞技场然后把原来的竞技场使用/ma delarena default来删除&lt;br /&gt;
&lt;br /&gt;
下面我们会提到在设置模式中有什么命令可以使用。&lt;br /&gt;
&lt;br /&gt;
==设置模式的命令==&lt;br /&gt;
&lt;br /&gt;
设置模式是一个独立，特殊的会话，这意味着插件会监控我们说的每一句话，使得插件的命令可以缩短，以致于设置过程没有特别麻烦。比如exp命令替代了/ma expandregion，并且还可以防止我们错误地使用了其他插件的命令&lt;br /&gt;
&lt;br /&gt;
下面是我们可以在设置模式中使用的命令，很多都十分浅显易懂（如果您懂英文的话。）使得您设置竞技场十分快速&lt;br /&gt;
done&lt;br /&gt;
 离开设置模式&lt;br /&gt;
 别名: end stop done quit&lt;br /&gt;
&lt;br /&gt;
help&lt;br /&gt;
 显示帮助信息&lt;br /&gt;
 别名: ? h&lt;br /&gt;
&lt;br /&gt;
missing&lt;br /&gt;
 显示我们还没有设置好的区域（准备区诸如此类）&lt;br /&gt;
 这个命令在你不知道你已经设置了那些区域的时候十分有用&lt;br /&gt;
 别名: miss&lt;br /&gt;
&lt;br /&gt;
expand &amp;lt;region&amp;gt; &amp;lt;amount&amp;gt; &amp;lt;direction&amp;gt;&lt;br /&gt;
 Expand a region by some amount in some direction.&lt;br /&gt;
 Valid regions: ar for the arena region, or lr for the lobby region&lt;br /&gt;
 Valid amounts: positive integers (whole numbers)&lt;br /&gt;
 Valid directions: up, down, or out&lt;br /&gt;
 Example: expand ar 5 up&lt;br /&gt;
 别名: exp&lt;br /&gt;
&lt;br /&gt;
show [&amp;lt;region&amp;gt;|&amp;lt;warp&amp;gt;|&amp;lt;point&amp;gt;]&lt;br /&gt;
  Show a region, warp, or point(s) as red wool blocks.&lt;br /&gt;
  Valid regions: ar for the arena region, or lr for the lobby region&lt;br /&gt;
  Valid warps: arena, lobby, spec, exit&lt;br /&gt;
  Valid points: spawns (or just sp) for spawnpoints, chests (or just c) for chests&lt;br /&gt;
  Example: show sp&lt;br /&gt;
&lt;br /&gt;
==设置时的工具==&lt;br /&gt;
&lt;br /&gt;
The Toolbox is a set of golden tools, where each tool has a specific function. We will use these tools to set up the regions, warps, and points of our arena. The tools are used by left- or right-clicking a block while holding them, and the actions vary depending on the specific tool.&lt;br /&gt;
&lt;br /&gt;
Note that the functions of a tool are described in the item tooltip, which we can see by opening up our inventory and hovering our mouse over the tools.&lt;br /&gt;
&lt;br /&gt;
===区域工具===&lt;br /&gt;
&lt;br /&gt;
The arena and lobby regions can be set up using the Region tools (axe). There are two golden axes in the Toolbox, and they both behave the same, except that one is for the arena region, and the other is for the lobby region. The tools are named accordingly, and they will display either &amp;quot;Arena Region&amp;quot; or &amp;quot;Lobby Region&amp;quot; above the quickbar when we select them.&lt;br /&gt;
&lt;br /&gt;
Note that the behavior of the Region tools is similar to that of the WorldEdit wand (wooden axe), so if you are familiar with defining regions in WorldEdit, the Region tools should feel familiar.&lt;br /&gt;
&lt;br /&gt;
 Left-click: Set the first point to be the location of the target block&lt;br /&gt;
 Right-click: Set the second point to be the location of the target block&lt;br /&gt;
&lt;br /&gt;
Upon setting both points, the region will be defined. Type show ar (or show lr) to check that the region spans the desired area. If the region is a little bit too small, use the expand command (see above) to make it a little bigger.&lt;br /&gt;
&lt;br /&gt;
Note: The region MUST look like a box (3D) and not a rectangle (2D). If the region is just a rectangle, your arena will not work correctly. The same applies if the arena floor is not fully contained in the box, so make sure to expand the region down a block or two to be sure.&lt;br /&gt;
&lt;br /&gt;
===玩家传送点工具===&lt;br /&gt;
&lt;br /&gt;
The arena, lobby, spectator, and exit warps can be set up using the Warps tool (hoe). The tool knows about all the warps, and we have to cycle through them to select the warp we want to place. The default selected warp is the arena warp.&lt;br /&gt;
&lt;br /&gt;
 Left-click: Set the currently selected warp on top of the target block&lt;br /&gt;
 Right-click: Cycle between available warps&lt;br /&gt;
&lt;br /&gt;
When left-clicking, the selected warp will be set to the top of the clicked block. The pitch (up and down) will be set to 0, which means when players are teleported, they will be looking &amp;quot;straight ahead&amp;quot;. The yaw (rotation, left/right) will be set to whatever direction we are facing, when we set the warp. This means that we need to rotate ourselves to be looking in the direction we want the players to look in when they are teleported to the point.&lt;br /&gt;
&lt;br /&gt;
Note: The arena, lobby, and spectator warps are all required. The exit warp is optional.&lt;br /&gt;
&lt;br /&gt;
===怪物产生点工具===&lt;br /&gt;
&lt;br /&gt;
The spawnpoints can be set up using the Spawnpoints tool (sword). The tool knows about all the spawnpoints of the arena, and allows us to remove existing ones or add new ones as we please.&lt;br /&gt;
&lt;br /&gt;
 Left-click: Add a spawnpoint on top of the target block&lt;br /&gt;
 Right-click: Remove the spawnpoint on top of the target block (if the spawnpoint exists)&lt;br /&gt;
&lt;br /&gt;
When left-clicking, a spawnpoint will be added on top of the clicked block, if one doesn&#039;t already exist. Right-clicking a block will remove a spawnpoint on that block, if one exists.&lt;br /&gt;
&lt;br /&gt;
Note: Due to limitations and &amp;quot;bugs&amp;quot; in Minecraft, it is not possible (read: viable) to spawn mobs further than 15 blocks away from a player, and still make it target and attack the player naturally. Therefore, it is recommended to place many spawnpoints, so that every single location in the arena is within a 15-block radius of a spawnpoint. If a player is not within 15 blocks of any spawnpoint, MobArena will print a warning to the console with the coordinates. If no players are within 15 blocks of any spawnpoint, MobArena will default to using all spawnpoints, which may result in mobs spawning far away from players, so they will have to run around searching for them.&lt;br /&gt;
&lt;br /&gt;
===容器工具===&lt;br /&gt;
&lt;br /&gt;
The chests and containers can be set up using the Chests tool (spade). It works very much like the Spawnpoints tool, but requires that the clicked block is a valid container.&lt;br /&gt;
&lt;br /&gt;
 Left-click: Register the clicked container (if it wasn&#039;t registered)&lt;br /&gt;
 Right-click: Unregister the clicked container (if it was registered)&lt;br /&gt;
&lt;br /&gt;
When left-clicking a container, MobArena will register the container (if it wasn&#039;t registered already), such that when an arena session ends, the container will be restored to contain whatever was in it when the arena began. Right-clicking a container will unregister it.&lt;br /&gt;
&lt;br /&gt;
=命令=&lt;br /&gt;
==玩家命令==&lt;br /&gt;
&lt;br /&gt;
这些指令能够给所有玩家使用. 它们包括了加入, 离开, 旁观和列出所有竞技场(可用或不可用)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 /ma join (&amp;lt;竞技场&amp;gt;) or /ma j (&amp;lt;竞技场&amp;gt;) - 加入指定名称的竞技场.&lt;br /&gt;
 /ma leave or /ma l - 离开竞技场或是离开旁观者模式.&lt;br /&gt;
 /ma notready - 获取所有未准备的玩家.&lt;br /&gt;
 /ma spec (&amp;lt;竞技场&amp;gt;) or /ma s (&amp;lt;竞技场&amp;gt;) - 以旁观者模式加入指定名称竞技场.&lt;br /&gt;
 /ma arenas - 获取所有竞技场的名字, 若是绿色则已启用, 灰色则未启用.&lt;br /&gt;
 /ma players - 获取当前所有竞技场的所有玩家.&lt;br /&gt;
 /ma players &amp;lt;竞技场&amp;gt; - 获取指定竞技场的所有玩家.&lt;br /&gt;
 /ma class &amp;lt;职业&amp;gt; - 如果你在大厅里, 是应直接用指令而不是透过牌子互动选择职业.&lt;br /&gt;
&lt;br /&gt;
==管理员指令==&lt;br /&gt;
&lt;br /&gt;
只有后台或者服务器op能使用下面这些指令. 这里包括了开始或是停止竞技场, 启用或是卸载竞技场甚至包含了MobArena的所有管理.&lt;br /&gt;
&lt;br /&gt;
 /ma enable - 启用MobArena插件.&lt;br /&gt;
 /ma disable - 卸载MobArena插件.&lt;br /&gt;
 /ma enable &amp;lt;竞技场&amp;gt; - 启用指定名字的竞技场.&lt;br /&gt;
 /ma disable &amp;lt;竞技场&amp;gt; - 关闭指定名字的竞技场.&lt;br /&gt;
 /ma force end - 停止所有竞技场的运作.&lt;br /&gt;
 /ma force end &amp;lt;竞技场&amp;gt; - 停止指定名称竞技场的运作及使该竞技场的所有玩家离开. &lt;br /&gt;
 /ma force start &amp;lt;竞技场&amp;gt; - 开始运作一个指定名称的竞技场以及请出该竞技场内未准备的玩家.&lt;br /&gt;
 /ma notready &amp;lt;竞技场&amp;gt; - 获取该竞技场内所有未准备的玩家.&lt;br /&gt;
 /ma restore &amp;lt;玩家&amp;gt; - 在可能的情况下恢复指定玩家背包.&lt;br /&gt;
 /ma config reload - 重载config配置文件夹.&lt;br /&gt;
==建设指令==&lt;br /&gt;
&lt;br /&gt;
只有op (以及某些合理的指令能在后台) 使用这些指令. 它们包括了设置竞技场传送点, 竞技场出生点以及竞技场范围.&lt;br /&gt;
&lt;br /&gt;
 /ma setup &amp;lt;竞技场&amp;gt; - 进入建设指定名称的竞技场模式.&lt;br /&gt;
 /ma addarena &amp;lt;竞技场&amp;gt; - 建立一个新的竞技场节点于当前所在世界.&lt;br /&gt;
 /ma delarena &amp;lt;竞技场&amp;gt; - 删除指定名称的竞技场.&lt;br /&gt;
 /ma editarena &amp;lt;竞技场&amp;gt; - 开启或关闭指定竞技场修改模式.&lt;br /&gt;
 /ma editarena &amp;lt;竞技场&amp;gt; [true|false] - 开启 (true) 或关闭 (false) 指定竞技场的修改模式.&lt;br /&gt;
 /ma setting &amp;lt;竞技场&amp;gt; - 列出所有指定竞技场的设置项.&lt;br /&gt;
 /ma setting &amp;lt;竞技场&amp;gt; &amp;lt;设置项&amp;gt; - 查询当前指定设置项的值于指定的竞技场.&lt;br /&gt;
 /ma setting &amp;lt;竞技场&amp;gt; &amp;lt;设置项&amp;gt; &amp;lt;值&amp;gt; - 设置指定竞技场中指定设置项的指定值.&lt;br /&gt;
 /ma checkspawns - 显示竞技场出生点 (在你当前的竞技场下) 是使用红色羊毛覆盖的范围在当前你当前的位置上. 这个指令同时也能查询在这个范围内不同的点是否被出生点覆盖着.&lt;br /&gt;
 /ma classchest &amp;lt;职业&amp;gt; - 当正在查询箱子, 使指定的职业与这个箱子建立连接. 连接一个职业箱子意味着当MobArena连接建立后, 将同时复制于职业箱子内的物品, 而不是于竞技场大厅内的任何职业箱子. 当你建立一个职业箱子网络时它能带给你便利.&lt;br /&gt;
 /ma auto-generate &amp;lt;竞技场&amp;gt; - 自动生成一个指定名称的竞技场. 这个竞技场只会生成于玩家所站的位置下方.&lt;br /&gt;
 /ma auto-degenerate &amp;lt;竞技场&amp;gt; - 自动停止生成竞技场, 能基于自动生成器下有效地恢复, 当这是一个 &amp;quot;bulldozed&amp;quot; 补丁.&lt;br /&gt;
&lt;br /&gt;
=权限=&lt;br /&gt;
几乎全部的权限插件是&#039;&#039;&#039;不需要&#039;&#039;&#039;MobArena插件作为前置而能够单独运行的, 但若果你想要更多额外的控制功能, 这里提供了很多不同类型的权限节点哦喵~&lt;br /&gt;
== 节点 ==&lt;br /&gt;
 你能够在安装MobArena插件后使用这些权限节点&lt;br /&gt;
&lt;br /&gt;
提示: MobArena这个插件提供了很多人性化的默认设定, 所有玩家能够使用所有竞技场及职业, 还有的是OP默认能够使用所有管理员以及建设指令. 除非你想要禁止一些组别进入特定的竞技场或是职业&lt;br /&gt;
NOTE: MobArena uses sane defaults. This means that by default, all players can use all arenas and all classes, and ops can use all admin and setup commands. Unless you want to prevent some groups from accessing certain arenas or classes, or you want to give non-ops admin and setup permissions, there is no need to mess with any permissions at all, so go away from this page and remove all occurrences of mobarena in your permissions-file!&lt;br /&gt;
&lt;br /&gt;
==竞技场权限==&lt;br /&gt;
&lt;br /&gt;
Did you read the note at the top? If not, read it before you continue.&lt;br /&gt;
&lt;br /&gt;
So, you want to remove permissions for certain arenas from certain users? Alright, that means you will have to negate or revoke the permissions in your permissions plugin. In bPermissions, the negation modifier is a caret, ^, in GroupManager and PermissionsEx it is a minus, -, and in zPermissions it is by setting the permission to false. The examples below revoke the permission for the default arena.&lt;br /&gt;
&lt;br /&gt;
 bPermissions: ^mobarena.arenas.default&lt;br /&gt;
 GroupManager: -mobarena.arenas.default&lt;br /&gt;
 zPermissions: mobarena.arenas.default: false&lt;br /&gt;
&lt;br /&gt;
I recommend letting everyone enjoy all your arenas, but this could be used in combination with &amp;quot;leveling&amp;quot; plugins to allow players to use &amp;quot;harder&amp;quot; arenas at higher levels. It could also be used for sponsors-only arenas.&lt;br /&gt;
&lt;br /&gt;
Still confused? Check the sample setup at the bottom of the page!&lt;br /&gt;
&lt;br /&gt;
==职业权限==&lt;br /&gt;
&lt;br /&gt;
Did you read the note at the top? If not, read it before you continue.&lt;br /&gt;
&lt;br /&gt;
Alright, if you&#039;re reading this, you want to remove permissions for certain classes from certain users. As with the arena permissions, you need to negate or revoke the permissions in your permissions plugin. In bPermissions, the negation modifier is a caret, ^, in GroupManager and PermissionsEx it is a minus, -, and in zPermissions it is by setting the permission to false. The examples below revoke the permission for the Knight class.&lt;br /&gt;
&lt;br /&gt;
 bPermissions: ^mobarena.classes.knight&lt;br /&gt;
 GroupManager: -mobarena.classes.knight&lt;br /&gt;
 zPermissions: mobarena.classes.knight: false&lt;br /&gt;
&lt;br /&gt;
Note how the class name is lowercase. This is important. Even if the Knight class is called KnIGhT in your config-file, it MUST be all lowercase in your permissions-file.&lt;br /&gt;
&lt;br /&gt;
As with arenas, I recommend letting everyone enjoy all the classes, unless you have a special reason not to.&lt;br /&gt;
&lt;br /&gt;
Still confused? Check the sample setup at the bottom of the page!&lt;br /&gt;
&lt;br /&gt;
==命令权限==&lt;br /&gt;
&lt;br /&gt;
Did you read the note at the top? If not, read it before you continue.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re reading this, you want to either give certain users access to some of the admin and/or setup commands, or you want to remove some of the user commands from some groups. If this is not the case, stop reading and leave this page!&lt;br /&gt;
&lt;br /&gt;
The first group of commands are the user commands. They are accessible by all players by default, so don&#039;t put mobarena.use.* or something stupid like that in your permissions-file! If you want a group to not have access to the user commands, negate the permission mobarena.use, which is the parent permission node for all the user commands. See the classes and arenas sections for information on how to negate permissions. If that doesn&#039;t work, negate the mobarena.use.join and mobarena.use.spec permissions. That should be enough.&lt;br /&gt;
&lt;br /&gt;
 mobarena.use.join&lt;br /&gt;
 mobarena.use.leave&lt;br /&gt;
 mobarena.use.spec&lt;br /&gt;
 mobarena.use.arenalist&lt;br /&gt;
 mobarena.use.playerlist&lt;br /&gt;
 mobarena.use.notready&lt;br /&gt;
 mobarena.use.class&lt;br /&gt;
The admin commands are simple. They allow disabling/enabling MobArena and individual arenas, kicking players from the arenas, restoring player inventories if they got lost somehow, forcing arenas to start or end, and teleporting in and out of arenas regardless of what the arena state is. If you want to grant all of these permissions, use the parent permission node mobarena.admin. Don&#039;t mess around with * or something stupid like that.&lt;br /&gt;
&lt;br /&gt;
 mobarena.admin.enable&lt;br /&gt;
 mobarena.admin.kick&lt;br /&gt;
 mobarena.admin.restore&lt;br /&gt;
 mobarena.admin.force&lt;br /&gt;
 mobarena.admin.teleport&lt;br /&gt;
Setup commands are only for ops, just like admin commands. Do not give these permissions to random people, because they can remove your arenas and destroy your config-files, if they do something stupid. The setup commands allow you to manage arenas, regions, spawnpoints, chests, leaderboards, etc. They also allow you to set up new classes in-game. If you want to grant all of these permissions, use the parent permission node mobarena.setup. Don&#039;t mess around with * or something stupid like that.&lt;br /&gt;
&lt;br /&gt;
 mobarena.setup.config&lt;br /&gt;
 mobarena.setup.setup&lt;br /&gt;
 mobarena.setup.setting&lt;br /&gt;
 mobarena.setup.addarena&lt;br /&gt;
 mobarena.setup.removearena&lt;br /&gt;
 mobarena.setup.editarena&lt;br /&gt;
 mobarena.setup.spawnpoints&lt;br /&gt;
 mobarena.setup.containers&lt;br /&gt;
 mobarena.setup.checkdata&lt;br /&gt;
 mobarena.setup.checkspawns&lt;br /&gt;
 mobarena.setup.classchest&lt;br /&gt;
 mobarena.setup.classes&lt;br /&gt;
 mobarena.setup.leaderboards&lt;br /&gt;
 mobarena.setup.autogenerate&lt;br /&gt;
 mobarena.setup.autodegenerate&lt;br /&gt;
Sample setup&lt;br /&gt;
&lt;br /&gt;
Assume you have a class called DiamondKnight that you only want your donors to be able to use (very common use case). How do you set up your permissions plugin when you have to revoke the class permission from the default group, but the donor group inherits from the default group? It&#039;s very simple: You&#039;re doing it wrong...&lt;br /&gt;
&lt;br /&gt;
What you have to do instead is make an auxiliary default-group that contains all your default permissions, and have your default group inherit from that group, and furthermore revoke the DiamondKnight class permission in MobArena. Your donor group then also inherits from the auxiliary group, and everything is wonderful. Confusing? Here&#039;s a pseudo-code example:&lt;br /&gt;
&lt;br /&gt;
 default-aux:                            &amp;lt;-- This is the auxiliary group that is to&lt;br /&gt;
   permissions:                              be inherited by the default group and&lt;br /&gt;
   - essentials.balance                      the donor group. It is not used for&lt;br /&gt;
   - essentials.pay                          anything else.&lt;br /&gt;
   - essentials.sell&lt;br /&gt;
&lt;br /&gt;
 default:                                &amp;lt;-- This is the default group. It inherits&lt;br /&gt;
   inherits: default-aux                     from default-aux, but also revokes the&lt;br /&gt;
   permissions:                              permission for the special class.&lt;br /&gt;
     - -mobarena.classes.diamondknight&lt;br /&gt;
&lt;br /&gt;
 donor:                                  &amp;lt;-- This is the donor group, which also&lt;br /&gt;
   inherits: default-aux                     inherits from default-aux, but it&lt;br /&gt;
   permissions:                              does not revoke any class permissions,&lt;br /&gt;
    - essentials.balance.others               which means it has access to all of&lt;br /&gt;
    - essentials.kit                          them by default.&lt;br /&gt;
This sample setup is pseudo code and cannot be simply copy/pasted into your own permissions file. It&#039;s your job to figure out how your permissions plugin works, and what its syntax is.&lt;br /&gt;
&lt;br /&gt;
=物品语法（Item Syntax待搬运）=&lt;br /&gt;
=职业箱子（Class Chests待搬运｝=&lt;br /&gt;
=怪物波设置（Formulas待搬运）=&lt;br /&gt;
=怪物种类（Monster types待搬运）=&lt;br /&gt;
以上内容搬运自英文wiki[https://github.com/garbagemule/MobArena/wiki]&lt;/div&gt;</summary>
		<author><name>9032676</name></author>
	</entry>
	<entry>
		<id>https://mineplugin.org/index.php?title=MobArena&amp;diff=1066</id>
		<title>MobArena</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=MobArena&amp;diff=1066"/>
		<updated>2015-07-01T16:34:34Z</updated>

		<summary type="html">&lt;p&gt;9032676：​/* 命令 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{待搬运}}&lt;br /&gt;
{{Bukkit Plugin Infobox&lt;br /&gt;
|版本=v0.96.9&lt;br /&gt;
|兼容服务端版本=1.8.1&lt;br /&gt;
|网址=http://dev.bukkit.org/bukkit-plugins/mobarena/}}&lt;br /&gt;
[[Category:娱乐]][[Category:机械]]&lt;br /&gt;
=安装=&lt;br /&gt;
安装MobArena其实很简单，只需以下四步:&lt;br /&gt;
*关闭服务器&amp;lt;del&amp;gt;咳咳，当然是关你自己的服务器啦&amp;lt;/del&amp;gt;.&lt;br /&gt;
*从论坛主题或是Bukkit Dev站点的项目页下载jar文件.&lt;br /&gt;
*将jar文件拖入服务端的plugins文件夹中.&lt;br /&gt;
*重启服务端. &lt;br /&gt;
之后，配置文件 (config.yml) 以及一个宣告文本(announcements.yml) 会自动创建在plugins/MobArena/路径下.&lt;br /&gt;
文件结构如下:&lt;br /&gt;
&lt;br /&gt;
 plugins/&lt;br /&gt;
     MobArena.jar&lt;br /&gt;
     MobArena/&lt;br /&gt;
         config.yml&lt;br /&gt;
         announcements.yml&lt;br /&gt;
此时此刻, 或许你想直接开始设置竞技场, 但是你需要先看看配置文件，并把它配置成你喜欢的样子&amp;lt;del&amp;gt;就是说，还是根据情况配置一下吧&amp;lt;/del&amp;gt;. 你可以在配置文件自定义MobArena的设置，职业，奖励，波数（怪物类型）&lt;br /&gt;
&lt;br /&gt;
=建立竞技场=&lt;br /&gt;
==建造一个竞技场==&lt;br /&gt;
完整的竞技场应该包含一个可以选择职业的准备区域，一个竞技场地以及观察点(离开点) &lt;br /&gt;
下面是各个选项的讲解&lt;br /&gt;
&lt;br /&gt;
大厅：&lt;br /&gt;
 玩家加入游戏之前将会在大厅选择职业.一个建造好的游戏大厅会有每一个职业的选择牌子，玩家通过点击牌子可以获取一个职业, 还有一个铁块, 玩家可以通过点击铁块来表示他们已经准备好开始游戏.牌子必须在第一行写上职业的名字（区分大小写）,但是无论你在另外三行上写什么，都不会被怪物竞技场识别，你是不能写上 ,所以你不会得到确认的信息（如果有，那是另一个插件）&lt;br /&gt;
&lt;br /&gt;
竞技场地：&lt;br /&gt;
 这里是玩家和怪物搏斗的地方.竞技场地会有墙，可能会有一个屋顶 , 这样玩家和怪物就不能跑出去了. 这使得玩家们不会只是在竞技场外闲逛。.&lt;br /&gt;
&lt;br /&gt;
观察点: &lt;br /&gt;
 当玩家想要观看一场战斗时,他们可以使用/ma spec 命令来传送到竞技场的观察点. 这同样也是竞技场中玩家死去后会传送到的地方,前提是在配置文件中，把 spectate-after-death设置为ture. 这块区域要保证观看者不能走出去闲逛（进入竞技场地或者离远竞技场）因为在观看过程中，玩家是无敌的.&lt;br /&gt;
&lt;br /&gt;
离开点: &lt;br /&gt;
 在使用 /ma leave命令后,玩家和观察者会被传送到原来所在的地方,除非竞技场有一个离开点(只是可选). 使用离开点,可以准确控制玩家在游戏后去何处.&lt;br /&gt;
&lt;br /&gt;
关于区域，传送点等，&lt;br /&gt;
&lt;br /&gt;
当竞技场建好后，就是设置怪物竞技场的区域和传送点的时候了。在设置它们前，我们先来看看他们有什么作用.&lt;br /&gt;
&lt;br /&gt;
区域: &lt;br /&gt;
 一个竞技场需要一个竞技区域,然后还可以有一个准备区域，怪物竞技场会使用这些区域来确保玩家不会作弊（通过破坏竞技场来走出区域）,然后确保怪物竞技场所产生的怪物会在里面产生. 怪物竞技场非常排外（不要局外人）, 所以也最好把不想要的生物排除在外. 区域是通过区域工具来设置的.&lt;br /&gt;
&lt;br /&gt;
传送点: &lt;br /&gt;
 当玩家加入一个怪物竞技场的游戏时，他们会被传送到准备区域中的准备点来选择职业和准备开始游戏（通过点击铁块）.当每个人都准备好的时候，玩家会被传送到竞技场内的竞技场出生点。观察者会被传送到竞技场的观察点来进入观察区域,当游戏结束的时候，玩家和观察者会被传送到他们传送来之前的地方，或者去可选的离开点,传送点会用传送点工具来设置。.&lt;br /&gt;
&lt;br /&gt;
出生点: &lt;br /&gt;
 这里的出生点指的是怪物出生的地点.怪物竞技场只会在附近有玩家的出生点产出怪物（十五个方格的半径）.需要注意的是，怪物的数量不随着按照出生点的数量改变，只会因为在配置文件中波数的倍率改变和玩家的数量所改变.出生点可以通过出生点工具来设置。.&lt;br /&gt;
&lt;br /&gt;
容器: &lt;br /&gt;
 容器就是竞技场里的箱子，回收站等。 这些容器将会在一场游戏后重置其内部空间为初始值。只有被声明了的容器才会更新其存储空间，所以仅仅在竞技场里放一个箱子可不够 - 它还需要被用工具声明。&lt;br /&gt;
&lt;br /&gt;
==设置模式==&lt;br /&gt;
我们能用配置模式来设置竞技场。 当我们进入配置模式时，物品栏将会被保存 并给我们一套金工具 （工具栏）， 每一个都有其独特作用。. We will also be able to fly, making moving around the arena a lot easier. Last, but not least, we will not be able to chat or type normal commands while in Setup Mode, because Setup Mode starts an isolated conversation with us.&lt;br /&gt;
&lt;br /&gt;
To enter Setup Mode: Type /ma setup &amp;lt;arena&amp;gt;, where &amp;lt;arena&amp;gt; is the name of an arena. Note that if you only have one arena, you don&#039;t have to type the arena name. If the arena you want to set up has not yet been created, first type /ma addarena &amp;lt;arena&amp;gt; to create it.&lt;br /&gt;
&lt;br /&gt;
To leave Setup Mode: Type done.&lt;br /&gt;
&lt;br /&gt;
Note that if you have just installed MobArena, there will be a premade arena-node called default in the config-file already. If you want a different name, create a new arena first, and then remove the default arena by typing /ma delarena default.&lt;br /&gt;
&lt;br /&gt;
In the next section, we will take a look at the different commands available in Setup Mode...&lt;br /&gt;
&lt;br /&gt;
==设置模式的命令==&lt;br /&gt;
&lt;br /&gt;
Setup Mode is an isolated conversation, which means Setup Mode will intercept everything we type. The reason for this is that it makes the commands in Setup Mode shorter (e.g. exp instead of /ma expandregion), and it also prevents us from accidentally typing commands from other plugins.&lt;br /&gt;
&lt;br /&gt;
Below is a list of all the commands we can use in Setup Mode. Many of the commands have short-hand aliases which might make them even faster to type out. As an example, the expand command has the alias exp. Sometimes it&#039;s easier to remember the longer names, but the short-hand aliases are provided for faster setup.&lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
 Leave Setup Mode.&lt;br /&gt;
 Aliases: end stop done quit&lt;br /&gt;
&lt;br /&gt;
help&lt;br /&gt;
 Display help screen.&lt;br /&gt;
 Aliases: ? h&lt;br /&gt;
&lt;br /&gt;
missing&lt;br /&gt;
 Display a list of missing (mandatory) regions, warps, and points.&lt;br /&gt;
 This command is useful if you have forgotten how far you are in the setup process, and what you still need to set up.&lt;br /&gt;
 Aliases: miss&lt;br /&gt;
&lt;br /&gt;
expand &amp;lt;region&amp;gt; &amp;lt;amount&amp;gt; &amp;lt;direction&amp;gt;&lt;br /&gt;
 Expand a region by some amount in some direction.&lt;br /&gt;
 Valid regions: ar for the arena region, or lr for the lobby region&lt;br /&gt;
 Valid amounts: positive integers (whole numbers)&lt;br /&gt;
 Valid directions: up, down, or out&lt;br /&gt;
 Example: expand ar 5 up&lt;br /&gt;
 Aliases: exp&lt;br /&gt;
&lt;br /&gt;
show [&amp;lt;region&amp;gt;|&amp;lt;warp&amp;gt;|&amp;lt;point&amp;gt;]&lt;br /&gt;
  Show a region, warp, or point(s) as red wool blocks.&lt;br /&gt;
  Valid regions: ar for the arena region, or lr for the lobby region&lt;br /&gt;
  Valid warps: arena, lobby, spec, exit&lt;br /&gt;
  Valid points: spawns (or just sp) for spawnpoints, chests (or just c) for chests&lt;br /&gt;
  Example: show sp&lt;br /&gt;
&lt;br /&gt;
==设置时的工具==&lt;br /&gt;
&lt;br /&gt;
The Toolbox is a set of golden tools, where each tool has a specific function. We will use these tools to set up the regions, warps, and points of our arena. The tools are used by left- or right-clicking a block while holding them, and the actions vary depending on the specific tool.&lt;br /&gt;
&lt;br /&gt;
Note that the functions of a tool are described in the item tooltip, which we can see by opening up our inventory and hovering our mouse over the tools.&lt;br /&gt;
&lt;br /&gt;
===区域工具===&lt;br /&gt;
&lt;br /&gt;
The arena and lobby regions can be set up using the Region tools (axe). There are two golden axes in the Toolbox, and they both behave the same, except that one is for the arena region, and the other is for the lobby region. The tools are named accordingly, and they will display either &amp;quot;Arena Region&amp;quot; or &amp;quot;Lobby Region&amp;quot; above the quickbar when we select them.&lt;br /&gt;
&lt;br /&gt;
Note that the behavior of the Region tools is similar to that of the WorldEdit wand (wooden axe), so if you are familiar with defining regions in WorldEdit, the Region tools should feel familiar.&lt;br /&gt;
&lt;br /&gt;
 Left-click: Set the first point to be the location of the target block&lt;br /&gt;
 Right-click: Set the second point to be the location of the target block&lt;br /&gt;
&lt;br /&gt;
Upon setting both points, the region will be defined. Type show ar (or show lr) to check that the region spans the desired area. If the region is a little bit too small, use the expand command (see above) to make it a little bigger.&lt;br /&gt;
&lt;br /&gt;
Note: The region MUST look like a box (3D) and not a rectangle (2D). If the region is just a rectangle, your arena will not work correctly. The same applies if the arena floor is not fully contained in the box, so make sure to expand the region down a block or two to be sure.&lt;br /&gt;
&lt;br /&gt;
===玩家传送点工具===&lt;br /&gt;
&lt;br /&gt;
The arena, lobby, spectator, and exit warps can be set up using the Warps tool (hoe). The tool knows about all the warps, and we have to cycle through them to select the warp we want to place. The default selected warp is the arena warp.&lt;br /&gt;
&lt;br /&gt;
 Left-click: Set the currently selected warp on top of the target block&lt;br /&gt;
 Right-click: Cycle between available warps&lt;br /&gt;
&lt;br /&gt;
When left-clicking, the selected warp will be set to the top of the clicked block. The pitch (up and down) will be set to 0, which means when players are teleported, they will be looking &amp;quot;straight ahead&amp;quot;. The yaw (rotation, left/right) will be set to whatever direction we are facing, when we set the warp. This means that we need to rotate ourselves to be looking in the direction we want the players to look in when they are teleported to the point.&lt;br /&gt;
&lt;br /&gt;
Note: The arena, lobby, and spectator warps are all required. The exit warp is optional.&lt;br /&gt;
&lt;br /&gt;
===怪物产生点工具===&lt;br /&gt;
&lt;br /&gt;
The spawnpoints can be set up using the Spawnpoints tool (sword). The tool knows about all the spawnpoints of the arena, and allows us to remove existing ones or add new ones as we please.&lt;br /&gt;
&lt;br /&gt;
 Left-click: Add a spawnpoint on top of the target block&lt;br /&gt;
 Right-click: Remove the spawnpoint on top of the target block (if the spawnpoint exists)&lt;br /&gt;
&lt;br /&gt;
When left-clicking, a spawnpoint will be added on top of the clicked block, if one doesn&#039;t already exist. Right-clicking a block will remove a spawnpoint on that block, if one exists.&lt;br /&gt;
&lt;br /&gt;
Note: Due to limitations and &amp;quot;bugs&amp;quot; in Minecraft, it is not possible (read: viable) to spawn mobs further than 15 blocks away from a player, and still make it target and attack the player naturally. Therefore, it is recommended to place many spawnpoints, so that every single location in the arena is within a 15-block radius of a spawnpoint. If a player is not within 15 blocks of any spawnpoint, MobArena will print a warning to the console with the coordinates. If no players are within 15 blocks of any spawnpoint, MobArena will default to using all spawnpoints, which may result in mobs spawning far away from players, so they will have to run around searching for them.&lt;br /&gt;
&lt;br /&gt;
===容器工具===&lt;br /&gt;
&lt;br /&gt;
The chests and containers can be set up using the Chests tool (spade). It works very much like the Spawnpoints tool, but requires that the clicked block is a valid container.&lt;br /&gt;
&lt;br /&gt;
 Left-click: Register the clicked container (if it wasn&#039;t registered)&lt;br /&gt;
 Right-click: Unregister the clicked container (if it was registered)&lt;br /&gt;
&lt;br /&gt;
When left-clicking a container, MobArena will register the container (if it wasn&#039;t registered already), such that when an arena session ends, the container will be restored to contain whatever was in it when the arena began. Right-clicking a container will unregister it.&lt;br /&gt;
&lt;br /&gt;
=命令=&lt;br /&gt;
==玩家命令==&lt;br /&gt;
&lt;br /&gt;
这些指令能够给所有玩家使用. 它们包括了加入, 离开, 旁观和列出所有竞技场(可用或不可用)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 /ma join (&amp;lt;竞技场&amp;gt;) or /ma j (&amp;lt;竞技场&amp;gt;) - 加入指定名称的竞技场.&lt;br /&gt;
 /ma leave or /ma l - 离开竞技场或是离开旁观者模式.&lt;br /&gt;
 /ma notready - 获取所有未准备的玩家.&lt;br /&gt;
 /ma spec (&amp;lt;竞技场&amp;gt;) or /ma s (&amp;lt;竞技场&amp;gt;) - 以旁观者模式加入指定名称竞技场.&lt;br /&gt;
 /ma arenas - 获取所有竞技场的名字, 若是绿色则已启用, 灰色则未启用.&lt;br /&gt;
 /ma players - 获取当前所有竞技场的所有玩家.&lt;br /&gt;
 /ma players &amp;lt;竞技场&amp;gt; - 获取指定竞技场的所有玩家.&lt;br /&gt;
 /ma class &amp;lt;职业&amp;gt; - 如果你在大厅里, 是应直接用指令而不是透过牌子互动选择职业.&lt;br /&gt;
&lt;br /&gt;
==管理员指令==&lt;br /&gt;
&lt;br /&gt;
只有后台或者服务器op能使用下面这些指令. 这里包括了开始或是停止竞技场, 启用或是卸载竞技场甚至包含了MobArena的所有管理.&lt;br /&gt;
&lt;br /&gt;
 /ma enable - 启用MobArena插件.&lt;br /&gt;
 /ma disable - 卸载MobArena插件.&lt;br /&gt;
 /ma enable &amp;lt;竞技场&amp;gt; - 启用指定名字的竞技场.&lt;br /&gt;
 /ma disable &amp;lt;竞技场&amp;gt; - 关闭指定名字的竞技场.&lt;br /&gt;
 /ma force end - 停止所有竞技场的运作.&lt;br /&gt;
 /ma force end &amp;lt;竞技场&amp;gt; - 停止指定名称竞技场的运作及使该竞技场的所有玩家离开. &lt;br /&gt;
 /ma force start &amp;lt;竞技场&amp;gt; - 开始运作一个指定名称的竞技场以及请出该竞技场内未准备的玩家.&lt;br /&gt;
 /ma notready &amp;lt;竞技场&amp;gt; - 获取该竞技场内所有未准备的玩家.&lt;br /&gt;
 /ma restore &amp;lt;玩家&amp;gt; - 在可能的情况下恢复指定玩家背包.&lt;br /&gt;
 /ma config reload - 重载config配置文件夹.&lt;br /&gt;
==建设指令==&lt;br /&gt;
&lt;br /&gt;
只有op (以及某些合理的指令能在后台) 使用这些指令. 它们包括了设置竞技场传送点, 竞技场出生点以及竞技场范围.&lt;br /&gt;
&lt;br /&gt;
 /ma setup &amp;lt;竞技场&amp;gt; - 进入建设指定名称的竞技场模式.&lt;br /&gt;
 /ma addarena &amp;lt;竞技场&amp;gt; - 建立一个新的竞技场节点于当前所在世界.&lt;br /&gt;
 /ma delarena &amp;lt;竞技场&amp;gt; - 删除指定名称的竞技场.&lt;br /&gt;
 /ma editarena &amp;lt;竞技场&amp;gt; - 开启或关闭指定竞技场修改模式.&lt;br /&gt;
 /ma editarena &amp;lt;竞技场&amp;gt; [true|false] - 开启 (true) 或关闭 (false) 指定竞技场的修改模式.&lt;br /&gt;
 /ma setting &amp;lt;竞技场&amp;gt; - 列出所有指定竞技场的设置项.&lt;br /&gt;
 /ma setting &amp;lt;竞技场&amp;gt; &amp;lt;设置项&amp;gt; - 查询当前指定设置项的值于指定的竞技场.&lt;br /&gt;
 /ma setting &amp;lt;竞技场&amp;gt; &amp;lt;设置项&amp;gt; &amp;lt;值&amp;gt; - 设置指定竞技场中指定设置项的指定值.&lt;br /&gt;
 /ma checkspawns - 显示竞技场出生点 (在你当前的竞技场下) 是使用红色羊毛覆盖的范围在当前你当前的位置上. 这个指令同时也能查询在这个范围内不同的点是否被出生点覆盖着.&lt;br /&gt;
 /ma classchest &amp;lt;职业&amp;gt; - 当正在查询箱子, 使指定的职业与这个箱子建立连接. 连接一个职业箱子意味着当MobArena连接建立后, 将同时复制于职业箱子内的物品, 而不是于竞技场大厅内的任何职业箱子. 当你建立一个职业箱子网络时它能带给你便利.&lt;br /&gt;
 /ma auto-generate &amp;lt;竞技场&amp;gt; - 自动生成一个指定名称的竞技场. 这个竞技场只会生成于玩家所站的位置下方.&lt;br /&gt;
 /ma auto-degenerate &amp;lt;竞技场&amp;gt; - 自动停止生成竞技场, 能基于自动生成器下有效地恢复, 当这是一个 &amp;quot;bulldozed&amp;quot; 补丁.&lt;br /&gt;
&lt;br /&gt;
=权限=&lt;br /&gt;
A permissions plugin is NOT required for MobArena to work, but if you want that extra bit of control, here&#039;s a rundown of the different types of permission nodes you can use with MobArena.&lt;br /&gt;
&lt;br /&gt;
NOTE: MobArena uses sane defaults. This means that by default, all players can use all arenas and all classes, and ops can use all admin and setup commands. Unless you want to prevent some groups from accessing certain arenas or classes, or you want to give non-ops admin and setup permissions, there is no need to mess with any permissions at all, so go away from this page and remove all occurrences of mobarena in your permissions-file!&lt;br /&gt;
&lt;br /&gt;
==竞技场权限==&lt;br /&gt;
&lt;br /&gt;
Did you read the note at the top? If not, read it before you continue.&lt;br /&gt;
&lt;br /&gt;
So, you want to remove permissions for certain arenas from certain users? Alright, that means you will have to negate or revoke the permissions in your permissions plugin. In bPermissions, the negation modifier is a caret, ^, in GroupManager and PermissionsEx it is a minus, -, and in zPermissions it is by setting the permission to false. The examples below revoke the permission for the default arena.&lt;br /&gt;
&lt;br /&gt;
 bPermissions: ^mobarena.arenas.default&lt;br /&gt;
 GroupManager: -mobarena.arenas.default&lt;br /&gt;
 zPermissions: mobarena.arenas.default: false&lt;br /&gt;
&lt;br /&gt;
I recommend letting everyone enjoy all your arenas, but this could be used in combination with &amp;quot;leveling&amp;quot; plugins to allow players to use &amp;quot;harder&amp;quot; arenas at higher levels. It could also be used for sponsors-only arenas.&lt;br /&gt;
&lt;br /&gt;
Still confused? Check the sample setup at the bottom of the page!&lt;br /&gt;
&lt;br /&gt;
==职业权限==&lt;br /&gt;
&lt;br /&gt;
Did you read the note at the top? If not, read it before you continue.&lt;br /&gt;
&lt;br /&gt;
Alright, if you&#039;re reading this, you want to remove permissions for certain classes from certain users. As with the arena permissions, you need to negate or revoke the permissions in your permissions plugin. In bPermissions, the negation modifier is a caret, ^, in GroupManager and PermissionsEx it is a minus, -, and in zPermissions it is by setting the permission to false. The examples below revoke the permission for the Knight class.&lt;br /&gt;
&lt;br /&gt;
 bPermissions: ^mobarena.classes.knight&lt;br /&gt;
 GroupManager: -mobarena.classes.knight&lt;br /&gt;
 zPermissions: mobarena.classes.knight: false&lt;br /&gt;
&lt;br /&gt;
Note how the class name is lowercase. This is important. Even if the Knight class is called KnIGhT in your config-file, it MUST be all lowercase in your permissions-file.&lt;br /&gt;
&lt;br /&gt;
As with arenas, I recommend letting everyone enjoy all the classes, unless you have a special reason not to.&lt;br /&gt;
&lt;br /&gt;
Still confused? Check the sample setup at the bottom of the page!&lt;br /&gt;
&lt;br /&gt;
==命令权限==&lt;br /&gt;
&lt;br /&gt;
Did you read the note at the top? If not, read it before you continue.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re reading this, you want to either give certain users access to some of the admin and/or setup commands, or you want to remove some of the user commands from some groups. If this is not the case, stop reading and leave this page!&lt;br /&gt;
&lt;br /&gt;
The first group of commands are the user commands. They are accessible by all players by default, so don&#039;t put mobarena.use.* or something stupid like that in your permissions-file! If you want a group to not have access to the user commands, negate the permission mobarena.use, which is the parent permission node for all the user commands. See the classes and arenas sections for information on how to negate permissions. If that doesn&#039;t work, negate the mobarena.use.join and mobarena.use.spec permissions. That should be enough.&lt;br /&gt;
&lt;br /&gt;
 mobarena.use.join&lt;br /&gt;
 mobarena.use.leave&lt;br /&gt;
 mobarena.use.spec&lt;br /&gt;
 mobarena.use.arenalist&lt;br /&gt;
 mobarena.use.playerlist&lt;br /&gt;
 mobarena.use.notready&lt;br /&gt;
 mobarena.use.class&lt;br /&gt;
The admin commands are simple. They allow disabling/enabling MobArena and individual arenas, kicking players from the arenas, restoring player inventories if they got lost somehow, forcing arenas to start or end, and teleporting in and out of arenas regardless of what the arena state is. If you want to grant all of these permissions, use the parent permission node mobarena.admin. Don&#039;t mess around with * or something stupid like that.&lt;br /&gt;
&lt;br /&gt;
 mobarena.admin.enable&lt;br /&gt;
 mobarena.admin.kick&lt;br /&gt;
 mobarena.admin.restore&lt;br /&gt;
 mobarena.admin.force&lt;br /&gt;
 mobarena.admin.teleport&lt;br /&gt;
Setup commands are only for ops, just like admin commands. Do not give these permissions to random people, because they can remove your arenas and destroy your config-files, if they do something stupid. The setup commands allow you to manage arenas, regions, spawnpoints, chests, leaderboards, etc. They also allow you to set up new classes in-game. If you want to grant all of these permissions, use the parent permission node mobarena.setup. Don&#039;t mess around with * or something stupid like that.&lt;br /&gt;
&lt;br /&gt;
 mobarena.setup.config&lt;br /&gt;
 mobarena.setup.setup&lt;br /&gt;
 mobarena.setup.setting&lt;br /&gt;
 mobarena.setup.addarena&lt;br /&gt;
 mobarena.setup.removearena&lt;br /&gt;
 mobarena.setup.editarena&lt;br /&gt;
 mobarena.setup.spawnpoints&lt;br /&gt;
 mobarena.setup.containers&lt;br /&gt;
 mobarena.setup.checkdata&lt;br /&gt;
 mobarena.setup.checkspawns&lt;br /&gt;
 mobarena.setup.classchest&lt;br /&gt;
 mobarena.setup.classes&lt;br /&gt;
 mobarena.setup.leaderboards&lt;br /&gt;
 mobarena.setup.autogenerate&lt;br /&gt;
 mobarena.setup.autodegenerate&lt;br /&gt;
Sample setup&lt;br /&gt;
&lt;br /&gt;
Assume you have a class called DiamondKnight that you only want your donors to be able to use (very common use case). How do you set up your permissions plugin when you have to revoke the class permission from the default group, but the donor group inherits from the default group? It&#039;s very simple: You&#039;re doing it wrong...&lt;br /&gt;
&lt;br /&gt;
What you have to do instead is make an auxiliary default-group that contains all your default permissions, and have your default group inherit from that group, and furthermore revoke the DiamondKnight class permission in MobArena. Your donor group then also inherits from the auxiliary group, and everything is wonderful. Confusing? Here&#039;s a pseudo-code example:&lt;br /&gt;
&lt;br /&gt;
 default-aux:                            &amp;lt;-- This is the auxiliary group that is to&lt;br /&gt;
   permissions:                              be inherited by the default group and&lt;br /&gt;
   - essentials.balance                      the donor group. It is not used for&lt;br /&gt;
   - essentials.pay                          anything else.&lt;br /&gt;
   - essentials.sell&lt;br /&gt;
&lt;br /&gt;
 default:                                &amp;lt;-- This is the default group. It inherits&lt;br /&gt;
   inherits: default-aux                     from default-aux, but also revokes the&lt;br /&gt;
   permissions:                              permission for the special class.&lt;br /&gt;
     - -mobarena.classes.diamondknight&lt;br /&gt;
&lt;br /&gt;
 donor:                                  &amp;lt;-- This is the donor group, which also&lt;br /&gt;
   inherits: default-aux                     inherits from default-aux, but it&lt;br /&gt;
   permissions:                              does not revoke any class permissions,&lt;br /&gt;
    - essentials.balance.others               which means it has access to all of&lt;br /&gt;
    - essentials.kit                          them by default.&lt;br /&gt;
This sample setup is pseudo code and cannot be simply copy/pasted into your own permissions file. It&#039;s your job to figure out how your permissions plugin works, and what its syntax is.&lt;br /&gt;
=物品语法（Item Syntax待搬运）=&lt;br /&gt;
=职业箱子（Class Chests待搬运｝=&lt;br /&gt;
=怪物波设置（Formulas待搬运）=&lt;br /&gt;
=怪物种类（Monster types待搬运）=&lt;br /&gt;
以上内容搬运自英文wiki[https://github.com/garbagemule/MobArena/wiki]&lt;/div&gt;</summary>
		<author><name>9032676</name></author>
	</entry>
	<entry>
		<id>https://mineplugin.org/index.php?title=MobArena&amp;diff=1060</id>
		<title>MobArena</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=MobArena&amp;diff=1060"/>
		<updated>2015-07-01T15:10:34Z</updated>

		<summary type="html">&lt;p&gt;9032676：​/* 玩家命令 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{待搬运}}&lt;br /&gt;
{{Bukkit Plugin Infobox&lt;br /&gt;
|版本=v0.96.9&lt;br /&gt;
|兼容服务端版本=1.8.1&lt;br /&gt;
|网址=http://dev.bukkit.org/bukkit-plugins/mobarena/}}&lt;br /&gt;
[[Category:娱乐]][[Category:机械]]&lt;br /&gt;
=安装=&lt;br /&gt;
安装MobArena其实很简单，只需以下四步:&lt;br /&gt;
*关闭服务器&amp;lt;del&amp;gt;咳咳，当然是关你自己的服务器啦&amp;lt;/del&amp;gt;.&lt;br /&gt;
*从论坛主题或是Bukkit Dev站点的项目页下载jar文件.&lt;br /&gt;
*将jar文件拖入服务端的plugins文件夹中.&lt;br /&gt;
*重启服务端. &lt;br /&gt;
之后，配置文件 (config.yml) 以及一个宣告文本(announcements.yml) 会自动创建在plugins/MobArena/路径下.&lt;br /&gt;
文件结构如下:&lt;br /&gt;
&lt;br /&gt;
 plugins/&lt;br /&gt;
     MobArena.jar&lt;br /&gt;
     MobArena/&lt;br /&gt;
         config.yml&lt;br /&gt;
         announcements.yml&lt;br /&gt;
此时此刻, 或许你想直接开始设置竞技场, 但是你需要先看看配置文件，并把它配置成你喜欢的样子&amp;lt;del&amp;gt;就是说，还是根据情况配置一下吧&amp;lt;/del&amp;gt;. 你可以在配置文件自定义MobArena的设置，职业，奖励，波数（怪物类型）&lt;br /&gt;
&lt;br /&gt;
=建立竞技场=&lt;br /&gt;
==建造一个竞技场==&lt;br /&gt;
完整的竞技场应该包含一个可以选择职业的准备区域，一个竞技场地以及观察点(离开点) &lt;br /&gt;
下面是各个选项的讲解&lt;br /&gt;
&lt;br /&gt;
大厅：&lt;br /&gt;
 玩家加入游戏之前将会在大厅选择职业.一个建造好的游戏大厅会有每一个职业的选择牌子，玩家通过点击牌子可以获取一个职业, 还有一个铁块, 玩家可以通过点击铁块来表示他们已经准备好开始游戏.牌子必须在第一行写上职业的名字（区分大小写）,但是无论你在另外三行上写什么，都不会被怪物竞技场识别，你是不能写上 ,所以你不会得到确认的信息（如果有，那是另一个插件）&lt;br /&gt;
&lt;br /&gt;
竞技场地：&lt;br /&gt;
 这里是玩家和怪物搏斗的地方.竞技场地会有墙，可能会有一个屋顶 , 这样玩家和怪物就不能跑出去了. 这使得玩家们不会只是在竞技场外闲逛。.&lt;br /&gt;
&lt;br /&gt;
观察点: &lt;br /&gt;
 当玩家想要观看一场战斗时,他们可以使用/ma spec 命令来传送到竞技场的观察点. 这同样也是竞技场中玩家死去后会传送到的地方,前提是在配置文件中，把 spectate-after-death设置为ture. 这块区域要保证观看者不能走出去闲逛（进入竞技场地或者离远竞技场）因为在观看过程中，玩家是无敌的.&lt;br /&gt;
&lt;br /&gt;
离开点: &lt;br /&gt;
 在使用 /ma leave命令后,玩家和观察者会被传送到原来所在的地方,除非竞技场有一个离开点(只是可选). 使用离开点,可以准确控制玩家在游戏后去何处.&lt;br /&gt;
&lt;br /&gt;
关于区域，传送点等，&lt;br /&gt;
&lt;br /&gt;
当竞技场建好后，就是设置怪物竞技场的区域和传送点的时候了。在设置它们前，我们先来看看他们有什么作用.&lt;br /&gt;
&lt;br /&gt;
区域: &lt;br /&gt;
 一个竞技场需要一个竞技区域,然后还可以有一个准备区域，怪物竞技场会使用这些区域来确保玩家不会作弊（通过破坏竞技场来走出区域）,然后确保怪物竞技场所产生的怪物会在里面产生. 怪物竞技场非常排外（不要局外人）, 所以也最好把不想要的生物排除在外. 区域是通过区域工具来设置的.&lt;br /&gt;
&lt;br /&gt;
传送点: &lt;br /&gt;
 当玩家加入一个怪物竞技场的游戏时，他们会被传送到准备区域中的准备点来选择职业和准备开始游戏（通过点击铁块）.当每个人都准备好的时候，玩家会被传送到竞技场内的竞技场出生点。观察者会被传送到竞技场的观察点来进入观察区域,当游戏结束的时候，玩家和观察者会被传送到他们传送来之前的地方，或者去可选的离开点,传送点会用传送点工具来设置。.&lt;br /&gt;
&lt;br /&gt;
出生点: &lt;br /&gt;
 这里的出生点指的是怪物出生的地点.怪物竞技场只会在附近有玩家的出生点产出怪物（十五个方格的半径）.需要注意的是，怪物的数量不随着按照出生点的数量改变，只会因为在配置文件中波数的倍率改变和玩家的数量所改变.出生点可以通过出生点工具来设置。.&lt;br /&gt;
&lt;br /&gt;
容器: &lt;br /&gt;
 容器就是竞技场里的箱子，回收站等。 这些容器将会在一场游戏后重置其内部空间为初始值。只有被声明了的容器才会更新其存储空间，所以仅仅在竞技场里放一个箱子可不够 - 它还需要被用工具声明。&lt;br /&gt;
&lt;br /&gt;
==设置模式==&lt;br /&gt;
我们能用配置模式来设置竞技场。 当我们进入配置模式时，物品栏将会被保存 并给我们一套金工具 （工具栏）， 每一个都有其独特作用。. We will also be able to fly, making moving around the arena a lot easier. Last, but not least, we will not be able to chat or type normal commands while in Setup Mode, because Setup Mode starts an isolated conversation with us.&lt;br /&gt;
&lt;br /&gt;
To enter Setup Mode: Type /ma setup &amp;lt;arena&amp;gt;, where &amp;lt;arena&amp;gt; is the name of an arena. Note that if you only have one arena, you don&#039;t have to type the arena name. If the arena you want to set up has not yet been created, first type /ma addarena &amp;lt;arena&amp;gt; to create it.&lt;br /&gt;
&lt;br /&gt;
To leave Setup Mode: Type done.&lt;br /&gt;
&lt;br /&gt;
Note that if you have just installed MobArena, there will be a premade arena-node called default in the config-file already. If you want a different name, create a new arena first, and then remove the default arena by typing /ma delarena default.&lt;br /&gt;
&lt;br /&gt;
In the next section, we will take a look at the different commands available in Setup Mode...&lt;br /&gt;
&lt;br /&gt;
==设置模式的命令==&lt;br /&gt;
&lt;br /&gt;
Setup Mode is an isolated conversation, which means Setup Mode will intercept everything we type. The reason for this is that it makes the commands in Setup Mode shorter (e.g. exp instead of /ma expandregion), and it also prevents us from accidentally typing commands from other plugins.&lt;br /&gt;
&lt;br /&gt;
Below is a list of all the commands we can use in Setup Mode. Many of the commands have short-hand aliases which might make them even faster to type out. As an example, the expand command has the alias exp. Sometimes it&#039;s easier to remember the longer names, but the short-hand aliases are provided for faster setup.&lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
 Leave Setup Mode.&lt;br /&gt;
 Aliases: end stop done quit&lt;br /&gt;
&lt;br /&gt;
help&lt;br /&gt;
 Display help screen.&lt;br /&gt;
 Aliases: ? h&lt;br /&gt;
&lt;br /&gt;
missing&lt;br /&gt;
 Display a list of missing (mandatory) regions, warps, and points.&lt;br /&gt;
 This command is useful if you have forgotten how far you are in the setup process, and what you still need to set up.&lt;br /&gt;
 Aliases: miss&lt;br /&gt;
&lt;br /&gt;
expand &amp;lt;region&amp;gt; &amp;lt;amount&amp;gt; &amp;lt;direction&amp;gt;&lt;br /&gt;
 Expand a region by some amount in some direction.&lt;br /&gt;
 Valid regions: ar for the arena region, or lr for the lobby region&lt;br /&gt;
 Valid amounts: positive integers (whole numbers)&lt;br /&gt;
 Valid directions: up, down, or out&lt;br /&gt;
 Example: expand ar 5 up&lt;br /&gt;
 Aliases: exp&lt;br /&gt;
&lt;br /&gt;
show [&amp;lt;region&amp;gt;|&amp;lt;warp&amp;gt;|&amp;lt;point&amp;gt;]&lt;br /&gt;
  Show a region, warp, or point(s) as red wool blocks.&lt;br /&gt;
  Valid regions: ar for the arena region, or lr for the lobby region&lt;br /&gt;
  Valid warps: arena, lobby, spec, exit&lt;br /&gt;
  Valid points: spawns (or just sp) for spawnpoints, chests (or just c) for chests&lt;br /&gt;
  Example: show sp&lt;br /&gt;
&lt;br /&gt;
==设置时的工具==&lt;br /&gt;
&lt;br /&gt;
The Toolbox is a set of golden tools, where each tool has a specific function. We will use these tools to set up the regions, warps, and points of our arena. The tools are used by left- or right-clicking a block while holding them, and the actions vary depending on the specific tool.&lt;br /&gt;
&lt;br /&gt;
Note that the functions of a tool are described in the item tooltip, which we can see by opening up our inventory and hovering our mouse over the tools.&lt;br /&gt;
&lt;br /&gt;
===区域工具===&lt;br /&gt;
&lt;br /&gt;
The arena and lobby regions can be set up using the Region tools (axe). There are two golden axes in the Toolbox, and they both behave the same, except that one is for the arena region, and the other is for the lobby region. The tools are named accordingly, and they will display either &amp;quot;Arena Region&amp;quot; or &amp;quot;Lobby Region&amp;quot; above the quickbar when we select them.&lt;br /&gt;
&lt;br /&gt;
Note that the behavior of the Region tools is similar to that of the WorldEdit wand (wooden axe), so if you are familiar with defining regions in WorldEdit, the Region tools should feel familiar.&lt;br /&gt;
&lt;br /&gt;
 Left-click: Set the first point to be the location of the target block&lt;br /&gt;
 Right-click: Set the second point to be the location of the target block&lt;br /&gt;
&lt;br /&gt;
Upon setting both points, the region will be defined. Type show ar (or show lr) to check that the region spans the desired area. If the region is a little bit too small, use the expand command (see above) to make it a little bigger.&lt;br /&gt;
&lt;br /&gt;
Note: The region MUST look like a box (3D) and not a rectangle (2D). If the region is just a rectangle, your arena will not work correctly. The same applies if the arena floor is not fully contained in the box, so make sure to expand the region down a block or two to be sure.&lt;br /&gt;
&lt;br /&gt;
===玩家传送点工具===&lt;br /&gt;
&lt;br /&gt;
The arena, lobby, spectator, and exit warps can be set up using the Warps tool (hoe). The tool knows about all the warps, and we have to cycle through them to select the warp we want to place. The default selected warp is the arena warp.&lt;br /&gt;
&lt;br /&gt;
 Left-click: Set the currently selected warp on top of the target block&lt;br /&gt;
 Right-click: Cycle between available warps&lt;br /&gt;
&lt;br /&gt;
When left-clicking, the selected warp will be set to the top of the clicked block. The pitch (up and down) will be set to 0, which means when players are teleported, they will be looking &amp;quot;straight ahead&amp;quot;. The yaw (rotation, left/right) will be set to whatever direction we are facing, when we set the warp. This means that we need to rotate ourselves to be looking in the direction we want the players to look in when they are teleported to the point.&lt;br /&gt;
&lt;br /&gt;
Note: The arena, lobby, and spectator warps are all required. The exit warp is optional.&lt;br /&gt;
&lt;br /&gt;
===怪物产生点工具===&lt;br /&gt;
&lt;br /&gt;
The spawnpoints can be set up using the Spawnpoints tool (sword). The tool knows about all the spawnpoints of the arena, and allows us to remove existing ones or add new ones as we please.&lt;br /&gt;
&lt;br /&gt;
 Left-click: Add a spawnpoint on top of the target block&lt;br /&gt;
 Right-click: Remove the spawnpoint on top of the target block (if the spawnpoint exists)&lt;br /&gt;
&lt;br /&gt;
When left-clicking, a spawnpoint will be added on top of the clicked block, if one doesn&#039;t already exist. Right-clicking a block will remove a spawnpoint on that block, if one exists.&lt;br /&gt;
&lt;br /&gt;
Note: Due to limitations and &amp;quot;bugs&amp;quot; in Minecraft, it is not possible (read: viable) to spawn mobs further than 15 blocks away from a player, and still make it target and attack the player naturally. Therefore, it is recommended to place many spawnpoints, so that every single location in the arena is within a 15-block radius of a spawnpoint. If a player is not within 15 blocks of any spawnpoint, MobArena will print a warning to the console with the coordinates. If no players are within 15 blocks of any spawnpoint, MobArena will default to using all spawnpoints, which may result in mobs spawning far away from players, so they will have to run around searching for them.&lt;br /&gt;
&lt;br /&gt;
===容器工具===&lt;br /&gt;
&lt;br /&gt;
The chests and containers can be set up using the Chests tool (spade). It works very much like the Spawnpoints tool, but requires that the clicked block is a valid container.&lt;br /&gt;
&lt;br /&gt;
 Left-click: Register the clicked container (if it wasn&#039;t registered)&lt;br /&gt;
 Right-click: Unregister the clicked container (if it was registered)&lt;br /&gt;
&lt;br /&gt;
When left-clicking a container, MobArena will register the container (if it wasn&#039;t registered already), such that when an arena session ends, the container will be restored to contain whatever was in it when the arena began. Right-clicking a container will unregister it.&lt;br /&gt;
&lt;br /&gt;
=命令=&lt;br /&gt;
==玩家命令==&lt;br /&gt;
&lt;br /&gt;
这些指令能够给所有玩家使用. 它们包括了加入, 离开, 旁观和列出所有竞技场(可用或不可用)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 /ma join (&amp;lt;竞技场&amp;gt;) or /ma j (&amp;lt;竞技场&amp;gt;) - 加入指定名称的竞技场.&lt;br /&gt;
 /ma leave or /ma l - 离开竞技场或是离开旁观者模式.&lt;br /&gt;
 /ma notready - 获取所有未准备的玩家.&lt;br /&gt;
 /ma spec (&amp;lt;竞技场&amp;gt;) or /ma s (&amp;lt;竞技场&amp;gt;) - 以旁观者模式加入指定名称竞技场.&lt;br /&gt;
 /ma arenas - 获取所有竞技场的名字, 若是绿色则已启用, 灰色则未启用.&lt;br /&gt;
 /ma players - 获取当前所有竞技场的所有玩家.&lt;br /&gt;
 /ma players &amp;lt;竞技场&amp;gt; - 获取指定竞技场的所有玩家.&lt;br /&gt;
 /ma class &amp;lt;职业&amp;gt; - 如果你在大厅里, 是应直接用指令而不是透过牌子互动选择职业.&lt;br /&gt;
&lt;br /&gt;
==管理员指令==&lt;br /&gt;
&lt;br /&gt;
Only ops and the console can issue these commands. They include forcefully starting or ending arenas, enabling/disabling individual arenas or MobArena entirely.&lt;br /&gt;
&lt;br /&gt;
 /ma enable - Enable MobArena.&lt;br /&gt;
 /ma disable - Disable MobArena.&lt;br /&gt;
 /ma enable &amp;lt;arena&amp;gt; - Enable the arena with the specified name.&lt;br /&gt;
 /ma disable &amp;lt;arena&amp;gt; - Disable the arena with the specified name.&lt;br /&gt;
 /ma force end - Forcefully end all arenas.&lt;br /&gt;
 /ma force end &amp;lt;arena&amp;gt; - Forcefully end the arena with the specified name; forces all players to leave. &lt;br /&gt;
 /ma force start &amp;lt;arena&amp;gt; - Forcefully start the arena with the specified name; forces all players who aren&#039;t ready to leave.&lt;br /&gt;
 /ma notready &amp;lt;arena&amp;gt; - Get a list of all players in the given arena who aren&#039;t ready.&lt;br /&gt;
 /ma restore &amp;lt;player&amp;gt; - Restore the inventory of the player with the given name, if possible.&lt;br /&gt;
 /ma config reload - Reload the config-file into memory. This is useful if changes are made in the config-file while the server is running.&lt;br /&gt;
==建设指令==&lt;br /&gt;
&lt;br /&gt;
Only ops (and the console, if it makes sense) can issue these commands. They include setting warp points, spawnpoints and region points.&lt;br /&gt;
&lt;br /&gt;
 /ma setup &amp;lt;arena&amp;gt; - Enter Setup Mode for the given arena.&lt;br /&gt;
 /ma addarena &amp;lt;arena&amp;gt; - Create a new arena-node in the current world.&lt;br /&gt;
 /ma delarena &amp;lt;arena&amp;gt; - Delete the arena with the given name.&lt;br /&gt;
 /ma editarena &amp;lt;arena&amp;gt; - Toggle Edit Mode for the given arena.&lt;br /&gt;
 /ma editarena &amp;lt;arena&amp;gt; [true|false] - Turn on or off Edit Mode for the given arena.&lt;br /&gt;
 /ma setting &amp;lt;arena&amp;gt; - List all per-arena settings for the given arena.&lt;br /&gt;
 /ma setting &amp;lt;arena&amp;gt; &amp;lt;setting&amp;gt; - Check the current value of the given setting for the given arena.&lt;br /&gt;
 /ma setting &amp;lt;arena&amp;gt; &amp;lt;setting&amp;gt; &amp;lt;value&amp;gt; - Set the value of the given setting for the given arena to the given value.&lt;br /&gt;
 /ma checkspawns - Shows the spawnpoints (of the arena you are currently standing in) which cover your current location as red wool blocks. This command can be used to check if specific &lt;br /&gt;
points in your arena are actually covered by spawnpoints or not.&lt;br /&gt;
 /ma classchest &amp;lt;class&amp;gt; - While looking at a chest, link the chest to the given class as a linked class chest. Linking a class chest means MobArena will always copy the items from the linked&lt;br /&gt;
 chest, regardless of any local class chests in arena lobbies. This is useful if you want a global class chest for a class.&lt;br /&gt;
 /ma auto-generate &amp;lt;arena&amp;gt; - Auto-generate a new arena with the given name. The arena will be generated just below the player in the world they are standing in.&lt;br /&gt;
 /ma auto-degenerate &amp;lt;arena&amp;gt; - Degenerate the arena with the given name, effectively restoring the patch that was &amp;quot;bulldozed&amp;quot; with the auto-generator.&lt;br /&gt;
&lt;br /&gt;
=权限=&lt;br /&gt;
A permissions plugin is NOT required for MobArena to work, but if you want that extra bit of control, here&#039;s a rundown of the different types of permission nodes you can use with MobArena.&lt;br /&gt;
&lt;br /&gt;
NOTE: MobArena uses sane defaults. This means that by default, all players can use all arenas and all classes, and ops can use all admin and setup commands. Unless you want to prevent some groups from accessing certain arenas or classes, or you want to give non-ops admin and setup permissions, there is no need to mess with any permissions at all, so go away from this page and remove all occurrences of mobarena in your permissions-file!&lt;br /&gt;
&lt;br /&gt;
==竞技场权限==&lt;br /&gt;
&lt;br /&gt;
Did you read the note at the top? If not, read it before you continue.&lt;br /&gt;
&lt;br /&gt;
So, you want to remove permissions for certain arenas from certain users? Alright, that means you will have to negate or revoke the permissions in your permissions plugin. In bPermissions, the negation modifier is a caret, ^, in GroupManager and PermissionsEx it is a minus, -, and in zPermissions it is by setting the permission to false. The examples below revoke the permission for the default arena.&lt;br /&gt;
&lt;br /&gt;
 bPermissions: ^mobarena.arenas.default&lt;br /&gt;
 GroupManager: -mobarena.arenas.default&lt;br /&gt;
 zPermissions: mobarena.arenas.default: false&lt;br /&gt;
&lt;br /&gt;
I recommend letting everyone enjoy all your arenas, but this could be used in combination with &amp;quot;leveling&amp;quot; plugins to allow players to use &amp;quot;harder&amp;quot; arenas at higher levels. It could also be used for sponsors-only arenas.&lt;br /&gt;
&lt;br /&gt;
Still confused? Check the sample setup at the bottom of the page!&lt;br /&gt;
&lt;br /&gt;
==职业权限==&lt;br /&gt;
&lt;br /&gt;
Did you read the note at the top? If not, read it before you continue.&lt;br /&gt;
&lt;br /&gt;
Alright, if you&#039;re reading this, you want to remove permissions for certain classes from certain users. As with the arena permissions, you need to negate or revoke the permissions in your permissions plugin. In bPermissions, the negation modifier is a caret, ^, in GroupManager and PermissionsEx it is a minus, -, and in zPermissions it is by setting the permission to false. The examples below revoke the permission for the Knight class.&lt;br /&gt;
&lt;br /&gt;
 bPermissions: ^mobarena.classes.knight&lt;br /&gt;
 GroupManager: -mobarena.classes.knight&lt;br /&gt;
 zPermissions: mobarena.classes.knight: false&lt;br /&gt;
&lt;br /&gt;
Note how the class name is lowercase. This is important. Even if the Knight class is called KnIGhT in your config-file, it MUST be all lowercase in your permissions-file.&lt;br /&gt;
&lt;br /&gt;
As with arenas, I recommend letting everyone enjoy all the classes, unless you have a special reason not to.&lt;br /&gt;
&lt;br /&gt;
Still confused? Check the sample setup at the bottom of the page!&lt;br /&gt;
&lt;br /&gt;
==命令权限==&lt;br /&gt;
&lt;br /&gt;
Did you read the note at the top? If not, read it before you continue.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re reading this, you want to either give certain users access to some of the admin and/or setup commands, or you want to remove some of the user commands from some groups. If this is not the case, stop reading and leave this page!&lt;br /&gt;
&lt;br /&gt;
The first group of commands are the user commands. They are accessible by all players by default, so don&#039;t put mobarena.use.* or something stupid like that in your permissions-file! If you want a group to not have access to the user commands, negate the permission mobarena.use, which is the parent permission node for all the user commands. See the classes and arenas sections for information on how to negate permissions. If that doesn&#039;t work, negate the mobarena.use.join and mobarena.use.spec permissions. That should be enough.&lt;br /&gt;
&lt;br /&gt;
 mobarena.use.join&lt;br /&gt;
 mobarena.use.leave&lt;br /&gt;
 mobarena.use.spec&lt;br /&gt;
 mobarena.use.arenalist&lt;br /&gt;
 mobarena.use.playerlist&lt;br /&gt;
 mobarena.use.notready&lt;br /&gt;
 mobarena.use.class&lt;br /&gt;
The admin commands are simple. They allow disabling/enabling MobArena and individual arenas, kicking players from the arenas, restoring player inventories if they got lost somehow, forcing arenas to start or end, and teleporting in and out of arenas regardless of what the arena state is. If you want to grant all of these permissions, use the parent permission node mobarena.admin. Don&#039;t mess around with * or something stupid like that.&lt;br /&gt;
&lt;br /&gt;
 mobarena.admin.enable&lt;br /&gt;
 mobarena.admin.kick&lt;br /&gt;
 mobarena.admin.restore&lt;br /&gt;
 mobarena.admin.force&lt;br /&gt;
 mobarena.admin.teleport&lt;br /&gt;
Setup commands are only for ops, just like admin commands. Do not give these permissions to random people, because they can remove your arenas and destroy your config-files, if they do something stupid. The setup commands allow you to manage arenas, regions, spawnpoints, chests, leaderboards, etc. They also allow you to set up new classes in-game. If you want to grant all of these permissions, use the parent permission node mobarena.setup. Don&#039;t mess around with * or something stupid like that.&lt;br /&gt;
&lt;br /&gt;
 mobarena.setup.config&lt;br /&gt;
 mobarena.setup.setup&lt;br /&gt;
 mobarena.setup.setting&lt;br /&gt;
 mobarena.setup.addarena&lt;br /&gt;
 mobarena.setup.removearena&lt;br /&gt;
 mobarena.setup.editarena&lt;br /&gt;
 mobarena.setup.spawnpoints&lt;br /&gt;
 mobarena.setup.containers&lt;br /&gt;
 mobarena.setup.checkdata&lt;br /&gt;
 mobarena.setup.checkspawns&lt;br /&gt;
 mobarena.setup.classchest&lt;br /&gt;
 mobarena.setup.classes&lt;br /&gt;
 mobarena.setup.leaderboards&lt;br /&gt;
 mobarena.setup.autogenerate&lt;br /&gt;
 mobarena.setup.autodegenerate&lt;br /&gt;
Sample setup&lt;br /&gt;
&lt;br /&gt;
Assume you have a class called DiamondKnight that you only want your donors to be able to use (very common use case). How do you set up your permissions plugin when you have to revoke the class permission from the default group, but the donor group inherits from the default group? It&#039;s very simple: You&#039;re doing it wrong...&lt;br /&gt;
&lt;br /&gt;
What you have to do instead is make an auxiliary default-group that contains all your default permissions, and have your default group inherit from that group, and furthermore revoke the DiamondKnight class permission in MobArena. Your donor group then also inherits from the auxiliary group, and everything is wonderful. Confusing? Here&#039;s a pseudo-code example:&lt;br /&gt;
&lt;br /&gt;
 default-aux:                            &amp;lt;-- This is the auxiliary group that is to&lt;br /&gt;
   permissions:                              be inherited by the default group and&lt;br /&gt;
   - essentials.balance                      the donor group. It is not used for&lt;br /&gt;
   - essentials.pay                          anything else.&lt;br /&gt;
   - essentials.sell&lt;br /&gt;
&lt;br /&gt;
 default:                                &amp;lt;-- This is the default group. It inherits&lt;br /&gt;
   inherits: default-aux                     from default-aux, but also revokes the&lt;br /&gt;
   permissions:                              permission for the special class.&lt;br /&gt;
     - -mobarena.classes.diamondknight&lt;br /&gt;
&lt;br /&gt;
 donor:                                  &amp;lt;-- This is the donor group, which also&lt;br /&gt;
   inherits: default-aux                     inherits from default-aux, but it&lt;br /&gt;
   permissions:                              does not revoke any class permissions,&lt;br /&gt;
    - essentials.balance.others               which means it has access to all of&lt;br /&gt;
    - essentials.kit                          them by default.&lt;br /&gt;
This sample setup is pseudo code and cannot be simply copy/pasted into your own permissions file. It&#039;s your job to figure out how your permissions plugin works, and what its syntax is.&lt;br /&gt;
=物品语法（Item Syntax待搬运）=&lt;br /&gt;
=职业箱子（Class Chests待搬运｝=&lt;br /&gt;
=怪物波设置（Formulas待搬运）=&lt;br /&gt;
=怪物种类（Monster types待搬运）=&lt;br /&gt;
以上内容搬运自英文wiki[https://github.com/garbagemule/MobArena/wiki]&lt;/div&gt;</summary>
		<author><name>9032676</name></author>
	</entry>
	<entry>
		<id>https://mineplugin.org/index.php?title=Multiworld&amp;diff=774</id>
		<title>Multiworld</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=Multiworld&amp;diff=774"/>
		<updated>2015-02-07T13:36:37Z</updated>

		<summary type="html">&lt;p&gt;9032676：​/* Optional features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{待翻译}}&lt;br /&gt;
{{Bukkit Plugin Infobox&lt;br /&gt;
|插件名=Multiworld&lt;br /&gt;
|版本=v5.2.5&lt;br /&gt;
|前置插件=无&lt;br /&gt;
|兼容服务端版本=1.7.9 r0.2&lt;br /&gt;
|網址=http://dev.bukkit.org/bukkit-plugins/multiworld-v-2-0/&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=概述=&lt;br /&gt;
使用Multiworld插件，可以很容易地自定义每个世界对应的末地与下界，你可以随意配置。(受限于插件可实现的功能范围)&lt;br /&gt;
==历史==&lt;br /&gt;
我制作这个插件是因为该插件的原作者&amp;quot;Baummann&amp;quot;，现在不再活跃。之前，这个插件非常简易，只有两个命令: /goto and /newworld. 于是我接过这个项目并且开发出更好的版本。现在Multiworld已经更新到v5.2.5。&lt;br /&gt;
==特性==&lt;br /&gt;
自定义世界类型，例如沙子世界&lt;br /&gt;
支持修改玩家进入世界时的游戏模式&lt;br /&gt;
支持使用/mw move以及/mw goto指令于指定地点之间传送，就像在minecraft服务器使用/teleport指令一样&lt;br /&gt;
支持独立世界聊天频道&lt;br /&gt;
&lt;br /&gt;
=命令与权限=&lt;br /&gt;
  请求:本条目需要创建表格，成员请帮助编辑排版。&lt;br /&gt;
&lt;br /&gt;
世界命令&lt;br /&gt;
命令 描述 权限&lt;br /&gt;
====世界====&lt;br /&gt;
 /mw create &amp;lt;世界名称&amp;gt; [世界类型] [世界种子] 在数据库中创建一个新的世界.&lt;br /&gt;
 注意: 你也可以使用这个命令来添加已存在的世界.&lt;br /&gt;
 警告: 不要给你不信任的人这个权限，如果拥有这个权限，他将可以无限地创建世界!  multiworld.command.create&lt;br /&gt;
 /mw load &amp;lt;世界名称&amp;gt; 加载数据库中的世界 multiworld.command.load&lt;br /&gt;
 /mw unload &amp;lt;世界名称&amp;gt; 卸载数据库中的世界(并非删除)，其他插件将无法查看到该世界  multiworld.command.unload&lt;br /&gt;
 /mw delete &amp;lt;世界名称&amp;gt; 删除数据库中的世界.&lt;br /&gt;
 警告: 这个功能是移除multiworld设置里面已经定义的一个世界! multiworld.command.delete&lt;br /&gt;
 /mw list 列出服务器中已经生成地形的世界. multiworld.command.list&lt;br /&gt;
 /mw info 显示当前世界的信息 multiworld.command.info&lt;br /&gt;
 /mw listgens 列出可用的世界地形类型，辅助使用/mw create. multiworld.command.listgens&lt;br /&gt;
====规则====&lt;br /&gt;
 /mw listflagsList 列出所有可能使用于标记值的选项在/mw setflag 指令内. commands.multiworld.command.flags&lt;br /&gt;
 /mw setflag &amp;lt;世界名称&amp;gt; &amp;lt;标记值&amp;gt; &amp;lt;变量&amp;gt; 于指定世界内设置一个标记值或选项. multiworld.command.setflag&lt;br /&gt;
 /mw getflag &amp;lt;世界名称&amp;gt; &amp;lt;标记值&amp;gt; 获取标记值在指定世界, 世界名称填写 * 则可以获取全部世界 flags.multiworld.command.getflag&lt;br /&gt;
====传送门====&lt;br /&gt;
 /mw link &amp;lt;源世界&amp;gt; &amp;lt;目标世界&amp;gt; 连接 &amp;lt;源世界&amp;gt; 世界的地狱门到 &amp;lt;目标世界&amp;gt; 世界的地狱门.&lt;br /&gt;
 提示，使用这个功能需要开启地狱门连接权限! multiworld.command.link.nether&lt;br /&gt;
 /mw link-end &amp;lt;源世界&amp;gt; &amp;lt;目标世界&amp;gt; 连接全部未界传送门由 &amp;lt;源世界&amp;gt; 至 &amp;lt;目标世界&amp;gt;.&lt;br /&gt;
 提示，使用这个功能需要开启未地传送门连接权限! multiworld.command.link.end&lt;br /&gt;
====传送====&lt;br /&gt;
 /mw goto &amp;lt;世界名称&amp;gt; 将你自己传送到此世界, 这个指令也能够使用简写/goto &amp;lt;世界名称&amp;gt; multiworld.command.goto&lt;br /&gt;
 /mw move &amp;lt;玩家名称&amp;gt; &amp;lt;世界名称&amp;gt; 移动指定玩家至一个世界 multiworld.command.move&lt;br /&gt;
====出生点====&lt;br /&gt;
 /mw spawn传送到所在世界的出生点, 移动其他人需要用 /mw move.multiworld.command.spawn&lt;br /&gt;
 /mw setspawn设置所在世界的出生点, 你可以使用这个命令来修正出生点。 pointmultiworld.command.setspawn&lt;br /&gt;
====插件基础命令====&lt;br /&gt;
 /mw save保存插件数据multiworld.command.save&lt;br /&gt;
 /mw reload重新加载插件数据multiworld.command.reload&lt;br /&gt;
 /mw debug显示调试信息，这些将会在你碰到插件错误（报告）时非常有用multiworld.command.debug&lt;br /&gt;
 /mw help显示帮助，这样你就不用每次来看这个网页了multiworld.command.help&lt;br /&gt;
 /mw eastereggNot a real command, but there is a easter egg hidden in multiworld-（这个命令比较有趣和无用，故不作翻译。你可以尝试下 提示：复活节彩蛋）&lt;br /&gt;
&lt;br /&gt;
====其他====&lt;br /&gt;
 -如果想要使他人在进入一个世界后转为创造模式. 建议给所有人这个权限.multiworld.creativemode&lt;br /&gt;
 -Gives access to the basic Multiworld moderator controll, this permission won&#039;t allow users to modefy settings of existing world, it only allows them to view the settings / teleport to worldsmultiworld.basic&lt;br /&gt;
 -你可以使用这个权限来给予一个人关于这个插件的所有权限.Multiworld.admin&lt;br /&gt;
&lt;br /&gt;
=可选的特性=&lt;br /&gt;
 特性 NameDescriptionConfiguration 的位置&lt;br /&gt;
 给予 worldoptions.useEndPortalHandler 权限，未地传送门管理器则允许你自定义一个未地传送门&lt;br /&gt;
下界传送门管理器，这个管理器可能使下界传送门重新定义到一个自定义的地狱世界，这个配置在 worldoptions.usePortalHandler&lt;br /&gt;
WorldChatSeperatorThis allows you to use the RecieveChat and the SendChat flags on a worldoptions.useWorldChatSeperator&lt;br /&gt;
GamemodeChangerThis allows you to use the flag CreativeWorld to turn on creative mode for a world, to use this you need to give you users the following permissions on all worlds: multiworld.creativemode &lt;br /&gt;
This module also comes with a other configuration settings, when you turn off usecreativemodeinv, it ONLY handles the gamemode part, it won&#039;t change the inventory contents, this can be used if you have a custom plugin for per world inventories.options.usecreativemode&lt;br /&gt;
EnderBlockPrevents the use of ender chests in creative mode, this can be used to prevent people from cheating stuff by storing it inside a ender chest in a creative world, and then removing it in a survival world.options.blockEnderChestInCrea&lt;br /&gt;
WorldSpawnHandlerThis allows you to have custom respawn worlds per world group, this can be setup by turning this part on to generate the configuration needed for this.options.useWorldSpawnHandler&lt;br /&gt;
CraftbukkitHooksAllows multiworld to hook into craftbukkit to display information that the bukit api won&#039;t provide. This feature will try to turn itself off when there are any errors.options.craftbukkitHooks&lt;br /&gt;
&lt;br /&gt;
=Multiworld and Data=&lt;br /&gt;
Multiworld is using a statistcs tracking code so useage statistics wil be logged, for more information what is logged see:&lt;br /&gt;
Usage statistics at v3.5.0&lt;br /&gt;
=Other recommended plugins for your server=&lt;br /&gt;
[[LocationTeleport]] - This plugin teleports users when they enter a arena, when you shape the area like a portal, you can have your own portals&lt;br /&gt;
[[hothgenerator]] - Generates a awesome snow world&lt;br /&gt;
/mw create WorldName plugin:HothGenerator &lt;br /&gt;
(Case sensitive)&lt;br /&gt;
[[multiinv]] - Allows more control between the inventories of worlds than multiworld can provide on its own.&lt;/div&gt;</summary>
		<author><name>9032676</name></author>
	</entry>
	<entry>
		<id>https://mineplugin.org/index.php?title=Multiworld&amp;diff=601</id>
		<title>Multiworld</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=Multiworld&amp;diff=601"/>
		<updated>2015-01-27T14:29:09Z</updated>

		<summary type="html">&lt;p&gt;9032676：​/* 命令与权限 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{待翻译}}&lt;br /&gt;
{{Bukkit Plugin Infobox&lt;br /&gt;
|插件名=Multiworld&lt;br /&gt;
|版本=v5.2.5&lt;br /&gt;
|前置插件=无&lt;br /&gt;
|兼容服务端版本=1.7.9 r0.2&lt;br /&gt;
|網址=http://dev.bukkit.org/bukkit-plugins/multiworld-v-2-0/&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=概述=&lt;br /&gt;
使用Multiworld插件，可以很容易地自定义每个世界对应的末地与下界，你可以随意配置。(受限于插件可实现的功能范围)&lt;br /&gt;
==历史==&lt;br /&gt;
我制作这个插件是因为该插件的原作者&amp;quot;Baummann&amp;quot;，现在不再活跃。之前，这个插件非常简易，只有两个命令: /goto and /newworld. 于是我接过这个项目并且开发出更好的版本。现在Multiworld已经更新到v5.2.5。&lt;br /&gt;
==特性==&lt;br /&gt;
自定义世界类型，例如沙子世界&lt;br /&gt;
支持修改玩家进入世界时的游戏模式&lt;br /&gt;
支持使用/mw move以及/mw goto指令于指定地点之间传送，就像在minecraft服务器使用/teleport指令一样&lt;br /&gt;
支持独立世界聊天频道&lt;br /&gt;
&lt;br /&gt;
=命令与权限=&lt;br /&gt;
  请求:本条目需要创建表格，成员请帮助编辑排版。&lt;br /&gt;
&lt;br /&gt;
世界命令&lt;br /&gt;
命令 描述 权限&lt;br /&gt;
====世界====&lt;br /&gt;
 /mw create &amp;lt;世界名称&amp;gt; [世界类型] [世界种子] 在数据库中创建一个新的世界.&lt;br /&gt;
 注意: 你也可以使用这个命令来添加已存在的世界.&lt;br /&gt;
 警告: 不要给你不信任的人这个权限，如果拥有这个权限，他将可以无限地创建世界!  multiworld.command.create&lt;br /&gt;
 /mw load &amp;lt;世界名称&amp;gt; 加载数据库中的世界 multiworld.command.load&lt;br /&gt;
 /mw unload &amp;lt;世界名称&amp;gt; 卸载数据库中的世界(并非删除)，其他插件将无法查看到该世界  multiworld.command.unload&lt;br /&gt;
 /mw delete &amp;lt;世界名称&amp;gt; 删除数据库中的世界.&lt;br /&gt;
 警告: 这个功能是移除multiworld设置里面已经定义的一个世界! multiworld.command.delete&lt;br /&gt;
 /mw list 列出服务器中已经生成地形的世界. multiworld.command.list&lt;br /&gt;
 /mw info 显示当前世界的信息 multiworld.command.info&lt;br /&gt;
 /mw listgens 列出可用的世界地形类型，辅助使用/mw create. multiworld.command.listgens&lt;br /&gt;
====规则====&lt;br /&gt;
 /mw listflagsList 列出所有可能使用于标记值的选项在/mw setflag 指令内. commands.multiworld.command.flags&lt;br /&gt;
 /mw setflag &amp;lt;世界名称&amp;gt; &amp;lt;标记值&amp;gt; &amp;lt;变量&amp;gt; 于指定世界内设置一个标记值或选项. multiworld.command.setflag&lt;br /&gt;
 /mw getflag &amp;lt;世界名称&amp;gt; &amp;lt;标记值&amp;gt; 获取标记值在指定世界, 世界名称填写 * 则可以获取全部世界 flags.multiworld.command.getflag&lt;br /&gt;
====传送门====&lt;br /&gt;
 /mw link &amp;lt;源世界&amp;gt; &amp;lt;目标世界&amp;gt; 连接 &amp;lt;源世界&amp;gt; 世界的地狱门到 &amp;lt;目标世界&amp;gt; 世界的地狱门.&lt;br /&gt;
 提示，使用这个功能需要开启地狱门连接权限! multiworld.command.link.nether&lt;br /&gt;
 /mw link-end &amp;lt;源世界&amp;gt; &amp;lt;目标世界&amp;gt; 连接全部未界传送门由 &amp;lt;源世界&amp;gt; 至 &amp;lt;目标世界&amp;gt;.&lt;br /&gt;
 提示，使用这个功能需要开启未地传送门连接权限! multiworld.command.link.end&lt;br /&gt;
====传送====&lt;br /&gt;
 /mw goto &amp;lt;世界名称&amp;gt; 将你自己传送到此世界, 这个指令也能够使用简写/goto &amp;lt;世界名称&amp;gt; multiworld.command.goto&lt;br /&gt;
 /mw move &amp;lt;玩家名称&amp;gt; &amp;lt;世界名称&amp;gt; 移动指定玩家至一个世界 multiworld.command.move&lt;br /&gt;
====出生点====&lt;br /&gt;
 /mw spawnTeleports yourself to spawn, to move other people use /mw move.multiworld.command.spawn&lt;br /&gt;
 /mw setspawnSets the spawn of a world, you can use this to correct the starting spawn pointmultiworld.command.setspawn&lt;br /&gt;
 Core and Utility&lt;br /&gt;
 /mw saveSaves the plugin datamultiworld.command.save&lt;br /&gt;
 /mw reloadReload the plugin datamultiworld.command.reload&lt;br /&gt;
 /mw debugShows some debugging information, this information is very handy when you create a bug reportmultiworld.command.debug&lt;br /&gt;
 /mw helpShows help about the commands used in Multiworld, useful so you don&#039;t need to go to this pagemultiworld.command.help&lt;br /&gt;
 /mw eastereggNot a real command, but there is a easter egg hidden in multiworld-&lt;br /&gt;
====其他====&lt;br /&gt;
 -Permission used to allow multiworld to change the gamemode of the affected player when entering a creative world. Its recommend to give everyone this permission.multiworld.creativemode&lt;br /&gt;
 -Gives access to the basic Multiworld moderator controll, this permission won&#039;t allow users to modefy settings of existing world, it only allows them to view the settings / teleport to worldsmultiworld.basic&lt;br /&gt;
 -All the permissions from multiworld, you can also use the star permission to give them all permissions.Multiworld.admin&lt;br /&gt;
&lt;br /&gt;
=Optional features=&lt;br /&gt;
Feature NameDescriptionConfiguration location&lt;br /&gt;
End portal handlerThe end portal handlers allows you to define custom end portals per worldoptions.useEndPortalHandler&lt;br /&gt;
Nether portal handlerThis addon makes it posiable to redirect netherportals to custom nether worlds, this setting is per-worldoptions.usePortalHandler&lt;br /&gt;
WorldChatSeperatorThis allows you to use the RecieveChat and the SendChat flags on a worldoptions.useWorldChatSeperator&lt;br /&gt;
GamemodeChangerThis allows you to use the flag CreativeWorld to turn on creative mode for a world, to use this you need to give you users the following permissions on all worlds: multiworld.creativemode &lt;br /&gt;
This module also comes with a other configuration settings, when you turn off usecreativemodeinv, it ONLY handles the gamemode part, it won&#039;t change the inventory contents, this can be used if you have a custom plugin for per world inventories.options.usecreativemode&lt;br /&gt;
EnderBlockPrevents the use of ender chests in creative mode, this can be used to prevent people from cheating stuff by storing it inside a ender chest in a creative world, and then removing it in a survival world.options.blockEnderChestInCrea&lt;br /&gt;
WorldSpawnHandlerThis allows you to have custom respawn worlds per world group, this can be setup by turning this part on to generate the configuration needed for this.options.useWorldSpawnHandler&lt;br /&gt;
CraftbukkitHooksAllows multiworld to hook into craftbukkit to display information that the bukit api won&#039;t provide. This feature will try to turn itself off when there are any errors.options.craftbukkitHooks&lt;br /&gt;
=Multiworld and Data=&lt;br /&gt;
Multiworld is using a statistcs tracking code so useage statistics wil be logged, for more information what is logged see:&lt;br /&gt;
Usage statistics at v3.5.0&lt;br /&gt;
=Other recommended plugins for your server=&lt;br /&gt;
[[LocationTeleport]] - This plugin teleports users when they enter a arena, when you shape the area like a portal, you can have your own portals&lt;br /&gt;
[[hothgenerator]] - Generates a awesome snow world&lt;br /&gt;
/mw create WorldName plugin:HothGenerator &lt;br /&gt;
(Case sensitive)&lt;br /&gt;
[[multiinv]] - Allows more control between the inventories of worlds than multiworld can provide on its own.&lt;/div&gt;</summary>
		<author><name>9032676</name></author>
	</entry>
	<entry>
		<id>https://mineplugin.org/index.php?title=Multiworld&amp;diff=600</id>
		<title>Multiworld</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=Multiworld&amp;diff=600"/>
		<updated>2015-01-27T14:27:52Z</updated>

		<summary type="html">&lt;p&gt;9032676：​/* 命令与权限 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{待翻译}}&lt;br /&gt;
{{Bukkit Plugin Infobox&lt;br /&gt;
|插件名=Multiworld&lt;br /&gt;
|版本=v5.2.5&lt;br /&gt;
|前置插件=无&lt;br /&gt;
|兼容服务端版本=1.7.9 r0.2&lt;br /&gt;
|網址=http://dev.bukkit.org/bukkit-plugins/multiworld-v-2-0/&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=概述=&lt;br /&gt;
使用Multiworld插件，可以很容易地自定义每个世界对应的末地与下界，你可以随意配置。(受限于插件可实现的功能范围)&lt;br /&gt;
==历史==&lt;br /&gt;
我制作这个插件是因为该插件的原作者&amp;quot;Baummann&amp;quot;，现在不再活跃。之前，这个插件非常简易，只有两个命令: /goto and /newworld. 于是我接过这个项目并且开发出更好的版本。现在Multiworld已经更新到v5.2.5。&lt;br /&gt;
==特性==&lt;br /&gt;
自定义世界类型，例如沙子世界&lt;br /&gt;
支持修改玩家进入世界时的游戏模式&lt;br /&gt;
支持使用/mw move以及/mw goto指令于指定地点之间传送，就像在minecraft服务器使用/teleport指令一样&lt;br /&gt;
支持独立世界聊天频道&lt;br /&gt;
&lt;br /&gt;
=命令与权限=&lt;br /&gt;
  请求:本条目需要创建表格，成员请帮助编辑排版。&lt;br /&gt;
&lt;br /&gt;
世界命令&lt;br /&gt;
命令 描述 权限&lt;br /&gt;
====世界====&lt;br /&gt;
 /mw create &amp;lt;世界名称&amp;gt; [世界类型] [世界种子] 在数据库中创建一个新的世界.&lt;br /&gt;
 注意: 你也可以使用这个命令来添加已存在的世界.&lt;br /&gt;
 警告: 不要给你不信任的人这个权限，如果拥有这个权限，他将可以无限地创建世界!  multiworld.command.create&lt;br /&gt;
 /mw load &amp;lt;世界名称&amp;gt; 加载数据库中的世界 multiworld.command.load&lt;br /&gt;
 /mw unload &amp;lt;世界名称&amp;gt; 卸载数据库中的世界(并非删除)，其他插件将无法查看到该世界  multiworld.command.unload&lt;br /&gt;
 /mw delete &amp;lt;世界名称&amp;gt; 删除数据库中的世界.&lt;br /&gt;
 警告: 这个功能是移除multiworld设置里面已经定义的一个世界! multiworld.command.delete&lt;br /&gt;
 /mw list 列出服务器中已经生成地形的世界. multiworld.command.list&lt;br /&gt;
 /mw info 显示当前世界的信息 multiworld.command.info&lt;br /&gt;
 /mw listgens 列出可用的世界地形类型，辅助使用/mw create. multiworld.command.listgens&lt;br /&gt;
==规则==&lt;br /&gt;
/mw listflagsList 列出所有可能使用于标记值的选项在/mw setflag 指令内. commands.multiworld.command.flags&lt;br /&gt;
/mw setflag &amp;lt;世界名称&amp;gt; &amp;lt;标记值&amp;gt; &amp;lt;变量&amp;gt; 于指定世界内设置一个标记值或选项. multiworld.command.setflag&lt;br /&gt;
/mw getflag &amp;lt;世界名称&amp;gt; &amp;lt;标记值&amp;gt; 获取标记值在指定世界, 世界名称填写 * 则可以获取全部世界 flags.multiworld.command.getflag&lt;br /&gt;
==传送门==&lt;br /&gt;
/mw link &amp;lt;源世界&amp;gt; &amp;lt;目标世界&amp;gt; 连接 &amp;lt;源世界&amp;gt; 世界的地狱门到 &amp;lt;目标世界&amp;gt; 世界的地狱门.&lt;br /&gt;
提示，使用这个功能需要开启地狱门连接权限! multiworld.command.link.nether&lt;br /&gt;
/mw link-end &amp;lt;源世界&amp;gt; &amp;lt;目标世界&amp;gt; 连接全部未界传送门由 &amp;lt;源世界&amp;gt; 至 &amp;lt;目标世界&amp;gt;.&lt;br /&gt;
提示，使用这个功能需要开启未地传送门连接权限! multiworld.command.link.end&lt;br /&gt;
==传送==&lt;br /&gt;
/mw goto &amp;lt;世界名称&amp;gt; 将你自己传送到此世界, 这个指令也能够使用简写/goto &amp;lt;世界名称&amp;gt; multiworld.command.goto&lt;br /&gt;
/mw move &amp;lt;玩家名称&amp;gt; &amp;lt;世界名称&amp;gt; 移动指定玩家至一个世界 multiworld.command.move&lt;br /&gt;
Spawning&lt;br /&gt;
/mw spawnTeleports yourself to spawn, to move other people use /mw move.multiworld.command.spawn&lt;br /&gt;
/mw setspawnSets the spawn of a world, you can use this to correct the starting spawn pointmultiworld.command.setspawn&lt;br /&gt;
Core and Utility&lt;br /&gt;
/mw saveSaves the plugin datamultiworld.command.save&lt;br /&gt;
/mw reloadReload the plugin datamultiworld.command.reload&lt;br /&gt;
/mw debugShows some debugging information, this information is very handy when you create a bug reportmultiworld.command.debug&lt;br /&gt;
/mw helpShows help about the commands used in Multiworld, useful so you don&#039;t need to go to this pagemultiworld.command.help&lt;br /&gt;
/mw eastereggNot a real command, but there is a easter egg hidden in multiworld-&lt;br /&gt;
其他&lt;br /&gt;
-Permission used to allow multiworld to change the gamemode of the affected player when entering a creative world. Its recommend to give everyone this permission.multiworld.creativemode&lt;br /&gt;
-Gives access to the basic Multiworld moderator controll, this permission won&#039;t allow users to modefy settings of existing world, it only allows them to view the settings / teleport to worldsmultiworld.basic&lt;br /&gt;
-All the permissions from multiworld, you can also use the star permission to give them all permissions.Multiworld.admin&lt;br /&gt;
&lt;br /&gt;
=Optional features=&lt;br /&gt;
Feature NameDescriptionConfiguration location&lt;br /&gt;
End portal handlerThe end portal handlers allows you to define custom end portals per worldoptions.useEndPortalHandler&lt;br /&gt;
Nether portal handlerThis addon makes it posiable to redirect netherportals to custom nether worlds, this setting is per-worldoptions.usePortalHandler&lt;br /&gt;
WorldChatSeperatorThis allows you to use the RecieveChat and the SendChat flags on a worldoptions.useWorldChatSeperator&lt;br /&gt;
GamemodeChangerThis allows you to use the flag CreativeWorld to turn on creative mode for a world, to use this you need to give you users the following permissions on all worlds: multiworld.creativemode &lt;br /&gt;
This module also comes with a other configuration settings, when you turn off usecreativemodeinv, it ONLY handles the gamemode part, it won&#039;t change the inventory contents, this can be used if you have a custom plugin for per world inventories.options.usecreativemode&lt;br /&gt;
EnderBlockPrevents the use of ender chests in creative mode, this can be used to prevent people from cheating stuff by storing it inside a ender chest in a creative world, and then removing it in a survival world.options.blockEnderChestInCrea&lt;br /&gt;
WorldSpawnHandlerThis allows you to have custom respawn worlds per world group, this can be setup by turning this part on to generate the configuration needed for this.options.useWorldSpawnHandler&lt;br /&gt;
CraftbukkitHooksAllows multiworld to hook into craftbukkit to display information that the bukit api won&#039;t provide. This feature will try to turn itself off when there are any errors.options.craftbukkitHooks&lt;br /&gt;
=Multiworld and Data=&lt;br /&gt;
Multiworld is using a statistcs tracking code so useage statistics wil be logged, for more information what is logged see:&lt;br /&gt;
Usage statistics at v3.5.0&lt;br /&gt;
=Other recommended plugins for your server=&lt;br /&gt;
[[LocationTeleport]] - This plugin teleports users when they enter a arena, when you shape the area like a portal, you can have your own portals&lt;br /&gt;
[[hothgenerator]] - Generates a awesome snow world&lt;br /&gt;
/mw create WorldName plugin:HothGenerator &lt;br /&gt;
(Case sensitive)&lt;br /&gt;
[[multiinv]] - Allows more control between the inventories of worlds than multiworld can provide on its own.&lt;/div&gt;</summary>
		<author><name>9032676</name></author>
	</entry>
	<entry>
		<id>https://mineplugin.org/index.php?title=Multiworld&amp;diff=599</id>
		<title>Multiworld</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=Multiworld&amp;diff=599"/>
		<updated>2015-01-27T14:27:26Z</updated>

		<summary type="html">&lt;p&gt;9032676：​/* 命令与权限 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{待翻译}}&lt;br /&gt;
{{Bukkit Plugin Infobox&lt;br /&gt;
|插件名=Multiworld&lt;br /&gt;
|版本=v5.2.5&lt;br /&gt;
|前置插件=无&lt;br /&gt;
|兼容服务端版本=1.7.9 r0.2&lt;br /&gt;
|網址=http://dev.bukkit.org/bukkit-plugins/multiworld-v-2-0/&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=概述=&lt;br /&gt;
使用Multiworld插件，可以很容易地自定义每个世界对应的末地与下界，你可以随意配置。(受限于插件可实现的功能范围)&lt;br /&gt;
==历史==&lt;br /&gt;
我制作这个插件是因为该插件的原作者&amp;quot;Baummann&amp;quot;，现在不再活跃。之前，这个插件非常简易，只有两个命令: /goto and /newworld. 于是我接过这个项目并且开发出更好的版本。现在Multiworld已经更新到v5.2.5。&lt;br /&gt;
==特性==&lt;br /&gt;
自定义世界类型，例如沙子世界&lt;br /&gt;
支持修改玩家进入世界时的游戏模式&lt;br /&gt;
支持使用/mw move以及/mw goto指令于指定地点之间传送，就像在minecraft服务器使用/teleport指令一样&lt;br /&gt;
支持独立世界聊天频道&lt;br /&gt;
&lt;br /&gt;
=命令与权限=&lt;br /&gt;
  请求:本条目需要创建表格，成员请帮助编辑排版。&lt;br /&gt;
&lt;br /&gt;
世界命令&lt;br /&gt;
命令 描述 权限&lt;br /&gt;
====世界====&lt;br /&gt;
/mw create &amp;lt;世界名称&amp;gt; [世界类型] [世界种子] 在数据库中创建一个新的世界.&lt;br /&gt;
注意: 你也可以使用这个命令来添加已存在的世界.&lt;br /&gt;
警告: 不要给你不信任的人这个权限，如果拥有这个权限，他将可以无限地创建世界!  multiworld.command.create&lt;br /&gt;
/mw load &amp;lt;世界名称&amp;gt; 加载数据库中的世界 multiworld.command.load&lt;br /&gt;
/mw unload &amp;lt;世界名称&amp;gt; 卸载数据库中的世界(并非删除)，其他插件将无法查看到该世界  multiworld.command.unload&lt;br /&gt;
/mw delete &amp;lt;世界名称&amp;gt; 删除数据库中的世界.&lt;br /&gt;
警告: 这个功能是移除multiworld设置里面已经定义的一个世界! multiworld.command.delete&lt;br /&gt;
/mw list 列出服务器中已经生成地形的世界. multiworld.command.list&lt;br /&gt;
/mw info 显示当前世界的信息 multiworld.command.info&lt;br /&gt;
/mw listgens 列出可用的世界地形类型，辅助使用/mw create. multiworld.command.listgens&lt;br /&gt;
==规则==&lt;br /&gt;
/mw listflagsList 列出所有可能使用于标记值的选项在/mw setflag 指令内. commands.multiworld.command.flags&lt;br /&gt;
/mw setflag &amp;lt;世界名称&amp;gt; &amp;lt;标记值&amp;gt; &amp;lt;变量&amp;gt; 于指定世界内设置一个标记值或选项. multiworld.command.setflag&lt;br /&gt;
/mw getflag &amp;lt;世界名称&amp;gt; &amp;lt;标记值&amp;gt; 获取标记值在指定世界, 世界名称填写 * 则可以获取全部世界 flags.multiworld.command.getflag&lt;br /&gt;
==传送门==&lt;br /&gt;
/mw link &amp;lt;源世界&amp;gt; &amp;lt;目标世界&amp;gt; 连接 &amp;lt;源世界&amp;gt; 世界的地狱门到 &amp;lt;目标世界&amp;gt; 世界的地狱门.&lt;br /&gt;
提示，使用这个功能需要开启地狱门连接权限! multiworld.command.link.nether&lt;br /&gt;
/mw link-end &amp;lt;源世界&amp;gt; &amp;lt;目标世界&amp;gt; 连接全部未界传送门由 &amp;lt;源世界&amp;gt; 至 &amp;lt;目标世界&amp;gt;.&lt;br /&gt;
提示，使用这个功能需要开启未地传送门连接权限! multiworld.command.link.end&lt;br /&gt;
==传送==&lt;br /&gt;
/mw goto &amp;lt;世界名称&amp;gt; 将你自己传送到此世界, 这个指令也能够使用简写/goto &amp;lt;世界名称&amp;gt; multiworld.command.goto&lt;br /&gt;
/mw move &amp;lt;玩家名称&amp;gt; &amp;lt;世界名称&amp;gt; 移动指定玩家至一个世界 multiworld.command.move&lt;br /&gt;
Spawning&lt;br /&gt;
/mw spawnTeleports yourself to spawn, to move other people use /mw move.multiworld.command.spawn&lt;br /&gt;
/mw setspawnSets the spawn of a world, you can use this to correct the starting spawn pointmultiworld.command.setspawn&lt;br /&gt;
Core and Utility&lt;br /&gt;
/mw saveSaves the plugin datamultiworld.command.save&lt;br /&gt;
/mw reloadReload the plugin datamultiworld.command.reload&lt;br /&gt;
/mw debugShows some debugging information, this information is very handy when you create a bug reportmultiworld.command.debug&lt;br /&gt;
/mw helpShows help about the commands used in Multiworld, useful so you don&#039;t need to go to this pagemultiworld.command.help&lt;br /&gt;
/mw eastereggNot a real command, but there is a easter egg hidden in multiworld-&lt;br /&gt;
其他&lt;br /&gt;
-Permission used to allow multiworld to change the gamemode of the affected player when entering a creative world. Its recommend to give everyone this permission.multiworld.creativemode&lt;br /&gt;
-Gives access to the basic Multiworld moderator controll, this permission won&#039;t allow users to modefy settings of existing world, it only allows them to view the settings / teleport to worldsmultiworld.basic&lt;br /&gt;
-All the permissions from multiworld, you can also use the star permission to give them all permissions.Multiworld.admin&lt;br /&gt;
&lt;br /&gt;
=Optional features=&lt;br /&gt;
Feature NameDescriptionConfiguration location&lt;br /&gt;
End portal handlerThe end portal handlers allows you to define custom end portals per worldoptions.useEndPortalHandler&lt;br /&gt;
Nether portal handlerThis addon makes it posiable to redirect netherportals to custom nether worlds, this setting is per-worldoptions.usePortalHandler&lt;br /&gt;
WorldChatSeperatorThis allows you to use the RecieveChat and the SendChat flags on a worldoptions.useWorldChatSeperator&lt;br /&gt;
GamemodeChangerThis allows you to use the flag CreativeWorld to turn on creative mode for a world, to use this you need to give you users the following permissions on all worlds: multiworld.creativemode &lt;br /&gt;
This module also comes with a other configuration settings, when you turn off usecreativemodeinv, it ONLY handles the gamemode part, it won&#039;t change the inventory contents, this can be used if you have a custom plugin for per world inventories.options.usecreativemode&lt;br /&gt;
EnderBlockPrevents the use of ender chests in creative mode, this can be used to prevent people from cheating stuff by storing it inside a ender chest in a creative world, and then removing it in a survival world.options.blockEnderChestInCrea&lt;br /&gt;
WorldSpawnHandlerThis allows you to have custom respawn worlds per world group, this can be setup by turning this part on to generate the configuration needed for this.options.useWorldSpawnHandler&lt;br /&gt;
CraftbukkitHooksAllows multiworld to hook into craftbukkit to display information that the bukit api won&#039;t provide. This feature will try to turn itself off when there are any errors.options.craftbukkitHooks&lt;br /&gt;
=Multiworld and Data=&lt;br /&gt;
Multiworld is using a statistcs tracking code so useage statistics wil be logged, for more information what is logged see:&lt;br /&gt;
Usage statistics at v3.5.0&lt;br /&gt;
=Other recommended plugins for your server=&lt;br /&gt;
[[LocationTeleport]] - This plugin teleports users when they enter a arena, when you shape the area like a portal, you can have your own portals&lt;br /&gt;
[[hothgenerator]] - Generates a awesome snow world&lt;br /&gt;
/mw create WorldName plugin:HothGenerator &lt;br /&gt;
(Case sensitive)&lt;br /&gt;
[[multiinv]] - Allows more control between the inventories of worlds than multiworld can provide on its own.&lt;/div&gt;</summary>
		<author><name>9032676</name></author>
	</entry>
	<entry>
		<id>https://mineplugin.org/index.php?title=Multiworld&amp;diff=598</id>
		<title>Multiworld</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=Multiworld&amp;diff=598"/>
		<updated>2015-01-27T14:26:11Z</updated>

		<summary type="html">&lt;p&gt;9032676：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{待翻译}}&lt;br /&gt;
{{Bukkit Plugin Infobox&lt;br /&gt;
|插件名=Multiworld&lt;br /&gt;
|版本=v5.2.5&lt;br /&gt;
|前置插件=无&lt;br /&gt;
|兼容服务端版本=1.7.9 r0.2&lt;br /&gt;
|網址=http://dev.bukkit.org/bukkit-plugins/multiworld-v-2-0/&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=概述=&lt;br /&gt;
使用Multiworld插件，可以很容易地自定义每个世界对应的末地与下界，你可以随意配置。(受限于插件可实现的功能范围)&lt;br /&gt;
==历史==&lt;br /&gt;
我制作这个插件是因为该插件的原作者&amp;quot;Baummann&amp;quot;，现在不再活跃。之前，这个插件非常简易，只有两个命令: /goto and /newworld. 于是我接过这个项目并且开发出更好的版本。现在Multiworld已经更新到v5.2.5。&lt;br /&gt;
==特性==&lt;br /&gt;
自定义世界类型，例如沙子世界&lt;br /&gt;
支持修改玩家进入世界时的游戏模式&lt;br /&gt;
支持使用/mw move以及/mw goto指令于指定地点之间传送，就像在minecraft服务器使用/teleport指令一样&lt;br /&gt;
支持独立世界聊天频道&lt;br /&gt;
&lt;br /&gt;
=命令与权限=&lt;br /&gt;
  请求:本条目需要创建表格，成员请帮助编辑排版。&lt;br /&gt;
&lt;br /&gt;
世界命令&lt;br /&gt;
命令 描述 权限&lt;br /&gt;
==世界==&lt;br /&gt;
/mw create &amp;lt;世界名称&amp;gt; [世界类型] [世界种子] 在数据库中创建一个新的世界.&lt;br /&gt;
注意: 你也可以使用这个命令来添加已存在的世界.&lt;br /&gt;
警告: 不要给你不信任的人这个权限，如果拥有这个权限，他将可以无限地创建世界!  multiworld.command.create&lt;br /&gt;
/mw load &amp;lt;世界名称&amp;gt; 加载数据库中的世界 multiworld.command.load&lt;br /&gt;
/mw unload &amp;lt;世界名称&amp;gt; 卸载数据库中的世界(并非删除)，其他插件将无法查看到该世界  multiworld.command.unload&lt;br /&gt;
/mw delete &amp;lt;世界名称&amp;gt; 删除数据库中的世界.&lt;br /&gt;
警告: 这个功能是移除multiworld设置里面已经定义的一个世界! multiworld.command.delete&lt;br /&gt;
/mw list 列出服务器中已经生成地形的世界. multiworld.command.list&lt;br /&gt;
/mw info 显示当前世界的信息 multiworld.command.info&lt;br /&gt;
/mw listgens 列出可用的世界地形类型，辅助使用/mw create. multiworld.command.listgens&lt;br /&gt;
==规则==&lt;br /&gt;
/mw listflagsList 列出所有可能使用于标记值的选项在/mw setflag 指令内. commands.multiworld.command.flags&lt;br /&gt;
/mw setflag &amp;lt;世界名称&amp;gt; &amp;lt;标记值&amp;gt; &amp;lt;变量&amp;gt; 于指定世界内设置一个标记值或选项. multiworld.command.setflag&lt;br /&gt;
/mw getflag &amp;lt;世界名称&amp;gt; &amp;lt;标记值&amp;gt; 获取标记值在指定世界, 世界名称填写 * 则可以获取全部世界 flags.multiworld.command.getflag&lt;br /&gt;
==传送门==&lt;br /&gt;
/mw link &amp;lt;源世界&amp;gt; &amp;lt;目标世界&amp;gt; 连接 &amp;lt;源世界&amp;gt; 世界的地狱门到 &amp;lt;目标世界&amp;gt; 世界的地狱门.&lt;br /&gt;
提示，使用这个功能需要开启地狱门连接权限! multiworld.command.link.nether&lt;br /&gt;
/mw link-end &amp;lt;源世界&amp;gt; &amp;lt;目标世界&amp;gt; 连接全部未界传送门由 &amp;lt;源世界&amp;gt; 至 &amp;lt;目标世界&amp;gt;.&lt;br /&gt;
提示，使用这个功能需要开启未地传送门连接权限! multiworld.command.link.end&lt;br /&gt;
==传送==&lt;br /&gt;
/mw goto &amp;lt;世界名称&amp;gt; 将你自己传送到此世界, 这个指令也能够使用简写/goto &amp;lt;世界名称&amp;gt; multiworld.command.goto&lt;br /&gt;
/mw move &amp;lt;玩家名称&amp;gt; &amp;lt;世界名称&amp;gt; 移动指定玩家至一个世界 multiworld.command.move&lt;br /&gt;
Spawning&lt;br /&gt;
/mw spawnTeleports yourself to spawn, to move other people use /mw move.multiworld.command.spawn&lt;br /&gt;
/mw setspawnSets the spawn of a world, you can use this to correct the starting spawn pointmultiworld.command.setspawn&lt;br /&gt;
Core and Utility&lt;br /&gt;
/mw saveSaves the plugin datamultiworld.command.save&lt;br /&gt;
/mw reloadReload the plugin datamultiworld.command.reload&lt;br /&gt;
/mw debugShows some debugging information, this information is very handy when you create a bug reportmultiworld.command.debug&lt;br /&gt;
/mw helpShows help about the commands used in Multiworld, useful so you don&#039;t need to go to this pagemultiworld.command.help&lt;br /&gt;
/mw eastereggNot a real command, but there is a easter egg hidden in multiworld-&lt;br /&gt;
其他&lt;br /&gt;
-Permission used to allow multiworld to change the gamemode of the affected player when entering a creative world. Its recommend to give everyone this permission.multiworld.creativemode&lt;br /&gt;
-Gives access to the basic Multiworld moderator controll, this permission won&#039;t allow users to modefy settings of existing world, it only allows them to view the settings / teleport to worldsmultiworld.basic&lt;br /&gt;
-All the permissions from multiworld, you can also use the star permission to give them all permissions.Multiworld.admin&lt;br /&gt;
&lt;br /&gt;
=Optional features=&lt;br /&gt;
Feature NameDescriptionConfiguration location&lt;br /&gt;
End portal handlerThe end portal handlers allows you to define custom end portals per worldoptions.useEndPortalHandler&lt;br /&gt;
Nether portal handlerThis addon makes it posiable to redirect netherportals to custom nether worlds, this setting is per-worldoptions.usePortalHandler&lt;br /&gt;
WorldChatSeperatorThis allows you to use the RecieveChat and the SendChat flags on a worldoptions.useWorldChatSeperator&lt;br /&gt;
GamemodeChangerThis allows you to use the flag CreativeWorld to turn on creative mode for a world, to use this you need to give you users the following permissions on all worlds: multiworld.creativemode &lt;br /&gt;
This module also comes with a other configuration settings, when you turn off usecreativemodeinv, it ONLY handles the gamemode part, it won&#039;t change the inventory contents, this can be used if you have a custom plugin for per world inventories.options.usecreativemode&lt;br /&gt;
EnderBlockPrevents the use of ender chests in creative mode, this can be used to prevent people from cheating stuff by storing it inside a ender chest in a creative world, and then removing it in a survival world.options.blockEnderChestInCrea&lt;br /&gt;
WorldSpawnHandlerThis allows you to have custom respawn worlds per world group, this can be setup by turning this part on to generate the configuration needed for this.options.useWorldSpawnHandler&lt;br /&gt;
CraftbukkitHooksAllows multiworld to hook into craftbukkit to display information that the bukit api won&#039;t provide. This feature will try to turn itself off when there are any errors.options.craftbukkitHooks&lt;br /&gt;
=Multiworld and Data=&lt;br /&gt;
Multiworld is using a statistcs tracking code so useage statistics wil be logged, for more information what is logged see:&lt;br /&gt;
Usage statistics at v3.5.0&lt;br /&gt;
=Other recommended plugins for your server=&lt;br /&gt;
[[LocationTeleport]] - This plugin teleports users when they enter a arena, when you shape the area like a portal, you can have your own portals&lt;br /&gt;
[[hothgenerator]] - Generates a awesome snow world&lt;br /&gt;
/mw create WorldName plugin:HothGenerator &lt;br /&gt;
(Case sensitive)&lt;br /&gt;
[[multiinv]] - Allows more control between the inventories of worlds than multiworld can provide on its own.&lt;/div&gt;</summary>
		<author><name>9032676</name></author>
	</entry>
	<entry>
		<id>https://mineplugin.org/index.php?title=Multiworld&amp;diff=597</id>
		<title>Multiworld</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=Multiworld&amp;diff=597"/>
		<updated>2015-01-27T14:24:47Z</updated>

		<summary type="html">&lt;p&gt;9032676：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{待翻译}}&lt;br /&gt;
{{Bukkit Plugin Infobox&lt;br /&gt;
|插件名=Multiworld&lt;br /&gt;
|版本=v5.2.5&lt;br /&gt;
|前置插件=无&lt;br /&gt;
|兼容服务端版本=1.7.9 r0.2&lt;br /&gt;
|網址=http://dev.bukkit.org/bukkit-plugins/multiworld-v-2-0/&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=概述=&lt;br /&gt;
使用Multiworld插件，可以很容易地自定义每个世界对应的末地与下界，你可以随意配置。(受限于插件可实现的功能范围)&lt;br /&gt;
==历史==&lt;br /&gt;
我制作这个插件是因为该插件的原作者&amp;quot;Baummann&amp;quot;，现在不再活跃。之前，这个插件非常简易，只有两个命令: /goto and /newworld. 于是我接过这个项目并且开发出更好的版本。现在Multiworld已经更新到v5.2.5。&lt;br /&gt;
==特性==&lt;br /&gt;
自定义世界类型，例如沙子世界&lt;br /&gt;
支持修改玩家进入世界时的游戏模式&lt;br /&gt;
支持使用/mw move以及/mw goto指令于指定地点之间传送，就像在minecraft服务器使用/teleport指令一样&lt;br /&gt;
支持独立世界聊天频道&lt;br /&gt;
&lt;br /&gt;
=命令与权限=&lt;br /&gt;
  请求:本条目需要创建表格，成员请帮助编辑排版。&lt;br /&gt;
&lt;br /&gt;
世界命令&lt;br /&gt;
命令 描述 权限&lt;br /&gt;
=世界=&lt;br /&gt;
/mw create &amp;lt;世界名称&amp;gt; [世界类型] [世界种子] 在数据库中创建一个新的世界.&lt;br /&gt;
注意: 你也可以使用这个命令来添加已存在的世界.&lt;br /&gt;
警告: 不要给你不信任的人这个权限，如果拥有这个权限，他将可以无限地创建世界!  multiworld.command.create&lt;br /&gt;
/mw load &amp;lt;世界名称&amp;gt; 加载数据库中的世界 multiworld.command.load&lt;br /&gt;
/mw unload &amp;lt;世界名称&amp;gt; 卸载数据库中的世界(并非删除)，其他插件将无法查看到该世界  multiworld.command.unload&lt;br /&gt;
/mw delete &amp;lt;世界名称&amp;gt; 删除数据库中的世界.&lt;br /&gt;
警告: 这个功能是移除multiworld设置里面已经定义的一个世界! multiworld.command.delete&lt;br /&gt;
/mw list 列出服务器中已经生成地形的世界. multiworld.command.list&lt;br /&gt;
/mw info 显示当前世界的信息 multiworld.command.info&lt;br /&gt;
/mw listgens 列出可用的世界地形类型，辅助使用/mw create. multiworld.command.listgens&lt;br /&gt;
=规则=&lt;br /&gt;
/mw listflagsList 列出所有可能使用于标记值的选项在/mw setflag 指令内. commands.multiworld.command.flags&lt;br /&gt;
/mw setflag &amp;lt;世界名称&amp;gt; &amp;lt;标记值&amp;gt; &amp;lt;变量&amp;gt; 于指定世界内设置一个标记值或选项. multiworld.command.setflag&lt;br /&gt;
/mw getflag &amp;lt;世界名称&amp;gt; &amp;lt;标记值&amp;gt; 获取标记值在指定世界, 世界名称填写 * 则可以获取全部世界 flags.multiworld.command.getflag&lt;br /&gt;
=传送门=&lt;br /&gt;
/mw link &amp;lt;源世界&amp;gt; &amp;lt;目标世界&amp;gt; 连接 &amp;lt;源世界&amp;gt; 世界的地狱门到 &amp;lt;目标世界&amp;gt; 世界的地狱门.&lt;br /&gt;
提示，使用这个功能需要开启地狱门连接权限! multiworld.command.link.nether&lt;br /&gt;
/mw link-end &amp;lt;源世界&amp;gt; &amp;lt;目标世界&amp;gt; 连接全部未界传送门由 &amp;lt;源世界&amp;gt; 至 &amp;lt;目标世界&amp;gt;.&lt;br /&gt;
提示，使用这个功能需要开启未地传送门连接权限! multiworld.command.link.end&lt;br /&gt;
=传送=&lt;br /&gt;
/mw goto &amp;lt;世界名称&amp;gt; 将你自己传送到此世界, 这个指令也能够使用简写/goto &amp;lt;世界名称&amp;gt; multiworld.command.goto&lt;br /&gt;
/mw move &amp;lt;玩家名称&amp;gt; &amp;lt;世界名称&amp;gt; 移动指定玩家至一个世界 multiworld.command.move&lt;br /&gt;
Spawning&lt;br /&gt;
/mw spawnTeleports yourself to spawn, to move other people use /mw move.multiworld.command.spawn&lt;br /&gt;
/mw setspawnSets the spawn of a world, you can use this to correct the starting spawn pointmultiworld.command.setspawn&lt;br /&gt;
Core and Utility&lt;br /&gt;
/mw saveSaves the plugin datamultiworld.command.save&lt;br /&gt;
/mw reloadReload the plugin datamultiworld.command.reload&lt;br /&gt;
/mw debugShows some debugging information, this information is very handy when you create a bug reportmultiworld.command.debug&lt;br /&gt;
/mw helpShows help about the commands used in Multiworld, useful so you don&#039;t need to go to this pagemultiworld.command.help&lt;br /&gt;
/mw eastereggNot a real command, but there is a easter egg hidden in multiworld-&lt;br /&gt;
其他&lt;br /&gt;
-Permission used to allow multiworld to change the gamemode of the affected player when entering a creative world. Its recommend to give everyone this permission.multiworld.creativemode&lt;br /&gt;
-Gives access to the basic Multiworld moderator controll, this permission won&#039;t allow users to modefy settings of existing world, it only allows them to view the settings / teleport to worldsmultiworld.basic&lt;br /&gt;
-All the permissions from multiworld, you can also use the star permission to give them all permissions.Multiworld.admin&lt;br /&gt;
&lt;br /&gt;
=Optional features=&lt;br /&gt;
Feature NameDescriptionConfiguration location&lt;br /&gt;
End portal handlerThe end portal handlers allows you to define custom end portals per worldoptions.useEndPortalHandler&lt;br /&gt;
Nether portal handlerThis addon makes it posiable to redirect netherportals to custom nether worlds, this setting is per-worldoptions.usePortalHandler&lt;br /&gt;
WorldChatSeperatorThis allows you to use the RecieveChat and the SendChat flags on a worldoptions.useWorldChatSeperator&lt;br /&gt;
GamemodeChangerThis allows you to use the flag CreativeWorld to turn on creative mode for a world, to use this you need to give you users the following permissions on all worlds: multiworld.creativemode &lt;br /&gt;
This module also comes with a other configuration settings, when you turn off usecreativemodeinv, it ONLY handles the gamemode part, it won&#039;t change the inventory contents, this can be used if you have a custom plugin for per world inventories.options.usecreativemode&lt;br /&gt;
EnderBlockPrevents the use of ender chests in creative mode, this can be used to prevent people from cheating stuff by storing it inside a ender chest in a creative world, and then removing it in a survival world.options.blockEnderChestInCrea&lt;br /&gt;
WorldSpawnHandlerThis allows you to have custom respawn worlds per world group, this can be setup by turning this part on to generate the configuration needed for this.options.useWorldSpawnHandler&lt;br /&gt;
CraftbukkitHooksAllows multiworld to hook into craftbukkit to display information that the bukit api won&#039;t provide. This feature will try to turn itself off when there are any errors.options.craftbukkitHooks&lt;br /&gt;
=Multiworld and Data=&lt;br /&gt;
Multiworld is using a statistcs tracking code so useage statistics wil be logged, for more information what is logged see:&lt;br /&gt;
Usage statistics at v3.5.0&lt;br /&gt;
=Other recommended plugins for your server=&lt;br /&gt;
[[LocationTeleport]] - This plugin teleports users when they enter a arena, when you shape the area like a portal, you can have your own portals&lt;br /&gt;
[[hothgenerator]] - Generates a awesome snow world&lt;br /&gt;
/mw create WorldName plugin:HothGenerator &lt;br /&gt;
(Case sensitive)&lt;br /&gt;
[[multiinv]] - Allows more control between the inventories of worlds than multiworld can provide on its own.&lt;/div&gt;</summary>
		<author><name>9032676</name></author>
	</entry>
	<entry>
		<id>https://mineplugin.org/index.php?title=Multiworld&amp;diff=596</id>
		<title>Multiworld</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=Multiworld&amp;diff=596"/>
		<updated>2015-01-27T14:20:23Z</updated>

		<summary type="html">&lt;p&gt;9032676：​/* 命令与权限 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{待翻译}}&lt;br /&gt;
{{Bukkit Plugin Infobox&lt;br /&gt;
|插件名=Multiworld&lt;br /&gt;
|版本=v5.2.5&lt;br /&gt;
|前置插件=无&lt;br /&gt;
|兼容服务端版本=1.7.9 r0.2&lt;br /&gt;
|網址=http://dev.bukkit.org/bukkit-plugins/multiworld-v-2-0/&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=概述=&lt;br /&gt;
使用Multiworld插件，可以很容易地自定义每个世界对应的末地与下界，你可以随意配置。(受限于插件可实现的功能范围)&lt;br /&gt;
==历史==&lt;br /&gt;
我制作这个插件是因为该插件的原作者&amp;quot;Baummann&amp;quot;，现在不再活跃。之前，这个插件非常简易，只有两个命令: /goto and /newworld. 于是我接过这个项目并且开发出更好的版本。现在Multiworld已经更新到v5.2.5。&lt;br /&gt;
==特性==&lt;br /&gt;
自定义世界类型，例如沙子世界&lt;br /&gt;
支持修改玩家进入世界时的游戏模式&lt;br /&gt;
支持使用/mw move以及/mw goto指令于指定地点之间传送，就像在minecraft服务器使用/teleport指令一样&lt;br /&gt;
支持独立世界聊天频道&lt;br /&gt;
&lt;br /&gt;
=命令与权限=&lt;br /&gt;
  请求:本条目需要创建表格，成员请帮助编辑排版。&lt;br /&gt;
&lt;br /&gt;
世界命令&lt;br /&gt;
命令 描述 权限&lt;br /&gt;
【世界】&lt;br /&gt;
/mw create &amp;lt;世界名称&amp;gt; [世界类型] [世界种子] 在数据库中创建一个新的世界.&lt;br /&gt;
注意: 你也可以使用这个命令来添加已存在的世界.&lt;br /&gt;
警告: 不要给你不信任的人这个权限，如果拥有这个权限，他将可以无限地创建世界!  multiworld.command.create&lt;br /&gt;
/mw load &amp;lt;世界名称&amp;gt; 加载数据库中的世界 multiworld.command.load&lt;br /&gt;
/mw unload &amp;lt;世界名称&amp;gt; 卸载数据库中的世界(并非删除)，其他插件将无法查看到该世界  multiworld.command.unload&lt;br /&gt;
/mw delete &amp;lt;世界名称&amp;gt; 删除数据库中的世界.&lt;br /&gt;
警告: 这个功能是移除multiworld设置里面已经定义的一个世界! multiworld.command.delete&lt;br /&gt;
/mw list 列出服务器中已经生成地形的世界. multiworld.command.list&lt;br /&gt;
/mw info 显示当前世界的信息 multiworld.command.info&lt;br /&gt;
/mw listgens 列出可用的世界地形类型，辅助使用/mw create. multiworld.command.listgens&lt;br /&gt;
【规则】&lt;br /&gt;
/mw listflagsList 列出所有可能使用于标记值的选项在/mw setflag 指令内. commands.multiworld.command.flags&lt;br /&gt;
/mw setflag &amp;lt;世界名称&amp;gt; &amp;lt;标记值&amp;gt; &amp;lt;变量&amp;gt; 于指定世界内设置一个标记值或选项. multiworld.command.setflag&lt;br /&gt;
/mw getflag &amp;lt;世界名称&amp;gt; &amp;lt;标记值&amp;gt; 获取标记值在指定世界, 世界名称填写 * 则可以获取全部世界 flags.multiworld.command.getflag&lt;br /&gt;
【传送门】&lt;br /&gt;
/mw link &amp;lt;源世界&amp;gt; &amp;lt;目标世界&amp;gt; 连接 &amp;lt;源世界&amp;gt; 世界的地狱门到 &amp;lt;目标世界&amp;gt; 世界的地狱门.&lt;br /&gt;
提示，使用这个功能需要开启地狱门连接权限! multiworld.command.link.nether&lt;br /&gt;
/mw link-end &amp;lt;源世界&amp;gt; &amp;lt;目标世界&amp;gt; 连接全部未界传送门由 &amp;lt;源世界&amp;gt; 至 &amp;lt;目标世界&amp;gt;.&lt;br /&gt;
提示，使用这个功能需要开启未地传送门连接权限! multiworld.command.link.end&lt;br /&gt;
【传送】&lt;br /&gt;
/mw goto &amp;lt;世界名称&amp;gt; 将你自己传送到此世界, 这个指令也能够使用简写/goto &amp;lt;世界名称&amp;gt; multiworld.command.goto&lt;br /&gt;
/mw move &amp;lt;玩家名称&amp;gt; &amp;lt;世界名称&amp;gt; 移动指定玩家至一个世界 multiworld.command.move&lt;br /&gt;
Spawning&lt;br /&gt;
/mw spawnTeleports yourself to spawn, to move other people use /mw move.multiworld.command.spawn&lt;br /&gt;
/mw setspawnSets the spawn of a world, you can use this to correct the starting spawn pointmultiworld.command.setspawn&lt;br /&gt;
Core and Utility&lt;br /&gt;
/mw saveSaves the plugin datamultiworld.command.save&lt;br /&gt;
/mw reloadReload the plugin datamultiworld.command.reload&lt;br /&gt;
/mw debugShows some debugging information, this information is very handy when you create a bug reportmultiworld.command.debug&lt;br /&gt;
/mw helpShows help about the commands used in Multiworld, useful so you don&#039;t need to go to this pagemultiworld.command.help&lt;br /&gt;
/mw eastereggNot a real command, but there is a easter egg hidden in multiworld-&lt;br /&gt;
其他&lt;br /&gt;
-Permission used to allow multiworld to change the gamemode of the affected player when entering a creative world. Its recommend to give everyone this permission.multiworld.creativemode&lt;br /&gt;
-Gives access to the basic Multiworld moderator controll, this permission won&#039;t allow users to modefy settings of existing world, it only allows them to view the settings / teleport to worldsmultiworld.basic&lt;br /&gt;
-All the permissions from multiworld, you can also use the star permission to give them all permissions.Multiworld.admin&lt;br /&gt;
&lt;br /&gt;
=Optional features=&lt;br /&gt;
Feature NameDescriptionConfiguration location&lt;br /&gt;
End portal handlerThe end portal handlers allows you to define custom end portals per worldoptions.useEndPortalHandler&lt;br /&gt;
Nether portal handlerThis addon makes it posiable to redirect netherportals to custom nether worlds, this setting is per-worldoptions.usePortalHandler&lt;br /&gt;
WorldChatSeperatorThis allows you to use the RecieveChat and the SendChat flags on a worldoptions.useWorldChatSeperator&lt;br /&gt;
GamemodeChangerThis allows you to use the flag CreativeWorld to turn on creative mode for a world, to use this you need to give you users the following permissions on all worlds: multiworld.creativemode &lt;br /&gt;
This module also comes with a other configuration settings, when you turn off usecreativemodeinv, it ONLY handles the gamemode part, it won&#039;t change the inventory contents, this can be used if you have a custom plugin for per world inventories.options.usecreativemode&lt;br /&gt;
EnderBlockPrevents the use of ender chests in creative mode, this can be used to prevent people from cheating stuff by storing it inside a ender chest in a creative world, and then removing it in a survival world.options.blockEnderChestInCrea&lt;br /&gt;
WorldSpawnHandlerThis allows you to have custom respawn worlds per world group, this can be setup by turning this part on to generate the configuration needed for this.options.useWorldSpawnHandler&lt;br /&gt;
CraftbukkitHooksAllows multiworld to hook into craftbukkit to display information that the bukit api won&#039;t provide. This feature will try to turn itself off when there are any errors.options.craftbukkitHooks&lt;br /&gt;
=Multiworld and Data=&lt;br /&gt;
Multiworld is using a statistcs tracking code so useage statistics wil be logged, for more information what is logged see:&lt;br /&gt;
Usage statistics at v3.5.0&lt;br /&gt;
=Other recommended plugins for your server=&lt;br /&gt;
[[LocationTeleport]] - This plugin teleports users when they enter a arena, when you shape the area like a portal, you can have your own portals&lt;br /&gt;
[[hothgenerator]] - Generates a awesome snow world&lt;br /&gt;
/mw create WorldName plugin:HothGenerator &lt;br /&gt;
(Case sensitive)&lt;br /&gt;
[[multiinv]] - Allows more control between the inventories of worlds than multiworld can provide on its own.&lt;/div&gt;</summary>
		<author><name>9032676</name></author>
	</entry>
	<entry>
		<id>https://mineplugin.org/index.php?title=Multiworld&amp;diff=571</id>
		<title>Multiworld</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=Multiworld&amp;diff=571"/>
		<updated>2015-01-24T16:27:15Z</updated>

		<summary type="html">&lt;p&gt;9032676：​/* 特性 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{待翻译}}&lt;br /&gt;
{{Bukkit Plugin Infobox&lt;br /&gt;
|插件名=Multiworld&lt;br /&gt;
|版本=v5.2.5&lt;br /&gt;
|前置插件=无&lt;br /&gt;
|兼容服务端版本=1.7.9 r0.2&lt;br /&gt;
|網址=http://dev.bukkit.org/bukkit-plugins/multiworld-v-2-0/&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=概述=&lt;br /&gt;
使用Multiworld插件，可以很容易地自定义每个世界对应的末地与下界，你可以随意配置。(受限于插件可实现的功能范围)&lt;br /&gt;
==历史==&lt;br /&gt;
我制作这个插件是因为该插件的原作者&amp;quot;Baummann&amp;quot;，现在不再活跃。之前，这个插件非常简易，只有两个命令: /goto and /newworld. 于是我接过这个项目并且开发出更好的版本。现在Multiworld已经更新到v5.2.5。&lt;br /&gt;
==特性==&lt;br /&gt;
自定义世界类型，例如沙子世界&lt;br /&gt;
支持修改玩家进入世界时的游戏模式&lt;br /&gt;
支持使用/mw move以及/mw goto指令于指定地点之间传送，就像在minecraft服务器使用/teleport指令一样&lt;br /&gt;
支持独立世界聊天频道&lt;br /&gt;
&lt;br /&gt;
=命令与权限=&lt;br /&gt;
world commands&lt;br /&gt;
CommandDescriptionPermissions&lt;br /&gt;
World&lt;br /&gt;
/mw create&lt;br /&gt;
&amp;lt;world name&amp;gt;&lt;br /&gt;
[generator]&lt;br /&gt;
[seed]Adds a new world to the Multiworld Database.&lt;br /&gt;
Notice: you can also use this command to add existing worlds.&lt;br /&gt;
Warning: Do not give to players you don&#039;t thrust because they can create unlimited worlds!multiworld.command.create&lt;br /&gt;
/mw load&lt;br /&gt;
&amp;lt;world name&amp;gt;Loads a world that has been defined in the Multiworld databasemultiworld.command.load&lt;br /&gt;
/mw unload&lt;br /&gt;
&amp;lt;world name&amp;gt;Unloads a world that has been defined in the Multiworld database, other plugins cannot see this world anymoremultiworld.command.unload&lt;br /&gt;
/mw delete&lt;br /&gt;
&amp;lt;wold name&amp;gt;Removes a world from the MultiWorld database.&lt;br /&gt;
Warning: This action is destructive to the settings multiworld has defined to the world!multiworld.command.delete&lt;br /&gt;
/mw listList the worlds multiworld has generated in your server.multiworld.command.list&lt;br /&gt;
/mw infoShows information from a worldmultiworld.command.info&lt;br /&gt;
/mw listgensList the supported world generators to use with /mw createmultiworld.command.listgens&lt;br /&gt;
Rules&lt;br /&gt;
/mw listflagsList the possible flags to use with the following commands.multiworld.command.flags&lt;br /&gt;
/mw setflag&lt;br /&gt;
&amp;lt;world&amp;gt;&lt;br /&gt;
&amp;lt;flagname&amp;gt;&lt;br /&gt;
&amp;lt;value&amp;gt;Sets a flag/option on a world.multiworld.command.setflag&lt;br /&gt;
/mw getflag&lt;br /&gt;
&amp;lt;world&amp;gt;&lt;br /&gt;
&amp;lt;flagname&amp;gt;Gets a flag from a world, tip use * to get al the world flags.multiworld.command.getflag&lt;br /&gt;
Portalling&lt;br /&gt;
/mw link&lt;br /&gt;
&amp;lt;src-world&amp;gt;&lt;br /&gt;
&amp;lt;dst-world&amp;gt;Links all nether portals from &amp;lt;src-world&amp;gt; to &amp;lt;dst-world&amp;gt;.&lt;br /&gt;
Notice, to use this you need to turn on the nether portal handler!multiworld.command.link.nether&lt;br /&gt;
/mw link-end&lt;br /&gt;
&amp;lt;src-world&amp;gt;&lt;br /&gt;
&amp;lt;dst-world&amp;gt;Links al end portals from &amp;lt;src-world&amp;gt; to &amp;lt;dst-world&amp;gt;.&lt;br /&gt;
Notice, to use this you need to turn on the end portal handlermultiworld.command.link.end&lt;br /&gt;
Teleportation&lt;br /&gt;
/mw goto&lt;br /&gt;
&amp;lt;world name&amp;gt;Teleports yourself to a world, this command can also be used as alias /goto &amp;lt;world&amp;gt;multiworld.command.goto&lt;br /&gt;
/mw move&lt;br /&gt;
&amp;lt;player&amp;gt;&lt;br /&gt;
&amp;lt;world&amp;gt;&lt;br /&gt;
Moves a player to an worldmultiworld.command.move&lt;br /&gt;
Spawning&lt;br /&gt;
/mw spawnTeleports yourself to spawn, to move other people use /mw move.multiworld.command.spawn&lt;br /&gt;
/mw setspawnSets the spawn of a world, you can use this to correct the starting spawn pointmultiworld.command.setspawn&lt;br /&gt;
Core and Utility&lt;br /&gt;
/mw saveSaves the plugin datamultiworld.command.save&lt;br /&gt;
/mw reloadReload the plugin datamultiworld.command.reload&lt;br /&gt;
/mw debugShows some debugging information, this information is very handy when you create a bug reportmultiworld.command.debug&lt;br /&gt;
/mw helpShows help about the commands used in Multiworld, useful so you don&#039;t need to go to this pagemultiworld.command.help&lt;br /&gt;
/mw eastereggNot a real command, but there is a easter egg hidden in multiworld-&lt;br /&gt;
Other&lt;br /&gt;
-Permission used to allow multiworld to change the gamemode of the affected player when entering a creative world. Its recommend to give everyone this permission.multiworld.creativemode&lt;br /&gt;
-Gives access to the basic Multiworld moderator controll, this permission won&#039;t allow users to modefy settings of existing world, it only allows them to view the settings / teleport to worldsmultiworld.basic&lt;br /&gt;
-All the permissions from multiworld, you can also use the star permission to give them all permissions.Multiworld.admin&lt;br /&gt;
=Optional features=&lt;br /&gt;
Feature NameDescriptionConfiguration location&lt;br /&gt;
End portal handlerThe end portal handlers allows you to define custom end portals per worldoptions.useEndPortalHandler&lt;br /&gt;
Nether portal handlerThis addon makes it posiable to redirect netherportals to custom nether worlds, this setting is per-worldoptions.usePortalHandler&lt;br /&gt;
WorldChatSeperatorThis allows you to use the RecieveChat and the SendChat flags on a worldoptions.useWorldChatSeperator&lt;br /&gt;
GamemodeChangerThis allows you to use the flag CreativeWorld to turn on creative mode for a world, to use this you need to give you users the following permissions on all worlds: multiworld.creativemode &lt;br /&gt;
This module also comes with a other configuration settings, when you turn off usecreativemodeinv, it ONLY handles the gamemode part, it won&#039;t change the inventory contents, this can be used if you have a custom plugin for per world inventories.options.usecreativemode&lt;br /&gt;
EnderBlockPrevents the use of ender chests in creative mode, this can be used to prevent people from cheating stuff by storing it inside a ender chest in a creative world, and then removing it in a survival world.options.blockEnderChestInCrea&lt;br /&gt;
WorldSpawnHandlerThis allows you to have custom respawn worlds per world group, this can be setup by turning this part on to generate the configuration needed for this.options.useWorldSpawnHandler&lt;br /&gt;
CraftbukkitHooksAllows multiworld to hook into craftbukkit to display information that the bukit api won&#039;t provide. This feature will try to turn itself off when there are any errors.options.craftbukkitHooks&lt;br /&gt;
=Multiworld and Data=&lt;br /&gt;
Multiworld is using a statistcs tracking code so useage statistics wil be logged, for more information what is logged see:&lt;br /&gt;
Usage statistics at v3.5.0&lt;br /&gt;
=Other recommended plugins for your server=&lt;br /&gt;
[[LocationTeleport]] - This plugin teleports users when they enter a arena, when you shape the area like a portal, you can have your own portals&lt;br /&gt;
[[hothgenerator]] - Generates a awesome snow world&lt;br /&gt;
/mw create WorldName plugin:HothGenerator &lt;br /&gt;
(Case sensitive)&lt;br /&gt;
[[multiinv]] - Allows more control between the inventories of worlds than multiworld can provide on its own.&lt;/div&gt;</summary>
		<author><name>9032676</name></author>
	</entry>
</feed>