1-- vessels/init.lua 2 3-- Minetest 0.4 mod: vessels 4-- See README.txt for licensing and other information. 5 6-- Load support for MT game translation. 7local S = minetest.get_translator("vessels") 8 9 10local vessels_shelf_formspec = 11 "size[8,7;]" .. 12 "list[context;vessels;0,0.3;8,2;]" .. 13 "list[current_player;main;0,2.85;8,1;]" .. 14 "list[current_player;main;0,4.08;8,3;8]" .. 15 "listring[context;vessels]" .. 16 "listring[current_player;main]" .. 17 default.get_hotbar_bg(0, 2.85) 18 19local function update_vessels_shelf(pos) 20 local meta = minetest.get_meta(pos) 21 local inv = meta:get_inventory() 22 local invlist = inv:get_list("vessels") 23 24 local formspec = vessels_shelf_formspec 25 -- Inventory slots overlay 26 local vx, vy = 0, 0.3 27 local n_items = 0 28 for i = 1, 16 do 29 if i == 9 then 30 vx = 0 31 vy = vy + 1 32 end 33 if not invlist or invlist[i]:is_empty() then 34 formspec = formspec .. 35 "image[" .. vx .. "," .. vy .. ";1,1;vessels_shelf_slot.png]" 36 else 37 local stack = invlist[i] 38 if not stack:is_empty() then 39 n_items = n_items + stack:get_count() 40 end 41 end 42 vx = vx + 1 43 end 44 meta:set_string("formspec", formspec) 45 if n_items == 0 then 46 meta:set_string("infotext", S("Empty Vessels Shelf")) 47 else 48 meta:set_string("infotext", S("Vessels Shelf (@1 items)", n_items)) 49 end 50end 51 52minetest.register_node("vessels:shelf", { 53 description = S("Vessels Shelf"), 54 tiles = {"default_wood.png", "default_wood.png", "default_wood.png", 55 "default_wood.png", "vessels_shelf.png", "vessels_shelf.png"}, 56 paramtype2 = "facedir", 57 is_ground_content = false, 58 groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, 59 sounds = default.node_sound_wood_defaults(), 60 61 on_construct = function(pos) 62 local meta = minetest.get_meta(pos) 63 update_vessels_shelf(pos) 64 local inv = meta:get_inventory() 65 inv:set_size("vessels", 8 * 2) 66 end, 67 can_dig = function(pos,player) 68 local inv = minetest.get_meta(pos):get_inventory() 69 return inv:is_empty("vessels") 70 end, 71 allow_metadata_inventory_put = function(pos, listname, index, stack, player) 72 if minetest.get_item_group(stack:get_name(), "vessel") ~= 0 then 73 return stack:get_count() 74 end 75 return 0 76 end, 77 on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) 78 minetest.log("action", player:get_player_name() .. 79 " moves stuff in vessels shelf at ".. minetest.pos_to_string(pos)) 80 update_vessels_shelf(pos) 81 end, 82 on_metadata_inventory_put = function(pos, listname, index, stack, player) 83 minetest.log("action", player:get_player_name() .. 84 " moves stuff to vessels shelf at ".. minetest.pos_to_string(pos)) 85 update_vessels_shelf(pos) 86 end, 87 on_metadata_inventory_take = function(pos, listname, index, stack, player) 88 minetest.log("action", player:get_player_name() .. 89 " takes stuff from vessels shelf at ".. minetest.pos_to_string(pos)) 90 update_vessels_shelf(pos) 91 end, 92 on_blast = function(pos) 93 local drops = {} 94 default.get_inventory_drops(pos, "vessels", drops) 95 drops[#drops + 1] = "vessels:shelf" 96 minetest.remove_node(pos) 97 return drops 98 end, 99}) 100 101minetest.register_craft({ 102 output = "vessels:shelf", 103 recipe = { 104 {"group:wood", "group:wood", "group:wood"}, 105 {"group:vessel", "group:vessel", "group:vessel"}, 106 {"group:wood", "group:wood", "group:wood"}, 107 } 108}) 109 110minetest.register_node("vessels:glass_bottle", { 111 description = S("Empty Glass Bottle"), 112 drawtype = "plantlike", 113 tiles = {"vessels_glass_bottle.png"}, 114 inventory_image = "vessels_glass_bottle.png", 115 wield_image = "vessels_glass_bottle.png", 116 paramtype = "light", 117 is_ground_content = false, 118 walkable = false, 119 selection_box = { 120 type = "fixed", 121 fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} 122 }, 123 groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, 124 sounds = default.node_sound_glass_defaults(), 125}) 126 127minetest.register_craft( { 128 output = "vessels:glass_bottle 10", 129 recipe = { 130 {"default:glass", "", "default:glass"}, 131 {"default:glass", "", "default:glass"}, 132 {"", "default:glass", ""} 133 } 134}) 135 136minetest.register_node("vessels:drinking_glass", { 137 description = S("Empty Drinking Glass"), 138 drawtype = "plantlike", 139 tiles = {"vessels_drinking_glass.png"}, 140 inventory_image = "vessels_drinking_glass_inv.png", 141 wield_image = "vessels_drinking_glass.png", 142 paramtype = "light", 143 is_ground_content = false, 144 walkable = false, 145 selection_box = { 146 type = "fixed", 147 fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} 148 }, 149 groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, 150 sounds = default.node_sound_glass_defaults(), 151}) 152 153minetest.register_craft( { 154 output = "vessels:drinking_glass 14", 155 recipe = { 156 {"default:glass", "", "default:glass"}, 157 {"default:glass", "", "default:glass"}, 158 {"default:glass", "default:glass", "default:glass"} 159 } 160}) 161 162minetest.register_node("vessels:steel_bottle", { 163 description = S("Empty Heavy Steel Bottle"), 164 drawtype = "plantlike", 165 tiles = {"vessels_steel_bottle.png"}, 166 inventory_image = "vessels_steel_bottle.png", 167 wield_image = "vessels_steel_bottle.png", 168 paramtype = "light", 169 is_ground_content = false, 170 walkable = false, 171 selection_box = { 172 type = "fixed", 173 fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} 174 }, 175 groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, 176 sounds = default.node_sound_defaults(), 177}) 178 179minetest.register_craft( { 180 output = "vessels:steel_bottle 5", 181 recipe = { 182 {"default:steel_ingot", "", "default:steel_ingot"}, 183 {"default:steel_ingot", "", "default:steel_ingot"}, 184 {"", "default:steel_ingot", ""} 185 } 186}) 187 188 189-- Glass and steel recycling 190 191minetest.register_craftitem("vessels:glass_fragments", { 192 description = S("Glass Fragments"), 193 inventory_image = "vessels_glass_fragments.png", 194}) 195 196minetest.register_craft( { 197 type = "shapeless", 198 output = "vessels:glass_fragments", 199 recipe = { 200 "vessels:glass_bottle", 201 "vessels:glass_bottle", 202 }, 203}) 204 205minetest.register_craft( { 206 type = "shapeless", 207 output = "vessels:glass_fragments", 208 recipe = { 209 "vessels:drinking_glass", 210 "vessels:drinking_glass", 211 }, 212}) 213 214minetest.register_craft({ 215 type = "cooking", 216 output = "default:glass", 217 recipe = "vessels:glass_fragments", 218}) 219 220minetest.register_craft( { 221 type = "cooking", 222 output = "default:steel_ingot", 223 recipe = "vessels:steel_bottle", 224}) 225 226minetest.register_craft({ 227 type = "fuel", 228 recipe = "vessels:shelf", 229 burntime = 30, 230}) 231 232-- Register glass fragments as dungeon loot 233if minetest.global_exists("dungeon_loot") then 234 dungeon_loot.register({ 235 name = "vessels:glass_fragments", chance = 0.35, count = {1, 4} 236 }) 237end 238