Source Code
Main File:
package com.mcscavenger.infected; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.potion.PotionEffectType; public class Main extends JavaPlugin{ private PluginDescriptionFile pdfFile = getDescription(); private Logger logger = Logger.getLogger("Minecraft"); public static List<Player> infected = new ArrayList<Player>(); public void onEnable(){ logger.info("[" + pdfFile.getName() + "] Version " + pdfFile.getVersion() + " enabled!"); Bukkit.getServer().getPluginManager().registerEvents(new MyEventHandler(), this); getCommand("cure").setExecutor(new MyCommandHandler()); } public static void removePotionEffects(Player player){ if(player.hasPotionEffect(PotionEffectType.WITHER)){ player.removePotionEffect(PotionEffectType.WITHER); } if(player.hasPotionEffect(PotionEffectType.SLOW)){ player.removePotionEffect(PotionEffectType.SLOW); } } public static void removeInfection(Player player){ if(Main.infected.contains(player)){ Main.infected.remove(player); Main.removePotionEffects(player); player.setHealth(15); player.sendMessage(ChatColor.RED + "You are no longer infected!"); } else{ player.sendMessage(ChatColor.RED + "You aren't infected!"); } } }
Command Handler:
package com.mcscavenger.infected; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; public class MyCommandHandler implements CommandExecutor{ @SuppressWarnings("deprecation") @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if(cmd.getName().equalsIgnoreCase("cure")){ if(sender instanceof Player){ Player player = (Player) sender; if(args.length == 0){ if(player.hasPermission("infected.cure.self")){ Main.removeInfection(player); } else{ player.sendMessage(ChatColor.RED + "Insufficient Permissions!"); } } else if(args.length == 1){ if(player.hasPermission("infected.cure.other")){ if(Bukkit.getPlayer(args[0]) != null){ Player target = Bukkit.getPlayer(args[0]); Main.removeInfection(target); } else{ player.sendMessage(ChatColor.RED + "Player not found!"); } } else{ player.sendMessage(ChatColor.RED + "Insufficient Permissions!"); } } else{ player.sendMessage(ChatColor.RED + "Please use /cure [player]!"); } } } return false; } }
Event Handler:
package com.mcscavenger.infected; import org.bukkit.Material; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityRegainHealthEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; public class MyEventHandler implements Listener{ // Infect players @EventHandler public void onZombieBite(EntityDamageByEntityEvent event){ if(event.getEntity() instanceof Player && event.getDamager().getType().equals(EntityType.ZOMBIE)){ Player player = (Player) event.getEntity(); if(!Main.infected.contains(player) && player.getHealth() + event.getDamage() <= 15 && !player.hasPermission("infection.exempt")){ Main.infected.add(player); player.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 40, 0)); player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 40, 0)); player.setHealth(10); } } } // Cancel Damage & Lengthen Potion Effect @EventHandler public void onPlayerDamage(EntityDamageEvent event){ if(event.getEntity() instanceof Player && event.getCause().equals(DamageCause.WITHER)){ Player player = (Player) event.getEntity(); if(Main.infected.contains(player)){ Main.removePotionEffects(player); player.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 40, 0)); player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 40, 0)); event.setCancelled(true); } } } // Cancel Regeneration @EventHandler public void onRegenerate(EntityRegainHealthEvent event){ if(event.getEntity() instanceof Player){ Player player = (Player) event.getEntity(); if(Main.infected.contains(player) && player.getHealth() >= 9.5){ event.setCancelled(true); } } } // Cancel Infection on Death @EventHandler public void onPlayerDeath(PlayerDeathEvent event){ Player player = event.getEntity(); if(Main.infected.contains(player)){ Main.infected.remove(player); } } // Cancel Infection @EventHandler public void onInteract(PlayerInteractEvent event){ Player player = event.getPlayer(); if(player.getItemInHand().getType().equals(Material.EYE_OF_ENDER) && Main.infected.contains(player)){ if(event.getAction().equals(Action.RIGHT_CLICK_AIR) || event.getAction().equals(Action.RIGHT_CLICK_BLOCK)){ if(player.getItemInHand().getAmount() > 1){ player.setItemInHand(new ItemStack(player.getItemInHand().getType(), player.getItemInHand().getAmount() -1)); Main.removeInfection(player); event.setCancelled(true); } else{ player.setItemInHand(null); Main.removeInfection(player); event.setCancelled(true); } } } } }
Comments