【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

Modding・サーバPlugin制作・ツール制作など、開発関連の質問があればこちらにお願い致します。
フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999
  • (PostNo.300310)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by Lemon18 » 2017年4月11日(火) 11:53

Silvers_Cat さんが書きました:繰り返しすみません、Lemon18氏の言うとおりに第4引数を以下の通りに変更しましたがやはりうまく行きません。
コード: 全て選択
//試しにTESTにしてみるがうまくいかない
PlayerInfoData newPlayerInfoData = new PlayerInfoData(profile, 5, playerInfoData.getGameMode(), WrappedChatComponent.fromText("TEST"));

WrappedChatComponent.formTextの引数を間違えているのでしょうか?


私の方でも試してみましたが、同じ結果でした。そこは関係なかったみたいです、ごめんなさい。
Bukkitプラグインとか作ったり作らなかったり。
「どのOSでも使える」を目標に日本語入力ツールを作っています。良ければ見てください。
http://forum.minecraftuser.jp/viewtopic.php?f=36&t=31671


Twitter: https://twitter.com/Lemon1806
Minecraft: Applemon
Lemon18
ID:cb27c883
石掘り
 
記事: 84
登録日時: 2015年6月05日(金) 22:42

  • (PostNo.300988)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by オリゼリ » 2017年4月23日(日) 02:05

プレイヤーごとのループ文の作り方を教えてください

多分これだとサーバー全体のループだと思います
コード: 全て選択
                        BukkitScheduler scheduler; = Bukkit.getServer().getScheduler();
                        task = scheduler.scheduleSyncRepeatingTask(this, new Runnable() {
                            @Override
                            public void run() {
                             //code
                             }
                        }, 0L, 1L);

質問の仕方とか直したほうがいいよってことがあったら教えていただければ嬉しいです
オリゼリ
ID:fc835bc3
大工さん
 
記事: 44
登録日時: 2015年4月29日(水) 20:13

  • (PostNo.300994)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by amata1219 » 2017年4月23日(日) 08:30

オリゼリ さんが書きました:プレイヤーごとのループ文の作り方を教えてください

多分これだとサーバー全体のループだと思います
コード: 全て選択
                        BukkitScheduler scheduler; = Bukkit.getServer().getScheduler();
                        task = scheduler.scheduleSyncRepeatingTask(this, new Runnable() {
                            @Override
                            public void run() {
                             //code
                             }
                        }, 0L, 1L);


オリゼリさん、こんにちは。

対象のプレイヤーの状態が不明ですので、ここではオンラインプレイヤーと仮定して説明しますね。
答えは非常に単純明快で、下記コードを参考にしてみてくださいね。
コード: 全て選択
for(Player p : plugin.getServer().getOnlinePlayers()){
         //ここにプレイヤー単位の処理内容を実装
      }

サーバーから全オンラインプレイヤーを取得しプレイヤー単位に分けることで、お望みの動作が実現出来ますよ。

1tick毎に処理を実行する状態になっているようですが大丈夫でしょうか…?
1秒は20tickですので、現在の状態で下手に重い処理でも実装すると、サーバーが落ちる可能性があります。
アバター
amata1219
ID:e1938bc3
木を殴ってる
 
記事: 13
登録日時: 2016年11月18日(金) 16:46
お住まい: 愛知県

  • (PostNo.301034)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by オリゼリ » 2017年4月23日(日) 17:24

amata1219 さんが書きました:
オリゼリ さんが書きました:プレイヤーごとのループ文の作り方を教えてください

多分これだとサーバー全体のループだと思います
コード: 全て選択
                        BukkitScheduler scheduler; = Bukkit.getServer().getScheduler();
                        task = scheduler.scheduleSyncRepeatingTask(this, new Runnable() {
                            @Override
                            public void run() {
                             //code
                             }
                        }, 0L, 1L);


オリゼリさん、こんにちは。

対象のプレイヤーの状態が不明ですので、ここではオンラインプレイヤーと仮定して説明しますね。
答えは非常に単純明快で、下記コードを参考にしてみてくださいね。
コード: 全て選択
for(Player p : plugin.getServer().getOnlinePlayers()){
         //ここにプレイヤー単位の処理内容を実装
      }

サーバーから全オンラインプレイヤーを取得しプレイヤー単位に分けることで、お望みの動作が実現出来ますよ。

[spoiler]1tick毎に処理を実行する状態になっているようですが大丈夫でしょうか…?
1秒は20tickですので、現在の状態で下手に重い処理でも実装すると、サーバーが落ちる可能性があります。
[/spoiler]

すみませんコードはります
一部抜いて変更してありますがプラグインとしてはコマンドを打ったプレイヤーにアクションバーに文字を連続的に出すプラグインです
なのでプレイヤーごとにループさせプレイヤーごとに止めれるようにしたいのです
まだ説明不足のようでしたら教えてください
1tickなのは大丈夫です
コード: 全て選択
    public boolean onCommand(CommandSender sender, Command command, String c, String[] args) {
        Player player = (Player) sender;
        if (command.getName().equalsIgnoreCase("aaa")) {
            if (sender instanceof Player) {
                if (args.length == 0) {
                        scheduler = Bukkit.getServer().getScheduler();
                        task = scheduler.scheduleSyncRepeatingTask(this, new Runnable() {
        //code
                           sendChatAtionBar(player, aaa);
                        }, 0L, 1L);
                    return true;
                }
            }
        }
        return false;
    }
質問の仕方とか直したほうがいいよってことがあったら教えていただければ嬉しいです
オリゼリ
ID:fc835bc3
大工さん
 
記事: 44
登録日時: 2015年4月29日(水) 20:13

  • (PostNo.301130)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by レイトン » 2017年4月25日(火) 09:36

質問なのですが
プレイヤーのレベルアップまでに必要な
経験値量をこっちでいじることって
bukkitにおいて可能なのでしょうか
レイトン
ID:bd787e33
 

  • (PostNo.301211)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by amata1219 » 2017年4月27日(木) 07:05

オリゼリ さんが書きました:
amata1219 さんが書きました:
オリゼリ さんが書きました:プレイヤーごとのループ文の作り方を教えてください

多分これだとサーバー全体のループだと思います
コード: 全て選択
                        BukkitScheduler scheduler; = Bukkit.getServer().getScheduler();
                        task = scheduler.scheduleSyncRepeatingTask(this, new Runnable() {
                            @Override
                            public void run() {
                             //code
                             }
                        }, 0L, 1L);


オリゼリさん、こんにちは。

対象のプレイヤーの状態が不明ですので、ここではオンラインプレイヤーと仮定して説明しますね。
答えは非常に単純明快で、下記コードを参考にしてみてくださいね。
コード: 全て選択
for(Player p : plugin.getServer().getOnlinePlayers()){
         //ここにプレイヤー単位の処理内容を実装
      }

サーバーから全オンラインプレイヤーを取得しプレイヤー単位に分けることで、お望みの動作が実現出来ますよ。

[spoiler]1tick毎に処理を実行する状態になっているようですが大丈夫でしょうか…?
1秒は20tickですので、現在の状態で下手に重い処理でも実装すると、サーバーが落ちる可能性があります。
[/spoiler]

すみませんコードはります
一部抜いて変更してありますがプラグインとしてはコマンドを打ったプレイヤーにアクションバーに文字を連続的に出すプラグインです
なのでプレイヤーごとにループさせプレイヤーごとに止めれるようにしたいのです
まだ説明不足のようでしたら教えてください
1tickなのは大丈夫です
コード: 全て選択
    public boolean onCommand(CommandSender sender, Command command, String c, String[] args) {
        Player player = (Player) sender;
        if (command.getName().equalsIgnoreCase("aaa")) {
            if (sender instanceof Player) {
                if (args.length == 0) {
                        scheduler = Bukkit.getServer().getScheduler();
                        task = scheduler.scheduleSyncRepeatingTask(this, new Runnable() {
        //code
                           sendChatAtionBar(player, aaa);
                        }, 0L, 1L);
                    return true;
                }
            }
        }
        return false;
    }


