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

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

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

投稿記事by elise_blacklab » 2017年10月19日(木) 00:02

東脳君 さんが書きました:onEnable()でpluginにthisをブチ込むところまでは合ってると思うのですが、それをサブクラスでどのように生かすのかが分かりません。

saveDefaultConfig等々はJavaPluginのインスタンスから呼び出すものだから、plugin.saveDefaultConfig()すればよいのこと…なのだけど、Pvp#pluginが初期化されるのはonEnableが呼び出される後なので、PlayerJoin#pluginにPvp#pluginを代入する処理はそこには書けない。
わざわざフィールドなんて用意しなくても、Pvp#pluginはpublic staticなのだから、直接アクセスしてもいいんじゃないかな。
変な拍子でPvp#pluginが書き換えられるっていう危険はあるが…

以上の文言が理解できる程度までは、まずJavaそのものを勉強した方が良いと思う。
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:0f87040f
掘り廃人
 
記事: 2456
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.309323)

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

投稿記事by 東脳君 » 2017年10月19日(木) 00:27

以上の文言が理解できる程度までは、まずJavaそのものを勉強した方が良いと思う。

時間だけは無駄にあるのでそれもまた良いですね 日々精進します

以上のアドバイスを踏まえて実験すること30分、
コード: 全て選択
public class PlayerJoin implements Listener{
   
   Pvp plugin = Pvp.plugin;
   
   @EventHandler
   public void PlayerJN(PlayerJoinEvent e){
      
      Pvp.plugin.saveDefaultConfig();
      FileConfiguration FIRSTIN = Pvp.plugin.getConfig();
      
      if(FIRSTIN.get(e.getPlayer().getUniqueId().toString() + "FIRST") == null){
         Location loc = new Location(e.getPlayer().getWorld(),315.5,59,312.5);
         e.getPlayer().teleport(loc);
         e.setJoinMessage("初ログイン:" + e.getPlayer().getDisplayName());
          FIRSTIN.set(e.getPlayer().getUniqueId().toString() + "FIRST", 1);
          Pvp.plugin.saveConfig();
      }
   }
}

のように書き換えたら恐ろしいほど簡単に動きました。ありがとうございます!
これでようやく念願の複数クラスでプラグイン作れるぜ!

余談(UUIDをコンフィグで扱った際の容量について)
(コンフィグにプレイヤ一人一人のUUID書きこんでたらとんでもない容量になる気がするけれども大丈夫なのだろうと
計算してみたところ、一文字1バイト、サーバーに1000万人来たとしても16BYTE * 10000000 = 160000000 BYTE = 0.16GB なので全然問題ないみたい。
今後この方法でプレイヤーのUUID使う方は参考にでも)
東脳君
ID:84d1be64
水から上がったとこ
 
記事: 9
登録日時: 2017年3月22日(水) 19:34

  • (PostNo.309601)

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

投稿記事by 面倒くさいから匿名 » 2017年10月25日(水) 22:41

private Objective getRandomObjective(Scoreboard board){
while(true){
String uuid = UUID.randomUUID().toString().substring(0, 15);
Objective objective = board.getObjective(uuid);
if(objective == null)
return board.registerNewObjective(uuid, "dummy");
}
}
スコアボードで同じ名前のスコアボードを作成するとIllegalStateExceptionが発生してしまったため、このような一度も使われていないObjectiveを取得するメソッドを作ったのですが、このメソッドを長期間使用すると容量を圧迫してしまうでしょうか?また、Objectiveをスコアボードから削除する方法はあるでしょうか?
よろしくお願いします
面倒くさいから匿名
ID:6ba2a770
 

  • (PostNo.311116)

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

投稿記事by mcgo » 2017年12月07日(木) 21:29

code
コード: 全て選択
@EventHandler
    public void onClickInventory(InventoryClickEvent e) {
        if (e.getClickedInventory() instanceof PlayerInventory && config.getIntegerList("lock-slots").contains(e.getSlot())) {
            e.setCancelled(true);
        }
    }
   
    @EventHandler
    public void onSwapInventory(PlayerSwapHandItemsEvent e) {
        if (config.getIntegerList("lock-slots").contains(e.getPlayer().getInventory().getHeldItemSlot())) {
            e.setCancelled(true);
        }
    }
   
    @EventHandler
    public void onDropItem(PlayerDropItemEvent e) {
        if (config.getIntegerList("lock-slots").contains(e.getPlayer().getInventory().getHeldItemSlot())) {
            e.setCancelled(true);
        }
    }

