Filled [REQUEST] Virtual XP System (no orbs!)

Discussion in 'Archived: Plugin Requests' started by Nuinbot, Sep 18, 2013.

  1. Offline

    Vandrake

  2. Offline

    Nuinbot

    Works great! Thanks so much! If and when you add this to BukkitDev, please add me as a Tester, Documenter if you want me to write up anything for it. With later Bukkit releases, I am sure people would like to keep this updated. :)

    Also, if you wouldn't mind, I would like to look at the code for my own studies. I tried learning plugins a while back but have had relatively little success. Something like this would be a nice jumping point for me. Thanks again!
     
  3. Offline

    Vandrake

    You could just open the plugin with JDGUI xD but okay. And by the way, I'm not posting this to BukkitDev.


    Main Class:
    Code:java
    1. package me.Vandrake.Nuin;
    2.  
    3. import java.io.File;
    4. import java.util.HashMap;
    5. import java.util.Map;
    6.  
    7. import org.bukkit.Bukkit;
    8. import org.bukkit.command.Command;
    9. import org.bukkit.command.CommandSender;
    10. import org.bukkit.configuration.file.FileConfiguration;
    11. import org.bukkit.entity.EntityType;
    12. import org.bukkit.plugin.java.JavaPlugin;
    13.  
    14. public class MainXP extends JavaPlugin
    15. {
    16. public FileConfiguration config;
    17. public Methods me = new Methods(this);
    18.  
    19. public Map<String, String> PlInfo = new HashMap<String, String>();
    20.  
    21. public void onEnable()
    22. {
    23. StartConfig();
    24. Bukkit.getPluginManager().registerEvents(new EventListener(this), this);
    25. }
    26.  
    27. public boolean onCommand(CommandSender cs, Command cmd, String cl, String[] args)
    28. {
    29. if(cmd.getName().equalsIgnoreCase("vxp") || cmd.getAliases().contains(cmd.getName()))
    30. {
    31. if(args.length < 1 || args[0].equalsIgnoreCase("help"))
    32. {
    33. ShowHelp(cs);
    34. }
    35. else
    36. {
    37. if(args[0].equalsIgnoreCase("reload"))
    38. {
    39. ReloadConfig(cs);
    40. }
    41. }
    42. }
    43. return false;
    44. }
    45. private void ReloadConfig(CommandSender cs)
    46. {
    47. if(cs.hasPermission("vxp.admin"))
    48. {
    49. reloadConfig();
    50. config = getConfig();
    51. cs.sendMessage("§6VirtualXP §2Config.yml reloaded!");
    52. }
    53. else
    54. {
    55. cs.sendMessage("§4VirtualXP §cYou have no permission to do this.");
    56. }
    57. }
    58.  
    59. private void ShowHelp(CommandSender cs)
    60. {
    61. cs.sendMessage("/vxp help - Shows this page\n/vxp reload - Reloads the config file.");
    62. }
    63.  
    64. private void StartConfig()
    65. {
    66. config = getConfig();
    67. if(!(new File(getDataFolder() + File.separator + "config.yml").exists()))
    68. {
    69. config.set("Sound", "ORB_PICKUP");
    70. config.set("xp loss on death.enabled", true);
    71. config.set("xp loss on death.percentage", 10);
    72. config.set("xp inside a bottle", 20);
    73. for(EntityType e : org.bukkit.entity.EntityType.values())
    74. {
    75. if(!e.toString().equalsIgnoreCase("dropped_item") && !e.toString().equalsIgnoreCase("EXPERIENCE_ORB") && !e.toString().equalsIgnoreCase("Leash_hitch") &&
    76. !e.toString().equalsIgnoreCase("painting") && !e.toString().equalsIgnoreCase("arrow") && !e.toString().equalsIgnoreCase("snowball") &&
    77. !e.toString().equalsIgnoreCase("fireball") && !e.toString().equalsIgnoreCase("small_fireball") && !e.toString().equalsIgnoreCase("ender_pearl") &&
    78. !e.toString().equalsIgnoreCase("ender_signal") && !e.toString().equalsIgnoreCase("thrown_exp_bottle") && !e.toString().equalsIgnoreCase("item_frame") &&
    79. !e.toString().equalsIgnoreCase("wither_skull") && !e.toString().equalsIgnoreCase("primed_tnt") && !e.toString().equalsIgnoreCase("falling_block") &&
    80. !e.toString().equalsIgnoreCase("firework") && !e.toString().equalsIgnoreCase("boat") && !e.toString().contains("MINECART") &&
    81. !e.toString().equalsIgnoreCase("ender_crystal") && !e.toString().equalsIgnoreCase("splash_potion") && !e.toString().equalsIgnoreCase("fishing_hook") &&
    82. !e.toString().equalsIgnoreCase("lightning") && !e.toString().equalsIgnoreCase("weather") && !e.toString().equalsIgnoreCase("player") &&
    83. !e.toString().equalsIgnoreCase("complex_part") && !e.toString().equalsIgnoreCase("unknown") && !e.toString().equalsIgnoreCase("egg"))
    84. {
    85. config.set("xp."+e, 10);
    86. }
    87. }
    88. config.set("xp.blocks.IRON_ORE", 10);
    89. config.set("xp.blocks.COAL_ORE", 10);
    90. config.set("xp.blocks.GOLD_ORE", 10);
    91. config.set("xp.blocks.DIAMOND_ORE", 10);
    92. config.set("xp.blocks.EMERALD_ORE", 10);
    93. config.set("xp.blocks.GLOWING_REDSTONE_ORE", 10);
    94. config.set("xp.blocks.LAPIS_ORE", 10);
    95. config.set("xp.blocks.QUARTZ_ORE", 10);
    96. config.set("xp.blocks.MOB_SPAWNER", 10);
    97. // SMELTING
    98. config.set("xp.smelting.COOKED_PORKCHOP", 10);
    99. config.set("xp.smelting.STEAK", 10);
    100. config.set("xp.smelting.COOKED_CHICKEN", 10);
    101. config.set("xp.smelting.COOKED_FISH", 10);
    102. config.set("xp.smelting.BAKED_POTATO", 10);
    103. config.set("xp.smelting.IRON_INGOT", 10);
    104. config.set("xp.smelting.GOLD_INGOT", 10);
    105. config.set("xp.smelting.GLASS", 10);
    106. config.set("xp.smelting.STONE", 10);
    107. config.set("xp.smelting.BRICK", 10);
    108. config.set("xp.smelting.NETHER_BRICK", 10);
    109. config.set("xp.smelting.HARDENED_CLAY", 10);
    110. config.set("xp.smelting.CACTUS_GREEN", 10);
    111. config.set("xp.smelting.CHARCOAL", 10);
    112. config.set("xp.smelting.DIAMOND", 10);
    113. config.set("xp.smelting.LAPIS_LAZULI", 10);
    114. config.set("xp.smelting.REDSTONE", 10);
    115. config.set("xp.smelting.COAL", 10);
    116. config.set("xp.smelting.EMERALD", 10);
    117. config.set("xp.smelting.NETHER_QUARTZ", 10);
    118. saveConfig();
    119. }
    120. }
    121. }


    Secondary Class (Methods):
    Code:java
    1. package me.Vandrake.Nuin;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.Material;
    5. import org.bukkit.Sound;
    6. import org.bukkit.entity.Player;
    7. import org.bukkit.event.player.PlayerInteractEvent;
    8. import org.bukkit.inventory.ItemStack;
    9.  
    10. public class Methods
    11. {
    12. private MainXP main;
    13. public Methods(MainXP x)
    14. {
    15. main = x;
    16. }
    17.  
    18. public void NormalDeath(Player p)
    19. {
    20. RemoveExperience(p,null);
    21. }
    22.  
    23. public void PlayerDeath(Player p, Player t)
    24. {
    25. RemoveExperience(p,t);
    26. }
    27.  
    28. private void RemoveExperience(Player p, Player t)
    29. {
    30. if(main.config.getBoolean("xp loss on death.enabled"))
    31. {
    32. Double perc = main.config.getDouble("xp loss on death.percentage") / 100;//10%
    33. Double lostPerc = p.getTotalExperience() - (p.getTotalExperience() * perc);//90% new dead's exp
    34. if(lostPerc < 0){lostPerc = 0.0;}
    35. main.PlInfo.put(p.getName(), lostPerc+"|"+p.getLevel());
    36. if(t != null)
    37. {
    38. t.giveExp((int) (p.getTotalExperience() * perc));
    39. PlayExpSound(t);
    40. }
    41. }
    42. }
    43.  
    44. public void RespawnPlayer(final Player p)
    45. {
    46. Bukkit.getScheduler().scheduleSyncDelayedTask(main, new Runnable()
    47. {
    48. public void run()
    49. {
    50. String[] info = ((String) main.PlInfo.get(p.getName())).split("\\|");
    51. p.giveExp((int) Double.parseDouble(info[0]));
    52. main.PlInfo.remove(p.getName());
    53. }
    54. },1);
    55. }
    56.  
    57. @SuppressWarnings("deprecation")
    58. public void RemoveItem(Player p, PlayerInteractEvent e)
    59. {
    60. if(p.getItemInHand().getAmount() > 1)
    61. {
    62. int amt = p.getItemInHand().getAmount()-1;
    63. p.setItemInHand(null);
    64. p.setItemInHand(new ItemStack(Material.EXP_BOTTLE,amt));
    65. }
    66. else
    67. {
    68. p.setItemInHand(null);
    69. }
    70. p.updateInventory();
    71. e.getPlayer().giveExp(main.config.getInt("xp inside a bottle"));
    72. PlayExpSound(p);
    73. e.setCancelled(true);
    74. p.playSound(p.getLocation(), Sound.DRINK, 100, 0);
    75. }
    76.  
    77.  
    78. public void PlayExpSound(Player p)
    79. {
    80. p.playSound(p.getLocation(), Sound.valueOf(main.config.getString("Sound").toUpperCase()), 100, 0);
    81. }
    82. }


    Event Handler(EventListener):
    Code:java
    1. package me.Vandrake.Nuin;
    2.  
    3. import java.util.Arrays;
    4. import java.util.List;
    5.  
    6. import org.bukkit.Material;
    7. import org.bukkit.entity.EntityType;
    8. import org.bukkit.event.EventHandler;
    9. import org.bukkit.event.Listener;
    10. import org.bukkit.event.block.BlockBreakEvent;
    11. import org.bukkit.event.entity.EntityDeathEvent;
    12. import org.bukkit.event.entity.PlayerDeathEvent;
    13. import org.bukkit.event.inventory.FurnaceExtractEvent;
    14. import org.bukkit.event.player.PlayerInteractEvent;
    15. import org.bukkit.event.player.PlayerRespawnEvent;
    16.  
    17. public class EventListener implements Listener
    18. {
    19. private MainXP main;
    20. public EventListener(MainXP x)
    21. {
    22. main = x;
    23. }
    24.  
    25. @EventHandler
    26. private void onPlayerDeath(PlayerDeathEvent e)
    27. {
    28. if(e.getEntity().getKiller() != null)
    29. {
    30. main.me.PlayerDeath(e.getEntity(),e.getEntity().getKiller());
    31. }
    32. else
    33. {
    34. main.me.NormalDeath(e.getEntity());
    35. }
    36. }
    37.  
    38. @EventHandler
    39. private void onPlayerRespawn(PlayerRespawnEvent e)
    40. {
    41. if(main.PlInfo.containsKey(e.getPlayer().getName()))
    42. {
    43. main.me.RespawnPlayer(e.getPlayer());
    44. }
    45. }
    46.  
    47. @EventHandler
    48. private void onBlockExp(BlockBreakEvent e)
    49. {
    50. e.setExpToDrop(0);
    51. if(e.getBlock().getType().toString().contains("ORE") || e.getBlock().getType() == Material.MOB_SPAWNER)
    52. {
    53. e.getPlayer().giveExp(main.config.getInt("xp.blocks."+e.getBlock().getType()));
    54. main.me.PlayExpSound(e.getPlayer());
    55. }
    56. }
    57. @EventHandler
    58. private void onFurnace(FurnaceExtractEvent e)
    59. {
    60. List<String> list = Arrays.asList("COOKED_PORKCHOP","STEAK","COOKED_CHICKEN","COOKED_FISH","BAKED_POTATO","IRON_INGOT","GOLD_INGOT","GLASS","STONE","BRICK"
    61. ,"NETHER_BRICK","HARDENED_CLAY","CACTUS_GREEN","CHARCOAL","DIAMOND","LAPIS_LAZULI","REDSTONE","COAL","EMERALD","NETHER_QUARTZ");
    62. if(list.contains(e.getItemType().toString()))
    63. {
    64. e.getPlayer().giveExp(main.config.getInt("xp.smelting."+e.getItemType()) * e.getItemAmount());
    65. main.me.PlayExpSound(e.getPlayer());
    66. }
    67. e.setExpToDrop(0);
    68. }
    69. @EventHandler
    70. private void onExpThrow(PlayerInteractEvent e)
    71. {
    72. if(e.getPlayer().getItemInHand() != null && e.getPlayer().getItemInHand().getType() == Material.EXP_BOTTLE)
    73. {
    74. main.me.RemoveItem(e.getPlayer(),e);
    75. }
    76. }
    77. @EventHandler
    78. private void onCreatureDeath(EntityDeathEvent e)
    79. {
    80. e.setDroppedExp(0);
    81. if(e.getEntityType() != EntityType.PLAYER)
    82. {
    83. if(e.getEntity().getKiller() != null)
    84. {
    85. e.getEntity().getKiller().giveExp(main.config.getInt("xp."+e.getEntityType()));
    86. main.me.PlayExpSound(e.getEntity().getKiller());
    87. }
    88. }
    89. }
    90. }
     
  4. Offline

    Nuinbot

    I didn't know what JDGUI was, but I downloaded it and now see what it does.

    Sorry to hear you don't want to put this plugin out there. You do good work, it should be recognized and not just by me.
     
  5. Offline

    Vandrake

    I'm just happy I fulfilled another request :3 mark this as solved and see you next request xP
     

Share This Page