2013-08-14 8 views
0

나는 정적 인벤토리를 여는 사인 가게에서 bukkit 플러그인을 만들고 키트를 얻기 위해 클릭합니다. 인벤토리를 설정 했으므로 표시가 클릭되면 열리고 원하는 항목이 표시됩니다. 그러나 인벤토리를 클릭하면 첫 번째 if 문은 false를 반환합니다.Minecraft Bukkit 로그인 인벤토리

@EventHandler 
    public void onInventoryClick(InventoryClickEvent e){ 
     if (e.getInventory() == kitInvent){ 
      Player player = (Player) e.getWhoClicked(); 
      player.sendMessage("Kit Shop Opened"); 

      if (e.getCurrentItem().getItemMeta().getDisplayName() == ChatColor.DARK_PURPLE + "Grenadier Kit"){ 
       e.setCancelled(true); 
       player.getInventory().clear(); 
       Potion potion = new Potion(PotionType.INSTANT_DAMAGE, 1); 
       potion.setSplash(true); 
       ItemStack grenadeStack = new ItemStack(Material.POTION, 32); 


       potion.apply(grenadeStack); 
       player.getInventory().addItem(grenadeStack); 
      } 
     } 
    } 

그것은 내가 그것을 언급 할 때, 그것은 메시지를 전송하기 때문에 "만약 (e.getInventory()는 == kitInvent가)"부분은 "키트 숍 오픈"과거를 얻을 수 없습니다 여기 내 코드입니다.

또한 다음 if 문을 올바르게 수행하고 항목 제목을 확인합니다. 거기에 문제가 있었지만 이전 if 문으로 인해서인지 간단히 알지 못했습니다.

도움을 주시면 대단히 감사하겠습니다.

+1

우리는'kitInvent'가 무엇인지, 당신이 무엇을하는지 알아야합니다. 코드를 업데이트하십시오. – bw2801

+0

kitInvent는 키트 개체를 보관하기 위해 만든 인벤토리이며 클릭하면 선택할 수 있습니다. 기호가 무엇을 말했을 때 열 수는 있지만 위의 문제가 있습니다. 나는 그 안에 단 하나의 킷을 넣었으므로 괜찮습니다. 이것은 문제 코드 여야합니다. –

답변

0

== 대신 if (e.getInventory().equals(kitInvent))을 사용해야합니다. .equals는 참조가 아닌 동일한 값을 찾습니다.

다음 if 문에 대해서도 .equals를 사용하는 것이 좋습니다. 왜냐하면 문자열 비교시 ==를 사용하는 것은 잘못된 코딩 방법으로 간주되기 때문입니다.

0

할 수 있습니다 if(e.getInventory().getName().equalsIgnoreCase("the name of the inventory you want to do stuff with")) 인벤토리 이름이 이벤트 인벤토리 이름과 같으면 true를 반환합니다!

2

재고가 재고 "kitInvent"이름이 아닌 다른 것들, 내부 항목 때문에 == 검사에 진정으로 동일하지 않습니다 열었다. 인벤토리가 kitInvent와 "동일"한지 확인할 수있는 여러 가지 방법이 있습니다. (플레이어가 바로 재고에있는 경우 "동일한"당신이하고 싶은 무엇과 같이 확인)

확인할 수있는 몇 가지 방법을 재고 원하는 사람이 재고 이름이 있는지 확인하는 경우은 같습니다. 이것이 일반적인 검사이지만 인벤토리 및 항목 이름의 항목을 확인할 수도 있지만 이름을 붙이면 충분합니다. (특히 가슴을 바꿀 수 있기 때문에 ChatColors를 사용하는 경우) 추가 검사를 위해 equalsIgnoreCase()를 사용하십시오.

if(e.getInventory().getName().equalsIgnoreCase(kitInvent.getName()))

마지막으로, this thread about == vs .equals()에서 찍은 인용 같습니다 당신이()는 단 한 가지, 아무것도를 확인하려는 경우 이동하는 방법입니다 알려줍니다.

같음은 비교할 대상과 비교할 때만 큼, 더 이상 적지 않습니다.

프로젝트 진행 과정에 대한 행운을 빈다.

+0

이 질문은 3 세 이상임을 알고 있습니까? Bukkit API는 동시에 죽어 가고 있습니다. 대답은 그러나 평가됩니다. – Xorifelse

+0

알려 주셔서 감사합니다. 내가 대답해야 할 첫 번째 질문이 나타났습니다. 다음 번에 확인해. – 0xA