Getting a world back from the config

Discussion in 'Plugin Development' started by OneBillionAndOne, Nov 1, 2013.

Thread Status:
Not open for further replies.
  1. So, ive got a config;
    Code:
    # Default config
    location:
      worldblueflagspawn: world
      Xblueflagspawn: -329.60631036191387
      Yblueflagspawn: 24.5
      Zblueflagspawn: 1237.4847516713983
      worldspawn: world
      Xspawn: -329.4218194772162
      Yspawn: 64.0
      Zspawn: 1197.2321144446996
      worldredflagspawn: world
      Xredflagspawn: -329.66881066353
      Yredflagspawn: 24.5
      Zredflagspawn: 1147.2529804005433
      worldredspawn: world
      Xredspawn: -329.4240839753071
      Yredspawn: 4.0
      Zredspawn: 1116.3258540664715
      worldbluespawn: world
      Xbluespawn: -329.56349019030137
      Ybluespawn: 4.0
      Zbluespawn: 1268.7211798279554
    max_points: 3
    classes:
      newclass1:
        name: Demo
        inv:
          helmet: 306
          chestplate: 307
          leggings: 308
          boots: 309
          items: 1, 2, 3, 4
    
    And some code;
    Code:java
    1. package org.gmail.firework4lj.util;
    2.  
    3. import java.util.List;
    4.  
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.DyeColor;
    8. import org.bukkit.Location;
    9. import org.bukkit.Material;
    10. import org.bukkit.World;
    11. import org.bukkit.entity.Entity;
    12. import org.bukkit.entity.Item;
    13. import org.bukkit.entity.Player;
    14. import org.bukkit.inventory.ItemStack;
    15. import org.bukkit.util.Vector;
    16. import org.gmail.firework4lj.CtfMain;
    17. import org.gmail.firework4lj.listeners.FlagpickupListener;
    18.  
    19. public class Reloadgame {
    20.  
    21. private static CtfMain ctfmain;
    22.  
    23. public Reloadgame(CtfMain ctfMain) {
    24. this.ctfmain = ctfMain;
    25. }
    26.  
    27. @SuppressWarnings("deprecation")
    28. public static void onRestartGame(){
    29. final String worldblueflag = ctfmain.getConfig().getString("location.worldblueflagspawn");
    30. final String worldredflag = ctfmain.getConfig().getString("location.worldredflagspawn");
    31. final ItemStack redflag = new ItemStack(Material.WOOL, 1, DyeColor.RED.getData());
    32. final ItemStack blueflag = new ItemStack(Material.WOOL, 1, DyeColor.BLUE.getData());
    33. final Location bluef = new Location(Bukkit.getServer().getWorld(worldblueflag), ctfmain.getConfig().getDouble("location.Xblueflagspawn"), ctfmain.getConfig().getDouble("location.Yblueflagspawn"), ctfmain.getConfig().getDouble("location.Zblueflagspawn"));
    34. final Location redf = new Location(Bukkit.getServer().getWorld(worldredflag), ctfmain.getConfig().getDouble("location.Xredflagspawn"), ctfmain.getConfig().getDouble("location.Yredflagspawn"), ctfmain.getConfig().getDouble("location.Zredflagspawn"));
    35.  
    36. int seconds = 15;
    37. Bukkit.getServer().getScheduler()
    38. .scheduleSyncDelayedTask(ctfmain, new Runnable() {
    39. public void run() {
    40. for(String pl : CtfMain.ctfingame.keySet()){
    41. Bukkit.getPlayerExact(pl).performCommand("ctfleave");
    42. }
    43.  
    44. // TODO fix this part so its non server-wide
    45.  
    46. List<Entity> entlist = Bukkit.getWorld(worldredflag).getEntities();
    47. for (Entity current : entlist) {
    48. if (current instanceof Item) {
    49. current.remove();
    50. }
    51. }
    52. Bukkit.getWorld(worldredflag).dropItemNaturally(redf, redflag)
    53. .setVelocity(new Vector(0D, 0D, 0D));
    54. Bukkit.getWorld(worldblueflag).dropItemNaturally(bluef, blueflag)
    55. .setVelocity(new Vector(0D, 0D, 0D));
    56. CtfMain.blueflag.clear();
    57. CtfMain.redflag.clear();
    58. CtfMain.bluescore.clear();
    59. CtfMain.redscore.clear();
    60. CtfMain.ctfclass.clear();
    61. CtfMain.teamblue.clear();
    62. CtfMain.teamred.clear();
    63. CtfMain.ctfingame.clear();
    64. CtfMain.redscore.put("red", 0);
    65. CtfMain.bluescore.put("blue", 0);
    66.  
    67. }
    68. }, (seconds * 20));
    69. }
    70.  
    71. }
    72.  

    And im getting this error;
    Code:
    2013-10-23 19:34:46 [SEVERE] Could not pass event PlayerPickupItemEvent to Ctf v0.0.3
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
        at net.minecraft.server.v1_6_R3.EntityItem.b_(EntityItem.java:227)
        at net.minecraft.server.v1_6_R3.EntityHuman.r(EntityHuman.java:426)
        at net.minecraft.server.v1_6_R3.EntityHuman.c(EntityHuman.java:418)
        at net.minecraft.server.v1_6_R3.EntityLiving.l_(EntityLiving.java:1277)
        at net.minecraft.server.v1_6_R3.EntityHuman.l_(EntityHuman.java:157)
        at net.minecraft.server.v1_6_R3.EntityPlayer.h(EntityPlayer.java:228)
        at net.minecraft.server.v1_6_R3.PlayerConnection.a(PlayerConnection.java:343)
        at net.minecraft.server.v1_6_R3.Packet10Flying.handle(SourceFile:136)
        at net.minecraft.server.v1_6_R3.NetworkManager.b(NetworkManager.java:296)
        at net.minecraft.server.v1_6_R3.PlayerConnection.e(PlayerConnection.java:116)
        at net.minecraft.server.v1_6_R3.ServerConnection.b(SourceFile:37)
        at net.minecraft.server.v1_6_R3.DedicatedServerConnection.b(SourceFile:30)
        at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:592)
        at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:227)
        at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:488)
        at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java:421)
        at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:583)
    Caused by: java.lang.NullPointerException
        at org.gmail.firework4lj.util.Reloadgame.onRestartGame(Reloadgame.java:29)
        at org.gmail.firework4lj.listeners.FlagpickupListener.onPlayerPickupItem(FlagpickupListener.java:67)
        at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
        ... 20 more
    And i don't know why its giving me a NPE for that... Anyone know what im overlooking?
     
  2. Offline

    adam753

    It's because you're using a static method to access a static variable. You're setting it in the constructor, but that will only set it when you create a new instance of that class, so until you do that, the variable will be null.

    tl;dr don't use static.
     
  3. Gives me an error on Reloadgame.reloadGame(); in my other class. "Cannot make a static reference to the non-static method reloadGame() from the type Reloadgame"
    Code (only like half the class to keep away code copiers):
    Code:java
    1. public class FlagpickupListener implements Listener {
    2.  
    3. private CtfMain ctfmain;
    4.  
    5. public FlagpickupListener(CtfMain ctfMain) {
    6. this.ctfmain = ctfMain;
    7. }
    8.  
    9. // TODO Make it so players out of game can pick up items outside of game.
    10.  
    11. @SuppressWarnings("deprecation")
    12. @EventHandler
    13. public void onPlayerPickupItem(PlayerPickupItemEvent event) {
    14. final String worldblueflag = ctfmain.getConfig().getString("location.worldblueflagspawn");
    15. final String worldredflag = ctfmain.getConfig().getString("location.worldredflagspawn");
    16. Player p = event.getPlayer();
    17. Item drop = event.getItem();
    18. String pn = event.getPlayer().getName();
    19. final ItemStack redflag = new ItemStack(Material.WOOL, 1, DyeColor.RED.getData());
    20. final ItemStack blueflag = new ItemStack(Material.WOOL, 1, DyeColor.BLUE.getData());
    21. final Location bluef = new Location (Bukkit.getServer().getWorld(worldblueflag), ctfmain.getConfig().getDouble("location.Xblueflagspawn"), ctfmain.getConfig().getDouble("location.Yblueflagspawn"), ctfmain.getConfig().getDouble("location.Zblueflagspawn"));
    22. final Location redf = new Location(Bukkit.getServer().getWorld(worldredflag), ctfmain.getConfig().getDouble("location.Xredflagspawn"), ctfmain.getConfig().getDouble("location.Yredflagspawn"), ctfmain.getConfig().getDouble("location.Zredflagspawn"));
    23. if(!CtfMain.ctfingame.containsKey(p.getName()) || p.isOp()){
    24. event.setCancelled(false);
    25. }
    26. if(CtfMain.ctfingame.get(p.getName()) == null){
    27. event.setCancelled(true);
    28. }
    29. if (drop.getItemStack().equals(redflag) && CtfMain.teamblue.containsKey(pn) && CtfMain.ctfingame.containsKey(p.getName())) {
    30. CtfMain.redflag.put("redflag", pn);
    31. for(String pl : CtfMain.ctfingame.keySet()){
    32. Bukkit.getPlayerExact(pl).sendMessage(ChatColor.BLUE + pn + ChatColor.RED+ " Stole the redflag!");
    33. }
    34. } else if (drop.getItemStack().equals(redflag)&& p.getInventory().contains(blueflag) && CtfMain.ctfingame.containsKey(p.getName())) {
    35. for(String pl : CtfMain.ctfingame.keySet()){
    36. Bukkit.getPlayerExact(pl).sendMessage(ChatColor.RED + pn + ChatColor.GOLD + " Has captured the " + ChatColor.BLUE + "blue teams "+ ChatColor.GOLD + "flag!");
    37. }
    38. int before = CtfMain.redscore.get("red");
    39. int after = before + 1;
    40. CtfMain.redscore.put("red", after);
    41.  
    42. // RESTART GAME MECHANICS
    43. if (CtfMain.redscore.get("red") == ctfmain.getConfig().getInt("max_points")) {
    44. for(String pl : CtfMain.ctfingame.keySet()){
    45. Bukkit.getPlayerExact(pl).sendMessage(ChatColor.GOLD + "Good game! Team "+ ChatColor.RED + "red " + ChatColor.GOLD+ "wins! Restarting game in 15 seconds.");
    46. }
    47. Reloadgame.reloadGame();
    48. }
     
  4. Offline

    adam753

    Yeah, because it's non-static you have to create an instance of the class.
    Code:
    Reloadgame r = new Reloadgame(this);
    
     
Thread Status:
Not open for further replies.

Share This Page