Interactionを右クリックした時、Interactionのタグに設定したコマンドを実行するプラグイン

public class interaction_clicked implements Listener {

    @EventHandler
    public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
        Player player = event.getPlayer();
        Entity clickedEntity = event.getRightClicked();

        if (clickedEntity instanceof Interaction) {
            Interaction interaction = (Interaction) clickedEntity;
            for (String tag : interaction.getScoreboardTags()) {
                if (tag.startsWith("+2F")) {
                    String command = tag.replace("+2F", "")
                            .replace("+20", " ")
                            .replace("+21", "!")
                            .replace("+22", "\"")
                            .replace("+23", "#")
                            .replace("+27", "'")
                            .replace("+2B", "+")
                            .replace("+2C", ",")
                            .replace("+2D", "-")
                            .replace("+2E", ".")
                            .replace("+3A", ":")
                            .replace("+3D", "=")
                            .replace("+40", "@")
                            .replace("+5B", "[")
                            .replace("+5D", "]")
                            .replace("+5F", "_")
                            .replace("+7B", "{")
                            .replace("+7D", "}");

                    Bukkit.dispatchCommand(player, command);
                    //player.sendMessage(command);
                    
                    break;
                }
            }
        }
    }
}
/give @s diamond 1

上記、Interactionにコマンドを登録する場合、
タグに「+2Fgive+20+40s+20diamond+201」を追加すると
Interactionを右クリックした時にダイヤモンドが1つ手に入る。

基本的に、+2F=「/」から始まるTagsをコマンドとして処理する。

forをbreakしているのはコマンドの順番を制御できていないので
コマンド1つ分を処理してループを抜けるようにしている。

「+〇〇」は、UTF-8のコード