提供: Minecraft Modding Wiki
この編集を取り消せます。
下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
5行目: | 5行目: | ||
これはリスナーやイベントへの応答で実行されるコードの記述方法とは異なります。<br> | これはリスナーやイベントへの応答で実行されるコードの記述方法とは異なります。<br> | ||
また、繰り返しや、遅延の有無を設定したりすることもできます。この繰り返し処理は、処理が完了するか、キャンセルされるか、プラグインが無効になるまで実行できます。 | また、繰り返しや、遅延の有無を設定したりすることもできます。この繰り返し処理は、処理が完了するか、キャンセルされるか、プラグインが無効になるまで実行できます。 | ||
− | |||
− | |||
− | |||
− | |||
== BukkitRunnable == | == BukkitRunnable == | ||
BukkitRunnableは、 抽象クラスRunnableの実装クラスです。<br> | BukkitRunnableは、 抽象クラスRunnableの実装クラスです。<br> | ||
− | + | Runnableに無い便利な機能として、自身の処理を再スケジュールしたり、キャンセルしたりできることです。しかし、もしBukkitRunnableが自分自身をスケジュールしていない場合、自分自身でキャンセルを行うことができません。BukkitRunnableはスケジューラではないので、スケジューラのロジックを含んでいません。 | |
− | == | + | == 定義方法の例 == |
スケジューラの処理を定義するには、まず BukkitRunnable を extends しましょう。 | スケジューラの処理を定義するには、まず BukkitRunnable を extends しましょう。 | ||
+ | |||
+ | ==== 具体例 ==== | ||
これはスケジュール処理のタスク定義の例です。 | これはスケジュール処理のタスク定義の例です。 | ||
<blockquote><source lang="java"> | <blockquote><source lang="java"> | ||
import org.bukkit.Bukkit; | import org.bukkit.Bukkit; | ||
+ | import org.bukkit.plugin.java.JavaPlugin; | ||
import org.bukkit.scheduler.BukkitRunnable; | import org.bukkit.scheduler.BukkitRunnable; | ||
− | + | ||
public class ExampleTask extends BukkitRunnable { | public class ExampleTask extends BukkitRunnable { | ||
− | + | ||
− | + | private final JavaPlugin plugin; | |
+ | |||
+ | public ExampleTask(JavaPlugin plugin) { | ||
+ | this.plugin = plugin; | ||
+ | } | ||
+ | |||
public void run() { | public void run() { | ||
// スケジュールで実行する処理の内容をここに書きます。 | // スケジュールで実行する処理の内容をここに書きます。 | ||
− | + | plugin.getServer().broadcastMessage("サーバーへようこそ!説明文をちゃんと読んでね!"); | |
} | } | ||
} | } | ||
</source></blockquote> | </source></blockquote> | ||
− | == | + | |
+ | == 作業のスケジューリング == | ||
タスクを定義した後、プラグインは、タスクをスケジュールする必要があります。<br> | タスクを定義した後、プラグインは、タスクをスケジュールする必要があります。<br> | ||
41行目: | 46行目: | ||
これらのメソッドは共通して、BukkitTaskクラスのオブジェクトを返します。 | これらのメソッドは共通して、BukkitTaskクラスのオブジェクトを返します。 | ||
− | + | {{warning}} '''非同期実行タスクは、BukkitのAPIを直接実行してはいけません。''' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ''' | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ==== 具体例 ==== | |
+ | これは、20ticks(=1秒)後にタスクを実行するスケジューラを登録する実装例です。 | ||
<blockquote><source lang="java"> | <blockquote><source lang="java"> | ||
import org.bukkit.event.EventHandler; | import org.bukkit.event.EventHandler; | ||
110行目: | 56行目: | ||
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; | |
− | public final class ExamplePlugin extends JavaPlugin | + | import org.bukkit.scheduler.BukkitTask; |
− | + | ||
+ | public final class ExamplePlugin extends JavaPlugin { | ||
+ | |||
@Override | @Override | ||
public void onEnable() { | public void onEnable() { | ||
− | + | new ExampleListener(this); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | new | ||
} | } | ||
} | } | ||
− | + | ||
− | + | class ExampleListener implements Listener { | |
− | + | ||
− | + | private final ExamplePlugin plugin; | |
− | + | ||
− | + | public ExampleListener(ExamplePlugin plugin) { | |
− | + | this.plugin = plugin; | |
− | + | plugin.getServer().getPluginManager().registerEvents(this, plugin); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | public | ||
− | getServer().getPluginManager().registerEvents(this, | ||
} | } | ||
− | + | ||
@EventHandler | @EventHandler | ||
public void onJoin(PlayerJoinEvent event) { | public void onJoin(PlayerJoinEvent event) { | ||
− | + | BukkitTask task = new ExampleTask(this).runTaskLater(plugin, 20); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
} | } | ||
166行目: | 86行目: | ||
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] を参照してください。 | + | 詳細は、[http://jd.bukkit.org/rb/apidocs/index.html?org/bukkit/scheduler/BukkitScheduler.html BukkitSchedulerのjavadoc] を参照してください。 |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | {{warning}} '''非同期実行タスクは、BukkitのAPIを直接実行してはいけません。''' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | } | ||
− | |||
=== BukkitTask === | === BukkitTask === | ||
231行目: | 107行目: | ||
2. 非同期タスクのコレクションにアクセスしたり、内容を変更しないでください。通常のコレクションはスレッドセーフではありません。<br> | 2. 非同期タスクのコレクションにアクセスしたり、内容を変更しないでください。通常のコレクションはスレッドセーフではありません。<br> | ||
3. 非同期タスクは、同期タスクをスケジュールすることができます。<br> | 3. 非同期タスクは、同期タスクをスケジュールすることができます。<br> | ||
− | 4. | + | 4. 同期タスク非同期タスクをスケジュールすることができます。 |