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

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

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

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


無事実行することができました。
本当に有難うございます!
アバター
pico
ID:3568fa97
木を殴ってる
 
記事: 37
登録日時: 2016年8月02日(火) 18:49

  • (PostNo.301704)

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

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

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

継承や、オーバーロードなど、Javaの基本知識ですから、しっかり学んでおいてくださいね。
この辺りを理解できていると、今後もプラグイン作成で役に立ちますよ。
――お知らせ――
パソコンが壊れたため、買い替えるまで、プラグイン開発作業はお休みしています。簡単な質問程度ならお答えいたします。
――お知らせ――
アバター
ucchy
ID:3940d012
ラピスラズリ収集家
 
記事: 1170
登録日時: 2012年11月07日(水) 00:08

  • (PostNo.302339)

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;
美味しい卵
ID:f86fe74b
水から上がったとこ
 
記事: 1
登録日時: 2017年5月19日(金) 16:17

  • (PostNo.302768)

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というクラスが存在しないため、エラーが発生しているように見受けられます。
アバター
amata1219
ID:e1938bc3
木を殴ってる
 
記事: 13
登録日時: 2016年11月18日(金) 16:46
お住まい: 愛知県

  • (PostNo.305176)

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[]{};
      }
   }
kemottomausu
ID:7f7d0fd3
木を殴ってる
 
記事: 14
登録日時: 2014年6月07日(土) 12:29

1つ前へ

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

x