COWMODSКаталог модов

Gangland Warfare – GTA-Style Crime

Turn your server into a living crime world with gangs, guns, bounties, and progression

Автор: LuckyRaven3681обновлён 22 апр. 2026 г.
ЭкономикаСнаряжениеМеханики игры

Описание

🏙️ Gangland Warfare

Turn your server into a living crime world. Build gangs, fight rivals, wield a full arsenal of firearms, blades, and explosives, drive the streets, and outrun (or become) the law.


❓ Why Gangland Warfare?

Gangland Warfare is not just another gun or PvP plugin. It is a complete crime ecosystem designed for GTA-style, roleplay, and competitive servers.

Players don't just fight — they:

  • 🤝 Create and manage gangs with internal hierarchies and shared banks
  • 💰 Control power through money, reputation, and territory
  • 🎯 Hunt players with bounties and wanted levels
  • 📈 Progress through levels, ranks, and loot
  • 🚔 Survive police pursuit or don a badge and become the law
  • 🚶 Share the streets with civilians — rob them, or answer for it
  • 🛒 Trade with stationary Trader NPCs — buy, barter, sell, or tip
  • 🏦 Deposit cash with Banker NPCs across a four-tier balance ladder
  • 🚔 Get arrested — then pay bail, bribe the cop, or serve your time
  • 🚗 Drive cars, fly jetpacks, and refuel at the pump

⭐ Core Features

1. 🔫 Advanced Weapon System

A fully custom weapon engine entirely separate from vanilla combat, now with five weapon categories.

  • Five weapon categories — guns, melee, incendiary, biological, and throwable — each with its own action class, YAML schema, and physics
  • Configurable weapons via individual YAML files — each with its own stats, sounds, and behavior
  • Multiple fire modes: single, burst, and full-auto with per-shot cooldowns
  • Ammo types and reload mechanics — weapons go dry, magazines must be restocked
  • Weapon durability that depletes with use
  • Projectile types: bullet, flare, rocket, and spread (shotgun-style)
  • Bullet gravity — shots drop over distance, rewarding range compensation
  • Headshot and critical hit system with configurable chances and bonus damage
  • Bullet penetration through blocks and multiple entities with damage falloff
  • Ricochet off configurable surface materials — bounces along the block normal
  • Accuracy spread that increases as you fire and resets over time
  • Recoil patterns that push the camera per shot
  • Bullet flyby and impact sounds heard by nearby players
  • Weapon modifiers: armor piercing, flat damage, block breaking, and bullet tracers
  • Block regeneration — broken blocks can restore, uncrack, or stay destroyed per weapon (RESTORE, CRACK_ONLY, DESTROY)
  • Melee weapons — knives, machetes, and crowbars with range, knockback, and per-hit cooldowns
  • Incendiary weapons — flamethrower-style cone fire spray that ignites everything in its arc
  • Biological weapons — hold-to-charge syringe guns that apply potion effects on impact
  • Throwables — grenades, molotovs, flashbangs, smoke grenades, and tomahawks, with bounce physics, fuse timers, blast radius, and stackable UUIDs
  • In-world holograms for dropped weapons
  • 🎵 Resource pack integration for custom sounds

2. 👥 Gang System

Gangs are the social backbone of the plugin.

  • Create a gang for a configurable fee — the creator becomes the owner
  • Invite players, promote and demote members, and kick lower-ranked members
  • Tiered rank hierarchy with custom permission inheritance — Recruit up to Leader
  • 🤜🤛 Gang alliances with bidirectional agreement and friendly-fire protection
  • Shared gang bank with a per-member contribution tracker
  • Proportional bank payout when a gang is disbanded
  • Customizable gang name, display name, color, and description
  • Gang-restricted waypoints that act as private safe zones

3. 💵 Economy & Banking

Every player has two separate money pools — cash on hand and a tiered bank balance — plus a Banker NPC that serves as the physical deposit counter.

  • Personal cash balance — spent on gang creation, teleportation, bounties, trader buys, and more
  • Four-tier bank ladder — Basic / Premium / Elite / Vault, each with its own max balance, daily deposit cap, interest rate, death-loss discount, and weekly / monthly free-loan deposits
  • 🏦 Banker NPC — a stationary Citizens NPC that opens the bank UI on right-click; scatter as many as you want without per-NPC configuration
  • 💰 Rolling-window daily cap — deposits are rate-limited over a true 24h window, not until midnight
  • 📈 Continuous interest — bank balance earns a fraction per 24h, clamped at the tier Max_Balance
  • 💀 Death penalty: lose a configurable percentage of your cash (bank balance is safe; higher tiers reduce the loss)
  • BigDecimal money math — bank arithmetic uses BigDecimal so large balances don't drift
  • Cash pickup items — drops are real items players loot, with small / medium / large variations in money.yml
  • Per-source drop rules — Player_Kill, Civilian_Kill, Cop_Kill, etc. each pick a variation, amount range, and drop chance
  • Vault integration support for cross-plugin compatibility
  • Optional player targets on every bank command — /glw bank deposit <amount> [player], /glw bank withdraw <amount> [player]
  • Admin economy commands to deposit, withdraw, set, or reset balances for individual players or all online players

4. 🌟 Bounty & Wanted System

A risk-vs-reward layer on top of all PvP.

  • Kill combos accumulate wanted stars — up to ⭐⭐⭐⭐⭐ with escalating consequences
  • Each star tier spawns more cops and drains money from the player at an increasing rate
  • Stars decay over time, with higher-star players waiting longer between each reduction
  • Attacking a non-hostile civilian now also increments the wanted level
  • Dying immediately clears all wanted stars
  • 💰 Bounties can be placed by players spending their own money or set by admins
  • Kill bounties multiply over time for players on sustained hot streaks
  • Configurable caps on maximum bounty per player
  • /glw wanted clear <player> — admin command to reset stars without killing

5. 🚓 Cops N Crooks — Module Complete

Fully AI-driven police NPCs powered by Citizens, sharing a unified NPC base with civilians. 0.7.5-DEV closes this module — traders, bankers, and bail all land in this release.

  • Officers spawn in the world when a player accumulates wanted stars
  • Five cop tiers — Officer, Sergeant, Lieutenant, SWAT, and Military — each with higher stats and better equipment
  • 🤖 AI state machine: Pursuit → Combat → Cuffing
  • Cops navigate via the shared NPC_Navigation tuning, so path-finding fixes land on cops and civilians in lock-step
  • Lower-tier cops attempt to cuff and arrest; higher-tier cops skip cuffing and go lethal
  • When one cop enters combat range, all nearby cops in the group are alerted
  • Cops fall back to targeting their most recent attacker when no wanted target is in range
  • 3D-aware despawn — cops no longer vanish when you climb a tower or dig a pit
  • Configurable cop weapon pools — vanilla items or custom Gangland weapons
  • Spawner placement system with intelligent fallback for areas without placed spawners
  • Cop count scales with wanted level via a configurable formula
  • CopDeathEvent fires for other listeners to react to fallen officers

6. 🚶 Civilians

A new NPC class that shares the cop AI base — wander, flee, or fight. (Trade moved to dedicated Trader NPCs — see next section.)

  • Civilian types are defined in civilians.yml with per-type entity, health, wearables, item pool, weapon pool, drops, and AI profile
  • Friendly civilians wander and flee from danger; attacking them increments your wanted level
  • Hostile civilians return fire using weapons from their pool
  • Per-type drop chances — friendly and hostile civilians roll loot with distinct probability buckets
  • Combat difficulty profiles — EASY / NORMAL / HARD / DEADLY — scale aim, reaction time, and fire rate
  • Groups bind spawn points to a type with population caps, activation radius, and despawn radius — civilians appear when players walk in range and disappear when the area empties
  • Shared navigation tuning with cops via NPC_Navigation in settings.yml
  • /glw civilian … commands for manual spawn, despawn, and group control

7. 🛒 Trader NPCs & Shop API

Stationary, damageable Citizens NPCs that run full shops.

  • Buy, barter, sell, and tip — four distinct transaction types per trader
  • Six built-in personality traits (easygoing, hotheaded, stubborn, generous, shrewd, timid) with configurable mood gain rates, friend discount, barter policy, and max HP — add your own in trader_traits.yml
  • Per-player mood — positive-only scalar that raises on purchases and tips; trader gives up to Min_Friend_Discount off at full mood
  • Pure-swap barter — no money changes hands on a barter; items are valued against the trader's trait and the shop's category rates
  • Killable traders — Invulnerable: false lets players rob a shop
  • Shop API — the UI, persistence, and transaction pipeline live in a shared gangland-ui/shop-api module for future shop surfaces
  • In-game admin editing — spawn, edit shop key, edit trait, rename via anvil GUI, remove — no YAML wrestling day-to-day

8. 🔒 Jail & Detainment

