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

Posts Quoted:
Reply
Clear All Quotes