前提・実現したいこと
自分のプレイヤー周りのエンティティを取得し、それにargs[0]で指定したポーション効果を付与するというコマンドを作成していました。そこで使われたifがUnreachable statementであるといわれエラー文が出ましたが解決法がわかりません。誰か解説のほどよろしくお願いいたします。
発生している問題・エラーメッセージ
potionコマンドでのif (containsPotionEffectType(args[0]))…の部分のif構文にてUnreachable statementエラー文が出ている。
該当のソースコード
package com.horizon.first; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; public final class First extends JavaPlugin implements Listener { @Override public void onEnable() { // Plugin startup logic System.out.println("\u001b[32m" + "Firstプラグインが有効になったよ!" + "\u001b[m");//コンソール上で緑に。参考URLは➤http://blog.livedoor.jp/killxia/archives/6461751.html Bukkit.getServer().getPluginManager().registerEvents(this,this); } @Override public void onDisable() { // Plugin shutdown logic System.out.println("\u001b[31m" + "Firstプラグインが無効になったよ!" + "\u001b[m");//コンソール上で赤に。(赤は"\u001b[31m"が担っている。) } @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (command.getName().equalsIgnoreCase("heal")) {//command.getName(Object1)とその後ろにあるequalsIgnoreCase(Object2)の中にあるObject1とObject2を比較して合致を調べる。Trueで処理続行 if (!(sender instanceof Player)) {//senderの判断。コンソールは回復しないから区別する必要あり。 sender.sendMessage(ChatColor.GOLD + "このコマンドはプレイヤーからでしか使えないよ!");//エラー文送信 return true;//trueなら上記エラー文を送信せず、falseの場合plugin.ymlのusageがsenderに送信される。helpだhelp. } Player player = (Player) sender;//上記ifよりコンソールかプレイヤーか判別してるからplayer変数にsenderできる player.setHealth(20.0); player.sendMessage(ChatColor.AQUA + "体力全快!"); return true; } if (command.getName().equalsIgnoreCase("flying")) {//command.getName(Object1)とその後ろにあるequalsIgnoreCase(Object2)の中にあるObject1とObject2を比較して合致を調べる。Trueで処理続行 if (!(sender instanceof Player)) {//senderの判断。コンソールは回復しないから区別する必要あり。 sender.sendMessage(ChatColor.GOLD + "このコマンドはプレイヤーからでしか使えないよ!");//エラー文送信 return true;//trueなら上記エラー文を送信せず、falseの場合plugin.ymlのusageがsenderに送信される。helpだhelp. } Player player = (Player) sender; player.setAllowFlight(true); player.sendMessage(ChatColor.DARK_GREEN + "サバイバルモードで飛行できるよ!"); return true; } if (command.getName().equalsIgnoreCase("potion")) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.GOLD + "このコマンドはプレイヤーからでしか使えないよ!"); return true; } Player player = (Player) sender; //このコマンドは,/porsion args[0] args[1]...と定義づけられる if (args[0] == null) ; { player.sendMessage(ChatColor.MAGIC + "エフェクト名を入力しよう!"); return true; } if (containsPotionEffectType(args[0])) { for (Entity entity : player.getNearbyEntities(100, 100, 100)) { if (entity instanceof LivingEntity) { ((LivingEntity) entity).addPotionEffect(new PotionEffect(PotionEffectType.getByName(args[0]), 100, 100)); } } return true; } else{ player.sendMessage(ChatColor.GOLD + "正しいエフェクト名を入力してね!"); return true; } } return true; } private boolean containsPotionEffectType(String string){ PotionEffectType effectType = PotionEffectType.getByName(string); if(effectType == null) return false; return true; } @EventHandler public void onJoin(PlayerJoinEvent e){//プレイヤがサーバーに入ったときに発生するイベント、event変数に格納される。 Player p = e.getPlayer();//入ってきたプレイヤー名をGet e.setJoinMessage(ChatColor.YELLOW + "おや… " + ChatColor.WHITE + p.getName() + ChatColor.YELLOW +" が降臨したようだ…"); } }
試したこと
そもそもUnreachable statementってなんぞやってなり、調べたらifが型として解決していない…ということなのでしょうか。ifはreturn true;で返してるはず…などとなり頭がパンクしました。
補足情報(FW/ツールのバージョンなど)
IDEA/Gradleで作っています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/13 18:40