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.");
}
}
}
}
嗨,我试着运行这个,但它似乎根本不起作用。我的意思是,它编译和运行没有错误,但它不做任何游戏。顺便说一下,这个插件的目的是广播当有人在配置中使用命令时。
在您的onEnable
方法中添加这一行:
getServer().getPluginManager().registerEvents(this, this);
第一个this
参数是要注册事件的插件,第二个this
参数是插件的监听器。
与此同时,一个NullPointerException被抛出,因为"插件"。这将返回null,因为plugin
没有设置为任何东西。相反,使用
List<String> cmds = this.getConfig().getStringList("CommandsBC");
另一种保持单例模式的方法是在启动时将插件实例分配给plugin
,通过在onEnable
中添加这一行:
plugin = this;
要注册您的事件,您需要添加:
Bukkit.getPluginManager().registerEvents(this, this);
注册this
监听器到this
类
你也得到一个NullPointerException
,因为:
- 1。)
plugin
是空的,最终你可以删除plugin.
,因为它是你的主类和getConfig()
是父类中的一个方法。 2)。
getConfig()
返回null,因为文件不存在或没有生成。您需要将config.yml
添加到项目中的src
文件夹中,在此之后,您将需要在插件启用时使用saveDefaultConfig()
方法生成它,如果文件不存在。例如:try { File config = new File(getDataFolder(), "config.yml"); if(!getDataFolder().exists())getDataFolder().mkdirs(); if(!config.exists())saveDefaultConfig(); } catch (Exception e) { e.printStackTrace(); }
3)。配置文件中指定的路径不存在。记住路径是区分大小写的。
getConfig().getStringList("CommandsBC")
可能由于空列表而返回null,或者路径不存在(记住它是区分大小写的)。这些选项可能导致您的
NullPointerException
,如果您需要更多信息,请留下评论