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

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

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

投稿記事by EV39 » 2018年9月18日(火) 20:30

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


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


これでやってるはずなのですが...チームから抜けるコマンドをわざわざチーム名や自分の名前を入力しないでもコマンドを実行できるようにしたいのですが
コード: 全て選択
       Team t = senderr.getScoreboard().getPlayerTeam(senderr);
            String tm = t.getName();
            if (tm == run) {
               sender.sendMessage("プレイヤー " + send.getName() + " を " + args[1] + " から脱退させました。");
               t.removePlayer(senderr);
            }


removePlayerで良いんですかね?
わかりにくくてすみません。。。
EV39
ID:228caa51
水から上がったとこ
 
記事: 4
登録日時: 2018年9月18日(火) 20:22

  • (PostNo.320365)

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

投稿記事by EV39 » 2018年9月18日(火) 21:26

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


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


これでやってるはずなのですが...チームから抜けるコマンドをわざわざチーム名や自分の名前を入力しないでもコマンドを実行できるようにしたいのですが
コード: 全て選択
       Team t = senderr.getScoreboard().getPlayerTeam(senderr);
            String tm = t.getName();
            if (tm == run) {
               sender.sendMessage("プレイヤー " + send.getName() + " を " + args[1] + " から脱退させました。");
               t.removePlayer(senderr);
            }


removePlayerで良いんですかね?
わかりにくくてすみません。。。


すみませんできました。
コード: 全て選択
Team t = senderr.getScoreboard().getPlayerTeam(senderr);
   String tm = t.getName();
   sender.sendMessage("プレイヤー " + senderr.getName() + " は " + tm + " から抜けました。");
   t.removePlayer(senderr);

にしたら出来ました。
ありがとうございました。
EV39
ID:228caa51
水から上がったとこ
 
記事: 4
登録日時: 2018年9月18日(火) 20:22

  • (PostNo.320495)

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

投稿記事by testusuke » 2018年9月23日(日) 08:19

【プラグイン開発 ・緊急・】
プラグインを開発しています。プレイヤーのメインハンドから指定した数だけアイテムをとる方法がわかりません。教えてください。

例えば。
Aさんが30枚紙を持っています。クリックイベントで、その紙をクリックしたら1枚だけ減るようにする。

このような形です。わかる方お願いします.
testusuke
ID:04803fb2
木を殴ってる
 
記事: 11
登録日時: 2018年8月07日(火) 15:02

  • (PostNo.320498)

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

投稿記事by amata1219 » 2018年9月23日(日) 11:01

testusuke さんが書きました:【プラグイン開発 ・緊急・】
プラグインを開発しています。プレイヤーのメインハンドから指定した数だけアイテムをとる方法がわかりません。教えてください。

例えば。
Aさんが30枚紙を持っています。クリックイベントで、その紙をクリックしたら1枚だけ減るようにする。

このような形です。わかる方お願いします.


tetsusukeさん、こんにちは。
ItemStack#setAmount(int)でアイテム数を設定出来ます。
コード: 全て選択
ItemStack item = player.getInventory().getItemInMainHand();
item.setAmount(item.getAmount() - 1);
//item.getAmount()でアイテム数を取得、そこから1マイナスし、setAmount(int)でその値を設定。
アバター
amata1219
ID:77bf21b4
石掘り
 
記事: 83
登録日時: 2016年11月18日(金) 16:46
お住まい: Enabling World

  • (PostNo.320500)

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

投稿記事by testusuke » 2018年9月23日(日) 12:19

【プラグイン開発 ・緊急・】
プラグインを開発しています。

1つわからないことがあります。

プレイヤーのイベントリに指定した数の空きがあるか確かめる方法はありませんんか?

ソースコードとしては 
・空きがなければ通知して終了
・空きがあればそのまま継続するという感じです。

早めの回答を心からお待ちしております
testusuke
ID:04803fb2
木を殴ってる
 
記事: 11
登録日時: 2018年8月07日(火) 15:02

  • (PostNo.320511)

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

投稿記事by amata1219 » 2018年9月23日(日) 17:17

