initial commit

initial commit
This commit is contained in:
tenplus1 2024-12-17 11:57:08 +00:00
commit 2b26cd1f86
4 changed files with 259 additions and 0 deletions

223
textures/init.lua Normal file
View File

@ -0,0 +1,223 @@
--[[
Moon Flower mod by MirceaKitsune
https://github.com/MirceaKitsune/minetest_mods_moonflower
Additional features by TenPlus1
]]--
-- global
moonflower = {
interval = tonumber(minetest.settings:get("moonflower_interval") or 60 * 5),
transform = minetest.settings:get_bool("moonflower_transform") ~= false
}
-- translation and text colour
local S = minetest.get_translator("moonflower")
local text_col = minetest.get_color_escape_sequence("#68d2ff")
-- closed moonflower
minetest.register_node("moonflower:moonflower_closed", {
description = S("Moon flower"),
drawtype = "plantlike",
tiles = { "moonflower_closed.png" },
inventory_image = "moonflower_closed.png",
wield_image = "moonflower_closed.png",
sunlight_propagates = true,
paramtype = "light",
walkable = false,
light_source = 4,
groups = {snappy = 3, dig_immediate = 1, flammable = 2, eatable = 2},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed", fixed = {-0.15, -0.5, -0.15, 0.15, 0.1, 0.15},
},
visual_scale = 0.6,
on_use = function(itemstack, player, pointed_thing)
player:override_day_night_ratio(1) -- see in darkness only on surface
minetest.chat_send_player(player:get_player_name(),
text_col .. S(">>> You can suddenly see much clearer in the moonlight!"))
minetest.sound_play("default_place_node", {
pitch = 1.4, pos = pos, gain = 1.0, max_hear_distance = 5}, true)
minetest.after(moonflower.interval, function(player)
if player and player:get_pos() then
player:override_day_night_ratio(nil) -- return to normal day/night vision
minetest.chat_send_player(player:get_player_name(),
text_col .. S(">>> Your vision returns to normal!"))
minetest.sound_play("default_place_node", {
pitch = 1.2, pos = pos, gain = 1.0, max_hear_distance = 5}, true)
end
end, player)
return minetest.do_item_eat(2, nil, itemstack, player, pointed_thing)
end
})
-- open moonflower
minetest.register_node("moonflower:moonflower_open", {
description = S("Moon flower"),
drawtype = "plantlike",
tiles = { "moonflower_open.png" },
inventory_image = "moonflower_open.png",
wield_image = "moonflower_open.png",
paramtype = "light",
sunlight_propagates = true,
paramtype = "light",
walkable = false,
light_source = 10,
groups = {not_in_creative_inventory = 1, snappy = 3, dig_immediate = 1, flammable = 2},
drop = "moonflower:moonflower_closed",
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed", fixed = {-0.15, -0.5, -0.15, 0.15, 0.1, 0.15},
},
visual_scale = 0.6
})
-- transform item list
local item_list = {
{"default:gold_lump", "default:gold_ingot"},
{"default:copper_lump", "default:copper_ingot"},
{"default:iron_lump", "pigiron:iron_ingot"},
{"pigiron:iron_charcoal_mix", "default:steel_ingot"},
{"moreores:silver_lump", "moreores:silver_ingot"},
{"moreores:mithril_lump", "moreores:mithril_ingot"},
{"nether:nether_lump", "nether:nether_ingot"},
{"default:tin_lump", "default:tin_ingot"},
{"lapis:pyrite_lump", "lapis:pyrite_ingot"},
{"bucket:bucket_water", "bucket:bucket_river_water"},
{"farming:sugar", "xanadu:cinnamon_powder"},
{"ethereal:charcoal_lump", "default:coal_lump"},
{"default:clay_lump", "default:clay_brick"},
{"ethereal:fire_dust 2", "ethereal:etherium_dust"}
}
-- global functions to add to or clear list
function moonflower.transform_item(from_item, to_item)
table.insert(item_list, {from_item, to_item})
end
function moonflower.clear_items()
item_list = {}
end
-- particle effect helper
local function particle_effect(pos)
minetest.add_particlespawner({
amount = 10,
time = 0.15,
minpos = {x = pos.x - 0.2, y = pos.y - 0, z = pos.z - 0.2},
maxpos = {x = pos.x + 0.2, y = pos.y + 0.2, z = pos.z + 0.2},
minvel = {x = -0.5, y = 0.5, z = -0.5},
maxvel = {x = 0.5, y = 1.5, z = 0.5},
minacc = {x = 0, y = 0.1, z = 0},
maxacc = {x = 0, y = 0.2, z = 0},
minexptime = 0.5,
maxexptime = 1.3,
minsize = .2,
maxsize = .8,
texture = "tnt_smoke.png",
glow = 7
})
end
-- Abm to open/close moonflower and do transformations
minetest.register_abm({
nodenames = {"moonflower:moonflower_closed", "moonflower:moonflower_open"},
interval = 11,
chance = 1,
action = function(pos, node)
local tod = minetest.get_timeofday()
-- choose the appropriate form of the moon flower
if node.name == "moonflower:moonflower_open"
and (tod > 0.2 and tod < 0.8) then
minetest.swap_node(pos, {name = "moonflower:moonflower_closed"})
elseif node.name == "xanadu:moonflower_closed"
and (tod > 0.8 or tod < 0.2)
and minetest.get_node_light(pos, 0.5) == 15 then
minetest.swap_node(pos, {name = "moonflower:moonflower_open"})
end
-- transform ingots back into ores
if moonflower.transform and node.name == "moonflower:moonflower_open" then
for _, ob in pairs(minetest.get_objects_inside_radius(pos, 0.5)) do
local ent = ob:get_luaentity()
if ent and ent.name == "__builtin:item" then
for n = 1, #item_list do
if ent.itemstring == item_list[n][1] then
local pos2 = ob:get_pos()
local obj2 = minetest.add_item(pos2, item_list[n][2])
if obj2 then
particle_effect(pos2)
obj2:set_velocity({
x = math.random() - 0.5,
y = 4,
z = math.random() - 0.5
})
end
minetest.sound_play("default_place_node", {
pitch = 1.6, pos = pos2,
gain = 0.5, max_hear_distance = 5}, true)
ob:remove() ; return -- only do 1 item every turn
end
end
end
end
end
end
})
-- craft into blue dye
minetest.register_craft( {
output = "dye:blue 4",
recipe = {{"moonflower:moonflower_closed"}}
})
-- add to mapgen
minetest.register_decoration({
name = "moonflower:moonflower_closed",
deco_type = "simple",
place_on = {"group:soil", "default:dirt_with_snow"},
sidelen = 80, fill_ratio = 0.0005,
y_min = 1, y_max = 200,
decoration = "moonflower:moonflower_closed",
spawn_by = {"group:tree", "ethereal:bamboo"}, num_spawn_by = 1
})

26
textures/license.txt Normal file
View File

@ -0,0 +1,26 @@
The MIT License (MIT)
Copyright (c) 2018 TenPlus1
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Textures by MirceaKitsune (CC0)
moonflower_closed.png
moonflower_open.png

5
textures/mod.conf Normal file
View File

@ -0,0 +1,5 @@
name = moonflower
description = Moon Flower, when touched by the moon, it opens up a casting light.
depends = default
optional_depends = tnt, lucky_block
min_minetest_version = 5.0

View File

@ -0,0 +1,5 @@
# interval in seconds moon vision lasts
moonflower_interval (Moon-vision interval) int 300
# should open moonflowers transform dropped items
moonflower_transform (Transform dropped items) bool true