The outcome of a successful arrest — with four ways out.

  • Cops that successfully cuff a player initiate the detainment sequence
  • Jailed players are held at a configured jail location with seized inventory
  • 💸 Pay bail — charges a cost scaling with wanted level; returns seized items
  • 🤝 Bribe the cop — handcuff-stage bribe (pre-jail) always succeeds if funded; jail-stage bribe rolls against a configured success chance with a fail-penalty sentence extension
  • 💪 Break free — handcuffed players can tap-race their way out (25 taps in 40 ticks)
  • ⏲️ Serve your time — automatic release after a wanted-level-scaled sentence
  • Admins can handcuff, jail, and release players manually
  • Players cuffed at logout are auto-routed to jail on rejoin
  • Every release path funnels through a single ReleasePipeline — seized inventory restoration is consistent

9. 🛻 Gadgets — Cars & Jetpacks

A dedicated gadget module for drivable vehicles and deployable equipment.

  • Cars — drivable vehicles defined in cars.yml with per-vehicle max speed, acceleration, and fuel capacity
  • Every parked car is saved to the database (position, fuel, exhaust side) and rehydrated on boot — curb-side parking survives restarts
  • Wobble animation on idle cars, shift-safe interactions, and dedicated refuel / defuel commands
  • Jetpacks — off-hand-equipped flight gadget with ramped thrust, fuel- per-tick gliding, particle exhaust, and sound effects
  • Empty jetpacks trigger a timed refuel session instead of silently cutting out mid-air
  • Shared fuel component — cars and jetpacks use the same FuelContract, so refuel items and UX are consistent across gadgets

10. 📦 Loot Chests & Rewards

Randomized reward containers placed anywhere in the world.

  • Admins designate any chest, barrel, or shulker box as a loot chest
  • ⏳ A countdown timer ticks down before the chest becomes openable
  • 🔍 Item preview above the chest while it ticks down — no blind clicks
  • Five rarity tiers: Common, Uncommon, Rare, Epic, and Legendary
  • Higher tiers require a lockpick or key — which hovers above the chest as a floating in-world item, resource-pack friendly
  • Drop-chance buckets — per-item COMMON / UNCOMMON / RARE / EPIC / LEGENDARY decide how often each item rolls; tier gating controls which tables a chest can draw from (not individual items)
  • Loot tables contain weapons, ammo, unique items, money, and XP
  • Three built-in loot tables: Street Loot, Military Loot, and Supply Cache
  • Weapon drops land as real weapon items under a floating name hologram
  • Rewards also include a configurable random money and XP amount
  • Level gating — certain tiers require a minimum player level to access

11. 🛡️ Wearables

Custom armor pieces with specialized damage reduction.

  • Wearables sit on top of vanilla armor and plug into Gangland's full damage pipeline
  • Configurable base damage reduction percentage per piece
  • Seven protective traits: REINFORCED, BULLETPROOF, PADDED, TOUGHENED, FIRE_RESISTANT, REACTIVE, and LIGHTWEIGHT
  • Traits from multiple pieces stack for combined protection
  • Durability depletes as damage is absorbed
  • Four built-in pieces: Police Vest, Police Helmet, Gang Jacket, and Heavy Vest
  • Fully configurable via wearables.yml — add, modify, or remove pieces freely

12. 📊 Player Leveling

An XP-based progression system that gates access to higher rewards.

  • Players earn XP through kills, looting, and gameplay
  • Configurable XP formula — early levels are quick, later levels are a meaningful grind
  • Maximum level of 100 by default
  • Skill upgrade system: spend money to purchase upgrades with cost scaling per level
  • Level requirements on loot chest tiers

13. 🗺️ Waypoints & Teleportation

Named teleport destinations placed by admins.

  • Five waypoint types: Spawn, Gang, Safe Zone, Quest, and Global
  • Configurable teleport cost, wait timer, and cooldown per waypoint
  • 🕊️ Safe zones disable PvP for players inside them
  • Gang waypoints are restricted to members of a specific gang
  • Permission nodes auto-generated per waypoint for fine-grained access control
  • Teleport cancels if the player moves or takes damage during the wait timer
  • Chat output includes hover and click events to teleport directly

14. 🪧 Trade Signs

In-world buy and sell signs for weapons and ammunition.

  • Place signs that let players buy or sell weapons and ammo at fixed prices
  • Two sign types: weapon signs and ammo signs
  • Throwables bought from signs stack with looted ones via shared UUIDs
  • No additional plugin is required — works entirely within Gangland Warfare
  • Configurable item, price, and quantity per sign

15. 📋 Scoreboard

Live stat display for players.

  • Animated titles with configurable scroll speed
  • Displays money, level, wanted stars, gang name, and other live values
  • Multiple scoreboard drivers supported

16. 🎒 Unique Items

Special items with controlled inventory behavior.

  • 📱 Phone — permanently in the last hotbar slot, given on join and respawn, cannot be dropped
  • 🔑 Lockpick — consumable required to unlock Rare loot chests
  • 🗝️ Epic Key and Legendary Key — required for Epic and Legendary chest tiers
  • Configurable auto-give on join, slot pinning, drop-on-death, and duplicate rules

17. 🖥️ Server Infrastructure

Backend features for operators and developers.

  • MySQL and SQLite support via HikariCP — selected in settings.yml
  • Beans-based bootstrap — phased dependency-injection pipeline (KERNEL → FILE → DATABASE → CONFIG → LIFECYCLE → LISTENER → COMMAND) with auto-registered @Bean, @ListenerHandler, and @CommandHandler classes
  • YAML validation layer — every loader reports unknown keys with file + line number, so stale settings never silently rot between releases
  • Reload regeneration — missing config sections are rewritten on /glw reload; a missing file is recreated from the jar with an init retry
  • Debug logging block — per-module DEBUG toggle in settings.yml, no JVM flags required
  • Vault permission integration — soft-dep; falls back to the built-in permission system when Vault is absent
  • /glw permissions command for inspecting / granting / revoking permissions in-game
  • /gangland alias for /glw
  • Batched database queries to reduce individual query overhead
  • Automatic periodic data saving and cache cleanup
  • 🌐 Multi-language message support with jar-bundled fallback
  • Resource pack auto-loading on join
  • Custom scoreboard via FastBoard
  • 🧰 Public developer API with events for weapons, cops, civilians, traders, bounty, and more

🚧 Upcoming Features

The following systems are actively in development:

  • 🔐 Safe Cracking Minigame and Advanced Chest Mechanics
  • ⚔️ Gang Attacks and Turf Wars
  • 🏆 Challenges and Competitive Events
  • 🏍️ More Vehicle Types (motorcycles, boats, aircraft)
  • 🏠 Purchasable Houses and Properties
  • 🏦 Player-to-Player Market / Auction House
  • 📜 Quest and Mission System

📋 Requirements

RequirementDetails
Minecraft version1.20+ (tested; earlier versions are partially implemented)
JavaJava 21 or newer
Server platformSpigot (Paper-only APIs are not used)
Required pluginsNBTAPI, Citizens
Optional pluginsPlaceholderAPI, Vault, ViaVersion

📥 Installation

  1. ⬇️ Download the latest JAR from the releases section.
  2. 🛑 Stop your Minecraft server.
  3. 📂 Place the JAR in your server's plugins/ folder.
  4. ▶️ Start the server to generate configuration files.
  5. ⚙️ Configure the plugin under the Gangland_Warfare/ folder.
  6. 🔄 Use /glw reload to apply configuration changes without restarting.

❤️ My Journey

Gangland Warfare is the culmination of 5 years of passionate development, countless hours of recoding, refactoring, and relentless improvement. Originally known as Cubed-GTA, this plugin has been completely rewritten from the ground up with a modular, multi-module architecture to deliver the ultimate GTA-style experience in Minecraft.

What started as a simple concept has evolved into a full-fledged urban warfare plugin through multiple development cycles, periods of burnout, and continuous iteration. Every part of the codebase has been crafted to ensure stability, performance, and an immersive gameplay experience.

Though the full game loop is still being fleshed out, this development build represents a major milestone. Community feedback is appreciated — the comments section is the right place for it. 🙏


🔔 Disclosures

🔄 Automatic Update Checker

On startup, the plugin automatically contacts the SpigotMC API (api.spigotmc.org) every 6 hours to check whether a newer version of the plugin is available. This is a read-only request — no player data or server data is sent. Operators with the appropriate permission are notified in-game if an update is found.

🎨 Automatic Resource Pack Push

If the resource pack feature is enabled in settings.yml, the plugin automatically sends a resource pack download prompt to every player when they join the server. Players are directed to a URL configured by the server administrator.

Players may accept or decline the prompt; declining does not prevent them from playing unless the server admin has enabled the kick-on-decline option.


💬 Support & Feedback

  • 🐛 Bug reports: open an issue on the GitHub repository
  • 🔄 Configuration changes take effect with /glw reload or a server restart
  • 📖 Full documentation is available in the github page

⚠️ This plugin is actively under development. Bugs are expected. Please report them rather than leaving a low rating — every report helps. Don't forget to leave a ⭐⭐⭐⭐⭐ rating if you enjoy it!


All commands use the /glw dispatcher (alias: /gangland).

Последние версии

Все версии →
release

Cops N Crooks – Part 3

