alchemical/mobius/aeternalis/dark/red yay cool

This commit is contained in:
ThePython 2023-05-26 17:24:02 -07:00
parent a3e7918f14
commit 8220af3a8b
17 changed files with 496 additions and 6 deletions

View File

@ -45,7 +45,7 @@ If you have a suggestion or notice a bug, visit the [GitHub issues page](https:/
![Minetest Game Screenshot](screenshot_mtg.png)
## Sources/license:
This mod is inspired by the "Equivalent Exchange" mod for MineCraft, and forked and modified from Enchant97's mod [Element Exchange](https://github.com/enchant97/minetest_element_exchange). Both this mod and Element Exchange are licensed under GPLv3+. The textures for the Constructor, Deconstructor, Collector, and Orb are from Element Exchange and have the same license. The texture for the Philosopher's Stone is my own and also licensed under GPLv3+ just to make things easy.
This mod is inspired by the "Equivalent Exchange" mod for MineCraft, and forked and modified from Enchant97's mod [Element Exchange](https://github.com/enchant97/minetest_element_exchange). Both this mod and Element Exchange are licensed under GPLv3+. The textures for the Constructor, Deconstructor, Collector, and Orb are from Element Exchange and have the same license.The Alchemical Coal, Mobius Fuel, and Aeternalis Fuel textures are modified versions of MineClone's coal texture (CC-BY-SA-3.0). All other textures are my own (inspired by Equivalent Exchange) and licensed under GPLv3+ just to make it match Element Exchange.
Copyright (C) 2023 ThePython10110

View File

@ -24,6 +24,9 @@
2.1
The Energy Collector setting is now energy/second instead of second/energy to fit much higher costs than Element Exchange (default is 5 energy/s).
Fixed Exchange Orb energy value (forgot to change it after changing the recipe)
PS's enchanting table now is limited to 10-bookshelf enchantments to make it more balanced.
Added Alchemical Coal, Mobius Fuel, Aeternalis Fuel, Dark Matter, and Red Matter
Added Dark Matter sword, pickaxe, axe, shovel, hoe, and shears
Changed constructor, deconstructor, and collector recipes and energy values to make them cheaper
The Constructor, Deconstructor, and Energy Collector are now not unbreakable in MineClone (I really should test in survival).
The Energy Collector now drops its contents when broken in MineClone.
@ -33,4 +36,4 @@
Tuff, blackstone, and basalt are now transmutable (MineClone).
A couple of minor transmutation changes (MineClone).
Changed emerald value to 4096 (MineClone).
Gold cannot be crafted into diamonds using the PS; it can now be crafted into emeralds and emeralds into diamonds (MineClone).
Gold cannot be crafted into diamonds using the PS; it can now be crafted into emeralds and emeralds into diamonds (MineClone).

View File

@ -1,3 +1,5 @@
local sound_mod = mcl_sounds or default
function get_element_constructor_formspec()
if not exchangeclone.mineclone then
local formspec = {
@ -167,7 +169,7 @@ minetest.register_node("exchangeclone:element_constructor", {
groups = {cracky = 2, container = 4, pickaxey = 2},
_mcl_hardness = 3,
_mcl_blast_resistance = 6,
sounds = mcl_sounds.node_sound_metal_defaults(),
sounds = sound_mod.node_sound_metal_defaults(),
is_ground_content = false,
can_dig = can_dig,
after_dig_node = function(pos, oldnode, oldmetadata, digger)

144
craftitems.lua Normal file
View File

@ -0,0 +1,144 @@
local sound_mod = mcl_sounds or default
local function get_level(level)
if exchangeclone.mineclone then
return nil
else
return level
end
end
minetest.register_craftitem("exchangeclone:alchemical_coal", {
description = "Alchemical Coal",
wield_image = "exchangeclone_alchemical_coal.png",
inventory_image = "exchangeclone_alchemical_coal.png",
groups = { craftitem=1},
})
minetest.register_craftitem("exchangeclone:mobius_fuel", {
description = "Mobius Fuel",
wield_image = "exchangeclone_mobius_fuel.png",
inventory_image = "exchangeclone_mobius_fuel.png",
groups = { craftitem=1},
})
minetest.register_craftitem("exchangeclone:aeternalis_fuel", {
description = "Aeternalis Fuel",
wield_image = "exchangeclone_aeternalis_fuel.png",
inventory_image = "exchangeclone_aeternalis_fuel.png",
groups = { craftitem=1},
})
minetest.register_craft({
type = "fuel",
recipe = "exchangeclone:alchemical_coal",
burntime = 320,
})
minetest.register_craft({
type = "fuel",
recipe = "exchangeclone:mobius_fuel",
burntime = 1280,
})
minetest.register_craft({
type = "fuel",
recipe = "exchangeclone:aeternalis_fuel",
burntime = 5120,
})
minetest.register_craftitem("exchangeclone:dark_matter", {
description = "Dark Matter Orb",
wield_image = "exchangeclone_dark_matter.png",
inventory_image = "exchangeclone_dark_matter.png",
groups = {craftitem = 1}
})
minetest.register_craftitem("exchangeclone:red_matter", {
description = "Red Matter Orb",
wield_image = "exchangeclone_red_matter.png",
inventory_image = "exchangeclone_red_matter.png",
groups = {craftitem = 1},
})
minetest.register_node("exchangeclone:dark_matter_block", {
description = "Dark Matter Block",
tiles = {"exchangeclone_dark_matter_block.png"},
is_ground_content = false,
light_source = 10,
sounds = sound_mod.node_sound_stone_defaults(),
groups = {pickaxey=5, material_stone=1, cracky = 3, level = get_level(4)}, --ridiculous workaround
_mcl_blast_resistance = 1500,
_mcl_hardness = 75,
})
minetest.register_node("exchangeclone:red_matter_block", {
description = "Red Matter Block",
tiles = {"exchangeclone_red_matter_block.png"},
is_ground_content = false,
light_source = 14,
sounds = sound_mod.node_sound_stone_defaults(),
-- TODO: Change level to 5 when adding Red Matter tools
groups = {pickaxey=5, material_stone=1, cracky = 3, level = get_level(4)},
_mcl_blast_resistance = 1500,
_mcl_hardness = 100,
})
minetest.register_craft({
output = "exchangeclone:dark_matter",
recipe = {
{"exchangeclone:aeternalis_fuel", "exchangeclone:aeternalis_fuel", "exchangeclone:aeternalis_fuel"},
{"exchangeclone:aeternalis_fuel", "mcl_core:diamondblock", "exchangeclone:aeternalis_fuel"},
{"exchangeclone:aeternalis_fuel", "exchangeclone:aeternalis_fuel", "exchangeclone:aeternalis_fuel"}
}
})
minetest.register_craft({
output = "exchangeclone:dark_matter",
recipe = {
{"exchangeclone:aeternalis_fuel", "exchangeclone:aeternalis_fuel", "exchangeclone:aeternalis_fuel"},
{"exchangeclone:aeternalis_fuel", "default:diamondblock", "exchangeclone:aeternalis_fuel"},
{"exchangeclone:aeternalis_fuel", "exchangeclone:aeternalis_fuel", "exchangeclone:aeternalis_fuel"}
}
})
minetest.register_craft({
output = "exchangeclone:red_matter",
recipe = {
{"exchangeclone:aeternalis_fuel", "exchangeclone:aeternalis_fuel", "exchangeclone:aeternalis_fuel"},
{"exchangeclone:dark_matter", "exchangeclone:dark_matter", "exchangeclone:dark_matter"},
{"exchangeclone:aeternalis_fuel", "exchangeclone:aeternalis_fuel", "exchangeclone:aeternalis_fuel"}
}
})
minetest.register_craft({
output = "exchangeclone:dark_matter_block 4",
recipe = {
{"exchangeclone:dark_matter", "exchangeclone:dark_matter"},
{"exchangeclone:dark_matter", "exchangeclone:dark_matter"}
}
})
minetest.register_craft({
output = "exchangeclone:red_matter_block 4",
recipe = {
{"exchangeclone:red_matter", "exchangeclone:red_matter"},
{"exchangeclone:red_matter", "exchangeclone:red_matter"}
}
})
minetest.register_craft({
output = "exchangeclone:dark_matter 4",
recipe = {
{"exchangeclone:dark_matter_block","exchangeclone:dark_matter_block}"},
{"exchangeclone:dark_matter_block","exchangeclone:dark_matter_block}"}
}
})
minetest.register_craft({
output = "exchangeclone:red_matter 4",
recipe = {
{"exchangeclone:red_matter_block","exchangeclone:red_matter_block}"},
{"exchangeclone:red_matter_block","exchangeclone:red_matter_block}"}
}
})

229
dark_and_red_tools.lua Normal file
View File

@ -0,0 +1,229 @@
local wield_scale
if exchangeclone.mineclone then
local wield_scale = mcl_vars.tool_wield_scale
else
local wield_scale = {x=1,y=1,z=1}
end
local make_grass_path
local make_stripped_trunk
if exchangeclone.mineclone then
make_grass_path = function(itemstack, placer, pointed_thing)
-- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node(pointed_thing.under)
if placer and not placer:get_player_control().sneak then
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack
end
end
-- Only make grass path if tool used on side or top of target node
if pointed_thing.above.y < pointed_thing.under.y then
return itemstack
end
if (minetest.get_item_group(node.name, "path_creation_possible") == 1) then
local above = table.copy(pointed_thing.under)
above.y = above.y + 1
if minetest.get_node(above).name == "air" then
if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then
minetest.record_protection_violation(pointed_thing.under, placer:get_player_name())
return itemstack
end
if not minetest.is_creative_enabled(placer:get_player_name()) then
-- Add wear (as if digging a shovely node)
local toolname = itemstack:get_name()
local wear = mcl_autogroup.get_wear(toolname, "shovely")
if wear then
itemstack:add_wear(wear)
end
end
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = above}, true)
minetest.swap_node(pointed_thing.under, {name="mcl_core:grass_path"})
end
end
return itemstack
end
make_stripped_trunk = function(itemstack, placer, pointed_thing)
if pointed_thing.type ~= "node" then return end
local node = minetest.get_node(pointed_thing.under)
local node_name = minetest.get_node(pointed_thing.under).name
local noddef = minetest.registered_nodes[node_name]
if not noddef then
minetest.log("warning", "Trying to right click with an axe the unregistered node: " .. tostring(node_name))
return
end
if not placer:get_player_control().sneak and noddef.on_rightclick then
return minetest.item_place(itemstack, placer, pointed_thing)
end
if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then
minetest.record_protection_violation(pointed_thing.under, placer:get_player_name())
return itemstack
end
if noddef._mcl_stripped_variant == nil then
return itemstack
else
minetest.swap_node(pointed_thing.under, {name=noddef._mcl_stripped_variant, param2=node.param2})
if not minetest.is_creative_enabled(placer:get_player_name()) then
-- Add wear (as if digging a axey node)
local toolname = itemstack:get_name()
local wear = mcl_autogroup.get_wear(toolname, "axey")
if wear then
itemstack:add_wear(wear)
end
end
end
return itemstack
end
end
local carve_pumpkin
if minetest.get_modpath("mcl_farming") then
carve_pumpkin = function(itemstack, placer, pointed_thing)
-- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node(pointed_thing.under)
if placer and not placer:get_player_control().sneak then
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack
end
end
-- Only carve pumpkin if used on side
if pointed_thing.above.y ~= pointed_thing.under.y then
return
end
if node.name == "mcl_farming:pumpkin" then
if not minetest.is_creative_enabled(placer:get_player_name()) then
-- Add wear (as if digging a shearsy node)
local toolname = itemstack:get_name()
local wear = mcl_autogroup.get_wear(toolname, "shearsy")
if wear then
itemstack:add_wear(wear)
end
end
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = pointed_thing.above}, true)
local dir = vector.subtract(pointed_thing.under, pointed_thing.above)
local param2 = minetest.dir_to_facedir(dir)
minetest.set_node(pointed_thing.under, {name="mcl_farming:pumpkin_face", param2 = param2})
minetest.add_item(pointed_thing.above, "mcl_farming:pumpkin_seeds 4")
end
return itemstack
end
end
minetest.register_tool("exchangeclone:pick_dark_matter", {
description = "Dark Matter Pickaxe\nImage coming soon.",
groups = { tool=1, pickaxe=1, dig_speed_class=7, enchantability=0 },
wield_scale = wield_scale,
tool_capabilities = {
-- 1/1.2
full_punch_interval = 0.5,
max_drop_level=5,
damage_groups = {fleshy=7},
punch_attack_uses = 0,
groupcaps={
cracky = {times={[1]=1.5, [2]=0.75, [3]=0.325}, uses=0, maxlevel=4},
},
},
sound = { breaks = "default_tool_breaks" },
_mcl_toollike_wield = true,
_mcl_diggroups = {
pickaxey = { speed = 16, level = 7, uses = 0 }
},
})
minetest.register_tool("exchangeclone:shovel_dark_matter", {
description = "Dark Matter Shovel\nImage coming soon.",
groups = { tool=1, shovel=1, dig_speed_class=7, enchantability=0 },
wield_scale = wield_scale,
tool_capabilities = {
-- 1/1.2
full_punch_interval = 0.5,
max_drop_level=5,
damage_groups = {fleshy=7},
punch_attack_uses = 0,
groupcaps={
crumbly = {times={[1]=0.9, [2]=0.45, [3]=0.225}, uses=0, maxlevel=4},
},
},
sound = { breaks = "default_tool_breaks" },
on_place = make_grass_path,
_mcl_toollike_wield = true,
_mcl_diggroups = {
shovely = { speed = 16, level = 7, uses = 0 }
},
})
minetest.register_tool("exchangeclone:axe_dark_matter", {
description = "Dark Matter Axe\nImage coming soon.",
groups = { tool=1, axe=1, dig_speed_class=7, enchantability=0 },
wield_scale = wield_scale,
tool_capabilities = {
-- 1/1.2
full_punch_interval = 0.5,
max_drop_level=5,
damage_groups = {fleshy=16},
punch_attack_uses = 0,
groupcaps={
choppy = {times={[1]=1.5, [2]=0.75, [3]=0.38}, uses=0, maxlevel=4},
},
},
sound = { breaks = "default_tool_breaks" },
on_place = make_stripped_trunk,
_mcl_toollike_wield = true,
_mcl_diggroups = {
axey = { speed = 16, level = 7, uses = 0 }
},
})
minetest.register_tool("exchangeclone:sword_dark_matter", {
description = "Dark Matter Sword\nImage coming soon.",
groups = { tool=1, sword=1, dig_speed_class=7, enchantability=0 },
wield_scale = wield_scale,
tool_capabilities = {
-- 1/1.2
full_punch_interval = 0.25,
max_drop_level=5,
damage_groups = {fleshy=14},
punch_attack_uses = 0,
groupcaps={
snappy = {times={[1]=0.95, [2]=0.45, [3]=0.15}, uses=0, maxlevel=4},
},
},
sound = { breaks = "default_tool_breaks" },
_mcl_toollike_wield = true,
_mcl_diggroups = {
swordy = { speed = 16, level = 7, uses = 0 }
},
})
local diamond_itemstring = "default:diamond"
if exchangeclone.mineclone then
diamond_itemstring = "mcl_core:diamond"
end
minetest.register_craft({
output = "exchangeclone:shovel_dark_matter",
recipe = {
{"", "exchangeclone:dark_matter", ""},
{"", diamond_itemstring, ""},
{"", diamond_itemstring, ""}
}
})
minetest.register_craft({
output = "exchangeclone:pick_dark_matter",
recipe = {
{"exchangeclone:dark_matter", "exchangeclone:dark_matter", "exchangeclone:dark_matter"},
{"", diamond_itemstring, ""},
{"", diamond_itemstring, ""}
}
})

