Last active
August 29, 2015 14:20
-
-
Save ucchyocean/d88e5c1bfcafc2c6297b to your computer and use it in GitHub Desktop.
ストップウオッチプラグイン
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: StopWatch | |
version: 0.0.1 | |
main: org.bitbucket.ucchy.sw.StopWatch | |
Description: stop watch plugin | |
author: ucchy |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* @author ucchy | |
* @license LGPLv3 | |
* @copyright Copyright ucchy 2015 | |
*/ | |
package org.bitbucket.ucchy.sw; | |
import java.util.HashMap; | |
import org.bukkit.Material; | |
import org.bukkit.block.Block; | |
import org.bukkit.block.BlockFace; | |
import org.bukkit.event.EventHandler; | |
import org.bukkit.event.Listener; | |
import org.bukkit.event.block.Action; | |
import org.bukkit.event.player.PlayerInteractEvent; | |
import org.bukkit.plugin.java.JavaPlugin; | |
/** | |
* カボチャの上に置いた感圧板を踏むと計測を開始し、 | |
* ジャックオランタンの上に置いた感圧板を踏むと計測終了する | |
* ストップウォッチのプラグイン | |
* @author ucchy | |
*/ | |
public class StopWatch extends JavaPlugin implements Listener { | |
// 計測開始時間を保存するマップ | |
private HashMap<String, Long> startTime; | |
/** | |
* プラグインが有効化されると呼び出されるメソッド | |
* @see org.bukkit.plugin.java.JavaPlugin#onEnable() | |
*/ | |
@Override | |
public void onEnable() { | |
// イベントリスナー登録 | |
getServer().getPluginManager().registerEvents(this, this); | |
// マップ変数の初期化 | |
startTime = new HashMap<String, Long>(); | |
} | |
/** | |
* プレイヤーがクリックしたり感圧板に乗ったりすると発生するイベントのリスナー | |
* @param event | |
*/ | |
@EventHandler | |
public void onPlayerInteract(PlayerInteractEvent event) { | |
// 感圧板のイベントじゃないなら、無視する。 | |
if ( event.getAction() != Action.PHYSICAL ) { | |
return; | |
} | |
Block block = event.getClickedBlock(); | |
if ( block.getType() != Material.WOOD_PLATE | |
&& block.getType() != Material.STONE_PLATE | |
&& block.getType() != Material.IRON_PLATE | |
&& block.getType() != Material.GOLD_PLATE ) { | |
return; | |
} | |
if ( block.getRelative(BlockFace.DOWN).getType() == Material.PUMPKIN ) { | |
// 感圧板の下のブロックがカボチャなら、計測を開始 | |
// System.currentTimeMillis() を実行すると、現在の時刻を示す数値が取得できる。 | |
// 単位はミリ秒(1/1000秒)。 | |
long start = System.currentTimeMillis(); | |
// プレートを踏んだプレイヤーのプレイヤー名とセットで、開始時刻を保存する。 | |
startTime.put(event.getPlayer().getName(), start); | |
event.getPlayer().sendMessage("計測を開始しました。"); | |
} else if ( block.getRelative(BlockFace.DOWN).getType() == Material.JACK_O_LANTERN ) { | |
// 感圧板の下のブロックがジャックオランタンなら、計測を終了 | |
// そもそも開始時刻が記録されていないプレイヤーなら、無視する。 | |
if ( !startTime.containsKey(event.getPlayer().getName()) ) { | |
return; | |
} | |
// 現在の時刻と、開始時刻の差を求める。 | |
// ミリ秒なので、1000で割ると1秒あたりの時間になる。 | |
long time = System.currentTimeMillis() - startTime.get(event.getPlayer().getName()); | |
double seconds = (double)time / 1000; | |
event.getPlayer().sendMessage("計測を終了しました。タイムは " + seconds + "秒です。"); | |
// 開始時刻を消去しておく。 | |
startTime.remove(event.getPlayer().getName()); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
このプラグインの完成品サンプル
https://dl.dropboxusercontent.com/u/34781847/StopWatch_001/StopWatch.zip