Add digits letters and make the code more generic (#10)

Updated luacheck version
LuaDoc comments for public functions
master
taylorskalyo 2022-08-20 18:14:29 +00:00 committed by GitHub
parent d44b88fa90
commit b84cb17b44
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 266 additions and 339 deletions

View File

@ -5,6 +5,4 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: Roang-zero1/factorio-mod-luacheck@master
with:
luacheckrc_url: ""
- uses: lunarmodules/luacheck@v0

View File

@ -1,5 +1,5 @@
max_line_length = 180
unused_args = false
unused_args = true
globals = {
"letters"

599
init.lua
View File

@ -1,189 +1,103 @@
letters = {
{"al", "au", "a", "A"},
{"bl", "bu", "b", "B"},
{"cl", "cu", "c", "C"},
{"dl", "du", "d", "D"},
{"el", "eu", "e", "E"},
{"fl", "fu", "f", "F"},
{"gl", "gu", "g", "G"},
{"hl", "hu", "h", "H"},
{"il", "iu", "i", "I"},
{"jl", "ju", "j", "J"},
{"kl", "ku", "k", "K"},
{"ll", "lu", "l", "L"},
{"ml", "mu", "m", "M"},
{"nl", "nu", "n", "N"},
{"ol", "ou", "o", "O"},
{"pl", "pu", "p", "P"},
{"ql", "qu", "q", "Q"},
{"rl", "ru", "r", "R"},
{"sl", "su", "s", "S"},
{"tl", "tu", "t", "T"},
{"ul", "uu", "u", "U"},
{"vl", "vu", "v", "V"},
{"wl", "wu", "w", "W"},
{"xl", "xu", "x", "X"},
{"yl", "yu", "y", "Y"},
{"zl", "zu", "z", "Z"},
}
letters = {}
local letters_reversed = {}
for i, t in ipairs(letters) do
letters_reversed[t[3]] = i
end
local lettersmod = minetest.get_current_modname()
local letterspath = minetest.get_modpath(lettersmod)
local letter_cutter = {}
letter_cutter.known_nodes = {}
-- Use files in the textures folder to populate letter group tables.
letter_cutter.names_upper = {}
letter_cutter.names_lower = {}
letter_cutter.names_digit = {}
for _, tile in ipairs(minetest.get_dir_list(letterspath .. "/textures", false)) do
local char, group = tile:match("_([%d%u%l])(%l)_overlay")
if char and group then
if group == "d" then
table.insert(letter_cutter.names_digit, "letter_" ..char..group)
elseif group == "u" then
table.insert(letter_cutter.names_upper, "letter_" ..char..group)
elseif group == "l" then
table.insert(letter_cutter.names_lower, "letter_" ..char..group)
end
end
end
letter_cutter.show_item_list = dofile(
minetest.get_modpath(minetest.get_current_modname())..'/itemlist.lua')
function letters.register_letters(modname, subname, from_node, description, tiles, def)
def = def and table.copy(def) or {}
--- Register a node for use as a material in letter cutters.
-- @param modname is the mod that the node belongs to.
-- @param subname is the actual name of the node.
-- @param from_node is the node that the letters will be crafted from (Usually modname:subname).
-- @param description is the description of the node.
-- @param tiles defines the image that will be used with the node.
-- @param basedef (optional) may contain additional node definition parameters. Some might be overwritten to make the letters look and work as intended.
function letters.register_letters(modname, subname, from_node, description, tiles, basedef)
basedef = basedef and table.copy(basedef) or {}
--default node
def.drawtype = "signlike"
def.paramtype = "light"
def.paramtype2 = def.paramtype2 or "wallmounted"
def.sunlight_propagates = true
def.is_ground_content = false
def.walkable = false
def.selection_box = {
basedef.drawtype = "signlike"
basedef.paramtype = "light"
basedef.paramtype2 = basedef.paramtype2 or "wallmounted"
basedef.sunlight_propagates = true
basedef.is_ground_content = false
basedef.walkable = false
basedef.selection_box = {
type = "wallmounted"
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
}
def.groups = def.groups or {
basedef.groups = basedef.groups or {
not_in_creative_inventory = 1,
not_in_craft_guide = 1,
oddly_breakable_by_hand = 1,
attached_node = 1
}
def.legacy_wallmounted = false
basedef.legacy_wallmounted = false
-- Register a new node for each letter using the provided from_node as the material.
for _, tile in ipairs(minetest.get_dir_list(letterspath .. "/textures", false)) do
local char, group = tile:match("_([%d%u%l])(%l)_overlay")
if char and group then
local def = table.copy(basedef)
for _, row in ipairs(letters) do
if group == "d" then
def.description = description.. " " ..char
elseif group == "u" then
def.description = description.. " " ..char:upper()
elseif group == "l" then
def.description = description.. " " ..char
end
def.inventory_image = tiles.. "^" ..tile.. "^[makealpha:255,126,126"
def.wield_image = def.inventory_image
def.tiles = {def.inventory_image}
def = table.copy(def)
def.description = description.. " " ..row[3]
def.inventory_image = tiles.. "^letters_" ..row[1].. "_overlay.png^[makealpha:255,126,126"
def.wield_image = def.inventory_image
def.tiles = {def.inventory_image}
minetest.register_node(":" ..modname..":"..subname.. "_letter_" ..row[1],def)
def = table.copy(def)
def.description = description.. " " ..row[4]
def.inventory_image = tiles.. "^letters_" ..row[2].. "_overlay.png^[makealpha:255,126,126"
def.wield_image = def.inventory_image
def.tiles = {def.inventory_image}
minetest.register_node(":" ..modname..":"..subname.. "_letter_" ..row[2], def)
--[[minetest.register_craft({
output = from_node,
recipe = {
{modname..":"..name, modname..":"..name, modname..":"..name},
{modname..":"..name, modname..":"..name, modname..":"..name},
{modname..":"..name, modname..":"..name, modname..":"..name},
},
})--]]
minetest.register_node(":" ..modname..":"..subname.. "_letter_" ..char..group,def)
end
end
letter_cutter.known_nodes[from_node] = {modname, subname}
end
local cost = 0.110
letter_cutter.names_lower = {
{"letter_al"},
{"letter_bl"},
{"letter_cl"},
{"letter_dl"},
{"letter_el"},
{"letter_fl"},
{"letter_gl"},
{"letter_hl"},
{"letter_il"},
{"letter_jl"},
{"letter_kl"},
{"letter_ll"},
{"letter_ml"},
{"letter_nl"},
{"letter_ol"},
{"letter_pl"},
{"letter_ql"},
{"letter_rl"},
{"letter_sl"},
{"letter_tl"},
{"letter_ul"},
{"letter_vl"},
{"letter_wl"},
{"letter_xl"},
{"letter_yl"},
{"letter_zl"},
}
letter_cutter.names_upper = {
{"letter_au"},
{"letter_bu"},
{"letter_cu"},
{"letter_du"},
{"letter_eu"},
{"letter_fu"},
{"letter_gu"},
{"letter_hu"},
{"letter_iu"},
{"letter_ju"},
{"letter_ku"},
{"letter_lu"},
{"letter_mu"},
{"letter_nu"},
{"letter_ou"},
{"letter_pu"},
{"letter_qu"},
{"letter_ru"},
{"letter_su"},
{"letter_tu"},
{"letter_uu"},
{"letter_vu"},
{"letter_wu"},
{"letter_xu"},
{"letter_yu"},
{"letter_zu"},
}
function letter_cutter:get_output_inv_lower(modname, subname, amount, max)
-- Collect items to display in letter cutter output inventory.
function letter_cutter.get_output_inv(modname, subname, amount, max, group)
local list = {}
if amount < 1 then
return list
end
for i, t in ipairs(letter_cutter.names_lower) do
table.insert(list, modname .. ":" .. subname .. "_" .. t[1]
for _, name in ipairs(group) do
table.insert(list, modname .. ":" .. subname .. "_" .. name
.. " " .. math.min(math.floor(amount/cost), max))
end
return list
end
function letter_cutter:get_output_inv_upper(modname, subname, amount, max)
local list = {}
if amount < 1 then
return list
end
for i, t in ipairs(letter_cutter.names_upper) do
table.insert(list, modname .. ":" .. subname .. "_" .. t[1]
.. " " .. math.min(math.floor(amount/cost), max))
end
return list
end
function letter_cutter:reset_lower(pos)
-- Reset letter cutter to its empty state.
function letter_cutter:reset(pos)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
@ -191,38 +105,28 @@ function letter_cutter:reset_lower(pos)
inv:set_list("output", {})
meta:set_int("anz", 0)
local groupname = self.group_name(pos)
meta:set_string("infotext",
"Letter Cutter (Lower) is empty (owned by "..
"Letter Cutter ("..groupname..") is empty (owned by "..
meta:get_string("owner")..")")
end
function letter_cutter:reset_upper(pos)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
inv:set_list("input", {})
inv:set_list("output", {})
meta:set_int("anz", 0)
meta:set_string("infotext",
"Letter Cutter (Upper) is empty (owned by "..
meta:get_string("owner")..")")
end
function letter_cutter:update_inventory_lower(pos, amount)
-- Update letter cutter inventories with available material count.
function letter_cutter:update_inventory(pos, amount)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
amount = meta:get_int("anz") + amount
local groupname = self.group_name(pos)
if amount < 1 then -- If the last block is taken out.
self:reset_lower(pos)
self:reset(pos)
return
end
local stack = inv:get_stack("input", 1)
if stack:is_empty() then
self:reset_lower(pos)
self:reset(pos)
return
end
@ -235,66 +139,32 @@ function letter_cutter:update_inventory_lower(pos, amount)
node_name.. " " .. math.floor(amount)
})
local max_offered = meta:get_int("max_offered")
local output = self.get_output_inv(modname, material, amount, max_offered, self.group(pos))
-- Display:
inv:set_list("output",
self:get_output_inv_lower(modname, material, amount,
meta:get_int("max_offered")))
inv:set_list("output", output)
-- Store how many microblocks are available:
meta:set_int("anz", amount)
meta:set_string("infotext",
"Letter Cutter (Lower) is working (owned by "..
"Letter Cutter ("..groupname..") is working (owned by "..
meta:get_string("owner")..")")
end
function letter_cutter:update_inventory_upper(pos, amount)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
amount = meta:get_int("anz") + amount
if amount < 1 then -- If the last block is taken out.
self:reset_upper(pos)
return
end
local stack = inv:get_stack("input", 1)
if stack:is_empty() then
self:reset_upper(pos)
return
end
local node_name = stack:get_name() or ""
local name_parts = letter_cutter.known_nodes[node_name] or ""
local modname = name_parts[1] or ""
local material = name_parts[2] or ""
inv:set_list("input", {
node_name.. " " .. math.floor(amount)
})
-- Display:
inv:set_list("output",
self:get_output_inv_upper(modname, material, amount,
meta:get_int("max_offered")))
-- Store how many microblocks are available:
meta:set_int("anz", amount)
meta:set_string("infotext",
"Letter Cutter (Upper) is working (owned by "..
meta:get_string("owner")..")")
end
function letter_cutter.allow_metadata_inventory_move(
pos, from_list, from_index, to_list, to_index, count, player)
-- Implement allow_metadata_inventory_move.
-- https://minetest.gitlab.io/minetest/definition-tables/#node-definition
--
-- Moving is forbidden.
function letter_cutter.allow_metadata_inventory_move(_pos, _from_list, _from_index, _to_list, _to_index, _count, _player)
return 0
end
-- Implement allow_metadata_inventory_put.
-- https://minetest.gitlab.io/minetest/definition-tables/#node-definition
--
-- Only input- and recycle-slot are intended as input slots:
function letter_cutter.allow_metadata_inventory_put(
pos, listname, index, stack, player)
function letter_cutter.allow_metadata_inventory_put(pos, listname, index, stack, _player)
-- The player is not allowed to put something in there:
if listname == "output" then
return 0
@ -311,7 +181,7 @@ function letter_cutter.allow_metadata_inventory_put(
inv:get_stack("input", index):get_name() ~= stackname then
return 0
end
for name, t in pairs(letter_cutter.known_nodes) do
for name, _ in pairs(letter_cutter.known_nodes) do
if name == stackname and inv:room_for_item("input", stack) then
return count
end
@ -320,64 +190,70 @@ function letter_cutter.allow_metadata_inventory_put(
end
end
function letter_cutter.on_metadata_inventory_put_lower(
pos, listname, index, stack, player)
-- Implement on_metadata_inventory_put.
-- https://minetest.gitlab.io/minetest/definition-tables/#node-definition
--
-- Add craftable letters to the letter cutter inventory.
function letter_cutter.on_metadata_inventory_put(pos, listname, _index, stack, _player)
local count = stack:get_count()
if listname == "input" then
letter_cutter:update_inventory_lower(pos, count)
letter_cutter:update_inventory(pos, count)
end
end
function letter_cutter.on_metadata_inventory_put_upper(
pos, listname, index, stack, player)
local count = stack:get_count()
if listname == "input" then
letter_cutter:update_inventory_upper(pos, count)
end
end
function letter_cutter.on_metadata_inventory_take_lower(
pos, listname, index, stack, player)
-- Implement on_metadata_inventory_take.
-- https://minetest.gitlab.io/minetest/definition-tables/#node-definition
--
-- Taking is allowed from all slots (even the internal microblock slot).
function letter_cutter.on_metadata_inventory_take(pos, listname, _index, stack, _player)
if listname == "output" then
-- We do know how much each block at each position costs:
letter_cutter:update_inventory_lower(pos, 8 * -cost)
letter_cutter:update_inventory(pos, 8 * -cost)
elseif listname == "input" then
-- Each normal (= full) block taken costs 8 microblocks:
letter_cutter:update_inventory_lower(pos, 8 * -stack:get_count())
letter_cutter:update_inventory(pos, 8 * -stack:get_count())
end
-- The recycle field plays no role here since it is processed immediately.
end
function letter_cutter.on_metadata_inventory_take_upper(
pos, listname, index, stack, player)
if listname == "output" then
-- We do know how much each block at each position costs:
letter_cutter:update_inventory_upper(pos, 8 * -cost)
elseif listname == "input" then
-- Each normal (= full) block taken costs 8 microblocks:
letter_cutter:update_inventory_upper(pos, 8 * -stack:get_count())
end
-- The recycle field plays no role here since it is processed immediately.
end
function letter_cutter.remove_from_input(pos, origname, count)
-- The name of the group of letters managed by this letter cutter.
function letter_cutter.group_name(pos)
local node = minetest.get_node(pos)
if node.name == "letters:letter_cutter_digit" then
return "Digit"
elseif node.name == "letters:letter_cutter_upper" then
return "Upper"
elseif node.name == "letters:letter_cutter_lower" then
return "Lower"
end
end
-- The group of letters managed by this letter cutter.
function letter_cutter.group(pos)
local node = minetest.get_node(pos)
if node.name == "letters:letter_cutter_digit" then
return letter_cutter.names_digit
elseif node.name == "letters:letter_cutter_upper" then
return letter_cutter.names_upper
elseif node.name == "letters:letter_cutter_lower" then
return letter_cutter.names_lower
end
end
-- Consume the input material and update inventories.
function letter_cutter.remove_from_input(pos, origname, count)
local meta = minetest.get_meta(pos)
local cutterinv = meta:get_inventory()
local removed = cutterinv:remove_item("input", origname .. " " .. tostring(count))
if node.name == "letters:letter_cutter_upper" then
letter_cutter:update_inventory_upper(pos, -removed:get_count())
else
letter_cutter:update_inventory_lower(pos, -removed:get_count())
end
letter_cutter:update_inventory(pos, -removed:get_count())
end
local gui_slots = "listcolors[#606060AA;#808080;#101010;#202020;#FFF]"
-- Update formspec.
local function update_cutter_formspec(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", "size[11,9]" ..gui_slots..
@ -391,6 +267,7 @@ local function update_cutter_formspec(pos)
"label[5.5,4.2;" .. minetest.formspec_escape(meta:get_string("message")) .. "]")
end
-- Create letter nodes from player-supplied text string.
local function cut_from_text(pos, input_text, player)
local playername = player:get_player_name()
@ -419,33 +296,41 @@ local function cut_from_text(pos, input_text, player)
throwawayinv:set_list("main", playerinv:get_list("main"))
for i = 1, #input_text do
-- Determine letter group.
local char = input_text:sub(i, i)
if char:match("[%u%l]") then
local isupper = char == char:upper()
local charset = isupper and letter_cutter.names_upper or letter_cutter.names_lower
local lettername = origname .. "_" .. charset[letters_reversed[char:lower()]][1]
if cuttercount < totalcost + cost then
meta:set_string("message", "Not enough materials.")
update_cutter_formspec(pos)
minetest.remove_detached_inventory("letter_cutter:throwaway")
return
end
if lettername and not throwawayinv:room_for_item("main", lettername) then
meta:set_string("message", "Not enough room.")
update_cutter_formspec(pos)
minetest.remove_detached_inventory("letter_cutter:throwaway")
return
end
totalcost = totalcost + cost
throwawayinv:add_item("main", lettername)
local group
if char:match("%d") then
group = "d"
elseif char:match("%u") then
group = "u"
char = char:lower()
elseif char:match("%l") then
group = "l"
else
goto continue -- unrecognized, skip it
end
local lettername = origname .. "_" .. "letter_" ..char:lower() ..group
if cuttercount < totalcost + cost then
meta:set_string("message", "Not enough materials.")
update_cutter_formspec(pos)
minetest.remove_detached_inventory("letter_cutter:throwaway")
return
end
if lettername and not throwawayinv:room_for_item("main", lettername) then
meta:set_string("message", "Not enough room.")
update_cutter_formspec(pos)
minetest.remove_detached_inventory("letter_cutter:throwaway")
return
end
totalcost = totalcost + cost
throwawayinv:add_item("main", lettername)
::continue::
end
meta:set_string("message", "Successfully added letters to inventory.")
@ -457,13 +342,18 @@ local function cut_from_text(pos, input_text, player)
minetest.remove_detached_inventory("letter_cutter:throwaway")
end
function letter_cutter.on_construct_lower(pos)
-- Implement on_construct.
-- https://minetest.gitlab.io/minetest/definition-tables/#node-definition
--
-- Initialize a new letter cutter.
function letter_cutter.on_construct(pos)
local meta = minetest.get_meta(pos)
local groupname = letter_cutter.group_name(pos)
update_cutter_formspec(pos)
meta:set_int("anz", 0) -- No microblocks inside yet.
meta:set_string("max_offered", 9) -- How many items of this kind are offered by default?
meta:set_string("infotext", "Letter Cutter (Lower) is empty")
meta:set_string("infotext", "Letter Cutter ("..groupname..") is empty")
meta:set_string("text", "")
meta:set_string("message", "")
@ -472,29 +362,14 @@ function letter_cutter.on_construct_lower(pos)
inv:set_size("input", 1) -- Input slot for full blocks of material x.
inv:set_size("output", 4*8) -- 4x8 versions of stair-parts of material x.
letter_cutter:reset_lower(pos)
letter_cutter:reset(pos)
end
function letter_cutter.on_construct_upper(pos)
local meta = minetest.get_meta(pos)
update_cutter_formspec(pos)
meta:set_int("anz", 0) -- No microblocks inside yet.
meta:set_string("max_offered", 9) -- How many items of this kind are offered by default?
meta:set_string("infotext", "Letter Cutter (Upper) is empty")
meta:set_string("text", "")
meta:set_string("message", "")
local inv = meta:get_inventory()
inv:set_size("input", 1) -- Input slot for full blocks of material x.
inv:set_size("output", 4*8) -- 4x8 versions of stair-parts of material x.
letter_cutter:reset_upper(pos)
end
function letter_cutter.can_dig(pos,player)
-- Implement can_dig.
-- https://minetest.gitlab.io/minetest/definition-tables/#node-definition
--
-- Allow digging if the letter cutter is empty.
function letter_cutter.can_dig(pos, _player)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if not inv:is_empty("input") then
@ -503,10 +378,14 @@ function letter_cutter.can_dig(pos,player)
return true
end
function letter_cutter.on_receive_fields(pos, formname, fields, sender)
-- Implement on_receive_fields.
-- https://minetest.gitlab.io/minetest/definition-tables/#node-definition
--
-- Handle formspec update.
function letter_cutter.on_receive_fields(pos, _formname, fields, sender)
if fields.itemlist then
local list = {}
for name, t in pairs(letter_cutter.known_nodes) do
for name, _ in pairs(letter_cutter.known_nodes) do
list[#list+1] = name
end
letter_cutter.show_item_list(sender, 'Cuttable materials', list, pos)
@ -525,20 +404,20 @@ minetest.register_node("letters:letter_cutter_lower", {
node_box = {
type = "fixed",
fixed = {
{-0.4375, -0.5, -0.4375, -0.3125, 0.125, -0.3125}, -- NodeBox1
{-0.4375, -0.5, 0.3125, -0.3125, 0.125, 0.4375}, -- NodeBox2
{0.3125, -0.5, 0.3125, 0.4375, 0.125, 0.4375}, -- NodeBox3
{0.3125, -0.5, -0.4375, 0.4375, 0.125, -0.3125}, -- NodeBox4
{-0.5, 0.0625, -0.5, 0.5, 0.25, 0.5}, -- NodeBox5
{-0.125, 0.25, 0.125, 0.125, 0.3125, 0.1875}, -- NodeBox6
{0.125, 0.25, 0.0625, 0.1875, 0.3125, 0.125}, -- NodeBox7
{0.1875, 0.25, -0.1875, 0.25, 0.3125, 0.1875}, -- NodeBox8
{-0.1875, 0.25, 0.0625, -0.125, 0.3125, 0.125}, -- NodeBox9
{-0.25, 0.25, -0.1875, -0.1875, 0.3125, 0.0625}, -- NodeBox10
{-0.1875, 0.25, -0.25, -0.125, 0.3125, -0.1875}, -- NodeBox11
{-0.125, 0.25, -0.3125, 0.125, 0.3125, -0.25}, -- NodeBox12
{0.125, 0.25, -0.25, 0.375, 0.3125, -0.1875}, -- NodeBox13
{0.3125, 0.25, -0.1875, 0.375, 0.3125, -0.125}, -- NodeBox14
{-0.4375, -0.5, -0.4375, -0.3125, 0.125, -0.3125},
{-0.4375, -0.5, 0.3125, -0.3125, 0.125, 0.4375},
{0.3125, -0.5, 0.3125, 0.4375, 0.125, 0.4375},
{0.3125, -0.5, -0.4375, 0.4375, 0.125, -0.3125},
{-0.5, 0.0625, -0.5, 0.5, 0.25, 0.5},
{-0.125, 0.25, 0.125, 0.125, 0.3125, 0.1875},
{0.125, 0.25, 0.0625, 0.1875, 0.3125, 0.125},
{0.1875, 0.25, -0.1875, 0.25, 0.3125, 0.1875},
{-0.1875, 0.25, 0.0625, -0.125, 0.3125, 0.125},
{-0.25, 0.25, -0.1875, -0.1875, 0.3125, 0.0625},
{-0.1875, 0.25, -0.25, -0.125, 0.3125, -0.1875},
{-0.125, 0.25, -0.3125, 0.125, 0.3125, -0.25},
{0.125, 0.25, -0.25, 0.375, 0.3125, -0.1875},
{0.3125, 0.25, -0.1875, 0.375, 0.3125, -0.125},
},
},
tiles = {"letters_letter_cutter_lower_top.png",
@ -549,9 +428,9 @@ minetest.register_node("letters:letter_cutter_lower", {
paramtype2 = "facedir",
groups = {choppy = 2,oddly_breakable_by_hand = 2},
sounds = default.node_sound_wood_defaults(),
on_construct = letter_cutter.on_construct_lower,
on_construct = letter_cutter.on_construct,
can_dig = letter_cutter.can_dig,
-- Set the owner of this circular saw.
-- Set the cutter type and owner.
after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos)
local owner = placer and placer:get_player_name() or ""
@ -561,12 +440,9 @@ minetest.register_node("letters:letter_cutter_lower", {
..meta:get_string("owner")..")")
end,
allow_metadata_inventory_move = letter_cutter.allow_metadata_inventory_move,
-- Only input- and recycle-slot are intended as input slots:
allow_metadata_inventory_put = letter_cutter.allow_metadata_inventory_put,
-- Taking is allowed from all slots (even the internal microblock slot). Moving is forbidden.
-- Putting something in is slightly more complicated than taking anything because we have to make sure it is of a suitable material:
on_metadata_inventory_put = letter_cutter.on_metadata_inventory_put_lower,
on_metadata_inventory_take = letter_cutter.on_metadata_inventory_take_lower,
on_metadata_inventory_put = letter_cutter.on_metadata_inventory_put,
on_metadata_inventory_take = letter_cutter.on_metadata_inventory_take,
on_receive_fields = letter_cutter.on_receive_fields,
})
@ -585,17 +461,17 @@ minetest.register_node("letters:letter_cutter_upper", {
node_box = {
type = "fixed",
fixed = {
{-0.4375, -0.5, -0.4375, -0.3125, 0.125, -0.3125}, -- NodeBox1
{-0.4375, -0.5, 0.3125, -0.3125, 0.125, 0.4375}, -- NodeBox2
{0.3125, -0.5, 0.3125, 0.4375, 0.125, 0.4375}, -- NodeBox3
{0.3125, -0.5, -0.4375, 0.4375, 0.125, -0.3125}, -- NodeBox4
{-0.5, 0.0625, -0.5, 0.5, 0.25, 0.5}, -- NodeBox5
{0.1875, 0.25, -0.125, 0.125, 0.3125, -0.3125}, -- NodeBox6
{0.125, 0.25, 0.125, 0.0625, 0.3125, -0.125}, -- NodeBox7
{0.0625, 0.25, 0.3125, -0.0625, 0.3125, 0.0625}, -- NodeBox8
{-0.0625, 0.25, 0.125, -0.125, 0.3125, -0.125}, -- NodeBox9
{-0.125, 0.25, -0.125, -0.1875, 0.3125, -0.3125}, -- NodeBox10
{0.125, 0.25, -0.125, -0.125, 0.3125, -0.1875}, -- NodeBox11
{-0.4375, -0.5, -0.4375, -0.3125, 0.125, -0.3125},
{-0.4375, -0.5, 0.3125, -0.3125, 0.125, 0.4375},
{0.3125, -0.5, 0.3125, 0.4375, 0.125, 0.4375},
{0.3125, -0.5, -0.4375, 0.4375, 0.125, -0.3125},
{-0.5, 0.0625, -0.5, 0.5, 0.25, 0.5},
{0.1875, 0.25, -0.125, 0.125, 0.3125, -0.3125},
{0.125, 0.25, 0.125, 0.0625, 0.3125, -0.125},
{0.0625, 0.25, 0.3125, -0.0625, 0.3125, 0.0625},
{-0.0625, 0.25, 0.125, -0.125, 0.3125, -0.125},
{-0.125, 0.25, -0.125, -0.1875, 0.3125, -0.3125},
{0.125, 0.25, -0.125, -0.125, 0.3125, -0.1875},
},
},
tiles = {"letters_letter_cutter_upper_top.png",
@ -606,9 +482,9 @@ minetest.register_node("letters:letter_cutter_upper", {
paramtype2 = "facedir",
groups = {choppy = 2,oddly_breakable_by_hand = 2},
sounds = default.node_sound_wood_defaults(),
on_construct = letter_cutter.on_construct_upper,
on_construct = letter_cutter.on_construct,
can_dig = letter_cutter.can_dig,
-- Set the owner of this circular saw.
-- Set the cutter type and owner.
after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos)
local owner = placer and placer:get_player_name() or ""
@ -618,12 +494,9 @@ minetest.register_node("letters:letter_cutter_upper", {
..meta:get_string("owner")..")")
end,
allow_metadata_inventory_move = letter_cutter.allow_metadata_inventory_move,
-- Only input- and recycle-slot are intended as input slots:
allow_metadata_inventory_put = letter_cutter.allow_metadata_inventory_put,
-- Taking is allowed from all slots (even the internal microblock slot). Moving is forbidden.
-- Putting something in is slightly more complicated than taking anything because we have to make sure it is of a suitable material:
on_metadata_inventory_put = letter_cutter.on_metadata_inventory_put_upper,
on_metadata_inventory_take = letter_cutter.on_metadata_inventory_take_upper,
on_metadata_inventory_put = letter_cutter.on_metadata_inventory_put,
on_metadata_inventory_take = letter_cutter.on_metadata_inventory_take,
on_receive_fields = letter_cutter.on_receive_fields,
})
@ -636,4 +509,60 @@ minetest.register_craft({
},
})
minetest.register_node("letters:letter_cutter_digit", {
description = "Digit Cutter",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.4375, -0.5, -0.4375, -0.3125, 0.125, -0.3125},
{-0.4375, -0.5, 0.3125, -0.3125, 0.125, 0.4375},
{0.3125, -0.5, 0.3125, 0.4375, 0.125, 0.4375},
{0.3125, -0.5, -0.4375, 0.4375, 0.125, -0.3125},
{-0.5, 0.0625, -0.5, 0.5, 0.25, 0.5},
{-0.0625, 0.25, 0.3125, 0, 0.3125, 0.1875},
{0.125, 0.25, 0.3125, 0.1875, 0.3125, 0.1875},
{-0.25, 0.25, 0.125, 0.25, 0.3125, 0.1875},
{-0.125, 0.25, -0.0625, -0.0625, 0.3125, 0.125},
{0.0625, 0.25, -0.0625, 0.125, 0.3125, 0.125},
{-0.25, 0.25, -0.0625, 0.25, 0.3125, -0.125},
{-0.1875, 0.25, -0.125, -0.125, 0.3125, -0.25},
{0, 0.25, -0.125, 0.0625, 0.3125, -0.25},
},
},
tiles = {"letters_letter_cutter_digit_top.png",
"default_tree.png",
"letters_letter_cutter_side.png"},
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "facedir",
groups = {choppy = 2,oddly_breakable_by_hand = 2},
sounds = default.node_sound_wood_defaults(),
on_construct = letter_cutter.on_construct,
can_dig = letter_cutter.can_dig,
-- Set the cutter type and owner.
after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos)
local owner = placer and placer:get_player_name() or ""
meta:set_string("owner", owner)
meta:set_string("infotext",
"Letter Cutter (Digit) is empty (owned by "
..meta:get_string("owner")..")")
end,
allow_metadata_inventory_move = letter_cutter.allow_metadata_inventory_move,
allow_metadata_inventory_put = letter_cutter.allow_metadata_inventory_put,
on_metadata_inventory_put = letter_cutter.on_metadata_inventory_put,
on_metadata_inventory_take = letter_cutter.on_metadata_inventory_take,
on_receive_fields = letter_cutter.on_receive_fields,
})
minetest.register_craft({
output = "letters:letter_cutter_digit",
recipe = {
{"default:tree", "default:tree", "default:tree"},
{"default:wood", "default:copper_ingot", "default:wood"},
{"default:tree", "", "default:tree"},
},
})
dofile(minetest.get_modpath("letters").."/registrations.lua")

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 755 B