スロットのロックをしてそのスロットのアイテムを操作しようとするとキャンセルされるプラグインを作っています。
3つのイベントを使いある程度のロックを出来たのですが、イ例えば1番のスロット(一番左のhotbar)をロックしたとして
1番以外のホットバーにカーソルをホバーさせた状態でキーボードの1を押すとロックされてるスロットのアイテムとカーソルのホバーしてる
スロットのアイテムが入れ替わってしまいます。この移動もロックしたいのですがどうすればよろしいでしょうか?

Ver.1.12.2
最近はだいぶマイクラから離れつつあるこの頃...
主にSkriptトピックに出現して助言してましゅ。
人並み程度のプラグイン制作知識はもってりゅ。
開発依頼とかあればまあPMで気軽に(^o^)
【Skript自作コード公開中】
アバター
mcgo
ID:3da1bc9e
鉄鉱掘り
 
記事: 251
登録日時: 2016年11月04日(金) 00:05

  • (PostNo.311164)

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

投稿記事by amata1219 » 2017年12月09日(土) 12:55

mcgo さんが書きました:
code
コード: 全て選択
@EventHandler
    public void onClickInventory(InventoryClickEvent e) {
        if (e.getClickedInventory() instanceof PlayerInventory && config.getIntegerList("lock-slots").contains(e.getSlot())) {
            e.setCancelled(true);
        }
    }
   
    @EventHandler
    public void onSwapInventory(PlayerSwapHandItemsEvent e) {
        if (config.getIntegerList("lock-slots").contains(e.getPlayer().getInventory().getHeldItemSlot())) {
            e.setCancelled(true);
        }
    }
   
    @EventHandler
    public void onDropItem(PlayerDropItemEvent e) {
        if (config.getIntegerList("lock-slots").contains(e.getPlayer().getInventory().getHeldItemSlot())) {
            e.setCancelled(true);
        }
    }

スロットのロックをしてそのスロットのアイテムを操作しようとするとキャンセルされるプラグインを作っています。
3つのイベントを使いある程度のロックを出来たのですが、イ例えば1番のスロット(一番左のhotbar)をロックしたとして
1番以外のホットバーにカーソルをホバーさせた状態でキーボードの1を押すとロックされてるスロットのアイテムとカーソルのホバーしてる
スロットのアイテムが入れ替わってしまいます。この移動もロックしたいのですがどうすればよろしいでしょうか?

Ver.1.12.2


mcgoさんこんにちは。
InventoryDragEventを活用することで制限出来ます。
アバター
amata1219
ID:fbc045d9
木を殴ってる
 
記事: 37
登録日時: 2016年11月18日(金) 16:46

  • (PostNo.311190)

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

投稿記事by mcgo » 2017年12月09日(土) 18:33

amata1219さん返信ありがとうございます。
InventoryDragEventを使って試行錯誤しましたが思った通りのことは実現出来ませんでした。

https://gyazo.com/fdaf3989ffe7bd328a1457ae295ab598
今は1番スロット(一番左のホットバー)だけをロックしています。
1番スロットの操作を禁止しているので、1番スロットのアイテムを他のスロットに移動したり、逆に他のスロットから1番スロットにアイテムを移動することも禁止したいのです。
しかしGIFのように9番スロットにカーソルを置き、キーボードの1番を押すと1番スロットのアイテムが9番アイテムのスロットに移動してることがわかります。
この現象は自分の考えてる動作とは違うものでほんとはアイテムの移動は出来なくしたいのです。
念のためチェックを入れてみたらInventoryClickEventが発動していました。
ゲームモードはアドベンチャーです。
解決策ありましたらご教授お願いします。
最近はだいぶマイクラから離れつつあるこの頃...
主にSkriptトピックに出現して助言してましゅ。
人並み程度のプラグイン制作知識はもってりゅ。
開発依頼とかあればまあPMで気軽に(^o^)
【Skript自作コード公開中】
アバター
mcgo
ID:41fdeb47
鉄鉱掘り
 
