注意
執筆者はガチガのプログラマーではありません。
間違えているところ、もっとこうしたほうがいいよってところは是非ご教授ください。
導入
初投稿になります!本記事をご覧いただきありがとうございます。
今回は、Minecraft Java版で、「毎日1回だけ実行できるコマンド」を作成してみましたので、共有します!
動作環境
Spigot ver.1.20.6
前提
オリジナルのコマンドを追加していること。
ソースコード
まずはソースコードです。
※このコードは注意して使用してください。
※importは除いています。
public class Mochimochi extends JavaPlugin implements Listener {
// HashMapの設定
Map<String,Integer> mochikuji = new HashMap<>();
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
// 毎時実行タスク
new BukkitRunnable(){
@Override
public void run(){
// ワールドタイムを取得
World world = Bukkit.getWorlds().get(0);
Long getTime = world.getTime();
// 朝判定
if (getTime == 1){
// 各プレイヤーのHashMap「mochikuji」を0にする
for (Player player : Bukkit.getOnlinePlayers()) {
mochikuji.put(String.valueOf(player.getName()), 0);
}
// プレイヤーにメッセージを送る
for (Player player : Bukkit.getOnlinePlayers()){
player.sendMessage(("もちもちおみくじができるよ!"));
}
}
}
}.runTaskTimer(this,0,1);
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
if (cmd.getName().equals("mochikuji")){
// コマンドを送信したプレイヤー情報の取得
String playerName = sender.getName();
// HashMap「mochikuji」が0ならmochiコマンドを実行
if (mochikuji.get(playerName) == 0) {
new mochiCommand().mochikuji(sender);
// プレイヤーのHashMap「mochikuji」を1にセット
mochikuji.put(playerName, 1);
}else{
// HashMap「mochikuji」が1ならコマンドを実行しない
sender.sendMessage("今日はもうおみくじ引いたよ");
}
}
return false;
}
@Override
public void onDisable() {
// Plugin shutdown logic
}
}
挙動としては、「mochikuji」というコマンドを毎日1回だけ使える、というものです。毎日1回だけ、というのは毎朝起きたらリセットされる、ということになります。
今回の仕組みとしてはHashMapを用いて、0 or 1判定を行っています。HashMapというのは、keyとvalueを設定して、データを格納する仕組みです。
HashMap「mochikuji」のkeyにプレイヤーの名前を、valueに0 or 1を入れて、コマンド操作を行ったかどうかを判定しています。そして、マイクラ内時間で "1tick" になった際、リセットされる(HashMap「mochikuji」が全員0になる)ようになっています。
そして、実際に処理したい内容を「mochiCommand.java」に書いてあげればいいわけです。
終わりに
皆さんのプログラミングライフの一助になれば幸いです…
ご意見、ご質問等々あればぜひ、よろしくお願いします!