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

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

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

投稿記事by supermarisa6 » 2015年3月27日(金) 01:28

King(qpwakaba) さんが書きました:
他のエンティティにのせるときに、そのエンティティを記録しておいて、
スニークしたらそのエンティティに乗せる というのはどうでしょうか


HashMapを用いてPlayerとChickenを保存しイベント発生時に
プレイヤーが登録されていれば鶏に乗せるという処理を書いてみたのですが、

コード: 全て選択
   @EventHandler
   public void onPlayerToggleSneak(PlayerToggleSneakEvent event){
      if(event.isSneaking()){
         if(ride.containsKey(event.getPlayer())){
            Chicken ch = ride.get(event.getPlayer());
            if(ch == null || ch.isDead()){
               ride.remove(event.getPlayer());
               return;
            }
            event.getPlayer().setSneaking(false);
            ch.setPassenger(event.getPlayer());
         }
      }
   }


どうやらこのままだとShiftを押した状態で乗ってしまうので
乗せた瞬間にすぐ落ちてしまうようですね。
・BukkitRunnableを組んで、スニークを解除したら
・または、最初からスニークを解除した時に乗せる
と言うのも考えましたがどちらも、降りれないようにするには難しそうですね。
とりあえず、現在はスニーク解除時にもう一度乗せる処理を使っておこうと思います。

方法を考えていただきありがとうございました。
Bukkitプラグインや外部支援ツールなどちょくちょく作っているsupermarisa6です。
回答するとき、質問を理解せず答えて見当違いなことをよく言いってしまいます。(申し訳ないです)
supermarisa6
ID:dc55b18c
石炭掘り
 
記事: 153
登録日時: 2013年6月05日(水) 17:37
お住まい: 幻想郷

  • (PostNo.224058)

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

投稿記事by kabocchi » 2015年3月27日(金) 18:22

また質問させていただきます。
現在Yamlファイルについて色々やっているんですけど、他のサイト通りにやってもうまく動いてくれません。
記事が数年前の物なのも関係しているかも知れません。
ですので、どなたか現在使っているコードを見せて頂けませんか?
BukkitのForumをGoogle先生に頼らずとも読めるようになりたい
英語ワケワカンネ(;´Д`)
アバター
kabocchi
ID:a9963089
石掘り
 
記事: 98
登録日時: 2013年8月10日(土) 15:52

  • (PostNo.224104)

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

投稿記事by ゲスト » 2015年3月27日(金) 21:21

>kabocchiさん
http://www.jias.jp/blog/?77
これでだめならどういうコード書いてどういうエラーが出るのか明確に。
ゲスト
ID:77f025c5
 

  • (PostNo.224123)

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

投稿記事by Mon_chi » 2015年3月27日(金) 22:39

supermarisa6 さんが書きました:Vehicle以外の降りた時の処理について(Bukkit1.7.2-R0.3)

現在、空に向かって羽を右クリックすると、その場に鶏を召喚し
プレイヤーをその上に乗せるというプラグインを作っているのですが、
Shiftキーを押すと当然ながら鶏から下りてしまいます。
これを降りれないようにしたいのですが、VehicleExitEventはMinecartやPigと言った
バニラで乗れるようなEntityしか感知できませんでした。

どのようにすれば鶏から降りれないように、または降りるイベントを処理できるようになるのでしょうか?
返信お待ちしております。

(現在鶏の上にプレイヤーを乗せるのに使っているコードです。)
コード: 全て選択
   @EventHandler
   public void onPlayerInteracte(PlayerInteractEvent event){
      if(event.getAction().equals(Action.RIGHT_CLICK_AIR) && event.getPlayer().getItemInHand() != null && event.getPlayer().getItemInHand().getType().equals(Material.FEATHER)){
         if(event.getPlayer().getVehicle() != null && event.getPlayer().getVehicle().getType().equals(EntityType.CHICKEN)){
            event.getPlayer().sendMessage("You are riding now");
         }else{
            Chicken ch = (Chicken)event.getPlayer().getWorld().spawnEntity(event.getPlayer().getEyeLocation(), EntityType.CHICKEN);
            ch.setAdult();
            ch.setPassenger(event.getPlayer());
         }
      }
   }


Spigotに乗り換えることができるならば
https://hub.spigotmc.org/javadocs/spigo ... Event.html
これはどうでしょうか?
Mon_chi
ID:1cb42547
鉄鉱掘り
 
記事: 280
登録日時: 2014年11月20日(木) 19:58

  • (PostNo.224193)

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

投稿記事by kabocchi » 2015年3月28日(土) 11:26

ゲスト さんが書きました:>kabocchiさん
http://www.jias.jp/blog/?77
これでだめならどういうコード書いてどういうエラーが出るのか明確に。

ご回答ありがとうございます
説明不足ですみません。
正確には、config.ymlには書き込むことが出来るのですが、自分で新たにYamlファイルを作り、そこに書き込むことが出来ません。
前回の質問からまた調べていたのですが、新しいYamlファイルの作り方のコードを載せている人それぞれ違うコードだったので、余計に混乱しています。
Yamlファイルの作り方は色々方法があるのでしょうか?

長文失礼しました
BukkitのForumをGoogle先生に頼らずとも読めるようになりたい
英語ワケワカンネ(;´Д`)
アバター
kabocchi
ID:a9963089
石掘り
 
