0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Minecraftで毎日1回だけできるコマンドを作ったお話

Posted at

注意

執筆者はガチガのプログラマーではありません。
間違えているところ、もっとこうしたほうがいいよってところは是非ご教授ください。

導入

初投稿になります!本記事をご覧いただきありがとうございます。
今回は、Minecraft Java版で、「毎日1回だけ実行できるコマンド」を作成してみましたので、共有します!

動作環境

Spigot ver.1.20.6

前提

オリジナルのコマンドを追加していること。

ソースコード

まずはソースコードです。
※このコードは注意して使用してください。
※importは除いています。

Main.java
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」に書いてあげればいいわけです。

終わりに

皆さんのプログラミングライフの一助になれば幸いです…
ご意見、ご質問等々あればぜひ、よろしくお願いします!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?