▶️ ЗАБЕРИ СВОИ 8 ПОДАРКОВ 🎁 ПРИ СОЗДАНИИ СВОЕГО МАЙНКРАФТ СЕРВЕРА
Плагины/HungerGameSSS
HungerGameSSS

HungerGameSSS

HungerGameSSS is a high-performance Hunger Games plugin featuring unique Legendary Weapons with special abilities, dynamic gameplay systems, and full arena customization — built for competitive PvP servers.

245
3

HungerGameSSS 4.5.8

release21 марта 2026 г.

HungerGamesSSS v4.5.8 — Legend Rewrite Pass

🔧 Bug Fixes (13 issues)

  • Fixed 8 abilities double-registering events on reload (CloudSword, VoidStaff, WitherSickles, Excalibur, EmeraldBlade, MidasSword, VillagerWand, ChainsawSword)
  • Fixed ObsidianDagger, HypnosisStaff, GolemHammer passive tasks never cancelling on shutdown
  • Fixed loadPlayerStats() blocking main thread on player join → now async
  • Fixed savePlayerStats() overwriting real stats with zeros on every join
  • Fixed UpdateManager HTTP connection hanging indefinitely when Modrinth unreachable

🗑️ Removed

  • ChainsawSword — removed (replaced by Crimson Chainsword's new design)
  • DeathScythe — removed (replaced by Reaper Scythe's new design)

⚔️ Legend Rewrites (12 weapons)

WeaponOldNew
WarpickBroken mine + shatterMine Explosion (5s CD) + Critical Hit armor shred (20s CD)
Dragon KatanaSimple dashPermanent Speed I passive + Dragon Dash teleport (12s CD)
Artemis BowPower V + InfinityPower III (upgradeable to VII via Anvil) + Homing 25% + Lightning 20%
AiglosIce freeze AOEExplosive spear throw — 3×3×3 blast, Sharpness scales explosion, Loyalty III return
Armadillo DetonatorAuto-explode on contactRight-click shoot (max 3 active, 20s CD) + Left-click instant detonate all
Beehive BlasterBall projectileRight-click spawns 4 angry bees, auto-target nearest enemy, Poison I (8s) per sting
Crimson ChainswordBleed DoT + rev mechanicShred Stacks passive (+10% pen/stack, max 5) + Chainsaw Rampage (10s CD, 3s burst, 12 ticks)
Corrupted CrossbowSpread arrowsPoison Cloud bolt (4s CD) — AoE splash 4×4×4, Multishot = 3 clouds
Death NoteStare at target to summon WardenType /dn <name> → instant kill (bypass armor/totem), 3 uses total, 25s per-target CD
Reaper ScytheWither AOE sweepSoul Harvest (45s CD) — steal ALL beneficial effects + 25% lifesteal per target
Ender BowSwap positions + blinkPearl Shot (30s CD) + Arrow→Floating Pearl (walk in = instant teleport, no CD)
Excalibur5s timed invincibility3-Hit Immunity Charges — block any damage, auto-recharge +1 every 45s
Fountain of YouthRegen zone onlyPassive +1 HP/s while held + 8×8 healing zone (30s, 60s CD)
Ghastly WhistleAir strike onlySummon rideable Ghast (20s) — steer with WASD, auto-fires fireballs at enemies

🆕 New Systems

  • /dn command — Death Note kill command with tab-complete (enemy arena players only)
  • AnvilListener — Artemis Bow can be upgraded Power III→VII via anvil; other legendaries protected from accidental ability-strip
  • Player Head drop — drops victim's head on PvP kill (used in Warpick/Aiglos/etc. recipes). Configurable: game.death.drop-head + game.death.drop-chance
  • attributes: YAML block — any legend item can now set AttributeModifiers (attack damage, speed, reach) via config without code
  • unbreakable: true — YAML flag support in legend item configs

🍳 Recipe Overhaul

All 12 rewritten weapons have brand-new recipes themed around their playstyle. Highlights:

  • Death Note: Nether Star + 3× Player Head + 3× Wither Skull + Echo Shard × 3 + Shulker Shell × 3 (endgame grind)
  • Excalibur: Gold Block × 36 + Emerald Block × 4 + Diamond Sword + Enchanted Golden Apple
  • Ghastly Whistle: Dried Ghast × 5 + Diamond × 4 + Saddle + Ghast Tear × 3 (35 min grind)

HungerGameSSS 4.5.7

release20 марта 2026 г.

[4.5.7] — Full Bug Sweep Pass 4 (2026-03-20)

Fixed — 13 issues across 14 files

High

  • BUG-REG-01 · 8 ability classes — registerEvents() in constructor causes double event-handling on reload (CloudSword.java, VoidStaff.java, WitherSickles.java, Excalibur.java, EmeraldBlade.java, MidasSword.java, VillagerWand.java, ChainsawSword.java, HypnosisStaff.java) Each of these abilities called Bukkit.getPluginManager().registerEvents(this, plugin) inside their constructor. On plugin reload, AbilityRegistry instantiates fresh objects, but the old instances' handlers are never unregistered — both the old and new instances fire for every event, causing every hit, click, and projectile event to be processed twice. Fix: moved all registerEvents() calls out of constructors and into AbilityRegistry.register(), which is called exactly once per ability instance. AbilityRegistry.register() now checks ability instanceof Listener and registers automatically, so abilities only need to implement Listener — no manual registration needed.

  • BUG-OD-01 · ObsidianDagger — standalone passive BukkitRunnable leaks on reload (ObsidianDagger.java) startPassiveTask() spawned a new BukkitRunnable on every class instantiation. After N reloads there were N concurrent tasks all granting Resistance to low-health players. Same root cause as BUG-AB-01 (fixed in 4.5.1 for ArtemisBow). Fix: removed startPassiveTask() entirely. Low-health Resistance passive migrated to passiveTick(), driven by the single UnifiedPassiveTicker in AbilityManager.

  • BUG-HS-01 · HypnosisStaff — minionTask has no reference, cannot be cancelled on shutdown (HypnosisStaff.java) startMinionTask() spawned a BukkitRunnable but discarded the returned BukkitTask reference. On plugin shutdown, AbilityManager.shutdown() cancelled the unified passive ticker but had no way to reach the minion task — it kept running indefinitely after disable, pathfinding mobs toward offline players. Fix: stored the task as private BukkitTask minionTask. Added cleanup() override that cancels the task and calls cleanupMobs() for every tracked owner, removing all controlled mobs from the world.

  • BUG-GH-01 · GolemHammerdisable() is never called, passiveTask never cancelled (GolemHammer.java) GolemHammer stored its passive task in a field and provided a disable() method to cancel it, but nothing ever called disable() — not AbilityManager.shutdown(), not Main.onDisable(). The task ran forever after plugin disable, checking and modifying knockback-resistance attributes on every online player. Fix: renamed disable() to cleanup() (implementing the new Ability.cleanup() contract) so that AbilityRegistry.shutdownAll() picks it up automatically. disable() is kept as a @Deprecated delegate for any external callers.

  • BUG-JOIN-01 · PlayerJoinListenerloadPlayerStats() blocks main thread on every join (PlayerJoinListener.java) loadPlayerStats() executed a JDBC query synchronously on the server's main thread. With a remote MySQL database even a 20 ms query introduces a measurable tick-time spike and can cause lag for all players when multiple players join simultaneously. Fix: wrapped the call in Bukkit.getScheduler().runTaskAsynchronously().

  • BUG-JOIN-02 · PlayerJoinListenersavePlayerStats() immediately after loadPlayerStats() overwrites DB stats with zeroes (PlayerJoinListener.java) savePlayerStats() was called one line after loadPlayerStats() with the comment "Ensure record exists". Because loadPlayerStats() is now async (and was previously also a blocking call that hadn't finished before the save began), PlayerData still held its default values (kills=0, deaths=0, wins=0…) at save time. For any returning player, their stats were reset to zero on every server join. Fix: removed the erroneous savePlayerStats() call. New player records are created correctly by the ON CONFLICT DO UPDATE / INSERT OR REPLACE upsert in DatabaseManager the first time a real stat change is saved (on death, win, or disconnect).

Medium

  • BUG-SHUT-01 · AbilityManager.shutdown() — only cancels the unified ticker; standalone tasks in GolemHammer, HypnosisStaff, ObsidianDagger, DeathNote are not cleaned up (AbilityManager.java, AbilityRegistry.java, Ability.java) Three abilities (GolemHammer, HypnosisStaff, ObsidianDagger) owned standalone BukkitRunnable tasks that nothing cancelled on shutdown. DeathNote had a working cleanup() method but it required a specific cast in Main.onDisable() — easy to break during refactors. Fix: added default void cleanup() {} to the Ability interface. Added AbilityRegistry.shutdownAll() which iterates all registered abilities and calls cleanup() on each. AbilityManager.shutdown() now delegates to shutdownAll() after cancelling the unified ticker. Main.onDisable() no longer needs any per-ability special cases.

  • BUG-ARENA-01 · Arena — 14 public fields bypass thread-safe getters/setters (Arena.java) name, world, cornucopia, spawns, hologramMap, holograms, originalBlocks, blockQueue, activeLegendaries, configuredLegendaries, temporaryLegendaries, pvpEnabled, netherEnabled, endEnabled, lifestealEnabled, hardcoreEnabled, veinminerEnabled, enabled, netherWorld, and maxPlayers were all public. Any class could modify them without going through the synchronized setters, silently breaking thread-safety guarantees on state, timer, and gameEnded. Fix: changed all fields to private. Added missing accessor methods (getHologramMap(), getHolograms(), getOriginalBlocks(), getBlockQueue(), getTemporaryLegendaries(), getActiveLegendaries(), setActiveLegendaries(), getNetherWorld(), setNetherWorld()). Updated all call-sites in ArenaManager, ArenaListener, DungeonManager, and MatchService to use the new accessors.

  • BUG-UM-01 · UpdateManager — missing connection timeout causes async thread to hang indefinitely (UpdateManager.java) HttpURLConnection was opened with no connectTimeout or readTimeout. If Modrinth's API was unreachable (DNS failure, network outage, server down), the async thread blocked forever, leaking a thread for the entire server uptime. Fix: added conn.setConnectTimeout(5000) and conn.setReadTimeout(5000) — the check fails gracefully within 5 s and logs a warning instead of hanging.

Low

  • DEAD-CODE-01 · ArenaManager — three buildStyle* placeholder methods are unreachable dead code (ArenaManager.java) buildStyleClassic(), buildStyleUltimate(), and buildStyleSpeedSilver() were never called from anywhere in the codebase. They placed simple flat platforms without integrating into the Cornucopia pipeline (no chest scanning, no legendary hologram placement, no queue processing). They existed as early prototypes and were never completed. Fix: removed all three methods. The Cornucopia pipeline (buildCornucopia()startCornucopiaPhase2()scanForChests()startPhase3()finalizeArena()) is the sole code path for arena construction.

Changed

  • pom.xml — version 4.5.64.5.7.
  • plugin.yml — version 4.5.64.5.7; description updated.

HungerGameSSS 4.5.6

release20 марта 2026 г.

[4.5.6] — Bug Sweep Pass 3 (2026-03-20)

Fixed — 5 issues across 5 files

High

  • BUG-PM-01 · PlayerManager / MatchService / WithdrawCommand — stolen heart item is unclickable after Component-API migration (PlayerManager.java, MatchService.java, WithdrawCommand.java) PlayerManager.onPlayerInteract identified stolen hearts by comparing meta.getDisplayName() to the language-file string. After the 4.5.4 fix migrated item names to meta.displayName(Component), the legacy getDisplayName() call returns "" — the comparison always failed and hearts could never be consumed. Fix: a NamespacedKey PDC tag stolen_heart is now written to every heart item on creation (MatchService and WithdrawCommand). PlayerManager reads the PDC tag instead of the display name.

  • BUG-EB-01 · EnderBow — position swap has no team check (EnderBow.java) performProjectileHit swapped the shooter and any hit LivingEntity unconditionally. Shooting a teammate teleported them to the shooter's position. Fix: added isFriendlyFire check before performing the swap; returns early for friendly targets.

Medium

  • BUG-CB-01 · CornucopiaBuilder / ArenaManager — build progress spams all online players (CornucopiaBuilder.java, ArenaManager.java) clearArea() used Bukkit.broadcastMessage() for three status messages ("Pre-loading chunks", "Clearing area", "Clearing N%"). These messages were delivered to every player on the server, not just players in the arena being built. Fix: replaced all four broadcastMessage calls with plugin.getLogger().info().

Low

  • DUPE-IMPORT · Duplicate import statements across 8 manager/model files (ScoreboardManager.java, ArenaManager.java, DungeonManager.java, Arena.java, LegendaryRecipe.java, HologramManager.java, LobbyManager.java, MessageManager.java) A previous tooling pass accidentally injected the ColorUtil import statement 9–27 times per file. While harmless at runtime, it produced compiler noise and inflated source size. Fix: de-duplicated all import blocks; one import per class per file.

Changed

  • pom.xml — version 4.5.54.5.6.
  • plugin.yml — version 4.5.54.5.6.

[4.5.5] — Bug Sweep Pass 2 (2026-03-20)

Fixed — 7 issues across 6 files

High

  • BUG-GT-01 · GameTask — world border Phase 1 and Phase 2 execute simultaneously for 60 seconds (GameTask.java) Phase 1 ran while timer ∈ (grace, main] and Phase 2 while timer ∈ (main−60, main]. During the last 60 s of the main phase both conditions were true, so Phase 2 called border.setSize() immediately after Phase 1 — resetting the border back to middleSize on every tick and then fast-shrinking to dmSize. Players saw the border snap suddenly rather than transitioning smoothly. Fix: made the ranges mutually exclusive — Phase 1 covers (grace, main−60] and Phase 2 covers (main−60, main] (else-if chain).

  • BUG-FM-01 · MatchService — feast never spawns from the second match onward (MatchService.java) resetArena() called feastManager.cleanup(arenaName) which removed feast chests but did not clear the feastSpawned guard set in FeastManager. On the next match the guard was still set, so spawnFeast() was never called again for the lifetime of the server. Fix: changed the call to feastManager.resetArena(arenaName) which calls both cleanup() and feastSpawned.remove().

  • BUG-CD-01 · MatchService — countdown cancels immediately because getGamePlayers() is empty during STARTING state (MatchService.java) The not-enough-players check in startCountdown used: arena.getGamePlayers().values().stream().filter(GamePlayer::isAlive).count() < 2 gamePlayers is not populated until the match transitions to PLAYING, so aliveCount was always 0 → the countdown broadcast "not_enough_players" and cancelled on the very first tick. Fix: replaced the alive-count check with arena.getPlayers().size() < 2, which counts the raw joined-player list that is populated during STARTING.

Medium

  • BUG-AB-04 · DeathNotesendActionBar(String) deprecated on Paper 1.21 (DeathNote.java) The progress bar was sent via player.sendActionBar(String), a deprecated overload removed in newer Paper builds. Fix: wrapped the string with LegacyComponentSerializer.legacySection().deserialize().

Low

  • BUG-AB-05 · VoidStaff, SoulGauntlet, DeathScythe, WitherSicklessendActionBar(String) deprecated (13 call-sites) (VoidStaff.java, SoulGauntlet.java, DeathScythe.java, WitherSickles.java) Same issue as BUG-AB-04. All 13 remaining String-based action-bar calls replaced with LegacyComponentSerializer.legacySection().deserialize().

Changed

  • pom.xml — version 4.5.44.5.5.
  • plugin.yml — version 4.5.44.5.5.

HungerGameSSS 4.5.4

release19 марта 2026 г.

Fixed:

  • 8+ missing message keys, CloudSword stutter, PoseidonsTrident thrown hit
  • Legend name + lore had italic — fix all,use Paper Component API

HungerGameSSS 4.5.2

release18 марта 2026 г.

[4.5.2] — Artemis Bow & Passive Ticker Fix Pass (2026-03-18)

Fixed — 8 issues across 5 files

High

  • AB-OPEN-01 · ArtemisBow — memory leak: unbounded homing-arrow runnables accumulate on rapid fire (ArtemisBow.java) Each call to performProjectileLaunch spawned 5 independent BukkitRunnable instances (one per arrow). Players firing continuously in rapid succession could accumulate dozens of concurrent runnables with no upper bound, gradually degrading server TPS. Fix: added a per-player AtomicInteger counter (activeArrows map, capped at 15 = 3 simultaneous volleys). Each runnable increments on start and decrements on cancel/expire. New volleys are silently skipped if the cap is reached. Counter is cleaned up on performQuit and performDeath.

  • AB-OPEN-02 · ArtemisBowperformProjectileHit deals lightning damage without team check (ArtemisBow.java) After BUG-10 was fixed (switched to strikeLightningEffect + manual target.damage()), the new manual damage call had no isFriendlyFire guard. Result: Artemis Bow arrows could deal lightning damage to teammates. Fix: added if (target instanceof Player tp && isFriendlyFire(shooter, tp)) return; before calling target.damage(). Also added a null-guard: if projectile.getShooter() is not a Player, the method returns early.

  • AB-OPEN-03/05 · ArtemisBow — Sky Strike targets first entity in list, not closest (ArtemisBow.java) getNearbyEntities(20, 20, 20) returns entities in no guaranteed order. Sky Strike broke out of the loop on the first non-team entity — sometimes picking a distant mob over an enemy player standing 2 blocks away. Fix: replaced early-break loop with a full distanceSquared scan to find the closest valid target. Search radius is now configurable via sky_strike_radius (default 20).

  • AB-OPEN-04 · ArtemisBow — fan arrows use default Minecraft damage (~0.5 hearts) instead of bow charge (ArtemisBow.java) player.launchProjectile(Arrow.class) spawns arrows with base damage 2.0 — they ignore the actual bow charge the player applied. Only the centre (original) arrow inherited the real charge damage. Fix: added extraArrow.setDamage(baseArrow.getDamage()) when spawning each fan arrow so all 5 arrows deal equal damage consistent with bow charge.

Medium

  • BUG-HH-02 · HadesHelm — standalone passive BukkitRunnable leaks on reload (HadesHelm.java) startPassive() spawned a new BukkitRunnable on every class instantiation. On plugin reload the old instance was discarded but the runnable kept running → N tasks after N reloads. Same root cause as BUG-AB-01 (fixed in 4.5.1 for ArtemisBow). Fix: removed startPassive() entirely. Night Vision, Invisibility-while-sneaking, and Fire Aura logic migrated to passiveTick() — driven by the single UnifiedPassiveTicker.

  • BUG-GC-01 · GuardianCannon — standalone passive BukkitRunnable leaks on reload (GuardianCannon.java) Same root cause as BUG-HH-02. startPassiveTask() ran on instantiation → N tasks after N reloads. Fix: Dolphins Grace water passive migrated to passiveTick().

  • BUG-LS-01 · LichStaff — standalone passive BukkitRunnable leaks on reload (LichStaff.java) Same root cause as BUG-HH-02. startPassiveTask() ran on instantiation → N tasks. Fix: Frost Walker passive migrated to passiveTick(). The ammo / shoot system is unaffected — it correctly uses per-use BukkitRunnable instances that self-cancel.

Low

  • plugin.yml — api-version set to 4.4.1 (invalid format) (plugin.yml) Paper requires api-version to be a major.minor string (1.21), not a plugin version string. An invalid value causes a warning on every server start. Fix: changed api-version: 4.4.1api-version: 1.21.

Changed

  • pom.xml — version 4.5.14.5.2.
  • plugin.yml — version 4.5.14.5.2; api-version corrected to 1.21; description updated.

Совместимость

Minecraft: Java Edition

1.21.x

Платформы

Поддерживаемые окружения

Сервер

Создатели

Детали

Лицензия:Apache-2.0
Опубликован:2 месяца назад
Обновлён:6 дней назад
Главная