From 1b0e93bc36a242eecab78266e9f4fe483bdf7f2d Mon Sep 17 00:00:00 2001 From: AntumDeluge Date: Wed, 24 May 2017 13:29:30 -0700 Subject: [PATCH] [mp_minetest] Downgrade to stable version --- README.md | 6 + mods/mp_minetest/beds/api.lua | 15 +- mods/mp_minetest/beds/functions.lua | 7 - mods/mp_minetest/boats/init.lua | 15 +- mods/mp_minetest/bones/init.lua | 3 +- mods/mp_minetest/carts/cart_entity.lua | 15 +- mods/mp_minetest/carts/functions.lua | 6 +- mods/mp_minetest/carts/rails.lua | 20 +- .../carts/textures/carts_cart_front.png | Bin 459 -> 3108 bytes .../carts/textures/carts_cart_side.png | Bin 486 -> 3135 bytes .../carts/textures/carts_cart_top.png | Bin 522 -> 3171 bytes mods/mp_minetest/creative/init.lua | 43 +- mods/mp_minetest/creative/inventory.lua | 5 +- mods/mp_minetest/default/README.txt | 54 +- mods/mp_minetest/default/crafting.lua | 160 +--- mods/mp_minetest/default/craftitems.lua | 110 +-- mods/mp_minetest/default/depends.txt | 1 - mods/mp_minetest/default/functions.lua | 164 ++-- mods/mp_minetest/default/license.txt | 3 - mods/mp_minetest/default/mapgen.lua | 423 +++-------- .../mp_minetest/default/models/chest_open.obj | 88 --- mods/mp_minetest/default/models/cube.obj | 38 - mods/mp_minetest/default/nodes.lua | 706 +++++------------- mods/mp_minetest/default/player.lua | 3 +- .../default/schematics/acacia_log.mts | Bin 65 -> 0 bytes .../default/schematics/apple_log.mts | Bin 90 -> 0 bytes .../default/schematics/apple_tree.mts | Bin 169 -> 163 bytes .../schematics/apple_tree_from_sapling.mts | Bin 173 -> 167 bytes .../default/schematics/aspen_log.mts | Bin 118 -> 0 bytes .../default/schematics/aspen_tree.mts | Bin 174 -> 176 bytes .../schematics/aspen_tree_from_sapling.mts | Bin 174 -> 175 bytes .../default/schematics/jungle_log.mts | Bin 96 -> 0 bytes .../default/schematics/jungle_tree.mts | Bin 255 -> 251 bytes .../schematics/jungle_tree_from_sapling.mts | Bin 247 -> 246 bytes .../default/schematics/pine_log.mts | Bin 93 -> 0 bytes .../default/schematics/pine_tree.mts | Bin 176 -> 175 bytes .../schematics/pine_tree_from_sapling.mts | Bin 174 -> 172 bytes .../default/sounds/default_chest_close.ogg | Bin 10099 -> 0 bytes .../default/sounds/default_chest_open.ogg | Bin 10578 -> 0 bytes .../textures/default_acacia_bush_sapling.png | Bin 151 -> 0 bytes .../default/textures/default_aspen_leaves.png | Bin 873 -> 761 bytes .../default/textures/default_bush_sapling.png | Bin 165 -> 0 bytes .../default/textures/default_chest_wood.png | Bin 2320 -> 0 bytes .../textures/default_chest_wood_locked.png | Bin 2418 -> 0 bytes .../textures/default_desert_sandstone.png | Bin 275 -> 0 bytes .../default_desert_sandstone_block.png | Bin 587 -> 0 bytes .../default_desert_sandstone_brick.png | Bin 630 -> 0 bytes .../default/textures/default_flint.png | Bin 397 -> 3038 bytes .../default/textures/default_grass_1.png | Bin 300 -> 2944 bytes .../default/textures/default_grass_2.png | Bin 336 -> 2980 bytes .../default/textures/default_grass_3.png | Bin 418 -> 3065 bytes .../default/textures/default_grass_4.png | Bin 503 -> 3134 bytes .../default/textures/default_grass_5.png | Bin 628 -> 3269 bytes .../default/textures/default_key.png | Bin 415 -> 3037 bytes .../default/textures/default_key_skeleton.png | Bin 423 -> 3043 bytes .../default/textures/default_ladder_steel.png | Bin 587 -> 3223 bytes .../textures/default_mese_post_light_side.png | Bin 353 -> 0 bytes .../default_mese_post_light_side_dark.png | Bin 353 -> 0 bytes .../textures/default_mese_post_light_top.png | Bin 155 -> 0 bytes .../default/textures/default_mineral_tin.png | Bin 171 -> 0 bytes .../textures/default_rainforest_litter.png | Bin 940 -> 0 bytes .../default_rainforest_litter_side.png | Bin 497 -> 0 bytes .../default/textures/default_sign_steel.png | Bin 537 -> 3173 bytes .../textures/default_sign_wall_steel.png | Bin 550 -> 3187 bytes .../textures/default_sign_wall_wood.png | Bin 758 -> 3391 bytes .../default/textures/default_sign_wood.png | Bin 770 -> 3406 bytes .../textures/default_silver_sandstone.png | Bin 211 -> 0 bytes .../default_silver_sandstone_block.png | Bin 290 -> 0 bytes .../default_silver_sandstone_brick.png | Bin 314 -> 0 bytes .../default/textures/default_snow.png | Bin 522 -> 4577 bytes .../default/textures/default_snow_side.png | Bin 848 -> 3445 bytes .../default/textures/default_snowball.png | Bin 446 -> 3102 bytes .../default/textures/default_tin_block.png | Bin 274 -> 0 bytes .../default/textures/default_tin_ingot.png | Bin 198 -> 0 bytes .../default/textures/default_tin_lump.png | Bin 166 -> 0 bytes mods/mp_minetest/default/tools.lua | 51 +- mods/mp_minetest/default/torch.lua | 7 +- mods/mp_minetest/default/trees.lua | 76 +- mods/mp_minetest/doors/init.lua | 81 +- .../doors/textures/doors_door_glass.png | Bin 491 -> 3064 bytes .../textures/doors_door_obsidian_glass.png | Bin 420 -> 2988 bytes mods/mp_minetest/dye/init.lua | 63 +- mods/mp_minetest/farming/api.lua | 27 +- mods/mp_minetest/farming/nodes.lua | 8 - mods/mp_minetest/fire/init.lua | 33 +- .../fire/textures/fire_flint_steel.png | Bin 459 -> 3108 bytes mods/mp_minetest/flowers/init.lua | 38 +- mods/mp_minetest/flowers/mapgen.lua | 6 +- .../flowers/textures/flowers_waterlily.png | Bin 690 -> 3363 bytes mods/mp_minetest/killme/init.lua | 24 - mods/mp_minetest/screwdriver/init.lua | 127 +--- mods/mp_minetest/sethome/init.lua | 27 +- mods/mp_minetest/sfinv/api.lua | 71 +- mods/mp_minetest/stairs/init.lua | 158 +--- .../stairs/models/stairs_stair.obj | 6 +- mods/mp_minetest/tnt/README.txt | 5 +- mods/mp_minetest/tnt/init.lua | 63 +- 97 files changed, 743 insertions(+), 2013 deletions(-) delete mode 100644 mods/mp_minetest/default/depends.txt delete mode 100644 mods/mp_minetest/default/models/chest_open.obj delete mode 100644 mods/mp_minetest/default/models/cube.obj delete mode 100644 mods/mp_minetest/default/schematics/acacia_log.mts delete mode 100644 mods/mp_minetest/default/schematics/apple_log.mts delete mode 100644 mods/mp_minetest/default/schematics/aspen_log.mts delete mode 100644 mods/mp_minetest/default/schematics/jungle_log.mts delete mode 100644 mods/mp_minetest/default/schematics/pine_log.mts delete mode 100644 mods/mp_minetest/default/sounds/default_chest_close.ogg delete mode 100644 mods/mp_minetest/default/sounds/default_chest_open.ogg delete mode 100644 mods/mp_minetest/default/textures/default_acacia_bush_sapling.png delete mode 100644 mods/mp_minetest/default/textures/default_bush_sapling.png delete mode 100644 mods/mp_minetest/default/textures/default_chest_wood.png delete mode 100644 mods/mp_minetest/default/textures/default_chest_wood_locked.png delete mode 100644 mods/mp_minetest/default/textures/default_desert_sandstone.png delete mode 100644 mods/mp_minetest/default/textures/default_desert_sandstone_block.png delete mode 100644 mods/mp_minetest/default/textures/default_desert_sandstone_brick.png delete mode 100644 mods/mp_minetest/default/textures/default_mese_post_light_side.png delete mode 100644 mods/mp_minetest/default/textures/default_mese_post_light_side_dark.png delete mode 100644 mods/mp_minetest/default/textures/default_mese_post_light_top.png delete mode 100644 mods/mp_minetest/default/textures/default_mineral_tin.png delete mode 100644 mods/mp_minetest/default/textures/default_rainforest_litter.png delete mode 100644 mods/mp_minetest/default/textures/default_rainforest_litter_side.png delete mode 100644 mods/mp_minetest/default/textures/default_silver_sandstone.png delete mode 100644 mods/mp_minetest/default/textures/default_silver_sandstone_block.png delete mode 100644 mods/mp_minetest/default/textures/default_silver_sandstone_brick.png delete mode 100644 mods/mp_minetest/default/textures/default_tin_block.png delete mode 100644 mods/mp_minetest/default/textures/default_tin_ingot.png delete mode 100644 mods/mp_minetest/default/textures/default_tin_lump.png delete mode 100644 mods/mp_minetest/killme/init.lua diff --git a/README.md b/README.md index ee8f33ee..848b65ef 100644 --- a/README.md +++ b/README.md @@ -209,6 +209,8 @@ The game includes the mods from the default [minetest_game](https://github.com/m * barn * mobf * mobf_settings +* [minetest][minetest_game] ([LGPL][lic.lgpl2.1] / [CC BY-SA][lic.ccbysa3.0]) -- version: [0.4.15 (3c9d089 Git)][ver.minetest_game] *2016-12-21* + * mp_minetest/ * [moremesecons][] ([MPL][lic.mpl2.0]) -- version: [e1d2e84 Git][ver.moremesecons] *2017-05-02* ([patched][patch.moremesecons]) * mp_moremesecons/ * [mydoors][] ([CC-BY / CC-BY-SA][lic.mydoors] / [WTFPL][lic.wtfpl] / [DWYWFPL][lic.dwywpl]) -- version: [63aef13 Git][ver.mydoors] *2017-03-31* ([patched][patch.mydoors]) @@ -281,6 +283,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m [kpgmobs]: https://forum.minetest.net/viewtopic.php?t=8798 [lightning]: https://forum.minetest.net/viewtopic.php?t=13886 [mesecons]: https://forum.minetest.net/viewtopic.php?t=628 +[minetest_game]: https://github.com/minetest/minetest_game [mobs_goblins]: https://forum.minetest.net/viewtopic.php?t=13004 [mobs_monster]: https://github.com/tenplus1/mobs_monster [mobs_redo]: https://forum.minetest.net/viewtopic.php?t=9917 @@ -289,6 +292,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m [moremesecons]: https://forum.minetest.net/viewtopic.php?t=13150 [moreores]: https://forum.minetest.net/viewtopic.php?t=549 [moretrees]: https://forum.minetest.net/viewtopic.php?t=4394 +[mthudclock]: https://forum.minetest.net/viewtopic.php?t=11879 [mydoors]: https://forum.minetest.net/viewtopic.php?t=10626 [mywoodslopes]: https://forum.minetest.net/viewtopic.php?t=11433 [nether]: https://forum.minetest.net/viewtopic.php?t=5790 @@ -476,6 +480,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m [ver.jukebox]: https://github.com/minetest-mods/jukebox/tree/e6a507f [ver.lightning]: https://github.com/minetest-mods/lightning/tree/39bd36c [ver.mesecons]: https://github.com/minetest-mods/mesecons/tree/564bdc2 +[ver.minetest_game]: https://github.com/minetest/minetest_game/tree/3c9d089 [ver.mobf_core]: https://github.com/sapier/mobf_core/tree/1199ca9 [ver.mobs_goblins]: https://github.com/FreeLikeGNU/mobs_goblins/tree/a346f85 [ver.mobs_monster]: https://github.com/tenplus1/mobs_monster/tree/f6d0e01 @@ -484,6 +489,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m [ver.moreblocks]: https://github.com/minetest-mods/moreblocks/tree/fbfb079 [ver.moremesecons]: https://github.com/minetest-mods/MoreMesecons/tree/e1d2e84 [ver.moreores]: https://github.com/minetest-mods/moreores/tree/0842b4f +[ver.mthudclock]: https://github.com/Rochambeau/mthudclock/tree/b3e2142 [ver.mydoors]: https://github.com/minetest-mods/mydoors/tree/63aef13 [ver.mywoodslopes]: https://github.com/minetest-mods/mywoodslopes/tree/3a1b531 [ver.nether]: https://github.com/PilzAdam/nether/tree/bc2ccfb diff --git a/mods/mp_minetest/beds/api.lua b/mods/mp_minetest/beds/api.lua index 97dde43d..3b2bb0d5 100644 --- a/mods/mp_minetest/beds/api.lua +++ b/mods/mp_minetest/beds/api.lua @@ -34,7 +34,7 @@ function beds.register_bed(name, def) is_ground_content = false, stack_max = 1, groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 1}, - sounds = def.sounds or default.node_sound_wood_defaults(), + sounds = default.node_sound_wood_defaults(), node_box = { type = "fixed", fixed = def.nodebox.bottom, @@ -46,14 +46,6 @@ function beds.register_bed(name, def) on_place = function(itemstack, placer, pointed_thing) local under = pointed_thing.under - local node = minetest.get_node(under) - local udef = minetest.registered_nodes[node.name] - if udef and udef.on_rightclick and - not (placer and placer:get_player_control().sneak) then - return udef.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack - end - local pos if minetest.registered_items[minetest.get_node(under).name].buildable_to then pos = under @@ -89,8 +81,7 @@ function beds.register_bed(name, def) minetest.set_node(pos, {name = name .. "_bottom", param2 = dir}) minetest.set_node(botpos, {name = name .. "_top", param2 = dir}) - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(placer:get_player_name())) then + if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end return itemstack @@ -147,7 +138,7 @@ function beds.register_bed(name, def) is_ground_content = false, pointable = false, groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 2}, - sounds = def.sounds or default.node_sound_wood_defaults(), + sounds = default.node_sound_wood_defaults(), drop = name .. "_bottom", node_box = { type = "fixed", diff --git a/mods/mp_minetest/beds/functions.lua b/mods/mp_minetest/beds/functions.lua index 98483306..896844e5 100644 --- a/mods/mp_minetest/beds/functions.lua +++ b/mods/mp_minetest/beds/functions.lua @@ -29,7 +29,6 @@ local function is_night_skip_enabled() return enable_night_skip end ---[[ local function check_in_beds(players) local in_bed = beds.player if not players then @@ -45,12 +44,6 @@ local function check_in_beds(players) return #players > 0 end -]]-- - --- Allow night skip if any player is in bed -local function check_in_beds(players) - return true -end local function lay_down(player, pos, bed_pos, state, skip) local name = player:get_player_name() diff --git a/mods/mp_minetest/boats/init.lua b/mods/mp_minetest/boats/init.lua index 4d8f4673..0591ef24 100644 --- a/mods/mp_minetest/boats/init.lua +++ b/mods/mp_minetest/boats/init.lua @@ -110,8 +110,7 @@ function boat.on_punch(self, puncher) if not self.driver then self.removed = true local inv = puncher:get_inventory() - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(puncher:get_player_name())) + if not minetest.setting_getbool("creative_mode") or not inv:contains_item("main", "boats:boat") then local leftover = inv:add_item("main", "boats:boat") -- if no room in inventory add a replacement boat to the world @@ -226,15 +225,6 @@ minetest.register_craftitem("boats:boat", { groups = {flammable = 2}, on_place = function(itemstack, placer, pointed_thing) - local under = pointed_thing.under - local node = minetest.get_node(under) - local udef = minetest.registered_nodes[node.name] - if udef and udef.on_rightclick and - not (placer and placer:get_player_control().sneak) then - return udef.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack - end - if pointed_thing.type ~= "node" then return itemstack end @@ -245,8 +235,7 @@ minetest.register_craftitem("boats:boat", { boat = minetest.add_entity(pointed_thing.under, "boats:boat") if boat then boat:setyaw(placer:get_look_horizontal()) - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(placer:get_player_name())) then + if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end end diff --git a/mods/mp_minetest/bones/init.lua b/mods/mp_minetest/bones/init.lua index 56f5fd04..9542cab0 100644 --- a/mods/mp_minetest/bones/init.lua +++ b/mods/mp_minetest/bones/init.lua @@ -167,8 +167,7 @@ minetest.register_on_dieplayer(function(player) end -- return if keep inventory set or in creative mode - if bones_mode == "keep" or (creative and creative.is_enabled_for - and creative.is_enabled_for(player:get_player_name())) then + if bones_mode == "keep" or minetest.setting_getbool("creative_mode") then return end diff --git a/mods/mp_minetest/carts/cart_entity.lua b/mods/mp_minetest/carts/cart_entity.lua index a19da648..e8707fb4 100644 --- a/mods/mp_minetest/carts/cart_entity.lua +++ b/mods/mp_minetest/carts/cart_entity.lua @@ -92,8 +92,7 @@ function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities, end -- Pick up cart local inv = puncher:get_inventory() - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(puncher:get_player_name())) + if not minetest.setting_getbool("creative_mode") or not inv:contains_item("main", "carts:cart") then local leftover = inv:add_item("main", "carts:cart") -- If no room in inventory add a replacement cart to the world @@ -363,15 +362,6 @@ minetest.register_craftitem("carts:cart", { inventory_image = minetest.inventorycube("carts_cart_top.png", "carts_cart_side.png", "carts_cart_side.png"), wield_image = "carts_cart_side.png", on_place = function(itemstack, placer, pointed_thing) - local under = pointed_thing.under - local node = minetest.get_node(under) - local udef = minetest.registered_nodes[node.name] - if udef and udef.on_rightclick and - not (placer and placer:get_player_control().sneak) then - return udef.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack - end - if not pointed_thing.type == "node" then return end @@ -386,8 +376,7 @@ minetest.register_craftitem("carts:cart", { minetest.sound_play({name = "default_place_node_metal", gain = 0.5}, {pos = pointed_thing.above}) - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(placer:get_player_name())) then + if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end return itemstack diff --git a/mods/mp_minetest/carts/functions.lua b/mods/mp_minetest/carts/functions.lua index a4717194..285645cb 100644 --- a/mods/mp_minetest/carts/functions.lua +++ b/mods/mp_minetest/carts/functions.lua @@ -181,8 +181,8 @@ function carts:pathfinder(pos_, old_pos, old_dir, ctrl, pf_switch, railtype) return false end -function carts:register_rail(name, def_overwrite, railparams) - local def = { +function carts:register_rail(name, def, railparams) + local def_default = { drawtype = "raillike", paramtype = "light", sunlight_propagates = true, @@ -194,7 +194,7 @@ function carts:register_rail(name, def_overwrite, railparams) }, sounds = default.node_sound_metal_defaults() } - for k, v in pairs(def_overwrite) do + for k, v in pairs(def_default) do def[k] = v end if not def.inventory_image then diff --git a/mods/mp_minetest/carts/rails.lua b/mods/mp_minetest/carts/rails.lua index 066779d1..5da4ac4d 100644 --- a/mods/mp_minetest/carts/rails.lua +++ b/mods/mp_minetest/carts/rails.lua @@ -10,11 +10,11 @@ carts:register_rail("carts:rail", { }, {}) minetest.register_craft({ - output = "carts:rail 18", + output = "carts:rail 16", recipe = { - {"default:steel_ingot", "group:wood", "default:steel_ingot"}, {"default:steel_ingot", "", "default:steel_ingot"}, - {"default:steel_ingot", "group:wood", "default:steel_ingot"}, + {"default:steel_ingot", "group:stick", "default:steel_ingot"}, + {"default:steel_ingot", "", "default:steel_ingot"}, } }) @@ -31,11 +31,11 @@ carts:register_rail("carts:powerrail", { }, {acceleration = 5}) minetest.register_craft({ - output = "carts:powerrail 18", + output = "carts:powerrail 8", recipe = { - {"default:steel_ingot", "group:wood", "default:steel_ingot"}, - {"default:steel_ingot", "default:mese_crystal", "default:steel_ingot"}, - {"default:steel_ingot", "group:wood", "default:steel_ingot"}, + {"default:steel_ingot", "default:mese_crystal_fragment", "default:steel_ingot"}, + {"default:steel_ingot", "group:stick", "default:steel_ingot"}, + {"default:steel_ingot", "default:mese_crystal_fragment", "default:steel_ingot"}, } }) @@ -50,10 +50,10 @@ carts:register_rail("carts:brakerail", { }, {acceleration = -3}) minetest.register_craft({ - output = "carts:brakerail 18", + output = "carts:brakerail 8", recipe = { - {"default:steel_ingot", "group:wood", "default:steel_ingot"}, {"default:steel_ingot", "default:coal_lump", "default:steel_ingot"}, - {"default:steel_ingot", "group:wood", "default:steel_ingot"}, + {"default:steel_ingot", "group:stick", "default:steel_ingot"}, + {"default:steel_ingot", "default:coal_lump", "default:steel_ingot"}, } }) diff --git a/mods/mp_minetest/carts/textures/carts_cart_front.png b/mods/mp_minetest/carts/textures/carts_cart_front.png index 38955b25adb0ce47e36697d888d4acc6c3d8ccda..b85696f9b64228026312844009f18a821ada1c94 100644 GIT binary patch delta 2693 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 delta 45 zcmaDX(Zw>sn45vIILO_J@#aaL`pM;7FNHV@JR*x37`TN&n2}-D9Er)3xGw?#IhG9_ diff --git a/mods/mp_minetest/creative/init.lua b/mods/mp_minetest/creative/init.lua index bba9b34e..868b802b 100644 --- a/mods/mp_minetest/creative/init.lua +++ b/mods/mp_minetest/creative/init.lua @@ -1,14 +1,6 @@ -creative = {} - -local creative_mode_cache = minetest.setting_getbool("creative_mode") - -function creative.is_enabled_for(name) - return creative_mode_cache -end - dofile(minetest.get_modpath("creative") .. "/inventory.lua") -if creative_mode_cache then +if minetest.setting_getbool("creative_mode") then -- Dig time is modified according to difference (leveldiff) between tool -- 'maxlevel' and node 'level'. Digtime is divided by the larger of -- leveldiff and 1. @@ -36,27 +28,22 @@ if creative_mode_cache then damage_groups = {fleshy = 10}, } }) -end --- Unlimited node placement -minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack) - return creative.is_enabled_for(placer:get_player_name()) -end) + minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack) + return true + 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 - return old_handle_node_drops(pos, drops, digger) - end - local inv = digger:get_inventory() - if inv then - for _, item in ipairs(drops) do - if not inv:contains_item("main", item, true) then - inv:add_item("main", item) + function minetest.handle_node_drops(pos, drops, digger) + if not digger or not digger:is_player() then + return + 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 + inv:add_item("main", item) + end end end end diff --git a/mods/mp_minetest/creative/inventory.lua b/mods/mp_minetest/creative/inventory.lua index 1363e294..be24b3a2 100644 --- a/mods/mp_minetest/creative/inventory.lua +++ b/mods/mp_minetest/creative/inventory.lua @@ -1,3 +1,4 @@ +creative = {} local player_inventory = {} function creative.init_creative_inventory(player) @@ -78,7 +79,7 @@ function creative.register_tab(name, title, items) sfinv.register_page("creative:" .. name, { title = title, is_in_nav = function(self, player, context) - return creative.is_enabled_for(player:get_player_name()) + return minetest.setting_getbool("creative_mode") end, get = function(self, player, context) local player_name = player:get_player_name() @@ -171,7 +172,7 @@ creative.register_tab("craftitems", "Items", minetest.registered_craftitems) local old_homepage_name = sfinv.get_homepage_name function sfinv.get_homepage_name(player) - if creative.is_enabled_for(player:get_player_name()) then + if minetest.setting_getbool("creative_mode") then return "creative:all" else return old_homepage_name(player) diff --git a/mods/mp_minetest/default/README.txt b/mods/mp_minetest/default/README.txt index 350c4b74..d261b6b5 100644 --- a/mods/mp_minetest/default/README.txt +++ b/mods/mp_minetest/default/README.txt @@ -17,7 +17,6 @@ Cisoun's texture pack (CC BY-SA 3.0): default_lava.png default_leaves.png default_sapling.png - default_bush_sapling.png default_stone.png default_tree.png default_tree_top.png @@ -78,6 +77,10 @@ Splizard (CC BY-SA 3.0): Zeg9 (CC BY-SA 3.0): default_coal_block.png + default_steel_block.png + default_copper_block.png + default_bronze_block.png + default_gold_block.png paramat (CC BY-SA 3.0): wieldhand.png -- Copied from character.png by Jordach (CC BY-SA 3.0) @@ -87,7 +90,6 @@ paramat (CC BY-SA 3.0): default_acacia_leaves.png default_acacia_leaves_simple.png default_acacia_sapling.png - default_acacia_bush_sapling.png default_acacia_tree.png default_acacia_tree_top.png default_acacia_wood.png @@ -113,18 +115,11 @@ paramat (CC BY-SA 3.0): default_grass_side.png default_mese_block.png default_silver_sand.png - default_mese_post_light_side.png - default_mese_post_light_side_dark.png - default_mese_post_light_top.png - default_silver_sandstone.png -- Derived from a texture by GreenXenith (CC-BY-SA 3.0) - default_silver_sandstone_brick.png -- Derived from a texture by GreenXenith (CC-BY-SA 3.0) - default_silver_sandstone_block.png -- Derived from a texture by GreenXenith (CC-BY-SA 3.0) brunob.santos (CC BY-SA 4.0): default_desert_cobble.png BlockMen (CC BY-SA 3.0): - default_aspen_leaves.png -- Derived from Sofar's texture default_wood.png default_clay_brick.png default_iron_ingot.png @@ -136,10 +131,10 @@ BlockMen (CC BY-SA 3.0): default_lava_source_animated.png default_lava_flowing_animated.png default_stick.png - default_chest_front.png -- Texture kept for mod compability - default_chest_lock.png -- Texture kept for mod compability - default_chest_side.png -- Texture kept for mod compability - default_chest_top.png -- Texture kept for mod compability + default_chest_front.png + default_chest_lock.png + default_chest_side.png + default_chest_top.png default_mineral_mese.png default_meselamp.png bubble.png @@ -151,12 +146,10 @@ Wuzzy (CC BY-SA 3.0): sofar (CC BY-SA 3.0): default_book_written.png, based on default_book.png default_aspen_sapling + default_aspen_leaves default_aspen_tree default_aspen_tree_top, derived from default_pine_tree_top (by paramat) default_aspen_wood, derived from default_pine_wood (by paramat) - default_chest_wood, default_chest_wood_locked derived from default_chest_* textures by BlockMen - -sofar (WTFPL): default_gravel.png -- Derived from Gambit's PixelBOX texture pack light gravel Neuromancer (CC BY-SA 2.0): @@ -202,25 +195,6 @@ Ferk (CC0 1.0) default_item_smoke.png default_item_smoke.ogg, based on sound by http://opengameart.org/users/bart -npx (CC BY-SA 3.0) - default_rainforest_litter.png - default_rainforest_litter_side.png - -kaeza (CC-BY-SA 3.0): - default_desert_sandstone.png - default_desert_sandstone_brick.png - default_desert_sandstone_block.png - -kilbith (CC BY-SA 3.0): - default_steel_block.png - default_copper_block.png - default_bronze_block.png - default_gold_block.png - default_tin_block.png - default_mineral_tin.png - default_tin_ingot.png - default_tin_lump.png - Glass breaking sounds (CC BY 3.0): 1: http://www.freesound.org/people/cmusounddesign/sounds/71947/ 2: http://www.freesound.org/people/Tomlija/sounds/97669/ @@ -288,13 +262,3 @@ https://www.freesound.org/people/AGFX/packs/1253/ blukotek (CC0 1.0) https://www.freesound.org/people/blukotek/sounds/251660/ default_dig_snappy.ogg - -Chests sounds added by sofar, derived of several files mixed together: - default_chest_open.ogg - default_chest_close.ogg - - http://www.freesound.org/people/Sevin7/sounds/269722/ CC0 - - http://www.freesound.org/people/Percy%20Duke/sounds/23448/ CC-BY-3.0 - - http://www.freesound.org/people/kingsamas/sounds/135576/ CC-BY-3.0 - - http://www.freesound.org/people/bulbastre/sounds/126887/ CC-BY-3.0 - - http://www.freesound.org/people/Yoyodaman234/sounds/183541/ CC0 - diff --git a/mods/mp_minetest/default/crafting.lua b/mods/mp_minetest/default/crafting.lua index 50ffb1ae..483245c2 100644 --- a/mods/mp_minetest/default/crafting.lua +++ b/mods/mp_minetest/default/crafting.lua @@ -392,6 +392,12 @@ minetest.register_craft({ } }) +minetest.register_craft({ + type = "shapeless", + output = "default:bronze_ingot", + recipe = {"default:steel_ingot", "default:copper_ingot"}, +}) + minetest.register_craft({ output = 'default:coalblock', recipe = { @@ -440,31 +446,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - output = "default:tinblock", - recipe = { - {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, - {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, - {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, - } -}) - -minetest.register_craft({ - output = "default:tin_ingot 9", - recipe = { - {"default:tinblock"}, - } -}) - -minetest.register_craft({ - output = "default:bronze_ingot 9", - recipe = { - {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, - {"default:copper_ingot", "default:tin_ingot", "default:copper_ingot"}, - {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, - } -}) - minetest.register_craft({ output = 'default:bronzeblock', recipe = { @@ -514,98 +495,34 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "default:sandstone", + output = 'default:sandstone', recipe = { - {"default:sand", "default:sand"}, - {"default:sand", "default:sand"}, + {'group:sand', 'group:sand'}, + {'group:sand', 'group:sand'}, } }) minetest.register_craft({ - output = "default:sand 4", + output = 'default:sand 4', recipe = { - {"default:sandstone"}, + {'default:sandstone'}, } }) minetest.register_craft({ - output = "default:sandstonebrick 4", + output = 'default:sandstonebrick 4', recipe = { - {"default:sandstone", "default:sandstone"}, - {"default:sandstone", "default:sandstone"}, + {'default:sandstone', 'default:sandstone'}, + {'default:sandstone', 'default:sandstone'}, } }) minetest.register_craft({ - output = "default:sandstone_block 9", + output = 'default:sandstone_block 9', recipe = { - {"default:sandstone", "default:sandstone", "default:sandstone"}, - {"default:sandstone", "default:sandstone", "default:sandstone"}, - {"default:sandstone", "default:sandstone", "default:sandstone"}, - } -}) - -minetest.register_craft({ - output = "default:desert_sandstone", - recipe = { - {"default:desert_sand", "default:desert_sand"}, - {"default:desert_sand", "default:desert_sand"}, - } -}) - -minetest.register_craft({ - output = "default:desert_sand 4", - recipe = { - {"default:desert_sandstone"}, - } -}) - -minetest.register_craft({ - output = "default:desert_sandstone_brick 4", - recipe = { - {"default:desert_sandstone", "default:desert_sandstone"}, - {"default:desert_sandstone", "default:desert_sandstone"}, - } -}) - -minetest.register_craft({ - output = "default:desert_sandstone_block 9", - recipe = { - {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, - {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, - {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, - } -}) - -minetest.register_craft({ - output = "default:silver_sandstone", - recipe = { - {"default:silver_sand", "default:silver_sand"}, - {"default:silver_sand", "default:silver_sand"}, - } -}) - -minetest.register_craft({ - output = "default:silver_sand 4", - recipe = { - {"default:silver_sandstone"}, - } -}) - -minetest.register_craft({ - output = "default:silver_sandstone_brick 4", - recipe = { - {"default:silver_sandstone", "default:silver_sandstone"}, - {"default:silver_sandstone", "default:silver_sandstone"}, - } -}) - -minetest.register_craft({ - output = "default:silver_sandstone_block 9", - recipe = { - {"default:silver_sandstone", "default:silver_sandstone", "default:silver_sandstone"}, - {"default:silver_sandstone", "default:silver_sandstone", "default:silver_sandstone"}, - {"default:silver_sandstone", "default:silver_sandstone", "default:silver_sandstone"}, + {'default:sandstone', 'default:sandstone', 'default:sandstone'}, + {'default:sandstone', 'default:sandstone', 'default:sandstone'}, + {'default:sandstone', 'default:sandstone', 'default:sandstone'}, } }) @@ -665,11 +582,11 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "default:ladder_wood 5", + output = 'default:ladder_wood 3', recipe = { - {"group:stick", "", "group:stick"}, - {"group:stick", "group:stick", "group:stick"}, - {"group:stick", "", "group:stick"}, + {'group:stick', '', 'group:stick'}, + {'group:stick', 'group:stick', 'group:stick'}, + {'group:stick', '', 'group:stick'}, } }) @@ -715,19 +632,10 @@ minetest.register_craft({ }) minetest.register_craft({ - output = 'default:meselamp', + output = 'default:meselamp 1', recipe = { - {'default:glass'}, - {'default:mese_crystal'}, - } -}) - -minetest.register_craft({ - output = "default:mese_post_light 3", - recipe = { - {"", "default:glass", ""}, - {"default:mese_crystal", "default:mese_crystal", "default:mese_crystal"}, - {"", "group:wood", ""}, + {'', 'default:mese_crystal',''}, + {'default:mese_crystal', 'default:glass', 'default:mese_crystal'}, } }) @@ -868,12 +776,6 @@ minetest.register_craft({ recipe = "default:copper_lump", }) -minetest.register_craft({ - type = "cooking", - output = "default:tin_ingot", - recipe = "default:tin_lump", -}) - minetest.register_craft({ type = "cooking", output = "default:gold_ingot", @@ -991,18 +893,6 @@ minetest.register_craft({ burntime = 10, }) -minetest.register_craft({ - type = "fuel", - recipe = "default:bush_sapling", - burntime = 6, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:acacia_bush_sapling", - burntime = 7, -}) - minetest.register_craft({ type = "fuel", recipe = "default:aspen_sapling", diff --git a/mods/mp_minetest/default/craftitems.lua b/mods/mp_minetest/default/craftitems.lua index 33cdd5f6..0c51c713 100644 --- a/mods/mp_minetest/default/craftitems.lua +++ b/mods/mp_minetest/default/craftitems.lua @@ -12,23 +12,14 @@ minetest.register_craftitem("default:paper", { groups = {flammable = 3}, }) - local lpp = 14 -- Lines per book's page local function book_on_use(itemstack, user) local player_name = user:get_player_name() - local meta = itemstack:get_meta() + local data = minetest.deserialize(itemstack:get_metadata()) local title, text, owner = "", "", player_name local page, page_max, lines, string = 1, 1, {}, "" - -- Backwards compatibility - local old_data = minetest.deserialize(itemstack:get_metadata()) - if old_data then - meta:from_table({ fields = old_data }) - end - - local data = meta:to_table().fields - - if data.owner then + if data then title = data.title text = data.text owner = data.owner @@ -72,7 +63,6 @@ local function book_on_use(itemstack, user) end minetest.show_formspec(player_name, "default:book", formspec) - return itemstack end minetest.register_on_player_receive_fields(function(player, formname, fields) @@ -91,42 +81,35 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) new_stack = ItemStack("default:book_written") end else - data = stack:get_meta():to_table().fields - end - - if data and data.owner and data.owner ~= player:get_player_name() then - return + data = minetest.deserialize(stack:get_metadata()) end if not data then data = {} end data.title = fields.title - data.owner = player:get_player_name() - data.description = "\""..fields.title.."\" by "..data.owner data.text = fields.text data.text_len = #data.text data.page = 1 data.page_max = math.ceil((#data.text:gsub("[^\n]", "") + 1) / lpp) + data.owner = player:get_player_name() + local data_str = minetest.serialize(data) if new_stack then - new_stack:get_meta():from_table({ fields = data }) + new_stack:set_metadata(data_str) if inv:room_for_item("main", new_stack) then inv:add_item("main", new_stack) else minetest.add_item(player:getpos(), new_stack) end else - stack:get_meta():from_table({ fields = data }) + stack:set_metadata(data_str) end elseif fields.book_next or fields.book_prev then - local data = stack:get_meta():to_table().fields + local data = minetest.deserialize(stack:get_metadata()) if not data or not data.page then return end - data.page = tonumber(data.page) - data.page_max = tonumber(data.page_max) - if fields.book_next then data.page = data.page + 1 if data.page > data.page_max then @@ -139,11 +122,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end - stack:get_meta():from_table({fields = data}) - stack = book_on_use(stack, player) + local data_str = minetest.serialize(data) + stack:set_metadata(data_str) + book_on_use(stack, player) end - -- Update stack player:set_wielded_item(stack) end) @@ -184,69 +167,13 @@ minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv if not original then return end - local copymeta = original:get_meta():to_table() + local copymeta = original:get_metadata() -- copy of the book held by player's mouse cursor - itemstack:get_meta():from_table(copymeta) + itemstack:set_metadata(copymeta) -- put the book with metadata back in the craft grid craft_inv:set_stack("craft", index, original) end) -minetest.register_craftitem("default:skeleton_key", { - description = "Skeleton Key", - inventory_image = "default_key_skeleton.png", - groups = {key = 1}, - on_use = function(itemstack, user, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - local pos = pointed_thing.under - local node = minetest.get_node(pos) - - if not node then - return itemstack - end - - local on_skeleton_key_use = minetest.registered_nodes[node.name].on_skeleton_key_use - if not on_skeleton_key_use then - return itemstack - end - - -- make a new key secret in case the node callback needs it - local random = math.random - local newsecret = string.format( - "%04x%04x%04x%04x", - random(2^16) - 1, random(2^16) - 1, - random(2^16) - 1, random(2^16) - 1) - - local secret, _, _ = on_skeleton_key_use(pos, user, newsecret) - - if secret then - local inv = minetest.get_inventory({type="player", name=user:get_player_name()}) - - -- update original itemstack - itemstack:take_item() - - -- finish and return the new key - local new_stack = ItemStack("default:key") - local meta = new_stack:get_meta() - meta:set_string("secret", secret) - meta:set_string("description", "Key to "..user:get_player_name().."'s " - ..minetest.registered_nodes[node.name].description) - - if itemstack:get_count() == 0 then - itemstack = new_stack - else - if inv:add_item("main", new_stack):get_count() > 0 then - minetest.add_item(user:getpos(), new_stack) - end -- else: added to inventory successfully - end - - return itemstack - end - end -}) - minetest.register_craftitem("default:coal_lump", { description = "Coal Lump", inventory_image = "default_coal_lump.png", @@ -263,11 +190,6 @@ minetest.register_craftitem("default:copper_lump", { inventory_image = "default_copper_lump.png", }) -minetest.register_craftitem("default:tin_lump", { - description = "Tin Lump", - inventory_image = "default_tin_lump.png", -}) - minetest.register_craftitem("default:mese_crystal", { description = "Mese Crystal", inventory_image = "default_mese_crystal.png", @@ -298,11 +220,6 @@ minetest.register_craftitem("default:copper_ingot", { inventory_image = "default_copper_ingot.png", }) -minetest.register_craftitem("default:tin_ingot", { - description = "Tin Ingot", - inventory_image = "default_tin_ingot.png", -}) - minetest.register_craftitem("default:bronze_ingot", { description = "Bronze Ingot", inventory_image = "default_bronze_ingot.png", @@ -332,3 +249,4 @@ minetest.register_craftitem("default:flint", { description = "Flint", inventory_image = "default_flint.png" }) + diff --git a/mods/mp_minetest/default/depends.txt b/mods/mp_minetest/default/depends.txt deleted file mode 100644 index ac03cfdc..00000000 --- a/mods/mp_minetest/default/depends.txt +++ /dev/null @@ -1 +0,0 @@ -craft_guide? \ No newline at end of file diff --git a/mods/mp_minetest/default/functions.lua b/mods/mp_minetest/default/functions.lua index 936712ca..3bda4bf0 100644 --- a/mods/mp_minetest/default/functions.lua +++ b/mods/mp_minetest/default/functions.lua @@ -77,6 +77,8 @@ function default.node_sound_leaves_defaults(table) {name = "default_grass_footstep", gain = 0.45} table.dug = table.dug or {name = "default_grass_footstep", gain = 0.7} + table.dig = table.dig or + {name = "default_dig_crumbly", gain = 0.4} table.place = table.place or {name = "default_place_node", gain = 1.0} default.node_sound_defaults(table) @@ -131,19 +133,18 @@ default.cool_lava = function(pos, node) {pos = pos, max_hear_distance = 16, gain = 0.25}) end -if minetest.setting_getbool("enable_lavacooling") ~= false then - minetest.register_abm({ - label = "Lava cooling", - nodenames = {"default:lava_source", "default:lava_flowing"}, - neighbors = {"group:cools_lava", "group:water"}, - interval = 1, - chance = 2, - catch_up = false, - action = function(...) - default.cool_lava(...) - end, - }) -end +minetest.register_abm({ + label = "Lava cooling", + nodenames = {"default:lava_source", "default:lava_flowing"}, + neighbors = {"group:cools_lava", "group:water"}, + interval = 1, + chance = 1, + catch_up = false, + action = function(...) + default.cool_lava(...) + end, +}) + -- -- optimized helper to put all items in an inventory into a drops list @@ -185,9 +186,6 @@ function default.grow_cactus(pos, node) if height == 4 or node.name ~= "air" then return end - if minetest.get_node_light(pos) < 13 then - return - end minetest.set_node(pos, {name = "default:cactus"}) return true end @@ -211,9 +209,6 @@ function default.grow_papyrus(pos, node) if height == 4 or node.name ~= "air" then return end - if minetest.get_node_light(pos) < 13 then - return - end minetest.set_node(pos, {name = "default:papyrus"}) return true end @@ -326,65 +321,47 @@ default.after_place_leaves = function(pos, placer, itemstack, pointed_thing) end end --- Leafdecay -local function leafdecay_after_destruct(pos, oldnode, def) - for _, v in pairs(minetest.find_nodes_in_area(vector.subtract(pos, def.radius), - vector.add(pos, def.radius), def.leaves)) do - local node = minetest.get_node(v) - local timer = minetest.get_node_timer(v) - if node.param2 == 0 and not timer:is_started() then - timer:start(math.random(20, 120) / 10) +-- Leafdecay ABM + +minetest.register_abm({ + label = "Leaf decay", + nodenames = {"group:leafdecay"}, + neighbors = {"air"}, + interval = 2, + chance = 10, + catch_up = false, + + action = function(pos, node, _, _) + -- Check if leaf is placed + if node.param2 ~= 0 then + return end - end -end -local function leafdecay_on_timer(pos, def) - if minetest.find_node_near(pos, def.radius, def.trunks) then - return false - end - - local node = minetest.get_node(pos) - local drops = minetest.get_node_drops(node.name) - for _, item in ipairs(drops) do - local is_leaf - for _, v in pairs(def.leaves) do - if v == item then - is_leaf = true + local rad = minetest.registered_nodes[node.name].groups.leafdecay + -- Assume ignore is a trunk, to make this + -- work at the border of a loaded area + if minetest.find_node_near(pos, rad, {"ignore", "group:tree"}) then + return + end + -- Drop stuff + local itemstacks = minetest.get_node_drops(node.name) + for _, itemname in ipairs(itemstacks) do + if itemname ~= node.name or + minetest.get_item_group(node.name, "leafdecay_drop") ~= 0 then + local p_drop = { + x = pos.x - 0.5 + math.random(), + y = pos.y - 0.5 + math.random(), + z = pos.z - 0.5 + math.random(), + } + minetest.add_item(p_drop, itemname) end end - if minetest.get_item_group(item, "leafdecay_drop") ~= 0 or - not is_leaf then - minetest.add_item({ - x = pos.x - 0.5 + math.random(), - y = pos.y - 0.5 + math.random(), - z = pos.z - 0.5 + math.random(), - }, item) - end + -- Remove node + minetest.remove_node(pos) + minetest.check_for_falling(pos) end +}) - minetest.remove_node(pos) - minetest.check_for_falling(pos) -end - -function default.register_leafdecay(def) - assert(def.leaves) - assert(def.trunks) - assert(def.radius) - for _, v in pairs(def.trunks) do - minetest.override_item(v, { - after_destruct = function(pos, oldnode) - leafdecay_after_destruct(pos, oldnode, def) - end, - }) - end - for _, v in pairs(def.leaves) do - minetest.override_item(v, { - on_timer = function(pos) - leafdecay_on_timer(pos, def) - end, - }) - end -end -- -- Convert dirt to something that fits the environment @@ -535,46 +512,3 @@ minetest.register_abm({ minetest.set_node(pos, {name = "default:coral_skeleton"}) end, }) - - --- --- NOTICE: This method is not an official part of the API yet! --- This method may change in future. --- - -function default.can_interact_with_node(player, pos) - if player then - if minetest.check_player_privs(player, "protection_bypass") then - return true - end - else - return false - end - - local meta = minetest.get_meta(pos) - local owner = meta:get_string("owner") - - if not owner or owner == "" or owner == player:get_player_name() then - return true - end - - -- is player wielding the right key? - local item = player:get_wielded_item() - if item:get_name() == "default:key" then - local key_meta = item:get_meta() - - if key_meta:get_string("secret") == "" then - local key_oldmeta = item:get_metadata() - if key_oldmeta == "" or not minetest.parse_json(key_oldmeta) then - return false - end - - key_meta:set_string("secret", minetest.parse_json(key_oldmeta).secret) - item:set_metadata("") - end - - return meta:get_string("key_lock_secret") == key_meta:get_string("secret") - end - - return false -end diff --git a/mods/mp_minetest/default/license.txt b/mods/mp_minetest/default/license.txt index 72af7284..e9267366 100644 --- a/mods/mp_minetest/default/license.txt +++ b/mods/mp_minetest/default/license.txt @@ -41,9 +41,6 @@ Copyright (C) 2010-2016: asl97 KevDoy Mito551 - GreenXenith - kaeza - kilbith You are free to: Share — copy and redistribute the material in any medium or format. diff --git a/mods/mp_minetest/default/mapgen.lua b/mods/mp_minetest/default/mapgen.lua index 1305226a..d786a841 100644 --- a/mods/mp_minetest/default/mapgen.lua +++ b/mods/mp_minetest/default/mapgen.lua @@ -1,5 +1,5 @@ -- --- Aliases for map generators +-- Aliases for map generator outputs -- minetest.register_alias("mapgen_stone", "default:stone") @@ -34,21 +34,18 @@ minetest.register_alias("mapgen_pine_needles", "default:pine_needles") minetest.register_alias("mapgen_cobble", "default:cobble") minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble") minetest.register_alias("mapgen_mossycobble", "default:mossycobble") -minetest.register_alias("mapgen_stair_desert_stone", "stairs:stair_desert_stone") minetest.register_alias("mapgen_sandstonebrick", "default:sandstonebrick") -minetest.register_alias("mapgen_stair_sandstone_block", "stairs:stair_sandstone_block") +minetest.register_alias("mapgen_stair_sandstonebrick", "stairs:stair_sandstonebrick") -- -- Register ores -- --- Blob ores --- These first to avoid other ores in blobs - --- Mgv6 - -function default.register_mgv6_blob_ores() +function default.register_ores() + minetest.clear_registered_ores() + -- Blob ores + -- These first to avoid other ores in blobs -- Clay -- This first to avoid clay in sand blobs @@ -77,7 +74,8 @@ function default.register_mgv6_blob_ores() minetest.register_ore({ ore_type = "blob", ore = "default:sand", - wherein = {"default:stone", "default:desert_stone"}, + wherein = {"default:stone", "default:sandstone", + "default:desert_stone"}, clust_scarcity = 16 * 16 * 16, clust_size = 5, y_min = -31, @@ -95,104 +93,6 @@ function default.register_mgv6_blob_ores() -- Dirt - minetest.register_ore({ - ore_type = "blob", - ore = "default:dirt", - wherein = {"default:stone"}, - clust_scarcity = 16 * 16 * 16, - clust_size = 5, - y_min = -31, - y_max = 31000, - noise_threshold = 0.0, - noise_params = { - offset = 0.5, - scale = 0.2, - spread = {x = 5, y = 5, z = 5}, - seed = 17676, - octaves = 1, - persist = 0.0 - }, - }) - - -- Gravel - - minetest.register_ore({ - ore_type = "blob", - ore = "default:gravel", - wherein = {"default:stone"}, - clust_scarcity = 16 * 16 * 16, - clust_size = 5, - y_min = -31000, - y_max = 31000, - noise_threshold = 0.0, - noise_params = { - offset = 0.5, - scale = 0.2, - spread = {x = 5, y = 5, z = 5}, - seed = 766, - octaves = 1, - persist = 0.0 - }, - }) -end - - --- All mapgens except mgv6 - -function default.register_blob_ores() - - -- Clay - - minetest.register_ore({ - ore_type = "blob", - ore = "default:clay", - wherein = {"default:sand"}, - clust_scarcity = 16 * 16 * 16, - clust_size = 5, - y_min = -15, - y_max = 0, - noise_threshold = 0.0, - noise_params = { - offset = 0.5, - scale = 0.2, - spread = {x = 5, y = 5, z = 5}, - seed = -316, - octaves = 1, - persist = 0.0 - }, - }) - - -- Silver sand - - minetest.register_ore({ - ore_type = "blob", - ore = "default:silver_sand", - wherein = {"default:stone"}, - clust_scarcity = 16 * 16 * 16, - clust_size = 5, - y_min = -31000, - y_max = 31000, - noise_threshold = 0.0, - noise_params = { - offset = 0.5, - scale = 0.2, - spread = {x = 5, y = 5, z = 5}, - seed = 2316, - octaves = 1, - persist = 0.0 - }, - biomes = {"icesheet_ocean", "tundra", "tundra_beach", "tundra_ocean", - "taiga", "taiga_ocean", "snowy_grassland", "snowy_grassland_ocean", - "grassland", "grassland_dunes", "grassland_ocean", "coniferous_forest", - "coniferous_forest_dunes", "coniferous_forest_ocean", "deciduous_forest", - "deciduous_forest_shore", "deciduous_forest_ocean", "cold_desert", - "cold_desert_ocean", "savanna", "savanna_shore", "savanna_ocean", - "rainforest", "rainforest_swamp", "rainforest_ocean", "underground", - "floatland_ocean", "floatland_grassland", "floatland_coniferous_forest"} - }) - - -- Dirt - minetest.register_ore({ ore_type = "blob", ore = "default:dirt", @@ -211,9 +111,7 @@ function default.register_blob_ores() persist = 0.0 }, biomes = {"taiga", "snowy_grassland", "grassland", "coniferous_forest", - "deciduous_forest", "deciduous_forest_shore", "savanna", "savanna_shore", - "rainforest", "rainforest_swamp", "floatland_grassland", - "floatland_coniferous_forest"} + "deciduous_forest", "savanna", "rainforest"} }) -- Gravel @@ -235,22 +133,9 @@ function default.register_blob_ores() octaves = 1, persist = 0.0 }, - biomes = {"icesheet_ocean", "tundra", "tundra_beach", "tundra_ocean", - "taiga", "taiga_ocean", "snowy_grassland", "snowy_grassland_ocean", - "grassland", "grassland_dunes", "grassland_ocean", "coniferous_forest", - "coniferous_forest_dunes", "coniferous_forest_ocean", "deciduous_forest", - "deciduous_forest_shore", "deciduous_forest_ocean", "cold_desert", - "cold_desert_ocean", "savanna", "savanna_shore", "savanna_ocean", - "rainforest", "rainforest_swamp", "rainforest_ocean", "underground", - "floatland_ocean", "floatland_grassland", "floatland_coniferous_forest"} }) -end - --- Scatter ores --- All mapgens - -function default.register_ores() + -- Scatter ores -- Coal @@ -357,41 +242,6 @@ function default.register_ores() y_max = -64, }) - -- Tin - - minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_tin", - wherein = "default:stone", - clust_scarcity = 10 * 10 * 10, - clust_num_ores = 5, - clust_size = 3, - y_min = 1025, - y_max = 31000, - }) - - minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_tin", - wherein = "default:stone", - clust_scarcity = 13 * 13 * 13, - clust_num_ores = 4, - clust_size = 3, - y_min = -127, - y_max = -32, - }) - - minetest.register_ore({ - ore_type = "scatter", - ore = "default:stone_with_tin", - wherein = "default:stone", - clust_scarcity = 10 * 10 * 10, - clust_num_ores = 5, - clust_size = 3, - y_min = -31000, - y_max = -128, - }) - -- Gold minetest.register_ore({ @@ -527,9 +377,10 @@ end -- Register biomes -- --- All mapgens except mgv6 +-- All mapgens except mgv6 and singlenode -function default.register_biomes(upper_limit) +function default.register_biomes() + minetest.clear_registered_biomes() -- Icesheet @@ -548,7 +399,7 @@ function default.register_biomes(upper_limit) node_riverbed = "default:gravel", depth_riverbed = 2, y_min = -8, - y_max = upper_limit, + y_max = 31000, heat_point = 0, humidity_point = 73, }) @@ -588,7 +439,7 @@ function default.register_biomes(upper_limit) node_riverbed = "default:gravel", depth_riverbed = 2, y_min = 2, - y_max = upper_limit, + y_max = 31000, heat_point = 0, humidity_point = 40, }) @@ -650,7 +501,7 @@ function default.register_biomes(upper_limit) node_riverbed = "default:sand", depth_riverbed = 2, y_min = 2, - y_max = upper_limit, + y_max = 31000, heat_point = 25, humidity_point = 70, }) @@ -692,7 +543,7 @@ function default.register_biomes(upper_limit) node_riverbed = "default:sand", depth_riverbed = 2, y_min = 5, - y_max = upper_limit, + y_max = 31000, heat_point = 20, humidity_point = 35, }) @@ -734,7 +585,7 @@ function default.register_biomes(upper_limit) node_riverbed = "default:sand", depth_riverbed = 2, y_min = 6, - y_max = upper_limit, + y_max = 31000, heat_point = 50, humidity_point = 35, }) @@ -796,7 +647,7 @@ function default.register_biomes(upper_limit) node_riverbed = "default:sand", depth_riverbed = 2, y_min = 6, - y_max = upper_limit, + y_max = 31000, heat_point = 45, humidity_point = 70, }) @@ -858,7 +709,7 @@ function default.register_biomes(upper_limit) node_riverbed = "default:sand", depth_riverbed = 2, y_min = 1, - y_max = upper_limit, + y_max = 31000, heat_point = 60, humidity_point = 68, }) @@ -920,7 +771,7 @@ function default.register_biomes(upper_limit) node_riverbed = "default:sand", depth_riverbed = 2, y_min = 5, - y_max = upper_limit, + y_max = 31000, heat_point = 92, humidity_point = 16, }) @@ -953,7 +804,7 @@ function default.register_biomes(upper_limit) node_top = "default:sand", depth_top = 1, node_filler = "default:sand", - depth_filler = 1, + depth_filler = 0, node_stone = "default:sandstone", --node_water_top = "", --depth_water_top = , @@ -962,7 +813,7 @@ function default.register_biomes(upper_limit) node_riverbed = "default:sand", depth_riverbed = 2, y_min = 5, - y_max = upper_limit, + y_max = 31000, heat_point = 60, humidity_point = 0, }) @@ -1004,7 +855,7 @@ function default.register_biomes(upper_limit) node_riverbed = "default:sand", depth_riverbed = 2, y_min = 5, - y_max = upper_limit, + y_max = 31000, heat_point = 40, humidity_point = 0, }) @@ -1046,7 +897,7 @@ function default.register_biomes(upper_limit) node_riverbed = "default:sand", depth_riverbed = 2, y_min = 1, - y_max = upper_limit, + y_max = 31000, heat_point = 89, humidity_point = 42, }) @@ -1096,7 +947,7 @@ function default.register_biomes(upper_limit) minetest.register_biome({ name = "rainforest", --node_dust = "", - node_top = "default:dirt_with_rainforest_litter", + node_top = "default:dirt_with_grass", depth_top = 1, node_filler = "default:dirt", depth_filler = 3, @@ -1108,7 +959,7 @@ function default.register_biomes(upper_limit) node_riverbed = "default:sand", depth_riverbed = 2, y_min = 1, - y_max = upper_limit, + y_max = 31000, heat_point = 86, humidity_point = 65, }) @@ -1175,100 +1026,6 @@ function default.register_biomes(upper_limit) end --- Biomes for floatlands - -function default.register_floatland_biomes(floatland_level, shadow_limit) - - -- Coniferous forest - - minetest.register_biome({ - name = "floatland_coniferous_forest", - --node_dust = "", - node_top = "default:dirt_with_grass", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", - --node_riverbed = "", - --depth_riverbed = , - y_min = floatland_level + 2, - y_max = 31000, - heat_point = 50, - humidity_point = 70, - }) - - -- Grassland - - minetest.register_biome({ - name = "floatland_grassland", - --node_dust = "", - node_top = "default:dirt_with_grass", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 1, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", - --node_riverbed = "", - --depth_riverbed = , - y_min = floatland_level + 2, - y_max = 31000, - heat_point = 50, - humidity_point = 35, - }) - - -- Sandstone desert - - minetest.register_biome({ - name = "floatland_sandstone_desert", - --node_dust = "", - node_top = "default:sand", - depth_top = 1, - node_filler = "default:sand", - depth_filler = 1, - node_stone = "default:sandstone", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", - --node_riverbed = "", - --depth_riverbed = , - y_min = floatland_level + 2, - y_max = 31000, - heat_point = 50, - humidity_point = 0, - }) - - -- Floatland ocean / underground - - minetest.register_biome({ - name = "floatland_ocean", - --node_dust = "", - node_top = "default:sand", - depth_top = 1, - node_filler = "default:sand", - depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", - --node_riverbed = "", - --depth_riverbed = , - y_min = shadow_limit, - y_max = floatland_level + 1, - heat_point = 50, - humidity_point = 50, - }) -end - - -- -- Register decorations -- @@ -1276,6 +1033,7 @@ end -- Mgv6 function default.register_mgv6_decorations() + minetest.clear_registered_decorations() -- Papyrus @@ -1379,8 +1137,7 @@ local function register_grass_decoration(offset, scale, length) persist = 0.6 }, biomes = {"grassland", "grassland_dunes", "deciduous_forest", - "coniferous_forest", "coniferous_forest_dunes", - "floatland_grassland", "floatland_coniferous_forest"}, + "coniferous_forest", "coniferous_forest_dunes"}, y_min = 1, y_max = 31000, decoration = "default:grass_" .. length, @@ -1409,6 +1166,7 @@ end function default.register_decorations() + minetest.clear_registered_decorations() -- Apple tree and log @@ -1429,7 +1187,6 @@ function default.register_decorations() y_max = 31000, schematic = minetest.get_modpath("default") .. "/schematics/apple_tree.mts", flags = "place_center_x, place_center_z", - rotation = "random", }) minetest.register_decoration({ @@ -1447,7 +1204,20 @@ function default.register_decorations() biomes = {"deciduous_forest"}, y_min = 1, y_max = 31000, - schematic = minetest.get_modpath("default") .. "/schematics/apple_log.mts", + schematic = { + size = {x = 3, y = 3, z = 1}, + data = { + {name = "air", prob = 0}, + {name = "air", prob = 0}, + {name = "air", prob = 0}, + {name = "default:tree", param2 = 12, prob = 191}, + {name = "default:tree", param2 = 12}, + {name = "default:tree", param2 = 12, prob = 127}, + {name = "air", prob = 0}, + {name = "flowers:mushroom_brown", prob = 63}, + {name = "air", prob = 0}, + }, + }, flags = "place_center_x", rotation = "random", }) @@ -1456,8 +1226,8 @@ function default.register_decorations() minetest.register_decoration({ deco_type = "schematic", - place_on = {"default:dirt_with_rainforest_litter", "default:dirt"}, - sidelen = 16, + place_on = {"default:dirt_with_grass", "default:dirt"}, + sidelen = 80, fill_ratio = 0.1, biomes = {"rainforest", "rainforest_swamp"}, y_min = -1, @@ -1469,13 +1239,26 @@ function default.register_decorations() minetest.register_decoration({ deco_type = "schematic", - place_on = {"default:dirt_with_rainforest_litter", "default:dirt"}, - sidelen = 16, + place_on = {"default:dirt_with_grass", "default:dirt"}, + sidelen = 80, fill_ratio = 0.005, biomes = {"rainforest", "rainforest_swamp"}, y_min = 1, y_max = 31000, - schematic = minetest.get_modpath("default") .. "/schematics/jungle_log.mts", + schematic = { + size = {x = 3, y = 3, z = 1}, + data = { + {name = "air", prob = 0}, + {name = "air", prob = 0}, + {name = "air", prob = 0}, + {name = "default:jungletree", param2 = 12, prob = 191}, + {name = "default:jungletree", param2 = 12}, + {name = "default:jungletree", param2 = 12, prob = 127}, + {name = "air", prob = 0}, + {name = "flowers:mushroom_brown", prob = 127}, + {name = "air", prob = 0}, + }, + }, flags = "place_center_x", rotation = "random", }) @@ -1494,7 +1277,7 @@ function default.register_decorations() octaves = 3, persist = 0.66 }, - biomes = {"taiga", "coniferous_forest", "floatland_coniferous_forest"}, + biomes = {"taiga", "coniferous_forest"}, y_min = 2, y_max = 31000, schematic = minetest.get_modpath("default") .. "/schematics/pine_tree.mts", @@ -1516,7 +1299,20 @@ function default.register_decorations() biomes = {"taiga", "coniferous_forest"}, y_min = 1, y_max = 31000, - schematic = minetest.get_modpath("default") .. "/schematics/pine_log.mts", + schematic = { + size = {x = 3, y = 3, z = 1}, + data = { + {name = "air", prob = 0}, + {name = "air", prob = 0}, + {name = "air", prob = 0}, + {name = "default:pine_tree", param2 = 12, prob = 191}, + {name = "default:pine_tree", param2 = 12}, + {name = "default:pine_tree", param2 = 12, prob = 127}, + {name = "air", prob = 0}, + {name = "flowers:mushroom_red", prob = 63}, + {name = "air", prob = 0}, + }, + }, flags = "place_center_x", rotation = "random", }) @@ -1558,7 +1354,17 @@ function default.register_decorations() biomes = {"savanna"}, y_min = 1, y_max = 31000, - schematic = minetest.get_modpath("default") .. "/schematics/acacia_log.mts", + schematic = { + size = {x = 3, y = 2, z = 1}, + data = { + {name = "air", prob = 0}, + {name = "air", prob = 0}, + {name = "air", prob = 0}, + {name = "default:acacia_tree", param2 = 12, prob = 191}, + {name = "default:acacia_tree", param2 = 12}, + {name = "default:acacia_tree", param2 = 12, prob = 127}, + }, + }, flags = "place_center_x", rotation = "random", }) @@ -1599,7 +1405,20 @@ function default.register_decorations() biomes = {"deciduous_forest"}, y_min = 1, y_max = 31000, - schematic = minetest.get_modpath("default") .. "/schematics/aspen_log.mts", + schematic = { + size = {x = 3, y = 3, z = 1}, + data = { + {name = "air", prob = 0}, + {name = "air", prob = 0}, + {name = "air", prob = 0}, + {name = "default:aspen_tree", param2 = 12}, + {name = "default:aspen_tree", param2 = 12}, + {name = "default:aspen_tree", param2 = 12, prob = 127}, + {name = "flowers:mushroom_red", prob = 63}, + {name = "flowers:mushroom_brown", prob = 63}, + {name = "air", prob = 0}, + }, + }, flags = "place_center_x", rotation = "random", }) @@ -1682,8 +1501,7 @@ function default.register_decorations() octaves = 3, persist = 0.7, }, - biomes = {"snowy_grassland", "grassland", "deciduous_forest", - "floatland_grassland"}, + biomes = {"snowy_grassland", "grassland", "deciduous_forest"}, y_min = 1, y_max = 31000, schematic = minetest.get_modpath("default") .. "/schematics/bush.mts", @@ -1731,8 +1549,8 @@ function default.register_decorations() minetest.register_decoration({ deco_type = "simple", - place_on = {"default:dirt_with_rainforest_litter"}, - sidelen = 16, + place_on = {"default:dirt_with_grass"}, + sidelen = 80, fill_ratio = 0.1, biomes = {"rainforest"}, y_min = 1, @@ -1767,9 +1585,9 @@ function default.register_decorations() deco_type = "schematic", place_on = {"default:sand"}, noise_params = { - offset = -0.15, + offset = -0.1, scale = 0.1, - spread = {x = 100, y = 100, z = 100}, + spread = {x = 200, y = 200, z = 200}, seed = 7013, octaves = 3, persist = 1, @@ -1789,38 +1607,15 @@ end -- --- Detect mapgen, flags and parameters to select functions +-- Detect mapgen to select functions -- --- Get setting or default -local mgv7_spflags = minetest.get_mapgen_setting("mgv7_spflags") or - "mountains, ridges, nofloatlands" -local captures_float = string.match(mgv7_spflags, "floatlands") -local captures_nofloat = string.match(mgv7_spflags, "nofloatlands") - -local mgv7_floatland_level = minetest.get_mapgen_setting("mgv7_floatland_level") or 1280 -local mgv7_shadow_limit = minetest.get_mapgen_setting("mgv7_shadow_limit") or 1024 - -minetest.clear_registered_biomes() -minetest.clear_registered_ores() -minetest.clear_registered_decorations() - local mg_name = minetest.get_mapgen_setting("mg_name") if mg_name == "v6" then - default.register_mgv6_blob_ores() default.register_ores() default.register_mgv6_decorations() -elseif mg_name == "v7" and captures_float == "floatlands" and - captures_nofloat ~= "nofloatlands" then - -- Mgv7 with floatlands - default.register_biomes(mgv7_shadow_limit - 1) - default.register_floatland_biomes(mgv7_floatland_level, mgv7_shadow_limit) - default.register_blob_ores() - default.register_ores() - default.register_decorations() else - default.register_biomes(31000) - default.register_blob_ores() + default.register_biomes() default.register_ores() default.register_decorations() end diff --git a/mods/mp_minetest/default/models/chest_open.obj b/mods/mp_minetest/default/models/chest_open.obj deleted file mode 100644 index 1bfed076..00000000 --- a/mods/mp_minetest/default/models/chest_open.obj +++ /dev/null @@ -1,88 +0,0 @@ -# Blender v2.78 (sub 0) OBJ File: 'chest_open.blend' -# www.blender.org -mtllib chest_open.mtl -o Bottom_Cube.001 -v -0.500000 -0.500000 0.500000 -v -0.500000 0.187500 0.500000 -v -0.500000 -0.500000 -0.500000 -v -0.500000 0.187500 -0.500000 -v 0.500000 -0.500000 0.500000 -v 0.500000 0.187500 0.500000 -v 0.500000 -0.500000 -0.500000 -v 0.500000 0.187500 -0.500000 -vt 0.7500 0.3438 -vt 0.5000 0.3438 -vt 0.5000 0.0000 -vt 0.7500 0.0000 -vt 0.2500 0.3438 -vt 0.2500 0.0000 -vt 0.0000 0.3438 -vt 0.0000 0.0000 -vt 0.7500 0.8438 -vt 0.5000 0.8438 -vt 0.5000 0.5000 -vt 0.7500 0.5000 -vt 0.2500 0.5000 -vt 0.2500 1.0000 -vt 0.0000 1.0000 -vt 0.0000 0.5000 -vt 0.7500 -0.0000 -vt 0.7500 0.5000 -vt 1.0000 0.5000 -vt 1.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -g Bottom_Cube.001_None -usemtl None -s off -f 2/1/1 4/2/1 3/3/1 1/4/1 -f 4/2/2 8/5/2 7/6/2 3/3/2 -f 8/5/3 6/7/3 5/8/3 7/6/3 -f 6/9/4 2/10/4 1/11/4 5/12/4 -f 1/13/5 3/14/5 7/15/5 5/16/5 -f 6/17/6 8/18/6 4/19/6 2/20/6 -o Top_Cube.002 -v -0.500000 0.187501 0.499999 -v -0.500000 0.408471 0.720970 -v -0.500000 0.894607 -0.207108 -v -0.500000 1.115578 0.013863 -v 0.500000 0.187501 0.499999 -v 0.500000 0.408471 0.720970 -v 0.500000 0.894607 -0.207108 -v 0.500000 1.115578 0.013863 -vt 0.7500 0.5000 -vt 0.5000 0.5000 -vt 0.5000 0.3438 -vt 0.7500 0.3438 -vt 0.2500 0.5000 -vt 0.2500 0.3438 -vt 0.0000 0.5000 -vt 0.0000 0.3438 -vt 0.7500 1.0000 -vt 0.5000 1.0000 -vt 0.5000 0.8438 -vt 0.7500 0.8438 -vt 1.0000 0.5000 -vt 1.0000 1.0000 -vt 0.7500 1.0000 -vt 0.7500 0.5000 -vt 0.2500 1.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.7071 -0.7071 -vn 1.0000 0.0000 0.0000 -vn 0.0000 -0.7071 0.7071 -vn 0.0000 -0.7071 -0.7071 -vn 0.0000 0.7071 0.7071 -g Top_Cube.002_None -usemtl None -s off -f 10/21/7 12/22/7 11/23/7 9/24/7 -f 12/22/8 16/25/8 15/26/8 11/23/8 -f 16/25/9 14/27/9 13/28/9 15/26/9 -f 14/29/10 10/30/10 9/31/10 13/32/10 -f 9/33/11 11/34/11 15/35/11 13/36/11 -f 14/37/12 16/25/12 12/22/12 10/30/12 diff --git a/mods/mp_minetest/default/models/cube.obj b/mods/mp_minetest/default/models/cube.obj deleted file mode 100644 index 7bbec5de..00000000 --- a/mods/mp_minetest/default/models/cube.obj +++ /dev/null @@ -1,38 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'chest_close.blend' -# www.blender.org -mtllib chest_close.mtl -o Cube_Cube.001 -v -0.500000 -0.500000 0.500000 -v -0.500000 0.500000 0.500000 -v -0.500000 -0.500000 -0.500000 -v -0.500000 0.500000 -0.500000 -v 0.500000 -0.500000 0.500000 -v 0.500000 0.500000 0.500000 -v 0.500000 -0.500000 -0.500000 -v 0.500000 0.500000 -0.500000 -vt 0.750000 0.500000 -vt 0.500000 0.500000 -vt 0.500000 -0.000000 -vt 0.750000 0.000000 -vt 0.250000 0.500000 -vt 0.250000 0.000000 -vt 0.000000 0.500000 -vt -0.000000 0.000000 -vt 0.750000 1.000000 -vt 0.500000 1.000000 -vt 0.250000 1.000000 -vt -0.000000 1.000000 -vn -1.000000 0.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn 1.000000 0.000000 0.000000 -vn 0.000000 0.000000 1.000000 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 2/1/1 4/2/1 3/3/1 1/4/1 -f 4/2/2 8/5/2 7/6/2 3/3/2 -f 8/5/3 6/7/3 5/8/3 7/6/3 -f 6/9/4 2/10/4 1/2/4 5/1/4 -f 1/5/5 3/11/5 7/12/5 5/7/5 -f 6/11/6 8/5/6 4/2/6 2/10/6 diff --git a/mods/mp_minetest/default/nodes.lua b/mods/mp_minetest/default/nodes.lua index a1da9216..3e781091 100644 --- a/mods/mp_minetest/default/nodes.lua +++ b/mods/mp_minetest/default/nodes.lua @@ -30,12 +30,6 @@ default:desert_stone_block default:sandstone default:sandstonebrick default:sandstone_block -default:desert_sandstone -default:desert_sandstone_brick -default:desert_sandstone_block -default:silver_sandstone -default:silver_sandstone_brick -default:silver_sandstone_block default:obsidian default:obsidianbrick @@ -50,7 +44,6 @@ default:dirt_with_grass default:dirt_with_grass_footsteps default:dirt_with_dry_grass default:dirt_with_snow -default:dirt_with_rainforest_litter default:sand default:desert_sand @@ -107,10 +100,6 @@ default:steelblock default:stone_with_copper default:copperblock - -default:stone_with_tin -default:tinblock - default:bronzeblock default:stone_with_gold @@ -144,10 +133,8 @@ default:dry_grass_5 default:bush_stem default:bush_leaves -default:bush_sapling default:acacia_bush_stem default:acacia_bush_leaves -default:acacia_bush_sapling Corals ------ @@ -195,7 +182,6 @@ default:obsidian_glass default:brick default:meselamp -default:mese_post_light Misc ---- @@ -287,6 +273,7 @@ minetest.register_node("default:desert_stone_block", { sounds = default.node_sound_stone_defaults(), }) + minetest.register_node("default:sandstone", { description = "Sandstone", tiles = {"default_sandstone.png"}, @@ -312,55 +299,6 @@ minetest.register_node("default:sandstone_block", { sounds = default.node_sound_stone_defaults(), }) -minetest.register_node("default:desert_sandstone", { - description = "Desert Sandstone", - tiles = {"default_desert_sandstone.png"}, - groups = {crumbly = 1, cracky = 3}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:desert_sandstone_brick", { - description = "Desert Sandstone Brick", - paramtype2 = "facedir", - place_param2 = 0, - tiles = {"default_desert_sandstone_brick.png"}, - is_ground_content = false, - groups = {cracky = 2}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:desert_sandstone_block", { - description = "Desert Sandstone Block", - tiles = {"default_desert_sandstone_block.png"}, - is_ground_content = false, - groups = {cracky = 2}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:silver_sandstone", { - description = "Silver Sandstone", - tiles = {"default_silver_sandstone.png"}, - groups = {crumbly = 1, cracky = 3}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:silver_sandstone_brick", { - description = "Silver Sandstone Brick", - paramtype2 = "facedir", - place_param2 = 0, - tiles = {"default_silver_sandstone_brick.png"}, - is_ground_content = false, - groups = {cracky = 2}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:silver_sandstone_block", { - description = "Silver Sandstone Block", - tiles = {"default_silver_sandstone_block.png"}, - is_ground_content = false, - groups = {cracky = 2}, - sounds = default.node_sound_stone_defaults(), -}) minetest.register_node("default:obsidian", { description = "Obsidian", @@ -440,28 +378,13 @@ minetest.register_node("default:dirt_with_snow", { tiles = {"default_snow.png", "default_dirt.png", {name = "default_dirt.png^default_snow_side.png", tileable_vertical = false}}, - groups = {crumbly = 3, spreading_dirt_type = 1, snowy = 1}, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, drop = 'default:dirt', sounds = default.node_sound_dirt_defaults({ footstep = {name = "default_snow_footstep", gain = 0.15}, }), }) -minetest.register_node("default:dirt_with_rainforest_litter", { - description = "Dirt with Rainforest Litter", - tiles = { - "default_rainforest_litter.png", - "default_dirt.png", - {name = "default_dirt.png^default_rainforest_litter_side.png", - tileable_vertical = false} - }, - groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, - drop = "default:dirt", - sounds = default.node_sound_dirt_defaults({ - footstep = {name = "default_grass_footstep", gain = 0.4}, - }), -}) - minetest.register_node("default:sand", { description = "Sand", tiles = {"default_sand.png"}, @@ -522,7 +445,7 @@ minetest.register_node("default:snow", { {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, }, }, - groups = {crumbly = 3, falling_node = 1, puts_out_fire = 1, snowy = 1}, + groups = {crumbly = 3, falling_node = 1, puts_out_fire = 1}, sounds = default.node_sound_dirt_defaults({ footstep = {name = "default_snow_footstep", gain = 0.15}, dug = {name = "default_snow_footstep", gain = 0.2}, @@ -540,7 +463,7 @@ minetest.register_node("default:snow", { minetest.register_node("default:snowblock", { description = "Snow Block", tiles = {"default_snow.png"}, - groups = {crumbly = 3, puts_out_fire = 1, cools_lava = 1, snowy = 1}, + groups = {crumbly = 3, puts_out_fire = 1, cools_lava = 1}, sounds = default.node_sound_dirt_defaults({ footstep = {name = "default_snow_footstep", gain = 0.15}, dug = {name = "default_snow_footstep", gain = 0.2}, @@ -592,6 +515,7 @@ minetest.register_node("default:wood", { minetest.register_node("default:sapling", { description = "Sapling", drawtype = "plantlike", + visual_scale = 1.0, tiles = {"default_sapling.png"}, inventory_image = "default_sapling.png", wield_image = "default_sapling.png", @@ -657,6 +581,7 @@ minetest.register_node("default:leaves", { minetest.register_node("default:apple", { description = "Apple", drawtype = "plantlike", + visual_scale = 1.0, tiles = {"default_apple.png"}, inventory_image = "default_apple.png", paramtype = "light", @@ -726,6 +651,7 @@ minetest.register_node("default:jungleleaves", { minetest.register_node("default:junglesapling", { description = "Jungle Sapling", drawtype = "plantlike", + visual_scale = 1.0, tiles = {"default_junglesapling.png"}, inventory_image = "default_junglesapling.png", wield_image = "default_junglesapling.png", @@ -805,6 +731,7 @@ minetest.register_node("default:pine_needles",{ minetest.register_node("default:pine_sapling", { description = "Pine Sapling", drawtype = "plantlike", + visual_scale = 1.0, tiles = {"default_pine_sapling.png"}, inventory_image = "default_pine_sapling.png", wield_image = "default_pine_sapling.png", @@ -885,6 +812,7 @@ minetest.register_node("default:acacia_leaves", { minetest.register_node("default:acacia_sapling", { description = "Acacia Tree Sapling", drawtype = "plantlike", + visual_scale = 1.0, tiles = {"default_acacia_sapling.png"}, inventory_image = "default_acacia_sapling.png", wield_image = "default_acacia_sapling.png", @@ -963,6 +891,7 @@ minetest.register_node("default:aspen_leaves", { minetest.register_node("default:aspen_sapling", { description = "Aspen Tree Sapling", drawtype = "plantlike", + visual_scale = 1.0, tiles = {"default_aspen_sapling.png"}, inventory_image = "default_aspen_sapling.png", wield_image = "default_aspen_sapling.png", @@ -1050,24 +979,6 @@ minetest.register_node("default:copperblock", { sounds = default.node_sound_metal_defaults(), }) - -minetest.register_node("default:stone_with_tin", { - description = "Tin Ore", - tiles = {"default_stone.png^default_mineral_tin.png"}, - groups = {cracky = 2}, - drop = "default:tin_lump", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("default:tinblock", { - description = "Tin Block", - tiles = {"default_tin_block.png"}, - is_ground_content = false, - groups = {cracky = 1, level = 2}, - sounds = default.node_sound_metal_defaults(), -}) - - minetest.register_node("default:bronzeblock", { description = "Bronze Block", tiles = {"default_bronze_block.png"}, @@ -1167,6 +1078,7 @@ minetest.register_node("default:dry_shrub", { description = "Dry Shrub", drawtype = "plantlike", waving = 1, + visual_scale = 1.0, tiles = {"default_dry_shrub.png"}, inventory_image = "default_dry_shrub.png", wield_image = "default_dry_shrub.png", @@ -1186,7 +1098,7 @@ minetest.register_node("default:junglegrass", { description = "Jungle Grass", drawtype = "plantlike", waving = 1, - visual_scale = 1.69, + visual_scale = 1.3, tiles = {"default_junglegrass.png"}, inventory_image = "default_junglegrass.png", wield_image = "default_junglegrass.png", @@ -1194,7 +1106,7 @@ minetest.register_node("default:junglegrass", { sunlight_propagates = true, walkable = false, buildable_to = true, - groups = {snappy = 3, flora = 1, attached_node = 1, flammable = 1}, + groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1, flammable = 1}, sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", @@ -1310,7 +1222,7 @@ end minetest.register_node("default:bush_stem", { description = "Bush Stem", drawtype = "plantlike", - visual_scale = 1.41, + visual_scale = 1.18, tiles = {"default_bush_stem.png"}, inventory_image = "default_bush_stem.png", wield_image = "default_bush_stem.png", @@ -1331,57 +1243,13 @@ minetest.register_node("default:bush_leaves", { tiles = {"default_leaves_simple.png"}, paramtype = "light", groups = {snappy = 3, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"default:bush_sapling"}, rarity = 5}, - {items = {"default:bush_leaves"}} - } - }, sounds = default.node_sound_leaves_defaults(), - - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("default:bush_sapling", { - description = "Bush Sapling", - drawtype = "plantlike", - tiles = {"default_bush_sapling.png"}, - inventory_image = "default_bush_sapling.png", - wield_image = "default_bush_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 2 / 16, 4 / 16} - }, - groups = {snappy = 2, dig_immediate = 3, flammable = 2, - attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(1200, 2400)) - end, - - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "default:bush_sapling", - -- minp, maxp to be checked, relative to sapling pos - {x = -1, y = 0, z = -1}, - {x = 1, y = 1, z = 1}, - -- maximum interval of interior volume check - 2) - - return itemstack - end, }) minetest.register_node("default:acacia_bush_stem", { description = "Acacia Bush Stem", drawtype = "plantlike", - visual_scale = 1.41, + visual_scale = 1.18, tiles = {"default_acacia_bush_stem.png"}, inventory_image = "default_acacia_bush_stem.png", wield_image = "default_acacia_bush_stem.png", @@ -1402,51 +1270,7 @@ minetest.register_node("default:acacia_bush_leaves", { tiles = {"default_acacia_leaves_simple.png"}, paramtype = "light", groups = {snappy = 3, flammable = 2, leaves = 1}, - drop = { - max_items = 1, - items = { - {items = {"default:acacia_bush_sapling"}, rarity = 5}, - {items = {"default:acacia_bush_leaves"}} - } - }, sounds = default.node_sound_leaves_defaults(), - - after_place_node = default.after_place_leaves, -}) - -minetest.register_node("default:acacia_bush_sapling", { - description = "Acacia Bush Sapling", - drawtype = "plantlike", - tiles = {"default_acacia_bush_sapling.png"}, - inventory_image = "default_acacia_bush_sapling.png", - wield_image = "default_acacia_bush_sapling.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = default.grow_sapling, - selection_box = { - type = "fixed", - fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 2 / 16, 3 / 16} - }, - groups = {snappy = 2, dig_immediate = 3, flammable = 2, - attached_node = 1, sapling = 1}, - sounds = default.node_sound_leaves_defaults(), - - on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(1200, 2400)) - end, - - on_place = function(itemstack, placer, pointed_thing) - itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, - "default:acacia_bush_sapling", - -- minp, maxp to be checked, relative to sapling pos - {x = -1, y = 0, z = -1}, - {x = 1, y = 1, z = 1}, - -- maximum interval of interior volume check - 2) - - return itemstack - end, }) @@ -1766,281 +1590,216 @@ minetest.register_node("default:lava_flowing", { -- Tools / "Advanced" crafting / Non-"natural" -- -local function get_chest_formspec(pos) +local chest_formspec = + "size[8,9]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "list[current_name;main;0,0.3;8,4;]" .. + "list[current_player;main;0,4.85;8,1;]" .. + "list[current_player;main;0,6.08;8,3;8]" .. + "listring[current_name;main]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,4.85) + +local function get_locked_chest_formspec(pos) local spos = pos.x .. "," .. pos.y .. "," .. pos.z local formspec = "size[8,9]" .. default.gui_bg .. default.gui_bg_img .. default.gui_slots .. - "list[nodemeta:" .. spos .. ";default:chest;0,0.3;8,4;]" .. + "list[nodemeta:" .. spos .. ";main;0,0.3;8,4;]" .. "list[current_player;main;0,4.85;8,1;]" .. "list[current_player;main;0,6.08;8,3;8]" .. - "listring[nodemeta:" .. spos .. ";default:chest]" .. + "listring[nodemeta:" .. spos .. ";main]" .. "listring[current_player;main]" .. default.get_hotbar_bg(0,4.85) - return formspec + return formspec end -local function chest_lid_obstructed(pos) - local above = { x = pos.x, y = pos.y + 1, z = pos.z } - local def = minetest.registered_nodes[minetest.get_node(above).name] - -- allow ladders, signs, wallmounted things and torches to not obstruct - if def.drawtype == "airlike" or - def.drawtype == "signlike" or - def.drawtype == "torchlike" or - (def.drawtype == "nodebox" and def.paramtype2 == "wallmounted") then - return false - end - return true -end - -local open_chests = {} - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname ~= "default:chest" then - return - end - if not player or not fields.quit then - return - end - local pn = player:get_player_name() - - if not open_chests[pn] then - return - end - - local pos = open_chests[pn].pos - local sound = open_chests[pn].sound - local swap = open_chests[pn].swap - local node = minetest.get_node(pos) - - open_chests[pn] = nil - for k, v in pairs(open_chests) do - if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then +local function has_locked_chest_privilege(meta, player) + if player then + if minetest.check_player_privs(player, "protection_bypass") then return true end - end - minetest.after(0.2, minetest.swap_node, pos, { name = "default:" .. swap, - param2 = node.param2 }) - minetest.sound_play(sound, {gain = 0.3, pos = pos, max_hear_distance = 10}) - return true -end) - -function default.register_chest(name, d) - local def = table.copy(d) - def.drawtype = "mesh" - def.visual = "mesh" - def.paramtype = "light" - def.paramtype2 = "facedir" - def.legacy_facedir_simple = true - def.is_ground_content = false - - if def.protected then - def.on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("infotext", "Locked Chest") - meta:set_string("owner", "") - local inv = meta:get_inventory() - inv:set_size("default:chest", 8*4) - end - def.after_place_node = function(pos, placer) - local meta = minetest.get_meta(pos) - meta:set_string("owner", placer:get_player_name() or "") - meta:set_string("infotext", "Locked Chest (owned by " .. - meta:get_string("owner") .. ")") - end - def.can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("default:chest") and - default.can_interact_with_node(player, pos) - end - def.allow_metadata_inventory_move = function(pos, from_list, from_index, - to_list, to_index, count, player) - if not default.can_interact_with_node(player, pos) then - return 0 - end - return count - end - def.allow_metadata_inventory_put = function(pos, listname, index, stack, player) - if not default.can_interact_with_node(player, pos) then - return 0 - end - return stack:get_count() - end - def.allow_metadata_inventory_take = function(pos, listname, index, stack, player) - if not default.can_interact_with_node(player, pos) then - return 0 - end - return stack:get_count() - end - def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - if not default.can_interact_with_node(clicker, pos) then - return itemstack - end - - minetest.sound_play(def.sound_open, {gain = 0.3, - pos = pos, max_hear_distance = 10}) - if not chest_lid_obstructed(pos) then - minetest.swap_node(pos, - { name = "default:" .. name .. "_open", - param2 = node.param2 }) - end - minetest.after(0.2, minetest.show_formspec, - clicker:get_player_name(), - "default:chest", get_chest_formspec(pos)) - open_chests[clicker:get_player_name()] = { pos = pos, - sound = def.sound_close, swap = name } - end - def.on_blast = function() end - def.on_key_use = function(pos, player) - local secret = minetest.get_meta(pos):get_string("key_lock_secret") - local itemstack = player:get_wielded_item() - local key_meta = itemstack:get_meta() - - if key_meta:get_string("secret") == "" then - key_meta:set_string("secret", minetest.parse_json(itemstack:get_metadata()).secret) - itemstack:set_metadata("") - end - - if secret ~= key_meta:get_string("secret") then - return - end - - minetest.show_formspec( - player:get_player_name(), - "default:chest_locked", - get_chest_formspec(pos) - ) - end - def.on_skeleton_key_use = function(pos, player, newsecret) - local meta = minetest.get_meta(pos) - local owner = meta:get_string("owner") - local pn = player:get_player_name() - - -- verify placer is owner of lockable chest - if owner ~= pn then - minetest.record_protection_violation(pos, pn) - minetest.chat_send_player(pn, "You do not own this chest.") - return nil - end - - local secret = meta:get_string("key_lock_secret") - if secret == "" then - secret = newsecret - meta:set_string("key_lock_secret", secret) - end - - return secret, "a locked chest", owner - end else - def.on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("infotext", "Chest") - local inv = meta:get_inventory() - inv:set_size("default:chest", 8*4) - end - def.can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("default:chest") - end - def.on_rightclick = function(pos, node, clicker) - minetest.sound_play(def.sound_open, {gain = 0.3, pos = pos, - max_hear_distance = 10}) - if not chest_lid_obstructed(pos) then - minetest.swap_node(pos, { - name = "default:" .. name .. "_open", - param2 = node.param2 }) - end - minetest.after(0.2, minetest.show_formspec, - clicker:get_player_name(), - "default:chest", get_chest_formspec(pos)) - open_chests[clicker:get_player_name()] = { pos = pos, - sound = def.sound_close, swap = name } - end + return false end - def.on_metadata_inventory_move = function(pos, from_list, from_index, + -- is player wielding the right key? + local item = player:get_wielded_item() + if item:get_name() == "default:key" then + local key_meta = minetest.parse_json(item:get_metadata()) + local secret = meta:get_string("key_lock_secret") + if secret ~= key_meta.secret then + return false + end + + return true + end + + if player:get_player_name() ~= meta:get_string("owner") then + return false + end + + return true +end + +minetest.register_node("default:chest", { + description = "Chest", + tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png", + "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"}, + paramtype2 = "facedir", + groups = {choppy = 2, oddly_breakable_by_hand = 2}, + legacy_facedir_simple = true, + is_ground_content = false, + sounds = default.node_sound_wood_defaults(), + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", chest_formspec) + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) minetest.log("action", player:get_player_name() .. " moves stuff in chest at " .. minetest.pos_to_string(pos)) - end - def.on_metadata_inventory_put = function(pos, listname, index, stack, player) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) minetest.log("action", player:get_player_name() .. " moves " .. stack:get_name() .. " to chest at " .. minetest.pos_to_string(pos)) - end - def.on_metadata_inventory_take = function(pos, listname, index, stack, player) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) minetest.log("action", player:get_player_name() .. " takes " .. stack:get_name() .. " from chest at " .. minetest.pos_to_string(pos)) - end - def.on_blast = function(pos) + end, + on_blast = function(pos) local drops = {} default.get_inventory_drops(pos, "main", drops) drops[#drops+1] = "default:chest" minetest.remove_node(pos) return drops - end - - local def_opened = table.copy(def) - local def_closed = table.copy(def) - - def_opened.mesh = "chest_open.obj" - def_opened.drop = "default:" .. name - def_opened.groups.not_in_creative_inventory = 1 - def_opened.selection_box = { - type = "fixed", - fixed = { -1/2, -1/2, -1/2, 1/2, 3/16, 1/2 }, - } - def_opened.can_dig = function() - return false - end - - def_closed.mesh = "cube.obj" - - minetest.register_node("default:" .. name, def_closed) - minetest.register_node("default:" .. name .. "_open", def_opened) - - -- convert old chests to this new variant - minetest.register_lbm({ - label = "update chests to opening chests", - name = "default:upgrade_" .. name, - nodenames = {"default:" .. name}, - action = function(pos, node) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", nil) - local inv = meta:get_inventory() - local list = inv:get_list("main") - inv:set_list("main", nil) - inv:set_size("default:chest", 8*4) - inv:set_list("default:chest", list) - end - }) -end - - -default.register_chest("chest", { - description = "Chest", - tiles = { "default_chest_wood.png" }, - sounds = default.node_sound_wood_defaults(), - sound_open = "default_chest_open", - sound_close = "default_chest_close", - groups = {choppy = 2, oddly_breakable_by_hand = 2}, + end, }) -default.register_chest("chest_locked", { +minetest.register_node("default:chest_locked", { description = "Locked Chest", - tiles = { "default_chest_wood_locked.png" }, - sounds = default.node_sound_wood_defaults(), - sound_open = "default_chest_open", - sound_close = "default_chest_close", + tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png", + "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"}, + paramtype2 = "facedir", groups = {choppy = 2, oddly_breakable_by_hand = 2}, - protected = true, + legacy_facedir_simple = true, + is_ground_content = false, + sounds = default.node_sound_wood_defaults(), + + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "Locked Chest (owned by " .. + meta:get_string("owner") .. ")") + end, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("owner", "") + local inv = meta:get_inventory() + inv:set_size("main", 8 * 4) + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and has_locked_chest_privilege(meta, player) + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, + to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + return 0 + end + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + return 0 + end + return stack:get_count() + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name() .. + " moves " .. stack:get_name() .. + " to locked chest at " .. minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name() .. + " takes " .. stack:get_name() .. + " from locked chest at " .. minetest.pos_to_string(pos)) + end, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local meta = minetest.get_meta(pos) + if has_locked_chest_privilege(meta, clicker) then + minetest.show_formspec( + clicker:get_player_name(), + "default:chest_locked", + get_locked_chest_formspec(pos) + ) + end + return itemstack + end, + on_blast = function() end, + on_key_use = function(pos, player) + local secret = minetest.get_meta(pos):get_string("key_lock_secret") + local itemstack = player:get_wielded_item() + local key_meta = minetest.parse_json(itemstack:get_metadata()) + + if secret ~= key_meta.secret then + return + end + + minetest.show_formspec( + player:get_player_name(), + "default:chest_locked", + get_locked_chest_formspec(pos) + ) + end, + on_skeleton_key_use = function(pos, player, newsecret) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local name = player:get_player_name() + + -- verify placer is owner of lockable chest + if owner ~= name then + minetest.record_protection_violation(pos, name) + minetest.chat_send_player(name, "You do not own this chest.") + return nil + end + + local secret = meta:get_string("key_lock_secret") + if secret == "" then + secret = newsecret + meta:set_string("key_lock_secret", secret) + end + + return secret, "a locked chest", owner + end, }) + local bookshelf_formspec = "size[8,7;]" .. default.gui_bg .. @@ -2278,7 +2037,6 @@ minetest.register_node("default:glass", { drawtype = "glasslike_framed_optional", tiles = {"default_glass.png", "default_glass_detail.png"}, paramtype = "light", - paramtype2 = "glasslikeliquidlevel", sunlight_propagates = true, is_ground_content = false, groups = {cracky = 3, oddly_breakable_by_hand = 3}, @@ -2290,7 +2048,6 @@ minetest.register_node("default:obsidian_glass", { drawtype = "glasslike_framed_optional", tiles = {"default_obsidian_glass.png", "default_obsidian_glass_detail.png"}, paramtype = "light", - paramtype2 = "glasslikeliquidlevel", is_ground_content = false, sunlight_propagates = true, sounds = default.node_sound_glass_defaults(), @@ -2321,27 +2078,6 @@ minetest.register_node("default:meselamp", { light_source = default.LIGHT_MAX, }) -minetest.register_node("default:mese_post_light", { - description = "Mese Post Light", - tiles = {"default_mese_post_light_top.png", "default_mese_post_light_top.png", - "default_mese_post_light_side_dark.png", "default_mese_post_light_side_dark.png", - "default_mese_post_light_side.png", "default_mese_post_light_side.png"}, - wield_image = "default_mese_post_light_side.png", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-2 / 16, -8 / 16, -2 / 16, 2 / 16, 8 / 16, 2 / 16}, - }, - }, - paramtype = "light", - light_source = default.LIGHT_MAX, - sunlight_propagates = true, - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, - sounds = default.node_sound_wood_defaults(), -}) - -- -- Misc -- @@ -2353,69 +2089,3 @@ minetest.register_node("default:cloud", { sounds = default.node_sound_defaults(), groups = {not_in_creative_inventory = 1}, }) - --- --- register trees for leafdecay --- - -if minetest.get_mapgen_setting("mg_name") == "v6" then - default.register_leafdecay({ - trunks = {"default:tree"}, - leaves = {"default:apple", "default:leaves"}, - radius = 2, - }) - - default.register_leafdecay({ - trunks = {"default:jungletree"}, - leaves = {"default:jungleleaves"}, - radius = 3, - }) - - default.register_leafdecay({ - trunks = {"default:pine_tree"}, - leaves = {"default:pine_needles"}, - radius = 3, - }) -else - default.register_leafdecay({ - trunks = {"default:tree"}, - leaves = {"default:apple", "default:leaves"}, - radius = 3, - }) - - default.register_leafdecay({ - trunks = {"default:jungletree"}, - leaves = {"default:jungleleaves"}, - radius = 2, - }) - - default.register_leafdecay({ - trunks = {"default:pine_tree"}, - leaves = {"default:pine_needles"}, - radius = 2, - }) -end - -default.register_leafdecay({ - trunks = {"default:acacia_tree"}, - leaves = {"default:acacia_leaves"}, - radius = 2, -}) - -default.register_leafdecay({ - trunks = {"default:aspen_tree"}, - leaves = {"default:aspen_leaves"}, - radius = 3, -}) - -default.register_leafdecay({ - trunks = {"default:bush_stem"}, - leaves = {"default:bush_leaves"}, - radius = 1, -}) - -default.register_leafdecay({ - trunks = {"default:acacia_bush_stem"}, - leaves = {"default:acacia_bush_leaves"}, - radius = 1, -}) diff --git a/mods/mp_minetest/default/player.lua b/mods/mp_minetest/default/player.lua index cd89a24c..fd7341f4 100644 --- a/mods/mp_minetest/default/player.lua +++ b/mods/mp_minetest/default/player.lua @@ -96,8 +96,7 @@ minetest.register_on_joinplayer(function(player) player:set_local_animation({x=0, y=79}, {x=168, y=187}, {x=189, y=198}, {x=200, y=219}, 30) -- set GUI - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(player:get_player_name())) then + if not minetest.setting_getbool("creative_mode") then player:set_inventory_formspec(default.gui_survival_form) end player:hud_set_hotbar_image("gui_hotbar.png") diff --git a/mods/mp_minetest/default/schematics/acacia_log.mts b/mods/mp_minetest/default/schematics/acacia_log.mts deleted file mode 100644 index 037bca8c32152f0927ff027811e918e713872b91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65 zcmeYb3HD`RVPIxpVqmPV2a?Q*nMDl3DXD3Rr8y;5iOGq{nThcwMX9M3bCMGnnB5Fg T5<1pzXP;zaW5d8XmC+Rd7>*KA diff --git a/mods/mp_minetest/default/schematics/apple_log.mts b/mods/mp_minetest/default/schematics/apple_log.mts deleted file mode 100644 index e7ee8f2b84ab06165c4537cd4607ec56e3066608..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmeYb3HD`RVPFPA#`^kt5F;_Oh=C_1H7&6;r^KqHC^eNqEG;L$JhiCUDz~&aqbNT= qH$JH-zdWyEPI3YRvztLmLITt0N3Y*XK5^uclao{6WDtsDOalOtHXH!} diff --git a/mods/mp_minetest/default/schematics/apple_tree.mts b/mods/mp_minetest/default/schematics/apple_tree.mts index 2bd57c1fc4aa36e2f03c6ac2989c86b575e2784e..ac09b46694037b0824dd4c0e3762d66d0fff1a76 100644 GIT binary patch delta 27 jcmZ3xSVl94NFDkf~JX$QoKTEl<(I%3oT#b=U1=aK7H!QBPS=Pz{w!`m2m|C DeorWw diff --git a/mods/mp_minetest/default/schematics/aspen_tree.mts b/mods/mp_minetest/default/schematics/aspen_tree.mts index 429a831c775320ace3f86c566380abea4dafb162..724aae08d67834daea27dcfdcc9c2def13b435bd 100644 GIT binary patch delta 76 zcmV-S0JHzD0k8p(Yej)y44Yf15l++(7izhQ_UXkwzdqj{CyN*WR1C!RU=lkE3jX6G i>i^d>)B}ln3|4(Tm;|Yzo?8e4%EM(8Py_%cayty#a~{C} delta 74 zcmV-Q0JZd%YePY-7{V>o2q)@?3$@%t`}AU;U!QM}lSK>wDhA?uFo~T71^@98 g_5bS`>VZT(b`}r=)lknZ1OesYG72aH04DA`jmYI6RR910 diff --git a/mods/mp_minetest/default/schematics/aspen_tree_from_sapling.mts b/mods/mp_minetest/default/schematics/aspen_tree_from_sapling.mts index b7ab3ee6b71ff54ed06229486b50a9dd4f918479..b7ca161903056454f78f4672000947d2ebf60035 100644 GIT binary patch delta 75 zcmV-R0JQ(E0j~j&Yea!x44Yf15l++(7izhQ_UXkwzdqj{CyN*WR1C!RU=lkE3hF_` he>e-304fGy2#J*iRZJbX5CoKm%P61-0076$HVk1=8^!d%YePY-7{V>o2q)@?3$@%t`}AU;U!QM}lSK>wDhA?uFo~T71@$1} gKb(b102PBUgv82%DyEKG2m;E(WfV{Z0L!{I4W+Ffga7~l diff --git a/mods/mp_minetest/default/schematics/jungle_log.mts b/mods/mp_minetest/default/schematics/jungle_log.mts deleted file mode 100644 index 54fa16d175a053f47c4ee55d678b33dbf507f314..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96 zcmeYb3HD`RVPFPA#`^kt5F;_Oh(RbNH7&6;r^G6&G%r0TwWKIDl|d{mC%-(ksMspE wv^b+EKR-7ag(Gk_?^;FQ(`iU4%%r)B+7$w=iH82Q!3)*X4Hu? njZcYXd!0%@Z7MeyRhp$abr!YKVc@AHAT*x-@e?=zvUf&fMvquW delta 189 zcmV;u07C!!0sjGz6a-&iUtf_JI)7~r!ypK4xoD5T5jdJhW6EF?k<}k&$&x)&K+DJT z#pCz_PFeF^%=60wK1Ms3f@2CPQ_!zx`eqEWvgqy}^T_6aGC0HEF|xd7|$4yv7NJ1%B5g^Qap r8meX7DB9LcJ0r5Da)VW-m6~JM(;b;E0~;3%XX1mVfBXa<$QDa9du3V% diff --git a/mods/mp_minetest/default/schematics/jungle_tree_from_sapling.mts b/mods/mp_minetest/default/schematics/jungle_tree_from_sapling.mts index f93f01419c5dc002519f603b5620dcaa58ecd819..babaa45f7a11de1fc017b341cea0751974ce2ab4 100644 GIT binary patch delta 180 zcmV;l089V(0rmlq6a+s%KR=NeI)4ie!ypK?T+E|*1di~IzA3}j4|HZROP1`BB1(bh ziy?dghnT&a|Ld&>-9|f@Qpc2BrleoX^kPh6Ui9uBc2wt(GB~EJRcmY7YP(z0s*9)H zeVwoAe)#Wfz3!9x0Ss=I7ZNikae9E$#igbInnedC+V){f~k_$*_0CcD%0kDtI3@{u|;Tu4`J diff --git a/mods/mp_minetest/default/schematics/pine_log.mts b/mods/mp_minetest/default/schematics/pine_log.mts deleted file mode 100644 index 744c38b0290fc671f18b6aeda5315bdcc2554768..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93 zcmeYb3HD`RVPFPA#`^kt5F;_Oh(RzVH7&6;r^KotGcPs1q$o9&K_o3FzdW_5*ebWQ tIHM>(KR3Q8HKk%sasmUhn?XuK0@LS5uir{OapaMclT+Yi5Q<|=0|4+Z9U=e# diff --git a/mods/mp_minetest/default/schematics/pine_tree.mts b/mods/mp_minetest/default/schematics/pine_tree.mts index 6f27d83921216011779cb297d1a771de9fdd0f85..3a3fa7ad0e7f7c3bbd3282856d1985734b62d702 100644 GIT binary patch delta 122 zcmV-=0EPds0j~iLO;l4&00aO901f~Je}9n=K4W8GAQ>>iA+=@6a|<%bNHtjyU?Pdd z2xURcV}hGUx-7yixtnqF#N|()B_2i c(*O1NxL{M@CQ0EGXq0k8oNO;l4&00aO901p5Ke}6xb4nAY;Qd-O92`Wg= dP@p-3ef0m09zCqgE-96V#IAlU!UhRpH4Zn*He3Jz diff --git a/mods/mp_minetest/default/schematics/pine_tree_from_sapling.mts b/mods/mp_minetest/default/schematics/pine_tree_from_sapling.mts index e42a9965cda4e177a5acac0b2c6753684085b5cf..629c5da027a0c3d1532a867b611a27357499c0df 100644 GIT binary patch delta 117 zcmV-*0E+*v0jvQIO;l4&00aO901f~Je}9n=KwcmjFv20VWyy03GRa6aSrA|%iNy$I zLCj-B38S3*H>g(%?;W99Q8UNud7*P*_ XV08q!)N%_BK%HcLO;l4&00aO901p5Ke}6xb4nSX^05HNKwPh)F6*9?4HCYf~B9p}k zWkF14f}2dbEW%ZkhaGLhiV{~1K)Q<0ug{MsmWvStvw3 Z1cDV4HI-6eJZC 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 oI%2I^rHkG7UHiYQ^0NTEfZvX%Q diff --git a/mods/mp_minetest/default/sounds/default_chest_open.ogg b/mods/mp_minetest/default/sounds/default_chest_open.ogg deleted file mode 100644 index c73c072c05d0b42e5e9ed50e3d7398dcc476fa16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10578 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 iVWA6QJkpf{zalHKgb?9R@-GslZH zOI6V4>U?p|;dvebsJ(qyjavlqxpd~b0GwQTPNUf2%Gw|Yn15NE)S_P?Ni)7)zasz+ zKrS9z^&PS-Vt(ZX1^9itLA$-h!_eH)>U1$)ftTJqq5#9~#}_8F0Jz2sw;w`IqfXMZT=snu!ibYWxdx*&op8CNg- z`nN*@P+OYRzRii_ggxO1#t*r8`kKtVaaaqYY(DheKfN$)yz&=Wd7ks+_&Dc2xGHn+ zO=*3n#oq7{V%x%IDGK!Bgwb+9mg&Gq02^y}WV9UMI1by*HUO7Cz9C^?XmlRXY;}lw zeMX87<$oZc*^clEip;M}skKEepZQ^6;ngX<@ZpVr5&HaV2lU|n$B2^-d7jhjXQbBR zG+JGfq&^(Hx3$fS3ln-`VM2FnCl)5u_$AJN^rMu6J%|YVDi!uu4-810Sv;h1zmK(+ zlJAqL;yDhUF^oUDk3Z^lqJGMEpWl_arD<))4_k2DfX($=;s6A`N1iD^UA`}4qXy%; z^kR$e30w6#U!1)uB{QHarb~vQXrQ+Aj8a=Zs=HF|I&yaTh`#*RQ+jOvpz=TX6W_x~ U5082tu>b%707*qoM6N<$g5be=z@;j(q!3lK=n! zAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ;-$_J4RCwBi zlTC=@7|l-B)wCcnKYBXPHLrg1}TV}0o}|_To^hi+J8lVC=P-mAzc+q>qbxn zkur)FaiQ2v-Lw?Ckcx^Mk%2B0TA@~F+GH|Gnq-=}levGn$3sII6!xC6lD_wK1|GQ$1N3d;?L zwRN9y%OJZa!gA9k9??+8&KAXUa(wl{j|$-A`G5WL#oNpO06O#Hgv>sk!*D(XY_i3u<=T%O449&%cs6ley6r>mdK II;Vst06Lv3;{X5v diff --git a/mods/mp_minetest/default/textures/default_chest_wood.png b/mods/mp_minetest/default/textures/default_chest_wood.png deleted file mode 100644 index 408fddb22872a6cd9d9bdd1e2faca55415a98ebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2320 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 Px{krq)z4*}Q$iB}e|B}q diff --git a/mods/mp_minetest/default/textures/default_desert_sandstone_block.png b/mods/mp_minetest/default/textures/default_desert_sandstone_block.png deleted file mode 100644 index 8fc54e75bc0a0eab48724341a18f42a53829c327..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmV-R0<`^!P)i_Vr7>zrCP4=%i$R zRQ7}9-*;aNLa|tDC8{{5=X;eg4P*P*9rucxqxvgn@>QGWMFS&to6_`$;M8)n* zV{XSSG1At8ybAhjR{KuV^AY1&Jw*g+F~WIEdI4t^U|r9??hh#Av&1RpnF z03$MJgB`Y8m<|K;#i7r4$K~}6B@{knVipu1n2whFT6kJKi9+&)-gbBwvAyQD1b$u? ZegUJ`SZq;McX|K-002ovPDHLkV1kz<5KjOA diff --git a/mods/mp_minetest/default/textures/default_desert_sandstone_brick.png b/mods/mp_minetest/default/textures/default_desert_sandstone_brick.png deleted file mode 100644 index ab58db52350591442c6a84101fa9fd57c84a694a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 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 bK!5=NQ1fAhI<`(200000NkvXXu0mjf0#nMF delta 371 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 diff --git a/mods/mp_minetest/default/textures/default_grass_2.png b/mods/mp_minetest/default/textures/default_grass_2.png index 03729a007860cc2cbf4c060fb6792555b46882ba..0ffa8fc2c6377b9501954f70305ec6ee0f3f6fde 100644 GIT binary patch delta 2975 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 VR=?4N6x9F#002ovPDHLkV1l8OwPpYS delta 310 zcmV-60m=TP7tjKbBYyw{XF*Lt006O%3;baP00001b5ch_0olnce*gdgAY({UO#lFT zCIA3{ga82g0001h=l}q9FaQARU;qF*m;eA5aGbhPJOBUy24YJ`L;(K){{a7>y{D4^ z006v6L_t(I%k7iT3IS0R#((#AZ%t|xk@60nz{7bK?_lK(EPrgoM#LmTl3`d3_tvrU zCuX5oI=l0o@B8&_juH{R8U0oI5BLLq1yHSaGxy+3Al7H&6z-S zp7}L++vl_F-fFYgVtuCcX0Pw&ZYLIiWP1T%INkv;h>idp&JXBxw5GpwVwSrTUR&x# z2up@Ibwr~C-!CXpt61XHahWIdP6atkQsR1*#p*2Of*}my3d!|Wxk7uSA^-pY07*qo IM6N<$f{Cz!Jpcdz diff --git a/mods/mp_minetest/default/textures/default_grass_3.png b/mods/mp_minetest/default/textures/default_grass_3.png index 92ca1b5d8d28ddfa4b16968380d5efd246727cbb..101fefaa81e2fa241acca126aa3526da5d615614 100644 GIT binary patch delta 3060 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 Ay{D4^ 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 Z0RU^?UVV0wF4h15002ovPDHLkV1g2cr~m)} delta 369 zcmcaBKA(AlN(4)~qpu?a!^VE@KZ&di3=E9LLGDhBH&5!+133!G9znhg3{`3j3=J&| z48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!ItFh?!xdN1Q+aGK6#>|cs;{6PZ!4! zi_^(}{{OdUR&D51x_kIAgP4S}@!D2LFSjrMH>-@ft4-`o3_|Ecoh|7CG`Jcc`87F6=+XS~cbu-Q>MT~W<^ZsXk8 z2lmX&hwBSHpZ@3J;rX9jbXhX3#3!l##@;mkHpK${nB67Kiic14K0JMWK2PJvdpz;` z{-q=U!Gnix8(Li>B`bE^lw@gXF+A+x;4$Olg>A70^+q)n-^EmUl7MD`WP#>2wKI1y z0?p?+KW|T3%gnwUZf2mZlTI4{=jPyCoRJ1HP{#Mv6ln&A?E7)GG6(o1OMv0R;OXk; Jvd$@?2>`bxlGp$M diff --git a/mods/mp_minetest/default/textures/default_key_skeleton.png b/mods/mp_minetest/default/textures/default_key_skeleton.png index 2b3497d37fc91be0c835905eb75e68dceaecb864..eafcc19585b3239ca7061a7f939e6507422dd2e9 100644 GIT binary patch delta 2997 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 delta 338 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 diff --git a/mods/mp_minetest/default/textures/default_mese_post_light_side_dark.png b/mods/mp_minetest/default/textures/default_mese_post_light_side_dark.png deleted file mode 100644 index c4fc7ceac3c46b6186e313504f2ff17f3c40e62f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}OMp*^E0DI(max{940TkDa@Wia zH7p1>>gwv6IC0{fIdfL7T)An}rb}09FJEc6e6{h))#gXf(jPu8d;Bcp@zbJ5PfH&^ z%YXd5@X7Q1hmRLMd0zbZdG*uhHBX;6K6z31_{qj+FWR5I=y~#D#?u$mp1z5*Qd|BKYiZ!@$<1yUk--OJW&I52V+T)UoeBivm0q3PLj8~3quF1tOt<8 zS>O>_%)r1c48n{Iv*t(u1=&kHeO=ifGRpHyvCKGC$_Nw+^K@|xk+|G@!d=M0L4@^y zr2OF%me0@peZTzFsm+&8r@e7J(z%!OvVg$tx)_04Yh8iE73Ty}gUbaxXN3yX%@7xG ulvyjV?QxaBrA;a&XcU;w@Z`l6i*$+GZN;;&{oxklM|d%x!jI3s4b*r>mdKI;Vst0QkEkJpcdz diff --git a/mods/mp_minetest/default/textures/default_mineral_tin.png b/mods/mp_minetest/default/textures/default_mineral_tin.png deleted file mode 100644 index 232d4b537c1d5e93736577096f23f8d558bb4387..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa3-AeX1=6QZow{)0!nuoQjvhaK z{J^mThxT8;ar4BXlLwC<6JPN=8mNM?B*-tA!Qt7BG$6;?)5S4_<9f0KQxk{UVumSU z2~3?Zzopr04g>;umAu6 diff --git a/mods/mp_minetest/default/textures/default_rainforest_litter.png b/mods/mp_minetest/default/textures/default_rainforest_litter.png deleted file mode 100644 index d762deb46cdc5c5746128223b9fd0d26e50a11fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmWlY_jcL_6vi(CB-xS>7=u-8HX23(WAF%I47LFyS%8dXm*GL|q>k&Pb=#!7O`Fc7 z!%bUv4|ngl>0ar4gXTf{20c~Jx#RbJ=Y0R&dr_;+Q@x&E0HEYbv0-fc|BaiCDa7a{ z07TVPy_D>SOdq73Fv7r;3vzClc0dM884CyndZEvSOkiO6F_Etrko!giNLH6jj>SlA(^11;K#~7$OSM~0EvSH3l$#} z0+ym5E&Gvt5KVB%CVA-e=1LHigO+;0G#i0R$SjK13BfWc zAZiHYFeIW@EeH!Cs~onLBA603mm{bWHVP}TNIB9oCW00Ll{KeDlfn`e4p&*c&LUM7 zud!H_vsMj2elIYzc6ygouK z$87mAa#g~cF{+-RIx&1DPB-IJGfubS^m2l3C+w|JyFBS!P1-t1M>FNxND^yFM{A5+ z8Mm*e9P26PM#`zCo$U$N+Bnmh=sz)L+ZuQ7jMK*_`?u4slNt9`c3?B>-OTz@wID($OAXNf60hMZ|b|jF5L6n zwjGhkLk_SFL5awR{-E+b_o!@!p*ZD_a_f_qVhrYe_{CfP$ z4{mvuVPMmle(TB~kDa-At~Y)7hGE=pvM60^`tazt7aLvM*x}XH_VsgT{@ypf5ad#= JcxASG;Xk&n%v%5e diff --git a/mods/mp_minetest/default/textures/default_rainforest_litter_side.png b/mods/mp_minetest/default/textures/default_rainforest_litter_side.png deleted file mode 100644 index 7ccb11de3dd24a3894a2b1aac37eec9cec190204..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 497 zcmV41u{;IB??&%q492U(4Ljxo8olEc{_Cf~48!<2ujl6(`HC8Y(P!Pcd*VQ@n z^r^ZICML?}CO+`O2cLTUaFL?#sYBq4^5_7|0ZMJTHLDoAmfMRZ$EGGTiU=Iqnr}L> zOcwLe?YSQmCPgNb3>7>XDG4K@S~88Qe_Y~C!Qdh>CAz4H0>dz3?)gM+45AGuo#UuT zDMF@2i8oj)9G%06a2O(EO8A&qSi>p@W5p1#Sgo;f3|1qem1d;T1aK~p&nk52h~8r}Ltd1)F)RMSM3Wo(;{OoVD~F)~eU+bTbL_C1uMgKGxek0Vl8&1x#-I&yKvMzo>rMttA0 zoKFeIZRqMf(e=Fk%+r%q#YCc>&kB}Rf%vB9#oO)XYTp5Hbdj>EP^KUw@bVK+RJl;m zRzw(^w&%JHJb$;_^e$jT064$+8rJ|1?i4hA&9e{v=IqgO1DwBlf4%0n`sjJ{oi)I2 n-ve;UpHBaZ8~&U2fB(!c=U>}SPA;3(00000NkvXXu0mjfm*(TO diff --git a/mods/mp_minetest/default/textures/default_sign_steel.png b/mods/mp_minetest/default/textures/default_sign_steel.png index 3ca0c59d3eea1b096d01ef6031b3a58a634e3108..5705c787c7cf2a5a990ae329c0b064051a1cd063 100644 GIT binary patch delta 3024 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 Sgm}RK0000!TZtJGE1 zE&lBO(z}i%NpQ|#t;IP<5Cp_=%%j@2B?tllf*?Q$fshK#I8YP?@6>L$Ln^7?A_FL? z5u42hV0^~{AavWd04x@ZZ?_p^Fvg&@rfC|E$0GnTj$^;6EXyCs`~BXlbk3nClZgi| zm&+eFKQQAs{!{Roa6X>_f2gVoV+?g&18_JTu-1B2xAZQ>v=+xW4b{`yPF{TwY}7d5$rL`Fu{(G^A+?K$c}MSSh7MO6f!V?D<*t zbI?Kvgb?^M0<2c6Z^_R=E2RL?kESe3|2#qnlv3PoH-=%L?|bg|OuJXAwf^5HNkSAw z;;Z{hr3phx7=|yiIF9MM4jn}i+wGQjswfI{*LAGdYowIFvT(g#nNFvC0E?osT63BA QqW}N^07*qoM6N<$f|MYt2mk;8 diff --git a/mods/mp_minetest/default/textures/default_sign_wall_steel.png b/mods/mp_minetest/default/textures/default_sign_wall_steel.png index 2227477fb01049c5da8fa415e4c947811a5a2cbc..d8d4a5b00b5e736d6d96674f93b633a73155d76d 100644 GIT binary patch delta 3030 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 V$bEE3EUf?l002ovPDHLkV1mX0vj6}9 diff --git a/mods/mp_minetest/default/textures/default_sign_wall_wood.png b/mods/mp_minetest/default/textures/default_sign_wall_wood.png index 40552c73d84d2b0587380616d054361fb51c5cb4..f25a67a82ae7f619a4a3a5cc296954538e915129 100644 GIT binary patch delta 3208 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 uT`=n!ahR48T=NeJ{6&IEl0-zY3!9OdrSlLfz_ z)lDKlA_+tCylfkmiKc7xH~ZLTjW9^48U{iL04h>u+i0N)Ex zZd{xy+(sP$RjZOD^4}>aP_ZlvDJ5r*9mF1T2>pQGdT)1&({jku98uX%nn=`&idNHk zv+{)~2oV5&e;Co<@p$(9HFA(r(FJ;~tZui5x9#C?`wWVd<&}>V6!>01lBS5r4^R|A zo}^qjH;vhHNe4MXGZC7J-Dt8CMyR?$xD_#d{0N3+VLJ@~gxhjywVK$DLFY$@`%e}D zc<^Ew70KMfD$Rz)!O@mrhMGzx0XO6XQI7 zwZ@h6M|rfc#G?{8RRKhmeaJ&T@fQWD8HfU z#IXcmkf*GE>r*$ZQbf1qGJfa)>zyrzn+F-`rt5)$mpUJTiY}Y|+chGfF`k=@Y-mbI( zFgHT7M4}sYAS25%av6ir8N{V)Ejy-eSomI0z7bIVx0<6vie59Q7?#QHxy3zY;pXg2 vnFX`15r=6>!8QM&z+WhsBuPXROMU^Niw}PF4+*h+00000NkvXXu0mjf1j+-7 diff --git a/mods/mp_minetest/default/textures/default_sign_wood.png b/mods/mp_minetest/default/textures/default_sign_wood.png index d0559dac36e74f6a23df27e7c5c8f97969d7db1f..a25a4c34c01e1679b3fe374409f8669ef33cb3ff 100644 GIT binary patch delta 2680 zcmV-;3WxQA2F@CgGk*#?X+uL$P-t&-Z*ypGa3D!TLm+T+Z)Rz1WdHz3iJg{rR8-d% zhtIutdZEoQ6e&aRy$v9}H>uJ@VVD_UC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne z9*`iQ#9$OrQF$}6R&?d%y_c8YA7_1QpS|}zXYYO1x&V;8{eQWT^B0GzjoyKE}SbXLT zb{bpEJtE$kC4c0I81WZzQ5KhzE#g}u)=U+qaYg)A9Gk{rW&(gBiR}UoD@nwrA|~;} zLfk~W6aXA4@hgu1iUph;f%sBx=^43vZeo&vuFKM+o7vhj=-!;{RE|Jk6vSkuF!^k{ zTY6dsla~v?;+;QBMqFFEsL0l4w$|20=Ei1U73#lk{(nu0d%H-lfo1g?xHu29w318~u5R|8d}7pTjVOlfdC~ zc%q1K(SMY2d5NNS^VnPgH=Rf4^8Qm3|6$mlv^duyQ5rr0YOFDk8lVE?*FJ!v5CIZ% zK(qt>(Kmm5I1s5m_f-n#TRsj}B0%?E`vVTE7*a(V13D^O4gKAI<8bA|h0VhBQ zI1Mg<%iub=0d9i_U<8bV=U@iB0rL<9VIeX^ffOKBNDDH6%pnHk2zfyMPzV$S#X*S> z4-!K8&?cw^Du=3}I;aWy9y$eGfUZJ=&^>4rnu30Z-opq?f~l}FtPPvM4A=$sgTvsJ zaDO7a8qR|Y;q7o0Tn`_E+u;lFb@(O~2}Gii1cZ;QLyD0~ zq#kKOx{zMvCNhFdBkxcc6a_^`8KLY^-l*j$7HTzW9jX*njXHvANA;j?qDE0Os847z zS_y4{wnO`%BhiWIY;+O265WVyLtjGQMt_f^-(WBp8b$|WgYm{hVUjUxFr}FNm{!br z%phhAGmFJy6|e?a2W%jgi4|aruzRt`u;;Kt*m3Mz91*9AGsk)2qH#Q20j?5v6n7Rk zgqy(4Lq)(kHo*Vn{;LcG6+edD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDrGF=7urk^*9x`m1LYYG{7iGpM2t|Y9MqyDlQ5qN`iSTS4ifPdm8#pxx~ zCH6~LONy7ASaM$pR?=4rQCg#PNU2Y0R#`>aOF2V%ukuCZX%(7^vr4i`h00l#DOHN9 zqbgUmLiL>LGrBC@g`P^UqW92e)Rfe`)r4wwYW-^S>N@Jn)eF>H)gNgPG#DBQ8WkGd z8Z(-zngN>mn$4Q`weVUDt$!q~JzBk5bJ{xE5!zd{JG3Wt@^qSY9_o^Hope|0 z*6ZHV!{{;eQuOxg-Oz{it@M-hYxD;UU;}FduEBnTK|{2mts&2_-f-B6WaMI$Wz=jm zYD_csH!d*lFn(d8X%cO+)1=qrlc|+ys%eAi12Y*jU$X+UF0d z+x51mZQt2h+X?JW*!^a2WS?Sx)P8cQ&Qi|OhNWW;>JChYI)@QQx?`N`84^=_}cic_3iN^`Gxvb`#tg3_via}1;7Em z0lNYoF4J1ZTh0(}B^1wIPW30fWWV=yK-D7Ys0X^2@!et$@BC?zyD^l0dtFxRlM zum{U^mkXD7hf9XXgg1rHMYuc#Ks{ zQOuo{IxBNlUR|ZQDs|PFSjkvs?8!KETtwW_xDU)gW<7H@-Y0%v{0z&DwTJbb?aZ!V zPjMVL<(!EGhku0fgvmsQ#9fI~Nlrer7PULy!eY*y=hP9?UUoC%Q{(tCNm$h~4pmp)YIh_3ETV2tjiAU!0h1dxU-n= zE9e!)6@RaH$L_vbX<1pjhp@`mOuh2W$p9Z`j`G8eBSfcF1Yy!cF&^mv8ypx_*1v?ZG?C@7x`Z86LUI zzB_p@_1??-S@-83Y# delta 27 jcmX>n)x1cRrm KpUXO@geCymTUi_c diff --git a/mods/mp_minetest/default/textures/default_silver_sandstone_block.png b/mods/mp_minetest/default/textures/default_silver_sandstone_block.png deleted file mode 100644 index 9997461bfa95d735b2a1ee6bf85e8f3df40b6e3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 290 zcmV+-0p0$IP)c~oSTxMo|UPnqN=H*zr3)(y|Ti#GsI39_=l}o!07*qoM6N<$f@AQAX8-^I diff --git a/mods/mp_minetest/default/textures/default_silver_sandstone_brick.png b/mods/mp_minetest/default/textures/default_silver_sandstone_brick.png deleted file mode 100644 index 93d87a571ab36f919cf32f84f0b358fb2fba7d15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmV-A0mc4_P)vTvkAg<0uuh{|C300vkLOsp2sO#lD@ M07*qoM6N<$g41l9G5`Po diff --git a/mods/mp_minetest/default/textures/default_snow.png b/mods/mp_minetest/default/textures/default_snow.png index fcbef0e5839e699d222479131c00cf058901d8fc..4ac359381234d8d6cfe85244cf4413ea9b57e0de 100644 GIT binary patch literal 4577 zcmeHKX*65w8cyRn#vHu|rK(Pv7Bxh~SRqsmrLC!E)m9`y3=t8;(1A``QyuN8sv63n zR5_-iiq_C$u6d|vhy-aQL=ANmck4at+&}kEf7~B;t?u=F@7~|H-~H_Oeb%?${qEcL zwkIK?a-tv*2x4tzeik_I-5tULfISMAa0Gz_pGG;kQO;r_pd@mz4p{6YU#aG%L3~t357~L#hfOgqwTP33BW?dAe>ywiNg^TJHXVW=lCWRXU z2;T(lSjS{V%LLb>xwUspUu;%4b==%^yzF)`X1wPiNi#BLb4&X|MPqaCyPHz29~!wz zVf?hV)Tn*8E#rvGQFliM*b&u6wR(hu!Pe4`oVOJj*`Q?nWW zj7@1|q%GZk-rMPBvQ<{D?fV(Ln0R4qTs3?La--Z~U#pCzxAL}bxc&*m$O^Me zyHTO=&}5^z>dI$_z(syXRBTuZm_x@z4|(qJ(oUDPKuqkn4=3X+74Sm|8dhvknTz~Wu8p0}%2j$>;%UB_ zgjshVbcx6_dP#pm9lg@B`MtL~jWf_9*R4_{=E1!#4|}BI&UM3k z`_>(#7GBHoVZMFd;^H?G_a`wu9yTgI6rm=?Fn$!!%gtil&5h0l{niJ(%l3Fl+ z_D#ouytf+WXk;NAtg0N{A+0~_Q{v-L;tqC&{}?hWFQ0G`Tpj0VBR6QP;j$2JD>E_@GTK#=U)4CD%?L?FDSnxE&DC7HC9inW((y`{gv5DAe$a`c)yt`P;(EO* z@A+s%vEDulk8{pTWyzs6s-Kd4PzulA?se+-lyGsDJi;~XwUX20{pm5O;a@q}oPWzi z`U~5308v?vZ0Tn0X27DiosD_K5t zCF|uD^D*mm3I9#mH4nQ59eZ?$nVW^`&p{W_ga35-n(L53tf(M zQ)v&U9yvbu5}9#)P|5C6X0$86t~bqek-lu;uf5^9=u)rk-7Y84V5r&VYHxcVKF}f^ zZXxZX{?U+7@DW<9(EFHOF_5woX^Ffd@JPKIBLDMI7oc=|{nwgJAW^WpH5+}q9CG!z zxInbs8)0jC{yWqW$fV2y;tBM3JUej4Bf=}7E_Sd-!j8X;uz?_xo2~Qg>s+h+RwP$5 z8(t}?H^JhBG;c_CpLYz&27yHU3BdQk&E^aW8yuv8!3BHcHK;)(AP5l1$b?G5U<2?J zs5jo1Kt#h9>ziOu0uBvx)wR*IA(`R*2v$*KyknHD6E-RUYk-597>gQFQ2;>@o`Qi= zg93@6C@LEEl@|qE?=B-?(626(05r_a#vW=GOvXcXG;}mH;TBXvxE9P<6lz4q`Jm34 zTmD4>%+N4D3WbD1AR;0nG$OP$g2}!Jq=A6}LQ@N&r3D8(;GvO33Wf?Nh92If_&0|+ zJ`_s^lp_Qap}U+I@8B>B8U_RIL;oVjVgKePg^>flGUKoad>}puPo#t*kQzwDSAQH9 zWf@Ek!T`?`f-t^#1c~SiL+nP2_$yo>d&J-A@5b=IKfb@@n>79|*LS(TNr7*2{=U1u z%k@nPe3SF{-Sz(^m*{^QC_EA9nj(Pq2()wcIM7-#?aw$_w6^xOw)M5W?SK2nz#qF9 z{G)xay<@1ebELCtq^oItG9>HqIK~#q9fux%U(EG#Z;W`El|C=K~$U0(}=;`V^Z!#hae~I5o|i0{#LR z90r3k%~)hGmKZbq877y(1T3G)I1>3B0{oq4+Vk5 zBzMOiP)4RKuqZ^awy_YJ5)+aXgH%?4hJhunwYjO2>>#8&_CzyuFQ~7pf9On)f6;Gs z6(vgh`Y;OdfjT`ec6PF(eqQogenoyL-b`M85hHsXRfdl|>fjRlsZ2*OcDvm}x!Ik! zmS-xuve{9pD{Z+Hc*!KaMae(W!FM3$!G?1ZST4v1JS=ES{OMe+qK=_ikapqyA+-Qw z+20M1s7jPZ!G7B^ycX^-9ipR7I*>W3YpD67mfe7tKuz_Zw|l3wO5R<}AG&;~j(Sbj zZ}icoSNr&BYyzfP)t-s%gfly&DhP(+0M_}&(GS=&)d(?+tAV6($e12)85n6 z-_+FL)YahB)#26F;@8*X*VyFO*yY&R<=ENg*xKgV+UDBY=i1xn+S};c+v(ff>D%1u z+}!Eh-Rj-l>D}Jz-rwuq-|XMt?BCz*-{9%r;O*bw?&0C;;D6!n;o z;o|S&;_%|*@#Ey};^gt<l_=&O~=k(|3@#yIC=jiq5 z==SL8_vz~N>+ALF?Dp*K_wDWX?e6#P?)mfd|NZ^{y`VmP0002$Nkl5U;YGV@Zi_y z&r&LvODBKGNDdct6mN) n>bMecJ1ze=A==Y-(uBz$E4C{e(UBy000000NkvXXu0mjfid#R7 diff --git a/mods/mp_minetest/default/textures/default_snow_side.png b/mods/mp_minetest/default/textures/default_snow_side.png index 03456c84498d7c06625dfc29db1917f159fd5af6..f95b3af8bbe19ff2dfc9d95c77bd617f32c1a966 100644 GIT binary patch delta 2719 zcmV;Q3Sjln2K5?{BYz4{X+uL$P-t&-Z*ypGa3D!TLm+T+Z)Rz1WdHzp+MQEpR8#2| zJ@?-9LQ9B%luK_?6$l_wLW_VDktQl32@pz%A)(n7QNa;KMFbnjpojyGj)066Q7jCK z3fKqaA)=0hqlk*i`{8?|Yu3E?=FR@K*FNX0^PRKL2fzpnmVZbyQ8j=JsX`tR;Dg7+ z#^K~HK!FM*Z~zbpvt%K2{UZSY_f59&ghTmgWD z0l;*TI7e|ZE3OddDgXd@nX){&BsoQaTL>+22Uk}v9w^R9 z7b_GtVFF>AKrX_0nHe&HG!NkO%m4tOkrff(gY*4(&VLTB&dxTDwhmt{>c0m6B4T3W z{^ifBa6kY6;dFk{{wy!E8h|?nfNlPwCGG@hUJIag_lst-4?wj5py}FI^KkfnJUm6A zkh$5}<>chpO2k52Vaiv1{%68pz*qfj`F=e7_x0eu;v|7GU4cgg_~63K^h~83&yop* zV%+ABM}Pdc3;+Bb(;~!4V!2o<6ys46agIcqjPo+3B8fthDa9qy|77CdEc*jK-!%ZR zYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S1Au6Q;m>#f??3%Vpd|o+W=WE9003S@ zBra6Svp>fO002awfhw>;8}z{#EWidF!3EsG3xE7zHiSYX#KJ-lLJDMn9CBbOtb#%) zhRv`YDqt_vKpix|QD}yfa1JiQRk#j4a1Z)n2%fLC6RbVIkUx0b+_+BaR3c znT7Zv!AJxWizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifqlp|(=5QHQ7#Gr)$3XMd?XsE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*S zAPZv|vv@2aYYnT0b%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5c zP6_8IrP_yNQcbz0DW*G2J50yT%*~?B)|oY%Ju%lZ z=bPu7*PGwBU|M)uEVih&xMfMQuC{HqePL%}7iYJ{uEXw=y_0>qeSeMpJqHbk*$%56 zS{;6Kv~mM9! zg3B(KJ}#RZ#@)!hR=4N)wtYw9={>5&Kw=W)*2gz%*kgNq+ zEef_mrsz~!DAy_nvS(#iX1~pe$~l&+o-57m%(KedkbgIv@1Ote62cPUlD4IWOIIx& zSmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGAUct(O!LkCy1 z<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}TincS4LsjI}fWY1>O zX6feMEq|U{4wkBy=9dm`4cXeX4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC- zq*U}&`cyXV(%rRT*Z6MH?i+i&_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-N zmiuj8txj!m?Z*Ss1N{dh4z}01)YTo*JycSU)_*JOM-ImyzW$x>cP$Mz4ONYt#^NJz zM0w=t_X*$k9t}F$c8q(h;Rn+nb{%IOFKR-X@|s4QQ=0o*Vq3aT%s$c9>fU<%N829{ zoHRUHc}nwC$!Xf@g42^{^3RN&m7RTlF8SPG+oHC6=VQ*_Y7cMkx)5~X(nbG^=R3SR z&VO9;xODQe+vO8ixL2C5I$v$-bm~0*lhaSfyPUh4uDM)mx$b(swR>jw=^LIm&fWCA zdGQwi*43UlJ>9+YdT;l|_x0Zv-F|W>{m#p~*>@-It-MdXU-UrjLD@syht)q@{@mE_ z+<$7occAmp+(-8Yg@e!jk@b%cLj{kSkAKUC4TkHUI6gT!;y-fz>HMcd&t%Ugo)`Y2 z{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P`?ZJ24cOCDe z-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy000JJOGiWi{{a60|De66laYKE Z5da5tNliru;0X-@IusjQYrV0NzXIrdCc^*# delta 87 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 delta 421 zcmV;W0b2f^7`_9LBYyw{XF*Lt006O%3;baP00001b5ch_0olnce*gdgAY({UO#lFT zCIA3{ga82g0001h=l}q9FaQARU;qF*m;eA5aGbhPJOBUy24YJ`L;(K){{a7>y{D4^ z00AmVL_t(I%hi*yOT$1E#=m>HVoC}wk|7z6+R*+DQb#-K|9@K{S&EB7ad2-SgBcnF zc8I3-de0%4R!Qnm7vJ>mc;AojBDVJSP%dIP)b!1K<; z!~G)w;O6?W8L%%7f^O; zwhsV#UO;P&YP)pB1c0GCNbK~xyiC5;IV#2^dso6wUy0yl>5$pl|UfpaXw8q0pr;FLZ#(jC;KVqf83l|Z4hSkS*}S$~_@5wT;$j4Y4% Y112E^EmuPPX#fBK07*qoM6N<$f_89pc>n+a diff --git a/mods/mp_minetest/default/textures/default_tin_ingot.png b/mods/mp_minetest/default/textures/default_tin_ingot.png deleted file mode 100644 index eed536105bf934d6274d31c28e6e98360f1cc5c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF4e$wZ1=8W+;Rg>MoHc#ws^v?z zY~HwU@1BbClEn+=B_zb}*uJH%rYa*NZQA7izV7y#*&j9lH87S0`2{mLJiCzwmW!Mb3}ghdQ3VL?or4s5v>!f3EIPAcidff>ad9_G?U9XhA)aV=q$Xz`uq s%XrCQ>mjvZJ*N_G=|g9PQx5PmT*&2Jw`WP+Dxi@Jp00i_>zopr0IQlvvH$=8 diff --git a/mods/mp_minetest/default/textures/default_tin_lump.png b/mods/mp_minetest/default/textures/default_tin_lump.png deleted file mode 100644 index 72bd339bf6247bebfc74f1a4385136509acd557d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDU1=0%_F5I$Z%gU82=ggV2 zVZ(;QhYue(aNu;f!eXEtV@Z%-FoVOh8)-m}ji-xa2*>qg1wjL8X=e$yl`Gj27=ueo zT@9RlHA5pAP9%tM1qqcf7)7v5m1RBH<;ue9dVt4G(DBbRW`8nU4a^VeoYI Kb6Mw<&;$SvKr+h! diff --git a/mods/mp_minetest/default/tools.lua b/mods/mp_minetest/default/tools.lua index 45c779f1..9147f9b3 100644 --- a/mods/mp_minetest/default/tools.lua +++ b/mods/mp_minetest/default/tools.lua @@ -379,26 +379,59 @@ minetest.register_tool("default:sword_diamond", { sound = {breaks = "default_tool_breaks"}, }) +minetest.register_tool("default:skeleton_key", { + description = "Skeleton Key", + inventory_image = "default_key_skeleton.png", + groups = {key = 1}, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + local pos = pointed_thing.under + local node = minetest.get_node(pos) + + if not node then + return itemstack + end + + local on_skeleton_key_use = minetest.registered_nodes[node.name].on_skeleton_key_use + if on_skeleton_key_use then + -- make a new key secret in case the node callback needs it + local random = math.random + local newsecret = string.format( + "%04x%04x%04x%04x", + random(2^16) - 1, random(2^16) - 1, + random(2^16) - 1, random(2^16) - 1) + + local secret, _, _ = on_skeleton_key_use(pos, placer, newsecret) + + if secret then + -- finish and return the new key + itemstack:take_item() + itemstack:add_item("default:key") + itemstack:set_metadata(minetest.write_json({ + secret = secret + })) + return itemstack + end + end + return nil + end +}) + minetest.register_tool("default:key", { description = "Key", inventory_image = "default_key.png", groups = {key = 1, not_in_creative_inventory = 1}, stack_max = 1, on_place = function(itemstack, placer, pointed_thing) - local under = pointed_thing.under - local node = minetest.get_node(under) - local def = minetest.registered_nodes[node.name] - if def and def.on_rightclick and - not (placer and placer:get_player_control().sneak) then - return def.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack - end if pointed_thing.type ~= "node" then return itemstack end local pos = pointed_thing.under - node = minetest.get_node(pos) + local node = minetest.get_node(pos) if not node or node.name == "ignore" then return itemstack diff --git a/mods/mp_minetest/default/torch.lua b/mods/mp_minetest/default/torch.lua index 3c3ae965..e94c5bd6 100644 --- a/mods/mp_minetest/default/torch.lua +++ b/mods/mp_minetest/default/torch.lua @@ -50,7 +50,7 @@ minetest.register_node("default:torch", { sunlight_propagates = true, walkable = false, liquids_pointable = false, - light_source = 12, + light_source = 13, groups = {choppy=2, dig_immediate=3, flammable=1, attached_node=1, torch=1}, drop = "default:torch", selection_box = { @@ -97,7 +97,7 @@ minetest.register_node("default:torch_wall", { paramtype2 = "wallmounted", sunlight_propagates = true, walkable = false, - light_source = 12, + light_source = 13, groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1}, drop = "default:torch", selection_box = { @@ -118,7 +118,7 @@ minetest.register_node("default:torch_ceiling", { paramtype2 = "wallmounted", sunlight_propagates = true, walkable = false, - light_source = 12, + light_source = 13, groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1}, drop = "default:torch", selection_box = { @@ -144,3 +144,4 @@ minetest.register_lbm({ end end }) + diff --git a/mods/mp_minetest/default/trees.lua b/mods/mp_minetest/default/trees.lua index 81c9831e..0b95742c 100644 --- a/mods/mp_minetest/default/trees.lua +++ b/mods/mp_minetest/default/trees.lua @@ -27,7 +27,8 @@ end -- 'is snow nearby' function local function is_snow_nearby(pos) - return minetest.find_node_near(pos, 1, {"group:snowy"}) + return minetest.find_node_near(pos, 1, + {"default:snow", "default:snowblock", "default:dirt_with_snow"}) end @@ -77,14 +78,6 @@ function default.grow_sapling(pos) minetest.log("action", "An aspen sapling grows into a tree at ".. minetest.pos_to_string(pos)) default.grow_new_aspen_tree(pos) - elseif node.name == "default:bush_sapling" then - minetest.log("action", "A bush sapling grows into a bush at ".. - minetest.pos_to_string(pos)) - default.grow_bush(pos) - elseif node.name == "default:acacia_bush_sapling" then - minetest.log("action", "An acacia bush sapling grows into a bush at ".. - minetest.pos_to_string(pos)) - default.grow_acacia_bush(pos) end end @@ -380,7 +373,7 @@ function default.grow_new_apple_tree(pos) local path = minetest.get_modpath("default") .. "/schematics/apple_tree_from_sapling.mts" minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, - path, "random", nil, false) + path, "0", nil, false) end @@ -434,29 +427,6 @@ function default.grow_new_aspen_tree(pos) end --- Bushes do not need 'from sapling' schematic variants because --- only the stem node is force-placed in the schematic. - --- Bush - -function default.grow_bush(pos) - local path = minetest.get_modpath("default") .. - "/schematics/bush.mts" - minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, - path, "0", nil, false) -end - - --- Acacia bush - -function default.grow_acacia_bush(pos) - local path = minetest.get_modpath("default") .. - "/schematics/acacia_bush.mts" - minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, - path, "0", nil, false) -end - - -- -- Sapling 'on place' function to check protection of node and resulting tree volume -- @@ -488,47 +458,19 @@ function default.sapling_on_place(itemstack, placer, pointed_thing, return itemstack end -- Check tree volume for protection - if default.intersects_protection( + if not default.intersects_protection( vector.add(pos, minp_relative), vector.add(pos, maxp_relative), player_name, interval) then + minetest.set_node(pos, {name = sapling_name}) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + else minetest.record_protection_violation(pos, player_name) -- Print extra information to explain minetest.chat_send_player(player_name, "Tree will intersect protection") - return itemstack - end - - minetest.log("action", player_name .. " places node " - .. sapling_name .. " at " .. minetest.pos_to_string(pos)) - - local take_item = not (creative and creative.is_enabled_for - and creative.is_enabled_for(player_name)) - local newnode = {name = sapling_name} - local ndef = minetest.registered_nodes[sapling_name] - minetest.set_node(pos, newnode) - - -- Run callback - if ndef and ndef.after_place_node then - -- Deepcopy place_to and pointed_thing because callback can modify it - if ndef.after_place_node(table.copy(pos), placer, - itemstack, table.copy(pointed_thing)) then - take_item = false - end - end - - -- Run script hook - for _, callback in ipairs(minetest.registered_on_placenodes) do - -- Deepcopy pos, node and pointed_thing because callback can modify them - if callback(table.copy(pos), table.copy(newnode), - placer, table.copy(node or {}), - itemstack, table.copy(pointed_thing)) then - take_item = false - end - end - - if take_item then - itemstack:take_item() end return itemstack diff --git a/mods/mp_minetest/doors/init.lua b/mods/mp_minetest/doors/init.lua index 5189dec7..c5d4a140 100644 --- a/mods/mp_minetest/doors/init.lua +++ b/mods/mp_minetest/doors/init.lua @@ -6,15 +6,6 @@ local _doors = {} _doors.registered_doors = {} _doors.registered_trapdoors = {} -local function replace_old_owner_information(pos) - local meta = minetest.get_meta(pos) - local owner = meta:get_string("doors_owner") - if owner and owner ~= "" then - meta:set_string("owner", owner) - meta:set_string("doors_owner", "") - end -end - -- returns an object to a door object or nil function doors.get(pos) local node_name = minetest.get_node(pos).name @@ -91,7 +82,7 @@ minetest.register_node("doors:hidden", { on_blast = function() end, tiles = {"doors_blank.png"}, -- 1px transparent block inside door hinge near node top. - node_box = { + nodebox = { type = "fixed", fixed = {-15/32, 13/32, -15/32, -13/32, 1/2, -13/32}, }, @@ -148,10 +139,22 @@ function _doors.door_toggle(pos, node, clicker) state = tonumber(state) end - replace_old_owner_information(pos) + if clicker and not minetest.check_player_privs(clicker, "protection_bypass") then + -- is player wielding the right key? + local item = clicker:get_wielded_item() + local owner = meta:get_string("doors_owner") + if item:get_name() == "default:key" then + local key_meta = minetest.parse_json(item:get_metadata()) + local secret = meta:get_string("key_lock_secret") + if secret ~= key_meta.secret then + return false + end - if clicker and not default.can_interact_with_node(clicker, pos) then - return false + elseif owner ~= "" then + if clicker:get_player_name() ~= owner then + return false + end + end end -- until Lua-5.2 we have no bitwise operators :( @@ -202,13 +205,11 @@ local function on_place_node(place_to, newnode, end local function can_dig_door(pos, digger) - replace_old_owner_information(pos) - if default.can_interact_with_node(digger, pos) then + local digger_name = digger and digger:get_player_name() + if digger_name and minetest.get_player_privs(digger_name).protection_bypass then return true - else - minetest.record_protection_violation(pos, digger:get_player_name()) - return false end + return minetest.get_meta(pos):get_string("doors_owner") == digger_name end function doors.register(name, def) @@ -254,7 +255,6 @@ function doors.register(name, def) minetest.register_craftitem(":" .. name, { description = def.description, inventory_image = def.inventory_image, - groups = table.copy(def.groups), on_place = function(itemstack, placer, pointed_thing) local pos @@ -265,8 +265,7 @@ function doors.register(name, def) local node = minetest.get_node(pointed_thing.under) local pdef = minetest.registered_nodes[node.name] - if pdef and pdef.on_rightclick and - not placer:get_player_control().sneak then + if pdef and pdef.on_rightclick then return pdef.on_rightclick(pointed_thing.under, node, placer, itemstack, pointed_thing) end @@ -324,16 +323,14 @@ function doors.register(name, def) meta:set_int("state", state) if def.protected then - meta:set_string("owner", pn) + meta:set_string("doors_owner", pn) meta:set_string("infotext", "Owned by " .. pn) end - if not (creative and creative.is_enabled_for and creative.is_enabled_for(pn)) then + if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end - minetest.sound_play(def.sounds.place, {pos = pos}) - on_place_node(pos, minetest.get_node(pos), placer, node, itemstack, pointed_thing) @@ -378,9 +375,7 @@ function doors.register(name, def) minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) minetest.check_for_falling({x = pos.x, y = pos.y + 1, z = pos.z}) end - def.on_rotate = function(pos, node, user, mode, new_param2) - return false - end + def.on_rotate = false if def.protected then def.can_dig = can_dig_door @@ -390,9 +385,8 @@ function doors.register(name, def) door:toggle(player) end def.on_skeleton_key_use = function(pos, player, newsecret) - replace_old_owner_information(pos) local meta = minetest.get_meta(pos) - local owner = meta:get_string("owner") + local owner = meta:get_string("doors_owner") local pname = player:get_player_name() -- verify placer is owner of lockable door @@ -529,11 +523,23 @@ end function _doors.trapdoor_toggle(pos, node, clicker) node = node or minetest.get_node(pos) + if clicker and not minetest.check_player_privs(clicker, "protection_bypass") then + -- is player wielding the right key? + local item = clicker:get_wielded_item() + local meta = minetest.get_meta(pos) + local owner = meta:get_string("doors_owner") + if item:get_name() == "default:key" then + local key_meta = minetest.parse_json(item:get_metadata()) + local secret = meta:get_string("key_lock_secret") + if secret ~= key_meta.secret then + return false + end - replace_old_owner_information(pos) - - if clicker and not default.can_interact_with_node(clicker, pos) then - return false + elseif owner ~= "" then + if clicker:get_player_name() ~= owner then + return false + end + end end local def = minetest.registered_nodes[node.name] @@ -575,10 +581,10 @@ function doors.register_trapdoor(name, def) def.after_place_node = function(pos, placer, itemstack, pointed_thing) local pn = placer:get_player_name() local meta = minetest.get_meta(pos) - meta:set_string("owner", pn) + meta:set_string("doors_owner", pn) meta:set_string("infotext", "Owned by "..pn) - return (creative and creative.is_enabled_for and creative.is_enabled_for(pn)) + return minetest.setting_getbool("creative_mode") end def.on_blast = function() end @@ -587,9 +593,8 @@ function doors.register_trapdoor(name, def) door:toggle(player) end def.on_skeleton_key_use = function(pos, player, newsecret) - replace_old_owner_information(pos) local meta = minetest.get_meta(pos) - local owner = meta:get_string("owner") + local owner = meta:get_string("doors_owner") local pname = player:get_player_name() -- verify placer is owner of lockable door diff --git a/mods/mp_minetest/doors/textures/doors_door_glass.png b/mods/mp_minetest/doors/textures/doors_door_glass.png index 26c427b9fef32a34b2fd8daa7bff4117933d1924..f597299bdfaa2389d40c5179069ccd5685b937f9 100644 GIT binary patch delta 3039 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 IM6N<$f)I_IfB*mh delta 357 zcmV-r0h<1-7o-D_BS!!PXF*Lt006O%3;baP00001b5ch_0olnce*gdgAY({UO#lFT zCIA3{ga82g0001h=l}q9FaQARU;qF*m;eA5aGbhPJd=D1Du4S)L_t(o!|hl*4udcZ zbt-l;b>~XHLAUNbNB3^Mfsepd*qPu2bOO=lqlSk|ROL-bk)7vHoEMC>b|MezbF+Mp zeMhN4?Txi|8iv6nTN2S66l(9oX^X>O03s$LBqE#b*X4GI#TK;@>%9tb%*><}SiU{B zT?5?QgvKtWvoIX);u`*HviECLa2y{+O~CW`OEdT zD27nV=X;WwowZNdBO=ZoKD#$!%xq$g_keE?A_~f$qQ_DJ5!0N3(10EL4kB0P*sjEi z9!n*btGf74J@$Oup?75raPuRG?OpE5RG3_UL%jgi_7ZpXO3}Ty00000NkvXXu0mjf DKBSx> diff --git a/mods/mp_minetest/dye/init.lua b/mods/mp_minetest/dye/init.lua index 80284576..d414d77c 100644 --- a/mods/mp_minetest/dye/init.lua +++ b/mods/mp_minetest/dye/init.lua @@ -74,39 +74,36 @@ minetest.register_craft({ }) -- Mix recipes -local dye_recipes = { - -- src1, src2, dst - -- RYB mixes - {"red", "blue", "violet"}, -- "purple" - {"yellow", "red", "orange"}, - {"yellow", "blue", "green"}, - -- RYB complementary mixes - {"yellow", "violet", "dark_grey"}, - {"blue", "orange", "dark_grey"}, - -- CMY mixes - approximation - {"cyan", "yellow", "green"}, - {"cyan", "magenta", "blue"}, - {"yellow", "magenta", "red"}, - -- other mixes that result in a color we have - {"red", "green", "brown"}, - {"magenta", "blue", "violet"}, - {"green", "blue", "cyan"}, - {"pink", "violet", "magenta"}, - -- mixes with black - {"white", "black", "grey"}, - {"grey", "black", "dark_grey"}, - {"green", "black", "dark_green"}, - {"orange", "black", "brown"}, - -- mixes with white - {"white", "red", "pink"}, - {"white", "dark_grey", "grey"}, - {"white", "dark_green", "green"}, +-- Just mix everything to everything somehow sanely + +local mixbases = {"pink", "magenta", "red", "orange", "brown", "yellow", "green", "dark_green", "cyan", "blue", "violet", "black", "dark_grey", "grey", "white"} + +local mixes = { + -- pink, magenta, red, orange, brown, yellow, green, dark_green, cyan, blue, violet, black, dark_grey, grey, white + white = {"pink", "pink", "pink", "orange", "orange", "yellow", "green", "green", "grey", "cyan", "violet","grey", "grey", "grey","white"}, + grey = {"pink", "pink", "pink", "orange", "orange", "yellow", "green", "green", "grey", "cyan", "violet","dark_grey","grey", "grey"}, + dark_grey = {"brown", "brown", "brown", "brown", "brown", "brown", "dark_green","dark_green","blue", "blue", "violet","black", "dark_grey"}, + black = {"black", "black", "black", "black", "black", "black", "black", "black", "black","black", "black", "black"}, + violet = {"magenta","magenta","magenta","red", "brown", "red", "cyan", "brown", "blue", "violet","violet"}, + blue = {"violet", "violet", "magenta","brown", "brown", "dark_green","cyan", "cyan", "cyan", "blue"}, + cyan = {"brown", "blue", "brown", "dark_green","dark_grey", "green", "cyan", "dark_green","cyan"}, + dark_green = {"brown", "brown", "brown", "brown", "brown", "green", "green", "dark_green"}, + green = {"yellow", "brown", "yellow", "yellow", "dark_green","green", "green"}, + yellow = {"orange", "red", "orange", "yellow", "orange", "yellow"}, + brown = {"brown", "brown", "brown", "orange", "brown"}, + orange = {"orange", "red", "orange", "orange"}, + red = {"pink", "magenta","red"}, + magenta = {"magenta","magenta"}, + pink = {"pink"}, } -for _, mix in pairs(dye_recipes) do - minetest.register_craft({ - type = "shapeless", - output = 'dye:' .. mix[3] .. ' 2', - recipe = {'dye:' .. mix[1], 'dye:' .. mix[2]}, - }) +for one, results in pairs(mixes) do + for i, result in ipairs(results) do + local another = mixbases[i] + minetest.register_craft({ + type = "shapeless", + output = 'dye:' .. result .. ' 2', + recipe = {'dye:' .. one, 'dye:' .. another}, + }) + end end diff --git a/mods/mp_minetest/farming/api.lua b/mods/mp_minetest/farming/api.lua index 35a77e9f..182e1b20 100644 --- a/mods/mp_minetest/farming/api.lua +++ b/mods/mp_minetest/farming/api.lua @@ -57,8 +57,7 @@ farming.hoe_on_use = function(itemstack, user, pointed_thing, uses) gain = 0.5, }) - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(user:get_player_name())) then + if not minetest.setting_getbool("creative_mode") then -- wear tool local wdef = itemstack:get_definition() itemstack:add_wear(65535/(uses-1)) @@ -188,8 +187,7 @@ farming.place_seed = function(itemstack, placer, pointed_thing, plantname) -- add the node and remove 1 item from the itemstack minetest.add_node(pt.above, {name = plantname, param2 = 1}) tick(pt.above) - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(placer:get_player_name())) then + if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end return itemstack @@ -315,15 +313,6 @@ farming.register_plant = function(name, def) }), on_place = function(itemstack, placer, pointed_thing) - local under = pointed_thing.under - local node = minetest.get_node(under) - local udef = minetest.registered_nodes[node.name] - if udef and udef.on_rightclick and - not (placer and placer:get_player_control().sneak) then - return udef.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack - end - return farming.place_seed(itemstack, placer, pointed_thing, mname .. ":seed_" .. pname) end, next_plant = mname .. ":" .. pname .. "_1", @@ -341,16 +330,12 @@ farming.register_plant = function(name, def) -- Register growing steps for i = 1, def.steps do - local base_rarity = 1 - if def.steps ~= 1 then - base_rarity = 8 - (i - 1) * 7 / (def.steps - 1) - end local drop = { items = { - {items = {mname .. ":" .. pname}, rarity = base_rarity}, - {items = {mname .. ":" .. pname}, rarity = base_rarity * 2}, - {items = {mname .. ":seed_" .. pname}, rarity = base_rarity}, - {items = {mname .. ":seed_" .. pname}, rarity = base_rarity * 2}, + {items = {mname .. ":" .. pname}, rarity = 9 - i}, + {items = {mname .. ":" .. pname}, rarity= 18 - i * 2}, + {items = {mname .. ":seed_" .. pname}, rarity = 9 - i}, + {items = {mname .. ":seed_" .. pname}, rarity = 18 - i * 2}, } } local nodegroups = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1} diff --git a/mods/mp_minetest/farming/nodes.lua b/mods/mp_minetest/farming/nodes.lua index c969d31b..09ad36f5 100644 --- a/mods/mp_minetest/farming/nodes.lua +++ b/mods/mp_minetest/farming/nodes.lua @@ -22,14 +22,6 @@ minetest.override_item("default:dirt_with_dry_grass", { } }) -minetest.override_item("default:dirt_with_rainforest_litter", { - soil = { - base = "default:dirt_with_rainforest_litter", - dry = "farming:soil", - wet = "farming:soil_wet" - } -}) - minetest.register_node("farming:soil", { description = "Soil", tiles = {"default_dirt.png^farming_soil.png", "default_dirt.png"}, diff --git a/mods/mp_minetest/fire/init.lua b/mods/mp_minetest/fire/init.lua index a9ceb9ea..bee487a5 100644 --- a/mods/mp_minetest/fire/init.lua +++ b/mods/mp_minetest/fire/init.lua @@ -24,7 +24,7 @@ minetest.register_node("fire:basic_flame", { }, inventory_image = "fire_basic_flame.png", paramtype = "light", - light_source = 13, + light_source = 14, walkable = false, buildable_to = true, sunlight_propagates = true, @@ -44,6 +44,9 @@ minetest.register_node("fire:basic_flame", { on_construct = function(pos) minetest.get_node_timer(pos):start(math.random(30, 60)) end, + + on_blast = function() -- Unaffected by explosions + end, }) minetest.register_node("fire:permanent_flame", { @@ -62,13 +65,16 @@ minetest.register_node("fire:permanent_flame", { }, inventory_image = "fire_basic_flame.png", paramtype = "light", - light_source = 13, + light_source = 14, walkable = false, buildable_to = true, sunlight_propagates = true, damage_per_second = 4, groups = {igniter = 2, dig_immediate = 3}, drop = "", + + on_blast = function() -- Unaffected by explosions + end, }) @@ -80,37 +86,36 @@ minetest.register_tool("fire:flint_and_steel", { sound = {breaks = "default_tool_breaks"}, on_use = function(itemstack, user, pointed_thing) - local sound_pos = pointed_thing.above or user:get_pos() + local pt = pointed_thing minetest.sound_play( "fire_flint_and_steel", - {pos = sound_pos, gain = 0.5, max_hear_distance = 8} + {pos = pt.above, gain = 0.5, max_hear_distance = 8} ) - local player_name = user:get_player_name() - if pointed_thing.type == "node" then - local node_under = minetest.get_node(pointed_thing.under).name + if pt.type == "node" then + local node_under = minetest.get_node(pt.under).name local nodedef = minetest.registered_nodes[node_under] if not nodedef then return end - if minetest.is_protected(pointed_thing.under, player_name) then + local player_name = user:get_player_name() + if minetest.is_protected(pt.under, player_name) then minetest.chat_send_player(player_name, "This area is protected") return end if nodedef.on_ignite then - nodedef.on_ignite(pointed_thing.under, user) + nodedef.on_ignite(pt.under, user) elseif minetest.get_item_group(node_under, "flammable") >= 1 - and minetest.get_node(pointed_thing.above).name == "air" then - minetest.set_node(pointed_thing.above, {name = "fire:basic_flame"}) + and minetest.get_node(pt.above).name == "air" then + minetest.set_node(pt.above, {name = "fire:basic_flame"}) end end - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(player_name)) then + if not minetest.setting_getbool("creative_mode") then -- Wear tool local wdef = itemstack:get_definition() itemstack:add_wear(1000) -- Tool break sound if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then - minetest.sound_play(wdef.sound.breaks, {pos = sound_pos, gain = 0.5}) + minetest.sound_play(wdef.sound.breaks, {pos = pt.above, gain = 0.5}) end return itemstack end diff --git a/mods/mp_minetest/fire/textures/fire_flint_steel.png b/mods/mp_minetest/fire/textures/fire_flint_steel.png index c262ebc096f471c95e66b33ca3cd44a14494419d..624f5565dd3029b7f3fc0ce0de374bb8977e301d 100644 GIT binary patch delta 3104 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 c 0 then - local seedling = soils[math.random(#soils)] - local seedling_above = - {x = seedling.x, y = seedling.y + 1, z = seedling.z} - light = minetest.get_node_light(seedling_above) - if not light or light < 13 or - -- Desert sand is in the soil group - minetest.get_node(seedling).name == "default:desert_sand" then + local seedling = minetest.find_nodes_in_area_under_air(pos0, pos1, + {"default:dirt_with_grass", "default:dirt_with_dry_grass"}) + if #seedling > 0 then + seedling = seedling[math.random(#seedling)] + seedling.y = seedling.y + 1 + light = minetest.get_node_light(seedling) + if not light or light < 13 then return end - - minetest.set_node(seedling_above, {name = node.name}) + minetest.set_node(seedling, {name = node.name}) end end minetest.register_abm({ label = "Flower spread", nodenames = {"group:flora"}, + neighbors = {"default:dirt_with_grass", "default:dirt_with_dry_grass", + "default:desert_sand"}, interval = 13, chance = 96, action = function(...) @@ -271,7 +264,7 @@ minetest.register_node("flowers:waterlily", { node_placement_prediction = "", node_box = { type = "fixed", - fixed = {-0.5, -31 / 64, -0.5, 0.5, -15 / 32, 0.5} + fixed = {-0.5, -0.5, -0.5, 0.5, -15 / 32, 0.5} }, selection_box = { type = "fixed", @@ -289,8 +282,7 @@ minetest.register_node("flowers:waterlily", { if not minetest.is_protected(pos, player_name) then minetest.set_node(pos, {name = "flowers:waterlily", param2 = math.random(0, 3)}) - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(player_name)) then + if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end else diff --git a/mods/mp_minetest/flowers/mapgen.lua b/mods/mp_minetest/flowers/mapgen.lua index 2b960907..ec03c9b2 100644 --- a/mods/mp_minetest/flowers/mapgen.lua +++ b/mods/mp_minetest/flowers/mapgen.lua @@ -94,8 +94,7 @@ local function register_flower(seed, name) octaves = 3, persist = 0.6 }, - biomes = {"grassland", "deciduous_forest", "coniferous_forest", - "floatland_grassland", "floatland_coniferous_forest"}, + biomes = {"grassland", "deciduous_forest", "coniferous_forest"}, y_min = 1, y_max = 31000, decoration = "flowers:"..name, @@ -115,8 +114,7 @@ local function register_mushroom(name) octaves = 3, persist = 0.66 }, - biomes = {"deciduous_forest", "coniferous_forest", - "floatland_coniferous_forest"}, + biomes = {"deciduous_forest", "coniferous_forest"}, y_min = 1, y_max = 31000, decoration = "flowers:"..name, diff --git a/mods/mp_minetest/flowers/textures/flowers_waterlily.png b/mods/mp_minetest/flowers/textures/flowers_waterlily.png index 305c4458fc0fe841adc6d7a7ec8d047f48bf078d..a92d3b9faa3ad04fc7df64275821dd7a465d47ef 100644 GIT binary patch delta 3361 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 delta 667 zcmV;M0%ZN88nOkDBYyw{XF*Lt006O%3;baP00001b5ch_0olnce*gdgAY({UO#lFT zCIA3{ga82g0001h=l}q9FaQARU;qF*m;eA5aGbhPJOBUy24YJ`L;(K){{a7>y{D4^ z00JIKL_t(I%cYY|PZLoThM#*|5vJ`-X)8ioa8V3_CMBpF6Ms!i+`Dn*&Ykg}_%jR} z{|Q@{njlol&|h+2O&;Up6Kvvh6c(PJq`@;@zpS=RWveIa+PztO$ zO}$oR^>Kl6)uG)91VD$;L~3h`cqbw6w%!BqverPS6j5}JF-gb|N;!^Bd;k_7I-Gj_ zq=mpA0Fbp(eEIsB*IPU6|C}%woHL9KS}T?-HvN7CfPa|?qmiLpb&@H(`P7i-PggkZ z28>3AC^qEnH1l?by;hHmmE!)4MyJ#jQGniQm}Kz1>5M6p2xyxy3mo7f%3hGBf^ z2*4OY1Wvs^=|aV#d)UVq;h=epnB+rg!Nztn7$cmGlA6|PdN=nv)awrw--|IRJFgwv=SXH)uO*2Pmazb$WEXfI&3m(Xulow7g_r za max then + x = 0 + end + return x +end + screwdriver.ROTATE_FACE = 1 screwdriver.ROTATE_AXIS = 2 screwdriver.disallow = function(pos, node, user, mode, new_param2) @@ -11,73 +19,6 @@ screwdriver.rotate_simple = function(pos, node, user, mode, new_param2) 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 - -- Handles rotation screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses) if pointed_thing.type ~= "node" then @@ -93,48 +34,54 @@ screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses) local node = minetest.get_node(pos) local ndef = minetest.registered_nodes[node.name] - if not ndef then - return itemstack + -- verify node is facedir (expected to be rotatable) + if not ndef or ndef.paramtype2 ~= "facedir" then + return end - -- can we rotate this paramtype2? - local fn = screwdriver.rotate[ndef.paramtype2] - if not fn and not ndef.on_rotate then - return itemstack + -- Compute param2 + local rotationPart = node.param2 % 32 -- get first 4 bits + local preservePart = node.param2 - rotationPart + local axisdir = math.floor(rotationPart / 4) + local rotation = rotationPart - axisdir * 4 + if mode == screwdriver.ROTATE_FACE then + rotationPart = axisdir * 4 + nextrange(rotation, 3) + elseif mode == screwdriver.ROTATE_AXIS then + rotationPart = nextrange(axisdir, 5) * 4 end + local new_param2 = preservePart + rotationPart 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 + if ndef and ndef.on_rotate then -- Node provides a handler, so let the handler decide instead if the node can be rotated -- 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}, user, mode, new_param2) if result == false then -- Disallow rotation - return itemstack + return 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 + else + if not ndef or not ndef.paramtype2 == "facedir" or + ndef.on_rotate == false or + (ndef.drawtype == "nodebox" and + not ndef.node_box.type == "fixed") or + node.param2 == nil then + return + end + + if ndef.can_dig and not ndef.can_dig(pos, user) then + return + end end - if should_rotate and new_param2 ~= node.param2 then + if should_rotate then node.param2 = new_param2 minetest.swap_node(pos, node) - minetest.check_for_falling(pos) end - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(user:get_player_name())) then + if not minetest.setting_getbool("creative_mode") then itemstack:add_wear(65535 / ((uses or 200) - 1)) end diff --git a/mods/mp_minetest/sethome/init.lua b/mods/mp_minetest/sethome/init.lua index 13a33e57..e0fc453d 100644 --- a/mods/mp_minetest/sethome/init.lua +++ b/mods/mp_minetest/sethome/init.lua @@ -5,9 +5,9 @@ local homes_file = minetest.get_worldpath() .. "/homes" local homepos = {} local function loadhomes() - local input = io.open(homes_file, "r") + local input, err = io.open(homes_file, "r") if not input then - return -- no longer an error + return minetest.log("info", "Could not load player homes file: " .. err) end -- Iterate over all stored positions in the format "x y z player" for each line @@ -24,13 +24,11 @@ sethome.set = function(name, pos) if not player or not pos then return false end - player:set_attribute("sethome:home", minetest.pos_to_string(pos)) - -- remove `name` from the old storage file local data = {} - local output = io.open(homes_file, "w") + local output, err = io.open(homes_file, "w") if output then - homepos[name] = nil + homepos[name] = pos for i, v in pairs(homepos) do table.insert(data, string.format("%.1f %.1f %.1f %s\n", v.x, v.y, v.z, i)) end @@ -38,18 +36,12 @@ sethome.set = function(name, pos) io.close(output) return true end - return true -- if the file doesn't exist - don't return an error. + minetest.log("action", "Unable to write to player homes file: " .. err) + return false end sethome.get = function(name) - local player = minetest.get_player_by_name(name) - local pos = minetest.string_to_pos(player:get_attribute("sethome:home")) - if pos then - return pos - end - - -- fetch old entry from storage table - pos = homepos[name] + local pos = homepos[name] if pos then return vector.new(pos) else @@ -58,10 +50,9 @@ sethome.get = function(name) end sethome.go = function(name) - local pos = sethome.get(name) local player = minetest.get_player_by_name(name) - if player and pos then - player:setpos(pos) + if player and homepos[name] then + player:setpos(homepos[name]) return true end return false diff --git a/mods/mp_minetest/sfinv/api.lua b/mods/mp_minetest/sfinv/api.lua index ff6433b9..2fef3c84 100644 --- a/mods/mp_minetest/sfinv/api.lua +++ b/mods/mp_minetest/sfinv/api.lua @@ -70,7 +70,7 @@ function sfinv.get_formspec(player, context) nav[#nav + 1] = pdef.title nav_ids[#nav_ids + 1] = pdef.name if pdef.name == context.page then - current_idx = #nav_ids + current_idx = i end end end @@ -91,40 +91,20 @@ function sfinv.get_formspec(player, context) end end -function sfinv.get_or_create_context(player) - local name = player:get_player_name() - local context = sfinv.contexts[name] - if not context then - context = { - page = sfinv.get_homepage_name(player) - } - sfinv.contexts[name] = context - end - return context -end - -function sfinv.set_context(player, context) - sfinv.contexts[player:get_player_name()] = context -end - function sfinv.set_player_inventory_formspec(player, context) - local fs = sfinv.get_formspec(player, - context or sfinv.get_or_create_context(player)) - player:set_inventory_formspec(fs) -end + if not context then + local name = player:get_player_name() + context = sfinv.contexts[name] + if not context then + context = { + page = sfinv.get_homepage_name(player) + } + sfinv.contexts[name] = context + end + end -function sfinv.set_page(player, pagename) - local context = sfinv.get_or_create_context(player) - local oldpage = sfinv.pages[context.page] - if oldpage and oldpage.on_leave then - oldpage:on_leave(player, context) - end - context.page = pagename - local page = sfinv.pages[pagename] - if page.on_enter then - page:on_enter(player, context) - end - sfinv.set_player_inventory_formspec(player, context) + local fs = sfinv.get_formspec(player, context) + player:set_inventory_formspec(fs) end minetest.register_on_joinplayer(function(player) @@ -152,21 +132,30 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) return false end - -- Was a tab selected? + -- Handle Events if fields.tabs and context.nav then local tid = tonumber(fields.tabs) if tid and tid > 0 then local id = context.nav[tid] local page = sfinv.pages[id] if id and page then - sfinv.set_page(player, id) + local oldpage = sfinv.pages[context.page] + if oldpage and oldpage.on_leave then + oldpage:on_leave(player, context) + end + context.page = id + if page.on_enter then + page:on_enter(player, context) + end + sfinv.set_player_inventory_formspec(player, context) end end - else - -- Pass event to page - local page = sfinv.pages[context.page] - if page and page.on_player_receive_fields then - return page:on_player_receive_fields(player, context, fields) - end + return + end + + -- Pass to page + local page = sfinv.pages[context.page] + if page and page.on_player_receive_fields then + return page:on_player_receive_fields(player, context, fields) end end) diff --git a/mods/mp_minetest/stairs/init.lua b/mods/mp_minetest/stairs/init.lua index 0ce35218..191c78df 100644 --- a/mods/mp_minetest/stairs/init.lua +++ b/mods/mp_minetest/stairs/init.lua @@ -17,30 +17,6 @@ minetest.register_alias("stairs:slab_pinewood", "stairs:slab_pine_wood") local replace = minetest.setting_getbool("enable_stairs_replace_abm") -local function rotate_and_place(itemstack, placer, pointed_thing) - local p0 = pointed_thing.under - local p1 = pointed_thing.above - local param2 = 0 - - local placer_pos = placer:getpos() - if placer_pos then - param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos)) - end - - local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing) - local fpos = finepos.y % 1 - - if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5) - or (fpos < -0.5 and fpos > -0.999999999) then - param2 = param2 + 20 - if param2 == 21 then - param2 = 23 - elseif param2 == 23 then - param2 = 21 - end - end - return minetest.item_place(itemstack, placer, pointed_thing, param2) -end -- Register stairs. -- Node will be called stairs:stair_ @@ -76,7 +52,30 @@ function stairs.register_stair(subname, recipeitem, groups, images, description, return itemstack end - return rotate_and_place(itemstack, placer, pointed_thing) + local p0 = pointed_thing.under + local p1 = pointed_thing.above + local param2 = 0 + + local placer_pos = placer:getpos() + if placer_pos then + local dir = { + x = p1.x - placer_pos.x, + y = p1.y - placer_pos.y, + z = p1.z - placer_pos.z + } + param2 = minetest.dir_to_facedir(dir) + end + + if p0.y - 1 == p1.y then + param2 = param2 + 20 + if param2 == 21 then + param2 = 23 + elseif param2 == 23 then + param2 = 21 + end + end + + return minetest.item_place(itemstack, placer, pointed_thing, param2) end, }) @@ -127,6 +126,8 @@ end -- Slab facedir to placement 6d matching table local slab_trans_dir = {[0] = 8, 0, 2, 1, 3, 4} +-- Slab facedir when placing initial slab against other surface +local slab_trans_dir_place = {[0] = 0, 20, 12, 16, 4, 8} -- Register slabs. -- Node will be called stairs:slab_ @@ -149,10 +150,8 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, on_place = function(itemstack, placer, pointed_thing) local under = minetest.get_node(pointed_thing.under) local wield_item = itemstack:get_name() - local creative_enabled = (creative and creative.is_enabled_for - and creative.is_enabled_for(placer:get_player_name())) - if under and under.name:find("stairs:slab_") then + if under and wield_item == under.name then -- place slab using under node orientation local dir = minetest.dir_to_facedir(vector.subtract( pointed_thing.above, pointed_thing.under), true) @@ -160,9 +159,7 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, local p2 = under.param2 -- combine two slabs if possible - if slab_trans_dir[math.floor(p2 / 4)] == dir - and wield_item == under.name then - + if slab_trans_dir[math.floor(p2 / 4)] == dir then if not recipeitem then return itemstack end @@ -174,7 +171,7 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, return end minetest.set_node(pointed_thing.under, {name = recipeitem, param2 = p2}) - if not creative_enabled then + if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end return itemstack @@ -190,12 +187,21 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, -- else attempt to place node with proper param2 minetest.item_place_node(ItemStack(wield_item), placer, pointed_thing, p2) - if not creative_enabled then + if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end return itemstack else - return rotate_and_place(itemstack, placer, pointed_thing) + -- place slab using look direction of player + local dir = minetest.dir_to_wallmounted(vector.subtract( + pointed_thing.above, pointed_thing.under), true) + + local rot = slab_trans_dir_place[dir] + if rot == 0 or rot == 20 then + rot = rot + minetest.dir_to_facedir(placer:get_look_dir()) + end + + return minetest.item_place(itemstack, placer, pointed_thing, rot) end end, }) @@ -438,66 +444,6 @@ stairs.register_stair_and_slab( default.node_sound_stone_defaults() ) -stairs.register_stair_and_slab( - "desert_sandstone", - "default:desert_sandstone", - {crumbly = 1, cracky = 3}, - {"default_desert_sandstone.png"}, - "Desert Sandstone Stair", - "Desert Sandstone Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "desert_sandstone_brick", - "default:desert_sandstone_brick", - {cracky = 2}, - {"default_desert_sandstone_brick.png"}, - "Desert Sandstone Brick Stair", - "Desert Sandstone Brick Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "desert_sandstone_block", - "default:desert_sandstone_block", - {cracky = 2}, - {"default_desert_sandstone_block.png"}, - "Desert Sandstone Block Stair", - "Desert Sandstone Block Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "silver_sandstone", - "default:silver_sandstone", - {crumbly = 1, cracky = 3}, - {"default_silver_sandstone.png"}, - "Silver Sandstone Stair", - "Silver Sandstone Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "silver_sandstone_brick", - "default:silver_sandstone_brick", - {cracky = 2}, - {"default_silver_sandstone_brick.png"}, - "Silver Sandstone Brick Stair", - "Silver Sandstone Brick Slab", - default.node_sound_stone_defaults() -) - -stairs.register_stair_and_slab( - "silver_sandstone_block", - "default:silver_sandstone_block", - {cracky = 2}, - {"default_silver_sandstone_block.png"}, - "Silver Sandstone Block Stair", - "Silver Sandstone Block Slab", - default.node_sound_stone_defaults() -) - stairs.register_stair_and_slab( "obsidian", "default:obsidian", @@ -587,27 +533,3 @@ stairs.register_stair_and_slab( "Gold Block Slab", default.node_sound_metal_defaults() ) - -stairs.register_stair_and_slab( - "ice", - "default:ice", - {cracky = 3, puts_out_fire = 1, cools_lava = 1}, - {"default_ice.png"}, - "Ice Stair", - "Ice Slab", - default.node_sound_glass_defaults() -) - -stairs.register_stair_and_slab( - "snowblock", - "default:snowblock", - {crumbly = 3, puts_out_fire = 1, cools_lava = 1, snowy = 1}, - {"default_snow.png"}, - "Snow Block Stair", - "Snow Block Slab", - default.node_sound_dirt_defaults({ - footstep = {name = "default_snow_footstep", gain = 0.15}, - dug = {name = "default_snow_footstep", gain = 0.2}, - dig = {name = "default_snow_footstep", gain = 0.2} - }) -) diff --git a/mods/mp_minetest/stairs/models/stairs_stair.obj b/mods/mp_minetest/stairs/models/stairs_stair.obj index 198edf6e..45882c6e 100644 --- a/mods/mp_minetest/stairs/models/stairs_stair.obj +++ b/mods/mp_minetest/stairs/models/stairs_stair.obj @@ -55,8 +55,7 @@ usemtl None s off f 13/11/3 14/12/3 15/13/3 f 15/13/3 18/14/3 17/15/3 -f 14/12/3 16/16/3 15/13/3 -f 16/16/3 18/14/3 15/13/3 +f 14/12/3 16/16/3 18/14/3 o stairs_left v 0.500000 0.000000 0.000000 v 0.500000 -0.500000 -0.500000 @@ -76,8 +75,7 @@ usemtl None s off f 19/17/4 20/18/4 21/19/4 f 19/17/4 23/20/4 24/21/4 -f 20/18/4 19/17/4 22/22/4 -f 19/17/4 24/21/4 22/22/4 +f 20/18/4 24/21/4 22/22/4 o stairs_back v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 diff --git a/mods/mp_minetest/tnt/README.txt b/mods/mp_minetest/tnt/README.txt index 4e74841c..c1ca88d5 100644 --- a/mods/mp_minetest/tnt/README.txt +++ b/mods/mp_minetest/tnt/README.txt @@ -31,10 +31,7 @@ in mining. How to use the mod: Craft gunpowder by placing coal and gravel in the crafting area. The gunpowder can be used to craft TNT or as fuse for TNT. -To craft TNT place items like this: --- wood - gunpowder -- wood - -gunpowder gunpowder gunpowder --- wood - gunpowder -- wood - +To craft TNT surround gunpowder with 4 wood in a + shape. There are different ways to blow up TNT: 1. Hit it with a torch. diff --git a/mods/mp_minetest/tnt/init.lua b/mods/mp_minetest/tnt/init.lua index e5ad5b16..f9bc307c 100644 --- a/mods/mp_minetest/tnt/init.lua +++ b/mods/mp_minetest/tnt/init.lua @@ -83,10 +83,7 @@ local function add_drop(drops, item) end end -local basic_flame_on_construct -- cached value -local function destroy(drops, npos, cid, c_air, c_fire, - on_blast_queue, on_construct_queue, - ignore_protection, ignore_on_blast) +local function destroy(drops, npos, cid, c_air, c_fire, on_blast_queue, ignore_protection, ignore_on_blast) if not ignore_protection and minetest.is_protected(npos, "") then return cid end @@ -96,16 +93,9 @@ local function destroy(drops, npos, cid, c_air, c_fire, if not def then return c_air elseif not ignore_on_blast and def.on_blast then - on_blast_queue[#on_blast_queue + 1] = { - pos = vector.new(npos), - on_blast = def.on_blast - } + on_blast_queue[#on_blast_queue + 1] = {pos = vector.new(npos), on_blast = def.on_blast} return cid elseif def.flammable then - on_construct_queue[#on_construct_queue + 1] = { - fn = basic_flame_on_construct, - pos = vector.new(npos) - } return c_fire else local node_drops = minetest.get_node_drops(def.name, "") @@ -260,15 +250,13 @@ end function tnt.burn(pos, nodename) local name = nodename or minetest.get_node(pos).name - local def = minetest.registered_nodes[name] - if not def then - return - elseif def.on_ignite then - def.on_ignite(pos) - elseif minetest.get_item_group(name, "tnt") > 0 then + local group = minetest.get_item_group(name, "tnt") + if group > 0 then minetest.sound_play("tnt_ignite", {pos = pos}) minetest.set_node(pos, {name = name .. "_burning"}) minetest.get_node_timer(pos):start(1) + elseif name == "tnt:gunpowder" then + minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) end end @@ -318,8 +306,6 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast) local drops = {} local on_blast_queue = {} - local on_construct_queue = {} - basic_flame_on_construct = minetest.registered_nodes["fire:basic_flame"].on_construct local c_fire = minetest.get_content_id("fire:basic_flame") for z = -radius, radius do @@ -332,8 +318,8 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast) local p = {x = pos.x + x, y = pos.y + y, z = pos.z + z} if cid ~= c_air then data[vi] = destroy(drops, p, cid, c_air, c_fire, - on_blast_queue, on_construct_queue, - ignore_protection, ignore_on_blast) + on_blast_queue, ignore_protection, + ignore_on_blast) end end vi = vi + 1 @@ -371,10 +357,6 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast) end end - for _, queued_data in pairs(on_construct_queue) do - queued_data.fn(queued_data.pos) - end - return drops, radius end @@ -390,8 +372,6 @@ function tnt.boom(pos, def) eject_drops(drops, pos, radius) end add_effects(pos, radius, drops) - minetest.log("action", "A TNT explosion occurred at " .. minetest.pos_to_string(pos) .. - " with radius " .. radius) end minetest.register_node("tnt:boom", { @@ -417,12 +397,7 @@ minetest.register_node("tnt:gunpowder", { is_ground_content = false, sunlight_propagates = true, walkable = false, - tiles = { - "tnt_gunpowder_straight.png", - "tnt_gunpowder_curved.png", - "tnt_gunpowder_t_junction.png", - "tnt_gunpowder_crossing.png" - }, + tiles = {"tnt_gunpowder_straight.png", "tnt_gunpowder_curved.png", "tnt_gunpowder_t_junction.png", "tnt_gunpowder_crossing.png"}, inventory_image = "tnt_gunpowder_inventory.png", wield_image = "tnt_gunpowder_inventory.png", selection_box = { @@ -436,9 +411,6 @@ minetest.register_node("tnt:gunpowder", { on_punch = function(pos, node, puncher) if puncher:get_wielded_item():get_name() == "default:torch" then minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) - minetest.log("action", puncher:get_player_name() .. - " ignites tnt:gunpowder at " .. - minetest.pos_to_string(pos)) end end, on_blast = function(pos, intensity) @@ -499,11 +471,7 @@ minetest.register_node("tnt:gunpowder_burning", { fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, }, drop = "", - groups = { - dig_immediate = 2, - attached_node = 1, - connect_to_raillike = minetest.raillike_group("gunpowder") - }, + groups = {dig_immediate = 2, attached_node = 1, connect_to_raillike = minetest.raillike_group("gunpowder")}, sounds = default.node_sound_leaves_defaults(), on_timer = function(pos, elapsed) for dx = -1, 1 do @@ -530,7 +498,7 @@ minetest.register_node("tnt:gunpowder_burning", { }) minetest.register_craft({ - output = "tnt:gunpowder 5", + output = "tnt:gunpowder", type = "shapeless", recipe = {"default:coal_lump", "default:gravel"} }) @@ -539,9 +507,9 @@ if enable_tnt then minetest.register_craft({ output = "tnt:tnt", recipe = { - {"group:wood", "tnt:gunpowder", "group:wood"}, - {"tnt:gunpowder", "tnt:gunpowder", "tnt:gunpowder"}, - {"group:wood", "tnt:gunpowder", "group:wood"} + {"", "group:wood", ""}, + {"group:wood", "tnt:gunpowder", "group:wood"}, + {"", "group:wood", ""} } }) @@ -582,9 +550,6 @@ function tnt.register_tnt(def) on_punch = function(pos, node, puncher) if puncher:get_wielded_item():get_name() == "default:torch" then minetest.set_node(pos, {name = name .. "_burning"}) - minetest.log("action", puncher:get_player_name() .. - " ignites " .. node.name .. " at " .. - minetest.pos_to_string(pos)) end end, on_blast = function(pos, intensity)