View File

@ -1,3 +1,5 @@
local sound_mod = mcl_sounds or default
--Renamed "fuel" inventory to "main" to (almost) work with hoppers
function get_element_deconstructor_formspec()
@ -148,7 +150,7 @@ minetest.register_node("exchangeclone:element_deconstructor", {
groups = {cracky = 2, container = 3, pickaxey = 2},
_mcl_hardness = 3,
_mcl_blast_resistance = 6,
sounds = mcl_sounds.node_sound_metal_defaults(),
sounds = sound_mod.node_sound_metal_defaults(),
is_ground_content = false,
can_dig = can_dig,
after_dig_node = function(pos, oldnode, oldmetadata, digger)

View File

@ -6,6 +6,13 @@ exchangeclone.mtg_energy_values = {
element_constructor = 92168,
energy_collector = 23901,
philosophers_stone = 9984,
alchemical_coal = 512,
mobius_fuel = 2048,
aeternalis_fuel = 8192,
dark_matter = 139264,
dark_matter_block = 139264,
red_matter = 466944,
red_matter_block = 466944,
},
["beds"] = {
bed_bottom = 168,
@ -310,6 +317,13 @@ exchangeclone.mcl_energy_values = {
energy_collector = 23883,
orb = 33792,
philosophers_stone = 9984,
alchemical_coal = 512,
mobius_fuel = 2048,
aeternalis_fuel = 8192,
dark_matter = 139264,
dark_matter_block = 139264,
red_matter = 466944,
red_matter_block = 466944,
},
["mcl_core"] = {
stonebrickmossy = 9,

View File

@ -1,3 +1,5 @@
local sound_mod = mcl_sounds or default
local function get_energy_collector_formspec()
if not exchangeclone.mineclone then
local formspec = {
@ -136,7 +138,7 @@ minetest.register_node("exchangeclone:energy_collector", {
groups = {cracky = 2, container = 2, pickaxey = 2},
_mcl_hardness = 3,
_mcl_blast_resistance = 6,
sounds = mcl_sounds.node_sound_metal_defaults(),
sounds = sound_mod.node_sound_metal_defaults(),
is_ground_content = false,
can_dig = can_dig,
on_timer = on_timer,

View File

@ -29,5 +29,7 @@ dofile(default_path.."/constructor.lua")
dofile(default_path.."/deconstructor.lua")
dofile(default_path.."/energy_collector.lua")
dofile(default_path.."/orb.lua")
dofile(default_path.."/craftitems.lua")
dofile(default_path.."/dark_and_red_tools.lua")
dofile(default_path.."/philosophers_stone.lua")
dofile(default_path.."/energy.lua")

View File

@ -1,6 +1,6 @@
local function show_enchanting(player)
local player_meta = player:get_meta()
player_meta:set_int("mcl_enchanting:num_bookshelves", 15)
player_meta:set_int("mcl_enchanting:num_bookshelves", 10)
player_meta:set_string("mcl_enchanting:table_name", "Enchanting Table")
mcl_enchanting.show_enchanting_formspec(player)
end
@ -666,4 +666,96 @@ minetest.register_craft({
"mcl_core:lapis",
},
replacements = {{"exchangeclone:philosophers_stone", "exchangeclone:philosophers_stone"}}
})
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"}}
})
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"}}
})
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"}}
})

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB