From da692cd4bb3a1f90177d7057994d02fc8bc8cc95 Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 21 Sep 2016 17:17:31 -0500 Subject: [PATCH] Add wood bucket --- mods/bucket_wood/README.txt | 26 +++ mods/bucket_wood/depends.txt | 2 + mods/bucket_wood/init.lua | 187 ++++++++++++++++++ mods/bucket_wood/textures/bucket_wood.png | Bin 0 -> 580 bytes .../textures/bucket_wood_water.png | Bin 0 -> 534 bytes 5 files changed, 215 insertions(+) create mode 100644 mods/bucket_wood/README.txt create mode 100644 mods/bucket_wood/depends.txt create mode 100644 mods/bucket_wood/init.lua create mode 100644 mods/bucket_wood/textures/bucket_wood.png create mode 100644 mods/bucket_wood/textures/bucket_wood_water.png diff --git a/mods/bucket_wood/README.txt b/mods/bucket_wood/README.txt new file mode 100644 index 0000000..7dad641 --- /dev/null +++ b/mods/bucket_wood/README.txt @@ -0,0 +1,26 @@ +Minetest 0.4 mod: bucket +========================= + +License of source code: +----------------------- +Copyright (C) 2011-2012 Kahrl +Copyright (C) 2011-2012 celeron55, Perttu Ahola + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +http://www.gnu.org/licenses/lgpl-2.1.html + +License of media (textures and sounds) +-------------------------------------- +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +http://creativecommons.org/licenses/by-sa/3.0/ + +Authors of media files +----------------------- +Everything not listed in here: +Copyright (C) 2010-2012 celeron55, Perttu Ahola + + diff --git a/mods/bucket_wood/depends.txt b/mods/bucket_wood/depends.txt new file mode 100644 index 0000000..3a7daa1 --- /dev/null +++ b/mods/bucket_wood/depends.txt @@ -0,0 +1,2 @@ +default + diff --git a/mods/bucket_wood/init.lua b/mods/bucket_wood/init.lua new file mode 100644 index 0000000..8c6e29c --- /dev/null +++ b/mods/bucket_wood/init.lua @@ -0,0 +1,187 @@ +-- Minetest 0.4 mod: bucket +-- See README.txt for licensing and other information. + +local LIQUID_MAX = 8 --The number of water levels when liquid_finite is enabled + +minetest.register_craft({ + output = 'bucket_wood:bucket_empty 1', + recipe = { + {'group:wood', '', 'group:wood'}, + {'', 'group:wood', ''}, + } +}) + +bucket_wood = {} +bucket_wood.liquids = {} +bucket_wood.swaps = {} + +local function check_protection(pos, name, text) + if minetest.is_protected(pos, name) then + minetest.log("action", (name ~= "" and name or "A mod") + .. " tried to " .. text + .. " at protected position " + .. minetest.pos_to_string(pos) + .. " with a bucket") + minetest.record_protection_violation(pos, name) + return true + end + return false +end + +-- Register a new liquid +-- source = name of the source node +-- flowing = name of the flowing node +-- itemname = name of the new bucket item (or nil if liquid is not takeable) +-- inventory_image = texture of the new bucket item (ignored if itemname == nil) +-- This function can be called from any mod (that depends on bucket). +function bucket_wood.register_liquid(source, flowing, itemname, inventory_image, name) + bucket_wood.liquids[source] = { + source = source, + flowing = flowing, + itemname = itemname, + } + bucket_wood.liquids[flowing] = bucket_wood.liquids[source] + + if itemname ~= nil then + minetest.register_craftitem(itemname, { + description = name, + inventory_image = inventory_image, + stack_max = 1, + liquids_pointable = true, + groups = {not_in_creative_inventory=1}, + on_place = function(itemstack, user, pointed_thing) + -- Must be pointing to node + if pointed_thing.type ~= "node" then + return + end + + local node = minetest.get_node_or_nil(pointed_thing.under) + local ndef + if node then + ndef = minetest.registered_nodes[node.name] + end + -- Call on_rightclick if the pointed node defines it + if ndef and ndef.on_rightclick and + user and not user:get_player_control().sneak then + return ndef.on_rightclick( + pointed_thing.under, + node, user, + itemstack) or itemstack + end + + local place_liquid = function(pos, node, source, flowing, fullness) + if bucket_wood.swaps[source] ~= nil then + source = bucket_wood.swaps[source] + end + if bucket_wood.swaps[flowing] ~= nil then + flowing = bucket_wood.swaps[flowing] + end + if check_protection(pos, + user and user:get_player_name() or "", + "place "..source) then + return + end + if math.floor(fullness/128) == 1 or + not minetest.setting_getbool("liquid_finite") then + minetest.add_node(pos, {name=source, + param2=fullness}) + return + elseif node.name == flowing then + fullness = fullness + node.param2 + elseif node.name == source then + fullness = LIQUID_MAX + end + + if fullness >= LIQUID_MAX then + minetest.add_node(pos, {name=source, + param2=LIQUID_MAX}) + else + minetest.add_node(pos, {name=flowing, + param2=fullness}) + end + end + + -- Check if pointing to a buildable node + local fullness = tonumber(itemstack:get_metadata()) + if not fullness then fullness = LIQUID_MAX end + + if ndef and ndef.buildable_to then + -- buildable; replace the node + place_liquid(pointed_thing.under, node, + source, flowing, fullness) + else + -- not buildable to; place the liquid above + -- check if the node above can be replaced + local node = minetest.get_node_or_nil(pointed_thing.above) + if node and minetest.registered_nodes[node.name].buildable_to then + place_liquid(pointed_thing.above, + node, source, + flowing, fullness) + else + -- do not remove the bucket with the liquid + return + end + end + return {name="bucket_wood:bucket_empty"} + end + }) + end +end + +function bucket_wood.register_swap(source, flowing, new_source, new_flowing) + bucket_wood.swaps[source] = new_source + bucket_wood.swaps[flowing] = new_flowing +end + +minetest.register_craftitem("bucket_wood:bucket_empty", { + description = "Empty Wooden Bucket", + inventory_image = "bucket_wood.png", + stack_max = 1, + liquids_pointable = true, + on_use = function(itemstack, user, pointed_thing) + -- Must be pointing to node + if pointed_thing.type ~= "node" then + return + end + -- Check if pointing to a liquid source + local node = minetest.get_node(pointed_thing.under) + local liquiddef = bucket_wood.liquids[node.name] + if liquiddef ~= nil and liquiddef.itemname ~= nil and + (node.name == liquiddef.source or + (node.name == liquiddef.flowing and + minetest.setting_getbool("liquid_finite"))) then + if check_protection(pointed_thing.under, + user:get_player_name(), + "take ".. node.name) then + return + end + + minetest.add_node(pointed_thing.under, {name="air"}) + + if node.name == liquiddef.source then + node.param2 = LIQUID_MAX + end + return ItemStack({name = liquiddef.itemname, + metadata = tostring(node.param2)}) + end + end, + groups = { guide = GUIDE_TOOLS }, +}) + +bucket_wood.register_liquid( + "default:water_source", + "default:water_flowing", + "bucket_wood:bucket_water", + "bucket_wood_water.png", + "Wooden Water Bucket" +) + +bucket_wood.register_liquid( + "default:mg_water_source", + "default:mg_water_flowing", + "bucket_wood:bucket_water", + "bucket_wood_water.png", + "Wooden Water Bucket" +) + +bucket_wood.register_swap("default:mg_water_source","default:mg_water_flowing","default:water_source","default:water_flowing") diff --git a/mods/bucket_wood/textures/bucket_wood.png b/mods/bucket_wood/textures/bucket_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..01e321249ded4538ed75af3506b37266fa6e50c5 GIT binary patch literal 580 zcmV-K0=xZ*P)Lj@7;;gIara!>J!ES=!FX*B;*rkTarrJ96NM?&CeYQxdgZFuVM&6z1b6c9q7?8n@@B7(iv)vJ_$>6>gW`2 zH@hr7S*PCYQJR~i@}adG;1)9a=C$+Kv83j8SbSVz5DfX!@c}qdn&$F_vly}D_Pu8` zyS@OhMu6gM79)FvsIx&blVkqsId&wNrpcre;xz|EehbSG6mlt=-S1#y1bFqXF3Jy= ziK3V&QsckEa7Z+aQA*Jcb3A(Sp6aLe*tzj@3eVTJh(k%x|B4EG#DPSpkc=Zp*$UH8 zI7w?)iQu7YgPh?%%yZkSp48pY>N2#%ada{t*CI zR~EQ+`zA71Jbd!*G(ml-f~;J|^!F%5RUX{A&Nl^~=W#yN#K{#0+NJocQJtR*R!fK*W zP!24fw1g%9gfH@Uqn>TFm_9c}Ih-O00&-)p)}h8J>x~WGeB3{iKy2^ESZfhNV6DUR zeLPPfguqSs9XaV-kDhLkrka6Lj5KsdA&(n796#A#aixC20S<5rvt?JWRa|W@a{QP0 Y0TjTfANeb7e*gdg07*qoM6N<$g2nUQ6951J literal 0 HcmV?d00001