Spanish Translation (#2505)
[oweals/minetest_game.git] / mods / creative / init.lua
index f9047189561c5a07416fe83ff6114c6821795d9b..a1d57c887d96ef0929b1c589fecdbf4bcc17555f 100644 (file)
@@ -1,9 +1,37 @@
+-- creative/init.lua
+
+-- Load support for MT game translation.
+local S = minetest.get_translator("creative")
+
 creative = {}
+creative.get_translator = S
 
-local creative_mode_cache = minetest.setting_getbool("creative_mode")
+local function update_sfinv(name)
+       minetest.after(0, function()
+               local player = minetest.get_player_by_name(name)
+               if player then
+                       if sfinv.get_page(player):sub(1, 9) == "creative:" then
+                               sfinv.set_page(player, sfinv.get_homepage_name(player))
+                       else
+                               sfinv.set_player_inventory_formspec(player)
+                       end
+               end
+       end)
+end
+
+minetest.register_privilege("creative", {
+       description = S("Allow player to use creative inventory"),
+       give_to_singleplayer = false,
+       give_to_admin = false,
+       on_grant = update_sfinv,
+       on_revoke = update_sfinv,
+})
+
+local creative_mode_cache = minetest.settings:get_bool("creative_mode")
 
 function creative.is_enabled_for(name)
-       return creative_mode_cache
+       return creative_mode_cache or
+               minetest.check_player_privs(name, {creative = true})
 end
 
 dofile(minetest.get_modpath("creative") .. "/inventory.lua")
@@ -18,10 +46,8 @@ if creative_mode_cache then
        local digtime = 42
        local caps = {times = {digtime, digtime, digtime}, uses = 0, maxlevel = 256}
 
-       minetest.register_item(":", {
-               type = "none",
-               wield_image = "wieldhand.png",
-               wield_scale = {x = 1, y = 1, z = 2.5},
+       -- Override the hand tool
+       minetest.override_item("", {
                range = 10,
                tool_capabilities = {
                        full_punch_interval = 0.5,
@@ -32,6 +58,9 @@ if creative_mode_cache then
                                snappy  = caps,
                                choppy  = caps,
                                oddly_breakable_by_hand = caps,
+                               -- dig_immediate group doesn't use value 1. Value 3 is instant dig
+                               dig_immediate =
+                                       {times = {[2] = digtime, [3] = 0}, uses = 0, maxlevel = 256},
                        },
                        damage_groups = {fleshy = 10},
                }
@@ -40,23 +69,22 @@ end
 
 -- Unlimited node placement
 minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
-       return creative.is_enabled_for(placer:get_player_name())
+       if placer and placer:is_player() then
+               return creative.is_enabled_for(placer:get_player_name())
+       end
 end)
 
 -- Don't pick up if the item is already in the inventory
 local old_handle_node_drops = minetest.handle_node_drops
 function minetest.handle_node_drops(pos, drops, digger)
-       if not digger or not digger:is_player() then
-               return
-       end
-       if not creative.is_enabled_for(digger:get_player_name()) then
+       if not digger or not digger:is_player() or
+               not creative.is_enabled_for(digger:get_player_name()) then
                return old_handle_node_drops(pos, drops, digger)
        end
        local inv = digger:get_inventory()
        if inv then
                for _, item in ipairs(drops) do
-                       item = ItemStack(item):get_name()
-                       if not inv:contains_item("main", item) then
+                       if not inv:contains_item("main", item, true) then
                                inv:add_item("main", item)
                        end
                end