Most tools updated, updated hardness
This commit is contained in:
parent
4da9118ce1
commit
c639113d6d
|
@ -38,8 +38,8 @@ local pipeworks_connect = exchangeclone.pipeworks and "^pipeworks_tube_connectio
|
|||
minetest.register_node("exchangeclone:alchemical_chest", {
|
||||
description = S("Alchemical Chest"),
|
||||
groups = {container = 2, alchemical_chest = 1, cracky = 2, pickaxey = 2, tubedevice = 1, tubedevice_receiver = 1},
|
||||
_mcl_hardness = 3,
|
||||
_mcl_blast_resistance = 6,
|
||||
_mcl_hardness = 10,
|
||||
_mcl_blast_resistance = 15,
|
||||
paramtype2 = "4dir",
|
||||
tiles = {
|
||||
"exchangeclone_alchemical_chest_top.png"..pipeworks_connect,
|
||||
|
@ -158,8 +158,8 @@ for color, color_data in pairs(exchangeclone.colors) do
|
|||
|
||||
minetest.register_node(advanced_itemstring, {
|
||||
description = S("@1 Advanced Alchemical Chest", color_data.name).."\n"..S("Shift+right-click with an alchemical bag to change the color."),
|
||||
_mcl_hardness = 3,
|
||||
_mcl_blast_resistance = 6,
|
||||
_mcl_hardness = 10,
|
||||
_mcl_blast_resistance = 15,
|
||||
groups = {container = 1, advanced_alchemical_chest = 1, cracky = 2, pickaxey = 2},
|
||||
paramtype2 = "4dir",
|
||||
tiles = {
|
||||
|
|
|
@ -1,45 +1,54 @@
|
|||
local S = minetest.get_translator()
|
||||
|
||||
exchangeclone.axe_action = {
|
||||
start_action = function(player, center, range, itemstack)
|
||||
if exchangeclone.check_cooldown(player, "axe") then return end
|
||||
local data = {}
|
||||
if exchangeclone.mcl then
|
||||
data.strip = not player:get_player_control().sneak
|
||||
function exchangeclone.axe_action(itemstack, player, center)
|
||||
if exchangeclone.check_cooldown(player, "axe") then return end
|
||||
local strip
|
||||
local start_node = minetest.get_node(center)
|
||||
local charge = math.max(itemstack:get_meta():get_int("exchangeclone_tool_charge"), 1)
|
||||
local start_def = minetest.registered_items[start_node.name]
|
||||
local stripped_variant = start_def._mcl_stripped_variant
|
||||
if exchangeclone.mcl then
|
||||
if charge == 1 then
|
||||
strip = true
|
||||
else
|
||||
strip = not player:get_player_control().sneak
|
||||
end
|
||||
if range > 0 or not data.strip then
|
||||
exchangeclone.play_ability_sound(player)
|
||||
end
|
||||
data.itemstack = itemstack
|
||||
data.remove_positions = {}
|
||||
return data
|
||||
end,
|
||||
action = function(player, pos, node, data)
|
||||
local node_def = minetest.registered_items[node.name]
|
||||
if (node_def.groups.tree or node_def.groups.leaves) then
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
minetest.record_protection_violation(pos, player:get_player_name())
|
||||
else
|
||||
if data.strip then
|
||||
if node_def._mcl_stripped_variant ~= nil then
|
||||
minetest.swap_node(pos, {name=node_def._mcl_stripped_variant, param2=node.param2})
|
||||
end
|
||||
else
|
||||
local drops = minetest.get_node_drops(node.name, data.itemstack:get_name())
|
||||
exchangeclone.drop_items_on_player(pos, drops, player)
|
||||
table.insert(data.remove_positions, pos)
|
||||
if strip and not stripped_variant then return end
|
||||
end
|
||||
minetest.log("strip = "..dump(strip))
|
||||
local nodes
|
||||
local groups_to_search = strip and {start_node.name} or {"group:tree", "group:leaves"}
|
||||
local range_type = strip and "basic_radius" or "large_radius"
|
||||
if charge > 1 then
|
||||
local vector1, vector2 = exchangeclone.process_range(player, range_type, charge)
|
||||
local pos1, pos2 = vector.add(center, vector1), vector.add(center, vector2)
|
||||
exchangeclone.play_ability_sound(player)
|
||||
nodes = minetest.find_nodes_in_area(pos1, pos2, groups_to_search)
|
||||
else
|
||||
nodes = {center}
|
||||
end
|
||||
for _, pos in pairs(nodes) do
|
||||
local node = minetest.get_node(pos)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
minetest.record_protection_violation(pos, player:get_player_name())
|
||||
else
|
||||
if strip then
|
||||
if node.param2 == start_node.param2 then
|
||||
minetest.swap_node(pos, {name=stripped_variant, param2=node.param2})
|
||||
end
|
||||
else
|
||||
local drops = minetest.get_node_drops(node.name, itemstack:get_name())
|
||||
exchangeclone.drop_items_on_player(pos, drops, player)
|
||||
end
|
||||
end
|
||||
return data
|
||||
end,
|
||||
end_action = function(player, center, range, data)
|
||||
exchangeclone.remove_nodes(data.remove_positions)
|
||||
if range > 0 or not data.strip then
|
||||
exchangeclone.start_cooldown(player, "axe", range/6)
|
||||
end
|
||||
end
|
||||
}
|
||||
if not strip then
|
||||
exchangeclone.remove_nodes(nodes)
|
||||
end
|
||||
if charge > 1 or not strip then
|
||||
exchangeclone.start_cooldown(player, "axe", charge/3)
|
||||
end
|
||||
end
|
||||
|
||||
local function axe_on_place(itemstack, player, pointed_thing)
|
||||
local click_test = exchangeclone.check_on_rightclick(itemstack, player, pointed_thing)
|
||||
|
@ -48,18 +57,15 @@ local function axe_on_place(itemstack, player, pointed_thing)
|
|||
end
|
||||
|
||||
if player:get_player_control().aux1 then
|
||||
if itemstack:get_name():find("dark") then
|
||||
return exchangeclone.charge_update(itemstack, player, 3)
|
||||
else
|
||||
return exchangeclone.charge_update(itemstack, player, 4)
|
||||
return exchangeclone.charge_update(itemstack, player)
|
||||
end
|
||||
|
||||
if pointed_thing.type == "node" then
|
||||
if minetest.get_item_group(minetest.get_node(pointed_thing.under), "tree" > 0) then
|
||||
exchangeclone.axe_action(itemstack, player, pointed_thing.under)
|
||||
end
|
||||
end
|
||||
|
||||
local range = itemstack:get_meta():get_int("exchangeclone_tool_charge")
|
||||
|
||||
local center = player:get_pos()
|
||||
if pointed_thing.type == "node" then center = pointed_thing.under end
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.axe_action, itemstack)
|
||||
return itemstack
|
||||
end
|
||||
|
||||
|
@ -71,9 +77,9 @@ minetest.register_tool("exchangeclone:dark_matter_axe", {
|
|||
wield_scale = exchangeclone.wield_scale,
|
||||
tool_capabilities = {
|
||||
-- 1/1.2
|
||||
full_punch_interval = 0.5,
|
||||
full_punch_interval = 1,
|
||||
max_drop_level=6,
|
||||
damage_groups = {fleshy=16},
|
||||
damage_groups = {fleshy=9},
|
||||
punch_attack_uses = 0,
|
||||
groupcaps={
|
||||
choppy = {times={[1]=1.5, [2]=0.75, [3]=0.38}, uses=0, maxlevel=4},
|
||||
|
@ -84,10 +90,12 @@ minetest.register_tool("exchangeclone:dark_matter_axe", {
|
|||
on_secondary_use = axe_on_place,
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
axey = { speed = 16, level = 5, uses = 0 }
|
||||
axey = { speed = 14, level = 5, uses = 0 }
|
||||
},
|
||||
})
|
||||
|
||||
exchangeclone.set_charge_type("exchangeclone:dark_matter_axe", "dark_matter")
|
||||
|
||||
minetest.register_tool("exchangeclone:red_matter_axe", {
|
||||
description = S("Red Matter Axe"),
|
||||
wield_image = "exchangeclone_red_matter_axe.png",
|
||||
|
@ -96,9 +104,9 @@ minetest.register_tool("exchangeclone:red_matter_axe", {
|
|||
wield_scale = exchangeclone.wield_scale,
|
||||
tool_capabilities = {
|
||||
-- 1/1.2
|
||||
full_punch_interval = 0.4,
|
||||
full_punch_interval = 1,
|
||||
max_drop_level=7,
|
||||
damage_groups = {fleshy=19},
|
||||
damage_groups = {fleshy=10},
|
||||
punch_attack_uses = 0,
|
||||
groupcaps={
|
||||
choppy = {times={[1]=1, [2]=0.5, [3]=0.25}, uses=0, maxlevel=5},
|
||||
|
@ -109,10 +117,12 @@ minetest.register_tool("exchangeclone:red_matter_axe", {
|
|||
on_secondary_use = axe_on_place,
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
axey = { speed = 20, level = 6, uses = 0 }
|
||||
axey = { speed = 16, level = 6, uses = 0 }
|
||||
},
|
||||
})
|
||||
|
||||
exchangeclone.set_charge_type("exchangeclone:red_matter_axe", "red_matter")
|
||||
|
||||
minetest.register_craft({
|
||||
output = "exchangeclone:dark_matter_axe",
|
||||
recipe = {
|
||||
|
|
|
@ -68,7 +68,7 @@ minetest.register_node("exchangeclone:dark_matter_block", {
|
|||
sounds = exchangeclone.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,
|
||||
_mcl_hardness = 12,
|
||||
})
|
||||
|
||||
minetest.register_node("exchangeclone:red_matter_block", {
|
||||
|
@ -79,7 +79,7 @@ minetest.register_node("exchangeclone:red_matter_block", {
|
|||
sounds = exchangeclone.sound_mod.node_sound_stone_defaults(),
|
||||
groups = {pickaxey=6, material_stone=1, cracky = 3, level = get_level(5)},
|
||||
_mcl_blast_resistance = 1500,
|
||||
_mcl_hardness = 100,
|
||||
_mcl_hardness = 37,
|
||||
})
|
||||
if exchangeclone.mcl then
|
||||
minetest.register_craft({
|
||||
|
|
|
@ -3,7 +3,7 @@ local S = minetest.get_translator()
|
|||
function exchangeclone.hammer_action(itemstack, player, center)
|
||||
if not (itemstack and player and center) then return end
|
||||
if exchangeclone.check_cooldown(player, "hammer") then return end
|
||||
local charge = itemstack:get_meta():get_int("exchangeclone_tool_charge") or 0
|
||||
local charge = math.max(itemstack:get_meta():get_int("exchangeclone_tool_charge"), 1)
|
||||
local vector1, vector2 = exchangeclone.process_range(player, "hammer", charge)
|
||||
if not (vector1 and vector2) then return end
|
||||
|
||||
|
@ -46,12 +46,9 @@ local function hammer_on_place(itemstack, player, pointed_thing)
|
|||
return itemstack
|
||||
end
|
||||
|
||||
local range = itemstack:get_meta():get_int("exchangeclone_tool_charge")
|
||||
local center = player:get_pos()
|
||||
if pointed_thing.type == "node" then
|
||||
center = pointed_thing.under
|
||||
exchangeclone.hammer_action(itemstack, player, pointed_thing.under)
|
||||
end
|
||||
exchangeclone.hammer_action(itemstack, player, center)
|
||||
end
|
||||
|
||||
minetest.register_tool("exchangeclone:dark_matter_hammer", {
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
local S = minetest.get_translator()
|
||||
|
||||
local function create_soil(itemstack, player, pointed_thing)
|
||||
if not pointed_thing.under then return end
|
||||
if not pointed_thing.under.x then return end
|
||||
local pos = pointed_thing.under
|
||||
local name = minetest.get_node(pos).name
|
||||
local above_name = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}).name
|
||||
local above_name = minetest.get_node(vector.offset(pos,0,1,0)).name
|
||||
|
||||
if minetest.is_protected(pointed_thing.under, player:get_player_name()) then
|
||||
minetest.record_protection_violation(pointed_thing.under, player:get_player_name())
|
||||
|
@ -39,27 +37,33 @@ else
|
|||
end
|
||||
end
|
||||
|
||||
exchangeclone.hoe_action = {
|
||||
start_action = function(player, center, range, itemstack)
|
||||
if exchangeclone.check_cooldown(player, "hoe") then return end
|
||||
local data = {}
|
||||
if range > 0 then
|
||||
exchangeclone.play_ability_sound(player)
|
||||
end
|
||||
data.itemstack = itemstack
|
||||
return data
|
||||
end,
|
||||
action = function(player, pos, node, data)
|
||||
local new_pointed_thing = {type = "node", under = pos, above = {x=pos.x,y=pos.y+1,z=pos.z}}
|
||||
hoe_function(data.itemstack, player, new_pointed_thing)
|
||||
return data
|
||||
end,
|
||||
end_action = function(player, center, range, data)
|
||||
if range > 0 then
|
||||
exchangeclone.start_cooldown(player, "hoe", range/4)
|
||||
function exchangeclone.hoe_action(itemstack, player, center)
|
||||
if not (itemstack and player and center) then return end
|
||||
if exchangeclone.check_cooldown(player, "hoe") then return end
|
||||
local charge = math.max(itemstack:get_meta():get_int("exchangeclone_tool_charge"), 1)
|
||||
local nodes
|
||||
if charge > 1 then
|
||||
local vector1, vector2 = exchangeclone.process_range(player, "flat", charge)
|
||||
if not (vector1 and vector2) then return end
|
||||
local pos1, pos2 = vector.add(center, vector1), vector.add(center, vector2)
|
||||
nodes = minetest.find_nodes_in_area(pos1, pos2, {"group:cultivatable"})
|
||||
exchangeclone.play_ability_sound(player)
|
||||
else
|
||||
nodes = {center}
|
||||
end
|
||||
for _, pos in pairs(nodes) do
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
minetest.record_protection_violation(pos, player:get_player_name())
|
||||
else
|
||||
local new_pointed_thing = {type = "node", under = pos, above = vector.offset(pos,0,1,0)}
|
||||
hoe_function(itemstack, player, new_pointed_thing)
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
if charge > 0 then
|
||||
exchangeclone.start_cooldown(player, "hoe", charge/4)
|
||||
end
|
||||
end
|
||||
|
||||
local hoe_on_place = function(itemstack, player, pointed_thing)
|
||||
local click_test = exchangeclone.check_on_rightclick(itemstack, player, pointed_thing)
|
||||
|
@ -68,31 +72,30 @@ local hoe_on_place = function(itemstack, player, pointed_thing)
|
|||
end
|
||||
|
||||
if player:get_player_control().aux1 then
|
||||
if itemstack:get_name():find("dark") then
|
||||
return exchangeclone.charge_update(itemstack, player, 3)
|
||||
else
|
||||
return exchangeclone.charge_update(itemstack, player, 4)
|
||||
end
|
||||
return exchangeclone.charge_update(itemstack, player)
|
||||
end
|
||||
|
||||
if player:get_player_control().sneak then
|
||||
local current_name = itemstack:get_name()
|
||||
if string.sub(current_name, -4, -1) == "_3x3" then
|
||||
itemstack:set_name(string.sub(current_name, 1, -5))
|
||||
local meta = itemstack:get_meta()
|
||||
local current_mode = meta:get_string("exchangeclone_multidig_mode")
|
||||
if current_mode == "3x3" then
|
||||
meta:set_string("exchangeclone_multidig_mode", "1x1")
|
||||
minetest.chat_send_player(player:get_player_name(), S("Single node mode"))
|
||||
else
|
||||
itemstack:set_name(current_name.."_3x3")
|
||||
meta:set_string("exchangeclone_multidig_mode", "3x3")
|
||||
minetest.chat_send_player(player:get_player_name(), S("3x3 mode"))
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local range = itemstack:get_meta():get_int("exchangeclone_tool_charge")
|
||||
local center = player:get_pos()
|
||||
if pointed_thing.type == "node" then
|
||||
center = pointed_thing.under
|
||||
local node_name = minetest.get_node(pointed_thing.under).name
|
||||
local def = minetest.registered_nodes[node_name]
|
||||
if minetest.get_item_group(node_name, "cultivatable") > 0
|
||||
or (minetest.get_item_group(node_name, "soil") > 0 and
|
||||
(def.soil and def.soil.wet and def.soil.dry)) then
|
||||
exchangeclone.hoe_action(itemstack, player, pointed_thing.under)
|
||||
end
|
||||
end
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.hoe_action, itemstack)
|
||||
end
|
||||
|
||||
if exchangeclone.mcl then
|
||||
|
@ -109,7 +112,7 @@ for name, def in pairs(minetest.registered_nodes) do
|
|||
end
|
||||
end
|
||||
|
||||
local hoe_def = {
|
||||
minetest.register_tool("exchangeclone:dark_matter_hoe", {
|
||||
description = S("Dark Matter Hammer").."\n"..S("Single node mode"),
|
||||
wield_image = "exchangeclone_dark_matter_hoe.png",
|
||||
inventory_image = "exchangeclone_dark_matter_hoe.png",
|
||||
|
@ -119,57 +122,47 @@ local hoe_def = {
|
|||
groups = { tool=1, hoe=1, enchantability=0, dark_matter_hoe = 1, disable_repair = 1, fire_immune = 1, exchangeclone_upgradable = 1},
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 0.25,
|
||||
damage_groups = { fleshy = 7, },
|
||||
damage_groups = { fleshy = 1, },
|
||||
groupcaps={
|
||||
exchangeclone_dirt = {times={[1]=0.25, [2]=0.25, [3]=0.25}, uses=0, maxlevel=4},
|
||||
},
|
||||
},
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
exchangeclone_dirt = { speed = 12, level = 7, uses = 0 },
|
||||
hoey = { speed = 12, level = 7, uses = 0 }
|
||||
exchangeclone_dirt = { speed = 14, level = 7, uses = 0 },
|
||||
hoey = { speed = 14, level = 7, uses = 0 }
|
||||
},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_tool("exchangeclone:dark_matter_hoe", table.copy(hoe_def))
|
||||
exchangeclone.register_multidig_tool("exchangeclone:dark_matter_hoe", {"group:exchangeclone_dirt"})
|
||||
minetest.register_alias("exchangeclone:dark_matter_hoe_3x3", "exchangeclone:dark_matter_hoe")
|
||||
exchangeclone.set_charge_type("exchangeclone:dark_matter_hoe", "dark_matter")
|
||||
|
||||
local hoe_3x3_def = table.copy(hoe_def)
|
||||
hoe_3x3_def.description = S("Dark Matter Hammer").."\n"..S("3x3 mode")
|
||||
hoe_3x3_def.groups.not_in_creative_inventory = 1
|
||||
hoe_3x3_def.tool_capabilities.groupcaps.exchangeclone_dirt.times = {[1]=0.4, [2]=0.4, [3]=0.4}
|
||||
hoe_3x3_def._mcl_diggroups.exchangeclone_dirt = { speed = 8, level = 7, uses = 0 }
|
||||
|
||||
minetest.register_tool("exchangeclone:dark_matter_hoe_3x3", table.copy(hoe_3x3_def))
|
||||
|
||||
exchangeclone.register_alias("exchangeclone:dark_matter_hoe", "exchangeclone:dark_matter_hoe_3x3")
|
||||
|
||||
hoe_def.description = S("Red Matter Hammer").."\n"..S("Single node mode")
|
||||
hoe_def.wield_image = "exchangeclone_red_matter_hoe.png"
|
||||
hoe_def.inventory_image = "exchangeclone_red_matter_hoe.png"
|
||||
hoe_def.groups = { tool=1, hoe=1, enchantability=0, red_matter_hoe = 1, disable_repair = 1, fire_immune = 1, exchangeclone_upgradable = 1}
|
||||
hoe_def.tool_capabilities = {
|
||||
full_punch_interval = 0.25,
|
||||
damage_groups = { fleshy = 8, },
|
||||
groupcaps={
|
||||
exchangeclone_dirt = {times={[1]=0.15, [2]=0.15, [3]=0.15}, uses=0, maxlevel=4},
|
||||
minetest.register_tool("exchangeclone:red_matter_hoe", {
|
||||
description = S("Red Matter Hammer").."\n"..S("Single node mode"),
|
||||
wield_image = "exchangeclone_red_matter_hoe.png",
|
||||
inventory_image = "exchangeclone_red_matter_hoe.png",
|
||||
wield_scale = exchangeclone.wield_scale,
|
||||
on_place = hoe_on_place,
|
||||
on_secondary_use = hoe_on_place,
|
||||
groups = { tool=1, hoe=1, enchantability=0, red_matter_hoe = 1, disable_repair = 1, fire_immune = 1, exchangeclone_upgradable = 1},
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 0.25,
|
||||
damage_groups = { fleshy = 1, },
|
||||
groupcaps={
|
||||
exchangeclone_dirt = {times={[1]=0.25, [2]=0.25, [3]=0.25}, uses=0, maxlevel=4},
|
||||
},
|
||||
},
|
||||
}
|
||||
hoe_def._mcl_diggroups = {
|
||||
exchangeclone_dirt = { speed = 13, level = 8, uses = 0 },
|
||||
hoey = { speed = 13, level = 8, uses = 0 }
|
||||
}
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
exchangeclone_dirt = { speed = 16, level = 8, uses = 0 },
|
||||
hoey = { speed = 16, level = 8, uses = 0 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_tool("exchangeclone:red_matter_hoe", table.copy(hoe_def))
|
||||
|
||||
hoe_3x3_def = table.copy(hoe_def)
|
||||
hoe_3x3_def.description = S("Red Matter Hammer").."\n"..S("3x3 mode")
|
||||
hoe_3x3_def.groups.not_in_creative_inventory = 1
|
||||
hoe_3x3_def.tool_capabilities.groupcaps.exchangeclone_dirt.times = {[1]=0.25, [2]=0.25, [3]=0.25}
|
||||
hoe_3x3_def._mcl_diggroups.exchangeclone_dirt = { speed = 9, level = 8, uses = 0 }
|
||||
|
||||
minetest.register_tool("exchangeclone:red_matter_hoe_3x3", table.copy(hoe_3x3_def))
|
||||
|
||||
exchangeclone.register_alias("exchangeclone:red_matter_hoe", "exchangeclone:red_matter_hoe_3x3")
|
||||
exchangeclone.register_multidig_tool("exchangeclone:red_matter_hoe", {"group:exchangeclone_dirt"})
|
||||
minetest.register_alias("exchangeclone:red_matter_hoe_3x3", "exchangeclone:red_matter_hoe")
|
||||
exchangeclone.set_charge_type("exchangeclone:red_matter_hoe", "red_matter")
|
||||
|
||||
minetest.register_craft({
|
||||
output = "exchangeclone:dark_matter_hoe",
|
||||
|
|
|
@ -77,7 +77,7 @@ local function pickaxe_on_use(itemstack, player, pointed_thing)
|
|||
exchangeclone.start_cooldown(player, "pickaxe", 0.5)
|
||||
elseif itemstack:get_name():find("red_") then
|
||||
local player_energy = exchangeclone.get_player_energy(player)
|
||||
minetest.log(dump(torch_on_place(ItemStack(torch_itemstring), player, pointed_thing)))
|
||||
minetest.log(dump(torch_on_place(ItemStack(torch_itemstring), player, pointed_thing):get_name()))
|
||||
exchangeclone.set_player_energy(player, player_energy - math.max(exchangeclone.get_item_energy(torch_itemstring) or 0, 8))
|
||||
-- If the torch could not be placed, it still costs energy... not sure how to fix that
|
||||
end
|
||||
|
|
|
@ -86,13 +86,13 @@ local katar_def = {
|
|||
sound = { breaks = "default_tool_breaks" },
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
exchangeclone_dirt = { speed = 10, level = 8, uses = 0 },
|
||||
shearsy = { speed = 10, level = 3, uses = 0 },
|
||||
shearsy_wool = { speed = 16, level = 3, uses = 0 },
|
||||
shearsy_cobweb = { speed = 36, level = 3, uses = 0 },
|
||||
hoey = { speed = 9, level = 8, uses = 0 },
|
||||
swordy = { speed = 20, level = 8, uses = 0 },
|
||||
axey = { speed = 20, level = 8, uses = 0 }
|
||||
exchangeclone_dirt = { speed = 64, level = 8, uses = 0 },
|
||||
shearsy = { speed = 64, level = 3, uses = 0 },
|
||||
shearsy_wool = { speed = 64, level = 3, uses = 0 },
|
||||
shearsy_cobweb = { speed = 64, level = 3, uses = 0 },
|
||||
hoey = { speed = 64, level = 8, uses = 0 },
|
||||
swordy = { speed = 64, level = 8, uses = 0 },
|
||||
axey = { speed = 64, level = 8, uses = 0 }
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -248,9 +248,9 @@ local morningstar_def = {
|
|||
sound = { breaks = "default_tool_breaks" },
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
pickaxey = {speed = 80, level = 7, uses = 0},
|
||||
shovely = {speed = 22, level = 7, uses = 0},
|
||||
axey = { speed = 22, level = 7, uses = 0 }
|
||||
pickaxey = {speed = 64, level = 7, uses = 0},
|
||||
shovely = {speed = 64, level = 7, uses = 0},
|
||||
axey = { speed = 64, level = 7, uses = 0 },
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
@ -1,40 +1,35 @@
|
|||
-- TODO: Before releasing, check the shears. Just do it.
|
||||
-- I know you don't want to... but test EVERY SINGLE FUNCTION.
|
||||
-- MineClonia probably broke them.
|
||||
function exchangeclone.shear_action(itemstack, player, center)
|
||||
if not (itemstack and player and center) then return end
|
||||
if exchangeclone.check_cooldown(player, "shears") then return end
|
||||
local start_node = minetest.get_node(center)
|
||||
local leaves = minetest.get_item_group(start_node.name, "leaves") > 0
|
||||
local charge = math.max(itemstack:get_meta():get_int("exchangeclone_tool_charge"), 1)
|
||||
local vector1, vector2 = exchangeclone.process_range(player, leaves and "large_radius" or "basic_radius", charge)
|
||||
if not (vector1 and vector2) then return end
|
||||
|
||||
exchangeclone.shear_action = {
|
||||
start_action = function(player, center, range, itemstack)
|
||||
if exchangeclone.check_cooldown(player, "shears") then return end
|
||||
local data = {}
|
||||
exchangeclone.play_ability_sound(player)
|
||||
data.itemstack = itemstack
|
||||
data.remove_positions = {}
|
||||
return data
|
||||
end,
|
||||
action = function(player, pos, node, data)
|
||||
local node_def = minetest.registered_items[ItemStack(node.name):get_name()]
|
||||
if not node_def then return data end
|
||||
if (node_def.groups.shearsy or node_def.groups.shearsy_cobweb) and node.name ~= "mcl_flowers:double_grass_top" then
|
||||
local pos1, pos2 = vector.add(center, vector1), vector.add(center, vector2)
|
||||
exchangeclone.play_ability_sound(player)
|
||||
local grouped = leaves and {"group:leaves"} or {"group:shearsy", "group:shearsy_cobweb"}
|
||||
local nodes = minetest.find_nodes_in_area(pos1, pos2, grouped)
|
||||
for i, pos in pairs(nodes) do
|
||||
local node = minetest.get_node(pos)
|
||||
if leaves or (not leaves and node.name ~= "mcl_flowers:double_grass_top") then
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
minetest.record_protection_violation(pos, player:get_player_name())
|
||||
else
|
||||
local drops = minetest.get_node_drops(node.name, data.itemstack:get_name())
|
||||
local drops = minetest.get_node_drops(node.name, itemstack:get_name())
|
||||
exchangeclone.drop_items_on_player(pos, drops, player)
|
||||
-- Annoying manual override
|
||||
if node.name:sub(1,18) == "mcl_ocean:seagrass" then
|
||||
minetest.set_node(pos, {name="sand"})
|
||||
else
|
||||
table.insert(data.remove_positions, pos)
|
||||
nodes[i] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
return data
|
||||
end,
|
||||
end_action = function(player, center, range, data)
|
||||
exchangeclone.remove_nodes(data.remove_positions)
|
||||
exchangeclone.start_cooldown(player, "shears", (range+1)/7)
|
||||
end
|
||||
}
|
||||
exchangeclone.remove_nodes(nodes)
|
||||
exchangeclone.start_cooldown(player, "shears", (charge+1)/7)
|
||||
end
|
||||
|
||||
local shears_rightclick = function(itemstack, player, pointed_thing)
|
||||
-- Use pointed node's on_rightclick function first, if present
|
||||
|
@ -44,11 +39,7 @@ local shears_rightclick = function(itemstack, player, pointed_thing)
|
|||
end
|
||||
|
||||
if player:get_player_control().aux1 then
|
||||
if itemstack:get_name():find("dark") then
|
||||
return exchangeclone.charge_update(itemstack, player, 3)
|
||||
else
|
||||
return exchangeclone.charge_update(itemstack, player, 4)
|
||||
end
|
||||
return exchangeclone.charge_update(itemstack, player)
|
||||
end
|
||||
|
||||
if (pointed_thing.type == "node") and pointed_thing.above and not player:get_player_control().sneak then
|
||||
|
@ -62,13 +53,14 @@ local shears_rightclick = function(itemstack, player, pointed_thing)
|
|||
end
|
||||
end
|
||||
|
||||
local center = player:get_pos()
|
||||
|
||||
if (pointed_thing.type == "node") and pointed_thing.under then
|
||||
center = pointed_thing.under
|
||||
if pointed_thing.type == "node" then
|
||||
local node = minetest.get_node(pointed_thing.under)
|
||||
if minetest.get_item_group(node.name, "shearsy") > 0
|
||||
or minetest.get_item_group(node.name, "shearsy_cobweb") > 0
|
||||
or minetest.get_item_group(node.name, "leaves") > 0 then
|
||||
exchangeclone.shear_action(itemstack, player, pointed_thing.under)
|
||||
end
|
||||
end
|
||||
local range = tonumber(itemstack:get_meta():get_int("exchangeclone_tool_charge"))
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.shear_action, itemstack)
|
||||
return itemstack
|
||||
end
|
||||
|
||||
|
@ -79,18 +71,18 @@ minetest.register_tool("exchangeclone:dark_matter_shears", {
|
|||
stack_max = 1,
|
||||
groups = { tool=1, shears=1, dig_speed_class=5, disable_repair = 1, fire_immune = 1, exchangeclone_upgradable = 1},
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 0.4,
|
||||
full_punch_interval = 0.25,
|
||||
max_drop_level=1,
|
||||
damage_groups = { fleshy = 2, },
|
||||
damage_groups = { fleshy = 1, },
|
||||
},
|
||||
on_place = shears_rightclick,
|
||||
on_secondary_use = shears_rightclick,
|
||||
sound = { breaks = "default_tool_breaks" },
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
shearsy = { speed = 5, level = 2, uses = 0 },
|
||||
shearsy_wool = { speed = 10, level = 2, uses = 0 },
|
||||
shearsy_cobweb = { speed = 30, level = 2, uses = 0 }
|
||||
shearsy = { speed = 14, level = 2, uses = 0 },
|
||||
shearsy_wool = { speed = 14, level = 2, uses = 0 },
|
||||
shearsy_cobweb = { speed = 14, level = 2, uses = 0 }
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -101,18 +93,18 @@ minetest.register_tool("exchangeclone:red_matter_shears", {
|
|||
stack_max = 1,
|
||||
groups = { tool=1, shears=1, dig_speed_class=6, disable_repair = 1, fire_immune = 1, exchangeclone_upgradable = 1},
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 0.3,
|
||||
full_punch_interval = 0.25,
|
||||
max_drop_level=1,
|
||||
damage_groups = { fleshy = 4, },
|
||||
damage_groups = { fleshy = 1, },
|
||||
},
|
||||
on_place = shears_rightclick,
|
||||
on_secondary_use = shears_rightclick,
|
||||
sound = { breaks = "default_tool_breaks" },
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
shearsy = { speed = 8, level = 3, uses = 0 },
|
||||
shearsy_wool = { speed = 14, level = 3, uses = 0 },
|
||||
shearsy_cobweb = { speed = 34, level = 3, uses = 0 }
|
||||
shearsy = { speed = 16, level = 3, uses = 0 },
|
||||
shearsy_wool = { speed = 16, level = 3, uses = 0 },
|
||||
shearsy_cobweb = { speed = 16, level = 3, uses = 0 }
|
||||
},
|
||||
})
|
||||
|
||||
|
|
|
@ -1,27 +1,38 @@
|
|||
function exchangeclone.shovel_action(itemstack, player, center)
|
||||
if not (itemstack and player and center) then return end
|
||||
if exchangeclone.check_cooldown(player, "shovel") then return end
|
||||
local charge = itemstack:get_meta():get_int("exchangeclone_tool_charge") or 0
|
||||
local charge = math.max(itemstack:get_meta():get_int("exchangeclone_tool_charge"), 1)
|
||||
local start_node = minetest.get_node(center)
|
||||
local action
|
||||
if exchangeclone.mcl then
|
||||
if minetest.registered_items[start_node.name]._on_shovel_place
|
||||
or minetest.get_item_group(start_node.name, "path_creation_possible") == 1 then
|
||||
if minetest.get_node(vector.offset(center,0,1,0)).name == "air" then
|
||||
action = "path"
|
||||
if (not player:get_player_control().sneak or charge == 1) then
|
||||
action = "path"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if action ~= "path" then
|
||||
if exchangeclone.mcl2 and start_node.name == "mcl_core:grass_path" then
|
||||
if exchangeclone.mcl2 and start_node.name == "mcl_core:grass_path" and
|
||||
(not player:get_player_control().sneak or charge == 1) then
|
||||
action = "unpath"
|
||||
elseif minetest.get_item_group(start_node.name, "exchangeclone_dirt") or start_node.name:find("sand") then
|
||||
action = "crumbly_flat"
|
||||
elseif minetest.get_item_group(start_node.name, exchangeclone.mcl and "shovely" or "crumbly") then
|
||||
action = "crumbly"
|
||||
elseif start_node.name == exchangeclone.itemstrings.gravel or start_node.name == exchangeclone.itemstrings.clay then
|
||||
if player:get_player_control().sneak and charge > 1 then
|
||||
action = "crumbly"
|
||||
else
|
||||
return
|
||||
end
|
||||
else
|
||||
if player:get_player_control().sneak and charge > 1 then
|
||||
action = "crumbly_flat"
|
||||
else
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local groups_to_search, range_type
|
||||
if action == "path" then
|
||||
groups_to_search = exchangeclone.mcl2 and {"group:path_creation_possible"} or {"group:exchangeclone_dirt"}
|
||||
|
@ -29,19 +40,26 @@ function exchangeclone.shovel_action(itemstack, player, center)
|
|||
elseif action == "unpath" then
|
||||
groups_to_search = {"mcl_core:grass_path"}
|
||||
range_type = "flat"
|
||||
elseif action == "crumbly_flat" then
|
||||
groups_to_search = {"group:"..(exchangeclone.mcl and "shoveley" or "crumbly")}
|
||||
range_type = "flat"
|
||||
else
|
||||
elseif action == "crumbly" then
|
||||
groups_to_search = {start_node.name}
|
||||
range_type = "large_radius"
|
||||
else
|
||||
groups_to_search = {"group:"..(exchangeclone.mcl and "shovely" or "crumbly")}
|
||||
range_type = "flat"
|
||||
end
|
||||
local nodes
|
||||
if charge > 1 then
|
||||
local vector1, vector2 = exchangeclone.process_range(player, range_type, charge)
|
||||
local pos1, pos2 = vector.add(center, vector1), vector.add(center, vector2)
|
||||
exchangeclone.play_ability_sound(player)
|
||||
nodes = minetest.find_nodes_in_area(pos1, pos2, groups_to_search)
|
||||
else
|
||||
if action == "path" or action == "unpath" then
|
||||
nodes = {center}
|
||||
else
|
||||
return
|
||||
end
|
||||
end
|
||||
local vector1, vector2 = exchangeclone.process_range(player, range_type, charge)
|
||||
if not (vector1 and vector2) then vector1, vector2 = vector.zero(), vector.zero() end
|
||||
|
||||
local pos1, pos2 = vector.add(center, vector1), vector.add(center, vector2)
|
||||
exchangeclone.play_ability_sound(player)
|
||||
local nodes = minetest.find_nodes_in_area(pos1, pos2, groups_to_search)
|
||||
for _, pos in pairs(nodes) do
|
||||
local node = minetest.get_node(pos)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
|
@ -49,53 +67,33 @@ function exchangeclone.shovel_action(itemstack, player, center)
|
|||
else
|
||||
if action == "path" then
|
||||
if exchangeclone.mcla then
|
||||
if minetest.registered_items[node.name]._on_shovel_place then
|
||||
local on_shovel_place = minetest.registered_items[node.name]._on_shovel_place
|
||||
if on_shovel_place then
|
||||
on_shovel_place(itemstack, player, pos)
|
||||
end
|
||||
else -- in MCL2, it only searches for pathable nodes
|
||||
if minetest.get_node(vector.offset(center,0,1,0)).name == "air" then
|
||||
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = pos}, true)
|
||||
minetest.swap_node(pos, {name="mcl_core:grass_path"})
|
||||
end
|
||||
else
|
||||
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = pos}, true)
|
||||
minetest.swap_node(pos, {name="mcl_core:grass_path"})
|
||||
end
|
||||
elseif action == "unpath" then
|
||||
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = pos}, true)
|
||||
minetest.swap_node(pos, {name="mcl_core:dirt"})
|
||||
else
|
||||
local drops = minetest.get_node_drops(minetest.get_node(pos).name, itemstack)
|
||||
exchangeclone.drop_items_on_player(pos, drops, player)
|
||||
end
|
||||
local drops = minetest.get_node_drops(minetest.get_node(pos).name, itemstack)
|
||||
exchangeclone.drop_items_on_player(pos, drops, player)
|
||||
end
|
||||
end
|
||||
|
||||
exchangeclone.remove_nodes(nodes)
|
||||
exchangeclone.start_cooldown(player, "shovel", charge/2)
|
||||
end
|
||||
action = function(player, pos, node, data)
|
||||
if ((minetest.get_item_group(node.name, "crumbly") > 0) or (minetest.get_item_group(node.name, "shovely") > 0)) then
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
minetest.record_protection_violation(pos, player:get_player_name())
|
||||
else
|
||||
if data.path then
|
||||
-- TODO: Fix potential "shovel_on_place" functions that aren't paths in Mineclonia (same with axes)
|
||||
if minetest.registered_items[node.name]._on_shovel_place or
|
||||
minetest.get_item_group(node.name, "path_creation_possible") == 1 then
|
||||
if minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}).name == "air" then
|
||||
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = pos}, true)
|
||||
minetest.swap_node(pos, {name="mcl_core:grass_path"})
|
||||
end
|
||||
end
|
||||
else
|
||||
local drops = minetest.get_node_drops(node.name, data.itemstack:get_name())
|
||||
exchangeclone.drop_items_on_player(pos, drops, player)
|
||||
table.insert(data.remove_positions, pos)
|
||||
end
|
||||
end
|
||||
end
|
||||
return data
|
||||
end,
|
||||
end_action = function(player, center, range, data)
|
||||
exchangeclone.remove_nodes(data.remove_positions)
|
||||
if range > 0 or not data.path then
|
||||
exchangeclone.start_cooldown(player, "shovel", range/4) -- Longish cooldown
|
||||
end
|
||||
if action == "crumbly" or action == "crumbly_flat" then
|
||||
exchangeclone.remove_nodes(nodes)
|
||||
end
|
||||
}
|
||||
if charge > 1 then
|
||||
exchangeclone.start_cooldown(player, "shovel", charge/2)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function shovel_on_place(itemstack, player, pointed_thing)
|
||||
|
@ -105,22 +103,13 @@ local function shovel_on_place(itemstack, player, pointed_thing)
|
|||
end
|
||||
|
||||
if player:get_player_control().aux1 then
|
||||
if itemstack:get_name():find("dark") then
|
||||
return exchangeclone.charge_update(itemstack, player, 3)
|
||||
else
|
||||
return exchangeclone.charge_update(itemstack, player, 4)
|
||||
end
|
||||
return exchangeclone.charge_update(itemstack, player)
|
||||
end
|
||||
|
||||
local range = itemstack:get_meta():get_int("exchangeclone_tool_charge")
|
||||
|
||||
local center = player:get_pos()
|
||||
if pointed_thing.type == "node" then
|
||||
center = pointed_thing.under
|
||||
exchangeclone.shovel_action(itemstack, player, pointed_thing.under)
|
||||
end
|
||||
|
||||
exchangeclone.node_radius_action(player, center, range, exchangeclone.shovel_action, itemstack)
|
||||
|
||||
return itemstack
|
||||
end
|
||||
|
||||
|
@ -132,9 +121,9 @@ minetest.register_tool("exchangeclone:dark_matter_shovel", {
|
|||
wield_scale = exchangeclone.wield_scale,
|
||||
tool_capabilities = {
|
||||
-- 1/1.2
|
||||
full_punch_interval = 0.5,
|
||||
full_punch_interval = 1,
|
||||
max_drop_level=6,
|
||||
damage_groups = {fleshy=7},
|
||||
damage_groups = {fleshy=6},
|
||||
punch_attack_uses = 0,
|
||||
groupcaps={
|
||||
crumbly = {times={[1]=0.9, [2]=0.45, [3]=0.225}, uses=0, maxlevel=4},
|
||||
|
@ -145,10 +134,12 @@ minetest.register_tool("exchangeclone:dark_matter_shovel", {
|
|||
on_secondary_use = shovel_on_place,
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
shovely = { speed = 16, level = 5, uses = 0 }
|
||||
shovely = { speed = 14, level = 5, uses = 0 }
|
||||
},
|
||||
})
|
||||
|
||||
exchangeclone.set_charge_type("exchangeclone:dark_matter_shovel", "dark_matter")
|
||||
|
||||
minetest.register_tool("exchangeclone:red_matter_shovel", {
|
||||
description = "Red Matter Shovel",
|
||||
wield_image = "exchangeclone_red_matter_shovel.png",
|
||||
|
@ -157,9 +148,9 @@ minetest.register_tool("exchangeclone:red_matter_shovel", {
|
|||
wield_scale = exchangeclone.wield_scale,
|
||||
tool_capabilities = {
|
||||
-- 1/1.2
|
||||
full_punch_interval = 0.5,
|
||||
full_punch_interval = 1,
|
||||
max_drop_level=7,
|
||||
damage_groups = {fleshy=9},
|
||||
damage_groups = {fleshy=7},
|
||||
punch_attack_uses = 0,
|
||||
groupcaps={
|
||||
crumbly = {times={[1]=0.6, [2]=0.25, [3]=0.1}, uses=0, maxlevel=5},
|
||||
|
@ -170,10 +161,12 @@ minetest.register_tool("exchangeclone:red_matter_shovel", {
|
|||
on_secondary_use = shovel_on_place,
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
shovely = { speed = 19, level = 6, uses = 0 }
|
||||
shovely = { speed = 16, level = 6, uses = 0 }
|
||||
},
|
||||
})
|
||||
|
||||
exchangeclone.set_charge_type("exchangeclone:red_matter_shovel", "red_matter")
|
||||
|
||||
--Crafting recipes
|
||||
|
||||
minetest.register_craft({
|
||||
|
|
|
@ -171,10 +171,9 @@ minetest.register_tool("exchangeclone:dark_matter_sword", {
|
|||
groups = { tool=1, sword=1, dig_speed_class=5, enchantability=0, disable_repair = 1, fire_immune = 1, exchangeclone_upgradable = 1},
|
||||
wield_scale = exchangeclone.wield_scale,
|
||||
tool_capabilities = {
|
||||
-- 1/1.2
|
||||
full_punch_interval = 0.7,
|
||||
full_punch_interval = 1/1.6,
|
||||
max_drop_level=6,
|
||||
damage_groups = {fleshy=15},
|
||||
damage_groups = {fleshy=13},
|
||||
punch_attack_uses = 0,
|
||||
groupcaps={
|
||||
snappy = {times={[1]=0.95, [2]=0.45, [3]=0.15}, uses=0, maxlevel=4},
|
||||
|
@ -185,7 +184,7 @@ minetest.register_tool("exchangeclone:dark_matter_sword", {
|
|||
sound = { breaks = "default_tool_breaks" },
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
swordy = { speed = 16, level = 5, uses = 0 }
|
||||
swordy = { speed = 14, level = 5, uses = 0 }
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -197,9 +196,9 @@ minetest.register_tool("exchangeclone:red_matter_sword", {
|
|||
wield_scale = exchangeclone.wield_scale,
|
||||
tool_capabilities = {
|
||||
-- 1/1.2
|
||||
full_punch_interval = 0.7,
|
||||
full_punch_interval = 1/1.6,
|
||||
max_drop_level=7,
|
||||
damage_groups = {fleshy=20},
|
||||
damage_groups = {fleshy=17},
|
||||
punch_attack_uses = 0,
|
||||
groupcaps={
|
||||
snappy = {times={[1]=0.6, [2]=0.25, [3]=0.1}, uses=0, maxlevel=5},
|
||||
|
@ -210,7 +209,7 @@ minetest.register_tool("exchangeclone:red_matter_sword", {
|
|||
sound = { breaks = "default_tool_breaks" },
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
swordy = { speed = 20, level = 6, uses = 0 }
|
||||
swordy = { speed = 16, level = 6, uses = 0 }
|
||||
},
|
||||
})
|
||||
|
||||
|
|
|
@ -360,7 +360,7 @@ minetest.register_node("exchangeclone:transmutation_table", {
|
|||
description = "Transmutation Table",
|
||||
paramtype2 = "wallmounted",
|
||||
tiles = {"exchangeclone_transmutation_table.png", "exchangeclone_transmutation_table.png", "exchangeclone_transmutation_table_side.png"},
|
||||
groups = {oddly_breakable_by_hand = 3, handy = 1},
|
||||
groups = {cracky = 3, pickaxey = 1, handy = 1, oddly_breakable_by_hand = 1},
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
|
@ -370,7 +370,7 @@ minetest.register_node("exchangeclone:transmutation_table", {
|
|||
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
||||
exchangeclone.show_transmutation_table_formspec(player)
|
||||
end,
|
||||
_mcl_hardness = 0.6,
|
||||
_mcl_hardness = 10,
|
||||
_mcl_blast_resistance = 6,
|
||||
})
|
||||
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
-- The z's at the beginning of this mod's name (zzzz_exchangeclone_init) are to ensure that it
|
||||
-- loads first, since Minetest loads mods in reverse alphabetical order.
|
||||
|
||||
exchangeclone = {recipes = {}, base_energy_values = {}, group_values = {}}
|
||||
|
||||
if (not minetest.get_modpath("mcl_core")) and (not minetest.get_modpath("default")) then
|
||||
|
|
|
@ -322,33 +322,35 @@ end
|
|||
function exchangeclone.charge_update(itemstack, player)
|
||||
itemstack = ItemStack(itemstack) -- don't affect original
|
||||
local charge_type = exchangeclone.charge_types[itemstack:get_name()]
|
||||
local max_level = exchangeclone.tool_levels.count[charge_type]
|
||||
if not max_level then return itemstack end
|
||||
local level = itemstack:get_meta():get_int("exchangeclone_tool_charge") or 1
|
||||
local max_charge = exchangeclone.tool_levels.count[charge_type]
|
||||
if not max_charge then return itemstack end
|
||||
local charge = itemstack:get_meta():get_int("exchangeclone_tool_charge") or 1
|
||||
if player:get_player_control().sneak then
|
||||
if level > 1 then
|
||||
level = level - 1
|
||||
end
|
||||
elseif level < max_level then
|
||||
level = level + 1
|
||||
charge = math.max(1, charge - 1)
|
||||
else
|
||||
charge = math.min(max_charge, charge + 1)
|
||||
end
|
||||
itemstack:get_meta():set_int("exchangeclone_tool_charge", level)
|
||||
itemstack:set_wear(math.max(1, math.min(65535, 65535-(65535/(max_level-1))*(level-1))))
|
||||
minetest.log(charge)
|
||||
itemstack:get_meta():set_int("exchangeclone_tool_charge", charge)
|
||||
itemstack:set_wear(math.max(1, math.min(65535, 65535-(65535/(max_charge-1))*(charge-1))))
|
||||
itemstack = exchangeclone.update_tool_capabilities(itemstack)
|
||||
return itemstack
|
||||
end
|
||||
|
||||
-- Itemstrings for various items used in crafting recipes.
|
||||
exchangeclone.itemstrings = {
|
||||
cobble = (exchangeclone.mcl and "mcl_core:cobble") or "default:cobble",
|
||||
redstoneworth = (exchangeclone.mcl and "mesecons:redstone") or "default:obsidian",
|
||||
glowstoneworth = (exchangeclone.mcl and "mcl_nether:glowstone_dust") or "default:tin_ingot",
|
||||
coal = (exchangeclone.mcl and "mcl_core:coal_lump") or "default:coal_lump",
|
||||
iron = (exchangeclone.mcl and "mcl_core:iron_ingot") or "default:steel_ingot",
|
||||
copper = (exchangeclone.mcl and "mcl_copper:copper_ingot") or "default:copper_ingot",
|
||||
gold = (exchangeclone.mcl and "mcl_core:gold_ingot") or "default:gold_ingot",
|
||||
emeraldworth = (exchangeclone.mcl and "mcl_core:emerald") or "default:mese_crystal",
|
||||
diamond = (exchangeclone.mcl and "mcl_core:diamond") or "default:diamond",
|
||||
cobble = exchangeclone.mcl and "mcl_core:cobble" or "default:cobble",
|
||||
redstoneworth = exchangeclone.mcl and "mesecons:redstone" or "default:obsidian",
|
||||
glowstoneworth = exchangeclone.mcl and "mcl_nether:glowstone_dust" or "default:tin_ingot",
|
||||
coal = exchangeclone.mcl and "mcl_core:coal_lump" or "default:coal_lump",
|
||||
iron = exchangeclone.mcl and "mcl_core:iron_ingot" or "default:steel_ingot",
|
||||
copper = exchangeclone.mcl and "mcl_copper:copper_ingot" or "default:copper_ingot",
|
||||
gold = exchangeclone.mcl and "mcl_core:gold_ingot" or "default:gold_ingot",
|
||||
emeraldworth = exchangeclone.mcl and "mcl_core:emerald" or "default:mese_crystal",
|
||||
diamond = exchangeclone.mcl and "mcl_core:diamond" or "default:diamond",
|
||||
gravel = exchangeclone.mcl and "mcl_core:gravel" or "default:gravel",
|
||||
dirt = exchangeclone.mcl and "mcl_core:dirt" or "default:dirt",
|
||||
clay = exchangeclone.mcl and "mcl_core:clay" or "default:clay",
|
||||
}
|
||||
|
||||
exchangeclone.energy_aliases = {}
|
||||
|
@ -585,6 +587,7 @@ end)
|
|||
|
||||
-- Start a <time>-second cooldown called <name> for <player>
|
||||
function exchangeclone.start_cooldown(player, name, time)
|
||||
if not (player and name and time and (time > 0)) then return end
|
||||
local player_name = player:get_player_name()
|
||||
exchangeclone.cooldowns[player_name][name] = time
|
||||
minetest.after(time, function()
|
||||
|
@ -701,11 +704,11 @@ exchangeclone.neighbors = {
|
|||
|
||||
function exchangeclone.check_nearby_falling(pos)
|
||||
for i = 1, 6 do
|
||||
local pos = vector.add(pos, exchangeclone.neighbors[i])
|
||||
local new_pos = vector.add(pos, exchangeclone.neighbors[i])
|
||||
if exchangeclone.mcl then
|
||||
local node = minetest.get_node(pos)
|
||||
local node = minetest.get_node(new_pos)
|
||||
if node.name == "mcl_core:vine" then
|
||||
mcl_core.check_vines_supported(pos, node)
|
||||
mcl_core.check_vines_supported(new_pos, node)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -715,7 +718,9 @@ end
|
|||
function exchangeclone.remove_nodes(positions)
|
||||
minetest.bulk_set_node(positions, {name = "air"})
|
||||
for _, pos in pairs(positions) do
|
||||
exchangeclone.check_nearby_falling(pos)
|
||||
if pos then
|
||||
exchangeclone.check_nearby_falling(pos)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -922,7 +927,6 @@ end
|
|||
|
||||
function exchangeclone.multidig(pos, node, player, mode, nodes)
|
||||
if not player then return end
|
||||
minetest.log(dump(mode))
|
||||
local player_rotation = exchangeclone.get_face_direction(player)
|
||||
|
||||
if mode == "3x3" then
|
||||
|
@ -959,7 +963,7 @@ function exchangeclone.multidig(pos, node, player, mode, nodes)
|
|||
else
|
||||
dir = "x"
|
||||
end
|
||||
local added_vector = vector.zero
|
||||
local added_vector = vector.zero()
|
||||
added_vector[dir] = player_rotation[dir]*2
|
||||
local pos2 = vector.add(pos, added_vector)
|
||||
local found_nodes = minetest.find_nodes_in_area(pos, pos2, nodes)
|
||||
|
@ -985,8 +989,11 @@ function exchangeclone.multidig(pos, node, player, mode, nodes)
|
|||
dir = "x"
|
||||
end
|
||||
end
|
||||
local pos1 = vector.add(pos, {[dir]=-1})
|
||||
local pos2 = vector.add(pos, {[dir]=1})
|
||||
local vector1, vector2 = vector.zero(), vector.zero()
|
||||
vector1[dir] = -1
|
||||
vector2[dir] = 1
|
||||
local pos1 = vector.add(pos, vector1)
|
||||
local pos2 = vector.add(pos, vector2)
|
||||
local found_nodes = minetest.find_nodes_in_area(pos1, pos2, nodes)
|
||||
for _, node_pos in pairs(found_nodes) do
|
||||
minetest.node_dig(node_pos, minetest.get_node(node_pos), player)
|
||||
|
@ -1014,7 +1021,7 @@ minetest.register_on_joinplayer(function(player)
|
|||
end)
|
||||
|
||||
exchangeclone.tool_levels = {
|
||||
count = {dark_matter = 2, red_matter = 3, red_multi = 4, phil = 4},
|
||||
count = {dark_matter = 3, red_matter = 4, red_multi = 5, phil = 5},
|
||||
efficiency = {
|
||||
dark_matter = {nil, 3, 5},
|
||||
red_matter = {nil, 3.5, 5, 7},
|
||||
|
@ -1025,11 +1032,13 @@ exchangeclone.tool_levels = {
|
|||
type = "front",
|
||||
ranges = {
|
||||
-- horizontal, vertical, depth (relative to look direction)
|
||||
-- horizontal/vertical are radii (1,1 = 3x3, 2,2 = 5,5)
|
||||
-- depth does NOT include starting position (1,1,1 mines 3x3x2 area)
|
||||
nil,
|
||||
{3,3,2},
|
||||
{5,5,3},
|
||||
{7,7,4},
|
||||
{9,9,5}
|
||||
{1,1,1},
|
||||
{2,2,2},
|
||||
{3,3,3},
|
||||
{4,4,4}
|
||||
}
|
||||
},
|
||||
flat = {
|
||||
|
@ -1081,7 +1090,6 @@ function exchangeclone.get_groupcaps(item, efficiency)
|
|||
item = ItemStack(item)
|
||||
if exchangeclone.mcl then
|
||||
local thingy = mcl_autogroup.get_groupcaps(item:get_name(), efficiency)
|
||||
minetest.log(dump(thingy))
|
||||
return thingy
|
||||
else
|
||||
local groupcaps = table.copy(minetest.registered_items[item:get_name()].tool_capabilities.groupcaps)
|
||||
|
@ -1104,7 +1112,6 @@ function exchangeclone.update_tool_capabilities(itemstack)
|
|||
local tool_capabilities = table.copy(minetest.registered_items[itemstack:get_name()].tool_capabilities)
|
||||
tool_capabilities.groupcaps = exchangeclone.get_groupcaps(itemstack, efficiency)
|
||||
meta:set_tool_capabilities(tool_capabilities)
|
||||
minetest.log(dump(charge_level, efficiency))
|
||||
return itemstack
|
||||
end
|
||||
|
||||
|
@ -1142,7 +1149,7 @@ function exchangeclone.process_range(player, range, charge)
|
|||
}, {
|
||||
[horizontal] = -range_amounts[1],
|
||||
[vertical] = -range_amounts[2],
|
||||
[depth] = range_amounts[3]
|
||||
[depth] = player_rotation[depth]*range_amounts[3]
|
||||
}
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue