From 72ad0dc7b75b147312ce2e2af0319be7b3d528c5 Mon Sep 17 00:00:00 2001 From: Ombridride Date: Mon, 3 Nov 2014 01:46:14 +0100 Subject: [PATCH] =?UTF-8?q?-=20Delete=20useless=20files/mods=20-=20Add=20b?= =?UTF-8?q?uiltin=5Ffalling=20(by=20Davedevils)=20for=20an=20amazing=20bug?= =?UTF-8?q?fix=20-=20Tweak=20node.lua=20from=20the=20subgame=20MFF=20and?= =?UTF-8?q?=20=C2=AB=C2=A0sea=C2=A0=C2=BB=20mod=20for=20builtin=5Ffalling?= =?UTF-8?q?=20-=20Remove=20news.lua=20from=20=5Fmisc=20-=20Remove=20=5Fmis?= =?UTF-8?q?c=5Fme=20(empty=20now)=20-=20Add=20a=20new=20mod=20named=20?= =?UTF-8?q?=C2=AB=C2=A0news=C2=A0=C2=BB=20and=20tweak=20this=20mod,=20it?= =?UTF-8?q?=20works=20now,=20add=20texture=20for=20the=20news=20(Thank=20y?= =?UTF-8?q?ou=20Davedevils)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- minetestforfun_game/mods/default/nodes.lua | 51 + mods/_misc/aliases.lua | 0 mods/_misc/ban.lua | 63 -- mods/_misc/chat_offline.lua | 25 - mods/_misc/chatcommands.lua | 0 mods/_misc/chatlog.lua | 15 - mods/_misc/init.lua | 21 - mods/_misc/news.lua | 48 - mods/_misc/nodename_hud.lua | 53 - mods/_misc/seen.lua | 211 ---- mods/_misc/username_filter.lua | 34 - mods/news/init.lua | 53 + mods/news/textures/background.jpg | Bin 0 -> 206194 bytes mods/sea/LICENSE AND README.txt | 0 mods/sea/clams/depends.txt | 0 mods/sea/clams/init.lua | 36 +- mods/sea/clams/init.lua~ | 420 ++++++++ mods/sea/clams/readme.txt | 0 mods/sea/clams/textures/clams_algae.png | Bin mods/sea/clams/textures/clams_algaeused.png | Bin .../clams/textures/clams_collectedalgae.png | Bin .../sea/clams/textures/clams_crushedwhite.png | Bin mods/sea/clams/textures/clams_whiteshell.png | Bin mods/sea/modpack.txt | 0 mods/sea/noairblocks/depends.txt | 0 mods/sea/noairblocks/init.lua | 0 mods/sea/noairblocks/readme.txt | 0 mods/sea/seacobble/depends.txt | 0 mods/sea/seacobble/init.lua | 0 mods/sea/seacobble/readme.txt | 0 .../textures/seacobble_seacobble.png | Bin .../textures/seacobble_seacobble_aqua.png | Bin .../textures/seacobble_seacobble_cyan.png | Bin .../textures/seacobble_seacobble_lime.png | Bin .../textures/seacobble_seacobble_magenta.png | Bin .../seacobble_seacobble_redviolet.png | Bin .../textures/seacobble_seacobble_skyblue.png | Bin mods/sea/seacoral/depends.txt | 0 mods/sea/seacoral/init.lua | 104 +- mods/sea/seacoral/init.lua~ | 734 ++++++++++++++ mods/sea/seacoral/readme.txt | 0 .../seacoral/textures/seacoral_coralaqua.png | Bin .../seacoral/textures/seacoral_coralcyan.png | Bin .../seacoral/textures/seacoral_corallime.png | Bin .../textures/seacoral_coralmagenta.png | Bin .../textures/seacoral_coralredviolet.png | Bin .../textures/seacoral_coralskyblue.png | Bin mods/sea/seaglass/depends.txt | 0 mods/sea/seaglass/init.lua | 0 mods/sea/seaglass/readme.txt | 0 .../seaglass/textures/seaglass_seaglass.png | Bin .../textures/seaglass_seaglass_black.png | Bin .../textures/seaglass_seaglass_blue.png | Bin .../textures/seaglass_seaglass_red.png | Bin .../textures/seaglass_seaglass_white.png | Bin .../textures/seaglass_seaglass_yellow.png | Bin mods/sea/seagravel/depends.txt | 0 mods/sea/seagravel/init.lua | 254 ++++- mods/sea/seagravel/init.lua~ | 377 +++++++ mods/sea/seagravel/readme.txt | 0 .../textures/seagravel_seagravel.png | Bin .../textures/seagravel_seagravel_aqua.png | Bin .../textures/seagravel_seagravel_cyan.png | Bin .../textures/seagravel_seagravel_lime.png | Bin .../textures/seagravel_seagravel_magenta.png | Bin .../seagravel_seagravel_redviolet.png | Bin .../textures/seagravel_seagravel_skyblue.png | Bin mods/sea/sealamps/depends.txt | 0 mods/sea/sealamps/init.lua | 0 mods/sea/sealamps/readme.txt | 0 .../sealamps/textures/sealamps_lantern.png | Bin .../textures/sealamps_lantern_on_ceiling.png | Bin .../textures/sealamps_lantern_on_floor.png | Bin .../textures/sealamps_torch_animated.png | Bin .../sealamps_torch_on_ceiling_animated.png | Bin .../textures/sealamps_torch_on_floor.png | Bin .../sealamps_torch_on_floor_animated.png | Bin mods/sea/seaplants/depends.txt | 0 mods/sea/seaplants/init.lua | 70 +- mods/sea/seaplants/init.lua~ | 595 +++++++++++ mods/sea/seaplants/readme.txt | 0 .../textures/seaplants_kelpbrown.png | Bin .../textures/seaplants_kelpbrownmiddle.png | Bin .../textures/seaplants_kelpgreen.png | Bin .../textures/seaplants_kelpgreenmiddle.png | Bin .../textures/seaplants_seagrassgreen.png | Bin .../textures/seaplants_seagrassred.png | Bin .../textures/seaplants_seasaladmix.png | Bin mods/sea/seastone/depends.txt | 0 mods/sea/seastone/init.lua | 0 mods/sea/seastone/readme.txt | 0 .../seastone/textures/seastone_seastone.png | Bin .../textures/seastone_seastone_aqua.png | Bin .../textures/seastone_seastone_cyan.png | Bin .../textures/seastone_seastone_lime.png | Bin .../textures/seastone_seastone_magenta.png | Bin .../textures/seastone_seastone_redviolet.png | Bin .../textures/seastone_seastone_skyblue.png | Bin mods/sea/seastonebrick/depends.txt | 0 mods/sea/seastonebrick/init.lua | 0 mods/sea/seastonebrick/readme.txt | 0 .../textures/seastonebrick_seastonebrick.png | Bin .../seastonebrick_seastonebrick_aqua.png | Bin .../seastonebrick_seastonebrick_cyan.png | Bin .../seastonebrick_seastonebrick_lime.png | Bin .../seastonebrick_seastonebrick_magenta.png | Bin .../seastonebrick_seastonebrick_redviolet.png | Bin .../seastonebrick_seastonebrick_skyblue.png | Bin mods/sea/seawrecks/depends.txt | 0 mods/sea/seawrecks/init.lua | 19 +- mods/sea/seawrecks/init.lua~ | 956 ++++++++++++++++++ mods/sea/seawrecks/readme.txt | 0 mods/sea/stairsshine/README.txt | 0 mods/sea/stairsshine/depends.txt | 0 mods/sea/stairsshine/init.lua | 0 mods/sea/whiteshell/depends.txt | 0 mods/sea/whiteshell/init.lua | 17 + mods/sea/whiteshell/init.lua~ | 96 ++ mods/sea/whiteshell/readme.txt | 0 119 files changed, 3770 insertions(+), 482 deletions(-) mode change 100644 => 100755 mods/_misc/aliases.lua delete mode 100755 mods/_misc/ban.lua delete mode 100755 mods/_misc/chat_offline.lua mode change 100644 => 100755 mods/_misc/chatcommands.lua delete mode 100755 mods/_misc/chatlog.lua delete mode 100755 mods/_misc/news.lua delete mode 100755 mods/_misc/nodename_hud.lua delete mode 100755 mods/_misc/seen.lua delete mode 100755 mods/_misc/username_filter.lua create mode 100644 mods/news/init.lua create mode 100644 mods/news/textures/background.jpg mode change 100755 => 100644 mods/sea/LICENSE AND README.txt mode change 100755 => 100644 mods/sea/clams/depends.txt mode change 100755 => 100644 mods/sea/clams/init.lua create mode 100644 mods/sea/clams/init.lua~ mode change 100755 => 100644 mods/sea/clams/readme.txt mode change 100755 => 100644 mods/sea/clams/textures/clams_algae.png mode change 100755 => 100644 mods/sea/clams/textures/clams_algaeused.png mode change 100755 => 100644 mods/sea/clams/textures/clams_collectedalgae.png mode change 100755 => 100644 mods/sea/clams/textures/clams_crushedwhite.png mode change 100755 => 100644 mods/sea/clams/textures/clams_whiteshell.png mode change 100755 => 100644 mods/sea/modpack.txt mode change 100755 => 100644 mods/sea/noairblocks/depends.txt mode change 100755 => 100644 mods/sea/noairblocks/init.lua mode change 100755 => 100644 mods/sea/noairblocks/readme.txt mode change 100755 => 100644 mods/sea/seacobble/depends.txt mode change 100755 => 100644 mods/sea/seacobble/init.lua mode change 100755 => 100644 mods/sea/seacobble/readme.txt mode change 100755 => 100644 mods/sea/seacobble/textures/seacobble_seacobble.png mode change 100755 => 100644 mods/sea/seacobble/textures/seacobble_seacobble_aqua.png mode change 100755 => 100644 mods/sea/seacobble/textures/seacobble_seacobble_cyan.png mode change 100755 => 100644 mods/sea/seacobble/textures/seacobble_seacobble_lime.png mode change 100755 => 100644 mods/sea/seacobble/textures/seacobble_seacobble_magenta.png mode change 100755 => 100644 mods/sea/seacobble/textures/seacobble_seacobble_redviolet.png mode change 100755 => 100644 mods/sea/seacobble/textures/seacobble_seacobble_skyblue.png mode change 100755 => 100644 mods/sea/seacoral/depends.txt mode change 100755 => 100644 mods/sea/seacoral/init.lua create mode 100644 mods/sea/seacoral/init.lua~ mode change 100755 => 100644 mods/sea/seacoral/readme.txt mode change 100755 => 100644 mods/sea/seacoral/textures/seacoral_coralaqua.png mode change 100755 => 100644 mods/sea/seacoral/textures/seacoral_coralcyan.png mode change 100755 => 100644 mods/sea/seacoral/textures/seacoral_corallime.png mode change 100755 => 100644 mods/sea/seacoral/textures/seacoral_coralmagenta.png mode change 100755 => 100644 mods/sea/seacoral/textures/seacoral_coralredviolet.png mode change 100755 => 100644 mods/sea/seacoral/textures/seacoral_coralskyblue.png mode change 100755 => 100644 mods/sea/seaglass/depends.txt mode change 100755 => 100644 mods/sea/seaglass/init.lua mode change 100755 => 100644 mods/sea/seaglass/readme.txt mode change 100755 => 100644 mods/sea/seaglass/textures/seaglass_seaglass.png mode change 100755 => 100644 mods/sea/seaglass/textures/seaglass_seaglass_black.png mode change 100755 => 100644 mods/sea/seaglass/textures/seaglass_seaglass_blue.png mode change 100755 => 100644 mods/sea/seaglass/textures/seaglass_seaglass_red.png mode change 100755 => 100644 mods/sea/seaglass/textures/seaglass_seaglass_white.png mode change 100755 => 100644 mods/sea/seaglass/textures/seaglass_seaglass_yellow.png mode change 100755 => 100644 mods/sea/seagravel/depends.txt mode change 100755 => 100644 mods/sea/seagravel/init.lua create mode 100644 mods/sea/seagravel/init.lua~ mode change 100755 => 100644 mods/sea/seagravel/readme.txt mode change 100755 => 100644 mods/sea/seagravel/textures/seagravel_seagravel.png mode change 100755 => 100644 mods/sea/seagravel/textures/seagravel_seagravel_aqua.png mode change 100755 => 100644 mods/sea/seagravel/textures/seagravel_seagravel_cyan.png mode change 100755 => 100644 mods/sea/seagravel/textures/seagravel_seagravel_lime.png mode change 100755 => 100644 mods/sea/seagravel/textures/seagravel_seagravel_magenta.png mode change 100755 => 100644 mods/sea/seagravel/textures/seagravel_seagravel_redviolet.png mode change 100755 => 100644 mods/sea/seagravel/textures/seagravel_seagravel_skyblue.png mode change 100755 => 100644 mods/sea/sealamps/depends.txt mode change 100755 => 100644 mods/sea/sealamps/init.lua mode change 100755 => 100644 mods/sea/sealamps/readme.txt mode change 100755 => 100644 mods/sea/sealamps/textures/sealamps_lantern.png mode change 100755 => 100644 mods/sea/sealamps/textures/sealamps_lantern_on_ceiling.png mode change 100755 => 100644 mods/sea/sealamps/textures/sealamps_lantern_on_floor.png mode change 100755 => 100644 mods/sea/sealamps/textures/sealamps_torch_animated.png mode change 100755 => 100644 mods/sea/sealamps/textures/sealamps_torch_on_ceiling_animated.png mode change 100755 => 100644 mods/sea/sealamps/textures/sealamps_torch_on_floor.png mode change 100755 => 100644 mods/sea/sealamps/textures/sealamps_torch_on_floor_animated.png mode change 100755 => 100644 mods/sea/seaplants/depends.txt mode change 100755 => 100644 mods/sea/seaplants/init.lua create mode 100644 mods/sea/seaplants/init.lua~ mode change 100755 => 100644 mods/sea/seaplants/readme.txt mode change 100755 => 100644 mods/sea/seaplants/textures/seaplants_kelpbrown.png mode change 100755 => 100644 mods/sea/seaplants/textures/seaplants_kelpbrownmiddle.png mode change 100755 => 100644 mods/sea/seaplants/textures/seaplants_kelpgreen.png mode change 100755 => 100644 mods/sea/seaplants/textures/seaplants_kelpgreenmiddle.png mode change 100755 => 100644 mods/sea/seaplants/textures/seaplants_seagrassgreen.png mode change 100755 => 100644 mods/sea/seaplants/textures/seaplants_seagrassred.png mode change 100755 => 100644 mods/sea/seaplants/textures/seaplants_seasaladmix.png mode change 100755 => 100644 mods/sea/seastone/depends.txt mode change 100755 => 100644 mods/sea/seastone/init.lua mode change 100755 => 100644 mods/sea/seastone/readme.txt mode change 100755 => 100644 mods/sea/seastone/textures/seastone_seastone.png mode change 100755 => 100644 mods/sea/seastone/textures/seastone_seastone_aqua.png mode change 100755 => 100644 mods/sea/seastone/textures/seastone_seastone_cyan.png mode change 100755 => 100644 mods/sea/seastone/textures/seastone_seastone_lime.png mode change 100755 => 100644 mods/sea/seastone/textures/seastone_seastone_magenta.png mode change 100755 => 100644 mods/sea/seastone/textures/seastone_seastone_redviolet.png mode change 100755 => 100644 mods/sea/seastone/textures/seastone_seastone_skyblue.png mode change 100755 => 100644 mods/sea/seastonebrick/depends.txt mode change 100755 => 100644 mods/sea/seastonebrick/init.lua mode change 100755 => 100644 mods/sea/seastonebrick/readme.txt mode change 100755 => 100644 mods/sea/seastonebrick/textures/seastonebrick_seastonebrick.png mode change 100755 => 100644 mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_aqua.png mode change 100755 => 100644 mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_cyan.png mode change 100755 => 100644 mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_lime.png mode change 100755 => 100644 mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_magenta.png mode change 100755 => 100644 mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_redviolet.png mode change 100755 => 100644 mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_skyblue.png mode change 100755 => 100644 mods/sea/seawrecks/depends.txt mode change 100755 => 100644 mods/sea/seawrecks/init.lua create mode 100644 mods/sea/seawrecks/init.lua~ mode change 100755 => 100644 mods/sea/seawrecks/readme.txt mode change 100755 => 100644 mods/sea/stairsshine/README.txt mode change 100755 => 100644 mods/sea/stairsshine/depends.txt mode change 100755 => 100644 mods/sea/stairsshine/init.lua mode change 100755 => 100644 mods/sea/whiteshell/depends.txt mode change 100755 => 100644 mods/sea/whiteshell/init.lua create mode 100644 mods/sea/whiteshell/init.lua~ mode change 100755 => 100644 mods/sea/whiteshell/readme.txt diff --git a/minetestforfun_game/mods/default/nodes.lua b/minetestforfun_game/mods/default/nodes.lua index f19e6cd8..6d9bee8e 100644 --- a/minetestforfun_game/mods/default/nodes.lua +++ b/minetestforfun_game/mods/default/nodes.lua @@ -320,6 +320,23 @@ minetest.register_node("default:sand", { }, groups = {crumbly = 3, falling_node = 1, sand = 1}, sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("default:desert_sand", { @@ -334,6 +351,23 @@ minetest.register_node("default:desert_sand", { }, groups = {crumbly = 3, falling_node = 1, sand = 1}, sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("default:gravel", { @@ -348,6 +382,23 @@ minetest.register_node("default:gravel", { }, }, sounds = default.node_sound_gravel_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("default:sandstone", { diff --git a/mods/_misc/aliases.lua b/mods/_misc/aliases.lua old mode 100644 new mode 100755 diff --git a/mods/_misc/ban.lua b/mods/_misc/ban.lua deleted file mode 100755 index a810b5f2..00000000 --- a/mods/_misc/ban.lua +++ /dev/null @@ -1,63 +0,0 @@ -future_ban_list = {} - -local file = io.open(minetest.get_worldpath().."/future_banlist.txt", "r") -if file then - future_ban_list = minetest.deserialize(file:read("*all")) - file:close() - if not future_ban_list then - future_ban_list = {} - end -end - -local function save_file() - local file = io.open(minetest.get_worldpath().."/future_banlist.txt", "w") - if file then - file:write(minetest.serialize(future_ban_list)) - file:close() - end -end - -minetest.register_chatcommand("future_ban", { - params = " | leave playername out to see the future ban list", - description = "The player will be banned when trying to join", - privs = {ban=true}, - func = function(name, param) - if param == "" then - minetest.chat_send_player(name, "Future ban list: " .. dump(future_ban_list)) - return - end - if not minetest.env:get_player_by_name(param) then - table.insert(future_ban_list, param) - minetest.chat_send_player(name, param .. " to future ban list added.") - minetest.log("action", name .. " added " .. param .. " to future ban list.") - save_file() - return - end - if not minetest.ban_player(param) then - table.insert(future_ban_list, param) - minetest.chat_send_player(name, desc .. " to future ban list added.") - minetest.log("action", name .. " added " .. desc .. " to future ban list.") - save_file() - else - local desc = minetest.get_ban_description(param) - minetest.chat_send_player(name, "Banned " .. desc .. ".") - minetest.log("action", name .. " bans " .. desc .. ".") - end - end -}) - -minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() - for i,n in ipairs(future_ban_list) do - if n == name then - if not minetest.ban_player(name) then - minetest.chat_send_player(name, "Failed to ban player " .. name .. " (from future ban list).") - else - local desc = minetest.get_ban_description(name) - minetest.log("action", desc .. " banned (from future ban list).") - table.remove(future_ban_list, i) - save_file() - end - end - end -end) diff --git a/mods/_misc/chat_offline.lua b/mods/_misc/chat_offline.lua deleted file mode 100755 index bd36fb8d..00000000 --- a/mods/_misc/chat_offline.lua +++ /dev/null @@ -1,25 +0,0 @@ --- This allows me to chat and use basic commands without being in-game --- Based on the External Command mod by Menche - -minetest.register_globalstep( - function(dtime) - f = (io.open(minetest.get_worldpath("external_cmd").."/message", "r")) - if f ~= nil then - local message = f:read("*line") - f:close() - os.remove(minetest.get_worldpath("external_cmd").."/message") - if message ~= nil then - local cmd, param = string.match(message, "^/([^ ]+) *(.*)") - if not param then - param = "" - end - local cmd_def = minetest.chatcommands[cmd] - if cmd_def then - cmd_def.func("CraigyDavi", param) - else - minetest.chat_send_all(" "..message) - end - end - end - end -) diff --git a/mods/_misc/chatcommands.lua b/mods/_misc/chatcommands.lua old mode 100644 new mode 100755 diff --git a/mods/_misc/chatlog.lua b/mods/_misc/chatlog.lua deleted file mode 100755 index ac5082aa..00000000 --- a/mods/_misc/chatlog.lua +++ /dev/null @@ -1,15 +0,0 @@ -local chatlog = minetest.get_worldpath().."/chatlog.txt" -monthfirst = true -- Wheter the 1st of Feb should be 1/2/13(monthfirst = true) or 2/1/13(monthfirst = false) - - -function playerspeak(name,msg) - f = io.open(chatlog, "a") - if monthfirst then - f:write(os.date("(%m/%d/%y %X) ["..name.."]: "..msg.."\n")) - else - f:write(os.date("(%d/%m/%y %X) ["..name.."]: "..msg.."\n")) - end - f:close() -end - -minetest.register_on_chat_message(playerspeak) \ No newline at end of file diff --git a/mods/_misc/init.lua b/mods/_misc/init.lua index 96ab414b..54e44405 100644 --- a/mods/_misc/init.lua +++ b/mods/_misc/init.lua @@ -2,39 +2,18 @@ -- Server Misc Mod -- --------------------- --- Seen ---dofile(minetest.get_modpath("_misc").."/seen.lua") - --- Nodename HUD ---dofile(minetest.get_modpath("_misc").."/nodename_hud.lua") - -- Give initial stuff dofile(minetest.get_modpath("_misc").."/give_initial_stuff.lua") -- Chat Commands dofile(minetest.get_modpath("_misc").."/chatcommands.lua") --- News ---dofile(minetest.get_modpath("_misc").."/news.lua") - -- Rules dofile(minetest.get_modpath("_misc").."/rules.lua") -- Aliases dofile(minetest.get_modpath("_misc").."/aliases.lua") --- Chatlog ---dofile(minetest.get_modpath("_misc").."/chatlog.lua") - --- Username filter --- dofile(minetest.get_modpath("_misc").."/username_filter.lua") - --- Ban ---dofile(minetest.get_modpath("_misc").."/ban.lua") - --- Chat Offline ---dofile(minetest.get_modpath("_misc").."/chat_offline.lua") - -- No Interact Messages dofile(minetest.get_modpath("_misc").."/nointeract_messages.lua") diff --git a/mods/_misc/news.lua b/mods/_misc/news.lua deleted file mode 100755 index fced28d6..00000000 --- a/mods/_misc/news.lua +++ /dev/null @@ -1,48 +0,0 @@ -local news = {} - -news.path = minetest.get_worldpath() - -function news.formspec(player,article) - - if ( article == "" or article == nil ) then - article = "news.txt" - else - article = "news_"..article..".txt" - end - - local newsfile = io.open(news.path.."/"..article,"r") - - local formspec = "size[12,10]" - - if newsfile ~= nil then - local newscontent = newsfile:read("*a") - formspec = formspec.."textarea[.25,.25;12,10;news;;"..newscontent.."]" - else - formspec = formspec.."label[.25,.25;Article does not exist]" - end - formspec = formspec.."button_exit[.25,9;2,1;exit;Fermer" - if ( newsfile ~= nil ) then - newsfile:close() - end - return formspec -end - -function news.show_formspec(player) - local name = player:get_player_name() - minetest.show_formspec(name,"news",news.formspec(player)) - minetest.log('action','Showing formspec to '..name) -end - - -minetest.register_chatcommand("news",{ - params = "
", - description="Montre les news du serveur", - func = function (name,params) - local player = minetest.get_player_by_name(name) - minetest.show_formspec(name,"news",news.formspec(player,params)) - end, -}) - -minetest.register_on_joinplayer(function (player) - minetest.after(5,news.show_formspec,player) -end) diff --git a/mods/_misc/nodename_hud.lua b/mods/_misc/nodename_hud.lua deleted file mode 100755 index 7d6ef3ec..00000000 --- a/mods/_misc/nodename_hud.lua +++ /dev/null @@ -1,53 +0,0 @@ -local wield={} -local huds={} -local dtimes={} -local dlimit=60 -local airhudmod = minetest.get_modpath("4air") - -local function get_desc(item) - if minetest.registered_nodes[item] then return minetest.registered_nodes[item]["description"] end - if minetest.registered_items[item] then return minetest.registered_items[item]["description"] end - if minetest.registered_craftitems[item] then return minetest.registered_craftitems[item]["description"] end - if minetest.registered_tools[item] then return minetest.registered_tools[item]["description"] end - return "" -end - -minetest.register_globalstep(function(dtime) -local players = minetest.get_connected_players() -for i,player in ipairs(players) do - local pll = player:get_player_name() - local wstack = player:get_wielded_item():get_name() - local shift = player:get_player_control()['sneak'] - local meta = player:get_wielded_item():get_metadata() - local desc - if not shift then - desc = wstack - else - desc = wstack - end - if dtimes[pll] then dtimes[pll]=dtimes[pll]+dtime else dtimes[pll]=0 end - if dtimes[pll]>dlimit then - if huds[pll] then player:hud_remove(huds[pll]) end - dtimes[pll]=dlimit+1 - end - if wstack ~= wield[pll] then - wield[pll]=wstack - dtimes[pll]=0 - if huds[pll] - then - player:hud_remove(huds[pll]) - end - local off = {x=0, y=-70} - if airhudmod then off.y=off.y-20 end - huds[pll] = player:hud_add({ - hud_elem_type = "text", - position = {x=0.5, y=1}, - offset = off, - alignment = {x=0, y=0}, - number = 0xFFFFFF , - text = desc, - }) - end - -end -end) \ No newline at end of file diff --git a/mods/_misc/seen.lua b/mods/_misc/seen.lua deleted file mode 100755 index 47615b2f..00000000 --- a/mods/_misc/seen.lua +++ /dev/null @@ -1,211 +0,0 @@ -seendebug = true -local last_time = os.time() -local save_interval = 60 - -if minetest.setting_get("seen.save_interval") ~= nil then - local save_int = minetest.setting_get("seen.save_interval") - if tonumber(save_int) > 20 then - save_interval = save_int - end -end - -local function save_data(sett, data) - if sett ~= nil then - data_ser = minetest.serialize(data) - sett:set("data", data_ser) - sett:write() - else - minetest.chat_send_all("Seen Mod: Saving data failed. Please shout at the server admin!") - end -end - -local function load_data(sett, field) - local loaded = sett:get("data") - local def = sett:get("default") - if loaded ~= nil then - local data = minetest.deserialize(loaded) - else - local data = {} - end -end - -local function relative_time (time) - local diff = os.time() - time - if diff == 0 then - return "now" - elseif diff > 0 then - local day_diff = math.floor(diff/86400) - if day_diff == 0 then - if diff < 60 then - return "a few seconds ago" - end - if diff < 120 then - return "1 minute ago." - end - if diff < 3600 then - return tostring(math.floor(diff/60)).." minutes ago" - end - if diff < 7200 then - return "1 hour ago" - end - if diff < 86400 then - return tostring(math.floor(diff/3600)).." hours ago" - end - end - if day_diff == 1 then - return "yesterday" - end - if day_diff < 7 then - return tostring(day_diff).." days ago" - end - if day_diff < 31 then - return tostring(math.ceil(day_diff/7)).." weeks ago" - end - if day_diff < 60 then - return "last month" - end - return os.date("%B %Y", time) - else - local diff = math.abs(diff) - local day_diff = math.floor(diff/86400) - if day_diff == 0 then - if diff < 120 then - return "in a minute" - end - if diff < 3600 then - return "in "..tostring(math.floor(diff/60)).." minutes" - end - if diff < 7200 then - return "in an hour" - end - if diff < 86400 then - return "in "..tostring(math.floor(diff/3600)).." hours" - end - end - if day_diff == 1 then - return "tomorrow" - end - if day_diff < 4 then - return os.date("%A", time) - end - if day_diff < 7 + (7 - tonumber(os.date("%w"))) then - return "next week" - end - if math.ceil (day_diff / 7) < 4 then - return "in "..tostring(math.ceil(day_diff/7)).." weeks" - end - if tonumber(os.date("%m", time)) == tonumber(os.date("%m")) + 1 then - return "next month" - end - return os.date("%B %Y", time); - end -end - -local function print_r(tab,com) - if seendebug == true then - print("DEBUG: "..com) - table.foreach(tab, print) - print("-----") - return true - else - return false - end -end - -local function debug(var, com) - if seendebug == true then - print("DEBUG: "..com) - print(var) - minetest.chat_send_all("DEBUG: "..var.."// "..com) - print("-----") - return true - else - return false - end -end - -local config_file = minetest.get_worldpath().."/seen.txt" ---in case of not existant config file, it ---will create it -local file_desc = io.open(config_file, "a") -file_desc:close() - ---create config instance -local config = Settings(config_file) -local data -local seens = {} - -data = config:get("data") -if data ~= nil then - seens = minetest.deserialize(data) - for _, player in pairs( minetest.get_connected_players() ) do - name = player:get_player_name() - seens[name] = os.time() - end -else - seens = {} - for _, player in pairs( minetest.get_connected_players() ) do - name = player:get_player_name() - seens[name] = os.time() - end -end -save_data(config, seens) - -minetest.register_on_newplayer(function(player) - name = player:get_player_name() - seens[name] = os.time() - save_data(config, seens) - return true -end) - -minetest.register_on_joinplayer(function(player) - name = player:get_player_name() - seens[name] = os.time() - save_data(config, seens) - return true -end) - -minetest.register_on_leaveplayer(function(player) - name = player:get_player_name() - seens[name] = os.time() - save_data(config, seens) - return true -end) - -minetest.register_on_shutdown(function() - for _, player in pairs( minetest.get_connected_players() ) do - name = player:get_player_name() - seens[name] = os.time() - end - save_data(config, seens) - return true -end) - -minetest.register_globalstep(function ( dtime ) - if os.time() >= last_time then - last_time = os.time() + save_interval - for _, player in pairs( minetest.get_connected_players() ) do - name = player:get_player_name() - seens[name] = os.time() - end - save_data(config, seens) - end -end); - -minetest.register_chatcommand("seen", { - params = "", - description = "Recherche quand un joueur etait en ligne pour la derniere fois.", - func = function(name, param) - local player = minetest.get_player_by_name(name) - if not player then - return - end - if param ~= nil and param ~= "" then - if seens[param] ~= nil then - minetest.chat_send_player(name, param.." etait en ligne pour la derniere fois "..relative_time(seens[param])) - else - minetest.chat_send_player(name, "Il n'y a aucune donnees sur "..param..". Peut-etre que l'identifiant n'est pas correcte ?") - end - end - end, -}) diff --git a/mods/_misc/username_filter.lua b/mods/_misc/username_filter.lua deleted file mode 100755 index 56c24eec..00000000 --- a/mods/_misc/username_filter.lua +++ /dev/null @@ -1,34 +0,0 @@ --- By VanessaE, sfan5, and kaeza. - -local disallowed = { - ["guest"] = "Les comptes Guest/invités sont désactivés sur ce serveur. ".. - "S'il vous plaît, choisissez un nom d'utilisateur correcte et réessayez.", - ["^[0-9]+$"] = "Les identifiants contenant uniquement des chiffres sont désactivés sur ce serveur. ".. - "S'il vous plaît, choisissez un nom d'utilisateur correcte et réessayez.", - ["[0-9].-[0-9].-[0-9].-[0-9].-[0-9]"] = "Trop de chiffres dans votre identifiant. ".. - "S'il vous plaît, réessayez avec moins de 5 chiffres dans votre identifiant.", - ["[4a]dm[1il]n"] = "Ce nom d'utilisateur est désactivé pour des raisons évidentes. ".. - "Merci de choisir un autre nom d'utilisateur." -} - - - -minetest.register_on_prejoinplayer(function(name, ip) - local lname = name:lower() - for re, reason in pairs(disallowed) do - if lname:find(re) then - return reason - end - end - - if #name < 2 then - return "Identifiant trop court. ".. - "S'il vous plaît, choisissez un identifiant avec au moins 2 lettres et réessayez." - end - - if #name > 18 then - return "Identifiant trop long. ".. - "S'il vous plaît, choisissez un identifiant avec moins de 18 caractères." - end - -end) diff --git a/mods/news/init.lua b/mods/news/init.lua new file mode 100644 index 00000000..ff4dba00 --- /dev/null +++ b/mods/news/init.lua @@ -0,0 +1,53 @@ +local news = {} + +local path = minetest.get_worldpath() + +local function formspec(player,article) + + --if ( article == "" or article == nil ) then + article = "news.txt" -- vu qu'il s'en sert pas + --else + -- article = "news_"..article..".txt" + --end + + local newsfile = io.open(path.."/"..article,"r") + + local formspec = "size[12,10;]" + formspec = formspec.."background[-0.22,-0.25;13,11;background.jpg]" + + if newsfile ~= nil then + local newscontent = newsfile:read("*a") + formspec = formspec.."textarea[.50,.50;12,10;news;;"..minetest.formspec_escape(newscontent).."]" + else + formspec = formspec.."label[.50,.50;Pas d'article pour le moment]" + end + formspec = formspec.."button_exit[5,9.25;2,1;exit;Fermer" + if ( newsfile ~= nil ) then + newsfile:close() + end + return formspec +end + +local function show_formspec(player) + local name = player:get_player_name() + minetest.show_formspec(name,"news",formspec(player)) + minetest.log('action','Showing formspec to '..name) +end + + +minetest.register_chatcommand("news",{ + params = "
", + description="Montre les news du serveur", + func = function (name,params) + local player = minetest.get_player_by_name(name) + minetest.show_formspec(name,"news",formspec(player,params)) + end, +}) + +minetest.register_on_joinplayer(function (player) + minetest.after(6,show_formspec,player) +end) + +minetest.register_on_newplayer(function(player) + minetest.after(8,show_formspec,player) +end) \ No newline at end of file diff --git a/mods/news/textures/background.jpg b/mods/news/textures/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4fae3dc235448e0135d065eb8d33fe3d2c49b33b GIT binary patch literal 206194 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⪚&DHdQw<=aFr^9)Ge%u!D`{{RjK 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

ZZ1IMLAr1)%AUjQ5 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 J^Tb-a|Je+;m&O19 literal 0 HcmV?d00001 diff --git a/mods/sea/LICENSE AND README.txt b/mods/sea/LICENSE AND README.txt old mode 100755 new mode 100644 diff --git a/mods/sea/clams/depends.txt b/mods/sea/clams/depends.txt old mode 100755 new mode 100644 diff --git a/mods/sea/clams/init.lua b/mods/sea/clams/init.lua old mode 100755 new mode 100644 index 9c6cb3f2..1fef1ee4 --- a/mods/sea/clams/init.lua +++ b/mods/sea/clams/init.lua @@ -17,6 +17,23 @@ minetest.register_node("clams:sandalgae", { } }, sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("clams:dirtalgae", { @@ -45,6 +62,23 @@ minetest.register_node("clams:sandalgaeused", { is_ground_content = true, groups = {crumbly=3, falling_node=1, sand=1}, sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("clams:dirtalgaeused", { @@ -389,4 +423,4 @@ minetest.register_alias("shells_dye:yellowlightglass","clams:yellowlightglass") minetest.register_alias("shells_dye:redlightglass","clams:redlightglass") minetest.register_alias("shells_dye:bluelightglass","clams:bluelightglass") minetest.register_alias("shells_dye:whitelightglass","clams:whitelightglass") -minetest.register_alias("shells_dye:blacklightglass","clams:blacklightglass") \ No newline at end of file +minetest.register_alias("shells_dye:blacklightglass","clams:blacklightglass") diff --git a/mods/sea/clams/init.lua~ b/mods/sea/clams/init.lua~ new file mode 100644 index 00000000..cc1887e6 --- /dev/null +++ b/mods/sea/clams/init.lua~ @@ -0,0 +1,420 @@ +-- NODES + +minetest.register_node("clams:sandalgae", { + description = "Sandalgae", + tiles = {"default_sand.png^clams_algae.png"}, + paramtype = "light", + is_ground_content = true, + groups = {crumbly=3, falling_node=1, sand=1}, + drop = { + items = { + { + items = {'"clams:collectedalgae" 4'}, + }, + { + items = {'clams:sandalgaeused'}, + } + } + }, + sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("clams:dirtalgae", { + description = "Dirtalgae", + tiles = {"default_dirt.png^clams_algae.png"}, + paramtype = "light", + is_ground_content = true, + groups = {crumbly=3}, + drop = { + items = { + { + items = {'"clams:collectedalgae" 4'}, + }, + { + items = {'clams:dirtalgaeused'}, + } + } + }, + sounds = default.node_sound_dirt_defaults, +}) + +minetest.register_node("clams:sandalgaeused", { + description = "Used sandalgae", + tiles = {"default_sand.png^clams_algaeused.png"}, + inventory_image = {"default_sand.png^clams_algaeused.png"}, + is_ground_content = true, + groups = {crumbly=3, falling_node=1, sand=1}, + sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("clams:dirtalgaeused", { + description = "Used dirtalgae", + tiles = {"default_dirt.png^clams_algaeused.png"}, + inventory_image = {"default_dirt.png^clams_algaeused.png"}, + is_ground_content = true, + groups = {crumbly=3}, + sounds = default.node_sound_dirt_defaults(), +}) + + +-- ENTITIES + + +-- The registration of the entities' code is copied from celeron55's mob (the DM's fireball) + + +minetest.register_entity("clams:whiteshell", { + description="White shell", + hp_max = 15, + physical = true, + collisionbox = {-0.2,-0.2,-0.2, 0.2,0.2,0.2}, + visual = "sprite", + visual_size = {x=0.5, y=0.5}, + textures = {"clams_whiteshell.png^[makealpha:128,128,0"}, + spritediv = {x=1, y=3}, + initial_sprite_basepos = {x=0, y=0}, + drops = { + {name = "clams:crushedwhite", chance = 1, min = 1, max = 4}, + }, + + phase = 0, + phasetimer = 0, + + on_activate = function(self, staticdata) + minetest.log("whiteshell activated!") + end, + + on_step = function(self, dtime) + self.phasetimer = self.phasetimer + dtime + if self.phasetimer > 2.0 then + self.phasetimer = self.phasetimer - 2.0 + self.phase = self.phase + 1 + if self.phase >= 3 then + self.phase = 0 + end + self.object:setsprite({x=0, y=self.phase}) + phasearmor = { + [0]={fleshy=0}, + [1]={fleshy=30}, + [2]={fleshy=70} + } + self.object:set_armor_groups(phasearmor[self.phase]) + end + end, + + on_punch = function(self, hitter) + if self.object:get_hp() <= 0 then + if hitter and hitter:is_player() and hitter:get_inventory() then + for _,drop in ipairs(self.drops) do + if math.random(1, drop.chance) == 1 then + hitter:get_inventory():add_item("main", ItemStack(drop.name.." "..math.random(drop.min, drop.max))) + end + end + else + for _,drop in ipairs(self.drops) do + if math.random(1, drop.chance) == 1 then + for i=1,math.random(drop.min, drop.max) do + local obj = minetest.add_item(self.object:getpos(), drop.name) + if obj then + obj:get_luaentity().collect = true + local x = math.random(1, 5) + if math.random(1,2) == 1 then + x = -x + end + local z = math.random(1, 5) + if math.random(1,2) == 1 then + z = -z + end + obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z}) + end + end + end + end + end + end + end, +}) + + +-- CRAFT ITEMS + + +minetest.register_craftitem("clams:collectedalgae", { + description = "Collected algae", + inventory_image = "clams_collectedalgae.png", +}) + +minetest.register_craftitem("clams:crushedwhite", { + description = "Crushed white shell", + inventory_image = "clams_crushedwhite.png", +}) + + +-- ALGAE GENERATION + + +minetest.register_ore({ + ore_type = "scatter", + ore = "clams:sandalgae", + wherein = "default:sand", + clust_scarcity = 9*9*9, + clust_num_ores = 16, + clust_size = 4, + height_max = -4, + height_min = -60, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "clams:dirtalgae", + wherein = "default:dirt", + clust_scarcity = 9*9*9, + clust_num_ores = 16, + clust_size = 4, + height_max = -4, + height_min = -60, +}) + + +local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, chunk_size, ore_per_chunk, height_min, height_max) + if maxp.y < height_min or minp.y > height_max then + return + end + local y_min = math.max(minp.y, height_min) + local y_max = math.min(maxp.y, height_max) + if chunk_size >= y_max - y_min + 1 then + return + end + local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1) + local pr = PseudoRandom(seed) + local num_chunks = math.floor(chunks_per_volume * volume) + local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk) + for i=1,num_chunks do + local y0 = pr:next(y_min, y_max-chunk_size+1) + if y0 >= height_min and y0 <= height_max then + local x0 = pr:next(minp.x, maxp.x-chunk_size+1) + local z0 = pr:next(minp.z, maxp.z-chunk_size+1) + local p0 = {x=x0, y=y0, z=z0} + for x1=0,chunk_size-1 do + for y1=0,chunk_size-1 do + for z1=0,chunk_size-1 do + if pr:next(1,inverse_chance) == 1 then + local x2 = x0+x1 + local y2 = y0+y1 + local z2 = z0+z1 + local p2 = {x=x2, y=y2, z=z2} + if minetest.get_node(p2).name == wherein then + minetest.set_node(p2, {name=name}) + end + end + end + end + end + end + end +end + + +--ABM's + + +minetest.register_abm({ + nodenames = {"clams:sandalgaeused"}, + interval = 30, + chance = 20, + action = function(pos, node, active_object_count, active_object_count_wider) + local y = {x = pos.x, y = pos.y + 1, z = pos.z } + local yy = {x = pos.x, y = pos.y + 2, z = pos.z } + if minetest.get_node(y).name == "default:water_source" or + minetest.get_node(y).name == "noairblocks:water_sourcex" then + if minetest.get_node(yy).name == "default:water_source" or + minetest.get_node(yy).name == "noairblocks:water_sourcex" then + minetest.add_node(pos, {name = "clams:sandalgae"}) else + return + end + end + end, +}) + +minetest.register_abm({ + nodenames = {"clams:dirtalgaeused"}, + interval = 30, + chance = 20, + action = function(pos, node, active_object_count, active_object_count_wider) + local y = {x = pos.x, y = pos.y + 1, z = pos.z } + local yy = {x = pos.x, y = pos.y + 2, z = pos.z } + if minetest.get_node(y).name == "default:water_source" or + minetest.get_node(y).name == "noairblocks:water_sourcex" then + if minetest.get_node(yy).name == "default:water_source" or + minetest.get_node(yy).name == "noairblocks:water_sourcex" then + minetest.add_node(pos, {name = "clams:dirtalgae"}) else + return + end + end + end, +}) + +minetest.register_abm({ + nodenames = {"clams:sandalgae"}, + interval = 40, + chance = 40, + action = function(pos, node, active_object_count, active_object_count_wider) + local y = {x = pos.x, y = pos.y + 1, z = pos.z } + local yy = {x = pos.x, y = pos.y + 2, z = pos.z } + if (active_object_count_wider + active_object_count_wider) > 40 then + return + elseif (minetest.get_node(y).name == "default:water_source" or + minetest.get_node(y).name == "noairblocks:water_sourcex") then + if (minetest.get_node(yy).name == "default:water_source" or + minetest.get_node(yy).name == "noairblocks:water_sourcex") then + pos.y=pos.y + 1 + minetest.add_entity(pos, "clams:whiteshell") + end + end + end, +}) + +minetest.register_abm({ + nodenames = {"clams:dirtalgae"}, + interval = 40, + chance = 40, + action = function(pos, node, active_object_count, active_object_count_wider) + local y = {x = pos.x, y = pos.y + 1, z = pos.z } + local yy = {x = pos.x, y = pos.y + 2, z = pos.z } + if (active_object_count_wider + active_object_count_wider) > 40 then + return + elseif (minetest.get_node(y).name == "default:water_source" or + minetest.get_node(y).name == "noairblocks:water_sourcex") then + if (minetest.get_node(yy).name == "default:water_source" or + minetest.get_node(yy).name == "noairblocks:water_sourcex") then + pos.y=pos.y + 1 + minetest.add_entity(pos, "clams:whiteshell") + end + end + end, +}) + + +-- ALIASES + + +minetest.register_alias("clams:yellowalgae","clams:collectedalgae") +minetest.register_alias("clams:redalgae","clams:collectedalgae") +minetest.register_alias("clams:bluealgae","clams:collectedalgae") + +minetest.register_alias("clams:yellowshell","clams:whiteshell") +minetest.register_alias("clams:redshell","clams:whiteshell") +minetest.register_alias("clams:blueshell","clams:whiteshell") + +minetest.register_alias("clams:yellowseedsanddirt","clams:sandalgae") +minetest.register_alias("clams:redseedsanddirt","clams:dirtalgae") +minetest.register_alias("clams:blueseedsanddirt","clams:sandalgae") + +minetest.register_alias("clams:yellowseed","clams:collectedalgae") +minetest.register_alias("clams:redseed","clams:collectedalgae") +minetest.register_alias("clams:blueseed","clams:collectedalgae") + +minetest.register_alias("clams:sanddirt","clams:sandalgaeused") +minetest.register_alias("clams:sanddirtalgae","clams:dirtalgae") +minetest.register_alias("clams:sanddirtused","clams:dirtalgaeused") + +minetest.register_alias("clams:sandbalgae","clams:sandalgae") +minetest.register_alias("clams:dirtbalgae","clams:dirtalgae") + +minetest.register_alias("clams:crushedyellow","clams:crushedwhite") +minetest.register_alias("clams:crushedred","clams:crushedwhite") +minetest.register_alias("clams:crushedblue","clams:crushedwhite") +minetest.register_alias("clams:crushedblack","clams:crushedwhite") + +minetest.register_alias("clams:emptybleacher","colormachine:colormachine") +minetest.register_alias("clams:filledbleacher","colormachine:colormachine") +minetest.register_alias("clams:readybleacher","colormachine:colormachine") + +if( minetest.get_modpath( "colormachine") ~= nil ) then + minetest.register_alias("clams:emptybleacher","colormachine:colormachine") + minetest.register_alias("clams:filledbleacher","colormachine:colormachine") + minetest.register_alias("clams:readybleacher","colormachine:colormachine") else + minetest.register_alias("clams:emptybleacher","default:mese") + minetest.register_alias("clams:filledbleacher","default:mese") + minetest.register_alias("clams:readybleacher","default:mese") + return +end + + +-- ALIASES OLDEST VERSION + + +minetest.register_alias("algae:yellowalgae","clams:collectedalgae") +minetest.register_alias("algae:redalgae","clams:collectedalgae") +minetest.register_alias("algae:bluealgae","clams:collectedalgae") + +minetest.register_alias("algae:sandalgae","clams:sandalgae") +minetest.register_alias("algae:dirtalgae","clams:dirtalgae") +minetest.register_alias("algae:sandbalgae","clams:sandalgae") +minetest.register_alias("algae:dirtbalgae","clams:dirtalgae") + +minetest.register_alias("sea_cult:emptybleacher","colormachine:colormachine") +minetest.register_alias("sea_cult:filledbleacher","colormachine:colormachine") +minetest.register_alias("sea_cult:readybleacher","colormachine:colormachine") + +if( minetest.get_modpath( "colormachine") ~= nil ) then + minetest.register_alias("sea_cult:emptybleacher","colormachine:colormachine") + minetest.register_alias("sea_cult:filledbleacher","colormachine:colormachine") + minetest.register_alias("sea_cult:readybleacher","colormachine:colormachine") else + minetest.register_alias("sea_cult:emptybleacher","default:mese") + minetest.register_alias("sea_cult:filledbleacher","default:mese") + minetest.register_alias("sea_cult:readybleacher","default:mese") + return +end + +minetest.register_alias("sea_cult:sanddirt","clams:sandalgaeused") +minetest.register_alias("sea_cult:sanddirtalgae","clams:dirtalgae") +minetest.register_alias("sea_cult:sanddirtused","clams:dirtalgaeused") + +minetest.register_alias("shells:yellowshell","clams:whiteshell") +minetest.register_alias("shells:redshell","clams:whiteshell") +minetest.register_alias("shells:blueshell","clams:whiteshell") + +minetest.register_alias("shells:yellowseed","clams:collectedalgae") +minetest.register_alias("shells:redseed","clams:collectedalgae") +minetest.register_alias("shells:blueseed","clams:collectedalgae") + +minetest.register_alias("shells:crushedyellow","clams:crushedwhite") +minetest.register_alias("shells:crushedred","clams:crushedwhite") +minetest.register_alias("shells:crushedblue","clams:crushedwhite") +minetest.register_alias("shells:crushedblack","clams:crushedwhite") +minetest.register_alias("shells:crushedwhite","clams:crushedwhite") + +minetest.register_alias("shells_dye:yellowlightglass","clams:yellowlightglass") +minetest.register_alias("shells_dye:redlightglass","clams:redlightglass") +minetest.register_alias("shells_dye:bluelightglass","clams:bluelightglass") +minetest.register_alias("shells_dye:whitelightglass","clams:whitelightglass") +minetest.register_alias("shells_dye:blacklightglass","clams:blacklightglass") diff --git a/mods/sea/clams/readme.txt b/mods/sea/clams/readme.txt old mode 100755 new mode 100644 diff --git a/mods/sea/clams/textures/clams_algae.png b/mods/sea/clams/textures/clams_algae.png old mode 100755 new mode 100644 diff --git a/mods/sea/clams/textures/clams_algaeused.png b/mods/sea/clams/textures/clams_algaeused.png old mode 100755 new mode 100644 diff --git a/mods/sea/clams/textures/clams_collectedalgae.png b/mods/sea/clams/textures/clams_collectedalgae.png old mode 100755 new mode 100644 diff --git a/mods/sea/clams/textures/clams_crushedwhite.png b/mods/sea/clams/textures/clams_crushedwhite.png old mode 100755 new mode 100644 diff --git a/mods/sea/clams/textures/clams_whiteshell.png b/mods/sea/clams/textures/clams_whiteshell.png old mode 100755 new mode 100644 diff --git a/mods/sea/modpack.txt b/mods/sea/modpack.txt old mode 100755 new mode 100644 diff --git a/mods/sea/noairblocks/depends.txt b/mods/sea/noairblocks/depends.txt old mode 100755 new mode 100644 diff --git a/mods/sea/noairblocks/init.lua b/mods/sea/noairblocks/init.lua old mode 100755 new mode 100644 diff --git a/mods/sea/noairblocks/readme.txt b/mods/sea/noairblocks/readme.txt old mode 100755 new mode 100644 diff --git a/mods/sea/seacobble/depends.txt b/mods/sea/seacobble/depends.txt old mode 100755 new mode 100644 diff --git a/mods/sea/seacobble/init.lua b/mods/sea/seacobble/init.lua old mode 100755 new mode 100644 diff --git a/mods/sea/seacobble/readme.txt b/mods/sea/seacobble/readme.txt old mode 100755 new mode 100644 diff --git a/mods/sea/seacobble/textures/seacobble_seacobble.png b/mods/sea/seacobble/textures/seacobble_seacobble.png old mode 100755 new mode 100644 diff --git a/mods/sea/seacobble/textures/seacobble_seacobble_aqua.png b/mods/sea/seacobble/textures/seacobble_seacobble_aqua.png old mode 100755 new mode 100644 diff --git a/mods/sea/seacobble/textures/seacobble_seacobble_cyan.png b/mods/sea/seacobble/textures/seacobble_seacobble_cyan.png old mode 100755 new mode 100644 diff --git a/mods/sea/seacobble/textures/seacobble_seacobble_lime.png b/mods/sea/seacobble/textures/seacobble_seacobble_lime.png old mode 100755 new mode 100644 diff --git a/mods/sea/seacobble/textures/seacobble_seacobble_magenta.png b/mods/sea/seacobble/textures/seacobble_seacobble_magenta.png old mode 100755 new mode 100644 diff --git a/mods/sea/seacobble/textures/seacobble_seacobble_redviolet.png b/mods/sea/seacobble/textures/seacobble_seacobble_redviolet.png old mode 100755 new mode 100644 diff --git a/mods/sea/seacobble/textures/seacobble_seacobble_skyblue.png b/mods/sea/seacobble/textures/seacobble_seacobble_skyblue.png old mode 100755 new mode 100644 diff --git a/mods/sea/seacoral/depends.txt b/mods/sea/seacoral/depends.txt old mode 100755 new mode 100644 diff --git a/mods/sea/seacoral/init.lua b/mods/sea/seacoral/init.lua old mode 100755 new mode 100644 index 2aa6d7dc..93e4eb24 --- a/mods/sea/seacoral/init.lua +++ b/mods/sea/seacoral/init.lua @@ -128,6 +128,23 @@ minetest.register_node("seacoral:seacoralsandcyan", { groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, drop = 'default:sand', sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seacoral:seacoraldirtcyan", { @@ -146,6 +163,23 @@ minetest.register_node("seacoral:seacoralsandmagenta", { groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, drop = 'default:sand', sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seacoral:seacoraldirtmagenta", { @@ -164,6 +198,23 @@ minetest.register_node("seacoral:seacoralsandaqua", { groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, drop = 'default:sand', sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seacoral:seacoraldirtaqua", { @@ -182,6 +233,23 @@ minetest.register_node("seacoral:seacoralsandlime", { groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, drop = 'default:sand', sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seacoral:seacoraldirtlime", { @@ -200,6 +268,23 @@ minetest.register_node("seacoral:seacoralsandskyblue", { groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, drop = 'default:sand', sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seacoral:seacoraldirtskyblue", { @@ -218,6 +303,23 @@ minetest.register_node("seacoral:seacoralsandredviolet", { groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, drop = 'default:sand', sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seacoral:seacoraldirtredviolet", { @@ -647,4 +749,4 @@ minetest.register_alias("seadye:magenta","dye:magenta") minetest.register_alias("seadye:lime","dye:lime") minetest.register_alias("seadye:aqua","dye:aqua") minetest.register_alias("seadye:skyblue","dye:skyblue") -minetest.register_alias("seadye:redviolet","dye:redviolet") \ No newline at end of file +minetest.register_alias("seadye:redviolet","dye:redviolet") diff --git a/mods/sea/seacoral/init.lua~ b/mods/sea/seacoral/init.lua~ new file mode 100644 index 00000000..6e284a25 --- /dev/null +++ b/mods/sea/seacoral/init.lua~ @@ -0,0 +1,734 @@ +-- NODES + + +minetest.register_node("seacoral:coralcyan", { + description = "Cyan Coral", + drawtype = "plantlike", + tiles = {"seacoral_coralcyan.png"}, + inventory_image = "seacoral_coralcyan.png", + wield_image = "seacoral_coralcyan.png", + paramtype = "light", + walkable = false, + climbable = true, + drowning = 1, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.3, -0.3, 0.3, 0.3, 0.3} + }, + post_effect_color = {a=64, r=100, g=100, b=200}, + groups = {snappy=3, seacoral=1, sea=1,basecolor_cyan=1}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("seacoral:coralmagenta", { + description = "Magenta Coral", + drawtype = "plantlike", + tiles = {"seacoral_coralmagenta.png"}, + inventory_image = "seacoral_coralmagenta.png", + wield_image = "seacoral_coralmagenta.png", + paramtype = "light", + walkable = false, + climbable = true, + drowning = 1, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + post_effect_color = {a=64, r=100, g=100, b=200}, + groups = {snappy=3, seacoral=1, sea=1,basecolor_magenta=1}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("seacoral:coralaqua", { + description = "Aqua Coral", + drawtype = "plantlike", + tiles = {"seacoral_coralaqua.png"}, + inventory_image = "seacoral_coralaqua.png", + wield_image = "seacoral_coralaqua.png", + paramtype = "light", + walkable = false, + climbable = true, + drowning = 1, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.3, -0.3, 0.3, 0.3, 0.3} + }, + post_effect_color = {a=64, r=100, g=100, b=200}, + groups = {snappy=3, seacoral=1, sea=1,excolor_aqua=1}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("seacoral:corallime", { + description = "Lime Coral", + drawtype = "plantlike", + tiles = {"seacoral_corallime.png"}, + inventory_image = "seacoral_corallime.png", + wield_image = "seacoral_corallime.png", + paramtype = "light", + walkable = false, + climbable = true, + drowning = 1, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + post_effect_color = {a=64, r=100, g=100, b=200}, + groups = {snappy=3, seacoral=1, sea=1,excolor_lime=1}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("seacoral:coralskyblue", { + description = "Skyblue Coral", + drawtype = "plantlike", + tiles = {"seacoral_coralskyblue.png"}, + inventory_image = "seacoral_coralskyblue.png", + wield_image = "seacoral_coralskyblue.png", + paramtype = "light", + walkable = false, + climbable = true, + drowning = 1, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + post_effect_color = {a=64, r=100, g=100, b=200}, + groups = {snappy=3, seacoral=1, sea=1,excolor_skyblue=1}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("seacoral:coralredviolet", { + description = "Redviolet Coral", + drawtype = "plantlike", + tiles = {"seacoral_coralredviolet.png"}, + inventory_image = "seacoral_coralredviolet.png", + wield_image = "seacoral_coralredviolet.png", + paramtype = "light", + walkable = false, + climbable = true, + drowning = 1, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + post_effect_color = {a=64, r=100, g=100, b=200}, + groups = {snappy=3, seacoral=1, sea=1,excolor_redviolet=1}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("seacoral:seacoralsandcyan", { + description = "Sea coral sand cyan", + tiles = {"default_sand.png"}, + is_ground_content = true, + groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, + drop = 'default:sand', + sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seacoral:seacoraldirtcyan", { + description = "Sea coral dirt cyan", + tiles = {"default_dirt.png"}, + is_ground_content = true, + groups = {crumbly=3,soil=1, not_in_creative_inventory=1}, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("seacoral:seacoralsandmagenta", { + description = "Sea coral sand magenta", + tiles = {"default_sand.png"}, + is_ground_content = true, + groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, + drop = 'default:sand', + sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seacoral:seacoraldirtmagenta", { + description = "Sea coral dirt magenta", + tiles = {"default_dirt.png"}, + is_ground_content = true, + groups = {crumbly=3,soil=1, not_in_creative_inventory=1}, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("seacoral:seacoralsandaqua", { + description = "Sea coral sand aqua", + tiles = {"default_sand.png"}, + is_ground_content = true, + groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, + drop = 'default:sand', + sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seacoral:seacoraldirtaqua", { + description = "Sea coral dirt aqua", + tiles = {"default_dirt.png"}, + is_ground_content = true, + groups = {crumbly=3,soil=1, not_in_creative_inventory=1}, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("seacoral:seacoralsandlime", { + description = "Sea coral sand lime", + tiles = {"default_sand.png"}, + is_ground_content = true, + groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, + drop = 'default:sand', + sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seacoral:seacoraldirtlime", { + description = "Sea coral dirt lime", + tiles = {"default_dirt.png"}, + is_ground_content = true, + groups = {crumbly=3,soil=1, not_in_creative_inventory=1}, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("seacoral:seacoralsandskyblue", { + description = "Sea coral sand skyblue", + tiles = {"default_sand.png"}, + is_ground_content = true, + groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, + drop = 'default:sand', + sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seacoral:seacoraldirtskyblue", { + description = "Sea coral dirt skyblue", + tiles = {"default_dirt.png"}, + is_ground_content = true, + groups = {crumbly=3,soil=1, not_in_creative_inventory=1}, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("seacoral:seacoralsandredviolet", { + description = "Sea coral sand redviolet", + tiles = {"default_sand.png"}, + is_ground_content = true, + groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, + drop = 'default:sand', + sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seacoral:seacoraldirtredviolet", { + description = "Sea coral dirt redviolet", + tiles = {"default_dirt.png"}, + is_ground_content = true, + groups = {crumbly=3,soil=1, not_in_creative_inventory=1}, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults(), +}) + + +-- CRAFTING + + +if( minetest.get_modpath( "colormachine") == nil ) then + register_seacoral_craft = function(output,recipe) + minetest.register_craft({ + type = 'shapeless', + output = output, + recipe = recipe, + }) + end + +register_seacoral_craft('dye:cyan 4', {'seacoral:coralcyan'}) +register_seacoral_craft('dye:magenta 4', {'seacoral:coralmagenta'}) +register_seacoral_craft('dye:lime 4', {'seacoral:corallime'}) +register_seacoral_craft('dye:aqua 4', {'seacoral:coralaqua'}) +register_seacoral_craft('dye:skyblue 4', {'seacoral:coralskyblue'}) +register_seacoral_craft('dye:redviolet 4', {'seacoral:coralredviolet'}) +end + +-- SEACORAL SAND AND DIRT GENERATION + + +minetest.register_ore({ + ore_type = "scatter", + ore = "seacoral:seacoralsandcyan", + wherein = "default:sand", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -4, + height_min = -8, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seacoral:seacoraldirtcyan", + wherein = "default:dirt", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -4, + height_min = -8, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seacoral:seacoralsandmagenta", + wherein = "default:sand", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -4, + height_min = -8, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seacoral:seacoraldirtmagenta", + wherein = "default:dirt", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -4, + height_min = -8, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seacoral:seacoralsandaqua", + wherein = "default:sand", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -4, + height_min = -8, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seacoral:seacoraldirtaqua", + wherein = "default:dirt", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -4, + height_min = -8, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seacoral:seacoralsandlime", + wherein = "default:sand", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -4, + height_min = -8, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seacoral:seacoraldirtlime", + wherein = "default:dirt", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -4, + height_min = -8, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seacoral:seacoralsandskyblue", + wherein = "default:sand", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -4, + height_min = -8, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seacoral:seacoraldirtskyblue", + wherein = "default:dirt", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -4, + height_min = -8, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seacoral:seacoralsandredviolet", + wherein = "default:sand", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -4, + height_min = -8, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seacoral:seacoraldirtredviolet", + wherein = "default:dirt", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -4, + height_min = -8, +}) + +local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, chunk_size, ore_per_chunk, height_min, height_max) + if maxp.y < height_min or minp.y > height_max then + return + end + local y_min = math.max(minp.y, height_min) + local y_max = math.min(maxp.y, height_max) + if chunk_size >= y_max - y_min + 1 then + return + end + local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1) + local pr = PseudoRandom(seed) + local num_chunks = math.floor(chunks_per_volume * volume) + local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk) + for i=1,num_chunks do + local y0 = pr:next(y_min, y_max-chunk_size+1) + if y0 >= height_min and y0 <= height_max then + local x0 = pr:next(minp.x, maxp.x-chunk_size+1) + local z0 = pr:next(minp.z, maxp.z-chunk_size+1) + local p0 = {x=x0, y=y0, z=z0} + for x1=0,chunk_size-1 do + for y1=0,chunk_size-1 do + for z1=0,chunk_size-1 do + if pr:next(1,inverse_chance) == 1 then + local x2 = x0+x1 + local y2 = y0+y1 + local z2 = z0+z1 + local p2 = {x=x2, y=y2, z=z2} + if minetest.get_node(p2).name == wherein then + minetest.set_node(p2, {name=name}) + end + end + end + end + end + end + end +end + + +-- ABM'S + + +minetest.register_abm({ +nodenames = {"seacoral:seacoraldirtcyan"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seacoral:coralcyan"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seacoral:seacoralsandcyan"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seacoral:coralcyan"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seacoral:seacoraldirtmagenta"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seacoral:coralmagenta"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seacoral:seacoralsandmagenta"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seacoral:coralmagenta"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seacoral:seacoraldirtaqua"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seacoral:coralaqua"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seacoral:seacoralsandaqua"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seacoral:coralaqua"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seacoral:seacoraldirtlime"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seacoral:corallime"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seacoral:seacoralsandlime"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seacoral:corallime"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seacoral:seacoraldirtskyblue"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seacoral:coralskyblue"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seacoral:seacoralsandskyblue"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seacoral:coralskyblue"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seacoral:seacoraldirtredviolet"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seacoral:coralredviolet"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seacoral:seacoralsandredviolet"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seacoral:coralredviolet"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"group:seacoral"}, +interval = 3, +chance = 1, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + local yyp = {x = pos.x, y = pos.y + 2, z = pos.z} + if ((minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") and + (minetest.get_node(yyp).name == "default:water_source" or + minetest.get_node(yyp).name == "noairblocks:water_sourcex")) then + local objs = minetest.env:get_objects_inside_radius(pos, 2) + for k, obj in pairs(objs) do + obj:set_hp(obj:get_hp()+ 1) + end + else + return + end +end +}) + + +-- OPTIONAL DEPENDENCY + + +if( minetest.get_modpath( "colormachine") ~= nil ) then + colormachine.basic_dye_sources = { "flowers:rose", "flowers:tulip", "flowers:dandelion_yellow", "seacoral:corallime", "default:cactus", "seacoral:coralaqua", "seacoral:coralcyan", "seacoral:coralskyblue", "flowers:geranium", "flowers:viola", "seacoral:coralmagenta", "seacoral:coralredviolet", "default:stone", "", "", "", "default:coal_lump" }; + else + return +end + + +-- ALIASES + + +minetest.register_alias("seadye:cyan","dye:cyan") +minetest.register_alias("seadye:magenta","dye:magenta") +minetest.register_alias("seadye:lime","dye:lime") +minetest.register_alias("seadye:aqua","dye:aqua") +minetest.register_alias("seadye:skyblue","dye:skyblue") +minetest.register_alias("seadye:redviolet","dye:redviolet") diff --git a/mods/sea/seacoral/readme.txt b/mods/sea/seacoral/readme.txt old mode 100755 new mode 100644 diff --git a/mods/sea/seacoral/textures/seacoral_coralaqua.png b/mods/sea/seacoral/textures/seacoral_coralaqua.png old mode 100755 new mode 100644 diff --git a/mods/sea/seacoral/textures/seacoral_coralcyan.png b/mods/sea/seacoral/textures/seacoral_coralcyan.png old mode 100755 new mode 100644 diff --git a/mods/sea/seacoral/textures/seacoral_corallime.png b/mods/sea/seacoral/textures/seacoral_corallime.png old mode 100755 new mode 100644 diff --git a/mods/sea/seacoral/textures/seacoral_coralmagenta.png b/mods/sea/seacoral/textures/seacoral_coralmagenta.png old mode 100755 new mode 100644 diff --git a/mods/sea/seacoral/textures/seacoral_coralredviolet.png b/mods/sea/seacoral/textures/seacoral_coralredviolet.png old mode 100755 new mode 100644 diff --git a/mods/sea/seacoral/textures/seacoral_coralskyblue.png b/mods/sea/seacoral/textures/seacoral_coralskyblue.png old mode 100755 new mode 100644 diff --git a/mods/sea/seaglass/depends.txt b/mods/sea/seaglass/depends.txt old mode 100755 new mode 100644 diff --git a/mods/sea/seaglass/init.lua b/mods/sea/seaglass/init.lua old mode 100755 new mode 100644 diff --git a/mods/sea/seaglass/readme.txt b/mods/sea/seaglass/readme.txt old mode 100755 new mode 100644 diff --git a/mods/sea/seaglass/textures/seaglass_seaglass.png b/mods/sea/seaglass/textures/seaglass_seaglass.png old mode 100755 new mode 100644 diff --git a/mods/sea/seaglass/textures/seaglass_seaglass_black.png b/mods/sea/seaglass/textures/seaglass_seaglass_black.png old mode 100755 new mode 100644 diff --git a/mods/sea/seaglass/textures/seaglass_seaglass_blue.png b/mods/sea/seaglass/textures/seaglass_seaglass_blue.png old mode 100755 new mode 100644 diff --git a/mods/sea/seaglass/textures/seaglass_seaglass_red.png b/mods/sea/seaglass/textures/seaglass_seaglass_red.png old mode 100755 new mode 100644 diff --git a/mods/sea/seaglass/textures/seaglass_seaglass_white.png b/mods/sea/seaglass/textures/seaglass_seaglass_white.png old mode 100755 new mode 100644 diff --git a/mods/sea/seaglass/textures/seaglass_seaglass_yellow.png b/mods/sea/seaglass/textures/seaglass_seaglass_yellow.png old mode 100755 new mode 100644 diff --git a/mods/sea/seagravel/depends.txt b/mods/sea/seagravel/depends.txt old mode 100755 new mode 100644 diff --git a/mods/sea/seagravel/init.lua b/mods/sea/seagravel/init.lua old mode 100755 new mode 100644 index 53472c0b..6f7da9a9 --- a/mods/sea/seagravel/init.lua +++ b/mods/sea/seagravel/init.lua @@ -10,6 +10,23 @@ minetest.register_node("seagravel:seagravel", { footstep = {name="default_gravel_footstep", gain=0.5}, dug = {name="default_gravel_footstep", gain=1.0}, }), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seagravel:seagravel_cyan", { @@ -21,6 +38,23 @@ minetest.register_node("seagravel:seagravel_cyan", { footstep = {name="default_gravel_footstep", gain=0.5}, dug = {name="default_gravel_footstep", gain=1.0}, }), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seagravel:seagravel_magenta", { @@ -32,6 +66,23 @@ minetest.register_node("seagravel:seagravel_magenta", { footstep = {name="default_gravel_footstep", gain=0.5}, dug = {name="default_gravel_footstep", gain=1.0}, }), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seagravel:seagravel_lime", { @@ -43,6 +94,23 @@ minetest.register_node("seagravel:seagravel_lime", { footstep = {name="default_gravel_footstep", gain=0.5}, dug = {name="default_gravel_footstep", gain=1.0}, }), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seagravel:seagravel_aqua", { @@ -54,6 +122,23 @@ minetest.register_node("seagravel:seagravel_aqua", { footstep = {name="default_gravel_footstep", gain=0.5}, dug = {name="default_gravel_footstep", gain=1.0}, }), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seagravel:seagravel_skyblue", { @@ -65,6 +150,23 @@ minetest.register_node("seagravel:seagravel_skyblue", { footstep = {name="default_gravel_footstep", gain=0.5}, dug = {name="default_gravel_footstep", gain=1.0}, }), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seagravel:seagravel_redviolet", { @@ -76,6 +178,23 @@ minetest.register_node("seagravel:seagravel_redviolet", { footstep = {name="default_gravel_footstep", gain=0.5}, dug = {name="default_gravel_footstep", gain=1.0}, }), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) @@ -90,7 +209,24 @@ stairs.register_stair_and_slab("seagravel", "seagravel:seagravel", default.node_sound_dirt_defaults({ footstep = {name="default_gravel_footstep", gain=0.5}, dug = {name="default_gravel_footstep", gain=1.0}, - })) + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end +})) stairs.register_stair_and_slab("seagravel_cyan", "seagravel:seagravel_cyan", {crumbly=2, falling_node=1}, @@ -100,7 +236,24 @@ stairs.register_stair_and_slab("seagravel_cyan", "seagravel:seagravel_cyan", default.node_sound_dirt_defaults({ footstep = {name="default_gravel_footstep", gain=0.5}, dug = {name="default_gravel_footstep", gain=1.0}, - })) + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end +})) stairs.register_stair_and_slab("seagravel_magenta", "seagravel:seagravel_magenta", {crumbly=2, falling_node=1}, @@ -110,7 +263,24 @@ stairs.register_stair_and_slab("seagravel_magenta", "seagravel:seagravel_magenta default.node_sound_dirt_defaults({ footstep = {name="default_gravel_footstep", gain=0.5}, dug = {name="default_gravel_footstep", gain=1.0}, - })) + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end +})) stairs.register_stair_and_slab("seagravel_lime", "seagravel:seagravel_lime", {cracky=3, stone=2}, @@ -120,7 +290,24 @@ stairs.register_stair_and_slab("seagravel_lime", "seagravel:seagravel_lime", default.node_sound_dirt_defaults({ footstep = {name="default_gravel_footstep", gain=0.5}, dug = {name="default_gravel_footstep", gain=1.0}, - })) + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end +})) stairs.register_stair_and_slab("seagravel_aqua", "seagravel:seagravel_aqua", {crumbly=2, falling_node=1}, @@ -130,7 +317,24 @@ stairs.register_stair_and_slab("seagravel_aqua", "seagravel:seagravel_aqua", default.node_sound_dirt_defaults({ footstep = {name="default_gravel_footstep", gain=0.5}, dug = {name="default_gravel_footstep", gain=1.0}, - })) + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end +})) stairs.register_stair_and_slab("seagravel_skyblue", "seagravel:seagravel_skyblue", {crumbly=2, falling_node=1}, @@ -140,7 +344,24 @@ stairs.register_stair_and_slab("seagravel_skyblue", "seagravel:seagravel_skyblue default.node_sound_dirt_defaults({ footstep = {name="default_gravel_footstep", gain=0.5}, dug = {name="default_gravel_footstep", gain=1.0}, - })) + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end +})) stairs.register_stair_and_slab("seagravel_redviolet", "seagravel:seagravel_redviolet", {crumbly=2, falling_node=1}, @@ -150,7 +371,24 @@ stairs.register_stair_and_slab("seagravel_redviolet", "seagravel:seagravel_redvi default.node_sound_dirt_defaults({ footstep = {name="default_gravel_footstep", gain=0.5}, dug = {name="default_gravel_footstep", gain=1.0}, - })) + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end +})) -- CRAFTING @@ -178,4 +416,4 @@ register_seagravel_craft("seagravel:seagravel_magenta", {'clams:crushedwhite', ' register_seagravel_craft("seagravel:seagravel_lime", {'clams:crushedwhite', 'default:gravel','dye:lime'}) register_seagravel_craft("seagravel:seagravel_aqua", {'clams:crushedwhite', 'default:gravel','dye:aqua'}) register_seagravel_craft("seagravel:seagravel_skyblue", {'clams:crushedwhite', 'default:gravel','dye:skyblue'}) -register_seagravel_craft("seagravel:seagravel_redviolet", {'clams:crushedwhite', 'default:gravel','dye:redviolet'}) \ No newline at end of file +register_seagravel_craft("seagravel:seagravel_redviolet", {'clams:crushedwhite', 'default:gravel','dye:redviolet'}) diff --git a/mods/sea/seagravel/init.lua~ b/mods/sea/seagravel/init.lua~ new file mode 100644 index 00000000..972d4175 --- /dev/null +++ b/mods/sea/seagravel/init.lua~ @@ -0,0 +1,377 @@ +-- NODES + + +minetest.register_node("seagravel:seagravel", { + description = "Sea gravel", + tiles = {"seagravel_seagravel.png"}, + is_ground_content = true, + groups = {crumbly=2, falling_node=1}, + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_gravel_footstep", gain=0.5}, + dug = {name="default_gravel_footstep", gain=1.0}, + }), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seagravel:seagravel_cyan", { + description = "Sea gravel cyan", + tiles = {"seagravel_seagravel_cyan.png"}, + is_ground_content = true, + groups = {crumbly=2, falling_node=1}, + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_gravel_footstep", gain=0.5}, + dug = {name="default_gravel_footstep", gain=1.0}, + }), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seagravel:seagravel_magenta", { + description = "Sea gravel magenta", + tiles = {"seagravel_seagravel_magenta.png"}, + is_ground_content = true, + groups = {crumbly=2, falling_node=1}, + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_gravel_footstep", gain=0.5}, + dug = {name="default_gravel_footstep", gain=1.0}, + }), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seagravel:seagravel_lime", { + description = "Sea gravel lime", + tiles = {"seagravel_seagravel_lime.png"}, + is_ground_content = true, + groups = {crumbly=2, falling_node=1}, + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_gravel_footstep", gain=0.5}, + dug = {name="default_gravel_footstep", gain=1.0}, + }), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seagravel:seagravel_aqua", { + description = "Sea gravel aqua", + tiles = {"seagravel_seagravel_aqua.png"}, + is_ground_content = true, + groups = {crumbly=2, falling_node=1}, + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_gravel_footstep", gain=0.5}, + dug = {name="default_gravel_footstep", gain=1.0}, + }), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seagravel:seagravel_skyblue", { + description = "Sea gravel skyblue", + tiles = {"seagravel_seagravel_skyblue.png"}, + is_ground_content = true, + groups = {crumbly=2, falling_node=1}, + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_gravel_footstep", gain=0.5}, + dug = {name="default_gravel_footstep", gain=1.0}, + }), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seagravel:seagravel_redviolet", { + description = "Sea gravel redviolet", + tiles = {"seagravel_seagravel_redviolet.png"}, + is_ground_content = true, + groups = {crumbly=2, falling_node=1}, + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_gravel_footstep", gain=0.5}, + dug = {name="default_gravel_footstep", gain=1.0}, + }), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + + +-- STAIRS + + +stairs.register_stair_and_slab("seagravel", "seagravel:seagravel", + {crumbly=2, falling_node=1}, + {"seagravel_seagravel.png"}, + "Seagravel stair", + "Seagravel slab", + default.node_sound_dirt_defaults({ + footstep = {name="default_gravel_footstep", gain=0.5}, + dug = {name="default_gravel_footstep", gain=1.0}, + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +})) + +stairs.register_stair_and_slab("seagravel_cyan", "seagravel:seagravel_cyan", + {crumbly=2, falling_node=1}, + {"seagravel_seagravel_cyan.png"}, + "Seagravel stair cyan", + "Seagravel slab cyan", + default.node_sound_dirt_defaults({ + footstep = {name="default_gravel_footstep", gain=0.5}, + dug = {name="default_gravel_footstep", gain=1.0}, + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +})) + +stairs.register_stair_and_slab("seagravel_magenta", "seagravel:seagravel_magenta", + {crumbly=2, falling_node=1}, + {"seagravel_seagravel_magenta.png"}, + "Seagravel stair magenta", + "Seagravel slab magenta", + default.node_sound_dirt_defaults({ + footstep = {name="default_gravel_footstep", gain=0.5}, + dug = {name="default_gravel_footstep", gain=1.0}, + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +})) + +stairs.register_stair_and_slab("seagravel_lime", "seagravel:seagravel_lime", + {cracky=3, stone=2}, + {"seagravel_seagravel_lime.png"}, + "Seagravel stair lime", + "Seagravel slab lime", + default.node_sound_dirt_defaults({ + footstep = {name="default_gravel_footstep", gain=0.5}, + dug = {name="default_gravel_footstep", gain=1.0}, + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +})) + +stairs.register_stair_and_slab("seagravel_aqua", "seagravel:seagravel_aqua", + {crumbly=2, falling_node=1}, + {"seagravel_seagravel_aqua.png"}, + "Seagravel stair aqua", + "Seagravel slab aqua", + default.node_sound_dirt_defaults({ + footstep = {name="default_gravel_footstep", gain=0.5}, + dug = {name="default_gravel_footstep", gain=1.0}, + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +})) + +stairs.register_stair_and_slab("seagravel_skyblue", "seagravel:seagravel_skyblue", + {crumbly=2, falling_node=1}, + {"seagravel_seagravel_skyblue.png"}, + "Seagravel stair skyblue ", + "Seagravel slab skyblue", + default.node_sound_dirt_defaults({ + footstep = {name="default_gravel_footstep", gain=0.5}, + dug = {name="default_gravel_footstep", gain=1.0}, + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +})) + +stairs.register_stair_and_slab("seagravel_redviolet", "seagravel:seagravel_redviolet", + {crumbly=2, falling_node=1}, + {"seagravel_seagravel_redviolet.png"}, + "Seagravel stair redviolet", + "Seagravel slab redviolet", + default.node_sound_dirt_defaults({ + footstep = {name="default_gravel_footstep", gain=0.5}, + dug = {name="default_gravel_footstep", gain=1.0}, + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +})) + + +-- CRAFTING + + +local register_seagravel_craft = function(output,recipe) + minetest.register_craft({ + type = 'shapeless', + output = output, + recipe = recipe, + }) +end + +register_seagravel_craft("seagravel:seagravel", {'clams:crushedwhite', 'default:gravel'}) + +register_seagravel_craft("seagravel:seagravel_cyan", {'seagravel:seagravel', 'dye:cyan'}) +register_seagravel_craft("seagravel:seagravel_magenta", {'seagravel:seagravel', 'dye:magenta'}) +register_seagravel_craft("seagravel:seagravel_lime", {'seagravel:seagravel', 'dye:lime'}) +register_seagravel_craft("seagravel:seagravel_aqua", {'seagravel:seagravel', 'dye:aqua'}) +register_seagravel_craft("seagravel:seagravel_skyblue", {'seagravel:seagravel', 'dye:skyblue'}) +register_seagravel_craft("seagravel:seagravel_redviolet", {'seagravel:seagravel', 'dye:redviolet'}) + +register_seagravel_craft("seagravel:seagravel_cyan", {'clams:crushedwhite', 'default:gravel','dye:cyan'}) +register_seagravel_craft("seagravel:seagravel_magenta", {'clams:crushedwhite', 'default:gravel','dye:magenta'}) +register_seagravel_craft("seagravel:seagravel_lime", {'clams:crushedwhite', 'default:gravel','dye:lime'}) +register_seagravel_craft("seagravel:seagravel_aqua", {'clams:crushedwhite', 'default:gravel','dye:aqua'}) +register_seagravel_craft("seagravel:seagravel_skyblue", {'clams:crushedwhite', 'default:gravel','dye:skyblue'}) +register_seagravel_craft("seagravel:seagravel_redviolet", {'clams:crushedwhite', 'default:gravel','dye:redviolet'}) diff --git a/mods/sea/seagravel/readme.txt b/mods/sea/seagravel/readme.txt old mode 100755 new mode 100644 diff --git a/mods/sea/seagravel/textures/seagravel_seagravel.png b/mods/sea/seagravel/textures/seagravel_seagravel.png old mode 100755 new mode 100644 diff --git a/mods/sea/seagravel/textures/seagravel_seagravel_aqua.png b/mods/sea/seagravel/textures/seagravel_seagravel_aqua.png old mode 100755 new mode 100644 diff --git a/mods/sea/seagravel/textures/seagravel_seagravel_cyan.png b/mods/sea/seagravel/textures/seagravel_seagravel_cyan.png old mode 100755 new mode 100644 diff --git a/mods/sea/seagravel/textures/seagravel_seagravel_lime.png b/mods/sea/seagravel/textures/seagravel_seagravel_lime.png old mode 100755 new mode 100644 diff --git a/mods/sea/seagravel/textures/seagravel_seagravel_magenta.png b/mods/sea/seagravel/textures/seagravel_seagravel_magenta.png old mode 100755 new mode 100644 diff --git a/mods/sea/seagravel/textures/seagravel_seagravel_redviolet.png b/mods/sea/seagravel/textures/seagravel_seagravel_redviolet.png old mode 100755 new mode 100644 diff --git a/mods/sea/seagravel/textures/seagravel_seagravel_skyblue.png b/mods/sea/seagravel/textures/seagravel_seagravel_skyblue.png old mode 100755 new mode 100644 diff --git a/mods/sea/sealamps/depends.txt b/mods/sea/sealamps/depends.txt old mode 100755 new mode 100644 diff --git a/mods/sea/sealamps/init.lua b/mods/sea/sealamps/init.lua old mode 100755 new mode 100644 diff --git a/mods/sea/sealamps/readme.txt b/mods/sea/sealamps/readme.txt old mode 100755 new mode 100644 diff --git a/mods/sea/sealamps/textures/sealamps_lantern.png b/mods/sea/sealamps/textures/sealamps_lantern.png old mode 100755 new mode 100644 diff --git a/mods/sea/sealamps/textures/sealamps_lantern_on_ceiling.png b/mods/sea/sealamps/textures/sealamps_lantern_on_ceiling.png old mode 100755 new mode 100644 diff --git a/mods/sea/sealamps/textures/sealamps_lantern_on_floor.png b/mods/sea/sealamps/textures/sealamps_lantern_on_floor.png old mode 100755 new mode 100644 diff --git a/mods/sea/sealamps/textures/sealamps_torch_animated.png b/mods/sea/sealamps/textures/sealamps_torch_animated.png old mode 100755 new mode 100644 diff --git a/mods/sea/sealamps/textures/sealamps_torch_on_ceiling_animated.png b/mods/sea/sealamps/textures/sealamps_torch_on_ceiling_animated.png old mode 100755 new mode 100644 diff --git a/mods/sea/sealamps/textures/sealamps_torch_on_floor.png b/mods/sea/sealamps/textures/sealamps_torch_on_floor.png old mode 100755 new mode 100644 diff --git a/mods/sea/sealamps/textures/sealamps_torch_on_floor_animated.png b/mods/sea/sealamps/textures/sealamps_torch_on_floor_animated.png old mode 100755 new mode 100644 diff --git a/mods/sea/seaplants/depends.txt b/mods/sea/seaplants/depends.txt old mode 100755 new mode 100644 diff --git a/mods/sea/seaplants/init.lua b/mods/sea/seaplants/init.lua old mode 100755 new mode 100644 index b9bc8372..4737a2cf --- a/mods/sea/seaplants/init.lua +++ b/mods/sea/seaplants/init.lua @@ -133,6 +133,23 @@ minetest.register_node("seaplants:seaplantssandkelpgreen", { groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, drop = 'default:sand', sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seaplants:seaplantsdirtkelpgreen", { @@ -151,6 +168,23 @@ minetest.register_node("seaplants:seaplantssandkelpbrown", { groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, drop = 'default:sand', sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seaplants:seaplantsdirtkelpbrown", { @@ -169,6 +203,23 @@ minetest.register_node("seaplants:seaplantssandseagrassgreen", { groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, drop = 'default:sand', sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seaplants:seaplantsdirtseagrassgreen", { @@ -187,6 +238,23 @@ minetest.register_node("seaplants:seaplantssandseagrassred", { groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, drop = 'default:sand', sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seaplants:seaplantsdirtseagrassred", { @@ -536,4 +604,4 @@ minetest.register_alias("seaplants:chewstickgreen","seaplants:kelpgreen") minetest.register_alias("seaplants:chewstickbrown","seaplants:kelpbrown") minetest.register_alias("seaplants:leavysnackgreen","seaplants:seagrassgreen") minetest.register_alias("seaplants:leavysnackblue","seaplants:seagrassred") -minetest.register_alias("seaplants:seasalad","seaplants:seasaladmix") \ No newline at end of file +minetest.register_alias("seaplants:seasalad","seaplants:seasaladmix") diff --git a/mods/sea/seaplants/init.lua~ b/mods/sea/seaplants/init.lua~ new file mode 100644 index 00000000..83891772 --- /dev/null +++ b/mods/sea/seaplants/init.lua~ @@ -0,0 +1,595 @@ +-- NODES + +minetest.register_node("seaplants:kelpgreen", { + description = "Green Kelp", + drawtype = "plantlike", + tiles = {"seaplants_kelpgreen.png"}, + inventory_image = "seaplants_kelpgreen.png", + wield_image = "seaplants_kelpgreen.png", + paramtype = "light", + walkable = false, + climbable = true, + drowning = 1, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.3, 0.3} + }, + post_effect_color = {a=64, r=100, g=100, b=200}, + groups = {snappy=3, seaplants=1, sea=1}, + sounds = default.node_sound_leaves_defaults(), + on_use = minetest.item_eat(1) +}) + +minetest.register_node("seaplants:kelpgreenmiddle", { + description = "Green Kelp middle", + drawtype = "plantlike", + tiles = {"seaplants_kelpgreenmiddle.png"}, + inventory_image = "seaplants_kelpgreenmiddle.png", + wield_image = "seaplants_kelpgreenmiddle.png", + paramtype = "light", + walkable = false, + climbable = true, + drowning = 1, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + post_effect_color = {a=64, r=100, g=100, b=200}, + groups = {snappy=3, seaplants=1, sea=1}, + drop = "seaplants:kelpgreen", + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("seaplants:kelpbrown", { + description = "Brown Kelp ", + drawtype = "plantlike", + tiles = {"seaplants_kelpbrown.png"}, + inventory_image = "seaplants_kelpbrown.png", + wield_image = "seaplants_kelpbrown.png", + paramtype = "light", + walkable = false, + climbable = true, + drowning = 1, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.3, 0.3} + }, + post_effect_color = {a=64, r=100, g=100, b=200}, + groups = {snappy=3, seaplants=1, sea=1}, + sounds = default.node_sound_leaves_defaults(), + on_use = minetest.item_eat(1) +}) + +minetest.register_node("seaplants:kelpbrownmiddle", { + description = "Brown Kelp middle", + drawtype = "plantlike", + tiles = {"seaplants_kelpbrownmiddle.png"}, + inventory_image = "seaplants_kelpbrownmiddle.png", + wield_image = "seaplants_kelpbrownmiddle.png", + paramtype = "light", + walkable = false, + climbable = true, + drowning = 1, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + post_effect_color = {a=64, r=100, g=100, b=200}, + groups = {snappy=3, seaplants=1, sea=1}, + drop = "seaplants:kelpbrown", + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("seaplants:seagrassgreen", { + description = "Green Seagrass", + drawtype = "plantlike", + tiles = {"seaplants_seagrassgreen.png"}, + inventory_image = "seaplants_seagrassgreen.png", + wield_image = "seaplants_seagrassgreen.png", + paramtype = "light", + walkable = false, + climbable = true, + drowning = 1, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.3, 0.3} + }, + post_effect_color = {a=64, r=100, g=100, b=200}, + groups = {snappy=3, seaplants=1, sea=1}, + sounds = default.node_sound_leaves_defaults(), + on_use = minetest.item_eat(1) +}) + +minetest.register_node("seaplants:seagrassred", { + description = "Red Seagrass", + drawtype = "plantlike", + tiles = {"seaplants_seagrassred.png"}, + inventory_image = "seaplants_seagrassred.png", + wield_image = "seaplants_seagrassred.png", + paramtype = "light", + walkable = false, + climbable = true, + drowning = 1, + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.3, 0.3} + }, + post_effect_color = {a=64, r=100, g=100, b=200}, + groups = {snappy=3, seaplants=1, sea=1}, + sounds = default.node_sound_leaves_defaults(), + on_use = minetest.item_eat(1) +}) + +minetest.register_node("seaplants:seaplantssandkelpgreen", { + description = "Sea plants sand kelp green", + tiles = {"default_sand.png"}, + is_ground_content = true, + groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, + drop = 'default:sand', + sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seaplants:seaplantsdirtkelpgreen", { + description = "Sea plants dirt kelp green", + tiles = {"default_dirt.png"}, + is_ground_content = true, + groups = {crumbly=3,soil=1, not_in_creative_inventory=1}, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("seaplants:seaplantssandkelpbrown", { + description = "Sea plants sand kelp brown", + tiles = {"default_sand.png"}, + is_ground_content = true, + groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, + drop = 'default:sand', + sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seaplants:seaplantsdirtkelpbrown", { + description = "Sea plants dirt kelp brown", + tiles = {"default_dirt.png"}, + is_ground_content = true, + groups = {crumbly=3,soil=1, not_in_creative_inventory=1}, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("seaplants:seaplantssandseagrassgreen", { + description = "Sea plants sand seagrass green", + tiles = {"default_sand.png"}, + is_ground_content = true, + groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, + drop = 'default:sand', + sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seaplants:seaplantsdirtseagrassgreen", { + description = "Sea plants dirt seagrass green", + tiles = {"default_dirt.png"}, + is_ground_content = true, + groups = {crumbly=3,soil=1, not_in_creative_inventory=1}, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("seaplants:seaplantssandseagrassred", { + description = "Sea plants sand seagrass red", + tiles = {"default_sand.png"}, + is_ground_content = true, + groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, + drop = 'default:sand', + sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seaplants:seaplantsdirtseagrassred", { + description = "Sea plants dirt seagrass red", + tiles = {"default_dirt.png"}, + is_ground_content = true, + groups = {crumbly=3,soil=1, not_in_creative_inventory=1}, + drop = 'default:dirt', + sounds = default.node_sound_dirt_defaults(), +}) + + +-- CRAFT ITEMS + + +minetest.register_craftitem("seaplants:seasaladmix", { + description = "Sea salad mix", + inventory_image = "seaplants_seasaladmix.png", + on_use = minetest.item_eat(6) +}) + + +-- CRAFTING + +minetest.register_craft({ + type = "shapeless", + output = "seaplants:seasaladmix", + recipe = {"seaplants:kelpgreen", "seaplants:kelpbrown", "seaplants:seagrassgreen", "seaplants:seagrassred"} +}) + + +-- SEAPLANTS SAND AND DIRT GENERATION + + +minetest.register_ore({ + ore_type = "scatter", + ore = "seaplants:seaplantssandkelpgreen", + wherein = "default:sand", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -14, + height_min = -31000, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seaplants:seaplantsdirtkelpgreen", + wherein = "default:dirt", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -14, + height_min = -31000, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seaplants:seaplantssandkelpbrown", + wherein = "default:sand", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -14, + height_min = -31000, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seaplants:seaplantsdirtkelpbrown", + wherein = "default:dirt", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -14, + height_min = -31000, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seaplants:seaplantssandseagrassgreen", + wherein = "default:sand", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -14, + height_min = -31000, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seaplants:seaplantsdirtseagrassgreen", + wherein = "default:dirt", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -14, + height_min = -31000, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seaplants:seaplantssandseagrassred", + wherein = "default:sand", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -14, + height_min = -31000, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seaplants:seaplantsdirtseagrassred", + wherein = "default:dirt", + clust_scarcity = 10*10*10, + clust_num_ores = 24, + clust_size = 4, + height_max = -14, + height_min = -31000, +}) + +local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, chunk_size, ore_per_chunk, height_min, height_max) + if maxp.y < height_min or minp.y > height_max then + return + end + local y_min = math.max(minp.y, height_min) + local y_max = math.min(maxp.y, height_max) + if chunk_size >= y_max - y_min + 1 then + return + end + local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1) + local pr = PseudoRandom(seed) + local num_chunks = math.floor(chunks_per_volume * volume) + local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk) + for i=1,num_chunks do + local y0 = pr:next(y_min, y_max-chunk_size+1) + if y0 >= height_min and y0 <= height_max then + local x0 = pr:next(minp.x, maxp.x-chunk_size+1) + local z0 = pr:next(minp.z, maxp.z-chunk_size+1) + local p0 = {x=x0, y=y0, z=z0} + for x1=0,chunk_size-1 do + for y1=0,chunk_size-1 do + for z1=0,chunk_size-1 do + if pr:next(1,inverse_chance) == 1 then + local x2 = x0+x1 + local y2 = y0+y1 + local z2 = z0+z1 + local p2 = {x=x2, y=y2, z=z2} + if minetest.get_node(p2).name == wherein then + minetest.set_node(p2, {name=name}) + end + end + end + end + end + end + end +end + + +-- ABM'S + + +minetest.register_abm({ +nodenames = {"seaplants:seaplantsdirtkelpgreen"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seaplants:kelpgreen"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seaplants:seaplantssandkelpgreen"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seaplants:kelpgreen"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seaplants:kelpgreen"}, +interval = 6, +chance = 3, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + local yyp = {x = pos.x, y = pos.y + 2, z = pos.z} + local yyyp = {x = pos.x, y = pos.y + 3, z = pos.z} + if minetest.get_node(pos).name == "seaplants:kelpgreen" and + (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + if (minetest.get_node(yyp).name == "default:water_source" or + minetest.get_node(yyp).name == "noairblocks:water_sourcex") then + if (minetest.get_node(yyyp).name == "default:water_source" or + minetest.get_node(yyyp).name == "noairblocks:water_sourcex") then + minetest.add_node(pos, {name = "seaplants:kelpgreenmiddle"}) + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seaplants:kelpgreen"}) + else + return + end + end + end +end +}) + +minetest.register_abm({ +nodenames = {"seaplants:seaplantsdirtkelpbrown"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seaplants:kelpbrown"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seaplants:seaplantssandkelpbrown"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seaplants:kelpbrown"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seaplants:kelpbrown"}, +interval = 6, +chance = 3, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + local yyp = {x = pos.x, y = pos.y + 2, z = pos.z} + local yyyp = {x = pos.x, y = pos.y + 3, z = pos.z} + if minetest.get_node(pos).name == "seaplants:kelpbrown" and + (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + if (minetest.get_node(yyp).name == "default:water_source" or + minetest.get_node(yyp).name == "noairblocks:water_sourcex") then + if (minetest.get_node(yyyp).name == "default:water_source" or + minetest.get_node(yyyp).name == "noairblocks:water_sourcex") then + minetest.add_node(pos, {name = "seaplants:kelpbrownmiddle"}) + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seaplants:kelpbrown"}) + else + return + end + end + end +end +}) + +minetest.register_abm({ +nodenames = {"seaplants:seaplantsdirtseagrassgreen"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seaplants:seagrassgreen"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seaplants:seaplantssandseagrassgreen"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seaplants:seagrassgreen"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seaplants:seaplantsdirtseagrassred"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seaplants:seagrassred"}) else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seaplants:seaplantssandseagrassred"}, +interval = 12, +chance = 12, +action = function(pos, node, active_object_count, active_object_count_wider) + local yp = {x = pos.x, y = pos.y + 1, z = pos.z} + if (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "seaplants:seagrassred"}) else + return + end +end +}) + + +-- ALIASES + + +minetest.register_alias("seaplants:stemsgreen","default:sand") +minetest.register_alias("seaplants:stemsbrown","default:dirt") +minetest.register_alias("seaplants:leafyblue","default:sand") +minetest.register_alias("seaplants:leafygreen","default:dirt") + +minetest.register_alias("seaplants:chewstickgreen","seaplants:kelpgreen") +minetest.register_alias("seaplants:chewstickbrown","seaplants:kelpbrown") +minetest.register_alias("seaplants:leavysnackgreen","seaplants:seagrassgreen") +minetest.register_alias("seaplants:leavysnackblue","seaplants:seagrassred") +minetest.register_alias("seaplants:seasalad","seaplants:seasaladmix") diff --git a/mods/sea/seaplants/readme.txt b/mods/sea/seaplants/readme.txt old mode 100755 new mode 100644 diff --git a/mods/sea/seaplants/textures/seaplants_kelpbrown.png b/mods/sea/seaplants/textures/seaplants_kelpbrown.png old mode 100755 new mode 100644 diff --git a/mods/sea/seaplants/textures/seaplants_kelpbrownmiddle.png b/mods/sea/seaplants/textures/seaplants_kelpbrownmiddle.png old mode 100755 new mode 100644 diff --git a/mods/sea/seaplants/textures/seaplants_kelpgreen.png b/mods/sea/seaplants/textures/seaplants_kelpgreen.png old mode 100755 new mode 100644 diff --git a/mods/sea/seaplants/textures/seaplants_kelpgreenmiddle.png b/mods/sea/seaplants/textures/seaplants_kelpgreenmiddle.png old mode 100755 new mode 100644 diff --git a/mods/sea/seaplants/textures/seaplants_seagrassgreen.png b/mods/sea/seaplants/textures/seaplants_seagrassgreen.png old mode 100755 new mode 100644 diff --git a/mods/sea/seaplants/textures/seaplants_seagrassred.png b/mods/sea/seaplants/textures/seaplants_seagrassred.png old mode 100755 new mode 100644 diff --git a/mods/sea/seaplants/textures/seaplants_seasaladmix.png b/mods/sea/seaplants/textures/seaplants_seasaladmix.png old mode 100755 new mode 100644 diff --git a/mods/sea/seastone/depends.txt b/mods/sea/seastone/depends.txt old mode 100755 new mode 100644 diff --git a/mods/sea/seastone/init.lua b/mods/sea/seastone/init.lua old mode 100755 new mode 100644 diff --git a/mods/sea/seastone/readme.txt b/mods/sea/seastone/readme.txt old mode 100755 new mode 100644 diff --git a/mods/sea/seastone/textures/seastone_seastone.png b/mods/sea/seastone/textures/seastone_seastone.png old mode 100755 new mode 100644 diff --git a/mods/sea/seastone/textures/seastone_seastone_aqua.png b/mods/sea/seastone/textures/seastone_seastone_aqua.png old mode 100755 new mode 100644 diff --git a/mods/sea/seastone/textures/seastone_seastone_cyan.png b/mods/sea/seastone/textures/seastone_seastone_cyan.png old mode 100755 new mode 100644 diff --git a/mods/sea/seastone/textures/seastone_seastone_lime.png b/mods/sea/seastone/textures/seastone_seastone_lime.png old mode 100755 new mode 100644 diff --git a/mods/sea/seastone/textures/seastone_seastone_magenta.png b/mods/sea/seastone/textures/seastone_seastone_magenta.png old mode 100755 new mode 100644 diff --git a/mods/sea/seastone/textures/seastone_seastone_redviolet.png b/mods/sea/seastone/textures/seastone_seastone_redviolet.png old mode 100755 new mode 100644 diff --git a/mods/sea/seastone/textures/seastone_seastone_skyblue.png b/mods/sea/seastone/textures/seastone_seastone_skyblue.png old mode 100755 new mode 100644 diff --git a/mods/sea/seastonebrick/depends.txt b/mods/sea/seastonebrick/depends.txt old mode 100755 new mode 100644 diff --git a/mods/sea/seastonebrick/init.lua b/mods/sea/seastonebrick/init.lua old mode 100755 new mode 100644 diff --git a/mods/sea/seastonebrick/readme.txt b/mods/sea/seastonebrick/readme.txt old mode 100755 new mode 100644 diff --git a/mods/sea/seastonebrick/textures/seastonebrick_seastonebrick.png b/mods/sea/seastonebrick/textures/seastonebrick_seastonebrick.png old mode 100755 new mode 100644 diff --git a/mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_aqua.png b/mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_aqua.png old mode 100755 new mode 100644 diff --git a/mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_cyan.png b/mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_cyan.png old mode 100755 new mode 100644 diff --git a/mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_lime.png b/mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_lime.png old mode 100755 new mode 100644 diff --git a/mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_magenta.png b/mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_magenta.png old mode 100755 new mode 100644 diff --git a/mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_redviolet.png b/mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_redviolet.png old mode 100755 new mode 100644 diff --git a/mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_skyblue.png b/mods/sea/seastonebrick/textures/seastonebrick_seastonebrick_skyblue.png old mode 100755 new mode 100644 diff --git a/mods/sea/seawrecks/depends.txt b/mods/sea/seawrecks/depends.txt old mode 100755 new mode 100644 diff --git a/mods/sea/seawrecks/init.lua b/mods/sea/seawrecks/init.lua old mode 100755 new mode 100644 index 45ac8385..36c69bac --- a/mods/sea/seawrecks/init.lua +++ b/mods/sea/seawrecks/init.lua @@ -7,6 +7,23 @@ minetest.register_node("seawrecks:woodship", { is_ground_content = true, groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) minetest.register_node("seawrecks:uboot", { @@ -939,4 +956,4 @@ local yp = {x = pos.x, y = pos.y + 8, z = pos.z} return end end -}) \ No newline at end of file +}) diff --git a/mods/sea/seawrecks/init.lua~ b/mods/sea/seawrecks/init.lua~ new file mode 100644 index 00000000..f31e1053 --- /dev/null +++ b/mods/sea/seawrecks/init.lua~ @@ -0,0 +1,956 @@ +-- NODES + + +minetest.register_node("seawrecks:woodship", { + description = "Sand for the wooden ship", + tiles = {"default_sand.png"}, + is_ground_content = true, + groups = {crumbly=3, falling_node=1, sand=1, soil=1, not_in_creative_inventory=1}, + sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +minetest.register_node("seawrecks:uboot", { + description = "Dirt for the U-boot", + tiles = {"default_dirt.png"}, + is_ground_content = true, + groups = {crumbly=3,soil=1, not_in_creative_inventory=1}, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_node("seawrecks:woodshipchest", { + description = "Wooden ship 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, not_in_creative_inventory=1}, + drop = 'default:chest', + 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", + "size[8,9]".. + "list[current_name;main;0,0;8,4;]".. + "list[current_player;main;0,5;8,4;]") + meta:set_string("infotext", "Woodship chest") + local inv = meta:get_inventory() + inv:set_size("main", 8*4) +meta:from_table({ + inventory = { + main = {[1] = "default:tree 99", [2] = "default:jungletree 99", [3] = "default:wood 99", [4] = "default:junglewood 99", [5] = "default:sapling 99", [6] = "default:junglesapling 99", [7] = "default:grass_1 99", [8] = "default:junglegrass 99", [32] = ""} + }, + fields = { + formspec = "size[8,9;]list[context;main;0,0;8,4;]list[current_player;main;0,5;8,4;]", + infotext = "Normal chest" + } +}) + 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, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to 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 stuff from chest at "..minetest.pos_to_string(pos)) + end, +}) + +minetest.register_node("seawrecks:ubootchest", { + description = "U-boot 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, not_in_creative_inventory=1}, + drop = 'default:chest', + legacy_facedir_simple = true, + is_ground_content = false, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + + local kind_of_price = math.floor(math.random()*2) + local amount_of_price = math.floor(math.random()*10)+1 + local ingot_price = {"default:steel_ingot","default:copper_ingot","default:gold_ingot","moreores:tin_ingot","moreore:silver_ingot"} + local price_group = {"",""} + choosen_ingot = math.floor(math.random()*5)+1 + price_group[1] = ingot_price[choosen_ingot].." "..amount_of_price + if (kind_of_price == 0) then -- Ingots AND mese + price_group[2] = "default:mese_crystal "..math.floor(math.random()*3)+1 + elseif (kind_of_price == 1) then -- Ingots AND diamond + price_group[2] = "default:diamond "..math.floor(math.random()*2)+1 + else + price_group[2] = "" + end + + meta:set_string("formspec", + "size[8,9]".. + "list[current_name;main;0,0;8,4;]".. + "list[current_player;main;0,5;8,4;]") + meta:set_string("infotext", "U-boot chest") + local inv = meta:get_inventory() + inv:set_size("main", 8*4) +meta:from_table({ + inventory = { + main = {[1] = price_group[1], [2] = price_group[2], [32] = ""} + --main = {[1] = "default:wood", [2] = "default:tree", [32] = ""} + }, + fields = { + formspec = "size[8,9;]list[context;main;0,0;8,4;]list[current_player;main;0,5;8,4;]", + infotext = "Normal chest" + } +}) + 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, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to 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 stuff from chest at "..minetest.pos_to_string(pos)) + end, +}) + + +-- WRECK GENERATION + + +minetest.register_ore({ + ore_type = "scatter", + ore = "seawrecks:woodship", + wherein = "default:sand", + clust_scarcity = 30*30*30, + clust_num_ores = 1, + clust_size = 12, + height_max = -4, + height_min = -31000, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "seawrecks:uboot", + wherein = "default:dirt", + clust_scarcity = 30*30*30, + clust_num_ores = 1, + clust_size = 12, + height_max = -8, + height_min = -31000, +}) + +local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, chunk_size, ore_per_chunk, height_min, height_max) + if maxp.y < height_min or minp.y > height_max then + return + end + local y_min = math.max(minp.y, height_min) + local y_max = math.min(maxp.y, height_max) + if chunk_size >= y_max - y_min + 1 then + return + end + local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1) + local pr = PseudoRandom(seed) + local num_chunks = math.floor(chunks_per_volume * volume) + local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk) + for i=1,num_chunks do + local y0 = pr:next(y_min, y_max-chunk_size+1) + if y0 >= height_min and y0 <= height_max then + local x0 = pr:next(minp.x, maxp.x-chunk_size+1) + local z0 = pr:next(minp.z, maxp.z-chunk_size+1) + local p0 = {x=x0, y=y0, z=z0} + for x1=0,chunk_size-1 do + for y1=0,chunk_size-1 do + for z1=0,chunk_size-1 do + if pr:next(1,inverse_chance) == 1 then + local x2 = x0+x1 + local y2 = y0+y1 + local z2 = z0+z1 + local p2 = {x=x2, y=y2, z=z2} + if minetest.get_node(p2).name == wherein then + minetest.set_node(p2, {name=name}) + end + end + end + end + end + end + end +end + + +-- ABM'S + + +minetest.register_abm({ +nodenames = {"seawrecks:woodship"}, +interval = 1, +chance = 1, +action = function(pos, node, active_object_count, active_object_count_wider) +local yp = {x = pos.x, y = pos.y + 3, z = pos.z} + if minetest.get_node(pos).name == "seawrecks:woodship" and + (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + minetest.add_node(pos, {name = "default:sand"}) + + pos.y = pos.y + 1 + pos.x = pos.x - 6 + + for a = 1, 11 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:tree"}) + end + + pos.z = pos.z + 1 + pos.x = pos.x - 10 + + for a = 1, 9 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:tree"}) + end + + pos.z = pos.z - 2 + pos.x = pos.x - 9 + + for a = 1, 9 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:tree"}) + end + + + pos.y = pos.y + 1 + pos.x = pos.x - 8 + pos.z = pos.z - 1 + + for a = 1, 7 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:tree"}) + end + + pos.z = pos.z + 4 + pos.x = pos.x - 7 + + for a = 1, 7 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:tree"}) + end + + pos.z = pos.z - 1 + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + + pos.z = pos.z - 1 + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:tree"}) + + pos.z = pos.z - 1 + pos.x = pos.x - 2 + minetest.add_node(pos, {name = "default:tree"}) + + pos.z = pos.z + 2 + pos.x = pos.x - 8 + minetest.add_node(pos, {name = "default:tree"}) + + pos.z = pos.z - 1 + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:tree"}) + + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:tree"}) + + pos.z = pos.z - 1 + pos.x = pos.x + 2 + minetest.add_node(pos, {name = "default:tree"}) + + + pos.y = pos.y + 1 + pos.z = pos.z - 1 + + for a = 1, 7 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.z = pos.z + 4 + pos.x = pos.x - 7 + + for a = 1, 7 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.z = pos.z - 1 + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + + pos.z = pos.z - 1 + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + + pos.z = pos.z - 1 + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + + pos.z = pos.z + 2 + pos.x = pos.x - 8 + minetest.add_node(pos, {name = "default:wood"}) + + pos.z = pos.z - 1 + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + + for a = 1, 3 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.z = pos.z - 1 + pos.x = pos.x + 4 + minetest.add_node(pos, {name = "default:wood"}) + + pos.z = pos.z + 1 + pos.x = pos.x + 3 + minetest.add_node(pos, {name = "default:wood"}) + + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "default:wood"}) + + pos.y = pos.y - 2 + minetest.add_node(pos, {name = "default:wood"}) + + pos.y = pos.y + 3 + pos.z = pos.z - 4 + + for a = 1, 7 do + pos.z = pos.z + 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.z = pos.z - 3 + + for a = 1, 2 do + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.y = pos.y + 1 + pos.z = pos.z - 3 + + for a = 1, 5 do + pos.z = pos.z + 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.y = pos.y + 1 + pos.z = pos.z - 2 + minetest.add_node(pos, {name = "default:wood"}) + + pos.y = pos.y - 7 + pos.z = pos.z + 1 + pos.x = pos.x - 2 + minetest.add_node(pos, {name = "seawrecks:woodshipchest"}) + + else + return + end +end +}) + +minetest.register_abm({ +nodenames = {"seawrecks:uboot"}, +interval = 1, +chance = 1, +action = function(pos, node, active_object_count, active_object_count_wider) +local yp = {x = pos.x, y = pos.y + 8, z = pos.z} + if minetest.get_node(pos).name == "seawrecks:uboot" and + (minetest.get_node(yp).name == "default:water_source" or + minetest.get_node(yp).name == "noairblocks:water_sourcex") then + minetest.add_node(pos, {name = "default:dirt"}) + + pos.y = pos.y + 1 + pos.x = pos.x - 15 + + for a = 1, 31 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:cobble"}) + end + + pos.z = pos.z + 1 + pos.x = pos.x + 1 + + for a = 1, 31 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:cobble"}) + end + + pos.z = pos.z + 1 + pos.x = pos.x +1 + + for a = 1, 27 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.z = pos.z - 3 + pos.x = pos.x + 1 + + for a = 1, 27 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.z = pos.z - 1 + pos.x = pos.x + 2 + + for a = 1, 21 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.z = pos.z + 5 + pos.x = pos.x + 1 + + for a = 1, 21 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.y = pos.y + 1 + pos.z = pos.z + 1 + pos.x = pos.x - 1 + + for a = 1, 21 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.z = pos.z - 7 + pos.x = pos.x + 1 + + for a = 1, 21 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.z = pos.z + 1 + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.x = pos.x + 24 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.z = pos.z + 5 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.x = pos.x - 22 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.z = pos.z - 1 + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.x = pos.x + 29 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.z = pos.z - 3 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.x = pos.x - 28 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.z = pos.z + 1 + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.x = pos.x + 32 + minetest.add_node(pos, {name = "default:stone"}) + + pos.z = pos.z + 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.x = pos.x - 32 + minetest.add_node(pos, {name = "default:stone"}) + + pos.y = pos.y + 1 + minetest.add_node(pos, {name = "default:wood"}) + + pos.x = pos.x + 32 + minetest.add_node(pos, {name = "default:wood"}) + + pos.z = pos.z - 1 + minetest.add_node(pos, {name = "default:wood"}) + + pos.x = pos.x - 32 + minetest.add_node(pos, {name = "default:wood"}) + + pos.z = pos.z - 1 + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + + pos.x = pos.x + 28 + minetest.add_node(pos, {name = "default:wood"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + + pos.z = pos.z + 3 + minetest.add_node(pos, {name = "default:wood"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + + pos.x = pos.x - 28 + minetest.add_node(pos, {name = "default:wood"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + + pos.z = pos.z + 1 + pos.x = pos.x + 2 + minetest.add_node(pos, {name = "default:wood"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:obsidian_glass"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + + pos.x = pos.x + 22 + minetest.add_node(pos, {name = "default:wood"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:obsidian_glass"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + + pos.z = pos.z + 1 + pos.x = pos.x - 2 + for a = 1, 3 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:obsidian_glass"}) + + for a = 1, 3 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:obsidian_glass"}) + + for a = 1, 3 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:obsidian_glass"}) + + for a = 1, 9 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.z = pos.z - 6 + pos.x = pos.x - 3 + minetest.add_node(pos, {name = "default:wood"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:obsidian_glass"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + + pos.x = pos.x + 22 + minetest.add_node(pos, {name = "default:wood"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:obsidian_glass"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + + pos.z = pos.z - 1 + pos.x = pos.x - 2 + + for a = 1, 3 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:obsidian_glass"}) + + for a = 1, 3 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:obsidian_glass"}) + + for a = 1, 3 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:obsidian_glass"}) + + for a = 1, 9 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.y = pos.y + 1 + pos.z = pos.z + 7 + pos.x = pos.x - 1 + for a = 1, 21 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.z = pos.z - 7 + pos.x = pos.x + 1 + + for a = 1, 21 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.z = pos.z + 1 + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.x = pos.x + 24 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.z = pos.z + 5 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.x = pos.x - 22 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.z = pos.z - 1 + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.x = pos.x + 29 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.z = pos.z - 3 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.x = pos.x - 28 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.z = pos.z + 1 + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.x = pos.x + 32 + minetest.add_node(pos, {name = "default:stone"}) + + pos.z = pos.z + 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.x = pos.x - 32 + minetest.add_node(pos, {name = "default:stone"}) + + pos.y = pos.y + 1 + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.x = pos.x + 28 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.z = pos.z - 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.x = pos.x - 28 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.z = pos.z - 1 + pos.x = pos.x + 2 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.x = pos.x + 22 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.z = pos.z + 3 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.x = pos.x - 22 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + + pos.z = pos.z + 1 + pos.x = pos.x + 2 + for a = 1, 21 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.z = pos.z - 5 + pos.x = pos.x + 1 + for a = 1, 21 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.y = pos.y + 1 + pos.z = pos.z + 2 + pos.x = pos.x - 4 + for a = 1, 3 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.x = pos.x + 21 + for a = 1, 3 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.z = pos.z + 1 + pos.x = pos.x + 1 + for a = 1, 3 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.x = pos.x - 21 + for a = 1, 3 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.z = pos.z + 2 + pos.x = pos.x + 3 + for a = 1, 4 do + pos.z = pos.z - 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.z = pos.z - 1 + pos.x = pos.x + 1 + for a = 1, 4 do + pos.z = pos.z + 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.x = pos.x + 6 + for a = 1, 13 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.z = pos.z - 3 + pos.x = pos.x + 1 + for a = 1, 13 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:stone"}) + end + + pos.z = pos.z + 1 + pos.x = pos.x - 1 + for a = 1, 13 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:tree"}) + end + + pos.z = pos.z + 1 + pos.x = pos.x + 1 + for a = 1, 13 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:tree"}) + end + + pos.z = pos.z - 3 + for a = 1, 6 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.z = pos.z + 5 + pos.x = pos.x - 1 + for a = 1, 6 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.y = pos.y + 1 + for a = 1, 4 do + pos.z = pos.z - 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.x = pos.x - 5 + pos.z = pos.z - 1 + for a = 1, 4 do + pos.z = pos.z + 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + for a = 1, 4 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.x = pos.x + 1 + pos.z = pos.z - 3 + for a = 1, 4 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.y = pos.y + 1 + pos.x = pos.x - 1 + pos.z = pos.z - 1 + for a = 1, 4 do + pos.z = pos.z + 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.x = pos.x + 5 + pos.z = pos.z + 1 + for a = 1, 4 do + pos.z = pos.z - 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + for a = 1, 4 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.x = pos.x - 1 + pos.z = pos.z + 3 + for a = 1, 4 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.y = pos.y + 1 + pos.x = pos.x - 1 + pos.z = pos.z - 1 + for a = 1, 2 do + pos.x = pos.x - 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.x = pos.x - 1 + pos.z = pos.z - 1 + for a = 1, 2 do + pos.x = pos.x + 1 + minetest.add_node(pos, {name = "default:wood"}) + end + + pos.y = pos.y - 7 + pos.x = pos.x +16 + pos.z = pos.z +3 + minetest.add_node(pos, {name = "seawrecks:ubootchest"}) + + else + return + end +end +}) diff --git a/mods/sea/seawrecks/readme.txt b/mods/sea/seawrecks/readme.txt old mode 100755 new mode 100644 diff --git a/mods/sea/stairsshine/README.txt b/mods/sea/stairsshine/README.txt old mode 100755 new mode 100644 diff --git a/mods/sea/stairsshine/depends.txt b/mods/sea/stairsshine/depends.txt old mode 100755 new mode 100644 diff --git a/mods/sea/stairsshine/init.lua b/mods/sea/stairsshine/init.lua old mode 100755 new mode 100644 diff --git a/mods/sea/whiteshell/depends.txt b/mods/sea/whiteshell/depends.txt old mode 100755 new mode 100644 diff --git a/mods/sea/whiteshell/init.lua b/mods/sea/whiteshell/init.lua old mode 100755 new mode 100644 index ffc10ac6..68ea5ca4 --- a/mods/sea/whiteshell/init.lua +++ b/mods/sea/whiteshell/init.lua @@ -20,6 +20,23 @@ minetest.register_node("whiteshell:whiteshell", { } }, sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end }) -- WHITESHELL GENERATION diff --git a/mods/sea/whiteshell/init.lua~ b/mods/sea/whiteshell/init.lua~ new file mode 100644 index 00000000..1eb077a0 --- /dev/null +++ b/mods/sea/whiteshell/init.lua~ @@ -0,0 +1,96 @@ +-- NODES + + +minetest.register_node("whiteshell:whiteshell", { + description = "White shell", + drawtype = "normal", +-- tiles = {"default_desert_sand.png^clams_crushedwhite.png"}, + tiles = {"default_desert_sand.png"}, + is_ground_content = true, + groups = {sand=1, crumbly=3, falling_node=1, sand=1, not_in_creative_inventory=1}, + drop = { + max_items = 2, + items = { + { + items = {'clams:crushedwhite'}, + }, + { + items = {'default:desert_sand'}, + } + } + }, + sounds = default.node_sound_sand_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return itemstack + end + local pn = placer:get_player_name() + if minetest.is_protected(pointed_thing.above, pn) then + return itemstack + end + minetest.env:add_node(pointed_thing.above, {name=itemstack:get_name()}) + local meta = minetest.env:get_meta(pointed_thing.above) + meta:set_string("owner", pn) + nodeupdate(pointed_thing.above) + return itemstack + end +}) + +-- WHITESHELL GENERATION + + +minetest.register_ore({ + ore_type = "scatter", + ore = "whiteshell:whiteshell", + wherein = "default:desert_sand", + clust_scarcity = 10*10*10, + clust_num_ores = 18, + clust_size = 6, + height_max = 31000, + height_min = -31000, +}) + + +local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, chunk_size, ore_per_chunk, height_min, height_max) + if maxp.y < height_min or minp.y > height_max then + return + end + local y_min = math.max(minp.y, height_min) + local y_max = math.min(maxp.y, height_max) + if chunk_size >= y_max - y_min + 1 then + return + end + local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1) + local pr = PseudoRandom(seed) + local num_chunks = math.floor(chunks_per_volume * volume) + local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk) + for i=1,num_chunks do + local y0 = pr:next(y_min, y_max-chunk_size+1) + if y0 >= height_min and y0 <= height_max then + local x0 = pr:next(minp.x, maxp.x-chunk_size+1) + local z0 = pr:next(minp.z, maxp.z-chunk_size+1) + local p0 = {x=x0, y=y0, z=z0} + for x1=0,chunk_size-1 do + for y1=0,chunk_size-1 do + for z1=0,chunk_size-1 do + if pr:next(1,inverse_chance) == 1 then + local x2 = x0+x1 + local y2 = y0+y1 + local z2 = z0+z1 + local p2 = {x=x2, y=y2, z=z2} + if minetest.get_node(p2).name == wherein then + minetest.set_node(p2, {name=name}) + end + end + end + end + end + end + end +end + + +-- ALIASES + + +minetest.register_alias("clams:whiteshell","whiteshell:whiteshell") diff --git a/mods/sea/whiteshell/readme.txt b/mods/sea/whiteshell/readme.txt old mode 100755 new mode 100644