Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package me.NonameSL.Cubenauts.CharacterLibrary;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.Map.Entry;
- import java.util.Set;
- import org.bukkit.Bukkit;
- 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.EntityShootBowEvent;
- import org.bukkit.event.entity.PlayerDeathEvent;
- import org.bukkit.event.entity.PotionSplashEvent;
- import org.bukkit.event.player.PlayerDropItemEvent;
- import org.bukkit.event.player.PlayerEggThrowEvent;
- import org.bukkit.event.player.PlayerInteractEvent;
- import org.bukkit.event.player.PlayerMoveEvent;
- import org.bukkit.event.player.PlayerToggleSneakEvent;
- import org.bukkit.plugin.Plugin;
- import org.bukkit.event.Event;
- /**
- *
- * @author NonameSL
- * @version 1.1
- */
- public class CharacterLibrary {
- public static enum ActionTrigger
- {
- LEFT_CLICK_BLOCK, RIGHT_CLICK_BLOCK,
- LEFT_CLICK_AIR, RIGHT_CLICK_AIR,
- SPRINT, SPLASH_POTION_EFFECT, CROUCH,
- HIT_BY_ENTITY, HIT_ENTITY, ITEM_DROP, EGG_THROW, DEATH, BOW_SHOOT;
- }
- public static interface CharacterAction {
- public void onCharacterAction(Player player, Event e);
- }
- public static class MyCharacter
- {
- private String name;
- private int maxhealth;
- public static HashMap<MyCharacter, Set<Player>> playersWithCharacters = new HashMap<>();
- private HashMap<ActionTrigger, CharacterAction> skills = new HashMap<>();
- public MyCharacter(String name, int maxhealth){
- this(name, maxhealth, new HashMap<ActionTrigger, CharacterAction>());
- }
- public MyCharacter(int maxhealth) {
- this("", maxhealth);
- }
- public MyCharacter(int maxhealth, HashMap<ActionTrigger, CharacterAction> skills) {
- this("", maxhealth, skills);
- }
- public MyCharacter(String name, int maxhealth, HashMap<ActionTrigger, CharacterAction> skills){
- this.name=name;
- this.maxhealth = maxhealth;
- this.skills = skills;
- if (!playersWithCharacters.containsKey(this))
- playersWithCharacters.put(this, new HashSet<Player>());
- }
- public String getName()
- {
- return this.name;
- }
- public void setName(String name) {
- this.name = name;
- }
- /**
- *
- * @return a clone of the skills map
- */
- public HashMap<ActionTrigger, CharacterAction> getSkills()
- {
- return new HashMap<ActionTrigger, CharacterAction>(this.skills);
- }
- public void setSkill(ActionTrigger at, CharacterAction ca) {
- if (this.skills.containsKey(at))
- removeSkill(at);
- addSkill(ca, at);
- }
- public void addSkill(CharacterAction ca, ActionTrigger at) {
- if (this.skills.containsKey(at)) {
- 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!");
- return;
- }
- this.skills.put(at, ca);
- }
- public void removeSkill(ActionTrigger at) {
- if (this.skills.containsKey(at)) this.skills.remove(at);
- }
- public boolean removeSkillsFor(ActionTrigger at)
- {
- boolean breturn = false;
- for (Entry<ActionTrigger, CharacterAction> entry : this.skills.entrySet()) {
- if (at.equals(entry.getValue())) {
- this.skills.remove(entry.getKey());
- breturn = true;
- }
- }
- return breturn;
- }
- public int getMaxHealth()
- {
- return this.maxhealth;
- }
- public void setMaxHealth(int maxhealth) {
- this.maxhealth = maxhealth;
- }
- }
- public class CharacterListener
- implements Listener
- {
- PlayerCharacter ch;
- public CharacterListener(Plugin p, PlayerCharacter ch)
- {
- this.ch = ch;
- p.getServer().getPluginManager().registerEvents(this, p);
- }
- @EventHandler
- public void BOW_SHOOT(EntityShootBowEvent e){
- if(!(e.getEntity() instanceof Player))return;
- Player p = (Player)e.getEntity();
- if(!p.equals(ch.getPlayer()))return;
- CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.BOW_SHOOT);
- ca.onCharacterAction(ch.getPlayer(), e);
- }
- @EventHandler
- public void CLICK(PlayerInteractEvent e)
- {
- if (!e.getPlayer().equals(ch.getPlayer())) return;
- String action = e.getAction().toString();
- for (ActionTrigger ta : ch.getSuperCharacter().getSkills().keySet()) {
- if (ta.toString().equals(action)) {
- if (ActionTrigger.valueOf(action) == null) return;
- CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.valueOf(action));
- ca.onCharacterAction(ch.getPlayer(), e);
- break;
- }
- }
- }
- @EventHandler
- public void SPRINT(PlayerMoveEvent e) {
- if (!e.getPlayer().equals(ch.getPlayer())) return;
- if (!e.getPlayer().isSprinting()) return;
- if (!ch.getSuperCharacter().getSkills().containsKey(ActionTrigger.SPRINT)) return;
- CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.SPRINT);
- ca.onCharacterAction(ch.getPlayer(), e);
- }
- @EventHandler
- public void SPLASH_POTION_EFFECT(PotionSplashEvent e) {
- if (e.getAffectedEntities().isEmpty()) return;
- if (!e.getAffectedEntities().contains(ch.getPlayer())) return;
- if (!ch.getSuperCharacter().getSkills().containsKey(ActionTrigger.SPLASH_POTION_EFFECT)) return;
- CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.SPLASH_POTION_EFFECT);
- ca.onCharacterAction(ch.getPlayer(), e);
- }
- @EventHandler
- public void HIT_BY_ENTITY(EntityDamageByEntityEvent e) {
- if (!(e.getEntity() instanceof Player)) return;
- if (!e.getEntity().equals(ch.getPlayer())) return;
- if (e.getDamager() == null) return;
- if (!ch.getSuperCharacter().getSkills().containsKey(ActionTrigger.HIT_BY_ENTITY)) return;
- CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.HIT_BY_ENTITY);
- ca.onCharacterAction(ch.getPlayer(), e);
- }
- @EventHandler
- public void HIT_ENTITY(EntityDamageByEntityEvent e) {
- if (!(e.getDamager() instanceof Player)) return;
- if (!e.getDamager().equals(ch.getPlayer())) return;
- if (e.getEntity() == null) return;
- if (!ch.getSuperCharacter().getSkills().containsKey(ActionTrigger.HIT_ENTITY)) return;
- CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.HIT_ENTITY);
- ca.onCharacterAction(ch.getPlayer(), e);
- }
- @EventHandler
- public void DEATH(PlayerDeathEvent e) {
- if (!e.getEntity().equals(ch.getPlayer())) return;
- if (!ch.getSuperCharacter().getSkills().containsKey(ActionTrigger.DEATH)) return;
- CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.DEATH);
- ca.onCharacterAction(ch.getPlayer(), e);
- }
- @EventHandler
- public void ITEM_DROP(PlayerDropItemEvent e) {
- if (!e.getPlayer().equals(ch.getPlayer())) return;
- if (e.getItemDrop().equals(null)) return;
- if (!ch.getSuperCharacter().getSkills().containsKey(ActionTrigger.ITEM_DROP)) return;
- CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.ITEM_DROP);
- ca.onCharacterAction(ch.getPlayer(), e);
- }
- @EventHandler
- public void EGG_THROW(PlayerEggThrowEvent e) {
- if (!e.getPlayer().equals(ch.getPlayer())) return;
- if (e.getEgg() == null) return;
- if (!ch.getSuperCharacter().getSkills().containsKey(ActionTrigger.EGG_THROW)) return;
- CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.EGG_THROW);
- ca.onCharacterAction(ch.getPlayer(), e);
- }
- @EventHandler
- public void CROUCH(PlayerToggleSneakEvent e) {
- if (!e.isSneaking()) return;
- if (!e.getPlayer().equals(ch.getPlayer())) return;
- if (!ch.getSuperCharacter().getSkills().containsKey(ActionTrigger.CROUCH)) return;
- CharacterAction ca = (CharacterAction)ch.getSuperCharacter().getSkills().get(ActionTrigger.CROUCH);
- ca.onCharacterAction(ch.getPlayer(), e);
- }
- }
- public class PlayerCharacter
- {
- private MyCharacter superCharacter;
- private double health;
- private Player player;
- @SuppressWarnings("unused")
- private CharacterListener characterListener;
- private HashMap<ActionTrigger, CharacterAction> skills;
- public PlayerCharacter(Player p, MyCharacter superCharacter)
- {
- for (MyCharacter mc : MyCharacter.playersWithCharacters.keySet()) {
- if (MyCharacter.playersWithCharacters.get(mc).contains(p)) {
- MyCharacter.playersWithCharacters.get(mc).remove(p);
- }
- }
- MyCharacter.playersWithCharacters.get(superCharacter).add(p);
- this.skills = new HashMap<ActionTrigger, CharacterAction>();
- this.health = superCharacter.getMaxHealth();
- this.superCharacter = superCharacter;
- this.player = p;
- p.setMaxHealth((double)superCharacter.getMaxHealth());
- p.setHealth((double)this.health);
- }
- public MyCharacter getSuperCharacter()
- {
- return this.superCharacter;
- }
- public void addSpecialDisplayName(){
- this.player.setDisplayName("§7[§r"+this.getSuperCharacter().getName()+"§7]§r"+player.getDisplayName());
- }
- public void addSpecialPlayerListName(){
- this.player.setPlayerListName("§7[§r"+this.getSuperCharacter().getName()+"§7]§r"+player.getDisplayName());
- }
- public void removeSkill(ActionTrigger at)
- {
- if (this.skills.containsKey(at))
- this.skills.remove(at);
- }
- public void addAllSkillsFromSuper() { for (ActionTrigger at : this.superCharacter.getSkills().keySet())
- addSkillToCharacter(at); }
- public void addSkillToCharacter(ActionTrigger at) {
- this.skills.put(at, (CharacterAction)this.superCharacter.getSkills().get(at));
- }
- public void registerSkills(Plugin p) {
- if(p==null){
- throw new NullPointerException("Plugin cannot be null!");
- }
- if ((this.superCharacter.getSkills() == null) || (this.superCharacter.getSkills().isEmpty())) {
- p.getServer().getConsoleSender().sendMessage("§4§uERROR:§r§4 Tried to register skills for a PlayerCharacter that does not have any skills from its MyCharacter.");
- return;
- }
- this.characterListener = new CharacterListener(p, this);
- }
- public double getHealth()
- {
- return this.health;
- }
- public void setHealth(double health)
- {
- this.health = health;
- }
- public void healCharacter(double heal)
- {
- if (heal > this.superCharacter.getMaxHealth()) heal = this.superCharacter.getMaxHealth() - this.health;
- if (heal < 0) heal = 0;
- this.health += heal;
- }
- public void damageCharater(double damage)
- {
- if (damage > this.health) damage = this.health;
- if (damage < 0) damage = 0;
- this.health -= damage;
- }
- public Player getPlayer()
- {
- return this.player;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement