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

フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999

返信する

:
不正プログラムによるアクセスを防ぐため、reCaptcha 認証コードの入力を強制しています。表示されている 2 つのワードをテキストフィールドにご入力ください。

BBCode: OFF
スマイリー: OFF
トピックのレビュー
   

ファイルを添付します

展開ビュー トピックのレビュー: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

Re: iconomyの所持金の操作について

投稿記事 by amata1219 » 2017年7月26日(水) 09:05

kemottomausu さんが書きました:プラグイン制作の質問です。
自分はミニゲームプラグインを作っているのですが、ゲーム終了後にゲームに参加した player に  point だけ iconomy の所持金を加算したいです。
何方かiconomyの所持金操作について教えてください。
また、今後ショップなどの機能も追加したいため、加算だけでなく減額や所持金が足りないかどうかを調べるコードなども教えていただけると嬉しいです。
Javaの扱いに慣れておらず、Plugin制作についても最近学び始めたばかりですが、宜しくお願いします。
環境は spigot-1.8.8-R0.1-SNAPSHOT, iconomyは7.0.6です
プレイヤーは以下のコードで取得しています。(見よう見まねで作ったので、良くわからないですが)
コード: 全て選択
public static Player[] getOnlinePlayers(){
      try{
         return Bukkit.getOnlinePlayers().toArray(new Player[0]);
      }catch(NoSuchMethodError e){
         try{
            Method getOnlinePlayers = null;
            for(Method m : Bukkit.class.getDeclaredMethods()){
               if(m.getName().equals("getOnlinePlayers")){
                  getOnlinePlayers = m;
                  break;
               }
            }
            if(getOnlinePlayers == null) return new Player[]{};
            Object OnlinePlayers = getOnlinePlayers.invoke(Bukkit.class, new Object[0]);
            if(OnlinePlayers instanceof Player[]) return (Player[])OnlinePlayers;
         }catch (Exception es){}
         return new Player[]{};
   }

kemottomausuさん、こんにちは。
iConomyとの連携になりますが、まずライブラリーに外部JARの追加でiConomy.jarを追加し適用して下さい。
次にiConomyのメソッドを作成します。下記コードになりますが、これは飽くまで独自の方法なので必ず正しいとは限りません。
コード: 全て選択
public static iConomy iConomy(){
Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin("iConomy");
if((plugin == null) ||(!(plugin instanceof iConomy))){
//iConomyが導入されていない場合はnullを返す
return null;
}
return (iConomy) plugin;
}

これでiConomyのデータベースへのアクセスが可能になります。
所持金操作は申し訳ありませんがご自身で探ってみて下さい。
以上となります。

余談ですが、iConomyはUUIDに対応しておらず小規模なサーバーや個人利用程度で無ければ使用は推奨されません。
プレイヤー名の変更によるデータリセットや、非正規クライアントによるシステムの悪用が考えられるため、上記の様な環境で無ければUUID対応済みの他プラグインで代用されては如何でしょうか。

iconomyの所持金の操作について

投稿記事 by kemottomausu » 2017年7月24日(月) 21:16

プラグイン制作の質問です。
自分はミニゲームプラグインを作っているのですが、ゲーム終了後にゲームに参加した player に  point だけ iconomy の所持金を加算したいです。
何方かiconomyの所持金操作について教えてください。
また、今後ショップなどの機能も追加したいため、加算だけでなく減額や所持金が足りないかどうかを調べるコードなども教えていただけると嬉しいです。
Javaの扱いに慣れておらず、Plugin制作についても最近学び始めたばかりですが、宜しくお願いします。
環境は spigot-1.8.8-R0.1-SNAPSHOT, iconomyは7.0.6です
プレイヤーは以下のコードで取得しています。(見よう見まねで作ったので、良くわからないですが)
コード: 全て選択
public static Player[] getOnlinePlayers(){
      try{
         return Bukkit.getOnlinePlayers().toArray(new Player[0]);
      }catch(NoSuchMethodError e){
         try{
            Method getOnlinePlayers = null;
            for(Method m : Bukkit.class.getDeclaredMethods()){
               if(m.getName().equals("getOnlinePlayers")){
                  getOnlinePlayers = m;
                  break;
               }
            }
            if(getOnlinePlayers == null) return new Player[]{};
            Object OnlinePlayers = getOnlinePlayers.invoke(Bukkit.class, new Object[0]);
            if(OnlinePlayers instanceof Player[]) return (Player[])OnlinePlayers;
         }catch (Exception es){}
         return new Player[]{};
      }
   }

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

投稿記事 by amata1219 » 2017年5月27日(土) 17:33

美味しい卵 さんが書きました:質問です。
というより実行中にエラーを吐いてしまったので解決方法を教えていただきたいのですが,

コード
コード: 全て選択
try {
                  try {
                     DataFolder path = new DataFolder("skills", name);
                     String p = path.getJPath();
                     
                     URL[] classLoaderUrls = new URL[] { new
                     URL("file:/" + p.toString() + "/" + name)};
                     
                     
                     @SuppressWarnings("resource")
                     URLClassLoader urlClassLoader = new URLClassLoader(classLoaderUrls);
                     Class<?> clazz = urlClassLoader.loadClass("sem.skills.list." + name);
                     try {
                        
                        Object o = clazz.newInstance();
                        
                        try {
                           
                           Method m = clazz.getMethod("on" + name);
                           
                           try {
                              
                              m.invoke(o, player);
                              
                           } catch (IllegalArgumentException e) {
                              e.printStackTrace();
                           } catch (InvocationTargetException e) {
                              e.printStackTrace();
                           }
                           
                        } catch (NoSuchMethodException e) {
                           e.printStackTrace();
                        } catch (SecurityException e) {
                           e.printStackTrace();
                        }
                        
                     } catch (InstantiationException e) {   
                        e.printStackTrace();
                     } catch (IllegalAccessException e) {
                        e.printStackTrace();
                     }
                     
                  } catch (MalformedURLException e1) {
                     e1.printStackTrace();
                  }
                  
               } catch (ClassNotFoundException e) {
                  e.printStackTrace();
               }


プレイヤーが右クリックした時にプラグインの最初の起動時に生成されたファイルの
指定されたjarファイルの中にあるメソッドを起動させようとしたのですが、
このようなエラーを吐いてしまいます

コード: 全て選択
[16:25:51 WARN]: java.lang.ClassNotFoundException: sem.skills.list.Slash
[16:25:51 WARN]:    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
[16:25:51 WARN]:    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[16:25:51 WARN]:    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[16:25:51 WARN]:    at sem.bravers.skill.CastEvent.onCast(CastEvent.java:61)
[16:25:51 WARN]:    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[16:25:51 WARN]:    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[16:25:51 WARN]:    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[16:25:51 WARN]:    at java.lang.reflect.Method.invoke(Method.java:498)
[16:25:51 WARN]:    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302)
[16:25:51 WARN]:    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
[16:25:51 WARN]:    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502)
[16:25:51 WARN]:    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487)
[16:25:51 WARN]:    at org.bukkit.craftbukkit.v1_11_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:232)
[16:25:51 WARN]:    at org.bukkit.craftbukkit.v1_11_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:199)
[16:25:51 WARN]:    at org.bukkit.craftbukkit.v1_11_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:195)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.PlayerConnection.a(PlayerConnection.java:942)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:26)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:1)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.PlayerConnectionUtils$1.run(SourceFile:13)
[16:25:51 WARN]:    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[16:25:51 WARN]:    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.SystemUtils.a(SourceFile:46)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.MinecraftServer.D(MinecraftServer.java:747)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.DedicatedServer.D(DedicatedServer.java:399)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.MinecraftServer.C(MinecraftServer.java:678)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:576)
[16:25:51 WARN]:    at java.lang.Thread.run(Thread.java:745)


解決法がわからず困っています、助けてください;w;


美味しい卵さん、こんにちは。
具体的に何をしたいのか曖昧なので何とは言えませんが、sem.skills.list.Slashというクラスが存在しないため、エラーが発生しているように見受けられます。

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

投稿記事 by 美味しい卵 » 2017年5月19日(金) 16:27

質問です。
というより実行中にエラーを吐いてしまったので解決方法を教えていただきたいのですが,

コード
コード: 全て選択
try {
                  try {
                     DataFolder path = new DataFolder("skills", name);
                     String p = path.getJPath();
                     
                     URL[] classLoaderUrls = new URL[] { new
                     URL("file:/" + p.toString() + "/" + name)};
                     
                     
                     @SuppressWarnings("resource")
                     URLClassLoader urlClassLoader = new URLClassLoader(classLoaderUrls);
                     Class<?> clazz = urlClassLoader.loadClass("sem.skills.list." + name);
                     try {
                        
                        Object o = clazz.newInstance();
                        
                        try {
                           
                           Method m = clazz.getMethod("on" + name);
                           
                           try {
                              
                              m.invoke(o, player);
                              
                           } catch (IllegalArgumentException e) {
                              e.printStackTrace();
                           } catch (InvocationTargetException e) {
                              e.printStackTrace();
                           }
                           
                        } catch (NoSuchMethodException e) {
                           e.printStackTrace();
                        } catch (SecurityException e) {
                           e.printStackTrace();
                        }
                        
                     } catch (InstantiationException e) {   
                        e.printStackTrace();
                     } catch (IllegalAccessException e) {
                        e.printStackTrace();
                     }
                     
                  } catch (MalformedURLException e1) {
                     e1.printStackTrace();
                  }
                  
               } catch (ClassNotFoundException e) {
                  e.printStackTrace();
               }


