2023-05-23 16:53:45 +02:00
local function show_enchanting ( player )
local player_meta = player : get_meta ( )
2023-06-21 23:45:22 +02:00
player_meta : set_int ( " mcl_enchanting:num_bookshelves " , 8 ) -- 15 for max enchantments
2023-05-23 16:53:45 +02:00
player_meta : set_string ( " mcl_enchanting:table_name " , " Enchanting Table " )
mcl_enchanting.show_enchanting_formspec ( player )
end
2023-10-04 02:08:07 +02:00
local width = ( exchangeclone.mcl and 9 ) or 8
2023-09-25 16:41:23 +02:00
local smelting_formspec =
" size[ " .. width .. " ,8] " ..
" label[0.25,0.25;Smelting] " ..
" label[ " .. ( width / 3 ) .. " ,0.75;Input] " ..
" list[current_player;exchangeclone_smelting_input; " .. ( width / 3 ) .. " ,1;1,1] " ..
2023-10-04 02:08:07 +02:00
" label[ " .. ( width / 3 ) .. " ,2.25;Coal " .. ( ( exchangeclone.mcl and " /charcoal] " ) or " ] " ) ..
2023-09-25 16:41:23 +02:00
" list[current_player;exchangeclone_smelting_fuel; " .. ( width / 3 ) .. " ,2.5;1,1] " ..
" label[ " .. ( 2 * width / 3 ) .. " ,0.75;Output] " ..
" list[current_player;exchangeclone_smelting_output; " .. ( 2 * width / 3 ) .. " ,1.5;1,1] " ..
exchangeclone.inventory_formspec ( 0 , 4 ) ..
" listring[current_player;main] " ..
" listring[current_player;exchangeclone_smelting_input] " ..
" listring[current_player;main] " ..
" listring[current_player;exchangeclone_smelting_output] " ..
" listring[current_player;main] " ..
" listring[current_player;exchangeclone_smelting_fuel] " ..
" listring[current_player;main] "
2023-10-04 02:08:07 +02:00
if exchangeclone.mcl then
2023-09-25 16:41:23 +02:00
smelting_formspec = smelting_formspec ..
mcl_formspec.get_itemslot_bg ( width / 3 , 1 , 1 , 1 ) ..
mcl_formspec.get_itemslot_bg ( width / 3 , 2.5 , 1 , 1 ) ..
mcl_formspec.get_itemslot_bg ( 2 * width / 3 , 1.5 , 1 , 1 )
end
2023-05-23 16:53:45 +02:00
exchangeclone.node_transmutations = {
{ --use
[ " mcl_core:stone " ] = " mcl_core:cobble " ,
[ " mcl_core:cobble " ] = " mcl_core:stone " ,
[ " mcl_core:dirt_with_grass " ] = " mcl_core:sand " ,
[ " mcl_core:dirt " ] = " mcl_core:sand " ,
[ " mcl_core:sand " ] = " mcl_core:dirt_with_grass " ,
2023-09-25 16:41:23 +02:00
[ " mcl_core:podzol " ] = " mcl_core:redsand " ,
2023-05-26 18:55:55 +02:00
[ " mcl_core:redsand " ] = " mcl_core:podzol " ,
2023-05-23 16:53:45 +02:00
[ " mcl_flowers:tallgrass " ] = " mcl_core:deadbush " ,
[ " mcl_nether:netherrack " ] = " mcl_core:cobble " ,
[ " mcl_core:gravel " ] = " mcl_core:sandstone " ,
2023-05-26 18:55:55 +02:00
[ " mcl_core:sandstone " ] = " mcl_core:gravel " ,
[ " mcl_core:redsandstone " ] = " mcl_core:gravel " ,
2023-05-23 16:53:45 +02:00
[ " mcl_farming:pumpkin " ] = " mcl_farming:melon " ,
[ " mcl_farming:melon " ] = " mcl_farming:pumpkin " ,
[ " mcl_core:water_source " ] = " mcl_core:ice " ,
[ " mclx_core:river_water_source " ] = " mcl_core:ice " ,
[ " mcl_core:lava_source " ] = " mcl_core:obsidian " ,
[ " mcl_flowers:dandelion " ] = " mcl_flowers:poppy " ,
[ " mcl_flowers:poppy " ] = " mcl_flowers:dandelion " ,
[ " mcl_mushrooms:mushroom_brown " ] = " mcl_mushrooms:mushroom_red " ,
[ " mcl_mushrooms:mushroom_red " ] = " mcl_mushrooms:mushroom_brown " ,
[ " mcl_core:acacialeaves " ] = " mcl_core:birchleaves " ,
[ " mcl_core:birchleaves " ] = " mcl_core:darkleaves " ,
[ " mcl_core:darkleaves " ] = " mcl_core:jungleleaves " ,
[ " mcl_core:jungleleaves " ] = " mcl_mangrove:mangroveleaves " ,
[ " mcl_mangrove:mangroveleaves " ] = " mcl_core:leaves " ,
[ " mcl_core:leaves " ] = " mcl_core:spruceleaves " ,
[ " mcl_core:spruceleaves " ] = " mcl_core:acacialeaves " ,
[ " mcl_core:acaciatree " ] = " mcl_core:birchtree " ,
[ " mcl_core:birchtree " ] = " mcl_core:darktree " ,
[ " mcl_core:darktree " ] = " mcl_core:jungletree " ,
[ " mcl_core:jungletree " ] = " mcl_mangrove:mangrove_tree " ,
[ " mcl_mangrove:mangrove_tree " ] = " mcl_core:tree " ,
[ " mcl_core:tree " ] = " mcl_core:sprucetree " ,
[ " mcl_core:sprucetree " ] = " mcl_core:acaciatree " ,
[ " mcl_crimson:warped_fungus " ] = " mcl_crimson:crimson_fungus " ,
[ " mcl_crimson:warped_hyphae " ] = " mcl_crimson:crimson_hyphae " ,
[ " mcl_crimson:warped_nylium " ] = " mcl_crimson:crimson_nylium " ,
[ " mcl_crimson:warped_roots " ] = " mcl_crimson:crimson_roots " ,
[ " mcl_crimson:warped_wart_block " ] = " mcl_nether:nether_wart_block " ,
[ " mcl_crimson:crimson_fungus " ] = " mcl_crimson:warped_fungus " ,
[ " mcl_crimson:crimson_hyphae " ] = " mcl_crimson:warped_hyphae " ,
[ " mcl_crimson:crimson_nylium " ] = " mcl_crimson:warped_nylium " ,
[ " mcl_crimson:crimson_roots " ] = " mcl_crimson:warped_roots " ,
[ " mcl_nether:nether_wart_block " ] = " mcl_crimson:warped_wart_block " ,
[ " mcl_core:glass " ] = " mcl_core:sand " ,
2023-05-26 18:55:55 +02:00
[ " mcl_blackstone:blackstone " ] = " mcl_blackstone:basalt " ,
[ " mcl_blackstone:basalt " ] = " mcl_blackstone:blackstone " ,
2023-05-23 16:53:45 +02:00
[ " mcl_flowers:double_grass " ] = " mcl_core:deadbush " ,
--["mcl_flowers:double_grass_top"] = "air",
[ " mcl_core:andesite " ] = " mcl_core:diorite " ,
[ " mcl_core:diorite " ] = " mcl_core:granite " ,
2023-05-26 18:55:55 +02:00
[ " mcl_core:granite " ] = " mcl_deepslate:tuff " ,
[ " mcl_deepslate:tuff " ] = " mcl_core:andesite " ,
2023-05-23 16:53:45 +02:00
[ " mcl_deepslate:deepslate " ] = " mcl_deepslate:deepslate_cobbled " ,
[ " mcl_deepslate:deepslate_cobbled " ] = " mcl_deepslate:deepslate " ,
[ " mcl_core:stone_with_coal " ] = " mcl_deepslate:deepslate_with_coal " ,
[ " mcl_core:stone_with_iron " ] = " mcl_deepslate:deepslate_with_iron " ,
[ " mcl_core:stone_with_lapis " ] = " mcl_deepslate:deepslate_with_lapis " ,
[ " mcl_core:stone_with_gold " ] = " mcl_deepslate:deepslate_with_gold " ,
[ " mcl_core:stone_with_emerald " ] = " mcl_deepslate:deepslate_with_emerald " ,
[ " mcl_core:stone_with_redstone " ] = " mcl_deepslate:deepslate_with_redstone " ,
2023-05-26 18:55:55 +02:00
[ " mcl_core:stone_with_redstone_lit " ] = " mcl_deepslate:deepslate_with_redstone_lit " ,
2023-05-23 16:53:45 +02:00
[ " mcl_core:stone_with_diamond " ] = " mcl_deepslate:deepslate_with_diamond " ,
[ " mcl_copper:stone_with_copper " ] = " mcl_deepslate:deepslate_with_copper " ,
[ " mcl_deepslate:deepslate_with_coal " ] = " mcl_core:stone_with_coal " ,
[ " mcl_deepslate:deepslate_with_iron " ] = " mcl_core:stone_with_iron " ,
[ " mcl_deepslate:deepslate_with_lapis " ] = " mcl_core:stone_with_lapis " ,
[ " mcl_deepslate:deepslate_with_gold " ] = " mcl_core:stone_with_gold " ,
[ " mcl_deepslate:deepslate_with_emerald " ] = " mcl_core:stone_with_emerald " ,
[ " mcl_deepslate:deepslate_with_redstone " ] = " mcl_core:stone_with_redstone " ,
[ " mcl_deepslate:deepslate_with_diamond " ] = " mcl_core:stone_with_diamond " ,
[ " mcl_deepslate:deepslate_with_copper " ] = " mcl_copper:stone_with_copper " ,
[ " mcl_core:bedrock " ] = " mcl_core:barrier " ,
[ " mcl_core:barrier " ] = " mcl_core:bedrock " ,
2023-05-26 18:55:55 +02:00
[ " mcl_end:end_stone " ] = " mcl_nether:netherrack " ,
2023-09-25 16:41:23 +02:00
[ " mcl_nether:soul_sand " ] = " mcl_blackstone:soul_soil " ,
[ " mcl_blackstone:soul_soil " ] = " mcl_nether:soul_sand " ,
2023-05-23 16:53:45 +02:00
[ " default:stone " ] = " default:cobble " ,
[ " default:desert_stone " ] = " default:desert_cobble " ,
[ " default:cobble " ] = " default:stone " ,
[ " default:desert_cobble " ] = " default:desert_stone " ,
[ " default:dirt_with_grass " ] = " default:sand " ,
2023-09-25 16:41:23 +02:00
[ " default:dirt_with_snow " ] = " default:sand " ,
2023-05-23 16:53:45 +02:00
[ " default:dirt_with_dry_grass " ] = " default:sand " ,
[ " default:dry_dirt_with_dry_grass " ] = " default:desert_sand " ,
[ " default:dirt " ] = " default:sand " ,
[ " default:dry_dirt " ] = " default:desert_sand " ,
[ " default:dirt_with_coniferous_litter " ] = " default:sand " ,
[ " default:dirt_with_rainforest_litter " ] = " default:sand " ,
[ " default:sand " ] = " default:dirt_with_grass " ,
[ " default:desert_sand " ] = " default:dry_dirt_with_dry_grass " ,
[ " default:silver_sand " ] = " default:dirt_with_grass " ,
[ " default:grass_1 " ] = " default:dry_shrub " ,
[ " default:grass_2 " ] = " default:dry_shrub " ,
[ " default:grass_3 " ] = " default:dry_shrub " ,
[ " default:grass_4 " ] = " default:dry_shrub " ,
[ " default:grass_5 " ] = " default:dry_shrub " ,
[ " default:gravel " ] = " default:sandstone " ,
2023-09-25 16:41:23 +02:00
[ " default:sandstone " ] = " default:gravel " ,
[ " default:desert_sandstone " ] = " default:gravel " ,
[ " default:silver_sandstone " ] = " default:gravel " ,
2023-05-23 16:53:45 +02:00
[ " default:water_source " ] = " default:ice " ,
[ " default:river_water_source " ] = " default:ice " ,
[ " default:lava_source " ] = " default:obsidian " ,
[ " flowers:mushroom_brown " ] = " flowers:mushroom_red " ,
[ " flowers:mushroom_red " ] = " flowers:mushroom_brown " ,
[ " flowers:dandelion_yellow " ] = " flowers:rose " ,
[ " flowers:rose " ] = " flowers:dandelion_yellow " ,
[ " default:acacia_tree " ] = " default:tree " ,
[ " default:tree " ] = " default:aspen_tree " ,
[ " default:aspen_tree " ] = " default:jungletree " ,
[ " default:jungletree " ] = " default:pine_tree " ,
[ " default:pine_tree " ] = " default:acacia_tree " ,
[ " default:acacia_leaves " ] = " default:leaves " ,
[ " default:leaves " ] = " default:aspen_leaves " ,
[ " default:aspen_leaves " ] = " default:jungleleaves " ,
[ " default:jungleleaves " ] = " default:pine_needles " ,
[ " default:pine_needles " ] = " default:acacia_leaves " ,
[ " default:acacia_bush_leaves " ] = " default:bush_leaves " ,
[ " default:bush_leaves " ] = " default:pine_bush_needles " ,
[ " default:pine_bush_needles " ] = " default:acacia_bush_leaves " ,
[ " default:acacia_bush_stem " ] = " default:bush_stem " ,
[ " default:bush_stem " ] = " default:pine_bush_stem " ,
[ " default:pine_bush_stem " ] = " default:acacia_bush_stem " ,
[ " default:glass " ] = " default:sand " ,
} ,
{ --sneak+use
[ " mcl_core:stone " ] = " mcl_core:dirt_with_grass " ,
[ " mcl_core:cobble " ] = " mcl_core:dirt_with_grass " ,
2023-05-26 18:55:55 +02:00
[ " mcl_deepslate:deepslate " ] = " mcl_core:podzol " ,
[ " mcl_deepslate:deepslate_cobbled " ] = " mcl_core:podzol " ,
2023-05-23 16:53:45 +02:00
[ " mcl_core:sand " ] = " mcl_core:cobble " ,
[ " mcl_core:redsand " ] = " mcl_core:cobble " ,
[ " mcl_core:dirt_with_grass " ] = " mcl_core:cobble " ,
2023-09-25 16:41:23 +02:00
[ " mcl_core:dirt " ] = " mcl_core:cobble " ,
2023-05-26 18:55:55 +02:00
[ " mcl_core:podzol " ] = " mcl_deepslate:deepslate_cobbled " ,
2023-09-25 16:41:23 +02:00
[ " mcl_deepslate:tuff " ] = " mcl_core:granite " ,
[ " mcl_core:granite " ] = " mcl_core:diorite " ,
[ " mcl_core:diorite " ] = " mcl_core:andesite " ,
[ " mcl_core:andesite " ] = " mcl_deepslate:tuff " ,
2023-05-23 16:53:45 +02:00
[ " mcl_core:acacialeaves " ] = " mcl_core:spruceleaves " ,
[ " mcl_core:birchleaves " ] = " mcl_core:acacialeaves " ,
[ " mcl_core:darkleaves " ] = " mcl_core:birchleaves " ,
[ " mcl_core:jungleleaves " ] = " mcl_core:darkleaves " ,
[ " mcl_mangrove:mangroveleaves " ] = " mcl_core:jungleleaves " ,
[ " mcl_core:leaves " ] = " mcl_mangrove:mangroveleaves " ,
[ " mcl_core:spruceleaves " ] = " mcl_core:leaves " ,
[ " mcl_core:acaciatree " ] = " mcl_core:sprucetree " ,
[ " mcl_core:birchtree " ] = " mcl_core:acaciatree " ,
[ " mcl_core:darktree " ] = " mcl_core:birchtree " ,
[ " mcl_core:jungletree " ] = " mcl_core:darktree " ,
[ " mcl_mangrove:mangrove_tree " ] = " mcl_core:jungletree " ,
[ " mcl_core:tree " ] = " mcl_mangrove:mangrove_tree " ,
[ " mcl_core:sprucetree " ] = " mcl_core:tree " ,
2023-05-26 18:55:55 +02:00
[ " mcl_nether:netherrack " ] = " mcl_end:end_stone " ,
2023-05-23 16:53:45 +02:00
[ " default:stone " ] = " default:dirt_with_grass " ,
[ " default:cobble " ] = " default:dirt_with_grass " ,
[ " default:desert_stone " ] = " default:dry_dirt_with_dry_grass " ,
[ " default:desert_cobble " ] = " default:dry_dirt_with_dry_grass " ,
[ " default:dry_dirt_with_dry_grass " ] = " default:desert_cobble " ,
[ " default:dirt_with_dry_grass " ] = " default:cobble " ,
[ " default:dirt_with_grass " ] = " default:cobble " ,
2023-09-25 16:41:23 +02:00
[ " default:dirt_with_snow " ] = " default:cobble " ,
[ " default:dirt " ] = " default:cobble " ,
[ " default:dry_dirt " ] = " default:desert_cobble " ,
[ " default:dirt_with_coniferous_litter " ] = " default:cobble " ,
[ " default:dirt_with_rainforest_litter " ] = " default:cobble " ,
2023-05-23 16:53:45 +02:00
[ " default:sand " ] = " default:cobble " ,
[ " default:desert_sand " ] = " default:desert_cobble " ,
[ " default:silver_sand " ] = " default:cobble " ,
[ " default:acacia_tree " ] = " default:pine_tree " ,
[ " default:tree " ] = " default:acacia_tree " ,
[ " default:aspen_tree " ] = " default:tree " ,
[ " default:jungletree " ] = " default:aspen_tree " ,
[ " default:pine_tree " ] = " default:jungletree " ,
[ " default:acacia_leaves " ] = " default:pine_needles " ,
[ " default:leaves " ] = " default:acacia_leaves " ,
[ " default:aspen_leaves " ] = " default:leaves " ,
[ " default:jungleleaves " ] = " default:aspen_leaves " ,
[ " default:pine_needles " ] = " default:jungleleaves " ,
[ " default:acacia_bush_leaves " ] = " default:pine_bush_needles " ,
[ " default:bush_leaves " ] = " default:acacia_bush_leaves " ,
[ " default:pine_bush_needles " ] = " default:bush_leaves " ,
[ " default:acacia_bush_stem " ] = " default:pine_bush_stem " ,
[ " default:bush_stem " ] = " default:acacia_bush_stem " ,
[ " default:pine_bush_stem " ] = " default:bush_stem " ,
}
}
2023-08-07 22:56:29 +02:00
exchangeclone.stone_action = {
start_action = function ( player , center , range , mode )
if exchangeclone.check_cooldown ( player , " phil " ) then return end
exchangeclone.play_ability_sound ( player )
return mode
end ,
action = function ( player , pos , node , mode )
2023-05-23 16:53:45 +02:00
local new_node = exchangeclone.node_transmutations [ mode ] [ node.name ]
if not new_node and mode == 2 then
new_node = exchangeclone.node_transmutations [ 1 ] [ node.name ]
end
if new_node then
2023-08-07 22:56:29 +02:00
if minetest.is_protected ( pos , player : get_player_name ( ) ) then
minetest.record_protection_violation ( pos , player : get_player_name ( ) )
2023-05-23 16:53:45 +02:00
else
2023-05-26 18:55:55 +02:00
node.name = new_node
2023-08-07 22:56:29 +02:00
minetest.swap_node ( pos , node )
2023-05-23 16:53:45 +02:00
end
end
2023-08-07 22:56:29 +02:00
return true
end ,
end_action = function ( player , center , range , data )
exchangeclone.start_cooldown ( player , " phil " , 0.3 )
2023-05-23 16:53:45 +02:00
end
2023-08-07 22:56:29 +02:00
}
2023-05-23 16:53:45 +02:00
2023-06-21 23:45:22 +02:00
local on_left_click = nil
2023-09-29 01:23:49 +02:00
if exchangeclone.mcl then
2023-06-21 23:45:22 +02:00
on_left_click = function ( itemstack , player , pointed_thing )
if player : get_player_control ( ) . sneak then
show_enchanting ( player )
else
2023-09-25 16:41:23 +02:00
if player : get_player_control ( ) . aux1 then
minetest.show_formspec ( player : get_player_name ( ) , " exchangeclone_smelting " , smelting_formspec )
else
mcl_crafting_table.show_crafting_form ( player )
end
2023-05-23 16:53:45 +02:00
end
end
end
2023-09-25 16:41:23 +02:00
local fuel_items = {
[ " mcl_core:charcoal_lump " ] = true ,
[ " mcl_core:coal_lump " ] = true ,
[ " default:coal_lump " ] = true ,
}
minetest.register_on_joinplayer ( function ( player , last_login )
local inv = player : get_inventory ( )
inv : set_size ( " exchangeclone_smelting_input " , 1 )
inv : set_size ( " exchangeclone_smelting_output " , 1 )
inv : set_size ( " exchangeclone_smelting_fuel " , 1 )
end )
minetest.register_allow_player_inventory_action ( function ( player , action , inventory , info )
if action == " put " then
if info.listname == " exchangeclone_smelting_output " then
return 0
elseif info.listname == " exchangeclone_smelting_fuel " then
if not fuel_items [ info.stack : get_name ( ) ] then
return 0
end
end
elseif action == " move " then
if info.to_list == " exchangeclone_smelting_output " then
return 0
elseif info.to_list == " exchangeclone_smelting_fuel " then
if not fuel_items [ inventory : get_stack ( info.from_list , info.from_index ) : get_name ( ) ] then
return 0
end
end
end
end )
local function set_smelting_output ( player )
end
minetest.register_on_player_inventory_action ( function ( player , action , inventory , info )
if action == " put " then
if info.listname == " exchangeclone_smelting_input " or info.listname == " exchangeclone_smelting_fuel " then
set_smelting_output ( player )
end
elseif action == " take " then
if info.listname == " exchangeclone_smelting_input "
or info.listname == " exchangeclone_smelting_fuel " then
set_smelting_output ( player )
elseif info.listname == " exchangeclone_smelting_output " then
2023-10-04 02:08:07 +02:00
-- TODO
2023-09-25 16:41:23 +02:00
end
end
end )
2023-05-23 16:53:45 +02:00
local function on_right_click ( itemstack , player , pointed_thing )
2023-06-21 23:45:22 +02:00
local click_test = exchangeclone.check_on_rightclick ( itemstack , player , pointed_thing )
if click_test ~= false then
return click_test
end
if player : get_player_control ( ) . aux1 then
return exchangeclone.range_update ( itemstack , player )
end
local center = player : get_pos ( )
if pointed_thing and pointed_thing.type == " node " then
center = pointed_thing.under
end
2023-05-23 16:53:45 +02:00
if player : get_player_control ( ) . sneak then
2023-06-10 22:55:47 +02:00
local range = tonumber ( itemstack : get_meta ( ) : get_int ( " exchangeclone_item_range " ) )
2023-08-07 22:56:29 +02:00
exchangeclone.node_radius_action ( player , center , range , exchangeclone.stone_action , 2 )
2023-06-21 23:45:22 +02:00
else
2023-06-10 22:55:47 +02:00
local range = itemstack : get_meta ( ) : get_int ( " exchangeclone_item_range " )
2023-08-07 22:56:29 +02:00
exchangeclone.node_radius_action ( player , center , range , exchangeclone.stone_action , 1 )
2023-05-23 16:53:45 +02:00
end
end
2023-08-07 22:56:29 +02:00
local tt_help = " (Shift)-right-click: transmute nodes. (Shift)-Aux1-right-click: Change range "
2023-06-10 22:55:47 +02:00
local item1 = " mese crystals "
2023-09-29 01:23:49 +02:00
if exchangeclone.mcl then
2023-06-10 22:55:47 +02:00
item1 = " emeralds "
end
local longdesc = " A mysterious device discovered by alchemists millenia ago. The crafting recipe was recently rediscovered by ThePython. \n \n " ..
2023-08-07 22:56:29 +02:00
" It has the ability to transmute nearby nodes into other nodes. The range can be increased or decreased from 0 to 4 by (shift-)aux1-right-clicking. \n " ..
" Transmute nodes by (shift-)right-clicking (holding shift causes a few differences in transmutation). They are changed in a cube centered on " ..
" the node directly below you, with a radius equal to the range. \n " ..
2023-06-10 22:55:47 +02:00
" The ancient tome (entitled the \" Tekkit Wiki \" ) vaguely mentioned a \" cooldown \" when used to transmute large areas, " ..
2023-06-21 23:45:22 +02:00
" but ThePython was far to lazy to implement such a thing (maybe just have the charge level/radius reset every time?). \n \n " ..
2023-06-10 22:55:47 +02:00
" The Philosopher's Stone is also useful in converting various resources, such as turning coal into iron, or gold into " .. item1 .. " . \n " ..
" See the crafting guide for recipes. The Philosopher's Stone is NEVER used up in crafting recipes (if it is, it's a bug). The transmutation " ..
" range is reset when used in a crafting recipe. "
2023-08-07 22:56:29 +02:00
local usagehelp = " The range can be increased or decreased from 0 to 4 by (shift-)aux1-right-clicking. Transmute nodes by (shift-)right-clicking (holding shift causes a few differences in transmutation). They are changed in a cube centered on " ..
" the node directly below you, with a radius equal to the range. \n \n " ..
2023-06-10 22:55:47 +02:00
" The Philosopher's Stone is also useful in converting various resources, such as turning coal into iron, or gold into " .. item1 .. " . \n " ..
" See the crafting guide for recipes. The Philosopher's Stone is NEVER used up in crafting recipes (if it is, it's a bug). The transmutation " ..
" range is reset when used in a crafting recipe. "
2023-09-29 01:23:49 +02:00
if exchangeclone.mcl then
2023-06-21 23:45:22 +02:00
tt_help = tt_help .. " \n Click: crafting table. Shift-click: enchanting table. "
local extra_stuff = " \n \n In MineClone, clicking opens a 3x3 crafting table and shift+clicking opens an enchanting table (the equivalent of a real " ..
2023-06-10 22:55:47 +02:00
" enchanting table with eight bookshelves around it). "
longdesc = longdesc .. extra_stuff
usagehelp = usagehelp .. extra_stuff
end
2023-10-04 02:08:07 +02:00
--[[ Could NOT figure out how to make this work.
2023-09-25 16:41:23 +02:00
for name , def in pairs ( minetest.registered_nodes ) do
local result , _ = minetest.get_craft_result ( {
method = " cooking " ,
width = 1 ,
items = { ItemStack ( name ) }
} )
local name = result.item : get_name ( )
if minetest.registered_items [ name ] then
minetest.registered_items [ name ] . groups.exchangeclone_cookable = true
end
end
local recipe_table = { " exchangeclone:philosophers_stone " }
minetest.register_craftitem ( " exchangeclone:cooked_item " , { description = " Cooked Item " } )
for i = 1 , 7 do
table.insert ( recipe_table , " group:exchangeclone_cookable " )
for fuel , _ in pairs ( fuel_items ) do
recipe_table [ 2 ] = fuel
minetest.register_craft ( {
output = " exchangeclone:cooked_item " .. tostring ( i ) ,
type = " shapeless " ,
recipe = table.copy ( recipe_table )
} )
end
end
minetest.register_craft_predict ( function ( itemstack , player , old_craft_grid , craft_inv )
if itemstack == ItemStack ( " exchangeclone:cooked_item " ) then
local phil = 0 -- yes, I'm calling it Phil.
local fuel = 0
local item_type = false
local item_count = 0
for _ , item in ipairs ( old_craft_grid ) do
local name = item : get_name ( )
if name == " " then
-- do nothing
elseif name == " exchangeclone:philosophers_stone " then
phil = phil + 1
elseif fuel_items [ name ] then
fuel = fuel + 1
else
if item_type and item_type ~= name then
minetest.log ( dump ( { item_type , name } ) )
return
else
item_type = name
item_count = item_count + 1
end
end
end
minetest.log ( dump ( { phil = phil , fuel = fuel , item_type = item_type , item_count = item_count } ) )
if not ( item_type and ( phil == 1 ) and ( fuel == 1 ) ) then return end
local result , _ = minetest.get_craft_result ( {
method = " cooking " ,
width = 1 ,
items = { ItemStack ( item_type ) }
} )
result = result.item
if result : get_name ( ) ~= " " then
result : set_count ( item_count )
return result
end
end
end )
minetest.register_on_craft ( function ( itemstack , player , old_craft_grid , craft_inv )
if itemstack == ItemStack ( " exchangeclone:cooked_item " ) then
local phil = 0 -- yes, I'm calling it Phil.
local fuel = 0
local item_type = false
local item_count = 0
for _ , item in ipairs ( old_craft_grid ) do
local name = item : get_name ( )
if name == " " then
-- do nothing
elseif name == " exchangeclone:philosophers_stone " then
phil = phil + 1
elseif fuel_items [ name ] then
fuel = fuel + 1
else
if item_type and item_type ~= name then
minetest.log ( dump ( { item_type , name } ) )
return
else
item_type = name
item_count = item_count + 1
end
end
end
minetest.log ( dump ( { phil = phil , fuel = fuel , item_type = item_type , item_count = item_count } ) )
if not ( item_type and ( phil == 1 ) and ( fuel == 1 ) ) then return end
local result , _ = minetest.get_craft_result ( {
method = " cooking " ,
width = 1 ,
items = { ItemStack ( item_type ) }
} )
result = result.item
if result : get_name ( ) ~= " " then
result : set_count ( item_count )
return result
end
end
end ) --]]
2023-05-23 16:53:45 +02:00
minetest.register_tool ( " exchangeclone:philosophers_stone " , {
description = " Philosopher's Stone " ,
inventory_image = " exchangeclone_philosophers_stone.png " ,
wield_image = " exchangeclone_philosophers_stone.png " ,
2023-06-10 22:55:47 +02:00
_tt_help = tt_help ,
_doc_items_longdesc = longdesc ,
_doc_items_usagehelp = usagehelp ,
exchangeclone_item_range = 0 ,
2023-05-23 16:53:45 +02:00
on_use = on_left_click ,
on_place = on_right_click ,
on_secondary_use = on_right_click ,
2023-09-25 16:41:23 +02:00
groups = { philosophers_stone = 1 , disable_repair = 1 , fire_immune = 1 }
2023-05-23 16:53:45 +02:00
} )
local diamond = " default:diamond "
local corner = " default:tin_ingot "
local side = " default:obsidian "
2023-09-29 01:23:49 +02:00
if exchangeclone.mcl then
2023-05-23 16:53:45 +02:00
diamond = " mcl_core:diamond "
corner = " mcl_nether:glowstone_dust "
side = " mesecons:redstone "
end
minetest.register_craft ( {
output = " exchangeclone:philosophers_stone " ,
recipe = {
{ corner , side , corner } ,
{ side , diamond , side } ,
{ corner , side , corner }
}
} )
minetest.register_craft ( {
output = " mcl_core:coal_lump " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_core:charcoal_lump " ,
" mcl_core:charcoal_lump " ,
" mcl_core:charcoal_lump " ,
" mcl_core:charcoal_lump "
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mcl_core:charcoal_lump 4 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_core:coal_lump "
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mcl_core:iron_ingot " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_core:coal_lump " ,
" mcl_core:coal_lump "
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " default:steel_ingot " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" default:coal_lump " ,
" default:coal_lump "
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mcl_core:coal_lump 2 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_core:iron_ingot " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " default:coal_lump 2 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" default:steel_ingot " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mcl_copper:copper_ingot 6 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_core:iron_ingot " ,
" mcl_core:iron_ingot " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " default:copper_ingot 4 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" default:steel_ingot " ,
" default:steel_ingot " ,
" default:steel_ingot " ,
" default:steel_ingot " ,
" default:steel_ingot " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mcl_core:iron_ingot " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_copper:copper_ingot " ,
" mcl_copper:copper_ingot " ,
" mcl_copper:copper_ingot " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
2023-09-25 16:41:23 +02:00
minetest.register_craft ( {
output = " mcl_core:iron_ingot 2 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_copper:copper_ingot " ,
" mcl_copper:copper_ingot " ,
" mcl_copper:copper_ingot " ,
" mcl_copper:copper_ingot " ,
" mcl_copper:copper_ingot " ,
" mcl_copper:copper_ingot " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
2023-05-23 16:53:45 +02:00
minetest.register_craft ( {
output = " default:steel_ingot 5 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" default:copper_ingot " ,
" default:copper_ingot " ,
" default:copper_ingot " ,
" default:copper_ingot " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " default:tin_ingot 2 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" default:copper_ingot " ,
" default:copper_ingot " ,
" default:copper_ingot " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " default:copper_ingot 3 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" default:tin_ingot " ,
" default:tin_ingot " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mcl_core:iron_ingot 8 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_core:gold_ingot "
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " default:steel_ingot 8 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" default:gold_ingot "
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mcl_core:gold_ingot " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_core:iron_ingot " ,
" mcl_core:iron_ingot " ,
" mcl_core:iron_ingot " ,
" mcl_core:iron_ingot " ,
" mcl_core:iron_ingot " ,
" mcl_core:iron_ingot " ,
" mcl_core:iron_ingot " ,
" mcl_core:iron_ingot " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " default:gold_ingot " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" default:steel_ingot " ,
" default:steel_ingot " ,
" default:steel_ingot " ,
" default:steel_ingot " ,
" default:steel_ingot " ,
" default:steel_ingot " ,
" default:steel_ingot " ,
" default:steel_ingot " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " default:mese_crystal " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" default:gold_ingot " ,
" default:gold_ingot " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " default:gold_ingot 2 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" default:mese_crystal " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " default:diamond " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" default:mese_crystal " ,
" default:mese_crystal " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " default:mese_crystal 2 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" default:diamond "
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
2023-05-26 18:55:55 +02:00
output = " mcl_core:emerald " ,
2023-05-23 16:53:45 +02:00
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_core:gold_ingot " ,
" mcl_core:gold_ingot " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
2023-05-26 18:55:55 +02:00
output = " mcl_core:gold_ingot 2 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_core:emerald "
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mcl_core:diamond " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_core:emerald " ,
" mcl_core:emerald " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mcl_core:emerald 2 " ,
2023-05-23 16:53:45 +02:00
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_core:diamond "
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mcl_nether:ancient_debris " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_core:diamond " ,
" mcl_core:diamond " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mcl_core:diamond 2 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_nether:ancient_debris "
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mcl_core:diamond 2 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_nether:netherite_scrap "
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mcl_core:diamond 9 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_nether:netherite_ingot "
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mcl_nether:netherite_ingot " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_core:diamondblock "
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
2023-05-26 18:55:55 +02:00
} )
minetest.register_craft ( {
output = " mcl_core:lapis 2 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mesecons_torch:redstoneblock " ,
" mesecons_torch:redstoneblock " ,
" mesecons_torch:redstoneblock " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mesecons:redstone 27 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_core:lapis " ,
" mcl_core:lapis " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mesecons:redstone 27 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_core:lapis " ,
" mcl_core:lapis " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
2023-05-27 02:24:02 +02:00
} )
2023-10-04 02:07:36 +02:00
if exchangeclone.mcl then
2023-06-21 23:45:22 +02:00
minetest.register_craft ( {
output = " exchangeclone:alchemical_coal " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" mcl_core:coal_lump " ,
" mcl_core:coal_lump " ,
" mcl_core:coal_lump " ,
" mcl_core:coal_lump " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
else
minetest.register_craft ( {
output = " exchangeclone:alchemical_coal " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" default:coal_lump " ,
" default:coal_lump " ,
" default:coal_lump " ,
" default:coal_lump " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
end
2023-05-27 02:24:02 +02:00
minetest.register_craft ( {
output = " default:coal_lump 4 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" exchangeclone:alchemical_coal " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " mcl_core:coal_lump 4 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" exchangeclone:alchemical_coal " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " exchangeclone:mobius_fuel " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" exchangeclone:alchemical_coal " ,
" exchangeclone:alchemical_coal " ,
" exchangeclone:alchemical_coal " ,
" exchangeclone:alchemical_coal " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " exchangeclone:alchemical_coal 4 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" exchangeclone:mobius_fuel " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " exchangeclone:aeternalis_fuel " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" exchangeclone:mobius_fuel " ,
" exchangeclone:mobius_fuel " ,
" exchangeclone:mobius_fuel " ,
" exchangeclone:mobius_fuel " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
} )
minetest.register_craft ( {
output = " exchangeclone:mobius_fuel 4 " ,
type = " shapeless " ,
recipe = {
" exchangeclone:philosophers_stone " ,
" exchangeclone:aeternalis_fuel " ,
} ,
replacements = { { " exchangeclone:philosophers_stone " , " exchangeclone:philosophers_stone " } }
2023-05-23 16:53:45 +02:00
} )