ページ 135141

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

投稿記事Posted: 2018年7月20日(金) 22:23
by takepansan
ExampleTask().runTaskLaterを使用するときに,Mainクラス以外で使うとnew ExampleTask().runTaskLater(this ,100);でエラーが出ます。解決方法はありますか?

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

投稿記事Posted: 2018年7月20日(金) 22:33
by TA3
takepansan さんが書きました:ExampleTask().runTaskLaterを使用するときに,Mainクラス以外で使うとnew ExampleTask().runTaskLater(this ,100);でエラーが出ます。解決方法はありますか?

JavaPluginを継承しているクラス以外ではPluginのparamとして自クラスのインスタンスを使用することができません。
javaPluginを継承しているMainクラスのインスタンスを保持してそれを使います。
コード: 全て選択
/*    Mainクラス    */
private static Main i;

@Override
public void onEnable(){
    i = this;
}

public static Main getInstance(){
    return i;
}

/*    別のクラス    */
public void delayTaskTest(){
    Main i = Main.getInstance();
    Bukkit.getScheduler().runTaskLater(i, new Runnable(){});
}

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

投稿記事Posted: 2018年7月21日(土) 13:21
by takepansan
TA3 さんが書きました:
takepansan さんが書きました:ExampleTask().runTaskLaterを使用するときに,Mainクラス以外で使うとnew ExampleTask().runTaskLater(this ,100);でエラーが出ます。解決方法はありますか?

JavaPluginを継承しているクラス以外ではPluginのparamとして自クラスのインスタンスを使用することができません。
javaPluginを継承しているMainクラスのインスタンスを保持してそれを使います。
コード: 全て選択
/*    Mainクラス    */
private static Main i;

@Override
public void onEnable(){
    i = this;
}

public static Main getInstance(){
    return i;
}

/*    別のクラス    */
public void delayTaskTest(){
    Main i = Main.getInstance();
    Bukkit.getScheduler().runTaskLater(i, new Runnable(){});
}


ありがとうございます。解決しました。

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

投稿記事Posted: 2018年7月29日(日) 15:11
by 八咫烏
MainClass↓
コード: 全て選択
   private int counter;

   @EventHandler
   public void onWeapon(PlayerInteractEvent e){

      Material m = e.getItem().getType();
      ItemStack itemStack = e.getItem();
      if(m == Material.STICK && itemStack.hasItemMeta() == true && e.getAction() == Action.RIGHT_CLICK_AIR ){


         counter = 5;
         new WeaponTask(this, counter ,e.getPlayer()).runTaskTimer(this, 0, 5);


         }

   }


サブクラス↓

コード: 全て選択
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;

public class WeaponTask extends BukkitRunnable{

   private final JavaPlugin plugin;
   private int counter;
   private Player player;

   public WeaponTask(JavaPlugin plugin, int counter , Player player){

      this.plugin = plugin;

      if(counter < 1){

         throw new IllegalArgumentException("counter には1以上を指定してください。");

      }

      else{

         this.player = player;
         this.counter = counter;

      }

   }

   @SuppressWarnings("deprecation")
   @Override
   public void run(){

      if(counter > 0){

         player.throwSnowball();
         player.playSound(player.getLocation(), Sound.BLAZE_HIT, 10, 10);
         counter--;

      }

      else{

         plugin.getServer().broadcastMessage("ラストカウンター: " + counter);
         plugin.getServer().broadcastMessage("END");
         this.cancel();

      }

   }


これで、スノーボール発射するんですけど、右クリックで連射中にもう一度右クリックすると
かぶせて発射されてしまいます(2回分サブクラスが働く)
こうしないためにはどうすればいいんでしょうか。

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

投稿記事Posted: 2018年7月29日(日) 17:40
by amata1219
八咫烏 さんが書きました:MainClass↓
コード: 全て選択
   private int counter;

   @EventHandler
   public void onWeapon(PlayerInteractEvent e){

      Material m = e.getItem().getType();
      ItemStack itemStack = e.getItem();
      if(m == Material.STICK && itemStack.hasItemMeta() == true && e.getAction() == Action.RIGHT_CLICK_AIR ){


         counter = 5;
         new WeaponTask(this, counter ,e.getPlayer()).runTaskTimer(this, 0, 5);


         }

   }


サブクラス↓

コード: 全て選択
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;

public class WeaponTask extends BukkitRunnable{