記事: 251
登録日時: 2016年11月04日(金) 00:05

  • (PostNo.311191)

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

投稿記事by amata1219 » 2017年12月09日(土) 18:55

mcgo さんが書きました:amata1219さん返信ありがとうございます。
InventoryDragEventを使って試行錯誤しましたが思った通りのことは実現出来ませんでした。

https://gyazo.com/fdaf3989ffe7bd328a1457ae295ab598
今は1番スロット(一番左のホットバー)だけをロックしています。
1番スロットの操作を禁止しているので、1番スロットのアイテムを他のスロットに移動したり、逆に他のスロットから1番スロットにアイテムを移動することも禁止したいのです。
しかしGIFのように9番スロットにカーソルを置き、キーボードの1番を押すと1番スロットのアイテムが9番アイテムのスロットに移動してることがわかります。
この現象は自分の考えてる動作とは違うものでほんとはアイテムの移動は出来なくしたいのです。
念のためチェックを入れてみたらInventoryClickEventが発動していました。
ゲームモードはアドベンチャーです。
解決策ありましたらご教授お願いします。


念の為と思いこちらもInventoryDragEventにキャンセル処理を記述して確認しましたが、そのような事はありませんでした。
BlockBreakEvent等でブロック破壊をキャンセルした時の様に、一瞬だけその動作が発生した様に見えてしまいますがそれ自体に問題はありません。
一度処理をe.setCancelled(true)のみの記述にしてご確認下さい。
アバター
amata1219
ID:fbc045d9
木を殴ってる
 
記事: 37
登録日時: 2016年11月18日(金) 16:46

  • (PostNo.311198)

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

投稿記事by mcgo » 2017年12月09日(土) 21:16

amata1219 さんが書きました:念の為と思いこちらもInventoryDragEventにキャンセル処理を記述して確認しましたが、そのような事はありませんでした。
BlockBreakEvent等でブロック破壊をキャンセルした時の様に、一瞬だけその動作が発生した様に見えてしまいますがそれ自体に問題はありません。
一度処理をe.setCancelled(true)のみの記述にしてご確認下さい。

返信ありがとうございます。
コード: 全て選択
@EventHandler
    public void onDragItem(InventoryDragEvent e) {
        e.setCancelled(true);
    }

このようにキャンセルだけのコードで試しましたが、やはり思っているような動作ではありませんでした。
キーボードの数字キーを使ってホットバーのアイテムを別のスロットへ移動するのはInventoryDragEventではなくInventoryClickEventが発生していたのでDragは違うような気がします。
もしかしたら自分の勘違いやまだ説明が足りてないのかもしれないので、必要な情報があれば言ってください。
最近はだいぶマイクラから離れつつあるこの頃...
主にSkriptトピックに出現して助言してましゅ。
人並み程度のプラグイン制作知識はもってりゅ。
開発依頼とかあればまあPMで気軽に(^o^)
【Skript自作コード公開中】
アバター
mcgo
ID:41fdeb47
鉄鉱掘り
 
記事: 251
登録日時: 2016年11月04日(金) 00:05

  • (PostNo.311208)

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

投稿記事by King(qpwakaba) » 2017年12月09日(土) 23:30

mcgo さんが書きました:
amata1219 さんが書きました:念の為と思いこちらもInventoryDragEventにキャンセル処理を記述して確認しましたが、そのような事はありませんでした。
BlockBreakEvent等でブロック破壊をキャンセルした時の様に、一瞬だけその動作が発生した様に見えてしまいますがそれ自体に問題はありません。
一度処理をe.setCancelled(true)のみの記述にしてご確認下さい。

返信ありがとうございます。
コード: 全て選択
@EventHandler
    public void onDragItem(InventoryDragEvent e) {
        e.setCancelled(true);
    }

このようにキャンセルだけのコードで試しましたが、やはり思っているような動作ではありませんでした。
キーボードの数字キーを使ってホットバーのアイテムを別のスロットへ移動するのはInventoryDragEventではなくInventoryClickEventが発生していたのでDragは違うような気がします。
もしかしたら自分の勘違いやまだ説明が足りてないのかもしれないので、必要な情報があれば言ってください。


