Compare commits

..

11 Commits

Author SHA1 Message Date
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
Matt 83abbc90d3 Merge pull request 'pack: v0.28.0 - Steam n Rails + Copycats+/Aero weight' (#46) from feature/v0.28.0-rails-and-aero-bridge into main 2026-05-28 19:30:04 +00:00
Matt 5a24801f48 pack: v0.28.0 — Steam 'n' Rails (port) + Copycats+/Aero weight bridge
Adds two mods on top of v0.27.0:

  - Create: Steam 'n' Rails 0.2.0+neoforge-mc1.21.1 (stable). The
    official Steam 'n' Rails team skipped 1.21.1, so this is the
    "Porters of Railways" community port — actively maintained,
    310k downloads on the beta line and 0.2.0 just hit stable.
    Brings train QoL: track tools, semaphores, conductor cap,
    smokestacks, narrow-gauge tracks, etc.

  - Copycats+ aeronautics weight 1.1.1. Small interop mod so
    copycat blocks contribute weight to Create: Aeronautics
    contraptions instead of being treated as massless. ~15KB.

All deps satisfied by mods already in the pack (Create, Copycats+,
Sable, Create: Aeronautics).

Tested live: server boots, port 25565 binds, KubeJS loads 0/0 errors,
aerocopycats logs HELLO FROM COMMON SETUP, Railways registers
55+53+238 entries across its three creative tabs. No new crashes.

Known noise: Steam 'n' Rails ships optional loot tables for tracks
of wood types from many other mods (TwilightForest, BYG, TFC, Blue
Skies, Hex Casting, BoP, etc.). Mods absent from this pack produce
~276 'Unknown registry key' ERROR lines once at boot. Harmless —
loot tables for items that don't exist just fail to parse and get
skipped. Standard behavior for Rails on lean packs.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 19:29:43 +00:00
Matt 5e816e1a7a Merge pull request 'kubejs: use kubejs-create builder API for flax press recipe' (#45) from refactor/supplementaries-bridges-kubejs-create-api into main 2026-05-28 19:08:42 +00:00
Matt d2cc179ebd kubejs: use kubejs-create builder API for flax press recipe
Now that v0.27.0 ships kubejs_create, the high-level
event.recipes.create.pressing(out, in) builder works, replacing the
raw event.custom({type: 'create:pressing', ...}) JSON shim we needed
before.

Verified live on the server -- recipe loads cleanly:
[bns/supplementaries_bridges] added flax -> string press recipe

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 18:55:43 +00:00
Matt 847ca460ff Merge pull request 'pack: v0.27.0 - Create QoL + aesthetic batch (KubeJS Create + Encased + Bells & Whistles)' (#44) from feature/v0.27.0-create-batch into main 2026-05-28 18:51:06 +00:00
Matt 96d4608e4c pack: v0.27.0 — Create QoL + aesthetic batch
Three small Create addons, no overlap with current 18-mod Create stack:

  + kubejs-create v2101.3.1-build.18
      Recipe builders for KubeJS scripts. Will replace the raw
      Create:pressing JSON in supplementaries_bridges.js with a
      cleaner event.recipes.create.* call.

  + create-encased v1.8.1-ht1
      Encased/cased variants of Create kinetic blocks (shafts,
      gearboxes, cogwheels in compact casings) for cleaner builds.

  + bellsandwhistles v0.4.7-1.21.1
      Train whistles, bells, signal lights, station decoration.

All three already deployed live; pack-version.json bumped, MC
server restarted to sync. No mod-load errors.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 13:55:55 +00:00
Matt 61321e5fcd Merge pull request 'ops: cap ZFS ARC at 2GB on glados' (#43) from ops/zfs-arc-cap into main 2026-05-28 13:52:59 +00:00
Matt fd211aae51 ops: cap ZFS ARC at 2GB on glados
The cold ZFS pool is a backup tier only — hot data (MC world, Gitea,
Directus DB, containers) lives on NVMe LVM, not ZFS. So ARC's default of
50% RAM was wasted: nothing it could cache was hot enough to matter, and
the ~16GB cache crowded MC out of RAM, pushing 2.4GB into swap.

This file lives in the repo for reproducibility; it gets dropped into
/etc/modprobe.d/ on the host and applied immediately via
/sys/module/zfs/parameters/zfs_arc_{max,min}.

Effect on glados:
  before:  used=27/31GB, free=748MB, ARC=15.6GB
  after:   used=~10GB, free=~14GB, ARC=1.0GB (1-2GB range)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 23:05:52 +00:00
12 changed files with 520 additions and 11 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.0
#.
#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.0
#.
#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 = 0.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 = 1.0
#.
#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.0
#.
#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
@@ -20,14 +20,12 @@ ServerEvents.recipes(event => {
// 2 flax pressed -> 1 string. Cheaper than wool->4 string but // 2 flax pressed -> 1 string. Cheaper than wool->4 string but
// requires a Press (kinetic infrastructure) -- balanced. // requires a Press (kinetic infrastructure) -- balanced.
// //
// KubeJS's event.recipes.create.pressing(out, in) signature // Uses the kubejs_create mod's builder API (added in pack v0.27.0).
// doesn't match Create 6.x's two-arg form, so build the recipe // Before that, the bare event.recipes.create.pressing() signature
// via custom() with the raw JSON schema. // didn't match Create 6.x's recipe shape and we had to use a raw
event.custom({ // event.custom({type: 'create:pressing', ...}) call.
type: 'create:pressing', event.recipes.create.pressing('2x minecraft:string', 'supplementaries:flax')
ingredients: [{ item: 'supplementaries:flax' }], .id('bns:press_flax_to_string');
results: [{ id: 'minecraft:string', count: 2 }],
}).id('bns:press_flax_to_string');
console.info('[bns/supplementaries_bridges] added flax -> string press recipe'); console.info('[bns/supplementaries_bridges] added flax -> string press recipe');
}); });
@@ -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"
}
}
+58 -3
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.26.0", "version": "0.29.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-04T13:22:58.7131203+00:00", "lockedAt": "2026-05-28T20:40:32Z",
"mods": [ "mods": [
{ {
"source": "modrinth", "source": "modrinth",
@@ -119,6 +119,39 @@
"size": 442369, "size": 442369,
"side": "both" "side": "both"
}, },
{
"source": "modrinth",
"slug": "kubejs-create",
"versionId": "1qmcLagN",
"version": "2101.3.1-build.18",
"path": "mods/kubejs-create-neoforge-2101.3.1-build.18.jar",
"url": "https://cdn.modrinth.com/data/T38eAZQC/versions/1qmcLagN/kubejs-create-neoforge-2101.3.1-build.18.jar",
"sha1": "f54d9ff53909771d27e4d9d135c3707cd5d5f855",
"size": 38629,
"side": "both"
},
{
"source": "modrinth",
"slug": "create-encased",
"versionId": "3sUW27Ho",
"version": "1.8.1-ht1",
"path": "mods/Create Encased-1.21.1-1.8.1-ht1.jar",
"url": "https://cdn.modrinth.com/data/hSSqdyU1/versions/3sUW27Ho/Create%20Encased-1.21.1-1.8.1-ht1.jar",
"sha1": "5ca3d7674676dda5dd472b0433505a54d5e920d0",
"size": 2574837,
"side": "both"
},
{
"source": "modrinth",
"slug": "bellsandwhistles",
"versionId": "w0mifib8",
"version": "v0.4.7-1.21.1",
"path": "mods/bellsandwhistles-0.4.7-1.21.1.jar",
"url": "https://cdn.modrinth.com/data/gJ5afkVv/versions/w0mifib8/bellsandwhistles-0.4.7-1.21.1.jar",
"sha1": "85944080f8bd47dad64a8193a70662cd9ddbb200",
"size": 193619,
"side": "both"
},
{ {
"source": "modrinth", "source": "modrinth",
"slug": "distanthorizons", "slug": "distanthorizons",
@@ -943,6 +976,28 @@
"sha1": "a865d9a00a595038d35b908c42565930189be68a", "sha1": "a865d9a00a595038d35b908c42565930189be68a",
"size": 1578765, "size": 1578765,
"side": "both" "side": "both"
},
{
"source": "modrinth",
"slug": "create-steam-n-rails-1.21.1",
"versionId": "oQKsMKfj",
"version": "0.2.0+neoforge-mc1.21.1",
"path": "mods/railways-0.2.0+neoforge-mc1.21.1.jar",
"url": "https://cdn.modrinth.com/data/L3Jv0QZI/versions/oQKsMKfj/railways-0.2.0%2Bneoforge-mc1.21.1.jar",
"sha1": "9d52eef0772b81de397271b98c0201a59733f9c6",
"size": 12106875,
"side": "both"
},
{
"source": "modrinth",
"slug": "copycats+-aeronautics-weight",
"versionId": "wsXjRa7l",
"version": "1.1.1",
"path": "mods/aerocopycats-1.1.1.jar",
"url": "https://cdn.modrinth.com/data/wjpmYU1u/versions/wsXjRa7l/aerocopycats-1.1.1.jar",
"sha1": "3a93862421d0a8cdae1e3a3d7f0d4bd01e049007",
"size": 14702,
"side": "both"
} }
], ],
"defaultServer": { "defaultServer": {
@@ -951,4 +1006,4 @@
}, },
"defaultShader": "ComplementaryReimagined_r5.7.1.zip", "defaultShader": "ComplementaryReimagined_r5.7.1.zip",
"panelUrl": "https://bns-admin.sijbers.uk" "panelUrl": "https://bns-admin.sijbers.uk"
} }
+17
View File
@@ -0,0 +1,17 @@
# ZFS ARC sizing for glados — a mixed-workload host (32 GB RAM).
#
# Why these numbers:
# - The cold ZFS pool is BACKUP TIER ONLY. Hot data (MC world, Gitea repos,
# Directus DB, containers) all live on NVMe LVM, not ZFS — so a large
# ARC doesn't help any of the actual workloads.
# - Tier-2 backup work is streaming writes (rsync hot→cold every 4h):
# streaming writes don't benefit much from cache.
# - Reads happen rarely (disaster recovery, Gitea LFS fetches), and a
# one-time cold read is fine.
# - MC is the memory-hungry workload (10 GB Java heap). Every GB we DON'T
# give to ARC is a GB more headroom for MC and future content.
#
# 2 GB max / 1 GB min keeps ZFS metadata + small ARC for occasional reads,
# without crowding MC out of RAM.
options zfs zfs_arc_max=2147483648
options zfs zfs_arc_min=1073741824