   private final JavaPlugin plugin;
   private int counter;
   private Player player;

   public WeaponTask(JavaPlugin plugin, int counter , Player player){

      this.plugin = plugin;

      if(counter < 1){

         throw new IllegalArgumentException("counter には1以上を指定してください。");

      }

      else{

         this.player = player;
         this.counter = counter;

      }

   }

   @SuppressWarnings("deprecation")
   @Override
   public void run(){

      if(counter > 0){

         player.throwSnowball();
         player.playSound(player.getLocation(), Sound.BLAZE_HIT, 10, 10);
         counter--;

      }

      else{

         plugin.getServer().broadcastMessage("ラストカウンター: " + counter);
         plugin.getServer().broadcastMessage("END");
         this.cancel();

      }

   }


これで、スノーボール発射するんですけど、右クリックで連射中にもう一度右クリックすると
かぶせて発射されてしまいます(2回分サブクラスが働く)
こうしないためにはどうすればいいんでしょうか。


八咫烏さん、こんにちは。
それでしたら、ループ処理中か確認するコードを追加するだけで簡単に解決出来ます。

1. Mainクラスにpublic List<UUID>を作成(ここでは変数名listとします)。
2. Main#onWeapon(…)のif文に、!list.contains(e.getPlayer().getUniqueId())の条件文を追加。
3. Main#onWeapon(…)でのWeaponTask生成後にlist.add(e.getPlayer().getUniqueId())の記述を追加。
4. WeaponTask#run()のbroadcastMessage("END")の後に、plugin.list.remove(player.getPlayer().getUniqueId())の記述を追加。

Main.class
コード: 全て選択
public List<UUID> list = new ArrayList<UUID>();

@EventHandler
public void onWeapon(PlayerInteractEvent e){
Player p = e.getPlayer();
UUID uuid = p.getUniqueId();
ItemStack itemStack = e.getItem();
if(e.getAction() == Action.RIGHT_CLICK_AIR && !list.contains(uuid) && itemStack.hasItemMeta() && itemStack.getType == Material.STICK){
new WeaponTask(this, 5 , p).runTaskTimer(this, 0, 5);
list.add(uuid);
}
}


WeaponTask.class
コード: 全て選択
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;

public class WeaponTask extends BukkitRunnable{

private final JavaPlugin plugin;
private int counter;
private Player player;

public WeaponTask(JavaPlugin plugin, int counter , Player player){
if(counter > 0){
this.plugin = plugin;
this.player = player;
this.counter = counter;
}else{
throw new IllegalArgumentException("counter には1以上を指定してください。");
}
}

@SuppressWarnings("deprecation")
@Override
public void run(){
if(counter > 0){
player.throwSnowball();
//throwSnowball():これはコードを省略されただけでしょうか…?
player.playSound(player.getLocation(), Sound.BLAZE_HIT, 10, 10);
counter--;
}else{
plugin.getServer().broadcastMessage("ラストカウンター: " + counter);
plugin.getServer().broadcastMessage("END");
plugin.list.remove(player.getUniqueId());
this.cancel();
}
}


1~4に従いコードを記述するとこのようになると思います。

1~4以外で個人的に気になる点がいくつかありましたので合わせて修正させて頂きました。

a: Main#counter - 必要無いのでnew WeaponTask(…)に数値をそのまま記述(呼び出し元でメソッドの引数に基本データ型を使用した場合、メソッドではその値のコピーを受け取ります。単純に値のコピーを渡しているだけなので、メソッド内でその値に変更を加えても、呼び出し元には影響しません)。

b: Main#onWeapon(…) - if文の条件「itemStack.hasItemMeta()がtrue」は==trueを記述する必要無し(代入と見間違えたり、コードが冗長になるため)。

c: WeaponTask#WeaponTask - 条件は分かりやすくrun()と同じ記述にし、最初の代入処理(this.plugin = plugin;)はif文内に他の代入処理と一緒に記述。


追記:

後々思いつきましたがループ処理の終了時間が分かっているなら、onWeapon(…)でlist.remove(uuid)を遅延実行処理するという方法もあります(というかこちらの方が楽)。

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

投稿記事Posted: 2018年7月30日(月) 08:49
by 八咫烏
amata1219 さんが書きました:
八咫烏 さんが書きました:MainClass↓
コード: 全て選択
   private int counter;

