update castles, cool_trees, plantlife, basic_materials, bees, bonemeal,

homedecor, currency, digilines, farming redo, item_drop, maptools,
mesecons, moreblocks, moreores, moretrees, pipeworks, signs_lib,
stained_glass, technic, titanium, unified_inventory, unifieddyes,and
worldedit.

added Tenplus1's ambience mod
This commit is contained in:
VanessaE 2020-11-01 13:02:30 -05:00
parent 2c901a7c67
commit e124b79ada
743 changed files with 19844 additions and 19003 deletions

22
ambience/README.md Normal file
View File

@ -0,0 +1,22 @@
Ambience Redo mod for Minetest
by TenPlus1
Based on Immersive Sounds .36 mod by Neuromancer and optimized to run on servers with new fire sounds added when Fire Redo mod is detected...
- 0.1 - Initial release
- 0.2 - Code change and new water sounds added
- 0.3 - Works with Fire Redo mod to provide fire sounds
- 0.4 - Code optimized
- 0.5 - Changed to kilbiths smaller sound files and removed canadianloon1, adjusted timings
- 0.6 - Using new find_nodes_in_area features to count nodes and speed up execution (thanks everamzah)
- 0.7 - Code tweaks and added Jungle sounds for day and night time
- 0.8 - Override default water sounds for 0.4.14 dev and above, add separate gain for each sound
- 0.9 - Plays music files on server or local client when found at midnight, files to be named "ambience_music.1.ogg" changing number each up to 9.
- 1.0 - Added icecrack sound when walking on snow/ice flows, also tidied code
- 1.1 - Using newer functions, Minetest 0.4.16 and above needed to run
- 1.2 - Added PlayerPlus compatibility, removed fire sounds, added volume changes
- 1.3 - Added API for use with other mods, code rewrite
- 1.4 - Re-ordered water sets to come before fire and lava, day/night sounds play when leaves around and above ground
- 1.5 - Added 'flame_sound' and fire redo check, code tidy and tweak, added ephemeral flag for background sounds.
Code license: MIT

91
ambience/api.txt Normal file
View File

@ -0,0 +1,91 @@
Ambience Lite API
=================
This short guide will show you how to add sound sets into ambience mod for the
api to use and play sounds accordingly. Please note that the order they are
added will affect sound checks, so high priority sets first.
Function Usage
==============
Adding Sound Set
----------------
ambience.add_set(set_name, def)
'set_name' contains the name of the sound set to add
'def' contains the following:
'frequency' how often the sound set is played (1 to 1000) higher is more
'nodes' contains a table of nodes needed for checks
'sound_check(def)' function to check if sounds can be played, def contains:
'player' player userdata
'pos' position of player
'tod' time of day
'totals' totals for each node e.g. def.totals["default:sand"]
'positions' position data for every node found
'head_node' name of node at player head level
'feet_node' nameof node at player foot level
This will let you add a set or sounds with the frequency it's used and check
function for it to play. If ephemeral is true then no handler will be used and sound will be played in background alongside other sounds.
e.g.
ambience.add_set("windy", {
frequency = 500,
nodes = {"default:sand"},
sounds = {
{name = "wind", length = 9, gain = 0.3},
{name = "desertwind", length = 8, gain = 0.3},
{name = "crow", length = 3, ephemeral = true},
},
sound_check = function(def)
local number = totals["default:sand"] or 0 -- yep, can also be nil
if number > 20 then
return "windy", 0.2 -- return set to play and optional gain volume
end
end,
})
Getting Sound Set
-----------------
ambience.get_set(set_name)
This returns a table containing all of the set information like example above.
e.g.
local myset = ambience.get_set("windy") -- returns everything inside {} above.
Deleting Sound Set
------------------
ambience.del_set(set_name)
This will remove a sound set from the list.
e.g.
ambience.del_set("windy")
Additional Commands
===================
Two volume commands have been added to set sound and music volume:
/svol (0.1 to 1.0)
/mvol (0.1 to 1.0) -- 0 can be used to stop music from playing when it begins
Music
=====
Music can be stored in the sounds folder either on server or locally and so long
as it is named 'ambience_music.1', 'ambience_music.2' etc. then it will select
a song randomly at midnight and play player.

3
ambience/depends.txt Normal file
View File

@ -0,0 +1,3 @@
default
fire?
playerplus?

1
ambience/description.txt Normal file
View File

@ -0,0 +1 @@
Adds realistic sound effects into your world.

327
ambience/init.lua Normal file
View File

@ -0,0 +1,327 @@
ambience = {}
-- override default water sounds
minetest.override_item("default:water_source", { sounds = {} })
minetest.override_item("default:water_flowing", { sounds = {} })
minetest.override_item("default:river_water_source", { sounds = {} })
minetest.override_item("default:river_water_flowing", { sounds = {} })
-- settings
local SOUNDVOLUME = 1.0
local MUSICVOLUME = 1.0
local play_music = minetest.settings:get_bool("ambience_music") ~= false
local pplus = minetest.get_modpath("playerplus")
local radius = 6
local playing = {}
local sound_sets = {} -- all the sounds and their settings
local sound_set_order = {} -- needed because pairs loops randomly through tables
local set_nodes = {} -- all the nodes needed for sets
-- global functions
-- add set to list
ambience.add_set = function(set_name, def)
if not set_name or not def then
return
end
sound_sets[set_name] = {
frequency = def.frequency or 50,
sounds = def.sounds,
sound_check = def.sound_check,
nodes = def.nodes
}
-- add set name to the sound_set_order table
local can_add = true
for i = 1, #sound_set_order do
if sound_set_order[i] == set_name then
can_add = false
end
end
if can_add then
table.insert(sound_set_order, set_name)
end
-- add any missing nodes to the set_nodes table
if def.nodes then
for i = 1, #def.nodes do
can_add = def.nodes[i]
for j = 1, #set_nodes do
if def.nodes[i] == set_nodes[j] then
can_add = false
end
end
if can_add then
table.insert(set_nodes, can_add)
end
end
end
end
-- return set from list using name
ambience.get_set = function(set_name)
if sound_sets[set_name] then
return sound_sets[set_name]
end
end
-- remove set from list
ambience.del_set = function(set_name)
sound_sets[set_name] = nil
local can_del = false
for i = 1, #sound_set_order do
if sound_set_order[i] == set_name then
can_del = i
end
end
if can_del then
table.remove(sound_set_order, can_del)
end
end
-- plays music and selects sound set
local get_ambience = function(player, tod, name)
-- play server or local music if available
if play_music and playing[name] then
-- play at midnight
if tod >= 0.0 and tod <= 0.01 then
if not playing[name].music then
playing[name].music = minetest.sound_play("ambience_music", {
to_player = player:get_player_name(),
gain = MUSICVOLUME
})
end
elseif tod > 0.1 and playing[name].music then
playing[name].music = nil
end
end
-- get foot and head level nodes at player position
local pos = player:get_pos()
pos.y = pos.y + 1.4 -- head level
local nod_head = pplus and playerplus[name].nod_head or minetest.get_node(pos).name
pos.y = pos.y - 1.2 -- foot level
local nod_feet = pplus and playerplus[name].nod_feet or minetest.get_node(pos).name
pos.y = pos.y - 0.2 -- reset pos
-- get all set nodes around player
local ps, cn = minetest.find_nodes_in_area(
{x = pos.x - radius, y = pos.y - radius, z = pos.z - radius},
{x = pos.x + radius, y = pos.y + radius, z = pos.z + radius}, set_nodes)
-- loop through sets in order and choose first that meets it's conditions
for n = 1, #sound_set_order do
local set = sound_sets[ sound_set_order[n] ]
if set and set.sound_check then
-- pass settings to function for condition check
local set_name, gain = set.sound_check({
player = player,
pos = pos,
tod = tod,
totals = cn,
positions = ps,
head_node = nod_head,
feet_node = nod_feet
})
-- if conditions met return set name and gain value
if set_name then
return set_name, gain
end
end
end
end
local timer = 0
local random = math.random
-- players routine
minetest.register_globalstep(function(dtime)
-- one second timer
timer = timer + dtime
if timer < 1 then return end
timer = 0
-- get list of players and set some variables
local players = minetest.get_connected_players()
local player_name, number, chance, ambience, handler, ok
local tod = minetest.get_timeofday()
-- loop through players
for n = 1, #players do
player_name = players[n]:get_player_name()
--local t1 = os.clock()
local set_name, MORE_GAIN = get_ambience(players[n], tod, player_name)
--print(string.format("elapsed time: %.4f\n", os.clock() - t1))
ok = true -- everything starts off ok
-- stop current sound if another set active or gain changed
if playing[player_name]
and playing[player_name].handler then
if playing[player_name].set ~= set_name
or (playing[player_name].set == set_name
and playing[player_name].gain ~= MORE_GAIN) then
--print ("-- change stop", set_name, playing[player_name].old_handler)
minetest.sound_stop(playing[player_name].old_handler)
playing[player_name].set = nil
playing[player_name].handler = nil
playing[player_name].gain = nil
else
ok = false -- sound set still playing, skip new sound
end
end
-- set random chance and reset seed
chance = random(1, 1000)
math.randomseed(tod + chance)
-- if chance is lower than set frequency then select set
if ok and set_name and chance < sound_sets[set_name].frequency then
-- choose random sound from set
number = random(#sound_sets[set_name].sounds)
ambience = sound_sets[set_name].sounds[number]
-- play sound
handler = minetest.sound_play(ambience.name, {
to_player = player_name,
gain = ((ambience.gain or 0.3) + (MORE_GAIN or 0)) * SOUNDVOLUME,
pitch = ambience.pitch or 1.0
}, ambience.ephemeral)
--print ("playing... " .. ambience.name .. " (" .. chance .. " < "
-- .. sound_sets[set_name].frequency .. ") @ ", MORE_GAIN, handler)
-- only continue if sound playing returns handler
if handler then
--print("-- current handler", handler)
-- set what player is currently listening to
playing[player_name] = {
set = set_name, gain = MORE_GAIN,
handler = handler, old_handler = handler
}
-- set timer to stop sound
minetest.after(ambience.length, function()
--print("-- after", set_name, handler)
-- make sure we are stopping same sound we started
if playing[player_name]
and playing[player_name].handler
and playing[player_name].old_handler == handler then
--print("-- timed stop", set_name, handler)
--minetest.sound_stop(playing[player_name].handler)
minetest.sound_stop(handler)
-- reset player variables and backup handler
playing[player_name] = {
set = nil, gain = nil,
handler = nil, old_handler = nil
}
end
end)
end
end
end
end)
-- sound volume command
minetest.register_chatcommand("svol", {
params = "<svol>",
description = "set sound volume (0.1 to 1.0)",
privs = {server = true},
func = function(name, param)
SOUNDVOLUME = tonumber(param) or SOUNDVOLUME
if SOUNDVOLUME < 0.1 then SOUNDVOLUME = 0.1 end
if SOUNDVOLUME > 1.0 then SOUNDVOLUME = 1.0 end
return true, "Sound volume set to " .. SOUNDVOLUME
end,
})
-- music volume command (0 stops music)
minetest.register_chatcommand("mvol", {
params = "<mvol>",
description = "set music volume (0.1 to 1.0)",
privs = {server = true},
func = function(name, param)
MUSICVOLUME = tonumber(param) or MUSICVOLUME
-- ability to stop music just as it begins
if MUSICVOLUME == 0 and playing[name].music then
minetest.sound_stop(playing[name].music)
end
if MUSICVOLUME < 0.1 then MUSICVOLUME = 0.1 end
if MUSICVOLUME > 1.0 then MUSICVOLUME = 1.0 end
return true, "Music volume set to " .. MUSICVOLUME
end,
})
-- load default sound sets
dofile(minetest.get_modpath("ambience") .. "/soundsets.lua")
print("[MOD] Ambience Lite loaded")

1
ambience/mod.conf Normal file
View File

@ -0,0 +1 @@
name = ambience

BIN
ambience/screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

View File

@ -0,0 +1,2 @@
# If enabled will play a random music file from ./minetest/sounds at midnight
ambience_music (Ambience music) bool true

View File

@ -0,0 +1,105 @@
-----------Sound Lic:
--Nightime Sound, Recorded by Mike Koenig, License: Attribution 3.0 http://soundbible.com/951-Nightime.html
--Crickets At Night Sound, License: Attribution 3.0 | Recorded by Mike Koenig |http://soundbible.com/365-Crickets-At-Night.html
--Medium Pack Of Wolves Howling, License: Public Domain | Recorded by fws.gov, http://soundbible.com/277-Medium-Pack-Of-Wolves-Howling.html
--Horned Owl Sound, License: Attribution 3.0 | Recorded by Mike Koenig , http://soundbible.com/1851-Horned-Owl.html
--Bats In Cave Sound, License: Attr-Noncommercial 3.0 | Recorded by Mike Koenig , http://soundbible.com/1939-Bats-In-Cave.html
--Spooky Water Drops Sound, License: Attribution 3.0 | Recorded by Mike Koenig, http://soundbible.com/380-Spooky-Water-Drops.html
-- Single Water Droplet Sound, License: Attribution 3.0 | Recorded by Mike Koenig, http://soundbible.com/384-Single-Water-Droplet.html
--HollowWind, Black Boe, Creative Commons 0 License, http://www.freesound.org/people/Black%20Boe/sounds/22331/
--drippingwater*.ogg sounds: CC0, Dripping Water Mod, by kddekadenz, http://minetest.net/forum/viewtopic.php?id=1688
--best cardinal bird: License: Attribution 3.0 | Recorded by PsychoBird, http://soundbible.com/1515-Best-Cardinal-Bird.html
--birdsongnl: the Attribution License, HerbertBoland, http://www.freesound.org/people/HerbertBoland/sounds/28312/ (end)
--robin2: Attribution License, reinsamba, http://www.freesound.org/people/reinsamba/sounds/32479/ (end)
--Craw.WAV, Attribution License, inchadney, http://www.freesound.org/people/inchadney/sounds/52450/
--bluejay.wav, Creative Commons 0 License, UncleSigmund, http://www.freesound.org/people/UncleSigmund/sounds/42382/
--scuba1*.ogg- digifishmusic, Attribution License, http://www.freesound.org/people/digifishmusic/sounds/45521/
--Underwater Pool - Attribution 3.0 | Recorded by Mike Koenig, http://soundbible.com/1660-Underwater-Pool.html
--dolphin_screaming - Creative Commons 0 License, felix.blume, http://www.freesound.org/people/felix.blume/sounds/161691/
--dolphins - Attribution Noncommercial License, acclivity, http://www.freesound.org/people/acclivity/sounds/13691/
ComboWind uses:
--wind-in-the-trees -Attribution License, laurent, http://www.freesound.org/people/laurent/sounds/16995/
--drygrassInWind- Creative Commons 0 License, felix.blume, http://www.freesound.org/people/felix.blume/sounds/146436/
--Splash: Attribution 3.0 | Recorded by BlastwaveFx.com, http://soundbible.com/546-Fish-Splashing.html
--small_waterfall Attribution License, volivieri, http://www.freesound.org/people/volivieri/sounds/38390/
--Lake_Waves_2*, Attribution License, Benboncan, http://www.freesound.org/people/Benboncan/sounds/67884/
--water_swimming_splashing*, Attribution Noncommercial License, Robinhood76, http://www.freesound.org/people/Robinhood76/sounds/79657/
--earth01a, Creative Commons 0 License., Halion , http://www.freesound.org/people/Halion/sounds/17785
--fiji_beach, Creative Commons 0 License, c97059890, http://www.freesound.org/people/c97059890/sounds/21754/
--seagull, Attribution Noncommercial License., hazure, http://www.freesound.org/people/hazure/sounds/23707/,
desert:
coyote2, Attribution License, rogerforeman, http://www.freesound.org/people/rogerforeman/sounds/68068/
http://www.freesound.org/people/Proxima4/sounds/104319/
Desert Monolith.wav, Creative Commons 0 License, Proxima4, http://www.freesound.org/people/Proxima4/sounds/104319/
Rattlesnake Rattle, Public Domain, fws.gov, http://soundbible.com/237-Rattlesnake-Rattle.html
flying:
crystal_airlines: Attribution License, suonho, http://www.freesound.org/people/suonho/sounds/56364/
----------------Not used yet:
desert:
Desert Simple.wav, Creative Commons 0 License, Proxima4, http://www.freesound.org/people/Proxima4/sounds/104320/
313hummer (Jordan Craige)
--echos http://soundcloud.com/jordan-craige/echos-1
Creative Commons Attribution license (reuse allowed) Attribution 3.0 Unported (CC BY 3.0)
Not Used:--FoamOfTheSea http://soundcloud.com/jordan-craige/foam-of-the-sea
xi-intersection:
http://soundcloud.com/xi-intersection/mass-effect-uncharted-worlds Creative Commons License
--not used:
http://soundcloud.com/xi-intersection/donkey-kong-country-2-flight
http://soundcloud.com/kogyo/kogyo-skalar-m1
lava:
http://www.freesound.org/people/Halion/sounds/17785/ (almost as good cc) (combine with rocks falling?)
http://www.freesound.org/people/pushtobreak/sounds/17823/ (attrib non cc really good)
http://www.freesound.org/people/klankbeeld/sounds/123970/ (horror rhythm)
Rockfall in mine.wav http://www.freesound.org/people/Benboncan/sounds/60085/
http://www.freesound.org/people/snotch/sounds/96175/ (mud volcano)
--natural night sounds in Boquete.wav, Attribution License, laurent, http://www.freesound.org/people/laurent/sounds/15851/
http://www.freesound.org/people/Dynamicell/sounds/17553/
http://www.freesound.org/people/juskiddink/sounds/78955/ aspen tree in wind
http://www.freesound.org/people/Benboncan/sounds/69761/ wind in hedge birds animals
ButterflyTea:
Creative Commons : Attribution-Noncommercial-Share Alike 3.0
http://www.jamendo.com/en/track/904012/dance-of-magical-flowers
http://www.jamendo.com/en/track/904013/magic-of-the-seventh-world
http://www.jamendo.com/en/track/904016/in-search-of-the-soul
http://www.freesfx.co.uk/soundeffects/forests-jungles/
zero-project
icecrack.ogg by figowitz (http://freesound.org/people/Figowitz/sounds/67881/)

BIN
ambience/sounds/beach.ogg Normal file

Binary file not shown.

BIN
ambience/sounds/beach_2.ogg Normal file

Binary file not shown.

BIN
ambience/sounds/bird1.ogg Normal file

Binary file not shown.

BIN
ambience/sounds/bird2.ogg Normal file

Binary file not shown.

BIN
ambience/sounds/bluejay.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
ambience/sounds/coyote.ogg Normal file

Binary file not shown.

BIN
ambience/sounds/craw.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
ambience/sounds/cricket.ogg Normal file

Binary file not shown.

BIN
ambience/sounds/deer.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
ambience/sounds/frog.ogg Normal file

Binary file not shown.

BIN
ambience/sounds/gull.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
ambience/sounds/lava.ogg Normal file

Binary file not shown.

BIN
ambience/sounds/peacock.ogg Normal file

Binary file not shown.

BIN
ambience/sounds/river.ogg Normal file

Binary file not shown.

BIN
ambience/sounds/robin.ogg Normal file

Binary file not shown.

BIN
ambience/sounds/scuba.ogg Normal file

Binary file not shown.

BIN
ambience/sounds/seagull.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
ambience/sounds/wind.ogg Normal file

Binary file not shown.

BIN
ambience/sounds/wolves.ogg Normal file

Binary file not shown.

429
ambience/soundsets.lua Normal file
View File

@ -0,0 +1,429 @@
--[[
Default Sound Sets
------------------
Order is very important when adding a sound set so it will play a certain
set of sounds before any another.
--]]
-- Underwater sounds play when player head is submerged
ambience.add_set("underwater", {
frequency = 1000,
sounds = {
{name = "scuba", length = 8}
},
sound_check = function(def)
if minetest.registered_nodes[def.head_node]
and minetest.registered_nodes[def.head_node].groups.water then
return "underwater"
end
end
})
-- Splashing sound plays when player walks inside water nodes
ambience.add_set("splash", {
frequency = 1000,
sounds = {
{name = "swim_splashing", length = 3},
},
sound_check = function(def)
if minetest.registered_nodes[def.feet_node]
and minetest.registered_nodes[def.feet_node].groups.water then
local control = def.player:get_player_control()
if control.up or control.down or control.left or control.right then
return "splash"
end
end
end
})
-- check for env_sounds mod, if not found enable water flowing sounds
if not minetest.get_modpath("env_sounds") then
-- Water sound plays when near flowing water
ambience.add_set("flowing_water", {
frequency = 1000,
sounds = {
{name = "waterfall", length = 6}
},
nodes = {"default:water_flowing"},
sound_check = function(def)
local c = (def.totals["default:water_flowing"] or 0)
if c > 40 then
return "flowing_water", 0.5
elseif c > 5 then
return "flowing_water"
end
end
})
-- River sound plays when near flowing river
ambience.add_set("river", {
frequency = 1000,
sounds = {
{name = "river", length = 4, gain = 0.1}
},
nodes = {"default:river_water_flowing"},
sound_check = function(def)
local c = (def.totals["default:river_water_flowing"] or 0)
if c > 20 then
return "river", 0.5
elseif c > 5 then
return "river"
end
end
})
else
print ("[Ambience] found env_sounds, flowing water sounds disabled.")
end
-- Only add fire sounds set if flame_sound is disabled or fire redo active
local flame_sound = minetest.settings:get_bool("flame_sound", true)
local fire_redo = minetest.get_modpath("fire") and fire.mod and fire.mod == "redo"
if flame_sound and not fire_redo then
print ("[Ambience] fire sounds not enabled, already active in fire mod.")
else
-- Small fire sound plays when near lower than 9 flames
ambience.add_set("smallfire", {
frequency = 1000,
sounds = {
{name = "fire_small", length = 6, gain = 0.1}
},
nodes = {"fire:basic_flame", "fire:permanent_flame"},
sound_check = function(def)
local c = (def.totals["fire:basic_flame"] or 0)
+ (def.totals["fire:permanent_flame"] or 0)
if c > 5 and c < 9 then
return "smallfire", 0.5
elseif c > 0 and c < 9 then
return "smallfire"
end
end
})
-- Large fire sound plays when near more than 9 flames
ambience.add_set("largefire", {
frequency = 1000,
sounds = {
{name = "fire_large", length = 8, gain = 0.4}
},
sound_check = function(def)
-- fire nodes were added in last set, so don't need to be added in this one
local c = (def.totals["fire:basic_flame"] or 0)
+ (def.totals["fire:permanent_flame"] or 0)
if c > 20 then
return "largefire", 0.5
elseif c > 8 then
return "largefire"
end
end
})
end
-- Lava sound plays when near lava
ambience.add_set("lava", {
frequency = 1000,
sounds = {
{name = "lava", length = 7}
},
nodes = {"default:lava_source", "default:lava_flowing"},
sound_check = function(def)
local c = (def.totals["default:lava_source"] or 0)
+ (def.totals["default:lava_flowing"] or 0)
if c > 20 then
return "lava", 0.5
elseif c > 5 then
return "lava"
end
end
})
-- Beach sounds play when below y-pos 6 and 150+ water source found
ambience.add_set("beach", {
frequency = 40,
sounds = {
{name = "seagull", length = 4.5, ephemeral = true},
{name = "beach", length = 13},
{name = "gull", length = 1, ephemeral = true},
{name = "beach_2", length = 6}
},
nodes = {"default:water_source"},
sound_check = function(def)
local c = (def.totals["default:water_source"] or 0)
if def.pos.y < 6 and def.pos.y > 0 and c > 150 then
return "beach"
end
end
})
-- Ice sounds play when 100 or more ice are nearby
ambience.add_set("ice", {
frequency = 250,
sounds = {
{name = "icecrack", length = 23},
{name = "desertwind", length = 8},
{name = "wind", length = 9}
},
nodes = {"default:ice"},
sound_check = function(def)
local c = (def.totals["default:ice"] or 0)
if c > 100 then
return "ice"
end
end
})
-- Desert sounds play when near 150+ desert or normal sand
ambience.add_set("desert", {
frequency = 20,
sounds = {
{name = "coyote", length = 2.5, ephemeral = true},
{name = "wind", length = 9},
{name = "desertwind", length = 8}
},
nodes = {"default:desert_sand", "default:sand"},
sound_check = function(def)
local c = (def.totals["default:desert_sand"] or 0)
+ (def.totals["default:sand"] or 0)
if c > 150 and def.pos.y > 10 then
return "desert"
end
end
})
-- Cave sounds play when below player position Y -25
ambience.add_set("cave", {
frequency = 60,
sounds = {
{name = "drippingwater1", length = 1.5, ephemeral = true},
{name = "drippingwater2", length = 1.5, ephemeral = true}
},
sound_check = function(def)
if def.pos.y < -25 then
return "cave"
end
end
})
-- Jungle sounds play during day and when around 90 jungletree trunks
ambience.add_set("jungle", {
frequency = 200,
sounds = {
{name = "jungle_day_1", length = 7},
{name = "deer", length = 7, ephemeral = true},
{name = "canadianloon2", length = 14},
{name = "bird1", length = 11},
{name = "peacock", length = 2, ephemeral = true}
},
nodes = {"default:jungletree"},
sound_check = function(def)
local c = (def.totals["default:jungletree"] or 0)
if def.tod > 0.2 and def.tod < 0.8 and c > 90 then
return "jungle"
end
end
})
-- Jungle sounds play during night and when around 90 jungletree trunks
ambience.add_set("jungle_night", {
frequency = 200,
sounds = {
{name = "jungle_night_1", length = 4, ephemeral = true},
{name = "jungle_night_2", length = 4, ephemeral = true},
{name = "deer", length = 7, ephemeral = true},
{name = "frog", length = 1, ephemeral = true}
},
sound_check = function(def)
-- jungle tree was added in last set, so doesnt need to be added in this one
local c = (def.totals["default:jungletree"] or 0)
if (def.tod < 0.2 or def.tod > 0.8) and c > 90 then
return "jungle_night"
end
end
})
-- Daytime sounds play during day when around leaves and above ground
ambience.add_set("day", {
frequency = 40,
sounds = {
{name = "cardinal", length = 3, ephemeral = true},
{name = "craw", length = 3, ephemeral = true},
{name = "bluejay", length = 6, ephemeral = true},
{name = "robin", length = 4, ephemeral = true},
{name = "bird1", length = 11},
{name = "bird2", length = 6, ephemeral = true},
{name = "crestedlark", length = 6, ephemeral = true},
{name = "peacock", length = 2, ephemeral = true},
{name = "wind", length = 9}
},
nodes = {"group:leaves"},
sound_check = function(def)
-- we used group:leaves but still need to specify actual nodes for total
local c = (def.totals["default:leaves"] or 0)
+ (def.totals["default:bush_leaves"] or 0)
+ (def.totals["default:pine_needles"] or 0)
+ (def.totals["default:aspen_leaves"] or 0)
if (def.tod > 0.2 and def.tod < 0.8)
and def.pos.y > -10
and c > 5 then
return "day"
end
end
})
-- Nighttime sounds play at night when above ground near leaves
ambience.add_set("night", {
frequency = 40,
sounds = {
{name = "hornedowl", length = 2, ephemeral = true},
{name = "wolves", length = 4, gain = 0.4, ephemeral = true},
{name = "cricket", length = 6, ephemeral = true},
{name = "deer", length = 7, ephemeral = true},
{name = "frog", length = 1, ephemeral = true}
},
sound_check = function(def)
-- leaves were added in last set, so don't need to be added to this one
local c = (def.totals["default:leaves"] or 0)
+ (def.totals["default:bush_leaves"] or 0)
+ (def.totals["default:pine_needles"] or 0)
+ (def.totals["default:aspen_leaves"] or 0)
if (def.tod < 0.2 or def.tod > 0.8)
and def.pos.y > -10
and c > 5 then
return "night"
end
end
})
-- Winds play when player is above 50 y-pos or near 150+ snow blocks
ambience.add_set("high_up", {
frequency = 40,
sounds = {
{name = "desertwind", length = 8},
{name = "wind", length = 9}
},
nodes = {"default:snowblock"},
sound_check = function(def)
local c = (def.totals["default:snowblock"] or 0)
if def.pos.y > 50 or c > 150 then
return "high_up"
end
end
})

View File

@ -190,7 +190,7 @@ minetest.register_node("anvil:anvil", {
minetest.chat_send_player( player:get_player_name(), S('This anvil is for damaged tools only.'))
return 0
end
if (minetest.get_item_group(stack:get_name(), "not_repaired_by_anvil") ~= 0) then
local item_def = minetest.registered_items[stack:get_name()]
minetest.chat_send_player( player:get_player_name(), S('@1 cannot be repaired with an anvil.', item_def.description))
@ -217,15 +217,17 @@ minetest.register_node("anvil:anvil", {
end
local meta = minetest.get_meta(pos)
local name = clicker:get_player_name()
local owner = meta:get_string("owner")
if name ~= meta:get_string("owner") then return itemstack end
if name ~= owner then return itemstack end
if itemstack:get_count() == 0 then
local inv = meta:get_inventory()
local inv = meta:get_inventory()
if not inv:is_empty("input") then
local return_stack = inv:get_stack("input", 1)
inv:set_stack("input", 1, nil)
local wield_index = clicker:get_wield_index()
clicker:get_inventory():set_stack("main", wield_index, return_stack)
meta:set_string("infotext", S("@1's anvil", owner))
remove_item(pos, node)
return return_stack
end
@ -236,6 +238,11 @@ minetest.register_node("anvil:anvil", {
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
inv:add_item("input", s)
local meta_description = s:get_meta():get_string("description")
if "" ~= meta_description then
meta:set_string("infotext", S("@1's anvil", owner) .. "\n" .. meta_description)
end
meta:set_int("informed", 0)
update_item(pos,node)
end
@ -250,7 +257,8 @@ minetest.register_node("anvil:anvil", {
local wielded = puncher:get_wielded_item()
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if meta:get_string("owner") ~= puncher:get_player_name() then
local owner = meta:get_string("owner")
if owner ~= puncher:get_player_name() then
return
end
@ -260,6 +268,7 @@ minetest.register_node("anvil:anvil", {
inv:set_stack("input", 1, nil)
local wield_index = puncher:get_wield_index()
puncher:get_inventory():set_stack("main", wield_index, return_stack)
meta:set_string("infotext", S("@1's anvil", owner))
remove_item(pos, node)
end
end
@ -316,8 +325,14 @@ minetest.register_node("anvil:anvil", {
-- tell the player when the job is done
if( input:get_wear() == 0 ) then
-- but only once
if 0 < meta:get_int("informed") then return end
meta:set_int("informed", 1)
local tool_desc
if minetest.registered_items[tool_name] and minetest.registered_items[tool_name].description then
local meta_description = input:get_meta():get_string("description")
if "" ~= meta_description then
tool_desc = meta_description
elseif minetest.registered_items[tool_name] and minetest.registered_items[tool_name].description then
tool_desc = minetest.registered_items[tool_name].description
else
tool_desc = tool_name
@ -410,4 +425,3 @@ minetest.register_craft({
{"group:stick","",""}
}
})

View File

@ -33,7 +33,7 @@ if mg_name ~= "v6" and mg_name ~= "singlenode" then
offset = 0.0005,
scale = 0.0005,
spread = {x = 250, y = 250, z = 250},
seed = 2,
seed = 678,
octaves = 3,
persist = 0.66
},
@ -54,7 +54,6 @@ end
minetest.register_node("baldcypress:sapling", {
description = S("Bald Cypress Tree Sapling"),
drawtype = "plantlike",
visual_scale = 1.0,
tiles = {"baldcypress_sapling.png"},
inventory_image = "baldcypress_sapling.png",
wield_image = "baldcypress_sapling.png",
@ -117,7 +116,6 @@ minetest.register_node("baldcypress:wood", {
minetest.register_node("baldcypress:leaves", {
description = S("Bald Cypress Leaves"),
drawtype = "allfaces_optional",
visual_scale = 1.2,
tiles = {"baldcypress_leaves.png"},
inventory_image = "baldcypress_leaves.png",
wield_image = "baldcypress_leaves.png",
@ -136,6 +134,45 @@ minetest.register_node("baldcypress:leaves", {
after_place_node = default.after_place_leaves,
})
minetest.register_node("baldcypress:dry_branches", {
description = S("Bald Cypress Dry Branches"),
drawtype = "nodebox",
walkable = true,
paramtype = "light",
paramtype2 = "facedir",
tiles = {"baldcypress_dry_branches.png"},
inventory_image = "baldcypress_dry_branches.png",
wield_image = "baldcypress_dry_branches.png",
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, 0.49, 0.5, 0.5, 0.5}
},
groups = {
snappy = 2, flammable = 3, oddly_breakable_by_hand = 3, choppy = 2, carpet = 1, leafdecay = 3, leaves = 1
},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("baldcypress:liana", {
description = S("Bald Cypress Liana"),
drawtype = "nodebox",
walkable = false,
paramtype = "light",
paramtype2 = "facedir",
tiles = {"baldcypress_liana.png"},
inventory_image = "baldcypress_liana.png",
wield_image = "baldcypress_liana.png",
is_ground_content = false,
node_box = {
type = "fixed",
fixed = {-0.25, -0.5, 0.0, 0.25, 0.5, 0.0}
},
groups = {
snappy = 2, flammable = 3, oddly_breakable_by_hand = 3, choppy = 2, carpet = 1, leafdecay = 3, leaves = 1,
},
sounds = default.node_sound_leaves_defaults(),
})
--
-- Craftitems
--

View File

@ -5,6 +5,8 @@ Bald Cypress Leaves=Hojas de criprés calvo
Bald Cypress Tree Sapling=Retoño de criprés calvo
Bald Cypress Tree Stair=Escaleras de criprés calvo
Bald Cypress Slab=Losa de de criprés calvo
Inner Bald Cypress Stair=Escaleras de de criprés calvo interior
Inner Bald Cypress Stair=Escaleras de criprés calvo interior
Outer Bald Cypress Stair=Escaleras de criprés calvo exterior
Bald Cypress Slab=Losa de criprés calvo
Bald Cypress Dry Branches=Ramas secas de ciprés calvo
Bald Cypress Liana=Liana de ciprés calvo

View File

@ -1,4 +1,4 @@
name = baldcypress
description = Blad Cypress for Swamps
description = Bald Cypress for Swamps
depends = default
optional_depends = stairs, bonemeal
optional_depends = stairs, bonemeal, swampz

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 887 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -5,8 +5,6 @@
-- Thanks to VanessaE, Tenplus1, paramat and all others who
-- contribute to this mod
local modname = "bamboo"
-- internationalization boilerplate
local S = minetest.get_translator(minetest.get_current_modname())
@ -177,7 +175,6 @@ minetest.register_node("bamboo:wood", {
minetest.register_node("bamboo:leaves", {
description = S("Bamboo Leaves"),
drawtype = "allfaces_optional",
visual_scale = 1.2,
tiles = {"bamboo_leaves.png"},
inventory_image = "bamboo_leaves.png",
wield_image = "bamboo_leaves.png",
@ -252,7 +249,7 @@ end
--Stairs
if minetest.get_modpath("stairs") ~= nil then
if minetest.get_modpath("stairs") ~= nil then
stairs.register_stair_and_slab(
"bamboo_trunk",
"bamboo:trunk",

View File

@ -1,9 +1,9 @@
# textdomain: basic_materials
Silicon lump=Silikonklumpen
Simple Integrated Circuit=einfacher Integrierter Schaltkreis
Simple Motor=einfacher Motor
Silicon lump=Siliziumklumpen
Simple Integrated Circuit=Einfacher Integrierter Schaltkreis
Simple Motor=Einfacher Motor
Heating element=Heizelement
Simple energy crystal=einfacher Energiekristall
Simple energy crystal=Einfacher Energiekristall
Spool of steel wire=Spule mit Stahldraht
Spool of copper wire=Spule mit Kupferdraht
@ -12,22 +12,22 @@ Spool of gold wire=Spule mit Golddraht
Steel Strip=Stahlstreifen
Copper Strip=Kupferstreifen
Steel Bar=Stahlstab
Chainlinks (brass)=Messing-Kettenglieder
Chainlinks (steel)=Stahl-Kettenglieder
Chainlinks (brass)=Messingkettenglieder
Chainlinks (steel)=Stahlkettenglieder
Brass Ingot=Messingbarren
Steel gear=Stahlzahnrad
Padlock=Vorhängeschloss
Chain (steel, hanging)=Stahlkette
Chain (brass, hanging)=Messingkette
Chain (steel, hanging)=Hängende Stahlkette
Chain (brass, hanging)=Hängende Messingkette
Brass Block=Messingblock
Oil extract=raffiniertes Öl
Unprocessed paraffin=unbearbeitetes Paraffin
Uncooked Terracotta Base=ungebranntes Terrakotta
Wet Cement=nasser Zement
Oil extract=Ölextrakt
Unprocessed paraffin=Unverarbeitetes Paraffin
Uncooked Terracotta Base=Ungebranntes Terrakotta
Wet Cement=Nasser Zement
Cement=Zement
Concrete Block=Betonblock
Plastic sheet=Kunststoffplatte
Plastic strips=Kunststoffstreifen
Empty wire spool=leere Drahtspule
Empty wire spool=Leere Drahtspule

View File

@ -5,7 +5,9 @@
-- Intllib support
local S
if minetest.global_exists("intllib") then
if minetest.get_translator then
S = minetest.get_translator("bees")
elseif minetest.global_exists("intllib") then
S = intllib.Getter()
else
S = function(s) return s end

View File

@ -1,4 +1,3 @@
--
-- Birch Tree
--
@ -90,21 +89,22 @@ end
minetest.register_decoration({
deco_type = "schematic",
place_on = {"default:dirt_with_grass"},
place_on = {"rainf:meadow"},
sidelen = 16,
noise_params = {
offset = 0.008,
offset = 0.01,
scale = 0.001,
spread = {x = 255, y = 255, z = 255},
seed = 2,
seed = 32,
octaves = 3,
persist = 0.67
},
biomes = {"grassland"},
y_min = 10,
biomes = {"rainf"},
y_min = 1,
y_max = 80,
schematic = birch.birchtree,
flags = "place_center_x, place_center_z",
place_offset_y = 1,
})
--
@ -114,7 +114,6 @@ minetest.register_decoration({
minetest.register_node("birch:sapling", {
description = S("Birch Sapling"),
drawtype = "plantlike",
visual_scale = 1.0,
tiles = {"birch_sapling.png"},
inventory_image = "birch_sapling.png",
wield_image = "birch_sapling.png",
@ -176,7 +175,6 @@ minetest.register_node("birch:wood", {
minetest.register_node("birch:leaves", {
description = S("Birch Leaves"),
drawtype = "allfaces_optional",
visual_scale = 1.2,
tiles = {"birch_leaves.png"},
inventory_image = "birch_leaves.png",
wield_image = "birch_leaves.png",
@ -237,7 +235,7 @@ default.register_leafdecay({
--Stairs
if minetest.get_modpath("stairs") ~= nil then
if minetest.get_modpath("stairs") ~= nil then
stairs.register_stair_and_slab(
"birch_trunk",
"birch:trunk",
@ -249,7 +247,7 @@ if minetest.get_modpath("stairs") ~= nil then
)
end
if minetest.get_modpath("bonemeal") ~= nil then
if minetest.get_modpath("bonemeal") ~= nil then
bonemeal:add_sapling({
{"birch:sapling", grow_new_birch_tree, "soil"},
})

View File

@ -1,4 +1,4 @@
name = birch
description = Birch Tree for Grassland
depends = default
depends = rainf, default
optional_depends = stairs, bonemeal

View File

@ -12,7 +12,7 @@ local S = minetest.get_translator and minetest.get_translator("bonemeal") or
-- creative check
local creative_mode_cache = minetest.settings:get_bool("creative_mode")
function is_creative(name)
function bonemeal.is_creative(name)
return creative_mode_cache or minetest.check_player_privs(name, {creative = true})
end
@ -495,7 +495,7 @@ minetest.register_craftitem("bonemeal:mulch", {
end
-- take item if not in creative
if not is_creative(user:get_player_name()) then
if not bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
@ -525,7 +525,7 @@ minetest.register_craftitem("bonemeal:bonemeal", {
end
-- take item if not in creative
if not is_creative(user:get_player_name()) then
if not bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
@ -555,7 +555,7 @@ minetest.register_craftitem("bonemeal:fertiliser", {
end
-- take item if not in creative
if not is_creative(user:get_player_name()) then
if not bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end

View File

@ -0,0 +1,7 @@
# textdomain:bonemeal
#[MOD] bonemeal loaded=
#Bone=
#Bone Meal=
#Fertiliser=
#Gelatin Powder=
#Mulch=

View File

@ -1,6 +1,7 @@
# textdomain: bonemeal
Mulch=Mantillo
# textdomain:bonemeal
[MOD] bonemeal loaded=[MOD] bonemeal cargado
Bone=Hueso
Bone Meal=Comida de hueso
Fertiliser=Fertilizante
Bone=Hueso
[MOD] bonemeal loaded=[MOD] bonemeal cargado
#Gelatin Powder=
Mulch=Mantillo

View File

@ -1,6 +1,7 @@
# textdomain: beds
Mulch=Paillis
# textdomain:bonemeal
[MOD] bonemeal loaded=[MOD] bonemeal chargé
Bone=Os
Bone Meal=Poudre d'os
Fertiliser=Engrais
Bone=Os
[MOD] bonemeal loaded=[MOD] bonemeal chargé
Gelatin Powder=Poudre de gélatine
Mulch=Paillis

View File

@ -1,6 +1,7 @@
# textdomain: bonemeal
Mulch=Pacciame
# textdomain:bonemeal
[MOD] bonemeal loaded=[MOD] bonemeal caricata
Bone=Ossa
Bone Meal=Pasto osseo
Fertiliser=Fertilizzante
Bone=Ossa
[MOD] bonemeal loaded=[MOD] bonemeal caricata
#Gelatin Powder=
Mulch=Pacciame

View File

@ -1,6 +1,7 @@
# textdomain: bonemeal
Mulch=Мульча
# textdomain:bonemeal
[MOD] bonemeal loaded=[MOD] костная мука загружена
Bone=Кость
Bone Meal=Костная Мука
Fertiliser=Удобрение
Bone=Кость
[MOD] bonemeal loaded=[MOD] костная мука загружена
#Gelatin Powder=
Mulch=Мульча

View File

@ -1,6 +0,0 @@
# textdomain: bonemeal
Mulch =
Bone Meal =
Fertiliser =
Bone =
[MOD] bonemeal loaded =

View File

@ -0,0 +1,21 @@
unused_args = false
allow_defined_top = true
max_comment_line_length = 999
read_globals = {
"DIR_DELIM",
"minetest", "core",
"unpack",
"dump",
table = { fields = { "copy", "getn" } },
"vector", "nodeupdate",
"VoxelManip", "VoxelArea",
"PseudoRandom", "ItemStack",
"stairsplus",
"default",
"stairs",
}
globals = {
}

View File

@ -1,4 +1,4 @@
local S = homedecor.gettext
local S = minetest.get_translator("building_blocks")
if minetest.get_modpath("moreblocks") or minetest.get_modpath("stairs") then
minetest.register_alias("building_blocks:slab_tar", "stairs:slab_Tar")

View File

@ -1,5 +0,0 @@
default
homedecor_common
moreblocks?
gloopblocks?
stairs?

View File

@ -1,4 +1,3 @@
local S = homedecor.gettext
local modpath = minetest.get_modpath("building_blocks")
dofile(modpath.."/alias.lua")

View File

@ -0,0 +1,48 @@
# textdomain: building_blocks
### alias.lua ###
Granite=Granit
### node_stairs.lua ###
Adobe=Adobe
Adobe Slab=Adobestufe
Adobe Stair=Adobetreppe
Brobble Spread=Ziesterboden
Chess board tiling=Schachbrettkacheln
Fake Grass=Falsches Gras
Fake Grass Slab=Falsches-Gras-Stufe
Fake Grass Stair=Falsches-Gras-Treppe
Fireplace=Kamin
Grate=Rost
Grate Slab=Roststufe
Grate Stair=Rosttreppe
Gravel Spread=Kiesboden
Hardwood=Hartholz
Hardwood Slab=Hartholzstufe
Hardwood Stair=Hartholztreppe
Marble=Marmor
Marble Slab=Marmorstufe
Marble Stair=Marmortreppe
Roof block=Dachblock
Roof block Slab=Dachblockstufe
Roof block Stair=Dachblocktreppe
Streak Free Glass=Schlierenfreies Glas
Streak Free Glass Slab=Schlierenfreies-Glas-Stufe
Streak Free Glass Stair=Schlierenfreies-Glas-Treppe
Tar=Teer
Tar Slab=Teerstufe
Tar Stair=Teertreppe
Tarmac Spread=Asphaltboden
Terrycloth towel=Frottiertuch
Wood Framed Glass=Holzrahmenglas
Wood Framed Glass Slab=Holzrahmenglasstufe
Wood Framed Glass Stair=Holzrahmenglastreppe
### others.lua ###
Small bundle of sticks=Kleines Bündel Stöcke
Tar Knife=Teermesser
Tar base=Teerbase

View File

@ -0,0 +1,48 @@
# textdomain: building_blocks
### alias.lua ###
Granite=Granito
### node_stairs.lua ###
Adobe=Adobe
Adobe Slab=Losa de adobe
Adobe Stair=Escaleras de adobe
Brobble Spread=Mezcla de Ladroquines
Chess board tiling=Azulejos de ajedrez
Fake Grass=Hierba falsa
Fake Grass Slab=
Fake Grass Stair=
Fireplace=Chimenea
Grate=Reja
Grate Slab=Losa de rejas
Grate Stair=Escaleras de rejas
Gravel Spread=Mezcla de gravilla
Hardwood=Madera dura
Hardwood Slab=Losa de madera dura
Hardwood Stair=Escaleras de madera dura
Marble=Mármol
Marble Slab=Losa de mármol
Marble Stair=Escaleras de mármol
Roof block=Bloque de techo
Roof block Slab=
Roof block Stair=
Streak Free Glass=Vídrio sin rayas
Streak Free Glass Slab=
Streak Free Glass Stair=
Tar=Alquitrán
Tar Slab=Losa de alquitrán
Tar Stair=Escaleras de alquitrán
Tarmac Spread=Mezcla de asfalto
Terrycloth towel=Toalla
Wood Framed Glass=Vídrio enmarcado en madera
Wood Framed Glass Slab=
Wood Framed Glass Stair=
### others.lua ###
Small bundle of sticks=Manojo de palitos
Tar Knife=Cuchillo de alquitrán
Tar base=Base de alquitrán

View File

@ -0,0 +1,48 @@
# textdomain: building_blocks
### alias.lua ###
Granite=Granit
### node_stairs.lua ###
Adobe=Pisé
Adobe Slab=Dalle en pisé
Adobe Stair=Escalier en pisé
Brobble Spread=Tapis rouge
Chess board tiling=Pavage en échiquier
Fake Grass=Herbe synthétique
Fake Grass Slab=Dalle en herbe synthétique
Fake Grass Stair=Escalier en herbe synthétique
Fireplace=Cheminée
Grate=Grille
Grate Slab=Dalle en métal déployé
Grate Stair=Escalier en métal déployé
Gravel Spread=Tapis de gravier
Hardwood=Bois dur (feuillu)
Hardwood Slab=Dalle en bois dur (feuillu)
Hardwood Stair=Escalier en bois dur (feuillu)
Marble=Marbre
Marble Slab=Dalle en marbre
Marble Stair=Marche en marbre
Roof block=Bloc de toit
Roof block Slab=Dalle en bloc de toit
Roof block Stair=Escalier en bloc de toit
Streak Free Glass=Verre anti-rayures
Streak Free Glass Slab=Dalle en verre anti-rayures
Streak Free Glass Stair=Escalier en verre anti-rayures
Tar=Goudron
Tar Slab=Dalle en goudron
Tar Stair=Marche en goudron
Tarmac Spread=Tapis de goudron
Terrycloth towel=Serviette éponge
Wood Framed Glass=Verre encadré de bois
Wood Framed Glass Slab=Dalle en verre encadré de bois
Wood Framed Glass Stair=Escalier en verre encadré de bois
### others.lua ###
Small bundle of sticks=Petit fagot de brindilles
Tar Knife=Couteau à goudron
Tar base=Pâte de goudron

View File

@ -0,0 +1,48 @@
# textdomain: building_blocks
### alias.lua ###
Granite=Granit
### node_stairs.lua ###
Adobe=Adob
Adobe Slab=Bidur Adob
Adobe Stair=Tangga Adob
Brobble Spread=Sebaran Batu Merah
Chess board tiling=Jubin Papan Catur
Fake Grass=Rumput Tiruan
Fake Grass Slab=
Fake Grass Stair=
Fireplace=Pendiangan
Grate=Jeriji
Grate Slab=Bidur Jeriji
Grate Stair=Tangga Jeriji
Gravel Spread=Sebaran Kelikir
Hardwood=Kayu Keras
Hardwood Slab=Bidur Kayu Keras
Hardwood Stair=Tangga Kayu Keras
Marble=Marmar
Marble Slab=Bidur Marmar
Marble Stair=Tangga Marmar
Roof block=Blok Bumbung
Roof block Slab=
Roof block Stair=
Streak Free Glass=Kaca Bebas Calar
Streak Free Glass Slab=
Streak Free Glass Stair=
Tar=Tar
Tar Slab=Bidur Tar
Tar Stair=Tangga Tar
Tarmac Spread=Sebaran Tar
Terrycloth towel=Kain Tuala
Wood Framed Glass=Kaca Berbingkai Kayu
Wood Framed Glass Slab=
Wood Framed Glass Stair=
### others.lua ###
Small bundle of sticks=Seberkas Kecil Serpihan Kayu
Tar Knife=Pisau Tar
Tar base=Campuran Tar

View File

@ -0,0 +1,48 @@
# textdomain: building_blocks
### alias.lua ###
Granite=Granito
### node_stairs.lua ###
Adobe=Argila
Adobe Slab=Placa de argila
Adobe Stair=Escada de Argila
Brobble Spread=Calçado
Chess board tiling=Revestimento de xadrez
Fake Grass=Grama Falsa
Fake Grass Slab=
Fake Grass Stair=
Fireplace=Lareira
Grate=Grelha
Grate Slab=Placa de Grelha
Grate Stair=Escade de Grelha
Gravel Spread=Espalhamento de Cascalho
Hardwood=Madeira
Hardwood Slab=Placa de madeira
Hardwood Stair=Escada de madeira
Marble=Mármore
Marble Slab=Placa de Mármore
Marble Stair=Escada de mármore
Roof block=Bloco de telhado
Roof block Slab=
Roof block Stair=
Streak Free Glass=Vidro Sem Riscos
Streak Free Glass Slab=
Streak Free Glass Stair=
Tar=Alcatrão
Tar Slab=Placa de alcatrão
Tar Stair=Escada de alcatrão
Tarmac Spread=Espalhamento das Estradas
Terrycloth towel=Toalha de Roupinha
Wood Framed Glass=Vidro com Bordas de Madeira
Wood Framed Glass Slab=
Wood Framed Glass Stair=
### others.lua ###
Small bundle of sticks=Pequeno amontoado de gravetos
Tar Knife=Faca de Alcatrão
Tar base=Base para alcatrão

View File

@ -0,0 +1,48 @@
# textdomain: building_blocks
### alias.lua ###
Granite=Granito
### node_stairs.lua ###
Adobe=Argila
Adobe Slab=Placa de argila
Adobe Stair=Escada de Argila
Brobble Spread=Calçado
Chess board tiling=Revestimento de xadrez
Fake Grass=Grama Falsa
Fake Grass Slab=
Fake Grass Stair=
Fireplace=Lareira
Grate=Grelha
Grate Slab=Placa de Grelha
Grate Stair=Escade de Grelha
Gravel Spread=Espalhamento de Cascalho
Hardwood=Madeira
Hardwood Slab=Placa de madeira
Hardwood Stair=Escada de madeira
Marble=Mármore
Marble Slab=Placa de Mármore
Marble Stair=Escada de mármore
Roof block=Bloco de telhado
Roof block Slab=
Roof block Stair=
Streak Free Glass=Vidro Sem Riscos
Streak Free Glass Slab=
Streak Free Glass Stair=
Tar=Alcatrão
Tar Slab=Placa de alcatrão
Tar Stair=Escada de alcatrão
Tarmac Spread=Espalhamento das Estradas
Terrycloth towel=Toalha de Roupinha
Wood Framed Glass=Vidro com Bordas de Madeira
Wood Framed Glass Slab=
Wood Framed Glass Stair=
### others.lua ###
Small bundle of sticks=Pequeno amontoado de gravetos
Tar Knife=Faca de Alcatrão
Tar base=Base para alcatrão

View File

@ -0,0 +1,48 @@
# textdomain: building_blocks
### alias.lua ###
Granite=Гранит
### node_stairs.lua ###
Adobe=Саман
Adobe Slab=Саманная плита
Adobe Stair=Саманная ступенька
Brobble Spread=Настил кирпичного булыжника
Chess board tiling=Шахматная плитка
Fake Grass=Псевдо трава
Fake Grass Slab=
Fake Grass Stair=
Fireplace=Камин
Grate=Каминная решётка
Grate Slab=Решётчатая плита
Grate Stair=Решётчатая ступенька
Gravel Spread=Настил гравия
Hardwood=Твёрдая древесина
Hardwood Slab=Плита из твёрдой древесины
Hardwood Stair=Ступенька из твёрдой древесины
Marble=Мрамор
Marble Slab=Мраморная блита
Marble Stair=Мраморная ступенька
Roof block=Кровельный блок
Roof block Slab=
Roof block Stair=
Streak Free Glass=Стекло без стыков
Streak Free Glass Slab=
Streak Free Glass Stair=
Tar=Смола
Tar Slab=Плита из смолы
Tar Stair=Ступенька из смолы
Tarmac Spread=Покрытие гудронной смолой
Terrycloth towel=Махровое полотенце
Wood Framed Glass=Деревянное окно
Wood Framed Glass Slab=
Wood Framed Glass Stair=
### others.lua ###
Small bundle of sticks=Небольшая связка палок
Tar Knife=Смоляной нож
Tar base=Смоляная основа

View File

@ -0,0 +1,48 @@
# textdomain: building_blocks
### alias.lua ###
Granite=花岗岩
### node_stairs.lua ###
Adobe=土砖
Adobe Slab=
Adobe Stair=
Brobble Spread=石砖路面
Chess board tiling=棋盘铺贴
Fake Grass=塑料草
Fake Grass Slab=
Fake Grass Stair=
Fireplace=壁炉
Grate=磨碎
Grate Slab=
Grate Stair=
Gravel Spread=碎石路面
Hardwood=硬木
Hardwood Slab=
Hardwood Stair=
Marble=大理石
Marble Slab=
Marble Stair=
Roof block=天台
Roof block Slab=
Roof block Stair=
Streak Free Glass=无条纹玻璃
Streak Free Glass Slab=
Streak Free Glass Stair=
Tar=焦油
Tar Slab=
Tar Stair=
Tarmac Spread=柏油路面
Terrycloth towel=毛巾
Wood Framed Glass=木框玻璃
Wood Framed Glass Slab=
Wood Framed Glass Stair=
### others.lua ###
Small bundle of sticks=小捆棍子
Tar Knife=焦油刀
Tar base=焦油基

View File

@ -0,0 +1,48 @@
# textdomain: building_blocks
### alias.lua ###
Granite=
### node_stairs.lua ###
Adobe=
Adobe Slab=
Adobe Stair=
Brobble Spread=
Chess board tiling=
Fake Grass=
Fake Grass Slab=
Fake Grass Stair=
Fireplace=
Grate=
Grate Slab=
Grate Stair=
Gravel Spread=
Hardwood=
Hardwood Slab=
Hardwood Stair=
Marble=
Marble Slab=
Marble Stair=
Roof block=
Roof block Slab=
Roof block Stair=
Streak Free Glass=
Streak Free Glass Slab=
Streak Free Glass Stair=
Tar=
Tar Slab=
Tar Stair=
Tarmac Spread=
Terrycloth towel=
Wood Framed Glass=
Wood Framed Glass Slab=
Wood Framed Glass Stair=
### others.lua ###
Small bundle of sticks=
Tar Knife=
Tar base=

3
building_blocks/mod.conf Normal file
View File

@ -0,0 +1,3 @@
name = building_blocks
depends = default
optional_depends = moreblocks, gloopblocks, stairs

View File

@ -1,4 +1,4 @@
local S = homedecor.gettext
local S = minetest.get_translator("building_blocks")
local stairs_groups_names = {"cracky","choppy","flammable","crumbly","snappy"}
@ -29,9 +29,11 @@ local function building_blocks_stairs(nodename, def)
stairs.register_stair_and_slab(name,nodename,
stairs_groups,
def.tiles,
("%s Stair"):format(def.description),
("%s Slab"):format(def.description),
def.stair_desc,
def.slab_desc,
def.sounds
--FIXME: Missing descriptions for Inner and Outer stairs
-- See https://github.com/minetest/minetest_game/pull/2584
)
end
end
@ -40,6 +42,8 @@ end
building_blocks_stairs("building_blocks:grate", {
drawtype = "glasslike",
description = S("Grate"),
stair_desc = S("Grate Stair"),
slab = S("Grate Slab"),
tiles = {"building_blocks_grate.png"},
paramtype = "light",
sunlight_propagates = true,
@ -50,6 +54,8 @@ building_blocks_stairs("building_blocks:grate", {
building_blocks_stairs("building_blocks:smoothglass", {
drawtype = "glasslike",
description = S("Streak Free Glass"),
stair_desc = S("Streak Free Glass Stair"),
slab_desc = S("Streak Free Glass Slab"),
tiles = {"building_blocks_sglass.png"},
paramtype = "light",
sunlight_propagates = true,
@ -60,6 +66,8 @@ building_blocks_stairs("building_blocks:smoothglass", {
building_blocks_stairs("building_blocks:woodglass", {
drawtype = "glasslike",
description = S("Wood Framed Glass"),
stair_desc = S("Wood Framed Glass Stair"),
slab_desc = S("Wood Framed Glass Slab"),
tiles = {"building_blocks_wglass.png"},
paramtype = "light",
sunlight_propagates = true,
@ -71,6 +79,8 @@ building_blocks_stairs("building_blocks:woodglass", {
building_blocks_stairs("building_blocks:Adobe", {
tiles = {"building_blocks_Adobe.png"},
description = S("Adobe"),
stair_desc = S("Adobe Stair"),
slab_desc = S("Adobe Slab"),
is_ground_content = true,
groups = {crumbly=3},
sounds = default.node_sound_stone_defaults(),
@ -78,6 +88,8 @@ building_blocks_stairs("building_blocks:Adobe", {
building_blocks_stairs("building_blocks:fakegrass", {
tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
description = S("Fake Grass"),
stair_desc = S("Fake Grass Stair"),
slab_desc = S("Fake Grass Slab"),
is_ground_content = true,
groups = {crumbly=3},
sounds = default.node_sound_dirt_defaults({
@ -88,6 +100,8 @@ building_blocks_stairs("building_blocks:hardwood", {
tiles = {"building_blocks_hardwood.png"},
is_ground_content = true,
description = S("Hardwood"),
stair_desc = S("Hardwood Stair"),
slab_desc = S("Hardwood Slab"),
groups = {choppy=1,flammable=1},
sounds = default.node_sound_wood_defaults(),
})
@ -95,11 +109,15 @@ building_blocks_stairs("building_blocks:Roofing", {
tiles = {"building_blocks_Roofing.png"},
is_ground_content = true,
description = S("Roof block"),
stair_desc = S("Roof block Stair"),
slab_desc = S("Roof block Slab"),
groups = {snappy=3},
sounds = default.node_sound_stone_defaults(),
})
building_blocks_stairs("building_blocks:Tar", {
description = S("Tar"),
stair_desc = S("Tar Stair"),
slab_desc = S("Tar Slab"),
tiles = {"building_blocks_tar.png"},
is_ground_content = true,
groups = {crumbly=1, tar_block = 1},
@ -107,6 +125,8 @@ building_blocks_stairs("building_blocks:Tar", {
})
building_blocks_stairs("building_blocks:Marble", {
description = S("Marble"),
stair_desc = S("Marble Stair"),
slab_desc = S("Marble Slab"),
tiles = {"building_blocks_marble.png"},
is_ground_content = true,
groups = {cracky=3, marble = 1},

View File

@ -1,4 +1,4 @@
local S = homedecor.gettext
local S = minetest.get_translator("building_blocks")
minetest.register_craftitem("building_blocks:sticks", {
description = S("Small bundle of sticks"),

View File

@ -1,5 +1,3 @@
local S = homedecor.gettext
if minetest.get_modpath("moreblocks") then
minetest.register_craft({
output = 'building_blocks:sticks 2',

View File

@ -37,13 +37,14 @@ minetest.register_craft({
if minetest.get_modpath("moreblocks") then
stairsplus:register_all("castle", "pavement_brick", "castle_masonry:pavement_brick", {
stairsplus:register_all("castle_masonry", "pavement_brick", "castle_masonry:pavement_brick", {
description = S("Pavement Brick"),
tiles = {"castle_pavement_brick.png"},
groups = {cracky=2, not_in_creative_inventory=1},
sounds = default.node_sound_stone_defaults(),
sunlight_propagates = true,
})
stairsplus:register_alias_all("castle", "pavement_brick", "castle_masonry", "pavement_brick")
elseif minetest.get_modpath("stairs") then
stairs.register_stair_and_slab("pavement_brick", "castle_masonry:pavement_brick",
{cracky=2},
@ -117,4 +118,4 @@ if not (mod_building_blocks or mod_streets) then
recipe = "default:gravel",
})
end
end

View File

@ -102,8 +102,8 @@ if minetest.get_modpath("moreblocks") then
sunlight_propagates = true,
})
stairsplus:register_stair_alias("castle", "stonewall", "castle_masonry", "stonewall")
stairsplus:register_stair_alias("castle", "rubble", "castle_masonry", "rubble")
stairsplus:register_alias_all("castle", "stonewall", "castle_masonry", "stonewall")
stairsplus:register_alias_all("castle", "rubble", "castle_masonry", "rubble")
elseif minetest.get_modpath("stairs") then
stairs.register_stair_and_slab("stonewall", "castle_masonry:stonewall",
@ -151,7 +151,7 @@ minetest.register_craft({
if minetest.get_modpath("moreblocks") then
stairsplus:register_all("castle", "dungeon_stone", "castle_masonry:dungeon_stone", {
stairsplus:register_all("castle_masonry", "dungeon_stone", "castle_masonry:dungeon_stone", {
description = S("Dungeon Stone"),
tiles = {"castle_dungeon_stone.png"},
groups = {cracky=2, not_in_creative_inventory=1},
@ -159,7 +159,7 @@ if minetest.get_modpath("moreblocks") then
sunlight_propagates = true,
})
stairsplus:register_stair_alias("castle", "dungeon_stone", "castle_masonry", "dungeon_stone")
stairsplus:register_alias_all("castle", "dungeon_stone", "castle_masonry", "dungeon_stone")
elseif minetest.get_modpath("stairs") then
stairs.register_stair_and_slab("dungeon_stone", "castle_masonry:dungeon_stone",

View File

@ -4,6 +4,7 @@
local modname = "cherrytree"
local modpath = minetest.get_modpath(modname)
local mg_name = minetest.get_mapgen_setting("mg_name")
local fruit_grow_time = 1200
-- internationalization boilerplate
local S = minetest.get_translator(minetest.get_current_modname())
@ -31,8 +32,25 @@ minetest.register_node("cherrytree:cherries", {
after_place_node = function(pos, placer, itemstack)
minetest.set_node(pos, {name = "cherrytree:cherries", param2 = 1})
end,
})
on_dig = function(pos, node, digger)
if digger:is_player() then
local inv = digger:get_inventory()
if inv:room_for_item("main", "cherrytree:cherries") then
inv:add_item("main", "cherrytree:cherries")
end
end
minetest.remove_node(pos)
pos.y = pos.y + 1
local node_above = minetest.get_node_or_nil(pos)
if node_above and node_above.param2 == 0 and node_above.name == "cherrytree:blossom_leaves" then
--20% of variation on time
local twenty_percent = fruit_grow_time * 0.2
local grow_time = math.random(fruit_grow_time - twenty_percent, fruit_grow_time + twenty_percent)
minetest.get_node_timer(pos):start(grow_time)
end
end,
})
-- Cherrytree
@ -59,7 +77,7 @@ if mg_name ~= "v6" and mg_name ~= "singlenode" then
offset = 0.0005,
scale = 0.00005,
spread = {x = 250, y = 250, z = 250},
seed = 2,
seed = 1242,
octaves = 3,
persist = 0.66
},
@ -79,7 +97,6 @@ end
minetest.register_node("cherrytree:sapling", {
description = S("Cherrytree Tree Sapling"),
drawtype = "plantlike",
visual_scale = 1.0,
tiles = {"cherrytree_sapling.png"},
inventory_image = "cherrytree_sapling.png",
wield_image = "cherrytree_sapling.png",
@ -142,7 +159,6 @@ minetest.register_node("cherrytree:wood", {
minetest.register_node("cherrytree:blossom_leaves", {
description = S("Cherrytree Blossom Leaves"),
drawtype = "allfaces_optional",
visual_scale = 1.2,
tiles = {"cherrytree_blossom_leaves.png"},
inventory_image = "cherrytree_blossom_leaves.png",
wield_image = "cherrytree_blossom_leaves.png",
@ -159,13 +175,23 @@ minetest.register_node("cherrytree:blossom_leaves", {
},
sounds = default.node_sound_leaves_defaults(),
after_place_node = default.after_place_leaves,
on_timer = function(pos)
pos.y = pos.y - 1
local node = minetest.get_node_or_nil(pos)
if node and node.name == "air" then
minetest.set_node(pos, {name = "cherrytree:cherries"})
return false
else
return true
end
end
})
-- cherrytree tree leaves
minetest.register_node("cherrytree:leaves", {
description = S("Cherrytree Leaves"),
drawtype = "allfaces_optional",
visual_scale = 1.2,
tiles = {"cherrytree_leaves.png"},
inventory_image = "cherrytree_leaves.png",
wield_image = "cherrytree_leaves.png",
@ -227,7 +253,7 @@ default.register_leafdecay({
--Stairs
if minetest.get_modpath("stairs") ~= nil then
if minetest.get_modpath("stairs") ~= nil then
stairs.register_stair_and_slab(
"cherrytree_trunk",
"cherrytree:trunk",
@ -239,26 +265,6 @@ if minetest.get_modpath("stairs") ~= nil then
)
end
-- Chance to convert to normal leaves and cherry fruits
minetest.register_abm({
nodenames = {"cherrytree:blossom_leaves"},
neighbors = {},
interval = 600.0, -- Run every 10 minuts
chance = 50, -- Select every 1 in 50 nodes
action = function(pos, node, active_object_count, active_object_count_wider)
if node.param2 == 1 then -- ignore manually placed leaves
return
end
math.randomseed(os.time())
local is_fruit = math.random(10)
if is_fruit == 10 then
minetest.set_node(pos, {name = "cherrytree:cherries"})
else
minetest.set_node(pos, {name = "cherrytree:leaves"})
end
end
})
--Support for bonemeal
if minetest.get_modpath("bonemeal") ~= nil then

View File

@ -30,14 +30,14 @@ schematic = {
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=126, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:cherries", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=126, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="cherrytree:blossom_leaves", prob=126, param2=1},
{name="cherrytree:blossom_leaves", prob=126, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
@ -70,28 +70,28 @@ schematic = {
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="air", prob=0, param2=0},
{name="cherrytree:blossom_leaves", prob=126, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=126, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="cherrytree:blossom_leaves", prob=126, param2=1},
{name="cherrytree:cherries", prob=126, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
@ -112,28 +112,28 @@ schematic = {
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:trunk", prob=254, param2=3},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="air", prob=0, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:trunk", prob=254, param2=3},
{name="cherrytree:trunk", prob=254, param2=3},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:trunk", prob=254, param2=3},
{name="cherrytree:blossom_leaves", prob=126, param2=1},
{name="cherrytree:blossom_leaves", prob=126, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
@ -154,27 +154,27 @@ schematic = {
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="air", prob=0, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
@ -196,9 +196,9 @@ schematic = {
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="cherrytree:blossom_leaves", prob=126, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=254, param2=1},
{name="cherrytree:blossom_leaves", prob=126, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="cherrytree:blossom_leaves", prob=254, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},
{name="air", prob=0, param2=0},

Binary file not shown.

View File

@ -38,7 +38,7 @@ minetest.register_node("chestnuttree:bur", {
minetest.register_craftitem("chestnuttree:fruit", {
description = S("Chestnut"),
inventory_image = "chestnuttree_fruit.png",
inventory_image = "chestnuttree_fruit.png",
on_use = minetest.item_eat(2),
groups = {flammable = 2, food = 2},
})
@ -69,17 +69,17 @@ end
if mg_name ~= "v6" and mg_name ~= "singlenode" then
minetest.register_decoration({
deco_type = "schematic",
place_on = {"default:dirt_with_grass"},
place_on = {"rainf:meadow"},
sidelen = 16,
noise_params = {
offset = 0.00005,
offset = 0.0008,
scale = 0.00004,
spread = {x = 250, y = 250, z = 250},
seed = 2,
seed = 278,
octaves = 3,
persist = 0.66
},
biomes = {"grassland"},
biomes = {"rainf"},
y_min = 1,
y_max = 80,
schematic = modpath.."/schematics/chestnuttree.mts",
@ -96,7 +96,6 @@ end
minetest.register_node("chestnuttree:sapling", {
description = S("Chestnut Tree Sapling"),
drawtype = "plantlike",
visual_scale = 1.0,
tiles = {"chestnuttree_sapling.png"},
inventory_image = "chestnuttree_sapling.png",
wield_image = "chestnuttree_sapling.png",
@ -156,7 +155,6 @@ minetest.register_node("chestnuttree:wood", {
minetest.register_node("chestnuttree:leaves", {
description = S("Chestnut Tree Leaves"),
drawtype = "allfaces_optional",
visual_scale = 1.2,
tiles = {"chestnuttree_leaves.png"},
inventory_image = "chestnuttree_leaves.png",
wield_image = "chestnuttree_leaves.png",
@ -229,7 +227,7 @@ if minetest.get_modpath("stairs") ~= nil then
)
end
if minetest.get_modpath("bonemeal") ~= nil then
if minetest.get_modpath("bonemeal") ~= nil then
bonemeal:add_sapling({
{"chestnuttree:sapling", grow_new_chestnuttree_tree, "soil"},
})

View File

@ -1,4 +1,4 @@
name = chestnuttree
description = Chesnut Tree for Grassland
depends = default
depends = rainf, default
optional_depends = stairs, bonemeal

View File

@ -57,7 +57,7 @@ if mg_name ~= "v6" and mg_name ~= "singlenode" then
offset = 0.0005,
scale = 0.00004,
spread = {x = 250, y = 250, z = 250},
seed = 2,
seed = 3456,
octaves = 3,
persist = 0.66
},
@ -77,7 +77,6 @@ end
minetest.register_node("clementinetree:sapling", {
description = S("Clementine Tree Sapling"),
drawtype = "plantlike",
visual_scale = 1.0,
tiles = {"clementinetree_sapling.png"},
inventory_image = "clementinetree_sapling.png",
wield_image = "clementinetree_sapling.png",
@ -137,7 +136,6 @@ minetest.register_node("clementinetree:wood", {
minetest.register_node("clementinetree:leaves", {
description = S("Clementine Tree Leaves"),
drawtype = "allfaces_optional",
visual_scale = 1.2,
tiles = {"clementinetree_leaves.png"},
inventory_image = "clementinetree_leaves.png",
wield_image = "clementinetree_leaves.png",
@ -210,7 +208,7 @@ if minetest.get_modpath("stairs") ~= nil then
)
end
if minetest.get_modpath("bonemeal") ~= nil then
if minetest.get_modpath("bonemeal") ~= nil then
bonemeal:add_sapling({
{"clementinetree:sapling", grow_new_clementinetree_tree, "soil"},
})

21
computer/.luacheckrc Normal file
View File

@ -0,0 +1,21 @@
unused_args = false
allow_defined_top = true
max_comment_line_length = 999
read_globals = {
"DIR_DELIM",
"minetest", "core",
"unpack",
"dump",
table = { fields = { "copy", "getn" } },
"vector", "nodeupdate",
"VoxelManip", "VoxelArea",
"PseudoRandom", "ItemStack",
"default",
"unifieddyes",
"screwdriver",
}
globals = {
}

View File

@ -1,9 +1,8 @@
local S = homedecor.gettext
local S = minetest.get_translator("computer")
-- Amiga 500 lookalike
computer.register("computer:shefriendSOO", {
description = "SheFriendSOO",
description = S("SheFriendSOO"),
tiles_off = { front=true },
node_box = computer.pixelnodebox(32, {
-- X Y Z W H L
@ -17,7 +16,7 @@ computer.register("computer:shefriendSOO", {
minetest.register_node("computer:vanio", {
drawtype = "mesh",
mesh = "computer_laptop.obj",
description = "Pony Vanio",
description = S("Pony Vanio"),
inventory_image = "computer_laptop_inv.png",
tiles = {"computer_laptop.png"},
paramtype = "light",
@ -58,7 +57,7 @@ minetest.register_node("computer:vanio_off", {
-- Sony PlayStation lookalike
computer.register("computer:slaystation", {
description = "Pony SlayStation",
description = S("Pony SlayStation"),
inventory_image = "computer_ps1_inv.png",
tiles_off = { top=true },
node_box = computer.pixelnodebox(32, {
@ -75,7 +74,7 @@ computer.register("computer:slaystation", {
-- Sony PlayStation 2 lookalike
computer.register("computer:slaystation2", {
description = "Pony SlayStation 2",
description = S("Pony SlayStation 2"),
inventory_image = "computer_ps2_inv.png",
tiles_off = { front=true },
node_box = computer.pixelnodebox(32, {
@ -93,7 +92,7 @@ computer.register("computer:slaystation2", {
-- Sinclair ZX Spectrum lookalike
computer.register("computer:specter", {
description = "SX Specter",
description = S("SX Specter"),
inventory_image = "computer_specter_inv.png",
tiles_off = { },
node_box = computer.pixelnodebox(32, {
@ -105,7 +104,7 @@ computer.register("computer:specter", {
-- Nintendo Wii lookalike
computer.register("computer:wee", {
description = "Nientiendo Wee",
description = S("Nientiendo Wee"),
inventory_image = "computer_wii_inv.png",
tiles_off = { front=true },
node_box = computer.pixelnodebox(32, {
@ -117,7 +116,7 @@ computer.register("computer:wee", {
-- Apple iPad lookalike
minetest.register_node("computer:piepad", {
description = "Snapple Piepad",
description = S("Snapple Piepad"),
drawtype = "signlike",
tiles = {"computer_piepad_inv.png"},
inventory_image = "computer_piepad_inv.png",
@ -133,7 +132,7 @@ minetest.register_node("computer:piepad", {
-- Commodore 64 lookalike
computer.register("computer:admiral64", {
description = "Admiral64",
description = S("Admiral64"),
inventory_image = "computer_ad64_inv.png",
tiles_off = { },
node_box = computer.pixelnodebox(32, {
@ -144,7 +143,7 @@ computer.register("computer:admiral64", {
-- Commodore 128 lookalike
computer.register("computer:admiral128", {
description = "Admiral128",
description = S("Admiral128"),
inventory_image = "computer_ad128_inv.png",
tiles_off = { },
node_box = computer.pixelnodebox(32, {
@ -155,7 +154,7 @@ computer.register("computer:admiral128", {
-- XBox lookalike
computer.register("computer:hueg_box", {
description = "HUEG Box",
description = S("HUEG Box"),
tiles_off = { },
node_box = computer.pixelnodebox(16, {
-- X Y Z W H L
@ -217,8 +216,17 @@ minetest.register_alias("computer:monitor_desktop", "computer:monitor")
minetest.register_node("computer:router", {
description = S("WIFI Router"),
inventory_image = "computer_router_inv.png",
tiles = {"computer_router_t.png","computer_router_bt.png","computer_router_l.png","computer_router_r.png","computer_router_b.png",
{name="computer_router_f_animated.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1.0}},}, --"computer_router_f.png"},
tiles = {
"computer_router_t.png",
"computer_router_bt.png",
"computer_router_l.png",
"computer_router_r.png",
"computer_router_b.png",
{
name = "computer_router_f_animated.png",
animation = {type="vertical_frames", aspect_w=32, aspect_h=32, length=1.0}
},
}, --"computer_router_f.png"},
paramtype = "light",
paramtype2 = "facedir",
walkable = false,

View File

@ -1,4 +0,0 @@
default
homedecor_common
basic_materials
unifieddyes

View File

@ -1,5 +1,4 @@
computer = {}
screwdriver = screwdriver or {}
computer.register = function (name, def)
if (name:sub(1, 1) == ":") then name = name:sub(2) end

View File

@ -0,0 +1,35 @@
# textdomain: computer
### computers.lua ###
Admiral128=Admiral 128
Admiral64=Admiral 64
Computer Tower=Computerturm
HUEG Box=YBOX
Monitor and keyboard=Bildschirm und Tastatur
Nientiendo Wee=Tinnendo iiW
Not enough vertical space to place a server!=Es gibt nicht genug vertikalen Platz, um einen Server zu platzieren!
Pony SlayStation=Pony Slaystation
Pony SlayStation 2=Pony Slaystation 2
Pony Vanio=Pony Oiva
Rack Server=Serverschrank
SX Specter=Z Inspektor
SheFriendSOO=Freundin S00
Snapple Piepad=Apfel-Ei-Pat
WIFI Router=WiFi-Router
### printers.lua ###
3D Printer ("bedflinger")=3D Drucker ("Bettschubser")
Printer-Scanner Combo=Multifunktionsdrucker
### tetris.lua ###
L=L
New Game=Neues Spiel
Next...=Nächster…
No room for place the Arcade!=Kein Platz, um den Arkadeautomaten zu platzieren!
R=R
Score: =Punktzahl:
Tetris Arcade=Tetris-Arkadeautomat

View File

@ -0,0 +1,35 @@
# textdomain: computer
### computers.lua ###
Admiral128=
Admiral64=
Computer Tower=Torre de ordenador
HUEG Box=
Monitor and keyboard=Monitor y teclado
Nientiendo Wee=
Not enough vertical space to place a server!=¡No hay suficiente espacio para colocar un servidor!
Pony SlayStation=
Pony SlayStation 2=
Pony Vanio=
Rack Server=Servidor en rack
SX Specter=
SheFriendSOO=
Snapple Piepad=
WIFI Router=Enrutador WIFI
### printers.lua ###
3D Printer ("bedflinger")=
Printer-Scanner Combo=Impresora y escáner combinados
### tetris.lua ###
L=
New Game=Juego Nuevo
Next...=
No room for place the Arcade!=¡No hay lugar para colocar el arcade!
R=
Score: =
Tetris Arcade=Arcade Tetris

View File

@ -0,0 +1,35 @@
# textdomain: computer
### computers.lua ###
Admiral128=
Admiral64=
Computer Tower=Ordinateur (tour)
HUEG Box=
Monitor and keyboard=Écran et clavier
Nientiendo Wee=
Not enough vertical space to place a server!=Pas assez d'espace vertical pour placer un serveur !
Pony SlayStation=
Pony SlayStation 2=
Pony Vanio=
Rack Server=Serveur en rack
SX Specter=
SheFriendSOO=
Snapple Piepad=
WIFI Router=Routeur WiFi
### printers.lua ###
3D Printer ("bedflinger")=
Printer-Scanner Combo=Imprimante multi-fonction
### tetris.lua ###
L=G
New Game=Nouveau Jeu
Next...=Suivant…
No room for place the Arcade!=Pas assez de place pour placer la borne d'arcade !
R=D
Score: =Score :
Tetris Arcade=Borne Tetris

View File

@ -0,0 +1,35 @@
# textdomain: computer
### computers.lua ###
Admiral128=
Admiral64=
Computer Tower=
HUEG Box=
Monitor and keyboard=
Nientiendo Wee=
Not enough vertical space to place a server!=Non c'è abbastanza spazio verticale per mettere un frigorifero!
Pony SlayStation=
Pony SlayStation 2=
Pony Vanio=
Rack Server=
SX Specter=
SheFriendSOO=
Snapple Piepad=
WIFI Router=
### printers.lua ###
3D Printer ("bedflinger")=
Printer-Scanner Combo=
### tetris.lua ###
L=
New Game=
Next...=
No room for place the Arcade!=
R=
Score: =
Tetris Arcade=

View File

@ -0,0 +1,35 @@
# textdomain: computer
### computers.lua ###
Admiral128=
Admiral64=
Computer Tower=Sistem Unit
HUEG Box=
Monitor and keyboard=Monitor dan Papan Kekunci
Nientiendo Wee=
Not enough vertical space to place a server!=Tidak cukup ruang menegak untuk letak rak pelayan!
Pony SlayStation=
Pony SlayStation 2=
Pony Vanio=
Rack Server=Rak Pelayan
SX Specter=
SheFriendSOO=
Snapple Piepad=
WIFI Router=Penghala WIFI
### printers.lua ###
3D Printer ("bedflinger")=
Printer-Scanner Combo=Pencetak Semua Dalam Satu
### tetris.lua ###
L=
New Game=Main Baru
Next...=Seterusnya...
No room for place the Arcade!=Tiada ruang untuk letak Arked!
R=
Score: =Markah:
Tetris Arcade=Arked Tetris

View File

@ -0,0 +1,35 @@
# textdomain: computer
### computers.lua ###
Admiral128=
Admiral64=
Computer Tower=Gabinete do Computador
HUEG Box=
Monitor and keyboard=Tela e teclado
Nientiendo Wee=
Not enough vertical space to place a server!=Sem espaço vertical suficiente para colocar um servidor.
Pony SlayStation=
Pony SlayStation 2=
Pony Vanio=
Rack Server=Rack para Servidor
SX Specter=
SheFriendSOO=
Snapple Piepad=
WIFI Router=Roteador WIFI
### printers.lua ###
3D Printer ("bedflinger")=
Printer-Scanner Combo=Tudo em Um Impressora-Scaner
### tetris.lua ###
L=
New Game=Novo Jogo
Next...=
No room for place the Arcade!=Sem espaço para colocar o Fliperama!
R=
Score: =
Tetris Arcade=Fliperama Tetris

View File

@ -0,0 +1,35 @@
# textdomain: computer
### computers.lua ###
Admiral128=
Admiral64=
Computer Tower=Gabinete do Computador
HUEG Box=
Monitor and keyboard=Tela e teclado
Nientiendo Wee=
Not enough vertical space to place a server!=Sem espaço vertical suficiente para colocar um servidor.
Pony SlayStation=
Pony SlayStation 2=
Pony Vanio=
Rack Server=Rack para Servidor
SX Specter=
SheFriendSOO=
Snapple Piepad=
WIFI Router=Roteador WIFI
### printers.lua ###
3D Printer ("bedflinger")=
Printer-Scanner Combo=Tudo em Um Impressora-Scaner
### tetris.lua ###
L=
New Game=Novo Jogo
Next...=
No room for place the Arcade!=Sem espaço para colocar o Fliperama!
R=
Score: =
Tetris Arcade=Fliperama Tetris

Some files were not shown because too many files have changed in this diff Show More