Add mods: digiprinter, digiboard, digilines_weather_sensor, digilines_memory, digilines_crafting, homedecor_plastic
2
digiprinter/depends.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
digilines
|
||||
memorandum
|
154
digiprinter/init.lua
Normal file
@@ -0,0 +1,154 @@
|
||||
|
||||
-- Created by jogag
|
||||
-- Part of the Digiline Stuff pack
|
||||
-- Mod: Digiprinter - a digiline-controlled printer
|
||||
-- It prints paper via the Writable Paper (memorandum) mod
|
||||
-- then it sends "OK" or "ERR_PAPER" or "ERR_SPACE"
|
||||
|
||||
local OK_MSG = "OK"
|
||||
local NO_PAPER_MSG = "ERR_PAPER"
|
||||
local NO_SPACE_MSG = "ERR_SPACE"
|
||||
|
||||
local PRINT_DELAY = 3
|
||||
|
||||
-- taken from pipeworks mod
|
||||
local function facedir_to_dir(facedir)
|
||||
--a table of possible dirs
|
||||
return ({{x=0, y=0, z=1},
|
||||
{x=1, y=0, z=0},
|
||||
{x=0, y=0, z=-1},
|
||||
{x=-1, y=0, z=0},
|
||||
{x=0, y=-1, z=0},
|
||||
{x=0, y=1, z=0}})
|
||||
|
||||
--indexed into by a table of correlating facedirs
|
||||
[({[0]=1, 2, 3, 4,
|
||||
5, 2, 6, 4,
|
||||
6, 2, 5, 4,
|
||||
1, 5, 3, 6,
|
||||
1, 6, 3, 5,
|
||||
1, 4, 3, 2})
|
||||
|
||||
--indexed into by the facedir in question
|
||||
[facedir]]
|
||||
end
|
||||
|
||||
local print_paper = function(pos, node, msg)
|
||||
local inv = minetest.get_meta(pos):get_inventory()
|
||||
|
||||
local vel = facedir_to_dir(node.param2)
|
||||
local front = { x = pos.x - vel.x, y = pos.y - vel.y, z = pos.z - vel.z }
|
||||
if minetest.get_node(front).name ~= "air" then
|
||||
-- search for the next block
|
||||
vel = { x = vel.x * 2, y = vel.y * 2, z = vel.z * 2 }
|
||||
front = { x = pos.x - vel.x, y = pos.y - vel.y, z = pos.z - vel.z }
|
||||
end
|
||||
|
||||
if inv:is_empty("paper") then digiline:receptor_send(pos, digiline.rules.default, channel, NO_PAPER_MSG)
|
||||
elseif minetest.get_node(front).name ~= "air" then digiline:receptor_send(pos, digiline.rules.default, channel, NO_SPACE_MSG)
|
||||
else
|
||||
local paper = inv:get_stack("paper", 1)
|
||||
paper:take_item()
|
||||
inv:set_stack("paper", 1, paper)
|
||||
|
||||
minetest.add_node(front, {
|
||||
name = (msg == "" and "memorandum:letter_empty" or "memorandum:letter_written"),
|
||||
param2 = node.param2
|
||||
})
|
||||
|
||||
local meta = minetest.get_meta(front)
|
||||
meta:set_string("text", msg)
|
||||
meta:set_string("signed", "Digiprinter")
|
||||
meta:set_string("infotext", 'On this piece of paper is written: "'..msg..'" Printed with Digiprinter') -- xD
|
||||
|
||||
digiline:receptor_send(pos, digiline.rules.default, channel, OK_MSG)
|
||||
end
|
||||
minetest.get_meta(pos):set_string("infotext", "Digiline Printer Idle")
|
||||
end
|
||||
|
||||
local on_digiline_receive = function(pos, node, channel, msg)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if channel == meta:get_string("channel") and not meta:get_string("infotext"):find("Busy") then
|
||||
meta:set_string("infotext", "Digiline Printer Busy")
|
||||
minetest.after(PRINT_DELAY, print_paper, pos, node, msg)
|
||||
end
|
||||
end
|
||||
|
||||
-- taken from computer mod xD
|
||||
minetest.register_node("digiprinter:printer", {
|
||||
description = "Digiline Printer",
|
||||
inventory_image = "computer_printer_inv.png",
|
||||
tiles = {"digiprinter_t.png","digiprinter_bt.png","digiprinter_l.png",
|
||||
"digiprinter_r.png","digiprinter_b.png","digiprinter_f.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
walkable = true,
|
||||
groups = {snappy=3},
|
||||
sound = default.node_sound_wood_defaults(),
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.4375, -0.3125, -0.125, 0.4375, -0.0625, 0.375},
|
||||
{-0.4375, -0.5, -0.125, 0.4375, -0.4375, 0.375},
|
||||
{-0.4375, -0.5, -0.125, -0.25, -0.0625, 0.375},
|
||||
{0.25, -0.5, -0.125, 0.4375, -0.0625, 0.375},
|
||||
{-0.4375, -0.5, -0.0625, 0.4375, -0.0625, 0.375},
|
||||
{-0.375, -0.4375, 0.25, 0.375, -0.0625, 0.4375},
|
||||
{-0.25, -0.25, 0.4375, 0.25, 0.0625, 0.5},
|
||||
{-0.25, -0.481132, -0.3125, 0.25, -0.4375, 0}
|
||||
},
|
||||
},
|
||||
digiline = {
|
||||
receptor = {},
|
||||
effector = {
|
||||
action = on_digiline_receive
|
||||
},
|
||||
},
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("channel", "")
|
||||
meta:set_string("infotext", "Digiline Printer Idle")
|
||||
meta:set_string("formspec", "size[8,10]"..
|
||||
((default and default.gui_bg) or "")..
|
||||
((default and default.gui_bg_img) or "")..
|
||||
((default and default.gui_slots) or "")..
|
||||
"label[0,0;Digiline Printer]"..
|
||||
"label[3.5,2;Paper]"..
|
||||
"list[current_name;paper;3.5,2.5;1,1;]"..
|
||||
"field[2,3.5;5,5;channel;Channel;${channel}]"..
|
||||
((default and default.get_hotbar_bg) and default.get_hotbar_bg(0,6) or "")..
|
||||
"list[current_player;main;0,6;8,4;]")
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("paper", 1)
|
||||
end,
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
if fields.channel then minetest.get_meta(pos):set_string("channel", fields.channel) end
|
||||
end,
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then return 0 end
|
||||
return (stack:get_name() == "default:paper" and stack:get_count() or 0)
|
||||
end,
|
||||
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
return (minetest.get_meta(pos):get_string("infotext"):find("Busy") and stack:get_count() or 0)
|
||||
end,
|
||||
can_dig = function(pos, player)
|
||||
return minetest.get_meta(pos):get_inventory():is_empty("paper")
|
||||
end,
|
||||
})
|
||||
|
||||
-- printer crafting:
|
||||
-- +-------+
|
||||
-- | ? P ? |
|
||||
-- | ? M ? |
|
||||
-- | ? D ? |
|
||||
-- +-------+
|
||||
minetest.register_craft({
|
||||
output = "digiprinter:printer",
|
||||
recipe = {
|
||||
{ "homedecor", "default:paper", "" },
|
||||
{ "", "default:mese_crystal", "" },
|
||||
{ "", "digilines:wire_std_000000", "" },
|
||||
},
|
||||
})
|
||||
|
BIN
digiprinter/textures/digiprinter_b.png
Normal file
After Width: | Height: | Size: 170 B |
BIN
digiprinter/textures/digiprinter_bt.png
Normal file
After Width: | Height: | Size: 154 B |
BIN
digiprinter/textures/digiprinter_f.png
Normal file
After Width: | Height: | Size: 166 B |
BIN
digiprinter/textures/digiprinter_inv.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
digiprinter/textures/digiprinter_l.png
Normal file
After Width: | Height: | Size: 183 B |
BIN
digiprinter/textures/digiprinter_r.png
Normal file
After Width: | Height: | Size: 182 B |
BIN
digiprinter/textures/digiprinter_t.png
Normal file
After Width: | Height: | Size: 204 B |