From d56e8eaea57d9d9c18d862d2dcac674461154765 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Fri, 28 Feb 2025 23:12:13 +0100 Subject: [PATCH] Add Trapper game class to the CTF system Introduced the new "Trapper" class with unique armor, tools, and abilities to enhance gameplay. The Trapper specializes in utilizing powdered snow traps to hinder the enemy team. This includes creating necessary implementations and updating retrieval logic. --- .../com/alttd/ctf/game_class/GameClass.java | 2 + .../ctf/game_class/GameClassRetrieval.java | 2 + .../game_class/creation/TrapperCreator.java | 68 +++++++++++++++++++ .../game_class/implementations/Trapper.java | 15 ++++ 4 files changed, 87 insertions(+) create mode 100644 src/main/java/com/alttd/ctf/game_class/creation/TrapperCreator.java create mode 100644 src/main/java/com/alttd/ctf/game_class/implementations/Trapper.java diff --git a/src/main/java/com/alttd/ctf/game_class/GameClass.java b/src/main/java/com/alttd/ctf/game_class/GameClass.java index c4822c4..4df498b 100644 --- a/src/main/java/com/alttd/ctf/game_class/GameClass.java +++ b/src/main/java/com/alttd/ctf/game_class/GameClass.java @@ -25,6 +25,8 @@ import java.util.List; @Slf4j public abstract class GameClass { + //TODO simple class that does powedered snow + //TODO mage uses up more snowballs shot gun style immediately spawn them when thrown 5 sec or so cooldown? mayb 3 private static final MiniMessage miniMessage = MiniMessage.miniMessage(); private final List armor; diff --git a/src/main/java/com/alttd/ctf/game_class/GameClassRetrieval.java b/src/main/java/com/alttd/ctf/game_class/GameClassRetrieval.java index 6e66d2c..897687e 100644 --- a/src/main/java/com/alttd/ctf/game_class/GameClassRetrieval.java +++ b/src/main/java/com/alttd/ctf/game_class/GameClassRetrieval.java @@ -4,6 +4,7 @@ import com.alttd.ctf.game.GameManager; import com.alttd.ctf.game_class.creation.EngineerCreator; import com.alttd.ctf.game_class.creation.FighterCreator; import com.alttd.ctf.game_class.creation.TankCreator; +import com.alttd.ctf.game_class.creation.TrapperCreator; import com.alttd.ctf.team.Team; import java.util.ArrayList; @@ -24,6 +25,7 @@ public class GameClassRetrieval { final List gameClasses = new ArrayList<>(); gameClasses.add(FighterCreator.createFighter(team.getColor())); gameClasses.add(TankCreator.createTank(team.getColor())); + gameClasses.add(TrapperCreator.createTrapper(team.getColor())); gameClasses.add(EngineerCreator.createEngineer(team.getColor())); return gameClasses; } diff --git a/src/main/java/com/alttd/ctf/game_class/creation/TrapperCreator.java b/src/main/java/com/alttd/ctf/game_class/creation/TrapperCreator.java new file mode 100644 index 0000000..1866dfa --- /dev/null +++ b/src/main/java/com/alttd/ctf/game_class/creation/TrapperCreator.java @@ -0,0 +1,68 @@ +package com.alttd.ctf.game_class.creation; + +import com.alttd.ctf.game_class.GameClass; +import com.alttd.ctf.game_class.implementations.Tank; +import com.alttd.ctf.team.TeamColor; +import lombok.extern.slf4j.Slf4j; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; + +import java.util.List; + +@Slf4j +public class TrapperCreator { + + private static final MiniMessage miniMessage = MiniMessage.miniMessage(); + + @Contract("_ -> new") + public static @NotNull GameClass createTrapper(@NotNull TeamColor teamColor) {//TODO add ability to become temp invulnerable (with some particle effects mayb?) + return new Tank(getArmor(), getTools(teamColor), getDisplayItem(teamColor), + 20, 7, 4); + } + + @Contract(value = " -> new", pure = true) + private static @Unmodifiable List getArmor() { + return (List.of(Material.LEATHER_BOOTS, Material.LEATHER_LEGGINGS, Material.LEATHER_CHESTPLATE, Material.AIR)); + } + + @Contract("_ -> new") + private static @NotNull @Unmodifiable List getTools(TeamColor teamColor) { + return (List.of(getShovel(teamColor), getPowderedSnow(teamColor))); + } + + private static @NotNull ItemStack getPowderedSnow(@NotNull TeamColor teamColor) { + ItemStack powderedSnow = new ItemStack(Material.POWDER_SNOW_BUCKET); + powderedSnow.setAmount(16); + ItemMeta itemMeta = powderedSnow.getItemMeta(); + itemMeta.itemName(MiniMessage.miniMessage().deserialize( + String.format("Snow Trap", teamColor.hex()))); + powderedSnow.setItemMeta(itemMeta); + return powderedSnow; + } + + private static @NotNull ItemStack getShovel(@NotNull TeamColor teamColor) { + ItemStack shovel = new ItemStack(Material.WOODEN_SHOVEL); + ItemMeta meta = shovel.getItemMeta(); + meta.setUnbreakable(true); + meta.itemName(miniMessage.deserialize(String.format("Snow shovel", teamColor.hex()))); + shovel.setItemMeta(meta); + return shovel; + } + + private static @NotNull ItemStack getDisplayItem(@NotNull TeamColor teamColor) { + ItemStack itemStack = new ItemStack(Material.POWDER_SNOW_BUCKET); + ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.displayName(miniMessage.deserialize(String.format("Trapper", teamColor.hex()))); + itemMeta.lore(List.of( + miniMessage.deserialize("The Trapper is a normal class, but it has a trick up it's sleeve"), + miniMessage.deserialize("They can place their powdered snow to trap the enemy team.") + )); + itemStack.setItemMeta(itemMeta); + return itemStack; + } +} diff --git a/src/main/java/com/alttd/ctf/game_class/implementations/Trapper.java b/src/main/java/com/alttd/ctf/game_class/implementations/Trapper.java new file mode 100644 index 0000000..6144800 --- /dev/null +++ b/src/main/java/com/alttd/ctf/game_class/implementations/Trapper.java @@ -0,0 +1,15 @@ +package com.alttd.ctf.game_class.implementations; + +import com.alttd.ctf.game_class.GameClass; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class Trapper extends GameClass { + protected Trapper(@NotNull List armor, @NotNull List tools, @NotNull ItemStack displayItem, + double health, int throwTickSpeed, int damage) { + super(armor, tools, displayItem, health, throwTickSpeed, damage); + } +}