提供: Minecraft Modding Wiki
この編集を取り消せます。
下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
36行目: | 36行目: | ||
Pleiadesを利用する場合、「開発対象用 JDK」と、ビルドツールMavenが実行できるプラグイン「m2e」が同梱されているものを選択してください。<br/> | Pleiadesを利用する場合、「開発対象用 JDK」と、ビルドツールMavenが実行できるプラグイン「m2e」が同梱されているものを選択してください。<br/> | ||
− | (Eclipseを既に利用している場合でも、m2eを後から追加インストールすることは可能です。) | + | (Eclipseを既に利用している場合でも、m2eを後から追加インストールすることは可能です。)<br/> |
− | + | 以下、m2eが既に導入されている前提で説明します。 | |
− | |||
− | |||
− | |||
− | |||
− | |||
== Plugin用プロジェクトを始めるために == | == Plugin用プロジェクトを始めるために == | ||
90行目: | 85行目: | ||
Eclipseの画面に戻ると、左側に TutorialPlugin プロジェクトが作成されているはずです。ここまで、うまく作成できましたか? | Eclipseの画面に戻ると、左側に TutorialPlugin プロジェクトが作成されているはずです。ここまで、うまく作成できましたか? | ||
− | |||
− | |||
− | |||
=== Bukkit API の参照設定 === | === Bukkit API の参照設定 === | ||
100行目: | 92行目: | ||
[[Image:create_project4.png]] | [[Image:create_project4.png]] | ||
− | + | まず、Java実行環境(JRE)の参照設定をします。<br/> | |
一番最後の行に '''</project>''' というタグがありますが、その1行上に、次の内容を挿入してください。<br/> | 一番最後の行に '''</project>''' というタグがありますが、その1行上に、次の内容を挿入してください。<br/> | ||
− | (なお、これは Java 7 を参照してビルドするための設定です。もし Java 6 を参照してビルドしたい場合は、sourceタグとtargetタグに書かれている 1.7 のところを 1.6 | + | (なお、これは Java 7 を参照してビルドするための設定です。もし Java 6 を参照してビルドしたい場合は、sourceタグとtargetタグに書かれている 1.7 のところを 1.6 に変更してください。) |
− | < | + | <code> |
<build> | <build> | ||
<plugins> | <plugins> | ||
111行目: | 103行目: | ||
<artifactId>maven-compiler-plugin</artifactId> | <artifactId>maven-compiler-plugin</artifactId> | ||
<configuration> | <configuration> | ||
− | <source>1.7</source> | + | <nowiki><</nowiki>source>1.7</source> |
<target>1.7</target> | <target>1.7</target> | ||
</configuration> | </configuration> | ||
117行目: | 109行目: | ||
</plugins> | </plugins> | ||
</build> | </build> | ||
− | </ | + | </code> |
− | + | 次に、BukkitリポジトリのURL設定を追加します。<br/> | |
下記の内容を追記してください。 | 下記の内容を追記してください。 | ||
− | < | + | <code> |
<repositories> | <repositories> | ||
<repository> | <repository> | ||
− | <id> | + | <id>bukkit-repo</id> |
− | <url> | + | <url>http://repo.bukkit.org/content/groups/public/</url> |
</repository> | </repository> | ||
</repositories> | </repositories> | ||
− | </ | + | </code> |
最後に、Bukkit API の参照設定を追加します。<br/> | 最後に、Bukkit API の参照設定を追加します。<br/> | ||
下記の内容を追記してください。 | 下記の内容を追記してください。 | ||
− | < | + | <code> |
<dependencies> | <dependencies> | ||
<dependency> | <dependency> | ||
<groupId>org.bukkit</groupId> | <groupId>org.bukkit</groupId> | ||
<artifactId>bukkit</artifactId> | <artifactId>bukkit</artifactId> | ||
− | <version>1. | + | <version>1.7.9-R0.2</version> |
</dependency> | </dependency> | ||
</dependencies> | </dependencies> | ||
− | </ | + | </code> |
− | この設定では、Bukkit API 1. | + | この設定では、Bukkit API 1.7.9-R0.2 が参照されます。<br/> |
別のバージョンを参照したい場合は、versionタグの中を変更してください。<br/> | 別のバージョンを参照したい場合は、versionタグの中を変更してください。<br/> | ||
− | 設定が可能なバージョン番号の一覧は、[ | + | 設定が可能なバージョン番号の一覧は、[http://repo.bukkit.org/content/groups/public/org/bukkit/bukkit/ こちら] を参照してください。 |
ここまで編集をすると、pom.xmlは次のようになっているはずです。確認してみてください。 | ここまで編集をすると、pom.xmlは次のようになっているはずです。確認してみてください。 | ||
− | <pre | + | <pre> |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
163行目: | 155行目: | ||
<artifactId>maven-compiler-plugin</artifactId> | <artifactId>maven-compiler-plugin</artifactId> | ||
<configuration> | <configuration> | ||
− | <source>1.7</source> | + | <nowiki><</nowiki>source>1.7</source> |
<target>1.7</target> | <target>1.7</target> | ||
</configuration> | </configuration> | ||
171行目: | 163行目: | ||
<repositories> | <repositories> | ||
<repository> | <repository> | ||
− | <id> | + | <id>bukkit-repo</id> |
− | <url> | + | <url>http://repo.bukkit.org/content/groups/public/</url> |
</repository> | </repository> | ||
</repositories> | </repositories> | ||
179行目: | 171行目: | ||
<groupId>org.bukkit</groupId> | <groupId>org.bukkit</groupId> | ||
<artifactId>bukkit</artifactId> | <artifactId>bukkit</artifactId> | ||
− | <version>1. | + | <version>1.7.9-R0.2</version> |
+ | <type>jar</type> | ||
+ | <scope>provided</scope> | ||
</dependency> | </dependency> | ||
</dependencies> | </dependencies> | ||
232行目: | 226行目: | ||
完了 を押して、新規クラスが作成されたことを確認して下さい。ソースコードは次のようになっているはずです。 | 完了 を押して、新規クラスが作成されたことを確認して下さい。ソースコードは次のようになっているはずです。 | ||
− | < | + | <source lang="java"> |
package my.test.plugin.tutorialplugin; | package my.test.plugin.tutorialplugin; | ||
240行目: | 234行目: | ||
} | } | ||
− | </ | + | </source> |
{{warning}} メインクラスは、コンストラクタを実行したり、新しいインスタンスを作成したりしないでください。 | {{warning}} メインクラスは、コンストラクタを実行したり、新しいインスタンスを作成したりしないでください。 | ||
264行目: | 258行目: | ||
''plugin.yml'' に、下記の3行を書いてください。 | ''plugin.yml'' に、下記の3行を書いてください。 | ||
− | < | + | <source lang="yaml"> |
name: (あなたのプラグイン名) | name: (あなたのプラグイン名) | ||
main: (作成したパッケージ名).(作成したメインクラス) | main: (作成したパッケージ名).(作成したメインクラス) | ||
version: (あなたのプラグインのバージョン) | version: (あなたのプラグインのバージョン) | ||
− | </ | + | </source> |
このチュートリアルでは、次のように作成します。 | このチュートリアルでは、次のように作成します。 | ||
− | < | + | <source lang="yaml"> |
name: TutorialPlugin | name: TutorialPlugin | ||
main: my.test.plugin.tutorialplugin.TutorialPlugin | main: my.test.plugin.tutorialplugin.TutorialPlugin | ||
version: 0.0.1 | version: 0.0.1 | ||
− | </ | + | </source> |
{{note}} メインクラスの設定は、大文字小文字が区別されるので、大文字小文字に注意して設定してください。 | {{note}} メインクラスの設定は、大文字小文字が区別されるので、大文字小文字に注意して設定してください。 | ||
373行目: | 367行目: | ||
具体的には、"give"コマンドは既にいくつかのプラグインで利用されています。 | 具体的には、"give"コマンドは既にいくつかのプラグインで利用されています。 | ||
もし独自に"give"コマンドを実装した場合は、 | もし独自に"give"コマンドを実装した場合は、 | ||
− | "give"コマンドを実装している他のプラグインとの互換性は無くなります。 | + | "give"コマンドを実装している他のプラグインとの互換性は無くなります。 |
− | onCommand() | + | onCommand()は、常にboolean型の値としてtrue,falseのどちらかを戻り値として返さねばなりません。 |
trueを返した場合は、情報表示のためのイベントは発生しません。 | trueを返した場合は、情報表示のためのイベントは発生しません。 | ||
falseを返した場合は、プラグインファイルを"usage: property"に戻し、コマンドを実行したプレイヤーに、コマンドの利用方法を通知するメッセージを表示します。 | falseを返した場合は、プラグインファイルを"usage: property"に戻し、コマンドを実行したプレイヤーに、コマンドの利用方法を通知するメッセージを表示します。 | ||
384行目: | 378行目: | ||
* Command cmd - 実行されたコマンドの内容 | * Command cmd - 実行されたコマンドの内容 | ||
* String commandLabel - 利用されたコマンドエイリアス | * String commandLabel - 利用されたコマンドエイリアス | ||
− | * String[] args - コマンドの引数を格納した配列(例:/hello abc defコマンドが入力された場合の内容は、args[0]がabc、args[1]がdefとなる) | + | * String[] args - コマンドの引数を格納した配列(例:/hello abc defコマンドが入力された場合の内容は、args[0]がabc、args[1]がdefとなる) |
=== コマンドの設定 === | === コマンドの設定 === | ||
482行目: | 476行目: | ||
MyPlugin.java (プラグインのメインクラス): | MyPlugin.java (プラグインのメインクラス): | ||
<blockquote><source lang="java"> | <blockquote><source lang="java"> | ||
+ | private static Plugin instance; | ||
+ | |||
@Override | @Override | ||
public void onEnable() { | public void onEnable() { | ||
+ | instance = this; | ||
+ | // ... | ||
+ | |||
// plugin.yml に basic というコマンドを定義していないと、 | // plugin.yml に basic というコマンドを定義していないと、 | ||
//実行した時にNullPointerExceptionが発生します。注意してください。 | //実行した時にNullPointerExceptionが発生します。注意してください。 | ||
− | getCommand("basic").setExecutor(new MyPluginCommandExecutor( | + | getCommand("basic").setExecutor(new MyPluginCommandExecutor()); |
+ | |||
+ | // ... | ||
+ | } | ||
+ | |||
+ | public static Plugin getInstance() { | ||
+ | return instance; | ||
} | } | ||
</source></blockquote> | </source></blockquote> | ||
493行目: | 498行目: | ||
<blockquote><source lang="java"> | <blockquote><source lang="java"> | ||
public class MyPluginCommandExecutor implements CommandExecutor { | public class MyPluginCommandExecutor implements CommandExecutor { | ||
− | + | private Plugin instance = MyPlugin.getInstance(); | |
// メインクラスの参照です。処理の中でメインクラスのメソッドを利用しない場合は、省略して構いません。 | // メインクラスの参照です。処理の中でメインクラスのメソッドを利用しない場合は、省略して構いません。 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
@Override | @Override | ||
526行目: | 526行目: | ||
@Override | @Override | ||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){ | public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){ | ||
− | if (sender instanceof Player) { | + | if ((sender instanceof Player)) { |
Player player = (Player) sender; | Player player = (Player) sender; | ||
− | // | + | // doSomething |
− | |||
} else { | } else { | ||
sender.sendMessage(ChatColor.RED + "ゲーム内から実行してください!"); | sender.sendMessage(ChatColor.RED + "ゲーム内から実行してください!"); | ||
537行目: | 536行目: | ||
} | } | ||
</source> </blockquote> | </source> </blockquote> | ||
− | |||
− | |||
=== コマンドのパラメタ長をチェックする === | === コマンドのパラメタ長をチェックする === | ||
555行目: | 552行目: | ||
=== プレイヤーがオンラインである事を確認する === | === プレイヤーがオンラインである事を確認する === | ||
− | + | 特定のプレイヤーのPlayerインスタンスを利用したい場合、<br/> | |
+ | 必ずそのプレイヤーがオンラインである必要があります。<br/> | ||
オンラインであるかどうかをチェックして下さい。<br/> | オンラインであるかどうかをチェックして下さい。<br/> | ||
− | |||
− | |||
− | |||
処理例: | 処理例: | ||
+ | <!-- ucchy 2014.05.13記 ここのサンプル実装は、CraftBukkit 1.7.9-R0.1 で一旦depricatedされた内容を避けて書いるため、原文のものと異なります。再翻訳時には原文を参照して更新してください。 --> | ||
<blockquote><source lang="java"> | <blockquote><source lang="java"> | ||
@Override | @Override | ||
− | public boolean onCommand(CommandSender sender, Command | + | public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){ |
− | if ( | + | Player other = getPlayer(args[0]); |
− | sender.sendMessage(" | + | if (other == null) { |
+ | sender.sendMessage(ChatColor.RED + args[0] + "さんはオフラインです!"); | ||
return false; | return false; | ||
} | } | ||
− | Player | + | return false; |
− | + | } | |
− | + | ||
− | + | private Player getPlayer(String name) { | |
− | + | for ( Player player : Bukkit.getOnlinePlayers() ) { | |
− | + | if ( player.getName().equals(name) ) { | |
− | + | return player; | |
+ | } | ||
} | } | ||
+ | return null; | ||
} | } | ||
</source> </blockquote> | </source> </blockquote> | ||
586行目: | 585行目: | ||
== 権限 == | == 権限 == | ||
− | + | Bukkitのパーミッション(権限)APIの利用は、簡単ではありません。 | |
− | + | プレイヤーが特定の権限を持っているかどうかを調べる処理は次のようになります: | |
+ | <blockquote><source lang="java">if(player.hasPermission("some.pointless.permission")) { | ||
+ | //Do something | ||
+ | }else{ | ||
+ | //Do something else | ||
+ | }</source></blockquote> | ||
− | 権限がセットされているか、いない(Javaの'''null'''と同等) | + | 権限がセットされているか、いない(Javaの'''null'''と同等)かを調べる処理は次のようになります: |
<blockquote><source lang="java">boolean isPermissionSet(String name)</source></blockquote> | <blockquote><source lang="java">boolean isPermissionSet(String name)</source></blockquote> | ||
− | + | なぜグループの概念が存在しないかと思った方もいるでしょうが、 | |
− | < | + | そもそも、権限にはグルーピングの概念は不要なのです。 |
+ | |||
+ | 元々、グループの主な用途はチャットメッセージをフォーマッティングする事にありました。<br/> | ||
+ | これは権限の機能を利用してもっと簡単に行えます。<br/> | ||
+ | 例えば、チャットプラグインの設定において、権限とプレフィクスの関連を定義する事が該当します。<br/> | ||
+ | 具体的には、権限'''"someChat.prefix.admin"'''をプレフィクス'''[Admin]'''に対応させる定義を行い、<br/> | ||
+ | プレイヤーがチャットで発言する度に、プレイヤー名の先頭に'''[Admin]'''が付くようになる機能が挙げられます。 | ||
− | + | 他にも、グループに所属する複数のユーザに、<br/> | |
− | <blockquote><source lang="java"> | + | メッセージを送信するような機能を実現するために利用する事が考えられます。<br/> |
− | + | この例を、権限を利用した処理で記述すると以下のようになります: | |
− | + | <blockquote><source lang="java">for(Player player: getServer().getOnlinePlayers()) { | |
− | + | ||
− | } | + | if(player.hasPermission("send.recieve.message")) { |
+ | player.sendMessage("You were sent a message"); | ||
+ | } | ||
− | + | }</source> </blockquote> | |
− | |||
− | + | さて、依然として<br/> | |
− | + | 「グループを利用せずに、複数のプレイヤーに権限をセットする良い方法は何なのか?」が疑問かと思いますが・・・<br/> | |
+ | BukkitのAPI自体は、グループの概念を提供していません。<br/> | ||
+ | グループの概念を利用するためには、permissionsBukkitのような<br/> | ||
+ | グループ権限の機能を提供するプラグインを利用する事になります。<br/> | ||
+ | とどのつまり、'''このAPIはインタフェース(Interface)であり、実装(Implementation)ではない'''のです。 | ||
=== 権限の設定 === | === 権限の設定 === | ||
− | + | 権限を利用して細かな制御を行いたい場合は、<br/> | |
− | ''plugin.yml'' | + | デフォルト権限と、子権限の設定を''plugin.yml''に追記する事を検討して下さい。<br/> |
+ | この2種類の設定は、オプション(必須ではなく完全に任意で利用される)項目ではありますが、お勧めします。<br/> | ||
下記は、''plugin.yml''の最後に追加する形で設定する権限です: | 下記は、''plugin.yml''の最後に追加する形で設定する権限です: | ||
− | <blockquote> | + | <blockquote><code><source lang="yaml">permissions: |
− | < | ||
− | permissions: | ||
doorman.*: | doorman.*: | ||
description: Gives access to all doorman commands | description: Gives access to all doorman commands | ||
635行目: | 649行目: | ||
default: true | default: true | ||
doorman.denied: | doorman.denied: | ||
− | description: Prevents this user from entering the door | + | description: Prevents this user from entering the door</source> |
− | </ | + | </code></blockquote> |
− | </blockquote> | ||
655行目: | 668行目: | ||
==== 子権限 ==== | ==== 子権限 ==== | ||
− | + | 恐らく今までに、''* 権限''を利用してサブ権限を割り当てた事があると思います。<br/> | |
これは、変更されたBukkit APIと、子権限の定義によって実現した機能であり、<br/> | これは、変更されたBukkit APIと、子権限の定義によって実現した機能であり、<br/> | ||
高い柔軟性を提供しています。<br/> | 高い柔軟性を提供しています。<br/> | ||
下記はその実装例です: | 下記はその実装例です: | ||
− | <blockquote> | + | <blockquote><source lang="yaml">permissions: |
− | < | ||
− | permissions: | ||
doorman.*: | doorman.*: | ||
description: Gives access to all doorman commands | description: Gives access to all doorman commands | ||
669行目: | 680行目: | ||
doorman.knock: true | doorman.knock: true | ||
doorman.denied: false</source> | doorman.denied: false</source> | ||
− | + | ||
''doorman.*''権限は、いくつかの子権限を含んでいます。 | ''doorman.*''権限は、いくつかの子権限を含んでいます。 | ||
''doorman.*''権限がtrueである場合に、 | ''doorman.*''権限がtrueである場合に、 | ||
676行目: | 687行目: | ||
その子権限のデフォルト権限は、全て反転(trueが定義値ならfalseになる)された状態で機能します。 | その子権限のデフォルト権限は、全て反転(trueが定義値ならfalseになる)された状態で機能します。 | ||
</blockquote> | </blockquote> | ||
− | |||
− | |||
=== 独自の権限設定 === | === 独自の権限設定 === | ||
704行目: | 713行目: | ||
まずはそのブロックを取得した上で、変更を加えることになります。<br/> | まずはそのブロックを取得した上で、変更を加えることになります。<br/> | ||
PlayerMoveイベントの処理中でこれを行う例を示します: | PlayerMoveイベントの処理中でこれを行う例を示します: | ||
− | <blockquote><source lang="java"> | + | <blockquote><source lang="java">public void onPlayerMove(PlayerMoveEvent evt) { |
− | |||
− | public void onPlayerMove(PlayerMoveEvent evt) { | ||
// プレイヤーの位置を取得します。 | // プレイヤーの位置を取得します。 | ||
Location loc = event.getPlayer().getLocation(); | Location loc = event.getPlayer().getLocation(); | ||
803行目: | 810行目: | ||
=== エンチャント === | === エンチャント === | ||
+ | |||
+ | <!-- ucchy 2014.05.13記 エンチャントIDと、EnchantmentWrapperを利用する方法は、現在では非推奨ですが、原文もまだ古いままです。訳文だけ先行して修正しますが、原文が更新されたら修正してください。 --> | ||
+ | |||
+ | <!-- | ||
+ | アイテムに対するエンチャントに触れる前に、[http://ja.minecraftwiki.net/wiki/Data_values Item Code] と [http://ja.minecraftwiki.net/wiki/Enchanting EID]を見てから以下の解説を読んでください。 | ||
+ | |||
+ | エンチャントは、Enchantmentクラスが受け持っている機能ですが、<br/> | ||
+ | Enchantmentクラス自体は抽象クラスであるため、インスタンス化('''new Enchantment()''')出来ません。 | ||
+ | エンチャントはEnchantmentWrapperクラスから利用する必要があるからです。 | ||
+ | --> | ||
アイテムにエンチャントを付与するには、ItemStackクラスの '''addEnchantment(Enchantment enchant, int level)''' メソッドを使用します。 | アイテムにエンチャントを付与するには、ItemStackクラスの '''addEnchantment(Enchantment enchant, int level)''' メソッドを使用します。 | ||
809行目: | 826行目: | ||
もし、通常ありえないエンチャントを設定したい場合は、addEnchantment()メソッドの代わりにaddUnsafeEnchantment()メソッドを使ってください。 | もし、通常ありえないエンチャントを設定したい場合は、addEnchantment()メソッドの代わりにaddUnsafeEnchantment()メソッドを使ってください。 | ||
− | |||
<blockquote><source lang="java"> | <blockquote><source lang="java"> | ||
− | // | + | // 木の棒のインスタンスを生成する |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
ItemStack myItem = new ItemStack(Material.STICK); | ItemStack myItem = new ItemStack(Material.STICK); | ||
− | // | + | // 木の棒にFireAspectレベル100を付与する |
− | // | + | //(ただしFireAspectレベル100は通常存在しないので、付与は成功しない) |
− | + | myItem.addEnchantment(Enchantment.FIRE_ASPECT, 100); | |
− | myItem. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</source></blockquote> | </source></blockquote> | ||
956行目: | 938行目: | ||
ここで、正しいバージョンのJDKが選択されていることを確認してください。 | ここで、正しいバージョンのJDKが選択されていることを確認してください。 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
ビルドがうまくいった場合、プロジェクトのフォルダの中に target フォルダが作成されており、そのフォルダの中にビルドされたJarファイルがあります。 | ビルドがうまくいった場合、プロジェクトのフォルダの中に target フォルダが作成されており、そのフォルダの中にビルドされたJarファイルがあります。 | ||
998行目: | 967行目: | ||
return false; | return false; | ||
} | } | ||
− | + | ||
// 燃やすプレイヤーを取得します。 | // 燃やすプレイヤーを取得します。 | ||
− | Player target = | + | Player target = getPlayer(args[0]); |
− | + | ||
// 対象プレイヤーが、オンラインかどうかを確認します。 | // 対象プレイヤーが、オンラインかどうかを確認します。 | ||
if (target == null) { | if (target == null) { | ||
1,007行目: | 976行目: | ||
return true; | return true; | ||
} | } | ||
− | + | ||
// 対象プレイヤーを、1000tick(=50秒) の間、燃えるようにします。 | // 対象プレイヤーを、1000tick(=50秒) の間、燃えるようにします。 | ||
target.setFireTicks(1000); | target.setFireTicks(1000); | ||
1,013行目: | 982行目: | ||
} | } | ||
return false; | return false; | ||
+ | } | ||
+ | |||
+ | private Player getPlayer(String name) { | ||
+ | for ( Player player : Bukkit.getOnlinePlayers() ) { | ||
+ | if ( player.getName().equals(name) ) { | ||
+ | return player; | ||
+ | } | ||
+ | } | ||
+ | return null; | ||
} | } | ||
</source> </blockquote> | </source> </blockquote> | ||
1,023行目: | 1,001行目: | ||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){ | public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){ | ||
if(cmd.getName().equalsIgnoreCase("KillPlayer")){ | if(cmd.getName().equalsIgnoreCase("KillPlayer")){ | ||
− | + | Player target = getPlayer(args[0]); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | Player target = | ||
// 対象プレイヤーがオンラインかどうかを確認します。 | // 対象プレイヤーがオンラインかどうかを確認します。 | ||
if (target == null) { | if (target == null) { | ||
1,036行目: | 1,007行目: | ||
return true; | return true; | ||
} | } | ||
− | // | + | // 対象に1000ダメージを与える |
target.damage(1000); | target.damage(1000); | ||
return true; | return true; | ||
} | } | ||
return false; | return false; | ||
+ | } | ||
+ | |||
+ | private Player getPlayer(String name) { | ||
+ | for ( Player player : Bukkit.getOnlinePlayers() ) { | ||
+ | if ( player.getName().equals(name) ) { | ||
+ | return player; | ||
+ | } | ||
+ | } | ||
+ | return null; | ||
} | } | ||
</source></blockquote> | </source></blockquote> | ||
1,046行目: | 1,026行目: | ||
上記の拡張版として、プレイヤーを爆死させる処理を下記に示します: | 上記の拡張版として、プレイヤーを爆死させる処理を下記に示します: | ||
<blockquote><source lang="java"> | <blockquote><source lang="java"> | ||
− | + | float explosionPower = 4F; //This is the explosion power - TNT explosions are 4F by default | |
− | + | Player target = sender.getWorld().getPlayer(args[0]); | |
− | + | target.getWorld().createExplosion(target.getLocation(), explosionPower); | |
− | + | target.damage(1000); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</source> </blockquote> | </source> </blockquote> | ||
1,100行目: | 1,066行目: | ||
// sender instanceof Player の検査が終わっているので、Playerクラスへ安全にキャストできます。 | // sender instanceof Player の検査が終わっているので、Playerクラスへ安全にキャストできます。 | ||
Player s = (Player) sender; | Player s = (Player) sender; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
// 指定されたプレイヤーを取得します。 | // 指定されたプレイヤーを取得します。 | ||
// 指定されたプレイヤーがサーバーに接続していない場合、targetはnullになります。 | // 指定されたプレイヤーがサーバーに接続していない場合、targetはnullになります。 | ||
− | Player target = | + | Player target = getPlayer(args[0]); |
if (target == null) { | if (target == null) { | ||
sender.sendMessage("Player " + args[0] + " というプレイヤーは見つかりません!"); | sender.sendMessage("Player " + args[0] + " というプレイヤーは見つかりません!"); | ||
1,120行目: | 1,079行目: | ||
} | } | ||
return false; | return false; | ||
+ | } | ||
+ | |||
+ | private Player getPlayer(String name) { | ||
+ | for ( Player player : Bukkit.getOnlinePlayers() ) { | ||
+ | if ( player.getName().equals(name) ) { | ||
+ | return player; | ||
+ | } | ||
+ | } | ||
+ | return null; | ||
} | } | ||
</source> | </source> | ||
1,177行目: | 1,145行目: | ||
この内容について質問がある場合、遠慮なく[http://forums.bukkit.org/members/adamki11s.42417/ Adamki11s]か[http://wiki.bukkit.org/IRC BukkitDevのIRCチャンネル](当Wikiの原文を掲載しているサイトのIRCチャンネルです)で聞いてください。 | この内容について質問がある場合、遠慮なく[http://forums.bukkit.org/members/adamki11s.42417/ Adamki11s]か[http://wiki.bukkit.org/IRC BukkitDevのIRCチャンネル](当Wikiの原文を掲載しているサイトのIRCチャンネルです)で聞いてください。 | ||
:'''Note''': 当ページは訳文であるため、訳文自体に対する文責は原著者にありません。その点を考慮して必ず原文にも目を通してから質問して下さい。 | :'''Note''': 当ページは訳文であるため、訳文自体に対する文責は原著者にありません。その点を考慮して必ず原文にも目を通してから質問して下さい。 | ||
− | |||
− |