Solved List causing invincibility bug

Discussion in 'Plugin Development' started by kreashenz, Sep 28, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    kreashenz

    One of my friends figured how the bug was created. We have a list that a player's name gets added to when they use a command and when you're in the list, you're prone to being 1 hit killed.

    This is the list (located in the main class, "plugin" variable is directed to main class)
    Code:java
    1. public List<String> vulnerable = new ArrayList<String>();


    This is the command
    Code:java
    1. @Override
    2. public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) {
    3. if(s instanceof Player){
    4. final Player p = (Player)s;
    5. EconomyResponse soup = plugin.econ.withdrawPlayer(p.getName(), 150D);
    6. if(soup.transactionSuccess()){
    7. p.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 200, 3));
    8. p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 200, 3));
    9. p.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 200, 3));
    10. armor.put(p.getName(), p.getInventory().getArmorContents());
    11. p.getInventory().setHelmet(new ItemStack(Material.WOOL, 1, (short)14));
    12. plugin.vulnerable.add(p.getName()); // This is causing the bug.. This list.
    13. new BukkitRunnable(){
    14. public void run(){
    15. for(int i = 1; i <= 35; i++)p.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
    16. Functions.tell(p, "§7You have successfully obtained §6a full inventory of soup §7at a cost of 150 credits");
    17. p.getInventory().setArmorContents(armor.get(p.getName()));
    18. armor.remove(p.getName());
    19. if(plugin.vulnerable.contains(p.getName()))plugin.vulnerable.remove(p.getName());
    20. }
    21. }.runTaskLater(plugin, 200L);
    22. }
    23. } else s.sendMessage("You must be a player to use this!");
    24. return true;
    25. }


    Where I'm registering the one hit thing
    Code:java
    1. // entity damage event
    2. if(plugin.vulnerable.contains(p.getName())){
    3. e.setDamage(Double.MAX_VALUE);
    4. }


    And one last way I'm removing the list.
    Code:java
    1. // PlayerDeathEvent
    2. if(plugin.vulnerable.contains(p.getName()))plugin.vulnerable.remove(p.getName());


    I thought I was creating a new instance of my main class somewhere, but I haven't and now I am completely stumped..
    Thanks in advanced!
     
  2. Offline

    1Rogue

    Can you give full classes, and show how you're initializing the plugin variable in each of them?
     
  3. Offline

    kreashenz

    1Rogue My events class (where I have the entity damage event) is 900 lines long, so I won't post that whole one, just the methods using it.

    Events stuff
    Code:java
    1. private StrayyaKits plugin;
    2.  
    3. public Events(StrayyaKits plugin){
    4. this.plugin = plugin;
    5. }
    6.  
    7. @EventHandler
    8. public void onPlayerDeath(PlayerDeathEvent e){
    9. e.setDeathMessage(null);
    10. e.getDrops().clear();
    11. final Player p = e.getEntity();
    12. p.setFlying(false);
    13. p.setAllowFlight(false);
    14. PManager pm = PManager.getPManager(p);
    15. pm.setConfDeaths();
    16. if(p.getKiller() != null && p.getKiller() instanceof Player && p != p.getKiller()){
    17. final Player k = (Player)p.getKiller();
    18. PManager km = PManager.getPManager(k);
    19.  
    20. km.setConfKills();
    21. km.addStreak();
    22. km.setScoreboard();
    23.  
    24. Random rand = new Random();
    25. int amount = rand.nextInt(150 - 100 + 1) + 100;
    26.  
    27. EconomyResponse econR = plugin.econ.depositPlayer(k.getName(), amount);
    28. if(econR.transactionSuccess())Functions.tell(k, "§7You have received §6" + amount + " credits §7for killing " + p.getDisplayName());
    29.  
    30. if(km.hasKit()){
    31. if(km.getKit().equals(Kit.VAMPIRE)){
    32. k.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 160, 1));
    33. k.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 160, 1));
    34. k.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 160, 1));
    35.  
    36. final ItemStack helm = k.getInventory().getHelmet();
    37. final ItemStack chest = k.getInventory().getChestplate();
    38. final ItemStack legs = k.getInventory().getLeggings();
    39.  
    40. ItemStack h = Functions.colour(new ItemStack(Material.LEATHER_HELMET), Color.BLACK);
    41. ItemStack c = Functions.colour(new ItemStack(Material.LEATHER_CHESTPLATE), Color.RED);
    42. ItemStack l = Functions.colour(new ItemStack(Material.LEATHER_LEGGINGS), Color.BLACK);
    43.  
    44. h.addUnsafeEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 3);
    45. c.addUnsafeEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 3);
    46. l.addUnsafeEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 3);
    47.  
    48. k.getInventory().setHelmet(h);
    49. k.getInventory().setChestplate(c);
    50. k.getInventory().setLeggings(l);
    51.  
    52. new BukkitRunnable(){
    53. public void run(){
    54. k.getInventory().setHelmet(helm);
    55. k.getInventory().setChestplate(chest);
    56. k.getInventory().setLeggings(legs);
    57. }
    58. }.runTaskLater(plugin, 180L);
    59. }
    60. }
    61. }
    62. if(cooldown.contains(p.getName()))cooldown.remove(p.getName());
    63. //if(criminal.containsKey(p.getName()))criminal.remove(p.getName());
    64. if(kangarooList.contains(p.getName()))kangarooList.remove(p.getName());
    65. if(plugin.vulnerable.contains(p.getName()))plugin.vulnerable.remove(p.getName());
    66. if(pm.hasKit())plugin.kit.remove(p.getName());
    67. pm.streak.remove(p.getName());
    68. pm.setScoreboard();
    69.  
    70. new BukkitRunnable(){
    71. public void run(){
    72. try {
    73. Object nmsPlayer = p.getClass().getMethod("getHandle").invoke(p);
    74. Object packet = NMSStuff.getNMSClass("Packet205ClientCommand").newInstance();
    75. packet.getClass().getField("a").set(packet, 1);
    76. Object con = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
    77. con.getClass().getMethod("a", packet.getClass()).invoke(con, packet);
    78. } catch (Throwable e) {
    79. e.printStackTrace();
    80. }
    81. }
    82. }.runTaskLater(plugin, 2L);
    83. }
    84.  
    85. @EventHandler
    86. public void onEntityDamage(EntityDamageEvent e){
    87. if(e.getEntity() instanceof Player){
    88. Player p = (Player) e.getEntity();
    89. PManager pm = PManager.getPManager(p);
    90. if(pm.hasKit()){
    91. if(pm.getKit().equals(Kit.SUPERMAN)){
    92. if(e.getCause().equals(DamageCause.FALL)){
    93. e.setCancelled(true);
    94. }
    95. }
    96.  
    97. if(pm.getKit().equals(Kit.STOMPER)){
    98. if(e.getCause().equals(DamageCause.FALL)){
    99. double dmg = e.getDamage();
    100. if(dmg >= 4){
    101. for(Entity ents : p.getNearbyEntities(5, 5, 5)){
    102. if(ents instanceof Player){
    103. Player pEnt = (Player)ents;
    104. if(pEnt.isSneaking()){
    105. pEnt.damage(dmg / 2, p);
    106. } else {
    107. pEnt.damage(dmg / 1.2, p);
    108. }
    109. }
    110. }
    111. e.setDamage(e.getDamage() / 5);
    112. }
    113. }
    114. }
    115.  
    116. if(pm.getKit().equals(Kit.KANGAROO)){
    117. if(e.getCause().equals(DamageCause.FALL)){
    118. e.setCancelled(true);
    119. }
    120. }
    121.  
    122. }
    123.  
    124. if(frozen.contains(p.getName())){
    125. if(e.getCause().equals(DamageCause.ENTITY_ATTACK)){
    126. e.setCancelled(true);
    127. }
    128. }
    129.  
    130. if(plugin.vulnerable.contains(p.getName())){
    131. e.setDamage(Double.MAX_VALUE);
    132. }
    133.  
    134. }
    135. }


    And the command classes

    Code:java
    1. private StrayyaKits plugin;
    2.  
    3. public CmdSoup(StrayyaKits plugin){
    4. this.plugin = plugin;
    5. }
    6.  
    7. @Override
    8. public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) {
    9. if(s instanceof Player){
    10. final Player p = (Player)s;
    11. EconomyResponse soup = plugin.econ.withdrawPlayer(p.getName(), 150D);
    12. if(soup.transactionSuccess()){
    13. p.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 200, 3));
    14. p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 200, 3));
    15. p.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 200, 3));
    16. armor.put(p.getName(), p.getInventory().getArmorContents());
    17. p.getInventory().setHelmet(new ItemStack(Material.WOOL, 1, (short)14));
    18. plugin.vulnerable.add(p.getName()); // This is causing the bug.. This list.
    19. new BukkitRunnable(){
    20. public void run(){
    21. for(int i = 1; i <= 35; i++)p.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
    22. Functions.tell(p, "§7You have successfully obtained §6a full inventory of soup §7at a cost of 150 credits");
    23. p.getInventory().setArmorContents(armor.get(p.getName()));
    24. armor.remove(p.getName());
    25. if(plugin.vulnerable.contains(p.getName()))plugin.vulnerable.remove(p.getName());
    26. }
    27. }.runTaskLater(plugin, 200L);
    28. }
    29. } else s.sendMessage("You must be a player to use this!");
    30. return true;
    31. }
     
Thread Status:
Not open for further replies.

Share This Page