From fd914ba75d8dd21cd595730bf7ccdfb72dabf68a Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Tue, 28 May 2013 23:49:17 +0200 Subject: [PATCH] Add shears --- mods/default/crafting.lua | 8 +++ mods/default/functions.lua | 16 ++++- mods/default/nodes.lua | 80 +++++++++++++++++++---- mods/default/textures/default_shears.png | Bin 0 -> 407 bytes mods/default/tools.lua | 18 +++++ 5 files changed, 108 insertions(+), 14 deletions(-) create mode 100644 mods/default/textures/default_shears.png diff --git a/mods/default/crafting.lua b/mods/default/crafting.lua index 738ed77..a018006 100644 --- a/mods/default/crafting.lua +++ b/mods/default/crafting.lua @@ -227,6 +227,14 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = 'default:shears', + recipe = { + {'', 'default:iron_ingot'}, + {'default:iron_ingot', ''}, + } +}) + minetest.register_craft({ output = 'default:rail 16', recipe = { diff --git a/mods/default/functions.lua b/mods/default/functions.lua index fc00647..7561c9c 100644 --- a/mods/default/functions.lua +++ b/mods/default/functions.lua @@ -297,6 +297,18 @@ minetest.register_abm({ -- Drop stuff other than the node itself itemstacks = minetest.get_node_drops(n0.name) for _, itemname in ipairs(itemstacks) do + if n0.name == "default:leaves" then + if math.random(1, 30) == 1 then + itemname = "default:apple" + end + if math.random(1, 20) == 1 then + itemname = "default:sapling" + end + elseif n0.name == "default:jungleleaves" then + if math.random(1, 20) == 1 then + itemname = "default:junglesapling" + end + end if minetest.get_item_group(n0.name, "leafdecay_drop") ~= 0 or itemname ~= n0.name then local p_drop = { @@ -305,7 +317,9 @@ minetest.register_abm({ z = p0.z - 0.5 + math.random(), } local obj = minetest.env:add_item(p_drop, itemname) - obj:get_luaentity().collect = true + if obj then + obj:get_luaentity().collect = true + end end end -- Remove node diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index cf6aeab..dd59807 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -178,14 +178,40 @@ minetest.register_node("default:jungleleaves", { tiles = {"default_jungleleaves.png"}, paramtype = "light", groups = {snappy=default.dig.leaves, leafdecay=3, flammable=2, leaves=1}, - drop = { - max_items = 1, - items = { - {items = {'default:junglesapling'},rarity = 20}, - } - }, + drop = "", stack_max = 64, sounds = default.node_sound_leaves_defaults(), + after_dig_node = function(pos, oldnode, oldmetadata, digger) + local nn = "default:jungleleaves" + if math.random(1, 20) == 1 then + nn = "default:junglesapling" + end + if minetest.setting_getbool("creative_mode") then + local inv = digger:get_inventory() + if not inv:contains_item("main", ItemStack(nn)) then + inv:add_item("main", ItemStack(nn)) + end + else + if digger:get_wielded_item():get_name() == "default:shears" or nn ~= "default:jungleleaves" then + local obj = minetest.env:add_item(pos, nn) + if obj ~= nil then + obj:get_luaentity().collect = true + local x = math.random(1, 5) + if math.random(1,2) == 1 then + x = -x + end + local z = math.random(1, 5) + if math.random(1,2) == 1 then + z = -z + end + obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z}) + end + end + end + end, + after_place_node = function(pos, placer, itemstack) + minetest.env:set_node(pos, {name="default:jungleleaves", param2=1}) + end, }) minetest.register_node("default:junglesapling", { @@ -237,15 +263,43 @@ minetest.register_node("default:leaves", { tiles = {"default_leaves.png"}, paramtype = "light", groups = {snappy=default.dig.leaves, leafdecay=3, flammable=2, leaves=1}, - drop = { - max_items = 1, - items = { - {items = {'default:sapling'},rarity = 20}, - {items = {'default:apple'},rarity = 30}, - } - }, + drop = "", stack_max = 64, sounds = default.node_sound_leaves_defaults(), + after_dig_node = function(pos, oldnode, oldmetadata, digger) + local nn = "default:leaves" + if math.random(1, 30) == 1 then + nn = "default:apple" + end + if math.random(1, 20) == 1 then + nn = "default:sapling" + end + if minetest.setting_getbool("creative_mode") then + local inv = digger:get_inventory() + if not inv:contains_item("main", ItemStack(nn)) then + inv:add_item("main", ItemStack(nn)) + end + else + if digger:get_wielded_item():get_name() == "default:shears" or nn ~= "default:leaves" then + local obj = minetest.env:add_item(pos, nn) + if obj ~= nil then + obj:get_luaentity().collect = true + local x = math.random(1, 5) + if math.random(1,2) == 1 then + x = -x + end + local z = math.random(1, 5) + if math.random(1,2) == 1 then + z = -z + end + obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z}) + end + end + end + end, + after_place_node = function(pos, placer, itemstack) + minetest.env:set_node(pos, {name="default:leaves", param2=1}) + end, }) minetest.register_node("default:cactus", { diff --git a/mods/default/textures/default_shears.png b/mods/default/textures/default_shears.png new file mode 100644 index 0000000000000000000000000000000000000000..4228f985ada08e9be76c5d9b810ca88bd9630e37 GIT binary patch literal 407 zcmV;I0cie-P)CO82lPo67zdwkJQD`Aw2Z$8q3&NTSy2 z@9Vnax-Lx91Q7uM|38of$xfh@;)Nt}o+nfl=Xs*midw7J3{lO_zV86w1rMYFXm7|+ zYsI>*$T_=!h`e332a?{9fh0r(stN$eIY*m~WP2bfK$<~l_Kj#lfeMmIM6A`8bM|}g z^Ci?3hv)V{yp@4uH-l12v%y(AQ8WzoXA5BlZQC|?q^ilLA0Vle;zEO|+EG=f8+D#% zgCqcmkQk(H$ExZ<5)q8!=zZV!{l6eR?fkapE=cJ^kP?7oPQ#i_P*s#tuq=z;{}iNdF44iZZBSKz{{p=*3=9Mk?f3uy002ovPDHLkV1k#p BsUiRX literal 0 HcmV?d00001 diff --git a/mods/default/tools.lua b/mods/default/tools.lua index b59a4cd..cf06b02 100644 --- a/mods/default/tools.lua +++ b/mods/default/tools.lua @@ -463,3 +463,21 @@ minetest.register_tool("default:sword_diamond", { damage_groups = {fleshy=8}, } }) + +-- +-- Shears +-- +minetest.register_tool("default:shears", { + description = "Shears", + inventory_image = "default_shears.png", + tool_capabilities = { + groupcaps = get_groupcaps(0, "snappy", { + times = { + [default.dig.leaves] = 0.05, + [default.dig.wool] = 0.25, + }, uses=238} + ), + full_punch_interval = 1, + damage_groups = {fleshy=1}, + } +})