Compare commits

...

11 Commits

Author SHA1 Message Date
Matt d6c6da446c pack: v0.30.0 — Combat batch (Better Combat + Combat Roll + Alex's Mobs)
Adds the v0.30.0 combat-feel batch:

  - Better Combat 2.3.2 -- directional attacks, multi-hit swings,
    weapon-type animations. Data-driven attack profiles so Create,
    CBC, Ars weapons all get appropriate swings automatically. No
    new weapons or recipes -- pure mechanics overhaul. First-person
    view fully supported as of 2.0.4.

  - Combat Roll 2.0.6 -- dodge roll on double-tap with brief invuln
    + roll-related attributes/enchants. Same author and shares deps
    with Better Combat, explicitly designed to work alongside.

  - Alex's Mobs port 1.22.17 -- wide nature-themed mob variety
    (~70+ creatures). Original mod stops at 1.20.1; this is the
    community port for 1.21.1, 187k downloads, recently updated.

Deps added with the batch (all new to pack):
  - Cloth Config 15.0.140 (BC + Combat Roll)
  - playerAnimator 2.0.4 (BC + Combat Roll)
  - Citadel port 2.7.6 (Alex's Mobs)

Verified live: 0.30.0 synced, all 6 jars discovered, BC registered
3007-byte weapon attribute table, Combat Roll loaded, Alex's Mobs
adding datapack listeners. KubeJS 0 errors, port 25565 binds.

The v0.31.0 batch (Twilight Forest + Aether) is parked for later --
holding until plot/economy work is running so players have reason
to leave spawn for those dimensions.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 19:49:38 +00:00
Matt 6bc44ffd2e Merge pull request 'pack: v0.29.1 — Improved Village Placement' (#51) from feature/v0.29.1-improved-village-placement into main 2026-05-29 18:09:16 +00:00
Matt b5ebe26649 pack: v0.29.1 — Improved Village Placement
Adds Improved Village Placement 1.1.1 (Modrinth). Forces villages
to spawn on flat terrain instead of clipping into hillsides /
floating mid-air on slopes. Tiny mod (34KB). Required dep
Lithostitched is already in the pack at 1.7.2.

Verified live: mod loaded, server boots clean, port 25565 binds.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 18:09:15 +00:00
Matt 4f13fd1408 Merge pull request 'fuel: tier lava equivalent to crude oil (8000 ticks)' (#50) from fuel/lava-tier-crude into main 2026-05-28 20:46:36 +00:00
Matt 77d1cef1d0 fuel: tier lava equivalent to crude oil (8000 ticks/bucket)
Without this entry, lava buckets get the vanilla bucket-burn fallback
of 20000 ticks each — which made lava more powerful than refined
TFMG kerosene/naphtha despite being free and trivially obtainable.

Setting lava to 8000 ticks matches crude_oil exactly: both are the
raw entry-tier fuels you can scoop without any infrastructure, and
the player has to commit to a refining setup to unlock the higher
tiers.

Solid fuels (coal, charcoal, blaze rods, etc.) continue to work via
realisticTrains' chest/barrel pathway -- no datapack entry needed.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 20:46:35 +00:00
Matt 19705118d3 Merge pull request 'cbc: restore mod-default failure chances' (#49) from config/cbc-restore-defaults into main 2026-05-28 20:44:07 +00:00
Matt cfc1a21d25 cbc: restore mod-default failure chances
Revert the custom tier-strict + user-error-forgiveness tuning shipped
in v0.29.0 and use the mod's shipped defaults instead:

  squibChance              0.0  -> 0.25
  barrelChargeBurstChance  0.0  -> 0.2
  interruptedIgnitionChance 0.0 -> 0.33
  overloadBurstChance      1.0  -> 0.5
  failureExplosionPower    0.0  -> 2.0

disableAllCannonFailure stays false. Tier balance is still preserved
(material maxSafePropellantStress is what gates overload). The
difference is failures are now probabilistic per the mod author's
intended balance, and the explosion has its default power.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 20:43:54 +00:00
Matt 4cbc8c42af Merge pull request 'pack: v0.29.0 — train fuel + CBC tier-preserving safety' (#48) from feature/v0.29.0-train-fuel-and-cbc-tier into main 2026-05-28 20:42:38 +00:00
Matt e84de6c190 pack: v0.29.0 — train fuel requirement + CBC tier-preserving safety
Two related gameplay tweaks:

1. Train fuel requirement (Steam 'n' Rails)
   - Set realisticTrains = true in railways-server.toml.
     Trains now consume fuel from a Fuel Tank (liquid) or solid fuels
     in chests/barrels on the contraption. realisticFuelTanks stays
     true so tanks won't accept water/junk.
   - Ship a datapack bns-fuel/ that defines TFMG fluids as proper
     liquid fuels at tiered burn rates:
       crude_oil    8000 ticks/bucket   (raw, abundant -- entry)
       furnace_gas 12000 ticks/bucket   (cheap by-product)
       naphtha     24000 ticks/bucket   (mid refined)
       kerosene    24000 ticks/bucket   (mid refined)
       gasoline    36000 ticks/bucket   (top refined)
       diesel      48000 ticks/bucket   (top refined, longest)
     Vanilla lava bucket still works via bucket-burn fallback
     (20000 ticks). Tier curve incentivises building a real refinery.

2. CBC tier-preserving cannon safety
   - Revert the nuclear disableAllCannonFailure=true switch shipped
     in v0.28 hotfix -- it killed the bronze/steel/nethersteel tier
     balance because overloaded cannons fired without consequence.
   - Per-lever config that protects against random RNG losses while
     keeping the tier mechanic intact:
       disableAllCannonFailure = false
       squibChance = 0.0              (no random projectile-stuck)
       barrelChargeBurstChance = 0.0  (forgive misplaced charges)
       interruptedIgnitionChance = 0.0 (forgive gapped loads)
       overloadBurstChance = 1.0      (TIER STRICT -- exceed your
                                       cannon's rated propellant
                                       stress = lose the cannon)
       failureExplosionPower = 0.0    (no collateral blast when it
                                       does die from overload)
   - Effect: a cannon built to spec and used within its
     maxSafePropellantStress is immortal. Overloading dies cleanly
     per the material's failureMode, no fortress damage. User error
     (squib/misplace/gap) doesn't destroy expensive builds.

Stress units NOT supported for trains: verified by inspecting Rails
and Create bytecode, nothing consumes SU for train movement. Liquid
fuel is the supported mechanism.

Verified live: server boots clean, port 25565 binds, KubeJS loads
0 errors, Minecraft auto-enables the bns-fuel datapack, Rails
initializes the LiquidFuelManager reload listener.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 20:42:38 +00:00
Matt 92306823cb Merge pull request 'cbc: disable cannon self-failure (RNG self-destruct)' (#47) from config/cbc-disable-self-failure into main 2026-05-28 19:39:44 +00:00
Matt c723a42628 cbc: disable all cannon self-failure
Cannons are expensive to build; users were losing them to RNG
self-destruction (squib, barrel charge burst, overload, interrupted
ignition, catastrophic failure). Per-cannon failure is configurable
via a single master switch in createbigcannons-server.toml:

  [failure]
  disableAllCannonFailure = true

This zeroes out all six failure paths in one go. Applied to the live
server and tracked here under defaultconfigs/ so future server resets
preserve it.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 19:39:44 +00:00
11 changed files with 522 additions and 2 deletions
@@ -0,0 +1,342 @@
#.
#These values affect the extent of cannon failure.
[failure]
#.
#.
#If true, cannons cannot fail whatsoever. Equivalent to setting all the chances below to zero.
disableAllCannonFailure = false
#.
#Chance that a fired projectile will get stuck in a barrel after exceeding the squib ratio. 0 is 0%, 1 is 100%.
# Default: 0.25
# Range: 0.0 ~ 1.0
squibChance = 0.25
#.
#Chance that a cannon will fail if a Powder Charge is ignited in a "barrel"-type cannon block. 0 is 0%, 1 is 100%.
#This chance can be affected by stronger and weaker charge blocks.
# Default: 0.20000000298023224
# Range: 0.0 ~ 1.0
barrelChargeBurstChance = 0.20000000298023224
#.
#How strong the explosion of a catastrophic failure is. Scaled by the amount of charges used in the shot.
# Default: 2.0
# Range: 0.0 ~ 3.4028234663852886E38
failureExplosionPower = 2.0
#.
#Chance that a cannon loaded with more Powder Charges that it can handle will fail. 0 is 0%, 1 is 100%.
# Default: 0.5
# Range: 0.0 ~ 1.0
overloadBurstChance = 0.5
#.
#Chance that a load with gaps between the loaded Powder Charges will not completely combust. 0 is 0%, 1 is 100%.
# Default: 0.33000001311302185
# Range: 0.0 ~ 1.0
interruptedIgnitionChance = 0.33000001311302185
#.
#These values affect the characteristics of cannon munitions.
[munitions]
#.
#.
#If projectiles can bounce, ricochet, and be deflected.
projectilesCanBounce = true
#.
# Default: 0.33000001311302185
# Range: 0.0 ~ 1.0
baseProjectileBounceChance = 0.33000001311302185
#.
# Default: 0.8999999761581421
# Range: 0.0 ~ 1.0
baseProjectileFluidBounceChance = 0.8999999761581421
#.
#[in Meters per Tick]
#The minimum velocity necessary to activate the penetration bonus.
# Default: 1.0
# Range: 0.0 ~ 3.4028234663852886E38
minimumVelocityForPenetrationBonus = 1.0
#.
# Default: 0.10000000149011612
# Range: 0.0 ~ 3.4028234663852886E38
penetrationBonusScale = 0.10000000149011612
#.
#The extent to which cannon projectiles can damage surrounding blocks.
#All Damage - projectiles will destroy anything they hit, if applicable. Explosive projectiles will destroy blocks on detonation.
#No Explosive Damage - projectiles will destroy anything they hit, if applicable. Explosive projectiles will only harm entities on detonation.
#No Damage - projectiles will not destroy anything they hit, and will only deal entity damage. Explosive projectiles will only harm entities on detonation.
#Allowed Values: ALL_DAMAGE, NO_EXPLOSIVE_DAMAGE, NO_DAMAGE
damageRestriction = "ALL_DAMAGE"
#.
projectilesChangeSurroundings = true
#.
munitionBlocksCanExplode = true
#.
#Damp Big Cannon Propellant
[munitions.dampBigCannonPropellant]
#.
dampPropellantBlocksStartingIgnition = true
#.
dampPropellantWeakensPropellant = true
#.
#Chunkloading
[munitions.chunkloading]
#.
projectilesCanChunkload = true
#.
smokeCloudsCanChunkload = true
#.
#Big Cannon Munitions
[munitions.bigCannonMunitions]
#.
#Allowed Values: NONE, LONG, SHORT
trailType = "SHORT"
#.
#Makes all shot big cannon projectiles tracers regardless if the item had a tracer tip applied.
allBigCannonProjectilesAreTracers = false
#.
#[in Ticks]
# Default: 20
# Range: 0 ~ 100
quickFiringBreechItemPickupDelay = 20
#.
quickFiringBreechItemGoesToInventory = false
#.
#Projectile Fuzes
[munitions.fuzes]
#.
#Chance that the Impact Fuze/Delayed Impact Fuze will detonate on hitting something. 0 is 0% (never), 1 is 100% (always).
# Default: 0.6700000166893005
# Range: 0.0 ~ 1.0
impactFuzeDetonationChance = 0.6700000166893005
#.
#How many blocks the Impact Fuze/Delayed Impact Fuze can hit before breaking. Set to -1 to never break.
# Default: 3
# Range: > -1
impactFuzeDurability = 3
#.
#Chance that the Inertia Fuze/Delayed Inertia Fuze will detonate on hitting something. 0 is 0% (never), 1 is 100% (always).
# Default: 0.8999999761581421
# Range: 0.0 ~ 1.0
inertiaFuzeDetonationChance = 0.8999999761581421
#.
#How many blocks the Inertia Fuze/Delayed Inertia Fuze can hit before breaking. Set to -1 to never break.
# Default: 3
# Range: > -1
inertiaFuzeDurability = 3
#.
#[in Ticks]
#Time it takes for a proximity fuze to arm itself.
#After the fuze has been in the air for the specified arming time, it will detonate when it gets close enough to a block or entity.
# Default: 5
# Range: > 0
proximityFuzeArmingTime = 5
#.
#Scale of the area covered by the Proximity Fuze. Larger number means wider area covered
# Default: 5
# Range: 1 ~ 10
proximityFuzeScale = 5
#.
#[in Blocks]
#Spacing of the detection points of the Proximity Fuze.
# Default: 1.5
# Range: 0.5 ~ 2.0
proximityFuzeSpacing = 1.5
#.
#Grouped Munitions
[munitions.groupedMunitions]
#.
#The chance of a fluid blob affecting a block in its area of effect (AOE). 0 is 0% (never), 1 is 100% (always).
# Default: 0.5
# Range: 0.0 ~ 1.0
fluidBlobBlockEffectChance = 0.5
#.
#Autocannon Munitions
[munitions.autocannonMunitions]
#.
#Allowed Values: NONE, LONG, SHORT
trailType = "SHORT"
#.
#Makes all shot autocannon projectiles tracers regardless if the item had a tracer tip applied. Emulates legacy behavior.
allAutocannonProjectilesAreTracers = false
#.
#How many autocannon rounds the Autocannon Ammo Container can store.
# Default: 16
# Range: 1 ~ 128
autocannonAmmoContainerAutocannonRoundCapacity = 16
#.
#How many machine gun rounds the Autocannon Ammo Container can store.
# Default: 64
# Range: 1 ~ 128
autocannonAmmoContainerMachineGunRoundCapacity = 64
#.
#These values affect the characteristics of cannon materials and cannon structures
[cannons]
#.
#.
#Maximum length of cannons that can be built.
# Default: 64
# Range: > 3
maxCannonLength = 64
#.
#Time when the Quickfiring Breech cannot be loaded by Mechanical Arms.
# Default: 40
# Range: > 0
quickfiringBreechLoadingCooldown = 40
#.
#Time it takes for the Quickfiring Breech to fully open/close, during which it cannot be loaded.
# Default: 5
# Range: > 0
quickfiringBreechOpeningCooldown = 5
#.
# Default: 4.0
# Range: 0.0 ~ 3.4028234663852886E38
bigCannonRecoilScale = 4.0
#.
# Default: 0.5
# Range: 0.0 ~ 3.4028234663852886E38
autocannonRecoilScale = 0.5
#.
#Drop Mortar
[cannons.dropMortar]
#.
#Time in ticks between inserting a munition into a drop mortar and the drop mortar firing it. There are 20 ticks in 1 second.
# Default: 5
# Range: > 0
dropMortarDelay = 5
#.
#Length in ticks that the player has to wait for before inserting the same munition type into a drop mortar again. There are 20 ticks in 1 second.
# Default: 40
# Range: > 0
dropMortarItemCooldown = 40
#.
#Loading Tools
[cannons.loadingTools]
#.
#If deployers can use loading tools.
deployersCanUseLoadingTools = false
#.
#How many blocks inside a cannon a Ram Rod can reach.
# Default: 5
# Range: > 1
ramRodReach = 5
#.
#Maximum amount of munition blocks a Ram Rod can push.
# Default: 3
# Range: > 1
ramRodStrength = 3
#.
#How many blocks inside a cannon a Worm can reach.
# Default: 5
# Range: > 1
wormReach = 5
#.
#How many hunger/saturation points it takes to move one munition block a distance of one block using loading tools.
# Default: 2.5
# Range: 0.0 ~ 3.4028234663852886E38
loadingToolHungerConsumption = 2.5
#.
#How many ticks before a player can use a manual loading tool again. There are 20 ticks in 1 second.
# Default: 20
# Range: > 0
loadingToolCooldown = 20
#.
#Cannon Carriages
[cannons.carriage]
#.
#How fast the carriage is, in blocks per tick.
# Default: 0.03999999910593033
# Range: 0.03999999910593033 ~ 1.0
carriageSpeed = 0.03999999910593033
#.
#How fast the carriage turns, in degrees per tick.
# Default: 1.0
# Range: 0.10000000149011612 ~ 10.0
carriageTurnRate = 1.0
#.
cannonWeightAffectsCarriageSpeed = true
#.
#Display Link Info
[cannons.displayLink]
#.
shouldDisplayCannonRotation = true
#.
shouldDisplayContainedMunitions = true
#.
#Big Cannon Screen Shake
[cannons.bigCannonScreenShake]
#.
# Default: 8.0
# Range: 0.0 ~ 3.4028234663852886E38
blastDistanceMultiplier = 8.0
#.
#These values affect various miscellaneous contraptions.
[kinetics]
#.
#.
#Maximum length of cannon loaders that can be built.
# Default: 64
# Range: > 3
maxLoaderLength = 64
#.
#When enabled, Cannon Loaders will not break if another contraption is placed on them. Enables legacy behavior.
enableIntersectionLoading = false
#.
#These values affect the stress of Create Big Cannons' mechanical blocks.
[kinetics.stressValues.v2]
#.
#.
#[in Stress Units]
#Configure the individual stress impact of mechanical blocks. Note that this cost is doubled for every speed increase it receives.
[kinetics.stressValues.v2.impact]
steel_sliding_breech = 32.0
cannon_drill = 8.0
nethersteel_screw_breech = 40.0
steel_screw_breech = 16.0
bronze_sliding_breech = 12.0
cannon_loader = 4.0
cannon_builder = 8.0
cast_iron_sliding_breech = 16.0
#.
#These values affect cannon crafting properties.
[crafting]
#.
#.
#Maximum height of a single cannon cast that can be built.
# Default: 32
# Range: > 1
maxCannonCastHeight = 32
#.
#Maximum length of a Cannon Drill that can be built.
# Default: 32
# Range: > 1
maxCannonDrillLength = 32
#.
#Maximum length of a Cannon Builder that can be built.
# Default: 32
# Range: > 1
maxCannonBuilderLength = 32
#.
#Maximum reach of a Cannon Builder.
# Default: 32
# Range: > 2
maxCannonBuilderRange = 32
#.
#[in Ticks]
#Time a built-up cannon block needs to be heated for until it transforms into its finished form.
# Default: 6000
# Range: > 0
builtUpCannonHeatingTime = 6000
@@ -0,0 +1,67 @@
#.
#Miscellaneous settings
[misc]
#.
#Coupler will require points to be on the same or adjacent track edge, this will prevent the coupler from working if there is any form of junction in between the two points.
strictCoupler = false
#.
#Allow controlling Brass Switches remotely when approaching them on a train
flipDistantSwitches = true
#.
#Max distance between targeted track and placed switch stand
# Default: 64
# Range: 16 ~ 128
switchPlacementRange = 64
#.
#Allow creepers and ghast fireballs to damage tracks
creeperTrackDamage = false
#.
#Multiplier used for calculating exhaustion from speed when a handcar is used.
# Default: 0.009999999776482582
# Range: 0.0 ~ 1.0
handcarHungerMultiplier = 0.009999999776482582
#.
#Semaphore settings
[semaphores]
#.
#.
#Simplified semaphore placement (no upside-down placement)
simplifiedPlacement = true
#.
#Whether semaphore color order is reversed when the semaphores are oriented upside-down
flipYellowOrder = false
#.
#Conductor settings
[conductors]
#.
#.
#Conductor whistle is limited to the owner of a train
mustOwnBoundTrain = false
#.
#Maximum length of conductor vents
# Default: 64
# Range: > 1
maxConductorVentLength = 64
#.
#How often a conductor whistle updates the train of the bound conductor
# Default: 10
# Range: 1 ~ 600
whistleRebindRate = 10
#.
#Maximum distance (in blocks) at which a conductor can be activated by looking at them
# Default: 16
# Range: 1 ~ 64
activationDistance = 16
#.
#Realism Settings
[realism]
#.
#.
#Make trains require fuel to run (either from fuel tanks or solid fuels in chests/barrels)
realisticTrains = true
#.
#Make fuel tanks only accept proper liquid fuels (so water etc can't go into them)
realisticFuelTanks = true
@@ -0,0 +1,4 @@
{
"fluids": ["minecraft:lava"],
"fuel_ticks": 8000
}
@@ -0,0 +1,4 @@
{
"fluids": ["tfmg:crude_oil"],
"fuel_ticks": 8000
}
@@ -0,0 +1,4 @@
{
"fluids": ["tfmg:diesel"],
"fuel_ticks": 48000
}
@@ -0,0 +1,4 @@
{
"fluids": ["tfmg:furnace_gas"],
"fuel_ticks": 12000
}
@@ -0,0 +1,4 @@
{
"fluids": ["tfmg:gasoline"],
"fuel_ticks": 36000
}
@@ -0,0 +1,4 @@
{
"fluids": ["tfmg:kerosene"],
"fuel_ticks": 24000
}
@@ -0,0 +1,4 @@
{
"fluids": ["tfmg:naphtha"],
"fuel_ticks": 24000
}
@@ -0,0 +1,6 @@
{
"pack": {
"pack_format": 48,
"description": "Brass and Sigil — Steam'n'Rails liquid fuel definitions"
}
}
+79 -2
View File
@@ -1,13 +1,13 @@
{ {
"$schema": "Brass-and-Sigil pack.lock.json - generated, do not edit by hand unless you know what you are doing", "$schema": "Brass-and-Sigil pack.lock.json - generated, do not edit by hand unless you know what you are doing",
"name": "Brass and Sigil", "name": "Brass and Sigil",
"version": "0.28.0", "version": "0.30.0",
"minecraft": "1.21.1", "minecraft": "1.21.1",
"loader": { "loader": {
"type": "neoforge", "type": "neoforge",
"version": "21.1.228" "version": "21.1.228"
}, },
"lockedAt": "2026-05-28T19:27:42Z", "lockedAt": "2026-05-29T19:46:44Z",
"mods": [ "mods": [
{ {
"source": "modrinth", "source": "modrinth",
@@ -998,6 +998,83 @@
"sha1": "3a93862421d0a8cdae1e3a3d7f0d4bd01e049007", "sha1": "3a93862421d0a8cdae1e3a3d7f0d4bd01e049007",
"size": 14702, "size": 14702,
"side": "both" "side": "both"
},
{
"source": "modrinth",
"slug": "improved-village-placement",
"versionId": "A9qu7ToP",
"version": "1.1.1",
"path": "mods/improved-village-placement-1.1.1.jar",
"url": "https://cdn.modrinth.com/data/KA0MllEw/versions/A9qu7ToP/improved-village-placement-1.1.1.jar",
"sha1": "15740b951061eea637a36a967d64085f9375a932",
"size": 34172,
"side": "both"
},
{
"source": "modrinth",
"slug": "cloth-config",
"versionId": "izKINKFg",
"version": "15.0.140+neoforge",
"path": "mods/cloth-config-15.0.140-neoforge.jar",
"url": "https://cdn.modrinth.com/data/9s6osm5g/versions/izKINKFg/cloth-config-15.0.140-neoforge.jar",
"sha1": "c3e5733ba4503b102589a026000fd5ce0212f6f2",
"size": 1163890,
"side": "both"
},
{
"source": "modrinth",
"slug": "playeranimator",
"versionId": "HJZB6bmA",
"version": "2.0.4+1.21.1-forge",
"path": "mods/player-animation-lib-forge-2.0.4+1.21.1.jar",
"url": "https://cdn.modrinth.com/data/gedNE4y2/versions/HJZB6bmA/player-animation-lib-forge-2.0.4%2B1.21.1.jar",
"sha1": "05be8ddcc78532b9a5520c718edc6c971cd0057c",
"size": 203149,
"side": "both"
},
{
"source": "modrinth",
"slug": "citadel-(1.21.1-port)",
"versionId": "mIylVpkN",
"version": "2.7.6",
"path": "mods/citadel-1.21.1-2.7.6.jar",
"url": "https://cdn.modrinth.com/data/XjY0RcQj/versions/mIylVpkN/citadel-1.21.1-2.7.6.jar",
"sha1": "e0392370117ec16a721f8d65728944398de77607",
"size": 3028943,
"side": "both"
},
{
"source": "modrinth",
"slug": "better-combat",
"versionId": "2NyTus6V",
"version": "2.3.2+1.21.1-neoforge",
"path": "mods/bettercombat-neoforge-2.3.2+1.21.1.jar",
"url": "https://cdn.modrinth.com/data/5sy6g3kz/versions/2NyTus6V/bettercombat-neoforge-2.3.2%2B1.21.1.jar",
"sha1": "f752fbbf81027948ef4ab0fc0066260ccf574179",
"size": 1041845,
"side": "both"
},
{
"source": "modrinth",
"slug": "combat-roll",
"versionId": "FT7t1n1a",
"version": "2.0.6+1.21.1-neoforge",
"path": "mods/combat_roll-neoforge-2.0.6+1.21.1.jar",
"url": "https://cdn.modrinth.com/data/wGKYL7st/versions/FT7t1n1a/combat_roll-neoforge-2.0.6%2B1.21.1.jar",
"sha1": "8b9676996e2b49520ac29d92e6068089c5f40baa",
"size": 193381,
"side": "both"
},
{
"source": "modrinth",
"slug": "alexs-mobs(1.21.1)",
"versionId": "KSgki4uc",
"version": "1.22.17",
"path": "mods/alexsmobs-1.22.17.jar",
"url": "https://cdn.modrinth.com/data/EmNhnNnt/versions/KSgki4uc/alexsmobs-1.22.17.jar",
"sha1": "5070e8070f60650d773bfd9f1d031496f8f50259",
"size": 26620546,
"side": "both"
} }
], ],
"defaultServer": { "defaultServer": {