develop #35

Merged
milan merged 16 commits from develop into master 2021-07-24 12:49:35 +02:00
66 changed files with 1274 additions and 360 deletions
Showing only changes of commit e32f708c10 - Show all commits

View file

@ -55,12 +55,14 @@ armor = {
crystal = "ethereal:crystal_ingot",
},
fire_nodes = {
{"nether:lava_source", 5, 8},
{"default:lava_source", 5, 8},
{"default:lava_flowing", 5, 8},
{"fire:basic_flame", 3, 4},
{"fire:permanent_flame", 3, 4},
{"ethereal:crystal_spike", 2, 1},
{"ethereal:fire_flower", 2, 1},
{"nether:lava_crust", 2, 1},
{"default:torch", 1, 1},
{"default:torch_ceiling", 1, 1},
{"default:torch_wall", 1, 1},
@ -671,3 +673,10 @@ armor.drop_armor = function(pos, stack)
end
end
end
--- Allows skin mod to be set manually.
--
-- Useful for skin mod forks that do not use the same name.
armor.set_skin_mod = function(mod)
armor.skin_mod = mod
end

View file

@ -69,12 +69,12 @@ end
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
wieldview.wielded_item[name] = ""
minetest.after(0, function()
local pplayer = minetest.get_player_by_name(name)
if player then
minetest.after(0, function(pname)
local pplayer = minetest.get_player_by_name(pname)
if pplayer then
wieldview:update_wielded_item(pplayer)
end
end)
end, name)
end)
minetest.register_globalstep(function(dtime)

View file

@ -19,5 +19,6 @@ Based on Immersive Sounds .36 mod by Neuromancer and optimized to run on servers
- 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.
- 1.6 - Finding env_sounds disables water and lava sets, added 'ambience_water_move' flag to override water walking sounds, use eye level for head node.
- 1.7 - Music will play every 20-30 minutes if found, use '/mvol 0' to stop playing music or disable in-game.
Code license: MIT

View file

@ -3,7 +3,7 @@ ambience = {}
-- settings
local SOUNDVOLUME = 1.0
local MUSICVOLUME = 1.0
local MUSICVOLUME = 0.6
local play_music = minetest.settings:get_bool("ambience_music") ~= false
local pplus = minetest.get_modpath("playerplus")
local radius = 6
@ -91,7 +91,7 @@ end
-- setup table when player joins
minetest.register_on_joinplayer(function(player)
playing[player:get_player_name()] = {}
playing[player:get_player_name()] = {music = -1}
end)
-- remove table when player leaves
@ -103,24 +103,31 @@ end)
-- plays music and selects sound set
local get_ambience = function(player, tod, name)
-- play server or local music if available
if play_music then
-- play server or local music if music enabled and music not already playing
if play_music and MUSICVOLUME > 0 and playing[name].music < 0 then
-- play at midnight
if tod >= 0.0 and tod <= 0.01 then
-- count backwards
playing[name].music = playing[name].music -1
if not playing[name].music then
-- play music every 20 minutes
if playing[name].music < -(60 * 20) then
playing[name].music = minetest.sound_play("ambience_music", {
to_player = name,
gain = MUSICVOLUME
})
end
playing[name].music = minetest.sound_play("ambience_music", {
to_player = name,
gain = MUSICVOLUME
})
elseif tod > 0.1 and playing[name].music then
-- reset music timer after 10 minutes
minetest.after(60 * 10, function(name)
playing[name].music = nil
if playing[name] then
playing[name].music = -1
end
end, name)
end
--print("-- music count", playing[name].music)
end
-- get foot and head level nodes at player position
@ -198,7 +205,7 @@ minetest.register_globalstep(function(dtime)
--print(string.format("elapsed time: %.4f\n", os.clock() - t1))
ok = playing[player_name] -- everything starts off ok if player around
ok = playing[player_name] -- everything starts off ok if player found
-- are we playing something already?
if ok and playing[player_name].handler then
@ -295,19 +302,23 @@ minetest.register_chatcommand("svol", {
-- music volume command (0 stops music)
minetest.register_chatcommand("mvol", {
params = "<mvol>",
description = "set music volume (0.1 to 1.0)",
description = "set music volume (0.1 to 1.0, 0 to stop music)",
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
-- ability to stop music by setting volume to 0
if MUSICVOLUME == 0 and playing[name].music
and playing[name].music >= 0 then
minetest.sound_stop(playing[name].music)
playing[name].music = -1
end
if MUSICVOLUME < 0.1 then MUSICVOLUME = 0.1 end
if MUSICVOLUME < 0 then MUSICVOLUME = 0 end
if MUSICVOLUME > 1.0 then MUSICVOLUME = 1.0 end
return true, "Music volume set to " .. MUSICVOLUME

View file

@ -220,6 +220,21 @@ local anvildef = {
sounds = default.node_sound_metal_defaults(),
---------------- added
can_dig = function(pos, player)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if inv:is_empty("input") and inv:is_empty("output") then
if not minetest.is_protected(pos, player:get_player_name()) then
return true
end
end
end,
-----------------
after_dig_node = function(pos, oldnode, oldmetadata, digger)
local meta = minetest.get_meta(pos)

View file

@ -95,6 +95,8 @@ end)
-- default biomes deco
local deco = {
{"default:dry_dirt", dry_grass, {}},
{"default:dry_dirt_with_dry_grass", dry_grass, {}},
{"default:dirt_with_dry_grass", dry_grass, flowers},
{"default:sand", {}, {"default:dry_shrub", "", "", ""} },
{"default:desert_sand", {}, {"default:dry_shrub", "", "", ""} },

View file

@ -11,13 +11,13 @@ if minetest.get_modpath("lucky_block") then
{"dro", {"bows:arrow_diamond"}, 5},
{"nod", "default:chest", 0, {
{name = "default:stick", max = 5},
{name = "default:flint", max = 3},
{name = "default:steel_ingot", max = 3},
{name = "default:bronze_ingot", max = 3},
{name = "default:mese_crystal_fragment", max = 3},
{name = "default:flint", max = 5},
{name = "default:steel_ingot", max = 5},
{name = "default:bronze_ingot", max = 5},
{name = "default:mese_crystal_fragment", max = 5},
{name = "farming:string", max = 5},
{name = bows.feather, max = 4},
{name = "bows:bow_bowie", max = 1}
{name = bows.feather, max = 5},
{name = "bows:bow_bowie", max = 1, chance = 4}
}},
})
end
end

View file

@ -9,6 +9,12 @@
local S = cottages.S
-- disable repair with anvil by setting a message for the item in question
cottages.forbid_repair = {}
-- example for hammer no longer beeing able to repair the hammer
--cottages.forbid_repair["cottages:hammer"] = 'The hammer is too complex for repairing.'
-- the hammer for the anvil
minetest.register_tool("cottages:hammer", {
description = S("Steel hammer for repairing tools on the anvil"),
@ -138,6 +144,12 @@ minetest.register_node("cottages:anvil", {
S('The workpiece slot is for damaged tools only.'));
return 0;
end
if( listname=='input'
and cottages.forbid_repair[ stack:get_name() ]) then
minetest.chat_send_player( player:get_player_name(),
S(cottages.forbid_repair[ stack:get_name() ]));
return 0;
end
return stack:get_count()
end,
@ -181,6 +193,14 @@ minetest.register_node("cottages:anvil", {
-- 65535 is max damage
local damage_state = 40-math.floor(input:get_wear()/1638);
-- just to make sure that it really can't get repaired if it should not
-- (if the check of placing the item in the input slot failed somehow)
if( puncher and name and cottages.forbid_repair[ input:get_name() ]) then
minetest.chat_send_player( name,
S(cottages.forbid_repair[ input:get_name() ]));
return;
end
local tool_name = input:get_name();
local hud_image = "";
if( tool_name

View file

@ -117,7 +117,7 @@ minetest.register_node("cottages:water_gen", {
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
groups = {tree = 1, choppy = 2, cracky = 1, flammable = 2},
sounds = cottages.sounds.wood,
node_box = {
type = "fixed",
@ -178,8 +178,14 @@ minetest.register_node("cottages:water_gen", {
can_dig = function(pos,player)
local meta = minetest.get_meta(pos);
local inv = meta:get_inventory()
return inv:is_empty("main") and
default.can_interact_with_node(player, pos)
local bucket = meta:get_string("bucket")
local start = meta:get_string("fillstarttime")
return inv:is_empty("main")
and default.can_interact_with_node(player, pos)
and (not(bucket) or bucket == "")
and ((not(start) or start == "" or
(minetest.get_us_time()/1000000) - tonumber(start)
>= cottages.water_fill_time -2))
end,
-- no inventory move allowed
allow_metadata_inventory_move = function(pos, from_list, from_index,
@ -213,7 +219,7 @@ minetest.register_node("cottages:water_gen", {
cottages.switch_public(pos, formname, fields, sender, 'tree trunk well')
end,
-- punch to place and retrieve bucket
on_punch = function(pos, node, puncher)
on_punch = function(pos, node, puncher, pointed_thing)
if( not( pos ) or not( node ) or not( puncher )) then
return
end
@ -223,7 +229,8 @@ minetest.register_node("cottages:water_gen", {
local owner = meta:get_string("owner")
local public = meta:get_string("public")
if( name ~= owner and public~="public") then
minetest.chat_send_player( name, S("This tree trunk well is owned by %s. You can't use it."):format(name))
minetest.chat_send_player( name,
S("This tree trunk well is owned by %s. You can't use it."):format(owner))
return
end
@ -233,13 +240,18 @@ minetest.register_node("cottages:water_gen", {
-- is the well working on something? (either empty or full bucket)
local bucket = meta:get_string("bucket")
-- there is a bucket loaded - either empty or full
if( bucket and bucket~="") then
if( bucket and bucket~="" and bucket ~= "bucket:bucket_empty") then
if( not(pinv:room_for_item("main", bucket))) then
minetest.chat_send_player( puncher:get_player_name(),
S("Sorry. You have no room for the bucket. Please free some "..
"space in your inventory first!"))
return
end
elseif( bucket and bucket == "bucket:bucket_empty") then
minetest.chat_send_player( puncher:get_player_name(),
S("Please wait until your bucket has been filled."))
-- do not give the empty bucket back immediately
return
end
-- remove the old entity (either a bucket will be placed now or a bucket taken)
@ -267,8 +279,6 @@ minetest.register_node("cottages:water_gen", {
if( wielded
and wielded:get_name()
and wielded:get_name() == "bucket:bucket_empty") then
-- remove the bucket from the players inventory
pinv:remove_item( "main", "bucket:bucket_empty")
-- remember that we got a bucket loaded
meta:set_string("bucket", "bucket:bucket_empty")
-- create the entity
@ -280,6 +290,8 @@ minetest.register_node("cottages:water_gen", {
minetest.after(cottages.water_fill_time, cottages.water_gen_fill_bucket, pos)
-- the bucket will only be filled if the water ran long enough
meta:set_string("fillstarttime", tostring(minetest.get_us_time()/1000000))
-- remove the bucket from the players inventory
pinv:remove_item( "main", "bucket:bucket_empty")
return;
end
-- buckets can also be emptied here

View file

@ -32,6 +32,25 @@ minetest.register_craft({
recipe = "group:food_corn"
})
-- popcorn
minetest.register_craftitem("farming:popcorn", {
description = S("Popcorn"),
inventory_image = "farming_popcorn.png",
groups = {food_popcorn = 1, flammable = 2},
on_use = minetest.item_eat(4)
})
minetest.register_craft({
output = "farming:popcorn",
recipe = {
{"group:food_pot", "group:food_oil", "group:food_corn"}
},
replacements = {
{"group:food_pot", "farming:pot"},
{"group:food_oil", "vessels:glass_bottle"}
}
})
-- cornstarch
minetest.register_craftitem("farming:cornstarch", {
description = S("Cornstarch"),

View file

@ -173,3 +173,6 @@ Created by gorlock (CC0)
Created by sirrobzeroone (CC0)
farming_gyoza.png
farming_pineapple_ring.png
Created by TechM8 (https://www.deviantart.com/techm8)
farming_popcorn.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 B

View file

@ -0,0 +1,10 @@
# Convert '.po' file to '.txt' file.
### COMMAND SAMPLE
''''
$ lua po2tr.lua "Your Name (Your Site) <Your Email>" "pt_BR.po"
rm "pt_BR.tr" "mobs_animal.pt_BR.tr"
$ cat mobs_animal.pt_BR.tr | less
''''
Source Code: https://gitlab.com/4w/xtend/-/blob/master/xtend_default/tools/convert_po_file_to_tr_file/convert_po_file_to_tr_file.lua

View file

@ -0,0 +1,46 @@
# textdomain: Lunovox Heavenfinder (https://libreplanet.org/wiki/User:Lunovox) <lunovox@disroot.org>
Bee=Abelha
Honey=Mel
Beehive=Colméia
Honey Block=Bloco de Mel
Bunny=Coelho
Raw Rabbit=Carne de Coelho (Cru)
Cooked Rabbit=Coelho (Assado)
Rabbit Hide=Pele de Coelho
Chicken=Galinha
Chicken Egg=Ovo de Galinha
Fried Egg=Ovo Frito
Raw Chicken=Carne de Galinha (Crua)
Cooked Chicken=Galinha Assada
Feather=Pluma
Cow already milked!=Vaca já ordenhada!
Cow=Vaca
Bucket of Milk=Balde de leite
Cheese=Queijo
Cheese Block=Bloco de Queijo
[MOD] Mobs Redo 'Animals' loaded=[MOBS_ANIMAL] Mod carregado completamente
Kitten=Gato
Penguin=Pinguim
Rat=Rato
Cooked Rat=Rato (Assado)
Black=Preto
Blue=Azul
Brown=Marrom
Cyan=Ciano
Dark Green=Verde Escuro
Dark Grey=Cinza Escuro
Green=Verde
Grey=Cinza
Magenta=Rosa Magenta
Orange=Laranja
Pink=Rosa
Red=Vermelho
Violet=Violeta
White=Branco
Yellow=Amarelo
@1 Sheep=Ovelha @1
Raw Mutton=Carneiro (Cru)
Cooked Mutton=Carneiro (Assado)
Warthog=Javali
Raw Porkchop=Costeleta de Javali (Crua)
Cooked Porkchop=Costeleta de Javali Assada

View file

@ -0,0 +1,46 @@
# textdomain: Lunovox Heavenfinder (https://libreplanet.org/wiki/User:Lunovox) <lunovox@disroot.org>
Bee=Abelha
Honey=Mel
Beehive=Colméia
Honey Block=Bloco de Mel
Bunny=Coelho
Raw Rabbit=Carne de Coelho (Cru)
Cooked Rabbit=Coelho (Assado)
Rabbit Hide=Pele de Coelho
Chicken=Galinha
Chicken Egg=Ovo de Galinha
Fried Egg=Ovo Frito
Raw Chicken=Carne de Galinha (Crua)
Cooked Chicken=Galinha Assada
Feather=Pluma
Cow already milked!=Vaca já ordenhada!
Cow=Vaca
Bucket of Milk=Balde de leite
Cheese=Queijo
Cheese Block=Bloco de Queijo
[MOD] Mobs Redo 'Animals' loaded=[MOBS_ANIMAL] Mod carregado completamente
Kitten=Gato
Penguin=Pinguim
Rat=Rato
Cooked Rat=Rato (Assado)
Black=Preto
Blue=Azul
Brown=Marrom
Cyan=Ciano
Dark Green=Verde Escuro
Dark Grey=Cinza Escuro
Green=Verde
Grey=Cinza
Magenta=Rosa Magenta
Orange=Laranja
Pink=Rosa
Red=Vermelho
Violet=Violeta
White=Branco
Yellow=Amarelo
@1 Sheep=Ovelha @1
Raw Mutton=Carneiro (Cru)
Cooked Mutton=Carneiro (Assado)
Warthog=Javali
Raw Porkchop=Costeleta de Javali (Crua)
Cooked Porkchop=Costeleta de Javali Assada

View file

@ -0,0 +1,116 @@
#!/usr/bin/env luajit
-- Convert regular Gettext PO files to Minetest-specific TR files. If there is
-- already a TR file with the same name of the PO file except the file suffix
-- bneing .tr (or .TR) instead of .po (or .PO) then THIS FILE WILL BE
-- OVERWRITTEN WITHOUT INFORMATION OR A WAY TO RECOVER THE PREVIOUS FILE!
--
--
-- ▄██▄
-- ▀███
-- █
-- ▄▄▄▄▄ █
-- ▀▄ ▀▄ █ BACKUP
-- ▄▀▀▀▄ █▄▄▄▄█▄▄ ▄▀▀▀▄ █
-- █ ▄ █ █ ▄ █ █
-- ▀▄ ▄▀ ▀▄ ▄▀ █
-- █▀▀▀ ▀▀▀ █ █
-- █ █ █ ALL
-- ▄▀▄▄▀▄ █ ▄█▀█▀█▀█▀█▀█▄ █ █
-- █▒▒▒▒█ █ █████████████▄ █ █
-- █▒▒▒▒█ █ ██████████████▄ █ █
-- █▒▒▒▒█ █ ██████████████▄ █ █
-- █▒▒▒▒█ █ ██████████████ █ █
-- █▒▒▒▒█ █ ██████████████▀ █ █ THE
-- █▒▒▒▒█ ██ ██████████████ █ █
-- ▀████▀ ██▀█ █████████████▀ █▄█
-- ██ ██ ▀█ █▄█▄█▄█▄█▄█▀ ▄█▀
-- ██ ██ ▀█ ▄▀▓█
-- ██ ██ ▀█▀▄▄▄▄▄▄▄▄▄▀▀▓▓▓█
-- ████ █▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█
-- ███ █▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█ THINGS
-- ██ █▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█
-- ██ █▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█
-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█
-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█
-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▌ !!!
-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▌
-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▌
-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▌
--
--
-- The syntax of TR files according to the introducing forum post is:
--
-- # textdomain: namespace
-- original 1 = translation 1
-- original 2 = translation 2
-- original 3 = tralslation 3
-- original N = translation N
--
-- Where namespace should be the name of the mod. Following strings have to be
-- escaped using @.
--
-- String | Escape
-- -------+--------
-- `@` |`@@`
-- `=` |`@=`
-- `\n` |`@\n`
--
-- See https://forum.minetest.net/viewtopic.php?t=18349 for details.
-- Preparation
if arg[1] == nil or arg[2] == nil then
print('Provide the namesspace as first parameter')
print('Provide the path to the source PO file as second parameter')
print('Example: '..arg[0]..' mymod path/to/my/source.po')
return
end
local SEP = package.path:match('(%p)%?%.') or '/' -- wonky but hey ... :)
-- Assign parameters to local variables
local namespace = arg[1]
local po_file = arg[2]
local tr_file = arg[2]:gsub('po$', 'tr'):gsub('PO$', 'TR')
-- Get the translations through crude plaintext file parsing
local file_contents = {}
local translations = {}
local po_file_handle = io.open(po_file, 'rb')
if po_file_handle == nil then print('No base file found') return end
for line in po_file_handle:lines() do
if line:match('^msgid') or line:match('^msgstr') then
table.insert(file_contents, line)
end
end
local escape_string = function (s)
s = s:gsub('@([^%d])', '@@%1') -- All @ not followed by a number become @@
s = s:gsub('([^@]@)$', '%1@') -- An @ at the end of the string become @@
s = s:gsub('=', '@=') -- All = become @=
return s
end
for number,line_content in pairs(file_contents) do
if line_content:match('^msgid') then
local o = line_content:gsub('^msgid "(.+)"$', '%1')
local t = file_contents[number + 1]:gsub('^msgstr "(.+)"$', '%1')
if o ~= 'msgid = ""' and t ~= 'msgstr ""' then
table.insert(translations, escape_string(o)..'='..escape_string(t))
end
end
end
print(number)
po_file_handle:close()
-- Write translation to file
local tr_file_handle = io.open(tr_file, 'w+')
if tr_file_handle == nil then print('Could not open target file') return end
tr_file_handle:write('# textdomain: '..namespace, "\n")
for _,line in pairs(translations) do tr_file_handle:write(line, "\n") end
tr_file_handle:close()

View file

@ -0,0 +1,199 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 11:28+0200\n"
"PO-Revision-Date: 2021-06-20 18:51-0300\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.6\n"
"Last-Translator: Lunovox Heavenfinder <lunovox@disroot.org>\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: pt_BR\n"
#: bee.lua
msgid "Bee"
msgstr "Abelha"
#: bee.lua
msgid "Honey"
msgstr "Mel"
#: bee.lua
msgid "Beehive"
msgstr "Colméia"
#: bee.lua
msgid "Honey Block"
msgstr "Bloco de Mel"
#: bunny.lua
msgid "Bunny"
msgstr "Coelho"
#: bunny.lua
msgid "Raw Rabbit"
msgstr "Carne de Coelho (Cru)"
#: bunny.lua
msgid "Cooked Rabbit"
msgstr "Coelho (Assado)"
#: bunny.lua
msgid "Rabbit Hide"
msgstr "Pele de Coelho"
#: chicken.lua
msgid "Chicken"
msgstr "Galinha"
#: chicken.lua
msgid "Chicken Egg"
msgstr "Ovo de Galinha"
#: chicken.lua
msgid "Fried Egg"
msgstr "Ovo Frito"
#: chicken.lua
msgid "Raw Chicken"
msgstr "Carne de Galinha (Crua)"
#: chicken.lua
msgid "Cooked Chicken"
msgstr "Galinha Assada"
#: chicken.lua
msgid "Feather"
msgstr "Pluma"
#: cow.lua
msgid "Cow already milked!"
msgstr "Vaca já ordenhada!"
#: cow.lua
msgid "Cow"
msgstr "Vaca"
#: cow.lua
msgid "Bucket of Milk"
msgstr "Balde de leite"
#: cow.lua
msgid "Cheese"
msgstr "Queijo"
#: cow.lua
msgid "Cheese Block"
msgstr "Bloco de Queijo"
#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr "[MOBS_ANIMAL] Mod carregado completamente"
#: kitten.lua
msgid "Kitten"
msgstr "Gato"
#: penguin.lua
msgid "Penguin"
msgstr "Pinguim"
#: rat.lua
msgid "Rat"
msgstr "Rato"
#: rat.lua
msgid "Cooked Rat"
msgstr "Rato (Assado)"
#: sheep.lua
msgid "Black"
msgstr "Preto"
#: sheep.lua
msgid "Blue"
msgstr "Azul"
#: sheep.lua
msgid "Brown"
msgstr "Marrom"
#: sheep.lua
msgid "Cyan"
msgstr "Ciano"
#: sheep.lua
msgid "Dark Green"
msgstr "Verde Escuro"
#: sheep.lua
msgid "Dark Grey"
msgstr "Cinza Escuro"
#: sheep.lua
msgid "Green"
msgstr "Verde"
#: sheep.lua
msgid "Grey"
msgstr "Cinza"
#: sheep.lua
msgid "Magenta"
msgstr "Rosa Magenta"
#: sheep.lua
msgid "Orange"
msgstr "Laranja"
#: sheep.lua
msgid "Pink"
msgstr "Rosa"
#: sheep.lua
msgid "Red"
msgstr "Vermelho"
#: sheep.lua
msgid "Violet"
msgstr "Violeta"
#: sheep.lua
msgid "White"
msgstr "Branco"
#: sheep.lua
msgid "Yellow"
msgstr "Amarelo"
#: sheep.lua
msgid "@1 Sheep"
msgstr "Ovelha @1 "
#: sheep.lua
msgid "Raw Mutton"
msgstr "Carneiro (Cru)"
#: sheep.lua
msgid "Cooked Mutton"
msgstr "Carneiro (Assado)"
#: warthog.lua
msgid "Warthog"
msgstr "Javali"
#: warthog.lua
msgid "Raw Porkchop"
msgstr "Costeleta de Javali (Crua)"
#: warthog.lua
msgid "Cooked Porkchop"
msgstr "Costeleta de Javali Assada"

View file

@ -0,0 +1,46 @@
# textdomain: Lunovox Heavenfinder (https://libreplanet.org/wiki/User:Lunovox) <lunovox@disroot.org>
Bee=Abelha
Honey=Mel
Beehive=Colméia
Honey Block=Bloco de Mel
Bunny=Coelho
Raw Rabbit=Carne de Coelho (Cru)
Cooked Rabbit=Coelho (Assado)
Rabbit Hide=Pele de Coelho
Chicken=Galinha
Chicken Egg=Ovo de Galinha
Fried Egg=Ovo Frito
Raw Chicken=Carne de Galinha (Crua)
Cooked Chicken=Galinha Assada
Feather=Pluma
Cow already milked!=Vaca já ordenhada!
Cow=Vaca
Bucket of Milk=Balde de leite
Cheese=Queijo
Cheese Block=Bloco de Queijo
[MOD] Mobs Redo 'Animals' loaded=[MOBS_ANIMAL] Mod carregado completamente
Kitten=Gato
Penguin=Pinguim
Rat=Rato
Cooked Rat=Rato (Assado)
Black=Preto
Blue=Azul
Brown=Marrom
Cyan=Ciano
Dark Green=Verde Escuro
Dark Grey=Cinza Escuro
Green=Verde
Grey=Cinza
Magenta=Rosa Magenta
Orange=Laranja
Pink=Rosa
Red=Vermelho
Violet=Violeta
White=Branco
Yellow=Amarelo
@1 Sheep=Ovelha @1
Raw Mutton=Carneiro (Cru)
Cooked Mutton=Carneiro (Assado)
Warthog=Javali
Raw Porkchop=Costeleta de Javali (Crua)
Cooked Porkchop=Costeleta de Javali Assada

View file

@ -0,0 +1,199 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-31 11:28+0200\n"
"PO-Revision-Date: 2021-06-20 18:51-0300\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.6\n"
"Last-Translator: Lunovox Heavenfinder <lunovox@disroot.org>\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: pt_BR\n"
#: bee.lua
msgid "Bee"
msgstr "Abelha"
#: bee.lua
msgid "Honey"
msgstr "Mel"
#: bee.lua
msgid "Beehive"
msgstr "Colméia"
#: bee.lua
msgid "Honey Block"
msgstr "Bloco de Mel"
#: bunny.lua
msgid "Bunny"
msgstr "Coelho"
#: bunny.lua
msgid "Raw Rabbit"
msgstr "Carne de Coelho (Cru)"
#: bunny.lua
msgid "Cooked Rabbit"
msgstr "Coelho (Assado)"
#: bunny.lua
msgid "Rabbit Hide"
msgstr "Pele de Coelho"
#: chicken.lua
msgid "Chicken"
msgstr "Galinha"
#: chicken.lua
msgid "Chicken Egg"
msgstr "Ovo de Galinha"
#: chicken.lua
msgid "Fried Egg"
msgstr "Ovo Frito"
#: chicken.lua
msgid "Raw Chicken"
msgstr "Carne de Galinha (Crua)"
#: chicken.lua
msgid "Cooked Chicken"
msgstr "Galinha Assada"
#: chicken.lua
msgid "Feather"
msgstr "Pluma"
#: cow.lua
msgid "Cow already milked!"
msgstr "Vaca já ordenhada!"
#: cow.lua
msgid "Cow"
msgstr "Vaca"
#: cow.lua
msgid "Bucket of Milk"
msgstr "Balde de leite"
#: cow.lua
msgid "Cheese"
msgstr "Queijo"
#: cow.lua
msgid "Cheese Block"
msgstr "Bloco de Queijo"
#: init.lua
msgid "[MOD] Mobs Redo 'Animals' loaded"
msgstr "[MOBS_ANIMAL] Mod carregado completamente"
#: kitten.lua
msgid "Kitten"
msgstr "Gato"
#: penguin.lua
msgid "Penguin"
msgstr "Pinguim"
#: rat.lua
msgid "Rat"
msgstr "Rato"
#: rat.lua
msgid "Cooked Rat"
msgstr "Rato (Assado)"
#: sheep.lua
msgid "Black"
msgstr "Preto"
#: sheep.lua
msgid "Blue"
msgstr "Azul"
#: sheep.lua
msgid "Brown"
msgstr "Marrom"
#: sheep.lua
msgid "Cyan"
msgstr "Ciano"
#: sheep.lua
msgid "Dark Green"
msgstr "Verde Escuro"
#: sheep.lua
msgid "Dark Grey"
msgstr "Cinza Escuro"
#: sheep.lua
msgid "Green"
msgstr "Verde"
#: sheep.lua
msgid "Grey"
msgstr "Cinza"
#: sheep.lua
msgid "Magenta"
msgstr "Rosa Magenta"
#: sheep.lua
msgid "Orange"
msgstr "Laranja"
#: sheep.lua
msgid "Pink"
msgstr "Rosa"
#: sheep.lua
msgid "Red"
msgstr "Vermelho"
#: sheep.lua
msgid "Violet"
msgstr "Violeta"
#: sheep.lua
msgid "White"
msgstr "Branco"
#: sheep.lua
msgid "Yellow"
msgstr "Amarelo"
#: sheep.lua
msgid "@1 Sheep"
msgstr "Ovelha @1 "
#: sheep.lua
msgid "Raw Mutton"
msgstr "Carneiro (Cru)"
#: sheep.lua
msgid "Cooked Mutton"
msgstr "Carneiro (Assado)"
#: warthog.lua
msgid "Warthog"
msgstr "Javali"
#: warthog.lua
msgid "Raw Porkchop"
msgstr "Costeleta de Javali (Crua)"
#: warthog.lua
msgid "Cooked Porkchop"
msgstr "Costeleta de Javali Assada"

View file

@ -0,0 +1,46 @@
# textdomain: Lunovox Heavenfinder (https://libreplanet.org/wiki/User:Lunovox) <lunovox@disroot.org>
Bee=Abelha
Honey=Mel
Beehive=Colméia
Honey Block=Bloco de Mel
Bunny=Coelho
Raw Rabbit=Carne de Coelho (Cru)
Cooked Rabbit=Coelho (Assado)
Rabbit Hide=Pele de Coelho
Chicken=Galinha
Chicken Egg=Ovo de Galinha
Fried Egg=Ovo Frito
Raw Chicken=Carne de Galinha (Crua)
Cooked Chicken=Galinha Assada
Feather=Pluma
Cow already milked!=Vaca já ordenhada!
Cow=Vaca
Bucket of Milk=Balde de leite
Cheese=Queijo
Cheese Block=Bloco de Queijo
[MOD] Mobs Redo 'Animals' loaded=[MOBS_ANIMAL] Mod carregado completamente
Kitten=Gato
Penguin=Pinguim
Rat=Rato
Cooked Rat=Rato (Assado)
Black=Preto
Blue=Azul
Brown=Marrom
Cyan=Ciano
Dark Green=Verde Escuro
Dark Grey=Cinza Escuro
Green=Verde
Grey=Cinza
Magenta=Rosa Magenta
Orange=Laranja
Pink=Rosa
Red=Vermelho
Violet=Violeta
White=Branco
Yellow=Amarelo
@1 Sheep=Ovelha @1
Raw Mutton=Carneiro (Cru)
Cooked Mutton=Carneiro (Assado)
Warthog=Javali
Raw Porkchop=Costeleta de Javali (Crua)
Cooked Porkchop=Costeleta de Javali Assada

View file

@ -36,7 +36,7 @@ mobs:register_mob("mobs_monster:lava_flan", {
{name = "mobs:lava_orb", chance = 15, min = 1, max = 1},
},
water_damage = 8,
lava_damage = 0,
lava_damage = -1,
fire_damage = 0,
light_damage = 0,
immune_to = {
@ -53,7 +53,7 @@ mobs:register_mob("mobs_monster:lava_flan", {
run_start = 20,
run_end = 28,
punch_start = 20,
punch_end = 28,
punch_end = 28
},
on_die = function(self, pos)
@ -174,9 +174,13 @@ minetest.register_tool(":mobs:pick_lava", {
inventory_image = "mobs_pick_lava.png",
tool_capabilities = {
full_punch_interval = 0.4,
max_drop_level=3,
groupcaps={
cracky = {times={[1]=1.80, [2]=0.80, [3]=0.40}, uses=40, maxlevel=3},
max_drop_level = 3,
groupcaps = {
cracky = {
times = {[1] = 1.80, [2] = 0.80, [3] = 0.40},
uses = 40,
maxlevel = 3
}
},
damage_groups = {fleshy = 6, fire = 1},
},
@ -189,7 +193,7 @@ minetest.register_craft({
recipe = {
{"mobs:lava_orb", "mobs:lava_orb", "mobs:lava_orb"},
{"", "default:obsidian_shard", ""},
{"", "default:obsidian_shard", ""},
{"", "default:obsidian_shard", ""}
}
})
@ -253,7 +257,7 @@ mobs:register_mob("mobs_monster:obsidian_flan", {
run_start = 20,
run_end = 28,
punch_start = 20,
punch_end = 28,
punch_end = 28
}
})
@ -296,9 +300,11 @@ mobs:register_arrow("mobs_monster:obsidian_arrow", {
local radius = 1
local def = minetest.registered_nodes[node]
if def then
node = { name = node }
node = {name = node}
end
if def and def.tiles and def.tiles[1] then
texture = def.tiles[1]
end
@ -325,7 +331,7 @@ mobs:register_arrow("mobs_monster:obsidian_arrow", {
texture = texture,
-- ^ only as fallback for clients without support for `node` parameter
node = node,
collisiondetection = true,
collisiondetection = true
})
minetest.set_node(pos, {name = "air"})

View file

@ -8,7 +8,7 @@ local use_cmi = minetest.global_exists("cmi")
mobs = {
mod = "redo",
version = "20210610",
version = "20210614",
intllib = S,
invis = minetest.global_exists("invisibility") and invisibility or {}
}
@ -28,8 +28,7 @@ local rad = math.rad
local atann = math.atan
local atan = function(x)
if not x or x ~= x then
--error("atan bassed NaN")
return 0
return 0 -- NaN
else
return atann(x)
end
@ -225,9 +224,6 @@ function mob_class:collision()
for _,object in ipairs(minetest.get_objects_inside_radius(pos, width)) do
if object:is_player() then
-- or (object:get_luaentity()
-- and object:get_luaentity()._cmi_is_mob == true
-- and object ~= self.object) then
local pos2 = object:get_pos()
local vec = {x = pos.x - pos2.x, z = pos.z - pos2.z}
@ -406,7 +402,6 @@ function mob_class:set_animation(anim, force)
0, self.animation[anim .. "_loop"] ~= false)
end
-- above function exported for mount.lua
function mobs:set_animation(entity, anim)
entity.set_animation(entity, anim)
end
@ -593,7 +588,7 @@ function mob_class:attempt_flight_correction(override)
local escape_direction = vdirection(pos, escape_target)
self.object:set_velocity(
vmultiply(escape_direction, 1)) --self.run_velocity))
vmultiply(escape_direction, 1))
return true
end
@ -645,7 +640,7 @@ function mobs:yaw_to_pos(self, target, rot)
end
-- if stay near set then check periodically for nodes and turn towards them
-- if stay near set then periodically check for nodes and turn towards them
function mob_class:do_stay_near()
if not self.stay_near then return false end
@ -742,9 +737,15 @@ function mob_class:update_tag()
col = "#FF0000"
end
-- build infotext
self.infotext = "Health: " .. self.health .. " / " .. self.hp_max
.. "\n" .. "Owner: " .. self.owner
-- set changes
self.object:set_properties({
nametag = self.nametag,
nametag_color = col
nametag_color = col,
infotext = self.infotext
})
end
@ -792,10 +793,7 @@ function mob_class:item_drop()
end
-- only drop rare items (drops.min = 0) if killed by player
if death_by_player then
obj = minetest.add_item(pos, ItemStack(item .. " " .. num))
elseif self.drops[n].min ~= 0 then
if death_by_player or self.drops[n].min ~= 0 then
obj = minetest.add_item(pos, ItemStack(item .. " " .. num))
end
@ -870,18 +868,17 @@ function mob_class:check_for_death(cmi_cause)
end
-- backup nametag so we can show health stats
if not self.nametag2 then
self.nametag2 = self.nametag or ""
end
-- if not self.nametag2 then
-- self.nametag2 = self.nametag or ""
-- end
if show_health
and (cmi_cause and cmi_cause.type == "punch") then
self.htimer = 2
self.nametag = "" .. self.health .. " / " .. self.hp_max
-- if show_health
-- and (cmi_cause and cmi_cause.type == "punch") then
-- self.htimer = 2
-- self.nametag = "♥ " .. self.health .. " / " .. self.hp_max
self:update_tag()
end
-- end
return false
end
@ -1051,13 +1048,13 @@ function mob_class:do_env_damage()
end
-- reset nametag after showing health stats
if self.htimer < 1 and self.nametag2 then
-- if self.htimer < 1 and self.nametag2 then
self.nametag = self.nametag2
self.nametag2 = nil
-- self.nametag = self.nametag2
-- self.nametag2 = nil
self:update_tag()
end
-- end
local pos = self.object:get_pos() ; if not pos then return end
@ -1081,8 +1078,7 @@ function mob_class:do_env_damage()
local nodef = minetest.registered_nodes[self.standing_in]
-- water
if self.water_damage ~= 0
and nodef.groups.water then
if self.water_damage ~= 0 and nodef.groups.water then
self.health = self.health - self.water_damage
@ -1094,8 +1090,7 @@ function mob_class:do_env_damage()
end
-- lava damage
elseif self.lava_damage ~= 0
and nodef.groups.lava then
elseif self.lava_damage ~= 0 and nodef.groups.lava then
self.health = self.health - self.lava_damage
@ -1107,8 +1102,7 @@ function mob_class:do_env_damage()
end
-- fire damage
elseif self.fire_damage ~= 0
and nodef.groups.fire then
elseif self.fire_damage ~= 0 and nodef.groups.fire then
self.health = self.health - self.fire_damage
@ -1241,58 +1235,58 @@ function mob_class:do_jump()
local blocked = minetest.registered_nodes[nodt.name].walkable
--print("standing on:", self.standing_on, pos.y - 0.25)
--print("in front:", nod.name, pos.y + 0.5)
--print("in front above:", nodt.name, pos.y + 1.5)
-- are we facing a fence or wall
if nod.name:find("fence") or nod.name:find("gate") or nod.name:find("wall") then
self.facing_fence = true
end
--[[
print("on: " .. self.standing_on
.. ", front: " .. nod.name
.. ", front above: " .. nodt.name
.. ", blocked: " .. (blocked and "yes" or "no")
.. ", fence: " .. (self.facing_fence and "yes" or "no")
)
]]
-- jump if standing on solid node (not snow) and not blocked
if (self.walk_chance == 0 or minetest.registered_items[nod.name].walkable)
and not blocked and not self.facing_fence and nod.name ~= node_snow then
-- jump if standing on solid node (not snow) and not blocked above
if (self.walk_chance == 0
or minetest.registered_items[nod.name].walkable)
and not blocked
and nod.name ~= node_snow then
local v = self.object:get_velocity()
if not nod.name:find("fence")
and not nod.name:find("gate")
and not nod.name:find("wall") then
v.y = self.jump_height
local v = self.object:get_velocity()
self:set_animation("jump") -- only when defined
v.y = self.jump_height
self.object:set_velocity(v)
self:set_animation("jump") -- only when defined
-- when in air move forward
minetest.after(0.3, function(self, v)
self.object:set_velocity(v)
if self.object:get_luaentity() then
-- when in air move forward
minetest.after(0.3, function(self, v)
if self.object:get_luaentity() then
self.object:set_acceleration({
x = v.x * 2,
y = 0,
z = v.z * 2
})
end
end, self, v)
if self:get_velocity() > 0 then
self:mob_sound(self.sounds.jump)
self.object:set_acceleration({
x = v.x * 2,
y = 0,
z = v.z * 2
})
end
end, self, v)
return true
else
self.facing_fence = true
if self:get_velocity() > 0 then
self:mob_sound(self.sounds.jump)
end
self.jump_count = 0
return true
end
-- if blocked against a block/wall for 5 counts then turn
if not self.following
and (self.facing_fence or blocked) then
-- if blocked for 3 counts then turn
if not self.following and (self.facing_fence or blocked) then
self.jump_count = (self.jump_count or 0) + 1
if self.jump_count > 4 then
if self.jump_count > 2 then
local yaw = self.object:get_yaw() or 0
local turn = random(0, 2) + 1.35
@ -1363,7 +1357,7 @@ end
-- Thanks Wuzzy for the following editable settings
local HORNY_TIME = 30
local HORNY_AGAIN_TIME = 300
local HORNY_AGAIN_TIME = 60 * 5 -- 5 minutes
local CHILD_GROW_TIME = 60 * 20 -- 20 minutes
-- find two animals of same type and breed if nearby and horny
@ -1391,16 +1385,15 @@ function mob_class:breed()
if self.on_grown then
self.on_grown(self)
else
-- jump when fully grown so as not to fall into ground
-- self.object:set_velocity({
-- x = 0,
-- y = self.jump_height,
-- z = 0
-- })
local pos = self.object:get_pos() ; if not pos then return end
local ent = self.object:get_luaentity()
pos.y = pos.y + (ent.collisionbox[2] * -1) - 0.4
self.object:set_pos(pos)
-- jump slightly when fully grown so as not to fall into ground
self.object:set_velocity({x = 0, y = 0.5, z = 0 })
end
end
@ -1623,6 +1616,40 @@ end
local los_switcher = false
local height_switcher = false
local can_dig_drop = function(pos)
if minetest.is_protected(pos, "") then
return false
end
local node = node_ok(pos, "air").name
local ndef = minetest.registered_nodes[node]
if node ~= "ignore"
and ndef
and ndef.drawtype ~= "airlike"
and not ndef.groups.level
and not ndef.groups.unbreakable
and not ndef.groups.liquid then
local drops = minetest.get_node_drops(node)
for _, item in ipairs(drops) do
minetest.add_item({
x = pos.x - 0.5 + random(),
y = pos.y - 0.5 + random(),
z = pos.z - 0.5 + random()
}, item)
end
minetest.remove_node(pos)
return true
end
return false
end
-- path finding and smart mob routine by rnd,
-- line_of_sight and other edits by Elkien3
@ -1788,8 +1815,8 @@ function mob_class:smart_mobs(s, p, dist, dtime)
-- lets make way by digging/building if not accessible
if self.pathfinding == 2 and mobs_griefing then
-- is player higher than mob?
if s.y < p1.y then
-- is player more than 1 block higher than mob?
if p1.y > (s.y + 1) then
-- build upwards
if not minetest.is_protected(s, "") then
@ -1797,8 +1824,7 @@ function mob_class:smart_mobs(s, p, dist, dtime)
local ndef1 = minetest.registered_nodes[self.standing_in]
if ndef1 and (ndef1.buildable_to or ndef1.groups.liquid) then
minetest.set_node(s, {name = mobs.fallback_node})
minetest.set_node(s, {name = mobs.fallback_node})
end
end
@ -1808,27 +1834,19 @@ function mob_class:smart_mobs(s, p, dist, dtime)
s.y = s.y + sheight
-- remove one block above to make room to jump
if not minetest.is_protected(s, "") then
local node1 = node_ok(s, "air").name
local ndef1 = minetest.registered_nodes[node1]
if node1 ~= "air"
and node1 ~= "ignore"
and ndef1
and not ndef1.groups.level
and not ndef1.groups.unbreakable
and not ndef1.groups.liquid then
minetest.set_node(s, {name = "air"})
minetest.add_item(s, ItemStack(node1))
end
end
can_dig_drop(s)
s.y = s.y - sheight
self.object:set_pos({x = s.x, y = s.y + 2, z = s.z})
-- is player more than 1 block lower than mob
elseif p1.y < (s.y - 1) then
-- dig down
s.y = s.y - self.collisionbox[4] - 0.2
can_dig_drop(s)
else -- dig 2 blocks to make door toward player direction
local yaw1 = self.object:get_yaw() + pi / 2
@ -1838,37 +1856,12 @@ function mob_class:smart_mobs(s, p, dist, dtime)
z = s.z + sin(yaw1)
}
if not minetest.is_protected(p1, "") then
-- dig bottom node first incase of door
can_dig_drop(p1)
local node1 = node_ok(p1, "air").name
local ndef1 = minetest.registered_nodes[node1]
p1.y = p1.y + 1
if node1 ~= "air"
and node1 ~= "ignore"
and ndef1
and not ndef1.groups.level
and not ndef1.groups.unbreakable
and not ndef1.groups.liquid then
minetest.add_item(p1, ItemStack(node1))
minetest.set_node(p1, {name = "air"})
end
p1.y = p1.y + 1
node1 = node_ok(p1, "air").name
ndef1 = minetest.registered_nodes[node1]
if node1 ~= "air"
and node1 ~= "ignore"
and ndef1
and not ndef1.groups.level
and not ndef1.groups.unbreakable
and not ndef1.groups.liquid then
minetest.add_item(p1, ItemStack(node1))
minetest.set_node(p1, {name = "air"})
end
end
can_dig_drop(p1)
end
end
@ -2600,7 +2593,10 @@ function mob_class:do_states(dtime)
self:smart_mobs(s, p, dist, dtime)
end
if self.at_cliff then
-- distance padding to stop spinning mob
local pad = abs(p.x - s.x) + abs(p.z - s.z)
if self.at_cliff or pad < 0.2 then
self:set_velocity(0)
self:set_animation("stand")
@ -2618,7 +2614,6 @@ function mob_class:do_states(dtime)
self:set_animation("walk")
end
end
else -- rnd: if inside reach range
self.path.stuck = false
@ -2765,11 +2760,7 @@ function mob_class:falling(pos)
end
-- fall at set speed
self.object:set_acceleration({
x = 0,
y = fall_speed,
z = 0
})
self.object:set_acceleration({x = 0, y = fall_speed, z = 0})
end
@ -2792,8 +2783,9 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
-- error checking when mod profiling is enabled
if not tool_capabilities then
minetest.log("warning",
"[mobs] Mod profiling enabled, damage not enabled")
minetest.log("warning", "[mobs] Mod profiling enabled, damage not enabled")
return true
end
@ -2869,6 +2861,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
if self.immune_to[n][1] == weapon_def.name then
damage = self.immune_to[n][2] or 0
break
-- if "all" then no tools deal damage unless it's specified in list
@ -2881,13 +2874,14 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
-- healing
if damage <= -1 then
self.health = self.health - floor(damage)
return true
end
if use_cmi
and cmi.notify_punch(
self.object, hitter, tflp, tool_capabilities, dir, damage) then
and cmi.notify_punch(self.object, hitter, tflp, tool_capabilities, dir, damage) then
return true
end
@ -2906,10 +2900,8 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
end
end
if tr then
if weapon_def.original_description then
toolranks.new_afteruse(weapon, hitter, nil, {wear = wear})
end
if tr and weapon_def.original_description then
toolranks.new_afteruse(weapon, hitter, nil, {wear = wear})
else
weapon:add_wear(wear)
end
@ -2957,20 +2949,6 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
if self:check_for_death({type = "punch", puncher = hitter, hot = hot}) then
return true
end
--[[ add healthy afterglow when hit (causes lag with large textures)
minetest.after(0.1, function()
if not self.object:get_luaentity() then return end
self.object:set_texture_mod("^[colorize:#c9900070")
minetest.after(0.3, function()
if not self.object:get_luaentity() then return end
self.object:set_texture_mod(self.texture_mods)
end)
end) ]]
end -- END if damage
-- knock back effect (only on full punch)
@ -2996,11 +2974,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
-- use tool knockback value or default
kb = tool_capabilities.damage_groups["knockback"] or kb
self.object:set_velocity({
x = dir.x * kb,
y = up,
z = dir.z * kb
})
self.object:set_velocity({x = dir.x * kb, y = up, z = dir.z * kb})
self.pause_timer = 0.25
end
@ -3247,10 +3221,8 @@ function mob_class:mob_activate(staticdata, def, dtime)
local armor
if type(self.armor) == "table" then
armor = table_copy(self.armor)
-- armor.immortal = 1
else
-- armor = {immortal = 1, fleshy = self.armor}
armor = {fleshy = self.armor}
armor = {fleshy = self.armor} -- immortal = 1
end
self.object:set_armor_groups(armor)
@ -3348,23 +3320,7 @@ end
-- main mob function
function mob_class:on_step(dtime, moveresult)
--[[ moveresult contains this for physical mobs
{
touching_ground = boolean,
collides = boolean,
standing_on_object = boolean,
collisions = {
{
type = string, -- "node" or "object",
axis = string, -- "x", "y" or "z"
node_pos = vector, -- if type is "node"
object = ObjectRef, -- if type is "object"
old_velocity = vector,
new_velocity = vector,
}}
}]]
if self.state == "die" then return end ----------------
if self.state == "die" then return end
if use_cmi then
cmi.notify_step(self.object, dtime)
@ -3890,11 +3846,13 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter
local numbers = settings:get(name)
if numbers then
numbers = numbers:split(",")
chance = tonumber(numbers[1]) or chance
aoc = tonumber(numbers[2]) or aoc
if chance == 0 then
minetest.log("warning",
string.format("[mobs] %s has spawning disabled", name))
return
@ -4678,14 +4636,14 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
self.health = self.hp_max
if self.htimer < 1 then
-- if self.htimer < 1 then
minetest.chat_send_player(clicker:get_player_name(),
S("@1 at full health (@2)",
self.name:split(":")[2], tostring(self.health)))
-- minetest.chat_send_player(clicker:get_player_name(),
-- S("@1 at full health (@2)",
-- self.name:split(":")[2], tostring(self.health)))
self.htimer = 5
end
-- self.htimer = 5
-- end
end
self.object:set_hp(self.health)

View file

@ -2,4 +2,5 @@ default
hunger?
hbhunger?
stamina?
lucky_block?
lucky_block?
screwdriver?

View file

@ -4,8 +4,10 @@ local hmod = minetest.global_exists("hunger")
local hbmod = minetest.global_exists("hbhunger")
local stmod = minetest.global_exists("stamina")
local screwdriver_exists = minetest.global_exists("screwdriver")
-- eat pie slice function
local replace_pie = function(node, puncher, pos)
local function replace_pie(node, puncher, pos)
-- is this my pie?
if minetest.is_protected(pos, puncher:get_player_name()) then
@ -41,7 +43,11 @@ local replace_pie = function(node, puncher, pos)
node.name = pie .. "_" .. (num + 1)
end
minetest.swap_node(pos, {name = node.name})
minetest.swap_node(pos, node)
if num == 3 then
minetest.check_for_falling(pos)
end
-- Blockmen's hud_hunger mod
if hmod then
@ -91,12 +97,13 @@ end
-- register pie bits
local register_pie = function(pie, desc)
local function register_pie(pie, desc)
-- full pie
minetest.register_node("pie:" .. pie .. "_0", {
description = desc,
paramtype = "light",
paramtype2 = "facedir",
use_texture_alpha = "clip",
sunlight_propagates = false,
tiles = {
@ -108,9 +115,11 @@ local register_pie = function(pie, desc)
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {{-0.45, -0.5, -0.45, 0.45, 0, 0.45}}
fixed = {-0.45, -0.5, -0.45, 0.45, 0, 0.45}
},
on_rotate = screwdriver_exists and screwdriver.rotate_simple,
on_punch = function(pos, node, puncher, pointed_thing)
replace_pie(node, puncher, pos)
end
@ -118,8 +127,9 @@ local register_pie = function(pie, desc)
-- 3/4 pie
minetest.register_node("pie:" .. pie .. "_1", {
description = "3/4" .. desc,
description = "3/4 " .. desc,
paramtype = "light",
paramtype2 = "facedir",
use_texture_alpha = "clip",
sunlight_propagates = true,
tiles = {
@ -131,9 +141,11 @@ local register_pie = function(pie, desc)
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {{-0.45, -0.5, -0.25, 0.45, 0, 0.45}}
fixed = {-0.45, -0.5, -0.25, 0.45, 0, 0.45}
},
on_rotate = screwdriver_exists and screwdriver.rotate_simple,
on_punch = function(pos, node, puncher, pointed_thing)
replace_pie(node, puncher, pos)
end
@ -143,6 +155,7 @@ local register_pie = function(pie, desc)
minetest.register_node("pie:" .. pie .. "_2", {
description = "Half " .. desc,
paramtype = "light",
paramtype2 = "facedir",
use_texture_alpha = "clip",
sunlight_propagates = true,
tiles = {
@ -154,9 +167,11 @@ local register_pie = function(pie, desc)
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {{-0.45, -0.5, 0.0, 0.45, 0, 0.45}}
fixed = {-0.45, -0.5, 0.0, 0.45, 0, 0.45}
},
on_rotate = screwdriver_exists and screwdriver.rotate_simple,
on_punch = function(pos, node, puncher, pointed_thing)
replace_pie(node, puncher, pos)
end
@ -166,6 +181,7 @@ local register_pie = function(pie, desc)
minetest.register_node("pie:" .. pie .. "_3", {
description = "Piece of " .. desc,
paramtype = "light",
paramtype2 = "facedir",
use_texture_alpha = "clip",
sunlight_propagates = true,
tiles = {
@ -177,9 +193,11 @@ local register_pie = function(pie, desc)
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {{-0.45, -0.5, 0.25, 0.45, 0, 0.45}}
fixed = {-0.45, -0.5, 0.25, 0.45, 0, 0.45}
},
on_rotate = screwdriver_exists and screwdriver.rotate_simple,
on_punch = function(pos, node, puncher, pointed_thing)
replace_pie(node, puncher, pos)
end
@ -197,7 +215,7 @@ minetest.register_craft({
{"group:food_sugar", "group:food_egg", "group:food_sugar"},
{"group:food_wheat", "group:food_flour", "group:food_wheat"}
},
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
})
@ -211,7 +229,7 @@ minetest.register_craft({
{"group:food_sugar", "group:food_egg", "group:food_sugar"},
{"group:food_wheat", "group:food_flour", "group:food_wheat"}
},
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
})
@ -225,7 +243,7 @@ minetest.register_craft({
{"group:food_sugar", "group:food_egg", "group:food_sugar"},
{"group:food_wheat", "group:food_flour", "group:food_wheat"}
},
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
})
@ -239,7 +257,7 @@ minetest.register_craft({
{"group:food_sugar", "group:food_egg", "group:food_sugar"},
{"group:food_wheat", "group:food_flour", "group:food_wheat"}
},
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
})
@ -253,7 +271,7 @@ minetest.register_craft({
{"group:food_sugar", "group:food_egg", "group:food_sugar"},
{"group:food_flour", "group:food_cheese", "group:food_flour"}
},
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
})
@ -279,12 +297,12 @@ minetest.register_craft({
{"group:food_sugar", "group:food_egg", "group:food_sugar"},
{"group:food_wheat", "group:food_flour", "group:food_wheat"}
},
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
})
-- bread pudding
register_pie("brpd","Bread Pudding")
register_pie("brpd", "Bread Pudding")
minetest.register_craft({
output = "pie:brpd_0",
@ -293,12 +311,12 @@ minetest.register_craft({
{"group:food_sugar", "group:food_egg", "group:food_sugar"},
{"group:food_wheat", "group:food_flour", "group:food_wheat"}
},
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
})
-- orange pie
register_pie("orange","Orange Pie")
register_pie("orange", "Orange Pie")
minetest.register_craft({
output = "pie:orange_0",
@ -307,7 +325,7 @@ minetest.register_craft({
{"group:food_sugar", "group:food_egg", "group:food_sugar"},
{"group:food_wheat", "group:food_flour", "group:food_wheat"}
},
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
})
@ -343,4 +361,4 @@ minetest.register_alias("pie:sugar", "farming:sugar")
minetest.register_alias("pie:knife", "default:sword_steel")
print ("[MOD] Pie loaded")
print("[MOD] Pie loaded")

View file

@ -1,4 +1,4 @@
name = pie
depends = default
optional_depends = hunger, hbhunger, stamina, lucky_block
optional_depends = hunger, hbhunger, stamina, lucky_block, screwdriver
description = Add a selection of tasty Pie/Cakes to eat.

View file

@ -26,7 +26,7 @@ node_box = {
{-0.0612,-0.500000,-0.500000,0.0612,0.500000,-0.375000}, --NodeBox 1
}
},
groups = {snappy=3,flammable=2},
groups = {snappy=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
drop = 'default:stick'
})
@ -61,7 +61,8 @@ for i in pairs(BushBranchCenter) do
-- tree=1, -- MM: disabled because some recipes use group:tree for trunks
snappy=3,
flammable=2,
leaves=1
leaves=1,
attached_node=1
},
sounds = default.node_sound_leaves_defaults(),
drop = 'default:stick 4'
@ -104,7 +105,8 @@ for i in pairs(BushBranchSide) do
-- tree=1, -- MM: disabled because some recipes use group:tree for trunks
snappy=3,
flammable=2,
leaves=1
leaves=1,
attached_node=1
},
sounds = default.node_sound_leaves_defaults(),
drop = 'default:stick 3'

View file

@ -15,7 +15,7 @@ minetest.register_node("cavestuff:pebble_1",{
tiles = {"undergrowth_pebble.png"},
paramtype = "light",
paramtype2 = "facedir",
groups = {cracky=3, stone=1},
groups = {cracky=3, stone=1, attached_node=1},
selection_box = cbox,
collision_box = cbox,
on_place = function(itemstack, placer, pointed_thing)
@ -35,7 +35,7 @@ minetest.register_node("cavestuff:pebble_2",{
tiles = {"undergrowth_pebble.png"},
paramtype = "light",
paramtype2 = "facedir",
groups = {cracky=3, stone=1, not_in_creative_inventory=1},
groups = {cracky=3, stone=1, attached_node=1, not_in_creative_inventory=1},
selection_box = cbox,
collision_box = cbox,
sounds = default.node_sound_stone_defaults(),
@ -48,7 +48,7 @@ minetest.register_node("cavestuff:desert_pebble_1",{
tiles = {"default_desert_stone.png"},
paramtype = "light",
paramtype2 = "facedir",
groups = {cracky=3, stone=1},
groups = {cracky=3, stone=1, attached_node=1},
selection_box = cbox,
collision_box = cbox,
on_place = function(itemstack, placer, pointed_thing)
@ -67,7 +67,7 @@ minetest.register_node("cavestuff:desert_pebble_2",{
tiles = {"default_desert_stone.png"},
paramtype = "light",
paramtype2 = "facedir",
groups = {cracky=3, stone=1, not_in_creative_inventory=1},
groups = {cracky=3, stone=1, attached_node=1, not_in_creative_inventory=1},
selection_box = cbox,
collision_box = cbox,
sounds = default.node_sound_stone_defaults(),

View file

@ -4,28 +4,44 @@
-- TWiGS
-----------------------------------------------------------------------------------------------
local fakenode = {
name = "default:stone", -- could be anything that's guaranteed to exist at mapgen time, and isn't buildable_to
param1 = 0,
param2 = 0
}
abstract_trunks.place_twig = function(pos)
local twig_size = math.random(1,27)
local twig_size = math.random(1,27)
local right_here = {x=pos.x , y=pos.y+1, z=pos.z }
local north = {x=pos.x , y=pos.y+1, z=pos.z+1}
local north_east = {x=pos.x+1, y=pos.y+1, z=pos.z+1}
local east = {x=pos.x+1, y=pos.y+1, z=pos.z }
local south_east = {x=pos.x+1, y=pos.y+1, z=pos.z-1}
local south = {x=pos.x , y=pos.y+1, z=pos.z-1}
local south_west = {x=pos.x-1, y=pos.y+1, z=pos.z-1}
local west = {x=pos.x-1, y=pos.y+1, z=pos.z }
local north_west = {x=pos.x-1, y=pos.y+1, z=pos.z+1}
local right_here = {x=pos.x , y=pos.y+1, z=pos.z }
local north = {x=pos.x , y=pos.y+1, z=pos.z+1}
local north_east = {x=pos.x+1, y=pos.y+1, z=pos.z+1}
local east = {x=pos.x+1, y=pos.y+1, z=pos.z }
local south_east = {x=pos.x+1, y=pos.y+1, z=pos.z-1}
local south = {x=pos.x , y=pos.y+1, z=pos.z-1}
local south_west = {x=pos.x-1, y=pos.y+1, z=pos.z-1}
local west = {x=pos.x-1, y=pos.y+1, z=pos.z }
local north_west = {x=pos.x-1, y=pos.y+1, z=pos.z+1}
local node_here = minetest.get_node(right_here)
local node_north = minetest.get_node(north)
local node_n_e = minetest.get_node(north_east)
local node_east = minetest.get_node(east)
local node_s_e = minetest.get_node(south_east)
local node_south = minetest.get_node(south)
local node_s_w = minetest.get_node(south_west)
local node_west = minetest.get_node(west)
local node_n_w = minetest.get_node(north_west)
node_north = minetest.registered_nodes[node_north.name] and node_north or fakenode
node_n_e = minetest.registered_nodes[node_n_e.name] and node_n_e or fakenode
node_east = minetest.registered_nodes[node_east.name] and node_east or fakenode
node_s_e = minetest.registered_nodes[node_s_e.name] and node_s_e or fakenode
node_south = minetest.registered_nodes[node_south.name] and node_south or fakenode
node_s_w = minetest.registered_nodes[node_s_w.name] and node_s_w or fakenode
node_west = minetest.registered_nodes[node_west.name] and node_west or fakenode
node_n_w = minetest.registered_nodes[node_n_w.name] and node_n_w or fakenode
local node_here = minetest.get_node(right_here)
local node_north = minetest.get_node(north)
local node_n_e = minetest.get_node(north_east)
local node_east = minetest.get_node(east)
local node_s_e = minetest.get_node(south_east)
local node_south = minetest.get_node(south)
local node_s_w = minetest.get_node(south_west)
local node_west = minetest.get_node(west)
local node_n_w = minetest.get_node(north_west)
-- small twigs
if twig_size <= 16 then
minetest.swap_node(right_here, {name="trunks:twig_"..math.random(1,4), param2=math.random(0,3)})
@ -356,11 +372,12 @@ if Moss_on_ground == true then
abstract_trunks.grow_moss_on_ground = function(pos)
local on_ground = {x=pos.x, y=pos.y+1, z=pos.z}
local moss_type = math.random(1,21)
local rot = math.random(0,3)
if moss_type == 1 then
minetest.swap_node(on_ground, {name="trunks:moss_fungus", param2=math.random(0,3)})
minetest.swap_node(on_ground, {name="trunks:moss_with_fungus_"..rot, param2=1})
else
minetest.swap_node(on_ground, {name="trunks:moss", param2=math.random(0,3)})
minetest.swap_node(on_ground, {name="trunks:moss_plain_"..rot, param2=1})
end
end
@ -406,44 +423,49 @@ abstract_trunks.grow_moss_on_trunk = function(pos)
local node_under = minetest.get_node(undrneath)
--if minetest.get_item_group(node_under.name, "tree") < 1 then
local moss_type = math.random(1,41)
if minetest.registered_nodes[node_here.name].buildable_to then -- instead of check_air = true,
if minetest.registered_nodes[node_here.name].buildable_to then
local moss_type = math.random(1,41)
local rot = math.random(0,3)
if moss_type == 1 then
minetest.swap_node(on_ground, {name="trunks:moss_fungus", param2=math.random(0,3) --[[1]]})
minetest.swap_node(on_ground, {name="trunks:moss_with_fungus_"..rot, param2=1})
elseif moss_type < 22 then
minetest.swap_node(on_ground, {name="trunks:moss", param2=math.random(0,3) --[[1]]})
minetest.swap_node(on_ground, {name="trunks:moss_plain_"..rot, param2=1})
end
end
local moss_type = math.random(1,31) -- cliche of more moss at north
if minetest.registered_nodes[node_north.name].buildable_to then -- instead of check_air = true,
if minetest.registered_nodes[node_north.name].buildable_to then
local moss_type = math.random(1,31) -- cliche of more moss at north
local rot = math.random(0,3)
if moss_type == 1 then
minetest.swap_node(at_side_n, {name="trunks:moss_fungus", param2=math.random(4,7)}) -- 5,4,6,7
minetest.swap_node(at_side_n, {name="trunks:moss_with_fungus_"..rot, param2=5})
elseif moss_type < 22 then
minetest.swap_node(at_side_n, {name="trunks:moss", param2=math.random(4,7)})
minetest.swap_node(at_side_n, {name="trunks:moss_plain_"..rot, param2=5})
end
end
local moss_type = math.random(1,41)
if minetest.registered_nodes[node_east.name].buildable_to then -- instead of check_air = true,
if minetest.registered_nodes[node_east.name].buildable_to then
local moss_type = math.random(1,41)
local rot = math.random(0,3)
if moss_type == 1 then
minetest.swap_node(at_side_e, {name="trunks:moss_fungus", param2=math.random(12,15)})
minetest.swap_node(at_side_e, {name="trunks:moss_with_fungus_"..rot, param2=3})
elseif moss_type < 22 then
minetest.swap_node(at_side_e, {name="trunks:moss", param2=math.random(12,15)})
minetest.swap_node(at_side_e, {name="trunks:moss_plain_"..rot, param2=3})
end
end
local moss_type = math.random(1,41)
if minetest.registered_nodes[node_south.name].buildable_to then -- instead of check_air = true,
if minetest.registered_nodes[node_south.name].buildable_to then
local moss_type = math.random(1,41)
local rot = math.random(0,3)
if moss_type == 1 then
minetest.swap_node(at_side_s, {name="trunks:moss_fungus", param2=math.random(8,11)})
minetest.swap_node(at_side_s, {name="trunks:moss_with_fungus_"..rot, param2=4})
elseif moss_type < 22 then
minetest.swap_node(at_side_s, {name="trunks:moss", param2=math.random(8,11)})
minetest.swap_node(at_side_s, {name="trunks:moss_plain_"..rot, param2=4})
end
end
local moss_type = math.random(1,41)
if minetest.registered_nodes[node_west.name].buildable_to then -- instead of check_air = true,
if minetest.registered_nodes[node_west.name].buildable_to then
local moss_type = math.random(1,41)
local rot = math.random(0,3)
if moss_type == 1 then
minetest.swap_node(at_side_w, {name="trunks:moss_fungus", param2=math.random(16,19)})
minetest.swap_node(at_side_w, {name="trunks:moss_with_fungus_"..rot, param2=2})
elseif moss_type < 22 then
minetest.swap_node(at_side_w, {name="trunks:moss", param2=math.random(16,19)})
minetest.swap_node(at_side_w, {name="trunks:moss_plain_"..rot, param2=2})
end
end
--end

View file

@ -65,42 +65,63 @@ end
-----------------------------------------------------------------------------------------------
-- MoSS
-----------------------------------------------------------------------------------------------
local flat_moss = {-1/2, -1/2, -1/2, 1/2, -15/32--[[<-flickers if smaller]], 1/2}
minetest.register_node("trunks:moss", {
description = S("Moss"),
drawtype = "nodebox",--"signlike",
tiles = {"trunks_moss.png"},
inventory_image = "trunks_moss.png",
wield_image = "trunks_moss.png",
paramtype = "light",
paramtype2 = "facedir",--"wallmounted",
sunlight_propagates = true,
walkable = false,
node_box = {type = "fixed", fixed = flat_moss},
selection_box = {type = "fixed", fixed = flat_stick},--{type = "wallmounted"},
groups = {snappy = 3, flammable = 3 },
sounds = default.node_sound_leaves_defaults(),
})
-- wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125},
-- wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125},
-- wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375},
-----------------------------------------------------------------------------------------------
-- MoSS & FuNGuS
-----------------------------------------------------------------------------------------------
minetest.register_node("trunks:moss_fungus", {
description = S("Moss with Fungus"),
drawtype = "nodebox",--"signlike",
tiles = {"trunks_moss_fungus.png"},
inventory_image = "trunks_moss_fungus.png",
wield_image = "trunks_moss_fungus.png",
paramtype = "light",
paramtype2 = "facedir",--"wallmounted",
sunlight_propagates = true,
walkable = false,
node_box = {type = "fixed", fixed = flat_moss},
selection_box = {type = "fixed", fixed = flat_stick},--{type = "wallmounted"},
groups = {snappy = 3, flammable = 3 },
sounds = default.node_sound_leaves_defaults(),
})
-- was local flat_moss = {-1/2, -1/2, -1/2, 1/2, -15/32, 1/2}
local cbox = {
type = "wallmounted",
wall_top = {-1/2, 1/2, -1/2, 1/2, 15/32, 1/2},
wall_bottom = {-1/2, -1/2, -1/2, 1/2, -15/32, 1/2},
wall_side = {-1/2, -1/2, -1/2, -15/32, 1/2, 1/2}
}
for r = 0, 3 do
local xform = ""
if r > 0 then xform = "^[transformR"..r*90 end
minetest.register_node("trunks:moss_plain_"..r, {
description = S("Moss"),
drawtype = "nodebox",
tiles = {"trunks_moss.png"..xform},
inventory_image = "trunks_moss.png",
wield_image = "trunks_moss.png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
node_box = cbox,
groups = {snappy = 3, flammable = 3, attached_node=1, not_in_creative_inventory = r},
sounds = default.node_sound_leaves_defaults(),
drop = "trunks:moss_plain_0",
})
-----------------------------------------------------------------------------------------------
-- MoSS & FuNGuS
-----------------------------------------------------------------------------------------------
minetest.register_node("trunks:moss_with_fungus_"..r, {
description = S("Moss with Fungus"),
drawtype = "nodebox",
tiles = {"trunks_moss_fungus.png"..xform},
inventory_image = "trunks_moss_fungus.png",
wield_image = "trunks_moss_fungus.png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
node_box = cbox,
groups = {snappy = 3, flammable = 3, attached_node=1, not_in_creative_inventory = r},
sounds = default.node_sound_leaves_defaults(),
drop = "trunks:moss_with_fungus_0",
})
end
minetest.register_alias("trunks:moss_plain", "trunks:moss_plain_0")
minetest.register_alias("trunks:moss_with_fungus", "trunks:moss_with_fungus_0")
-----------------------------------------------------------------------------------------------
-- TWiGS BLoCK
@ -361,7 +382,8 @@ for i in pairs(TRuNKS) do
snappy=1,
choppy=2,
oddly_breakable_by_hand=1,
flammable=2--,
flammable=2,
attached_node = 1
--not_in_creative_inventory=1 -- atm in inv for testing
},
--drop = "trunks:twig_1", -- not sure about this yet
@ -376,3 +398,26 @@ end
end
minetest.register_alias("trunks:pine_trunkroot", "trunks:pine_treeroot")
-- convert moss to wallmounted mode so that attached_node works properly.
local fdirtowall = {
[0] = 1,
[1] = 5,
[2] = 4,
[3] = 3,
[4] = 2,
}
minetest.register_lbm({
name = "trunks:convert_moss_wallmounted",
label = "Convert moss to wallmounted mode",
run_at_every_load = true,
nodenames = {"trunks:moss", "trunks:moss_fungus"},
action = function(pos, node)
local basedir = math.floor(node.param2 / 4)
local rot = node.param2 % 4
local newname = node.name == "trunks:moss_fungus" and "trunks:moss_with_fungus" or "trunks:moss_plain"
minetest.set_node(pos, {name = newname.."_"..rot, param2 = fdirtowall[basedir] })
end
})

View file

@ -40,7 +40,7 @@ minetest.register_node("youngtrees:youngtree2_middle",{
{-0.500000,0.125000,-0.500000,0.500000,0.500000,0.500000}, --NodeBox 3
}
},
groups = {snappy=3,flammable=2},
groups = {snappy=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
drop = 'trunks:twig_1'
})
@ -58,7 +58,7 @@ minetest.register_node("youngtrees:youngtree_top", {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
},
groups = {snappy=3,flammable=2},
groups = {snappy=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
drop = 'trunks:twig_1'
})
@ -77,7 +77,7 @@ minetest.register_node("youngtrees:youngtree_middle", {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
},
groups = {snappy=3,flammable=2},
groups = {snappy=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
drop = 'trunks:twig_1'
})
@ -97,7 +97,7 @@ minetest.register_node("youngtrees:youngtree_bottom", {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
},
groups = {snappy=3,flammable=2},
groups = {snappy=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
drop = 'trunks:twig_1'
})

View file

@ -0,0 +1,3 @@
rainbow gohst
Phill
CC BY-SA 3.0

View file

@ -0,0 +1,3 @@
Danger
Phill
CC BY-SA 3.0

View file

@ -0,0 +1,3 @@
Monster Boy
Phill
CC BY-SA 3.0

View file

@ -0,0 +1,3 @@
Gohst sam
Phill
CC BY-SA 3.0

View file

@ -0,0 +1,3 @@
FBI
Phill
CC BY-SA 3.0

View file

@ -0,0 +1,3 @@
Endersam
Phill
CC BY-SA 3.0

View file

@ -0,0 +1,3 @@
Flaming
Flaming Strike
CC BY-SA 3.0

View file

@ -0,0 +1,3 @@
FBI Ninja
Phill
CC BY-SA 3.0

View file

@ -0,0 +1,3 @@
euro 2021 -FR10- minetest footmod? free NC share modify ok
DcyD3
CC BY-NC-SA 4.0

View file

@ -0,0 +1,3 @@
spider-man
DcyD3
CC BY-NC-SA 3.0

View file

@ -0,0 +1,3 @@
eye you !
DcyD3
CC BY-NC-SA 3.0

View file

@ -0,0 +1,3 @@
Xbox 360 Skin Pack 1
angel
CC BY 3.0

View file

@ -0,0 +1,3 @@
Irrlicht
Phill
CC BY-SA 3.0

View file

@ -0,0 +1,3 @@
kinie? 4minetest
DcyD3
CC BY-NC-SA 3.0

View file

@ -0,0 +1,3 @@
barca 4fans ! thx
DcyD3
CC BY-NC-SA 3.0

View file

@ -0,0 +1,3 @@
oh no no not me ! lool
DcyD3
CC BY-NC-SA 3.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 993 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -204,6 +204,30 @@ local function set_sprinting(name, sprinting)
end
local function head_particle(player, texture)
local prop = player:get_properties()
local pos = player:get_pos() ; pos.y = pos.y + prop.eye_height -- mouth level
local dir = player:get_look_dir()
minetest.add_particlespawner({
amount = 5,
time = 0.1,
minpos = pos,
maxpos = pos,
minvel = {x = dir.x - 1, y = dir.y, z = dir.z - 1},
maxvel = {x = dir.x + 1, y = dir.y, z = dir.z + 1},
minacc = {x = 0, y = -5, z = 0},
maxacc = {x = 0, y = -9, z = 0},
minexptime = 1,
maxexptime = 1,
minsize = 1,
maxsize = 2,
texture = texture
})
end
local function drunk_tick()
for _,player in ipairs(minetest.get_connected_players()) do
@ -218,6 +242,9 @@ local function drunk_tick()
local num = stamina.players[name].drunk
if num and num > 0 and math.floor(num / 20) == num / 20 then
head_particle(player, "bubble.png")
minetest.sound_play("stamina_burp",
{to_player = name, gain = 0.7}, true)
end
@ -381,6 +408,8 @@ local function poison_tick()
local hp = player:get_hp() - 1
head_particle(player, "stamina_poison_particle.png")
if hp > 0 then
player:set_hp(hp, {poison = true})
end
@ -517,26 +546,9 @@ function stamina.eat(hp_change, replace_with_item, itemstack, user, pointed_thin
minetest.sound_play(snd, {to_player = name, gain = 0.7}, true)
-- particle effect when eating
local prop = user:get_properties()
local pos = user:get_pos() ; pos.y = pos.y + prop.eye_height -- mouth level
local texture = minetest.registered_items[itemname].inventory_image
local dir = user:get_look_dir()
minetest.add_particlespawner({
amount = 5,
time = 0.1,
minpos = pos,
maxpos = pos,
minvel = {x = dir.x - 1, y = dir.y, z = dir.z - 1},
maxvel = {x = dir.x + 1, y = dir.y, z = dir.z + 1},
minacc = {x = 0, y = -5, z = 0},
maxacc = {x = 0, y = -9, z = 0},
minexptime = 1,
maxexptime = 1,
minsize = 1,
maxsize = 2,
texture = texture
})
head_particle(user, texture)
-- if player drinks milk then stop poison and being drunk
local item_name = itemstack:get_name() or ""

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 B

View file

@ -124,6 +124,7 @@ for idx,color in ipairs(tColors) do
paramtype = 'light',
light_source = minetest.LIGHT_MAX,
sounds = default.node_sound_stone_defaults(),
groups = {choppy=2, cracky=1, not_in_creative_inventory=1},
is_ground_content = false,
drop = "tubelib_addons2:lamp"

View file

@ -71,6 +71,7 @@ minetest.register_node("tubelib_addons2:lamp_on", {
paramtype = "light",
paramtype2 = "color",
palette = "unifieddyes_palette_extended.png",
sounds = default.node_sound_stone_defaults(),
groups = {choppy=2, cracky=1, not_in_creative_inventory=1, ud_param2_colorable = 1},
on_construct = unifieddyes.on_construct,