aboutsummaryrefslogtreecommitdiff
path: root/games/minimal/mods/bucket/init.lua
blob: 8ed9da5228de4387ab776db9bcda39db4a8d761f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
-- bucket (Minetest 0.4 mod)
-- A bucket, which can pick up water and lava

minetest.register_alias("bucket", "bucket:bucket_empty")
minetest.register_alias("bucket_water", "bucket:bucket_water")
minetest.register_alias("bucket_lava", "bucket:bucket_lava")

minetest.register_craft({
	output = 'bucket:bucket_empty 1',
	recipe = {
		{'default:steel_ingot', '', 'default:steel_ingot'},
		{'', 'default:steel_ingot', ''},
	}
})

bucket = {}
bucket.liquids = {}

-- 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.register_liquid(source, flowing, itemname, inventory_image)
	bucket.liquids[source] = {
		source = source,
		flowing = flowing,
		itemname = itemname,
	}
	bucket.liquids[flowing] = bucket.liquids[source]

	if itemname ~= nil then
		minetest.register_craftitem(itemname, {
			inventory_image = inventory_image,
			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
				n = minetest.env:get_node(pointed_thing.under)
				if bucket.liquids[n.name] == nil then
					-- Not a liquid
					minetest.env:add_node(pointed_thing.above, {name=source})
				elseif n.name ~= source then
					-- It's a liquid
					minetest.env:add_node(pointed_thing.under, {name=source})
				end
				return {name="bucket:bucket_empty"}
			end
		})
	end
end

minetest.register_craftitem("bucket:bucket_empty", {
	inventory_image = "bucket.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
		n = minetest.env:get_node(pointed_thing.under)
		liquiddef = bucket.liquids[n.name]
		if liquiddef ~= nil and liquiddef.source == n.name and liquiddef.itemname ~= nil then
			minetest.env:add_node(pointed_thing.under, {name="air"})
			return {name=liquiddef.itemname}
		end
	end,
})

bucket.register_liquid(
	"default:water_source",
	"default:water_flowing",
	"bucket:bucket_water",
	"bucket_water.png"
)

bucket.register_liquid(
	"default:lava_source",
	"default:lava_flowing",
	"bucket:bucket_lava",
	"bucket_lava.png"
)

minetest.register_craft({
	type = "fuel",
	recipe = "default:bucket_lava",
	burntime = 60,
})
/span>fgettext("Creative mode"), "creative") .. ",padding=1;" .. image_column(fgettext("Damage enabled"), "damage") .. ",padding=0.25;" .. image_column(fgettext("PvP enabled"), "pvp") .. ",padding=0.25;" .. "color,span=1;" .. "text,padding=1]" .. -- name "table[-0.05,0;9.2,2.75;favourites;" if #menudata.favorites > 0 then local favs = core.get_favorites("local") if #favs > 0 then for i = 1, #favs do for j = 1, #menudata.favorites do if menudata.favorites[j].address == favs[i].address and menudata.favorites[j].port == favs[i].port then table.insert(menudata.favorites, i, table.remove(menudata.favorites, j)) end end if favs[i].address ~= menudata.favorites[i].address then table.insert(menudata.favorites, i, favs[i]) end end end retval = retval .. render_serverlist_row(menudata.favorites[1], (#favs > 0)) for i = 2, #menudata.favorites do retval = retval .. "," .. render_serverlist_row(menudata.favorites[i], (i <= #favs)) end end if tabdata.fav_selected then retval = retval .. ";" .. tabdata.fav_selected .. "]" else retval = retval .. ";0]" end -- separator retval = retval .. "box[-0.28,3.75;12.4,0.1;#FFFFFF]" -- checkboxes retval = retval .. "checkbox[8.0,3.9;cb_creative;".. fgettext("Creative Mode") .. ";" .. dump(core.setting_getbool("creative_mode")) .. "]".. "checkbox[8.0,4.4;cb_damage;".. fgettext("Enable Damage") .. ";" .. dump(core.setting_getbool("enable_damage")) .. "]" -- buttons retval = retval .. "button[0,3.7;8,1.5;btn_start_singleplayer;" .. fgettext("Start Singleplayer") .. "]" .. "button[0,4.5;8,1.5;btn_config_sp_world;" .. fgettext("Config mods") .. "]" return retval end -------------------------------------------------------------------------------- local function main_button_handler(tabview, fields, name, tabdata) if fields.btn_start_singleplayer then gamedata.selected_world = gamedata.worldindex gamedata.singleplayer = true core.start() return true end if fields.favourites then local event = core.explode_table_event(fields.favourites) if event.type == "CHG" then if event.row <= #menudata.favorites then gamedata.fav = false local favs = core.get_favorites("local") local fav = menudata.favorites[event.row] local address = fav.address local port = fav.port gamedata.serverdescription = fav.description for i = 1, #favs do if fav.address == favs[i].address and fav.port == favs[i].port then gamedata.fav = true end end if address and port then core.setting_set("address", address) core.setting_set("remote_port", port) end tabdata.fav_selected = event.row end return true end end if fields.btn_delete_favorite then local current_favourite = core.get_table_index("favourites") if not current_favourite then return end core.delete_favorite(current_favourite) asyncOnlineFavourites() tabdata.fav_selected = nil core.setting_set("address", "") core.setting_set("remote_port", "30000") return true end if fields.cb_creative then