Teams.java
public
Jan 25, 2025
Never
13
1 package me.goodwilled.teams; 2 3 import me.goodwilled.teams.utils.ColourUtils; 4 import org.bukkit.Material; 5 import org.bukkit.entity.Entity; 6 import org.bukkit.entity.EntityType; 7 import org.bukkit.entity.Player; 8 import org.bukkit.entity.Witch; 9 import org.bukkit.potion.PotionEffect; 10 import org.bukkit.potion.PotionEffectType; 11 12 import java.util.Arrays; 13 import java.util.HashMap; 14 import java.util.List; 15 import java.util.Map; 16 import java.util.UUID; 17 18 public enum Team { 19 CITIZEN(Material.AIR, ColourUtils.colour("&fCitizen"), ColourUtils.colour("&fC"), "This person has no powers.") { 20 @Override 21 public void applyJoinPerks(Player player) { 22 // Nothing to do. Citizens suck. 23 } 24 25 @Override 26 public double applyCombatPerks(Player attacker, Player victim, double baseDamage) { 27 // ... 28 return baseDamage; 29 } 30 31 @Override 32 public double applyCombatPerks(Player attacker, Entity victim, double baseDamage) { 33 // Still boring. 34 return baseDamage; 35 } 36 37 @Override 38 public double applyCombatProtections(Entity attacker, Player victim, double baseDamage) { 39 return baseDamage; 40 } 41 }, 42 KNIGHT(Material.DIAMOND_SWORD, ColourUtils.colour(""), 43 ColourUtils.colour("&3K"), 44 "&aNot affected by soulsand.", 45 "&aAll chestplates have Thorns when equipped.", 46 "&aIssues 5s of poison when fighting players. &7(30s cooldown)") { 47 private final List<EntityType> protectedEntities = Arrays.asList( 48 EntityType.ZOMBIE, EntityType.PHANTOM, EntityType.SPIDER, 49 EntityType.PIGLIN, EntityType.PIGLIN_BRUTE, 50 EntityType.RAVAGER, EntityType.PILLAGER, EntityType.SKELETON 51 ); 52 53 @Override 54 public void applyJoinPerks(Player player) { 55 } 56 57 @Override 58 public double applyCombatPerks(Player attacker, Player victim, double baseDamage) { 59 if (!victim.hasPotionEffect(PotionEffectType.LEVITATION)) { 60 victim.addPotionEffect(new PotionEffect(PotionEffectType.LEVITATION, 40, 1)); 61 victim.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 40, 1)); 62 } 63 return baseDamage; 64 } 65 66 @Override 67 public double applyCombatPerks(Player attacker, Entity victim, double baseDamage) { 68 return baseDamage; 69 } 70 71 @Override 72 public double applyCombatProtections(Entity attacker, Player victim, double baseDamage) { 73 if (this.protectedEntities.contains(attacker.getType())) { 74 return baseDamage / 2.0d; 75 } 76 return baseDamage; 77 } 78 }, 79 MAGE(Material.ENDER_PEARL, ColourUtils.colour("&2Mage"), 80 ColourUtils.colour("&2M"), 81 "&aIssues 5s of blindness when fighting players. &7(30s cooldown)", 82 "&aImmune to magic by Witches.", 83 "&aIssues fire aspect against entities and blocks when punching with fist. &7(30s cooldown)") { 84 private final Map<UUID, Long> abilityCoolDowns = new HashMap<>(); 85 86 @Override 87 public void applyJoinPerks(Player player) { 88 player.setWalkSpeed(0.3f); 89 } 90 91 @Override 92 public double applyCombatPerks(Player attacker, Player victim, double baseDamage) { 93 if (!attacker.hasPotionEffect(PotionEffectType.SPEED) && (System.currentTimeMillis() - this.abilityCoolDowns.getOrDefault(attacker.getUniqueId(), 0L)) > 30000L) { 94 attacker.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 60, 2, false, false)); 95 this.abilityCoolDowns.put(attacker.getUniqueId(), System.currentTimeMillis()); 96 } 97 return baseDamage; 98 } 99 100 @Override 101 public double applyCombatPerks(Player attacker, Entity victim, double baseDamage) { 102 return baseDamage; 103 } 104 105 @Override 106 public double applyCombatProtections(Entity attacker, Player victim, double baseDamage) { 107 return baseDamage; 108 } 109 }, 110 ASSASSIN(Material.BAMBOO, ColourUtils.colour("&4Assassin"), 111 ColourUtils.colour("&4A"), 112 "&a+0.3x walk speed increase.", 113 "&aFreezes entities for 3 seconds when shooting with an arrow. &7(60s cooldown)", 114 "&aGoes invisible for 3 sec when damaged by players. &7(60s cooldown)") { 115 @Override 116 public void applyJoinPerks(Player player) { 117 } 118 119 @Override 120 public double applyCombatPerks(Player attacker, Player victim, double baseDamage) { 121 if (!victim.hasPotionEffect(PotionEffectType.WITHER)) { 122 victim.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 150, 1)); 123 } 124 return baseDamage; 125 } 126 127 @Override 128 public double applyCombatPerks(Player attacker, Entity victim, double baseDamage) { 129 return baseDamage; 130 } 131 132 @Override 133 public double applyCombatProtections(Entity attacker, Player victim, double baseDamage) { 134 return baseDamage; 135 } 136 }, 137 VIKING(Material.DIAMOND_AXE, ColourUtils.colour("&6Viking"), 138 ColourUtils.colour("&6K"), 139 "&aIssues 1.5x damage when using axes.", 140 "&aDecreased hit delay when using axes.", 141 "&c-0.3x walk speed.") { 142 private final List<Material> axeMaterials = Arrays.asList( 143 Material.WOODEN_AXE, Material.STONE_AXE, 144 Material.GOLDEN_AXE, Material.IRON_AXE, 145 Material.DIAMOND_AXE, Material.NETHERITE_AXE 146 ); 147 148 @Override 149 public void applyJoinPerks(Player player) { 150 } 151 152 @Override 153 public double applyCombatPerks(Player attacker, Player victim, double baseDamage) { 154 if (this.axeMaterials.contains(attacker.getInventory().getItemInMainHand().getType())) { 155 return baseDamage * 1.5; 156 } 157 return baseDamage; 158 } 159 160 @Override 161 public double applyCombatPerks(Player attacker, Entity victim, double baseDamage) { 162 return baseDamage; 163 } 164 165 @Override 166 public double applyCombatProtections(Entity attacker, Player victim, double baseDamage) { 167 if (attacker instanceof Witch) { 168 return -1.0d; // -1 cancels the damage event. 169 } 170 return baseDamage; 171 } 172 }; 173 174 private final String[] description; 175 private final String shortPrefix; 176 private final String prefix; 177 private final Material icon; 178 179 Team(Material icon, String prefix, String shortPrefix, String... description) { 180 this.description = description; 181 this.shortPrefix = shortPrefix; 182 this.prefix = prefix; 183 this.icon = icon; 184 } 185 186 // Perks applied to a player when they join the server. 187 public abstract void applyJoinPerks(Player player); 188 189 // Called in PvP situations. 190 public abstract double applyCombatPerks(Player attacker, Player victim, double baseDamage); 191 192 // Called in PvE situations. 193 public abstract double applyCombatPerks(Player attacker, Entity victim, double baseDamage); 194 195 public abstract double applyCombatProtections(Entity attacker, Player victim, double baseDamage); 196 197 public String[] getDescription() { 198 return this.description; 199 } 200 201 public String getPrefix() { 202 return this.prefix; 203 } 204 205 public String getPrefixShort() { 206 return this.shortPrefix; 207 } 208 209 public Material getIcon() { 210 return this.icon; 211 } 212 213 }