2016-02-28 68 views
2

我正在嘗試進入我的世界的bukkit編程,但由於某種原因,我被事件卡住了。這裏是我的代碼:我的世界Bukkit事件

主類文件:

package com.plugin1; 

import java.util.logging.Logger; 

import org.bukkit.Bukkit; 
import org.bukkit.Location; 
import org.bukkit.command.Command; 
import org.bukkit.command.CommandSender; 
import org.bukkit.entity.Player; 
import org.bukkit.event.Listener; 
import org.bukkit.plugin.PluginDescriptionFile; 
//import org.bukkit.plugin.PluginManager; 
import org.bukkit.plugin.java.JavaPlugin; 

import net.md_5.bungee.api.ChatColor; 

public class Plugin extends JavaPlugin { 

    public int songStage; 
    public static Plugin plugin; 

    public void OnEnable() { 
     PluginDescriptionFile pluginDesc = getDescription(); 
     Logger logger = getLogger(); 

     plugin = this; 
     registerEvents(this, new BlockBreak()); 

     logger.info(pluginDesc.getName() + " is enabled! (V. " + pluginDesc.getVersion() + ")"); 
    } 

    public void OnDisable() { 
     PluginDescriptionFile pluginDesc = getDescription(); 
     Logger logger = Logger.getLogger("Plugin"); 

     plugin = null; 
     logger.info(pluginDesc.getName() + " is disabled! (V. " + pluginDesc.getVersion() + ")"); 
    } 

    public static void registerEvents(org.bukkit.plugin.Plugin plugin, Listener... listeners) { 
     for (Listener listener : listeners) { 
      Bukkit.getServer().getPluginManager().registerEvents(listener, plugin); 
      } 
     } 

    public static Plugin getPlugin() { 
     return plugin; 
     } 
    } 

事件類文件:

package com.plugin1; 

import org.bukkit.Material; 
import org.bukkit.block.Block; 
import org.bukkit.entity.Player; 
import org.bukkit.event.EventHandler; 
import org.bukkit.event.EventPriority; 
import org.bukkit.event.Listener; 
import org.bukkit.event.block.BlockBreakEvent; 

public class BlockBreak implements Listener { 

    @EventHandler(priority = EventPriority.HIGH) 
    public void OnBlockBreak (BlockBreakEvent e) { 
     Player p = e.getPlayer(); 

     p.sendMessage("Block broken."); 
    } 
} 

基本上,這將返回沒有錯誤。我已經通過控制檯,沒有什麼。當我打破一個街區時,從字面上看並沒有任何反應

我試了幾件事:我已經經歷過,嘗試了多個視頻教程,並嘗試了關於minecraft論壇的文本教程,但仍然沒有任何內容。我還聯繫了編碼bukkit插件的服務器所有者,但他無法修復此問題...

如果有人可以幫助我,請讓我知道!

在此先感謝!

+0

如果連一些服務器所有者認爲你的代碼罰款,那麼可以將它也許是一個設置不正確,編譯器?請確保按照關於如何設置Eclipse的說明進行操作,因爲我爲了改進我的Minecraft而大量推薦它 – TheBro21

+0

我一直在通過它運行其他代碼,如命令,但到目前爲止它都是通過一個類文件。但是,這些事件甚至沒有這樣的工作!是的,我使用Eclipse。 – TechnoSwag

回答

1

我覺得你是不是在正確的方式註冊監聽器...

試試這個代碼,並告訴我,如果它的工作原理......我真的想幫助你

首先所有不使用「插件」作爲您的主要類的名稱...使用「主」代替。

啓用:

public class Main extends JavaPlugin { 

    public void onEnable() { 
     Bukkit.getPluginManger().registerEvents(new Join(this),this); 
    } 

} 

監聽器:

public class Join implements Listener { 

    private Main plugin; 

    public Join(Main plugin) { 
     this.plugin = plugin; 
    } 

    @EventHandler 
    public void onPlayerJoin(PlayerJoinEvent ev) { 
     ev.setJoinMessage("Just another test"); 
    } 
} 

希望工程...

+0

它的工作,謝謝! – TechnoSwag

0

我測試了你的代碼,它確實不起作用。我認爲你的事件註冊不起作用。對於我的插件我在mainClass使用:

package me.Nightfighter001.GlobalSystem.Main; 