ClickEventのほうの,ClickType == NUMBER とか,Action == HOTBAR_SWAP とかでキャンセル通りませんか?
条件分岐なしのキャンセルだけでもはじけない場合,CraftBukkit/Spigotのバージョンに不具合があるかも?

(ひとまず色んな検証情報が欲しいところ)
以下サイン
調べて見つからないことを質問して、「そのくらい調べろ」と言われたら それは調べが足りないとき。

投稿画面のBBコード挿入ボタン を追加するユーザースクリプト作りました。良かったらどうぞ。
https://greasyfork.org/ja/scripts/18657
最大描画距離を64チャンクまで伸ばすMod作ってます。
viewtopic.php?t=30697
アバター
King(qpwakaba)
ID:f1fd0130
ダイヤモンド掘り
 
記事: 823
登録日時: 2013年3月26日(火) 10:25

  • (PostNo.311213)

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

投稿記事by mcgo » 2017年12月10日(日) 00:45

Kingさん返信ありがとうございます。
色々試行錯誤した結果getHotbarButton()で出来ました。
コード: 全て選択
if (e.getClickedInventory() instanceof PlayerInventory && config.getIntegerList("lock-slots").contains(e.getHotbarButton()))

助けてくださったお二人の方有難うございました。
最近はだいぶマイクラから離れつつあるこの頃...
主にSkriptトピックに出現して助言してましゅ。
人並み程度のプラグイン制作知識はもってりゅ。
開発依頼とかあればまあPMで気軽に(^o^)
【Skript自作コード公開中】
アバター
mcgo
ID:41fdeb47
鉄鉱掘り
 
記事: 251
登録日時: 2016年11月04日(金) 00:05

  • (PostNo.311428)

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

投稿記事by ankou2525 » 2017年12月16日(土) 06:29

久しぶりにプラグインを作り始めて詰まったことがあったので質問させて頂きます。
ビルドパスはspigot1.12.2を通しています。
コード: 全て選択
   @SuppressWarnings("deprecation")
   @Override
   public boolean onCommand(final CommandSender sender, Command command,
         String label, String[] args) {
          Player p = (Player) sender;
      // TODO 自動生成されたメソッド・スタブ
      getCommand("test");{
         this.getServer().getScheduler().scheduleAsyncRepeatingTask(this, new Runnable(){
            int i = 5;
            public void run(){
               if(i!=-1){
                  if(i !=0){
                     Bukkit.broadcastMessage(ChatColor.AQUA+""+ChatColor.BOLD+"チーム分けまで"+ChatColor.YELLOW+i+ChatColor.AQUA+"秒");
                     i--;
                  }else{
                     Bukkit.broadcastMessage(ChatColor.AQUA+""+ChatColor.BOLD+"チーム分けが完了しました!");
                     i--;
                  }
               }
            }
         }, 0L ,20L);
      }
      return super.onCommand(sender, command, label, args);
   }
}

このコードの"チーム分けまで〇秒"と同時にプレイヤー全員にサウンドを鳴らしたいのですが今までの方法でやったらエラーが出てできなく、調べてもわからなかったので分かるから教えてください!
一応試したコードのほうも貼っておきます!よろしくお願いします!

こちらが試したコード
コード: 全て選択
   @SuppressWarnings("deprecation")
   @Override
   public boolean onCommand(final CommandSender sender, Command command,
         String label, String[] args) {
      Player p = (Player) sender;
      // TODO 自動生成されたメソッド・スタブ
      getCommand("test");{
         this.getServer().getScheduler().scheduleAsyncRepeatingTask(this, new Runnable(){
        Player all = (Player) Bukkit.getOnlinePlayers();
            int i = 5;
            public void run(){
               if(i!=-1){
                  if(i !=0){
                     Bukkit.broadcastMessage(ChatColor.AQUA+""+ChatColor.BOLD+"チーム分けまで"+ChatColor.YELLOW+i+ChatColor.AQUA+"秒");
             all.playsound(all.getLocation(),Sound.BLOCK_NOTE_PILING,1,1);
                     i--;
                  }else{
                     Bukkit.broadcastMessage(ChatColor.AQUA+""+ChatColor.BOLD+"チーム分けが完了しました!");
             all.playsound(all.getLocation(),Sound.ENTITY_WITHER_SPAWN,1,3);
                       i--;
                  }
               }
            }
         }, 0L ,20L);
      }
      return super.onCommand(sender, command, label, args);
   }
}
24時間鯖稼働中!!!!!
ankou.mc.craftT.net
ankou2525
ID:10d8671c
木を殴ってる
 
