This commit is contained in:
ThePython 2023-06-23 14:02:22 -07:00
parent b5186569d1
commit e3cfa9abe5
13 changed files with 331 additions and 165 deletions

View File

@ -1,6 +1,8 @@
# ExchangeClone
Allows players to turn nodes into energy (stored in orbs), and energy from orbs into nodes. Supports all items in Minetest Game and MineClone 2!
Includes other things from Equivalent Exchange (the MineCraft mod)
[GitHub repo](https://github.com/thepython10110/exchangeclone)
[Forum topic](https://forum.minetest.net/viewtopic.php?f=9&t=29473)
@ -40,7 +42,8 @@ I don't actually own MineCraft, meaning I don't know exactly how the original mo
## Known issues:
* When items are inserted into the Energy Collector, Deconstructor, or Constructor with MineClone hoppers, it does not trigger the machines to start.
* When machines are exploded, they (and the items inside) do not drop.
* Dark/Red matter shears will sometimes be treated as normal shears.
* Dark/Red matter shears will sometimes be treated as normal shears when used by MineClone dispensers.
* Blocks destroyed by special abilities will not update surrounding blocks (so you may end up with floating gravel, flowers, torches, etc.)
If you have a suggestion or notice a bug, visit the [GitHub issues page](https://github.com/thepython10110/exchangeclone/issues).
@ -48,7 +51,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 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.
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

@ -1,5 +1,7 @@
local axe_break_cube = function(player, center, distance, strip)
exchangeclone.play_ability_sound(player)
if distance > 0 then
exchangeclone.play_ability_sound(player)
end
local player_pos = player:get_pos()
local player_energy = exchangeclone.get_player_energy(player)
local energy_cost = 0
@ -138,17 +140,17 @@ minetest.register_tool("exchangeclone:red_matter_axe", {
minetest.register_craft({
output = "exchangeclone:dark_matter_axe",
recipe = {
{"exchangeclone:dark_matter", "exchangeclone:dark_matter", ""},
{"exchangeclone:dark_matter", exchangeclone.diamond_itemstring, ""},
{"", exchangeclone.diamond_itemstring, ""}
{"exchangeclone:dark_matter", "exchangeclone:dark_matter"},
{"exchangeclone:dark_matter", exchangeclone.diamond_itemstring},
{"", exchangeclone.diamond_itemstring}
}
})
minetest.register_craft({
output = "exchangeclone:red_matter_axe",
recipe = {
{"exchangeclone:red_matter", "exchangeclone:red_matter", ""},
{"exchangeclone:red_matter", "exchangeclone:dark_matter_axe", ""},
{"", "exchangeclone:dark_matter", ""}
{"exchangeclone:red_matter", "exchangeclone:red_matter"},
{"exchangeclone:red_matter", "exchangeclone:dark_matter_axe"},
{"", "exchangeclone:dark_matter"}
}
})

View File

@ -49,14 +49,15 @@
Axes:
Can break all wood and leaves within a radius, costing 8 energy per block broken.
Shovels:
Can break all sand/gravel-like blocks within a radius, or all dirt-like blocks *on one level* within a radius, costing 8 energy per block broken
Can break all shovely blocks within a radius, costing 8 energy per block broken
Can create paths in a radius, costing 8 energy per block
Hoes:
Breaks dirt incredibly quickly (and unfortunately all other shovely blocks because I can't figure out how to avoid it)
Has a 3x3 mode for digging dirt (slightly slower)
Can till all dirt within a radius, costs 2 energy per block
Hammers:
Breaks pickaxey blocks in a 3x3 area
Can break all pickaxey blocks within a radius
Can break all pickaxey blocks within a radius, costing 8 energy per block broken
Shears:
More wool/mushrooms dropped when shearing, chance of cloning sheep/mooshrooms
Can shear all shearable plants/cobwebs within a radius, costing 8 energy per block broken.
@ -73,6 +74,9 @@
Gold cannot be crafted into diamonds using the PS; it can now be crafted into emeralds and emeralds into diamonds (MineClone).
The PS's enchanting table now is limited to 8-bookshelf enchantments to make it more balanced (MineClone).
Fixed terracotta values (MineClone)
Enchanted tools/armor are now worth the same amount as unenchanted tools/armor instead of twice as much (MineClone).
Enchanted tools/armor cannot be created by the Constructor (MineClone).
It is now impossible to get stacks of invalid sizes with the Constructor (>16 ender pearls or >1 pickaxe, for example)
Bugfixes:
Fixed freezing when attempting to deconstruct 0-energy items
The Constructor, Deconstructor, and Energy Collector are now not unbreakable in MineClone (I really should test in survival).

View File

@ -70,7 +70,15 @@ local function on_timer(pos, elapsed)
-- make sure the stack at dst is same as the src
if not inv:is_empty("dst") then
if not(src_stack:get_name() == dst_stack:get_name()) then
break
if exchangeclone.mineclone then
if not(string.sub(src_stack:get_name(), -10, -1) == "_enchanted"
and string.sub(src_stack:get_name(), 1, -11) == dst_stack:get_name()
and src_stack:get_name() ~= "mcl_core:apple_gold_enchanted") then
break
end
else
break
end
end
end
-- make sure orb has enough charge
@ -86,9 +94,14 @@ local function on_timer(pos, elapsed)
-- "convert" charge into a node at dst
if dst_stack:is_empty() then
-- create a new stack
dst_stack = ItemStack(src_stack:get_name())
elseif dst_stack:get_count() >= 64 then
-- the max item count is limited to 64
if exchangeclone.mineclone
and string.sub(src_stack:get_name(), -10, -1) == "_enchanted"
and src_stack:get_name() ~= "mcl_core:apple_gold_enchanted" then
dst_stack = ItemStack(string.sub(src_stack:get_name(), 1, -11))
else
dst_stack = ItemStack(src_stack:get_name())
end
elseif not dst_stack:item_fits(src_stack:get_name()) then
break
else
-- add one node into stack

View File

@ -13,6 +13,27 @@ exchangeclone.mtg_energy_values = {
dark_matter_block = 139264,
red_matter = 466944,
red_matter_block = 466944,
dark_matter_sword = 286720,
red_matter_sword = 892928,
dark_matter_shears = 147456,
red_matter_shears = 614400,
dark_matter_hoe = 294912,
red_matter_hoe = 1368064,
dark_matter_hoe_3x3 = 294912,
red_matter_hoe_3x3 = 1368064,
dark_matter_shovel = 155648,
red_matter_shovel = 761856,
dark_matter_hammer = 303104,
red_matter_hammer = 1515520,
dark_matter_hammer_3x3 = 303104,
red_matter_hammer_3x3 = 1515520,
dark_matter_pickaxe = 434176,
red_matter_pickaxe = 1974272,
dark_matter_pickaxe_3x1 = 434176,
red_matter_pickaxe_3x1 = 1974272,
dark_matter_axe = 434176,
red_matter_axe = 1974272,
pesa = 64,
},
["beds"] = {
bed_bottom = 168,
@ -324,6 +345,27 @@ exchangeclone.mcl_energy_values = {
dark_matter_block = 139264,
red_matter = 466944,
red_matter_block = 466944,
dark_matter_sword = 286720,
red_matter_sword = 892928,
dark_matter_shears = 147456,
red_matter_shears = 614400,
dark_matter_hoe = 294912,
red_matter_hoe = 1368064,
dark_matter_hoe_3x3 = 294912,
red_matter_hoe_3x3 = 1368064,
dark_matter_shovel = 155648,
red_matter_shovel = 761856,
dark_matter_hammer = 303104,
red_matter_hammer = 1515520,
dark_matter_hammer_3x3 = 303104,
red_matter_hammer_3x3 = 1515520,
dark_matter_pickaxe = 434176,
red_matter_pickaxe = 1974272,
dark_matter_pickaxe_3x1 = 434176,
red_matter_pickaxe_3x1 = 1974272,
dark_matter_axe = 434176,
red_matter_axe = 1974272,
pesa = 64,
},
["mcl_core"] = {
stonebrickmossy = 9,
@ -363,7 +405,7 @@ exchangeclone.mcl_energy_values = {
diamond = 8192,
stone_with_diamond = 0,
apple_gold = 16512,
apple_gold_enchanted = 73728,
apple_gold_enchanted = 7378,
bone_block = 432,
bowl = 24,
coalblock = 1152,
@ -422,30 +464,30 @@ exchangeclone.mcl_energy_values = {
helmet_netherite = 114688,
leggings_netherite = 131072,
chestplate_netherite = 139264,
boots_leather_enchanted = 256*2,
helmet_leather_enchanted = 320*2,
leggings_leather_enchanted = 448*2,
chestplate_leather_enchanted = 512*2,
boots_chain_enchanted = 768*2,
helmet_chain_enchanted = 1024*2,
leggings_chain_enchanted = 1536*2,
chestplate_chain_enchanted = 1792*2,
boots_iron_enchanted = 1024*2,
helmet_iron_enchanted = 1280*2,
leggings_iron_enchanted = 1792*2,
chestplate_iron_enchanted = 2048*2,
boots_gold_enchanted = 8192*2,
helmet_gold_enchanted = 10240*2,
leggings_gold_enchanted = 14336*2,
chestplate_gold_enchanted = 16384*2,
boots_diamond_enchanted = 32768*2,
helmet_diamond_enchanted = 40960*2,
leggings_diamond_enchanted = 57344*2,
chestplate_diamond_enchanted = 65536*2,
boots_netherite_enchanted = 106496*2,
helmet_netherite_enchanted = 114688*2,
leggings_netherite_enchanted = 131072*2,
chestplate_netherite_enchanted = 139264*2,
boots_leather_enchanted = 256,
helmet_leather_enchanted = 320,
leggings_leather_enchanted = 448,
chestplate_leather_enchanted = 512,
boots_chain_enchanted = 768,
helmet_chain_enchanted = 1024,
leggings_chain_enchanted = 1536,
chestplate_chain_enchanted = 1792,
boots_iron_enchanted = 1024,
helmet_iron_enchanted = 1280,
leggings_iron_enchanted = 1792,
chestplate_iron_enchanted = 2048,
boots_gold_enchanted = 8192,
helmet_gold_enchanted = 10240,
leggings_gold_enchanted = 14336,
chestplate_gold_enchanted = 16384,
boots_diamond_enchanted = 32768,
helmet_diamond_enchanted = 40960,
leggings_diamond_enchanted = 57344,
chestplate_diamond_enchanted = 65536,
boots_netherite_enchanted = 106496,
helmet_netherite_enchanted = 114688,
leggings_netherite_enchanted = 131072,
chestplate_netherite_enchanted = 139264,
elytra = 73728*2,
},
["mcl_anvils"] = {
@ -497,7 +539,7 @@ exchangeclone.mcl_energy_values = {
},
["mcl_fishing"] = {
fishing_rod = 36,
fishing_rod_enchanted = 72,
fishing_rod_enchanted = 7,
clownfish_raw = 64,
fish_cooked = 40,
fish_raw = 40,
@ -583,12 +625,12 @@ exchangeclone.mcl_energy_values = {
hoe_gold = 4104,
hoe_diamond = 16380,
hoe_netherite = 90108,
hoe_stone_enchanted = 10*2,
hoe_wood_enchanted = 24*2,
hoe_iron_enchanted = 520*2,
hoe_gold_enchanted = 4104*2,
hoe_diamond_enchanted = 16380*2,
hoe_netherite_enchanted = 90108*2,
hoe_stone_enchanted = 10,
hoe_wood_enchanted = 24,
hoe_iron_enchanted = 520,
hoe_gold_enchanted = 4104,
hoe_diamond_enchanted = 16380,
hoe_netherite_enchanted = 90108,
wheat_seeds = 16,
beetroot_seeds = 16,
beetroot_item = 24,
@ -881,30 +923,30 @@ exchangeclone.mcl_energy_values = {
sword_netherite = 90120,
pick_netherite = 98312,
axe_netherite = 98312,
shovel_stone_enchanted = 9*2,
sword_stone_enchanted = 6*2,
pick_stone_enchanted = 11*2,
axe_stone_enchanted = 11*2,
shovel_wood_enchanted = 16*2,
sword_wood_enchanted = 20*2,
pick_wood_enchanted = 32*2,
axe_wood_enchanted = 32*2,
shovel_gold_enchanted = 2056*2,
sword_gold_enchanted = 5000*2,
pick_gold_enchanted = 6152*2,
axe_gold_enchanted = 6152*2,
shovel_iron_enchanted = 264*2,
sword_iron_enchanted = 516*2,
pick_iron_enchanted = 796*2,
axe_iron_enchanted = 796*2,
shovel_diamond_enchanted = 8200*2,
sword_diamond_enchanted = 16392*2,
pick_diamond_enchanted = 24584*2,
axe_diamond_enchanted = 24584*2,
shovel_netherite_enchanted = 81928*2,
sword_netherite_enchanted = 90120*2,
pick_netherite_enchanted = 98312*2,
axe_netherite_enchanted = 98312*2,
shovel_stone_enchanted = 9,
sword_stone_enchanted = 6,
pick_stone_enchanted = 11,
axe_stone_enchanted = 11,
shovel_wood_enchanted = 16,
sword_wood_enchanted = 20,
pick_wood_enchanted = 32,
axe_wood_enchanted = 32,
shovel_gold_enchanted = 2056,
sword_gold_enchanted = 5000,
pick_gold_enchanted = 6152,
axe_gold_enchanted = 6152,
shovel_iron_enchanted = 264,
sword_iron_enchanted = 516,
pick_iron_enchanted = 796,
axe_iron_enchanted = 796,
shovel_diamond_enchanted = 8200,
sword_diamond_enchanted = 16392,
pick_diamond_enchanted = 24584,
axe_diamond_enchanted = 24584,
shovel_netherite_enchanted = 81928,
sword_netherite_enchanted = 90120,
pick_netherite_enchanted = 98312,
axe_netherite_enchanted = 98312,
},
["mcl_potions"] = {
fermented_spider_eye = 192,
@ -1436,7 +1478,7 @@ local function set_item_energy(itemstring, energy_value)
end
end
else
energy_value = 0
energy_value = 0 -- if not a whitelisted mod, make it useless.
end
local description = def.description
local groups = table.copy(def.groups)

View File

@ -272,17 +272,17 @@ minetest.register_on_dignode(
minetest.register_craft({
output = "exchangeclone:dark_matter_hoe",
recipe = {
{"exchangeclone:dark_matter", "exchangeclone:dark_matter", ""},
{"", exchangeclone.diamond_itemstring, ""},
{"", exchangeclone.diamond_itemstring, ""}
{"exchangeclone:dark_matter", "exchangeclone:dark_matter"},
{"", exchangeclone.diamond_itemstring},
{"", exchangeclone.diamond_itemstring}
}
})
minetest.register_craft({
output = "exchangeclone:red_matter_hoe",
recipe = {
{"exchangeclone:red_matter", "exchangeclone:red_matter", ""},
{"", "group:dark_matter_hoe", ""},
{"", "exchangeclone:dark_matter", ""}
{"exchangeclone:red_matter", "exchangeclone:red_matter"},
{"", "group:dark_matter_hoe"},
{"", "exchangeclone:dark_matter"}
}
})

View File

@ -15,7 +15,6 @@ dofile(default_path.."/deconstructor.lua")
dofile(default_path.."/energy_collector.lua")
dofile(default_path.."/orb.lua")
dofile(default_path.."/craftitems.lua")
dofile(default_path.."/tools.lua")
if exchangeclone.mineclone then
dofile(default_path.."/shears.lua")
end
@ -24,6 +23,7 @@ dofile(default_path.."/axes.lua")
dofile(default_path.."/hoes.lua")
dofile(default_path.."/pickaxes.lua")
dofile(default_path.."/hammers.lua")
dofile(default_path.."/shovels.lua")
dofile(default_path.."/philosophers_stone.lua")
dofile(default_path.."/pesa.lua")
dofile(default_path.."/energy.lua")

View File

@ -1,6 +1,6 @@
name = exchangeclone
title = ExchangeClone
description = Exchange nodes into other nodes
description = Equivalent Exchange for Minetest Game and MineClone! Turn items into energy and energy into items, transmute blocks into other blocks, and craft Dark and Red Matter tools!
min_minetest_version = 5.5
optional_depends = mcl_core, default, moreswords, mcl_stairs, pipeworks, meat_blocks, ghost_blocks, sticky_things, fake_liquids, sound_machine, stairs, mcl_dispensers, farming
optional_depends = mcl_core, default, moreswords, mcl_stairs, meat_blocks, ghost_blocks, sticky_things, fake_liquids, sound_machine, stairs, mcl_dispensers, farming
author = ThePython10110

View File

@ -252,7 +252,7 @@ local function on_right_click(itemstack, player, pointed_thing)
end
end
local tt_help = "(Shift-)click: change range, (shift-)right-click: transmute blocks."
local tt_help = "(Shift)-right-click: transmute blocks. (Shift)-Aux1-right-click: Change range"
local item1 = "mese crystals"
if exchangeclone.mineclone then

View File

@ -1,6 +1,6 @@
local players_digging = {}
local function mine_vein(player, start_pos, node_name, pos)
local function mine_vein(player, player_energy, start_pos, node_name, pos)
-- Not very efficient, but it SHOULD work.
if not player then return 0 end
if not start_pos then return 0 end
@ -9,12 +9,13 @@ local function mine_vein(player, start_pos, node_name, pos)
if not node_name then node_name = node.name end
local distance = vector.distance(pos, start_pos)
if distance > 10 then return 0 end
if player_energy < 8 then return 0 end
if node_name == node.name then
local energy_cost = 0
local energy_cost = 8
exchangeclone.drop_items_on_player(pos, minetest.get_node_drops(node.name, "exchangeclone:red_matter_pickaxe"), player)
minetest.set_node(pos, {name = "air"})
for x = pos.x-1,pos.x+1 do for y = pos.y-1,pos.y+1 do for z = pos.z-1,pos.z+1 do
local cost = mine_vein(player, start_pos, node_name, {x=x,y=y,z=z})
local cost = mine_vein(player, player_energy, start_pos, node_name, {x=x,y=y,z=z})
if cost and cost > 0 then
energy_cost = energy_cost + cost
end
@ -24,6 +25,13 @@ local function mine_vein(player, start_pos, node_name, pos)
return 0
end
local torch_itemstring = "default:torch"
if exchangeclone.mineclone then
torch_itemstring = "mcl_torches:torch"
end
local torch_on_place = minetest.registered_items[torch_itemstring].on_place
local function pickaxe_on_use(itemstack, player, pointed_thing)
local click_test = exchangeclone.check_on_rightclick(itemstack, player, pointed_thing)
if click_test ~= false then
@ -53,14 +61,21 @@ local function pickaxe_on_use(itemstack, player, pointed_thing)
return itemstack
end
if pointed_thing.type == "node"
and (minetest.get_item_group(minetest.get_node(pointed_thing.under).name, "exchangeclone_ore") > 0) then
local player_energy = exchangeclone.get_player_energy(player)
players_digging[player:get_player_name()] = true
local energy_cost = mine_vein(player, pointed_thing.under)
players_digging[player:get_player_name()] = nil
if energy_cost then
exchangeclone.set_player_energy(player, player_energy - energy_cost)
if pointed_thing.type == "node" then
if (minetest.get_item_group(minetest.get_node(pointed_thing.under).name, "exchangeclone_ore") > 0) then
local player_energy = exchangeclone.get_player_energy(player)
exchangeclone.play_ability_sound(player)
players_digging[player:get_player_name()] = true
local energy_cost = mine_vein(player, player_energy, pointed_thing.under)
players_digging[player:get_player_name()] = nil
if energy_cost then
exchangeclone.set_player_energy(player, player_energy - energy_cost)
end
elseif itemstack:get_name():find("red") then
local player_energy = exchangeclone.get_player_energy(player)
torch_on_place(ItemStack(torch_itemstring), player, pointed_thing)
exchangeclone.set_player_energy(player, player_energy - exchangeclone.get_item_energy(torch_itemstring))
-- If the torch could not be placed, it still costs energy... not sure how to fix that
end
end
end

153
shovels.lua Normal file
View File

@ -0,0 +1,153 @@
local shovel_cube = function(player, center, distance, path)
if distance > 0 then
exchangeclone.play_ability_sound(player)
end
local player_pos = player:get_pos()
local player_energy = exchangeclone.get_player_energy(player)
local energy_cost = 0
local pos = center
pos.x = exchangeclone.round(pos.x)
pos.y = math.floor(pos.y) --make sure y is node BELOW player's feet
pos.z = exchangeclone.round(pos.z)
for x = pos.x-distance, pos.x+distance do
if energy_cost + 8 > player_energy then
break
end
for y = pos.y-distance, pos.y+distance do
if energy_cost + 8 > player_energy then
break
end
for z = pos.z-distance, pos.z+distance do
if energy_cost + 8 > player_energy then
break
end
local new_pos = {x=x,y=y,z=z}
local node = minetest.get_node(new_pos) or {name="air"}
if ((minetest.get_item_group(node.name, "crumbly") > 0) or (minetest.get_item_group(node.name, "shovely") > 0)) then
if minetest.is_protected(new_pos, player:get_player_name()) then
minetest.record_protection_violation(new_pos, player:get_player_name())
else
if distance > 0 then
energy_cost = energy_cost + 8
end
if path then
if (minetest.get_item_group(node.name, "path_creation_possible") == 1) then
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = new_pos}, true)
minetest.swap_node(new_pos, {name="mcl_core:grass_path"})
end
else
local drops = minetest.get_node_drops(node.name, "exchangeclone:red_matter_shovel")
exchangeclone.drop_items_on_player(new_pos, drops, player)
minetest.set_node(new_pos, {name = "air"})
end
end
end
end
end
end
if distance > 0 then
exchangeclone.set_player_energy(player, player_energy - energy_cost)
end
end
local function shovel_on_place(itemstack, player, pointed_thing)
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
if itemstack:get_name():find("dark") then
return exchangeclone.range_update(itemstack, player, 3)
else
return exchangeclone.range_update(itemstack, player, 4)
end
end
local range = itemstack:get_meta():get_int("exchangeclone_item_range")
local center = player:get_pos()
if pointed_thing.type == "node" then
center = pointed_thing.under
end
if player:get_player_control().sneak then
shovel_cube(player, center, range, false)
else
shovel_cube(player, center, range, true)
end
return itemstack
end
minetest.register_tool("exchangeclone:dark_matter_shovel", {
description = "Dark Matter Shovel",
wield_image = "exchangeclone_dark_matter_shovel.png",
inventory_image = "exchangeclone_dark_matter_shovel.png",
groups = { tool=1, shovel=1, dig_speed_class=7, enchantability=0 },
wield_scale = exchangeclone.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 = shovel_on_place,
on_secondary_use = shovel_on_place,
_mcl_toollike_wield = true,
_mcl_diggroups = {
shovely = { speed = 16, level = 7, uses = 0 }
},
})
minetest.register_tool("exchangeclone:red_matter_shovel", {
description = "Red Matter Shovel",
wield_image = "exchangeclone_red_matter_shovel.png",
inventory_image = "exchangeclone_red_matter_shovel.png",
groups = { tool=1, shovel=1, dig_speed_class=8, enchantability=0 },
wield_scale = exchangeclone.wield_scale,
tool_capabilities = {
-- 1/1.2
full_punch_interval = 0.5,
max_drop_level=5,
damage_groups = {fleshy=9},
punch_attack_uses = 0,
groupcaps={
crumbly = {times={[1]=0.6, [2]=0.25, [3]=0.1}, uses=0, maxlevel=5},
},
},
sound = { breaks = "default_tool_breaks" },
on_place = shovel_on_place,
on_secondary_use = shovel_on_place,
_mcl_toollike_wield = true,
_mcl_diggroups = {
shovely = { speed = 19, level = 8, uses = 0 }
},
})
--Crafting recipes
minetest.register_craft({
output = "exchangeclone:dark_matter_shovel",
recipe = {
{"exchangeclone:dark_matter"},
{exchangeclone.diamond_itemstring},
{exchangeclone.diamond_itemstring}
}
})
minetest.register_craft({
output = "exchangeclone:red_matter_shovel",
recipe = {
{"exchangeclone:red_matter"},
{"exchangeclone:dark_matter_shovel"},
{"exchangeclone:dark_matter"}
}
})

View File

@ -220,17 +220,17 @@ minetest.register_tool("exchangeclone:red_matter_sword", {
minetest.register_craft({
output = "exchangeclone:dark_matter_sword",
recipe = {
{"", "exchangeclone:dark_matter", ""},
{"", "exchangeclone:dark_matter", ""},
{"", exchangeclone.diamond_itemstring, ""}
{"exchangeclone:dark_matter"},
{"exchangeclone:dark_matter"},
{exchangeclone.diamond_itemstring}
}
})
minetest.register_craft({
output = "exchangeclone:red_matter_sword",
recipe = {
{"", "exchangeclone:red_matter", ""},
{"", "exchangeclone:red_matter", ""},
{"", "exchangeclone:dark_matter_sword", ""},
{"exchangeclone:red_matter"},
{"exchangeclone:red_matter"},
{"exchangeclone:dark_matter_sword"},
}
})

View File

@ -1,66 +0,0 @@
local shovel_on_place
if exchangeclone.mineclone then
shovel_on_place = function(itemstack, player, pointed_thing)
-- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node(pointed_thing.under)
if player and not player: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, player, 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, player:get_player_name()) then
minetest.record_protection_violation(pointed_thing.under, player:get_player_name())
return itemstack
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
end
minetest.register_tool("exchangeclone:dark_matter_shovel", {
description = "Dark Matter Shovel",
wield_image = "exchangeclone_dark_matter_shovel.png",
inventory_image = "exchangeclone_dark_matter_shovel.png",
groups = { tool=1, shovel=1, dig_speed_class=7, enchantability=0 },
wield_scale = exchangeclone.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 = shovel_on_place,
_mcl_toollike_wield = true,
_mcl_diggroups = {
shovely = { speed = 16, level = 7, uses = 0 }
},
})
--Crafting recipes
minetest.register_craft({
output = "exchangeclone:dark_matter_shovel",
recipe = {
{"", "exchangeclone:dark_matter", ""},
{"", exchangeclone.diamond_itemstring, ""},
{"", exchangeclone.diamond_itemstring, ""}
}
})