pack: content + storage batch v0.24.0 -> v0.26.0
Mods added (in lockfile):
v0.24.0 YUNG's structure mods (9):
- Better Dungeons, Better Mineshafts, Better Ocean
Monuments, Better Nether Fortresses, Better End Island,
Better Witch Huts, Better Desert Temples, Better Jungle
Temples, Bridges, Extras
v0.24.1 Create: Radars (Aeronautics-compatible from v0.4.5.1+)
v0.24.2 Ars Creo + Create Ars Compact (the latter removed in 0.25.0)
v0.24.3 FallingTree (whole-tree chop on axe hit)
v0.24.4 Copycats+, Create: Connected, Create: Interiors
v0.24.5 Create: Power Loader (Aeronautics-airship chunkloading)
v0.24.6 -- KubeJS bridges only (see below)
v0.24.7 -- Patchouli welcome book attempt 1 (kubejs/data) -- failed
v0.24.8 -- Patchouli attempt 2 (assets/data split) -- failed
v0.24.9 -- Patchouli attempt 3 (patchouli_books/ root path) -- worked
v0.25.0 REMOVED Create Ars Compact (broken sauce:source_fluid recipes,
no public tracker, half-finished compat layer);
added Create: Dragons Plus, Create: Enchantment Industry
v0.26.0 Sophisticated Core/Storage/Backpacks/Create-Integration,
Create: Additional Logistics
KubeJS additions:
- supplementaries_bridges.js: flax -> 2x string via Create Press,
Plunderer drops 1-3 spurs via EntityEvents.drops
- recipes_numismatics.js: renamed COIN_IDS -> COIN_RECIPE_REMOVE_IDS
to avoid Rhino global-scope collision with numismatics_tooltips.js,
added sprocket to the removal list (was missing)
- welcome.js: migrated from vanilla written_book (broken Filterable
codec in 1.21) to Patchouli book at patchouli_books/manual/
Patchouli manual:
- 5 entries (Welcome, Waystones, Money, Plots, Rules) under one
"Server Basics" category
- Lives at pack/overrides/patchouli_books/ (root path) -- this is
the modpack-author path per Patchouli docs, NOT data/+assets/
which is for mods bundled in jars
- Book id: patchouli:manual (default namespace in this mode)
All v0.24-v0.26 work has been live on the server and tested.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -10,15 +10,18 @@
|
||||
// depositors, bank cards) stay craftable -- those are infrastructure,
|
||||
// not currency.
|
||||
|
||||
const COIN_IDS = [
|
||||
// Renamed to avoid collision with COIN_IDS in numismatics_tooltips.js
|
||||
// (KubeJS server_scripts share a single Rhino global scope).
|
||||
const COIN_RECIPE_REMOVE_IDS = [
|
||||
'numismatics:spur',
|
||||
'numismatics:bevel',
|
||||
'numismatics:sprocket',
|
||||
'numismatics:cog',
|
||||
'numismatics:crown',
|
||||
'numismatics:sun',
|
||||
];
|
||||
|
||||
ServerEvents.recipes(event => {
|
||||
COIN_IDS.forEach(coin => event.remove({ output: coin }));
|
||||
console.info(`[bns/recipes_numismatics] removed crafting recipes for ${COIN_IDS.length} coin denominations`);
|
||||
COIN_RECIPE_REMOVE_IDS.forEach(coin => event.remove({ output: coin }));
|
||||
console.info(`[bns/recipes_numismatics] removed crafting recipes for ${COIN_RECIPE_REMOVE_IDS.length} coin denominations`);
|
||||
});
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
// Brass & Sigil -- Supplementaries cross-mod bridges
|
||||
//
|
||||
// Supplementaries already does tag work (c:crops/flax, c:fiber/flax,
|
||||
// c:drinks/lumisene, etc.) and Create auto-generates Millstone +
|
||||
// 9x packing recipes from those tags. So most integration is done.
|
||||
//
|
||||
// What's left -- two small bridges:
|
||||
// 1. Flax -> String via Mechanical Press (Create doesn't map
|
||||
// c:fiber -> string natively; this fills the gap so flax becomes
|
||||
// a viable string-source for textile builds).
|
||||
// 2. Plunderer drops 1-3 Numismatics spurs so the hostile NPC pulls
|
||||
// into the server economy. Plunderers are rare so this is a
|
||||
// mild bounty, not a farmable currency source.
|
||||
//
|
||||
// Lumisene -> Ars Source was on the list but Ars Nouveau 5.11.x's
|
||||
// sourcelink recipe schema needs verification before we add it.
|
||||
// Parked for a follow-up.
|
||||
|
||||
ServerEvents.recipes(event => {
|
||||
// 2 flax pressed -> 1 string. Cheaper than wool->4 string but
|
||||
// requires a Press (kinetic infrastructure) -- balanced.
|
||||
//
|
||||
// KubeJS's event.recipes.create.pressing(out, in) signature
|
||||
// doesn't match Create 6.x's two-arg form, so build the recipe
|
||||
// via custom() with the raw JSON schema.
|
||||
event.custom({
|
||||
type: 'create:pressing',
|
||||
ingredients: [{ item: 'supplementaries:flax' }],
|
||||
results: [{ id: 'minecraft:string', count: 2 }],
|
||||
}).id('bns:press_flax_to_string');
|
||||
console.info('[bns/supplementaries_bridges] added flax -> string press recipe');
|
||||
});
|
||||
|
||||
// Plunderer is a hostile mob that raids unprotected chests. Adding
|
||||
// a small spur bounty makes them a mini-event rather than a pure
|
||||
// nuisance. Range tuned low: 1-3 spurs = trivial vs. the player
|
||||
// economy but creates a "go hunt the plunderer" hook.
|
||||
//
|
||||
// KubeJS 2101.7.2 doesn't expose ServerEvents.entityLootTables on
|
||||
// NeoForge -- we use EntityEvents.drops (filtered by entity id) and
|
||||
// add items via event.addDrop instead.
|
||||
EntityEvents.drops('supplementaries:plunderer', event => {
|
||||
const count = 1 + Math.floor(Math.random() * 3);
|
||||
event.addDrop(Item.of('numismatics:spur', count));
|
||||
});
|
||||
console.info('[bns/supplementaries_bridges] registered plunderer -> spur drops handler');
|
||||
@@ -1,34 +1,27 @@
|
||||
// Brass & Sigil — first-join welcome grant
|
||||
// Brass & Sigil -- first-join welcome grant
|
||||
//
|
||||
// Gives each new player exactly 1 Waystone + 1 server manual book on
|
||||
// Gives each new player exactly 1 Waystone + 1 Patchouli manual on
|
||||
// first login. Gated by a per-player persistent flag so it fires once
|
||||
// even if the player relogs.
|
||||
//
|
||||
// Future: replace the vanilla written book with a Patchouli book in a
|
||||
// custom tweak jar once we have enough content to warrant the rich
|
||||
// formatting. Patchouli is already in the pack so swapping later is
|
||||
// purely a content+recipe change, no mod-add needed.
|
||||
// The manual is a Patchouli book ("patchouli:manual") shipped in the
|
||||
// pack's root patchouli_books/ folder (the modpack-author path that
|
||||
// Patchouli's docs recommend for non-mod books).
|
||||
// Folder layout:
|
||||
// patchouli_books/manual/book.json
|
||||
// patchouli_books/manual/en_us/categories/<name>.json
|
||||
// patchouli_books/manual/en_us/entries/<name>.json
|
||||
// Namespace defaults to "patchouli" in this mode -- the book id is
|
||||
// "patchouli:manual".
|
||||
|
||||
const WELCOME_FLAG = 'bnsWelcomeGranted';
|
||||
|
||||
const MANUAL_PAGES = [
|
||||
'Welcome to Brass & Sigil.\n\nThis manual covers the basics. Read it once, then keep it or toss it.',
|
||||
'WAYSTONES\n\nYou have one Waystone item. Place it at your base -- it is the only one you get.\n\nNeed to travel further? Build trains, roads, or Create Aeronautics planes.',
|
||||
'MONEY\n\nCoins cannot be crafted.\n\nTake valuables (diamonds etc.) to the bank at spawn. The exchange will trade them for coins.\n\nDynamic rates are planned.',
|
||||
'SPAWN PLOTS\n\nComing soon: buy a small commercial plot at spawn to set up your shop. One plot per player.\n\nYour home base goes OUT in the world -- claim it with FTB Chunks (free, anywhere).',
|
||||
'RULES\n\n- Be excellent to each other.\n- No griefing.\n- Lost your Waystone? Ask an OP or buy one from the bank (soon).\n- Report bugs to staff.\n\nHave fun.',
|
||||
];
|
||||
|
||||
function giveManual(player) {
|
||||
// 1.21 components-based written book: pages are filterable text
|
||||
// components, title supports the same. Plain strings are accepted.
|
||||
const book = Item.of('minecraft:written_book');
|
||||
book.set('minecraft:written_book_content', {
|
||||
title: { raw: 'Brass & Sigil Manual' },
|
||||
author: 'Server Staff',
|
||||
pages: MANUAL_PAGES.map(text => ({ raw: text })),
|
||||
resolved: true,
|
||||
});
|
||||
// Patchouli's guide_book uses the "patchouli:book" data component
|
||||
// (1.21 component system) to identify which book to open. Plain
|
||||
// resource location string is the expected value type.
|
||||
const book = Item.of('patchouli:guide_book');
|
||||
book.set('patchouli:book', 'patchouli:manual');
|
||||
player.give(book);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "Brass & Sigil Manual",
|
||||
"landing_text": "Welcome to Brass & Sigil. This manual covers the essentials -- read it once, then keep it or toss it.",
|
||||
"subtitle": "The Server Handbook",
|
||||
"creative_tab": "minecraft:tools_and_utilities",
|
||||
"model": "patchouli:guide_book",
|
||||
"show_progress": false,
|
||||
"show_advancements": false,
|
||||
"book_texture": "patchouli:textures/gui/book_brown.png",
|
||||
"version": 1
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"name": "Server Basics",
|
||||
"description": "The essentials for life in Brass & Sigil.",
|
||||
"icon": "minecraft:writable_book",
|
||||
"sortnum": 0
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Money",
|
||||
"icon": "numismatics:cog",
|
||||
"category": "patchouli:main",
|
||||
"sortnum": 2,
|
||||
"pages": [
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
"title": "Coins & Trade",
|
||||
"text": "Coins $(bold)cannot be crafted$(0). They enter circulation only through the bank at spawn.$(br2)Take valuables -- diamonds, emeralds, rare loot -- to the exchange. It trades them for coins at fixed rates."
|
||||
},
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
"title": "Denominations",
|
||||
"text": "$(li)$(item)Spur$() = 1$(li)$(item)Bevel$() = 8 spurs$(li)$(item)Sprocket$() = 16 spurs$(li)$(item)Cog$() = 64 spurs$(li)$(item)Crown$() = 512 spurs$(li)$(item)Sun$() = 4 096 spurs$(br2)Use a $(item)Bank Teller$() block to convert between denominations."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Plots & Claims",
|
||||
"icon": "ftbchunks:map",
|
||||
"category": "patchouli:main",
|
||||
"sortnum": 3,
|
||||
"pages": [
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
"title": "Spawn Plots",
|
||||
"text": "Buy a small commercial plot at spawn to set up your shop or stall. $(bold)One plot per player$(0).$(br2)Plots are limited and rented from the Plot Office at spawn -- pay in $(item)cog$()s, or trade rare items for the upgrade."
|
||||
},
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
"title": "Your Home Base",
|
||||
"text": "Your $(bold)home base$(0) lives out in the world -- not on a spawn plot. Pick a spot you like and claim it with $(item)FTB Chunks$(): open the map ($(item)m$()), click chunks to claim and force-load.$(br2)FTB Chunks claims are $(bold)free$(0) and protect against grief from other players."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"name": "Rules",
|
||||
"icon": "minecraft:shield",
|
||||
"category": "patchouli:main",
|
||||
"sortnum": 4,
|
||||
"pages": [
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
"title": "House Rules",
|
||||
"text": "$(li)Be excellent to each other.$(li)No griefing.$(li)Don't break others' contraptions or fly through their bases.$(li)Lost your Waystone? Ask an op or buy one from the bank.$(li)Report bugs and crashes to staff."
|
||||
},
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
"title": "PvP & Combat",
|
||||
"text": "PvP is $(bold)allowed$(0) outside claimed chunks. Claim your base with $(item)FTB Chunks$() to protect it.$(br2)Airships flying through unclaimed chunks are $(bold)fair game$(0) -- if you take it out beyond your claim, expect cannons."
|
||||
},
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
"title": "Griefing vs PvP",
|
||||
"text": "PvP and griefing are $(bold)not the same$(0).$(br2)Allowed: combat, raiding contested ground, sinking each other's airships in open air.$(br2)$(bold)Not allowed -- ban-worthy:$()$(li)Repeated targeted harassment of a player$(li)Destruction of unclaimed builds purely to ruin them$(li)Camping someone's claim border to grief them$(li)Stealing keys/coins via social engineering or exploit$(br2)If unsure, ask staff first."
|
||||
},
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
"text": "$(bold)Have fun.$(0)$(br2)This manual is a living document -- expect new pages as the server grows. To re-read at any time, hold the manual and right-click."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "Waystones",
|
||||
"icon": "waystones:waystone",
|
||||
"category": "patchouli:main",
|
||||
"sortnum": 1,
|
||||
"pages": [
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
"title": "Waystones",
|
||||
"text": "You have one $(item)Waystone$() in your starter kit. $(bold)Place it at your base$() -- it is the only one you get from the server."
|
||||
},
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
"text": "Need to travel further? Build:$(br)$(li)$(item)Create$() trains and tracks$(li)Roads with the $(item)brass road sign$()$(li)$(item)Create Aeronautics$() planes and airships$(br2)Once Quests are live, additional Waystones will be purchasable at the bank."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "Welcome",
|
||||
"icon": "minecraft:cake",
|
||||
"category": "patchouli:main",
|
||||
"priority": true,
|
||||
"sortnum": 0,
|
||||
"pages": [
|
||||
{
|
||||
"type": "patchouli:text",
|
||||
"title": "Welcome",
|
||||
"text": "Welcome to $(bold)Brass & Sigil$(0)!$(br2)This manual covers the basics. Skim it now, then keep it on you or toss it in a chest -- you can always craft another by combining a $(item)book$() with a server-issued $(item)sigil$()."
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user