提供: Minecraft Modding Wiki
この編集を取り消せます。
下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
7行目: | 7行目: | ||
スケジューラを利用した実装は、次のような手順を踏んでください。 | スケジューラを利用した実装は、次のような手順を踏んでください。 | ||
− | # | + | # まずスケジューラにより実行される処理内容を、[[#BukkitRunnable|BukkitRunnable]] を継承したクラスの run()メソッドで実装します。 |
− | # | + | # Bukkit.getScheduler() でBukkitSchedulerを取得し、前のステップで実装したクラスを実行するように設定します。 |
== BukkitRunnable == | == BukkitRunnable == | ||
15行目: | 15行目: | ||
Runnableに無い便利な機能として、自身の処理を再スケジュールしたり、キャンセルしたりできることです。 | Runnableに無い便利な機能として、自身の処理を再スケジュールしたり、キャンセルしたりできることです。 | ||
− | == | + | == 定義方法の例 == |
スケジューラの処理を定義するには、まず BukkitRunnable を extends しましょう。 | スケジューラの処理を定義するには、まず BukkitRunnable を extends しましょう。 | ||
+ | |||
+ | ==== 具体例 ==== | ||
これはスケジュール処理のタスク定義の例です。 | これはスケジュール処理のタスク定義の例です。 | ||
34行目: | 36行目: | ||
</source></blockquote> | </source></blockquote> | ||
− | == | + | == 作業のスケジューリング == |
タスクを定義した後、プラグインは、タスクをスケジュールする必要があります。<br> | タスクを定義した後、プラグインは、タスクをスケジュールする必要があります。<br> | ||
40行目: | 42行目: | ||
詳細は、BukkitRunnableのjavadoc を参照してください。<br> | 詳細は、BukkitRunnableのjavadoc を参照してください。<br> | ||
これらのメソッドは共通して、BukkitTaskクラスのオブジェクトを返します。 | これらのメソッドは共通して、BukkitTaskクラスのオブジェクトを返します。 | ||
+ | |||
+ | ==== 具体例 ==== | ||
これは、プレイヤーがログインしたら、20ticks(=1秒)後にタスクを実行するスケジューラを登録する実装例です。 | これは、プレイヤーがログインしたら、20ticks(=1秒)後にタスクを実行するスケジューラを登録する実装例です。 | ||
70行目: | 74行目: | ||
'''ExampleSelfCancelingTask.java''' | '''ExampleSelfCancelingTask.java''' | ||
− | <blockquote><source lang="java"> | + | <blockquote><source lang="java">import org.bukkit.plugin.java.JavaPlugin; |
− | import org.bukkit.plugin.java.JavaPlugin; | ||
import org.bukkit.scheduler.BukkitRunnable; | import org.bukkit.scheduler.BukkitRunnable; | ||
77行目: | 80行目: | ||
private final JavaPlugin plugin; | private final JavaPlugin plugin; | ||
− | + | ||
private int counter; | private int counter; | ||
83行目: | 86行目: | ||
this.plugin = plugin; | this.plugin = plugin; | ||
if (counter < 1) { | if (counter < 1) { | ||
− | throw new | + | throw new illegalArgumentException("counter には1以上を指定してください。"); |
} else { | } else { | ||
this.counter = counter; | this.counter = counter; | ||
91行目: | 94行目: | ||
@Override | @Override | ||
public void run() { | public void run() { | ||
− | // | + | // What you want to schedule goes here |
− | if (counter > 0) { | + | if (counter > 0) { |
plugin.getServer().broadcastMessage("広告が表示されるまで、あと " + counter-- + "秒"); | plugin.getServer().broadcastMessage("広告が表示されるまで、あと " + counter-- + "秒"); | ||
} else { | } else { | ||
− | plugin.getServer().broadcastMessage("サーバーへようこそ!説明文をちゃんと読んでね!") | + | plugin.getServer().broadcastMessage("サーバーへようこそ!説明文をちゃんと読んでね!") |
this.cancel(); | this.cancel(); | ||
} | } | ||
} | } | ||
− | } | + | |
− | </source></blockquote> | + | }</source></blockquote> |
'''ExamplePlugin.java''' | '''ExamplePlugin.java''' | ||
− | <blockquote><source lang="java"> | + | <blockquote><source lang="java">import org.bukkit.event.EventHandler; |
− | import org.bukkit.event.EventHandler; | ||
import org.bukkit.event.Listener; | import org.bukkit.event.Listener; | ||
import org.bukkit.event.player.PlayerJoinEvent; | import org.bukkit.event.player.PlayerJoinEvent; | ||
import org.bukkit.plugin.java.JavaPlugin; | import org.bukkit.plugin.java.JavaPlugin; | ||
+ | import org.bukkit.scheduler.BukkitRunnable; | ||
+ | import org.bukkit.scheduler.BukkitTask; | ||
− | public final class ExamplePlugin extends JavaPlugin | + | public final class ExamplePlugin extends JavaPlugin { |
@Override | @Override | ||
public void onEnable() { | public void onEnable() { | ||
− | getServer().getPluginManager().registerEvents(this, | + | new ExampleListener(this); |
+ | } | ||
+ | } | ||
+ | |||
+ | class ExampleListener implements Listener { | ||
+ | |||
+ | private final ExamplePlugin plugin; | ||
+ | |||
+ | public ExampleListener(ExamplePlugin plugin) { | ||
+ | this.plugin = plugin; | ||
+ | plugin.getServer().getPluginManager().registerEvents(this, plugin); | ||
} | } | ||
121行目: | 135行目: | ||
public void onJoin(PlayerJoinEvent event) { | public void onJoin(PlayerJoinEvent event) { | ||
// スケジューリングする | // スケジューリングする | ||
− | new ExampleSelfCancelingTask(this, 5).runTaskTimer(this, 10, 20); | + | new ExampleSelfCancelingTask(this.plugin, 5).runTaskTimer(this.plugin, 10, 20); |
} | } | ||
+ | |||
} | } | ||
</source></blockquote> | </source></blockquote> | ||
131行目: | 146行目: | ||
無名クラスを理解している場合は、こちらを使っても構いません。 | 無名クラスを理解している場合は、こちらを使っても構いません。 | ||
− | <blockquote><source lang="java"> | + | <blockquote><source lang="java">import org.bukkit.event.EventHandler; |
− | import org.bukkit.event.EventHandler; | ||
import org.bukkit.event.Listener; | import org.bukkit.event.Listener; | ||
import org.bukkit.event.player.PlayerJoinEvent; | import org.bukkit.event.player.PlayerJoinEvent; | ||
import org.bukkit.plugin.java.JavaPlugin; | import org.bukkit.plugin.java.JavaPlugin; | ||
import org.bukkit.scheduler.BukkitRunnable; | import org.bukkit.scheduler.BukkitRunnable; | ||
+ | import org.bukkit.scheduler.BukkitTask; | ||
− | public final class ExamplePlugin extends JavaPlugin | + | public final class ExamplePlugin extends JavaPlugin { |
− | + | ||
@Override | @Override | ||
public void onEnable() { | public void onEnable() { | ||
− | getServer().getPluginManager().registerEvents(this, | + | new ExampleListener(this); |
+ | } | ||
+ | } | ||
+ | |||
+ | class ExampleListener implements Listener { | ||
+ | |||
+ | private final ExamplePlugin plugin; | ||
+ | |||
+ | public ExampleListener(ExamplePlugin plugin) { | ||
+ | this.plugin = plugin; | ||
+ | plugin.getServer().getPluginManager().registerEvents(this, plugin); | ||
} | } | ||
− | + | ||
@EventHandler | @EventHandler | ||
public void onJoin(PlayerJoinEvent event) { | public void onJoin(PlayerJoinEvent event) { | ||
− | // | + | // 20ticks後に1度だけ処理が実行されます。 |
+ | |||
+ | new BukkitRunnable() { | ||
− | |||
− | |||
@Override | @Override | ||
public void run() { | public void run() { | ||
// スケジューラで実行される処理内容を、ここに実装します。 | // スケジューラで実行される処理内容を、ここに実装します。 | ||
− | getServer().broadcastMessage( | + | plugin.getServer().broadcastMessage( |
"サーバーへようこそ!説明文をちゃんと読んでね!"); | "サーバーへようこそ!説明文をちゃんと読んでね!"); | ||
} | } | ||
− | }.runTaskLater(this, 20); | + | |
− | + | }.runTaskLater(this.plugin, 20); | |
} | } | ||
− | } | + | |
− | </source></blockquote> | + | }</source></blockquote> |
== BukkitScheduler == | == BukkitScheduler == | ||
167行目: | 192行目: | ||
BukkitSchedulerは、[http://docs.oracle.com/javase/1.5.0/docs/api/index.html?java/lang/Runnable.html Runnable]クラスや[http://docs.oracle.com/javase/1.5.0/docs/api/index.html?java/util/concurrent/Callable.html Callable]クラスの、どちらかまたは両方を実装したクラスを、一定時間後に実行する機能を提供します。<br> | BukkitSchedulerは、[http://docs.oracle.com/javase/1.5.0/docs/api/index.html?java/lang/Runnable.html Runnable]クラスや[http://docs.oracle.com/javase/1.5.0/docs/api/index.html?java/util/concurrent/Callable.html Callable]クラスの、どちらかまたは両方を実装したクラスを、一定時間後に実行する機能を提供します。<br> | ||
詳細は、[http://jd.bukkit.org/rb/apidocs/index.html?org/bukkit/scheduler/BukkitScheduler.html BukkitSchedulerのjavadoc] を参照してください。<br> | 詳細は、[http://jd.bukkit.org/rb/apidocs/index.html?org/bukkit/scheduler/BukkitScheduler.html BukkitSchedulerのjavadoc] を参照してください。<br> | ||
− | なお、BukkitSchedulerのメソッドで実行できる内容は、BukkitRunnableのメソッドで実行できる内容と全く同じです。 | + | なお、BukkitSchedulerのメソッドで実行できる内容は、BukkitRunnableのメソッドで実行できる内容と全く同じです。<br> |
+ | 基本的にはこちらではなく、BukkitRunnableのメソッドでスケジューラを実行することを推奨します。 | ||
− | {{warning}} | + | {{warning}} BukkitSchedulerでBukkitRunnableを実行することも可能ですが、BukkitRunnableのcancel()メソッドを使ってスケジューラをキャンセルすることができないことに注意してください。 |
− | |||
=== 実装例1 === | === 実装例1 === |