2 Commits

Author SHA1 Message Date
tenplus1
965a14bb61 Add ores: rack with gold, deeprack with scattered mese (#90) 2025-10-09 17:54:37 +02:00
whosit
e0cc038f43 Fix find_nether_ground_y causing freezing (#89)
Refactor the function to use a while loop.
Remove useless recursive call causing freezing.
2025-09-16 20:50:59 +02:00
3 changed files with 59 additions and 4 deletions

View File

@@ -144,7 +144,7 @@ if nether.NETHER_REALM_ENABLED then
end
end
dofile(nether.path .. "/portal_examples.lua")
dofile(nether.path .. "/ores.lua")
-- Portals are ignited by right-clicking with a mese crystal fragment
nether.register_portal_ignition_item(

View File

@@ -495,8 +495,13 @@ function nether.find_nether_ground_y(target_x, target_z, start_y, player_name)
local minp = {x = minp_schem.x, y = 0, z = minp_schem.z}
local maxp = {x = maxp_schem.x, y = 0, z = maxp_schem.z}
for y = start_y, math_max(NETHER_FLOOR + BLEND, start_y - 4096), -1 do
local nval_cave = nobj_cave_point:get_3d({x = target_x, y = y, z = target_z})
local sample_pos = vector.new(target_x, 0, target_z) -- reuse to avoid making new tables
local y = start_y
local limit_y = math_max(NETHER_FLOOR + BLEND, start_y - 4096)
while y >= limit_y do
sample_pos.y = y
local nval_cave = nobj_cave_point:get_3d(sample_pos)
if nval_cave > TCAVE then -- Cavern
air = air + 1
@@ -509,12 +514,14 @@ function nether.find_nether_ground_y(target_x, target_z, start_y, player_name)
if nether.volume_is_natural_and_unprotected(minp, maxp, player_name) then
return portal_y
else -- Restart search a little lower
nether.find_nether_ground_y(target_x, target_z, y - 16, player_name)
air = 0 -- space above is unsuitable
y = y - 16
end
else -- Not enough space, reset air to zero
air = 0
end
end
y = y - 1
end
return math_max(start_y, NETHER_FLOOR + BLEND) -- Fallback

48
ores.lua Normal file
View File

@@ -0,0 +1,48 @@
local S = minetest.get_translator("nether")
minetest.register_node("nether:rack_with_gold", {
description = S("Nether Gold"),
tiles = {"nether_rack.png^default_mineral_gold.png"},
is_ground_content = true,
groups = {cracky = 3, level = 2, workable_with_nether_tools = 3, not_in_creative_inventory = 1},
drop = "default:gold_lump",
sounds = default.node_sound_stone_defaults()
})
minetest.register_node("nether:rack_deep_with_mese", {
description = S("Nether Mese"),
tiles = {"nether_rack_deep.png^default_mineral_mese.png"},
is_ground_content = true,
groups = {cracky = 3, level = 2, workable_with_nether_tools = 3, not_in_creative_inventory = 1},
drop = "default:mese_crystal_fragment 4",
sounds = default.node_sound_stone_defaults(),
})
local ore_ceiling = nether.DEPTH_CEILING - 128
local ore_floor = nether.DEPTH_FLOOR + 128
minetest.register_ore({
ore_type = "scatter",
ore = "nether:rack_with_gold",
wherein = "nether:rack",
clust_scarcity = 15 * 15 * 15,
clust_num_ores = 7,
clust_size = 5,
y_max = ore_ceiling,
y_min = ore_floor
})
minetest.register_ore({
ore_type = "scatter",
ore = "nether:rack_deep_with_mese",
wherein = "nether:rack_deep",
clust_scarcity = 15 * 15 * 15,
clust_num_ores = 7,
clust_size = 5,
y_max = ore_ceiling,
y_min = ore_floor,
})