60分ごとに関数を呼び出す簡単な方法が必要です。これどうやってするの?私はMineCraftbukkitプラグインを作成しています、そしてこれは私が持っているものです:
package com.webs.playsoulcraft.plazmotech.Java.MineRegen;
import Java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.plugin.Java.JavaPlugin;
public class Main extends JavaPlugin{
public final Logger log = Logger.getLogger("Minecraft");
@Override
public void onEnable() {
this.log.info("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
this.log.info("Plaz's Mine Regen is now enabled!");
this.log.info("Copyright 2012 Plazmotech Co. All rights reserved.");
this.log.info("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
}
@Override
public void onDisable() {
this.log.info("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
this.log.info("Plaz's Mine Regen is now disabled!");
this.log.info("Copyright 2012 Plazmotech Co. All rights reserved.");
this.log.info("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
}
public void onPlayerInteract(PlayerInteractEvent event) {
final Action action = event.getAction();
if (action == Action.LEFT_CLICK_BLOCK) {
Location l1 = event.getClickedBlock().getLocation();
} else if (action == Action.RIGHT_CLICK_BLOCK) {
Location l2 = event.getClickedBlock().getLocation();
}
}
}
1時間ごとに実装する関数を実行する必要があります。どうすればよいですか。注意:関数はl1とl2を使用します。また、どのようにしてこれをループしてすべてのブロックを間に入れることができますか?
Timer
オブジェクトを作成し、実行したいコードを実行するTimerTask
を指定します。
Timer timer = new Timer ();
TimerTask hourlyTask = new TimerTask () {
@Override
public void run () {
// your code here...
}
};
// schedule the task to run starting now and then every hour...
timer.schedule (hourlyTask, 0l, 1000*60*60);
hourlyTask
関数内でonPlayerInteract
を宣言すると、l1
およびl2
にアクセスできます。そのコンパイルを行うには、両方をfinal
としてマークする必要があります。
Timer
オブジェクトを使用する利点は、複数のTimerTask
オブジェクトを処理できることです。それぞれに独自のタイミングや遅延などがあります。 Timer
オブジェクトをクラス変数などとして宣言することにより、オブジェクトに追加します。
間にあるすべてのブロックを取得する方法がわかりません。
永久に実行され、データを実行するために1時間ごとに起動するスレッドを作成します。
Thread t = new Thread() {
@Override
public void run() {
while(true) {
try {
Thread.sleep(1000*60*60);
//your code here...
} catch (InterruptedException ie) {
}
}
}
};
t.start();
Bukkitスケジューラを使用する必要があります。
public void Method(){
this.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
@Override
public void run() {
// Your code goes here
Method();
}
}, time * 20L );
}
これを使用してメソッドを作成し、そこで同じメソッドを呼び出す必要があります。