testusuke さんが書きました:【プラグイン開発 ・緊急・】
プラグインを開発しています。

1つわからないことがあります。

プレイヤーのイベントリに指定した数の空きがあるか確かめる方法はありませんんか?

ソースコードとしては 
・空きがなければ通知して終了
・空きがあればそのまま継続するという感じです。

早めの回答を心からお待ちしております


Inventory#getContents()を拡張for文を使いItemStack単位で確認すれば良いと思います。

こういった場所で苦言を呈させて頂くのも気が引けますが、ちょっと気になったので。

質問する前にご自身でその内容をお調べになりましたか?一つ前の質問も含め、英語で検索すれば簡単に出てくる内容です。
最低限調べた上で質問して下さい。一度こちらをご覧になると良いかもしれません。
そして回答が付いたらそれで解決したのか書き残すのと、出来ればお礼も言いましょう。
アバター
amata1219
ID:77bf21b4
石掘り
 
記事: 83
登録日時: 2016年11月18日(金) 16:46
お住まい: Enabling World

  • (PostNo.320522)

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

投稿記事by testusuke » 2018年9月23日(日) 19:46

毎度すみません。解決できました。ありがとうございます
testusuke
ID:04803fb2
木を殴ってる
 
記事: 11
登録日時: 2018年8月07日(火) 15:02

  • (PostNo.320543)

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

投稿記事by 八咫烏 » 2018年9月24日(月) 15:03

チェスト(Inventory inv)の中に
10%の確率で金リンゴが数個
20%の確率でリンゴが数個
30%の確率で糸が数個
でまばらに入れ込みたいのですがどう書けばいいのでしょうか。。。
イメージは添付写真のような感じです。
Ver.1.8 SPIGOT
添付ファイル
94f28fa78af366669da6a91847e1c196.png
アバター
八咫烏
ID:41f9f109
木を殴ってる
 
記事: 24
登録日時: 2014年8月14日(木) 18:06
お住まい: 闇の中

  • (PostNo.320552)

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

投稿記事by amata1219 » 2018年9月24日(月) 18:19

八咫烏 さんが書きました:チェスト(Inventory inv)の中に
10%の確率で金リンゴが数個
20%の確率でリンゴが数個
30%の確率で糸が数個
でまばらに入れ込みたいのですがどう書けばいいのでしょうか。。。
イメージは添付写真のような感じです。
Ver.1.8 SPIGOT


八咫烏さん、こんにちは。
Materialと確率(%でなく少数)をマップ形式で保持し、それを元に確率抽選する形で実装例を書いてみました。
乱数にはnew Random().nextFloat()を用いています。
視認性を考慮しコード中では確率の合計値が1.0になるよう設定していますが、合計値を元に計算する実装のためそれ以上それ以下でも問題無く動作します。
コード: 全て選択
   private static HashMap<Material, Float> map = new HashMap<Material, Float>();

   public static void main(String[] args){
      map.put(Material.GOLDEN_APPLE, 0.1f);
      map.put(Material.APPLE, 0.2f);
      map.put(Material.STRING, 0.3f);
      map.put(Material.AIR, 0.4f);//その他 何も無い場合の確率設定も必要
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
   }

   public static Material getMaterial(){
      float total_prob = 0.0f;
      for(float material_prob : map.values()){
         total_prob += material_prob;
         //確率の合計値を求める
      }
      float prob = total_prob * new Random().nextFloat();
      //合計値に乱数をかけて確率を算出する
      float cumlative_prob = 0.0f;
      for(Material material : map.keySet()){
         cumlative_prob += map.get(material);
         if(prob < cumlative_prob){
            return material;
            //確率をキー単位で加算していき、先に求めた確率がそれ以下であればMaterialを返す
         }
      }
      return Material.AIR;
      //一応Material.AIRを返すがここに到達する事は無い
   }


getMaterial()を10回実行した結果は以下のようになりました。
コード: 全て選択
STRING
AIR
STRING
AIR
AIR
AIR
APPLE
GOLDEN_APPLE
AIR
APPLE


