Alright, whenever I run the plugin on my bukkit server I get this error: Code: 17:31:24 [SEVERE] Could not load 'plugins\volcan33.jar' in folder 'plugins' org.bukkit.plugin.InvalidPluginException: java.lang.NullPointerException at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.j ava:182) at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager. java:305) at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager .java:230) at org.bukkit.craftbukkit.v1_6_R3.CraftServer.loadPlugins(CraftServer.ja va:241) at org.bukkit.craftbukkit.v1_6_R3.CraftServer.<init>(CraftServer.java:21 9) at net.minecraft.server.v1_6_R3.PlayerList.<init>(PlayerList.java:56) at net.minecraft.server.v1_6_R3.DedicatedPlayerList.<init>(SourceFile:11 ) at net.minecraft.server.v1_6_R3.DedicatedServer.init(DedicatedServer.jav a:107) at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java :393) at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:5 83) Caused by: java.lang.NullPointerException at com.gmail.mnoco8.Destruction.<init>(Destruction.java:30) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Sou rce) at java.lang.reflect.Constructor.newInstance(Unknown Source) at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.j ava:178) ... 9 more Here is my code: Code:java package com.gmail.mnoco8; import java.util.HashMap; import java.util.Map;import java.util.Random; import org.bukkit.Location;import org.bukkit.Material;import org.bukkit.block.Block;import org.bukkit.command.Command;import org.bukkit.command.CommandSender;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.block.BlockPlaceEvent;import org.bukkit.plugin.java.JavaPlugin; public class Destruction extends JavaPlugin implements Listener{ public void onEnable() {getServer().getPluginManager().registerEvents(this, this); } public void onDisable() { } Random rand = new Random();Map<String, Location>locations = new HashMap<String, Location>();Location b = (Location) locations.get(Material.DRAGON_EGG).getBlock();Location loc = locations.get(b);Location loc2 = locations.put("Dragon_EGG", loc); @EventHandlerpublic void onBlockPlace(BlockPlaceEvent e){ Block block = e.getBlockPlaced(); if(block.getType() == Material.DRAGON_EGG){ loc2.add(loc); }}public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){ if (cmd.getName().equalsIgnoreCase("Volcano")); getServer().getWorld(label).spawnFallingBlock(loc, Material.LAVA, (byte) 0); return false;}} and here is my plugin.yml: Code: name: volcano main: com.gmail.mnoco8.Destruction version: 1.0 commands: volcano: usage: volcano
mnoco8 On line 29, you define a location hashmap of type <String, Location>, but you attempt to grab a value from it of the type Material on line 30. This gives a null value, because the HashMap has a key type of String, not Material. Fix that.
Maurdekye I changed such, but Code:java Material b = locations.get(material.dragon_egg).getblock seems to go quite funky, either resulting in changing material to block or material to location which present their own errors
Maurdekye This is all I have changed: Code:java Map<Material,Location>locations = new HashMap<Material, location>();Material b = locations.get(Material.DRAGON_EGG).getBlock();Location loc = locations.get(b);Location loc2 = locations.put(b, loc);
mnoco8 This seems like a really easy problem because like Maurdekye was saying: You define a Hashmap on line 29, then you turn around and try to get data from the HashMap without ever populating the HashMap with data. Hopefully this helps. Good luck!
Europia79 I am trying to add data, then call it so the .get i am trying to get the location of a block and then use it to put it in the hashmap and store it
mnoco8 I would 1. define the class 2. define the fields 3. initialize all the fields in the contructor 4. Use events gather data and populate your HashMap Code:java package com.gmail.mnoco8; import java.util.HashMap; import java.util.Map;import java.util.Random;import org.bukkit.Location;import org.bukkit.Material;import org.bukkit.block.Block;import org.bukkit.command.Command;import org.bukkit.command.CommandSender;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.block.BlockPlaceEvent;import org.bukkit.plugin.java.JavaPlugin; public class Destruction extends JavaPlugin implements Listener { Random rand;Map<String, Location> locations; /*** Constructor*/public Destruction() {rand = new Random();locations = new HashMap<String, Location>();} public void onEnable() {getServer().getPluginManager().registerEvents(this, this);} public void onDisable() {} @EventHandlerpublic void onBlockPlace(BlockPlaceEvent e){Block block = e.getBlockPlaced();if(block.getType() == Material.DRAGON_EGG){locations.put(e.getPlayer().getName(), block.getLocation());}}public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){if (cmd.getName().equalsIgnoreCase("Volcano"));getServer().getWorld(label).spawnFallingBlock(loc, Material.LAVA, (byte) 0);return false;}}
Europia79 this presented more errors than usual, I just need to store the location, just get it simple as that then be able to call it later.
mnoco8 it works flawlessly for me: I used the event to gather data and store it into the HashMap. Then I used the "/gethashmap" command to access the data in it. Code:java package mc.euro.destruction; import java.util.HashMap; import java.util.Map;import java.util.Random;import org.bukkit.Location;import org.bukkit.Material;import org.bukkit.block.Block;import org.bukkit.command.Command;import org.bukkit.command.CommandSender;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.block.BlockPlaceEvent;import org.bukkit.plugin.java.JavaPlugin; public class Destruction extends JavaPlugin implements Listener { Random rand; Map<String, Location> locations; /** * Constructor */ public Destruction() { rand = new Random(); locations = new HashMap<String, Location>(); } @Override public void onEnable() { getServer().getPluginManager().registerEvents(this, this); getServer().getPluginCommand("getHashMap").setExecutor(this); } @Override public void onDisable() { } @EventHandler public void onBlockPlace(BlockPlaceEvent e) { e.getPlayer().sendMessage("Destruction event called."); Block block = e.getBlockPlaced(); if (block.getType() == Material.DRAGON_EGG) { locations.put(e.getPlayer().getName(), block.getLocation()); } } @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (cmd.getName().equalsIgnoreCase("getHashMap") && locations.containsKey(sender.getName())) { sender.sendMessage("" + locations.get(sender.getName()).toString()); } return true; }}