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

フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999

返信する

CAPTCHA 認証コード
表示されたコードを正確に入力してください。各文字は大文字・小文字の区別があります。

BBCode: OFF
スマイリー: OFF
トピックのレビュー
   

ファイルを添付します

展開ビュー トピックのレビュー: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

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

ここより↑もしくは↓にあるとどちらかが適用されていないということになったので、
これの解決方法を教えてください。

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

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

signalさんありがとうございます。行ってみます

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...でエンティティを取得できるのですね。知りませんでした。ありがとうございます。

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ここです

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

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

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

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

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


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

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に値を設定してあげて下さい

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の名前があっていない可能性がある。
どちらが正しいのでしょうか?
それともエンティティをクリックではなく違うものにしたほうがいいのか?
一応お願いします

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はどの様に記述されていますでしょうか?

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に問題があるのでしょうか?

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

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.まで打ち込んでみると、補完機能のあるエディタでしたら適切なパッケージを候補に挙げてくれると思います。

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

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

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

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

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

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

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の問題かと思われます

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は認識されています。
これはまた全く別の原因で認識されないのでしょうか。

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型じゃないと思い↑をやってみましたがそれもできずにもうお手上げ状態です。)

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

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

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の場所に作ってあると見えました。

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

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

プログラミング初心者です。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つあるので一つだけ書いてあります。

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

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

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

spuash918 さんが書きました:
signal さんが書きました:自己解決しました。
そして、最後にあったクリックしたらイベントを起こすのをアイテム名で指定するにはどうしたらいいですか?
コード: 全て選択
if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§r"+player.getPlayer().getDisplayName()+"の所持金"))
          {
             player.getPlayer().sendMessage("a");
          }

一応考えた結果こうなりましたが、これだと到達不能コードと出て出来ませんでした。

あなたの質問にはいくつかの問題があります
1.「自己解決しました。」=>何がですか

2.「最後にあった」=>どこのでしょうか

3.「e.getCurrentItem()(以下略)」=>eが何を示しているのかがわかりません(InventoryClickEvent?)

4.「到達不能コードと出て出来ませんでした」=>コピペして「e」や「player」を適当に割り当てた結果そのようなメッセージは出ませんでした そもそもifまでたどり着けていないのでは?

とりあえず1,2,3を明確にし、ソースを抜粋するのであればせめてメソッド単位で載せてください

1,2は編集する前を見てなければわからなかったですね。ごめんなさい。
解決したというのはインベントリのアイテムを動かさなくすることです。
一応これからこの質問を減らすためにsrc貼っておきます
解決したもの 
コード: 全て選択
@EventHandler
    public boolean onInventoryTouch(InventoryClickEvent event)
    {
       if(event.isRightClick() || event.isLeftClick()|| event.getAction()==InventoryAction.HOTBAR_SWAP || event.getAction() == InventoryAction.HOTBAR_MOVE_AND_READD || event.getAction() == InventoryAction.DROP_ONE_SLOT ||event.getAction() == InventoryAction.DROP_ALL_SLOT)
       {
          if(event.getRawSlot()==8)
          {
             player.closeInventory();
          }
          event.setCancelled(true);
       }
      return false;
    }

↑サバイバルを想定して作っています。


ifまでたどりつけていないということでifの場所を変えたら無事できました。しかし、これが実行されなかったので今度はこちらをお願いします。
コード: 全て選択
public void Onclick(InventoryClickEvent e, Player player)
    {
       if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§r"+player.getPlayer().getDisplayName()+"の所持金"))
       {
          player.getPlayer().sendMessage("a");
       }else
       {
          System.out.println("A");
       }
    }

一応なのでエラーコードも
コード: 全て選択
Could not pass event InventoryClickEvent to Menu v1.0.0
org.bukkit.event.EventException: null
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.12.2.jar:git-Spigot-2cf50f0-8166d17]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.12.2.jar:git-Spigot-2cf50f0-8166d17]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:500) [spigot-1.12.2.jar:git-Spigot-2cf50f0-8166d17]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:485) [spigot-1.12.2.jar:git-Spigot-2cf50f0-8166d17]
        at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1889) [spigot-1.12.2.jar:git-Spigot-2cf50f0-8166d17]
        at net.minecraft.server.v1_12_R1.PacketPlayInWindowClick.a(SourceFile:33) [spigot-1.12.2.jar:git-Spigot-2cf50f0-8166d17]
        at net.minecraft.server.v1_12_R1.PacketPlayInWindowClick.a(SourceFile:10) [spigot-1.12.2.jar:git-Spigot-2cf50f0-8166d17]
        at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.12.2.jar:git-Spigot-2cf50f0-8166d17]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_181]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_181]
        at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [spigot-1.12.2.jar:git-Spigot-2cf50f0-8166d17]
        at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:748) [spigot-1.12.2.jar:git-Spigot-2cf50f0-8166d17]
        at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [spigot-1.12.2.jar:git-Spigot-2cf50f0-8166d17]
        at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot-1.12.2.jar:git-Spigot-2cf50f0-8166d17]
        at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot-1.12.2.jar:git-Spigot-2cf50f0-8166d17]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_181]
Caused by: java.lang.NullPointerException
        at main.Main.Onclick(Main.java:133) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_181]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_181]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_181]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_181]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.12.2.jar:git-Spigot-2cf50f0-8166d17]
        ... 15 more

自分で試行錯誤しながらやってたらできました。
ありがとうございます。

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

投稿記事 by spuash918 » 2018年10月20日(土) 21:44

signal さんが書きました:自己解決しました。
そして、最後にあったクリックしたらイベントを起こすのをアイテム名で指定するにはどうしたらいいですか?
コード: 全て選択
if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§r"+player.getPlayer().getDisplayName()+"の所持金"))
          {
             player.getPlayer().sendMessage("a");
          }

一応考えた結果こうなりましたが、これだと到達不能コードと出て出来ませんでした。

あなたの質問にはいくつかの問題があります
1.「自己解決しました。」=>何がですか

2.「最後にあった」=>どこのでしょうか

3.「e.getCurrentItem()(以下略)」=>eが何を示しているのかがわかりません(InventoryClickEvent?)

4.「到達不能コードと出て出来ませんでした」=>コピペして「e」や「player」を適当に割り当てた結果そのようなメッセージは出ませんでした そもそもifまでたどり着けていないのでは?

とりあえず1,2,3を明確にし、ソースを抜粋するのであればせめてメソッド単位で載せてください

ページトップ

x