記事: 98
登録日時: 2013年8月10日(土) 15:52

  • (PostNo.224232)

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

投稿記事by ゲスト » 2015年3月28日(土) 14:55

>自分で新たにYamlファイルを作り、そこに書き込むことが出来ません。
コードもなくエラーもなくでは原因調べられないでしょ。
とりあえずYAMLファイルを新規保存するコード書いておくから参考にしてごらん。

try{
// 設定データクラスを作る
FileConfiguration conf=new YamlConfiguration();

// テストデータを投入
conf.set("key","value");

// 保存(プラグインのデータフォルダの下にtest.ymlというファイルを作る)
conf.save(getDataFolder() + File.separator + "test.yml");

Bukkit.broadcastMessage("保存したよ");
}catch(Exception ex){
// エラー処理はてきとう
System.out.println(e);
}
ゲスト
ID:98252ed0
 

  • (PostNo.224242)

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

投稿記事by kabocchi » 2015年3月28日(土) 15:28

ゲスト さんが書きました:>自分で新たにYamlファイルを作り、そこに書き込むことが出来ません。
コードもなくエラーもなくでは原因調べられないでしょ。
とりあえずYAMLファイルを新規保存するコード書いておくから参考にしてごらん。

try{
// 設定データクラスを作る
FileConfiguration conf=new YamlConfiguration();

// テストデータを投入
conf.set("key","value");

// 保存(プラグインのデータフォルダの下にtest.ymlというファイルを作る)
conf.save(getDataFolder() + File.separator + "test.yml");

Bukkit.broadcastMessage("保存したよ");
}catch(Exception ex){
// エラー処理はてきとう
System.out.println(e);
}


すみません
サンプルコードを見せてもらって自分で考えようと思ってたのと、現在PCの方がネットに繋がっていない為、スマホでコードを手打ちするのはちょっと時間がかかりすぎるのでコードを載せませんでした
丁度数分前に工事が終わりましたので次回からはコードやエラーも合わせて質問します。
BukkitのForumをGoogle先生に頼らずとも読めるようになりたい
英語ワケワカンネ(;´Д`)
アバター
kabocchi
ID:a9963089
石掘り
 
記事: 98
登録日時: 2013年8月10日(土) 15:52

  • (PostNo.224589)

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

投稿記事by kabocchi » 2015年3月29日(日) 21:39

エラーを見ても良く分からなかったので質問させていただきます。
PlayerをKillした時にKill数とKillされた側のDeath数を増やすようにしたいんですけど、Killするとエラーが出ます。
多分ですが、エラーのこの部分が関係していると思います。
コード: 全て選択
Caused by: java.lang.NullPointerException
        at me.LemonCrystal.KillCounter.PlayerKill.KillPlayer(PlayerKill.java:24) ~[?:?]

以下全コード

Main.java
コード: 全て選択
package me.LemonCrystal.KillCounter;

import java.io.File;

import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.event.Listener;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener {

   FileConfiguration Kills = new YamlConfiguration();

   public Main plugin;

   public void registerEvents() {
      PluginManager pm = getServer().getPluginManager();
      pm.registerEvents(new SetPlayerName(this), this);
      pm.registerEvents(new PlayerKill(this), this);
   }

   public void onEnable() {

      registerEvents();
      saveDefaultConfig();
      saveCount();
   }

   public void onDisable() {
      saveCount();
   }

   public void saveCount() {
      try {
         Kills.save(getDataFolder() + File.separator + "KillCount.yml");
      } catch (Exception e) {
         System.out.println(e);
      }
   }

}


PlayerKill.java
コード: 全て選択
package me.LemonCrystal.KillCounter;

import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;

public class PlayerKill implements Listener {

   FileConfiguration Kills = new YamlConfiguration();

   private Main plugin;
   public PlayerKill(Main plugin) {
      this.plugin = plugin;
   }

   @EventHandler
   public void KillPlayer(EntityDeathEvent e) {
      if (e.getEntity() instanceof Player) {
         Player dead = (Player) e.getEntity();
         Player killer = dead.getKiller();
         int DDeath = (int) plugin.Kills.get("Players." + dead + ".Death");
         int DKill = (int) plugin.Kills.get("Players." + dead + ".Kill");
         plugin.Kills.set("Players." + dead + ".Death", DDeath + 1);
         plugin.Kills.set("Players." + dead + ".Kill/Death", DKill / DDeath);
         if (killer instanceof Player) {
            int KDeath = (int) plugin.Kills.get("Players." + killer + ".Death");
            int KKill = (int) plugin.Kills.get("Players." + killer + ".Kill");
            plugin.Kills.set("Players." + killer + ".Kill", KKill + 1);
            plugin.Kills.set("Players." + killer + ".Kill/Death", KKill / KDeath);
         }
      }
   }
}


SetPlayerName.java
コード: 全て選択
package me.LemonCrystal.KillCounter;

import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

public class SetPlayerName implements Listener {

   FileConfiguration Kills = new YamlConfiguration();

   private Main plugin;
   public SetPlayerName(Main plugin) {
      this.plugin = plugin;
   }

   @EventHandler(priority = EventPriority.HIGHEST)
   public void onJoin(PlayerJoinEvent e) {
      String name = e.getPlayer().getName();
      if (!(e.getPlayer().hasPlayedBefore())) {
         plugin.Kills.set("Players." + name + ".Kill", 0);
         plugin.Kills.set("Players." + name + ".Death", 0);
         plugin.Kills.set("Players." + name + ".Kill/Death", 0);
         plugin.saveCount();
      }
   }

}


config.yml
コード: 全て選択
KillCount: true


plugin.yml
コード: 全て選択
name: KillCounter
main: me.LemonCrystal.KillCounter.Main
version: 1.0
author: kabocchi


KillCount.yml
コード: 全て選択
Players:
  till_apparition:
    Kill: 0
    Death: 0
    Kill/Death: 0
  LemonCrystal:
    Kill: 0
    Death: 0
    Kill/Death: 0
BukkitのForumをGoogle先生に頼らずとも読めるようになりたい
英語ワケワカンネ(;´Д`)
アバター
kabocchi
ID:8c0947f7
石掘り
 
記事: 98
登録日時: 2013年8月10日(土) 15:52

  • (PostNo.224611)

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

投稿記事by ucchy » 2015年3月29日(日) 22:55

kabocchiさん、

問題になっているのは、予測されているとおり、その部分でしょう。
エラーメッセージは、「PlayerKill.java の 24行目でエラー終了した」と言っています。
該当部分はここですね。

コード: 全て選択
   int DDeath = (int) plugin.Kills.get("Players." + dead + ".Death");
   int DKill = (int) plugin.Kills.get("Players." + dead + ".Kill");


おそらく、YamlConfiguration の plugin.Kills から
「"Players." + dead + ".Death"」セクションの値を取得しようとして、
見つからなかったからnullになっており、
それを (int) でキャストしようとしてNullPointerExceptionが発生しているようです。

たとえば、次のようにするといいんじゃないでしょうか。

コード: 全て選択
   int DDeath = plugin.Kills.getInt("Players." + dead + ".Death", 0);
   int DKill = plugin.Kills.getInt("Players." + dead + ".Kill", 0);


get メソッドを getInt メソッドに変更して、(int) キャストは外しました。
また、メソッドの2番めの引数に「0」をつけています。
コレは、YamlConfiguration に指定した値が無かったときに、代わりに返してくれるデフォルト値です。
この場合、"Players." + dead + ".Death" が無かったら(エラーにならずに) 0 が返されるわけです。

試してみてくださいね。
――お知らせ――
パソコンが壊れたため、買い替えるまで、プラグイン開発作業はお休みしています。簡単な質問程度ならお答えいたします。
――お知らせ――
アバター
ucchy
ID:977198e1
ラピスラズリ収集家
 
記事: 1181
登録日時: 2012年11月07日(水) 00:08

  • (PostNo.224668)

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

投稿記事by kabocchi » 2015年3月30日(月) 09:14

ucchy さんが書きました:
kabocchiさん、

問題になっているのは、予測されているとおり、その部分でしょう。
エラーメッセージは、「PlayerKill.java の 24行目でエラー終了した」と言っています。
該当部分はここですね。

コード: 全て選択
   int DDeath = (int) plugin.Kills.get("Players." + dead + ".Death");
   int DKill = (int) plugin.Kills.get("Players." + dead + ".Kill");


おそらく、YamlConfiguration の plugin.Kills から
「"Players." + dead + ".Death"」セクションの値を取得しようとして、
見つからなかったからnullになっており、
それを (int) でキャストしようとしてNullPointerExceptionが発生しているようです。

たとえば、次のようにするといいんじゃないでしょうか。

コード: 全て選択
   int DDeath = plugin.Kills.getInt("Players." + dead + ".Death", 0);
   int DKill = plugin.Kills.getInt("Players." + dead + ".Kill", 0);


get メソッドを getInt メソッドに変更して、(int) キャストは外しました。
また、メソッドの2番めの引数に「0」をつけています。
コレは、YamlConfiguration に指定した値が無かったときに、代わりに返してくれるデフォルト値です。
この場合、"Players." + dead + ".Death" が無かったら(エラーにならずに) 0 が返されるわけです。

試してみてくださいね。


ありがとうございます。
修正してこうなりました。

PlayerKill.java
コード: 全て選択
package me.LemonCrystal.KillCounter;

import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;

public class PlayerKill implements Listener {

   FileConfiguration Kills = new YamlConfiguration();

   private Main plugin;
   public PlayerKill(Main plugin) {
      this.plugin = plugin;
   }

   @EventHandler
   public void KillPlayer(EntityDeathEvent e) {
      if (e.getEntity() instanceof Player) {
         Player dead = (Player) e.getEntity();
         Player killer = dead.getKiller();
         int DDeath = plugin.Kills.getInt("Players." + dead + ".Death", 0);
         int DKill = plugin.Kills.getInt("Players." + dead + ".Kill", 0);
         plugin.Kills.set("Players." + dead + ".Death", DDeath + 1);
         if (!(DKill == 0)) {
            plugin.Kills.set("Players." + dead + ".Kill/Death", DKill / DDeath);
         }
         if (killer instanceof Player) {
            int KDeath = plugin.Kills.getInt("Players." + killer + ".Death", 0);
            int KKill = plugin.Kills.getInt("Players." + killer + ".Kill", 0);
            plugin.Kills.set("Players." + killer + ".Kill", KKill + 1);
            if (KDeath == 0) {
               plugin.Kills.set("Players." + killer + ".Kill/Death", KKill);
            } else {
               plugin.Kills.set("Players." + killer + ".Kill/Death", KKill / KDeath);
            }
         }
      }
      plugin.saveCount();
   }
}



無事エラーはなくなりました、が。
新たな問題が出てきました。
よくよく考えてみると見つからないと出ていた値は事前に用意している筈なんです。
で、テストをしていてKillCount.ymlを見てみるとこうなっていました。

KillCount.yml

