removed
This commit is contained in:
parent
a51bc04b6f
commit
d6e525223c
161
robot.lua
161
robot.lua
@ -1,161 +0,0 @@
|
||||
--[[
|
||||
|
||||
Hyperloop Mod
|
||||
=============
|
||||
|
||||
Copyright (C) 2017 Joachim Stolberg
|
||||
|
||||
LGPLv2.1+
|
||||
See LICENSE.txt for more information
|
||||
|
||||
History:
|
||||
see init.lua
|
||||
|
||||
]]--
|
||||
|
||||
local function get_inventory_item(inv)
|
||||
local stack = ItemStack("hyperloop:tube0")
|
||||
local taken = inv:remove_item("src", stack)
|
||||
return taken:get_count() == 1
|
||||
end
|
||||
|
||||
local function get_inventory(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local stack = ItemStack("hyperloop:tube0 99")
|
||||
return inv:remove_item("src", stack)
|
||||
end
|
||||
|
||||
local function set_inventory(pos, stack)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
inv:add_item("src", stack)
|
||||
return inv
|
||||
end
|
||||
|
||||
local function allow_metadata_inventory(pos, listname, index, stack, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
return stack:get_count()
|
||||
end
|
||||
|
||||
local function place_tube(pos, name, facedir, placer)
|
||||
if minetest.is_protected(pos, placer:get_player_name()) then
|
||||
hyperloop.chat(placer, "Area is protected!")
|
||||
return false
|
||||
end
|
||||
node = minetest.get_node(pos)
|
||||
if node.name ~= "air" and node.name ~= "default:water_source" and node.name ~= "default:water_flowing" then
|
||||
return false
|
||||
end
|
||||
if hyperloop.scan_neighbours(pos) ~= 1 then
|
||||
return false
|
||||
end
|
||||
minetest.add_node(pos, {name=name, param2=facedir})
|
||||
minetest.registered_nodes[name].after_place_node(pos, placer, nil, nil)
|
||||
return true
|
||||
end
|
||||
|
||||
local function move_robot(pos, inv, facedir, placer)
|
||||
if minetest.get_meta(pos):get_int("stopped") ~= 1 then
|
||||
if get_inventory_item(inv) then
|
||||
-- remve robot and replace through tube
|
||||
local stack = get_inventory(pos)
|
||||
minetest.remove_node(pos)
|
||||
place_tube(pos, "hyperloop:tube1", facedir, placer)
|
||||
-- place robot on the new position
|
||||
pos = hyperloop.new_pos(pos, facedir, "1F", 0)
|
||||
if place_tube(pos, "hyperloop:robot", facedir, placer) then
|
||||
inv = set_inventory(pos, stack)
|
||||
minetest.after(1, move_robot, pos, inv, facedir, placer)
|
||||
else
|
||||
pos = hyperloop.new_pos(pos, facedir, "1B", 0)
|
||||
minetest.remove_node(pos)
|
||||
place_tube(pos, "hyperloop:robot", facedir, placer)
|
||||
stack:add_item("src", ItemStack("hyperloop:tube0"))
|
||||
set_inventory(pos, stack)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local station_formspec =
|
||||
"size[8,8]"..
|
||||
"label[3,0;Hyperloop Tube Robot]" ..
|
||||
"label[1,1.3;Hyperloop Tubes]" ..
|
||||
"list[context;src;3,1;1,1;]"..
|
||||
"button_exit[4,1;1,1;button;Start]"..
|
||||
"list[current_player;main;0,4;8,4;]"..
|
||||
"listring[context;src]"..
|
||||
"listring[current_player;main]"
|
||||
|
||||
minetest.register_node("hyperloop:robot", {
|
||||
description = "Hyperloop Tube Robot",
|
||||
tiles = {
|
||||
-- up, down, right, left, back, front
|
||||
"hyperloop_robot.png",
|
||||
"hyperloop_robot.png",
|
||||
"hyperloop_robot2.png",
|
||||
"hyperloop_robot2.png",
|
||||
"hyperloop_robot2.png",
|
||||
"hyperloop_robot2.png",
|
||||
},
|
||||
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
local res, nodes = hyperloop.scan_neighbours(pos)
|
||||
if res == 1 then -- one neighbor available?
|
||||
local dir = vector.subtract(pos, nodes[1].pos)
|
||||
local facedir = minetest.dir_to_facedir(dir)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_int("facedir", facedir)
|
||||
meta:set_string("formspec", station_formspec)
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size('src', 1)
|
||||
else
|
||||
hyperloop.chat(player, "You can't start with a Robot block!")
|
||||
local node = minetest.get_node(pos)
|
||||
hyperloop.remove_node(pos, node)
|
||||
return itemstack
|
||||
end
|
||||
end,
|
||||
|
||||
on_receive_fields = function(pos, formname, fields, player)
|
||||
if fields.button == nil then
|
||||
return
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local facedir = meta:get_int("facedir")
|
||||
meta:set_int("stopped", 0)
|
||||
minetest.after(1, move_robot, pos, inv, facedir, player)
|
||||
end,
|
||||
|
||||
on_punch = function(pos, node, puncher, pointed_thing)
|
||||
if minetest.is_protected(pos, puncher:get_player_name()) then
|
||||
return
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_int("stopped", 1)
|
||||
end,
|
||||
|
||||
on_dig = function(pos, node, puncher, pointed_thing)
|
||||
if minetest.is_protected(pos, puncher:get_player_name()) then
|
||||
return
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
meta:set_int("stopped", 1)
|
||||
if inv:is_empty("src") then
|
||||
minetest.node_dig(pos, node, puncher, pointed_thing)
|
||||
end
|
||||
end,
|
||||
|
||||
allow_metadata_inventory_put = allow_metadata_inventory,
|
||||
allow_metadata_inventory_take = allow_metadata_inventory,
|
||||
|
||||
on_rotate = screwdriver.disallow,
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=1},
|
||||
is_ground_content = false,
|
||||
})
|
Binary file not shown.
Before Width: | Height: | Size: 1.6 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.8 KiB |
Loading…
x
Reference in New Issue
Block a user