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

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

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

投稿記事by signal » 2018年10月21日(日) 19:29

一日に何回も失礼します。
今度はスコアボードについてやろうと思い、色々漁って作ったのですが、
スコアボード 作れた
スコアボードの表示 できた
と順調だったのですが、アイテムのLoreに表示したいと思い
コード: 全て選択
List<String> skullMeta_ = new ArrayList<String>();
               skullMeta_.add("§rポイント: ここ");
結構省いていますが、そこは何とか...

とやったのですが、これでいざ見ようと思ったらpluginが反応しず...
次はここの過去を漁り
object.getScore("PlayerName").getScore();
でintとして取れます。とあったのでそれを
コード: 全て選択
skullMeta_.add("§rポイント: "+object.getScore(event.getPlayer().getName).getScore());

とやってみたのですが、また反応せずとなります。
実際のところもう一個あり...
↑のスコアをコンフィグに記憶しようと思ったら今みたいな症状がおこり...ていうのが繰り返しています。
これができるようになる方法を教えてください。(色々考えた結果、int型じゃないと思い↑をやってみましたがそれもできずにもうお手上げ状態です。)
signal
ID:ad6fdda5
木を殴ってる
 
記事: 17
登録日時: 2018年9月25日(火) 20:48

  • (PostNo.321259)

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

投稿記事by EV39 » 2018年10月21日(日) 21:10

signal さんが書きました:
EV39 さんが書きました:プログラミング初心者です。Eclipseを使ってプラグインを作っているのですが、エクスポートしようとすると

JAR 作成に失敗しました。追加情報については詳細を参照してください。
リソース '/DOROKEI/src/plugin.yml' はファイル・システムと同期がとれていません。
リソース '/DOROKEI/src/plugin.yml' はファイル・システムと同期がとれていません。

と出てエクスポート出来ません、何回かやれば出来るんですけどサーバーで/plやってプラグインとして認識されていません。
一応このサイトの解決法はやってみたのですが、だめでした、、、
https://qiita.com/yonell/items/f43ea42e473177fda73b

他のプラグインなら問題なくエクスポート出来るのですがこのプラグインだと出来ないです。
plugin.ymlは何回か確認したつもりですが一応載せておきます。
コード: 全て選択
name: DOROKEI
main: Dorokei.dorokei
version: 0.1
commands:
  start:


mainはパッケージ名.クラス名にしてあります。
クラスが2つあるので一つだけ書いてあります。

回答よろしくおねがいします。


plugin.ymlの場所が間違ってませんか?
plugin.ymlはDOROKEIのところに作りますよ。
あなたはsrcの場所に作ってあると見えました。



すみません確かにsrcの中に入れてました入れ直してエラーは何もはかなくなったのですが、/plでプラグインが認識されていません。同じところに入ってるWorldEditは認識されています。
これはまた全く別の原因で認識されないのでしょうか。
EV39
ID:228caa51
水から上がったとこ
 
記事: 4
登録日時: 2018年9月18日(火) 20:22

  • (PostNo.321271)

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

投稿記事by signal » 2018年10月22日(月) 17:31

EV39 さんが書きました:
signal さんが書きました:
EV39 さんが書きました:プログラミング初心者です。Eclipseを使ってプラグインを作っているのですが、エクスポートしようとすると

JAR 作成に失敗しました。追加情報については詳細を参照してください。
リソース '/DOROKEI/src/plugin.yml' はファイル・システムと同期がとれていません。
リソース '/DOROKEI/src/plugin.yml' はファイル・システムと同期がとれていません。

と出てエクスポート出来ません、何回かやれば出来るんですけどサーバーで/plやってプラグインとして認識されていません。
一応このサイトの解決法はやってみたのですが、だめでした、、、
https://qiita.com/yonell/items/f43ea42e473177fda73b

他のプラグインなら問題なくエクスポート出来るのですがこのプラグインだと出来ないです。
plugin.ymlは何回か確認したつもりですが一応載せておきます。
コード: 全て選択
name: DOROKEI
main: Dorokei.dorokei
version: 0.1
commands:
  start:


mainはパッケージ名.クラス名にしてあります。
クラスが2つあるので一つだけ書いてあります。

回答よろしくおねがいします。


plugin.ymlの場所が間違ってませんか?
plugin.ymlはDOROKEIのところに作りますよ。
あなたはsrcの場所に作ってあると見えました。



すみません確かにsrcの中に入れてました入れ直してエラーは何もはかなくなったのですが、/plでプラグインが認識されていません。同じところに入ってるWorldEditは認識されています。
これはまた全く別の原因で認識されないのでしょうか。

いまちょこっとplugin.yml見てきたんですけど...
コード: 全て選択
name: switch
version: 1.0.5
main: main.Main
commands:
   switch:
      description: switch
      usage: /<command>
      default: op
      permission: CommandBeacon.CommandBeacon
      permission-message: You don't have <permission>

一応僕が作ったのはこんな感じで異なった点は、
verzionが0.1.0になっていないこと
mainのものがパッケージ、クラスにしたと言ってましたが、多分反対になっていますね。正しくはdorokei.Dorokeiかと...
あとは正直どこまでつけたら動作するのかがわからないのですが、
コード: 全て選択
commands:
  start:
    //ここ

ここの部分を少し付け足したら、動くと思われます。
これでも動作しなかった場合はこれ以上がわからないので、それはcodeの問題かと思われます
signal
ID:ad6fdda5
木を殴ってる
 
記事: 17
登録日時: 2018年9月25日(火) 20:48

  • (PostNo.321306)

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

投稿記事by ゲスト » 2018年10月25日(木) 03:10

プレイヤーが自分のインベントリを開いてカーソルで掴んでいるアイテムを取得したいのですが、可能でしょうか?
取得といってもInventoryClickEventで持った時置いた時じゃなくいつでも何を持っているか取得できる方法です。
ゲスト
ID:cdf59e8b
 

  • (PostNo.321330)

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

投稿記事by ゲスト » 2018年10月25日(木) 22:22

net.minecraft.server.v1_13_R1がインポートできません。バージョンは1.13.2-R0.1-SNAPSHOTです。
ゲスト
ID:b93da72c
 

  • (PostNo.321386)

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

投稿記事by amata1219 » 2018年10月28日(日) 08:28

ゲスト さんが書きました:プレイヤーが自分のインベントリを開いてカーソルで掴んでいるアイテムを取得したいのですが、可能でしょうか?
取得といってもInventoryClickEventで持った時置いた時じゃなくいつでも何を持っているか取得できる方法です。


ゲストさん、こんにちは。
InventoryClickEvent#getCursor()よりカーソル上のアイテムを取得出来ます。

ゲスト さんが書きました:net.minecraft.server.v1_13_R1がインポートできません。バージョンは1.13.2-R0.1-SNAPSHOTです。


ゲストさん、こんにちは。
単純にバージョンが違うだけではないでしょうか。
一度ご自身でimport net.minecraft.server.まで打ち込んでみると、補完機能のあるエディタでしたら適切なパッケージを候補に挙げてくれると思います。
アバター
amata1219
ID:e05667a4
石掘り
 
記事: 85
登録日時: 2016年11月18日(金) 16:46
お住まい: Enabling World

  • (PostNo.321404)

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

投稿記事by signal » 2018年10月28日(日) 14:35

とあるゲームの再現をしたいと思い右クリックしたらアイテムがランダムで貰えるというのを作っていて
無事完成して動作確認をしようとしたら動作しませんでした。
助言お願いします。
srcどうりの名前にはしてあります(アマスタの名前)
コード: 全て選択
package main;

import java.util.Random;

