Tier 0: BO2 mechanics fidelity (numbers, curves, stuck-zombie fix)#166
Open
ikbenignace wants to merge 10 commits into
Open
Tier 0: BO2 mechanics fidelity (numbers, curves, stuck-zombie fix)#166ikbenignace wants to merge 10 commits into
ikbenignace wants to merge 10 commits into
Conversation
…spawn selection, thread-safety) Cherry-picks/finishes three items from skbeh's PR TheTurkeyDev#155 that were not yet on master: * Shift-to-repair barriers (resolves TheTurkeyDev#97): new BarrierRepairListener lets a player repair a nearby barrier by holding sneak, alongside the existing sign-break repair. Reimplements the PR's listener with a corrected detection box - the PR left a "// TODO: incorrect subtract" on its asymmetric bounding box; this uses a symmetric cuboid centred on the repair sign. * Rewrite SpawnManager.getNearestPoints: replaces the manual insertion-sort over a parallel POSITIVE_INFINITY distance list with a stream/distanceSquared/limit. Extracted to a package-private static for testing. * Thread-safety: activeActions and isEditingASign are now ConcurrentHashMap. AsyncPlayerChatEvent reads them off the async chat thread while the main thread mutates them. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Migrate from the 20 per-version NMS modules (topping out at an untested 1.21.5) to a single build that runs on Minecraft 26.2 (Java 25 server): - Build against spigot-api 26.2, targeting Java 17 bytecode (26.2's API is Java 17; Java 25 is only needed to run the server). Drop the unused server jar and add jsr305 (26.2 no longer ships javax.annotation). - Replace the 20 NMS support modules with one pure-Bukkit NMSUtil_Modern (Lidded + Player#sendBlockDamage). Keep the INMSUtil seam and version dispatch so older versions can be re-added later as a module + a case. - Fix enum/registry renames surfaced by compiling against 26.2: Attribute.GENERIC_* -> *, PotionEffectType.SLOW -> SLOWNESS, Particle REDSTONE/SPELL_WITCH/CRIT_MAGIC/SMOKE_NORMAL/FIREWORKS_SPARK -> DUST/WITCH/ENCHANTED_HIT/SMOKE/FIREWORK, EntityType.FIREWORK -> FIREWORK_ROCKET, GameRule.DO_DAYLIGHT_CYCLE -> ADVANCE_TIME. - Route config-driven Sound/Material lookups through a new Compat helper (graceful fallback + warning instead of crashing on a stale name). - Bump plugin.yml api-version to 1.21. Fix a ClassCastException that corrupted game state: Door.closeDoor cast a block to Sign without checking. A wall sign mounted on a door block pops off when the door opens (block -> air), so closeDoor threw inside endGame and aborted the entire game-end cleanup, leaving the player "still in game" with broken teleport-back and rejoin state. - Door.closeDoor: guard the cast and recreate the sign if it popped off. - Game.endGame: isolate each door's close so one failure cannot abort the rest of the cleanup. - Guard the remaining unguarded (Sign) casts in SignManager (runs on a repeating task) and PlayerChatListener. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 0a: two-phase zombie HP curve (linear to r9, x1.1 compounding after) in RoundSpawner.zombieHealth(), wired into both spawners. TDD'd. - Config foundation: expose every BO2 tunable in config.yml + ConfigSetup (board scaling, attack cooldown, kill bonuses, perk rewire multipliers, knife round, dog scaling, power-up cap/refresh, PaP re-pack, teleporter). - Default tweaks: zombieDamage 9->10 (2-hit down), healTime 5->2.5. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…lat knife Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…d, roster+kits Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…efill Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Zombies that make no progress for zombieStuckSeconds (default 6) are teleported to the door-open spawn point nearest the targeted player so they can resume pathing. Fixes the common "1 zombie left wedged on geometry" round hang. Pure accumulator SpawnManager.updateStuckTicks is TDD-covered; both thresholds are config-exposed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This was referenced Jun 26, 2026
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Tier 0 — Black Ops 2 mechanics fidelity
First tier of a multi-PR effort to make the plugin's core numbers/mechanics match classic BO1/BO2 Zombies. Mechanics-only — no new content systems (those come in later tiers). Every BO2 value is exposed in
config.ymlso server owners can tune to taste.What's in this PR
RoundSpawner.zombieHealth.24 + 6·(players-1), rounds 1-4 ramp.2/.4/.6/.8, round 5+round·0.15·boardMax.zombieDamage9→10 = 2-hit down (≈5 with Jugg).HP/wave, never clean).fire_delayretuned to real BO2 RPM (~4× faster; 1200-RPM/20-TPS ceiling documented) + per-gunreload_time.zombieStuckSeconds(default 6) is teleported to the nearest reachable spawn — fixes the common "1 zombie left wedged on geometry" round hang.Testing
Pure game logic is extracted into testable statics and covered by a JUnit harness (49 tests, all green): HP curve, board/round/dog scaling, kill points, reload/fire-rate ticks, knife one-shot band, power-up cap, teleporter cooldown, stuck accumulator, plus a guns.json/kits.json data validator. Build: JDK 21, target 17 (spigot-api 26.2). Bukkit-glue paths are compile-verified; an in-game playtest is still recommended before merge.
🤖 Generated with Claude Code