2016-05-31 66 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); 
    } 

} 

我怎么会做这么第二类实际上是 '读'?

非常感谢!

回答

1

因为你的第二个(非主)类是Listener,你可以和寄存器类的一个实例来听的事件,类似于你与你的主类做什么:

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

然而,MainGUI课程中的onCommand方法不会做太多事,据我所知。当您在主要类声明onCommand方法返回类型为boolean,你将覆盖从你的主类扩展(即方法,然后从别的地方调用)的JavaPlugin类方法,而onCommand方法在MainGUI类除非你自己调用它,否则不会被使用。如果要在主类之外执行命令行为,可以使用CommandExecutor类,如here所示。

+0

我会在MainGUI类中实现Command Executor吗? – CameronOfoluwa

+0

我链接的教程应该解释(CommandExecutor是一个你从你自己的类中扩展的类)。 –

0

你需要做两件事。 onCommand不检查非插件类(而你的第二个类不应该扩展插件)。所以,只需在你的主类中添加onCommand方法,并让它在第二类中调用onCommand方法。其次,确保你的第二个类正在调用Bukkit.getPluginManager()。registerEvents();.为此,我建议在主类中添加一个名为“plugin”的静态变量,它是一个JavaPlugin。你应该有主插件做“插件=这个;”启用时。然后,您可以将该变量用于registerEvents()中的参数。这应该能解决你的问题。

1

只需将manager.registerEvents(new MainGUI(), this); 添加到您的onEnable() in Core中即可。