import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener
{
   public void onEnable()
   {
      super.onEnable();
      getServer().getPluginManager().registerEvents(this, this);
   }

    public boolean PlayerItemPut(Player pl, Entity ent)
    {

       String Name = ent.getName();
        // 対象がプレイヤーでなければ何もしない
        if (ent.getType() != EntityType.ARMOR_STAND)
        {
            return false;
        }
        // 自分が現在しゃがんでいるか?
        if (!pl.isSneaking())
        {
            return false;
        }
        //エンティティの名前は何か?
        Random random = new Random();
      int random_ = random.nextInt(11);
      System.out.println(random_);
        switch(Name)
        {
        case "1":
           if(random_ >= 4)
           {
              ItemStack potion1 = new ItemStack(Material.POTION);
             ItemMeta potion1_ = potion1.getItemMeta();
                potion1_.setDisplayName("§r最下級のポーション");
                potion1.setItemMeta(potion1_);
              pl.getInventory().addItem(potion1);
           } else
           {
              ItemStack potion2 = new ItemStack(Material.POTION);
             ItemMeta potion2_ = potion2.getItemMeta();
                potion2_.setDisplayName("§r普通のポーション");
                potion2.setItemMeta(potion2_);
              pl.getInventory().addItem(potion2);
           }
           break;
        case "2":
           if(random_ >= 2)
           {
              ItemStack ore1 = new ItemStack(Material.COAL_ORE);
             ItemMeta ore1_ = ore1.getItemMeta();
                ore1_.setDisplayName("§r最下級の鉱石");
                ore1.setItemMeta(ore1_);
              pl.getInventory().addItem(ore1);
           } else
           {
              ItemStack ore2 = new ItemStack(Material.IRON_ORE);
             ItemMeta ore2_ = ore2.getItemMeta();
                ore2_.setDisplayName("§r普通の鉱石");
                ore2.setItemMeta(ore2_);
              pl.getInventory().addItem(ore2);
           }
           break;
        }
        return false;
    }
}
最後に編集したユーザー signal [ 2018年11月03日(土) 15:02 ], 累計 1 回
signal
ID:ad6fdda5
木を殴ってる
 
記事: 17
登録日時: 2018年9月25日(火) 20:48

  • (PostNo.321411)

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

投稿記事by ゲスト » 2018年10月28日(日) 17:40

>>amataさん
返信ありがとうございます
インポートできないと言っていた者ですが語彙が少なすぎて返信をいただけるとは思っていませんでした
Eclipseを使っているんですが「import net.minecraft.server.」と打ち込んでも補完候補が表示されず「import net.minecraft.server.v1_13_R1」まで打ち込むと『net』の部分に赤線が引かれます。もしかしてpom.xmlに問題があるのでしょうか?
ゲスト
ID:b93da72c
 

  • (PostNo.321540)

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

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

signal さんが書きました:とあるゲームの再現をしたいと思い右クリックしたらアイテムがランダムで貰えるというのを作っていて
無事完成して動作確認をしようとしたら動作しませんでした。
助言お願いします。
srcどうりの名前にはしてあります(アマスタの名前)
コード: 全て選択
package main;

import java.util.Random;

import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener
{
   public void onEnable()
   {
      super.onEnable();
      getServer().getPluginManager().registerEvents(this, this);
   }

    public boolean PlayerItemPut(Player pl, Entity ent)
    {

       String Name = ent.getName();
        // 対象がプレイヤーでなければ何もしない
        if (ent.getType() != EntityType.ARMOR_STAND)
        {
            return false;
        }
        // 自分が現在しゃがんでいるか?
        if (!pl.isSneaking())
        {
            return false;
        }
        //エンティティの名前は何か?
        Random random = new Random();
      int random_ = random.nextInt(11);
      System.out.println(random_);
        switch(Name)
        {
        case "1":
           if(random_ >= 4)
           {
              ItemStack potion1 = new ItemStack(Material.POTION);
             ItemMeta potion1_ = potion1.getItemMeta();
                potion1_.setDisplayName("§r最下級のポーション");
                potion1.setItemMeta(potion1_);
              pl.getInventory().addItem(potion1);
           } else
           {
              ItemStack potion2 = new ItemStack(Material.POTION);
             ItemMeta potion2_ = potion2.getItemMeta();
                potion2_.setDisplayName("§r普通のポーション");
                potion2.setItemMeta(potion2_);
              pl.getInventory().addItem(potion2);
           }
           break;
        case "2":
           if(random_ >= 2)
           {
              ItemStack ore1 = new ItemStack(Material.COAL_ORE);
             ItemMeta ore1_ = ore1.getItemMeta();
                ore1_.setDisplayName("§r最下級の鉱石");
                ore1.setItemMeta(ore1_);
              pl.getInventory().addItem(ore1);
           } else
           {
              ItemStack ore2 = new ItemStack(Material.IRON_ORE);
             ItemMeta ore2_ = ore2.getItemMeta();
                ore2_.setDisplayName("§r普通の鉱石");
                ore2.setItemMeta(ore2_);
              pl.getInventory().addItem(ore2);
           }
           break;
        }
        return false;
    }
}


signalさん、こんにちは。
エンティティに設定されたカスタムネームを取得するのであれば、getCustomName()を使って下さい。
コード: 全て選択
String name = ent.getCustomName();


ゲスト さんが書きました:>>amataさん
返信ありがとうございます
インポートできないと言っていた者ですが語彙が少なすぎて返信をいただけるとは思っていませんでした
Eclipseを使っているんですが「import net.minecraft.server.」と打ち込んでも補完候補が表示されず「import net.minecraft.server.v1_13_R1」まで打ち込むと『net』の部分に赤線が引かれます。もしかしてpom.xmlに問題があるのでしょうか?


ゲストさん、こんにちは。
そちらの環境を存じておりませんので何とも言えませんが、netの部分に破線が引かれるあたり恐らくspigot.jarを正しく参照出来ていないと思います。
pom.xmlはどの様に記述されていますでしょうか?
アバター
amata1219
ID:046bf50e
石掘り
 
記事: 85
登録日時: 2016年11月18日(金) 16:46
お住まい: Enabling World

  • (PostNo.321605)

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

投稿記事by signal » 2018年11月06日(火) 18:54

amata1219 さんが書きました:
signal さんが書きました:とあるゲームの再現をしたいと思い右クリックしたらアイテムがランダムで貰えるというのを作っていて
無事完成して動作確認をしようとしたら動作しませんでした。
助言お願いします。
srcどうりの名前にはしてあります(アマスタの名前)
コード: 全て選択
package main;

import java.util.Random;

import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener
{
   public void onEnable()
   {
      super.onEnable();
      getServer().getPluginManager().registerEvents(this, this);
   }

   @SuppressWarnings("null")
   @EventHandler
   public void entityclick(PlayerInteractEntityEvent e)
   {
      Entity ent = null;
      Player pl = e.getPlayer();
      String Name = ent.getCustomName();
        if (ent.getType() == EntityType.ARMOR_STAND)
        {
            //エンティティの名前は何か?
            Random random = new Random();
          int random_ = random.nextInt(11);
          System.out.println(random_);
            switch(Name)
            {
            case "1":
               if(random_ >= 4)
               {
                  ItemStack potion1 = new ItemStack(Material.POTION);
                 ItemMeta potion1_ = potion1.getItemMeta();
                    potion1_.setDisplayName("§r最下級のポーション");
                    potion1.setItemMeta(potion1_);
                  pl.getInventory().addItem(potion1);
               } else
               {
                  ItemStack potion2 = new ItemStack(Material.POTION);
                 ItemMeta potion2_ = potion2.getItemMeta();
                    potion2_.setDisplayName("§r普通のポーション");
                    potion2.setItemMeta(potion2_);
                  pl.getInventory().addItem(potion2);
               }
               break;
            case "2":
               if(random_ >= 2)
               {
                  ItemStack ore1 = new ItemStack(Material.COAL_ORE);
                 ItemMeta ore1_ = ore1.getItemMeta();
                    ore1_.setDisplayName("§r最下級の鉱石");
                    ore1.setItemMeta(ore1_);
                  pl.getInventory().addItem(ore1);
               } else
               {
                  ItemStack ore2 = new ItemStack(Material.IRON_ORE);
                 ItemMeta ore2_ = ore2.getItemMeta();
                    ore2_.setDisplayName("§r普通の鉱石");
                    ore2.setItemMeta(ore2_);
                  pl.getInventory().addItem(ore2);
               }
               break;
            }
        }
   }
}

