Advertisement
NonameSL

CharacterLibrary.java

Jul 14th, 2014
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.93 KB | None | 0 0
  1. package me.NonameSL.Cubenauts.CharacterLibrary;
  2.  
  3. import java.util.HashMap;
  4. import java.util.HashSet;
  5. import java.util.Map.Entry;
  6. import java.util.Set;
  7.  
  8. import org.bukkit.Bukkit;
  9. import org.bukkit.entity.Player;
  10. import org.bukkit.event.EventHandler;
  11. import org.bukkit.event.Listener;
  12. import org.bukkit.event.entity.EntityDamageByEntityEvent;
  13. import org.bukkit.event.entity.EntityShootBowEvent;
  14. import org.bukkit.event.entity.PlayerDeathEvent;
  15. import org.bukkit.event.entity.PotionSplashEvent;
  16. import org.bukkit.event.player.PlayerDropItemEvent;
  17. import org.bukkit.event.player.PlayerEggThrowEvent;
  18. import org.bukkit.event.player.PlayerInteractEvent;
  19. import org.bukkit.event.player.PlayerMoveEvent;
  20. import org.bukkit.event.player.PlayerToggleSneakEvent;
  21. import org.bukkit.plugin.Plugin;
  22. import org.bukkit.event.Event;
  23. /**
  24.  *
  25.  * @author NonameSL
  26.  * @version 1.1
  27.  */
  28. public class CharacterLibrary {
  29.     public static enum ActionTrigger
  30.     {
  31.         LEFT_CLICK_BLOCK, RIGHT_CLICK_BLOCK,
  32.         LEFT_CLICK_AIR, RIGHT_CLICK_AIR,
  33.         SPRINT, SPLASH_POTION_EFFECT, CROUCH,
  34.         HIT_BY_ENTITY, HIT_ENTITY, ITEM_DROP, EGG_THROW, DEATH, BOW_SHOOT;
  35.     }
  36.     public static interface CharacterAction {
  37.  
  38.         public void onCharacterAction(Player player, Event e);
  39.  
  40.     }
  41.  
  42. public static class MyCharacter
  43. {
  44.   private String name;
  45.   private int maxhealth;
  46.   public static HashMap<MyCharacter, Set<Player>> playersWithCharacters = new HashMap<>();
  47.  
  48.   private HashMap<ActionTrigger, CharacterAction> skills = new HashMap<>();
  49.   public MyCharacter(String name, int maxhealth){
  50.       this(name, maxhealth, new HashMap<ActionTrigger, CharacterAction>());
  51.   }
  52.   public MyCharacter(int maxhealth) {
  53.     this("", maxhealth);
  54.   }
  55.   public MyCharacter(int maxhealth, HashMap<ActionTrigger, CharacterAction> skills) {
  56.     this("", maxhealth, skills);
  57.   }
  58.   public MyCharacter(String name, int maxhealth, HashMap<ActionTrigger, CharacterAction> skills){
  59.       this.name=name;
  60.       this.maxhealth = maxhealth;
  61.       this.skills = skills;
  62.       if (!playersWithCharacters.containsKey(this))
  63.           playersWithCharacters.put(this, new HashSet<Player>());
  64.   }
  65.  
  66.   public String getName()
  67.   {
  68.     return this.name;
  69.   }
  70.   public void setName(String name) {
  71.     this.name = name;
  72.   }
  73.   /**
  74.    *
  75.    * @return a clone of the skills map
  76.    */
  77.   public HashMap<ActionTrigger, CharacterAction> getSkills()
  78.   {
  79.     return new HashMap<ActionTrigger, CharacterAction>(this.skills);
  80.   }
  81.   public void setSkill(ActionTrigger at, CharacterAction ca) {
  82.     if (this.skills.containsKey(at))
  83.       removeSkill(at);
  84.     addSkill(ca, at);
  85.   }
  86.  
  87.   public void addSkill(CharacterAction ca, ActionTrigger at) {
  88.     if (this.skills.containsKey(at)) {
  89.       Bukkit.getServer().getConsoleSender().sendMessage("§2[§1CharacterLibrary§r§2]§4§uERROR:§r§4 Tried to add skill with " + at.toString().replace("_", " ").toLowerCase() + "tigger but character alraedy has one!");
  90.       return;
  91.     }
  92.     this.skills.put(at, ca);
  93.   }
  94.   public void removeSkill(ActionTrigger at) {
  95.     if (this.skills.containsKey(at)) this.skills.remove(at);
  96.   }
  97.  
  98.   public boolean removeSkillsFor(ActionTrigger at)
  99.   {
  100.     boolean breturn = false;
  101.     for (Entry<ActionTrigger, CharacterAction> entry : this.skills.entrySet()) {
  102.       if (at.equals(entry.getValue())) {
  103.         this.skills.remove(entry.getKey());
  104.         breturn = true;
  105.       }
  106.     }
  107.     return breturn;
  108.   }
  109.  
  110.   public int getMaxHealth()
  111.   {
  112.     return this.maxhealth;
  113.   }
  114.   public void setMaxHealth(int maxhealth) {
  115.     this.maxhealth = maxhealth;
  116.   }
  117.  
  118.  
  119. }
  120.     public class CharacterListener
  121.       implements Listener
  122.     {
  123.       PlayerCharacter ch;
  124.  
  125.       public CharacterListener(Plugin p, PlayerCharacter ch)
  126.       {
  127.         this.ch = ch;
  128.         p.getServer().getPluginManager().registerEvents(this, p);
  129.       }
  130.  
  131.      
  132.       @EventHandler
  133.       public void BOW_SHOOT(EntityShootBowEvent e){
  134.           if(!(e.getEntity() instanceof Player))return;
  135.           Player p = (Player)e.getEntity();
  136.           if(!p.equals(ch.getPlayer()))return;
  137.           CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.BOW_SHOOT);
  138.           ca.onCharacterAction(ch.getPlayer(), e);
  139.       }
  140.       @EventHandler
  141.       public void CLICK(PlayerInteractEvent e)
  142.       {
  143.         if (!e.getPlayer().equals(ch.getPlayer())) return;
  144.         String action = e.getAction().toString();
  145.         for (ActionTrigger ta : ch.getSuperCharacter().getSkills().keySet()) {
  146.           if (ta.toString().equals(action)) {
  147.               if (ActionTrigger.valueOf(action) == null) return;
  148.            
  149.                 CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.valueOf(action));
  150.                 ca.onCharacterAction(ch.getPlayer(), e);
  151.                 break;
  152.           }
  153.         }
  154.       }
  155.       @EventHandler
  156.       public void SPRINT(PlayerMoveEvent e) {
  157.         if (!e.getPlayer().equals(ch.getPlayer())) return;
  158.         if (!e.getPlayer().isSprinting()) return;
  159.         if (!ch.getSuperCharacter().getSkills().containsKey(ActionTrigger.SPRINT)) return;
  160.         CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.SPRINT);
  161.         ca.onCharacterAction(ch.getPlayer(), e);
  162.       }
  163.       @EventHandler
  164.       public void SPLASH_POTION_EFFECT(PotionSplashEvent e) {
  165.         if (e.getAffectedEntities().isEmpty()) return;
  166.         if (!e.getAffectedEntities().contains(ch.getPlayer())) return;
  167.         if (!ch.getSuperCharacter().getSkills().containsKey(ActionTrigger.SPLASH_POTION_EFFECT)) return;
  168.         CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.SPLASH_POTION_EFFECT);
  169.         ca.onCharacterAction(ch.getPlayer(), e);
  170.       }
  171.       @EventHandler
  172.       public void HIT_BY_ENTITY(EntityDamageByEntityEvent e) {
  173.         if (!(e.getEntity() instanceof Player)) return;
  174.         if (!e.getEntity().equals(ch.getPlayer())) return;
  175.         if (e.getDamager() == null) return;
  176.         if (!ch.getSuperCharacter().getSkills().containsKey(ActionTrigger.HIT_BY_ENTITY)) return;
  177.         CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.HIT_BY_ENTITY);
  178.         ca.onCharacterAction(ch.getPlayer(), e);
  179.       }
  180.       @EventHandler
  181.       public void HIT_ENTITY(EntityDamageByEntityEvent e) {
  182.         if (!(e.getDamager() instanceof Player)) return;
  183.         if (!e.getDamager().equals(ch.getPlayer())) return;
  184.         if (e.getEntity() == null) return;
  185.         if (!ch.getSuperCharacter().getSkills().containsKey(ActionTrigger.HIT_ENTITY)) return;
  186.         CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.HIT_ENTITY);
  187.         ca.onCharacterAction(ch.getPlayer(), e);
  188.       }
  189.       @EventHandler
  190.       public void DEATH(PlayerDeathEvent e) {
  191.         if (!e.getEntity().equals(ch.getPlayer())) return;
  192.         if (!ch.getSuperCharacter().getSkills().containsKey(ActionTrigger.DEATH)) return;
  193.         CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.DEATH);
  194.         ca.onCharacterAction(ch.getPlayer(), e);
  195.       }
  196.       @EventHandler
  197.       public void ITEM_DROP(PlayerDropItemEvent e) {
  198.         if (!e.getPlayer().equals(ch.getPlayer())) return;
  199.         if (e.getItemDrop().equals(null)) return;
  200.         if (!ch.getSuperCharacter().getSkills().containsKey(ActionTrigger.ITEM_DROP)) return;
  201.         CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.ITEM_DROP);
  202.         ca.onCharacterAction(ch.getPlayer(), e);
  203.       }
  204.       @EventHandler
  205.       public void EGG_THROW(PlayerEggThrowEvent e) {
  206.         if (!e.getPlayer().equals(ch.getPlayer())) return;
  207.         if (e.getEgg() == null) return;
  208.         if (!ch.getSuperCharacter().getSkills().containsKey(ActionTrigger.EGG_THROW)) return;
  209.         CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.EGG_THROW);
  210.         ca.onCharacterAction(ch.getPlayer(), e);
  211.       }
  212.       @EventHandler
  213.       public void CROUCH(PlayerToggleSneakEvent e) {
  214.         if (!e.isSneaking()) return;
  215.         if (!e.getPlayer().equals(ch.getPlayer())) return;
  216.         if (!ch.getSuperCharacter().getSkills().containsKey(ActionTrigger.CROUCH)) return;
  217.         CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.CROUCH);
  218.         ca.onCharacterAction(ch.getPlayer(), e);
  219.       }
  220.     }
  221.     public class PlayerCharacter
  222.     {
  223.       private MyCharacter superCharacter;
  224.       private double health;
  225.       private Player player;
  226.       @SuppressWarnings("unused")
  227.       private CharacterListener characterListener;
  228.       private HashMap<ActionTrigger, CharacterAction> skills;
  229.  
  230.       public PlayerCharacter(Player p, MyCharacter superCharacter)
  231.       {
  232.         for (MyCharacter mc : MyCharacter.playersWithCharacters.keySet()) {
  233.           if (MyCharacter.playersWithCharacters.get(mc).contains(p)) {
  234.               MyCharacter.playersWithCharacters.get(mc).remove(p);
  235.           }
  236.         }
  237.         MyCharacter.playersWithCharacters.get(superCharacter).add(p);
  238.         this.skills = new HashMap<ActionTrigger, CharacterAction>();
  239.         this.health = superCharacter.getMaxHealth();
  240.         this.superCharacter = superCharacter;
  241.         this.player = p;
  242.         p.setMaxHealth((double)superCharacter.getMaxHealth());
  243.         p.setHealth((double)this.health);
  244.       }
  245.  
  246.       public MyCharacter getSuperCharacter()
  247.       {
  248.         return this.superCharacter;
  249.       }
  250.       public void addSpecialDisplayName(){
  251.           this.player.setDisplayName("§7[§r"+this.getSuperCharacter().getName()+"§7]§r"+player.getDisplayName());
  252.       }
  253.       public void addSpecialPlayerListName(){
  254.           this.player.setPlayerListName("§7[§r"+this.getSuperCharacter().getName()+"§7]§r"+player.getDisplayName());
  255.       }
  256.       public void removeSkill(ActionTrigger at)
  257.       {
  258.         if (this.skills.containsKey(at))
  259.           this.skills.remove(at);
  260.       }
  261.  
  262.       public void addAllSkillsFromSuper() { for (ActionTrigger at : this.superCharacter.getSkills().keySet())
  263.           addSkillToCharacter(at); }
  264.  
  265.       public void addSkillToCharacter(ActionTrigger at) {
  266.         this.skills.put(at, (CharacterAction)this.superCharacter.getSkills().get(at));
  267.       }
  268.       public void registerSkills(Plugin p) {
  269.         if(p==null){
  270.               throw new NullPointerException("Plugin cannot be null!");
  271.         }
  272.         if ((this.superCharacter.getSkills() == null) || (this.superCharacter.getSkills().isEmpty())) {
  273.           p.getServer().getConsoleSender().sendMessage("§4§uERROR:§r§4 Tried to register skills for a PlayerCharacter that does not have any skills from its MyCharacter.");
  274.           return;
  275.         }
  276.         this.characterListener = new CharacterListener(p, this);
  277.       }
  278.       public double getHealth()
  279.       {
  280.         return this.health;
  281.       }
  282.  
  283.       public void setHealth(double health)
  284.       {
  285.         this.health = health;
  286.       }
  287.  
  288.       public void healCharacter(double heal)
  289.       {
  290.         if (heal > this.superCharacter.getMaxHealth()) heal = this.superCharacter.getMaxHealth() - this.health;
  291.         if (heal < 0) heal = 0;
  292.         this.health += heal;
  293.       }
  294.  
  295.       public void damageCharater(double damage)
  296.       {
  297.         if (damage > this.health) damage = this.health;
  298.         if (damage < 0) damage = 0;
  299.         this.health -= damage;
  300.       }
  301.  
  302.       public Player getPlayer()
  303.       {
  304.         return this.player;
  305.       }
  306.     }
  307.  
  308. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement