73 lines
2.3 KiB
Lua
73 lines
2.3 KiB
Lua
local S = minetest.get_translator(minetest.get_current_modname())
|
|
|
|
return function(plg)
|
|
|
|
|
|
minetest.register_tool("mesecons_fpga:programmer", {
|
|
description = S("FPGA Programmer"),
|
|
inventory_image = "jeija_fpga_programmer.png",
|
|
stack_max = 1,
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
if pointed_thing.type ~= "node" then
|
|
return itemstack
|
|
end
|
|
|
|
local pos = pointed_thing.under
|
|
if minetest.get_node(pos).name:find("mesecons_fpga:fpga") ~= 1 then
|
|
return itemstack
|
|
end
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
if meta:get_string("instr") == "//////////////" then
|
|
minetest.chat_send_player(placer:get_player_name(), "This FPGA is unprogrammed.")
|
|
minetest.sound_play("mesecons_fpga_fail", { pos = placer:get_pos(), gain = 0.1, max_hear_distance = 4 }, true)
|
|
return itemstack
|
|
end
|
|
itemstack:get_meta():set_string("", meta:get_string("instr"))
|
|
minetest.chat_send_player(placer:get_player_name(), "FPGA gate configuration was successfully copied!")
|
|
minetest.sound_play("mesecons_fpga_copy", { pos = placer:get_pos(), gain = 0.1, max_hear_distance = 4 }, true)
|
|
|
|
return itemstack
|
|
end,
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
if pointed_thing.type ~= "node" then
|
|
return itemstack
|
|
end
|
|
|
|
local pos = pointed_thing.under
|
|
if minetest.get_node(pos).name:find("mesecons_fpga:fpga") ~= 1 then
|
|
return itemstack
|
|
end
|
|
local player_name = user:get_player_name()
|
|
if minetest.is_protected(pos, player_name) then
|
|
minetest.record_protection_violation(pos, player_name)
|
|
return itemstack
|
|
end
|
|
|
|
local imeta = itemstack:get_meta():get_string("")
|
|
if imeta == "" then
|
|
minetest.chat_send_player(player_name, "Use shift+right-click to copy a gate configuration first.")
|
|
minetest.sound_play("mesecons_fpga_fail", { pos = user:get_pos(), gain = 0.1, max_hear_distance = 4 }, true)
|
|
return itemstack
|
|
end
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string("instr", imeta)
|
|
plg.update_meta(pos, imeta)
|
|
minetest.chat_send_player(player_name, "Gate configuration was successfully written to FPGA!")
|
|
minetest.sound_play("mesecons_fpga_write", { pos = user:get_pos(), gain = 0.1, max_hear_distance = 4 }, true)
|
|
|
|
return itemstack
|
|
end
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "mesecons_fpga:programmer",
|
|
recipe = {
|
|
{'group:mesecon_conductor_craftable'},
|
|
{'mesecons_materials:silicon'},
|
|
}
|
|
})
|
|
|
|
|
|
end
|