package me.TimewalkerZ.Broadcastoncommand;
import java.util.List;
import java.util.logging.Logger;
import org.bukkit.ChatColor;
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.player.PlayerCommandPreprocessEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.java.JavaPlugin;
import net.minecraft.server.v1_8_R1.*;
public class Broadcastoncommand extends JavaPlugin implements Listener {
public final Logger logger = Logger.getLogger("Minecraft");
public static Broadcastoncommand plugin;
@Override
public void onDisable() {
PluginDescriptionFile pdfFile = this.getDescription();
this.logger.info(pdfFile.getName() + " Has been Disabled!");
}
@Override
public void onEnable() {
PluginDescriptionFile pdfFile = this.getDescription();
this.logger.info(pdfFile.getName() + " Version " + pdfFile.getVersion() + " Has been Enabled!");
getConfig().options().copyDefaults(true);
saveConfig();
}
@EventHandler
public void onPlayerCommandPreprocessEvent(PlayerCommandPreprocessEvent event) {
Player p = event.getPlayer();
if(!p.hasPermission("Broadcastoncommand.silent")) {
List<String> cmds = plugin.getConfig().getStringList("CommandsBC");
for (String command : cmds) {
if(event.getMessage().toLowerCase().startsWith("/" + command)) {
p.sendMessage("§6" + p + "§6 just did the command " + command + "§6 join them if you have the command unlocked.");
}
}
}
}
嗨,我尝试过这个,但它似乎根本不起作用。我的意思是它编译并运行没有错误,但它在游戏中没有做任何事情。顺便说一句,这个插件的目的是在有人在配置中使用命令时进行广播。
答案 0 :(得分:2)
在onEnable
方法中添加此行:
getServer().getPluginManager().registerEvents(this, this);
第一个this
参数是为其注册事件的插件,第二个this
参数是插件的监听器。
除此之外,由于“插件”而抛出NullPointerException。这是返回null,因为plugin
未设置为任何内容。相反,请使用此
List<String> cmds = this.getConfig().getStringList("CommandsBC");
实现此目的的另一种方法是保持单例模式,即在启动时将插件实例分配到plugin
,方法是在onEnable
中添加此行:
plugin = this;
答案 1 :(得分:0)
要注册您的活动,您需要添加:
Bukkit.getPluginManager().registerEvents(this, this);
将this
听众注册到this
类
由于以下原因,您还获得了NullPointerException
:
plugin
为空,最终您可以删除plugin.
,因为它是您的主类,而getConfig()
是父类中的方法。 2。)getConfig()
返回null,因为fil不存在或未生成。您需要将config.yml
添加到项目中的src
文件夹中,之后,如果使用saveDefaultConfig()
方法,则需要在插件启用时生成它该文件不存在。 e.g:
try
{
File config = new File(getDataFolder(), "config.yml");
if(!getDataFolder().exists())getDataFolder().mkdirs();
if(!config.exists())saveDefaultConfig();
}
catch (Exception e)
{
e.printStackTrace();
}
3。)config中指定的路径不存在。记住路径区分大小写。由于列表为空,getConfig().getStringList("CommandsBC")
可能返回null,或者路径不存在(请记住它区分大小写)。
这些选项可能会导致您的NullPointerException
,如果您需要更多信息,请发表评论。