EventHandlerを打ってなかったので実行されませんでした。なので。これでできるだろと思ったら出来ませんでした。(↑)
何故できなかったのかは二つあります。
Entityがnullになっている。
Entityの名前があっていない可能性がある。
どちらが正しいのでしょうか?
それともエンティティをクリックではなく違うものにしたほうがいいのか?
一応お願いします
signal
ID:ad6fdda5
木を殴ってる
 
記事: 17
登録日時: 2018年9月25日(火) 20:48

  • (PostNo.321619)

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

投稿記事by TA3 » 2018年11月06日(火) 20:35

signal さんが書きました:
amata1219 さんが書きました:
signal さんが書きました:とあるゲームの再現をしたいと思い右クリックしたらアイテムがランダムで貰えるというのを作っていて
無事完成して動作確認をしようとしたら動作しませんでした。
助言お願いします。
srcどうりの名前にはしてあります(アマスタの名前)
コード: 全て選択
package main;

import java.util.Random;

import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener
{
   public void onEnable()
   {
      super.onEnable();
      getServer().getPluginManager().registerEvents(this, this);
   }

   @SuppressWarnings("null")
   @EventHandler
   public void entityclick(PlayerInteractEntityEvent e)
   {
      Entity ent = null;
      Player pl = e.getPlayer();
      String Name = ent.getCustomName();
        if (ent.getType() == EntityType.ARMOR_STAND)
        {
            //エンティティの名前は何か?
            Random random = new Random();
          int random_ = random.nextInt(11);
          System.out.println(random_);
            switch(Name)
            {
            case "1":
               if(random_ >= 4)
               {
                  ItemStack potion1 = new ItemStack(Material.POTION);
                 ItemMeta potion1_ = potion1.getItemMeta();
                    potion1_.setDisplayName("§r最下級のポーション");
                    potion1.setItemMeta(potion1_);
                  pl.getInventory().addItem(potion1);
               } else
               {
                  ItemStack potion2 = new ItemStack(Material.POTION);
                 ItemMeta potion2_ = potion2.getItemMeta();
                    potion2_.setDisplayName("§r普通のポーション");
                    potion2.setItemMeta(potion2_);
                  pl.getInventory().addItem(potion2);
               }
               break;
            case "2":
               if(random_ >= 2)
               {
                  ItemStack ore1 = new ItemStack(Material.COAL_ORE);
                 ItemMeta ore1_ = ore1.getItemMeta();
                    ore1_.setDisplayName("§r最下級の鉱石");
                    ore1.setItemMeta(ore1_);
                  pl.getInventory().addItem(ore1);
               } else
               {
                  ItemStack ore2 = new ItemStack(Material.IRON_ORE);
                 ItemMeta ore2_ = ore2.getItemMeta();
                    ore2_.setDisplayName("§r普通の鉱石");
                    ore2.setItemMeta(ore2_);
                  pl.getInventory().addItem(ore2);
               }
               break;
            }
        }
   }
}

EventHandlerを打ってなかったので実行されませんでした。なので。これでできるだろと思ったら出来ませんでした。(↑)
何故できなかったのかは二つあります。
Entityがnullになっている。
Entityの名前があっていない可能性がある。
どちらが正しいのでしょうか?
それともエンティティをクリックではなく違うものにしたほうがいいのか?
一応お願いします

このコードの場合entの値は常にnullです
ent = e.getRightClicked() でentに値を設定してあげて下さい
アバター
TA3
ID:a95d26b2
木を殴ってる
 
記事: 22
登録日時: 2016年8月18日(木) 17:44

  • (PostNo.321628)

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

投稿記事by 通りすがり(滞在中) » 2018年11月07日(水) 02:46

初めまして。多分、MOD作成中の質問等をするのがここの掲示板の趣旨だという事はわかっているのですがあえて質問をさせてください。
また、質問する場所が違うのであれば誘導等をしていただけるとありがたいと考えています。

やりたい事
●全くの知識無しからのMOD作成

ゴール
①銃(散弾銃)の作成(エンチャ出来る物)
②バリア発生装置の作成(可能であれば工業系のMODとの連携)
③自動迎撃装置の作成(いわゆるセントリーガン)
④飛行装置の作成。
⑤村人の取引の追加(村人にナニカする系のMODに対応させたいので、あくまで村人にしたい)
上記をとりあえず、マインクラフト1.6.4で実装できるようにしたい。


質問事項
プログラムとかの知識が全くないのですが、上記の物を作るにはどういった事を学び、どういった作業をすればよいのでしょうか?
教えてください
通りすがり(滞在中)
ID:eeae2193
 

  • (PostNo.321639)

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

投稿記事by signal » 2018年11月07日(水) 16:10

通りすがり(滞在中) さんが書きました:初めまして。多分、MOD作成中の質問等をするのがここの掲示板の趣旨だという事はわかっているのですがあえて質問をさせてください。
また、質問する場所が違うのであれば誘導等をしていただけるとありがたいと考えています。

やりたい事
●全くの知識無しからのMOD作成

ゴール
①銃(散弾銃)の作成(エンチャ出来る物)
②バリア発生装置の作成(可能であれば工業系のMODとの連携)
③自動迎撃装置の作成(いわゆるセントリーガン)
④飛行装置の作成。
⑤村人の取引の追加(村人にナニカする系のMODに対応させたいので、あくまで村人にしたい)
上記をとりあえず、マインクラフト1.6.4で実装できるようにしたい。


質問事項
プログラムとかの知識が全くないのですが、上記の物を作るにはどういった事を学び、どういった作業をすればよいのでしょうか?
教えてください


ここはplugin 制作ですよ
MODならばhttp://forum.minecraftuser.jp/viewtopic.php?f=39&t=8370ここです
signal
ID:ad6fdda5
木を殴ってる
 
記事: 17
登録日時: 2018年9月25日(火) 20:48

  • (PostNo.321640)

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

投稿記事by signal » 2018年11月07日(水) 16:11

TA3 さんが書きました:
signal さんが書きました:
amata1219 さんが書きました:
signal さんが書きました:とあるゲームの再現をしたいと思い右クリックしたらアイテムがランダムで貰えるというのを作っていて
無事完成して動作確認をしようとしたら動作しませんでした。
助言お願いします。
srcどうりの名前にはしてあります(アマスタの名前)
コード: 全て選択
package main;

import java.util.Random;

import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener
{
   public void onEnable()
   {
      super.onEnable();
      getServer().getPluginManager().registerEvents(this, this);
   }

   @SuppressWarnings("null")
   @EventHandler
   public void entityclick(PlayerInteractEntityEvent e)
   {
      Entity ent = null;
      Player pl = e.getPlayer();
      String Name = ent.getCustomName();
        if (ent.getType() == EntityType.ARMOR_STAND)
        {
            //エンティティの名前は何か?
            Random random = new Random();
          int random_ = random.nextInt(11);
          System.out.println(random_);
            switch(Name)
            {
            case "1":
               if(random_ >= 4)
               {
                  ItemStack potion1 = new ItemStack(Material.POTION);
                 ItemMeta potion1_ = potion1.getItemMeta();
                    potion1_.setDisplayName("§r最下級のポーション");
                    potion1.setItemMeta(potion1_);
                  pl.getInventory().addItem(potion1);
               } else
               {
                  ItemStack potion2 = new ItemStack(Material.POTION);
                 ItemMeta potion2_ = potion2.getItemMeta();
                    potion2_.setDisplayName("§r普通のポーション");
                    potion2.setItemMeta(potion2_);
                  pl.getInventory().addItem(potion2);
               }
               break;
            case "2":
               if(random_ >= 2)
               {
                  ItemStack ore1 = new ItemStack(Material.COAL_ORE);
                 ItemMeta ore1_ = ore1.getItemMeta();
                    ore1_.setDisplayName("§r最下級の鉱石");
                    ore1.setItemMeta(ore1_);
                  pl.getInventory().addItem(ore1);
               } else
               {
                  ItemStack ore2 = new ItemStack(Material.IRON_ORE);
                 ItemMeta ore2_ = ore2.getItemMeta();
                    ore2_.setDisplayName("§r普通の鉱石");
                    ore2.setItemMeta(ore2_);
                  pl.getInventory().addItem(ore2);
               }
               break;
            }
        }
   }
}

EventHandlerを打ってなかったので実行されませんでした。なので。これでできるだろと思ったら出来ませんでした。(↑)
何故できなかったのかは二つあります。
Entityがnullになっている。
Entityの名前があっていない可能性がある。
どちらが正しいのでしょうか?
それともエンティティをクリックではなく違うものにしたほうがいいのか?
一応お願いします

このコードの場合entの値は常にnullです
ent = e.getRightClicked() でentに値を設定してあげて下さい


getRight...でエンティティを取得できるのですね。知りませんでした。ありがとうございます。
signal
ID:ad6fdda5
木を殴ってる
 
記事: 17
登録日時: 2018年9月25日(火) 20:48

  • (PostNo.321646)

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

投稿記事by 通りすがり(滞在中) » 2018年11月07日(水) 22:13

signalさんありがとうございます。行ってみます
通りすがり(滞在中)
ID:eeae2193
 

  • (PostNo.321660)

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

投稿記事by signal » 2018年11月08日(木) 17:48

おかげさまで、クリックしたら無事動作しました。質問に回答してくださった方々ありがとうございます。
これでインベントリを開けるようになったのでインベントリにアイテムをセットしていく作業になりました。
まず、剣を追加しようと思い...
剣追加
コード: 全て選択
ItemStack item = new ItemStack(Material.WOOD_SWORD);
               ItemMeta meta = item.getItemMeta();
               net.minecraft.server.v1_12_R1.ItemStack nmsItem= CraftItemStack.asNMSCopy(item);
               NBTTagCompound compound = (nmsItem.hasTag()) ? nmsItem.getTag() : new NBTTagCompound();
               NBTTagList modifiers = new NBTTagList();
               NBTTagCompound dmg = new NBTTagCompound();
               dmg.set("AttributeName", new NBTTagString("generic.attackDamage"));
               dmg.set("Name", new NBTTagString("generic.attackDamage"));
               dmg.set("Amount", new NBTTagInt(1));
               dmg.set("Operation", new NBTTagInt(0));
               dmg.set("UUIDLeast", new NBTTagInt(894654));
               dmg.set("UUIDMost", new NBTTagInt(2872));
               dmg.set("Slot", new NBTTagString("mainhand"));
               NBTTagCompound speed = new NBTTagCompound();
               speed.set("AttributeName", new NBTTagString("generic.attackSpeed"));
               speed.set("Name", new NBTTagString("generic.attackSpeed"));
               speed.set("Amount", new NBTTagDouble(-1.2));
               speed.set("Operation", new NBTTagInt(0));
               speed.set("UUIDLeast", new NBTTagInt(894654));
               speed.set("UUIDMost", new NBTTagInt(2872));
               speed.set("Slot", new NBTTagString("mainhand"));
               modifiers.add(speed);
               modifiers.add(dmg);
               compound.set("AttributeModifiers", modifiers);
               nmsItem.setTag(compound);
               item = CraftItemStack.asBukkitCopy(nmsItem);
               shop.setItem(0, item);
               pl.openInventory(shop);

