diff --git a/api.lua b/api.lua index f64f989..561e75c 100644 --- a/api.lua +++ b/api.lua @@ -218,6 +218,7 @@ Everness = { everness_feature_skybox = minetest.settings:get_bool('everness_feature_skybox', true), } }, + hammer_cid_data = {} } function Everness.grow_cactus(self, pos, node, params) @@ -1003,3 +1004,287 @@ function Everness.set_loot_chest_items() Everness.loot_chest.default = table.copy(loot_items) end + +-- +-- Hammer +-- Modified version of default:tnt from MT +-- @license MIT + +local function rand_pos(center, pos, radius) + local def + local reg_nodes = minetest.registered_nodes + local i = 0 + + repeat + -- Give up and use the center if this takes too long + if i > 4 then + pos.x, pos.z = center.x, center.z + break + end + + pos.x = center.x + math.random(-radius, radius) + pos.z = center.z + math.random(-radius, radius) + def = reg_nodes[minetest.get_node(pos).name] + i = i + 1 + until def and not def.walkable +end + +local function eject_drops(drops, pos, radius) + local drop_pos = vector.new(pos) + + for _, item in pairs(drops) do + local count = math.min(item:get_count(), item:get_stack_max()) + + while count > 0 do + local take = math.max( + 1, + math.min( + radius * radius, + count, + item:get_stack_max() + ) + ) + + -- `drop_pos` is being randomized here + rand_pos(pos, drop_pos, radius) + + local dropitem = ItemStack(item) + + dropitem:set_count(take) + + local obj = minetest.add_item(drop_pos, dropitem) + + if obj then + obj:get_luaentity().collect = true + obj:set_acceleration({ x = 0, y = -10, z = 0 }) + obj:set_velocity({ + x = math.random(-2, 2), + y = math.random(0, 2), + z = math.random(-2, 2) + }) + end + + count = count - take + end + end +end + +-- Populate `drops` table +local function add_drop(drops, item) + item = ItemStack(item) + + local name = item:get_name() + local drop = drops[name] + + if drop == nil then + drops[name] = item + else + drop:set_count(drop:get_count() + item:get_count()) + end +end + +local function destroy(drops, npos, cid, c_air, can_dig, owner) + if minetest.is_protected(npos, owner) then + return cid + end + + local def = Everness.hammer_cid_data[cid] + + if not def then + return cid + elseif def.can_dig and not def.can_dig(npos, minetest.get_player_by_name(owner)) then + return cid + else + local node_drops = minetest.get_node_drops(def.name, '') + + for _, item in pairs(node_drops) do + add_drop(drops, item) + end + + return c_air + end +end + +function Everness.hammer_after_dig_node(pos, node, metadata, digger, can_dig) + if not digger then + return + end + + local wielditem = digger:get_wielded_item() + + if wielditem:get_name() ~= 'everness:hammer' then + return + end + + local radius = 1 + local look_dir = vector.round(digger:get_look_dir()) + local look_dir_multi = vector.round(vector.multiply(look_dir, radius / 2)) + pos = vector.round(vector.add(pos, look_dir_multi)) + local c_air = minetest.CONTENT_AIR + local c_ignore = minetest.CONTENT_IGNORE + local vm = VoxelManip() + local pr = PseudoRandom(os.time()) + local p1 = vector.subtract(pos, radius) + local p2 = vector.add(pos, radius) + local minp, maxp = vm:read_from_map(p1, p2) + local voxel_area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + local data = vm:get_data() + -- `drops` are being populated in `add_drop` method, called from `destroy` method + local drops = {} + local p_name = digger:get_player_name() + + if not core.is_creative_enabled(p_name) then + local wielditem_meta = wielditem:get_meta() + local wielditem_wear = wielditem_meta:get_int('everness_wear') + local node_def = minetest.registered_nodes[node.name] + local wielditem_def = wielditem:get_definition() + local dig_params = minetest.get_dig_params(node_def and node_def.groups, wielditem_def and wielditem_def.tool_capabilities, wielditem:get_wear()) + local new_wear = wielditem_wear + dig_params.wear + + -- Add wear + wielditem_meta:set_int('everness_wear', new_wear) + + -- Draw wear bar texture overlay + local px_width = 14 + local px_one = 65535 / px_width + local px_color = px_width - math.floor(new_wear / px_one) + + local inventory_overlay = '[combine:16x16' + + for i = 1, px_width do + if i > px_color then + inventory_overlay = inventory_overlay .. ':' .. i .. ',14=[combine\\:1x1\\^[noalpha\\^[colorize\\:#000000\\:255' + else + local color + + if px_color < px_width / 4 then + -- below 25% + color = '#FF0000' + elseif px_color < (px_width / 4) * 2 then + -- below 50% + color = '#FFA500' + elseif px_color < (px_width / 4) * 3 then + -- below 75% + color = '#FFFF00' + else + -- above 75% + color = '#00FF00' + end + + inventory_overlay = inventory_overlay .. ':' .. i .. ',14=[combine\\:1x1\\^[noalpha\\^[colorize\\:' .. color .. '\\:255' + end + end + + wielditem_meta:set_string('inventory_overlay', inventory_overlay) + + if wielditem_wear > 65535 then + -- Break tool + minetest.sound_play(wielditem_def.sound.breaks, { + pos = pos, + gain = 0.5 + }, true) + + digger:set_wielded_item(ItemStack('')) + elseif wielditem:get_name() == 'everness:hammer' then + -- Save wear + digger:set_wielded_item(wielditem) + end + end + + -- Digging blast + for z = -radius, radius do + for y = -radius, radius do + local vi = voxel_area:index(pos.x + (-radius), pos.y + y, pos.z + z) + + for x = -radius, radius do + local r = vector.length(vector.new(x, y, z)) + + if (radius * radius) / (r * r) >= (pr:next(30, 60) / 100) then + local cid = data[vi] + local p = vector.new(pos.x + x, pos.y + y, pos.z + z) + + if cid ~= c_air and cid ~= c_ignore then + data[vi] = destroy(drops, p, cid, c_air, can_dig, p_name) + end + end + + vi = vi + 1 + end + end + end + + vm:set_data(data) + vm:write_to_map() + vm:update_map() + vm:update_liquids() + + -- Call `check_single_for_falling` for everything within 1.5x blast radius + for y = math.round(-radius * 1.5), math.round(radius * 1.5) do + for z = math.round(-radius * 1.5), math.round(radius * 1.5) do + for x = math.round(-radius * 1.5), math.round(radius * 1.5) do + local rad = vector.new(x, y, z) + local s = vector.add(pos, rad) + + minetest.check_single_for_falling(s) + end + end + end + + eject_drops(drops, pos, radius) + + -- Get texture for particles from majority of the dug nodes + local node_for_particles + local most = 0 + + for name, stack in pairs(drops) do + local count = stack:get_count() + + if count > most then + most = count + local def = minetest.registered_nodes[name] + + if def then + node_for_particles = { name = name } + end + + -- Play sounds + if def and def.sounds and def.sounds.dug then + for i = 1, math.random(2, 5) do + local drop_pos = vector.new(pos) + + -- `drop_pos` is being randomized here + rand_pos(pos, drop_pos, radius) + + minetest.after( + math.random(2, 8) / 10, + function() + minetest.sound_play(def.sounds.dug, { + pos = drop_pos, + pitch = math.random(1, 10) / 10 + }, true) + end + ) + end + end + end + end + + if node_for_particles then + minetest.add_particlespawner({ + amount = 64, + time = 0.1, + minpos = vector.subtract(pos, radius / 2), + maxpos = vector.add(pos, radius / 2), + minvel = {x = -2, y = 0, z = -2}, + maxvel = {x = 2, y = 5, z = 2}, + minacc = {x = 0, y = -10, z = 0}, + maxacc = {x = 0, y = -10, z = 0}, + minexptime = 0.8, + maxexptime = 2.0, + minsize = radius * 0.33, + maxsize = radius, + node = node_for_particles, + collisiondetection = true, + }) + end +end diff --git a/assets/everness_hammer_pick.blend b/assets/everness_hammer_pick.blend new file mode 100644 index 0000000..cf7731a Binary files /dev/null and b/assets/everness_hammer_pick.blend differ diff --git a/crafting.lua b/crafting.lua index 4e4f70a..6dfd11f 100644 --- a/crafting.lua +++ b/crafting.lua @@ -703,6 +703,15 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = 'everness:hammer', + recipe = { + { 'group:everness_obsidian', 'group:everness_obsidian', 'group:everness_obsidian' }, + { 'group:everness_obsidian', 'everness:pyriteblock_forged', 'group:everness_obsidian' }, + { '', 'group:stick', '' } + } +}) + -- -- Fuels -- diff --git a/models/everness_hammer_pick.obj b/models/everness_hammer_pick.obj new file mode 100644 index 0000000..7026ab0 --- /dev/null +++ b/models/everness_hammer_pick.obj @@ -0,0 +1,478 @@ +# Blender v2.83.20 OBJ File: 'everness_hammer_pick.blend' +# www.blender.org +mtllib everness_hammer_pick.mtl +o hammer_head.vox +v 0.117043 0.562218 -0.240000 +v 0.117043 0.562218 0.240000 +v -0.222369 0.901630 -0.240000 +v -0.561780 -0.116604 -0.240000 +v -0.901191 0.222807 0.240000 +v -0.561780 -0.116604 0.240000 +v -0.222369 0.901630 0.240000 +v -0.901191 0.222807 -0.240000 +v 0.097391 -0.177433 0.040000 +v -0.142609 -0.017433 -0.040000 +v -0.222609 0.062567 0.040000 +v -0.222609 0.062567 -0.040000 +v -0.142609 0.062567 -0.040000 +v -0.382609 0.222567 -0.040000 +v 0.577391 -0.337433 -0.040000 +v 0.417391 -0.337433 -0.040000 +v 0.417391 -0.337433 0.040000 +v 0.417391 -0.257433 -0.040000 +v 0.337391 -0.257433 0.040000 +v 0.337391 -0.177433 0.040000 +v 0.337391 -0.177433 -0.040000 +v 0.257391 -0.177433 0.040000 +v 0.257391 -0.097433 0.040000 +v 0.177391 -0.017433 -0.040000 +v 0.017391 0.062567 -0.040000 +v -0.062609 0.222567 0.040000 +v -0.142609 0.302567 -0.040000 +v -0.222609 0.302567 0.040000 +v -0.222609 0.382567 0.040000 +v 0.577391 -0.577433 0.040000 +v 0.417391 -0.257433 0.040000 +v 0.257391 -0.417433 0.040000 +v 0.257391 -0.337433 0.040000 +v 0.177391 -0.257433 0.040000 +v 0.177391 -0.337433 0.040000 +v 0.097391 -0.257433 0.040000 +v 0.177391 -0.097433 0.040000 +v 0.097391 -0.017433 0.040000 +v 0.017391 0.062567 0.040000 +v -0.062609 -0.017433 0.040000 +v -0.062609 0.142567 0.040000 +v -0.142609 -0.017433 0.040000 +v -0.142609 0.062567 0.040000 +v -0.142609 0.222567 0.040000 +v -0.222609 0.142567 0.040000 +v -0.142609 0.302567 0.040000 +v -0.302609 0.302567 0.040000 +v -0.302609 0.222567 0.040000 +v -0.382609 0.222567 0.040000 +v 0.257391 -0.337433 -0.040000 +v 0.257391 -0.177433 -0.040000 +v 0.257391 -0.097433 -0.040000 +v 0.177391 -0.257433 -0.040000 +v 0.097391 -0.257433 -0.040000 +v 0.097391 -0.177433 -0.040000 +v 0.017391 -0.177433 -0.040000 +v 0.017391 -0.097433 -0.040000 +v 0.097391 -0.017433 -0.040000 +v -0.062609 -0.017433 -0.040000 +v 0.017391 0.142567 -0.040000 +v -0.062609 0.222567 -0.040000 +v -0.222609 0.142567 -0.040000 +v -0.302609 0.222567 -0.040000 +v -0.302609 0.302567 -0.040000 +v -0.222609 0.302567 -0.040000 +v -0.222609 0.382567 -0.040000 +v 0.577391 -0.577433 -0.040000 +v 0.577391 -0.337433 0.040000 +v 0.337391 -0.257433 -0.040000 +v 0.177391 -0.097433 -0.040000 +v 0.177391 -0.017433 0.040000 +v 0.097391 0.062567 -0.040000 +v 0.097391 0.062567 0.040000 +v 0.017391 0.142567 0.040000 +v -0.062609 0.142567 -0.040000 +v -0.142609 0.222567 -0.040000 +v 0.337391 -0.577433 0.040000 +v 0.337391 -0.577433 -0.040000 +v 0.337391 -0.417433 0.040000 +v 0.337391 -0.417433 -0.040000 +v 0.257391 -0.417433 -0.040000 +v 0.177391 -0.337433 -0.040000 +v 0.017391 -0.177433 0.040000 +v 0.017391 -0.097433 0.040000 +v -0.062609 -0.097433 0.040000 +v -0.062609 -0.097433 -0.040000 +v -0.302609 0.142567 0.040000 +v -0.302609 0.142567 -0.040000 +v -0.302609 0.382567 0.040000 +v -0.302609 0.382567 -0.040000 +v -0.382609 0.302567 0.040000 +v -0.382609 0.302567 -0.040000 +vt 0.375000 1.000000 +vt 0.000000 0.812500 +vt 0.000000 1.000000 +vt 0.375000 0.812500 +vt 0.562500 1.000000 +vt 0.375000 1.000000 +vt 0.750000 0.812500 +vt 0.562500 1.000000 +vt 0.750000 1.000000 +vt 0.000000 0.250000 +vt 0.375000 0.437500 +vt 0.375000 0.250000 +vt 0.000000 0.812500 +vt 0.375000 0.625000 +vt 0.375000 0.812500 +vt 0.375000 0.625000 +vt 0.000000 0.437500 +vt 0.375000 0.437500 +vt 0.375000 0.718750 +vt 0.406250 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.625000 +vt 0.406250 0.656250 +vt 0.375000 0.656250 +vt 0.375000 0.531250 +vt 0.406250 0.593750 +vt 0.375000 0.593750 +vt 0.375000 0.468750 +vt 0.406250 0.500000 +vt 0.375000 0.500000 +vt 0.375000 0.406250 +vt 0.406250 0.437500 +vt 0.375000 0.437500 +vt 0.375000 0.343750 +vt 0.406250 0.375000 +vt 0.375000 0.375000 +vt 0.375000 0.281250 +vt 0.406250 0.312500 +vt 0.375000 0.312500 +vt 0.375000 0.218750 +vt 0.406250 0.250000 +vt 0.375000 0.250000 +vt 0.375000 0.156250 +vt 0.406250 0.187500 +vt 0.375000 0.187500 +vt 0.375000 0.093750 +vt 0.406250 0.125000 +vt 0.375000 0.125000 +vt 0.406250 0.625000 +vt 0.437500 0.593750 +vt 0.437500 0.625000 +vt 0.406250 0.531250 +vt 0.437500 0.500000 +vt 0.437500 0.531250 +vt 0.406250 0.468750 +vt 0.437500 0.437500 +vt 0.437500 0.468750 +vt 0.406250 0.406250 +vt 0.437500 0.375000 +vt 0.437500 0.406250 +vt 0.406250 0.343750 +vt 0.437500 0.312500 +vt 0.437500 0.343750 +vt 0.406250 0.281250 +vt 0.437500 0.250000 +vt 0.437500 0.281250 +vt 0.406250 0.218750 +vt 0.437500 0.187500 +vt 0.437500 0.218750 +vt 0.406250 0.156250 +vt 0.437500 0.125000 +vt 0.437500 0.156250 +vt 0.406250 0.093750 +vt 0.437500 0.062500 +vt 0.437500 0.093750 +vt 0.406250 0.031250 +vt 0.375000 0.062500 +vt 0.375000 0.031250 +vt 0.718750 0.687500 +vt 0.750000 0.718750 +vt 0.718750 0.750000 +vt 0.593750 0.562500 +vt 0.562500 0.531250 +vt 0.531250 0.562500 +vt 0.406250 0.656250 +vt 0.437500 0.718750 +vt 0.406250 0.718750 +vt 0.437500 0.812500 +vt 0.437500 0.656250 +vt 0.406250 0.593750 +vt 0.406250 0.500000 +vt 0.406250 0.437500 +vt 0.406250 0.375000 +vt 0.406250 0.312500 +vt 0.406250 0.250000 +vt 0.406250 0.187500 +vt 0.406250 0.125000 +vt 0.406250 0.625000 +vt 0.406250 0.531250 +vt 0.406250 0.468750 +vt 0.406250 0.406250 +vt 0.406250 0.343750 +vt 0.406250 0.281250 +vt 0.406250 0.218750 +vt 0.406250 0.156250 +vt 0.437500 0.031250 +vt 0.406250 0.093750 +vt 0.375000 0.812500 +vt 0.562500 0.812500 +vt 0.562500 0.812500 +vt 0.000000 0.437500 +vt 0.000000 0.625000 +vt 0.000000 0.625000 +vt 0.406250 0.718750 +vt 0.406250 0.062500 +vt 0.406250 0.062500 +vt 0.531250 0.562500 +vt 0.500000 0.562500 +vt 0.500000 0.531250 +vt 0.437500 0.531250 +vt 0.437500 0.437500 +vt 0.531250 0.437500 +vt 0.531250 0.500000 +vt 0.562500 0.500000 +vt 0.562500 0.531250 +vt 0.593750 0.531250 +vt 0.593750 0.562500 +vt 0.625000 0.562500 +vt 0.625000 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.687500 0.625000 +vt 0.687500 0.656250 +vt 0.718750 0.656250 +vt 0.750000 0.687500 +vt 0.781250 0.718750 +vt 0.781250 0.750000 +vt 0.812500 0.750000 +vt 0.812500 0.781250 +vt 0.781250 0.781250 +vt 0.781250 0.812500 +vt 0.750000 0.781250 +vt 0.750000 0.812500 +vt 0.718750 0.781250 +vt 0.687500 0.750000 +vt 0.687500 0.718750 +vt 0.656250 0.718750 +vt 0.656250 0.687500 +vt 0.625000 0.687500 +vt 0.625000 0.656250 +vt 0.593750 0.656250 +vt 0.593750 0.625000 +vt 0.562500 0.625000 +vt 0.562500 0.593750 +vt 0.531250 0.593750 +vt 0.625000 0.656250 +vt 0.625000 0.687500 +vt 0.656250 0.687500 +vt 0.656250 0.718750 +vt 0.687500 0.718750 +vt 0.687500 0.750000 +vt 0.718750 0.750000 +vt 0.718750 0.781250 +vt 0.750000 0.781250 +vt 0.750000 0.812500 +vt 0.781250 0.812500 +vt 0.781250 0.781250 +vt 0.812500 0.781250 +vt 0.812500 0.750000 +vt 0.750000 0.718750 +vt 0.687500 0.656250 +vt 0.718750 0.687500 +vt 0.593750 0.625000 +vt 0.593750 0.656250 +vt 0.562500 0.593750 +vt 0.562500 0.625000 +vt 0.531250 0.593750 +vt 0.500000 0.531250 +vt 0.500000 0.562500 +vt 0.437500 0.437500 +vt 0.437500 0.531250 +vt 0.531250 0.500000 +vt 0.531250 0.437500 +vt 0.562500 0.500000 +vt 0.593750 0.531250 +vt 0.625000 0.593750 +vt 0.625000 0.562500 +vt 0.656250 0.625000 +vt 0.656250 0.593750 +vt 0.687500 0.625000 +vt 0.718750 0.656250 +vt 0.750000 0.687500 +vt 0.781250 0.750000 +vt 0.781250 0.718750 +vn 0.0000 0.0000 1.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -0.7071 0.7071 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 1.0000 -0.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +usemtl hammer +s off +f 5/1/1 2/2/1 7/3/1 +f 2/4/2 3/5/2 7/6/2 +f 4/7/3 5/8/3 8/9/3 +f 6/10/4 1/11/4 2/12/4 +f 3/13/5 4/14/5 8/15/5 +f 3/16/6 5/17/6 7/18/6 +f 77/19/7 67/20/7 30/21/7 +f 32/22/7 80/23/7 79/24/7 +f 35/25/7 50/26/7 33/27/7 +f 36/28/7 53/29/7 34/30/7 +f 83/31/7 55/32/7 9/33/7 +f 85/34/7 57/35/7 84/36/7 +f 42/37/7 59/38/7 40/39/7 +f 11/40/7 13/41/7 43/42/7 +f 87/43/7 62/44/7 45/45/7 +f 49/46/7 63/47/7 48/48/7 +f 18/49/8 19/50/8 31/51/8 +f 21/52/8 22/53/8 20/54/8 +f 52/55/8 37/56/8 23/57/8 +f 24/58/8 38/59/8 71/60/8 +f 72/61/8 39/62/8 73/63/8 +f 60/64/8 41/65/8 74/66/8 +f 61/67/8 44/68/8 26/69/8 +f 27/70/8 28/71/8 46/72/8 +f 66/73/8 89/74/8 29/75/8 +f 64/76/8 91/77/8 47/78/8 +f 13/79/5 62/80/5 76/81/5 +f 34/82/1 33/83/1 19/84/1 +f 16/85/8 68/86/8 15/87/8 +f 15/87/9 30/88/9 67/20/9 +f 16/85/9 31/51/9 17/89/9 +f 69/90/9 20/54/9 19/50/9 +f 51/91/9 23/57/9 22/53/9 +f 70/92/9 71/60/9 37/56/9 +f 58/93/9 73/63/9 38/59/9 +f 25/94/9 74/66/9 39/62/9 +f 75/95/9 26/69/9 41/65/9 +f 76/96/9 46/72/9 44/68/9 +f 65/97/9 29/75/9 28/71/9 +f 33/27/10 81/98/10 32/22/10 +f 34/30/10 82/99/10 35/25/10 +f 9/33/10 54/100/10 36/28/10 +f 84/36/10 56/101/10 83/31/10 +f 40/39/10 86/102/10 85/34/10 +f 42/37/10 13/41/10 10/103/10 +f 45/45/10 12/104/10 11/40/10 +f 48/48/10 88/105/10 87/43/10 +f 89/74/10 64/76/10 47/106/10 +f 91/77/10 14/107/10 49/46/10 +f 80/23/10 77/19/10 79/24/10 +f 5/1/1 6/108/1 2/2/1 +f 2/4/2 1/109/2 3/5/2 +f 4/7/3 6/110/3 5/8/3 +f 6/10/4 4/111/4 1/11/4 +f 3/13/5 1/112/5 4/14/5 +f 3/16/6 8/113/6 5/17/6 +f 77/19/7 78/114/7 67/20/7 +f 32/22/7 81/98/7 80/23/7 +f 35/25/7 82/99/7 50/26/7 +f 36/28/7 54/100/7 53/29/7 +f 83/31/7 56/101/7 55/32/7 +f 85/34/7 86/102/7 57/35/7 +f 42/37/7 10/103/7 59/38/7 +f 11/40/7 12/104/7 13/41/7 +f 87/43/7 88/105/7 62/44/7 +f 49/46/7 14/107/7 63/47/7 +f 18/49/8 69/90/8 19/50/8 +f 21/52/8 51/91/8 22/53/8 +f 52/55/8 70/92/8 37/56/8 +f 24/58/8 58/93/8 38/59/8 +f 72/61/8 25/94/8 39/62/8 +f 60/64/8 75/95/8 41/65/8 +f 61/67/8 76/96/8 44/68/8 +f 27/70/8 65/97/8 28/71/8 +f 66/73/8 90/115/8 89/74/8 +f 64/76/8 92/116/8 91/77/8 +f 69/117/5 18/118/5 16/119/5 +f 16/119/5 15/120/5 67/121/5 +f 67/121/5 78/122/5 80/123/5 +f 80/123/5 81/124/5 50/125/5 +f 50/125/5 82/126/5 53/127/5 +f 53/127/5 54/128/5 55/129/5 +f 55/129/5 56/130/5 57/131/5 +f 57/131/5 86/132/5 59/133/5 +f 59/133/5 10/134/5 13/79/5 +f 13/79/5 12/135/5 62/80/5 +f 62/80/5 88/136/5 63/137/5 +f 63/137/5 14/138/5 92/139/5 +f 64/140/5 90/141/5 65/142/5 +f 90/141/5 66/143/5 65/142/5 +f 63/137/5 92/139/5 64/140/5 +f 62/80/5 63/137/5 65/142/5 +f 63/137/5 64/140/5 65/142/5 +f 65/142/5 27/144/5 76/81/5 +f 76/81/5 61/145/5 75/146/5 +f 75/146/5 60/147/5 25/148/5 +f 25/148/5 72/149/5 58/150/5 +f 58/150/5 24/151/5 70/152/5 +f 70/152/5 52/153/5 51/154/5 +f 51/154/5 21/155/5 69/117/5 +f 69/117/5 16/119/5 80/123/5 +f 16/119/5 67/121/5 80/123/5 +f 80/123/5 50/125/5 69/117/5 +f 53/127/5 55/129/5 51/154/5 +f 55/129/5 57/131/5 70/152/5 +f 51/154/5 55/129/5 70/152/5 +f 50/125/5 53/127/5 51/154/5 +f 51/154/5 69/117/5 50/125/5 +f 58/150/5 70/152/5 57/131/5 +f 75/146/5 25/148/5 59/133/5 +f 25/148/5 58/150/5 57/131/5 +f 65/142/5 76/81/5 62/80/5 +f 76/81/5 75/146/5 13/79/5 +f 57/131/5 59/133/5 25/148/5 +f 59/133/5 13/79/5 75/146/5 +f 38/156/1 73/157/1 39/158/1 +f 39/158/1 74/159/1 41/160/1 +f 41/160/1 26/161/1 44/162/1 +f 44/162/1 46/163/1 28/164/1 +f 28/164/1 29/165/1 89/166/1 +f 47/167/1 91/168/1 49/169/1 +f 28/164/1 89/166/1 47/167/1 +f 41/160/1 44/162/1 45/170/1 +f 44/162/1 28/164/1 45/170/1 +f 38/156/1 39/158/1 40/171/1 +f 39/158/1 41/160/1 43/172/1 +f 37/173/1 71/174/1 38/156/1 +f 22/175/1 23/176/1 37/173/1 +f 19/84/1 20/177/1 22/175/1 +f 17/178/1 31/179/1 19/84/1 +f 30/180/1 68/181/1 17/178/1 +f 79/182/1 77/183/1 30/180/1 +f 33/83/1 32/184/1 79/182/1 +f 34/82/1 35/185/1 33/83/1 +f 9/186/1 36/187/1 34/82/1 +f 84/188/1 83/189/1 9/186/1 +f 40/171/1 85/190/1 84/188/1 +f 43/172/1 42/191/1 40/171/1 +f 45/170/1 11/192/1 43/172/1 +f 48/193/1 87/194/1 45/170/1 +f 47/167/1 49/169/1 48/193/1 +f 28/164/1 47/167/1 48/193/1 +f 45/170/1 28/164/1 48/193/1 +f 22/175/1 37/173/1 9/186/1 +f 37/173/1 38/156/1 84/188/1 +f 39/158/1 43/172/1 40/171/1 +f 43/172/1 41/160/1 45/170/1 +f 40/171/1 84/188/1 38/156/1 +f 37/173/1 84/188/1 9/186/1 +f 30/180/1 17/178/1 79/182/1 +f 17/178/1 19/84/1 33/83/1 +f 19/84/1 22/175/1 34/82/1 +f 9/186/1 34/82/1 22/175/1 +f 33/83/1 79/182/1 17/178/1 +f 16/85/8 17/89/8 68/86/8 +f 15/87/9 68/86/9 30/88/9 +f 16/85/9 18/49/9 31/51/9 +f 69/90/9 21/52/9 20/54/9 +f 51/91/9 52/55/9 23/57/9 +f 70/92/9 24/58/9 71/60/9 +f 58/93/9 72/61/9 73/63/9 +f 25/94/9 60/64/9 74/66/9 +f 75/95/9 61/67/9 26/69/9 +f 76/96/9 27/70/9 46/72/9 +f 65/97/9 66/73/9 29/75/9 +f 33/27/10 50/26/10 81/98/10 +f 34/30/10 53/29/10 82/99/10 +f 9/33/10 55/32/10 54/100/10 +f 84/36/10 57/35/10 56/101/10 +f 40/39/10 59/38/10 86/102/10 +f 42/37/10 43/42/10 13/41/10 +f 45/45/10 62/44/10 12/104/10 +f 48/48/10 63/47/10 88/105/10 +f 89/74/10 90/115/10 64/76/10 +f 91/77/10 92/116/10 14/107/10 +f 80/23/10 78/114/10 77/19/10 diff --git a/nodes.lua b/nodes.lua index 3957f2d..dd9b5c3 100644 --- a/nodes.lua +++ b/nodes.lua @@ -1304,7 +1304,9 @@ Everness:register_node('everness:blue_crying_obsidian', { -- MCL pickaxey = 5, building_block = 1, - material_stone = 1 + material_stone = 1, + -- Everness + everness_obsidian = 1 }, _mcl_blast_resistance = 1200, _mcl_hardness = 50, @@ -1322,7 +1324,9 @@ Everness:register_node('everness:blue_weeping_obsidian', { -- MCL pickaxey = 5, building_block = 1, - material_stone = 1 + material_stone = 1, + -- Everness + everness_obsidian = 1 }, _mcl_blast_resistance = 1200, _mcl_hardness = 50, @@ -1342,7 +1346,9 @@ Everness:register_node('everness:weeping_obsidian', { -- MCL pickaxey = 5, building_block = 1, - material_stone = 1 + material_stone = 1, + -- Everness + everness_obsidian = 1 }, _mcl_blast_resistance = 1200, _mcl_hardness = 50, @@ -9353,7 +9359,7 @@ Everness:register_node('everness:floating_crystal', { minetest.sound_play( 'everness_thin_glass_footstep', { - gain = 1.0, + gain = 0.7, max_hear_distance = 16, pos = pos }, diff --git a/textures/everness_hammer_item.png b/textures/everness_hammer_item.png new file mode 100644 index 0000000..031997c Binary files /dev/null and b/textures/everness_hammer_item.png differ diff --git a/textures/everness_hammer_mesh.png b/textures/everness_hammer_mesh.png new file mode 100644 index 0000000..183a803 Binary files /dev/null and b/textures/everness_hammer_mesh.png differ diff --git a/tools.lua b/tools.lua index 148a8ec..e3093d1 100644 --- a/tools.lua +++ b/tools.lua @@ -212,3 +212,93 @@ minetest.register_tool('everness:shell_of_underwater_breathing', { -- MCL _mcl_toollike_wield = true, }) + +-- +-- Hammer +-- + +minetest.register_on_mods_loaded(function() + for name, def in pairs(minetest.registered_nodes) do + if def.walkable and def.pointable and def.diggable then + local prev_after_dig = def.after_dig_node + + local func = function(pos, node, metadata, digger) + Everness.hammer_after_dig_node(pos, node, metadata, digger, def.can_dig) + end + + if prev_after_dig then + func = function(pos, node, metadata, digger) + prev_after_dig(pos, node, metadata, digger) + Everness.hammer_after_dig_node(pos, node, metadata, digger, def.can_dig) + end + end + + minetest.override_item(name, { after_dig_node = func }) + + Everness.hammer_cid_data[minetest.get_content_id(name)] = { + name = name, + drops = def.drops, + can_dig = def.can_dig, + sounds = def.sounds + } + end + end +end) + +minetest.register_node('everness:hammer', { + description = S('Hammer'), + mod_origin = 'evermess', + inventory_image = 'everness_hammer_item.png', + use_texture_alpha = 'clip', + drawtype = 'mesh', + mesh = 'everness_hammer_pick.obj', + tiles = { 'everness_hammer_mesh.png' }, + wield_scale = { x = 2, y = 2, z = 2 }, + node_placement_prediction = '', + range = 4.0, + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level = 3, + groupcaps = { + cracky = { times = { [1] = 2.0, [2] = 1.0, [3] = 0.50 }, uses = 30, maxlevel = 3 }, + }, + damage_groups = { fleshy = 5 }, + -- MCL + punch_attack_uses = 781, + }, + stack_max = 1, + sound = { breaks = 'everness_tool_breaks' }, + -- MCL + _mcl_toollike_wield = true, + groups = { + -- MCL + tool = 1, + dig_speed_class = 5 + }, + -- MCL + _mcl_diggroups = { + pickaxey = { speed = 8, level = 5, uses = 1562 } + }, + on_place = function(itemstack, placer, pointed_thing) + -- disable placing (returns `nil`) + if pointed_thing.type == 'node' then + local pos = minetest.get_pointed_thing_position(pointed_thing) + + if not pos or not placer then + return + end + + local pointed_node = minetest.get_node(pos) + local pointed_node_def = minetest.registered_nodes[pointed_node.name] + + if not pointed_node then + return + end + + -- check if we have to use default on_place first + if pointed_node_def.on_rightclick then + return pointed_node_def.on_rightclick(pos, pointed_node, placer, itemstack, pointed_thing) + end + end + end +})