aboutsummaryrefslogtreecommitdiff
path: root/advtrains_luaautomation/chatcmds.lua
blob: 2d0c69d73168913ef7876250cf1261bbdf76150b (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
--chatcmds.lua
--Registers commands to modify the init and step code for LuaAutomation

--position helper.
--punching a node will result in that position being saved and inserted into a text field on the top of init form.
local punchpos={}

minetest.register_on_punchnode(function(pos, node, player, pointed_thing)
	local pname=player:get_player_name()
	punchpos[pname]=pos
end)

local function get_init_form(env, pname)
	local err = env.init_err or ""
	local code = env.init_code or ""
	local ppos=punchpos[pname]
	local pp=""
	if ppos then
		pp="POS"..minetest.pos_to_string(ppos)
	end
	local form = "size[10,10]button[0,0;2,1;run;Run InitCode]button[2,0;2,1;cls;Clear S]"
		.."button[4,0;2,1;save;Save] button[6,0;2,1;del;Delete Env.] field[8.1,0.5;2,1;punchpos;Last punched position;"..pp.."]"
		.."textarea[0.2,1;10,10;code;Environment initialization code;"..minetest.formspec_escape(code).."]"
		.."label[0,9.8;"..err.."]"
	return form
end

core.register_chatcommand("env_setup", {
	params = "<environment name>",
	description = "Set up and modify AdvTrains LuaAutomation environment",
	privs = {atlatc=true},
	func = function(name, param)
		local env=atlatc.envs[param]
		if not env then return false,"Invalid environment name!" end
		minetest.show_formspec(name, "atlatc_envsetup_"..param, get_init_form(env, name))
		return true
	end,
})

core.register_chatcommand("env_create", {
	params = "<environment name>",
	description = "Create an AdvTrains LuaAutomation environment",
	privs = {atlatc=true},
	func = function(name, param)
		if not param or param=="" then return false, "Name required!" end
		if atlatc.envs[param] then return false, "Environment already exists!" end
		atlatc.envs[param] = atlatc.env_new(param)
		return true, "Created environment '"..param.."'. Use '/env_setup "..param.."' to define global initialization code, or start building LuaATC components!"
	end,
})


minetest.register_on_player_receive_fields(function(player, formname, fields)
	
	local pname=player:get_player_name()
	if not minetest.check_player_privs(pname, {atlatc=true}) then return end
	
	local envname=string.match(formname, "^atlatc_delconfirm_(.+)$")
	if envname and fields.sure=="YES" then
		atlatc.envs[envname]=nil
		minetest.chat_send_player(pname, "Environment deleted!")
		return
	end
	
	envname=string.match(formname, "^atlatc_envsetup_(.+)$")
	if not envname then return end
	
	local env=atlatc.envs[envname]
	if not env then return end
	
	if fields.del then
		minetest.show_formspec(pname, "atlatc_delconfirm_"..envname, "field[sure;"..minetest.formspec_escape("SURE TO DELETE ENVIRONMENT "..envname.."? Type YES (all uppercase) to continue or just quit form to cancel.")..";]")
		return
	end
	
	env.init_err=nil
	if fields.code then
		env.init_code=fields.code
	end
	if fields.run then
		env:run_initcode()
		minetest.show_formspec(pname, formname, get_init_form(env, pname))
	end
end)
"default:steel_ingot"}, {"default:stick", "default:steel_ingot"}, {"default:stick", ""}, } }) -- Tool repair buff (15% bonus instead of 2%) minetest.register_craft({ type = "toolrepair", additional_wear = -0.15, }) -- Redefinitions of some default nodes minetest.register_node(":default:ladder", { description = "Ladder", drawtype = "signlike", tiles = {"default_ladder.png"}, inventory_image = "default_ladder.png", wield_image = "default_ladder.png", paramtype = "light", sunlight_propagates = true, paramtype2 = "wallmounted", walkable = false, climbable = true, selection_box = { type = "wallmounted", }, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=3,flammable=2}, legacy_wallmounted = true, sounds = default.node_sound_wood_defaults(), }) if wood_facedir == true then minetest.register_node(":default:wood", { description = "Wooden Planks", tiles = {"default_wood.png"}, paramtype2 = "facedir", groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, sounds = default.node_sound_wood_defaults(), }) end minetest.register_node(":default:sapling", { description = "Sapling", drawtype = "plantlike", visual_scale = 1.0, tiles = {"default_sapling.png"}, inventory_image = "default_sapling.png", wield_image = "default_sapling.png", paramtype = "light", sunlight_propagates = true, walkable = false, selection_box = { type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} }, groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1}, sounds = default.node_sound_defaults(), }) minetest.register_node(":default:dry_shrub", { description = "Dry Shrub", drawtype = "plantlike", visual_scale = 1.0, tiles = {"default_dry_shrub.png"}, inventory_image = "default_dry_shrub.png", wield_image = "default_dry_shrub.png", paramtype = "light", sunlight_propagates = true, walkable = false, groups = {snappy=3,flammable=3,attached_node=1}, sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", fixed = {-1/3, -1/2, -1/3, 1/3, 1/6, 1/3}, }, }) minetest.register_node(":default:papyrus", { description = "Papyrus", drawtype = "plantlike", tiles = {"default_papyrus.png"}, inventory_image = "default_papyrus.png", wield_image = "default_papyrus.png", paramtype = "light", sunlight_propagates = true, walkable = false, selection_box = { type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} }, groups = {snappy=3,flammable=2}, sounds = default.node_sound_leaves_defaults(), }) minetest.register_node(":default:fence_wood", { description = "Wooden Fence", drawtype = "fencelike", tiles = {"default_wood.png"}, inventory_image = "default_fence.png", wield_image = "default_fence.png", paramtype = "light", sunlight_propagates = true, selection_box = { type = "fixed", fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, }, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=2}, sounds = default.node_sound_wood_defaults(), }) minetest.register_node(":default:junglegrass", { description = "Jungle Grass", drawtype = "plantlike", visual_scale = 1.3, tiles = {"default_junglegrass.png"}, inventory_image = "default_junglegrass.png", wield_image = "default_junglegrass.png", paramtype = "light", walkable = false, buildable_to = true, is_ground_content = true, sunlight_propagates = true, drop = { max_items = 1, items = { {items = {'farming:seed_cotton'},rarity = 8}, {items = {'default:junglegrass'}}, } }, groups = {snappy=3,flammable=2,flora=1,attached_node=1}, sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, }, }) minetest.register_node(":default:junglesapling", { description = "Jungle Sapling", drawtype = "plantlike", sunlight_propagates = true, tiles = {"default_junglesapling.png"}, paramtype = "light", walkable = false, selection_box = { type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} }, groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1}, sounds = default.node_sound_defaults(), }) minetest.register_node(":default:grass_1", { description = "Grass", drawtype = "plantlike", tiles = {"default_grass_1.png"}, -- use a bigger inventory image inventory_image = "default_grass_3.png", wield_image = "default_grass_3.png", paramtype = "light", sunlight_propagates = true, walkable = false, buildable_to = true, drop = { max_items = 1, items = { {items = {'farming:seed_wheat'},rarity = 5}, {items = {'default:grass_1'}}, } }, groups = {snappy=3,flammable=3,flora=1,attached_node=1}, sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, }, on_place = function(itemstack, placer, pointed_thing) -- place a random grass node local stack = ItemStack("default:grass_"..math.random(1,5)) local ret = minetest.item_place(stack, placer, pointed_thing) return ItemStack("default:grass_1 "..itemstack:get_count()-(1-ret:get_count())) end, }) for i=2,5 do minetest.register_node(":default:grass_"..i, { description = "Grass", drawtype = "plantlike", tiles = {"default_grass_"..i..".png"}, inventory_image = "default_grass_"..i..".png", wield_image = "default_grass_"..i..".png", paramtype = "light", sunlight_propagates = true, walkable = false, buildable_to = true, is_ground_content = true, drop = { max_items = 1, items = { {items = {'farming:seed_wheat'},rarity = 5}, {items = {'default:grass_1'}}, } }, groups = {snappy=3,flammable=3,flora=1,attached_node=1,not_in_creative_inventory=1}, sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, }, }) end