Skip to content

Commit 6673546

Browse files
committed
Add chemist, /b, and only send callouts to teammates
1 parent 3889c85 commit 6673546

File tree

18 files changed

+279
-17
lines changed

18 files changed

+279
-17
lines changed

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
55
<modelVersion>4.0.0</modelVersion>
66

7-
<groupId>org.example</groupId>
7+
<groupId>parallelmc.ctf</groupId>
88
<artifactId>ParallelCTF</artifactId>
9-
<version>1.4.1-SNAPSHOT</version>
9+
<version>1.5-SNAPSHOT</version>
1010

1111
<properties>
1212
<maven.compiler.source>17</maven.compiler.source>

src/main/java/parallelmc/ctf/GameManager.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,6 @@ public void onPacketSending(PacketEvent event) {
433433
PacketContainer packet = event.getPacket();
434434
PlayerInfoData oldData = packet.getPlayerInfoDataLists().read(0).get(0);
435435
if (packet.getPlayerInfoAction().read(0) == EnumWrappers.PlayerInfoAction.ADD_PLAYER) {
436-
Player p = event.getPlayer();
437436
if (oldData.getProfile().getName().equals(p.getName())) {
438437
CTFPlayer player = getPlayer(p);
439438
String nameStr = player.getColorFormatting() + p.getName();

src/main/java/parallelmc/ctf/ParallelCTF.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,14 @@ public class ParallelCTF extends JavaPlugin {
2121
public static Level LOG_LEVEL = Level.INFO;
2222
public static final HashMap<String, Class<? extends CTFClass>> classes = new HashMap<>();
2323
public static GameManager gameManager;
24-
public static final BossBar alphaBossBar = BossBar.bossBar(Component.text("ParallelCTF v1.4.1 Alpha Gameplay", NamedTextColor.YELLOW), 1, BossBar.Color.RED, BossBar.Overlay.PROGRESS);
24+
public static final BossBar alphaBossBar = BossBar.bossBar(Component.text("ParallelCTF v1.5 Alpha Gameplay", NamedTextColor.YELLOW), 1, BossBar.Color.RED, BossBar.Overlay.PROGRESS);
2525
private static ProtocolManager protocolManager;
2626

2727
@Override
2828
public void onLoad() {
2929
classes.put("Archer", ArcherClass.class);
3030
classes.put("Assassin", AssassinClass.class);
31+
classes.put("Chemist", ChemistClass.class);
3132
classes.put("Dwarf", DwarfClass.class);
3233
classes.put("Medic", MedicClass.class);
3334
classes.put("Ninja", NinjaClass.class);
@@ -79,9 +80,11 @@ public void onEnable() {
7980
this.getCommand("pyro").setExecutor(new Pyro());
8081
this.getCommand("assassin").setExecutor(new Assassin());
8182
this.getCommand("dwarf").setExecutor(new Dwarf());
83+
this.getCommand("chemist").setExecutor(new Chemist());
8284
this.getCommand("md").setExecutor(new CallMedic());
8385
this.getCommand("d").setExecutor(new Defend());
8486
this.getCommand("c").setExecutor(new Careful());
87+
this.getCommand("b").setExecutor(new Buffs());
8588

8689
// load config
8790
World world = this.getServer().getWorld("world-ctf");
@@ -120,6 +123,14 @@ public static void log(Level level, String message) {
120123
Bukkit.getLogger().log(level, "[ParallelCTF] " + message);
121124
}
122125

126+
public static void sendMessageToTeam(CTFPlayer player, String message) {
127+
for (CTFPlayer p : gameManager.players.values()) {
128+
if (p.getTeam() == player.getTeam()) {
129+
sendMessageTo(p.getMcPlayer(), message);
130+
}
131+
}
132+
}
133+
123134
public static void sendMessageTo(Player player, String message) {
124135
Component msg = Component.text("§3[§f§lCTF§3] §a" + message);
125136
player.sendMessage(msg);
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
package parallelmc.ctf.classes;
2+
3+
import net.kyori.adventure.text.Component;
4+
import org.bukkit.Material;
5+
import org.bukkit.enchantments.Enchantment;
6+
import org.bukkit.entity.Player;
7+
import org.bukkit.inventory.ItemStack;
8+
import org.bukkit.inventory.meta.ItemMeta;
9+
import org.bukkit.inventory.meta.PotionMeta;
10+
import org.bukkit.potion.PotionEffect;
11+
import org.bukkit.potion.PotionEffectType;
12+
import org.bukkit.scheduler.BukkitRunnable;
13+
14+
public class ChemistClass extends CTFClass {
15+
16+
private int energy = 0;
17+
18+
public ChemistClass(Player player) {
19+
super(player);
20+
this.name = "Chemist";
21+
ItemStack chestplate = new ItemStack(Material.GOLDEN_CHESTPLATE);
22+
chestplate.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 2);
23+
ItemStack leggings = new ItemStack(Material.GOLDEN_LEGGINGS);
24+
leggings.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 2);
25+
this.armor = new ItemStack[] {
26+
new ItemStack(Material.LEATHER_BOOTS),
27+
leggings,
28+
chestplate,
29+
new ItemStack(Material.LEATHER_HELMET)
30+
};
31+
for (ItemStack i : armor) {
32+
ItemMeta ameta = i.getItemMeta();
33+
ameta.setUnbreakable(true);
34+
i.setItemMeta(ameta);
35+
}
36+
ItemStack sword = new ItemStack(Material.IRON_SWORD);
37+
ItemMeta meta = sword.getItemMeta();
38+
meta.setUnbreakable(true);
39+
meta.displayName(Component.text("§fChemist Sword"));
40+
sword.setItemMeta(meta);
41+
42+
ItemStack damage = new ItemStack(Material.SPLASH_POTION, 12);
43+
PotionMeta pmeta = (PotionMeta)damage.getItemMeta();
44+
pmeta.setColor(PotionEffectType.HARM.getColor());
45+
pmeta.addCustomEffect(new PotionEffect(PotionEffectType.HARM, 1, 1), true);
46+
pmeta.displayName(Component.text("§fInstant Damage II"));
47+
damage.setItemMeta(pmeta);
48+
49+
ItemStack poison = new ItemStack(Material.SPLASH_POTION, 8);
50+
pmeta = (PotionMeta)poison.getItemMeta();
51+
pmeta.setColor(PotionEffectType.POISON.getColor());
52+
pmeta.addCustomEffect(new PotionEffect(PotionEffectType.POISON, 100, 1), true);
53+
pmeta.displayName(Component.text("§fPoison II"));
54+
poison.setItemMeta(pmeta);
55+
56+
ItemStack health = new ItemStack(Material.SPLASH_POTION, 5);
57+
pmeta = (PotionMeta)health.getItemMeta();
58+
pmeta.setColor(PotionEffectType.HEAL.getColor());
59+
pmeta.addCustomEffect(new PotionEffect(PotionEffectType.HEAL, 1, 2), true);
60+
pmeta.displayName(Component.text("§fInstant Health III"));
61+
health.setItemMeta(pmeta);
62+
63+
ItemStack regen = new ItemStack(Material.SPLASH_POTION, 5);
64+
pmeta = (PotionMeta)regen.getItemMeta();
65+
pmeta.setColor(PotionEffectType.REGENERATION.getColor());
66+
pmeta.addCustomEffect(new PotionEffect(PotionEffectType.REGENERATION, 320, 2), true);
67+
pmeta.displayName(Component.text("§fRegeneration III"));
68+
regen.setItemMeta(pmeta);
69+
70+
ItemStack str = new ItemStack(Material.SPLASH_POTION, 3);
71+
pmeta = (PotionMeta)str.getItemMeta();
72+
pmeta.setColor(PotionEffectType.INCREASE_DAMAGE.getColor());
73+
pmeta.addCustomEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 3600, 0), true);
74+
pmeta.addCustomEffect(new PotionEffect(PotionEffectType.SPEED, 3600, 0), true);
75+
pmeta.displayName(Component.text("§fStrength + Speed"));
76+
str.setItemMeta(pmeta);
77+
78+
ItemStack fire = new ItemStack(Material.SPLASH_POTION, 5);
79+
pmeta = (PotionMeta)fire.getItemMeta();
80+
pmeta.setColor(PotionEffectType.FIRE_RESISTANCE.getColor());
81+
pmeta.addCustomEffect(new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 600, 0), true);
82+
pmeta.displayName(Component.text("§fFire Resistance"));
83+
fire.setItemMeta(pmeta);
84+
85+
ItemStack jump = new ItemStack(Material.SPLASH_POTION, 3);
86+
pmeta = (PotionMeta)jump.getItemMeta();
87+
pmeta.setColor(PotionEffectType.JUMP.getColor());
88+
pmeta.addCustomEffect(new PotionEffect(PotionEffectType.JUMP, 80, 1), true);
89+
pmeta.displayName(Component.text("§fJump Boost II"));
90+
jump.setItemMeta(pmeta);
91+
92+
this.hotbar = new ItemStack[] {
93+
sword,
94+
damage,
95+
poison,
96+
health,
97+
regen,
98+
str,
99+
fire,
100+
jump
101+
};
102+
initRunnable();
103+
this.runnableTicks = 20L;
104+
}
105+
106+
public int getEnergy() {
107+
return energy;
108+
}
109+
110+
public void addCooldown(int amount) {
111+
if (energy <= 0) return;
112+
energy -= amount;
113+
player.setExp(energy / 7f);
114+
}
115+
116+
public int getThrowCost(PotionEffectType p) {
117+
switch (p.getName()) {
118+
case "HARM", "HEAL" -> { return 3; }
119+
case "REGENERATION", "POISON" -> { return 2; }
120+
default -> { return 1; }
121+
}
122+
}
123+
124+
public void initRunnable() {
125+
this.runnable = new BukkitRunnable() {
126+
@Override
127+
public void run() {
128+
if (energy < 7) {
129+
energy++;
130+
player.setExp(energy / 7f);
131+
}
132+
}
133+
};
134+
}
135+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package parallelmc.ctf.commands;
2+
3+
import org.bukkit.command.Command;
4+
import org.bukkit.command.CommandExecutor;
5+
import org.bukkit.command.CommandSender;
6+
import org.bukkit.entity.Player;
7+
import org.jetbrains.annotations.NotNull;
8+
import parallelmc.ctf.CTFPlayer;
9+
import parallelmc.ctf.ParallelCTF;
10+
11+
public class Buffs implements CommandExecutor {
12+
@Override
13+
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String label, String[] args) {
14+
if (commandSender instanceof Player player) {
15+
CTFPlayer pl = ParallelCTF.gameManager.getPlayer(player);
16+
ParallelCTF.sendMessageToTeam(pl, pl.getColorFormatting() + player.getName() + " §8> §6/b §dNeed Buffs!");
17+
}
18+
return true;
19+
}
20+
}

src/main/java/parallelmc/ctf/commands/CallMedic.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class CallMedic implements CommandExecutor {
1313
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String label, String[] args) {
1414
if (commandSender instanceof Player player) {
1515
CTFPlayer pl = ParallelCTF.gameManager.getPlayer(player);
16-
ParallelCTF.sendMessage(pl.getColorFormatting() + player.getName() + " §8> §6/md §aMedic!");
16+
ParallelCTF.sendMessageToTeam(pl,pl.getColorFormatting() + player.getName() + " §8> §6/md §aMedic!");
1717
}
1818
return true;
1919
}

src/main/java/parallelmc/ctf/commands/Careful.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class Careful implements CommandExecutor {
1313
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String label, String[] args) {
1414
if (commandSender instanceof Player player) {
1515
CTFPlayer pl = ParallelCTF.gameManager.getPlayer(player);
16-
ParallelCTF.sendMessage(pl.getColorFormatting() + player.getName() + " §8> §6/c §aCareful!");
16+
ParallelCTF.sendMessageToTeam(pl, pl.getColorFormatting() + player.getName() + " §8> §6/c §aCareful!");
1717
}
1818
return true;
1919
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package parallelmc.ctf.commands;
2+
3+
import org.bukkit.command.Command;
4+
import org.bukkit.command.CommandExecutor;
5+
import org.bukkit.command.CommandSender;
6+
import org.bukkit.entity.Player;
7+
import org.jetbrains.annotations.NotNull;
8+
import parallelmc.ctf.CTFPlayer;
9+
import parallelmc.ctf.GameState;
10+
import parallelmc.ctf.ParallelCTF;
11+
12+
public class Chemist implements CommandExecutor {
13+
@Override
14+
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String label, String[] args) {
15+
if (commandSender instanceof Player player) {
16+
if (ParallelCTF.gameManager.gameState != GameState.PLAY) {
17+
ParallelCTF.sendMessageTo(player, "Cannot equip classes yet!");
18+
return true;
19+
}
20+
CTFPlayer pl = ParallelCTF.gameManager.getPlayer(player);
21+
pl.setClass("Chemist");
22+
if (ParallelCTF.gameManager.ctfMap.isPlayerNotInSpawn(pl)) {
23+
pl.kill();
24+
}
25+
ParallelCTF.sendMessageTo(player, "Equipped the Chemist class!");
26+
}
27+
return true;
28+
};
29+
}

src/main/java/parallelmc/ctf/commands/ClassInfo.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,14 @@ private String classInfo(String cl) {
2424
return switch (cl) {
2525
case "archer" -> formatInfo("Archer", "Full Chainmail", "Punch II Bow, Stone Sword", "None", "1-shots players from 30+ blocks away");
2626
case "assassin" -> formatInfo("Assassin", "Gold Boots", "Iron Sword", "Can use Speed Boost for Speed III", "Can assassinate players, gains Strength II after assassinating");
27+
case "chemist" -> formatInfo("Chemist", "Leather Boots + Helmet, Prot II Gold Chest + Leggings", "Iron Sword", "None", "Can use splash potions, with an energy cooldown.");
2728
case "dwarf" -> formatInfo("Dwarf", "Chain Helmet + Boots, Diamond Chestplate + Leggings", "Netherite Sword", "Slowness I", "Can sneak to gain various enchantments on their sword");
2829
case "medic" -> formatInfo("Medic", "Full Gold", "Sharpess I Gold Sword", "Water Breathing, Fire Resistance", "Can punch teammates to heal them and refresh their items, cobweb snowballs");
2930
case "ninja" -> formatInfo("Ninja", "None", "Sharpess VI Gold Sword", "Speed II", "Can go invisible with redstone, smoke bombs, ender pearls");
3031
case "pyro" -> formatInfo("Pyro", "Leather + Chainmail Chestplate", "Explosive Bow, Diamond Axe", "None", "1-shots players on fire with the axe, flint and steel");
3132
case "soldier" -> formatInfo("Soldier", "Full Iron", "Iron Sword", "None", "Can climb walls with their sword, no fall damage");
3233
case "tank" -> formatInfo("Tank", "Diamond Armor", "Diamond Sword", "None", "None");
33-
default -> "Unkown class " + cl;
34+
default -> "Unknown class " + cl;
3435
};
3536
}
3637

0 commit comments

Comments
 (0)