プレイヤーが右クリックした時にプラグインの最初の起動時に生成されたファイルの
指定されたjarファイルの中にあるメソッドを起動させようとしたのですが、
このようなエラーを吐いてしまいます

コード: 全て選択
[16:25:51 WARN]: java.lang.ClassNotFoundException: sem.skills.list.Slash
[16:25:51 WARN]:    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
[16:25:51 WARN]:    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[16:25:51 WARN]:    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[16:25:51 WARN]:    at sem.bravers.skill.CastEvent.onCast(CastEvent.java:61)
[16:25:51 WARN]:    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[16:25:51 WARN]:    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[16:25:51 WARN]:    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[16:25:51 WARN]:    at java.lang.reflect.Method.invoke(Method.java:498)
[16:25:51 WARN]:    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302)
[16:25:51 WARN]:    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
[16:25:51 WARN]:    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502)
[16:25:51 WARN]:    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487)
[16:25:51 WARN]:    at org.bukkit.craftbukkit.v1_11_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:232)
[16:25:51 WARN]:    at org.bukkit.craftbukkit.v1_11_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:199)
[16:25:51 WARN]:    at org.bukkit.craftbukkit.v1_11_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:195)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.PlayerConnection.a(PlayerConnection.java:942)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:26)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:1)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.PlayerConnectionUtils$1.run(SourceFile:13)
[16:25:51 WARN]:    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[16:25:51 WARN]:    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.SystemUtils.a(SourceFile:46)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.MinecraftServer.D(MinecraftServer.java:747)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.DedicatedServer.D(DedicatedServer.java:399)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.MinecraftServer.C(MinecraftServer.java:678)
[16:25:51 WARN]:    at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:576)
[16:25:51 WARN]:    at java.lang.Thread.run(Thread.java:745)


解決法がわからず困っています、助けてください;w;

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

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

picoさん、
うまくいったようで良かったです。

継承や、オーバーロードなど、Javaの基本知識ですから、しっかり学んでおいてくださいね。
この辺りを理解できていると、今後もプラグイン作成で役に立ちますよ。

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

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

ucchy さんが書きました: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);

の部分を削除しておいてください。


無事実行することができました。
本当に有難うございます!

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);

の部分を削除しておいてください。

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

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

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


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

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

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


プラグインを一つにしてみてもonCommandメソッドが呼び出されていないのですが、onEnableメソッドは呼び出されているのでプラグインは動いてると思います...
本当にどうすればいいのかわからない状態です。

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

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

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


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

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

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

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メソッドが呼び出されていないようです...
どうすればよいでしょうか?

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文を修正してください。

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>

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;
    }
    }

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 コマンドを実行してください。

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

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

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

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


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

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

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

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

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

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


すみません...
コードです。
添付ファイル
キャプチャ.PNG

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

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

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

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

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

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

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

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

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

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

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

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

bukkit単体では恐らく不可能ですが…
SkillAPIというPluginを使えば可能です。
configをいじってあげましょう。

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

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

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


レイトンさん、こんにちは。
恐らく不可能です。ただ、一定の経験値量を超えた場合に強制的に経験値量を増加させることで、擬似的にそういったシステムを作り出すことは可能です。

ページトップ

x