Players:
LemonCrystal:
Kill: 0
Death: 0
Kill/Death: 0
till_apparition:
Kill: 0
Death: 0
Kill/Death: 0
CraftPlayer{name=till_apparition}:
Death: 3
Kill: 1
Kill/Death: 0
CraftPlayer{name=LemonCrystal}:
Kill: 3
Death: 2
Kill/Death: 1


事前に用意した値が使われることなく新たに生成されていました。
この場合、どうすればちゃんと望み道理の場所を参照出来るのでしょうか?
どなたか教えて下さい。
BukkitのForumをGoogle先生に頼らずとも読めるようになりたい
英語ワケワカンネ(;´Д`)
アバター
kabocchi
ID:8c0947f7
石掘り
 
記事: 98
登録日時: 2013年8月10日(土) 15:52

  • (PostNo.224728)

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

投稿記事by takuyan020 » 2015年3月30日(月) 15:54

kabocchi さんが書きました:無事エラーはなくなりました、が。
新たな問題が出てきました。
よくよく考えてみると見つからないと出ていた値は事前に用意している筈なんです。
で、テストをしていてKillCount.ymlを見てみるとこうなっていました。


名前の部分に違う文字が入っているってことは、
違うものを入れてるってことです
結果にちゃんと、おかしな部分が出ているのですから、
逆にコードをたどれば見えてくるはずです

Main.java 内
コード: 全て選択
Player dead = (Player) e.getEntity();
int DDeath = (int) plugin.Kills.get("Players." + dead + ".Death");
int DKill = (int) plugin.Kills.get("Players." + dead + ".Kill");
plugin.Kills.set("Players." + dead + ".Death", DDeath + 1);
plugin.Kills.set("Players." + dead + ".Kill/Death", DKill / DDeath);

Player killer = dead.getKiller();
int KDeath = (int) plugin.Kills.get("Players." + killer + ".Death");
int KKill = (int) plugin.Kills.get("Players." + killer + ".Kill");
plugin.Kills.set("Players." + killer + ".Kill", KKill + 1);
plugin.Kills.set("Players." + killer + ".Kill/Death", KKill / KDeath);


SetPlayerName.java 内
コード: 全て選択
String name = e.getPlayer().getName();
plugin.Kills.set("Players." + name + ".Kill", 0);
plugin.Kills.set("Players." + name + ".Death", 0);
plugin.Kills.set("Players." + name + ".Kill/Death", 0);
《 主な生息場所 》 ※社畜業が忙しく思うように動けませんが、細々と活動してまいります
非公式フォーラム内記事:〈自作建築系 plugin 集 / 影mod 関連 / Sponge 情報※さぼり中〉
外部:ニコ動コミュ〈co2291695〉 / Sponge ローカライズ〈Crowdin : Sponge Docs〉 ※復帰したい翻訳者増えてくれー
アバター
takuyan020
ID:6ca2af0f
石掘り
 
記事: 132
登録日時: 2012年3月02日(金) 19:49

  • (PostNo.224738)

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

投稿記事by kabocchi » 2015年3月30日(月) 16:28

takuyan020 さんが書きました:
kabocchi さんが書きました:無事エラーはなくなりました、が。
新たな問題が出てきました。
よくよく考えてみると見つからないと出ていた値は事前に用意している筈なんです。
で、テストをしていてKillCount.ymlを見てみるとこうなっていました。


名前の部分に違う文字が入っているってことは、
違うものを入れてるってことです
結果にちゃんと、おかしな部分が出ているのですから、
逆にコードをたどれば見えてくるはずです

Main.java 内
コード: 全て選択
Player dead = (Player) e.getEntity();
int DDeath = (int) plugin.Kills.get("Players." + dead + ".Death");
int DKill = (int) plugin.Kills.get("Players." + dead + ".Kill");
plugin.Kills.set("Players." + dead + ".Death", DDeath + 1);
plugin.Kills.set("Players." + dead + ".Kill/Death", DKill / DDeath);

Player killer = dead.getKiller();
int KDeath = (int) plugin.Kills.get("Players." + killer + ".Death");
int KKill = (int) plugin.Kills.get("Players." + killer + ".Kill");
plugin.Kills.set("Players." + killer + ".Kill", KKill + 1);
plugin.Kills.set("Players." + killer + ".Kill/Death", KKill / KDeath);


SetPlayerName.java 内
コード: 全て選択
String name = e.getPlayer().getName();
plugin.Kills.set("Players." + name + ".Kill", 0);
plugin.Kills.set("Players." + name + ".Death", 0);
plugin.Kills.set("Players." + name + ".Kill/Death", 0);


あ、名前を取り出してないのか!
改めてちゃんと読むことが重要と言う事に気が付きました。
ありがとうございます。
miyabi@運営チーム[運営宛のメッセージ(PM)を作成] 前回の投稿もですが、QuoteとSpoilerの扱い方がおかしく、表示のレイアウトが崩れていたので修正しました。
記述したBBCodeとは逆の順序で閉じていく必要がありますのでご注意ください。
BukkitのForumをGoogle先生に頼らずとも読めるようになりたい
英語ワケワカンネ(;´Д`)
アバター
kabocchi
ID:8c0947f7
石掘り
 
記事: 98
登録日時: 2013年8月10日(土) 15:52

  • (PostNo.225059)

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

投稿記事by タケノコ » 2015年3月31日(火) 22:19

プラグイン製作依頼です。
ブロックに触れるとある場所にtpするという
プラグインを製作、もしくは教えて戴けないでしょうか?
コマンドでは無理だと言われたので・・・
バージョンは1.7です。
説明が至らないとこがありましたら
連絡をお願いします。
どうぞよろしくお願いします!
タケノコ
ID:49a700b3
 

  • (PostNo.225073)

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

投稿記事by supermarisa6 » 2015年3月31日(火) 22:54

タケノコ さんが書きました:プラグイン製作依頼です。
ブロックに触れるとある場所にtpするという
プラグインを製作、もしくは教えて戴けないでしょうか?
コマンドでは無理だと言われたので・・・
バージョンは1.7です。
説明が至らないとこがありましたら
連絡をお願いします。
どうぞよろしくお願いします!


このトピックのタイトルをちゃんと確認しましたか?
ここは「【総合】トピック立てるまでもない質問【Bukkit Plugin制作」です。
なので違う場所で質問しなおすことをお勧めします。
(こちらの記事は削除したほうがよいと思います。)

有名なプラグインで「ScriptBlock」と言うプラグインがいっているものに近いと思いますが、
すぐに質問する前に「Bukkit ブロック コマンド」などで自分のやりたいことを検索するということも大切です。
Bukkitプラグインや外部支援ツールなどちょくちょく作っているsupermarisa6です。
回答するとき、質問を理解せず答えて見当違いなことをよく言いってしまいます。(申し訳ないです)
supermarisa6
ID:dc55b18c
石炭掘り
 
記事: 153
登録日時: 2013年6月05日(水) 17:37
お住まい: 幻想郷

  • (PostNo.225310)

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

投稿記事by タケノコ » 2015年4月01日(水) 21:40

申し訳ありません。
教えていただきありがとうございました。
以後気をつけます
タケノコ
ID:49a700b3
 

  • (PostNo.226009)

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

投稿記事by jack_basukeraihu » 2015年4月05日(日) 09:56

Spigot1649とBukkit-1.7.9R0.2を外部アーカイブに追加してプラグインを作っています。
コード: 全て選択
player.spigot().setCollidesWithEntities(false);

このメソッドを使ってプレイヤーがMOBを邪魔出来ないようにしたいのですが、Bukkitのjarの優先順位を上げるとここの部分で「メソッド spigot() は型 Player で未定義です」
とエラーが出てしまい困っています。
Spigotの優先順位を上げればこの部分のエラーは直りますが、そうするとgetHealth()メソッドで「メソッド getHealth() は型 Player であいまいです」とエラーになってしまいます。
現在はspigot()メソッドを諦めて作っていますが、どうしたら両方使えるように鳴りますか?
■普段はYoutubeとニコ生でマイクラ放送を行っています■

ニコ生     ★Youtube


プラグイン制作依頼を受け付けています 依頼の規模によって無料/有料変わります
プラグインを作って欲しいという方は、以下の連絡先までお問い合わせください
Skype: basukeraihu
Twitter: @jack_niconico
Discord: じゃっく#3207
アバター
jack_basukeraihu
ID:98f19e70
石炭掘り
 
記事: 182
登録日時: 2013年2月15日(金) 21:36
お住まい: 山岳バイオーム

  • (PostNo.226016)

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

投稿記事by Mon_chi » 2015年4月05日(日) 10:30

jack_basukeraihu さんが書きました:Spigot1649とBukkit-1.7.9R0.2を外部アーカイブに追加してプラグインを作っています。
コード: 全て選択
player.spigot().setCollidesWithEntities(false);

このメソッドを使ってプレイヤーがMOBを邪魔出来ないようにしたいのですが、Bukkitのjarの優先順位を上げるとここの部分で「メソッド spigot() は型 Player で未定義です」
とエラーが出てしまい困っています。
Spigotの優先順位を上げればこの部分のエラーは直りますが、そうするとgetHealth()メソッドで「メソッド getHealth() は型 Player であいまいです」とエラーになってしまいます。
現在はspigot()メソッドを諦めて作っていますが、どうしたら両方使えるように鳴りますか?

にわかですがspigot1649を外部アーカイブに追加しているならbukkitは追加する必要がないのでは
Mon_chi
ID:1cb42547
鉄鉱掘り
 
記事: 280
登録日時: 2014年11月20日(木) 19:58

  • (PostNo.226019)

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

投稿記事by Yami » 2015年4月05日(日) 10:36

jack_basukeraihu さんが書きました:Spigot1649とBukkit-1.7.9R0.2を外部アーカイブに追加してプラグインを作っています。
コード: 全て選択
player.spigot().setCollidesWithEntities(false);

このメソッドを使ってプレイヤーがMOBを邪魔出来ないようにしたいのですが、Bukkitのjarの優先順位を上げるとここの部分で「メソッド spigot() は型 Player で未定義です」
とエラーが出てしまい困っています。
Spigotの優先順位を上げればこの部分のエラーは直りますが、そうするとgetHealth()メソッドで「メソッド getHealth() は型 Player であいまいです」とエラーになってしまいます。
現在はspigot()メソッドを諦めて作っていますが、どうしたら両方使えるように鳴りますか?

playerの部分を((Damageable)player)とかにすればいけたと思います
Yami
ID:f4facebd
鉄鉱掘り
 
記事: 267
登録日時: 2012年10月20日(土) 21:34

  • (PostNo.226025)

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

投稿記事by Mon_chi » 2015年4月05日(日) 12:08

VOIDダメージで死亡した際に最後に攻撃したプレイヤーを取得したいのですがどのようにすればいいのでしょうか?
EntityDamageByEntityEventが発生するたびにMetaData等に保存するしかないのでしょうか?

Spigot 1.8.3-R0.1環境です。
Mon_chi
ID:1cb42547
鉄鉱掘り
 
記事: 280
登録日時: 2014年11月20日(木) 19:58

  • (PostNo.226084)

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

投稿記事by ucchy » 2015年4月05日(日) 16:19

FireMoonさん、

最後に攻撃した人を取得するには、
Player.getKiller()
を実行するだけです。
これは、VOIDに落とされて死亡した場合でも、最後に攻撃した人が取得される仕組みになっています。簡単ですね!


ちなみに、EntityDamageByEntityEvent は、エンティティがエンティティからダメージを受けた時に発生します。
プレイヤーはエンティティですが、奈落はエンティティではありませんから、EntityDamageByEntityEvent は呼び出されません。

EntityDamageEvent で、event.getCause() が DamageCause.VOID に一致することを確認するとよいでしょう。
――お知らせ――
パソコンが壊れたため、買い替えるまで、プラグイン開発作業はお休みしています。簡単な質問程度ならお答えいたします。
――お知らせ――
アバター
ucchy
ID:977198e1
ラピスラズリ収集家
 
記事: 1181
登録日時: 2012年11月07日(水) 00:08

1つ前へ次へ

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

x