Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ce8304d6cb | |||
| 7eb70bfa78 | |||
| add5803191 | |||
| e74f123896 | |||
| fe5b7ce1ea | |||
| d3a9d4e12a | |||
| 01e1e4a502 | |||
| e53b4cc868 | |||
| 2ac4b2f2cd | |||
| d60c0176dd | |||
| b064a9f515 |
@@ -0,0 +1,53 @@
|
||||
// Brass & Sigil — JEI hides
|
||||
//
|
||||
// Hides all Waystones items + all Numismatics coin items from the JEI
|
||||
// item list. Combined with the server-side recipe removal in
|
||||
// economy_policy.js, players don't see crafting recipes OR the item
|
||||
// icons in the JEI ingredient list -- they only ever encounter these
|
||||
// items through the welcome grant or the bank exchange.
|
||||
|
||||
const COLORS = [
|
||||
'white', 'orange', 'magenta', 'light_blue', 'yellow', 'lime',
|
||||
'pink', 'gray', 'light_gray', 'cyan', 'purple', 'blue',
|
||||
'brown', 'green', 'red', 'black',
|
||||
];
|
||||
|
||||
const WAYSTONE_ITEMS = [
|
||||
// regular waystone variants
|
||||
'waystones:waystone',
|
||||
'waystones:mossy_waystone',
|
||||
'waystones:sandy_waystone',
|
||||
'waystones:blackstone_waystone',
|
||||
'waystones:deepslate_waystone',
|
||||
'waystones:end_stone_waystone',
|
||||
// handheld + plate
|
||||
'waystones:warp_stone',
|
||||
'waystones:warp_scroll',
|
||||
'waystones:bound_scroll',
|
||||
'waystones:return_scroll',
|
||||
'waystones:warp_plate',
|
||||
// sharestones (16 colors) + shards
|
||||
'waystones:sharestone', // base id if registered
|
||||
];
|
||||
COLORS.forEach(c => {
|
||||
WAYSTONE_ITEMS.push(`waystones:${c}_sharestone`);
|
||||
WAYSTONE_ITEMS.push(`waystones:${c}_portstone`);
|
||||
});
|
||||
|
||||
const COIN_ITEMS = [
|
||||
'numismatics:spur',
|
||||
'numismatics:bevel',
|
||||
'numismatics:cog',
|
||||
'numismatics:crown',
|
||||
'numismatics:sun',
|
||||
];
|
||||
|
||||
JEIEvents.hideItems(event => {
|
||||
[...WAYSTONE_ITEMS, ...COIN_ITEMS].forEach(id => {
|
||||
try { event.hide(id); } catch (e) {
|
||||
// Some IDs may not exist (e.g. base 'waystones:sharestone' isn't
|
||||
// registered if only colored variants are). Swallow per-item
|
||||
// failures so one bad id doesn't break the whole pass.
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,282 @@
|
||||
// Brass & Sigil — ComputerCraft recipe overhaul (full coverage)
|
||||
//
|
||||
// Replaces every craftable CC: Tweaked recipe with a Create + TFMG -gated
|
||||
// version. Designed as a 5-tier progression that maps onto pack-wide
|
||||
// industrial advancement:
|
||||
//
|
||||
// T1 - Cabling: copper_wire + andesite_casing. Mid-game accessible.
|
||||
// T2 - Basic CC: brass_casing, electron_tube, precision_mechanism,
|
||||
// nixie_tube, plastic + steel. Players need Create's tier-2
|
||||
// production set and TFMG's coke oven + distillation tower.
|
||||
// T3 - Networking + Robotics: electromagnetic_coil (TFMG late) +
|
||||
// mechanical_arm/bearing/gantry_shaft (Create kinetic), plus
|
||||
// constantan_wire (TFMG mid-late metal).
|
||||
// T4 - Advanced computing: silicon_ingot (TFMG electrolysis chain =
|
||||
// late game), rose_quartz, display_link, railway_casing, gold.
|
||||
// T5 - Mobile: pocket computers, miniaturised forms of T2/T4.
|
||||
//
|
||||
// Wires are deliberately the connective thread: copper_wire shows up
|
||||
// EVERYWHERE in early recipes (cables, modems), aluminum_wire is mid,
|
||||
// constantan_wire is high-tier. TFMG's electrical production becomes
|
||||
// genuinely useful for CC progression.
|
||||
|
||||
ServerEvents.recipes(event => {
|
||||
// ─── T1 - CABLING ──────────────────────────────────────────────────
|
||||
// Cable: 8-output craft to make laying networks viable. Heavy
|
||||
// copper_wire usage so players bulk-produce wire to support CC.
|
||||
event.remove({ output: 'computercraft:cable' });
|
||||
event.shaped(Item.of('computercraft:cable', 8), [
|
||||
'WWW',
|
||||
'CRC',
|
||||
'WWW',
|
||||
], {
|
||||
W: 'tfmg:copper_wire',
|
||||
C: 'create:andesite_casing',
|
||||
R: 'minecraft:redstone',
|
||||
});
|
||||
|
||||
// ─── T2 - BASIC COMPUTING ──────────────────────────────────────────
|
||||
|
||||
// Computer (Basic): brass_casing core (the "industrial computer"
|
||||
// chassis), electron_tube above/below (the retro CPU), steel side
|
||||
// armour, precision_mech in the heart.
|
||||
event.remove({ output: 'computercraft:computer_normal' });
|
||||
event.shaped('computercraft:computer_normal', [
|
||||
'PEP',
|
||||
'SBS',
|
||||
'PMP',
|
||||
], {
|
||||
P: 'tfmg:plastic_sheet',
|
||||
E: 'create:electron_tube',
|
||||
S: 'tfmg:steel_ingot',
|
||||
B: 'create:brass_casing',
|
||||
M: 'create:precision_mechanism',
|
||||
});
|
||||
|
||||
// Monitor (Basic): nixie_tube top + bottom for retro display feel,
|
||||
// glass pane window, copper sheet trim.
|
||||
event.remove({ output: 'computercraft:monitor_normal' });
|
||||
event.shaped('computercraft:monitor_normal', [
|
||||
'CNC',
|
||||
'GGG',
|
||||
'CNC',
|
||||
], {
|
||||
C: 'create:copper_sheet',
|
||||
N: 'create:nixie_tube',
|
||||
G: 'minecraft:glass_pane',
|
||||
});
|
||||
|
||||
// Disk Drive: cogwheel for the spinning read head, precision_mech
|
||||
// for the data IO, rose_quartz for the data medium.
|
||||
event.remove({ output: 'computercraft:disk_drive' });
|
||||
event.shaped('computercraft:disk_drive', [
|
||||
'SOS',
|
||||
'RQR',
|
||||
'SMS',
|
||||
], {
|
||||
S: 'tfmg:steel_ingot',
|
||||
O: 'create:cogwheel',
|
||||
R: 'minecraft:redstone',
|
||||
Q: 'create:rose_quartz',
|
||||
M: 'create:precision_mechanism',
|
||||
});
|
||||
|
||||
// Floppy Disk: 2 plastic + redstone, shapeless, cheap consumable.
|
||||
event.remove({ output: 'computercraft:disk' });
|
||||
event.shapeless('computercraft:disk', [
|
||||
'tfmg:plastic_sheet',
|
||||
'tfmg:plastic_sheet',
|
||||
'minecraft:redstone',
|
||||
]);
|
||||
|
||||
// Wired Modem: copper_wire signal pickup wrapped around a brass
|
||||
// casing with an electron tube amplifier.
|
||||
event.remove({ output: 'computercraft:wired_modem' });
|
||||
event.shaped('computercraft:wired_modem', [
|
||||
'WBW',
|
||||
'WEW',
|
||||
'WBW',
|
||||
], {
|
||||
W: 'tfmg:copper_wire',
|
||||
B: 'create:brass_casing',
|
||||
E: 'create:electron_tube',
|
||||
});
|
||||
|
||||
// Wired Modem Full: just the block-form. Same recipe but yields the
|
||||
// full-block variant; CC's default chains them via shapeless.
|
||||
event.remove({ output: 'computercraft:wired_modem_full' });
|
||||
event.shapeless('computercraft:wired_modem_full',
|
||||
['computercraft:wired_modem']);
|
||||
|
||||
// Speaker: electron_tube amplifier feeding a note_block, in a
|
||||
// brass_casing chassis.
|
||||
event.remove({ output: 'computercraft:speaker' });
|
||||
event.shaped('computercraft:speaker', [
|
||||
'CEC',
|
||||
'PBP',
|
||||
'CNC',
|
||||
], {
|
||||
C: 'create:copper_sheet',
|
||||
E: 'create:electron_tube',
|
||||
P: 'tfmg:plastic_sheet',
|
||||
B: 'create:brass_casing',
|
||||
N: 'minecraft:note_block',
|
||||
});
|
||||
|
||||
// Printer: ink + precision_mech + cogwheels.
|
||||
event.remove({ output: 'computercraft:printer' });
|
||||
event.shaped('computercraft:printer', [
|
||||
'SSS',
|
||||
'IMI',
|
||||
'SOS',
|
||||
], {
|
||||
S: 'tfmg:steel_ingot',
|
||||
I: 'minecraft:ink_sac',
|
||||
M: 'create:precision_mechanism',
|
||||
O: 'create:cogwheel',
|
||||
});
|
||||
|
||||
// ─── T3 - NETWORKING + ROBOTICS ────────────────────────────────────
|
||||
|
||||
// Wireless Modem (Basic): TFMG electromagnetic_coil is the antenna,
|
||||
// copper_wire signal lines, brass_casing chassis.
|
||||
event.remove({ output: 'computercraft:wireless_modem_normal' });
|
||||
event.shaped('computercraft:wireless_modem_normal', [
|
||||
'WAW',
|
||||
'PLP',
|
||||
'WBW',
|
||||
], {
|
||||
W: 'tfmg:copper_wire',
|
||||
A: 'tfmg:aluminum_wire',
|
||||
P: 'tfmg:plastic_sheet',
|
||||
L: 'tfmg:electromagnetic_coil',
|
||||
B: 'create:brass_casing',
|
||||
});
|
||||
|
||||
// Redstone Relay: brass casing, electron tubes for switching, copper
|
||||
// wire signal. The CC equivalent of "smart redstone repeater".
|
||||
event.remove({ output: 'computercraft:redstone_relay' });
|
||||
event.shaped('computercraft:redstone_relay', [
|
||||
'WEW',
|
||||
'RBR',
|
||||
'WEW',
|
||||
], {
|
||||
W: 'tfmg:copper_wire',
|
||||
E: 'create:electron_tube',
|
||||
R: 'minecraft:redstone',
|
||||
B: 'create:brass_casing',
|
||||
});
|
||||
|
||||
// Turtle (Basic): the computer as the brain, mechanical_bearing for
|
||||
// movement axis, gantry_shaft as the "arms", chest for storage.
|
||||
// Industrial robot vibe.
|
||||
event.remove({ output: 'computercraft:turtle_normal' });
|
||||
event.shaped('computercraft:turtle_normal', [
|
||||
'SBS',
|
||||
'GCG',
|
||||
'SHS',
|
||||
], {
|
||||
S: 'tfmg:steel_ingot',
|
||||
B: 'create:mechanical_bearing',
|
||||
G: 'create:gantry_shaft',
|
||||
C: 'computercraft:computer_normal',
|
||||
H: 'minecraft:chest',
|
||||
});
|
||||
|
||||
// ─── T4 - ADVANCED ─────────────────────────────────────────────────
|
||||
|
||||
// Computer (Advanced): silicon + rose_quartz + railway_casing for
|
||||
// the "premium" chassis. Gold trim.
|
||||
event.remove({ output: 'computercraft:computer_advanced' });
|
||||
event.shaped('computercraft:computer_advanced', [
|
||||
'GQG',
|
||||
'SMS',
|
||||
'GRG',
|
||||
], {
|
||||
G: 'minecraft:gold_ingot',
|
||||
Q: 'create:rose_quartz',
|
||||
S: 'tfmg:silicon_ingot',
|
||||
M: 'create:precision_mechanism',
|
||||
R: 'create:railway_casing',
|
||||
});
|
||||
|
||||
// Monitor (Advanced): display_link is Create's literal data-binding
|
||||
// block - perfect to pair with a CC monitor for showing data.
|
||||
event.remove({ output: 'computercraft:monitor_advanced' });
|
||||
event.shaped('computercraft:monitor_advanced', [
|
||||
'GNG',
|
||||
'gDg',
|
||||
'GNG',
|
||||
], {
|
||||
G: 'minecraft:gold_ingot',
|
||||
N: 'create:nixie_tube',
|
||||
g: 'minecraft:glass_pane',
|
||||
D: 'create:display_link',
|
||||
});
|
||||
|
||||
// Wireless Modem (Advanced): constantan_spool for high-Q antenna
|
||||
// tuning, transmitter-style central component.
|
||||
event.remove({ output: 'computercraft:wireless_modem_advanced' });
|
||||
event.shaped('computercraft:wireless_modem_advanced', [
|
||||
'WCW',
|
||||
'QLQ',
|
||||
'GBG',
|
||||
], {
|
||||
W: 'tfmg:constantan_wire',
|
||||
C: 'tfmg:constantan_spool',
|
||||
Q: 'create:rose_quartz',
|
||||
L: 'tfmg:large_coil',
|
||||
G: 'minecraft:gold_ingot',
|
||||
B: 'create:brass_casing',
|
||||
});
|
||||
|
||||
// Turtle (Advanced): gold-trim turtle with computer_advanced brain
|
||||
// and mechanical_arm for actual robotic manipulation.
|
||||
event.remove({ output: 'computercraft:turtle_advanced' });
|
||||
event.shaped('computercraft:turtle_advanced', [
|
||||
'GAG',
|
||||
'GCG',
|
||||
'GHG',
|
||||
], {
|
||||
G: 'minecraft:gold_ingot',
|
||||
A: 'create:mechanical_arm',
|
||||
C: 'computercraft:computer_advanced',
|
||||
H: 'minecraft:chest',
|
||||
});
|
||||
|
||||
// ─── T5 - MOBILE (POCKET COMPUTERS) ────────────────────────────────
|
||||
|
||||
// Pocket Computer (Normal): miniaturised T2 computer. Electron tube
|
||||
// brain, silicon for the compact CPU, precision_mech, plastic shell.
|
||||
event.remove({ output: 'computercraft:pocket_computer_normal' });
|
||||
event.shaped('computercraft:pocket_computer_normal', [
|
||||
'PEP',
|
||||
'SMS',
|
||||
'PgP',
|
||||
], {
|
||||
P: 'tfmg:plastic_sheet',
|
||||
E: 'create:electron_tube',
|
||||
S: 'tfmg:silicon_ingot',
|
||||
M: 'create:precision_mechanism',
|
||||
g: 'minecraft:glass_pane',
|
||||
});
|
||||
|
||||
// Pocket Computer (Advanced) - the gold variant.
|
||||
event.remove({ output: 'computercraft:pocket_computer_advanced' });
|
||||
event.shaped('computercraft:pocket_computer_advanced', [
|
||||
'PQP',
|
||||
'SMS',
|
||||
'PGP',
|
||||
], {
|
||||
P: 'tfmg:plastic_sheet',
|
||||
Q: 'create:rose_quartz',
|
||||
S: 'tfmg:silicon_ingot',
|
||||
M: 'create:precision_mechanism',
|
||||
G: 'minecraft:gold_ingot',
|
||||
});
|
||||
|
||||
// Note: computercraft:pocket_computer_colour appears in the model
|
||||
// assets but is not a separately-registered item in CC: Tweaked --
|
||||
// it's a colour-state variant of the advanced pocket computer.
|
||||
// Don't try to define a recipe for it (KubeJS warns at startup).
|
||||
});
|
||||
@@ -0,0 +1,26 @@
|
||||
// Brass & Sigil — economy policy (recipe removal)
|
||||
//
|
||||
// Players can't craft Waystones items (they're distributed by the welcome
|
||||
// grant -- see welcome.js -- and any replacements come from the bank
|
||||
// vendor in the future). Players also can't manufacture currency: coins
|
||||
// only enter circulation through the bank exchange (item-in / coin-out).
|
||||
//
|
||||
// Other Numismatics blocks (piggy banks, bank tellers, vendor blocks) stay
|
||||
// craftable -- those are infrastructure, not currency.
|
||||
|
||||
ServerEvents.recipes(event => {
|
||||
// Block ALL crafting of Waystones items. The welcome-grant script
|
||||
// gives each new player exactly one regular waystone; any further
|
||||
// recovery happens via OP /give or future bank vendor.
|
||||
event.remove({ mod: 'waystones' });
|
||||
|
||||
// Block coin manufacturing only -- 5 denominations.
|
||||
// Real registry IDs: spur, bevel, cog, crown, sun.
|
||||
[
|
||||
'numismatics:spur',
|
||||
'numismatics:bevel',
|
||||
'numismatics:cog',
|
||||
'numismatics:crown',
|
||||
'numismatics:sun',
|
||||
].forEach(coin => event.remove({ output: coin }));
|
||||
});
|
||||
@@ -0,0 +1,93 @@
|
||||
// Brass & Sigil — Waystones placement policy
|
||||
//
|
||||
// Rules:
|
||||
// - Regular waystones (6 stone variants): 1 per player. Forces players to
|
||||
// build actual transport infrastructure (trains/roads/canals) for
|
||||
// long-distance routes instead of waystone-spamming.
|
||||
// - Sharestones (16 colors): banned. Pair-teleport between solo-placed
|
||||
// sharestones defeats the "build transport" intent, and a sharestone
|
||||
// placed just outside someone's claim gives an unrestricted teleport-
|
||||
// adjacent vector.
|
||||
// - Portstones (16 colors): banned pending separate design discussion.
|
||||
// - Warp plates: not restricted (single-block teleport pad; revisit if
|
||||
// it becomes a workaround).
|
||||
// - Warp scrolls / warp stones: untouched (consumable / cooldown-bound).
|
||||
//
|
||||
// Per-player count lives in player.persistentData.bnsWaystoneCount.
|
||||
// Decrement on break works because waystones-common.toml has
|
||||
// restrictedWaystones = ["PLAYER"] -- only the owner can break their own
|
||||
// waystone, so breaker == owner in normal play.
|
||||
|
||||
const WAYSTONE_CAP = 1;
|
||||
|
||||
const REGULAR_WAYSTONES = new Set([
|
||||
'waystones:waystone',
|
||||
'waystones:mossy_waystone',
|
||||
'waystones:sandy_waystone',
|
||||
'waystones:blackstone_waystone',
|
||||
'waystones:deepslate_waystone',
|
||||
'waystones:end_stone_waystone',
|
||||
]);
|
||||
|
||||
// Build the colored-block ban list once instead of typing 32 strings.
|
||||
const COLORS = [
|
||||
'white', 'orange', 'magenta', 'light_blue', 'yellow', 'lime',
|
||||
'pink', 'gray', 'light_gray', 'cyan', 'purple', 'blue',
|
||||
'brown', 'green', 'red', 'black',
|
||||
];
|
||||
const BANNED_BLOCKS = new Set();
|
||||
COLORS.forEach(c => {
|
||||
BANNED_BLOCKS.add(`waystones:${c}_sharestone`);
|
||||
BANNED_BLOCKS.add(`waystones:${c}_portstone`);
|
||||
});
|
||||
|
||||
// Helper: replace the just-placed block with air and refund the item.
|
||||
function refund(event, blockId) {
|
||||
event.block.set('minecraft:air');
|
||||
if (event.player) {
|
||||
event.player.give(Item.of(blockId));
|
||||
}
|
||||
}
|
||||
|
||||
BlockEvents.placed(event => {
|
||||
const blockId = event.block.id;
|
||||
const player = event.player;
|
||||
|
||||
// Skip non-player placements (dispensers, mob events) -- nothing to refund.
|
||||
if (!player) return;
|
||||
|
||||
if (BANNED_BLOCKS.has(blockId)) {
|
||||
refund(event, blockId);
|
||||
player.tell(Text.red(
|
||||
'That block is disabled. Use a regular Waystone (1 per player) ' +
|
||||
'and build transport between distant bases.'
|
||||
));
|
||||
return;
|
||||
}
|
||||
|
||||
if (REGULAR_WAYSTONES.has(blockId)) {
|
||||
const data = player.persistentData;
|
||||
const current = data.getInt('bnsWaystoneCount');
|
||||
if (current >= WAYSTONE_CAP) {
|
||||
refund(event, blockId);
|
||||
player.tell(Text.red(
|
||||
`You already have ${WAYSTONE_CAP} waystone. Break your existing one ` +
|
||||
`to relocate, or build infrastructure to reach distant bases.`
|
||||
));
|
||||
return;
|
||||
}
|
||||
data.putInt('bnsWaystoneCount', current + 1);
|
||||
}
|
||||
});
|
||||
|
||||
BlockEvents.broken(event => {
|
||||
const blockId = event.block.id;
|
||||
if (!REGULAR_WAYSTONES.has(blockId)) return;
|
||||
const player = event.player;
|
||||
if (!player) return; // explosion / world clear -- accept count drift, rare
|
||||
const data = player.persistentData;
|
||||
const current = data.getInt('bnsWaystoneCount');
|
||||
if (current > 0) {
|
||||
data.putInt('bnsWaystoneCount', current - 1);
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,53 @@
|
||||
// Brass & Sigil — first-join welcome grant
|
||||
//
|
||||
// Gives each new player exactly 1 Waystone + 1 server manual book 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.
|
||||
|
||||
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,
|
||||
});
|
||||
player.give(book);
|
||||
}
|
||||
|
||||
function giveStarterWaystone(player) {
|
||||
player.give(Item.of('waystones:waystone'));
|
||||
}
|
||||
|
||||
PlayerEvents.loggedIn(event => {
|
||||
const player = event.player;
|
||||
const data = player.persistentData;
|
||||
if (data.getBoolean(WELCOME_FLAG)) return;
|
||||
|
||||
try {
|
||||
giveStarterWaystone(player);
|
||||
giveManual(player);
|
||||
data.putBoolean(WELCOME_FLAG, true);
|
||||
player.tell(Text.gold('Welcome to Brass & Sigil. Check your inventory for a Waystone and the server manual.'));
|
||||
} catch (e) {
|
||||
// If something goes wrong, don't set the flag -- player gets another chance.
|
||||
console.error(`[bns/welcome] failed for ${player.username}: ${e}`);
|
||||
}
|
||||
});
|
||||
+78
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "Brass-and-Sigil pack.lock.json - generated, do not edit by hand unless you know what you are doing",
|
||||
"name": "Brass and Sigil",
|
||||
"version": "0.16.3",
|
||||
"version": "0.19.2",
|
||||
"minecraft": "1.21.1",
|
||||
"loader": {
|
||||
"type": "neoforge",
|
||||
@@ -481,6 +481,83 @@
|
||||
"sha1": "488bc70db3730f209e65cbda04c36dbc3918c448",
|
||||
"size": 878265,
|
||||
"side": "both"
|
||||
},
|
||||
{
|
||||
"source": "modrinth",
|
||||
"slug": "numismatics",
|
||||
"versionId": "guON3qvQ",
|
||||
"version": "1.0.20+neoforge-mc1.21.1",
|
||||
"path": "mods/CreateNumismatics-1.0.20+neoforge-mc1.21.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/Jdbbtt0i/versions/guON3qvQ/CreateNumismatics-1.0.20%2Bneoforge-mc1.21.1.jar",
|
||||
"sha1": "9883bfd6fef5bd5068f9174ddccba5047849c922",
|
||||
"size": 693446,
|
||||
"side": "both"
|
||||
},
|
||||
{
|
||||
"source": "modrinth",
|
||||
"slug": "patchouli",
|
||||
"versionId": "BIogJv2D",
|
||||
"version": "1.21.1-93-neoforge",
|
||||
"path": "mods/Patchouli-1.21.1-93-NEOFORGE.jar",
|
||||
"url": "https://cdn.modrinth.com/data/nU0bVIaL/versions/BIogJv2D/Patchouli-1.21.1-93-NEOFORGE.jar",
|
||||
"sha1": "5413bb9b8fc35ebe46b06b48bf9afafbd8471140",
|
||||
"size": 646777,
|
||||
"side": "both"
|
||||
},
|
||||
{
|
||||
"source": "modrinth",
|
||||
"slug": "easy-npc",
|
||||
"versionId": "lMxvnRsa",
|
||||
"version": "6.16.1",
|
||||
"path": "mods/easy_npc_bundle-neoforge-1.21.1-6.16.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/CgGEe1h3/versions/lMxvnRsa/easy_npc_bundle-neoforge-1.21.1-6.16.1.jar",
|
||||
"sha1": "1df93ad50050ca0550486b424c178a322917ace5",
|
||||
"size": 25216,
|
||||
"side": "both"
|
||||
},
|
||||
{
|
||||
"source": "modrinth",
|
||||
"slug": "easy-npc-core",
|
||||
"versionId": "Fl75ukL6",
|
||||
"version": "6.16.1",
|
||||
"path": "mods/easy_npc-neoforge-1.21.1-6.16.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/Epm6R3P2/versions/Fl75ukL6/easy_npc-neoforge-1.21.1-6.16.1.jar",
|
||||
"sha1": "d978399cd0ddfc9a4eb92f0af1a7de01e3e3c4bf",
|
||||
"size": 2075308,
|
||||
"side": "both"
|
||||
},
|
||||
{
|
||||
"source": "modrinth",
|
||||
"slug": "easy-npc-config-ui",
|
||||
"versionId": "NDcoVqYE",
|
||||
"version": "6.16.1",
|
||||
"path": "mods/easy_npc_config_ui-neoforge-1.21.1-6.16.1.jar",
|
||||
"url": "https://cdn.modrinth.com/data/uTGjf7vA/versions/NDcoVqYE/easy_npc_config_ui-neoforge-1.21.1-6.16.1.jar",
|
||||
"sha1": "0cdd37db74ea2e1b20df477d7be6ec51d5ceb681",
|
||||
"size": 876148,
|
||||
"side": "both"
|
||||
},
|
||||
{
|
||||
"source": "modrinth",
|
||||
"slug": "cc-tweaked",
|
||||
"versionId": "puxJkazX",
|
||||
"version": "1.119.0",
|
||||
"path": "mods/cc-tweaked-1.21.1-forge-1.119.0.jar",
|
||||
"url": "https://cdn.modrinth.com/data/gu7yAYhd/versions/puxJkazX/cc-tweaked-1.21.1-forge-1.119.0.jar",
|
||||
"sha1": "ba7fd171500afb1a20106cd5c9d62917a2cc11b1",
|
||||
"size": 3125991,
|
||||
"side": "both"
|
||||
},
|
||||
{
|
||||
"source": "modrinth",
|
||||
"slug": "computer-craft-recreated",
|
||||
"versionId": "3aca9vJw",
|
||||
"version": "1.2",
|
||||
"path": "resourcepacks/Computer Craft Recreated v1.2.zip",
|
||||
"url": "https://cdn.modrinth.com/data/3KLJnXcN/versions/3aca9vJw/Computer%20Craft%20Recreated%20v1.2.zip",
|
||||
"sha1": "18aa40e1684d1e1833ca53b2a8d7f08548bd7b5b",
|
||||
"size": 133729,
|
||||
"side": "client"
|
||||
}
|
||||
],
|
||||
"defaultServer": {
|
||||
|
||||
Reference in New Issue
Block a user