記事: 15
登録日時: 2013年10月19日(土) 18:07

  • (PostNo.311612)

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

投稿記事by amata1219 » 2017年12月20日(水) 21:41

ankou2525 さんが書きました:久しぶりにプラグインを作り始めて詰まったことがあったので質問させて頂きます。
ビルドパスはspigot1.12.2を通しています。
コード: 全て選択
   @SuppressWarnings("deprecation")
   @Override
   public boolean onCommand(final CommandSender sender, Command command,
         String label, String[] args) {
          Player p = (Player) sender;
      // TODO 自動生成されたメソッド・スタブ
      getCommand("test");{
         this.getServer().getScheduler().scheduleAsyncRepeatingTask(this, new Runnable(){
            int i = 5;
            public void run(){
               if(i!=-1){
                  if(i !=0){
                     Bukkit.broadcastMessage(ChatColor.AQUA+""+ChatColor.BOLD+"チーム分けまで"+ChatColor.YELLOW+i+ChatColor.AQUA+"秒");
                     i--;
                  }else{
                     Bukkit.broadcastMessage(ChatColor.AQUA+""+ChatColor.BOLD+"チーム分けが完了しました!");
                     i--;
                  }
               }
            }
         }, 0L ,20L);
      }
      return super.onCommand(sender, command, label, args);
   }
}

このコードの"チーム分けまで〇秒"と同時にプレイヤー全員にサウンドを鳴らしたいのですが今までの方法でやったらエラーが出てできなく、調べてもわからなかったので分かるから教えてください!
一応試したコードのほうも貼っておきます!よろしくお願いします!

こちらが試したコード
コード: 全て選択
   @SuppressWarnings("deprecation")
   @Override
   public boolean onCommand(final CommandSender sender, Command command,
         String label, String[] args) {
      Player p = (Player) sender;
      // TODO 自動生成されたメソッド・スタブ
      getCommand("test");{
         this.getServer().getScheduler().scheduleAsyncRepeatingTask(this, new Runnable(){
        Player all = (Player) Bukkit.getOnlinePlayers();
            int i = 5;
            public void run(){
               if(i!=-1){
                  if(i !=0){
                     Bukkit.broadcastMessage(ChatColor.AQUA+""+ChatColor.BOLD+"チーム分けまで"+ChatColor.YELLOW+i+ChatColor.AQUA+"秒");
             all.playsound(all.getLocation(),Sound.BLOCK_NOTE_PILING,1,1);
                     i--;
                  }else{
                     Bukkit.broadcastMessage(ChatColor.AQUA+""+ChatColor.BOLD+"チーム分けが完了しました!");
             all.playsound(all.getLocation(),Sound.ENTITY_WITHER_SPAWN,1,3);
                       i--;
                  }
               }
            }
         }, 0L ,20L);
      }
      return super.onCommand(sender, command, label, args);
   }
}


ankou2525さん、こんにちは。
エラーログが無いので推測ですが恐らくエラーが発生しているのは以下のコードかと思われます。
コード: 全て選択
all.playsound(all.getLocation(),Sound.BLOCK_NOTE_PILING,1,1);

getOnlinePlayers()は要素の集合体でありPlayerクラス単体では無いため、for文などを用いて単体に分けて処理する必要があります。
コード: 全て選択
for(Player p : Bukkit.getOnlinePlayers()){
//ここに処理を記述
}

エラーログも合わせて貼って頂けると回答しやすいので、今後も利用する様であればエラーも合わせて貼って下さいね。
アバター
amata1219
ID:08737c50
木を殴ってる
 
記事: 37
登録日時: 2016年11月18日(金) 16:46

  • (PostNo.317646)

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

投稿記事by amata1219 » 2018年6月25日(月) 03:13

