many worldgen mods and gonna try technic now

This commit is contained in:
2026-09-13 03:30:48 -06:00
parent bac6ac94a3
commit 548749cb1a
4811 changed files with 163271 additions and 1 deletions
@@ -0,0 +1,84 @@
-- support for i18n
local S = minetest.get_translator("nature_classic")
-- Blossoms and such
local function spawn_apple_under(pos)
local below = {
x = pos.x,
y = pos.y - 1,
z = pos.z,
}
if minetest.get_node(below).name == "air" then
minetest.swap_node(below, { name = "default:apple" })
end
end
minetest.register_node(":"..nature.blossom_node, {
description = S("Apple blossoms"),
drawtype = "allfaces_optional",
tiles = nature.blossom_textures,
paramtype = "light",
groups = nature.blossom_groups,
is_ground_content = false,
sounds = default.node_sound_leaves_defaults(),
waving = 1
})
default.register_leafdecay({
trunks = { nature.blossom_trunk },
leaves = { nature.blossom_node, nature.blossom_leaves, nature.blossom_fruit },
radius = nature.blossom_decay,
})
minetest.register_craft({
type = "fuel",
recipe = nature.blossom_node,
burntime = 2,
})
-- these ABMs can get heavy, so just enqueue the nodes
-- Adding Blossoms
-- Limit mass changes after block has not been loaded for some time:
-- Run ABM with higher frequency, but don't enqueue all blocks
minetest.register_abm({
nodenames = { nature.blossom_leaves },
interval = nature.blossom_delay / nature.leaves_blossom_chance,
chance = nature.leaves_blossom_chance,
action = function(pos, node, active_object_count, active_object_count_wider)
if math.random(nature.leaves_blossom_chance) == 1 then
nature.enqueue_node(pos, node, nature.blossom_node)
end
end
})
-- Removing blossoms
-- Limit mass changes after block has not been loaded for some time:
-- Run ABM with higher frequency, but don't enqueue all blocks
minetest.register_abm({
nodenames = { nature.blossom_node },
interval = nature.blossom_delay / nature.blossom_leaves_chance,
chance = nature.blossom_leaves_chance,
action = function(pos, node, active_object_count, active_object_count_wider)
if math.random(nature.blossom_leaves_chance) == 1 then
nature.enqueue_node(pos, node, nature.blossom_leaves)
end
end
})
-- Spawning apples
-- Limit mass changes after block has not been loaded for some time:
-- spawn apples with 25% chance, but with 4 times higher frequency
minetest.register_abm({
nodenames = { nature.blossom_node },
interval = nature.apple_delay / 4,
chance = nature.apple_chance,
action = function(pos, node, active_object_count, active_object_count_wider)
if math.random(4) == 1 and nature.dtime < 0.2 and not minetest.find_node_near(pos, nature.apple_spread, { "default:apple" }) then
spawn_apple_under(pos)
end
end
})
@@ -0,0 +1,6 @@
-- Set on which distance from water can the tree still grow.
-- Grows anywhere if set to -1.
nature.distance_from_water = 20
-- Minimum light level needed to grow. Default is 8, which means daylight.
nature.minimum_growth_light = 8
@@ -0,0 +1,82 @@
-- helper functions
local function process_blossom_queue_item()
local pos = nature.blossomqueue[1][1]
-- local node = nature.blossomqueue[1][2]
local replace = nature.blossomqueue[1][3]
if (nature.blossomqueue[1][3] == nature.blossom_node and not nature:is_near_water(pos)) then
table.remove(nature.blossomqueue, 1) -- don't grow if it's not near water, pop from queue.
return
end
nature:grow_node(pos, replace) -- now actually grow it.
table.remove(nature.blossomqueue, 1)
end
minetest.register_globalstep(function(dtime)
nature.dtime = dtime
if #nature.blossomqueue > 0 and dtime < 0.2 then
local i = 1
if dtime < 0.1 then
i = i + 4
end
if dtime < 0.05 then
i = i + 10
end
while #nature.blossomqueue > 0 and i > 0 do
process_blossom_queue_item()
i = i - 1
end
end
end)
function nature.enqueue_node(pos, node, replace)
local idx = #nature.blossomqueue
if idx < nature.blossomqueue_max then
local enqueue_prob
if idx < nature.blossomqueue_max * 0.8 then
enqueue_prob = 1
else
-- Reduce queue growth as it gets closer to its max.
enqueue_prob = 1 - (idx - nature.blossomqueue_max * 0.8) / (nature.blossomqueue_max * 0.2)
end
if enqueue_prob == 1 or math.random(100) <= 100 * enqueue_prob then
nature.blossomqueue[idx+1] = {}
nature.blossomqueue[idx+1][1] = pos
nature.blossomqueue[idx+1][2] = node
nature.blossomqueue[idx+1][3] = replace
end
end
end
local function set_young_node(pos)
local meta = minetest.get_meta(pos)
meta:set_int(nature.meta_blossom_time, minetest.get_gametime())
end
local function is_not_young(pos)
local meta = minetest.get_meta(pos)
local blossom_time = meta:get_int(nature.meta_blossom_time)
return not (blossom_time and minetest.get_gametime() - blossom_time < nature.blossom_duration)
end
function nature:grow_node(pos, nodename)
if pos ~= nil then
local light_enough = (minetest.get_node_light(pos, nil) or 0)
>= nature.minimum_growth_light
if is_not_young(pos) and light_enough then
minetest.swap_node(pos, { name = nodename })
set_young_node(pos)
minetest.log("info", nodename .. " has grown at " .. pos.x .. ","
.. pos.y .. "," .. pos.z)
end
end
end
function nature:is_near_water(pos)
return nature.distance_from_water == -1 or minetest.find_node_near(pos, nature.distance_from_water,
{ "default:water_source" }) ~= nil
end
@@ -0,0 +1,43 @@
-- Nature Classic mod
-- Originally by neko259
-- Nature is slowly capturing the world!
local current_mod_name = minetest.get_current_modname()
nature = {}
nature.blossomqueue = {}
nature.blossomqueue_max = 1000
nature.blossom_decay = 2
nature.blossom_trunk = "default:tree"
nature.blossom_node = "nature:blossom"
nature.blossom_leaves = "default:leaves"
nature.blossom_fruit = "default:apple"
nature.blossom_textures = { "default_leaves.png^nature_blossom.png" }
nature.blossom_groups = { snappy = 3, leafdecay = 1, leaves = 1, flammable = 2 }
if minetest.get_modpath("moretrees") then
nature.blossom_decay = moretrees.leafdecay_radius
nature.blossom_trunk = "moretrees:apple_tree_trunk"
nature.blossom_node = "moretrees:apple_blossoms"
nature.blossom_leaves = "moretrees:apple_tree_leaves"
nature.blossom_textures = { "moretrees_apple_tree_leaves.png^nature_blossom.png" }
nature.blossom_groups = { snappy = 3, leafdecay = 1, leaves = 1, flammable = 2, moretrees_leaves = 1 }
minetest.register_alias("nature:blossom", "default:leaves")
end
nature.leaves_blossom_chance = 15
nature.blossom_leaves_chance = 5
nature.blossom_delay = 3600
nature.apple_delay = 3600
nature.apple_chance = 10
nature.apple_spread = 2
nature.meta_blossom_time = "blossom_time"
nature.blossom_duration = nature.blossom_delay
dofile(minetest.get_modpath(current_mod_name) .. "/config.lua")
dofile(minetest.get_modpath(current_mod_name) .. "/global_function.lua")
dofile(minetest.get_modpath(current_mod_name) .. "/blossom.lua")
@@ -0,0 +1,2 @@
# textdomain: nature_classic
Apple blossoms=Apfelblüten
@@ -0,0 +1,2 @@
# textdomain: nature_classic
Apple blossoms=Fleurs de pommier
@@ -0,0 +1,10 @@
# textdomain: nature_classic
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Jolesh, 2022.
#
Apple blossoms=Poma Floroj
[Nature Classic] loaded!=[Nature Classic] ŝarĝita!
@@ -0,0 +1,2 @@
# textdomain: nature_classic
Apple blossoms=
@@ -0,0 +1,3 @@
name = nature_classic
depends = default
optional_depends = moretrees
Binary file not shown.

After

Width:  |  Height:  |  Size: 115 B