Solved Disable PvP, but not snowballs

Discussion in 'Plugin Development' started by ZyphiorMC, Nov 24, 2014.

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

    ZyphiorMC

    Hello guys, I have run into, yet another problem. I am trying to disable PvP, but not snowballs.
    Any help would be greatly appreciated. :)

    Code:java
    1. @SuppressWarnings("deprecation")
    2. @EventHandler
    3. public void onSnowballHit(EntityDamageByEntityEvent event)
    4. {
    5. Entity damaged = event.getEntity();
    6. Entity damageEntity = event.getDamager();
    7. Snowball snowball = (Snowball) damageEntity;
    8. LivingEntity entityThrower = (LivingEntity) snowball.getShooter();
    9.  
    10. Player playerThrower = (Player) entityThrower;
    11. Player playerHit = (Player) damaged;
    12.  
    13. if(respawn.contains(playerHit)) {
    14. event.setCancelled(true);
    15. playerThrower.sendMessage(prefix + "This player currently has respawn protection.");
    16. }
    17. else if(damageEntity instanceof Snowball) {
    18. int a = config.getInt("Settings.Game.BallsStart");
    19. int b = config.getInt("Settings.Game.BallsKill");
    20.  
    21. int kKills = data.getInt("Stats." + playerThrower.getName() + ".kills");
    22. int vDeaths = data.getInt("Stats." + playerHit.getName() + ".deaths");
    23. int kCoins = data.getInt("Stats." + playerThrower.getName() + ".coins");
    24. int KillCoins = config.getInt("Settings.Game.CoinsPerKill");
    25. double PRO = config.getInt("Settings.Game.PRO-multiplier") * KillCoins;
    26. double MVP = config.getInt("Settings.Game.MVP-multiplier") * KillCoins;
    27. double VIP = config.getInt("Settings.Game.VIP-multiplier") * KillCoins;
    28. double REG = config.getInt("Settings.Game.REG-multiplier") * KillCoins;
    29.  
    30. World greenWorld = (World) Bukkit.getServer().getWorld(config.getString("Settings.Locations.Green.World"));
    31. double greenX = config.getDouble("Settings.Locations.Green.X");
    32. double greenY = config.getDouble("Settings.Locations.Green.Y");
    33. double greenZ = config.getDouble("Settings.Locations.Green.Z");
    34. int greenPitch = config.getInt("Settings.Locations.Green.Pitch");
    35. int greenYaw = config.getInt("Settings.Locations.Green.Yaw");
    36. Location greenLoc = new Location(greenWorld, greenX, greenY, greenZ, greenPitch, greenYaw);
    37.  
    38. World blueWorld = (World) Bukkit.getServer().getWorld(config.getString("Settings.Locations.Blue.World"));
    39. double blueX = config.getDouble("Settings.Locations.Blue.X");
    40. double blueY = config.getDouble("Settings.Locations.Blue.Y");
    41. double blueZ = config.getDouble("Settings.Locations.Blue.Z");
    42. int bluePitch = config.getInt("Settings.Locations.Blue.Pitch");
    43. int blueYaw = config.getInt("Settings.Locations.Blue.Yaw");
    44. Location blueLoc = new Location(blueWorld, blueX, blueY, blueZ, bluePitch, blueYaw);
    45.  
    46. int x;
    47. if(playerThrower.hasPermission("Paintball.PRO")) {
    48. x = (int) PRO;
    49. }
    50. else if(playerThrower.hasPermission("Paintball.MVP")) {
    51. x = (int) MVP;
    52. }
    53. else if(playerThrower.hasPermission("Paintball.VIP")) {
    54. x = (int) VIP;
    55. }
    56. else {
    57. x = (int) REG;
    58. }
    59.  
    60. if(playerHit.equals(playerThrower)) {
    61. event.setCancelled(true);
    62. }
    63. else if((this.blueTeam.contains(playerHit)) && (this.blueTeam.contains(playerThrower))) {
    64. playerThrower.sendMessage(prefix + "Do not hit your own team mates!");
    65. event.setCancelled(true);
    66. }
    67. else if((this.greenTeam.contains(playerHit)) && (this.greenTeam.contains(playerThrower))) {
    68. playerThrower.sendMessage(prefix + "Do not hit your own team mates!");
    69. event.setCancelled(true);
    70. }
    71. else if((this.blueTeam.contains(playerHit)) && (this.greenTeam.contains(playerThrower))) {
    72. kKills++;
    73. vDeaths++;
    74. kCoins += x;
    75.  
    76. data.set("Stats." + playerThrower.getName() + ".kills", Integer.valueOf(kKills));
    77. data.set("Stats." + playerHit.getName() + ".deaths", Integer.valueOf(vDeaths));
    78. data.set("Stats." + playerThrower.getName() + ".coins", Integer.valueOf(kCoins));
    79.  
    80. playerHit.sendMessage(prefix + ChatColor.YELLOW + "You were fragged by " + ChatColor.RED + playerThrower.getName());
    81. playerThrower.sendMessage(prefix + ChatColor.YELLOW + "You fragged " + ChatColor.RED + playerHit.getName());
    82. playerThrower.sendMessage(ChatColor.GOLD + "+" + x + " Coins");
    83.  
    84. playerHit.getInventory().clear();
    85. playerHit.getInventory().addItem(new ItemStack(Material.SNOW_BALL, a));
    86. playerThrower.getInventory().addItem(new ItemStack(Material.SNOW_BALL, b));
    87. playerHit.updateInventory();
    88. playerThrower.updateInventory();
    89.  
    90. playerHit.getPlayer().getWorld().playEffect(playerHit.getLocation(), Effect.SMOKE, 50);
    91.  
    92. //bLives = bLives - 1;
    93.  
    94. playerHit.teleport(blueLoc);
    95. data.saveConfig();
    96. event.setCancelled(true);
    97.  
    98. final Player victim = playerHit;
    99. respawn.add(victim);
    100. Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
    101.  
    102. public void run() {
    103. respawn.remove(victim);
    104. }
    105. }, 4*20L);
    106. }
    107. else if((this.greenTeam.contains(playerHit)) && (this.blueTeam.contains(playerThrower))) {
    108. kKills++;
    109. vDeaths++;
    110. kCoins += x;
    111.  
    112. data.set("Stats." + playerThrower.getName() + ".kills", Integer.valueOf(kKills));
    113. data.set("Stats." + playerHit.getName() + ".deaths", Integer.valueOf(vDeaths));
    114. data.set("Stats." + playerThrower.getName() + ".coins", Integer.valueOf(kCoins));
    115.  
    116. playerHit.sendMessage(prefix + ChatColor.YELLOW + "You were fragged by " + ChatColor.RED + playerThrower.getName());
    117. playerThrower.sendMessage(prefix + ChatColor.YELLOW + "You fragged " + ChatColor.RED + playerHit.getName());
    118. playerThrower.sendMessage(ChatColor.GOLD + "+" + x + " Coins");
    119.  
    120. playerHit.getInventory().clear();
    121. playerHit.getInventory().addItem(new ItemStack(Material.SNOW_BALL, a));
    122. playerThrower.getInventory().addItem(new ItemStack(Material.SNOW_BALL, b));
    123. playerHit.updateInventory();
    124. playerThrower.updateInventory();
    125.  
    126. playerHit.getPlayer().getWorld().playEffect(playerHit.getLocation(), Effect.SMOKE, 50);
    127.  
    128. //bLives = bLives - 1;
    129.  
    130. playerHit.teleport(greenLoc);
    131. data.saveConfig();
    132. event.setCancelled(true);
    133.  
    134. final Player victim = playerHit;
    135. respawn.add(victim);
    136. Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
    137.  
    138. public void run() {
    139. respawn.remove(victim);
    140. }
    141. }, 4*20L);
    142. }
    143. else event.setCancelled(true);
    144. }
    145. else if(!(event.getCause().equals(DamageCause.PROJECTILE))) {
    146. event.setCancelled(true);
    147. }
    148. }
     
  2. Offline

    SuperOriginal

    EntityDamageByEntityEvent. Check if entity is player, and damager is snowball, return. Cancel if it is player vs player or arrow shot by player
     
  3. Offline

    ZyphiorMC

    SuperOriginal
    Oh I just realised :p

    EntityDamgeByENTITYEvent ;P

    So I guess I should use another event to cancel all damage, set priority to high, then set EntityDamageByEntityEvent priority to highest?
     
  4. Offline

    Jaaakee224

  5. Offline

    ZyphiorMC

    Yes I fixed it.
     
Thread Status:
Not open for further replies.

Share This Page