オリゼリさん、こんにちは。
何回を目安に処理を終了するのかは分かりませんが、スケジューラの処理内容に先日のfor分を組み込めば実装可能です。
コード: 全て選択
    public boolean onCommand(CommandSender sender, Command command, String c, String[] args) {
        Player player = (Player) sender;
        int i = 0;
        if (command.getName().equalsIgnoreCase("aaa")) {
            if (sender instanceof Player) {
                if (args.length == 0) {
                        scheduler = Bukkit.getServer().getScheduler();
                        task = scheduler.scheduleSyncRepeatingTask(this, new Runnable() {
                          i++;
                          if(i > 5){
                              task.cancel();
                         }
        for(Player p : plugin.getServer().getOnlinePlayers()){
         //ここにプレイヤー単位の処理内容を実装
                               }
                        }, 0L, 1L);
                    return true;
                }
            }
        }
アバター
amata1219
ID:e1938bc3
木を殴ってる
 
記事: 13
登録日時: 2016年11月18日(金) 16:46
お住まい: 愛知県

  • (PostNo.301213)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by amata1219 » 2017年4月27日(木) 07:16

レイトン さんが書きました:質問なのですが
プレイヤーのレベルアップまでに必要な
経験値量をこっちでいじることって
bukkitにおいて可能なのでしょうか


レイトンさん、こんにちは。
恐らく不可能です。ただ、一定の経験値量を超えた場合に強制的に経験値量を増加させることで、擬似的にそういったシステムを作り出すことは可能です。
アバター
amata1219
ID:e1938bc3
木を殴ってる
 
記事: 13
登録日時: 2016年11月18日(金) 16:46
お住まい: 愛知県

  • (PostNo.301416)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by レモンティー » 2017年4月30日(日) 22:37

レイトン さんが書きました:質問なのですが
プレイヤーのレベルアップまでに必要な
経験値量をこっちでいじることって
bukkitにおいて可能なのでしょうか

bukkit単体では恐らく不可能ですが…
SkillAPIというPluginを使えば可能です。
configをいじってあげましょう。
SkillAPIやMythicMobsで分からないことがあったら気軽にPMください。
Lightning Pegasus Onlineという鯖を制作中です。気になった方も気軽にPMください。
レモンティー
ID:7bb3e3ec
水から上がったとこ
 
記事: 5
登録日時: 2017年2月27日(月) 10:40

  • (PostNo.301668)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by pico » 2017年5月05日(金) 13:32

1.11.2でプラグインを作っているのですが、
打ったコマンドがそのままチャット欄に帰ってきてしまいます。

例:/testと打つ
チャット欄
/test

必要でしたらコードを載せます。
初めてなので何か不備がありましたら教えて下さい。
アバター
pico
ID:3568fa97
木を殴ってる
 
記事: 37
登録日時: 2016年8月02日(火) 18:49

  • (PostNo.301669)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by miyabi » 2017年5月05日(金) 13:40

pico さんが書きました:必要でしたらコードを載せます。
初めてなので何か不備がありましたら教えて下さい。

必要でしたらというか、コードが無いことには何も始まらないと思うのですが…。
今の情報だけで、どういう回答が貰えることを期待しているのでしょうか。
マイクラサーバを立てる前に、PCの基礎知識を身につけましょう。
サーバ管理補助ツール MCSC(Windows専用) の開発をしたり、Minecraft Modding Wikiの管理したりしてます。
アバター
miyabi
ID:91b90127
ブタ飼い
 
記事: 6855
登録日時: 2011年8月07日(日) 14:35
お住まい: さいたまさいたまさいたま!

  • (PostNo.301671)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by pico » 2017年5月05日(金) 13:49

miyabi さんが書きました:
pico さんが書きました:必要でしたらコードを載せます。
初めてなので何か不備がありましたら教えて下さい。

必要でしたらというか、コードが無いことには何も始まらないと思うのですが…。
今の情報だけで、どういう回答が貰えることを期待しているのでしょうか。


すみません...
コードです。
添付ファイル
キャプチャ.PNG
アバター
pico
ID:3568fa97
木を殴ってる
 
記事: 37
登録日時: 2016年8月02日(火) 18:49

  • (PostNo.301676)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by miyabi » 2017年5月05日(金) 14:28

pico さんが書きました:
miyabi さんが書きました:
pico さんが書きました:必要でしたらコードを載せます。
初めてなので何か不備がありましたら教えて下さい。

必要でしたらというか、コードが無いことには何も始まらないと思うのですが…。
今の情報だけで、どういう回答が貰えることを期待しているのでしょうか。


すみません...
コードです。

画像だと非常に利用しづらいので、コードそのものをBBCodeのCodeタグを利用して貼ってください。
マイクラサーバを立てる前に、PCの基礎知識を身につけましょう。
サーバ管理補助ツール MCSC(Windows専用) の開発をしたり、Minecraft Modding Wikiの管理したりしてます。
アバター
miyabi
ID:91b90127
ブタ飼い
 
記事: 6855
登録日時: 2011年8月07日(日) 14:35
お住まい: さいたまさいたまさいたま!

  • (PostNo.301680)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by ucchy » 2017年5月05日(金) 14:47

picoさん、

pico さんが書きました:1.11.2でプラグインを作っているのですが、
打ったコマンドがそのままチャット欄に帰ってきてしまいます。

例:/testと打つ
チャット欄
/test


onCommandメソッドで、return false で終わっているときは、plugin.yml に定義したコマンドの usage の内容が画面に表示されます。
おそらく、usage に "/test" と書いているのでしょう。

onCommandメソッドでは、
コード: 全て選択
if (cmd.getName().equalsIgnoreCase("headbuy")) {
// 中略
}
return false;


と実装しているので、/headbuy というコマンドでなければ、常にreturn false で何もせずに終了するように実装されているようです。

解決するには、

コード: 全て選択
if (cmd.getName().equalsIgnoreCase("test")) {


に変更するか、
plugin.yml の commands で、test を headbuy に変更して、/headbuy コマンドを実行してください。
――お知らせ――
パソコンが壊れたため、買い替えるまで、プラグイン開発作業はお休みしています。簡単な質問程度ならお答えいたします。
――お知らせ――
アバター
ucchy
ID:4b9de033
ラピスラズリ収集家
 
記事: 1170
登録日時: 2012年11月07日(水) 00:08

  • (PostNo.301681)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by pico » 2017年5月05日(金) 15:29

miyabi さんが書きました:
pico さんが書きました:
miyabi さんが書きました:
pico さんが書きました:必要でしたらコードを載せます。
初めてなので何か不備がありましたら教えて下さい。

必要でしたらというか、コードが無いことには何も始まらないと思うのですが…。
今の情報だけで、どういう回答が貰えることを期待しているのでしょうか。


すみません...
コードです。

画像だと非常に利用しづらいので、コードそのものをBBCodeのCodeタグを利用して貼ってください。


あ、わかりました。
すみません
コード: 全て選択
package picopicoplugin;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
public class Picopicoplugin extends JavaPlugin implements Listener {


    @Override
    public void onEnable() {
        getLogger().info("[でばっくう]正常に起動");

        getCommand("suzukita").setExecutor(this);

FileConfiguration config = this.getConfig();
config.options().copyDefaults(true);
this.saveConfig();
this.getServer().getPluginManager().registerEvents(this, this);
    }

    @Override
    public void onDisable() {
        getLogger().info("[でばっくう]正常に終了");
    }


    public boolean onCommand(Player p,CommandSender sender, Command cmd, String label, String[] args) {
       if (cmd.getName().equalsIgnoreCase("test")) {
          if (!(sender instanceof Player)) {
             sender.sendMessage(ChatColor.AQUA + "サーバー側からは実行できません。");
          } else {
             Inventory inv;
              inv = Bukkit.createInventory(null, 9, "頭の購入");
              p.openInventory(inv);
             return true;
          }
          return true;
       }
       return false;
    }
    }
アバター
pico
ID:3568fa97
木を殴ってる
 
記事: 37
登録日時: 2016年8月02日(火) 18:49

  • (PostNo.301683)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by pico » 2017年5月05日(金) 15:32

ucchy さんが書きました:picoさん、

pico さんが書きました:1.11.2でプラグインを作っているのですが、
打ったコマンドがそのままチャット欄に帰ってきてしまいます。

例:/testと打つ
チャット欄
/test


onCommandメソッドで、return false で終わっているときは、plugin.yml に定義したコマンドの usage の内容が画面に表示されます。
おそらく、usage に "/test" と書いているのでしょう。

onCommandメソッドでは、
コード: 全て選択
if (cmd.getName().equalsIgnoreCase("headbuy")) {
// 中略
}
return false;


と実装しているので、/headbuy というコマンドでなければ、常にreturn false で何もせずに終了するように実装されているようです。

解決するには、

コード: 全て選択
if (cmd.getName().equalsIgnoreCase("test")) {


に変更するか、
plugin.yml の commands で、test を headbuy に変更して、/headbuy コマンドを実行してください。


plugin.ymlの方でもheadbuyにしているのですが...

コード: 全て選択
name: picopicoplugin
main: picopicoplugin.Picopicoplugin
version: 0.0.1
commands:
   headbuy:
      description: buy the head of the player.
      usage: /<command>
      default: true
      permission: picopicoplugin.headbuy
      permission-message: You don't have <permission>
アバター
pico
ID:3568fa97
木を殴ってる
 
記事: 37
登録日時: 2016年8月02日(火) 18:49

  • (PostNo.301684)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by ucchy » 2017年5月05日(金) 15:45

pico さんが書きました:plugin.ymlの方でもheadbuyにしているのですが...


でしたら、/test コマンドではなく、/headbuy コマンドを試してみてください。

それでもうまくいかないようなら、デバッグで出力して、うまく動いているかを確認してみましょう。
例えば、onCommandメソッドの最初の行(ifの前)に、次のように行を挿入してみてください。

コード: 全て選択
    public boolean onCommand(Player p,CommandSender sender, Command cmd, String label, String[] args) {
       System.out.println("デバッグ → " + cmd.getName()); // ←この行を追加
       if (cmd.getName().equalsIgnoreCase("headbuy")) { // ←ここは必ず、plugin.yml の commands に書いたコマンド名と同じにする


これで試してみて、"デバッグ →" とコンソールに表示されないなら、そもそも onCommand メソッドが呼び出されていません。
"デバッグ →" とコンソールに表示されるのに、そのあとに続く名前が headbuy ではないなら、その表示された内容を参考にif文を修正してください。
――お知らせ――
パソコンが壊れたため、買い替えるまで、プラグイン開発作業はお休みしています。簡単な質問程度ならお答えいたします。
――お知らせ――
アバター
ucchy
ID:4b9de033
ラピスラズリ収集家
 
記事: 1170
登録日時: 2012年11月07日(水) 00:08

  • (PostNo.301687)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by pico » 2017年5月05日(金) 16:05

ucchy さんが書きました:
pico さんが書きました:plugin.ymlの方でもheadbuyにしているのですが...


でしたら、/test コマンドではなく、/headbuy コマンドを試してみてください。

それでもうまくいかないようなら、デバッグで出力して、うまく動いているかを確認してみましょう。
例えば、onCommandメソッドの最初の行(ifの前)に、次のように行を挿入してみてください。

コード: 全て選択
    public boolean onCommand(Player p,CommandSender sender, Command cmd, String label, String[] args) {
       System.out.println("デバッグ → " + cmd.getName()); // ←この行を追加
       if (cmd.getName().equalsIgnoreCase("headbuy")) { // ←ここは必ず、plugin.yml の commands に書いたコマンド名と同じにする


これで試してみて、"デバッグ →" とコンソールに表示されないなら、そもそも onCommand メソッドが呼び出されていません。
"デバッグ →" とコンソールに表示されるのに、そのあとに続く名前が headbuy ではないなら、その表示された内容を参考にif文を修正してください。


試してみましたがどうやらonCommandメソッドが呼び出されていないようです...
どうすればよいでしょうか?
アバター
pico
ID:3568fa97
木を殴ってる
 
記事: 37
登録日時: 2016年8月02日(火) 18:49

  • (PostNo.301688)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by ucchy » 2017年5月05日(金) 16:10

pico さんが書きました:試してみましたがどうやらonCommandメソッドが呼び出されていないようです...
どうすればよいでしょうか?


まず、他のすべてのプラグインを取り除いて、テストするプラグイン1つだけを導入しましょう。

plugin.yml の commands に書いたコマンド名で、onCommand が呼び出されますので、
必ず同じコマンド名に設定してください(両方とも "headbuy" にする)。

プラグインは1つしか導入していないのに、それでも onCommand が呼び出されないとしたら、
プラグインはそもそもエラーが起こって起動していない可能性があります。
コンソールに書かれているログの内容を注意深く読んで、エラーを解決してみてください。
――お知らせ――
パソコンが壊れたため、買い替えるまで、プラグイン開発作業はお休みしています。簡単な質問程度ならお答えいたします。
――お知らせ――
アバター
ucchy
ID:4b9de033
ラピスラズリ収集家
 
記事: 1170
登録日時: 2012年11月07日(水) 00:08

  • (PostNo.301689)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by pico » 2017年5月05日(金) 16:18

ucchy さんが書きました:
pico さんが書きました:試してみましたがどうやらonCommandメソッドが呼び出されていないようです...
どうすればよいでしょうか?


まず、他のすべてのプラグインを取り除いて、テストするプラグイン1つだけを導入しましょう。

plugin.yml の commands に書いたコマンド名で、onCommand が呼び出されますので、
必ず同じコマンド名に設定してください(両方とも "headbuy" にする)。

プラグインは1つしか導入していないのに、それでも onCommand が呼び出されないとしたら、
プラグインはそもそもエラーが起こって起動していない可能性があります。
コンソールに書かれているログの内容を注意深く読んで、エラーを解決してみてください。


プラグインを一つにしてみてもonCommandメソッドが呼び出されていないのですが、onEnableメソッドは呼び出されているのでプラグインは動いてると思います...
本当にどうすればいいのかわからない状態です。
アバター
pico
ID:3568fa97
木を殴ってる
 
記事: 37
登録日時: 2016年8月02日(火) 18:49

  • (PostNo.301692)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by ucchy » 2017年5月05日(金) 16:52

picoさん、onCommandが呼び出されない原因がわかりました。

onCommandメソッドの引数ですが、ここを変更していますね?
ここは変更してはいけません。オーバーロードされて別のonCommandメソッドとして認識されています。

コード: 全て選択
    public boolean onCommand(Player p,CommandSender sender, Command cmd, String label, String[] args) {


ここですが、「Player p」 という引数を勝手に足してはいけません。

コード: 全て選択
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {


に戻してください。

プレイヤーを取得したいのであれば、コマンドの処理の途中に、
コード: 全て選択
Player p = (Player)sender;

を挿入してキャストしてあげてください。

実装例:
コード: 全て選択
package picopicoplugin;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.inventory.Inventory;
import org.bukkit.plugin.java.JavaPlugin;

public class Picopicoplugin extends JavaPlugin implements Listener {

    @Override
    public void onEnable() {
        getLogger().info("[でばっくう]正常に起動");

        //getCommand("suzukita").setExecutor(this);

        FileConfiguration config = this.getConfig();
        config.options().copyDefaults(true);
        this.saveConfig();
        this.getServer().getPluginManager().registerEvents(this, this);
    }

    @Override
    public void onDisable() {
        getLogger().info("[でばっくう]正常に終了");
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (cmd.getName().equalsIgnoreCase("headbuy")) {
            if (!(sender instanceof Player)) {
                sender.sendMessage(ChatColor.AQUA + "サーバー側からは実行できません。");
            } else {
                Player p = (Player)sender;
                Inventory inv;
                inv = Bukkit.createInventory(null, 9, "頭の購入");
                p.openInventory(inv);
                return true;
            }
            return true;
        }
        return false;
    }
}



なお、コマンド suzukita がplugin.yml に登録されていないと、
コンソールに「[でばっくう]正常に起動」と表示された直後に、NullPointerException が発生しているはずです。これは致命的なエラーで、プラグインは正常に起動していません。
もし、コマンド suzukita が不要であれば、
コード: 全て選択
getCommand("suzukita").setExecutor(this);

の部分を削除しておいてください。
――お知らせ――
パソコンが壊れたため、買い替えるまで、プラグイン開発作業はお休みしています。簡単な質問程度ならお答えいたします。
――お知らせ――
アバター
ucchy
ID:4b9de033
ラピスラズリ収集家
 
記事: 1170
登録日時: 2012年11月07日(水) 00:08

1つ前へ次へ

Return to 質問:開発・制作関連

x