HungerGameSSSСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачатьСкачать
ВЕРСИИ (68)
release
HungerGameSSS 4.6.5
4.6.51 июл. 2026 г.328Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
release
HungerGameSSS 4.6.4
4.6.44 июн. 2026 г.191Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
## [4.6.4] — Architecture & Gameplay Bug-Fix Patch (2026-06-04)
> 11 bugs fixed across MatchService, Main, ArenaManager, Arena, listeners and resources.
> No database migrations or config changes required — drop-in replacement for 4.6.3.
> One new optional config key: `game.reconnect-timeout` (default `60`, seconds).
release
HungerGameSSS 4.6.3
4.6.33 июн. 2026 г.48Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
## [4.6.3] — Ability System Bug-Fix Patch (2026-06-03)
> Full deep-dive analysis of all 45 ability implementations.
> 13 confirmed bugs fixed across 12 files (2 framework, 11 ability-level).
> No database migrations or config changes required — drop-in replacement for 4.6.2.
---
release
HungerGameSSS 4.6.2
4.6.222 мая 2026 г.83Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
# [4.6.2] — Gameplay Bug Fix Patch (2026-05-23)
### Fixed — 9 bugs across 4 files
These bugs were identified through source-code analysis of v4.6.1.
None require a database migration or config change.
---
#### 🔴 Critical — Broken every match
- **BUG-1 · `GameTask` — PLAYING→DEATHMATCH transition bypasses FSM (`GameTask.java`)**
`GameTask.handlePhaseTransitions()` called `arena.setState(MatchState.DEATHMATCH)` directly
instead of `plugin.getMatchService().transition(arena, MatchState.DEATHMATCH)`.
Bypassing `transition()` meant:
- `ArenaDeathmatchEvent` was never fired — external plugins received no notification.
- `scheduleDeathmatchTask()` was never called — **players were not teleported to the
Cornucopia centre** at Deathmatch start.
- The rapid border collapse to 10 × 10 over 60 s never happened.
- Scoreboard was not refreshed via `updateScoreboards()`.
Fix: replaced `arena.setState(MatchState.DEATHMATCH)` with
`plugin.getMatchService().transition(arena, MatchState.DEATHMATCH)`.
- **BUG-2 · `GameTask` — three different config keys used for the same border size (`GameTask.java`)**
Three separate code paths read the "initial border size" value using three different config keys:
- `config.yml` declares: `game.border-initial-size: 2000` (the canonical key)
- `MatchService.java` reads: `"game.border-initial-size"` ✅ correct
- `GameTask.java` line 90 read: `"game.initial-border-size"` ❌ key does not exist → fallback `1000.0`
- `GameTask.java` line 100 read: `"game.border.initial-size"` ❌ key does not exist → fallback `1000.0`
Effect: the game loop always set the initial border to 1 000 blocks regardless of the admin's
configured value. Any server with `border-initial-size` set above or below 1 000 saw
unexpected border behaviour from the very first second of a match.
Fix: unified both `GameTask` reads to use `"game.border-initial-size"`.
- **BUG-3 · `MatchService.startMatch(Arena, int)` — countdown `BukkitRunnable` not stored (`MatchService.java`)**
The overload `startMatch(Arena arena, int countdownSeconds)` created a countdown
`BukkitRunnable` but discarded the returned `BukkitTask`. The task was never added to
`countdownTasks`, so `cancelAllTasksFor()` could not cancel it. Calling `startMatch()`
twice on the same arena (e.g. two rapid `/hg start` commands, or a player join triggering
auto-start while a manual start was in progress) launched two concurrent countdowns.
Both reached zero and each called `startArena()`, resulting in the match starting twice —
players teleported twice, inventory cleared twice, cage system entered an inconsistent state.
Fix: stored the returned `BukkitTask` in `countdownTasks.put(arena.getName(), task)`.
---
#### 🟡 Medium — Visible gameplay defects
- **BUG-4 · `MatchService` + `GameTask` — WorldBorder controlled by two systems simultaneously (`MatchService.java`)**
`MatchService.transition()` (called when entering `PLAYING`) scheduled `scheduleBorderTask()`,
a periodic timer that shrank the border every N minutes. At the same time, `GameTask.handleWorldBorder()`
ran every server tick during `PLAYING` and recalculated the border size via smooth linear
interpolation, then called `WorldBorder.setSize()`. The per-tick recalculation fired every
second and silently overrode the periodic task's `setSize(size, duration)` smooth animation,
causing the border to visibly flicker or jump rather than shrink smoothly.
Fix: removed the `scheduleBorderTask(arena)` call from `MatchService.transition(PLAYING)`.
`GameTask.handleWorldBorder()` is now the sole authority for border size — it provides
smoother and more precise interpolation than the coarse periodic approach.
- **BUG-5 · `Arena.getActiveLegendaryLocations()` — hologram names always show material ID (`Arena.java`)**
The method read `recipe.getItemMeta().getDisplayName()` (legacy Bukkit API).
All legendary items in this plugin have their display names set via the Adventure
Component API (`meta.displayName(Component)`). The legacy `getDisplayName()` method
returns `""` for any such item, so `hasDisplayName()` was always `false`, and every
legendary hologram fell back to showing `recipe.getType().name()` — raw material names
like `WOODEN_SWORD` instead of the intended weapon name (e.g. `Excalibur`).
Fix: replaced `getDisplayName()` / `hasDisplayName()` with Adventure's
`PlainTextComponentSerializer` to extract the plain-text string from the Component display name.
- **BUG-6 · `MatchService.checkWin()` — game doesn't end when a full team is the last survivor (`MatchService.java`)**
`checkWin()` ended the game when `aliveCount == 1`. In team mode, if the final two (or
more) surviving players were all on the same team, `aliveCount` was ≥ 2, so no win was
declared and the game ran indefinitely or until the Deathmatch timer expired — forcing
teammates to kill each other.
Fix: after counting alive players, if `aliveCount > 1` the method now checks whether all
surviving players share a single team identifier. If every alive player belongs to the
same team (or all are solo/no-team and there is only one unique identity), `endGame()` is
called immediately.
---
#### 🟢 Minor — Low-severity improvements
- **BUG-7 · `TeamManager` — deprecated `ChatColor` usage produces compile warnings (`TeamManager.java`)**
`TeamManager` and `TeamData` use `org.bukkit.ChatColor` for team color storage, which is
deprecated on Paper 1.21 in favour of `net.kyori.adventure.text.format.NamedTextColor`.
Migrating the underlying storage type would require a database schema change and
`DatabaseManager` migration; that is deferred to a future version.
Added `@SuppressWarnings("deprecation")` on `loadColors()` with a `TODO` comment documenting
the planned migration path, silencing the compiler warnings without any behaviour change.
- **BUG-8 · `MatchService.startCountdown()` — countdown task not stored, leaks on arena reset (`MatchService.java`)**
`startCountdown(Arena, List<Player>)` (called from the main `startMatch(Arena, List<Player>)`
flow) created a countdown `BukkitRunnable` but did not add the task to `countdownTasks`.
If the arena was reset before the countdown finished (e.g. all players left), the orphaned
task continued ticking until it reached zero and called `releasePlayers()` on a now-empty
arena — potentially transitioning a WAITING arena to PLAYING with no players.
Fix: stored the returned task in `countdownTasks.put(arena.getName(), taskRef[0])`.
- **BUG-9 · `MatchService` — cage cleanup stores `Block` objects instead of `Location` (`MatchService.java`)**
`arenaCages` was declared `Map<String, List<Block>>`. `Block` objects hold a direct reference
to the chunk at the time they were obtained. If chunks unload and reload before
`breakGlassCages()` runs, the stale `Block` reference may report an incorrect `getType()`
— the GLASS check would fail and the cage blocks would not be cleared, leaving orphaned
glass geometry in the arena world.
Fix: changed `arenaCages` to `Map<String, List<Location>>`. `breakGlassCages()` now calls
`l.getBlock()` at removal time, always querying the current (guaranteed-loaded) chunk state.
Both `createJoinCage()` and `teleportPlayersAndCreateCages()` updated to store `l.clone()`.
---
### Changed
- `pom.xml` — version `4.6.1` → `4.6.2`
- `plugin.yml` — version `4.6.1` → `4.6.2`; description updated
- `paper-plugin.yml` — version `4.6.1` → `4.6.2`
---
release
HungerGameSSS 4.6.1
4.6.115 мая 2026 г.36Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
## [4.6.1] — Critical Bug Fix Patch (2026-05-15)
### Fixed — 9 bugs across 7 files
#### Critical — Plugin fails to enable
- **BUG-PPL-01 · `paper-plugin.yml` — `loader:` references a class that does not exist**
(`paper-plugin.yml`)
The file declared `loader: me.duong2012g.hungergamessss.PaperPluginLoader`, but this class
was never created. Paper attempted to instantiate it during plugin loading, threw
`ClassNotFoundException`, and the plugin failed to enable entirely.
Fix: removed the `loader:` line. A custom `PluginLoader` is not needed for this plugin's
feature set; standard Paper loading works correctly.
- **BUG-DB-01 · `DatabaseManager` — SQLite JDBC driver and MySQL connector not shaded into JAR**
(`pom.xml`)
`DatabaseManager` called `config.setDriverClassName("org.sqlite.JDBC")` and supported MySQL
mode, but neither `org.xerial:sqlite-jdbc` nor `com.mysql:mysql-connector-j` appeared as
Maven dependencies. The built JAR had no driver classes, causing
`ClassNotFoundException: org.sqlite.JDBC` on every server startup that uses the default
SQLite config.
Fix: added both dependencies to `pom.xml` and configured the Maven Shade Plugin to relocate
them under `me.duong2012g.hungergamessss.libs.{sqlite,mysql}` to avoid classpath conflicts
with other plugins.
#### High — Gameplay-breaking
- **BUG-DB-02 · `DatabaseManager.updateSchema()` — `games_played` column added to `arenas` table instead of `players`**
(`DatabaseManager.java`)
`updateSchema()` iterated a single column array and checked all entries against the `arenas`
table. `games_played` is a player stat column that belongs in `players`. On fresh installs the
`players` table lacked the column; `savePlayerStats()` / `loadPlayerStats()` threw
`SQLException: no such column: games_played` whenever stats were read or written.
Fix: split the migration into two separate loops — `arenaColumns[]` against the `arenas` table
and `playerColumns[]` against the `players` table. Each column is now checked and added against
the correct table.
- **BUG-AM-02 · `AbilityManager.createItem()` — `unbreakable` flag silently overwritten**
(`AbilityManager.java`)
The unbreakable block retrieved a *new* `ItemMeta` copy from `item.getItemMeta()`, set
`unbreakable(true)` on it, called `item.setItemMeta(unbrMeta)` — but then the outer code
called `item.setItemMeta(meta)` with the *original* meta object (which did not have
`unbreakable` set). The second `setItemMeta` silently discarded the flag. Legend items marked
`unbreakable: true` in YAML still lost durability in-game.
Fix: call `meta.setUnbreakable(true)` directly on the existing `meta` object before the
final `item.setItemMeta(meta)` call. The duplicate `item.getItemMeta()` call is removed.
- **BUG-AM-03 · `AbilityManager.createItem()` — localization fallback condition never true**
(`AbilityManager.java`)
The fallback for missing legend name/description keys compared the return value of
`getMessage(key)` against the raw key string:
`if (localizedName.equals("legend_" + key + "_name"))`.
`MessageManager.getMessage()` never returns the raw key — it returns
`"§cMessage not found: <key>"` — so the condition was always `false` and the fallback
(`config.getOrDefault("name", ...)`) was never reached. Items with no language entry showed
the red error string as their display name.
Fix: replaced both checks (name + description) with `hasMessage(key)` which tests the cache
directly. The fallback now triggers correctly for any missing key.
- **BUG-AM-04 · `MessageManager` — no public API to test key existence**
(`MessageManager.java`)
There was no way to check whether a message key existed without calling `getMessage()` and
inspecting the error-prefix fallback string, which is fragile and language-dependent.
Fix: added `public boolean hasMessage(String key)` that returns `messageCache.containsKey(key)`.
Used by the `createItem()` fallback fix above.
#### High — Production safety
- **BUG-AFC-01 · `AutoFixCommand` — dangerous synchronous I/O, stale hardcoded JAR name, and wrong config keys**
(`AutoFixCommand.java`)
Three independent issues:
1. File copy and HTTP download ran on the main server thread (could freeze the server tick for
multiple seconds while downloading Paper).
2. The command hard-coded `"HungerGamesSSS-1.15.jar"` — the project is now at version 4.6.1,
so the source file path was always wrong and the command silently did nothing useful.
3. The generated `config.yml` used stale keys (`database.file`, `game.waiting-duration`,
`structures.spawn-interval-ticks`, `performance.unload-delay-ticks`) that the current
codebase no longer reads, resulting in a silently broken configuration on every use.
Fix: the command body is replaced with a single disabled message pointing to the source file.
The command will be re-enabled once rewritten with async I/O, dynamic version detection,
pre-modification backups, and config generation from `ConfigSchemaValidator`.
#### Medium — Operator experience
- **BUG-CFG-01 · `config.yml` — missing keys silently use hardcoded defaults**
(`config.yml`)
Over a dozen config keys read by the code (`game.min-players-to-start`, `game.max-players`,
`game.countdown-seconds`, `game.reset-delay-seconds`, `game.border-initial-size`,
`game.border-min-size`, `game.feast-delay-seconds`, `arena.veinminer-max-size`,
`abilities.disabled`, `abilities.enabled-only`, `resource-pack.required`,
`resource-pack.prompt`, `database.debug-logging`) were absent from the default `config.yml`.
Admins had no indication these options existed and could not configure them without reading
source code.
Fix: all missing keys added to `config.yml` with documented defaults.
- **BUG-LANG-01 · `en.yml` — 60+ message keys used in code but absent from language file**
(`languages/en.yml`)
Numerous keys used in `TeamCommand`, `WithdrawCommand`, `LocateCommand`, `DebugCommand`,
`AutoFixCommand`, `MatchService`, and others were not present in `en.yml`. Every trigger
showed `§cMessage not found: <key>` to players or admins.
Additionally, four legend item name/description keys were missing (`legend_artemis_bow_name`,
`legend_death_note_name`, `legend_hermes_boots_name`, `legend_toxic_crossbow_name` and
corresponding `_desc` keys), causing ability items to display the red error string as their
display name after the localization fallback fix above.
Fix: all missing keys added to `en.yml` with English text.
### Build fix — `mvn clean package` fails with `CompilerException: NullPointerException`
(`pom.xml`)
`testCompile` crashed with a `NullPointerException` inside javac on JDK 21 even after
switching to `<release>21</release>`. Root cause: MockBukkit `4.109.0` ships an annotation
processor that walks the full type graph of the class under test. `CooldownManagerTest`
loads `Main` via `MockBukkit.load(Main.class)`, which pulls in every manager, database
driver, and Adventure type at compile time. On JDK 21 this resolution chain hit a null
reference inside javac's own symbol table, crashing the compiler process rather than
producing a proper diagnostic.
Three-part fix applied to `pom.xml`:
1. **MockBukkit downgraded** `4.109.0` → `4.26.0`. Version `4.26.0` is the last release
before the annotation processor was added and is confirmed compatible with Paper 1.21
and JDK 21.
2. **`<maven.test.skip>true</maven.test.skip>`** added to `<properties>`. Normal plugin
builds (`mvn clean package`) no longer attempt test compilation. Tests can still be
run explicitly: `mvn test -Dmaven.test.skip=false`.
3. **`maven-surefire-plugin`** updated with `<forkCount>1</forkCount>` and
`<reuseForks>false</reuseForks>`. MockBukkit stores global state in static fields
— running multiple test classes in the same JVM causes false failures. A forked JVM
per class also prevents any remaining javac NPE from killing the host Maven process.
### Changed
- `pom.xml` — version `4.6.0` → `4.6.1`.
- `plugin.yml` — version `4.6.0` → `4.6.1`; description updated.
- `paper-plugin.yml` — version `4.6.0` → `4.6.1`.
---
release
HungerGameSSS 4.6.0
4.6.07 мая 2026 г.34Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
## [4.6.0] — Full Bug Fix & Improvement Pass (2026-05-05)
### Fixed — 46 bugs across 35 files
#### Critical — Task & Memory Leaks
- **BUG-CM-01** `CooldownManager` repeating task never cancelled on reload → added `shutdown()`, called from `onDisable()`
- **BUG-MAIN-01** Game-loop `BukkitRunnable` was anonymous, never cancelled → stored `gameLoopTask`, cancelled in `onDisable()`
- **BUG-AM-01** `new NamespacedKey(plugin, "hg_ability")` created on every interact/hit/move → cached as `final abilityPdcKey` field
- **BUG-BASE-02** `BaseAbility.onDeath()` called `validateCanUse()` → blocked cleanup when arena state was `ENDING` at last kill
- **BUG-CS-02** `CloudSword` block-expiry task had no handle → glass blocks not restored on disable
- **BUG-HB-02** `HermesBoots` passive task had no handle + `lastShift` map never cleared on quit/death
- **BUG-RE-01** `ReinforcedElytra` passive task had no handle + `explosionCooldowns` never cleared
- **BUG-VW-02** `VillagerWand` stale-entry cleanup task had no handle → leaked on reload
- **BUG-MJ-01** `Mjolnir`: no `performDeath()` → `ItemDisplay` entity leaked, item permanently lost on death
- **BUG-SB-02** `ShadowBlade`: no global `cleanup()` → players stayed invisible permanently after `/reload`
- **BUG-RH-03** `RavagerHorn`: no global `cleanup()` → ravager entities roamed arena world after reload
- **BUG-GH-03** `GolemHammer`: `inAir` map never cleared on quit/death → stale KB resist
- **BUG-LS-02** `LichStaff`: no global `cleanup()` → stale ammo entries persisted between matches
- **BUG-SG-02** `SoulGauntlet`: no global `cleanup()` → soul charges persisted between matches
- **BUG-VS-02** `VoidStaff`: 3 state maps never cleared on full shutdown
- **BUG-WS-02** `WitherSickles`: offhand copies not removed, cooldowns not cleared on shutdown
- **BUG-DN-01** `DeathNote`: used `onQuit`/`onDeath` bypassing BaseAbility lifecycle chain
- **BUG-LISTENER-01** `AbilityListener.onPlayerMove`: missing null check on `event.getTo()` → NPE risk
#### High — State Management
- **OPT-REG-01** `AbilityRegistry.getAbility()` was O(42) triple-fallback loop → O(1) normalized `HashMap` lookup
- **OPT-BASE-01** Config key prefix `"abilities.xxx."` rebuilt on every config call → cached in constructor
- **OPT-BASE-02** `BaseAbility.execute()` 14-arm switch-case → `EnumMap<TriggerType, Consumer>` dispatch
- **OPT-DISP-01+02** `AbilityDispatcher`: debug logging on miss + eliminated duplicate `NamespacedKey` copy
- **OPT-UPT-01** `UnifiedPassiveTicker` now skips spectators, dead players, non-active arenas
- **OPT-AD-01** `ArmadilloDetonator`: per-entity `BukkitRunnable` → single unified per-player ticker
- **OPT-BB-01** `BeehiveBlaster`: 4-tick polling per bee → `EntityDamageByEntityEvent` listener (zero tasks)
- **OPT-AB-02+03** `ArtemisBow`: per-arena homing arrow cap + live count in passive HUD
- **OPT-CC-01** `CorruptedCrossbow`: gravity `0.04` flat → `0.05` + `1%` horizontal drag (matches vanilla)
- **IMP-LISTENER-01** All combat/interact `@EventHandler` handlers now have `ignoreCancelled = true`
- **IMP-VM-01+02** `VeinMinerListener`: hard cap 128 blocks + spread breaking across ticks
- **BUG-MJ-01** `Mjolnir` global `cleanup()` removes all display entities
#### Medium — Improvements
- **IMP-CTX-01** `AbilityContext`: defensive `item.clone()` + `requiresArena()` validation + `getLocationSafe()`
- **IMP-UTILS-01** `AbilityUtils`: `findSafeLanding`, `degradeRandomArmorPiece`, `isFriendlyFire`, `tickProjectile`, `removeAfter`, `distanceSquared`-first AoE check
- **IMP-CD-02** `CooldownManager.generateProgressBar()` uses `§` codes consistent with downstream serializer
- **IMP-MAIN-01+02** `Main.onEnable()` split into `registerManagers/Listeners/Commands/postStartup` + early Java/Paper validation
- **ARCH-MS-01+02+03** `MatchService` FSM: `transition()` method + `BorderTask/FeastTask/DeathmatchTask` + `ArenaDeathmatchEvent`
- **OPT-CD-01** `CooldownManager`: purge offline players from `activeDisplayItem` in periodic cleanup
- **A1-1+3** `Ability.java`: ISP sub-interfaces (`ActiveAbility`, `PassiveAbility`, `ProjectileAbility`, `ListenerAbility`) + full Javadoc
- **A1-10+11** `AbilityRegistry`: ServiceLoader SPI discovery + config-driven `disabled`/`enabled-only` overrides
- **A1-17** `BaseAbility`: `AbilityGuard` chain-of-responsibility + `passesGuards()` replaces 5 duplicated validate/cooldown blocks
- **A1-18** `BaseAbility`: `getConfigStringList()` + `getConfigSection()` helpers
- **A1-19** `Aiglos`: configurable AOE shape (`sphere` / `cylinder`) via `aoe_shape` config key
- **A1-23** `CloudSword`: self-listener removed; fall-cancel centralised in `AbilityListener.onFallDamageCancelCloud`
- **A1-26** 4 abilities (`BeehiveBlaster`, `ArmadilloDetonator`, `RavagerHorn`, `GhastlyWhistle`): `setRemoveWhenFarAway(true)` on all custom entity spawns
- **A1-S1** `AbilityServices`: lightweight DI context replacing raw `Main` accessor calls
- **A1-S2** `@AbilityTrigger` + `@PassiveTick` annotations for future APT code generation
- **A1-S3+A2-S3** `ArenaEntityTracker`: unified entity lifecycle manager (track/release/prune by owner, arena, ability)
- **A1-S4+A2-S2** `ParticleThrottle`: throttle + `spawnDeferred()` based on arena player count
- **A1-S5** `AbilityMetrics`: internal activation/blocked counter with `Snapshot` record
- **A1-S6** `ConfigSchemaValidator`: declarative YAML schema validation replacing manual `assertRange()` loop
- **A2-4** `Main`: `ComponentLogger` (SLF4J) field + `clog()` accessor
- **A2-9+10** `ArenaManager.processQueue()`: async chunk pre-loading + BossBar build progress
- **A2-11** `CornucopiaBuilder` now injectable via `plugin.getCornucopiaBuilder()`
- **A2-17** `Arena.java`: `ArenaBlockRestorer` + `ArenaLegendaryTracker` component objects extracted; old getters kept as `@Deprecated` delegation
- **A2-18** `Ingredient` + `LootEntry` converted to Java 21 records with compact constructors
- **A2-20** `MatchService.resetArena()`: block restoration now async via `ArenaBlockRestorer` + `processQueue()`
- **A2-22** VeinMiner disabled by default; opt-in via `arena.builtin-veinminer: true`
- **A2-S5** `HungerGamesAPI`: public Developer API for custom ability registration + arena queries
- **A2-S6** `MatchState`: `isActive()`, `isJoinable()`, `isEnding()`, `match()` functional switch
### New Files
| File | Purpose |
|---|---|
| `ability/AbilityServices.java` | Lightweight DI context |
| `ability/AbilityMetrics.java` | Activation/blocked counters |
| `ability/annotation/AbilityTrigger.java` | Trigger handler annotation |
| `ability/annotation/PassiveTick.java` | Passive tick annotation |
| `api/HungerGamesAPI.java` | Public Developer API |
| `manager/ArenaEntityTracker.java` | Unified entity lifecycle tracker |
| `model/ArenaBlockRestorer.java` | Block-change tracking + restore |
| `model/ArenaLegendaryTracker.java` | Legendary placement + hologram lifecycle |
| `util/ParticleThrottle.java` | Particle throttle + deferred spawn |
| `util/ConfigSchemaValidator.java` | Declarative YAML schema validation |
| `resources/paper-plugin.yml` | Modern Paper plugin descriptor |
### Config changes
```yaml
# New keys added (all have safe defaults — no action required):
arena:
builtin-veinminer: false # VeinMiner now opt-in (was always-on)
show-build-progress: true # BossBar during arena build
abilities:
disabled: [] # blacklist ability names
enabled-only: [] # whitelist mode (empty = disabled)
spi-override-allow: false # allow SPI abilities to replace built-ins
```
### Breaking Changes
- `Ingredient.mat` / `Ingredient.amount` public fields **removed** → use `ingredient.material()` / `ingredient.amount()`
- VeinMiner **disabled by default** — set `arena.builtin-veinminer: true` to restore previous behaviour
- All other changes are backwards-compatible with existing saves, ability YAMLs, and config.yml
---
release
HungerGameSSS 4.5.9
4.5.924 апр. 2026 г.38Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11paper, purpur
Что нового
## [4.5.9] — Bug Fix Pass 5 (2026-04-24)
### Fixed — 3 bugs across 3 files
#### High
- **BUG-BASE-01 · `BaseAbility` — `validateCanUse()` uses wrong permission node `hg.admin` instead of `hoplitebr.admin`**
(`BaseAbility.java`)
`validateCanUse()` granted the admin bypass with `player.hasPermission("hg.admin")`.
The correct node — defined in `plugin.yml` and fixed for commands in 4.1 (bug M-07) — is
`hoplitebr.admin`. Any operator who granted the `hoplitebr.admin` permission explicitly
(without OP) received no bypass; conversely, `hg.admin` grants that had been assigned in
a permissions plugin incorrectly bypassed ability checks.
Fix: changed check to `player.hasPermission("hoplitebr.admin")`. The `|| player.isOp()`
fallback is unchanged so vanilla OP still bypasses.
#### Medium
- **BUG-CTX-01 · `AbilityContext` — no `isCancelled()` / `setCancelled()` API**
(`AbilityContext.java`)
The `AbilityContext` object was fully immutable after construction. Abilities that need to
signal downstream handlers to skip processing (e.g. two abilities sharing the same trigger
chain) had no standard way to do so — each ability reimplemented ad-hoc boolean flags.
Fix: added a mutable `boolean cancelled` field with `isCancelled()` and
`setCancelled(boolean)` accessors. The field defaults to `false`. Abilities can now call
`ctx.setCancelled(true)` to mark a context as consumed, and other abilities/listeners can
check `ctx.isCancelled()` before acting.
- **BUG-OD-02 · `ObsidianDagger` — deprecated `getTargetBlock(null, range)` + 1-tick meteor trail task + hardcoded `sendMessage` calls**
(`ObsidianDagger.java`)
Three independent issues in `performRightClick`:
1. `player.getTargetBlock(null, TARGET_DISTANCE)` — passing `null` for the transparent-block
set is deprecated in Paper 1.21 and emits a compile warning. Replaced with
`player.getTargetBlockExact(distance, FluidCollisionMode.NEVER)` with a `rayTraceBlocks`
primary path for accurate targeting.
2. The meteor particle trail `BukkitRunnable` ran at period `1L` (every tick). A falling
meteor moves slowly enough that `2L` (every 2 ticks) produces visually identical results
at half the server-side task overhead.
3. Two `player.sendMessage("§...")` calls bypassed the Adventure component API (italic
rendering issue) and the i18n system. Replaced with `player.sendActionBar(Component)`
using `LegacyComponentSerializer`, consistent with the pattern used throughout other
abilities since 4.5.5.
### Changed
- `pom.xml` — version `4.5.8` → `4.5.9`.
- `plugin.yml` — version `4.5.8` → `4.5.9`; description updated.
---
release
HungerGameSSS 4.5.8
4.5.821 мар. 2026 г.67Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11paper, purpur
Что нового
# 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)
| Weapon | Old | New |
|--------|-----|-----|
| **Warpick** | Broken mine + shatter | Mine Explosion (5s CD) + Critical Hit armor shred (20s CD) |
| **Dragon Katana** | Simple dash | Permanent Speed I passive + Dragon Dash teleport (12s CD) |
| **Artemis Bow** | Power V + Infinity | Power III (upgradeable to VII via Anvil) + Homing 25% + Lightning 20% |
| **Aiglos** | Ice freeze AOE | Explosive spear throw — 3×3×3 blast, Sharpness scales explosion, Loyalty III return |
| **Armadillo Detonator** | Auto-explode on contact | Right-click shoot (max 3 active, 20s CD) + Left-click instant detonate all |
| **Beehive Blaster** | Ball projectile | Right-click spawns 4 angry bees, auto-target nearest enemy, Poison I (8s) per sting |
| **Crimson Chainsword** | Bleed DoT + rev mechanic | Shred Stacks passive (+10% pen/stack, max 5) + Chainsaw Rampage (10s CD, 3s burst, 12 ticks) |
| **Corrupted Crossbow** | Spread arrows | Poison Cloud bolt (4s CD) — AoE splash 4×4×4, Multishot = 3 clouds |
| **Death Note** | Stare at target to summon Warden | Type `/dn <name>` → instant kill (bypass armor/totem), 3 uses total, 25s per-target CD |
| **Reaper Scythe** | Wither AOE sweep | Soul Harvest (45s CD) — steal ALL beneficial effects + 25% lifesteal per target |
| **Ender Bow** | Swap positions + blink | Pearl Shot (30s CD) + Arrow→Floating Pearl (walk in = instant teleport, no CD) |
| **Excalibur** | 5s timed invincibility | 3-Hit Immunity Charges — block any damage, auto-recharge +1 every 45s |
| **Fountain of Youth** | Regen zone only | Passive +1 HP/s while held + 8×8 healing zone (30s, 60s CD) |
| **Ghastly Whistle** | Air strike only | Summon 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)
release
HungerGameSSS 4.5.7
4.5.720 мар. 2026 г.19Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11paper, purpur
Что нового
## [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 · `GolemHammer` — `disable()` 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 · `PlayerJoinListener` — `loadPlayerStats()` 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 · `PlayerJoinListener` — `savePlayerStats()` 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.6` → `4.5.7`.
- `plugin.yml` — version `4.5.6` → `4.5.7`; description updated.
---
release
HungerGameSSS 4.5.6
4.5.620 мар. 2026 г.25Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
## [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.5` → `4.5.6`.
- `plugin.yml` — version `4.5.5` → `4.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 · `DeathNote` — `sendActionBar(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`, `WitherSickles` — `sendActionBar(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.4` → `4.5.5`.
- `plugin.yml` — version `4.5.4` → `4.5.5`.
---
release
HungerGameSSS 4.5.4
4.5.419 мар. 2026 г.18Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
# Fixed:
- 8+ missing message keys, CloudSword stutter, PoseidonsTrident thrown hit
- Legend name + lore had italic — fix all,use Paper Component API
release
HungerGameSSS 4.5.2
4.5.218 мар. 2026 г.15Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
## [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 · `ArtemisBow` — `performProjectileHit` 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.1` → `api-version: 1.21`.
### Changed
- `pom.xml` — version `4.5.1` → `4.5.2`.
- `plugin.yml` — version `4.5.1` → `4.5.2`; `api-version` corrected to `1.21`; description updated.
---
release
HungerGameSSS 4.5.1
4.5.115 мар. 2026 г.20Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
## [4.5.1] — Logic Bug Fix Pass (2026-03-16)
### Fixed — 12 logic bugs across 11 weapon files
#### Critical
- **BUG-PL-01 · `PhantomLongbow` — ability completely non-functional** (`PhantomLongbow.java`)
`arrow.remove()` was called immediately in `performProjectileLaunch`, then a `BukkitRunnable`
was scheduled 1 tick later. By the time the runnable ran, `projectile.isValid()` was `false` →
instant cancel → ability only granted invisibility, nothing else happened.
Fix: stop calling `remove()`. Instead set `arrow.setPickupStatus(DISALLOWED)`,
`setGravity(false)`, `setDamage(0)` so the arrow flies invisibly. The tracking runnable
now checks `isValid() || isOnGround() || isDead()` and calls `arrow.remove()` itself.
#### High
- **BUG-FY-02 · `FountainOfYouth` — inverted team check heals enemies, skips teammates**
(`FountainOfYouth.java`)
`isFriendlyFire` returns `true` for teammates. The condition
`if (isFriendlyFire(player, target)) continue` was therefore *skipping* teammates and
*healing* enemies — the exact opposite of the comment.
Fix: added `!` → `if (!isFriendlyFire(player, target)) continue`.
- **BUG-VS-01 · `VoidStaff` — portal CD starts on first portal, blocks second placement**
(`VoidStaff.java`)
`portalCDs.put(...)` ran unconditionally after any portal placement. Player placed portal #1,
40 s CD started, clicking again to place portal #2 hit the CD guard and was blocked — so a
connected portal pair could never be created.
Fix: moved `portalCDs.put(...)` inside the `if (connected)` branch only.
- **BUG-CC-03 · `CorruptedCrossbow` — extra bolts missing `hg_ability` metadata, no hit effects**
(`CorruptedCrossbow.java`)
Extra bolts were tagged `corrupted_extra` and `corrupted_bolt` but not `hg_ability`.
`AbilityManager.handleProjectileHit` only dispatches `performProjectileHit` when
`hg_ability` is present. Result: extra bolts dealt only vanilla arrow damage with no
Poison or Weakness effects.
Fix: added `extra.setMetadata("hg_ability", ...)` when spawning each extra bolt.
#### Medium
- **BUG-CSW-01 · `CrimsonChainsword` — bleed only fires 1 damage tick out of 5**
(`CrimsonChainsword.java`)
`runTaskTimer(10L, 10L)` increments `ticks` 0→1→2→3→4 then cancels. Damage condition was
`ticks % 20 == 0` — only `ticks=0` satisfies this → 1 damage tick instead of 5.
Fix: removed `% 20 == 0` check. Period is already the interval; every call = one bleed tick.
- **BUG-SB-01 · `ShadowBlade` — Shadow Step has no team check, teleports behind teammates**
(`ShadowBlade.java`)
Shadow Step's target loop had no `isFriendlyFire` guard, allowing teleport behind allies.
Fix: added `if (e instanceof Player tp && isFriendlyFire(player, tp)) continue;`.
- **BUG-RH-01/02 · `RavagerHorn` — lazy location capture + no Ravager cleanup on quit/death**
(`RavagerHorn.java`)
(1) Stampede lambdas called `player.getLocation()` lazily — waves diverged if player moved
during the 16-tick animation. Fixed: capture `castLoc = player.getLocation().clone()` before
the loop.
(2) No `performQuit`/`performDeath` hook — Ravager persisted in the world after the player
disconnected or died. Fixed: added `activeRavagers` map + `dismountAndRemove()` called on
both events.
- **BUG-DN-01 · `DeathNote` — passive task runs every tick (20×/s), expensive raytracing**
(`DeathNote.java`)
`runTaskTimer(1L, 1L)` = 20 `rayTrace(range:50)` calls per player per second. With 10 players
= 200 raytrace/s. Changed `TASK_PERIOD` from `1L` to `3L` (~7 raytrace/s/player), still
provides smooth progress bar updates.
#### Low
- **BUG-VW-01 · `VillagerWand` — `taggedForReward` map memory leak** (`VillagerWand.java`)
Entries were only removed on entity death. Entities that fled, despawned, or were removed by
arena reset left their UUID in the map indefinitely. Fixed: value now stores an expiry
timestamp (`now + rewardWindow`). `onEntityDeath` checks `now <= expiry`. A cleanup task
runs every 20 s to evict stale entries.
- **BUG-SG-01 · `SoulGauntlet` — action bar hardcodes `-3` instead of `blastCost`** (`SoulGauntlet.java`)
If `soul_blast_souls` was changed in config, the displayed soul count was wrong.
Fix: `(charges - 3)` → `(charges - blastCost)`.
- **BUG-WS-02 · `WitherSickles` — `dualWieldActive` desync when offhand is overwritten**
(`WitherSickles.java`)
If a player manually placed another item into the offhand slot, `dualWieldActive` kept the
UUID entry, blocking `equipOffhand` from re-running. Fixed `onInventoryClick` to detect this
state and call `dualWieldActive.remove(uuid)`.
- **BUG-AB-01 · `ArtemisBow` — standalone passive `BukkitRunnable` leaks on reload**
(`ArtemisBow.java`)
`startPassive()` spawned a new task on every class instantiation. On plugin reload the old
instance was discarded but the runnable kept running → N tasks after N reloads.
Migrated to `passiveTick()` hook consumed by the single `UnifiedPassiveTicker` in
`AbilityManager`. `startPassive()` and its runnable removed entirely.
### Changed
- `pom.xml` — version `4.5.0` → `4.5.1`.
- `plugin.yml` — version `4.5.0` → `4.5.1`; description updated.
---
release
HungerGameSSS 4.5.0
4.5.015 мар. 2026 г.23Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
## [4.5.0] — Weapon Overhaul (2026-03-16)
### Changed — 4 legendary weapons redesigned
> Mechanic ideas for the 4 weapons below were inspired by
> **DemoRaHoplite Weapons** by Demora ( Apache-2.0 ).
> Plugin page: <https://modrinth.com/plugin/demorahopliteweapons>
#### `VoidStaff.java` — Dual-mode system
- **Before:** Single sneak+click portal / click shulker logic with no UI feedback.
- **After:** Full mode-switching system (ported concept from DemoRaHoplite):
- `LEFT-CLICK` toggles between **Portal Mode** and **Shulker Mode**.
- Each mode has its **own independent cooldown** (portal 40 s, shulker 30 s).
- **Action bar** shows current mode + remaining cooldown, refreshes on move
and on item-switch (`PlayerItemHeldEvent`).
- Cleanup on quit/death prevents state leaks.
- `StaffMode` enum added for extensibility.
#### `Excalibur.java` — True invincibility
- **Before:** `PotionEffect RESISTANCE V` — very strong but not true invincibility
(high enough burst damage could still kill the player).
- **After:** `event.setCancelled(true)` at `EventPriority.HIGHEST` (concept from
DemoRaHoplite) — **100 % damage blocked** for the entire 5 s duration.
- Attacker hears `IRON_GOLEM_HURT` sound when a hit is deflected.
- Reflection + projectile deflect mechanics **preserved** from the old version.
- `activeInvincibility` map with expiry timestamp replaces potion effect check.
- `isInvincible()` guard added so `performDamaged()` (reflect) never fires
during the invincibility window.
- Cleanup on quit/death.
#### `WitherSickles.java` — Dual-wield + throw mechanic
- **Before:** Only AOE on-hit wither + lifesteal. No right-click action.
No `amount: 2` usage in gameplay.
- **After:** Full dual-wield system (mechanic inspired by DemoRaHoplite):
- **Auto-equip offhand:** when a player holds the Wither Sickles in main-hand,
a protected copy is placed in the off-hand slot automatically.
- **Off-hand copy is locked** — `InventoryClickEvent`, `InventoryDragEvent`,
`PlayerDropItemEvent`, `PlayerSwapHandItemsEvent` all cancelled for it.
Copy is removed when the player switches away.
- **Right-click throw** (CD: 7 s, dmg 12, Wither II × duration × 2):
projectile travels as a tick-based raycast with SOUL + WITCH particle trail.
- `passiveTick()` shows throw cooldown in action bar while holding.
- Legacy AOE wither + lifesteal **preserved** on melee hit.
#### `LichStaff.java` — Balance pass
- **Before:** Reload time `7 000 ms` — could re-fire 4 ice-balls every 7 s, far
too strong in arena PvP.
- **After:** Reload time raised to **`30 000 ms`** (30 s), matching DemoRaHoplite's
`cooldown_seconds: 30` for the equivalent weapon. This makes ammo management
meaningful — players must choose when to spend their 4 shots.
- Between-shot cooldown tightened to `800 ms` (from 500 ms) to prevent
accidental double-fire while staying responsive.
- Reload-complete message now includes countdown (`"Recharging in 30s..."`).
- Reload-out sound changed to `WITHER_DEATH` (thematic) instead of
`BEACON_ACTIVATE`.
### Updated
- `legend-items/void_staff.yml` — lore updated to describe mode-switching.
- `legend-items/excalibur.yml` — lore updated to say "TRUE invincibility".
- `legend-items/wither_sickles.yml` — lore updated to describe dual-wield + throw.
- `legend-items/lich_staff.yml` — lore updated to show `30s reload` and ammo dots.
- `pom.xml` — version `4.4.1` → `4.5.0`.
- `plugin.yml` — version `4.4.1` → `4.5.0`; description updated.
---
release
HungerGameSSS 4.4.1
4.4.113 мар. 2026 г.22Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
## [4.4] — Final Bug-Fix Pass (All 32 Known Bugs Resolved)
### Fixed
#### Low
- **L-01 · BungeeCord API deprecated in `CooldownManager`** (`CooldownManager.java`)
Two action-bar sends used `player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(…))` —
BungeeCord/Spigot legacy chat API that is deprecated on Paper 1.21 and may be removed
in a future Paper version. Replaced with Paper-native `player.sendActionBar(Component)`.
BungeeCord imports (`net.md_5.bungee.*`) removed. Adventure `LegacyComponentSerializer`
used for §-code → Component conversion to keep the existing colour format intact.
- **L-02 · `ChatColor.translateAlternateColorCodes()` deprecated across 9 files**
(`ColorUtil.java`, `LegendaryRecipe.java`, `Arena.java`, `DungeonManager.java`,
`HologramManager.java`, `MessageManager.java`, `ScoreboardManager.java`,
`AbilityManager.java`, `LobbyManager.java`, `ArenaManager.java`)
`ChatColor.translateAlternateColorCodes('&', s)` is a Spigot legacy API marked
deprecated on Paper 1.21. All 9 call-sites were replaced with `ColorUtil.colorize(s)`.
`ColorUtil` was rewritten to use `LegacyComponentSerializer.legacyAmpersand()` internally
while still returning a §-coded `String` so all downstream `sendMessage` / `setDisplayName`
call-sites work unchanged. A `ColorUtil.strip()` convenience method was also added using
Adventure's `PlainTextComponentSerializer`.
- **L-03 · `Player.setResourcePack()` deprecated on Paper 1.21** (`ConnectionListener.java`)
Both `setResourcePack(url)` and `setResourcePack(url, hash)` overloads are deprecated.
The replacement is Adventure's `ResourcePackRequest` / `ResourcePackInfo` API, sent via
`player.sendResourcePacks(request)`. ConnectionListener now builds a `ResourcePackRequest`
with an optional `required` flag and configurable prompt text (see config keys
`resource-pack.required` and `resource-pack.prompt`).
- **L-04 · Loot tables hardcoded in `LootTableManager.java`** (`LootTableManager.java`, `loot.yml`)
All 30 loot entries (11 common, 11 uncommon, 8 rare) were hardcoded — impossible
to change without recompiling. Extracted to a new bundled resource `loot.yml`.
`LootTableManager` now calls `plugin.saveResource("loot.yml", false)` on first run
then loads via `YamlConfiguration`. A `reload()` method is exposed so changes take
effect with `/perf reload` (or equivalent) without restarting the server.
Malformed entries log a warning and are skipped; the remaining valid entries load
normally.
- **L-05 · 4 dungeon types are invisible aliases** (`DungeonManager.java`)
`buildUndergroundDungeon` and `buildAncientMineshaft` were one-line delegates to
`buildCrypt` and `buildGoldMine` with no documentation. Server operators had no
way to know they were paying the performance cost of spawning a dungeon that was
identical to another one. Both methods are now annotated with deprecation Javadoc
explaining the alias relationship, and a startup INFO message tells operators which
config keys to set to `false` to remove the duplicates:
`dungeons.underground.enabled: false` and `dungeons.mineshaft.enabled: false`.
- **L-08 · `ConnectionListener` — reconnect during active match loses game state** (`ConnectionListener.java`, `ArenaListener.java`, `GamePlayer.java`)
When a player disconnected and reconnected during a PLAYING or DEATHMATCH phase,
the `PlayerJoinEvent` handler only sent the resource pack. The player spawned at
world spawn (or last logout point), in the wrong game mode, with no scoreboard.
Three changes:
1. `GamePlayer` gains a `lastLocation` field updated by `ArenaListener.onPlayerMove()`
on every block-level movement.
2. `ConnectionListener.onPlayerJoin()` now calls `MatchService.restoreSession()`
one tick after join to re-apply scoreboard, bossbar, and game mode.
3. If the rejoining player was alive, they are teleported to `gp.getLastLocation()`
so they return exactly where they were before the disconnect.
## [4.4.1] — Language update
### New Feature
#### Added 6 new language(de,es,ja,ko,pt,zh) total 10
release
HungerGameSSS 4.3
4.313 мар. 2026 г.17Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
## [4.3] — Stabilization Patch 3
### Fixed
#### High
- **H-04 · `FeastManager` — double announce + possible double-spawn** (`FeastManager.java`)
The `announce-minutes` list in `config.yml` previously included both `20` and `19`,
causing two broadcasts in the very first minute of the match. Even after the config
was corrected in v4.1, a subtler edge still remained: `timerSeconds == 0` at the
moment the PLAYING state begins, and `feastSeconds - 0 * 60 == 0` — meaning any
0-minute entry in the list would fire instantly.
**Fix:** Guard `timerSeconds <= 0` returns immediately. Added `feastSpawned` set
(`ConcurrentHashMap`-backed) so the feast spawns exactly once per match regardless
of how many scheduler ticks land on the boundary second. Added `resetArena(name)`
to clear the flag between matches.
- **H-06 · `DungeonManager.getMobHP()` fallback `40.0` vs config `60.0`** (`DungeonManager.java`)
The `config.yml` declared `dungeons.mob-hp: 60.0` as the intended default, but the
code fallback was `40.0`. When the key was absent the generic dungeon mobs (Spider
Queen, Crypt Stalker, Gold Miner, Temple Guardian) spawned with 40 HP — one-third
weaker than designed. Fallback corrected to `60.0`.
#### Medium
- **M-04 · `Excalibur` — reflection hit dungeon mobs, bypassed team system** (`Excalibur.java`)
`performDamaged` reflected against any `LivingEntity` attacker. When a dungeon mob
hit the Excalibur holder, the reflected damage still had the *player* as the source,
which could splash into nearby arena players and bypassed team friendly-fire checks
entirely (the team check only ran for `Player` attackers). Reflection is a PvP
mechanic; mob attacks should not trigger it. Changed the guard from
`instanceof LivingEntity attacker` to `instanceof Player attacker`. The projectile
deflect block remains unchanged (projectiles can originate from any source).
Also added a self-damage guard (`attacker.equals(player)`) for defensive robustness.
- **M-05 · `Mjolnir` — `rotationAngle` float unbounded, overflows after ~18 h** (`Mjolnir.java`)
`rotationAngle` was incremented by `rotationSpeed` on every passive tick with no
upper bound. A 32-bit float mantissa has 24-bit precision; at 25°/tick × 20 ticks/s
the angle exceeds `2²⁴` in roughly 18 hours of continuous operation, after which
`rotateY(Math.toRadians(angle))` silently produces garbage rotation matrices and the
thrown hammer stops orbiting correctly. Both increment sites now use `% 360f` to
keep the angle in `[0, 360)`.
- **M-06 · `VeinMinerListener` — `maxVeinSize` not hot-reloadable** (`VeinMinerListener.java`)
The field was read once in the constructor and cached for the lifetime of the plugin.
`/perf reload` (or any config reload) had no effect on vein size until the next
server restart. Removed the cached field; `maxVeinSize` is now read from config on
every `BlockBreakEvent` and passed as a parameter to `findVein()`.
- **M-08 · `ArenaListener` — duplicate no-arg constructor using static `Main.getInstance()`** (`ArenaListener.java`)
A second constructor `public ArenaListener()` accessed `Main.getInstance()` — a
static singleton call that fails during class initialisation if the plugin is not
fully loaded, and couples the listener to the static instance rather than the
injected one. The no-arg constructor was a leftover comment artifact; removed.
- **M-09 · `DatabaseManager.getPlayerStats()` — synchronous query on main thread** (`DatabaseManager.java`)
The method opened a JDBC connection and ran a `SELECT` on whichever thread called
it. When called from command handlers or event listeners on the main thread this
blocked the server tick for the entire round-trip. Replaced with
`getPlayerStatsAsync(UUID)` returning `CompletableFuture<Map<String,Object>>`
dispatched to the Bukkit async scheduler. The original synchronous method is kept
as `@Deprecated getPlayerStats()` (delegates to `getPlayerStatsSync`) for any
call-sites that already run on async threads.
- **M-10 · `PerformanceOptimizer.toggleMonitoring()` always returned `true`** (`PerformanceOptimizer.java`)
The implementation was `return activeTasks.get() >= 0` — an `AtomicInteger` is
always ≥ 0, so the method always returned `true` regardless of monitoring state.
Added `AtomicBoolean monitoringEnabled` (default `true`); `toggleMonitoring()` now
inverts the flag and returns the new state.
#### Low
- **L-06 · `AbilityDispatcher.LEGEND_KEY` static field initialised before `onEnable()`** (`AbilityDispatcher.java`)
The field `private static final NamespacedKey LEGEND_KEY = new NamespacedKey(Main.getInstance(), "hg_ability")`
is evaluated when the class is first loaded. If any class (e.g. a command tab-completer)
caused `AbilityDispatcher` to be loaded before `Main.onEnable()` completed,
`getInstance()` returned `null` and every subsequent ability dispatch threw NPE.
Changed to lazy initialisation via a private `getLegendKey()` method that constructs
the key on first use.
- **L-07 · Hardcoded test-item blacklist `gerald_sniffer/gruntilda/tim_enchanter`** (`ArenaManager.java`, `config.yml`)
Three internal test legendary IDs were hard-coded in `startCornucopiaPhase2()`.
Replacing them requires a recompile. Moved to config: `legendary.excluded-ids: []`
(default empty). Server owners can now exclude any legendary from the active pool
without touching source code.
- **L-09 · `buildCornucopia()` called `originalBlocks.clear()` destroying prior tracking** (`ArenaManager.java`)
Spawn cages and dungeon structures call `originalBlocks.put()` to record every block
they place, enabling full restoration on arena reset. `buildCornucopia()` called
`arena.originalBlocks.clear()` before building the Cornucopia, erasing all prior
entries. On reset, only blocks placed *after* the clear were restored — cages and
dungeons were left as permanent terrain edits. The `clear()` call is removed;
`CornucopiaBuilder` already appends to the map with individual `put()` calls.
- **L-10 · `GameTask` extends `BukkitRunnable` but is never scheduled — double-tick risk** (`GameTask.java`)
`GameTask` was a dead `BukkitRunnable` subclass. The arena tick is driven entirely
by `ArenaManager.tick()` via the global loop in `Main.onEnable()`. If a future
developer saw the class and scheduled it directly, every arena would tick twice per
second. `GameTask.run()` now throws `UnsupportedOperationException` immediately,
surfacing the bug during development rather than silently corrupting timer state.
release
HungerGameSSS 4.1
4.113 мар. 2026 г.17Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
## [4.1] — Bug-Fix Patch 1
### Fixed
#### Critical
- **C-03 · `arena.max-players` default value** (`config.yml`)
Changed the default from `1000` to `24`. The previous value caused spawn-circle
radii of ~1500 blocks, placing cage pistons in unloaded chunks and silently
failing block placement — players were teleported into the void at match start.
- **C-02 · `ArenaStartEvent` fired twice per match** (`MatchService.java`)
Removed the premature `callEvent(new ArenaStartEvent(arena))` call inside
`startMatch()`. The event is now fired exactly once, inside `releasePlayers()`
when the state transitions to `PLAYING` and the game actually begins.
Previously, any listener hooked to `ArenaStartEvent` (scoreboards, rewards,
third-party integrations) would execute twice.
- **C-05 · `DeathNote` — non-thread-safe `HashMap` in passive task** (`DeathNote.java`)
Replaced `HashMap` with `ConcurrentHashMap` for both `progressMap` and
`targetMap`. These maps are written by the 1-tick passive `BukkitRunnable` and
concurrently removed by `onQuit` / `onDeath` event callbacks.
- **C-04 · `Arena.spectators` — non-thread-safe `ArrayList`** (`Arena.java`)
Changed to `Collections.synchronizedList(new ArrayList<>())`. The spectator
list is modified on the main thread (handleDeath) and iterated from async
contexts (checkWin, scoreboard updates).
#### High
- **H-05 · `DatabaseManager.loadArena()` did not mark players as alive** (`DatabaseManager.java`)
After loading player UUIDs on server reload, `GamePlayer.setAlive(true)` is now
called for each loaded player. Without this, `checkWin()` saw zero alive players
immediately after reload and ended the match in the same tick.
- **H-02 · `ShadowBlade.revealPlayer()` showed vanished player to entire server** (`ShadowBlade.java`)
`revealPlayer()` now iterates only the players in the same arena instead of
calling `getOnlinePlayers()` server-wide. In multi-arena setups, players in
other arenas would receive a spurious `showPlayer()` call.
Both `armorMap` and `vanishedPlayers` upgraded from `HashMap` to
`ConcurrentHashMap` to eliminate race conditions between the timed-reveal
BukkitRunnable, onDeath, and onQuit callbacks.
#### Medium
- **M-07 · Wrong permission node in `BlockBreakListener`** (`BlockBreakListener.java`)
Changed `hg.admin` to `hoplitebr.admin` to match the permission declared in
`plugin.yml`. Admins with `hoplitebr.admin` could not break blocks inside an
arena during WAITING / STARTING / ENDING phases.
release
HungerGameSSS 4.0
4.012 мар. 2026 г.21Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
## [4.0] — 2026-03-12 — Legendary Ability Audit & Fixes
### 🐛 Bug Fixes — Legendary Abilities
- **🛡️ ReinforcedElytra never activated (Critical)** — `performSneak()` called `!checkCooldown(player)`
meaning the ability only "activated" while on cooldown and did nothing when ready. Fixed by removing the
negation: `if (checkCooldown(player)) return;`
- **💬 DeathNote spammed chat 20×/sec (Major)** — `showProgress()` called `player.sendMessage()` every
tick. With the passive task running at 1-tick period, this sent 20 messages per second to chat, making
the chat completely unusable while holding the item. Fixed by replacing `sendMessage()` with
`sendActionBar()` and rendering a proper progress bar (colored block chars + target name).
- **💊 FountainOfYouth healed all online players (Major)** — The heal loop iterated over
`Bukkit.getOnlinePlayers()` instead of the arena player list. This meant the item healed players in
other arenas, spectators, and any player on the server within range regardless of game state. Fixed by
iterating over `arena.getPlayers()` with a team-fire check.
- **💀 HadesHelm applied Wither without checking if helm was equipped (Major)** — `performDamaged()` added
Wither to any attacker when the player took damage, even if they had already unequipped the helm during
combat. Fixed by adding `AbilityManager.isAbilityItem(player.getInventory().getHelmet(), "hades_helm")`
guard at the top of the method.
- **👢 HermesBoots cancelled fall damage without checking if boots were worn (Major)** — Same class of
bug as HadesHelm: `performDamaged()` suppressed all fall damage even after the player swapped out the
boots. Fixed by guarding with `isAbilityItem(player.getInventory().getBoots(), "hermes_boots")`.
- **🔨 MidasSword used deprecated `AttributeModifier` constructor (Major)** — The old
`AttributeModifier(UUID, String, double, Operation, EquipmentSlot)` constructor is removed in Paper
1.21+. Replaced with the current `AttributeModifier(NamespacedKey, double, Operation, EquipmentSlotGroup)`
API; modifier key stored as a `NamespacedKey` field to allow stable removal on each upgrade.
- **🌿 EmeraldBlade used deprecated `AttributeModifier` constructor (Major)** — Same issue as MidasSword.
`updateItemData()` called `new AttributeModifier(UUID.randomUUID(), "emerald_blade_damage", …)`. This
also meant a fresh random UUID was generated on every deposit, so the old modifier was never removed,
stacking damage indefinitely. Fixed with a stable `NamespacedKey` field (`emerald_blade_damage`) and
the new constructor.
- **🩸 CrimsonChainsword leaked `revvedUp` / `bleedingTargets` maps on disconnect/death (Minor)** —
Neither map was cleaned up when a player left or died, causing unbounded memory growth over long
sessions. Added `performQuit()` and `performDeath()` overrides that remove the player's entries from
both maps.
---
release
HG 3.9
3.912 мар. 2026 г.13Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
## [3.9] — 2026-03-12 — Bug Fix Release
### 🐛 Bug Fixes
- **💀 Game never ended after kills (Critical)** — `MatchService.handleDeath()` delegated to
`PlayerDeathListener` to track the death but never called `gp.setAlive(false)` on the `GamePlayer` object.
Because `checkWin()` uses `GamePlayer.isAlive` as its sole source of truth for alive-player counting,
every dead player was still counted as alive — meaning the win condition (`aliveCount == 1`) was never
reached, and games ran until the server was restarted. Fixed by marking the player dead at the very top
of `handleDeath()`.
- **📦 Stray `Mjolnir.java` causing class ambiguity** — A leftover copy of `Mjolnir.java` existed at
`me/hoplite/hungergamessss/ability/impl/Mjolnir.java` from a package rename. It still imported classes
from the current `me.duong2012g` namespace, which caused class-loading ambiguity at runtime. The file
also contained outdated logic (`isFriendlyFire` replaced by a manual team equality check). Deleted.
- **🔢 `pom.xml` version out of sync with `plugin.yml`** — `pom.xml` declared `3.5` while `plugin.yml`
was `3.9`. This meant compiled JARs reported the wrong version in server logs and Modrinth update checks
compared against the wrong baseline. Bumped `pom.xml` to `3.9`.
---
release
3.76
3.7624 февр. 2026 г.37Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
fixed:
✅ Double death processing fix
✅ gamesPlayed database persistence
✅ onDisable stats flush
✅ Mjolnir lightning effect only
✅ isAbilityItem security fix
✅ Missing YAML files added
release
3.7
3.724 февр. 2026 г.17Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
🔧 Critical Fixes
Fixed Adventure API dependency - Resolved ClassNotFound crash
Fixed Mjolnir import package - Resolved compile error
Fixed database schema inconsistency - Fixed the_end column name
Fixed empty exception handling - Added proper logging instead of silent failures
🛡️ Stability Improvements
Fixed memory leaks in DeathNote - Added proper cleanup on plugin disable
Enhanced null safety - Added null checks in ArenaManager
release
HungerGameSSS 3.67
3.6723 февр. 2026 г.14Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
Asynchronous Check: Queries the Modrinth API on startup without blocking the server.
Admin Notifications: Operators and players with hungergames.admin permission will receive a message on join if a newer version is available.
Configurable: You can enable/disable it or change the slug in config.yml.
release
HungerGameSSS 3.36
3.3623 февр. 2026 г.12Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
🚀 Architectural Modernization
Command System Refactor: Modularized the monolithic
HGCommand
into a dedicated SubCommand Pattern. All 12+ sub-commands (join, start, lobby, admin, v.v.) are now handled by isolated, maintainable classes.
Database Optimization: Switched to HikariCP connection pooling and implemented CompletableFuture chains for thread-safe, non-blocking player stat persistence.
🛠️ Combat & Ability Fixes
Cooldown Standardization: Standardized all ability cooldowns to milliseconds for precision and consistency across the plugin.
Logic Safety & Math:
Implemented true spherical AoE checks using distanceSquared (Fixing B-19).
Added NaN/Infinity guards for knockback vectors to prevent entity glitches (Fixing B-20).
Fixed
LichStaff
ammo replenishment via the new
onCooldownEnd
hook.
Cleanup & Stability:
Ensured automatic cleanup of HypnosisStaff minions on player quit/death.
Standardized dungeon entities using metadata to prevent accidental cleanup of named mobs.
🌍 World & Game Mechanics
Smooth WorldBorder: Replaced step-based resizing with a continuous tick-based calculation for professional, smooth border shrinking.
Nether Redirection: Fully implemented per-arena Nether world creation and portal redirection logic.
Scoreboard Correction: Fixed the %alive% placeholder to accurately count living participants only.
Persistence: Fixed a critical bug where lifetime kills/deaths were lost during arena resets.
📦 General Improvements
Localization: Replaced hardcoded technical strings with translatable
MessageManager
keys.
Robust Lore Support: Improved lore-splitting logic to handle multi-line localized descriptions safely.
Dead Code Removal: Pruned over 200 lines of obsolete crafting and hologram logic to reduce memory footprint.
release
HungerGameSSS 3.1
3.121 февр. 2026 г.16Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
17+ Core Gameplay Fixes: Resolved NPEs, logic errors in the game loop, and performance bottlenecks in the cornucopia system.
Database Statistics Persistence: Player kills, deaths, and wins are now reliably saved and loaded.
Mechanical Improvements: Added tool-sensitive VeinMiner logic and unique dungeon building for all types.
Full Configurability: Externalized health caps, materials, countdowns, and more to config.yml.
Localization: All user-facing messages are now externalized to language files for easy translation.
release
HungerGameSSS 3.0
3.021 февр. 2026 г.16Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
Changelog (Legendary Weapons Optimization)
Performance: Optimized passive tasks for all 28 legendary weapons. Loops now only target players in active arenas, significantly reducing CPU usage.
Configuration: All hardcoded parameters (damage, radius, cooldowns, etc.) moved to config.yml.
Consistency: Unified team-based friendly fire checks using the standard isFriendlyFire method.
Stability: Refactored logic and fixed minor bugs across weapons like FountainOfYouth and HornOfWinter.
release
HungerGameSSS 2.29
2.2920 февр. 2026 г.14Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
Fixes for CloudSword, LichStaff, ShrinkRay, MidasSword, and VoidStaff.
System-wide cooldown refactor (switched from seconds to milliseconds for better precision).
Analysis and verification of Aiglos and Artemis Bow.
release
HungerGameSSS
2.2819 февр. 2026 г.18Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
fixed :
12 critical bug
22 Hight bug
21 Medium bug
1 low bug
Total: 56 bug
beta
Cornucopia loot balance
2.2717 февр. 2026 г.10Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
release
HungerGameSSS 2.26
2.2617 февр. 2026 г.13Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
Localization Fixes: Added missing messages for player_join_arena, grace_period, deathmatch, and scoreboard states to en.yml, vi.yml, ru.yml, and fr.yml.
Compilation Fixes: Resolved syntax errors and missing imports in CloudSword.java and ChainsawSword.java.
Refactoring: Applied previous Legendary Item fixes and optimizations.
release
HungergameSSS 2.25
2.2517 февр. 2026 г.11Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
Vampire Blade Removed: All source code, config files (vampire_blade.yml), and registration logic have been deleted.
Resource Pack Fixes:
Poseidon's Trident: Set CMD to 1002.
Artemis Bow: Set CMD to 3.
Pufferfish Cannon: Changed material to CROSSBOW.
release
HungerGameSSS 2.24
2.2417 февр. 2026 г.12Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
Fixed Legendary Crafting: Interactions now work properly by clicking holograms (ArmorStands). Added cinematic lightning effects and enforced Heart Costs.
Smooth Arena Building: Implemented batched block placement (500 blocks/tick) to eliminate server lag during Cornucopia generation.
Ability Fixes: Resolved double-firing bugs, fixed bow/crossbow ability failures, and improved ability name matching.
Loot Refinement: Concentrated Cornucopia chests within a 10-block radius for better balance.
Performance: Added async chunk pre-loading and cleaned up redundant event listeners.
release
Bug fixed
2.2316 февр. 2026 г.8Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
release
HungerGameSSS 2.22
2.2216 февр. 2026 г.16Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
Fixed Arena Creation Laguna: Optimized chunk loading to prevent server hangs.
Ability Fixes: Removed cooldowns on left-clicks and pre-game interactions.
Startup Fixes: Corrected team colors and removed redundant item registrations.
Log Optimization: Silenced validation spam (enabled only in debug mode).
Plugin Stability: Updated plugin.yml.and cleaned up orphaned recipes
release
Legendary Expansion & Rebalance Update
2.216 февр. 2026 г.7Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11paper, purpur, spigot
Что нового
New Features & Improvements:
Complete Legendary Overhaul: Fully refactored 48 legendary abilities with optimized code and bug fixes.
Tier-Based Crafting: Rebalanced all recipes based on power level (S to D Tier). S-Tier items now require elite materials like Netherite and Nether Stars.
Team Selection Support: Added full team-awareness to all AOE and targeting abilities to prevent friendly fire.
Registry Expansion: Ensured all legendary items have proper configuration files and are correctly registered.
Fixes & Optimization:
Performance Upgrade: Implemented PersistentDataContainer (PDC) lookups for significantly faster item detection.
Memory Leak Fixes: Resolved multiple leaks in ability tickers (Shadow Blade, Dragon Katana, etc.) and hologram management.
Streamlined Content: Removed redundant items (Thor's Axe, redundant crossbows) to reduce plugin weight.
Stability: Fixed race conditions and thread safety issues in high-impact abilities.
release
HungerGameSSS 2.11
2.1115 февр. 2026 г.23Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
Full Multi-Language Support (44 Items): Completed skill description translations for all legendary items into Vietnamese, Russian, and French.
English Name Preservation: Legendary item names (e.g., "Cloud Sword", "Excalibur") are preserved in English to match custom Resource Pack textures.
Dynamic Localization System: Refactored AbilityManager to dynamically load names and lore from language files (en.yml, vi.yml, ru.yml, fr.yml).
Enhanced Lore UI: Item descriptions now use multi-line formatting for better in-game readability.
release
HungergameSSS 2.1
2.115 февр. 2026 г.15Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
This update focuses on a massive overhaul of the Legendary Item system, addressing 152 bugs across all 48 items to ensure better performance, safety, and game integrity.
Highlights:
Legendary Item Overhaul: Fixed logic errors and bugs for all 48 Legendary Items.
Performance Optimization: Refactored global passive tickers to significantly reduce server lag and CPU usage.
Team Safety: Added comprehensive team checks to all AOE and projectile abilities to prevent friendly fire.
Griefing Prevention: Implemented robust block tracking for world-destructive items (Warden Crossbow, Villager Wand, etc.) to ensure arenas restore perfectly after matches.
Memory Leak Fixes: Added automated cleanup for entities and scheduled tasks on player death, quit, or arena end.
Framework Stability: Updated the
BaseAbility
system with standardized hooks for reliable ability execution and cleanup.
Technical Changes:
Optimized Reinforced Elytra and Poseidon's Trident passive loops.
Fixed item loss bugs with Mjolnir and Artemis Bow.
release
HungerGameSSS 2.07
2.0714 февр. 2026 г.18Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
1 🛠 Core Fixes
✅ Fixed multiple potential NullPointerException cases
✅ Improved event handling safety checks
✅ Fixed item duplication edge cases
✅ Improved player data loading & saving logic
✅ Fixed inventory sync issues
✅ Fixed reload-related memory problems
✅ Improved listener registration structure
✅ Fixed task scheduler leaks
✅ Optimized game state transitions
2 ⚔ Legendary System Refactor
✅ Refactored legendary ability trigger system
✅ Improved cooldown handling logic
✅ Fixed ability activation edge cases
✅ Improved custom item identification method
✅ Better structure separation (Ability / Item / Manager)
✅ Reduced redundant checks in ability loop
✅ Improved metadata tagging safety
3 🧠 Code Structure Improvements
✔ Cleaner package structure
✔ Better separation of managers
✔ Reduced duplicate logic
✔ Improved async task safety
✔ More maintainable structure for future updates
4 ⚡ Performance
Reduced unnecessary loops
Improved scheduler management
Lowered memory footprint during matches
Better handling when multiple arenas run simultaneously
release
HungerGameSSS 2.06
2.0613 февр. 2026 г.19Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
🚀 Performance Optimization
Global Ticker Loop: Refactored the global game loop from a 1-tick (0.05s) interval to a 20-tick (1-second) interval. This significantly reduces server CPU load while maintaining gameplay accuracy.
Scoreboard & Holograms: UI elements such as scoreboards and holograms now update once per second, minimizing lag spikes in arenas with many players.
Timer Refactoring: Converted the internal game timer in
GameTask
to use seconds instead of ticks for cleaner logic and easier phase management.
🛡️ Grace Period Enhancements
Timer Synchronization: Standardized the Grace Period to a consistent 120-second default across all listeners and tasks.
PVP Protection Fix: Improved damage check logic to ensure players are 100% protected from entity attacks during the peace phase.
Broadcasts: Added sound effects (Wither Spawn) and clear chat notifications for the start and end of the Grace Period.
🗺️ World Border Management
Automatic Initialization: The world border now automatically sets its center at the Cornucopia at the start of every match with a default radius of 500 (1000 diameter).
Manual Admin Control: Introduced a new command /hg border <radius> [seconds] for manual management.
Admins can now shrink or expand the border dynamically.
The border center is permanently locked to the arena's Cornucopia.
Full Tab Completion support for easy usage.
💎 Legendary Item System
Dynamic Heart Costs: Synchronized heart-cost logic from individual weapon YAML files.
Hologram Labels: Crafting costs now dynamically display on the floating holograms at Cornucopia.
Crafting Logic: The system now correctly checks and deducts player hearts based on the values defined in
.yml
files.
Zero-Restart Updates: Changing the heart cost in the config now reflects across the entire plugin logic without requiring a reboot.
release
Item recipes fix
2.0512 февр. 2026 г.12Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
release
HungergameSSS 2.04
2.0411 февр. 2026 г.14Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
New Legendary Weapons: 16 weapons integrated.
Cornucopia Rework: Procedural majestic generation + fair loot.
Audit Fixes: Combat log system, per-arena worlds, death drop fixes, and localization updates.
release
HGSSS 2.02
2.0210 февр. 2026 г.17Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
release
HGSSS 2.01
2.0110 февр. 2026 г.10Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
ability,tabcomplete fix
release
The king comeback
2.09 февр. 2026 г.30Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
HungerGamesSSS v2.0 - Major Feature Update
🎮 New Features
Interactive Legendary Crafting System
Hologram Recipe Displays: Legendary item recipes now appear as rotating holograms at the Cornucopia.
Interactive Crafting: Players can craft legendary items directly at dedicated altars by interacting with holograms.
Dynamic Item Selection: 4 random legendary recipes are selected each match for dynamic gameplay.
Hoplite-Style Spawn Cages
3x3 Glass Enclosures: Players are now securely encased in glass cages during countdown.
Animated Release: Sequential glass retraction with authentic piston sound effects (top-to-bottom release).
Refined UX: Added countdown titles, action bar alerts, and sound cues for a professional feel.
Enhanced Cornucopia System
Multiple Styles: Support for Classic, Ultimate, and SpeedSilver cornucopia designs.
Automated Building: Structures generate dynamically based on player count.
Strategic Layout: Optimized altar positioning around the center for fair crafting access.
🔧 Technical Improvements
Minecraft 1.21.1 Compatibility
Software: Full support for Paper/Spigot 1.21.1.
API Migrations: Updated all legacy potion effects (e.g., SLOW → SLOWNESS) and enchantments (e.g., PROTECTION_ENVIRONMENTAL → PROTECTION).
Modern Attribute System: Updated legendary item attribute modifiers to be 1.21 compliant.
Performance & Stability
Code Refactor: Purged 20+ redundant methods and unified the service layer.
Thread Safety: Secured metadata access and added robust null checks for entity interactions.
Optimized Reset: Improved block-update queue for lag-free arena restoration.
Enhanced Dungeon System
New Variants: Expanded to 11 unique dungeon types with specialized loot.
1.21 Spawning: Fixed mob spawning logic to prevent errors in newer Minecraft environments.
🎨 Resource Pack Integration
Unified Master Pack
Complete Assets: Consolidated HungerGameSSS(RP) + VredsWeapons into a single master pack.
CMD Verified: All legendary items accurately mapped to 3D models via CustomModelData.
Author Credits: Metadata updated to credit Duong2012G.
🚀 Installation & Update
Update HungerGamesSSS-1.15.jar in your /plugins folder.
Replace your client/server resource pack with HgFinalPack.zip.
Restart the server and enjoy!
Developed with ❤️ for the Hunger Games community.
release
1.24
1.2431 янв. 2026 г.20Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
sry, i will drop this project
beta
HungergameSSS 1.23
1.2324 янв. 2026 г.26Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
fix bug and add some legend weapons
beta
HungergameSSS 1.22
1.2223 янв. 2026 г.15Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
fix bug and add ru an fr language
alpha
HGSSS 1.21
1.2122 янв. 2026 г.12Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
fix bug
beta
HGSSS 1.20
1.2022 янв. 2026 г.17Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
# HungerGamesSSS v1.20 - The "Structure & Stability" Update
This update introduces a major overhaul to the structure spawning system, making the world more dynamic and challenging while significantly improving server performance and stability.
## 🏰 Structure System Overhaul
- Smart Classification : Structures are now automatically classified (Small, Medium, Large, Massive) based on their schematic dimensions.
- Dynamic Loot & Mobs :
- Loot Tables : Chest contents now scale with structure size. Massive structures contain high-tier loot like Netherite and Enchanted Golden Apples.
- Mob Spawning : The number and type of defending mobs now adapt to the structure's size (e.g., Wither Skeletons and Evokers for massive structures).
- Auto-Spawn Mechanic :
- Structures now periodically spawn near active players (100-200 block range) during the match to keep gameplay engaging.
- Spawning logic respects the Arena Border and avoids water placement (unless the structure is ocean-specific).
## ⚡ Performance & Optimization
- Async Schematic Pasting : Implemented asynchronous schematic pasting using CompletableFuture . This prevents the main server thread from freezing when spawning large structures, eliminating "Watchdog" crashes.
- Optimized Container Filling : Replaced block-by-block scanning with chunk-based tile entity iteration, reducing CPU usage for loot generation by over 90% .
- Async Data Saving : Arena data is now saved asynchronously to reduce I/O lag.
## 🐛 Bug Fixes
- Fixed a NullPointerException when the game task attempted to access the Structure Manager.
- Fixed an issue where the structure spawn timer would reset incorrectly; it now syncs with the global arena timer.
- Corrected invalid material references (e.g., LEATHER_TUNIC -> LEATHER_CHESTPLATE ) in loot tables.
- Added safety checks to ensure structures spawn at least 100 blocks away from each other.
beta
HungerGameSSS 1.19
1.1919 янв. 2026 г.16Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
beta
HungerGameSSS 1.18
1.1819 янв. 2026 г.14Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
beta
HGSSS 1.17
1.1718 янв. 2026 г.9Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
release
hungergame 1.16
1.1614 янв. 2026 г.19Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
some upgrade
beta
HungerGameSSS 1.15
1.1513 янв. 2026 г.12Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
Hunger Games Core - Changelog
### Version 1.15 (2026-01-13)
Added
- New Command : Added /hg deletelegendary <id> command. This allows administrators to remove specific legendary item holograms from an arena, simplifying the arena setup and cleanup process.
- Localization : Added success and error messages for the new command in both vi.yml and en.yml .
Changed
- Legendary Item Descriptions : Updated descriptions for several legendary items to match their actual in-game mechanics:
- Cloud Sword : Clarified that it deals damage directly to armor durability.
- Dragon Katana : Updated to mention the requirement of Shulker Shells for using Dragon Breath.
- Visual Improvements : Corrected color codes for legendary item names in en.yml to ensure visual consistency:
- Shadow Blade (&8&l)
- Villager Wand (&a&l)
- Midas Sword (&6&l)
- Warden Crossbow (&3&l)
- Command Help : Updated the /hg usage message to include the deletelegendary sub-command.
Fixed
- Compilation Issues : Resolved several critical bugs in AbilityManager.java :
- Fixed invalid type casting in target detection logic.
- Replaced incompatible NamespacedKey metadata with string-based metadata for entity ownership tracking.
- Updated outdated sound references (e.g., ENTITY_PUFFER_FISH_BLAST to ENTITY_PUFFER_FISH_BLOW_UP ).
release
HungerGameSSS 1.15
1.1513 янв. 2026 г.8Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
Hunger Games Core - Changelog
### Version 1.15 (2026-01-13)
Added
- New Command : Added /hg deletelegendary <id> command. This allows administrators to remove specific legendary item holograms from an arena, simplifying the arena setup and cleanup process.
- Localization : Added success and error messages for the new command in both vi.yml and en.yml .
Changed
- Legendary Item Descriptions : Updated descriptions for several legendary items to match their actual in-game mechanics:
- Cloud Sword : Clarified that it deals damage directly to armor durability.
- Dragon Katana : Updated to mention the requirement of Shulker Shells for using Dragon Breath.
- Visual Improvements : Corrected color codes for legendary item names in en.yml to ensure visual consistency:
- Shadow Blade (&8&l)
- Villager Wand (&a&l)
- Midas Sword (&6&l)
- Warden Crossbow (&3&l)
- Command Help : Updated the /hg usage message to include the deletelegendary sub-command.
Fixed
- Compilation Issues : Resolved several critical bugs in AbilityManager.java :
- Fixed invalid type casting in target detection logic.
- Replaced incompatible NamespacedKey metadata with string-based metadata for entity ownership tracking.
- Updated outdated sound references (e.g., ENTITY_PUFFER_FISH_BLAST to ENTITY_PUFFER_FISH_BLOW_UP ).
release
HungerGameSSS 1.14
1.1410 янв. 2026 г.20Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
# Changelog - HungerGamesCore Plugin
## [v1.7] - 2026-01-10
### Added
- Advanced Admin Commands :
- //hg wand : Regional selection tool using a Golden Axe (Pos1/Pos2).
- //hg save cornucopia : Save selected regions as custom Cornucopia structures with automated random loot generation.
- //hg setlegendary [id] : Set custom legendary crafting points with holograms at the admin's location.
- //hg create : Differentiated advanced arena creation from the standard /hg create automatic process.
- New Spawn Mechanism : Replaced glass cages with a Sticky Piston system. Pistons now retract 1 block down when the game starts for a smoother player release.
- Legendary Crafting Improvements :
- Added a lightning cleanup task to prevent lingering visual effects after crafting.
- Crafting now supports variable item stack sizes (e.g., Weather Circles now craft 2 items at once).
### Updated & Rebalanced Legendary Items
- Shulker Staff :
- Increased cooldown to 15 seconds .
- Replaced Boss Bar cooldown with a Vanilla Item Slot Cooldown (shield-like overlay).
- Cloud Sword :
- Increased cooldown to 15 seconds with item slot overlay.
- Updated Recipe: Added 64x White Stained Glass and 1x Diamond Sword .
- Cloud Walk: Now places White Stained Glass blocks under feet that expire after 5 seconds.
- Villager Wand :
- Reworked Ability : Removed Iron Golem summoning.
- New Ability : Summons a 3x3x6 Light Beam dealing 18 damage (9 hearts) and destroying blocks (except bedrock).
- Updated Recipe: Increased Totem of Undying requirement to 2x .
- Obsidian Dagger :
- Reworked Ability : Now summons 3 Meteors with a slight delay. Each meteor causes a Creeper-like explosion (3.0 power) and sets fire to entities.
- Reinforced Elytra :
- Updated Recipe: Added 1x Diamond Chestplate and increased Blaze Rods to 16x .
- Weather Circles :
- Updated to produce 2x items per craft to support dual-wield requirements.
### Fixed
- Hypnosis Staff : Fixed an issue where charmed mobs continued to chase the owner. They now correctly reset their aggression and protect the player.
- Dragon Katana : Fixed a bug where players would take damage from their own dragon fireball clouds.
- Excalibur : Fixed the effect duration for Resistance and Absorption buffs (now 8 seconds).
- Arena Management : Fixed missing loot chests in certain custom Cornucopia structures by expanding detection to Barrels and Trapped Chests.
release
HungerGameSSS 1.13
1.139 янв. 2026 г.10Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
### Changelog - HungerGamesSSS v1.7
Features & Enhancements
- Advanced Arena Creation : Separated /hg create (automatic location search) from //hg create (creates arena at the admin's current location).
- Custom Cornucopias : Added a region selection system ( //hg wand ) and the ability to save custom Cornucopia structures ( //hg save cornucopia ). Empty chests in these structures now automatically receive random loot.
- Legendary Crafting Stations : Added //hg setlegendary [name] to manually place specific or random legendary crafting stations anywhere.
- Arena Control : Added enable/disable toggles for arenas to manage player access and //hg setuparena for quick admin teleportation and Creative mode.
Fixes & Improvements
- Dual-Wield Crafting : Fixed "Weather Circles" and "Wither Sickles" crafting to produce 2 items instead of 1, enabling immediate dual-wield use.
- Tab Completion : Fully updated auto-complete suggestions for all new subcommands and legendary item IDs.
- Build System : Migrated to a robust Maven-based build system for easier packaging and dependency management.
release
HG beta 1.12
1.129 янв. 2026 г.8Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
Changelog
Legendary Items
- Cloud Sword
- Removed ability cooldown for Cloud Walk.
- Added right-click toggle functionality to enable/disable Cloud Walk mode.
- Updated Cloud Walk block duration to 5 seconds.
- Hypnosis Staff
- Prevented minions from attacking their owner.
- Prevented minions from attacking the owner's teammates.
- Minions now automatically attack the same target as the owner when the owner deals damage.
- Overcharged Wand
- Refactored logic to fix execution issues and properly trigger 20 explosions around the player.
Technical Improvements & Bug Fixes
- Code Stability
- Fixed unbalanced curly braces in AbilityManager.java that caused compilation failures.
- Resolved missing Chunk import in ArenaManager.java .
- Fixed incorrect particle constant VILLAGER_HAPPY to HAPPY_VILLAGER for Bukkit API compatibility.
- Build System
- Successfully integrated and verified Maven build process using the included Apache Maven distribution.
- Generated updated .jar files for all project modules (Core, RPG Addon, Pillar Plugin).
release
HungerGameSSS 1.11
1.118 янв. 2026 г.11Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
### Changelog - HungerGamesCore
Legendary Items & Abilities
- Shadow Blade : Fixed permanent 3-heart health reduction when held. Enhanced invisibility to correctly hide armor and disable all particles.
- Cloud Sword : Resolved movement stuttering by implementing dynamic "Cloud Walk" generation (single block per move with a 2-second expiration).
- Villager Wand : Added explosion effects to Iron Golem summons in both sneaking and non-sneaking modes.
Arena & World Generation
- Optimized Arena Creation : Improved chunk loading and search logic in ArenaManager.java , significantly reducing world generation time.
- Cornucopia Expansion :
- Increased flattening radius to 100 blocks with a new Grass Block floor.
- Relocated loot chests to a 20m radius circle.
- Moved Legendary Crafting stations to a 40m radius for better accessibility.
- Fair Spawns : Increased player spawn radius to 70m from the center to accommodate the larger arena scale.
Configuration & System
- Config Update : Synchronized config.yml with new arena dimensions (100m radius, 120m safe distance).
- Language : Cleaned up localization files to remove outdated health sacrifice references.
release
HungerGameSSS 1.10
1.107 янв. 2026 г.12Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
### Changelog - HungerGamesCore
Resource Pack & Models
- CMD Synchronization : Synchronized all 15 Legendary items' CustomModelData between the plugin code and Resource Pack.
- New Model Files : Added missing stick.json and golden_sword.json to support staves and Midas Sword.
- Override Fixes : Updated diamond_hoe.json , crossbow.json , and snowball.json with correct material mappings.
- Conflict Resolution : Resolved CMD overlaps for shadow_blade and excalibur across different weapon materials.
Core Plugin Improvements
- 1.21 API Compatibility : Updated Sound and Particle enums in AbilityManager.java to support the latest Spigot versions.
- Bug Fixes :
- Resolved class naming conflicts in StructureManager.java .
- Fixed missing emeraldCount variable declaration in the ability system.
- Optimization : Cleaned up redundant imports and improved performance for message caching and ability checks.
release
HungerGameSSS 1.09
1.096 янв. 2026 г.22Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
Here is a concise changelog of the recent changes made to HungerGamesSSS 1.09 :
Scoreboard System
- Implemented a customizable Scoreboard system via scoreboard.yml .
- Created ScoreboardManager.java to handle real-time updates for Arena name, Team name, and Alive/Total player counts.
- Added automatic scoreboard refresh every second (20 ticks) in Main.java .
Command Redesign & Features
- Border Control : New command structure /hg <arena> border shrink <blocks> <seconds> for precise world border management.
- Hardcore Mode : Added /hg <arena> hardcore on/off command and a new hardcoreEnabled property in Arena.java .
- PVP Management : Restructured PVP toggles to /hg <arena> pvp on/off for better consistency.
- Improved Tab Completion : Updated HGTabCompleter.java to support the new command hierarchy.
Localization & UI
- Updated all 4 language files ( en.yml , vi.yml , fr.yml , ru.yml ) with new command usage instructions and status messages.
- Added localized messages for Hardcore mode status and specific Arena border alerts.
Technical Improvements
- Refactored HGCommand.java to improve command parsing logic and error handling.
- Integrated Scoreboard cleanup in PlayerManager.java when players join or quit.
release
HungerGameSSS 1.08
1.086 янв. 2026 г.5Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
### Changelog v1.08
New Features
- Configuration Overhaul : Expanded config.yml to include customizable settings for Arena mechanics, Dungeon spawn rates/mob stats, and Legendary item costs/cooldowns.
- Hot Reload : Added /hg reload command (OP only) to reload configuration and messages instantly without a server restart.
- Lava Temple Mechanics : Mobs in the Lava Temple now inflict fire damage on attack (duration configurable).
Improvements & Fixes
- Codebase Modernization : Replaced hardcoded values with config-driven parameters across ArenaManager , PlayerManager , and AbilityManager .
- Build Fixes : Resolved Material reference errors in DungeonManager.java for 1.21 compatibility.
- Command Polish : Added tab completion support for the new reload command.
release
HungerGameSSS 1.07
1.075 янв. 2026 г.7Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
Changelog - HungerGameSSS v1.07
Dungeons & Structures
- Unified Dungeon Difficulty : Upgraded all 6 original dungeon structures in DungeonManager.java to feature high-tier loot and powerful guardians (60 HP, Diamond/Netherite gear).
- New "Lava Temple" Dungeon : Added a nether-themed surface dungeon featuring Magma blocks and Lava pools. It is guarded by Blaze and Magma Cube spirits.
Items & Loot
- Tier 3 Loot Tables : Standardized rewards across all dungeons, including Netherite Scraps, Golden Apples, and Level IV-V Enchanted Books.
- Legendary Materials : The Lava Temple now serves as a primary source for Legendary crafting ingredients such as Nether Stars, Blaze Rods, Totems, and Disc Fragments.
- 3D Texture Integration : Synchronized CustomModelData in AbilityManager.java with the Resource Pack to ensure all Legendary weapons (Cloud Sword, Dragon Katana, Excalibur, etc.) display their 3D models correctly.
System & Compatibility
- Version 1.7 Release : Successfully compiled HungerGamesSSS-1.7.jar for Paper/Spigot 1.21.1.
- API Modernization : Refactored legacy enchantment names (e.g., converted PROTECTION_ENVIRONMENTAL to PROTECTION ) to ensure full compatibility with modern Minecraft versions.
Everything is compiled and ready for deployment.
release
HungerGameSSS 1.06
1.065 янв. 2026 г.4Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
### Changelog - Version 1.06
Legendary Crafting Enhancements
- Broadcasting : Global chat notifications and level-up sounds now trigger for successful Legendary item crafts.
- English Support : Added full English localization for all Legendary items, lore, and descriptions in en.yml .
- Bug Fix : Fixed a duplication exploit by ensuring holograms are deleted before ingredient consumption.
Arena Management
- Delete Command : Implemented /hg delete (arena) for OPs, featuring automatic player teleportation to lobby and permanent world folder deletion.
- PVP Control : Added /hg pvp enable/disable (arena) command for dynamic game management.
- Tab Completion : Enhanced tab completion for all /hg subcommands and arena names.
World Generation
- SpeedSilver Cornucopia : Introduced a new "SpeedSilver" style Cornucopia featuring the iconic Horn of Plenty, floating chest altars, and epic floor patterns.
- Randomized Styles : Arena generation now randomly selects from 7 distinct themes: SpeedSilver, Ultimate, Classic, Ancient, Void, Royal, and Industrial.
Technical Improvements
- Localization : Standardized all message keys between vi.yml and en.yml .
- Optimization : Moved heavy world generation logic to asynchronous tasks to prevent server lag.
release
HungerGameSSS 1.05
1.055 янв. 2026 г.14Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
1.05:
Player spawn fixed
Legendary hologram fixed
release
HungerGameSSS 1.04
1.044 янв. 2026 г.12Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
### Changelog v1.04
New Features
- Dungeon System : Added 3 SpeedSilver-style dungeons (Spider Nest, Crypt, Gold Mine) with custom loot and themed mobs.
- Lifesteal Mechanic : Implemented SMP-style heart stealing (Killer gains 1 heart, Victim loses 1 heart). Max 20 hearts, Min 1 heart.
- Lifesteal Command : New toggle command /hg <arena> lifesteal <on/off> for per-arena management.
- Addon API : Introduced HopliteAPI and custom events ( ArenaStartEvent , DungeonSpawnEvent , etc.) for developer integration.
Improvements
- Cornucopia Logic : Improved terrain generation by auto-clearing obstacles (trees, snow, grass) and ensuring safe spawning locations away from water/lava.
- Spawning : Synchronized player spawn Y-levels with Cornucopia and increased spawn radius to 35 blocks to prevent clipping.
- Hologram Display : Optimized recipe holograms to support multi-line ingredient lists and capitalized material names.
- Performance : Moved heavy world-generation tasks to async threads to fix server lag during arena creation.
Bug Fixes
- Crash Fix : Resolved "Invalid character in chat" disconnects by removing raw color codes from tab completion and using ASCII-safe characters.
- Admin Command : Fixed /hg admin give to properly apply legendary item attributes and unbreaking enchants.
- Localization : Enhanced UTF-8 support for vi.yml and en.yml to ensure correct message rendering.
- Level Protection : Fixed XP consumption logic in crafting to prevent negative levels.
release
HGSSS 1.03
1.034 янв. 2026 г.5Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
bug fixed:
-error front text
-beautyful cornucopia
release
HGSSS 1.02
1.023 янв. 2026 г.7Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
A big upgrade:
-Add more 5 cornucopia
-Fix ability Legendary weapons
-Fix hologram
-Add more control for plugins
-A multi language supported( VietNamese and English)
-Add dungeons sturcture for hunger games
-Add command /hg delete ..
-add command /hg (arenaname) lifesteal on/of
release
HGSSS 1.01
1.013 янв. 2026 г.26Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Что нового
Đây là bản mô tả song ngữ (Việt - Anh) được thiết kế chuyên nghiệp để bạn đăng lên Modrinth. Tôi đã tối ưu hóa các đề mục dựa trên các tính năng thực tế được tìm thấy trong file JAR của bạn như hệ thống Team, Arena và Công thức nấu ăn huyền thoại.
⚔️ Hoplite Hunger Games (SSS)
Hoplite Hunger Games (SSS) is a high-performance survival game plugin designed specifically for modern Minecraft servers. Built on API 1.21, it brings a professional-grade Battle Royale experience to your community.
Hoplite Hunger Games (SSS) là một plugin trò chơi sinh tồn hiệu suất cao được thiết kế dành riêng cho các máy chủ Minecraft hiện đại. Được xây dựng trên nền tảng API 1.21, plugin mang đến trải nghiệm Battle Royale chuyên nghiệp cho cộng đồng của bạn.
✨ Key Features / Tính năng nổi bật
Robust Arena System: Fully automated game states and arena management. (Hệ thống Arena mạnh mẽ: Tự động hóa hoàn toàn trạng thái trò chơi và quản lý đấu trường.)
Teamplay Support: Dedicated team management system and commands for coordinated gameplay. (Hỗ trợ chơi đội: Hệ thống quản lý đội nhóm và các lệnh chuyên dụng để phối hợp tác chiến.)
Legendary Recipes & Ingredients: Create custom crafting recipes and unique items to enhance the survival experience. (Công thức & Nguyên liệu huyền thoại: Tạo các công thức chế tạo tùy chỉnh và vật phẩm độc đáo để nâng tầm trải nghiệm sinh tồn.)
PlayerData Tracking: Efficient storage and tracking of player statistics. (Theo dõi dữ liệu người chơi: Lưu trữ và theo dõi số liệu thống kê của người chơi một cách hiệu quả.)
Smart Tab Completion: Intuitive command suggestions for a better user experience. (Tab Completion thông minh: Gợi ý lệnh trực quan giúp người dùng thao tác dễ dàng hơn.)
🛠️ Commands & Permissions / Lệnh & Quyền
/hg - Main command for game participation and management. (Lệnh chính để tham gia và quản lý trò chơi.)
/team - Manage your squad and teammates. (Quản lý đội hình và đồng đội của bạn.)
/tc - Helper commands with smart auto-fill. (Các lệnh bổ trợ với tính năng tự động điền thông minh.)
🚀 Installation / Cài đặt
Download the .jar file. (Tải xuống file .jar.)
Place it into your server's /plugins folder. (Bỏ vào thư mục /plugins của máy chủ.)
Restart your server and customize the config.yml. (Khởi động lại máy chủ và tùy chỉnh file config.yml.)
📋 Compatibility / Độ tương thích
Version: Minecraft 1.21 or newer.
Platforms: Paper, Spigot, Purpur, Bukkit.
Java: Java 21 required.