Merge branch 'master' into patch-1

This commit is contained in:
IFRFSX 2020-04-07 19:26:21 +08:00 committed by GitHub
commit 38524378b1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 120 additions and 141 deletions

View file

@ -103,6 +103,13 @@ The contents of `creative.formspec_add` is appended to every creative inventory
page. Mods can use it to add additional formspec elements onto the default
creative inventory formspec to be drawn after each update.
Group overrides can be used for any registered item, node or tool. Use one of
the groups stated below to pick which category it will appear in.
node = 1 -- Appears in the Nodes category
tool = 1 -- Appears in the Tools category
craftitem = 1 -- Appears in the Items category
Chests API
----------

View file

@ -199,10 +199,29 @@ function creative.register_tab(name, title, items)
})
end
-- Sort registered items
local registered_nodes = {}
local registered_tools = {}
local registered_craftitems = {}
minetest.register_on_mods_loaded(function()
for name, def in pairs(minetest.registered_items) do
local group = def.groups or {}
if group.node or minetest.registered_nodes[name] then
registered_nodes[name] = def
elseif group.tool or minetest.registered_tools[name] then
registered_tools[name] = def
elseif group.craftitem or minetest.registered_craftitems[name] then
registered_craftitems[name] = def
end
end
end)
creative.register_tab("all", S("All"), minetest.registered_items)
creative.register_tab("nodes", S("Nodes"), minetest.registered_nodes)
creative.register_tab("tools", S("Tools"), minetest.registered_tools)
creative.register_tab("craftitems", S("Items"), minetest.registered_craftitems)
creative.register_tab("nodes", S("Nodes"), registered_nodes)
creative.register_tab("tools", S("Tools"), registered_tools)
creative.register_tab("craftitems", S("Items"), registered_craftitems)
local old_homepage_name = sfinv.get_homepage_name
function sfinv.get_homepage_name(player)

View file

@ -458,7 +458,7 @@ minetest.register_node("default:dirt_with_grass_footsteps", {
})
minetest.register_node("default:dirt_with_dry_grass", {
description = S("Dirt with Dry Grass"),
description = S("Dirt with Savanna Grass"),
tiles = {"default_dry_grass.png",
"default_dirt.png",
{name = "default_dirt.png^default_dry_grass_side.png",
@ -513,14 +513,14 @@ minetest.register_node("default:dirt_with_coniferous_litter", {
})
minetest.register_node("default:dry_dirt", {
description = S("Dry Dirt"),
description = S("Savanna Dirt"),
tiles = {"default_dry_dirt.png"},
groups = {crumbly = 3, soil = 1},
sounds = default.node_sound_dirt_defaults(),
})
minetest.register_node("default:dry_dirt_with_dry_grass", {
description = S("Dry Dirt with Dry Grass"),
description = S("Savanna Dirt with Savanna Grass"),
tiles = {"default_dry_grass.png", "default_dry_dirt.png",
{name = "default_dry_dirt.png^default_dry_grass_side.png",
tileable_vertical = false}},
@ -1497,7 +1497,7 @@ end
minetest.register_node("default:dry_grass_1", {
description = S("Dry Grass"),
description = S("Savanna Grass"),
drawtype = "plantlike",
waving = 1,
tiles = {"default_dry_grass_1.png"},
@ -1526,7 +1526,7 @@ minetest.register_node("default:dry_grass_1", {
for i = 2, 5 do
minetest.register_node("default:dry_grass_" .. i, {
description = S("Dry Grass"),
description = S("Savanna Grass"),
drawtype = "plantlike",
waving = 1,
tiles = {"default_dry_grass_" .. i .. ".png"},
@ -2816,7 +2816,10 @@ minetest.register_node("default:brick", {
description = S("Brick Block"),
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"default_brick.png"},
tiles = {
"default_brick.png^[transformFX",
"default_brick.png",
},
is_ground_content = false,
groups = {cracky = 3},
sounds = default.node_sound_stone_defaults(),

View file

@ -457,7 +457,7 @@ doors.register("door_wood", {
tiles = {{ name = "doors_door_wood.png", backface_culling = true }},
description = S("Wooden Door"),
inventory_image = "doors_item_wood.png",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
groups = {node = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
recipe = {
{"group:wood", "group:wood"},
{"group:wood", "group:wood"},
@ -470,7 +470,7 @@ doors.register("door_steel", {
description = S("Steel Door"),
inventory_image = "doors_item_steel.png",
protected = true,
groups = {cracky = 1, level = 2},
groups = {node = 1, cracky = 1, level = 2},
sounds = default.node_sound_metal_defaults(),
sound_open = "doors_steel_door_open",
sound_close = "doors_steel_door_close",
@ -485,7 +485,7 @@ doors.register("door_glass", {
tiles = {"doors_door_glass.png"},
description = S("Glass Door"),
inventory_image = "doors_item_glass.png",
groups = {cracky=3, oddly_breakable_by_hand=3},
groups = {node = 1, cracky=3, oddly_breakable_by_hand=3},
sounds = default.node_sound_glass_defaults(),
sound_open = "doors_glass_door_open",
sound_close = "doors_glass_door_close",
@ -500,7 +500,7 @@ doors.register("door_obsidian_glass", {
tiles = {"doors_door_obsidian_glass.png"},
description = S("Obsidian Glass Door"),
inventory_image = "doors_item_obsidian_glass.png",
groups = {cracky=3},
groups = {node = 1, cracky=3},
sounds = default.node_sound_glass_defaults(),
sound_open = "doors_glass_door_open",
sound_close = "doors_glass_door_close",

View file

@ -86,7 +86,7 @@ minetest.register_node("farming:soil_wet", {
})
minetest.register_node("farming:dry_soil", {
description = S("Dry Soil"),
description = S("Savanna Soil"),
tiles = {"default_dry_dirt.png^farming_soil.png", "default_dry_dirt.png"},
drop = "default:dry_dirt",
groups = {crumbly=3, not_in_creative_inventory=1, soil=2, grassland = 1, field = 1},
@ -99,7 +99,7 @@ minetest.register_node("farming:dry_soil", {
})
minetest.register_node("farming:dry_soil_wet", {
description = S("Wet Dry Soil"),
description = S("Wet Savanna Soil"),
tiles = {"default_dry_dirt.png^farming_soil_wet.png", "default_dry_dirt.png^farming_soil_wet_side.png"},
drop = "default:dry_dirt",
groups = {crumbly=3, not_in_creative_inventory=1, soil=3, wet = 1, grassland = 1, field = 1},

View file

@ -1,15 +1,12 @@
-- fire/init.lua
-- Global namespace for functions
fire = {}
-- Load support for MT game translation.
local S = minetest.get_translator("fire")
-- 'Enable fire' setting
local fire_enabled = minetest.settings:get_bool("enable_fire")
if fire_enabled == nil then
-- enable_fire setting not specified, check for disable_fire
@ -27,12 +24,9 @@ end
--
-- Flood flame function
local function flood_flame(pos, oldnode, newnode)
local function flood_flame(pos, _, newnode)
-- Play flame extinguish sound if liquid is not an 'igniter'
local nodedef = minetest.registered_items[newnode.name]
if not (nodedef and nodedef.groups and
nodedef.groups.igniter and nodedef.groups.igniter > 0) then
if minetest.get_item_group(newnode.name, "igniter") == 0 then
minetest.sound_play("fire_extinguish_flame",
{pos = pos, max_hear_distance = 16, gain = 0.15}, true)
end
@ -42,19 +36,16 @@ end
-- Flame nodes
minetest.register_node("fire:basic_flame", {
description = S("Fire"),
local fire_node = {
drawtype = "firelike",
tiles = {
{
tiles = {{
name = "fire_basic_flame_animated.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 1
},
},
}}
},
inventory_image = "fire_basic_flame.png",
paramtype = "light",
@ -64,61 +55,35 @@ minetest.register_node("fire:basic_flame", {
sunlight_propagates = true,
floodable = true,
damage_per_second = 4,
groups = {igniter = 2, dig_immediate = 3, not_in_creative_inventory = 1},
groups = {igniter = 2, dig_immediate = 3, fire = 1},
drop = "",
on_flood = flood_flame
}
on_timer = function(pos)
local f = minetest.find_node_near(pos, 1, {"group:flammable"})
if not fire_enabled or not f then
-- Basic flame node
local flame_fire_node = table.copy(fire_node)
flame_fire_node.groups.not_in_creative_inventory = 1
flame_fire_node.on_timer = function(pos)
if not minetest.find_node_near(pos, 1, {"group:flammable"}) then
minetest.remove_node(pos)
return
end
-- Restart timer
return true
end,
on_construct = function(pos)
if not fire_enabled then
minetest.remove_node(pos)
else
end
flame_fire_node.on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(30, 60))
end
end,
on_flood = flood_flame,
})
minetest.register_node("fire:basic_flame", flame_fire_node)
minetest.register_node("fire:permanent_flame", {
description = S("Permanent Flame"),
drawtype = "firelike",
tiles = {
{
name = "fire_basic_flame_animated.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 1
},
},
},
inventory_image = "fire_basic_flame.png",
paramtype = "light",
light_source = 13,
walkable = false,
buildable_to = true,
sunlight_propagates = true,
floodable = true,
damage_per_second = 4,
groups = {igniter = 2, dig_immediate = 3},
drop = "",
-- Permanent flame node
local permanent_fire_node = table.copy(fire_node)
permanent_fire_node.description = S("Permanent Flame")
on_flood = flood_flame,
})
-- Flint and steel
minetest.register_node("fire:permanent_flame", permanent_fire_node)
-- Flint and Steel
minetest.register_tool("fire:flint_and_steel", {
description = S("Flint and Steel"),
inventory_image = "fire_flint_steel.png",
@ -126,11 +91,8 @@ minetest.register_tool("fire:flint_and_steel", {
on_use = function(itemstack, user, pointed_thing)
local sound_pos = pointed_thing.above or user:get_pos()
minetest.sound_play(
"fire_flint_and_steel",
{pos = sound_pos, gain = 0.5, max_hear_distance = 8},
true
)
minetest.sound_play("fire_flint_and_steel",
{pos = sound_pos, gain = 0.5, max_hear_distance = 8}, true)
local player_name = user:get_player_name()
if pointed_thing.type == "node" then
local node_under = minetest.get_node(pointed_thing.under).name
@ -154,10 +116,11 @@ minetest.register_tool("fire:flint_and_steel", {
-- Wear tool
local wdef = itemstack:get_definition()
itemstack:add_wear(1000)
-- Tool break sound
if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then
minetest.sound_play(wdef.sound.breaks, {pos = sound_pos,
gain = 0.5}, true)
minetest.sound_play(wdef.sound.breaks,
{pos = sound_pos, gain = 0.5}, true)
end
return itemstack
end
@ -171,23 +134,21 @@ minetest.register_craft({
}
})
-- Override coalblock to enable permanent flame above
-- Coalblock is non-flammable to avoid unwanted basic_flame nodes
minetest.override_item("default:coalblock", {
after_destruct = function(pos, oldnode)
after_destruct = function(pos)
pos.y = pos.y + 1
if minetest.get_node(pos).name == "fire:permanent_flame" then
minetest.remove_node(pos)
end
end,
on_ignite = function(pos, igniter)
on_ignite = function(pos)
local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z}
if minetest.get_node(flame_pos).name == "air" then
minetest.set_node(flame_pos, {name = "fire:permanent_flame"})
end
end,
end
})
@ -195,24 +156,18 @@ minetest.override_item("default:coalblock", {
-- Sound
--
local flame_sound = minetest.settings:get_bool("flame_sound")
if flame_sound == nil then
-- Enable if no setting present
flame_sound = true
end
local flame_sound = minetest.settings:get_bool("flame_sound", true)
if flame_sound then
local handles = {}
local timer = 0
-- Parameters
local radius = 8 -- Flame node search radius around player
local cycle = 3 -- Cycle time for sound updates
-- Update sound for player
function fire.update_player_sound(player)
local player_name = player:get_player_name()
-- Search for flame nodes in radius around player
@ -264,16 +219,13 @@ if flame_sound then
fposmid = vector.divide(vector.add(fposmin, fposmax), 2)
end
-- Play sound
local handle = minetest.sound_play(
"fire_fire",
{
local handle = minetest.sound_play("fire_fire", {
pos = fposmid,
to_player = player_name,
gain = math.min(0.06 * (1 + flames * 0.125), 0.18),
max_hear_distance = 32,
loop = true, -- In case of lag
}
)
loop = true -- In case of lag
})
-- Store sound handle for this player
if handle then
handles[player_name] = handle
@ -282,7 +234,6 @@ if flame_sound then
end
-- Cycle for updating players sounds
minetest.register_globalstep(function(dtime)
timer = timer + dtime
if timer < cycle then
@ -297,7 +248,6 @@ if flame_sound then
end)
-- Stop sound and clear handle on player leave
minetest.register_on_leaveplayer(function(player)
local player_name = player:get_player_name()
if handles[player_name] then
@ -309,19 +259,14 @@ end
-- Deprecated function kept temporarily to avoid crashes if mod fire nodes call it
function fire.update_sounds_around(pos)
end
function fire.update_sounds_around() end
--
-- ABMs
--
if fire_enabled then
-- Ignite neighboring nodes, add basic flames
minetest.register_abm({
label = "Ignite flame",
nodenames = {"group:flammable"},
@ -334,11 +279,10 @@ if fire_enabled then
if p then
minetest.set_node(p, {name = "fire:basic_flame"})
end
end,
end
})
-- Remove flammable nodes around basic flame
minetest.register_abm({
label = "Remove flammable nodes",
nodenames = {"fire:basic_flame"},
@ -359,7 +303,6 @@ if fire_enabled then
minetest.remove_node(p)
minetest.check_for_falling(p)
end
end,
})
end
})
end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 646 B

After

Width:  |  Height:  |  Size: 594 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 459 B

After

Width:  |  Height:  |  Size: 205 B

View file

@ -106,7 +106,7 @@ function minetest.calculate_knockback(player, ...)
end
-- Check each player and apply animations
minetest.register_globalstep(function(dtime)
minetest.register_globalstep(function()
for _, player in pairs(minetest.get_connected_players()) do
local name = player:get_player_name()
local model_name = player_model[name]
@ -134,13 +134,13 @@ minetest.register_globalstep(function(dtime)
player_anim[name] = nil
player_sneak[name] = controls.sneak
end
if controls.LMB then
if controls.LMB or controls.RMB then
player_set_animation(player, "walk_mine", animation_speed_mod)
else
player_set_animation(player, "walk", animation_speed_mod)
end
elseif controls.LMB then
player_set_animation(player, "mine")
elseif controls.LMB or controls.RMB then
player_set_animation(player, "mine", animation_speed_mod)
else
player_set_animation(player, "stand", animation_speed_mod)
end

View file

@ -135,6 +135,7 @@ local function on_spawn(player)
if success then
player:set_pos(spawn_pos)
end
return success
end
minetest.register_on_newplayer(function(player)
@ -153,7 +154,5 @@ minetest.register_on_respawnplayer(function(player)
return
end
on_spawn(player)
return true
return on_spawn(player)
end)

View file

@ -82,18 +82,26 @@ local function update_clouds()
nobj_speedx = nobj_speedx or minetest.get_perlin(np_speedx)
nobj_speedz = nobj_speedz or minetest.get_perlin(np_speedz)
local n_density = nobj_density:get_2d({x = time, y = 0})
local n_thickness = nobj_thickness:get_2d({x = time, y = 0})
local n_speedx = nobj_speedx:get_2d({x = time, y = 0})
local n_speedz = nobj_speedz:get_2d({x = time, y = 0})
local n_density = nobj_density:get_2d({x = time, y = 0}) -- 0 to 1
local n_thickness = nobj_thickness:get_2d({x = time, y = 0}) -- 0 to 1
local n_speedx = nobj_speedx:get_2d({x = time, y = 0}) -- -1 to 1
local n_speedz = nobj_speedz:get_2d({x = time, y = 0}) -- -1 to 1
for _, player in ipairs(minetest.get_connected_players()) do
local humid = minetest.get_humidity(player:get_pos())
-- Default and classic density value is 0.4, make this happen
-- at humidity midvalue 50 when n_density is at midvalue 0.5.
-- density_max = 0.25 at humid = 0.
-- density_max = 0.8 at humid = 50.
-- density_max = 1.35 at humid = 100.
local density_max = 0.8 + ((humid - 50) / 50) * 0.55
player:set_clouds({
density = rangelim(humid / 100, 0.25, 1.0) * n_density,
-- Range limit density_max to always have occasional
-- small scattered clouds at extreme low humidity.
density = rangelim(density_max, 0.2, 1.0) * n_density,
thickness = math.max(math.floor(
rangelim(32 * humid / 100, 8, 32) * n_thickness
), 1),
), 2),
speed = {x = n_speedx * 4, z = n_speedz * 4},
})
end

View file

@ -223,7 +223,7 @@ if minetest.get_modpath("doors") then
description = S("Steel Bar Door"),
inventory_image = "xpanes_item_steel_bar.png",
protected = true,
groups = {cracky = 1, level = 2},
groups = {node = 1, cracky = 1, level = 2},
sounds = default.node_sound_metal_defaults(),
sound_open = "xpanes_steel_bar_door_open",
sound_close = "xpanes_steel_bar_door_close",
@ -241,7 +241,7 @@ if minetest.get_modpath("doors") then
tile_front = "xpanes_trapdoor_steel_bar.png",
tile_side = "xpanes_trapdoor_steel_bar_side.png",
protected = true,
groups = {cracky = 1, level = 2, door = 1},
groups = {node = 1, cracky = 1, level = 2, door = 1},
sounds = default.node_sound_metal_defaults(),
sound_open = "xpanes_steel_bar_door_open",
sound_close = "xpanes_steel_bar_door_close",