wasaru816 さんが書きました:自作bukkitpluginを作って、サーバーにいれてサーバーを開こうとするとコマンドプロンプトに
[11:50:00 ERROR]: Could not load 'plugins\TutorialPlugin.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: Cannot find main class `tutorial.plugin.TutorialPlugin'
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:56) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:127) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:326) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:248) [craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.loadPlugins(CraftServer.java:303) [craftbukkit.jar:git-Bukkit-fbe3046]
at net.minecraft.server.v1_12_R1.DedicatedServer.init(DedicatedServer.java:188) [craftbukkit.jar:git-Bukkit-fbe3046]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:522) [craftbukkit.jar:git-Bukkit-fbe3046]
at java.lang.Thread.run(Unknown Source) [?:?]
Caused by: java.lang.ClassNotFoundException: tutorial.plugin.TutorialPlugin
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:?]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:128) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:76) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
at java.lang.Class.forName0(Native Method) ~[?:?]
at java.lang.Class.forName(Unknown Source) ~[?:?]
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:54) ~[craftbukkit.jar:git-Bukkit-fbe3046]
と出るのですが、原因わかる方いますか?

pluginのcodeは
package tutorial.plugin;

import org.bukkit.plugin.java.JavaPlugin;

public class TutorialPlugin extends JavaPlugin {

@Override
public void onDisable() {
// TODO 自動生成されたメソッド・スタブ
super.onDisable();
}

@Override
public void onEnable() {
// TODO 自動生成されたメソッド・スタブ
super.onEnable();
}

}

です


wasaru816さん、こんにちは。
エラーはTutorialPluginクラスの定義が見つからなかったため発生しています。
下記はエラーログの抜粋になります。大体の場合はCaused by: の後に大まかな原因が提示されています。
コード: 全て選択
Caused by: java.lang.ClassNotFoundException: tutorial.plugin.TutorialPlugin

今回の場合は「原因:ClassNotFoundException(クラスが見つからない)、詳細:tutorial.pluginパッケージのTutorialPluginクラス」と訳す事が出来ます。
ご提示頂いたコードを拝見しますと、パッケージ、クラスともに問題は無い様に見受けられますので、恐らくplugin.ymlの記述が不正であると思われます。
下記がTutorialPlugin用のplugin.ymlのサンプルになりますので、main: に不備が無いかご確認下さい。
コード: 全て選択
name: TutorialPlugin
main: tutorial.plugin.TutorialPlugin
version: 1.0.0

私が公開している講座になりますが、plugin.ymlに関して何も存知ませんでしたら是非こちらもご参考にして頂ければと思います。
【Minecraft】プログラミング初心者対応!Spigotプラグイン開発講座
アバター
amata1219
ID:41ade57a
木を殴ってる
 
記事: 37
登録日時: 2016年11月18日(金) 16:46

  • (PostNo.317781)

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

投稿記事by オリゼリ » 2018年7月01日(日) 22:12

天気を固定してコマンドでの変更は可能にしたいのですがどうしたらいいですか?
現在のコードです
コード: 全て選択
    @EventHandler
    public void onWeatherChange(WeatherChangeEvent event) {
        event.setCancelled(true);
    }
質問の仕方とか直したほうがいいよってことがあったら教えていただければ嬉しいです
オリゼリ
ID:fc835bc3
大工さん
 
記事: 45
登録日時: 2015年4月29日(水) 20:13

  • (PostNo.317849)

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

投稿記事by amata1219 » 2018年7月06日(金) 19:03

オリゼリ さんが書きました:天気を固定してコマンドでの変更は可能にしたいのですがどうしたらいいですか?
現在のコードです
コード: 全て選択
    @EventHandler
    public void onWeatherChange(WeatherChangeEvent event) {
        event.setCancelled(true);
    }


オリゼリさん、こんにちは。
それでしたらプラグインに頼らずとも既存コマンドで出来ます。
gameruleのdoWeatherCycleをfalseに設定するだけです。
天候操作コマンドには何ら影響ありません。

gameruleを変更したくない場合

方法はパッ思いついたもので2つあります。

1:WeatherChangEventは常にキャンセル、プラグイン側で天候操作コマンドを追加する。
2(※出来るか未検証):どこかにboolean型のフィールド(flagとする)を用意し、既存の天候操作コマンド実行時にPlayerCommandPreprocessEventでflag=true、WeatherChangeEventはflag=falseならキャンセルする。
アバター
amata1219
ID:46427322
木を殴ってる
 