0.7.5
22 апр. 2026 г.274Minecraft: 1.20, 1.21, 1.21.11paper, spigot
Скачать
Что нового
# 🚨 Case Closed — v0.7.5-DEV Changelog > *Traders open their doors, Bankers start taking deposits, and the cuffs > finally come off — for a price. Welcome to **Part 3 of Cops N Crooks**, > the release that closes out the module.* --- ## Overview Three systems land and **Cops N Crooks ships as feature-complete**. A stationary **Trader NPC** brings a full buy / barter / sell / tip economy to the street, built on a new shared **shop-api** framework. A **Banker NPC** takes deposits, issues withdrawals, and gates a tier ladder that controls your max balance, daily cap, interest, and weekly / monthly loans. And **bail** finally closes the arrest loop — handcuff → jail → pay-your-way-out (or serve your time and walk). Alongside those, the release ships a real YAML validation layer, a debug logging block, Vault permissions integration, loot-chest polish, and a wave of command ergonomics (tab-completion fixes, a `/gangland` alias, optional player targets on `bank` commands). One feature shipped and was rolled back inside the cycle — see the Ambiguous list. --- ## 📄 Configuration Changes Upgrading from 0.7.4? You'll need to merge in new files and new `settings.yml` sections — or regenerate them by bumping `Config_Version`. **New files shipped in this version:** | File | Purpose | |-------------------------|------------------------------------------------------------------------| | `npc/trader_traits.yml` | Trader personality catalogue (mood rates, barter rules, max health). | | `npc/bank_tiers.yml` | Banker tier ladder — balance cap, daily cap, interest, loans per tier. | | `shop/<shop-key>.yml` | One file per shop. Managed through the in-game admin GUIs. | **New sections added to `settings.yml`:** `Debug` (module-level debug logging toggle), a rewritten `User.Bank` block (rolling-window caps, rename fee), and a new top-level `Detainment` block with nested `Transit`, `Break_Free`, `Handcuff_Bribe`, `Bail`, `Jail_Bribe`, `Sentence`, and `Sounds` sub-blocks. **Removed sections:** per-account bank knobs that are now tier-scoped (max balance, daily deposit limit, interest rate, death-loss discount, weekly / monthly loan amounts) — they live in `bank_tiers.yml` instead. **Required YAML validation:** every loader now rejects unknown keys and reports a line-accurate error. If you'd been silently carrying dead keys from earlier versions, expect a first-boot warning. --- ## ✨ Features ### Trader NPCs A damageable, stationary Citizens NPC that runs a full shop. Placed via an admin command, bound to a **shop key** and a **trait** from `trader_traits.yml`. Right-click opens a buy view; the trader also supports **barter** (item-for-item swap, no money involved), **sell** (you hand items to the trader for cash), and **tip** (spend money to improve the trader's mood toward you). - **Six built-in traits** — `easygoing`, `hotheaded`, `stubborn`, `generous`, `shrewd`, `timid` — each with its own mood rates, barter policy, sell-price ratio, and HP. Define your own by adding a new top-level id. - **Per-player mood** — mood is a **positive-only** scalar. Tipping and successful purchases both push mood up; there's no anger / negative track by design. At max mood the trader gives the configured `Min_Friend_Discount` on buys. - **Barter is a pure item swap** — no money ever changes hands on a barter. The trader values incoming items against the category rates set in the shop file and accepts / rejects based on the trait's `Barter_Price_Ratio`. Turn it off per-trait with `Allows_Barter: false`. - **Sell** — per-category valuation via `Sell_Price_Ratio`. Players can liquidate loot they don't want; server owners tune how generous each trait is per category. - **Item freshness via decorate, not NBT** — newly-delivered shop items are re-decorated on every purchase, so configured lore / display names refresh even if an old YAML shape changed in between. - **Admin editing in-game** — no YAML wrestling needed day-to-day. `/glw trader edit shop <key>` retargets the trader in your crosshair, `edit trait <id>` changes the personality, `edit name` opens an anvil to rename (spaces supported), `remove` deletes the trader you're looking at. - **Trader is damageable by default** — `Invulnerable: false` on the trait makes the NPC killable so you can actually rob a shop. Default traits ship invulnerable; `stubborn` is the example "killable" trait. - **Persistent repository** — traders are saved by the plugin, **not by Citizens' `saves.yml`** (`SHOULD_SAVE = false` at spawn). One source of truth. **New file — `trader_traits.yml` shape:** ```yaml easygoing: Display_Name: "Easygoing" Mood_Per_Tip_Currency: 0.0008 # mood gain per currency unit spent on a tip Mood_Per_Purchase: 0.03 # mood gain on a successful buy Min_Friend_Discount: 0.92 # price multiplier at mood = +1 (0.92 = 8% off) Allows_Barter: true Sell_Price_Ratio: 0.55 # fraction of ask the trader pays when BUYING from the player Barter_Price_Ratio: 1.0 # barter credit per item (1.0 = parity; defaults to Sell_Price_Ratio) Max_Health: 20.0 # half-hearts # Invulnerable: false # (optional) omit for default-invulnerable traits ``` **New commands:** ``` /glw trader create <shopKey> <traitId> [displayName] /glw trader edit shop <shopKey> /glw trader edit trait <traitId> /glw trader edit name /glw trader remove ``` --- ### Shop API Framework The shop UI, persistence, and transaction logic were extracted into a new **`gangland-ui/shop-api`** module so any future shop surface — not just traders — can reuse them. - **Per-shop YAML files** under `plugins/<plugin>/shop/<key>.yml`, scanned on boot and hot-reloaded through the standard `/glw reload` pipeline. - **Typed transaction returns** — `PurchaseResult`, `BarterResult`, `SellResult` replace the old boolean-plus-enum mess. Each carries a clean reason enum plus the outcome payload (item stack delivered, money debited, etc.). - **Shop-level messaging contract** — `ShopMessageContract` and `TraderMessageContract` route every user-facing string back through the `Messages` enum, so every shop / trader line is translatable without feature-module imports. - **Admin GUIs** — shop definitions, buy entries, sell categories, and per-category barter / sell pricing are all editable in-game. Edits round-trip to YAML via `ShopYamlWriter` with zero restarts. - **Shop entries deliver per-copy stacks** — a buy entry's `template.amount` is one *copy*; the `BUY AMOUNT` picker counts copies, not items. Multi-item copies (e.g. a stack of 5 arrows) are supported. **New admin command:** ``` /glw shop remove ``` --- ### Inventory & UI Refresh A new **multi-panel inventory** framework underpins every revamped GUI this cycle. Panels swap **in place** without closing the underlying Bukkit inventory, so switching between trader categories, banker sections, and shop-admin pages no longer triggers the familiar close-and-reopen flicker. - **Multi-panel framework** — one Bukkit inventory, many logical panels. Each flow (trader, banker, shop admin) registers its panels once and transitions between them with no `closeInventory` call in between. - **Flow panels for traders and bankers** — the trader buy / barter / sell / tip surfaces and the banker deposit / withdraw / tier surfaces now run as flow panels on top of the framework. Rendering logic was rewritten to coalesce updates into a single repaint per click. - **Admin legacy inventory migrated** — the legacy admin GUIs were ported onto the multi-panel framework. Panel transitions inside admin flows are now flicker-free, matching the rest of the UI. - **Shift-click + drag-and-drop in admin editors** — barter and sell category editors accept shift-click moves and drag operations from the player inventory; previously they only accepted single-click placement. - **Custom inventory filter system** — per-view filter controls (search, category sort, etc.) are now first-class, so heavy lists (gang member browsers, shop catalogues) stay navigable. - **Gang inventory revamp** — the gang member browser ships with search filters and an updated layout; pagination and rank annotations are easier to scan. - **New inventory layouts** — several screens were rebuilt from scratch with consistent borders, panel headers, and decorate pipeline coverage. General icon/glass-pane polish across the board. - **Shop item freshness** — car entries now run through a dedicated car item refresher on every delivery, so an updated `cars.yml` shape is reflected in the next handout. Trader-bought ammunition runs through an `AmmunitionItemRefresher` so bought stacks merge cleanly with looted ones instead of occupying a separate slot. - **Item-equality by serialized payload** — shop, barter and sell comparisons now serialize the full item (NBT + meta), not just `Material`. Custom-model variants and differently-tagged stacks stay distinct where they used to collide. --- ### Banking & Banker NPC Every player gets an **account balance** (cash in hand) and a **bank balance**. 0.7.5 turns the bank from a cash drop into a full ladder with a dedicated NPC. - **Banker NPC** — a stationary Citizens NPC that opens the bank UI on right-click. Create / delete via a command; identical-looking Banker NPCs can be scattered across your map without each one needing its own config. - **Tier ladder** — four default tiers (`Basic`, `Premium`, `Elite`, `Vault`) gate max balance, daily deposit cap, interest rate, death-loss discount, and weekly / monthly loan drops. Every Banker NPC offers the same ladder — there's no per-NPC pricing. - **Rolling-window daily cap** — deposits and withdrawals use a rolling window, not midnight, so splitting a transaction across midnight can never count against two separate days. - **Interest** — accrued continuously as a fraction of bank balance per 24h, clamped at `Max_Balance`. - **Weekly / monthly loans** — free currency deposited into the bank on a fixed cadence per tier (`Weekly_Loan_Amount`, `Monthly_Loan_Amount`). - **Death-loss discount** — tier-scoped fraction subtracted from the death-tax deduction (so higher tiers take a smaller hit on death). - **Rename fee** — charged from cash every time a player renames their account at a Banker. `0` disables it. - **BigDecimal money handling** — price arithmetic on bank operations now uses `BigDecimal`, so large balances stop suffering from floating-point drift. - **Admin reset** — `/glw bank resetcap <player|all>` wipes the rolling-window cap for one player or everyone. - **Optional player targets on every bank command** — `/glw bank deposit <amount> [player]` / `/glw bank withdraw <amount> [player]` credit / debit another player's bank as admin actions. **New file — `npc/bank_tiers.yml` shape:** ```yaml Basic: Display_Name: "&7Basic Account" Max_Balance: 100_000 Upgrade_Cost: 0 # first tier should be 0 Order: 0 # ascending; lower = earlier in the ladder Daily_Deposit_Limit: 10_000 # 0 = uncapped Interest_Rate: 0.0 # fraction per 24h (0.015 = 1.5%/day) Death_Loss_Discount: 0.10 # 0–1; fraction subtracted from death tax Weekly_Loan_Amount: 500 # 0 = disabled Monthly_Loan_Amount: 2_000 Elite: Display_Name: "&6Elite Account" Max_Balance: 10_000_000 Upgrade_Cost: 500_000 Order: 2 Daily_Deposit_Limit: 1_000_000 Interest_Rate: 0.0075 Death_Loss_Discount: 0.50 Weekly_Loan_Amount: 10_000 Monthly_Loan_Amount: 50_000 ``` **Add to `settings.yml`:** ```yaml User: Bank: Initial_Balance: 0 Create_Cost: 5_000 Rename_Fee: 1_000 # charged from cash on every rename; 0 disables Reset_Period: 86_400 # rolling-window length in seconds ``` --- ### Bail — Closing the Arrest Loop Handcuff → jail now has a paid way out. When a player is jailed, the paperwork view exposes a **Pay Bail** action that charges the player's balance, restores their seized inventory, and releases them. - **Cost scales with wanted level** — `Bail.Base_Cost + (wanted_level * Bail.Per_Wanted_Level)`. A one-star arrest pays base; a five-star fugitive pays a lot more. - **Inventory restoration** — a successful bail routes through the same `ReleasePipeline` that a served sentence or admin-release uses, so seized items come back intact. - **Insufficient-funds path** — `BailResult.INSUFFICIENT_FUNDS` is surfaced as a distinct message; no partial charge. - **Handcuff bribe is separate** — while handcuffed (pre-jail) you can still bribe the arresting cop; that's `Handcuff_Bribe`, with its own `Base_Cost` / `Per_Wanted_Level`. Bail is post-jail only. - **Jail bribe** — a risky shortcut from inside the cell. Pay the cost and roll against `Success_Chance`; on failure you eat a `Fail_Penalty_Seconds` sentence extension. - **Sentence** — if you pay nothing, serving `Base_Seconds + wanted * Per_Wanted_Level_Seconds` releases you automatically. **Add to `settings.yml`:** ```yaml Detainment: Transit: Delay_Ticks: 400 Guard_Radius: 5.0 Break_Free: Taps_Required: 25 Reset_Window_Ticks: 40 Handcuff_Bribe: Base_Cost: 500.0 Per_Wanted_Level: 250.0 Bail: Base_Cost: 2500.0 Per_Wanted_Level: 1000.0 Jail_Bribe: Base_Cost: 1000.0 Per_Wanted_Level: 500.0 Success_Chance: 0.35 Fail_Penalty_Seconds: 60 Sentence: Base_Seconds: 180 Per_Wanted_Level_Seconds: 60 Fallback_Exit_Waypoint: "spawn" Sounds: Bail_Success: "BLOCK_NOTE_BLOCK_PLING" Bribe_Success: "ENTITY_VILLAGER_YES" Bribe_Fail: "ENTITY_VILLAGER_NO" Transit_Commit: "BLOCK_IRON_DOOR_CLOSE" Sentence_Complete: "BLOCK_BELL_USE" ``` --- ### Loot Chest Polish Loot chests got a big quality pass. - **Item preview** — the chest advertises what it's holding before you open it. No more blind clicks. - **Floating key / lockpick** — the required unlock item hovers above the chest as a plain item (no more armor-stand placeholder), so the visual lines up with how the game actually renders custom items. - **Drop chances replace tier requirement** — per-table `Rarity_Overrides` and per-item `Drop_Chance` buckets (`COMMON`, `UNCOMMON`, `RARE`, `EPIC`, `LEGENDARY`) decide what rolls. Tier gating still controls *which table* a chest draws from; it no longer gates individual items inside a table. - **Natural drops** — weapons rolled from a chest now drop as real weapon items (not placeholder renders). - **Hologram drop for weapons** — weapon drops float under a hologram showing the weapon's display name. - **Repair system deleted** — the loot-chest repair path was removed. If you were relying on it, wire it back through the shop-api sell flow or a custom handler. - **Validation layer** — the chest loader now reports malformed entries with a line number instead of silently skipping them. --- ### Civilians Small but load-bearing. - **Per-type drop chances** — civilians now roll their drop table with the same `Drop_Chance` semantics as loot chests, so a friendly villager and a hostile mercenary don't drop with the same probability. - **Inventory field removed** — non-trader civilians no longer carry a Bukkit inventory. Trader behavior moved to the dedicated Trader NPC (above). If your `civilians.yml` had `Inventory:` on a type, it's now an unknown key and the new validation layer will flag it — delete the line. - **Stray-entity despawn fix** — civilians and cops with no active player were sometimes left alive past the despawn radius. Now cleaned up on the same 3D proximity check. --- ### Weapons & Projectiles Polish - **Flame particle** added to incendiary hits — the cone-spray visual is more obviously *fire* now. - **Natural drops** across weapon spawns (hologram + item, not armor stands). - **Weapon drop holograms** — dropped weapons float under a name hologram so players can identify loot at a glance. --- ### Commands & Permissions - **New `/glw permissions` command** — list / inspect / grant / revoke permissions directly in-game. Splits cleanly from the rank command. - **Rank permission subcommands split** — `/glw rank add permission` and `/glw rank remove permission` are now separate subcommands. Tab-completion routes by verb; no more positional confusion. - **Vault permission integration** — Vault (soft-dep) is detected and used for permission checks when present. If Vault isn't installed, the built-in permission system handles everything on its own. - **`/gangland` alias for `/glw`** — both resolve to the same dispatcher. - **Legacy commands revamped** — the old flat-args subcommands were rewritten as chained optional-argument nodes, so every positional slot has a tab-completion suggestion list. No more terminal `args[n]` reads that silently fall through. - **Help commands fixed** — the `/glw <cat> help <page>` surfaces (bank, jail, cop, trader, car, money, civilian, waypoint, rank…) now paginate correctly. Previously some pages rendered blank. - **Tab-completion polish** — trailing-space bug fixed, per-argument suggestions align with what actually parses. - **Optional player targets** — `bank deposit` / `bank withdraw` now accept an optional `[player]` that admins can target for credit / debit. - **Delete-confirm command fixed** — the two-step confirmation flow on destructive commands (gang delete, shop remove, etc.) was resetting its pending state on a race; now stable. - **Custom messages for every command** — every user-facing command string now routes through the `Messages` enum. Previously-hardcoded strings are removed. - **`/glw gang members`** — list the members of a gang from the command line, with paging and the standard rank annotations. Useful for admin inspection without opening the GUI. - **Rank schema + Vault-group rank command fix** — the rank command's Vault-group apply path was reading a stale schema, so group changes weren't always propagating to Vault. Rank edits now round-trip cleanly. --- ### YAML Validation Layer Every loader in the plugin now runs through a shared validator. - **Unknown-key detection** — a key that isn't in the declared schema gets reported with its line number. Catches dead keys left over from upgrades. - **Required-key / missing-node reporting** — a missing section still falls back to defaults (same as before) but now logs that the fallback was used, so you can re-add the section on the next edit. - **Depth tracking** — nested paths like `Cops.Behaviour.Cuff_Radius` resolve and validate correctly without custom code in every loader. - **Fallback message loading from the jar** — if `message/*.yml` is missing or corrupt, the loader falls back to the bundled copy inside the jar instead of hard-failing. - **Missing configuration nodes added** — the defaults that were loaded silently in prior versions are now explicitly documented in the files so `/glw reload` reports them accurately. --- ### Debug Logging Module-level debug logging is now a first-class config surface instead of a JVM-flag dance. - `Debug.Enabled: true` + `Debug.Modules: [<module>, ...]` flips log levels at runtime. Restart the server after editing. - Valid module names: `Gangland`, `Gangland Core`, `Gangland Weapons`, `Cops N Crooks`, `Inventory API`, `Lootchest API`, `Scoreboard API`, `Sign API`, `Plugin Persistence`, `Version Handler`. Empty list = every module on the classpath. - **Startup logs demoted to `DEBUG`** — your console is quiet on normal boot. Flip the module list to see the old chatter. - **Logging infrastructure moved to `plugin-common`** — every module's logger setup is now centralized. **Add to `settings.yml`:** ```yaml Debug: Enabled: false Modules: [] ``` --- ### Vehicle Persistence - **Dismount on shutdown** — mounted players were being serialized into `player.dat` as a `RootVehicle`, which spawned rogue duplicate vehicles on rejoin. `PlayerQuitEvent` now ejects riders first, and the destroy-all runs in two passes so no entity is left behind. - **Half-block vertical traversal** — vehicles now climb slabs and half-blocks smoothly. Previously they caught on the lip. - **Session cleanup ordering** — vehicle session save runs before close, not after, so a server restart never loses the last known position. --- ### Internal — Module Reorg & Beans Cleanup Not user-facing, but flagged here for anyone shipping custom modules against this version. - Listener and command packages moved inside the `bean` package for consistency with `@ListenerHandler` / `@CommandHandler`. - Autowire package folded under `bean`. - `gangland-core` main package renamed to `me.luckyraven.core`. - `BankerViewOpener` contract removed — the view is specified directly at the call site, dropping an unnecessary indirection. - Trader trait loader moved onto the shared bean lifecycle. - Input interceptors abstracted so anvil-GUI / chat-prompt sessions share the same cancellation pipeline. - Test suite expanded before shipping (repository lifecycle, cleanup on Windows, HikariCP init). --- ## 🐛 Bug Fixes ### Trader & Bank - **Users without a bank** — newly-created users without a bank row were NPE'ing the Banker view. Now lazy-created on first right-click. - **Trader invulnerable tag** — the `Invulnerable: false` trait wasn't propagating to the Citizens NPC, so "killable" traits weren't actually killable. Fixed by setting both the Citizens protected flag and the Bukkit `LivingEntity` invulnerable flag at spawn. - **Bargain / tip views dropped** — per the trader simplification, bargain and tip-view GUIs were removed and their bug list with them. Tipping is still supported via command / shop integration; the dedicated anvil flow is gone. - **Item moved from inventory into created inventory** — a bug where shift-clicking into a newly-opened shop view dropped the item into the wrong slot is fixed. - **Ammunition stacking from trader** — bought ammo now runs through `AmmunitionItemRefresher` and merges with looted stacks instead of occupying a separate slot. - **Shop item equality by `Material` only** — buy / barter / sell comparisons used to match on `Material`, so custom-model variants and differently-tagged stacks collided. Comparisons now serialize the full item. ### Jail & Detainment - **Handcuff → jail → release flow** — the release leg occasionally left seized inventory in limbo. Bail, sentence-served, and admin-release now all route through the same `ReleasePipeline`. ### Loot Chests - **Loot chest validation** — malformed entries previously crashed or silently skipped; now reported with file + line number. - **Icon swap** — the placeholder armor stand used for the "hold-to-open" item was replaced with a proper Bukkit item, so resource packs render it consistently. ### Commands - **Delete-confirm command** — the two-step confirmation was racing its own state reset. - **Help commands** — pages beyond the first weren't rendering for several categories; fixed. - **Tab-completion** — trailing-space bug and a mis-ordered suggestion list on some subcommands. ### Inventories & UI - **Player heads not rendering** in several GUIs — the skull-owner payload was being dropped through the decorate pipeline; preserved now so head icons render correctly. - **Multiple items in the same slot not showing** — a paginated- inventory branch was overwriting the displayed stack with whichever item rendered last, hiding everything else assigned to the slot. - **Inventory / multi-inventory interaction bugs** — shift-click and drag events on the new panel framework were crossing into the player inventory in a few edge cases. Click handling is now scoped per panel. - **False-positive config report for `Multi` and `Static_Items`** — the validator was flagging legitimate `Multi` and `Static_Items` blocks as unknown keys on `/glw reload`. Both are now in the declared schema and pass validation. ### System & Reliability - **Gang deletion database consistency** — deleting a gang now cascades cleanly: members and alliances get orphan-handling passes so stale rows don't accumulate. - **Reload periodical updates** — the periodic auto-save and cache cleanup weren't re-registering after `/glw reload`. Now rebuilt on every reload. - **Stray civilians / cops despawn** — NPCs that were out of range weren't always cleaned up. - **Vehicle dismount on shutdown** — see the Vehicle section above — mounts were being serialized into the player save file and spawning duplicates on rejoin. - **Language loader** — a missing `message/*.yml` used to hard-fail startup; now falls back to the bundled copy inside the jar. - **Filename typo in prior changelogs** — the 0.7.3 / 0.7.4 files shipped with an inconsistent filename casing; standardized. - **Bean ordering race** — some beans were being resolved before their graph dependencies had finished initializing. Topological-sort pass hardened. - **Naming-convention sweep** — internal file / class names aligned to the project's house convention (`Capitalized_Underscore` YAML keys, package paths match module names). --- ## ⚠️ Possibly Fixes / Ambiguous Changes Commits whose intent didn't obviously map to either a feature or a fix. Flagged so server owners can spot behavior changes in their own setups. - **"Added a market system"** → **"Removed the market system"** — a player-to-player market / auction-house prototype shipped and was rolled back inside this cycle. It may have left behind `gangland-market` module traces or stale SQL tables if you ran a development build between those two commits. **"Moved economy and bank to gangland-market"** is part of the same arc — the economy and bank code briefly lived under `gangland-market`, then moved back when the market was cut. If you drifted from mainline during the cycle, diff your database schema and module list against the 0.7.5 default. - **"Removed the trade in"** — the trade-in variant of the trader sell flow was cut after landing. The remaining sell path is category-based valuation through `Sell_Price_Ratio`. If you had placeholder text, messages, or admin workflows wired to trade-in, they no longer resolve. - **"Removed Bargin and tip views"** — per the trader simplification, the anvil-GUI bargain flow, the dedicated tip view, and the propose-price widget were removed. The trait record dropped from 16 fields to 8. Tipping still works as a *currency-spent* signal for mood, but there's no standalone tip GUI anymore. - **"Removed the repair system"** — the loot-chest repair path went away. If any of your shop templates still reference repair-kit materials, they'll parse as ordinary items. - **"Removed civilian inventory"** — non-trader civilians lost their `Inventory:` field. Existing `civilians.yml` files with the key will trigger the new unknown-key validator. - **"Changed the default values"** — one commit tweaked defaults across loaders without specifying which. If you upgrade by regenerating `settings.yml` / catalogue files, diff against a backup of your prior version so intentional overrides survive. - **"Removed the banker view opener contract so that you directly specify it"** — API surface change for anyone wiring a custom banker view. The view is now specified inline at the call site. - **"Added a bean lifecycle for trader trait loader"** — traits now participate in `/glw reload`. If you had custom code reloading traits manually, remove it — the framework does it for you. - **"Added moving vertically on half blocks or less"** — vehicle movement change; watch for slab-heavy parkour tracks behaving differently. - **"Added hologram drop for weapons"** — weapon spawns are now accompanied by a floating display name. If you were relying on entity-count-based triggers near weapon drops, you'll see one more entity per drop. --- ## Requirements No new hard dependencies compared to v0.7.4-DEV. | Requirement | Details | |-------------------|-----------------------------------| | Minecraft version | 1.20+ (1.21.x recommended) | | Java | Java 21 or newer | | Required plugins | NBTAPI, Citizens | | Optional plugins | PlaceholderAPI, Vault, ViaVersion | | Server platform | **Spigot** |
release

