G

Teams.java

public
Guest Jan 25, 2025 Never 13
Clone
Java Teams.java 213 lines (181 loc) | 7.68 KB
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
}