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

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

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

投稿記事by うましゅー » 2016年12月26日(月) 23:28

リオン さんが書きました:setCollidableというメソッドで変えられるみたいで試してみたのですが
Mobに設定したところMob同士の衝突判定はなくなったのですがPlayerとは衝突、
Playerに設定しても効果が見られませんでした。
上記問題について

自分が調べた範囲ではスコアボードで、「CollisionRule」を「Never」に設定したチームを作り、
ログイン時にプレイヤーをそのチームに参加させることで解決しているようです。
コード: 全て選択
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
import org.bukkit.scoreboard.Team;
import org.bukkit.scoreboard.Team.Option;
import org.bukkit.scoreboard.Team.OptionStatus;

public class NCMain extends JavaPlugin implements Listener {
   ScoreboardManager manager = Bukkit.getScoreboardManager();
   Scoreboard board = manager.getMainScoreboard();
   Team defaultTeam;

   @Override
   public void onEnable(){
      getLogger().info("NoCollisionを起動しています。");

      //リスナーの登録
      getServer().getPluginManager().registerEvents(this, this);

      //テスト用スコアボードの作成
      defaultTeam = board.getTeam("default");
      if (defaultTeam == null) {
         defaultTeam = board.registerNewTeam("default");
         defaultTeam.setOption(Option.COLLISION_RULE, OptionStatus.NEVER);
         //チームに所属していると、デフォルトで透明のエフェクトを使っている同チームが見えるので見えなくする
         defaultTeam.setCanSeeFriendlyInvisibles(false);
      }
   }

   @Override
   public void onDisable(){
      getLogger().info("NoCollisionを終了します。");
   }

   @EventHandler
   public void onJoin(PlayerJoinEvent event){
      Player player = event.getPlayer();
      Team team = board.getEntryTeam(player.getName());
      //既に別のチームに所属しているのであればそのままのチームに
      if (team != null)
         return;
      defaultTeam.addEntry(player.getName());
   }

   @EventHandler
   public void onLeave(PlayerQuitEvent event){
      Player player = event.getPlayer();
      Team team = board.getEntryTeam(player.getName());
      //defaultチームに所属しているのはそのまま、所属しているなら削除
      if (team != defaultTeam)
         return;
      defaultTeam.removeEntry(player.getName());
   }

   //Mobのスポーン時に当たり判定をなくすために同じくDefaultに入れる
   //Mobは死んだ時点でTeamから消えるため、チームからの離脱処理は不要
   @EventHandler
   public void onMobSpawn(CreatureSpawnEvent event){
      Team defa = board.getTeam("default");
      defa.addEntry(event.getEntity().getUniqueId().toString());
   }
}


おかげさまでできました。ありがとうございます。

少し別の案件の質問となりますが、下のコードで時計を持った状態で右クリックした際に周りのプレイヤーを見えないように、もう一度右クリックした際に表示しなおすようにしたいのですが、エラーを吐かずにうまく作動しません。
コード: 全て選択
   @EventHandler
   public void Watch(PlayerInteractEvent event) {
      Player player = event.getPlayer();
      String uuid = player.getUniqueId().toString();
      PlayerInventory inventory = player.getInventory();
      ItemStack WATCH = new ItemStack(Material.WATCH);
      if(inventory.getItemInMainHand() == WATCH){
         if(! hide.contains(uuid)){
            player.hidePlayer((Player) Bukkit.getOnlinePlayers());
            player.sendMessage(ChatColor.GREEN+"[Athletic]"+
                     ChatColor.WHITE+"プレイヤーの表示を消しました。");
            hide.add(uuid);
         }else{
            player.showPlayer((Player) Bukkit.getOnlinePlayers());
            player.sendMessage(ChatColor.GREEN+"[Athletic]"+
                  ChatColor.WHITE+"プレイヤーを表示しました。");
            hide.remove(uuid);
         }
      }
   }


