2016-05-31 3 views
0

나는 동시에 Java & Bukkit을 배우려고합니다. 이전에 몇 가지 기본 Java를 배웠고 간단한 텍스트 게임을 만들었습니다.여러 클래스를 사용하는 Bukkit

내가 1 클래스를 사용할 때 내가 뭘하는지 알지만, 모든 것이 지저분 해져서 모든 것을 다시 코딩하고 있지만 훨씬 더 깨끗하게 만들려고 시도했지만 필자와 만났어. 문제는, 메인 클래스는 따로하고, 다른 클래스는 작동하지 않습니다. 여기에 제 코드가 있습니다.

메인 클래스 :

여기
package me.Camaloony.RoyalCosmetics; 

import java.util.logging.Logger; 

import org.bukkit.Bukkit; 
import org.bukkit.event.Listener; 
import org.bukkit.plugin.PluginManager; 
import org.bukkit.plugin.java.JavaPlugin; 

import net.md_5.bungee.api.ChatColor; 

public class Core extends JavaPlugin implements Listener { 

Logger myPluginLogger = Bukkit.getLogger(); 

@Override 
public void onEnable() 
{ 
    PluginManager manager = getServer().getPluginManager(); 
     manager.registerEvents(this, this); 
    Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.RED + "=-=-=-=-=-=-=-=-=-=-=-=-=-=-"); 
    Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.AQUA + "Royal Cosmetics has been enabled!"); 
    Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.RED + "=-=-=-=-=-=-=-=-=-=-=-=-=-=-"); 
} 
@Override 
public void onDisable() 
{ 
    myPluginLogger.info("Test 1 has been disabled!"); 
    myPluginLogger.severe("Test 1 has an error and has not loaded."); 
    } 
} 

package me.Camaloony.RoyalCosmetics; 

import java.util.ArrayList; 

import org.bukkit.Bukkit; 
import org.bukkit.Material; 
import org.bukkit.command.Command; 
import org.bukkit.command.CommandSender; 
import org.bukkit.entity.Player; 
import org.bukkit.event.EventHandler; 
import org.bukkit.event.Listener; 
import org.bukkit.event.inventory.InventoryClickEvent; 
import org.bukkit.inventory.Inventory; 
import org.bukkit.inventory.ItemStack; 
import org.bukkit.inventory.meta.ItemMeta; 

public class MainGUI implements Listener { 

    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { 

     Player player = (Player) sender; 

     if (commandLabel.equalsIgnoreCase("Cosmetics")) { 
      createMainMenu(player); 
     } 

     return false; 
    } 

    @EventHandler 
    public void onInvClick(InventoryClickEvent event){ 
     if (event.getCurrentItem().getItemMeta().getDisplayName().contains("Particles GUI")) { 
      event.setCancelled(true); 
     } 
    } 

    public void createMainMenu(Player player) { 
     Inventory inv = Bukkit.getServer().createInventory(null, 45, "Royal Cosmetics"); 

     ItemStack item1 = new ItemStack(Material.REDSTONE); 

     ItemMeta item1Meta = item1.getItemMeta(); 

     ArrayList<String> item1Lore = new ArrayList<String>(); 

     item1Lore.add("Click here to go to the particles GUI"); 

     item1Meta.setDisplayName("Particles GUI"); 
     item1Meta.setLore(item1Lore); 

     item1.setItemMeta(item1Meta); 

     inv.setItem(0, item1); 

     player.openInventory(inv); 
    } 

} 

가 어떻게 그렇게 2 클래스가 실제로 '읽기'입니다 만들 것입니다 내 2 급입니까?

고맙습니다.

manager.registerEvents(new MainGUI(), this); 

: 두 번째 (비 주) 클래스는 Listener 때문에

답변

1

, 당신은 당신이 당신의 메인 클래스로 할 것과 유사한 이벤트, 듣고뿐만 아니라 그 클래스의 인스턴스를 등록 할 수 있습니다 그러나 MainGUI 클래스의 onCommand 메소드는 제가 말할 수있는 한 많이하지 않습니다. 당신이 당신의 주요 클래스에서 반환 형식 booleanonCommand 방법을 선언 할 때, 당신은 당신의 MainGUI 클래스의 onCommand 방법 반면, 메인 클래스가 (그 방법은 다음 다른 곳에서 호출) 확장 JavaPlugin 클래스의 메소드를 재정의 어딘가에서 직접 호출하지 않으면 사용되지 않습니다. 기본 클래스 외부에서 명령 동작을 구현하려는 경우 CommandExecutor 클래스를 사용할 수 있습니다 (here).

+0

MainGUI 클래스에서 Command Executor를 구현합니까? – CameronOfoluwa

+0

내가 연계 된 튜토리얼은 (CommandExecutor는 자신의 클래스 중 하나에서 확장 한 클래스이다) 설명해야한다. –

0

두 가지 작업을 수행해야합니다. onCommand는 비 플러그인 클래스에 대해 선택되지 않으며 두 번째 클래스는 플러그인을 확장해서는 안됩니다. 따라서 기본 클래스에 onCommand 메서드를 추가하고 두 번째 클래스에서 onCommand 메서드를 호출하면됩니다. 둘째, 두 번째 클래스가 Bukkit.getPluginManager(). registerEvents();를 호출하는지 확인하십시오. 이를 위해 기본 클래스에 JavaPlugin 인 "plugin"이라는 정적 변수를 추가하는 것이 좋습니다. 메인 플러그인을 "plugin = this;"해야합니다. 가능할 때. 그런 다음 registerEvents()에서 인수에 해당 변수를 사용할 수 있습니다. 그것은 당신의 문제를 해결해야합니다.

1

코어의 onEnable()manager.registerEvents(new MainGUI(), this); 을 추가하기 만하면됩니다.

관련 문제