   @EventHandler
   public void onWeapon(PlayerInteractEvent e){

      Material m = e.getItem().getType();
      ItemStack itemStack = e.getItem();
      if(m == Material.STICK && itemStack.hasItemMeta() == true && e.getAction() == Action.RIGHT_CLICK_AIR ){


         counter = 5;
         new WeaponTask(this, counter ,e.getPlayer()).runTaskTimer(this, 0, 5);


         }

   }


サブクラス↓

コード: 全て選択
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;

public class WeaponTask extends BukkitRunnable{

   private final JavaPlugin plugin;
   private int counter;
   private Player player;

   public WeaponTask(JavaPlugin plugin, int counter , Player player){

      this.plugin = plugin;

      if(counter < 1){

         throw new IllegalArgumentException("counter には1以上を指定してください。");

      }

      else{

         this.player = player;
         this.counter = counter;

      }

   }

   @SuppressWarnings("deprecation")
   @Override
   public void run(){

      if(counter > 0){

         player.throwSnowball();
         player.playSound(player.getLocation(), Sound.BLAZE_HIT, 10, 10);
         counter--;

      }

      else{

         plugin.getServer().broadcastMessage("ラストカウンター: " + counter);
         plugin.getServer().broadcastMessage("END");
         this.cancel();

      }

   }


これで、スノーボール発射するんですけど、右クリックで連射中にもう一度右クリックすると
かぶせて発射されてしまいます(2回分サブクラスが働く)
こうしないためにはどうすればいいんでしょうか。


八咫烏さん、こんにちは。
それでしたら、ループ処理中か確認するコードを追加するだけで簡単に解決出来ます。

1. Mainクラスにpublic List<UUID>を作成(ここでは変数名listとします)。
2. Main#onWeapon(…)のif文に、!list.contains(e.getPlayer().getUniqueId())の条件文を追加。
3. Main#onWeapon(…)でのWeaponTask生成後にlist.add(e.getPlayer().getUniqueId())の記述を追加。
4. WeaponTask#run()のbroadcastMessage("END")の後に、plugin.list.remove(player.getPlayer().getUniqueId())の記述を追加。

Main.class
コード: 全て選択
public List<UUID> list = new ArrayList<UUID>();

@EventHandler
public void onWeapon(PlayerInteractEvent e){
Player p = e.getPlayer();
UUID uuid = p.getUniqueId();
ItemStack itemStack = e.getItem();
if(e.getAction() == Action.RIGHT_CLICK_AIR && !list.contains(uuid) && itemStack.hasItemMeta() && itemStack.getType == Material.STICK){
new WeaponTask(this, 5 , p).runTaskTimer(this, 0, 5);
list.add(uuid);
}
}


WeaponTask.class
コード: 全て選択
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;

public class WeaponTask extends BukkitRunnable{

private final JavaPlugin plugin;
private int counter;
private Player player;

public WeaponTask(JavaPlugin plugin, int counter , Player player){
if(counter > 0){
this.plugin = plugin;
this.player = player;
this.counter = counter;
}else{
throw new IllegalArgumentException("counter には1以上を指定してください。");
}
}

@SuppressWarnings("deprecation")
@Override
public void run(){
if(counter > 0){
player.throwSnowball();
//throwSnowball():これはコードを省略されただけでしょうか…?
player.playSound(player.getLocation(), Sound.BLAZE_HIT, 10, 10);
counter--;
}else{
plugin.getServer().broadcastMessage("ラストカウンター: " + counter);
plugin.getServer().broadcastMessage("END");
plugin.list.remove(player.getUniqueId());
this.cancel();
}
}


1~4に従いコードを記述するとこのようになると思います。

1~4以外で個人的に気になる点がいくつかありましたので合わせて修正させて頂きました。

a: Main#counter - 必要無いのでnew WeaponTask(…)に数値をそのまま記述(呼び出し元でメソッドの引数に基本データ型を使用した場合、メソッドではその値のコピーを受け取ります。単純に値のコピーを渡しているだけなので、メソッド内でその値に変更を加えても、呼び出し元には影響しません)。

b: Main#onWeapon(…) - if文の条件「itemStack.hasItemMeta()がtrue」は==trueを記述する必要無し(代入と見間違えたり、コードが冗長になるため)。

c: WeaponTask#WeaponTask - 条件は分かりやすくrun()と同じ記述にし、最初の代入処理(this.plugin = plugin;)はif文内に他の代入処理と一緒に記述。


追記:

後々思いつきましたがループ処理の終了時間が分かっているなら、onWeapon(…)でlist.remove(uuid)を遅延実行処理するという方法もあります(というかこちらの方が楽)。


指摘に合わせ、丁寧な返信ありがとうございました!
無事解決しました。

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

投稿記事Posted: 2018年7月30日(月) 11:10
by 八咫烏
詰まってしまって、たびたび質問失礼します。
(上記コード参照)
銃を打つ(雪玉を発射する)たびに残りの弾数表示をItemDisplayNameに表示させたいんですけど
Mainクラスでのアイテムの名前変更はできるんですけど
このMainクラスで取得したアイテムスタックをサブクラスに渡して
サブクラスでそのitemmetaを設定しSetItemmetaをした際に
名前の変更が表示されません。(サブクラスに渡している時点でItemStackが別物として扱われるのでしょうか)
よろしくお願いします。

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

投稿記事Posted: 2018年8月08日(水) 16:44
by CYBORG
特定の剣(アイテム)にエフェクトを追加したいんですが、詰まってしまってできません。

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

投稿記事Posted: 2018年8月10日(金) 17:34
by amata1219
八咫烏 さんが書きました:詰まってしまって、たびたび質問失礼します。
(上記コード参照)
銃を打つ(雪玉を発射する)たびに残りの弾数表示をItemDisplayNameに表示させたいんですけど
Mainクラスでのアイテムの名前変更はできるんですけど
このMainクラスで取得したアイテムスタックをサブクラスに渡して
サブクラスでそのitemmetaを設定しSetItemmetaをした際に
名前の変更が表示されません。(サブクラスに渡している時点でItemStackが別物として扱われるのでしょうか)
よろしくお願いします。


八咫烏さん、こんにちは。
サブクラスに渡そうとItemStackが別物として処理されることはありません。
一応検証に使ったコードがありますので、よければ参考にして下さい。

メインクラス(Check.class)
コード: 全て選択
package amata1219.check;

import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

public class Check extends JavaPlugin implements Listener{