よって、これをスロット単位で実行すればランダムにアイテムが散りばめられたインベントリを作成出来ます。
また、アイテム数もこれを応用すると上手く設定出来ると思います~。
アバター
amata1219
ID:380a7b4a
石掘り
 
記事: 83
登録日時: 2016年11月18日(金) 16:46
お住まい: Enabling World

  • (PostNo.320560)

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

投稿記事by takumi_ » 2018年9月24日(月) 20:59

アイテムに名前を付けて入れたいのだけどエラーが起きてどうしたらいいのかがわからないのですが...
入力したコードはこれです。
コード: 全て選択
   public boolean onCommand(CommandSender sender, Command command, String label, String[] arg)
   {
      {
         if(!(sender instanceof Player))
         {
            return false;
         }

         Player Player = (Player) sender;
         Inventory SkilltreePage1 = Bukkit.createInventory(null, 45,"スキルツリー 1");
         ItemStack NEXT1 = new ItemStack(Material.WOOL);
         ItemMeta NEXT10 = NEXT1.getItemMeta();
         NEXT10.setDisplayName("次のページへ");
         SkilltreePage1.setItem(45, NEXT1);
         //スキルツリー
         Player.openInventory(SkilltreePage1);
takumi_
ID:3592cf64
水から上がったとこ
 
記事: 3
登録日時: 2018年9月24日(月) 20:52

  • (PostNo.320575)

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

投稿記事by amata1219 » 2018年9月25日(火) 01:00

takumi_ さんが書きました:アイテムに名前を付けて入れたいのだけどエラーが起きてどうしたらいいのかがわからないのですが...
入力したコードはこれです。
コード: 全て選択
   public boolean onCommand(CommandSender sender, Command command, String label, String[] arg)
   {
      {
         if(!(sender instanceof Player))
         {
            return false;
         }

         Player Player = (Player) sender;
         Inventory SkilltreePage1 = Bukkit.createInventory(null, 45,"スキルツリー 1");
         ItemStack NEXT1 = new ItemStack(Material.WOOL);
         ItemMeta NEXT10 = NEXT1.getItemMeta();
         NEXT10.setDisplayName("次のページへ");
         SkilltreePage1.setItem(45, NEXT1);
         //スキルツリー
         Player.openInventory(SkilltreePage1);


takumi_さん、こんにちは。
問題点は2箇所あります。

1. ItemMetaが反映されていない
ItemStack#setItemMeta(ItemMeta)で反映させましょう。
コード: 全て選択
NEXT1.setItemMeta(NEXT10);


2. 存在しないスロットにアイテムをセットしている。
これがエラーの原因になります。インベントリのスロット数は45でも、スロット番号は0から始まり44で終わっています。
つまりはインベントリの最後のスロットにアイテムをセットしたいのであれば、この場合ですと44を指定しなければなりません。
コード: 全て選択
SkilltreePage1.setItem(44, NEXT1);


今回はエラー原因の決定的な証拠があったため回答しましたが、次回から何かご質問される際はエラーコードも合わせて貼って下さいね。
アバター
amata1219
ID:41ade57a
石掘り
 
記事: 83
登録日時: 2016年11月18日(金) 16:46
お住まい: Enabling World

  • (PostNo.320593)

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

投稿記事by takumi_ » 2018年9月25日(火) 15:31

amata1219 さんが書きました:
takumi_ さんが書きました:アイテムに名前を付けて入れたいのだけどエラーが起きてどうしたらいいのかがわからないのですが...
入力したコードはこれです。
コード: 全て選択
   public boolean onCommand(CommandSender sender, Command command, String label, String[] arg)
   {
      {
         if(!(sender instanceof Player))
         {
            return false;
         }

         Player Player = (Player) sender;
         Inventory SkilltreePage1 = Bukkit.createInventory(null, 45,"スキルツリー 1");
         ItemStack NEXT1 = new ItemStack(Material.WOOL);
         ItemMeta NEXT10 = NEXT1.getItemMeta();
         NEXT10.setDisplayName("次のページへ");
         SkilltreePage1.setItem(45, NEXT1);
         //スキルツリー
         Player.openInventory(SkilltreePage1);


takumi_さん、こんにちは。
問題点は2箇所あります。

1. ItemMetaが反映されていない
ItemStack#setItemMeta(ItemMeta)で反映させましょう。
コード: 全て選択
NEXT1.setItemMeta(NEXT10);


2. 存在しないスロットにアイテムをセットしている。
これがエラーの原因になります。インベントリのスロット数は45でも、スロット番号は0から始まり44で終わっています。
つまりはインベントリの最後のスロットにアイテムをセットしたいのであれば、この場合ですと44を指定しなければなりません。
コード: 全て選択
SkilltreePage1.setItem(44, NEXT1);


今回はエラー原因の決定的な証拠があったため回答しましたが、次回から何かご質問される際はエラーコードも合わせて貼って下さいね。


ありがとうございます。次からはエラーコードを張るようにします。
takumi_
ID:3592cf64
水から上がったとこ
 
記事: 3
登録日時: 2018年9月24日(月) 20:52

  • (PostNo.320614)

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

投稿記事by 八咫烏 » 2018年9月26日(水) 01:39

amata1219 さんが書きました:
八咫烏 さんが書きました:チェスト(Inventory inv)の中に
10%の確率で金リンゴが数個
20%の確率でリンゴが数個
30%の確率で糸が数個
でまばらに入れ込みたいのですがどう書けばいいのでしょうか。。。
イメージは添付写真のような感じです。
Ver.1.8 SPIGOT


八咫烏さん、こんにちは。
Materialと確率(%でなく少数)をマップ形式で保持し、それを元に確率抽選する形で実装例を書いてみました。
乱数にはnew Random().nextFloat()を用いています。
視認性を考慮しコード中では確率の合計値が1.0になるよう設定していますが、合計値を元に計算する実装のためそれ以上それ以下でも問題無く動作します。
コード: 全て選択
   private static HashMap<Material, Float> map = new HashMap<Material, Float>();

   public static void main(String[] args){
      map.put(Material.GOLDEN_APPLE, 0.1f);
      map.put(Material.APPLE, 0.2f);
      map.put(Material.STRING, 0.3f);
      map.put(Material.AIR, 0.4f);//その他 何も無い場合の確率設定も必要
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
      System.out.println(getMaterial().toString());
   }

   public static Material getMaterial(){
      float total_prob = 0.0f;
      for(float material_prob : map.values()){
         total_prob += material_prob;
         //確率の合計値を求める
      }
      float prob = total_prob * new Random().nextFloat();
      //合計値に乱数をかけて確率を算出する
      float cumlative_prob = 0.0f;
      for(Material material : map.keySet()){
         cumlative_prob += map.get(material);
         if(prob < cumlative_prob){
            return material;
            //確率をキー単位で加算していき、先に求めた確率がそれ以下であればMaterialを返す
         }
      }
      return Material.AIR;
      //一応Material.AIRを返すがここに到達する事は無い
   }


getMaterial()を10回実行した結果は以下のようになりました。
コード: 全て選択
STRING
AIR
STRING
AIR
AIR
AIR
APPLE
GOLDEN_APPLE
AIR
APPLE


よって、これをスロット単位で実行すればランダムにアイテムが散りばめられたインベントリを作成出来ます。
また、アイテム数もこれを応用すると上手く設定出来ると思います~。


解決しました!
ありがとうございます
アバター
八咫烏
ID:41f9f109
木を殴ってる
 
記事: 24
登録日時: 2014年8月14日(木) 18:06
お住まい: 闇の中

  • (PostNo.320615)

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

投稿記事by 八咫烏 » 2018年9月26日(水) 01:43

座標(-254,1,13)から(172,81,-413)
までの直方体の範囲の中にあるトラップチェスト(Block)を取得したいです。。。
For文で1ブロックずつ検知すると、多すぎてServerが落ちてしまいます。。。
アバター
八咫烏
ID:41f9f109
木を殴ってる
 
記事: 24
登録日時: 2014年8月14日(木) 18:06
お住まい: 闇の中

  • (PostNo.320624)

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

投稿記事by signal » 2018年9月26日(水) 17:39

xの値を設定したいのですが、そのxはスコアボードのスコアなんですがどうしたら表示できますか?
スコアボードは作成済みで、名前はEntityDamageという名前にしています。
追加なんですが、このままではアイテムが移動できてしますので、移動できなくする方法も教えていただけるとありがたいです。
コード: 全て選択
   public boolean onCommand(CommandSender sender, Command command, String label, String[] arg)
   {
      {
         if(!(sender instanceof Player))
         {
            sender.sendMessage("このコマンドはプレイヤーで無ければ使えません");
            return false;
         }

         Player Player = (Player) sender;
         //スキルツリー表示
         Inventory Stats = Bukkit.createInventory(null, 27,"限界突破");
         //Item
         ItemStack SP1 = new ItemStack(Material.MOB_SPAWNER);
         ItemMeta SP10 = SP1.getItemMeta();
         //xの値の設定
         //
         //Name
         SP10.setDisplayName(ChatColor.GOLD+"stats+のポイント");
         List<String> sp = new ArrayList<String>();
         sp.add(ChatColor.RESET+"stats+のポイントは"+ x +"です");
         SP10.setLore(sp);
         SP1.setItemMeta(SP10);
         //Put
         Stats.setItem(4, SP1);
         //Item
         ItemStack STR1 = new ItemStack(Material.ENCHANTED_BOOK);
         ItemMeta STR10 = STR1.getItemMeta();
         //Name
         STR10.setDisplayName(ChatColor.RED+"STR1上昇");
         STR1.setItemMeta(STR10);
         //Put
         Stats.setItem(10, STR1);
         //Item
         ItemStack VIT1 = new ItemStack(Material.ENCHANTED_BOOK);
         ItemMeta VIT10 = VIT1.getItemMeta();
         //Name
         VIT10.setDisplayName(ChatColor.YELLOW+"VIT1上昇");
         VIT1.setItemMeta(VIT10);
         //Put
         Stats.setItem(12, VIT1);
         //Item
         ItemStack WAY1 = new ItemStack(Material.STAINED_GLASS_PANE);
         ItemMeta WAY10 = WAY1.getItemMeta();
         //Name
         WAY10.setDisplayName(ChatColor.RESET+"");
         WAY1.setItemMeta(WAY10);
         //put
         Stats.setItem(0, WAY1);
         Stats.setItem(1, WAY1);
         Stats.setItem(2, WAY1);
         Stats.setItem(3, WAY1);
         Stats.setItem(5, WAY1);
         Stats.setItem(6, WAY1);
         Stats.setItem(7, WAY1);
         Stats.setItem(8, WAY1);
         Stats.setItem(9, WAY1);
         Stats.setItem(11, WAY1);
         Stats.setItem(13, WAY1);
         Stats.setItem(15, WAY1);
         Stats.setItem(17, WAY1);
         Stats.setItem(18, WAY1);
         Stats.setItem(19, WAY1);
         Stats.setItem(20, WAY1);
         Stats.setItem(21, WAY1);
         Stats.setItem(22, WAY1);
         Stats.setItem(23, WAY1);
         Stats.setItem(24, WAY1);
         Stats.setItem(25, WAY1);
         Stats.setItem(26, WAY1);
         //スキルツリー
         Player.openInventory(Stats);
      }
      return false;
   }
signal
ID:3592cf64
木を殴ってる
 
記事: 11
登録日時: 2018年9月25日(火) 20:48

  • (PostNo.320644)

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

投稿記事by amata1219 » 2018年9月27日(木) 20:40

signal さんが書きました:xの値を設定したいのですが、そのxはスコアボードのスコアなんですがどうしたら表示できますか?
スコアボードは作成済みで、名前はEntityDamageという名前にしています。
追加なんですが、このままではアイテムが移動できてしますので、移動できなくする方法も教えていただけるとありがたいです。
コード: 全て選択
   public boolean onCommand(CommandSender sender, Command command, String label, String[] arg)
   {
      {
         if(!(sender instanceof Player))
         {
            sender.sendMessage("このコマンドはプレイヤーで無ければ使えません");
            return false;
         }

         Player Player = (Player) sender;
         //スキルツリー表示
         Inventory Stats = Bukkit.createInventory(null, 27,"限界突破");
         //Item
         ItemStack SP1 = new ItemStack(Material.MOB_SPAWNER);
         ItemMeta SP10 = SP1.getItemMeta();
         //xの値の設定
         //
         //Name
         SP10.setDisplayName(ChatColor.GOLD+"stats+のポイント");
         List<String> sp = new ArrayList<String>();
         sp.add(ChatColor.RESET+"stats+のポイントは"+ x +"です");
         SP10.setLore(sp);
         SP1.setItemMeta(SP10);
         //Put
         Stats.setItem(4, SP1);
         //Item
         ItemStack STR1 = new ItemStack(Material.ENCHANTED_BOOK);
         ItemMeta STR10 = STR1.getItemMeta();
         //Name
         STR10.setDisplayName(ChatColor.RED+"STR1上昇");
         STR1.setItemMeta(STR10);
         //Put
         Stats.setItem(10, STR1);
         //Item
         ItemStack VIT1 = new ItemStack(Material.ENCHANTED_BOOK);
         ItemMeta VIT10 = VIT1.getItemMeta();
         //Name
         VIT10.setDisplayName(ChatColor.YELLOW+"VIT1上昇");
         VIT1.setItemMeta(VIT10);
         //Put
         Stats.setItem(12, VIT1);
         //Item
         ItemStack WAY1 = new ItemStack(Material.STAINED_GLASS_PANE);
         ItemMeta WAY10 = WAY1.getItemMeta();
         //Name
         WAY10.setDisplayName(ChatColor.RESET+"");
         WAY1.setItemMeta(WAY10);
         //put
         Stats.setItem(0, WAY1);
         Stats.setItem(1, WAY1);
         Stats.setItem(2, WAY1);
         Stats.setItem(3, WAY1);
         Stats.setItem(5, WAY1);
         Stats.setItem(6, WAY1);
         Stats.setItem(7, WAY1);
         Stats.setItem(8, WAY1);
         Stats.setItem(9, WAY1);
         Stats.setItem(11, WAY1);
         Stats.setItem(13, WAY1);
         Stats.setItem(15, WAY1);
         Stats.setItem(17, WAY1);
         Stats.setItem(18, WAY1);
         Stats.setItem(19, WAY1);
         Stats.setItem(20, WAY1);
         Stats.setItem(21, WAY1);
         Stats.setItem(22, WAY1);
         Stats.setItem(23, WAY1);
         Stats.setItem(24, WAY1);
         Stats.setItem(25, WAY1);
         Stats.setItem(26, WAY1);
         //スキルツリー
         Player.openInventory(Stats);
      }
      return false;
   }


signalさん、こんにちは。
スコアボートの設定はこちらが大変参考になると思います。
インベントリの編集に関しては、InventoryClickEventで特定の条件時を満たした場合にe.setCancelled(true)でキャンセルすると制限出来ます。
アバター
amata1219
ID:73b90dd3
石掘り
 
記事: 83
登録日時: 2016年11月18日(金) 16:46
お住まい: Enabling World

  • (PostNo.320739)

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

投稿記事by testusuke » 2018年10月01日(月) 19:35

【プラグイン開発・Spigot1.12.2】
プラグインを開発しています。しかし可能なのかわからないものがあります。
Player型をMCIDで取得する又はPlayer型をUUIDで取得する方法があるのかわかりません。
コード: 全て選択
//例えば
Player player = testusuke //testusukeはMCID

上記のような感じですることは可能なのでしょうか?UUIDでも構いません。
WEBやSpigotAPIなどで調べましたがよくわかりませんでした。
わかる方いましたら教えてください。
testusuke
ID:04803fb2
木を殴ってる
 
記事: 11
登録日時: 2018年8月07日(火) 15:02

  • (PostNo.320740)

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

投稿記事by mcgo » 2018年10月01日(月) 21:32

testusuke さんが書きました:【プラグイン開発・Spigot1.12.2】
プラグインを開発しています。しかし可能なのかわからないものがあります。
Player型をMCIDで取得する又はPlayer型をUUIDで取得する方法があるのかわかりません。
コード: 全て選択
コード: 全て選択
//例えば
Player player = testusuke //testusukeはMCID


上記のような感じですることは可能なのでしょうか?UUIDでも構いません。
WEBやSpigotAPIなどで調べましたがよくわかりませんでした。
わかる方いましたら教えてください。

検索で出てきたものを貼っておくのでお試しください。
『bukkit get player from uuid』などと英語でそれっぽい単語並べれて検索すれば大抵は出てくるので今後の開発に役立てば幸いです。

https://bukkit.org/threads/how-can-i-ge ... id.156704/
https://bukkit.org/threads/get-player-by-uuid.259015/
最近はだいぶマイクラから離れつつあるこの頃...
主にSkriptトピックに出現して助言してましゅ。
人並み程度のプラグイン制作知識はもってりゅ。
開発依頼とかあればまあPMで気軽に(^o^)
【Skript自作コード公開中】
アバター
mcgo
ID:8592d4fa
鉄鉱掘り
 
記事: 280
登録日時: 2016年11月04日(金) 00:05
お住まい: Minecraft

  • (PostNo.320741)

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

投稿記事by amata1219 » 2018年10月01日(月) 21:36

testusuke さんが書きました:【プラグイン開発・Spigot1.12.2】
プラグインを開発しています。しかし可能なのかわからないものがあります。
Player型をMCIDで取得する又はPlayer型をUUIDで取得する方法があるのかわかりません。
コード: 全て選択
//例えば
Player player = testusuke //testusukeはMCID

上記のような感じですることは可能なのでしょうか?UUIDでも構いません。
WEBやSpigotAPIなどで調べましたがよくわかりませんでした。
わかる方いましたら教えてください。


testusukeさん、こんにちは。
下記コードの通り、JavaPluginを継承したクラスのgetServerメソッドよりプレイヤーを取得する事が出来ます。
MCID、UUIDどちらも引数として入力出来ます。
コード: 全て選択
getServer().getPlayer(String name);
getServer().getPlayer(UUID uuid);


数分差で回答が付いている事に気付かず投稿してしまった_(:3 ∠ )_
一応書いたからには残しておきます・・。
アバター
amata1219
ID:ca169dcb
石掘り
 
記事: 83
登録日時: 2016年11月18日(金) 16:46
お住まい: Enabling World

  • (PostNo.320766)

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

投稿記事by signal » 2018年10月02日(火) 19:20

度々失礼いたします。
今盾をシフト+左クリックしたら近くのエンティティにtpして、ダメージを与えようとしていますが、
tpの仕方はわかったけれど反応せず、そしてダメージの与え方がわかりません。教えてください。
コード: 全て選択
public class Shieldskill extends JavaPlugin implements Listener
{
   //起動時
    public void onEnable()
    {
        super.onEnable();
        getServer().getPluginManager().registerEvents(this, this);
    }

    @EventHandler
    public void shield(PlayerInteractEvent event)
    {
       ItemStack item = event.getPlayer().getItemInHand();
       Player player = event.getPlayer();

       if (!event.getPlayer().isSneaking()) {
            return;
        }
       if (item.getType() == Material.SHIELD) {
          if (event.getAction() == Action.LEFT_CLICK_AIR)
          {
             player.getNearbyEntities(10, 10, 10);
             player.teleport((Location) player.getNearbyEntities(10, 10, 10));
          }
       }
    }
}

もしできるのならばプレイヤーを対象外にしたいです。
signal
ID:3592cf64
木を殴ってる
 
記事: 11
登録日時: 2018年9月25日(火) 20:48

1つ前へ次へ

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

x