All versions
2.0.0
Release
CombatGunSSS 2.0.06 months ago 29
Compatibility
Minecraft: Java Edition
1.21.x
Platforms
Paper
Purpur
Changes
[2.0.0] - 2026-04-12
Added
Weapon Attachment System
- Four attachment types with stackable stat modifiers:
SILENCERโ reduces sound radius (config:sound_radius_multiplier) with optional damage penalty.EXTENDED_MAGโ adds flat magazine capacity (config:magazine_bonus).GRIPโ reduces pitch recoil and bullet spread (config:recoil_pitch_multiplier,spread_multiplier).SCOPEโ enables precision scope spread at runtime, even on guns wherescopeable: false.
- Each gun holds at most one attachment per slot. Attaching a second of the same type replaces the first.
- Attachments persist on the gun item via PersistentDataContainer keys (
combatgun:attach_silencer, etc.). - Commands:
/gun attach <id>,/gun detach <TYPE>,/gun attachments(inspect held gun). - Config: Defined under
combatgun.attachments.<id>inconfig.yml. Five built-in definitions included (silencer, extended_mag_ar, extended_mag_smg, tactical_grip, acog_scope). AttachmentManagerexposes stat modifier helpers used at shoot time:soundMultiplier(),damageMultiplier(),magBonus(),spreadMultiplier(),recoilPitchMultiplier(),hasScopeAttachment().
Throwable Items (Grenades)
- Three throwable types, all thrown as Snowball projectiles and detonated on
ProjectileHitEventor after fuse:FRAGโ Creates a visual explosion and deals falloff damage to nearby entities.SMOKEโ Spawns a timed smoke particle cloud (campfire smoke particles for 10 seconds by default).FLASHBANGโ Applies Blindness and Slowness (simulated deafness) to nearby players, scaled by distance.
- Command:
/gun givethrowable <id> [player]. - Config: Defined under
combatgun.throwables.<id>with full control over fuse, radius, damage, duration, and effect ticks. Three built-in throwables included. ThrowableListenerhandles right-click throw and projectile landing. Registered as a separate listener fromGunListener.- Projectiles are tracked in
ThrowableManager.liveProjectilesand auto-detonate afterfuse_ticksif they don't land.
Kill Statistics & Leaderboard
- New
StatsManagerbacked by SQLite (plugins/CombatGunSSS/stats.db). No external database required. - Tracks per-player: kills, deaths, headshots, and per-gun kill counts.
- Write buffer flushes to DB every 5 minutes and on plugin disable โ minimises disk writes while keeping data safe.
- Commands:
/gun stats [player](view stats),/gun leaderboard(top 10 by kills). - New PlaceholderAPI placeholders:
%combatgun_kills%,%combatgun_deaths%,%combatgun_headshots%,%combatgun_kd%. EntityDeathListenernow callsStatsManager.recordKill()andrecordDeath()on every gun kill.- SQLite JDBC shaded into the jar via
maven-shade-pluginwith relocation todev.duong2012g.combatgun.libs.sqliteโ no external jar needed.
Changed
CombatGunSSSPluginโ registersAttachmentManager,ThrowableManager,StatsManager; registersThrowableListener;onDisable()callsstatsManager.shutdown(); startup log prints attachment/throwable counts and stats DB status.GunCommandโ addedattach,detach,attachments,givethrowable,stats,leaderboardtoSUB_COMMANDS, switch, tab completion, and help.PlaceholderHookโ addedkills,deaths,headshots,kdplaceholders (total 12 placeholders now).EntityDeathListenerโ records kill/death toStatsManageron every confirmed gun kill.plugin.ymlโ version bumped to2.0.0.pom.xmlโ version bumped to2.0.0; addedsqlite-jdbc 3.45.1.0as compile dependency; addedmaven-shade-pluginto shade and relocate SQLite.config.ymlโ addedcombatgun.attachmentsandcombatgun.throwablessections with default definitions.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:BSt2YZOI:GQhetWEz"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:BSt2YZOI:GQhetWEz"
}