   @Override
   public void onEnable(){
      getServer().getPluginManager().registerEvents(this, this);
   }

   @Override
   public void onDisable(){

   }

   @EventHandler
   public void onInteract(PlayerInteractEvent e){
      ItemStack item = e.getItem();
      if(item != null && item.getType() != Material.AIR){
         setMeta(item);
         System.out.println(item.getItemMeta().getDisplayName());
         new SubCheck().setMeta(item);
         System.out.println(item.getItemMeta().getDisplayName());
         SubCheck.setMetaa(item);
         System.out.println(item.getItemMeta().getDisplayName());
      }
   }

   public void setMeta(ItemStack item){
      ItemMeta meta = item.getItemMeta();
      meta.setDisplayName("GRASS");
      item.setItemMeta(meta);
   }

}


サブクラス(SubCheck.class)

コード: 全て選択
package amata1219.check;

import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public class SubCheck {

   public void setMeta(ItemStack item){
      ItemMeta meta = item.getItemMeta();
      meta.setDisplayName("DIRT");
      item.setItemMeta(meta);
   }

   public static void setMetaa(ItemStack item){
      ItemMeta meta = item.getItemMeta();
      meta.setDisplayName("PODZOL");
      item.setItemMeta(meta);
   }

}


コンソール(出力結果)

コード: 全て選択
[17:25:43] [Server thread/INFO]: GRASS
[17:25:43] [Server thread/INFO]: DIRT
[17:25:43] [Server thread/INFO]: PODZOL


各メソッドを単体で実行した時も問題なく、ゲーム内でも表示名が変更されました。
もしこれでも解決しないようでしたらソースコードを再度貼り付けて下さいー。

CYBORG さんが書きました:特定の剣(アイテム)にエフェクトを追加したいんですが、詰まってしまってできません。


CYBORGさん、こんにちは。
エンチャントの追加方法はプラグインチュートリアルに記載されています。
Plugin Tutorial - Minecraft Modding Wiki #エンチャント
調べればすぐに出てくる内容ですので、最低限ご自身でお調べになった上で質問して下さい_(:3 ∠ )_。

サーバーのpluginsフォルダに.jarファイルを入れたのに適用されない!

投稿記事Posted: 2018年8月20日(月) 19:00
by Gattino
私は今1.13MinecrafSpigotプラグインを自作しています。
ですが、試しに動作確認をしようとMavenプロジェクトでビルドして、できた.jarファイルをpluginsフォルダに入れてサーバーを起動したのですが、プラグインが適用されません。
赤く表示すらされません。
ほかのプラグインは表示されているのに、自作のものだけが表示されないんです。
どこに問題があるのでしょうか、調べるべき点、原因として考えられる可能性がある事象を教えてください。よろしくお願いします。
ちなみにeclipseを使用しています。

Re: サーバーのpluginsフォルダに.jarファイルを入れたのに適用されない!

投稿記事Posted: 2018年8月21日(火) 11:50
by amata1219
Gattino さんが書きました:私は今1.13MinecrafSpigotプラグインを自作しています。
ですが、試しに動作確認をしようとMavenプロジェクトでビルドして、できた.jarファイルをpluginsフォルダに入れてサーバーを起動したのですが、プラグインが適用されません。
赤く表示すらされません。
ほかのプラグインは表示されているのに、自作のものだけが表示されないんです。
どこに問題があるのでしょうか、調べるべき点、原因として考えられる可能性がある事象を教えてください。よろしくお願いします。
ちなみにeclipseを使用しています。


Gattinoさん、こんにちは。
エラーすら表示されないとなると、plugin.ymlがプラグインに含まれていないのかもしれません。
Mavenプロジェクトでresourcesにplugin.ymlを入れている場合、エクスポートでなくMavenプロジェクト→右クリック→実行→Maven installを選択し、workspace/プラグイン名/targetに生成されるjarファイルを導入してみて下さい。

Re: サーバーのpluginsフォルダに.jarファイルを入れたのに適用されない!

投稿記事Posted: 2018年8月21日(火) 17:00
by Gattino
amata1219 さんが書きました:
Gattino さんが書きました:私は今1.13MinecrafSpigotプラグインを自作しています。
ですが、試しに動作確認をしようとMavenプロジェクトでビルドして、できた.jarファイルをpluginsフォルダに入れてサーバーを起動したのですが、プラグインが適用されません。
赤く表示すらされません。
ほかのプラグインは表示されているのに、自作のものだけが表示されないんです。
どこに問題があるのでしょうか、調べるべき点、原因として考えられる可能性がある事象を教えてください。よろしくお願いします。
ちなみにeclipseを使用しています。


Gattinoさん、こんにちは。
エラーすら表示されないとなると、plugin.ymlがプラグインに含まれていないのかもしれません。
Mavenプロジェクトでresourcesにplugin.ymlを入れている場合、エクスポートでなくMavenプロジェクト→右クリック→実行→Maven installを選択し、workspace/プラグイン名/targetに生成されるjarファイルを導入してみて下さい。

ありがとうございます、やってみます

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

投稿記事Posted: 2018年9月03日(月) 17:15
by gockey
bukkit 1.13です。
EndGateWayブロックにテレポート先のLocationの情報をセットしてやるという以下のコードが動きません。
解決策はありますか?

Block block=world.getBlockAt(x, y, z);
block.setType(Material.END_GATEWAY);
EndGateway gate=(EndGateway)block.getState();
gate.setExactTeleport(true);
gate.setExitLocation(tp);

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

投稿記事Posted: 2018年9月03日(月) 17:47
by Gockey
すいません
gate.update(true, false);
で動きました。

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

投稿記事Posted: 2018年9月09日(日) 00:12
by ゲスト
[code]
package (省略);

import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public final class TestClass implements Listener {
@EventHandler
public void gunsTriggered (PlayerInteractEvent event) {
Player player = event.getPlayer();
Material mat = player.getInventory().getItemInMainHand().getType();
String myDisplayName = "TEST";
ItemStack myItem = new ItemStack(mat);
ItemMeta im = myItem.getItemMeta();
im.setDisplayName(myDisplayName);
myItem.setItemMeta(im);
System.out.println("DisplayName:"+im.getDisplayName());
[/code]
Minecraft 1.12.2です
とにかくして手に持っているアイテムの名前を変えたいのですがうまくいきません。コンソールには「DisplayName:TEST」と表示されるのですがゲーム内ではアイテムの名前は変わりません。どこに問題があるのでしょうか?頭の悪い質問ですみません。

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

投稿記事Posted: 2018年9月09日(日) 07:35
by hmbgh
すみません前の質問の者ですが解決しました...
ItemStack myItem = new ItemStack(mat);
で毎回アイテムを生成してたのが原因でした
ItemStack myItem = new ItemStack(player.getInventory().getItemInMainHand());
で実行したところうまくいきました。こんな初歩的な問題で質問してすみませんでした

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

投稿記事Posted: 2018年9月16日(日) 18:39
by ryotaa
プラグインを作っています。
特定のプレイヤーの入っているチームを取得する方法を教えてください。
viewtopic.php?f=39&t=8371&start=600
ここのPostNo.172544でPlayerから直接チームを取得できないと書いてあったのですが、
そのスレを見てもじゃあどうやってチームを取得するかわからなかったので質問させていただきました。

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

投稿記事Posted: 2018年9月16日(日) 22:06
by testusuke
【プラグイン開発】インベントリクリックイベントでの、コマンドを実行させる方法

こんにちは。プラグイン開発をしています。

そこで今困ってることがあります。インベントリGUIを作成して、onClickイベントで指定したアイテムをクリックすると、プレイヤーにコマンドを実行させる方法がわかりません。わかる方教えてください。

ソースコード 「{{ ここに書く予定です }}」というとこに書く予定です
コード: 全て選択
@EventHandler
    public void OnClick(InventoryClickEvent e){

        //  1ページ目のクリックイベント
        if(e.getClickedInventory().getName().equals("§e[§a§lCommand§6§lGUI§e]§d||§6§l1ページ目§d||") == true){
            //  ページ変更  イベント設定
            if(e.getCurrentItem().getType()== Material.DOUBLE_PLANT && e.getSlot() == 53){
                Player p = (Player)e.getWhoClicked();
                //       {{ ここに書く予定です }}
            }
        }
    }
   
付け足し
イベントリGUIのあるアイテムをクリックすると、そのプレーヤーがコマンドを自動的に実行するという形です。

早めの回答お待ちしております!   

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

投稿記事Posted: 2018年9月16日(日) 22:56
by TA3
testusuke さんが書きました:【プラグイン開発】インベントリクリックイベントでの、コマンドを実行させる方法

こんにちは。プラグイン開発をしています。

そこで今困ってることがあります。インベントリGUIを作成して、onClickイベントで指定したアイテムをクリックすると、プレイヤーにコマンドを実行させる方法がわかりません。わかる方教えてください。

ソースコード 「{{ ここに書く予定です }}」というとこに書く予定です
コード: 全て選択
@EventHandler
    public void OnClick(InventoryClickEvent e){

        //  1ページ目のクリックイベント
        if(e.getClickedInventory().getName().equals("§e[§a§lCommand§6§lGUI§e]§d||§6§l1ページ目§d||") == true){
            //  ページ変更  イベント設定
            if(e.getCurrentItem().getType()== Material.DOUBLE_PLANT && e.getSlot() == 53){
                Player p = (Player)e.getWhoClicked();
                //       {{ ここに書く予定です }}
            }
        }
    }
   
付け足し
イベントリGUIのあるアイテムをクリックすると、そのプレーヤーがコマンドを自動的に実行するという形です。

早めの回答お待ちしております!   

コマンドを実行させるなら
コード: 全て選択
Bukkit.dispatchCommand(p, "COMMAND_HERE"); // コマンドをプレイヤーに実行させる
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "COMMAND_HERE"); // コンソールからコマンドを実行する

で可能です。

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

投稿記事Posted: 2018年9月18日(火) 11:53
by Yami
ryotaa さんが書きました:プラグインを作っています。
特定のプレイヤーの入っているチームを取得する方法を教えてください。
viewtopic.php?f=39&t=8371&start=600
ここのPostNo.172544でPlayerから直接チームを取得できないと書いてあったのですが、
そのスレを見てもじゃあどうやってチームを取得するかわからなかったので質問させていただきました。


Team team = player.getScoreboard().getPlayerTeam(player);
おそらくこれでいけるかと・・・?
未検証なので動かなかったらごめんなさい