大体予想はついていて、if(inventory.getItemInMainHand() == WATCH){の部分なのでしょうが、手に持ったときにそのitemが時計だったときの判定はどのようにすればいいのでしょうか…
ニコニコ生放送にて生主をしています。
ついでにPluginも作ってます(新米)
アバター
うましゅー
ID:50149204
大工さん
 
記事: 49
登録日時: 2013年3月30日(土) 09:23

  • (PostNo.291484)

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

投稿記事by Lemon18 » 2016年12月26日(月) 23:56

うましゅー さんが書きました:大体予想はついていて、if(inventory.getItemInMainHand() == WATCH){の部分なのでしょうが、手に持ったときにそのitemが時計だったときの判定はどのようにすればいいのでしょうか…


ItemStack#getType()でMaterialが返ってくるのでif (inventory.getItemInMainHand().getType() == Material.WATCH)にすればできます。

あと気になるのがBukkit.getOnlinePlayers()はCollection<Player>が返るので、拡張for文でプレイヤーを回してhideやshowしないといけないと思います。

それと、hideしている状態で新しいプレイヤーが参加するとその人は見えてしまうので別のイベントで処理しないといけないですね。
Bukkitプラグインとか作ったり作らなかったり。
「どのOSでも使える」を目標に日本語入力ツールを作っています。良ければ見てください。
http://forum.minecraftuser.jp/viewtopic.php?f=36&t=31671


Twitter: https://twitter.com/Lemon1806
Minecraft: Applemon
Lemon18
ID:b66be5f3
石掘り
 
記事: 85
登録日時: 2015年6月05日(金) 22:42

  • (PostNo.291525)

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

投稿記事by koucha2525 » 2016年12月27日(火) 12:52

プラグイン作成初心者のものですが

ワールドの指定したブロックをエアーに置き換えるってできますか?
koucha2525
ID:44f649d6
水から上がったとこ
 
記事: 9
登録日時: 2016年10月16日(日) 09:33

  • (PostNo.291546)

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

投稿記事by xNiwatorix » 2016年12月27日(火) 15:42

koucha2525 さんが書きました:プラグイン作成初心者のものですが

ワールドの指定したブロックをエアーに置き換えるってできますか?

Block#setType(Material type)の引数にMaterial.AIRを指定することで可能です。
xNiwatorix
ID:601582f1
水から上がったとこ
 
記事: 10
登録日時: 2016年11月30日(水) 16:40

  • (PostNo.291553)

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

投稿記事by koucha2525 » 2016年12月27日(火) 16:56

連投失礼します

onEnableに記述した変数をonCommandメソッドに呼び出すってことはできますか?
koucha2525
ID:44f649d6
水から上がったとこ
 
記事: 9
登録日時: 2016年10月16日(日) 09:33

  • (PostNo.291566)

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

投稿記事by King(qpwakaba) » 2016年12月27日(火) 18:06

koucha2525 さんが書きました:連投失礼します

onEnableに記述した変数をonCommandメソッドに呼び出すってことはできますか?


こんにちは。
プラグインというよりはJavaの質問に近くなってきてしまっているため、一度Javaを学んでからプラグインをやってみるとスムーズに学べるかと思います。

onEnableの中で宣言した変数はonCommandから参照することは出来ません。 変数のスコープというものが関係しているため一度調べてみると良いです。
以下サイン
調べて見つからないことを質問して、「そのくらい調べろ」と言われたら それは調べが足りないとき。

投稿画面のBBコード挿入ボタン を追加するユーザースクリプト作りました。良かったらどうぞ。
https://greasyfork.org/ja/scripts/18657
最大描画距離を64チャンクまで伸ばすMod作ってます。
viewtopic.php?t=30697
アバター
King(qpwakaba)
ID:a77fe154
ダイヤモンド掘り
 
記事: 822
登録日時: 2013年3月26日(火) 10:25

  • (PostNo.291568)

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

投稿記事by King(qpwakaba) » 2016年12月27日(火) 18:08

ゲスト さんが書きました:なるほど!三平方の定理を使うんですね
やりたいことができました。ありがとうございます!


おめでとうございます。
完全に蛇足かと思いますが念のため。 Locationクラスにdistance/distanceSquaredというメソッドが存在していて、
これらは 距離/距離の2乗 を返してくれるメソッドなので、こちらを使うという手もアリです。
以下サイン
調べて見つからないことを質問して、「そのくらい調べろ」と言われたら それは調べが足りないとき。

投稿画面のBBコード挿入ボタン を追加するユーザースクリプト作りました。良かったらどうぞ。
https://greasyfork.org/ja/scripts/18657
最大描画距離を64チャンクまで伸ばすMod作ってます。
viewtopic.php?t=30697
アバター
King(qpwakaba)
ID:a77fe154
ダイヤモンド掘り
 
記事: 822
登録日時: 2013年3月26日(火) 10:25

  • (PostNo.291676)

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

投稿記事by うましゅー » 2016年12月28日(水) 18:25

Lemon18 さんが書きました:
うましゅー さんが書きました:大体予想はついていて、if(inventory.getItemInMainHand() == WATCH){の部分なのでしょうが、手に持ったときにそのitemが時計だったときの判定はどのようにすればいいのでしょうか…


ItemStack#getType()でMaterialが返ってくるのでif (inventory.getItemInMainHand().getType() == Material.WATCH)にすればできます。

あと気になるのがBukkit.getOnlinePlayers()はCollection<Player>が返るので、拡張for文でプレイヤーを回してhideやshowしないといけないと思います。

それと、hideしている状態で新しいプレイヤーが参加するとその人は見えてしまうので別のイベントで処理しないといけないですね。


なんとかプレイヤーの表示をなくすことができました。ありがとうございます。
新しい人の参加については一度仕様ってことで放置しておこうかなと思います。またアイデアが浮かんだら書き込んでみます。
ニコニコ生放送にて生主をしています。
ついでにPluginも作ってます(新米)
アバター
うましゅー
ID:50149204
大工さん
 
記事: 49
登録日時: 2013年3月30日(土) 09:23

  • (PostNo.292059)

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

投稿記事by ttttt » 2017年1月01日(日) 20:37

今、プレイヤー or Entityが対象(Entity)を殴った時、対象にダメージを与えるという
処理を作っているのですが、EntityDamageByEntityEventを使って
////////////////////////////|
Entity e = event.getEntity();
Entity d = event.getDamager();
LivingEntity le = (LivingEntity)e;
le.damage(100, d);
////////////////////////////|

こんな感じでダメージを与えています(結構省いてはいますが)。
これだとle.damage(100, d); のところでまたEntityAttackが発生してしまい
ループしてサーバーが落ちてしまいます;w;
でもダメージ元は必ず設定していないと他の機能が成り立たなくなるので外せません.
なのでsetLastDamageCauseで変えればいいか?とも思ったのですが、使い方がわかりません
使い方、もしくは他の解決方法はあるのでしょうか教えてください
長文失礼しました
ttttt
ID:f86fe74b
 

  • (PostNo.292066)

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

投稿記事by Lemon18 » 2017年1月01日(日) 22:26

ttttt さんが書きました:今、プレイヤー or Entityが対象(Entity)を殴った時、対象にダメージを与えるという
処理を作っているのですが、
これだとle.damage(100, d); のところでまたEntityAttackが発生してしまい
ループしてサーバーが落ちてしまいます;w;
でもダメージ元は必ず設定していないと他の機能が成り立たなくなるので外せません.
なのでsetLastDamageCauseで変えればいいか?とも思ったのですが、使い方がわかりません
使い方、もしくは他の解決方法はあるのでしょうか


内容を読み違えていたので隠します
https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/entity/EntityDamageEvent.html#setDamage(double)
setDamage(double)でダメージ値を変更すればいいだけなのではないでしょうか。
最後に編集したユーザー Lemon18 [ 2017年1月02日(月) 10:21 ], 累計 1 回
Bukkitプラグインとか作ったり作らなかったり。
「どのOSでも使える」を目標に日本語入力ツールを作っています。良ければ見てください。
http://forum.minecraftuser.jp/viewtopic.php?f=36&t=31671


Twitter: https://twitter.com/Lemon1806
Minecraft: Applemon
Lemon18
ID:b66be5f3
石掘り
 
記事: 85
登録日時: 2015年6月05日(金) 22:42

  • (PostNo.292067)

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

投稿記事by ttttt » 2017年1月01日(日) 22:51

それだとダメージが消えてしまいませんか?
ttttt
ID:f86fe74b
 

  • (PostNo.292069)

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

投稿記事by ttttt » 2017年1月01日(日) 23:02

連投すみません、補足します
ダメージ値を変更しても、
1 Damager による EntityAttack が発生して
2 そしてまたDamagerによるダメージで1へ戻る

これの繰り返しが起きてしまうんです
ですが、Damagerからのダメージということははっきりさせておかないと
それを利用した処理との連携が取れなくなってしまうんです。

自分がsetDamage(double)について勘違いをしていたら
申し訳ありません
またもや長文失礼しました
ttttt
ID:f86fe74b
 

  • (PostNo.292070)

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

投稿記事by Lemon18 » 2017年1月01日(日) 23:23

ttttt さんが書きました:それだとダメージが消えてしまいませんか?


ttttt さんが書きました:ダメージ値を変更しても、
1 Damager による EntityAttack が発生して
2 そしてまたDamagerによるダメージで1へ戻る

これの繰り返しが起きてしまうんです
ですが、Damagerからのダメージということははっきりさせておかないと
それを利用した処理との連携が取れなくなってしまうんです。


内容を読み違えていたので隠します
もしかして、イベントをキャンセルしていますか?
それなら仰るとおりダメージ値を変更しても意味はないと思います。
ですが、なぜせっかく変更できるダメージを変更せずに、damageメソッドでダメージを与えているのでしょうか。 (連携もこのイベント内でできると思うのですが...)
もし、damageメソッドを必要としているなら、申し訳ないですが、解決策はわかりません...
最後に編集したユーザー Lemon18 [ 2017年1月02日(月) 10:21 ], 累計 2 回
Bukkitプラグインとか作ったり作らなかったり。
「どのOSでも使える」を目標に日本語入力ツールを作っています。良ければ見てください。
http://forum.minecraftuser.jp/viewtopic.php?f=36&t=31671


Twitter: https://twitter.com/Lemon1806
Minecraft: Applemon
Lemon18
ID:b66be5f3
石掘り
 
記事: 85
登録日時: 2015年6月05日(金) 22:42

  • (PostNo.292076)

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

投稿記事by ゲスト » 2017年1月02日(月) 00:38

>今、プレイヤー or Entityが対象(Entity)を殴った時、対象にダメージを与えるという
>処理を作っているのですが、EntityDamageByEntityEventを使って

状況がよくわからないけど、「対象(Entity)」というのはすべてのエンティティじゃなく、ある特定のエンティティじゃないの?
もしそうなら、イベントの発生したエンティティがその特定エンティティかどうかのチェックがあればいいような気がする

if(殴られたエンティティはその特定のエンティティか){
//ダメージイベントをキャンセルする処理
//殴ったエンティティにダメージを反射する処理
}
else{
//何もしない
}

対象がすべてのエンティティとなると話はややこしくなるがフラグ管理になるだろうか
ゲスト
ID:745a4bf0
 

  • (PostNo.292087)

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

投稿記事by ittekikun » 2017年1月02日(月) 12:17

ttttt さんが書きました:今、プレイヤー or Entityが対象(Entity)を殴った時、対象にダメージを与えるという
処理を作っているのですが、


https://hub.spigotmc.org/javadocs/bukki ... Cause.html
ダメージケースを取得できるようなので、
LivingEntity.damageでダメージを与えた場合どんな値が帰ってくるか確認してみてはどうでしょうか?
コード上からのダメージがしっかり区別されていればフラグ管理でお望みの動作が実現できると思います。
サイン Bukkit Spigot Japan Wikiを運営しています。
些細な事でもいいので内容の充実にご協力頂ければ幸いです。
viewtopic.php?f=19&t=33020

■■ 投稿する前に ■■
  フォーラムルール
  質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
  【必読】質問の仕方について↓
  viewtopic.php?f=5&t=999
アバター
ittekikun
ID:005e52af
ラピスラズリ収集家
 
記事: 1252
登録日時: 2011年9月25日(日) 11:51
お住まい: 夢の国の隣

  • (PostNo.292190)

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

投稿記事by cocodo » 2017年1月03日(火) 13:13

失礼します。
装備を身に着けたらステータス効果を付与するプラグインを制作しているのですが、自分としては正しく書いたつもりが機能しません。
エラーも出ないので何が原因なのかさっぱり分からないです…。
どなたかお知恵貸して頂けませんか。
ymlのミスはありません。プラグインも読み込まれてはいます。

コード

package original.items;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;

public class OriginalItems extends JavaPlugin implements Runnable{

public static OriginalItems plugin;

@Override
public void onEnable(){

}

@Override
public void onDisable(){

}

ItemStack head;

public OriginalItems(){
head = new ItemStack(Material.IRON_HELMET);
}
@Override
public void run(){
for(Player p : Bukkit.getOnlinePlayers()){
ItemStack is = p.getEquipment().getHelmet();
if(is != null && is.getType() == head.getType()){
p.addPotionEffect(new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 200, 1));
}
}
}

}
cocodo
ID:b4117d70
 

  • (PostNo.292193)

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

投稿記事by Lemon18 » 2017年1月03日(火) 13:26

cocodo さんが書きました:失礼します。
装備を身に着けたらステータス効果を付与するプラグインを制作しているのですが、自分としては正しく書いたつもりが機能しません。
エラーも出ないので何が原因なのかさっぱり分からないです…。


http://minecraftjp.info/modding/index.php/%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%A9%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
これを参考にしてみてください。
Bukkitプラグインとか作ったり作らなかったり。
「どのOSでも使える」を目標に日本語入力ツールを作っています。良ければ見てください。
http://forum.minecraftuser.jp/viewtopic.php?f=36&t=31671


Twitter: https://twitter.com/Lemon1806
Minecraft: Applemon
Lemon18
ID:b66be5f3
石掘り
 
記事: 85
登録日時: 2015年6月05日(金) 22:42

  • (PostNo.292260)

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

投稿記事by うましゅー » 2017年1月04日(水) 02:00

現在とあるゲームのプラグインを書いています。
貼り付けたコードの91行から132までに選出されたプレイヤーの役職を決め、結果を知らせるというものを書いてみたのですが、なぜかエラーが出ます。
一応ifが通ってるかlogを出したところきちんと止まっているところには止まっているので、自分ではよくわかりません…
また、main.playerにはきちんとデータが入っているらしく、71行から88行で行っている選出されたプレイヤー名を表示するというコードはエラーなしできちんと名前が出ました…

なぜこうなるのか、教えていただくと助かりますorz

エラー
コード: 全て選択
java.lang.NullPointerException
        at umasyu.onenightwolf.Game_timer.run(Game_timer.java:122) ~[?:?]
        at org.bukkit.craftbukkit.v1_9_R2.scheduler.CraftTask.run(CraftTask.java
:71) ~[spigot.jar:git-Spigot-798f32d-0cd0397]
        at org.bukkit.craftbukkit.v1_9_R2.scheduler.CraftScheduler.mainThreadHea
rtbeat(CraftScheduler.java:350) [spigot.jar:git-Spigot-798f32d-0cd0397]
        at net.minecraft.server.v1_9_R2.MinecraftServer.D(MinecraftServer.java:7
34) [spigot.jar:git-Spigot-798f32d-0cd0397]
        at net.minecraft.server.v1_9_R2.DedicatedServer.D(DedicatedServer.java:3
99) [spigot.jar:git-Spigot-798f32d-0cd0397]
        at net.minecraft.server.v1_9_R2.MinecraftServer.C(MinecraftServer.java:6
65) [spigot.jar:git-Spigot-798f32d-0cd0397]
        at net.minecraft.server.v1_9_R2.MinecraftServer.run(MinecraftServer.java
:564) [spigot.jar:git-Spigot-798f32d-0cd0397]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_60]

コード
コード: 全て選択
package umasyu.onenightwolf;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.logging.Logger;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;

public class Game_timer extends BukkitRunnable {

   private static Main main;
   private ConfigHandler config;
   private int sec;
   public Game_timer(Main main, ConfigHandler config, int sec){
      this.main = main;
      this.config = config;
      this.sec = sec;
   }

   @Override
   public void run() {
      //ゲームスタートのコマンドを打った際に人数が足りるか確認
      if(sec == config.timer+config.cooltimer+91){
         //サーバー内の人数がコンフィグのの参加人数より少ない場合
         if(config.person >  Bukkit.getOnlinePlayers().size()){
            for(Player player : Bukkit.getOnlinePlayers()){
               player.sendMessage(ChatColor.GREEN+"[OW]"+
                      ChatColor.DARK_RED+"サーバー内の人数が足りません");
            }
            cancel();
         }else{
            //サーバー内の全てのプレイヤーに全体チャット
            for(Player player : Bukkit.getOnlinePlayers()){
                 player.sendMessage(ChatColor.GREEN+"[OW]"+
                   ChatColor.WHITE+"今からワンナイト人狼を始めます");
                 player.sendMessage(ChatColor.GREEN+"[OW]"+
                   ChatColor.WHITE+"抽選を始めます");
            }
         }
      }

      //3秒経過した際にサーバー内から抽選開始
      if(sec == config.timer+config.cooltimer+88){
         List<? extends Player> list = new ArrayList<>();
         list = (List<? extends Player>)Bukkit.getOnlinePlayers();
         List<Player> r1 = new ArrayList(list);
         Collections.shuffle(r1);
         int i = 0;
         for(Player player : r1){
            if(i < config.person){
               String uuid = player.getUniqueId().toString();
               main.player.add(uuid);
               main.playername.put(uuid, player.getName());
               player.sendMessage(ChatColor.GREEN+"[OW]"+
                  ChatColor.WHITE+"貴方は参加者になりました");
            }else{
               String uuid = player.getUniqueId().toString();
               player.sendMessage(ChatColor.GREEN+"[OW]"+
                    ChatColor.DARK_RED+"貴方は今回は選ばれませんでした");
               main.watch.add(uuid);
            }
            i++;
         }
      }

      //3秒後に今回の参加者を知らせる
      if(sec == config.timer+config.cooltimer+85){
         for(Player player : Bukkit.getOnlinePlayers()){
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"抽選が終わりました!!参加者は以下の人々です");
         }
         for(int i = 0 ; i < main.player.size() ; i++){
            for(Player player : Bukkit.getOnlinePlayers()){
               player.sendMessage(ChatColor.GREEN+"[OW]"+
                    ChatColor.WHITE+main.playername.get(main.player.get(i)));

            }
         }
         for(Player player : Bukkit.getOnlinePlayers()){
            String uuid = player.getUniqueId().toString();
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                    ChatColor.WHITE+"参加者に役職を配布していきます");
         }
      }

      //2秒後際に役職を知らせる
      if(sec == config.timer+config.cooltimer+83){
         final Logger logger = Logger.getLogger("SampleLogging");
         main.player.add(main.player.size(), "伏せ1");
         main.playername.put("伏せ役職1", main.player.get(main.player.size()-1));
         main.player.add(main.player.size(), "伏せ2");
         main.playername.put("伏せ役職2", main.player.get(main.player.size()-1));
         Collections.shuffle(main.player);
         for(int i = 0; i < main.player.size(); i++){
            logger.info("役職選出開始");
            if(i==0){
               logger.info("i=0");
               main.augury.add(main.player.get(i));
               if(main.player.get(i) == "伏せ1" || main.player.get(i) == "伏せ2"){
                  logger.info("占いが伏せ1or2");
                  continue;
               }
               logger.info("占いがPlayer");
               Bukkit.getPlayer(main.player.get(i)).sendMessage(ChatColor.GREEN+"[OW]"+
                  ChatColor.WHITE+"貴方の役職は"+ChatColor.BLUE+"【占い師】"+ChatColor.WHITE+"になりました");
            }else if(i == 1){
               main.phantom.add(main.player.get(i));
               if(main.player.get(i) == "伏せ1" || main.player.get(i) == "伏せ2"){
                  continue;
               }
               Bukkit.getPlayer(main.player.get(i)).sendMessage(ChatColor.GREEN+"[OW]"+
                  ChatColor.WHITE+"貴方の役職は"+ChatColor.YELLOW+"【怪盗】"+ChatColor.WHITE+"になりました");
            }else if(i == 2 || i==3){
               main.wolf.add(main.player.get(i));
               if(main.player.get(i) == "伏せ1" || main.player.get(i) == "伏せ2"){
                  continue;
               }
               Bukkit.getPlayer(main.player.get(i)).sendMessage(ChatColor.GREEN+"[OW]"+
                  ChatColor.WHITE+"貴方の役職は"+ChatColor.RED+"【人狼】"+ChatColor.WHITE+"になりました");
            }else{
               main.villager.add(main.player.get(i));
               if(main.player.get(i) == "伏せ1" || main.player.get(i) == "伏せ2"){
                  continue;
               }
               Bukkit.getPlayer(main.player.get(i)).sendMessage(ChatColor.GREEN+"[OW]"+
                  ChatColor.WHITE+"貴方の役職は"+ChatColor.DARK_GREEN+"【村人】"+ChatColor.WHITE+"になりました");
            }
         }
         if(config.release == true){
            for(Player player : Bukkit.getOnlinePlayers()){
               String uuid = player.getUniqueId().toString();
               if(main.watch.contains(uuid)){
                  player.sendMessage(ChatColor.GREEN+"[OW]"+
                     ChatColor.WHITE+"参加者の役職は以下の通りです");
               }
            }

            //村人
            for(int i = 0 ; i < main.villager.size()-1 ; i++){
               for(Player player : Bukkit.getOnlinePlayers()){
                  String uuid = player.getUniqueId().toString();
                  if(main.watch.contains(uuid)){
                     player.sendMessage(ChatColor.GREEN+"[OW]"+
                        ChatColor.DARK_GREEN+main.playername.get(main.villager.get(i))+"⇒【村人】");
                  }
               }
            }
            //占い師
            for(int i = 0 ; i < main.augury.size()-1 ; i++){
               for(Player player : Bukkit.getOnlinePlayers()){
                  String uuid = player.getUniqueId().toString();
                  if(main.watch.contains(uuid)){
                     player.sendMessage(ChatColor.GREEN+"[OW]"+
                        ChatColor.BLUE+main.playername.get(main.augury.get(i)+"⇒【占い師】"));
                  }
               }
            }
            //怪盗
            for(int i = 0 ; i < main.phantom.size()-1 ; i++){
               for(Player player : Bukkit.getOnlinePlayers()){
                  String uuid = player.getUniqueId().toString();
                  if(main.watch.contains(uuid)){
                       player.sendMessage(ChatColor.GREEN+"[OW]"+
                         ChatColor.YELLOW+main.playername.get(main.phantom.get(i)+"⇒【怪盗】"));
                  }
               }
            }
            //人狼
            for(int i = 0 ; i < main.wolf.size()-1 ; i++){
               for(Player player : Bukkit.getOnlinePlayers()){
                  String uuid = player.getUniqueId().toString();
                  if(main.watch.contains(uuid)){
                       player.sendMessage(ChatColor.GREEN+"[OW]"+
                         ChatColor.RED+main.playername.get(main.wolf.get(i)+"⇒【人狼】"));
                  }
               }
            }
         }else if(config.release == false){
            for(Player player : Bukkit.getOnlinePlayers()){
               String uuid = player.getUniqueId().toString();
               if(main.watch.contains(uuid)){
                    player.sendMessage(ChatColor.GREEN+"[OW]"+
                      ChatColor.WHITE+"今回のゲームは参加者の役職を観戦者には伝えません");
                    player.sendMessage(ChatColor.GREEN+"[OW]"+
                      ChatColor.WHITE+"皆さんも誰がどの役職なのか考えてください!!");
               }
            }
         }
      }

      //3秒後にゲーム開始の合図、夜時間の移動準備
      if(sec == config.timer+config.cooltimer+80){
         for(Player player : Bukkit.getOnlinePlayers()){
            String uuid = player.getUniqueId().toString();
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"それでは会場のほうに移動します");
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"参加者の皆様は是非頑張ってください");
              if(main.player.contains(uuid)){
                 player.teleport(config.stageloc);
              }else if(main.watch.contains(uuid)){
                 player.teleport(config.watchloc);
              }
         }
      }

      //3秒後に夜の時間開始
      if(sec == config.timer+config.cooltimer+77){
         for(Player player : Bukkit.getOnlinePlayers()){
            String uuid = player.getUniqueId().toString();
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"今から夜時間を始めます");
              if(main.watch.contains(uuid)){
                 if(config.release == true){
                    player.sendMessage(ChatColor.GREEN+"[OW]"+
                      ChatColor.WHITE+"今回は夜時間中の行動を確認することができます");
                 }
              }
         }
      }

      //夜時間の処理
      if(config.timer+config.cooltimer+77 >= sec && config.timer+77 <= sec){
         for(Player player : Bukkit.getOnlinePlayers()){
            player.setLevel(sec-config.timer-77);
         }
      }

      //夜時間の終了、昼時間の開始
      if(sec == config.timer+77){
         for(Player player : Bukkit.getOnlinePlayers()){
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"夜時間が終了しました");
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"今から昼時間が始まります!!参加者の方は話し合ってください");
         }
      }
      //昼時間の処理
      if(config.timer+77 >= sec && 77 <= sec){
         for(Player player : Bukkit.getOnlinePlayers()){
            player.setLevel(sec - 77);
         }
      }

      //1分間の投票時間
      if(sec == 77){
         for(Player player : Bukkit.getOnlinePlayers()){
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"昼時間が終了しました");
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"これより投票時間に移ります");
         }
      }

      //投票終了の報告
      if(sec == 17){
         for(Player player : Bukkit.getOnlinePlayers()){
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"投票時間が終了しました");
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"処刑されてしまうプレイヤーは…");
         }
      }

      //3秒後に処刑報告
      if(sec == 14){
         for(Player player : Bukkit.getOnlinePlayers()){
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"〇〇さんです!!お疲れ様でした!!");
         }
      }

      //3秒後に処刑処理
      if(sec == 11){
         for(Player player : Bukkit.getOnlinePlayers()){
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"(ここで処刑処理)");
         }
      }

      //3秒後に結果通知の合図
      if(sec == 8){
         for(Player player : Bukkit.getOnlinePlayers()){
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"今回の参加者の役職を公開します!!");
         }
      }

      //3秒後に結果通知、勝利陣営報告
      if(sec == 5){
         for(Player player : Bukkit.getOnlinePlayers()){
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"(ここで役職発表)");
         }
      }

      //1秒後に敗北陣営処刑報告
      if(sec == 4){
         for(Player player : Bukkit.getOnlinePlayers()){
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"(ここで敗北陣営報告)");
         }
      }

      //3秒後に処刑処理
      if(sec == 1){
         for(Player player : Bukkit.getOnlinePlayers()){
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"(ここで敗北陣営処刑処理)");
         }
      }

      //1秒後にゲーム終了
      if(sec == 0){
         for(Player player : Bukkit.getOnlinePlayers()){
              player.sendMessage(ChatColor.GREEN+"[OW]"+
                ChatColor.WHITE+"(これにて今回のワンナイト人狼は終了します!!お疲れ様でした!!)");
              player.teleport(config.spawnloc);
         }
         main.player.clear();
         main.playername.clear();
         main.watch.clear();
         main.villager.clear();
         main.augury.clear();
         main.phantom.clear();
         main.wolf.clear();
      }

      sec --;
   }
}
ニコニコ生放送にて生主をしています。
ついでにPluginも作ってます(新米)
アバター
うましゅー
ID:50149204
大工さん
 
記事: 49
登録日時: 2013年3月30日(土) 09:23

  • (PostNo.292398)

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

投稿記事by うましゅー » 2017年1月05日(木) 15:41

すみません…なんとか自己解決しました。申し訳ありません。

一応エラーの原因はBukkit.getPlayer(UUID)にString型に変更していたUUIDを入れていたからです…

String型をUUIDに変更しなおして解決しました。
ニコニコ生放送にて生主をしています。
ついでにPluginも作ってます(新米)
アバター
うましゅー
ID:50149204
大工さん
 
記事: 49
登録日時: 2013年3月30日(土) 09:23

  • (PostNo.292573)

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

投稿記事by cocodo » 2017年1月07日(土) 12:47

お返事遅れてすみません。
Lemon18さん返信ありがとうございます。
Bukkitのスケジューラーの知識が乏しかったです。勉強します。
getInventoryからの取得で思い通りの処理が行われました。
cocodo
ID:b4117d70
 

1つ前へ次へ

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

x