Gangland Warfare – GTA-Style Crime 0.7.4-DEV

0.7.4-DEV
14 апр. 2026 г.41Minecraft: 1.20, 1.21, 1.21.11paper, spigot
Скачать
Что нового
# 🌆 The Streets Got Louder — v0.7.4-DEV Changelog > *Civilians walk the block, cars idle at the curb, and the first grenade in > plugin history just bounced off a wall. Welcome to **Part 2 of Cops N > Crooks**.* --- [← Back to Documentation Index](../README.md) | [Previous: v0.7.3-DEV →](../v0.7.3-DEV/CHANGELOG.md) --- ## Overview Three big shifts land in this version. **Civilians** join the streets as their own NPC class (friendly, hostile, or traders). The **weapon system quadruples** from one category (guns) to five (guns, melee, incendiary, biological, throwable), each with its own schema and physics. And **gadgets** — cars and jetpacks — ship as a new module with persistent fuel, database-backed parking, and shared refueling. Under the hood, the plugin was also rewired onto a beans-based bootstrap, so every manager now auto-initializes in phased order without a hand-written `Initializer`. --- ## 📄 Configuration Changes Upgrading from 0.7.3? You'll need to merge in new files and new `settings.yml` sections — or regenerate them by bumping `Config_Version`. **New files shipped in this version:** | File | Purpose | |---------------------|------------------------------------------------------------------------| | `civilians.yml` | Civilian NPC types and spawn groups (friendly, hostile, trader). | | `cars.yml` | Drivable vehicle catalogue (materials, speed, acceleration, fuel). | | `money.yml` | Cash pickup variations and per-source drop rules. | | `weapon/*.yml` | New melee, incendiary, biological and throwable weapon configurations. | **New sections added to `settings.yml`:** `NPC_Navigation`, `Civilians`, `Money_Drop`, `Gadgets` (with `Jetpack` and `Car` subsections), and `Block_Regeneration`. The `Cops` section was also expanded with new tuning keys (spawn phases, cuff cooldown, return-to-station, starting ammo). **Required field added to every weapon file:** `Information.Category`. See the weapons section below for the before/after shape. --- ## ✨ Features ### Civilian NPCs Civilians are a new NPC class that share the cop AI base — they wander, flee, trade, or return fire depending on their type. Types and spawn groups live in a new `civilians.yml` file, and spawning is proximity-driven from registered spawner points. - Each type picks a Bukkit entity, health, wearables, weapon pool, item pool, drops, and an optional trader inventory. - Hostile civilians fight back with weapons from their pool; non-hostile ones flee at their configured speed. - Attacking a non-hostile civilian now **increments your wanted level** — the same system cops use. - Trader civilians open a custom inventory on right-click using the shared `InventoryHandler` framework. - Groups bind spawn locations to a type, with a population cap and activation radius. Civilians spawn when a player walks into range and despawn when everyone leaves. - Navigation is shared with cops (see the NPC_Navigation block further down), so a path-finding fix lands on both at once. - New commands under `/glw civilian …` for manual spawn, despawn, and group control. **New file — `civilians.yml` shape:** ```yaml Types: friendly_villager: Entity_Type: VILLAGER Health: 20 Hostile: false Wearables: head: "" chest: "" legs: "" feet: "" Item_Pool: - material:BREAD Drops: Items: - material:EMERALD Experience: 5 Inventory: trader_default # omit for non-trader types AI: Wander_Range: 12 Flee_Speed: 1.3 Combat: Difficulty: NORMAL # EASY | NORMAL | HARD | DEADLY Groups: downtown: Type: friendly_villager Max: 6 Proximity: 64 Spawns: - world,120.5,64,-40.5 ``` **Add to `settings.yml`:** ```yaml Civilians: Behaviour: Enabled: true AI_Tick_Rate: 20 Spawner_Proximity: Activation_Radius: 60.0 Despawn_Radius: 80.0 Max_Npcs_Per_Spawner: 5 Check_Interval: 100 Default_Type_Id: "" ``` --- ### Smarter Cops Cops now run on the shared NPC base with civilians, so every navigation fix lands on them too. This cycle also brought dedicated cop polish. - Targeting falls back to the most recent attacker when no wanted target is in line of sight, so cops stop standing still while you plink them from cover. - Despawn now uses 3D distance — climbing a tower no longer makes cops evaporate. - Reload handling during NPC combat is smoother; downed players are also blocked from reloading. - Jail creation uses a 5-block radius check instead of exact-coordinate matching, so you no longer accidentally stack two jails in the same cell. - `CopDeathEvent` fires on every cop death and is available to other listeners. - `Cops` section in `settings.yml` gained phased spawn controls, cuff cooldown, return-to-station distance, and starting magazine count. --- ### Weapon System — Four New Categories 0.7.3 shipped one weapon category. 0.7.4 adds **melee, incendiary, biological, and throwable** — each with its own parser, action class, and YAML schema. Every weapon file now declares a `Category:` field that picks the action class, and the schema under `Shoot:` / `Attack:` / `Throw:` varies by type. - **Melee** (`knife`, `machete`, `crowbar`) — sweep-range attacks with `Attack:` block: damage, range, cooldown, knockback, per-hit cooldowns, and melee-specific damage handling on non-living entities. - **Incendiary** (`flamethrower`) — cone-shaped fire spray with `Cone_Angle`, `Fire_Duration`, and per-tick fuel `Consume_Rate`. Ignites entities in the cone and applies block fire where configured. - **Biological** (`syringe_gun`) — hold-to-charge / release-to-fire single shots on a new `pathogen_vial` ammo type. Applies potion effects on impact. - **Throwable** (`grenade`, `molotov`, `flashbang`, `smoke_grenade`, `tomahawk`) — thrown items with physics, bounce, fuse timer, and blast radius. Identical throwables stack via shared UUIDs so sign-bought grenades merge with looted ones. - Push-on-hit is now supported by **every** weapon type, not just guns. - A unified raytracer runs the same hit-detection loop across all five categories. Ricochet, block-break, and tracers now work uniformly regardless of weapon type. - `WeaponEntityDamageEvent` fires for non-projectile hits on non-living entities (cars, armor stands, blocks) — handy for feature modules that want to react to melee or grenade damage without intercepting the projectile lifecycle. **Required schema change — every weapon file now needs `Category:`:** ```yaml # BEFORE (0.7.3 — category was implicit: always gun) Information: Name: "&7Pistol" Material: IRON_HORSE_ARMOR # AFTER (0.7.4 — required field) Information: Name: "&7Pistol" Material: IRON_HORSE_ARMOR Category: gun # gun | melee | incendiary | biological | throwable ``` **Melee example — `knife.yml`:** ```yaml Information: Name: "&7Combat Knife" Category: melee Material: IRON_SWORD Attack: Damage: 6.0 Range: 2.5 Cooldown: 8 Knockback: 0.4 Selective_Fire: single ``` **Incendiary example — `flamethrower.yml`:** ```yaml Information: Name: "&6Flamethrower" Category: incendiary Material: BLAZE_ROD Shoot: Selective_Fire: auto Rate: 2 Range: 5.0 Cone_Angle: 30.0 Fire_Duration: 60 Consume_Rate: 4 Ammunition: Ammo_Type: fuel_canister Capacity: 200 ``` **Throwable example — `grenade.yml`:** ```yaml Information: Name: "&cFrag Grenade" Category: throwable Material: LIME_DYE Throw: Type: EXPLOSIVE Fuse_Time: 60 Explosion_Radius: 4.0 Explosion_Damage: 10 Bounces: true Max_Bounces: 5 Sticky: false Entity_Type: SNOWBALL ``` --- ### Bullet Physics & Projectiles Bullets drop now. A new gravity system pulls shots down over distance, so zeroed-in rifles actually need range compensation. - Projectile gravity is applied per-tick in the unified raytracer. - Block ricochet bounces along the block normal instead of dying on contact, enabling skip-shots off walls and floors. - Throwable particle trails were redone and stop cleanly on detonation — no more leftover smoke puffs after the blast. - Stacking throwable UUIDs were unified, so grenades bought from signs merge with ones you loot. --- ### Gadgets — Cars Cars move out of prototype territory into a proper `gangland-gadget` module. Every parked car is now saved to the database, so your curb-side ride survives a restart. - New `cars.yml` catalogs every vehicle with its item, custom model data, lore, and per-vehicle vehicle-physics block (max speed, acceleration, max fuel, exhaust side). - Parked-car persistence — position, fuel level, and exhaust side go into a dedicated SQL table and reload on boot. - The minecart carrier got a wobble animation so idle cars no longer look like frozen blocks. - Shift + right-click is now ignored on car interactions so the car pickup hotkey stops colliding with boarding. - Car items are no longer droppable — you can't accidentally toss your vehicle. - New commands: `refuel` and `defuel`. **New file — `cars.yml` shape:** ```yaml sports_car: Material: MINECART Display_Name: "&bSports Car" Custom_Model_Data: 4001 Lore: - "&7Fast. Fragile. Red." Vehicle: Max_Speed: 0.95 Acceleration: 0.05 Max_Fuel: 200 ``` **Add to `settings.yml`:** ```yaml Gadgets: Car: Reverse_Speed_Ratio: 0.5 Hard_Brake_Multiplier: 3.0 Fuel_Consume_Per_Tick: 1 ``` --- ### Gadgets — Jetpack The jetpack is new in 0.7.4. It's a gadget that burns fuel per-tick while gliding and triggers a reload session when empty, so you can't tap-spam it like a free jump. - Activates via off-hand equip, with thrust that ramps from 10 % to 100 % over a configurable tick window. - Gliding consumes fuel per-tick (not per activation), so short hops cost almost nothing and long flights drain smoothly. - Thrust defaults were retuned; the "bouncing at apex" oscillation bug is gone. - Particle exhaust and sound effects were overhauled. - Refueling runs through the shared fuel component — same UX as cars. - Reload sessions — an empty jetpack prompts a timed refuel cycle instead of silently cutting out mid-air. **Add to `settings.yml`:** ```yaml Gadgets: Jetpack: Thrust_Ramp_Ticks: 20 Descent_Accel: 0.022 Max_Descent_Speed: -0.5 Horiz_Influence: 0.03 Max_Horiz_Speed: 0.25 ``` --- ### Shared Fuel Component Cars and the jetpack both used to carry their own fuel code. They now share a single `FuelContract` component, so fuel levels persist uniformly and a third fuel-burning gadget becomes a drop-in. Jetpack and car refuel flows use the same underlying item and sound handling. --- ### Money System Cash is now a proper pickup item with a dedicated `money.yml` registry. Kills, drops, and manual placements all route through one set of rules that server owners can tune per-source. - Variations — small, medium, large stacks can use different materials and display names. - Per-source rules — `Player_Kill`, `Civilian_Kill`, `Cop_Kill`, etc. each pick a variation, amount range, and drop chance. - Custom pickup sound per variation, with name validation — invalid sound names fall back to a safe default instead of throwing. - Master switch: `Money_Drop.Enabled` in `settings.yml` disables the entire system without editing `money.yml`. - New commands: money give / set / reset, grouped under the new command category packages. **Add to `settings.yml`:** ```yaml Money_Drop: Enabled: true ``` --- ### Wanted & Command Expansion - `/glw wanted clear <player>` — reset a player's wanted level without killing them. - Sub-commands were grouped into category packages (`money`, `wanted`, `jail`, `civilian`), so `commands.json` stays tidy and new entries slot in cleanly. - Info commands were fixed — they were previously hiding half their output. - Optional tab completions were added across several commands. - Waypoint commands now include hover + click events on their message output, so you can jump to a waypoint from chat. - Jail commands expanded with tab values and proximity-based duplicate prevention on `jail create`. --- ### NPC Navigation — Shared Tuning Cops and civilians now pathfind with identical tuning. A single `NPC_Navigation` block in `settings.yml` controls tick-rate, path recalculation, stuck detection, and ranged stand-off distances — so a tune for one NPC is a tune for all of them. **Add to `settings.yml`:** ```yaml NPC_Navigation: Recalculation_Ticks: 10 Stuck_Check_Interval: 5 Max_Stuck_Checks: 3 Max_Hopeless_Stuck_Checks: 6 Hopeless_Close_Threshold: 8.0 Min_Progress_Distance: 0.75 Ranged_Min_Distance: 7.0 Ranged_Max_Distance: 12.0 Min_Repath_After_Loss_Ticks: 2 ``` --- ### File Safety — Reload & Regeneration Startup and `/glw reload` are much harder to break now. Missing keys get rewritten in place, and a missing file is recreated from the jar with a retry on the init step instead of silently failing. - Init-time checkup scans each file for required keys and fills in missing ones before the loader runs. - Reload regeneration — if you accidentally delete a section, `/glw reload` rewrites it. - Expected-folder check prevents duplicate folder creation on first boot. - Settings load order was fixed so database and file beans always see a valid `Settings` before spinning up. - Block regeneration tuning got its own `Block_Regeneration` block for weapon-broken block restore/crack-reverse timings. --- ### Block Regeneration The weapon `Break_Blocks` modifier now restores or uncracks blocks over time. Per-weapon mode is set on the weapon itself (`RESTORE`, `CRACK_ONLY`, `DESTROY`); the timing lives in `settings.yml`. **Add to `settings.yml`:** ```yaml Block_Regeneration: Restore_Delay_Ticks: 100 Regeneration_Delay_Ticks: 100 Regeneration_Step_Ticks: 4 ``` --- ### Internal — Beans System Overhaul The old `Initializer` + manual dependency wiring is gone. Every manager, service, and listener is now a `@Bean` in a phased graph and implements `BeanLifecycle` for reload and shutdown hooks. - Phase ordering — **KERNEL → FILE → DATABASE → CONFIG → LIFECYCLE → LISTENER → COMMAND** — each phase topologically sorts `@Bean` methods by their parameter dependencies. - Constructor-injected listeners and commands via `@ListenerHandler` and `@CommandHandler`. No more manual `register()` calls. - Statics decoupled — `PlaceholderService`, `CarService`, and several others no longer reach into static state; static setters were replaced with beans. - Database operations send in batches to reduce individual query count. - Full developer documentation pass: architecture, module map, DI, commands, weapons, cops-n-crooks, civilians, gadgets, UI framework, persistence, configuration, version compatibility. --- ## 🐛 Bug Fixes ### Weapons & Combat - **Weapon hit target** — hitscan weapons occasionally missed the final entity in a ray because the raytracer stopped short of its bounding box. - **Multiple projectiles registering zero hits** — volley weapons like shotgun pellets and minigun bursts were dropping hits when two projectiles overlapped in the same tick. - **Incendiary weapon damage** — player death from fire spray was double-counting in edge cases and applying the penalty twice. - **Selective fire burst count** — burst mode sometimes fired one shot too many because the tick counter advanced early. - **Reload cancel on jump** — vertical movement was interrupting reloads; only horizontal movement should cancel them. - **Scope-jump exploit** — players could jump while scoped to keep the stability bonus. Now scope-sprint/jump is blocked. - **Durability over max** — repair kits could push a weapon's durability above its configured maximum. - **First-tick shot delay** — shots fired on the exact frame you equipped a weapon were being swallowed by a tick-skip guard. - **No-durability items treated as broken** — weapons configured without a durability component were being flagged as destroyed. - **Grenade UUID stacking** — throwables bought from signs now merge with looted stacks instead of sitting in separate slots. - **Duplicate player death events** — firing on a target that died the same tick was running the death handler twice. - **Weapon data persistence** — reload ammo, selective-fire mode, and durability weren't being saved on shutdown, so they reset on restart. ### NPCs - **Cop targeting attacker** — with no wanted target in range, cops idled instead of turning on whoever shot them. - **Cop despawn in 3D** — the distance check was 2D only, so cops vanished when you climbed a tower or dug a pit. - **NPC pushback through walls** — shove force was applying even when a solid block sat between the NPC and the target. - **Civilian navigation** — flee paths sometimes picked points behind the threat, making civilians run toward the danger. - **NPC portal events** — attempt to block NPCs from teleporting through portals on world-hop. (See the Ambiguous list for caveat.) - **Wanted level decrement** — `WantedExecutor` wasn't reducing the level on its timer. - **Jail spawn proximity** — jail creation required exact coordinates, letting you stack multiple jails in the same block. - **Detainment jail ID handling** — cuffed players rejoining were resolved against the wrong jail key. - **Jail throw command** — `/glw jail throw` was throwing the sender rather than the target argument. - **Session completion callout** — arrest/release session end wasn't firing its completion message. ### Gadgets - **Car load on startup** — parked cars weren't rehydrating from the database on boot. - **Car respawn on restart** — session cleanup ran *after* save, so the last position was lost between restarts. - **Jetpack upward thrust** — thrust applied twice in the first activation tick, producing a jolt. - **Jetpack gliding oscillation** — altitude bounced because fuel drain toggled state mid-frame. - **Jetpack activation** — refused to fire when fuel was exactly 0 instead of gracefully falling through. - **Jetpack edge cases** — assorted null / equip-slot races patched. - **Max fuel display on refuel** — action bar showed the old cap after swapping to a bigger tank. ### Items & UI - **Money item interaction** — right-clicking cash in an inventory slot was eating the stack without crediting the player. - **Pickup sound handling** — custom sounds from `money.yml` were throwing on slightly malformed names; they now validate and fall back. - **Multi-inventory navigation** — next/previous page buttons on paginated inventories were skipping a page. - **Full-inventory item picker** — a new task routes picked-up items to the correct slots when the inventory is full. - **FullAutoTask class reference** — a leftover reference from a rename NPE'd on the first auto-fire after `/glw reload`. - **Async `PlayerItemInitEvent`** — listeners were running off-thread while touching the Bukkit API; now dispatched on the main thread. ### System & Reliability - **File reload skipping files** — some files weren't registered with the reload pipeline and silently ignored `/glw reload`. - **WeaponLoader / InventoryLoader caches** — neither was refreshing on `/glw reload`; they do now. - **Max health set** — `setMaxHealth` used the attribute's current value instead of its base, so modifiers stacked incorrectly. - **Multiple entity drops** — a single death fired the drop listener twice in some death paths. - **Settings load order** — file beans were reading `Settings` before the parse had finished; bootstrap order now guarantees it. - **Plugin download via commands** — in-game update download command was failing to resolve the remote URL. - **Batch DB queries** — repositories now send reads in batches to cut individual query count sharply. --- ## ⚠️ Possibly Fixes / Ambiguous Changes Commits whose message didn't clearly label them as either a feature or a fix. Flagged here so server owners can watch for behavior changes. - **"Removed some unnecessary settings"** — unnamed `settings.yml` keys were deleted. If you upgrade by merging your old `settings.yml` in, diff it against the new default first so you don't carry dead keys forward. - **"Fixed visibility"** — commit message doesn't specify what kind of visibility. Could be a Java access modifier, an inventory visibility flag, or an NPC/hologram being hidden from the wrong players. - **"Tried to deny NPC portal events"** — the word *tried* suggests this didn't fully land. NPCs may still teleport between worlds via portals in some conditions. - **"Broke the cyclic approach by removing self-referential lambda capture"** — latent fix. No user-facing symptom was recorded, but a self-referential lambda capture usually means a memory leak or infinite-recursion risk on reload. - **"Decoupled the placeholder service"** — may silently fix cases where a plugin reload left ghost placeholders registered. - **"Added block regeneration"** — block-break-and-heal behavior shipped mid-cycle and its mode is set per-weapon; if your existing weapon YAMLs don't specify a `Break_Blocks` mode, double-check the default matches what you want. --- ## Requirements No new hard dependencies compared to v0.7.3-DEV. | Requirement | Details | |-------------------|------------------------------------------------------| | Minecraft version | 1.20+ (1.21.x recommended) | | Java | Java 21 or newer | | Required plugins | NBTAPI, Citizens | | Optional plugins | PlaceholderAPI, Vault, ViaVersion | | Server platform | **Spigot** (not Paper — Paper-only APIs aren't used) | --- [← Back to Documentation Index](../README.md) | [Previous: v0.7.3-DEV →](../v0.7.3-DEV/CHANGELOG.md)
beta

