From ba3b016169bafb2fdc0a7b2cc56fba44dd515801 Mon Sep 17 00:00:00 2001 From: Och Noe Date: Mon, 19 Aug 2019 14:56:25 +0200 Subject: bug removed and stickers added 1. bug There was a bug that the letter machine had "eaten" from the input slot when there was a different letter type already in the output slot. 2. stickers With "default:paper" as input the letter machine makes as now stickers. They are wallmounted and are destroyed when removed. --- init.lua | 605 +++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 321 insertions(+), 284 deletions(-) diff --git a/init.lua b/init.lua index 62ae522..4a5c56f 100644 --- a/init.lua +++ b/init.lua @@ -1,284 +1,321 @@ -local digits = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0"} -local base_chars = { - "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", - "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" -} -local special_chars = { - "!", "#", "$", "%", "&", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", - "<", "=", ">", "?", "@", "'", '"' -} -local german_chars = {"Ä", "Ö", "Ü", "ß"} -local cyrillic_chars = { - "А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", - "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", - "Э", "Ю", "Я" -} -local greek_chars = { - "Α", "Β", "Γ", "Δ", "Ε", "Ζ", "Η", "Θ", "Ι", "Κ", "Λ", "Μ", "Ν", "Ξ", "Ο", - "Π", "Ρ", "Σ", "Τ", "Υ", "Φ", "Χ", "Ψ", "Ω" -} -local additional_chars = { - "猫","北","东","東","南","西","站", -} - -local characters = {} - -ehlphabet = {} -ehlphabet.path = minetest.get_modpath(minetest.get_current_modname()) - --- Intllib -local S, NS = dofile(ehlphabet.path .. "/intllib.lua") -ehlphabet.intllib = S - -local function table_merge(t1, t2) - for k, v in ipairs(t2) do - table.insert(t1, v) - end - return t1 -end - -local function is_multibyte(ch) - local byte = ch:byte() - -- return (195 == byte) or (208 == byte) or (209 == byte) - if not byte then - return false - else - return (byte > 191) - end -end - -table_merge(characters, base_chars) -table_merge(characters, digits) -table_merge(characters, special_chars) -table_merge(characters, german_chars) -table_merge(characters, cyrillic_chars) -table_merge(characters, greek_chars) -table_merge(characters, additional_chars) - -local create_alias = true - --- generate all available blocks -for _, name in ipairs(characters) do - local desc = S("Ehlphabet Block '@1'", name) - local byte = name:byte() - local mb = is_multibyte(name) - local file, key - - if mb then - mb = byte - byte = name:byte(2) - key = "ehlphabet:" .. mb .. byte - file = ("%03d_%03d"):format(mb, byte) - else - key = "ehlphabet:" .. byte - file = ("%03d"):format(byte) - end - - minetest.register_node( - key, - { - description = desc, - tiles = {"ehlphabet_" .. file .. ".png"}, - paramtype2 = "facedir", -- neu - on_rotate = screwdriver.rotate_simple , -- neu - is_ground_content = false, --neu - groups = {cracky = 3, not_in_creative_inventory = 1, not_in_crafting_guide = 1} - } - ) - minetest.register_craft({type = "shapeless", output = "ehlphabet:block", recipe = {key}}) - - if create_alias then - minetest.register_alias("abjphabet:" .. name, key) - end - - -- deactivate alias creation on last latin character - if name == "Z" then - create_alias = false - end -end - -minetest.register_node( - "ehlphabet:machine", - { - description = S("Letter Machine"), - tiles = { - "ehlphabet_machine_top.png", - "ehlphabet_machine_bottom.png", - "ehlphabet_machine_side.png", - "ehlphabet_machine_side.png", - "ehlphabet_machine_back.png", - "ehlphabet_machine_front.png" - }, - paramtype = "light", - paramtype2 = "facedir", - groups = {cracky = 2}, - - -- "Can you dig it?" -Cyrus - can_dig = function(pos, player) - local meta = minetest.env:get_meta(pos) - local inv = meta:get_inventory() - if not inv:is_empty("input") or not inv:is_empty("output") then - if player then - minetest.chat_send_player( - player:get_player_name(), - S("You cannot dig the @1 with blocks inside", S("Letter Machine")) - ) - end -- end if player - return false - end -- end if not empty - return true - end, -- end can_dig function - - after_place_node = function(pos, placer) - local meta = minetest.env:get_meta(pos) - end, - - on_construct = function(pos) - local meta = minetest.env:get_meta(pos) - meta:set_string( - "formspec", - "invsize[8,6;]" .. - "field[3.8,.5;1,1;lettername;" .. S("Letter") .. ";]" .. - "list[current_name;input;2.5,0.2;1,1;]" .. - "list[current_name;output;4.5,0.2;1,1;]" .. - "list[current_player;main;0,2;8,4;]" .. - "button[2.54,-0.25;3,4;name;" .. S("Blank -> Letter") .. "]" - ) - local inv = meta:get_inventory() - inv:set_size("input", 1) - inv:set_size("output", 1) - end, - - on_receive_fields = function(pos, formname, fields, sender) - local meta = minetest.env:get_meta(pos) - local inv = meta:get_inventory() - local inputstack = inv:get_stack("input", 1) - local ch = fields.lettername - - if ch ~= nil and inputstack:get_name() == "ehlphabet:block" then - local mb = is_multibyte(ch) - local key = mb and (ch:byte(1) .. ch:byte(2)) or ch:byte() - for _, v in pairs(characters) do - if v == ch then - local give = {} - give[1] = inv:add_item("output", "ehlphabet:" .. key) - inputstack:take_item() - inv:set_stack("input", 1, inputstack) - break - end - end - end - end - } -) - --- Alias (Och_Noe 20180124) -minetest.register_alias("abjphabet:machine", "ehlphabet:machine") --- - -minetest.register_node( - "ehlphabet:block", - { - description = S("Ehlphabet Block (blank)"), - tiles = {"ehlphabet_000.png"}, - groups = {cracky = 3} - } -) - ---RECIPE: blank blocks -minetest.register_craft({ - output = "ehlphabet:block 8", - recipe = { - {"default:paper", "default:paper", "default:paper"}, - {"default:paper", "", "default:paper"}, - {"default:paper", "default:paper", "default:paper"} - } -}) - ---RECIPE: build the machine! -minetest.register_craft({ - output = "ehlphabet:machine", - recipe = { - {"default:stick", "default:coal_lump", "default:stick"}, - {"default:coal_lump", "ehlphabet:block", "default:coal_lump"}, - {"default:stick", "default:coal_lump", "default:stick"} - } -}) - ---RECIPE: craft unused blocks back into paper -minetest.register_craft({ - output = "default:paper", - recipe = {"ehlphabet:block"}, - type = "shapeless" -}) - --- Chinese Characters - craft from latin characters -minetest.register_craft({ - output = "ehlphabet:231140 4", - recipe = { - {"", "", ""}, - {"ehlphabet:78", "", ""}, - {"ehlphabet:69", "ehlphabet:75", "ehlphabet:79"} - } -}) - -minetest.register_craft({ - output = "ehlphabet:229140 5", - recipe = { - {"ehlphabet:78", "ehlphabet:79", "ehlphabet:82"}, - {"ehlphabet:84", "ehlphabet:72", ""}, - {"", "", ""}, - } -}) - -minetest.register_craft({ - output = "ehlphabet:228184 5", - recipe = { - {"ehlphabet:69", "ehlphabet:65", "ehlphabet:83"}, - {"ehlphabet:84", "", "ehlphabet:83"}, - {"", "", ""}, - } -}) - -minetest.register_craft({ - output = "ehlphabet:230157 5", - recipe = { - {"ehlphabet:69", "ehlphabet:65", "ehlphabet:83"}, - {"ehlphabet:84", "", "ehlphabet:84"}, - {"", "", ""}, - } -}) - -minetest.register_craft({ - output = "ehlphabet:229141 5", - recipe = { - {"ehlphabet:83", "ehlphabet:79", "ehlphabet:85"}, - {"ehlphabet:84", "ehlphabet:72", ""}, - {"", "", ""}, - } -}) - -minetest.register_craft({ - output = "ehlphabet:232165 4", - recipe = { - {"ehlphabet:87", "ehlphabet:69", "ehlphabet:83"}, - {"ehlphabet:84", "", ""}, - {"", "", ""}, - } -}) - -minetest.register_craft({ - output = "ehlphabet:231171 7", - recipe = { - {"ehlphabet:83", "ehlphabet:84", "ehlphabet:65"}, - {"ehlphabet:84", "ehlphabet:73", "ehlphabet:79"}, - {"ehlphabet:78", "", ""}, - } -}) - - - - - - --- print(S("[MOD] Elphabet is loaded")) +local digits = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0"} +local base_chars = { + "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", + "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" +} +local special_chars = { + "!", "#", "$", "%", "&", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", + "<", "=", ">", "?", "@", "'", '"' +} +local german_chars = {"Ä", "Ö", "Ü", "ß"} +local cyrillic_chars = { + "А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", + "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", + "Э", "Ю", "Я" +} +local greek_chars = { + "Α", "Β", "Γ", "Δ", "Ε", "Ζ", "Η", "Θ", "Ι", "Κ", "Λ", "Μ", "Ν", "Ξ", "Ο", + "Π", "Ρ", "Σ", "Τ", "Υ", "Φ", "Χ", "Ψ", "Ω" +} +local additional_chars = { + "猫","北","东","東","南","西","站", +} + +local characters = {} + +ehlphabet = {} +ehlphabet.path = minetest.get_modpath(minetest.get_current_modname()) + +-- Intllib +local S, NS = dofile(ehlphabet.path .. "/intllib.lua") +ehlphabet.intllib = S + +local function table_merge(t1, t2) + for k, v in ipairs(t2) do + table.insert(t1, v) + end + return t1 +end + +local function is_multibyte(ch) + local byte = ch:byte() + -- return (195 == byte) or (208 == byte) or (209 == byte) + if not byte then + return false + else + return (byte > 191) + end +end + +table_merge(characters, base_chars) +table_merge(characters, digits) +table_merge(characters, special_chars) +table_merge(characters, german_chars) +table_merge(characters, cyrillic_chars) +table_merge(characters, greek_chars) +table_merge(characters, additional_chars) + +local create_alias = true + +-- generate all available blocks +for _, name in ipairs(characters) do + local desc = S("Ehlphabet Block '@1'", name) + local byte = name:byte() + local mb = is_multibyte(name) + local file, key + + if mb then + mb = byte + byte = name:byte(2) + key = "ehlphabet:" .. mb .. byte + file = ("%03d_%03d"):format(mb, byte) + else + key = "ehlphabet:" .. byte + file = ("%03d"):format(byte) + end + + minetest.register_node( + key, + { + description = desc, + tiles = {"ehlphabet_" .. file .. ".png"}, + paramtype2 = "facedir", -- neu + on_rotate = screwdriver.rotate_simple , -- neu + is_ground_content = false, --neu + groups = {cracky = 3, not_in_creative_inventory = 1, not_in_crafting_guide = 1} + } + ) + minetest.register_craft({type = "shapeless", output = "ehlphabet:block", recipe = {key}}) + + if create_alias then + minetest.register_alias("abjphabet:" .. name, key) + end + + -- deactivate alias creation on last latin character + if name == "Z" then + create_alias = false + end + + minetest.register_node( + key.."_sticker", + { + description = desc.."Sticker", + tiles = {"ehlphabet_" .. file .. ".png"}, + paramtype = "light", + paramtype2 = "wallmounted", -- "colorwallmounted", + on_rotate = screwdriver.rotate_simple , + drawtype = "nodebox", + is_ground_content = false, + drop = "", -- new + node_box = { + type = "wallmounted", + wall_bottom = {-0.5, -0.5, -0.5, 0.5, -0.49, 0.5}, + wall_top = {-0.5, 0.49, -0.5, 0.5, 0.5, 0.5}, + wall_side = {-0.5, -0.5, -0.5, -0.49, 0.5, 0.5}, + }, + groups = {attached_node = 1, dig_immediate = 2, + not_in_creative_inventory = 1, + not_blocking_trains = 1 }, + } + ) + + + +end + +minetest.register_node( + "ehlphabet:machine", + { + description = S("Letter Machine"), + tiles = { + "ehlphabet_machine_top.png", + "ehlphabet_machine_bottom.png", + "ehlphabet_machine_side.png", + "ehlphabet_machine_side.png", + "ehlphabet_machine_back.png", + "ehlphabet_machine_front.png" + }, + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 2}, + + -- "Can you dig it?" -Cyrus + can_dig = function(pos, player) + local meta = minetest.env:get_meta(pos) + local inv = meta:get_inventory() + if not inv:is_empty("input") or not inv:is_empty("output") then + if player then + minetest.chat_send_player( + player:get_player_name(), + S("You cannot dig the @1 with blocks inside", S("Letter Machine")) + ) + end -- end if player + return false + end -- end if not empty + return true + end, -- end can_dig function + + after_place_node = function(pos, placer) + local meta = minetest.env:get_meta(pos) + end, + + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string( + "formspec", + "invsize[8,6;]" .. + "field[3.8,.5;1,1;lettername;" .. S("Letter") .. ";]" .. + "list[current_name;input;2.5,0.2;1,1;]" .. + "list[current_name;output;4.5,0.2;1,1;]" .. + "list[current_player;main;0,2;8,4;]" .. + "button[2.54,-0.25;3,4;name;" .. S("Blank -> Letter") .. "]" + ) + local inv = meta:get_inventory() + inv:set_size("input", 1) + inv:set_size("output", 1) + end, + + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.env:get_meta(pos) + local inv = meta:get_inventory() + local inputstack = inv:get_stack("input", 1) + local outputstack = inv:get_stack("output", 1) + local ch = fields.lettername + + if ch ~= nil and ch ~= "" then + if inputstack:get_name() == "ehlphabet:block" + or inputstack:get_name() == "default:paper" then + local ost = outputstack:get_name() + local mb = is_multibyte(ch) + local key = mb and (ch:byte(1) .. ch:byte(2)) or ch:byte() + key = key .. (inputstack:get_name() == "default:paper" and "_sticker" or "") + if ost ~= "" and + ost ~= "ehlphabet:"..key then + -- other type in output slot -> abort + return + end + for _, v in pairs(characters) do + if v == ch then + local give = {} + give[1] = inv:add_item("output", "ehlphabet:" .. key) + inputstack:take_item() + inv:set_stack("input", 1, inputstack) + break + end + end + end + end + end + } +) + +-- Alias (Och_Noe 20180124) +minetest.register_alias("abjphabet:machine", "ehlphabet:machine") +-- + +minetest.register_node( + "ehlphabet:block", + { + description = S("Ehlphabet Block (blank)"), + tiles = {"ehlphabet_000.png"}, + groups = {cracky = 3} + } +) + +--RECIPE: blank blocks +minetest.register_craft({ + output = "ehlphabet:block 8", + recipe = { + {"default:paper", "default:paper", "default:paper"}, + {"default:paper", "", "default:paper"}, + {"default:paper", "default:paper", "default:paper"} + } +}) + +--RECIPE: build the machine! +minetest.register_craft({ + output = "ehlphabet:machine", + recipe = { + {"default:stick", "default:coal_lump", "default:stick"}, + {"default:coal_lump", "ehlphabet:block", "default:coal_lump"}, + {"default:stick", "default:coal_lump", "default:stick"} + } +}) + +--RECIPE: craft unused blocks back into paper +minetest.register_craft({ + output = "default:paper", + recipe = {"ehlphabet:block"}, + type = "shapeless" +}) + +-- Chinese Characters - craft from latin characters +minetest.register_craft({ + output = "ehlphabet:231140 4", + recipe = { + {"", "", ""}, + {"ehlphabet:78", "", ""}, + {"ehlphabet:69", "ehlphabet:75", "ehlphabet:79"} + } +}) + +minetest.register_craft({ + output = "ehlphabet:229140 5", + recipe = { + {"ehlphabet:78", "ehlphabet:79", "ehlphabet:82"}, + {"ehlphabet:84", "ehlphabet:72", ""}, + {"", "", ""}, + } +}) + +minetest.register_craft({ + output = "ehlphabet:228184 5", + recipe = { + {"ehlphabet:69", "ehlphabet:65", "ehlphabet:83"}, + {"ehlphabet:84", "", "ehlphabet:83"}, + {"", "", ""}, + } +}) + +minetest.register_craft({ + output = "ehlphabet:230157 5", + recipe = { + {"ehlphabet:69", "ehlphabet:65", "ehlphabet:83"}, + {"ehlphabet:84", "", "ehlphabet:84"}, + {"", "", ""}, + } +}) + +minetest.register_craft({ + output = "ehlphabet:229141 5", + recipe = { + {"ehlphabet:83", "ehlphabet:79", "ehlphabet:85"}, + {"ehlphabet:84", "ehlphabet:72", ""}, + {"", "", ""}, + } +}) + +minetest.register_craft({ + output = "ehlphabet:232165 4", + recipe = { + {"ehlphabet:87", "ehlphabet:69", "ehlphabet:83"}, + {"ehlphabet:84", "", ""}, + {"", "", ""}, + } +}) + +minetest.register_craft({ + output = "ehlphabet:231171 7", + recipe = { + {"ehlphabet:83", "ehlphabet:84", "ehlphabet:65"}, + {"ehlphabet:84", "ehlphabet:73", "ehlphabet:79"}, + {"ehlphabet:78", "", ""}, + } +}) + + + + + + +-- print(S("[MOD] Elphabet is loaded")) -- cgit v1.2.3