HungerGameSSS
4.6.5HungerGameSSS is a high-performance Hunger Games plugin featuring unique Legendary Weapons with special abilities, dynamic gameplay systems, and full arena customization — built for competitive PvP se
4.6.5latestHungerGameSSS 4.6.5Jul 1, 2026 4.6.4HungerGameSSS 4.6.4Jun 4, 2026 [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(default60, seconds).4.6.3HungerGameSSS 4.6.3Jun 3, 2026 [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.
---4.6.2HungerGameSSS 4.6.2May 22, 2026 [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()calledarena.setState(MatchState.DEATHMATCH)directly instead ofplugin.getMatchService().transition(arena, MatchState.DEATHMATCH). Bypassingtransition()meant: -ArenaDeathmatchEventwas 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 viaupdateScoreboards(). Fix: replacedarena.setState(MatchState.DEATHMATCH)withplugin.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.ymldeclares:game.border-initial-size: 2000(the canonical key) -MatchService.javareads:"game.border-initial-size"correct -
GameTask.javaline 90 read:"game.initial-border-size"key does not exist → fallback
1000.0-GameTask.javaline 100 read:"game.border.initial-size"key does not exist → fallback
1000.0Effect: the game loop always set the initial border to 1 000 blocks regardless of the admin's configured value. Any server withborder-initial-sizeset above or below 1 000 saw unexpected border behaviour from the very first second of a match. Fix: unified bothGameTaskreads to use"game.border-initial-size". - BUG-3 · `MatchService.startMatch(Arena, int)` — countdown `BukkitRunnable` not stored (`MatchService.java`) The overloadstartMatch(Arena arena, int countdownSeconds)created a countdownBukkitRunnablebut discarded the returnedBukkitTask. The task was never added tocountdownTasks, socancelAllTasksFor()could not cancel it. CallingstartMatch()twice on the same arena (e.g. two rapid/hg startcommands, or a player join triggering auto-start while a manual start was in progress) launched two concurrent countdowns. Both reached zero and each calledstartArena(), resulting in the match starting twice — players teleported twice, inventory cleared twice, cage system entered an inconsistent state. Fix: stored the returnedBukkitTaskincountdownTasks.put(arena.getName(), task). --- ####Medium — Visible gameplay defects - BUG-4 · `MatchService` + `GameTask` — WorldBorder controlled by two systems simultaneously (`MatchService.java`)
MatchService.transition()(called when enteringPLAYING) scheduledscheduleBorderTask(), a periodic timer that shrank the border every N minutes. At the same time,GameTask.handleWorldBorder()ran every server tick duringPLAYINGand recalculated the border size via smooth linear interpolation, then calledWorldBorder.setSize(). The per-tick recalculation fired every second and silently overrode the periodic task'ssetSize(size, duration)smooth animation, causing the border to visibly flicker or jump rather than shrink smoothly. Fix: removed thescheduleBorderTask(arena)call fromMatchService.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 readrecipe.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 legacygetDisplayName()method returns""for any such item, sohasDisplayName()was alwaysfalse, and every legendary hologram fell back to showingrecipe.getType().name()— raw material names likeWOODEN_SWORDinstead of the intended weapon name (e.g.Excalibur). Fix: replacedgetDisplayName()/hasDisplayName()with Adventure'sPlainTextComponentSerializerto 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 whenaliveCount == 1. In team mode, if the final two (or more) surviving players were all on the same team,aliveCountwas ≥ 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, ifaliveCount > 1the 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`)
TeamManagerandTeamDatauseorg.bukkit.ChatColorfor team color storage, which is deprecated on Paper 1.21 in favour ofnet.kyori.adventure.text.format.NamedTextColor. Migrating the underlying storage type would require a database schema change andDatabaseManagermigration; that is deferred to a future version. Added@SuppressWarnings("deprecation")onloadColors()with aTODOcomment 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 mainstartMatch(Arena, List<Player>)flow) created a countdownBukkitRunnablebut did not add the task tocountdownTasks. If the arena was reset before the countdown finished (e.g. all players left), the orphaned task continued ticking until it reached zero and calledreleasePlayers()on a now-empty arena — potentially transitioning a WAITING arena to PLAYING with no players. Fix: stored the returned task incountdownTasks.put(arena.getName(), taskRef[0]). - BUG-9 · `MatchService` — cage cleanup stores `Block` objects instead of `Location` (`MatchService.java`)arenaCageswas declaredMap<String, List<Block>>.Blockobjects hold a direct reference to the chunk at the time they were obtained. If chunks unload and reload beforebreakGlassCages()runs, the staleBlockreference may report an incorrectgetType()— the GLASS check would fail and the cage blocks would not be cleared, leaving orphaned glass geometry in the arena world. Fix: changedarenaCagestoMap<String, List<Location>>.breakGlassCages()now callsl.getBlock()at removal time, always querying the current (guaranteed-loaded) chunk state. BothcreateJoinCage()andteleportPlayersAndCreateCages()updated to storel.clone(). ---Changed
-pom.xml— version4.6.1→4.6.2-plugin.yml— version4.6.1→4.6.2; description updated -paper-plugin.yml— version4.6.1→4.6.2---4.6.1HungerGameSSS 4.6.1May 15, 2026 [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 declaredloader: me.duong2012g.hungergamessss.PaperPluginLoader, but this class was never created. Paper attempted to instantiate it during plugin loading, threwClassNotFoundException, and the plugin failed to enable entirely. Fix: removed theloader:line. A customPluginLoaderis 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)DatabaseManagercalledconfig.setDriverClassName("org.sqlite.JDBC")and supported MySQL mode, but neitherorg.xerial:sqlite-jdbcnorcom.mysql:mysql-connector-jappeared as Maven dependencies. The built JAR had no driver classes, causingClassNotFoundException: org.sqlite.JDBCon every server startup that uses the default SQLite config. Fix: added both dependencies topom.xmland configured the Maven Shade Plugin to relocate them underme.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 thearenastable.games_playedis a player stat column that belongs inplayers. On fresh installs theplayerstable lacked the column;savePlayerStats()/loadPlayerStats()threwSQLException: no such column: games_playedwhenever stats were read or written. Fix: split the migration into two separate loops —arenaColumns[]against thearenastable andplayerColumns[]against theplayerstable. 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 newItemMetacopy fromitem.getItemMeta(), setunbreakable(true)on it, calleditem.setItemMeta(unbrMeta)— but then the outer code calleditem.setItemMeta(meta)with the original meta object (which did not haveunbreakableset). The secondsetItemMetasilently discarded the flag. Legend items markedunbreakable: truein YAML still lost durability in-game. Fix: callmeta.setUnbreakable(true)directly on the existingmetaobject before the finalitem.setItemMeta(meta)call. The duplicateitem.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 ofgetMessage(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 alwaysfalseand 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) withhasMessage(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 callinggetMessage()and inspecting the error-prefix fallback string, which is fragile and language-dependent. Fix: addedpublic boolean hasMessage(String key)that returnsmessageCache.containsKey(key). Used by thecreateItem()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 generatedconfig.ymlused 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 fromConfigSchemaValidator. #### 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 defaultconfig.yml. Admins had no indication these options existed and could not configure them without reading source code. Fix: all missing keys added toconfig.ymlwith documented defaults. - BUG-LANG-01 · `en.yml` — 60+ message keys used in code but absent from language file (languages/en.yml) Numerous keys used inTeamCommand,WithdrawCommand,LocateCommand,DebugCommand,AutoFixCommand,MatchService, and others were not present inen.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_nameand corresponding_desckeys), causing ability items to display the red error string as their display name after the localization fallback fix above. Fix: all missing keys added toen.ymlwith English text.Build fix —
(mvn clean packagefails withCompilerException: NullPointerExceptionpom.xml)testCompilecrashed with aNullPointerExceptioninside javac on JDK 21 even after switching to<release>21</release>. Root cause: MockBukkit4.109.0ships an annotation processor that walks the full type graph of the class under test.CooldownManagerTestloadsMainviaMockBukkit.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 topom.xml: 1. MockBukkit downgraded4.109.0→4.26.0. Version4.26.0is 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 remaini4.6.0HungerGameSSS 4.6.0May 7, 2026 [4.6.0] — Full Bug Fix & Improvement Pass (2026-05-05)
Fixed — 46 bugs across 35 files
#### Critical — Task & Memory Leaks - BUG-CM-01CooldownManagerrepeating task never cancelled on reload → addedshutdown(), called fromonDisable()- BUG-MAIN-01 Game-loopBukkitRunnablewas anonymous, never cancelled → storedgameLoopTask, cancelled inonDisable()- BUG-AM-01new NamespacedKey(plugin, "hg_ability")created on every interact/hit/move → cached asfinal abilityPdcKeyfield - BUG-BASE-02BaseAbility.onDeath()calledvalidateCanUse()→ blocked cleanup when arena state wasENDINGat last kill - BUG-CS-02CloudSwordblock-expiry task had no handle → glass blocks not restored on disable - BUG-HB-02HermesBootspassive task had no handle +lastShiftmap never cleared on quit/death - BUG-RE-01ReinforcedElytrapassive task had no handle +explosionCooldownsnever cleared - BUG-VW-02VillagerWandstale-entry cleanup task had no handle → leaked on reload - BUG-MJ-01Mjolnir: noperformDeath()→ItemDisplayentity leaked, item permanently lost on death - BUG-SB-02ShadowBlade: no globalcleanup()→ players stayed invisible permanently after/reload- BUG-RH-03RavagerHorn: no globalcleanup()→ ravager entities roamed arena world after reload - BUG-GH-03GolemHammer:inAirmap never cleared on quit/death → stale KB resist - BUG-LS-02LichStaff: no globalcleanup()→ stale ammo entries persisted between matches - BUG-SG-02SoulGauntlet: no globalcleanup()→ soul charges persisted between matches - BUG-VS-02VoidStaff: 3 state maps never cleared on full shutdown - BUG-WS-02WitherSickles: offhand copies not removed, cooldowns not cleared on shutdown - BUG-DN-01DeathNote: usedonQuit/onDeathbypassing BaseAbility lifecycle chain - BUG-LISTENER-01AbilityListener.onPlayerMove: missing null check onevent.getTo()→ NPE risk #### High — State Management - OPT-REG-01AbilityRegistry.getAbility()was O(42) triple-fallback loop → O(1) normalizedHashMaplookup - OPT-BASE-01 Config key prefix"abilities.xxx."rebuilt on every config call → cached in constructor - OPT-BASE-02BaseAbility.execute()14-arm switch-case →EnumMap<TriggerType, Consumer>dispatch - OPT-DISP-01+02AbilityDispatcher: debug logging on miss + eliminated duplicateNamespacedKeycopy - OPT-UPT-01UnifiedPassiveTickernow skips spectators, dead players, non-active arenas - OPT-AD-01ArmadilloDetonator: per-entityBukkitRunnable→ single unified per-player ticker - OPT-BB-01BeehiveBlaster: 4-tick polling per bee →EntityDamageByEntityEventlistener (zero tasks) - OPT-AB-02+03ArtemisBow: per-arena homing arrow cap + live count in passive HUD - OPT-CC-01CorruptedCrossbow: gravity0.04flat →0.05+1%horizontal drag (matches vanilla) - IMP-LISTENER-01 All combat/interact@EventHandlerhandlers now haveignoreCancelled = true- IMP-VM-01+02VeinMinerListener: hard cap 128 blocks + spread breaking across ticks - BUG-MJ-01Mjolnirglobalcleanup()removes all display entities #### Medium — Improvements - IMP-CTX-01AbilityContext: defensiveitem.clone()+requiresArena()validation +getLocationSafe()- IMP-UTILS-01AbilityUtils:findSafeLanding,degradeRandomArmorPiece,isFriendlyFire,tickProjectile,removeAfter,distanceSquared-first AoE check - IMP-CD-02CooldownManager.generateProgressBar()uses§codes consistent with downstream serializer - IMP-MAIN-01+02Main.onEnable()split intoregisterManagers/Listeners/Commands/postStartup+ early Java/Paper validation - ARCH-MS-01+02+03MatchServiceFSM:transition()method +BorderTask/FeastTask/DeathmatchTask+ArenaDeathmatchEvent- OPT-CD-01CooldownManager: purge offline players fromactiveDisplayItemin periodic cleanup - A1-1+3Ability.java: ISP sub-interfaces (ActiveAbility,PassiveAbility,ProjectileAbility,ListenerAbility) + full Javadoc - A1-10+11AbilityRegistry: ServiceLoader SPI discovery + config-drivendisabled/enabled-onlyoverrides - A1-17BaseAbility:AbilityGuardchain-of-responsibility +passesGuards()replaces 5 duplicated validate/cooldown blocks - A1-18BaseAbility:getConfigStringList()+getConfigSection()helpers - A1-19Aiglos: configurable AOE shape (sphere/cylinder) viaaoe_shapeconfig key - A1-23CloudSword: self-listener removed; fall-cancel centralised inAbilityListener.onFallDamageCancelCloud- A1-26 4 abilities (BeehiveBlaster,ArmadilloDetonator,RavagerHorn,GhastlyWhistle):setRemoveWhenFarAway(true)on all custom entity spawns - A1-S1AbilityServices: lightweight DI context replacing rawMainaccessor calls - A1-S2@AbilityTrigger+@PassiveTickannotations for future APT code generation - A1-S3+A2-S3ArenaEntityTracker: unified entity lifecycle manager (track/release/prune by owner, arena, ability) - A1-S4+A2-S2ParticleThrottle: throttle +spawnDeferred()based on arena player count - A1-S5AbilityMetrics: internal activation/blocked counter withSnapshotrecord - A1-S6ConfigSchemaValidator: declarative YAML schema validation replacing manualassertRange()loop - A2-4Main:ComponentLogger(SLF4J) field +clog()accessor - A2-9+10ArenaManager.processQueue(): async chunk pre-loading + BossBar build progress - A2-11CornucopiaBuildernow injectable viaplugin.getCornucopiaBuilder()- A2-17Arena.java:ArenaBlockRestorer+ArenaLegendaryTrackercomponent objects extracted; old getters kept as@Deprecateddelegation - A2-18Ingredient+LootEntryconverted to Java 21 records with compact constructors - A2-20MatchService.resetArena(): block restoration now async viaArenaBlockRestorer+processQueue()- A2-22 VeinMiner disabled by default; opt-in viaarena.builtin-veinminer: true- A2-S5HungerGamesAPI: public Developer API for custom ability registration + arena queries - A2-S6MatchState:isActive(),isJoinable(),isEnding(),match()functional switchNew 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
# 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-insBreaking Changes
-Ingredient.mat/Ingredient.amountpublic fields removed → useingredient.material()/ingredient.amount()- VeinMiner disabled by default — setarena.builtin-veinminer: trueto restore previous behaviour - All other changes are backwards-compatible with existing saves, ability YAMLs, and config.yml ---4.5.9HungerGameSSS 4.5.9Apr 24, 2026 [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 withplayer.hasPermission("hg.admin"). The correct node — defined inplugin.ymland fixed for commands in 4.1 (bug M-07) — ishoplitebr.admin. Any operator who granted thehoplitebr.adminpermission explicitly (without OP) received no bypass; conversely,hg.admingrants that had been assigned in a permissions plugin incorrectly bypassed ability checks. Fix: changed check toplayer.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) TheAbilityContextobject 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 mutableboolean cancelledfield withisCancelled()andsetCancelled(boolean)accessors. The field defaults tofalse. Abilities can now callctx.setCancelled(true)to mark a context as consumed, and other abilities/listeners can checkctx.isCancelled()before acting. - BUG-OD-02 · `ObsidianDagger` — deprecated `getTargetBlock(null, range)` + 1-tick meteor trail task + hardcoded `sendMessage` calls (ObsidianDagger.java) Three independent issues inperformRightClick: 1.player.getTargetBlock(null, TARGET_DISTANCE)— passingnullfor the transparent-block set is deprecated in Paper 1.21 and emits a compile warning. Replaced withplayer.getTargetBlockExact(distance, FluidCollisionMode.NEVER)with arayTraceBlocksprimary path for accurate targeting. 2. The meteor particle trailBukkitRunnableran at period1L(every tick). A falling meteor moves slowly enough that2L(every 2 ticks) produces visually identical results at half the server-side task overhead. 3. Twoplayer.sendMessage("§...")calls bypassed the Adventure component API (italic rendering issue) and the i18n system. Replaced withplayer.sendActionBar(Component)usingLegacyComponentSerializer, consistent with the pattern used throughout other abilities since 4.5.5.Changed
-pom.xml— version4.5.8→4.5.9. -plugin.yml— version4.5.8→4.5.9; description updated. ---4.5.8HungerGameSSS 4.5.8Mar 21, 2026 HungerGamesSSS v4.5.8 — Legend Rewrite Pass
- 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 - FixedBug Fixes (13 issues)
loadPlayerStats()blocking main thread on player join → now async - FixedsavePlayerStats()overwriting real stats with zeros on every join - Fixed UpdateManager HTTP connection hanging indefinitely when Modrinth unreachable
- ChainsawSword — removed (replaced by Crimson Chainsword's new design) - DeathScythe — removed (replaced by Reaper Scythe's new design)Removed
| 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 | TypeLegend Rewrites (12 weapons)
/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 |
- `/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:New Systems
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
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)Recipe Overhaul
4.5.7HungerGameSSS 4.5.7Mar 20, 2026 [4.5.7] — Full Bug Sweep Pass 4 (2026-03-20)
Fixed — 13 issues across 14 files
#### High - BUG-REG-01 · 8 ability classes — `registerEvents()` in constructor causes double event-handling on reload (CloudSword.java,VoidStaff.java,WitherSickles.java,Excalibur.java,EmeraldBlade.java,MidasSword.java,VillagerWand.java,ChainsawSword.java,HypnosisStaff.java) Each of these abilities calledBukkit.getPluginManager().registerEvents(this, plugin)inside their constructor. On plugin reload,AbilityRegistryinstantiates 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 allregisterEvents()calls out of constructors and intoAbilityRegistry.register(), which is called exactly once per ability instance.AbilityRegistry.register()now checksability instanceof Listenerand registers automatically, so abilities only need to implementListener— no manual registration needed. - BUG-OD-01 · `ObsidianDagger` — standalone passive `BukkitRunnable` leaks on reload (ObsidianDagger.java)startPassiveTask()spawned a newBukkitRunnableon 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: removedstartPassiveTask()entirely. Low-health Resistance passive migrated topassiveTick(), driven by the singleUnifiedPassiveTickerinAbilityManager. - BUG-HS-01 · `HypnosisStaff` — minionTask has no reference, cannot be cancelled on shutdown (HypnosisStaff.java)startMinionTask()spawned aBukkitRunnablebut discarded the returnedBukkitTaskreference. 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 asprivate BukkitTask minionTask. Addedcleanup()override that cancels the task and callscleanupMobs()for every tracked owner, removing all controlled mobs from the world. - BUG-GH-01 · `GolemHammer` — `disable()` is never called, passiveTask never cancelled (GolemHammer.java)GolemHammerstored its passive task in a field and provided adisable()method to cancel it, but nothing ever calleddisable()— notAbilityManager.shutdown(), notMain.onDisable(). The task ran forever after plugin disable, checking and modifying knockback-resistance attributes on every online player. Fix: renameddisable()tocleanup()(implementing the newAbility.cleanup()contract) so thatAbilityRegistry.shutdownAll()picks it up automatically.disable()is kept as a@Deprecateddelegate 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 inBukkit.getScheduler().runTaskAsynchronously(). - BUG-JOIN-02 · `PlayerJoinListener` — `savePlayerStats()` immediately after `loadPlayerStats()` overwrites DB stats with zeroes (PlayerJoinListener.java)savePlayerStats()was called one line afterloadPlayerStats()with the comment "Ensure record exists". BecauseloadPlayerStats()is now async (and was previously also a blocking call that hadn't finished before the save began),PlayerDatastill 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 erroneoussavePlayerStats()call. New player records are created correctly by theON CONFLICT DO UPDATE/INSERT OR REPLACEupsert inDatabaseManagerthe 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 standaloneBukkitRunnabletasks that nothing cancelled on shutdown.DeathNotehad a workingcleanup()method but it required a specific cast inMain.onDisable()— easy to break during refactors. Fix: addeddefault void cleanup() {}to theAbilityinterface. AddedAbilityRegistry.shutdownAll()which iterates all registered abilities and callscleanup()on each.AbilityManager.shutdown()now delegates toshutdownAll()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, andmaxPlayerswere allpublic. 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 toprivate. Added missing accessor methods (getHologramMap(),getHolograms(),getOriginalBlocks(),getBlockQueue(),getTemporaryLegendaries(),getActiveLegendaries(),setActiveLegendaries(),getNetherWorld(),setNetherWorld()). Updated all call-sites inArenaManager,ArenaListener,DungeonManager, andMatchServiceto use the new accessors. - BUG-UM-01 · `UpdateManager` — missing connection timeout causes async thread to hang indefinitely (UpdateManager.java)HttpURLConnectionwas opened with noconnectTimeoutorreadTimeout. 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: addedconn.setConnectTimeout(5000)andconn.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(), andbuildStyleSpeedSilver()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— version4.5.6→4.5.7. -plugin.yml— version4.5.6→4.5.7; description updated. ---4.5.6HungerGameSSS 4.5.6Mar 20, 2026 [4.5.6] — Bug Sweep Pass 3 (2026-03-20)
Fixed — 5 issues across 5 files
#### High - BUG-PM-01 · `PlayerManager` / `MatchService` / `WithdrawCommand` — stolen heart item is unclickable after Component-API migration (PlayerManager.java,MatchService.java,WithdrawCommand.java)PlayerManager.onPlayerInteractidentified stolen hearts by comparingmeta.getDisplayName()to the language-file string. After the 4.5.4 fix migrated item names tometa.displayName(Component), the legacygetDisplayName()call returns""— the comparison always failed and hearts could never be consumed. Fix: aNamespacedKeyPDC tagstolen_heartis now written to every heart item on creation (MatchServiceandWithdrawCommand).PlayerManagerreads the PDC tag instead of the display name. - BUG-EB-01 · `EnderBow` — position swap has no team check (EnderBow.java)performProjectileHitswapped the shooter and any hitLivingEntityunconditionally. Shooting a teammate teleported them to the shooter's position. Fix: addedisFriendlyFirecheck 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()usedBukkit.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 fourbroadcastMessagecalls withplugin.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 theColorUtilimport 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— version4.5.5→4.5.6. -plugin.yml— version4.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 whiletimer ∈ (grace, main]and Phase 2 whiletimer ∈ (main−60, main]. During the last 60 s of the main phase both conditions were true, so Phase 2 calledborder.setSize()immediately after Phase 1 — resetting the border back tomiddleSizeon every tick and then fast-shrinking todmSize. 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()calledfeastManager.cleanup(arenaName)which removed feast chests but did not clear thefeastSpawnedguard set inFeastManager. On the next match the guard was still set, sospawnFeast()was never called again for the lifetime of the server. Fix: changed the call tofeastManager.resetArena(arenaName)which calls bothcleanup()andfeastSpawned.remove(). - BUG-CD-01 · `MatchService` — countdown cancels immediately because `getGamePlayers()` is empty during `STARTING` state (MatchService.java) The not-enough-players check instartCountdownused:arena.getGamePlayers().values().stream().filter(GamePlayer::isAlive).count() < 2gamePlayersis not populated until the match transitions toPLAYING, soaliveCountwas always 0 → the countdown broadcast "not_enough_players" and cancelled on the very first tick. Fix: replaced the alive-count check witharena.getPlayers().size() < 2, which counts the raw joined-player list that is populated duringSTARTING. #### Medium - BUG-AB-04 · `DeathNote` — `sendActionBar(String)` deprecated on Paper 1.21 (DeathNote.java) The progress bar was sent viaplayer.sendActionBar(String), a deprecated overload removed in newer Paper builds. Fix: wrapped the string withLegacyComponentSerializer.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 withLegacyComponentSerializer.legacySection().deserialize().Changed
-pom.xml— version4.5.4→4.5.5. -plugin.yml— version4.5.4→4.5.5. ---4.5.4HungerGameSSS 4.5.4Mar 19, 2026 Fixed:
- 8+ missing message keys, CloudSword stutter, PoseidonsTrident thrown hit - Legend name + lore had italic — fix all,use Paper Component API4.5.2HungerGameSSS 4.5.2Mar 18, 2026 [4.5.2] — Artemis Bow & Passive Ticker Fix Pass (2026-03-18)
Fixed — 8 issues across 5 files
#### High - AB-OPEN-01 · `ArtemisBow` — memory leak: unbounded homing-arrow runnables accumulate on rapid fire (ArtemisBow.java) Each call toperformProjectileLaunchspawned 5 independentBukkitRunnableinstances (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-playerAtomicIntegercounter (activeArrowsmap, 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 onperformQuitandperformDeath. - AB-OPEN-02 · `ArtemisBow` — `performProjectileHit` deals lightning damage without team check (ArtemisBow.java) After BUG-10 was fixed (switched tostrikeLightningEffect+ manualtarget.damage()), the new manual damage call had noisFriendlyFireguard. Result: Artemis Bow arrows could deal lightning damage to teammates. Fix: addedif (target instanceof Player tp && isFriendlyFire(shooter, tp)) return;before callingtarget.damage(). Also added a null-guard: ifprojectile.getShooter()is not aPlayer, 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 fulldistanceSquaredscan to find the closest valid target. Search radius is now configurable viasky_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: addedextraArrow.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 newBukkitRunnableon 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: removedstartPassive()entirely. Night Vision, Invisibility-while-sneaking, and Fire Aura logic migrated topassiveTick()— driven by the singleUnifiedPassiveTicker. - 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 topassiveTick(). - 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 topassiveTick(). The ammo / shoot system is unaffected — it correctly uses per-useBukkitRunnableinstances that self-cancel. #### Low - plugin.yml — `api-version` set to `4.4.1` (invalid format) (plugin.yml) Paper requiresapi-versionto be a major.minor string (1.21), not a plugin version string. An invalid value causes a warning on every server start. Fix: changedapi-version: 4.4.1→api-version: 1.21.Changed
-pom.xml— version4.5.1→4.5.2. -plugin.yml— version4.5.1→4.5.2;api-versioncorrected to1.21; description updated. ---4.5.1HungerGameSSS 4.5.1Mar 15, 2026 [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 inperformProjectileLaunch, then aBukkitRunnablewas scheduled 1 tick later. By the time the runnable ran,projectile.isValid()wasfalse→ instant cancel → ability only granted invisibility, nothing else happened. Fix: stop callingremove(). Instead setarrow.setPickupStatus(DISALLOWED),setGravity(false),setDamage(0)so the arrow flies invisibly. The tracking runnable now checksisValid() || isOnGround() || isDead()and callsarrow.remove()itself. #### High - BUG-FY-02 · `FountainOfYouth` — inverted team check heals enemies, skips teammates (FountainOfYouth.java)isFriendlyFirereturnstruefor teammates. The conditionif (isFriendlyFire(player, target)) continuewas 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: movedportalCDs.put(...)inside theif (connected)branch only. - BUG-CC-03 · `CorruptedCrossbow` — extra bolts missing `hg_ability` metadata, no hit effects (CorruptedCrossbow.java) Extra bolts were taggedcorrupted_extraandcorrupted_boltbut nothg_ability.AbilityManager.handleProjectileHitonly dispatchesperformProjectileHitwhenhg_abilityis present. Result: extra bolts dealt only vanilla arrow damage with no Poison or Weakness effects. Fix: addedextra.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)incrementsticks0→1→2→3→4 then cancels. Damage condition wasticks % 20 == 0— onlyticks=0satisfies this → 1 damage tick instead of 5. Fix: removed% 20 == 0check. 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 noisFriendlyFireguard, allowing teleport behind allies. Fix: addedif (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 calledplayer.getLocation()lazily — waves diverged if player moved during the 16-tick animation. Fixed: capturecastLoc = player.getLocation().clone()before the loop. (2) NoperformQuit/performDeathhook — Ravager persisted in the world after the player disconnected or died. Fixed: addedactiveRavagersmap +dismountAndRemove()called on both events. - BUG-DN-01 · `DeathNote` — passive task runs every tick (20×/s), expensive raytracing (DeathNote.java)runTaskTimer(1L, 1L)= 20rayTrace(range:50)calls per player per second. With 10 players = 200 raytrace/s. ChangedTASK_PERIODfrom1Lto3L(~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).onEntityDeathchecksnow <= 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) Ifsoul_blast_soulswas 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,dualWieldActivekept the UUID entry, blockingequipOffhandfrom re-running. FixedonInventoryClickto detect this state and calldualWieldActive.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 topassiveTick()hook consumed by the singleUnifiedPassiveTickerinAbilityManager.startPassive()and its runnable removed entirely.Changed
-pom.xml— version4.5.0→4.5.1. -plugin.yml— version4.5.0→4.5.1; description updated. ---4.5.0HungerGameSSS 4.5.0Mar 15, 2026 [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-CLICKtoggles 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. -StaffModeenum 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)atEventPriority.HIGHEST(concept from DemoRaHoplite) — 100 % damage blocked for the entire 5 s duration. - Attacker hearsIRON_GOLEM_HURTsound when a hit is deflected. - Reflection + projectile deflect mechanics preserved from the old version. -activeInvincibilitymap with expiry timestamp replaces potion effect check. -isInvincible()guard added soperformDamaged()(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. Noamount: 2usage 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,PlayerSwapHandItemsEventall 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 time7 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'scooldown_seconds: 30for the equivalent weapon. This makes ammo management meaningful — players must choose when to spend their 4 shots. - Between-shot cooldown tightened to800 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 toWITHER_DEATH(thematic) instead ofBEACON_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 show30s reloadand ammo dots. -pom.xml— version4.4.1→4.5.0. -plugin.yml— version4.4.1→4.5.0; description updated. ---4.4.1HungerGameSSS 4.4.1Mar 13, 2026 [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 usedplayer.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-nativeplayer.sendActionBar(Component). BungeeCord imports (net.md_5.bungee.*) removed. AdventureLegacyComponentSerializerused 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 withColorUtil.colorize(s).ColorUtilwas rewritten to useLegacyComponentSerializer.legacyAmpersand()internally while still returning a §-codedStringso all downstreamsendMessage/setDisplayNamecall-sites work unchanged. AColorUtil.strip()convenience method was also added using Adventure'sPlainTextComponentSerializer. - L-03 · `Player.setResourcePack()` deprecated on Paper 1.21 (ConnectionListener.java) BothsetResourcePack(url)andsetResourcePack(url, hash)overloads are deprecated. The replacement is Adventure'sResourcePackRequest/ResourcePackInfoAPI, sent viaplayer.sendResourcePacks(request). ConnectionListener now builds aResourcePackRequestwith an optionalrequiredflag and configurable prompt text (see config keysresource-pack.requiredandresource-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 resourceloot.yml.LootTableManagernow callsplugin.saveResource("loot.yml", false)on first run then loads viaYamlConfiguration. Areload()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)buildUndergroundDungeonandbuildAncientMineshaftwere one-line delegates tobuildCryptandbuildGoldMinewith 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 tofalseto remove the duplicates:dungeons.underground.enabled: falseanddungeons.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, thePlayerJoinEventhandler 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.GamePlayergains alastLocationfield updated byArenaListener.onPlayerMove()on every block-level movement. 2.ConnectionListener.onPlayerJoin()now callsMatchService.restoreSession()one tick after join to re-apply scoreboard, bossbar, and game mode. 3. If the rejoining player was alive, they are teleported togp.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 104.3HungerGameSSS 4.3Mar 13, 2026 [4.3] — Stabilization Patch 3
Fixed
#### High - H-04 · `FeastManager` — double announce + possible double-spawn (FeastManager.java) Theannounce-minuteslist inconfig.ymlpreviously included both20and19, 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 == 0at the moment the PLAYING state begins, andfeastSeconds - 0 * 60 == 0— meaning any 0-minute entry in the list would fire instantly. Fix: GuardtimerSeconds <= 0returns immediately. AddedfeastSpawnedset (ConcurrentHashMap-backed) so the feast spawns exactly once per match regardless of how many scheduler ticks land on the boundary second. AddedresetArena(name)to clear the flag between matches. - H-06 · `DungeonManager.getMobHP()` fallback `40.0` vs config `60.0` (DungeonManager.java) Theconfig.ymldeclareddungeons.mob-hp: 60.0as the intended default, but the code fallback was40.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 to60.0. #### Medium - M-04 · `Excalibur` — reflection hit dungeon mobs, bypassed team system (Excalibur.java)performDamagedreflected against anyLivingEntityattacker. 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 forPlayerattackers). Reflection is a PvP mechanic; mob attacks should not trigger it. Changed the guard frominstanceof LivingEntity attackertoinstanceof 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)rotationAnglewas incremented byrotationSpeedon every passive tick with no upper bound. A 32-bit float mantissa has 24-bit precision; at 25°/tick × 20 ticks/s the angle exceeds2²⁴in roughly 18 hours of continuous operation, after whichrotateY(Math.toRadians(angle))silently produces garbage rotation matrices and the thrown hammer stops orbiting correctly. Both increment sites now use% 360fto 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;maxVeinSizeis now read from config on everyBlockBreakEventand passed as a parameter tofindVein(). - M-08 · `ArenaListener` — duplicate no-arg constructor using static `Main.getInstance()` (ArenaListener.java) A second constructorpublic ArenaListener()accessedMain.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 aSELECTon 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 withgetPlayerStatsAsync(UUID)returningCompletableFuture<Map<String,Object>>dispatched to the Bukkit async scheduler. The original synchronous method is kept as@Deprecated getPlayerStats()(delegates togetPlayerStatsSync) for any call-sites that already run on async threads. - M-10 · `PerformanceOptimizer.toggleMonitoring()` always returned `true` (PerformanceOptimizer.java) The implementation wasreturn activeTasks.get() >= 0— anAtomicIntegeris always ≥ 0, so the method always returnedtrueregardless of monitoring state. AddedAtomicBoolean monitoringEnabled(defaulttrue);toggleMonitoring()now inverts the flag and returns the new state. #### Low - L-06 · `AbilityDispatcher.LEGEND_KEY` static field initialised before `onEnable()` (AbilityDispatcher.java) The fieldprivate 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) causedAbilityDispatcherto be loaded beforeMain.onEnable()completed,getInstance()returnednulland every subsequent ability dispatch threw NPE. Changed to lazy initialisation via a privategetLegendKey()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 instartCornucopiaPhase2(). 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 calloriginalBlocks.put()to record every block they place, enabling full restoration on arena reset.buildCornucopia()calledarena.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. Theclear()call is removed;CornucopiaBuilderalready appends to the map with individualput()calls. - L-10 · `GameTask` extends `BukkitRunnable` but is never scheduled — double-tick risk (GameTask.java)GameTaskwas a deadBukkitRunnablesubclass. The arena tick is driven entirely byArenaManager.tick()via the global loop inMain.onEnable(). If a future developer saw the class and scheduled it directly, every arena would tick twice per second.GameTask.run()now throwsUnsupportedOperationExceptionimmediately, surfacing the bug during development rather than silently corrupting timer state.4.1HungerGameSSS 4.1Mar 13, 2026 [4.1] — Bug-Fix Patch 1
Fixed
#### Critical - C-03 · `arena.max-players` default value (config.yml) Changed the default from1000to24. 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 prematurecallEvent(new ArenaStartEvent(arena))call insidestartMatch(). The event is now fired exactly once, insidereleasePlayers()when the state transitions toPLAYINGand the game actually begins. Previously, any listener hooked toArenaStartEvent(scoreboards, rewards, third-party integrations) would execute twice. - C-05 · `DeathNote` — non-thread-safe `HashMap` in passive task (DeathNote.java) ReplacedHashMapwithConcurrentHashMapfor bothprogressMapandtargetMap. These maps are written by the 1-tick passiveBukkitRunnableand concurrently removed byonQuit/onDeathevent callbacks. - C-04 · `Arena.spectators` — non-thread-safe `ArrayList` (Arena.java) Changed toCollections.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 callinggetOnlinePlayers()server-wide. In multi-arena setups, players in other arenas would receive a spuriousshowPlayer()call. BotharmorMapandvanishedPlayersupgraded fromHashMaptoConcurrentHashMapto eliminate race conditions between the timed-reveal BukkitRunnable, onDeath, and onQuit callbacks. #### Medium - M-07 · Wrong permission node in `BlockBreakListener` (BlockBreakListener.java) Changedhg.admintohoplitebr.adminto match the permission declared inplugin.yml. Admins withhoplitebr.admincould not break blocks inside an arena during WAITING / STARTING / ENDING phases.4.0HungerGameSSS 4.0Mar 12, 2026 [4.0] — 2026-03-12 — Legendary Ability Audit & Fixes
- 🛡️ ReinforcedElytra never activated (Critical) —Bug Fixes — Legendary Abilities
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()calledplayer.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 replacingsendMessage()withsendActionBar()and rendering a proper progress bar (colored block chars + target name). - 💊 FountainOfYouth healed all online players (Major) — The heal loop iterated overBukkit.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 overarena.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 addingAbilityManager.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 withisAbilityItem(player.getInventory().getBoots(), "hermes_boots"). - 🔨 MidasSword used deprecated `AttributeModifier` constructor (Major) — The oldAttributeModifier(UUID, String, double, Operation, EquipmentSlot)constructor is removed in Paper 1.21+. Replaced with the currentAttributeModifier(NamespacedKey, double, Operation, EquipmentSlotGroup)API; modifier key stored as aNamespacedKeyfield to allow stable removal on each upgrade. - 🌿 EmeraldBlade used deprecated `AttributeModifier` constructor (Major) — Same issue as MidasSword.updateItemData()callednew 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 stableNamespacedKeyfield (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. AddedperformQuit()andperformDeath()overrides that remove the player's entries from both maps. ---3.9HG 3.9Mar 12, 2026 [3.9] — 2026-03-12 — Bug Fix Release
- 💀 Game never ended after kills (Critical) —Bug Fixes
MatchService.handleDeath()delegated toPlayerDeathListenerto track the death but never calledgp.setAlive(false)on theGamePlayerobject. BecausecheckWin()usesGamePlayer.isAliveas 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 ofhandleDeath(). - 📦 Stray `Mjolnir.java` causing class ambiguity — A leftover copy ofMjolnir.javaexisted atme/hoplite/hungergamessss/ability/impl/Mjolnir.javafrom a package rename. It still imported classes from the currentme.duong2012gnamespace, which caused class-loading ambiguity at runtime. The file also contained outdated logic (isFriendlyFirereplaced by a manual team equality check). Deleted. - 🔢 `pom.xml` version out of sync with `plugin.yml` —pom.xmldeclared3.5whileplugin.ymlwas3.9. This meant compiled JARs reported the wrong version in server logs and Modrinth update checks compared against the wrong baseline. Bumpedpom.xmlto3.9. ---3.76Feb 24, 2026 fixed:Double death processing fix
gamesPlayed database persistence
onDisable stats flush
Mjolnir lightning effect only
isAbilityItem security fix
Missing YAML files added
3.7Feb 24, 2026 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
3.67HungerGameSSS 3.67Feb 23, 2026 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.3.36HungerGameSSS 3.36Feb 23, 2026 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.
3.1HungerGameSSS 3.1Feb 21, 2026 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.3.0HungerGameSSS 3.0Feb 21, 2026 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.2.29HungerGameSSS 2.29Feb 20, 2026 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.2.28HungerGameSSSFeb 19, 2026 fixed : 12 critical bug 22 Hight bug 21 Medium bug 1 low bug Total: 56 bug2.27Cornucopia loot balanceFeb 17, 2026 2.26HungerGameSSS 2.26Feb 17, 2026 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.2.25HungergameSSS 2.25Feb 17, 2026 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.2.24HungerGameSSS 2.24Feb 17, 2026 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.2.23Bug fixedFeb 16, 2026 2.22HungerGameSSS 2.22Feb 16, 2026 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 recipes2.2Legendary Expansion & Rebalance UpdateFeb 16, 2026 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.2.11HungerGameSSS 2.11Feb 15, 2026 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.2.1HungergameSSS 2.1Feb 15, 2026 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.2.07HungerGameSSS 2.07Feb 14, 2026 1Core 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
2.06HungerGameSSS 2.06Feb 13, 2026 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.
2.05Item recipes fixFeb 12, 2026 2.04HungergameSSS 2.04Feb 11, 2026 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.2.02HGSSS 2.02Feb 10, 2026 2.01HGSSS 2.01Feb 10, 2026 ability,tabcomplete fix2.0The king comebackFeb 9, 2026 HungerGamesSSS v2.0 - Major Feature UpdateNew 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.
1.24Jan 31, 2026 sry, i will drop this project1.23HungergameSSS 1.23Jan 24, 2026 fix bug and add some legend weapons1.22HungergameSSS 1.22Jan 23, 2026 fix bug and add ru an fr language1.21HGSSS 1.21Jan 22, 2026 fix bug1.20HGSSS 1.20Jan 22, 2026 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.
- 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).Structure System Overhaul
- 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.Performance & Optimization
- 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.Bug Fixes
1.19HungerGameSSS 1.19Jan 19, 2026 1.18HungerGameSSS 1.18Jan 19, 2026 1.17HGSSS 1.17Jan 18, 2026 1.16hungergame 1.16Jan 14, 2026 some upgrade1.15HungerGameSSS 1.15Jan 13, 2026 Hunger Games Core - ChangelogVersion 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 ).1.14HungerGameSSS 1.14Jan 10, 2026 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.1.13HungerGameSSS 1.13Jan 9, 2026 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.1.12HG beta 1.12Jan 9, 2026 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).1.11HungerGameSSS 1.11Jan 8, 2026 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.1.10HungerGameSSS 1.10Jan 7, 2026 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.1.09HungerGameSSS 1.09Jan 6, 2026 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.1.08HungerGameSSS 1.08Jan 6, 2026 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.1.07HungerGameSSS 1.07Jan 5, 2026 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.1.06HungerGameSSS 1.06Jan 5, 2026 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.1.05HungerGameSSS 1.05Jan 5, 2026 1.05: Player spawn fixed Legendary hologram fixed1.04HungerGameSSS 1.04Jan 4, 2026 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.1.03HGSSS 1.03Jan 4, 2026 bug fixed: -error front text -beautyful cornucopia1.02HGSSS 1.02Jan 3, 2026 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/of1.01HGSSS 1.01Jan 3, 2026 Đâ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.
Similar projects
Plugin →Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
Emotecraft
Create your own emotes in Minecraft.
7.5MSueta
Simple Tpa
A simple tpa plugin which sends requests
5.4MSueta
Common Network
Forge and Fabric Unified Networking Solution
3.9MSueta
Set Home
A lightweight plugin for players to set their homes.
3.8MSueta