2016-06-10 2 views
1

1.10에서 Spigot 플러그인을 만들었습니다. 주로 필수 항목이지만 나침반 재고 GUI에 추가하고 처음 로그인 할 때 받게됩니다. 구현 한 후 이상한 이유로 인벤토리에서 항목을 얻을 수 없으면 즉각 사라집니다. GUI 클래스는 다음과 같습니다.Spigot Plugin - 빌드 할 수 없음 1.10

package me.Roofah.Essentials; 

import org.bukkit.Bukkit; 
import org.bukkit.ChatColor; 
import org.bukkit.Location; 
import org.bukkit.Material; 
import org.bukkit.entity.Player; 
import org.bukkit.event.EventHandler; 
import org.bukkit.event.Listener; 
import org.bukkit.event.block.Action; 
import org.bukkit.event.inventory.InventoryClickEvent; 
import org.bukkit.event.player.PlayerInteractEvent; 
import org.bukkit.event.player.PlayerJoinEvent; 
import org.bukkit.inventory.Inventory; 
import org.bukkit.inventory.ItemStack; 
import org.bukkit.inventory.meta.ItemMeta; 
import org.bukkit.plugin.java.JavaPlugin; 

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

     this.getCommand("teleport").setExecutor(new Teleport(this));; 
     this.getCommand("vanish").setExecutor(new Vanish(this));; 
     this.getCommand("unvanish").setExecutor(new Vanish(this));; 


     Bukkit.getServer().getLogger().info("Teleport Plugin Enabled!"); 
    } 

     public Player getPlayer(String name) { 
      for(Player p : Bukkit.getOnlinePlayers()) { 
       if(p.getName().equalsIgnoreCase(name)) 
        return p; 
      } 
      return null; 

    } 

    public void onDisable() { 

     Bukkit.getServer().getLogger().info("Teleport Plugin Disabled!"); 

    } 

    private void teleportInWord(Player player, int x, int y, int z) { 
     player.teleport(new Location(player.getWorld(), x, y, z)); 
    } 

    private void openGUI(Player player) { 
     Inventory inv = Bukkit.createInventory(null, 9, ChatColor.DARK_RED + "Warp Selector || By Roofah"); 

     ItemStack Spawn = new ItemStack(Material.DIAMOND_AXE); 
     ItemMeta SpawnMeta = Spawn.getItemMeta(); 
     ItemStack Build = new ItemStack(Material.DIAMOND_PICKAXE); 
     ItemMeta BuildMeta = Build.getItemMeta(); 

     SpawnMeta.setDisplayName(ChatColor.DARK_RED + "Spawn"); 
     Spawn.setItemMeta(SpawnMeta); 

     BuildMeta.setDisplayName(ChatColor.GREEN + "Build"); 
     Build.setItemMeta(BuildMeta); 

     // 35 
     inv.setItem(3, Spawn); 
     inv.setItem(5, Build); 

     player.openInventory(inv); 
    } 

    @EventHandler 
    public void onInventoryClick(InventoryClickEvent event) { 
     if (ChatColor.stripColor(event.getInventory().getName()).equalsIgnoreCase("Warp Selector")) { 
      return; 
     } 
     Player player = (Player) event.getWhoClicked(); 
     event.setCancelled(true); 

     if (event.getCurrentItem() == null || event.getCurrentItem().getType() == Material.AIR 
       || !event.getCurrentItem().hasItemMeta()) { 
      player.closeInventory(); 
      return; 
     } 

     switch(event.getCurrentItem().getType()){ 
     case DIAMOND_AXE: 
      teleportInWord(player, 967, 90, 484); 
      player.closeInventory(); 
      player.sendMessage(String.format("%sTeleported to %sSpawn%s!", ChatColor.GOLD, ChatColor.DARK_RED, ChatColor.GOLD)); 
      break; 
     case DIAMOND_PICKAXE: 
      teleportInWord(player, 906, 96, 428); 
      player.closeInventory(); 
      player.sendMessage(String.format("%sTeleported to %sBUILD%s!", ChatColor.GOLD, ChatColor.GREEN, ChatColor.GOLD)); 
      break; 

      default: 
       player.closeInventory(); 
       break; 
     } 
    } 

    @EventHandler 
    public void onPlayerKoin(PlayerJoinEvent event) { 
     event.getPlayer().getInventory().addItem(new ItemStack(Material.COMPASS)); 
    } 

    @EventHandler 
    public void onPlayerInteract(PlayerInteractEvent event) { 
     Action a = event.getAction(); 
     ItemStack is = event.getItem(); 
     if (a == Action.PHYSICAL || is == null || is.getType() == Material.AIR) { 
      return; 
     } 
     if (is.getType() == Material.COMPASS) { 
      openGUI(event.getPlayer()); 
     } 

    } 

} 

다른 2 개의 클래스가 있지만 GUI를 추가하지 않고도 블록을 얻을 수 있습니다.

+0

1.10에서는 작동하지 않는다고하셨습니다. 1.9에서 실행 중입니까? 인벤토리에 항목을 추가하는 것을 거부하는 또 다른 플러그인이 있습니까? – Nightfighter001

+2

'if (ChatColor.stInColor (event.getInventory(). getName()). equalsIgnoreCase ("Warp Selector")) {'당신이 원하는 것의 오포자를 수행하는 것 같습니다 (화면이 _ 워프 선택기 "). 어쩌면 당신은'if (! ChatColor.stripColor (event.getInventory() .getName()). equalsIgnoreCase ("Warp Selector")) {'? – Pokechu22

답변

1

코드 73의 73 번째 줄에 논리 오류가 있습니다. 재고 이름 워프 선택기, 반환 때마다

:

if (ChatColor.stripColor(event.getInventory().getName()).equalsIgnoreCase("Warp Selector")) //Line 73 { 
     return; 
    } 

상황은 다음과 같습니다

는 다음이있다. 따라서 인벤토리 이름이 "워프 선택기"가 아닌 경우에만 코드가 실행됩니다.

이 논리를 거꾸로 변환하면 인벤토리 이름이 "워프 선택기"일 때 코드가 실행됩니다.

if (!ChatColor.stripColor(event.getInventory().getName()).equalsIgnoreCase("Warp Selector") { 
return; 
} 
//Code continues 
관련 문제