import org.bukkit.Bukkit; 
import org.bukkit.command.ConsoleCommandSender; 
import org.bukkit.plugin.java.JavaPlugin; 
import me.Nightfighter001.GlobalSystem.Listener.Join; 

public class main extends JavaPlugin { 

public static main getPlugin() { 
    return plugin; 
} 

private static main plugin; 

@Override 
public void onEnable() { 
    plugin = this; 

    new Join(this); 

    ConsoleCommandSender console = Bukkit.getConsoleSender(); 
    console.sendMessage(new StringBuilder("\247c[\2476GlobalSystem\247c] \247bVersion \247c") 
      .append(getDescription().getVersion()).append(" \247bdes Plugins wurde aktiviert!").toString()); 
    console.sendMessage(
      "\247c[\2476GlobalSystem\247c] \247bDieses Plugin darf nur benutzt werden, wenn der Entwickler \247cNightfighter001 \247bes erlaubt!"); 
    return; 
} 

@Override 
public void onDisable() { 
    ConsoleCommandSender console = Bukkit.getConsoleSender(); 
    console.sendMessage(new StringBuilder("\247c[\2476GlobalSystem\247c] \247bVersion \2474") 
      .append(getDescription().getVersion()).append(" \247bdes Plugins wurde deaktiviert!").toString()); 
} 
} 

而在事件類:

package me.Nightfighter001.GlobalSystem.Listener; 

import org.bukkit.Bukkit; 
import org.bukkit.event.EventHandler; 
import org.bukkit.event.Listener; 
import org.bukkit.event.player.PlayerJoinEvent; 

import me.Nightfighter001.GlobalSystem.Main.main; 

public class Join implements Listener { 

public Join(main main) { 
    plugin = main; 
    plugin.getServer().getPluginManager().registerEvents(this, main); 
} 

@EventHandler 
public void onPlayerJoin(PlayerJoinEvent ev) { 
    ev.setJoinMessage(""); 
} 

main plugin = main.getPlugin(); 
} 

正如你可以在我的例子中,我使用PlayerJoinEvent看,但它也可以與BlockBreakEvent。我希望這有助於:)對不起,我的英語不好; D

+0

是的,它沒有工作。 – TechnoSwag

+0

然後我真的不知道你在做什麼錯誤......你在使用什麼IDE和哪個Bukkit或者Spigot -Version? – Nightfighter001

0

如果您不使用大寫onEnable(和onDisable)方法的名稱的大寫,您的代碼將工作。 onEnableOnEnable是兩種不同的方法,因爲java區分大小寫,並且由於您試圖覆蓋JavaPlugin超類中的特定方法,因此您需要以完全相同的方式拼寫它們。

就我所知,常規約定是無論如何你都用小寫字母開始你的方法。 @Override註解在捕獲這些類型的錯誤時非常有用,因爲它可以讓編譯器知道你的意思是覆蓋現有的方法,如果該方法不存在(例如,如果拼寫錯誤或添加了不同的參數),它會提醒你(它也讓任何讀取代碼的人立即知道你正在覆蓋現有的方法或實現一個接口)。

+0

沒錯,但我也是在我的代碼中完成的,他/她說這是行不通的:/ – Nightfighter001

+0

我在發佈之前測試了這個解決方案,以確保它是準確的(使用Craftbukkit 1.8.7,API版本1.8.7 -R0.1-SNAPSHOT)。當名稱變爲'onEnable'方法時,問題中發佈的代碼片段正常工作。我沒有看到任何原因,爲什麼代碼不會與更正。自定義的'registerEvents'方法是正確的,提問者沒有詳細說明他對你的代碼做了什麼,以及沒有按照預期去做。 –

2

下面是一個代碼示例,開始在一個過程中的服務器:

package me.Nightfighter001.GlobalSystem.Listener; 

import org.bukkit.Bukkit; 
import org.bukkit.event.EventHandler; 
import org.bukkit.event.Listener; 
import org.bukkit.event.player.PlayerJoinEvent; 

import me.Nightfighter001.GlobalSystem.Main.main; 

public class Join implements Listener { 

public Join(main main) { 
    plugin = main; 
    plugin.getServer().getPluginManager().registerEvents(this, main); 
} 

@EventHandler 
public void onPlayerJoin(PlayerJoinEvent ev) { 
    ev.setJoinMessage(""); 
} 

main plugin = main.getPlugin(); 
}