importやpackageは省いています。
まずは、例から
メインクラス(JavaPluginを継承しているクラス)のonEnableに
コード: 全て選択
Bukkit.getPluginManager().registerEvents(new OreBreakListener(this), this);
を追加します。
そして、
OreBreakListener.javaを新規作成し、以下のコードをコピペしてください。
コード: 全て選択
public final class OreBreakListener implements Listener {
private Plugin plugin;
public OreBreakListener(Plugin plugin) {
this.plugin = plugin;
}
@EventHandler
public void onBreak(BlockBreakEvent event){
Material material = event.getBlock().getType();
if (!material.toString().contains("ORE")){
return;
}
new BukkitRunnable() {
@Override
public void run(){
event.getBlock().setType(material);
}
}.runTaskLater(plugin,1200);
}
}
これで、基本的な形は完成です。
以下は説明です。
コード: 全て選択
Bukkit.getPluginManager().registerEvents(new OreBreakListener(this), this);
まずはここで、OreBreakListenerをインスタンス化及びリスナーの登録をしています。
OreBreakListener.java
コード: 全て選択
private Plugin plugin;
public OreBreakListener(Plugin plugin) {
this.plugin = plugin;
}
ここではOreBreakListenrクラスがインスタンス化された場合にメインクラスを引数として受け取りそれをクラス内の変数に代入をしています。
コード: 全て選択
@EventHandler
public void onBreak(BlockBreakEvent event){
・・・
}
BlockBreakEventはブロックが壊れた場合に呼び出されます。
コード: 全て選択
Material material = event.getBlock().getType();
if (!material.toString().contains("ORE")){
return;
}
ここでは、壊されたブロックのMaterialの文字列に"ORE"が含まれていない。即ち、鉱石ではない場合に処理を中断するように記述されています。
コード: 全て選択
new BukkitRunnable() {
@Override
public void run(){
event.getBlock().setType(material);
}
}.runTaskLater(plugin,1200);
ここではBukkitRunnableを使用して1分( 1200tick )を経過させたのちに、ブロックのタイプをもとに戻す処理をしています。