package org.arkham.cs.events; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import net.minecraft.server.v1_7_R4.Packet; import net.minecraft.server.v1_7_R4.PacketPlayOutWorldEvent; import org.arkham.cs.CosmeticSuite; import org.arkham.cs.handler.PlayerHandler; import org.arkham.cs.utils.Rank; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.craftbukkit.v1_7_R4.CraftServer; import org.bukkit.craftbukkit.v1_7_R4.CraftWorld; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.meta.LeatherArmorMeta; public class BleedListener implements Listener { private List<Material> leather = new ArrayList<>(Arrays.asList(Material.LEATHER_HELMET, Material.LEATHER_CHESTPLATE, Material.LEATHER_LEGGINGS, Material.LEATHER_BOOTS)); public BleedListener(CosmeticSuite cs){ cs.getServer().getPluginManager().registerEvents(this, cs); } @EventHandler public void damage(EntityDamageByEntityEvent event) { if(!(event.getEntity() instanceof Player)){ return; } if(!(event.getDamager() instanceof Player)){ return; } Player hit = (Player) event.getEntity(); Player damager = (Player) event.getDamager(); if(PlayerHandler.getRank(damager) != Rank.SUPERHERO){ return; } play(hit.getEyeLocation(), 10, 0.5, Material.REDSTONE, (byte) 0); } public void play(final Location l, final int particles, final double velMult, final Material m, final byte data) { CosmeticSuite.getInstance().getServer().getScheduler().runTaskAsynchronously(CosmeticSuite.getInstance(), new Runnable(){ @SuppressWarnings("deprecation") @Override public void run(){ int particle_id = m.getId(); Packet particles = new PacketPlayOutWorldEvent(2001, Math.round(l.getBlockX()), Math.round(l.getBlockY()), Math.round(l.getBlockZ()), particle_id, false); ((CraftServer) CosmeticSuite.getInstance().getServer()).getServer().getPlayerList().sendPacketNearby(l.getBlockX(), l.getBlockY(), l.getBlockZ(), 16, ((CraftWorld) l.getWorld()).getHandle().dimension, particles); } }); } @EventHandler public void onDeath(PlayerDeathEvent event){ Player player = event.getEntity(); event.getDrops().clear(); for(int i = 0; i < player.getInventory().getContents().length; i++){ ItemStack item = player.getInventory().getContents()[i]; if(item == null || item.getType() == Material.AIR){ continue; } event.getDrops().add(item); } for(int i = 0; i < player.getInventory().getArmorContents().length; i++){ ItemStack item = player.getInventory().getArmorContents()[i]; if(item == null || item.getType() == Material.AIR){ continue; } if(leather.contains(item.getType())){ String name = item.getType().name().toLowerCase().replace("leather_", ""); switch(name){ case "chestplate": event.getDrops().add(new ItemStack(Material.DIAMOND_CHESTPLATE)); break; case "leggings": event.getDrops().add(new ItemStack(Material.DIAMOND_LEGGINGS)); break; case "helmet": event.getDrops().add(new ItemStack(Material.DIAMOND_HELMET)); break; case "boots": event.getDrops().add(new ItemStack(Material.DIAMOND_BOOTS)); break; } } } } @EventHandler public void onCraft(CraftItemEvent event){ Recipe recipe = event.getRecipe(); ItemStack result = recipe.getResult(); Material resultType = result.getType(); if(!leather.contains(resultType)){ return; } LeatherArmorMeta meta = (LeatherArmorMeta) result.getItemMeta(); if(meta.getColor() != null){ event.setCancelled(true); event.setCurrentItem(null); return; } } }