Advertisement
BillyGalbreath

LifeSpan

Mar 24th, 2019
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.37 KB | None | 0 0
  1. package net.pl3x.bukkit.lifespan;
  2.  
  3. import org.bukkit.Bukkit;
  4. import org.bukkit.entity.Entity;
  5. import org.bukkit.entity.LivingEntity;
  6. import org.bukkit.event.EventHandler;
  7. import org.bukkit.event.EventPriority;
  8. import org.bukkit.event.Listener;
  9. import org.bukkit.event.entity.CreatureSpawnEvent;
  10. import org.bukkit.event.entity.EntityDamageEvent;
  11. import org.bukkit.event.entity.EntityInteractEvent;
  12. import org.bukkit.plugin.java.JavaPlugin;
  13. import org.bukkit.scheduler.BukkitRunnable;
  14.  
  15. import java.util.HashMap;
  16. import java.util.Map;
  17. import java.util.UUID;
  18.  
  19. public class LifeSpan extends JavaPlugin implements Listener {
  20.     private final Map<UUID, EntityTimer> timers = new HashMap<>();
  21.  
  22.     @Override
  23.     public void onEnable() {
  24.         getServer().getPluginManager().registerEvents(this, this);
  25.     }
  26.  
  27.     @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
  28.     public void onEntitySpawn(CreatureSpawnEvent event) {
  29.         switch (event.getEntityType()) {
  30.             case WITHER_SKELETON:
  31.             case STRAY:
  32.             case HUSK:
  33.             case ZOMBIE_VILLAGER:
  34.             case VEX:
  35.             case CREEPER:
  36.             case SKELETON:
  37.             case SPIDER:
  38.             case ZOMBIE:
  39.             case SLIME:
  40.             case GHAST:
  41.             case PIG_ZOMBIE:
  42.             case ENDERMAN:
  43.             case CAVE_SPIDER:
  44.             case SILVERFISH:
  45.             case BLAZE:
  46.             case MAGMA_CUBE:
  47.             case WITCH:
  48.             case ENDERMITE:
  49.             case GUARDIAN:
  50.                 createTimer(event.getEntity());
  51.         }
  52.     }
  53.  
  54.     @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
  55.     public void onEntityInteract(EntityInteractEvent event) {
  56.         if (event.getEntity() instanceof LivingEntity) {
  57.             handleInteract((LivingEntity) event.getEntity());
  58.         }
  59.     }
  60.  
  61.     @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
  62.     public void onEntityDamage(EntityDamageEvent event) {
  63.         if (event.getEntity() instanceof LivingEntity) {
  64.             handleInteract((LivingEntity) event.getEntity());
  65.         }
  66.     }
  67.  
  68.     private void handleInteract(LivingEntity entity) {
  69.         EntityTimer timer = timers.remove(entity.getUniqueId());
  70.         if (timer == null) {
  71.             return;
  72.         }
  73.         timer.cancel();
  74.         createTimer(entity);
  75.     }
  76.  
  77.     public void createTimer(LivingEntity entity) {
  78.         EntityTimer timer = new EntityTimer(entity);
  79.         timer.runTaskLater(this, 12000); // 10 minutes
  80.         timers.put(entity.getUniqueId(), timer);
  81.     }
  82.  
  83.     public class EntityTimer extends BukkitRunnable {
  84.         private final UUID entity;
  85.  
  86.         public EntityTimer(LivingEntity entity) {
  87.             this.entity = entity.getUniqueId();
  88.         }
  89.  
  90.         @Override
  91.         public void run() {
  92.             Entity entity = Bukkit.getEntity(this.entity);
  93.             if (entity == null) {
  94.                 cancel();
  95.                 return;
  96.             }
  97.  
  98.             if (entity.isDead()) {
  99.                 cancel();
  100.                 return;
  101.             }
  102.  
  103.             if (entity.getCustomName() != null) {
  104.                 cancel();
  105.                 return;
  106.             }
  107.  
  108.             entity.remove();
  109.         }
  110.  
  111.         @Override
  112.         public void cancel() {
  113.             timers.remove(entity);
  114.         }
  115.     }
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement