Introduce a full in-memory team system and integrate it into gameplay and UI. - Add Team, TeamManager, TeamListener and TeamCommand to manage teams, invites, accept/deny, leave, kick and info. TeamManager stores teams and pending invites (INVITE_TTL_MS) using concurrent maps and exposes helper/query methods (areInSameTeam, allAliveInSameTeam, getInviterFor, cleanExpiredInvites, reset). - Wire TeamManager into SpeedHG: initialize, schedule periodic invite cleanup, register command and listener, and reset teams on plugin disable. - Update GameManager to consider teams for win conditions, build team winner names, exclude teammates from random teleport/compass logic, and credit all winning team members for stats/ranking. - Move ability charge feedback out of individual kits into KitEventDispatcher: remove per-kit onFullyCharged overrides and add centralized ActionBar/sound feedback (sendChargeUpdateActionBar/sendChargeReadyActionBar). ActiveAbility no longer defines onFullyCharged. - Make OraclePerk ignore teammates when finding nearest enemy. - Add config entries for teams and corresponding language strings; tweak some default values in CustomGameSettings (gladiator arena radius/height and minor formatting changes). These changes enable 2-player teams (configurable), friendly-fire prevention, invite lifecycle handling, and team-aware endgame logic.
542 lines
22 KiB
YAML
542 lines
22 KiB
YAML
#
|
|
# SpeedHG v1.0.0 by McScrims-Network
|
|
# https://github.com/McScrims-Network
|
|
#
|
|
|
|
default:
|
|
prefix: '<gradient:red:gold>SpeedHG</gradient> <dark_gray>|</dark_gray> <reset>'
|
|
no_permission: '<prefix><red>Insufficient permissions.</red>'
|
|
|
|
game:
|
|
join: '<prefix><green><name></green> <gray>has joined the game.</gray>'
|
|
quit: '<prefix><red><name></red> <gray>has quit the game.</gray>'
|
|
lobby-idle: '<prefix><gray>Waiting for more players... (<current> / <min>)</gray>'
|
|
start-aborted: '<prefix><red>The game start has been aborted due to the lack of players!</red>'
|
|
started: '<prefix><green>The game has started! Good Luck!</green>'
|
|
invincibility-start: '<prefix><yellow>Invincibility has started and ends in <time> second(s)!</yellow>'
|
|
fighting-started: '<prefix><red>The battle has begun! Try not to die!</red>'
|
|
death-killed: '<prefix><yellow><player> has died whilst fighting <killer>! There are <left> players left.</yellow>'
|
|
death-pve: '<prefix><yellow><player> has died! There are <left> players left.</yellow>'
|
|
win-chat: '<prefix><green><winner> has won the game! Thanks for playing!</green>'
|
|
|
|
ranking:
|
|
placement_progress: '<prefix><gray>Placement <aqua><current>/<total></aqua> — Placed <aqua>#<placement></aqua> · <aqua><kills></aqua> Kill(s)</gray>'
|
|
result_win: '<prefix><gold>🏆 Victory!</gold> <gray>Kills: <aqua><kills></aqua></gray> · <rr>'
|
|
result_loss: '<prefix><gray>You placed <aqua><placement></aqua> · Kills: <aqua><kills></aqua></gray> · <rr>'
|
|
|
|
promote-main: '<gradient:gold:yellow><bold>RANK UP!</bold></gradient>'
|
|
promote-sub: '<color><name><reset>'
|
|
|
|
rank_up: '<prefix><green>⬆ Rank Up!</green> <gray><from> → <to>'
|
|
rank_down: '<prefix><red>⬇ Rank Down.</red> <gray><from> → <to>'
|
|
|
|
title:
|
|
fight-main: '<red>The battle has begun!</red>'
|
|
fight-sub: '<red>Try not to die!</red>'
|
|
win-main: '<gold><winner> has won the game!</gold>'
|
|
win-sub: '<gray>Thanks for playing!</gray>'
|
|
|
|
timer:
|
|
lobby: '<prefix><green>The game starts in <time> second(s)</green>'
|
|
actionbar-invincibility: '<yellow>Invincibility ends in <time> second(s)!</yellow>'
|
|
|
|
antirunner:
|
|
warning: '<red>Fight and you will not be punished!</red>'
|
|
punish: '<prefix><red>You have been punished due to not fighting your enemy!</red>'
|
|
|
|
player:
|
|
welcome: '<red>Welcome to</red> <gradient:red:gold>SpeedHG</gradient><gold>!</gold>'
|
|
|
|
build:
|
|
no_diamonds: '<prefix><red>Diamonds are not allowed in SpeedHG!</red>'
|
|
no_iron_before_feast: '<prefix><red>Iron is not allowed before the Feast has started!</red>'
|
|
|
|
craft:
|
|
no_shift_click: '<prefix><red>Shift-click is not allowed while crafting!</red>'
|
|
no_shield: '<prefix><red>Shields are not allowed in SpeedHG!</red>'
|
|
iron_nerf: '<prefix><red>Your item has been nerfed as it contains iron!</red>'
|
|
|
|
feast:
|
|
announcement: '<prefix><gold>⚔ The Feast spawns in <time>!</gold> <gray>Location: <yellow>X: <x> Z: <z></yellow></gray>'
|
|
spawned: '<prefix><red><bold>THE FEAST HAS SPAWNED!</bold></red> <gray>Head to <yellow>X: <x> Z: <z></yellow> for the loot!</gray>'
|
|
|
|
pit:
|
|
announcement: '<prefix><dark_red>⚠ The Pit spawns in <time>!</dark_red> <gray>All surviving players will be forced into the final deathmatch!</gray>'
|
|
spawned: '<prefix><dark_red><bold>THE PIT HAS OPENED!</bold></dark_red> <gray>All players have been teleported. There is no escape!</gray>'
|
|
title-main: '<dark_red><bold>FINAL DEATHMATCH</bold></dark_red>'
|
|
title-sub: '<red>Survive at all costs!</red>'
|
|
escape-warning: '<red>⚠ Leave the pit and you will die! Return immediately!</red>'
|
|
|
|
disasters:
|
|
tornado:
|
|
warning-main: '<red><bold>BEWARE!</bold></red>'
|
|
warning-sub: '<gray>A tornado is forming near you!</gray>'
|
|
earthquake:
|
|
warning-main: '<red><bold>EARTHQUAKE!</bold></red>'
|
|
warning-sub: '<gray>The ground beneath you is starting to shake!</gray>'
|
|
meteor:
|
|
warning-main: '<dark_red><bold>METEOR!</bold></dark_red>'
|
|
warning-sub: '<gray>A glowing boulder is hurtling toward you!</gray>'
|
|
thunder:
|
|
warning-main: '<yellow><bold>THUNDERSTORM!</bold></yellow>'
|
|
warning-sub: '<gray>Your height attracts lightning!</gray>'
|
|
|
|
team:
|
|
disabled: '<prefix><red>Teams are disabled in this round.</red>'
|
|
usage: '<prefix><gray>Usage: /team <invite|accept|deny|leave|kick|info> [player]</gray>'
|
|
game_running: '<prefix><red>Teams cannot be changed while the game is running!</red>'
|
|
not_in_team: '<prefix><red>You are not in a team.</red>'
|
|
already_in_team: '<prefix><red>You are already in a team!</red>'
|
|
player_not_found: '<prefix><red>Player <name> is not online.</red>'
|
|
|
|
invite:
|
|
usage: '<prefix><red>Usage: /team invite <player></red>'
|
|
sent: '<prefix><green>✉ Invite sent to <yellow><name></yellow>. (Expires in <time>s)</green>'
|
|
received: '<prefix><gold>✉ <yellow><name></yellow> invited you to their team! <green>/team accept <name></green> or <red>/team deny <name></red> (expires in <time>s)</gold>'
|
|
self: '<prefix><red>You cannot invite yourself.</red>'
|
|
already_teammate: '<prefix><red>This player is already your teammate.</red>'
|
|
target_has_team: '<prefix><red><name> is already in a team.</red>'
|
|
team_full: '<prefix><red>Your team is full!</red>'
|
|
already_pending: '<prefix><red>There is already a pending invite for <name>.</red>'
|
|
|
|
accept:
|
|
usage: '<prefix><red>Usage: /team accept <player></red>'
|
|
no_invite: '<prefix><red>You have no pending invite from <name>.</red>'
|
|
expired: '<prefix><red>The invite from <name> has expired.</red>'
|
|
joined: '<prefix><green>✔ <yellow><name></yellow> joined the team! Members: <white><members></white></green>'
|
|
|
|
deny:
|
|
usage: '<prefix><red>Usage: /team deny <player></red>'
|
|
success: '<prefix><gray>Invite from <name> declined.</gray>'
|
|
received: '<prefix><gray><name> declined your team invite.</gray>'
|
|
|
|
leave:
|
|
success: '<prefix><gray>You left the team.</gray>'
|
|
disbanded: '<prefix><red>The team has been disbanded.</red>'
|
|
member_left: '<prefix><gray><name> left the team.</gray>'
|
|
|
|
kick:
|
|
usage: '<prefix><red>Usage: /team kick <player></red>'
|
|
success: '<prefix><yellow>Kicked <name> from the team.</yellow>'
|
|
received: '<prefix><red>You were kicked from the team by <name>.</red>'
|
|
not_leader: '<prefix><red>Only the team leader can kick players.</red>'
|
|
not_in_your_team: '<prefix><red><name> is not in your team.</red>'
|
|
self: '<prefix><red>You cannot kick yourself. Use /team leave.</red>'
|
|
|
|
info:
|
|
header: '<gray>━━━━━ <gold>Team Members</gold> ━━━━━</gray>'
|
|
member: ' <gray>#<index></gray> <white><name></white><yellow><leader></yellow>'
|
|
footer: '<gray>━━━━━━━━━━━━━━━━━━━━━ (<size>/<max>)</gray>'
|
|
|
|
commands:
|
|
kit:
|
|
usage: '<red>Usage: /kit <kitName> <playstyle></red>'
|
|
kitNotFound: '<red><kit> is not a registered kit!</red>'
|
|
playstyleNotFound: '<red><playstyle> is not an available playstyle!</red>'
|
|
gameHasStarted: '<red>The game has already started. You cannot select a kit right now!</red>'
|
|
cannotPickSameKit: '<red>You cannot pick the same kit!</red>'
|
|
selected: '<green>You have selected <kit> as your Kit with playstyle <playstyle>!</green>'
|
|
leaderboard:
|
|
header: '<gray>====== <gold>Leaderboard</gold> ======</gray>'
|
|
empty: '<red>There are currently no stats</red>'
|
|
line: '#<rank> - <green><name></green> - <aqua><score></aqua>'
|
|
footer: '<gray>====== <gold>Leaderboard</gold> ======</gray>'
|
|
timer:
|
|
usage: '<red>Usage: /timer <seconds></red>'
|
|
positiveNumber: '<red>Invalid time format! Use, for example, 10m, 30s, or 600.</red>'
|
|
onlyIngame: '<red>Timer can only be set in game.</red>'
|
|
set: '<green>The game timer has been set to <time>!</green>'
|
|
ranking:
|
|
usage: '<red>Usage: /ranking <toggle|status|rank [player]></red>'
|
|
enabled: '<prefix><green>✔ Ranked mode is now <bold>ACTIVE</bold>. RR will be awarded next round.</green>'
|
|
disabled: '<prefix><yellow>⚠ Unranked mode is now <bold>ACTIVE</bold>. No RR changes next round.</yellow>'
|
|
status_enabled: '<prefix><gray>Ranking: <green><bold>ACTIVE</bold></green></gray>'
|
|
status_disabled: '<prefix><gray>Ranking: <yellow><bold>DISABLED (Unranked)</bold></yellow></gray>'
|
|
rank_usage: '<red>Usage: /ranking rank <player></red>'
|
|
player_not_found: '<red>Player <name> is not online.</red>'
|
|
rank_info: '<prefix><gray>Player <white><name></white> — <rank> <gray>(<score> RR · <games> games)</gray>'
|
|
|
|
scoreboard:
|
|
title: '<gradient:red:gold><bold>SpeedHG</bold></gradient>'
|
|
lobby:
|
|
- "<gray><st> "
|
|
- "Players: <green><online>/<max>"
|
|
- "Kit: <yellow><kit>"
|
|
- "Rank: <rank>"
|
|
- ""
|
|
- "<gray>Waiting for start..."
|
|
- ""
|
|
- "<yellow>play.mcscrims.club"
|
|
ingame:
|
|
- "<gray><st> "
|
|
- "Time: <green><timer>"
|
|
- "Players: <red><alive>"
|
|
- "Kills: <green><kills>"
|
|
- "Rank: <rank>"
|
|
- ""
|
|
- "Border: <red><border>"
|
|
- ""
|
|
- "<yellow>play.mcscrims.club"
|
|
|
|
gui:
|
|
kit_selector:
|
|
title: '<gradient:red:gold><bold>Kit Selection</bold></gradient>'
|
|
kit_selected: '<green>Kit <kit> selected!</green>'
|
|
playstyle_changed: '<gold>Playstyle: <white>► <playstyle></white>'
|
|
prev_page: '<red>◄ Previous'
|
|
next_page: '<green>Next ►'
|
|
clear_search: '<red>✕ Reset Search'
|
|
close: '<red>✕ Close'
|
|
kit_item:
|
|
playstyle: '<gray>Playstyle: <white>► <playstyle>'
|
|
left_click: '<yellow>[L-Click]</yellow> <gray>Select Kit</gray>'
|
|
right_click: '<gold>[R-Click]</gold> <gray>Change Playstyle</gray>'
|
|
search:
|
|
name: '<yellow>🔍 Search'
|
|
current: '<gray>Current: <white>"<query>"'
|
|
click: '<gray>Click to search</gray>'
|
|
anvil_search:
|
|
input_placeholder: '<gray>Enter search term...</gray>'
|
|
confirm_name: '<green>✔ Confirm Search</green>'
|
|
confirm_click: '<gray>Click to confirm</gray>'
|
|
perk_selector:
|
|
title: '<gradient:dark_purple:light_purple><bold>Perk-Auswahl</bold></gradient>'
|
|
slot_empty: '<gray>Perk-Slot <slot>: <red>Leer</red></gray>'
|
|
slot_hint: '<dark_gray>Klicke einen Perk zum Ausrüsten'
|
|
slot_title: '<gray>Slot <slot>: </gray>'
|
|
equipped_label: '<green>✔ Ausgerüstet</green>'
|
|
click_equip: '<gray>Klick zum Ausrüsten</gray>'
|
|
click_deselect: '<gray>Klick zum Abwählen</gray>'
|
|
slots_full: '<red>Slots voll! Klicke einen aktiven Perk zum Abwählen.'
|
|
game_running: '<red>Perks können während des Spiels nicht geändert werden!'
|
|
selected: '<green>Ausgerüstet: <perk><green>!'
|
|
deselected: '<red>Abgewählt: <perk><red>!'
|
|
close: '<red>✕ Schließen</red>'
|
|
|
|
perks:
|
|
oracle:
|
|
name: '<gradient:gold:yellow><bold>Oracle</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- '<gray>Zeigt Kit + Distanz des nächsten</gray>'
|
|
- '<gray>Gegners (Schleichen / Kompass).</gray>'
|
|
- ' '
|
|
- '<yellow>Synergie: <gray>Spielo-Kit zeigt Gamble-Ausgang.'
|
|
|
|
vampire:
|
|
name: '<gradient:dark_red:red><bold>Vampire</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- '<gray>10% Chance bei Nahkampftreffer:</gray>'
|
|
- '<red>½ Herz</red> <gray>heilen.</gray>'
|
|
|
|
featherweight:
|
|
name: '<gradient:white:aqua><bold>Featherweight</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- '<gray>Vollständig immun gegen</gray>'
|
|
- '<gray>Fallschaden.</gray>'
|
|
|
|
bloodlust:
|
|
name: '<gradient:dark_red:gold><bold>Bloodlust</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- '<gray>Nach einem Kill:</gray>'
|
|
- '<yellow>Speed I</yellow> <gray>+</gray> <green>Regen I</green> <gray>für 5 Sekunden.</gray>'
|
|
message: '<red>⚔ Blutrausch! <yellow>Speed I</yellow> + <green>Regen I</green> für 5 Sekunden!</red>'
|
|
|
|
enderblue:
|
|
name: '<gradient:dark_purple:aqua><bold>Enderblood</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- '<gray>Ender Pearl landings deal</gray>'
|
|
- '<gray>no fall damage to you.</gray>'
|
|
message: '<aqua>⚡ Enderblood absorbed the impact!</aqua>'
|
|
|
|
ghost:
|
|
name: '<gradient:white:gray><bold>Ghost</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- '<gray>You are invisible to</gray>'
|
|
- '<gray>compass tracking and the</gray>'
|
|
- '<gray>Oracle perk.</gray>'
|
|
|
|
pyromaniac:
|
|
name: '<gradient:red:gold><bold>Pyromaniac</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- '<gray>Immune to fire, lava,</gray>'
|
|
- '<gray>magma blocks and burn ticks.</gray>'
|
|
|
|
adrenaline:
|
|
name: '<gradient:red:yellow><bold>Adrenaline</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- '<gray>Dropping below 3 hearts</gray>'
|
|
- '<gray>grants <yellow>Speed II</yellow> for 5 s.</gray>'
|
|
- '<dark_gray>(30 s cooldown)</dark_gray>'
|
|
message: '<red>❤ Adrenaline Rush! <yellow>Speed II</yellow> for 5 seconds!</red>'
|
|
|
|
scavenger:
|
|
name: '<gradient:gold:yellow><bold>Scavenger</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- '<gray>Every kill drops an extra</gray>'
|
|
- '<gold>Golden Apple</gold> <gray>at the corpse.</gray>'
|
|
message: '<gold>🍎 Scavenged a Golden Apple!</gold>'
|
|
|
|
kits:
|
|
needed_hits: '<gold>⚡ Ability: <white><current>/<required> Hits</white></gold>'
|
|
ability_charged: '<green><bold>⚡ ABILITY READY!</bold></green>'
|
|
|
|
backup:
|
|
name: '<gradient:gold:#ff841f><bold>Backup</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- 'Select a kit mid-round at any time.'
|
|
- 'All kits are available to pick.'
|
|
gladiator:
|
|
name: '<gradient:dark_gray:gray><bold>Gladiator</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- 'Use your ability to fight enemies'
|
|
- 'in a 1v1 above the skies.'
|
|
items:
|
|
ironBars:
|
|
name: '<gray>Cage</gray>'
|
|
description: 'Fight an enemy in a 1v1 above the skies'
|
|
messages:
|
|
ability_charged: '<yellow>Your ability has been recharged!</yellow>'
|
|
goblin:
|
|
name: '<gradient:dark_green:gray><bold>Goblin</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- 'AGGRESSIVE:'
|
|
- 'Copy your enemies kit'
|
|
- ' '
|
|
- 'DEFENSIVE:'
|
|
- 'Summon a bunker for protection'
|
|
items:
|
|
steal:
|
|
name: '§cSteal Kit'
|
|
description: 'Steal the kit of your opponent for 60 seconds'
|
|
bunker:
|
|
name: '§2Bunker'
|
|
description: 'Create a bunker around yourself for 15 seconds'
|
|
messages:
|
|
stole_kit: '<green>You have stolen the kit of your opponent (Kit: <kit>)!</green>'
|
|
spawn_bunker: '<green>You have created a bunker around yourself!'
|
|
ability_charged: '<yellow>Your ability has been recharged!</yellow>'
|
|
icemage:
|
|
name: '<gradient:dark_aqua:aqua><bold>IceMage</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- 'AGGRESSIVE:'
|
|
- 'Gain speed in ice biomes and give slowness'
|
|
- ' '
|
|
- 'DEFENSIVE:'
|
|
- 'Summon snowballs and freeze enemies'
|
|
items:
|
|
snowball:
|
|
name: '§bFreeze'
|
|
description: 'Freeze your enemies by throwing snowballs in all directions'
|
|
passive:
|
|
name: '§bIceStorm'
|
|
description: 'Gain speed in cold biomes and give enemies slowness'
|
|
messages:
|
|
shoot_snowballs: '<aqua>You have shot frozen snowballs in all directions!</aqua>'
|
|
ability_charged: '<yellow>Your ability has been recharged!</yellow>'
|
|
venom:
|
|
name: '<gradient:dark_red:red><bold>Venom</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- 'AGGRESSIVE:'
|
|
- 'Summon a deafening beam'
|
|
- ' '
|
|
- 'DEFENSIVE:'
|
|
- 'Create a shield for protection'
|
|
items:
|
|
wither:
|
|
name: '§8Deafening Beam'
|
|
description: 'Summon a deafening beam against an enemy'
|
|
shield:
|
|
name: '§8Shield of Darkness'
|
|
description: 'Create a shield and get protected against hits and projectiles'
|
|
passive:
|
|
name: '§8Shield of Darkness'
|
|
description: 'Create a shield and get protected against hits and projectiles'
|
|
messages:
|
|
wither_beam: '<gray>You have summoned your deafening beam!</gray>'
|
|
shield_activate: '<gray>Your shield of darkness has been activated!</gray>'
|
|
shield_break: '<red>Your shield of darkness has broken!</red>'
|
|
ability_charged: '<yellow>Your ability has been recharged</yellow>'
|
|
rattlesnake:
|
|
name: '<gradient:green:lime><bold>Rattlesnake</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- 'AGGRESSIVE: Sneak-charged pounce'
|
|
- 'DEFENSIVE: 25% counter-venom on hit'
|
|
items:
|
|
pounce:
|
|
name: '<green>Pounce</green>'
|
|
description: 'Sneak + right-click to lunge at an enemy'
|
|
passive:
|
|
aggressive:
|
|
name: '<green>Pounce Strike</green>'
|
|
description: 'Apply Poison II on pounce-hit (x3 after Feast)'
|
|
defensive:
|
|
name: '<green>Counter Venom</green>'
|
|
description: '25% chance to reflect Poison when hit'
|
|
messages:
|
|
pounce_hit: '<green>Pounce hit <count> target(s)! Poison II applied!</green>'
|
|
pounce_miss: '<red>Pounce missed! Nearby enemies were disoriented.</red>'
|
|
venom_proc: '<green>Counter Venom triggered!</green>'
|
|
armorer:
|
|
name: '<gradient:gray:white><bold>Armorer</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- 'Upgrade armor every 2 kills.'
|
|
- 'Broken armor is auto-replaced.'
|
|
passive:
|
|
aggressive:
|
|
name: '<gold>Battle High</gold>'
|
|
description: 'Gain Strength I for 5 s after each kill'
|
|
defensive:
|
|
name: '<aqua>Fortified</aqua>'
|
|
description: 'Iron / Diamond armor receives Protection I'
|
|
messages:
|
|
armor_upgraded: '<gold>Armor upgraded to tier <tier>!</gold>'
|
|
armor_replaced: '<yellow>Broken armor replaced automatically.</yellow>'
|
|
voodoo:
|
|
name: '<gradient:dark_purple:light_purple><bold>Voodoo</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- 'AGGRESSIVE: Wither on hit + root below 50%'
|
|
- 'DEFENSIVE: Curse enemies for buffs'
|
|
items:
|
|
root:
|
|
name: '<dark_purple>Root</dark_purple>'
|
|
description: 'Root an enemy below 50% HP for 5 seconds'
|
|
curse:
|
|
name: '<light_purple>Curse</light_purple>'
|
|
description: 'Curse nearby enemies for 15 seconds'
|
|
passive:
|
|
aggressive:
|
|
name: '<dark_purple>Wither Touch</dark_purple>'
|
|
description: '20% chance to apply Wither on melee hit'
|
|
defensive:
|
|
name: '<light_purple>Dark Pact</light_purple>'
|
|
description: 'Speed + Regen while cursed enemies are nearby'
|
|
messages:
|
|
root_activated: '<dark_purple>Enemy rooted for 5 seconds!</dark_purple>'
|
|
root_received: '<red>You are rooted!</red>'
|
|
curse_cast: '<light_purple>Cursed <count> enemy(s) for 15 seconds!</light_purple>'
|
|
curse_received: '<red>You have been cursed by a Voodoo player!</red>'
|
|
ability_charged: '<yellow>Ability recharged!</yellow>'
|
|
blackpanther:
|
|
name: '<gradient:dark_gray:white><bold>Black Panther</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- 'AGGRESSIVE: Push + Vibranium Fists'
|
|
- 'DEFENSIVE: Wakanda Forever! fall-pounce'
|
|
items:
|
|
push:
|
|
name: '<gray>Vibranium Pulse</gray>'
|
|
description: 'Knock back all nearby enemies and activate Fist Mode'
|
|
passive:
|
|
aggressive:
|
|
name: '<gray>Vibranium Fists</gray>'
|
|
description: '6.5 bare-hand damage for 12 s after Push'
|
|
defensive:
|
|
name: '<white>Wakanda Forever!</white>'
|
|
description: 'Fall from 3+ blocks onto an enemy for AOE damage + crater'
|
|
messages:
|
|
fist_mode_active: '<gray>⚡ Vibranium Fists active for 12 seconds!</gray>'
|
|
wakanda_impact: '<white>Wakanda Forever! Hit <count> enemy(s)!</white>'
|
|
ability_charged: '<yellow>Ability recharged!</yellow>'
|
|
theworld:
|
|
name: '<gradient:dark_gray:white><bold>The World</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- 'AGGRESSIVE: Shockwave + 3x Blink'
|
|
- 'DEFENSIVE: Shockwave + Freeze + 5-Hit Cap'
|
|
items:
|
|
clock:
|
|
aggressive:
|
|
name: '<gray>The World</gray>'
|
|
description: 'Shockwave → right-click 3x to blink in looking direction'
|
|
defensive:
|
|
name: '<gray>The World</gray>'
|
|
description: 'Shockwave + freeze nearby enemies (max 5 hits each)'
|
|
passive:
|
|
defensive:
|
|
name: '<aqua>Time Stop</aqua>'
|
|
description: 'Frozen enemies can only be hit 5 times'
|
|
messages:
|
|
shockwave_and_blink: '<gray>Shockwave! <white><charges> blink charge(s) ready.</white>'
|
|
teleport_charges: '<aqua>Blinked! <charges> charge(s) remaining.</aqua>'
|
|
charges_exhausted: '<red>All blink charges spent!</red>'
|
|
freeze_activated: '<aqua>⏸ Time stopped for <count> enemy(s)!</aqua>'
|
|
frozen_received: '<red>⏸ You are frozen for 10 seconds!</red>'
|
|
frozen_expired: '<gray>The freeze has worn off.</gray>'
|
|
freeze_broken: '<gold>Freeze broken — 5 hits reached!</gold>'
|
|
freeze_hits_left: '<aqua>Frozen enemy — <hits> hit(s) remaining.</aqua>'
|
|
tesla:
|
|
name: '<gradient:yellow:aqua><bold>Tesla</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- 'AGGRESSIVE: Lightning strikes (5-block radius)'
|
|
- 'DEFENSIVE: Knockback + fire aura'
|
|
- '<dark_gray>Disabled above Y ≈ 113'
|
|
items:
|
|
rod:
|
|
name: '<yellow>Tesla Coil'
|
|
description: 'Strike 5 random bolts in a 5-block radius (1.5 ♥ each)'
|
|
passive:
|
|
name: '<yellow>Electromagnetic Field'
|
|
description: 'Push back + ignite nearby enemies every 3 s'
|
|
messages:
|
|
lightning_cast: '<yellow>⚡ Tesla Coil discharged!'
|
|
too_high: '<red>Too high! Tesla requires ground contact.'
|
|
ability_charged: '<yellow>Tesla Coil recharged!'
|
|
|
|
puppet:
|
|
name: '<gradient:dark_purple:light_purple><bold>Puppet</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- 'AGGRESSIVE: Life drain (max 8 ♥, 2 s)'
|
|
- 'DEFENSIVE: Blindness + Slowness III (4 s)'
|
|
items:
|
|
drain:
|
|
name: '<dark_purple>Life Drain'
|
|
description: 'Drain life from nearby enemies. Sneak to cancel.'
|
|
fear:
|
|
name: '<dark_purple>Puppeteer''s Fear'
|
|
description: 'Apply Blindness + Slowness to nearby enemies'
|
|
messages:
|
|
drain_start: '<dark_purple>Draining life...'
|
|
draining: '<dark_purple>♥ Drained <healed>/<max> hearts'
|
|
drain_cancelled: '<gray>Drain cancelled.'
|
|
no_enemies: '<red>No enemies nearby!'
|
|
feared: '<dark_purple>You are being puppeted!'
|
|
fear_cast: '<dark_purple>Fear applied to <count> enemy(s)!'
|
|
ability_charged: '<yellow>Ability recharged!'
|
|
|
|
anchor:
|
|
name: '<gradient:gray:white><bold>Anchor</bold></gradient>'
|
|
lore:
|
|
- ' '
|
|
- 'Always: 40% knockback resistance'
|
|
- 'AGGRESSIVE: 5-block anchor + damage bonus'
|
|
- 'DEFENSIVE: 8-block anchor + Resistance I'
|
|
items:
|
|
chain:
|
|
name: '<gray>⚓ Deploy Anchor'
|
|
description: 'Summon an Iron Golem anchor. Enemies can destroy it!'
|
|
passive:
|
|
name: '<gray>Anchored'
|
|
description: 'NoKnock + bonus within anchor radius'
|
|
messages:
|
|
anchor_placed: '<gray>Anchor deployed! Radius: <radius> blocks.'
|
|
anchor_destroyed: '<red>⚓ Your anchor was destroyed!'
|
|
ability_charged: '<gray>Anchor ready to deploy!' |