minetest_game/mods/screwdriver/init.lua

177 lines
5.0 KiB
Lua
Raw Normal View History

screwdriver = {}
Introducing 'game_intllib' and S() for gettext The new branch 'game_intllib' is aiming at MT internationalization. Please note the about 400 lines of code changed in the Lua code of the existing mods by addition of a S("string") enclosure for GNU gettext. This is in compliance to the GNU gettext toolchain procedures. 'game_intllib' is an attempt at providing internationalization support for the default game mods specifically. Hopefully, we may delay the issue of an optimal translation for the MT server into the future. There is no requirement to include the 'game_intllib' mod into the game code basis if an alternative solution for a translation of user-facing strings of the default mods inside the game is in place. However, the 'game_intllib' and tools may be helpful in assisting the task of translation of user-facing strings of the default mods prior a new release of the game and after introduction of new game code. Please consider to look at my contribution in the MT forum: https://forum.minetest.net/viewtopic.php?f=11&t=4929&p=346791#p346791 This is up to deliberations of the MT developers and the MT game devs. ***************** This is the new branch 'game_intllib' comprising the following: - changed: README.txt - changed: mods/beds/beds.lua - changed: mods/beds/depends.txt - new file: mods/beds/gintllib.lua - changed: mods/binoculars/depends.txt - new file: mods/binoculars/gintllib.lua - changed: mods/binoculars/init.lua - changed: mods/boats/depends.txt - new file: mods/boats/gintllib.lua - changed: mods/boats/init.lua - changed: mods/bones/depends.txt - new file: mods/bones/gintllib.lua - changed: mods/bones/init.lua - changed: mods/bucket/depends.txt - new file: mods/bucket/gintllib.lua - changed: mods/bucket/init.lua - changed: mods/butterflies/depends.txt - new file: mods/butterflies/gintllib.lua - changed: mods/butterflies/init.lua - changed: mods/carts/cart_entity.lua - changed: mods/carts/depends.txt - new file: mods/carts/gintllib.lua - changed: mods/carts/rails.lua - changed: mods/creative/depends.txt - new file: mods/creative/gintllib.lua - changed: mods/creative/init.lua - changed: mods/creative/inventory.lua - changed: mods/default/chests.lua - changed: mods/default/craftitems.lua - changed: mods/default/depends.txt - changed: mods/default/furnace.lua - new file: mods/default/gintllib.lua - changed: mods/default/nodes.lua - changed: mods/default/tools.lua - changed: mods/default/torch.lua - changed: mods/default/trees.lua - changed: mods/doors/depends.txt - new file: mods/doors/gintllib.lua - changed: mods/doors/init.lua - changed: mods/dye/depends.txt - new file: mods/dye/gintllib.lua - changed: mods/dye/init.lua - changed: mods/farming/api.lua - changed: mods/farming/depends.txt - new file: mods/farming/gintllib.lua - changed: mods/farming/hoes.lua - changed: mods/farming/init.lua - changed: mods/farming/nodes.lua - changed: mods/fire/depends.txt - new file: mods/fire/gintllib.lua - changed: mods/fire/init.lua - changed: mods/fireflies/depends.txt - new file: mods/fireflies/gintllib.lua - changed: mods/fireflies/init.lua - changed: mods/flowers/depends.txt - new file: mods/flowers/gintllib.lua - changed: mods/flowers/init.lua - new file: mods/game_commands/depends.txt - new file: mods/game_commands/gintllib.lua - changed: mods/game_commands/init.lua - new file: mods/game_intllib/LICENSE.md - new file: mods/game_intllib/README.md - new file: mods/game_intllib/description.txt - new file: mods/game_intllib/doc/developer.md - new file: mods/game_intllib/doc/localefile.md - new file: mods/game_intllib/doc/translator.md - new file: mods/game_intllib/gettext.lua - new file: mods/game_intllib/init.lua - new file: mods/game_intllib/intltest/README.md - new file: mods/game_intllib/intltest/depends.txt - new file: mods/game_intllib/intltest/gintllib.lua - new file: mods/game_intllib/intltest/init.lua - new file: mods/game_intllib/intltest/locale/es.po - new file: mods/game_intllib/intltest/locale/template.pot - new file: mods/game_intllib/lib.lua - new file: mods/game_intllib/lib/gintllib.lua - new file: mods/game_intllib/license.txt - new file: mods/game_intllib/locale/de.po - new file: mods/game_intllib/locale/template.pot - new file: mods/game_intllib/tools/findtext.lua - new file: mods/game_intllib/tools/updatetext.lua - new file: mods/game_intllib/tools/xgettext.bat - new file: mods/game_intllib/tools/xgettext.sh - changed: mods/map/depends.txt - new file: mods/map/gintllib.lua - changed: mods/map/init.lua - new file: mods/screwdriver/depends.txt - new file: mods/screwdriver/gintllib.lua - changed: mods/screwdriver/init.lua - new file: mods/sethome/depends.txt - new file: mods/sethome/gintllib.lua - changed: mods/sethome/init.lua - changed: mods/stairs/depends.txt - new file: mods/stairs/gintllib.lua - changed: mods/stairs/init.lua - changed: mods/tnt/depends.txt - new file: mods/tnt/gintllib.lua - changed: mods/tnt/init.lua - changed: mods/vessels/depends.txt - new file: mods/vessels/gintllib.lua - changed: mods/vessels/init.lua - changed: mods/walls/depends.txt - new file: mods/walls/gintllib.lua - changed: mods/walls/init.lua - changed: mods/wool/depends.txt - new file: mods/wool/gintllib.lua - changed: mods/wool/init.lua - changed: mods/xpanes/depends.txt - new file: mods/xpanes/gintllib.lua - changed: mods/xpanes/init.lua ***************** The 'game_intllib' internal mod is specifially aimed at default mods internal to the game in the 'minetest_game' folder. The original 'intllib' is an attempt at providing internationalization support for external mods (something Minetest currently lacks). IMHO the 'intllib' mod is a reliable and helpful tool and I have found it to be both robust and compliant to the GNU gettext tool chain. I would like to thank all of the MT developers and certainly @kaeza. [snoopy (Zweihorn)] 2019-05-13
2019-05-13 00:53:58 +02:00
-- Load support for game_intllib.
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP .. "/gintllib.lua")
screwdriver.ROTATE_FACE = 1
screwdriver.ROTATE_AXIS = 2
screwdriver.disallow = function(pos, node, user, mode, new_param2)
return false
end
screwdriver.rotate_simple = function(pos, node, user, mode, new_param2)
if mode ~= screwdriver.ROTATE_FACE then
return false
end
end
-- For attached wallmounted nodes: returns true if rotation is valid
-- simplified version of minetest:builtin/game/falling.lua#L148.
local function check_attached_node(pos, rotation)
local d = minetest.wallmounted_to_dir(rotation)
local p2 = vector.add(pos, d)
local n = minetest.get_node(p2).name
local def2 = minetest.registered_nodes[n]
if def2 and not def2.walkable then
return false
end
return true
end
screwdriver.rotate = {}
local facedir_tbl = {
[screwdriver.ROTATE_FACE] = {
[0] = 1, [1] = 2, [2] = 3, [3] = 0,
[4] = 5, [5] = 6, [6] = 7, [7] = 4,
[8] = 9, [9] = 10, [10] = 11, [11] = 8,
[12] = 13, [13] = 14, [14] = 15, [15] = 12,
[16] = 17, [17] = 18, [18] = 19, [19] = 16,
[20] = 21, [21] = 22, [22] = 23, [23] = 20,
},
[screwdriver.ROTATE_AXIS] = {
[0] = 4, [1] = 4, [2] = 4, [3] = 4,
[4] = 8, [5] = 8, [6] = 8, [7] = 8,
[8] = 12, [9] = 12, [10] = 12, [11] = 12,
[12] = 16, [13] = 16, [14] = 16, [15] = 16,
[16] = 20, [17] = 20, [18] = 20, [19] = 20,
[20] = 0, [21] = 0, [22] = 0, [23] = 0,
},
}
screwdriver.rotate.facedir = function(pos, node, mode)
local rotation = node.param2 % 32 -- get first 5 bits
local other = node.param2 - rotation
rotation = facedir_tbl[mode][rotation] or 0
return rotation + other
end
screwdriver.rotate.colorfacedir = screwdriver.rotate.facedir
local wallmounted_tbl = {
[screwdriver.ROTATE_FACE] = {[2] = 5, [3] = 4, [4] = 2, [5] = 3, [1] = 0, [0] = 1},
[screwdriver.ROTATE_AXIS] = {[2] = 5, [3] = 4, [4] = 2, [5] = 1, [1] = 0, [0] = 3}
}
screwdriver.rotate.wallmounted = function(pos, node, mode)
local rotation = node.param2 % 8 -- get first 3 bits
local other = node.param2 - rotation
rotation = wallmounted_tbl[mode][rotation] or 0
if minetest.get_item_group(node.name, "attached_node") ~= 0 then
-- find an acceptable orientation
for i = 1, 5 do
if not check_attached_node(pos, rotation) then
rotation = wallmounted_tbl[mode][rotation] or 0
else
break
end
end
end
return rotation + other
end
screwdriver.rotate.colorwallmounted = screwdriver.rotate.wallmounted
2014-09-06 22:07:57 +02:00
-- Handles rotation
screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses)
if pointed_thing.type ~= "node" then
return
end
2014-09-06 22:07:57 +02:00
local pos = pointed_thing.under
2017-10-01 15:41:58 +02:00
local player_name = user and user:get_player_name() or ""
2014-09-06 22:07:57 +02:00
2017-10-01 15:41:58 +02:00
if minetest.is_protected(pos, player_name) then
minetest.record_protection_violation(pos, player_name)
return
end
2014-09-06 22:07:57 +02:00
local node = minetest.get_node(pos)
local ndef = minetest.registered_nodes[node.name]
if not ndef then
return itemstack
end
-- can we rotate this paramtype2?
local fn = screwdriver.rotate[ndef.paramtype2]
if not fn and not ndef.on_rotate then
return itemstack
end
2014-09-06 22:07:57 +02:00
local should_rotate = true
local new_param2
if fn then
new_param2 = fn(pos, node, mode)
else
new_param2 = node.param2
end
-- Node provides a handler, so let the handler decide instead if the node can be rotated
if ndef.on_rotate then
-- Copy pos and node because callback can modify it
local result = ndef.on_rotate(vector.new(pos),
{name = node.name, param1 = node.param1, param2 = node.param2},
2015-05-14 16:07:19 +02:00
user, mode, new_param2)
if result == false then -- Disallow rotation
return itemstack
elseif result == true then
should_rotate = false
end
elseif ndef.on_rotate == false then
return itemstack
elseif ndef.can_dig and not ndef.can_dig(pos, user) then
return itemstack
end
if should_rotate and new_param2 ~= node.param2 then
node.param2 = new_param2
minetest.swap_node(pos, node)
minetest.check_for_falling(pos)
end
2014-09-06 22:07:57 +02:00
2017-10-01 15:41:58 +02:00
if not (creative and creative.is_enabled_for and
creative.is_enabled_for(player_name)) then
itemstack:add_wear(65535 / ((uses or 200) - 1))
end
return itemstack
end
2014-09-06 22:07:57 +02:00
-- Screwdriver
minetest.register_tool("screwdriver:screwdriver", {
Introducing 'game_intllib' and S() for gettext The new branch 'game_intllib' is aiming at MT internationalization. Please note the about 400 lines of code changed in the Lua code of the existing mods by addition of a S("string") enclosure for GNU gettext. This is in compliance to the GNU gettext toolchain procedures. 'game_intllib' is an attempt at providing internationalization support for the default game mods specifically. Hopefully, we may delay the issue of an optimal translation for the MT server into the future. There is no requirement to include the 'game_intllib' mod into the game code basis if an alternative solution for a translation of user-facing strings of the default mods inside the game is in place. However, the 'game_intllib' and tools may be helpful in assisting the task of translation of user-facing strings of the default mods prior a new release of the game and after introduction of new game code. Please consider to look at my contribution in the MT forum: https://forum.minetest.net/viewtopic.php?f=11&t=4929&p=346791#p346791 This is up to deliberations of the MT developers and the MT game devs. ***************** This is the new branch 'game_intllib' comprising the following: - changed: README.txt - changed: mods/beds/beds.lua - changed: mods/beds/depends.txt - new file: mods/beds/gintllib.lua - changed: mods/binoculars/depends.txt - new file: mods/binoculars/gintllib.lua - changed: mods/binoculars/init.lua - changed: mods/boats/depends.txt - new file: mods/boats/gintllib.lua - changed: mods/boats/init.lua - changed: mods/bones/depends.txt - new file: mods/bones/gintllib.lua - changed: mods/bones/init.lua - changed: mods/bucket/depends.txt - new file: mods/bucket/gintllib.lua - changed: mods/bucket/init.lua - changed: mods/butterflies/depends.txt - new file: mods/butterflies/gintllib.lua - changed: mods/butterflies/init.lua - changed: mods/carts/cart_entity.lua - changed: mods/carts/depends.txt - new file: mods/carts/gintllib.lua - changed: mods/carts/rails.lua - changed: mods/creative/depends.txt - new file: mods/creative/gintllib.lua - changed: mods/creative/init.lua - changed: mods/creative/inventory.lua - changed: mods/default/chests.lua - changed: mods/default/craftitems.lua - changed: mods/default/depends.txt - changed: mods/default/furnace.lua - new file: mods/default/gintllib.lua - changed: mods/default/nodes.lua - changed: mods/default/tools.lua - changed: mods/default/torch.lua - changed: mods/default/trees.lua - changed: mods/doors/depends.txt - new file: mods/doors/gintllib.lua - changed: mods/doors/init.lua - changed: mods/dye/depends.txt - new file: mods/dye/gintllib.lua - changed: mods/dye/init.lua - changed: mods/farming/api.lua - changed: mods/farming/depends.txt - new file: mods/farming/gintllib.lua - changed: mods/farming/hoes.lua - changed: mods/farming/init.lua - changed: mods/farming/nodes.lua - changed: mods/fire/depends.txt - new file: mods/fire/gintllib.lua - changed: mods/fire/init.lua - changed: mods/fireflies/depends.txt - new file: mods/fireflies/gintllib.lua - changed: mods/fireflies/init.lua - changed: mods/flowers/depends.txt - new file: mods/flowers/gintllib.lua - changed: mods/flowers/init.lua - new file: mods/game_commands/depends.txt - new file: mods/game_commands/gintllib.lua - changed: mods/game_commands/init.lua - new file: mods/game_intllib/LICENSE.md - new file: mods/game_intllib/README.md - new file: mods/game_intllib/description.txt - new file: mods/game_intllib/doc/developer.md - new file: mods/game_intllib/doc/localefile.md - new file: mods/game_intllib/doc/translator.md - new file: mods/game_intllib/gettext.lua - new file: mods/game_intllib/init.lua - new file: mods/game_intllib/intltest/README.md - new file: mods/game_intllib/intltest/depends.txt - new file: mods/game_intllib/intltest/gintllib.lua - new file: mods/game_intllib/intltest/init.lua - new file: mods/game_intllib/intltest/locale/es.po - new file: mods/game_intllib/intltest/locale/template.pot - new file: mods/game_intllib/lib.lua - new file: mods/game_intllib/lib/gintllib.lua - new file: mods/game_intllib/license.txt - new file: mods/game_intllib/locale/de.po - new file: mods/game_intllib/locale/template.pot - new file: mods/game_intllib/tools/findtext.lua - new file: mods/game_intllib/tools/updatetext.lua - new file: mods/game_intllib/tools/xgettext.bat - new file: mods/game_intllib/tools/xgettext.sh - changed: mods/map/depends.txt - new file: mods/map/gintllib.lua - changed: mods/map/init.lua - new file: mods/screwdriver/depends.txt - new file: mods/screwdriver/gintllib.lua - changed: mods/screwdriver/init.lua - new file: mods/sethome/depends.txt - new file: mods/sethome/gintllib.lua - changed: mods/sethome/init.lua - changed: mods/stairs/depends.txt - new file: mods/stairs/gintllib.lua - changed: mods/stairs/init.lua - changed: mods/tnt/depends.txt - new file: mods/tnt/gintllib.lua - changed: mods/tnt/init.lua - changed: mods/vessels/depends.txt - new file: mods/vessels/gintllib.lua - changed: mods/vessels/init.lua - changed: mods/walls/depends.txt - new file: mods/walls/gintllib.lua - changed: mods/walls/init.lua - changed: mods/wool/depends.txt - new file: mods/wool/gintllib.lua - changed: mods/wool/init.lua - changed: mods/xpanes/depends.txt - new file: mods/xpanes/gintllib.lua - changed: mods/xpanes/init.lua ***************** The 'game_intllib' internal mod is specifially aimed at default mods internal to the game in the 'minetest_game' folder. The original 'intllib' is an attempt at providing internationalization support for external mods (something Minetest currently lacks). IMHO the 'intllib' mod is a reliable and helpful tool and I have found it to be both robust and compliant to the GNU gettext tool chain. I would like to thank all of the MT developers and certainly @kaeza. [snoopy (Zweihorn)] 2019-05-13
2019-05-13 00:53:58 +02:00
description = S("Screwdriver (left-click rotates face, right-click rotates axis)"),
inventory_image = "screwdriver.png",
on_use = function(itemstack, user, pointed_thing)
screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_FACE, 200)
2014-09-06 22:07:57 +02:00
return itemstack
end,
on_place = function(itemstack, user, pointed_thing)
screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_AXIS, 200)
return itemstack
end,
})
2014-09-06 22:07:57 +02:00
minetest.register_craft({
output = "screwdriver:screwdriver",
recipe = {
{"default:steel_ingot"},
{"group:stick"}
}
})
minetest.register_alias("screwdriver:screwdriver1", "screwdriver:screwdriver")
minetest.register_alias("screwdriver:screwdriver2", "screwdriver:screwdriver")
minetest.register_alias("screwdriver:screwdriver3", "screwdriver:screwdriver")
minetest.register_alias("screwdriver:screwdriver4", "screwdriver:screwdriver")