Phase 6: Pokémon machines (five cores, shells as data)
Adrian (2026-10-31): a Large Furnace where a Fire Pokémon heats real furnaces (hoppers in and out), our own Electric generator, no upkeep; then a drop synthesizer (FE into full drop rolls, looting tiers), a sacrifice altar (level tiers, rare candies only from Lv 80) and a rebirth chamber (Lv 100 -> shiny Lv 1 first stage, three perfect IVs, moves kept, Ability Patch so the hidden ability is optional). - machine/: data-driven 3x3x3 shells (window spots for glass, free spot under the core), checked in four rotations; the Pokémon walks in from the party and lives in the core; breaking core or shell sends it home (party, else PC, offline too); a real Cobblemon entity copy is shown in the chamber (no AI, invulnerable, uncatchable, never saved). - Heat Core keeps vanilla furnaces lit and faster; Dynamo Core makes and pushes FE; Synthesis Core takes FE and rolls drops into a hopper- extractable buffer; Altar Core sacrifices on a confirmed sneak-use; Rebirth Core runs on server time. - Recipes, casing tags, block loot, textures (tools/machine_assets.py), models, blockstates, names. - Self-tests: in/out, refusal, shell and core breaks (PC when full), chunk unload, server restart, and each machine's work. - Docs: design, balance table, Phase 6 checklist; Phase 5 approved. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5cae9252c3
commit
0877a6a179
75 files changed
+2321
-7
No files matched your search
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"bonus_rolls": 0,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "cobblesurvival:altar_core"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"random_sequence": "cobblesurvival:blocks/altar_core"
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"bonus_rolls": 0,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "cobblesurvival:dynamo_core"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"random_sequence": "cobblesurvival:blocks/dynamo_core"
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"bonus_rolls": 0,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "cobblesurvival:heat_core"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"random_sequence": "cobblesurvival:blocks/heat_core"
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"bonus_rolls": 0,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "cobblesurvival:rebirth_core"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"random_sequence": "cobblesurvival:blocks/rebirth_core"
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"bonus_rolls": 0,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "cobblesurvival:synthesis_core"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"random_sequence": "cobblesurvival:blocks/synthesis_core"
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
{
|
||||
"_comment": "Sacrifice Altar (Adrian, 2026-10-31): sneak-use the core to see what the Pokémon inside would give, sneak-use again within confirm_ticks to sacrifice it (gone for good). The highest tier its level reaches gives its rewards; specials add theirs. Rare candies only from Lv 80, above the highest natural level (Basalt Furnace Lv 70, guardians Lv 75). Shape: layers bottom to top, rows north to south, columns west to east, as seen with the core in the south wall; checked in all four rotations. 'C' = the core, '.' = the chamber (air; the Pokémon stands there), '#' = casing, ' ' = anything (under the core, so a hopper can go there), 'W' = a window spot: casing or glass (the middle of each side wall and the top centre). Placeholder rewards; see docs/balance.md. Read by the companion mod (machine/).",
|
||||
"core": "cobblesurvival:altar_core",
|
||||
"kind": "altar",
|
||||
"min_level": 20,
|
||||
"layers": [
|
||||
[
|
||||
"###",
|
||||
"###",
|
||||
"# #"
|
||||
],
|
||||
[
|
||||
"#W#",
|
||||
"W.W",
|
||||
"#C#"
|
||||
],
|
||||
[
|
||||
"###",
|
||||
"#W#",
|
||||
"###"
|
||||
]
|
||||
],
|
||||
"keys": {
|
||||
"#": "#cobblesurvival:altar_casing",
|
||||
"W": [
|
||||
"#cobblesurvival:altar_casing",
|
||||
"#c:glass_blocks"
|
||||
]
|
||||
},
|
||||
"altar": {
|
||||
"confirm_ticks": 100,
|
||||
"tiers": [
|
||||
{
|
||||
"min_level": 20,
|
||||
"rewards": [
|
||||
{
|
||||
"item": "cobblemon:exp_candy_s",
|
||||
"count": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"min_level": 35,
|
||||
"rewards": [
|
||||
{
|
||||
"item": "cobblemon:exp_candy_m",
|
||||
"count": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"min_level": 50,
|
||||
"rewards": [
|
||||
{
|
||||
"item": "cobblemon:exp_candy_l",
|
||||
"count": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"min_level": 65,
|
||||
"rewards": [
|
||||
{
|
||||
"item": "cobblemon:exp_candy_xl",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"item": "cobblemon:ability_capsule",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"min_level": 80,
|
||||
"rewards": [
|
||||
{
|
||||
"item": "cobblemon:rare_candy",
|
||||
"count": 3
|
||||
},
|
||||
{
|
||||
"item": "cobblemon:exp_candy_xl",
|
||||
"count": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"min_level": 90,
|
||||
"rewards": [
|
||||
{
|
||||
"item": "cobblemon:rare_candy",
|
||||
"count": 5
|
||||
},
|
||||
{
|
||||
"item": "cobblemon:ability_patch",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"min_level": 100,
|
||||
"rewards": [
|
||||
{
|
||||
"item": "cobblemon:rare_candy",
|
||||
"count": 8
|
||||
},
|
||||
{
|
||||
"item": "cobblemon:ability_patch",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"item": "minecraft:nether_star",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"specials": [
|
||||
{
|
||||
"types": [
|
||||
"dragon"
|
||||
],
|
||||
"min_level": 100,
|
||||
"rewards": [
|
||||
{
|
||||
"item": "minecraft:dragon_egg",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"_comment": "Generator (Adrian, 2026-10-31): an Electric Pokémon in the chamber makes Forge Energy, stored in the core and pushed to whatever touches the core and takes energy. Shape: layers bottom to top, rows north to south, columns west to east, as seen with the core in the south wall; checked in all four rotations. 'C' = the core, '.' = the chamber (air; the Pokémon stands there), '#' = casing, ' ' = anything (under the core, so a hopper can go there), 'W' = a window spot: casing or glass (the middle of each side wall and the top centre). Output per tick: fe_per_level × level × (1 + per_special_attack × Special Attack), after Poke Power's 50 FE per level. Placeholder numbers; see docs/balance.md. Read by the companion mod (machine/).",
|
||||
"core": "cobblesurvival:dynamo_core",
|
||||
"kind": "generator",
|
||||
"types": [
|
||||
"electric"
|
||||
],
|
||||
"layers": [
|
||||
[
|
||||
"###",
|
||||
"###",
|
||||
"# #"
|
||||
],
|
||||
[
|
||||
"#W#",
|
||||
"W.W",
|
||||
"#C#"
|
||||
],
|
||||
[
|
||||
"###",
|
||||
"#W#",
|
||||
"###"
|
||||
]
|
||||
],
|
||||
"keys": {
|
||||
"#": "#cobblesurvival:dynamo_casing",
|
||||
"W": [
|
||||
"#cobblesurvival:dynamo_casing",
|
||||
"#c:glass_blocks"
|
||||
]
|
||||
},
|
||||
"energy": {
|
||||
"fe_per_level": 50,
|
||||
"per_special_attack": 0.005,
|
||||
"capacity": 200000,
|
||||
"max_output": 16000
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"_comment": "Large Furnace (Adrian, 2026-10-31): a Fire Pokémon in the chamber heats vanilla furnaces, blast furnaces and smokers standing against the outside of the shell; they burn without fuel while they have something to cook, and cook faster. Shape: layers bottom to top, rows north to south, columns west to east, as seen with the core in the south wall; checked in all four rotations. 'C' = the core, '.' = the chamber (air; the Pokémon stands there), '#' = casing, ' ' = anything (under the core, so a hopper can go there), 'W' = a window spot: casing or glass (the middle of each side wall and the top centre). Furnaces heated: 1 + level / levels_per_furnace, at most max. Cooking speed: base + per_level × level + per_special_attack × Special Attack. Placeholder numbers; see docs/balance.md. Read by the companion mod (machine/).",
|
||||
"core": "cobblesurvival:heat_core",
|
||||
"kind": "furnace",
|
||||
"types": [
|
||||
"fire"
|
||||
],
|
||||
"layers": [
|
||||
[
|
||||
"###",
|
||||
"###",
|
||||
"# #"
|
||||
],
|
||||
[
|
||||
"#W#",
|
||||
"W.W",
|
||||
"#C#"
|
||||
],
|
||||
[
|
||||
"###",
|
||||
"#W#",
|
||||
"###"
|
||||
]
|
||||
],
|
||||
"keys": {
|
||||
"#": "#cobblesurvival:heat_casing",
|
||||
"W": [
|
||||
"#cobblesurvival:heat_casing",
|
||||
"#c:glass_blocks"
|
||||
]
|
||||
},
|
||||
"furnaces": {
|
||||
"tag": "cobblesurvival:machine_furnaces",
|
||||
"max": 8,
|
||||
"levels_per_furnace": 15,
|
||||
"speed": {
|
||||
"base": 1.0,
|
||||
"per_level": 0.04,
|
||||
"per_special_attack": 0.01
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"_comment": "Rebirth Chamber (Adrian, 2026-10-31): a Lv 100 Pokémon put in is reborn after 'ticks' of server time (also while the chunk is unloaded): first stage of its line, Lv 1, shiny, perfect_ivs of its IVs raised to 31 (none lowered), moves, ability, nickname and original trainer kept. 'extra' goes to the owner with it: an Ability Patch, so the hidden ability is their choice. Taking it out early cancels. Shape: layers bottom to top, rows north to south, columns west to east, as seen with the core in the south wall; checked in all four rotations. 'C' = the core, '.' = the chamber (air; the Pokémon stands there), '#' = casing, ' ' = anything (under the core, so a hopper can go there), 'W' = a window spot: casing or glass (the middle of each side wall and the top centre). Placeholder numbers; see docs/balance.md. Read by the companion mod (machine/).",
|
||||
"core": "cobblesurvival:rebirth_core",
|
||||
"kind": "rebirth",
|
||||
"min_level": 100,
|
||||
"layers": [
|
||||
[
|
||||
"###",
|
||||
"###",
|
||||
"# #"
|
||||
],
|
||||
[
|
||||
"#W#",
|
||||
"W.W",
|
||||
"#C#"
|
||||
],
|
||||
[
|
||||
"###",
|
||||
"#W#",
|
||||
"###"
|
||||
]
|
||||
],
|
||||
"keys": {
|
||||
"#": "#cobblesurvival:rebirth_casing",
|
||||
"W": [
|
||||
"#cobblesurvival:rebirth_casing",
|
||||
"#c:glass_blocks"
|
||||
]
|
||||
},
|
||||
"rebirth": {
|
||||
"ticks": 144000,
|
||||
"perfect_ivs": 3,
|
||||
"extra": [
|
||||
{
|
||||
"item": "cobblemon:ability_patch",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"_comment": "Drop Synthesizer (Adrian, 2026-10-31): any Pokémon; the core takes Forge Energy (up to max_input per tick, so more energy is faster) and for every fe_per_roll rolls the Pokémon's own drop table once, as if it were defeated. The shell's tier is the lowest of 'tiers' among its casing blocks (iron, gold, diamond, netherite = looting 0-3): each looting level adds 0-1 to every drop, and chance_bonus_per_looting × looting is the chance of a second roll. What it makes waits in the core (output_slots) for hoppers. Shape: layers bottom to top, rows north to south, columns west to east, as seen with the core in the south wall; checked in all four rotations. 'C' = the core, '.' = the chamber (air; the Pokémon stands there), '#' = casing, ' ' = anything (under the core, so a hopper can go there), 'W' = a window spot: casing or glass (the middle of each side wall and the top centre). Placeholder numbers; see docs/balance.md. Read by the companion mod (machine/).",
|
||||
"core": "cobblesurvival:synthesis_core",
|
||||
"kind": "synthesis",
|
||||
"layers": [
|
||||
[
|
||||
"###",
|
||||
"###",
|
||||
"# #"
|
||||
],
|
||||
[
|
||||
"#W#",
|
||||
"W.W",
|
||||
"#C#"
|
||||
],
|
||||
[
|
||||
"###",
|
||||
"#W#",
|
||||
"###"
|
||||
]
|
||||
],
|
||||
"keys": {
|
||||
"#": "#cobblesurvival:synthesis_casing",
|
||||
"W": [
|
||||
"#cobblesurvival:synthesis_casing",
|
||||
"#c:glass_blocks"
|
||||
]
|
||||
},
|
||||
"synthesis": {
|
||||
"fe_per_roll": 2000000,
|
||||
"max_input": 32000,
|
||||
"capacity": 4000000,
|
||||
"output_slots": 9,
|
||||
"tiers": [
|
||||
"cobblesurvival:synthesis_tier/iron",
|
||||
"cobblesurvival:synthesis_tier/gold",
|
||||
"cobblesurvival:synthesis_tier/diamond",
|
||||
"cobblesurvival:synthesis_tier/netherite"
|
||||
],
|
||||
"chance_bonus_per_looting": 0.25
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"category": "misc",
|
||||
"pattern": [
|
||||
"OGO",
|
||||
"GEG",
|
||||
"OGO"
|
||||
],
|
||||
"key": {
|
||||
"O": {
|
||||
"item": "minecraft:obsidian"
|
||||
},
|
||||
"G": {
|
||||
"item": "minecraft:gold_block"
|
||||
},
|
||||
"E": {
|
||||
"item": "minecraft:echo_shard"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"id": "cobblesurvival:altar_core",
|
||||
"count": 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"category": "misc",
|
||||
"pattern": [
|
||||
"CRC",
|
||||
"RTR",
|
||||
"CRC"
|
||||
],
|
||||
"key": {
|
||||
"C": {
|
||||
"item": "minecraft:copper_block"
|
||||
},
|
||||
"R": {
|
||||
"item": "minecraft:redstone"
|
||||
},
|
||||
"T": {
|
||||
"item": "cobblemon:thunder_stone"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"id": "cobblesurvival:dynamo_core",
|
||||
"count": 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"category": "misc",
|
||||
"pattern": [
|
||||
"BIB",
|
||||
"IFI",
|
||||
"BIB"
|
||||
],
|
||||
"key": {
|
||||
"B": {
|
||||
"item": "minecraft:bricks"
|
||||
},
|
||||
"I": {
|
||||
"item": "minecraft:iron_ingot"
|
||||
},
|
||||
"F": {
|
||||
"item": "minecraft:blast_furnace"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"id": "cobblesurvival:heat_core",
|
||||
"count": 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"category": "misc",
|
||||
"pattern": [
|
||||
"ADA",
|
||||
"DSD",
|
||||
"ADA"
|
||||
],
|
||||
"key": {
|
||||
"A": {
|
||||
"item": "minecraft:amethyst_block"
|
||||
},
|
||||
"D": {
|
||||
"item": "minecraft:diamond"
|
||||
},
|
||||
"S": {
|
||||
"item": "cobblemon:shiny_stone"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"id": "cobblesurvival:rebirth_core",
|
||||
"count": 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"category": "misc",
|
||||
"pattern": [
|
||||
"IRI",
|
||||
"HXH",
|
||||
"IRI"
|
||||
],
|
||||
"key": {
|
||||
"I": {
|
||||
"item": "minecraft:iron_block"
|
||||
},
|
||||
"R": {
|
||||
"item": "minecraft:redstone_block"
|
||||
},
|
||||
"H": {
|
||||
"item": "minecraft:hopper"
|
||||
},
|
||||
"X": {
|
||||
"item": "minecraft:crafter"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"id": "cobblesurvival:synthesis_core",
|
||||
"count": 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"values": [
|
||||
"minecraft:obsidian",
|
||||
"minecraft:crying_obsidian",
|
||||
"minecraft:blackstone",
|
||||
"minecraft:polished_blackstone_bricks"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"values": [
|
||||
"minecraft:copper_block",
|
||||
"minecraft:cut_copper",
|
||||
"minecraft:exposed_copper",
|
||||
"minecraft:exposed_cut_copper",
|
||||
"minecraft:weathered_copper",
|
||||
"minecraft:weathered_cut_copper",
|
||||
"minecraft:oxidized_copper",
|
||||
"minecraft:oxidized_cut_copper",
|
||||
"minecraft:waxed_copper_block",
|
||||
"minecraft:waxed_cut_copper",
|
||||
"minecraft:waxed_exposed_copper",
|
||||
"minecraft:waxed_exposed_cut_copper",
|
||||
"minecraft:waxed_weathered_copper",
|
||||
"minecraft:waxed_weathered_cut_copper",
|
||||
"minecraft:waxed_oxidized_copper",
|
||||
"minecraft:waxed_oxidized_cut_copper"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"values": ["minecraft:bricks", "minecraft:mud_bricks", "minecraft:deepslate_bricks"]}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"values": [
|
||||
"minecraft:furnace",
|
||||
"minecraft:blast_furnace",
|
||||
"minecraft:smoker"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"values": [
|
||||
"minecraft:amethyst_block",
|
||||
"minecraft:quartz_block",
|
||||
"minecraft:calcite"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"values": [
|
||||
"#cobblesurvival:synthesis_tier/iron",
|
||||
"#cobblesurvival:synthesis_tier/gold",
|
||||
"#cobblesurvival:synthesis_tier/diamond",
|
||||
"#cobblesurvival:synthesis_tier/netherite"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"values": [
|
||||
"minecraft:diamond_block"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"values": [
|
||||
"minecraft:gold_block"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"values": [
|
||||
"minecraft:iron_block"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"values": [
|
||||
"minecraft:netherite_block"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"cobblesurvival:heat_core",
|
||||
"cobblesurvival:dynamo_core",
|
||||
"cobblesurvival:synthesis_core",
|
||||
"cobblesurvival:altar_core",
|
||||
"cobblesurvival:rebirth_core"
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user