当我试图在我的bukkit服务器中加载插件时,我遇到了NullPointerExc的问题,但在Eclipse中没有错误。我的插件是Rush插件,很多东西没有使用/丢失。错误是这样的:
[18:11:10] [Server thread/ERROR]: Could not load 'plugins\rush.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: java.lang.NullPointerException
at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:182) ~ [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:308) ~ [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:231) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
at org.bukkit.craftbukkit.v1_7_R1.CraftServer.loadPlugins(CraftServer.java:255) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
at org.bukkit.craftbukkit.v1_7_R1.CraftServer.<init>(CraftServer.java:233) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
at net.minecraft.server.v1_7_R1.PlayerList.<init>(PlayerList.java:63) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
at net.minecraft.server.v1_7_R1.DedicatedPlayerList.<init>(SourceFile:14) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
at net.minecraft.server.v1_7_R1.DedicatedServer.init(DedicatedServer.java:126) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:424) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
Caused by: java.lang.NullPointerException
at me.mailh.Rush.MainRush.<init>(MainRush.java:62) ~[?:?]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.7.0_45]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.7.0_45]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~ [?:1.7.0_45]
at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.7.0_45]
at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:178) ~ [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
... 9 more
以下是我的代码:
package me.mailh.Rush;
import java.io.File;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
import org.bukkit.scoreboard.Team;
public class MainRush extends JavaPlugin implements Listener{
public final Logger logger = Logger.getLogger("Minecraft");
public static MainRush plugin;
public void onEnable(){
this.logger.info("Rush is enabled.");
getServer().getPluginManager().registerEvents(this, this);
}
private ScoreboardManager manager = Bukkit.getScoreboardManager();
private Scoreboard board = manager.getNewScoreboard();
private Team bleu = board.registerNewTeam("bleu");
private Team orange = board.registerNewTeam("orange");
public void onDisable(){
this.logger.info("Rush is disabled.");
}
public boolean onCommand(CommandSender s, Command c, String lbl, String[] args){
Player pl = (Player) s;
if (lbl.equalsIgnoreCase("rush")){
if (args.length == 0){
World w = Bukkit.getWorld("rush");
Location rush = new Location( w, -210, 51, -8 );
pl.sendMessage(ChatColor.GOLD + "Teleportation...");
pl.teleport(rush);
}
if (args[0].equalsIgnoreCase("bleu")){
board.resetScores(pl.getPlayer());
orange.removePlayer(pl.getPlayer());
bleu.addPlayer(pl.getPlayer());
pl.sendMessage(ChatColor.AQUA + "Vous êtes dans l'équipe bleu");
bleu.setAllowFriendlyFire(false);
}
if (args[0].equalsIgnoreCase("leave")){
board.resetScores(pl.getPlayer());
bleu.removePlayer(pl.getPlayer());
orange.removePlayer(pl.getPlayer());
pl.sendMessage(ChatColor.RED + "Vous avez quitté votre équipe");
}
if (args[0].equalsIgnoreCase("orange")){
board.resetScores(pl.getPlayer());
bleu.removePlayer(pl.getPlayer());
orange.addPlayer(pl.getPlayer());
pl.sendMessage(ChatColor.GOLD + "Vous êtes dans l'équipe orange");
orange.setAllowFriendlyFire(false);
}
}
return true;
}
public void rollback(){
if(Bukkit.getServer().unloadWorld("rush",false))
{
new File("rush").delete();
Bukkit.getServer().createWorld(new WorldCreator("rush"));
}
}
@EventHandler
public void onLeave(PlayerQuitEvent e){
Player p = (Player) e.getPlayer();
bleu.removePlayer(p);
orange.removePlayer(p);
board.resetScores(p);
}
@EventHandler
public void Death(PlayerDeathEvent event){
if (event.getEntityType() == EntityType.PLAYER){
Player player = event.getEntity();
Team team = board.getPlayerTeam(player);
if(team.equals(bleu)){
player.sendMessage("did it work? bleu");
}
else if (team.equals(orange)){
player.sendMessage("did it work orange?");
}
}
}
}
这段代码似乎是:
private ScoreboardManager manager = Bukkit.getScoreboardManager();
private Scoreboard board = manager.getNewScoreboard();
原因是您没有在方法中声明这些变量,因此,它们会在调用onEnable()
方法之前加载,因此您无法使用Bukkit
获取任何内容,因为它还没有初始化Bukkit。
我建议在任何方法之外做这样的事情:
private ScoreboardManager manager;
private Scoreboard board;
然后在onEnable()
中执行此操作:
manager = Bukkit.getScoreboardManager();
board = manager.getNewScoreboard();
所以你会得到这样的东西:
public class MainRush extends JavaPlugin implements Listener{
private ScoreboardManager manager;
private Scoreboard board;
@Override
public void onEnable(){
//plugin enabled
manager = Bukkit.getScoreboardManager();
board = manager.getNewScoreboard();
}
}
通过这样做,您消除了加载插件时获得NullPointerException
的机会。作为一般的经验法则,在方法之外,永远不要从bukkit获得任何东西。
我正在尝试恢复一个插件,但发现了一个错误: 我做的一切都是对的!plugin.yml外部罐子和出口,但仍然不起作用。知道为什么吗?
在我的Spigot插件中,我使用重复任务每隔0.5秒更新一次玩家的库存。长时间运行代码后,我会得到。 我做了一些调试并使用JProfiler来查看导致内存泄漏的原因,并注意到ItemStacks的数量不断增加。堆遍历器显示这是由更新库存的代码引起的。这是当前代码: 经过更多的调试,我发现删除了将停止增加的itemStack数量。 什么可能导致内存泄漏? 编辑: 我已经更改了代码,不再为每个玻璃窗格
我正试着做一个插件,你输入命令/设置,它就切换布尔设置。如果set是真的,我希望当玩家加入时,它对他们说“嗨”,但如果set是假的,它什么也不做。(顺便说一句,我是唯一可以使用这个命令的人)。我试着创建两个类,一个是主类,另一个是侦听器类,但是我不能从侦听器类访问布尔值,所以我试着把它们都放在一个类中。当使用我提供的代码时,除了PlayerJoinEvent之外,一切都正常。我要么需要解决如何从另
我正在为一个服务器做一个插件,我是开发者,我正在开发一个插件!我想通过执行boss give lvl命令来生成boss鸡蛋
服务器主人让我为服务器写一个简单的插件。它只需要,如果你点击一个手里拿着一本书的书架,它会打开一个箱子。当这个人关闭那个箱子时,所有放在里面的书都被销毁了。 我了解bukkit插件开发的基础知识,但是他们网站上的说明非常复杂。我知道我必须注册手头的玩家物品确实是一本带有此代码的书: 然而,如果插件是一个被按下的按钮,手里的书被销毁会更容易,你能让我知道并帮助我完成这些步骤吗?