Files
2026-09-12 07:03:41 -06:00

615 lines
22 KiB
Lua

--[[
Everness. Never ending discovery in Everness mapgen.
Copyright (C) 2025 SaKeL
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
--]]
--- Single shapeless craft
---@param input_name string
---@param output_name string
local function register_craft_single(input_name, output_name)
core.register_craft({
type = 'shapeless',
output = output_name,
recipe = { input_name }
})
end
--- 2x2 same material shaped craft
---@param input_name string
---@param output_name string
local function register_craft_2x2(input_name, output_name)
core.register_craft({
type = 'shaped',
output = output_name,
recipe = {
{input_name, input_name},
{input_name, input_name},
}
})
end
--- 3x2 same material shaped craft
---@param input_name string
---@param output_name string
local function register_craft_3x2(input_name, output_name)
core.register_craft({
type = 'shaped',
output = output_name,
recipe = {
{input_name, input_name, input_name},
{input_name, input_name, input_name},
}
})
end
--- 3x2 shaped craft, top same material, bottom (different from top) same material
---@param input_top_name string
---@param input_bottom_name string
---@param output_name string
local function register_craft_3x2_composite(input_top_name, input_bottom_name, output_name)
core.register_craft({
type = 'shaped',
output = output_name,
recipe = {
{input_top_name, input_top_name, input_top_name},
{input_bottom_name, input_bottom_name, input_bottom_name},
}
})
end
--- 1x2 shaped craft, top same material, bottom (different from top) same material
---@param input_top_name string
---@param input_bottom_name string
---@param output_name string
local function register_craft_1x2_composite(input_top_name, input_bottom_name, output_name)
core.register_craft({
type = 'shaped',
output = output_name,
recipe = {
{input_top_name},
{input_bottom_name},
}
})
end
--- 1x3 same material shaped craft
---@param input_name string
---@param output_name string
local function register_craft_1x3(input_name, output_name)
core.register_craft({
type = 'shaped',
output = output_name,
recipe = {
{input_name},
{input_name},
{input_name},
}
})
end
--- 2x1 same material shaped craft
---@param input_name string
---@param output_name string
local function register_craft_2x1(input_name, output_name)
core.register_craft({
type = 'shaped',
output = output_name,
recipe = {
{input_name, input_name},
}
})
end
--- 2x1 shaped craft, each material different
---@param input_first_name string
---@param input_second_name string
---@param output_name string
local function register_craft_2x1_composite(input_first_name, input_second_name, output_name)
core.register_craft({
type = 'shaped',
output = output_name,
recipe = {
{input_first_name, input_second_name},
}
})
end
--- 2x3 same material shaped craft
---@param input_name string
---@param output_name string
local function register_craft_2x3(input_name, output_name)
core.register_craft({
type = 'shaped',
output = output_name,
recipe = {
{input_name, input_name},
{input_name, input_name},
{input_name, input_name},
}
})
end
--- 3x1 same material shaped craft
---@param input_name string
---@param output_name string
local function register_craft_3x1(input_name, output_name)
core.register_craft({
type = 'shaped',
output = output_name,
recipe = {
{input_name, input_name, input_name},
}
})
end
--- 3x3 same material shaped craft
---@param input_name string
---@param output_name string
local function register_craft_3x3(input_name, output_name)
core.register_craft({
type = 'shaped',
output = output_name,
recipe = {
{input_name, input_name, input_name},
{input_name, input_name, input_name},
{input_name, input_name, input_name},
}
})
end
--- 'anvil' pattern, same material shaped craft
---@param input_name string
---@param output_name string
local function register_craft_anvil_pattern(input_name, output_name)
core.register_craft({
type = 'shaped',
output = output_name,
recipe = {
{input_name, input_name, input_name},
{'', input_name, ''},
{input_name, input_name, input_name},
}
})
end
--- 'bullseye' pattern, shaped craft, same material around the center, center different material
---@param input_around_name string
---@param input_center_name string
---@param output_name string
local function register_craft_bullseye_pattern(input_around_name, input_center_name, output_name)
core.register_craft({
type = 'shaped',
output = output_name,
recipe = {
{input_around_name, input_around_name, input_around_name},
{input_around_name, input_center_name, input_around_name},
{input_around_name, input_around_name, input_around_name},
}
})
end
--- 'sandwich' pattern, shaped craft, same material top/bottom rows, center row different material
---@param input_around_name string
---@param input_center_name string
---@param output_name string
local function register_craft_sandwich_pattern(input_around_name, input_center_name, output_name)
core.register_craft({
type = 'shaped',
output = output_name,
recipe = {
{input_around_name, input_around_name, input_around_name},
{input_center_name, input_center_name, input_center_name},
{input_around_name, input_around_name, input_around_name},
}
})
end
--- 'pillar top' pattern, same material shaped craft
---@param input_name string
---@param output_name string
local function register_craft_pillar_top(input_name, output_name)
core.register_craft({
type = 'shaped',
output = output_name,
recipe = {
{input_name, input_name, input_name},
{'', input_name, ''},
{'', input_name, ''},
}
})
end
--- 'pillar bottom' pattern, same material shaped craft
---@param input_name string
---@param output_name string
local function register_craft_pillar_bottom(input_name, output_name)
core.register_craft({
type = 'shaped',
output = output_name,
recipe = {
{'', input_name, ''},
{'', input_name, ''},
{input_name, input_name, input_name},
}
})
end
--
-- Default Blocks
--
if core.get_modpath('default') then
register_craft_3x3('default:snowblock', 'everness:snowcobble 9')
register_craft_3x3('default:ice', 'everness:icecobble 9')
register_craft_single('everness:chest', 'default:chest')
elseif core.get_modpath('mcl_core') then
register_craft_3x3('mcl_core:snowblock', 'everness:snowcobble 9')
register_craft_3x3('mcl_core:ice', 'everness:icecobble 9')
register_craft_single('everness:chest', 'mcl_chests:chest')
end
--
-- Cobbles
--
register_craft_3x3('everness:frosted_ice', 'everness:icecobble 9')
register_craft_3x3('everness:frosted_snowblock', 'everness:snowcobble 9')
--
-- Bamboo
--
register_craft_2x2('everness:bamboo_item', 'everness:bamboo_wood')
register_craft_3x3('everness:bamboo_item', 'everness:bamboo_block')
register_craft_2x2('everness:bamboo_wood', 'everness:bamboo_mosaic_wood')
register_craft_3x2('everness:bamboo_wood', 'everness:trapdoor_bamboo 2')
--
-- Ice
--
register_craft_single('everness:frosted_ice', 'everness:frosted_ice_translucent')
register_craft_single('everness:frosted_ice_translucent', 'everness:frosted_ice')
--
-- Trapdoors
--
register_craft_3x2('everness:crystal_wood', 'everness:trapdoor_crystal_wood 2')
register_craft_3x2('everness:dry_wood', 'everness:trapdoor_cursed_wood 2')
register_craft_3x2('everness:lava_tree_wood', 'everness:trapdoor_lava_tree 2')
register_craft_3x2('everness:palm_tree_wood', 'everness:trapdoor_palm_wood 2')
--
-- Pyrite
--
register_craft_3x3('everness:pyrite_ingot', 'everness:pyriteblock')
register_craft_2x2('everness:pyriteblock_forged', 'everness:pyriteblock_brick 4')
register_craft_3x3('everness:pyriteblock_forged', 'everness:pyriteblock_polished 9')
register_craft_2x3('everness:pyriteblock_forged', 'everness:pyrite_roof_tile 6')
register_craft_1x2_composite('group:glass', 'everness:pyrite_ingot', 'everness:pyrite_glass')
if core.get_modpath('default') then
register_craft_1x2_composite('default:glass', 'everness:pyrite_ingot', 'everness:pyrite_glass')
elseif core.get_modpath('mcl_core') then
register_craft_1x2_composite('mcl_core:glass', 'everness:pyrite_ingot', 'everness:pyrite_glass')
end
register_craft_1x2_composite('everness:pyrite_glass', 'everness:pyrite_ingot', 'everness:pyrite_lantern')
register_craft_2x1('everness:pyriteblock_forged', 'everness:pyriteblock_slab_brick 2')
register_craft_bullseye_pattern('everness:pyriteblock_forged', '', 'everness:pyriteblock_spiral 8')
register_craft_pillar_bottom('everness:pyriteblock_forged', 'everness:pyrite_pillar_bottom 5')
register_craft_1x3('everness:pyriteblock_forged', 'everness:pyrite_pillar_middle 3')
register_craft_pillar_top('everness:pyriteblock_forged', 'everness:pyrite_pillar_top 5')
register_craft_anvil_pattern('everness:pyriteblock_forged', 'everness:pyrite_pillar_small 7')
--
-- Glass
--
register_craft_bullseye_pattern('everness:glass', 'everness:bloodspore_plant', 'everness:tinted_glass_red 8')
register_craft_bullseye_pattern('everness:glass', 'everness:bloodspore_plant_small', 'everness:tinted_glass_red 8')
--
-- Tree into wood
--
local recipes_wood = {
{'everness:baobab_tree', 'everness:baobab_wood 4'},
{'everness:coral_tree', 'everness:coral_wood 4'},
{'everness:crystal_tree', 'everness:crystal_wood 4'},
{'everness:dry_tree', 'everness:dry_wood 4'},
{'everness:lava_tree', 'everness:lava_tree_wood 4'},
{'everness:lava_tree_with_lava', 'everness:lava_tree_wood 4'},
{'everness:mese_tree', 'everness:mese_wood 4'},
{'everness:sequoia_tree', 'everness:sequoia_wood 4'},
{'everness:willow_tree', 'everness:willow_wood 4'},
{'everness:palm_tree', 'everness:palm_tree_wood 4'},
}
for _, data in ipairs(recipes_wood) do
register_craft_single(data[1], data[2])
end
--
-- Sand into sandstone
--
local recipes_sandstone = {
{'everness:coral_forest_deep_ocean_sand', 'everness:coral_deep_ocean_sandstone_block 4'},
{'everness:coral_sand', 'everness:coral_sandstone 4'},
{'everness:coral_white_sand', 'everness:coral_white_sandstone 4'},
{'everness:crystal_forest_deep_ocean_sand', 'everness:crystal_forest_deep_ocean_sandstone_block 4'},
{'everness:crystal_sand', 'everness:crystal_sandstone 4'},
{'everness:cursed_lands_deep_ocean_sand', 'everness:cursed_lands_deep_ocean_sandstone_block 4'},
{'everness:cursed_sand', 'everness:cursed_sandstone_block 4'},
{'everness:mineral_sand', 'everness:mineral_sandstone 4'},
}
for _, data in ipairs(recipes_sandstone) do
register_craft_2x2(data[1], data[2])
end
--
-- Stone and bone into brick
--
local recipes_brick = {
{'everness:coral_bones_block', 'everness:coral_bones_brick 4'},
{'everness:coral_deep_ocean_sandstone_block', 'everness:coral_deep_ocean_sandstone_brick 4'},
{'everness:coral_desert_stone', 'everness:coral_desert_stone_brick 4'},
{'everness:coral_sandstone', 'everness:coral_sandstone_brick 4'},
{'everness:coral_white_sandstone', 'everness:coral_white_sandstone_brick 4'},
{'everness:crystal_forest_deep_ocean_sandstone_block', 'everness:crystal_forest_deep_ocean_sandstone_brick 4'},
{'everness:crystal_sandstone', 'everness:crystal_sandstone_brick 4'},
{'everness:cursed_lands_deep_ocean_sandstone_block', 'everness:cursed_lands_deep_ocean_sandstone_brick 4'},
{'everness:cursed_sandstone_block', 'everness:cursed_sandstone_brick 4'},
{'everness:cursed_stone', 'everness:cursed_brick 4'},
{'everness:forsaken_desert_stone', 'everness:forsaken_desert_brick_red 4'},
{'everness:forsaken_tundra_stone', 'everness:forsaken_tundra_brick 4'},
{'everness:mineral_sandstone', 'everness:mineral_sandstone_brick 4'},
{'everness:mineral_stone', 'everness:mineral_stone_brick 4'},
}
for _, data in ipairs(recipes_brick) do
register_craft_2x2(data[1], data[2])
end
--
-- Base materials into blocks
--
register_craft_2x2('everness:quartz_crystal', 'everness:quartz_block 4')
register_craft_3x3('everness:coral_bones', 'everness:coral_bones_block 9')
register_craft_3x3('everness:coral_desert_stone', 'everness:coral_desert_stone_block 9')
register_craft_3x3('everness:crystal_cyan', 'everness:crystal_block_cyan')
register_craft_3x3('everness:crystal_orange', 'everness:crystal_block_orange')
register_craft_3x3('everness:crystal_purple', 'everness:crystal_block_purple')
register_craft_3x3('everness:mineral_sandstone', 'everness:mineral_sandstone_block 9')
register_craft_3x3('everness:mineral_stone', 'everness:mineral_stone_block 9')
--
-- Blocks into base materials
--
register_craft_single('everness:crystal_block_cyan', 'everness:crystal_cyan 9')
register_craft_single('everness:crystal_block_orange', 'everness:crystal_orange 9')
register_craft_single('everness:crystal_block_purple', 'everness:crystal_purple 9')
--
-- Carved and chiseled blocks
--
register_craft_2x2('everness:coral_sandstone_chiseled', 'everness:coral_sandstone_carved_1 9')
register_craft_2x2('everness:quartz_block', 'everness:quartz_chiseled 4')
register_craft_3x3('everness:coral_sandstone', 'everness:coral_sandstone_chiseled 9')
register_craft_3x3('everness:crystal_sandstone', 'everness:crystal_sandstone_chiseled 9')
register_craft_3x3('everness:cursed_brick', 'everness:cursed_brick_carved 9')
register_craft_1x2_composite('everness:forsaken_desert_brick_red', 'everness:forsaken_desert_brick', 'everness:forsaken_desert_chiseled_stone')
--
-- Masonry items
--
register_craft_1x3('everness:coral_white_sandstone', 'everness:coral_white_sandstone_pillar 3')
register_craft_1x3('everness:quartz_block', 'everness:quartz_pillar 3')
register_craft_2x1_composite('everness:cursed_brick', 'group:leaves', 'everness:cursed_brick_with_growth 4')
core.register_craft({
output = 'everness:cursed_brick_mixed 4',
recipe = {
{ 'everness:cursed_stone', 'everness:cursed_brick' },
{ 'everness:cursed_brick', 'everness:cursed_stone' },
}
})
register_craft_2x1_composite('everness:forsaken_desert_cobble_red', 'everness:forsaken_desert_sand', 'everness:forsaken_desert_cobble')
register_craft_2x1_composite('everness:forsaken_desert_brick_red', 'everness:forsaken_desert_sand', 'everness:forsaken_desert_brick')
register_craft_2x2('everness:forsaken_desert_brick', 'everness:forsaken_desert_engraved_stone 4')
--
-- Misc items
--
core.register_craft({
output = 'everness:coral_forest_deep_ocean_lantern 1',
recipe = {
{ 'everness:coral_deep_ocean_sandstone_block', 'group:glass', 'everness:coral_deep_ocean_sandstone_block' },
{ 'group:glass', 'group:torch', 'group:glass' },
{ 'everness:coral_deep_ocean_sandstone_block', 'group:glass', 'everness:coral_deep_ocean_sandstone_block' },
}
})
if core.get_modpath('default') then
core.register_craft({
output = 'everness:coral_forest_deep_ocean_lantern 1',
recipe = {
{ 'everness:coral_deep_ocean_sandstone_block', 'default:glass', 'everness:coral_deep_ocean_sandstone_block' },
{ 'default:glass', 'group:torch', 'default:glass' },
{ 'everness:coral_deep_ocean_sandstone_block', 'default:glass', 'everness:coral_deep_ocean_sandstone_block' },
}
})
elseif core.get_modpath('mcl_core') then
core.register_craft({
output = 'everness:coral_forest_deep_ocean_lantern 1',
recipe = {
{ 'everness:coral_deep_ocean_sandstone_block', 'mcl_core:glass', 'everness:coral_deep_ocean_sandstone_block' },
{ 'mcl_core:glass', 'group:torch', 'mcl_core:glass' },
{ 'everness:coral_deep_ocean_sandstone_block', 'mcl_core:glass', 'everness:coral_deep_ocean_sandstone_block' },
}
})
end
core.register_craft({
output = 'everness:shell_of_underwater_breathing',
recipe = {
{ '', '', 'group:everness_crystal_forest_deep_ocean_coral' },
{ '', 'group:everness_cursed_lands_deep_ocean_coral', '' },
{ 'group:everness_coral_forest_deep_ocean_coral', '', '' },
}
})
register_craft_3x3('everness:mese_tree_fruit', 'default:mese_crystal_fragment')
register_craft_3x1('everness:lotus_leaf_3', 'default:paper')
register_craft_single('everness:mineral_sandstone', 'everness:mineral_sand 4')
register_craft_3x2_composite('everness:mineral_sandstone', 'everness:mineral_sandstone_brick', 'everness:mineral_sandstone_brick_block 6')
register_craft_sandwich_pattern('group:flora', 'everness:mineral_stone_brick', 'everness:mineral_stone_brick_with_growth 3')
register_craft_sandwich_pattern('everness:mineral_stone_brick_with_growth', 'group:flower', 'everness:mineral_stone_brick_with_flower_growth 6')
register_craft_3x2('everness:mineral_sandstone', 'everness:sand_castle_wall 6')
core.register_craft({
output = 'everness:ceramic_pot_blank',
recipe = {
{ '', 'everness:ceramic_pot_sherd_blank', ''},
{ 'everness:ceramic_pot_sherd_blank', '', 'everness:ceramic_pot_sherd_blank'},
{ '', 'everness:ceramic_pot_sherd_blank', ''},
}
})
register_craft_single('everness:ceramic_pot_blank', 'everness:ceramic_pot_sherd_blank 4')
--
-- Tools
--
local recipes_tool = {
{'everness:hammer', {
{ 'group:everness_obsidian', 'group:everness_obsidian', 'group:everness_obsidian' },
{ 'group:everness_obsidian', 'everness:pyriteblock_forged', 'group:everness_obsidian' },
{ '', 'group:stick', '' }
}},
{'everness:hammer_sharp', {
{ 'everness:pyriteblock_forged', 'everness:pyriteblock_forged', 'everness:pyriteblock_forged' },
{ 'everness:pyriteblock_forged', 'everness:hammer', 'everness:pyriteblock_forged' },
{ '', 'everness:hammer', '' }
}},
{'everness:pick_archeological', {
{ 'group:stone', 'group:stone', 'group:stone' },
{ '', 'group:stick', '' },
{ 'group:stick', '', '' }
}},
{'everness:pick_illuminating', {
{ 'everness:crystal_purple', 'everness:coral_tree_bioluminescent', 'everness:crystal_purple' },
{ '', 'everness:sulfur_stone', '' },
{ '', 'group:stick', '' }
}},
{'everness:shovel_silk', {
{ 'everness:ancient_emerald_ice' },
{ 'everness:glowing_pillar' },
{ 'everness:crystal_purple' }
}},
{'everness:vine_shears', {
{ '', 'everness:pyrite_ingot', '' },
{ 'group:stick', 'group:wood', 'everness:pyrite_ingot' },
{ '', '', 'group:stick' }
}},
}
for _, data in ipairs(recipes_tool) do
core.register_craft({
type = 'shaped',
output = data[1],
recipe = data[2]
})
end
--
-- Fuel
--
local recipes_fuel = {
{'everness:baobab_wood', 8},
{'everness:bamboo_block', 15},
{'everness:bamboo_dry_block', 15},
{'everness:bamboo_item', 3},
{'everness:bamboo_mosaic_wood', 15},
{'everness:bamboo_wood', 15},
{'everness:coral_burdock_1', 3},
{'everness:coral_burdock_2', 3},
{'everness:crystal_wood', 15},
{'everness:door_bamboo', 14},
{'everness:lava_tree_wood', 30},
{'everness:lotus_leaf_3', 1},
{'everness:mese_wood', 15},
{'everness:sequoia_wood', 6},
{'everness:sulfur_stone', 370},
{'everness:trapdoor_bamboo', 7},
{'everness:trapdoor_crystal_wood', 7},
}
for _, data in ipairs(recipes_fuel) do
core.register_craft({
type = 'fuel',
recipe = data[1],
burntime = data[2],
})
end
--
-- Cooking recipes
--
local recipes_cooking = {
{'everness:coral_desert_cobble', 'everness:coral_desert_stone'},
{'everness:coral_desert_mossy_cobble', 'everness:coral_desert_stone'},
{'everness:crystal_cobble', 'everness:crystal_stone'},
{'everness:crystal_mossy_cobble', 'everness:crystal_stone'},
{'everness:forsaken_desert_cobble_red', 'everness:forsaken_desert_stone'},
{'everness:forsaken_tundra_cobble', 'everness:forsaken_tundra_stone'},
{'everness:mineral_cave_cobblestone', 'everness:mineral_cave_stone'},
{'everness:mineral_lava_stone_dry', 'everness:mineral_lava_stone'},
{'everness:mineral_stone_cobble', 'everness:mineral_stone'},
--
{'everness:bamboo_block', 'everness:bamboo_dry_block'},
{'everness:baobab_fruit', 'everness:baobab_fruit_roasted'},
{'everness:cursed_stone', 'everness:cursed_stone_carved'},
{'everness:lotus_leaf', 'everness:lotus_leaf_3'},
{'everness:lotus_leaf_2', 'everness:lotus_leaf_3'},
{'everness:pyriteblock', 'everness:pyriteblock_forged'},
{'group:everness_sand', 'everness:glass'},
}
for _, data in ipairs(recipes_cooking) do
core.register_craft({
type = 'cooking',
output = data[2],
recipe = data[1],
})
end
--
-- Saplings
--
register_craft_1x2_composite('group:lantern', 'everness:coral_tree_sapling', 'everness:coral_tree_bioluminescent_sapling')
register_craft_1x2_composite('group:lantern', 'everness:dry_tree_sapling', 'everness:cursed_dream_tree_sapling')
register_craft_2x2('everness:crystal_tree_sapling', 'everness:crystal_tree_large_sapling')