記事: 37
登録日時: 2016年11月18日(金) 16:46

  • (PostNo.317992)

防具立てにプレイヤーが触れた時に発生するイベント

投稿記事by Gattino » 2018年7月12日(木) 20:31

防具立て(透明・重力の影響を受けない)にプレイヤーが触れた時に発生するイベントは、EntityInteractEventでいいのですか?
でも防具立て動いてないしなぁって悩んでます。
Gattino
ID:2b57efbf
水から上がったとこ
 
記事: 5
登録日時: 2018年7月12日(木) 02:41

  • (PostNo.317994)

小さなシダのMaterial

投稿記事by Gattino » 2018年7月12日(木) 23:13

(小さな)シダというアイテムがありますが、小さなシダはMaterialだと何に当たるのですか?
調べたんですけどよく分かりませんでした…
Gattino
ID:2b57efbf
水から上がったとこ
 
記事: 5
登録日時: 2018年7月12日(木) 02:41

  • (PostNo.318006)

Re: 防具立てにプレイヤーが触れた時に発生するイベント

投稿記事by amata1219 » 2018年7月13日(金) 19:56

Gattinoさん、こんにちは。

Gattino さんが書きました:防具立て(透明・重力の影響を受けない)にプレイヤーが触れた時に発生するイベントは、EntityInteractEventでいいのですか?
でも防具立て動いてないしなぁって悩んでます。


防具立ては少々特殊なエンティティですので、EntityInteractEventは発生せず代わりにPlayerArmorStandManipulateEventが発生します。

Gattino さんが書きました:(小さな)シダというアイテムがありますが、小さなシダはMaterialだと何に当たるのですか?
調べたんですけどよく分かりませんでした…


小さなシダは、Material.LONG_GRASSのデータ値2に該当します。
コード: 全て選択
block.setType(Material.LONG_GRASS);
block.setData((byte) 2);

Materialやデータ値等が不明な場合はPlayerInteractEventなんかを利用して表示させると簡単に分かると思います。
コード: 全て選択
@EventHandler
public void onPlayerInteractEvent(PlayerInteractEvent e){
if(e.getAction().toString().matches(".*BLOCK.*")){
System.out.println(e.getClickedBlock().getType());
}
}
最後に編集したユーザー amata1219 [ 2018年7月13日(金) 20:19 ], 累計 1 回
アバター
amata1219
ID:34b902fb
木を殴ってる
 
記事: 37
登録日時: 2016年11月18日(金) 16:46

  • (PostNo.318040)

Re: 防具立てにプレイヤーが触れた時に発生するイベント

投稿記事by Gattino » 2018年7月14日(土) 15:52

amata1219 さんが書きました:Gattinoさん、こんにちは。

Gattino さんが書きました:防具立て(透明・重力の影響を受けない)にプレイヤーが触れた時に発生するイベントは、EntityInteractEventでいいのですか?
でも防具立て動いてないしなぁって悩んでます。


防具立ては少々特殊なエンティティですので、EntityInteractEventは発生せず代わりにPlayerArmorStandManipulateEventが発生します。

Gattino さんが書きました:(小さな)シダというアイテムがありますが、小さなシダはMaterialだと何に当たるのですか?
調べたんですけどよく分かりませんでした…


小さなシダは、Material.LONG_GRASSのデータ値2に該当します。
コード: 全て選択
block.setType(Material.LONG_GRASS);
block.setData((byte) 2);

Materialやデータ値等が不明な場合はPlayerInteractEventなんかを利用して表示させると簡単に分かると思います。
コード: 全て選択
@EventHandler
public void onPlayerInteractEvent(PlayerInteractEvent e){
if(e.getAction().toString().matches(".*BLOCK.*")){
System.out.println(e.getClickedBlock().getType());
}
}

ありがとうございましたm(_ _)m
Gattino
ID:2b57efbf
水から上がったとこ
 
記事: 5
登録日時: 2018年7月12日(木) 02:41

  • (PostNo.318041)

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

投稿記事by Gattino » 2018年7月14日(土) 16:43

任意の残留ポーションのItemStack型変数はどうやって作ればいいですか?
Gattino
ID:2b57efbf
水から上がったとこ
 
記事: 5
登録日時: 2018年7月12日(木) 02:41

1つ前へ次へ

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

x