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

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

返信する

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

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

ファイルを添付します

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

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において可能なのでしょうか


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

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

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

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

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

ページトップ

x