これで剣が追加できた...と思いましたが、攻撃力... +1 など書かれていて消そうと思い...
Flag削除
コード: 全て選択
ItemStack item = new ItemStack(Material.WOOD_SWORD);
               ItemMeta meta = item.getItemMeta();
               net.minecraft.server.v1_12_R1.ItemStack nmsItem= CraftItemStack.asNMSCopy(item);
               NBTTagCompound compound = (nmsItem.hasTag()) ? nmsItem.getTag() : new NBTTagCompound();
               NBTTagList modifiers = new NBTTagList();
               NBTTagCompound dmg = new NBTTagCompound();
               dmg.set("AttributeName", new NBTTagString("generic.attackDamage"));
               dmg.set("Name", new NBTTagString("generic.attackDamage"));
               dmg.set("Amount", new NBTTagInt(1));
               dmg.set("Operation", new NBTTagInt(0));
               dmg.set("UUIDLeast", new NBTTagInt(894654));
               dmg.set("UUIDMost", new NBTTagInt(2872));
               dmg.set("Slot", new NBTTagString("mainhand"));
               NBTTagCompound speed = new NBTTagCompound();
               speed.set("AttributeName", new NBTTagString("generic.attackSpeed"));
               speed.set("Name", new NBTTagString("generic.attackSpeed"));
               speed.set("Amount", new NBTTagDouble(-1.2));
               speed.set("Operation", new NBTTagInt(0));
               speed.set("UUIDLeast", new NBTTagInt(894654));
               speed.set("UUIDMost", new NBTTagInt(2872));
               speed.set("Slot", new NBTTagString("mainhand"));
               modifiers.add(speed);
               modifiers.add(dmg);
               compound.set("AttributeModifiers", modifiers);
               nmsItem.setTag(compound);
               item = CraftItemStack.asBukkitCopy(nmsItem);
               meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);  ←ここ
               item.setItemMeta(meta);  ←ここ
               shop.setItem(0, item);
               pl.openInventory(shop);

に追加をして、Flagを確認するものを適当に作ってみたら見事適用されててやった。と思ったのですが...
攻撃力1のはずなのにやけに強いなと思い色々なEntityに攻撃力調べてもらったら4のままでした。
そのため次は
Flag削除2
コード: 全て選択
ItemStack item = new ItemStack(Material.WOOD_SWORD);
               ItemMeta meta = item.getItemMeta();
               net.minecraft.server.v1_12_R1.ItemStack nmsItem= CraftItemStack.asNMSCopy(item);
               NBTTagCompound compound = (nmsItem.hasTag()) ? nmsItem.getTag() : new NBTTagCompound();
               NBTTagList modifiers = new NBTTagList();
               NBTTagCompound dmg = new NBTTagCompound();
               dmg.set("AttributeName", new NBTTagString("generic.attackDamage"));
               dmg.set("Name", new NBTTagString("generic.attackDamage"));
               dmg.set("Amount", new NBTTagInt(1));
               dmg.set("Operation", new NBTTagInt(0));
               dmg.set("UUIDLeast", new NBTTagInt(894654));
               dmg.set("UUIDMost", new NBTTagInt(2872));
               dmg.set("Slot", new NBTTagString("mainhand"));
               NBTTagCompound speed = new NBTTagCompound();
               speed.set("AttributeName", new NBTTagString("generic.attackSpeed"));
               speed.set("Name", new NBTTagString("generic.attackSpeed"));
               speed.set("Amount", new NBTTagDouble(-1.2));
               speed.set("Operation", new NBTTagInt(0));
               speed.set("UUIDLeast", new NBTTagInt(894654));
               speed.set("UUIDMost", new NBTTagInt(2872));
               speed.set("Slot", new NBTTagString("mainhand"));
               modifiers.add(speed);
               modifiers.add(dmg);
               compound.set("AttributeModifiers", modifiers);
               meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);  ←ここ
               item.setItemMeta(meta);  ←ここ
               nmsItem.setTag(compound);
               item = CraftItemStack.asBukkitCopy(nmsItem);
               shop.setItem(0, item);
               pl.openInventory(shop);

にしてみたら次はFlagが削除できていませんでした。
なので考えた結果
コード: 全て選択
nmsItem.setTag(compound);
               item = CraftItemStack.asBukkitCopy(nmsItem);

ここより↑もしくは↓にあるとどちらかが適用されていないということになったので、
これの解決方法を教えてください。
signal
ID:ad6fdda5
木を殴ってる
 
記事: 17
登録日時: 2018年9月25日(火) 20:48

1つ前へ

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

x