Gangland Warfare 0.7.3-DEV

0.7.3-DEV
24 мар. 2026 г.53Minecraft: 1.20, 1.21, 1.21.11paper, spigot
Скачать
Что нового
# 🚔 Badges, Bullets & Bars — v0.7.3-DEV Changelog > *The streets just got a lot more dangerous. Cops have radios, weapons, handcuffs, and nowhere to be > except right behind you. Welcome to Cops N Crooks.* --- ## ⚠️ New Requirements This update introduces new hard dependencies. **The plugin will refuse to load if these are not installed.** | Dependency | Type | Purpose | |----------------|---------------------|---------------------------------------------------------------------------------------| | **Citizens** | Required | Powers all police NPCs. Without it, no cops spawn and the plugin fails to initialize. | | **NBTAPI** | Required (existing) | Custom item data for weapons, ammo, and wearables. | | PlaceholderAPI | Optional | Custom placeholders in messages and scoreboards. | | Vault | Optional | Economy integration. | | ViaVersion | Optional | Multi-version client support. | --- ## 📄 Configuration Changes - **`cops.yml`** is a new file introduced in this update. It controls all cop NPC tiers, AI behavior, spawning rules, and detainment options. It is auto-generated on first run. - **`wearables.yml`** is a new file for configuring custom armor pieces and their protective traits. - **`repair.yml`** is a new file defining what materials can be used to repair weapons and armor. - **`settings.yml`** has been extended with new sections for cop count scaling, AI tick rates, spawn radii, detainment capacity, and wanted level thresholds. Existing installs should regenerate this file or merge in the new keys manually. --- ## ✨ Features ### Cops N Crooks The entire police system has been built from the ground up. Cops are now fully functioning Citizens NPCs with AI-driven behavior. - Police NPCs spawn in the world when a player has a wanted level, chase targets, engage in combat, and make arrests. - Every cop engages immediately upon spawning — no idle standing. The moment they appear, they are on the move toward their target. - When one cop spots a wanted player, **the entire group is alerted** and joins the pursuit. - **Cop count and tier scale with wanted level** — a 1-star wanted player draws two rookie officers; a 5-star wanted player gets up to eight military-grade units. - Five cop tiers are built in: Officer, Sergeant, Lieutenant, SWAT, and Military — each with increasing health, speed, damage, and equipment. - Higher-tier cops (Lieutenant and above) carry and fire Gangland custom weapons with their own ammo pools and reload mechanics. - **Bullet flyby and impact sounds** play when cops shoot near or at a player. - **Cops spawn from configured spawner locations** in the world. If no spawner is close enough, the system falls back through progressively wider search rings before using a global fallback, ensuring cops always find a way to you. - Dying clears your wanted level. --- ### Arrest & Detainment - Cops can handcuff players during an arrest. Once cuffed, a player is slowed, partially blinded, and cannot use weapons. - Multiple cops will never fight over the same target — once a cop commits to cuffing a player, others back off. - If a cuffed player logs out before being jailed, they are automatically moved to jailed status when they return. --- ### Jail System - Arrested players are teleported to a configured jail location and held there until released. - Admins can create and remove jails in-game. Each jail has a configurable capacity cap. - Players can be manually jailed or released via commands. --- ### Wanted & Bounty System - The wanted level system is now directly tied to the cop spawning system — stars you earn result in active police pursuit. - The bounty system has been moved under the Cops N Crooks umbrella and tightened up with configurable scaling and kill multipliers. --- ### Wearables Custom armor pieces are now a fully supported item category, separate from vanilla armor. Wearables have: - A **base damage reduction** percentage — a flat amount of every hit absorbed before other calculations. - **Trait slots** — each piece can have one or more stacking protection traits: - `REINFORCED` — general damage reduction per level - `BULLETPROOF` — specifically reduces firearm damage - `PADDED` — broad physical protection - `TOUGHENED` — reduces critical hit bonus damage - `FIRE_RESISTANT` — burns hurt less - `REACTIVE` — small chance to completely nullify a hit per level - `LIGHTWEIGHT` — cosmetic trait, no combat effect Four built-in wearable pieces ship with the plugin: **Police Vest**, **Police Helmet**, **Gang Jacket**, and **Heavy Vest**. Additional pieces can be configured in `wearables.yml`. --- ### Weapon Repair Weapons and wearables no longer have to be discarded when their durability runs low. Four repair materials ship with the plugin, each with different uses, restoration amounts, and item compatibility: - **Cleaning Kit** — a light maintenance item, works on both weapons and wearables. - **Mechanical Part** — a single-use part that restores a significant chunk of a weapon's durability. - **Weapon Repair Kit** — fully restores a weapon in one use. - **Field Kit** — a cheap, low-restoration tool useful in the field. All materials are configurable in `repair.yml` — you can define what vanilla item represents each kit, how many uses it has, and how much durability it restores. --- ### Trade Signs Players and admins can now set up in-world signs that allow buying and selling of: - **Ammunition** — any configured ammo type. - **Weapons** — any weapon from the weapon configs. - Wearables — any wearables configured. - Support configurable prices and quantities per transaction. --- ### Additional features: - Added 1.21.11 compatibility. - Added documentation which can be found in the github page under documentation folder. - Weapon impact and flyby sound is added. - Added new messages. - Added flat damage to weapons. - Added repository layer to handle saving and loading deleting data in a uniform manner to avoid future bugs. - Added 2 reload events, WeaponReloadCompleteEvent and WeaponReloadStartEvent. - There are plenty of events added for each new feature, you can always check the source code. - Improved logging by showing the class that's sending the information, warning, or error. - Added schema validation when a new column is modified, added, or removed. - Added command suggestions when reaching to an optional argument, like writing the online players rather than <player> or the random set of numbers rather than <amount> ## 🐛 Bug Fixes ### Weapon Reload Getting Fully Reset on Cancel When a player cancelled an in-progress reload — by switching items, opening inventory, or being disrupted — the entire reload progress was being wiped by the `stop()` call. This meant that even if a reload was 90% complete, interrupting it sent the player back to square one with no ammo loaded. The fix separates the "halt current phase" path from the "reset all progress" path so interruptions only pause where they are. --- ### Creative Mode Players Blocked by Magazine Limits The magazine check was running without first validating the player's game mode. Creative mode players were being told their magazine was full and blocked from loading ammo, even though creative players should bypass all resource constraints. The check now skips the capacity validation entirely for players in creative mode. --- ### Configuration Reload Silently Skipping Files When `/glw reload` (or the equivalent reload command) was used to refresh configuration files, some files were quietly being skipped because they had not been registered in the reload pipeline. This meant changes to those files had no effect until a full server restart, with no error or warning ever shown. All configuration files are now properly registered and reloaded together. --- ### Sign Material Parsing Failing on Older Versions Signs that referenced certain block or item materials by name were failing to parse correctly on servers running older Minecraft versions. The material lookup was going directly to the Bukkit API which uses 1.13+ naming conventions, causing a silent failure and a broken sign. The lookup now routes through XMaterial, which handles name mapping for all versions from 1.10 to 1.21. --- ### Commands With Similar Names Routing to Wrong Handler Sub-commands that shared a common prefix (e.g., `spawner` and `spawner set`) were being incorrectly matched by the dispatcher. In some cases, typing the longer, more specific command was matching the shorter one first and dispatching to the wrong handler — sometimes with the leftover arguments passed incorrectly. The argument resolution logic now correctly distinguishes between commands with overlapping prefixes. --- ### Additional bug fixes: - Processing money transactions and failing with insufficient funds then it would say that the money was taken without taking it. - Weapons are getting scoped effect while failing to reload. - Ranks can be added to themselves creating a cyclic dependency. - Fixed an unnoticed bug for using DriverV3 for the scoreboard that prevents concurrent modification exceptions. - The ammunition is not taken when it is added to the weapon and not before. - Failed backups were not properly noticeable, now they will appear as a warning. - Fixed database type casting to ensure various numeric value types. - Fixed command confirm argument so that the confirmation command is locked to that sender only and not all the senders. - Fixed loot chest deleting from the database with invalid data type. There is plenty more of features and bug fixes, but this is what I was able to write. I hope you enjoy the new challenge, the next update would be the second part of Cops N Crooks which would introduce new types of weapons, throwables, cars, civilians, money drops from entities, and much much more.