develop #35
|
@ -55,12 +55,14 @@ armor = {
|
||||||
crystal = "ethereal:crystal_ingot",
|
crystal = "ethereal:crystal_ingot",
|
||||||
},
|
},
|
||||||
fire_nodes = {
|
fire_nodes = {
|
||||||
|
{"nether:lava_source", 5, 8},
|
||||||
{"default:lava_source", 5, 8},
|
{"default:lava_source", 5, 8},
|
||||||
{"default:lava_flowing", 5, 8},
|
{"default:lava_flowing", 5, 8},
|
||||||
{"fire:basic_flame", 3, 4},
|
{"fire:basic_flame", 3, 4},
|
||||||
{"fire:permanent_flame", 3, 4},
|
{"fire:permanent_flame", 3, 4},
|
||||||
{"ethereal:crystal_spike", 2, 1},
|
{"ethereal:crystal_spike", 2, 1},
|
||||||
{"ethereal:fire_flower", 2, 1},
|
{"ethereal:fire_flower", 2, 1},
|
||||||
|
{"nether:lava_crust", 2, 1},
|
||||||
{"default:torch", 1, 1},
|
{"default:torch", 1, 1},
|
||||||
{"default:torch_ceiling", 1, 1},
|
{"default:torch_ceiling", 1, 1},
|
||||||
{"default:torch_wall", 1, 1},
|
{"default:torch_wall", 1, 1},
|
||||||
|
@ -671,3 +673,10 @@ armor.drop_armor = function(pos, stack)
|
||||||
end
|
end
|
||||||
end
|
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
|
||||||
|
|
|
@ -69,12 +69,12 @@ end
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
wieldview.wielded_item[name] = ""
|
wieldview.wielded_item[name] = ""
|
||||||
minetest.after(0, function()
|
minetest.after(0, function(pname)
|
||||||
local pplayer = minetest.get_player_by_name(name)
|
local pplayer = minetest.get_player_by_name(pname)
|
||||||
if player then
|
if pplayer then
|
||||||
wieldview:update_wielded_item(pplayer)
|
wieldview:update_wielded_item(pplayer)
|
||||||
end
|
end
|
||||||
end)
|
end, name)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
minetest.register_globalstep(function(dtime)
|
minetest.register_globalstep(function(dtime)
|
||||||
|
|
|
@ -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.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.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.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
|
Code license: MIT
|
||||||
|
|
|
@ -3,7 +3,7 @@ ambience = {}
|
||||||
|
|
||||||
-- settings
|
-- settings
|
||||||
local SOUNDVOLUME = 1.0
|
local SOUNDVOLUME = 1.0
|
||||||
local MUSICVOLUME = 1.0
|
local MUSICVOLUME = 0.6
|
||||||
local play_music = minetest.settings:get_bool("ambience_music") ~= false
|
local play_music = minetest.settings:get_bool("ambience_music") ~= false
|
||||||
local pplus = minetest.get_modpath("playerplus")
|
local pplus = minetest.get_modpath("playerplus")
|
||||||
local radius = 6
|
local radius = 6
|
||||||
|
@ -91,7 +91,7 @@ end
|
||||||
|
|
||||||
-- setup table when player joins
|
-- setup table when player joins
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
playing[player:get_player_name()] = {}
|
playing[player:get_player_name()] = {music = -1}
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- remove table when player leaves
|
-- remove table when player leaves
|
||||||
|
@ -103,24 +103,31 @@ end)
|
||||||
-- plays music and selects sound set
|
-- plays music and selects sound set
|
||||||
local get_ambience = function(player, tod, name)
|
local get_ambience = function(player, tod, name)
|
||||||
|
|
||||||
-- play server or local music if available
|
-- play server or local music if music enabled and music not already playing
|
||||||
if play_music then
|
if play_music and MUSICVOLUME > 0 and playing[name].music < 0 then
|
||||||
|
|
||||||
-- play at midnight
|
-- count backwards
|
||||||
if tod >= 0.0 and tod <= 0.01 then
|
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", {
|
playing[name].music = minetest.sound_play("ambience_music", {
|
||||||
to_player = name,
|
to_player = name,
|
||||||
gain = MUSICVOLUME
|
gain = MUSICVOLUME
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- reset music timer after 10 minutes
|
||||||
|
minetest.after(60 * 10, function(name)
|
||||||
|
|
||||||
|
if playing[name] then
|
||||||
|
playing[name].music = -1
|
||||||
|
end
|
||||||
|
end, name)
|
||||||
end
|
end
|
||||||
|
|
||||||
elseif tod > 0.1 and playing[name].music then
|
--print("-- music count", playing[name].music)
|
||||||
|
|
||||||
playing[name].music = nil
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- get foot and head level nodes at player position
|
-- 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))
|
--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?
|
-- are we playing something already?
|
||||||
if ok and playing[player_name].handler then
|
if ok and playing[player_name].handler then
|
||||||
|
@ -295,19 +302,23 @@ minetest.register_chatcommand("svol", {
|
||||||
-- music volume command (0 stops music)
|
-- music volume command (0 stops music)
|
||||||
minetest.register_chatcommand("mvol", {
|
minetest.register_chatcommand("mvol", {
|
||||||
params = "<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},
|
privs = {server = true},
|
||||||
|
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
|
|
||||||
MUSICVOLUME = tonumber(param) or MUSICVOLUME
|
MUSICVOLUME = tonumber(param) or MUSICVOLUME
|
||||||
|
|
||||||
-- ability to stop music just as it begins
|
-- ability to stop music by setting volume to 0
|
||||||
if MUSICVOLUME == 0 and playing[name].music then
|
if MUSICVOLUME == 0 and playing[name].music
|
||||||
|
and playing[name].music >= 0 then
|
||||||
|
|
||||||
minetest.sound_stop(playing[name].music)
|
minetest.sound_stop(playing[name].music)
|
||||||
|
|
||||||
|
playing[name].music = -1
|
||||||
end
|
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
|
if MUSICVOLUME > 1.0 then MUSICVOLUME = 1.0 end
|
||||||
|
|
||||||
return true, "Music volume set to " .. MUSICVOLUME
|
return true, "Music volume set to " .. MUSICVOLUME
|
||||||
|
|
|
@ -220,6 +220,21 @@ local anvildef = {
|
||||||
|
|
||||||
sounds = default.node_sound_metal_defaults(),
|
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)
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||||
|
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
|
|
@ -95,6 +95,8 @@ end)
|
||||||
|
|
||||||
-- default biomes deco
|
-- default biomes deco
|
||||||
local 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:dirt_with_dry_grass", dry_grass, flowers},
|
||||||
{"default:sand", {}, {"default:dry_shrub", "", "", ""} },
|
{"default:sand", {}, {"default:dry_shrub", "", "", ""} },
|
||||||
{"default:desert_sand", {}, {"default:dry_shrub", "", "", ""} },
|
{"default:desert_sand", {}, {"default:dry_shrub", "", "", ""} },
|
||||||
|
|
|
@ -11,13 +11,13 @@ if minetest.get_modpath("lucky_block") then
|
||||||
{"dro", {"bows:arrow_diamond"}, 5},
|
{"dro", {"bows:arrow_diamond"}, 5},
|
||||||
{"nod", "default:chest", 0, {
|
{"nod", "default:chest", 0, {
|
||||||
{name = "default:stick", max = 5},
|
{name = "default:stick", max = 5},
|
||||||
{name = "default:flint", max = 3},
|
{name = "default:flint", max = 5},
|
||||||
{name = "default:steel_ingot", max = 3},
|
{name = "default:steel_ingot", max = 5},
|
||||||
{name = "default:bronze_ingot", max = 3},
|
{name = "default:bronze_ingot", max = 5},
|
||||||
{name = "default:mese_crystal_fragment", max = 3},
|
{name = "default:mese_crystal_fragment", max = 5},
|
||||||
{name = "farming:string", max = 5},
|
{name = "farming:string", max = 5},
|
||||||
{name = bows.feather, max = 4},
|
{name = bows.feather, max = 5},
|
||||||
{name = "bows:bow_bowie", max = 1}
|
{name = "bows:bow_bowie", max = 1, chance = 4}
|
||||||
}},
|
}},
|
||||||
})
|
})
|
||||||
end
|
end
|
|
@ -9,6 +9,12 @@
|
||||||
|
|
||||||
local S = cottages.S
|
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
|
-- the hammer for the anvil
|
||||||
minetest.register_tool("cottages:hammer", {
|
minetest.register_tool("cottages:hammer", {
|
||||||
description = S("Steel hammer for repairing tools on the anvil"),
|
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.'));
|
S('The workpiece slot is for damaged tools only.'));
|
||||||
return 0;
|
return 0;
|
||||||
end
|
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()
|
return stack:get_count()
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
@ -181,6 +193,14 @@ minetest.register_node("cottages:anvil", {
|
||||||
-- 65535 is max damage
|
-- 65535 is max damage
|
||||||
local damage_state = 40-math.floor(input:get_wear()/1638);
|
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 tool_name = input:get_name();
|
||||||
local hud_image = "";
|
local hud_image = "";
|
||||||
if( tool_name
|
if( tool_name
|
||||||
|
|
|
@ -117,7 +117,7 @@ minetest.register_node("cottages:water_gen", {
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
is_ground_content = false,
|
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,
|
sounds = cottages.sounds.wood,
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
|
@ -178,8 +178,14 @@ minetest.register_node("cottages:water_gen", {
|
||||||
can_dig = function(pos,player)
|
can_dig = function(pos,player)
|
||||||
local meta = minetest.get_meta(pos);
|
local meta = minetest.get_meta(pos);
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
return inv:is_empty("main") and
|
local bucket = meta:get_string("bucket")
|
||||||
default.can_interact_with_node(player, pos)
|
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,
|
end,
|
||||||
-- no inventory move allowed
|
-- no inventory move allowed
|
||||||
allow_metadata_inventory_move = function(pos, from_list, from_index,
|
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')
|
cottages.switch_public(pos, formname, fields, sender, 'tree trunk well')
|
||||||
end,
|
end,
|
||||||
-- punch to place and retrieve bucket
|
-- 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
|
if( not( pos ) or not( node ) or not( puncher )) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -223,7 +229,8 @@ minetest.register_node("cottages:water_gen", {
|
||||||
local owner = meta:get_string("owner")
|
local owner = meta:get_string("owner")
|
||||||
local public = meta:get_string("public")
|
local public = meta:get_string("public")
|
||||||
if( name ~= owner and public~="public") then
|
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
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -233,13 +240,18 @@ minetest.register_node("cottages:water_gen", {
|
||||||
-- is the well working on something? (either empty or full bucket)
|
-- is the well working on something? (either empty or full bucket)
|
||||||
local bucket = meta:get_string("bucket")
|
local bucket = meta:get_string("bucket")
|
||||||
-- there is a bucket loaded - either empty or full
|
-- 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
|
if( not(pinv:room_for_item("main", bucket))) then
|
||||||
minetest.chat_send_player( puncher:get_player_name(),
|
minetest.chat_send_player( puncher:get_player_name(),
|
||||||
S("Sorry. You have no room for the bucket. Please free some "..
|
S("Sorry. You have no room for the bucket. Please free some "..
|
||||||
"space in your inventory first!"))
|
"space in your inventory first!"))
|
||||||
return
|
return
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
-- remove the old entity (either a bucket will be placed now or a bucket taken)
|
-- 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
|
if( wielded
|
||||||
and wielded:get_name()
|
and wielded:get_name()
|
||||||
and wielded:get_name() == "bucket:bucket_empty") then
|
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
|
-- remember that we got a bucket loaded
|
||||||
meta:set_string("bucket", "bucket:bucket_empty")
|
meta:set_string("bucket", "bucket:bucket_empty")
|
||||||
-- create the entity
|
-- 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)
|
minetest.after(cottages.water_fill_time, cottages.water_gen_fill_bucket, pos)
|
||||||
-- the bucket will only be filled if the water ran long enough
|
-- the bucket will only be filled if the water ran long enough
|
||||||
meta:set_string("fillstarttime", tostring(minetest.get_us_time()/1000000))
|
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;
|
return;
|
||||||
end
|
end
|
||||||
-- buckets can also be emptied here
|
-- buckets can also be emptied here
|
||||||
|
|
|
@ -32,6 +32,25 @@ minetest.register_craft({
|
||||||
recipe = "group:food_corn"
|
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
|
-- cornstarch
|
||||||
minetest.register_craftitem("farming:cornstarch", {
|
minetest.register_craftitem("farming:cornstarch", {
|
||||||
description = S("Cornstarch"),
|
description = S("Cornstarch"),
|
||||||
|
|
|
@ -173,3 +173,6 @@ Created by gorlock (CC0)
|
||||||
Created by sirrobzeroone (CC0)
|
Created by sirrobzeroone (CC0)
|
||||||
farming_gyoza.png
|
farming_gyoza.png
|
||||||
farming_pineapple_ring.png
|
farming_pineapple_ring.png
|
||||||
|
|
||||||
|
Created by TechM8 (https://www.deviantart.com/techm8)
|
||||||
|
farming_popcorn.png
|
||||||
|
|
BIN
mods/farming/textures/farming_popcorn.png
Normal file
After Width: | Height: | Size: 292 B |
10
mods/mobs_animal/locale/README.md
Normal 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
|
46
mods/mobs_animal/locale/mobs_animal.pt.tr
Normal 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
|
46
mods/mobs_animal/locale/mobs_animal.pt_BR.tr
Normal 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
|
116
mods/mobs_animal/locale/po2tr.lua
Normal 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()
|
199
mods/mobs_animal/locale/pt.po
Normal 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"
|
46
mods/mobs_animal/locale/pt.txt
Normal 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
|
199
mods/mobs_animal/locale/pt_BR.po
Normal 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"
|
46
mods/mobs_animal/locale/pt_BR.txt
Normal 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
|
|
@ -36,7 +36,7 @@ mobs:register_mob("mobs_monster:lava_flan", {
|
||||||
{name = "mobs:lava_orb", chance = 15, min = 1, max = 1},
|
{name = "mobs:lava_orb", chance = 15, min = 1, max = 1},
|
||||||
},
|
},
|
||||||
water_damage = 8,
|
water_damage = 8,
|
||||||
lava_damage = 0,
|
lava_damage = -1,
|
||||||
fire_damage = 0,
|
fire_damage = 0,
|
||||||
light_damage = 0,
|
light_damage = 0,
|
||||||
immune_to = {
|
immune_to = {
|
||||||
|
@ -53,7 +53,7 @@ mobs:register_mob("mobs_monster:lava_flan", {
|
||||||
run_start = 20,
|
run_start = 20,
|
||||||
run_end = 28,
|
run_end = 28,
|
||||||
punch_start = 20,
|
punch_start = 20,
|
||||||
punch_end = 28,
|
punch_end = 28
|
||||||
},
|
},
|
||||||
on_die = function(self, pos)
|
on_die = function(self, pos)
|
||||||
|
|
||||||
|
@ -176,7 +176,11 @@ minetest.register_tool(":mobs:pick_lava", {
|
||||||
full_punch_interval = 0.4,
|
full_punch_interval = 0.4,
|
||||||
max_drop_level = 3,
|
max_drop_level = 3,
|
||||||
groupcaps = {
|
groupcaps = {
|
||||||
cracky = {times={[1]=1.80, [2]=0.80, [3]=0.40}, uses=40, maxlevel=3},
|
cracky = {
|
||||||
|
times = {[1] = 1.80, [2] = 0.80, [3] = 0.40},
|
||||||
|
uses = 40,
|
||||||
|
maxlevel = 3
|
||||||
|
}
|
||||||
},
|
},
|
||||||
damage_groups = {fleshy = 6, fire = 1},
|
damage_groups = {fleshy = 6, fire = 1},
|
||||||
},
|
},
|
||||||
|
@ -189,7 +193,7 @@ minetest.register_craft({
|
||||||
recipe = {
|
recipe = {
|
||||||
{"mobs:lava_orb", "mobs:lava_orb", "mobs:lava_orb"},
|
{"mobs:lava_orb", "mobs:lava_orb", "mobs:lava_orb"},
|
||||||
{"", "default:obsidian_shard", ""},
|
{"", "default:obsidian_shard", ""},
|
||||||
{"", "default:obsidian_shard", ""},
|
{"", "default:obsidian_shard", ""}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -253,7 +257,7 @@ mobs:register_mob("mobs_monster:obsidian_flan", {
|
||||||
run_start = 20,
|
run_start = 20,
|
||||||
run_end = 28,
|
run_end = 28,
|
||||||
punch_start = 20,
|
punch_start = 20,
|
||||||
punch_end = 28,
|
punch_end = 28
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -296,9 +300,11 @@ mobs:register_arrow("mobs_monster:obsidian_arrow", {
|
||||||
|
|
||||||
local radius = 1
|
local radius = 1
|
||||||
local def = minetest.registered_nodes[node]
|
local def = minetest.registered_nodes[node]
|
||||||
|
|
||||||
if def then
|
if def then
|
||||||
node = {name = node}
|
node = {name = node}
|
||||||
end
|
end
|
||||||
|
|
||||||
if def and def.tiles and def.tiles[1] then
|
if def and def.tiles and def.tiles[1] then
|
||||||
texture = def.tiles[1]
|
texture = def.tiles[1]
|
||||||
end
|
end
|
||||||
|
@ -325,7 +331,7 @@ mobs:register_arrow("mobs_monster:obsidian_arrow", {
|
||||||
texture = texture,
|
texture = texture,
|
||||||
-- ^ only as fallback for clients without support for `node` parameter
|
-- ^ only as fallback for clients without support for `node` parameter
|
||||||
node = node,
|
node = node,
|
||||||
collisiondetection = true,
|
collisiondetection = true
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.set_node(pos, {name = "air"})
|
minetest.set_node(pos, {name = "air"})
|
||||||
|
|
|
@ -8,7 +8,7 @@ local use_cmi = minetest.global_exists("cmi")
|
||||||
|
|
||||||
mobs = {
|
mobs = {
|
||||||
mod = "redo",
|
mod = "redo",
|
||||||
version = "20210610",
|
version = "20210614",
|
||||||
intllib = S,
|
intllib = S,
|
||||||
invis = minetest.global_exists("invisibility") and invisibility or {}
|
invis = minetest.global_exists("invisibility") and invisibility or {}
|
||||||
}
|
}
|
||||||
|
@ -28,8 +28,7 @@ local rad = math.rad
|
||||||
local atann = math.atan
|
local atann = math.atan
|
||||||
local atan = function(x)
|
local atan = function(x)
|
||||||
if not x or x ~= x then
|
if not x or x ~= x then
|
||||||
--error("atan bassed NaN")
|
return 0 -- NaN
|
||||||
return 0
|
|
||||||
else
|
else
|
||||||
return atann(x)
|
return atann(x)
|
||||||
end
|
end
|
||||||
|
@ -225,9 +224,6 @@ function mob_class:collision()
|
||||||
for _,object in ipairs(minetest.get_objects_inside_radius(pos, width)) do
|
for _,object in ipairs(minetest.get_objects_inside_radius(pos, width)) do
|
||||||
|
|
||||||
if object:is_player() then
|
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 pos2 = object:get_pos()
|
||||||
local vec = {x = pos.x - pos2.x, z = pos.z - pos2.z}
|
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)
|
0, self.animation[anim .. "_loop"] ~= false)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- above function exported for mount.lua
|
|
||||||
function mobs:set_animation(entity, anim)
|
function mobs:set_animation(entity, anim)
|
||||||
entity.set_animation(entity, anim)
|
entity.set_animation(entity, anim)
|
||||||
end
|
end
|
||||||
|
@ -593,7 +588,7 @@ function mob_class:attempt_flight_correction(override)
|
||||||
local escape_direction = vdirection(pos, escape_target)
|
local escape_direction = vdirection(pos, escape_target)
|
||||||
|
|
||||||
self.object:set_velocity(
|
self.object:set_velocity(
|
||||||
vmultiply(escape_direction, 1)) --self.run_velocity))
|
vmultiply(escape_direction, 1))
|
||||||
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
@ -645,7 +640,7 @@ function mobs:yaw_to_pos(self, target, rot)
|
||||||
end
|
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()
|
function mob_class:do_stay_near()
|
||||||
|
|
||||||
if not self.stay_near then return false end
|
if not self.stay_near then return false end
|
||||||
|
@ -742,9 +737,15 @@ function mob_class:update_tag()
|
||||||
col = "#FF0000"
|
col = "#FF0000"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- build infotext
|
||||||
|
self.infotext = "Health: " .. self.health .. " / " .. self.hp_max
|
||||||
|
.. "\n" .. "Owner: " .. self.owner
|
||||||
|
|
||||||
|
-- set changes
|
||||||
self.object:set_properties({
|
self.object:set_properties({
|
||||||
nametag = self.nametag,
|
nametag = self.nametag,
|
||||||
nametag_color = col
|
nametag_color = col,
|
||||||
|
infotext = self.infotext
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -792,10 +793,7 @@ function mob_class:item_drop()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- only drop rare items (drops.min = 0) if killed by player
|
-- only drop rare items (drops.min = 0) if killed by player
|
||||||
if death_by_player then
|
if death_by_player or self.drops[n].min ~= 0 then
|
||||||
obj = minetest.add_item(pos, ItemStack(item .. " " .. num))
|
|
||||||
|
|
||||||
elseif self.drops[n].min ~= 0 then
|
|
||||||
obj = minetest.add_item(pos, ItemStack(item .. " " .. num))
|
obj = minetest.add_item(pos, ItemStack(item .. " " .. num))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -870,18 +868,17 @@ function mob_class:check_for_death(cmi_cause)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- backup nametag so we can show health stats
|
-- backup nametag so we can show health stats
|
||||||
if not self.nametag2 then
|
-- if not self.nametag2 then
|
||||||
self.nametag2 = self.nametag or ""
|
-- self.nametag2 = self.nametag or ""
|
||||||
end
|
-- end
|
||||||
|
|
||||||
if show_health
|
-- if show_health
|
||||||
and (cmi_cause and cmi_cause.type == "punch") then
|
-- and (cmi_cause and cmi_cause.type == "punch") then
|
||||||
|
|
||||||
self.htimer = 2
|
|
||||||
self.nametag = "♥ " .. self.health .. " / " .. self.hp_max
|
|
||||||
|
|
||||||
|
-- self.htimer = 2
|
||||||
|
-- self.nametag = "♥ " .. self.health .. " / " .. self.hp_max
|
||||||
self:update_tag()
|
self:update_tag()
|
||||||
end
|
-- end
|
||||||
|
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
@ -1051,13 +1048,13 @@ function mob_class:do_env_damage()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- reset nametag after showing health stats
|
-- 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.nametag = self.nametag2
|
||||||
self.nametag2 = nil
|
-- self.nametag2 = nil
|
||||||
|
|
||||||
self:update_tag()
|
self:update_tag()
|
||||||
end
|
-- end
|
||||||
|
|
||||||
local pos = self.object:get_pos() ; if not pos then return 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]
|
local nodef = minetest.registered_nodes[self.standing_in]
|
||||||
|
|
||||||
-- water
|
-- water
|
||||||
if self.water_damage ~= 0
|
if self.water_damage ~= 0 and nodef.groups.water then
|
||||||
and nodef.groups.water then
|
|
||||||
|
|
||||||
self.health = self.health - self.water_damage
|
self.health = self.health - self.water_damage
|
||||||
|
|
||||||
|
@ -1094,8 +1090,7 @@ function mob_class:do_env_damage()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- lava damage
|
-- lava damage
|
||||||
elseif self.lava_damage ~= 0
|
elseif self.lava_damage ~= 0 and nodef.groups.lava then
|
||||||
and nodef.groups.lava then
|
|
||||||
|
|
||||||
self.health = self.health - self.lava_damage
|
self.health = self.health - self.lava_damage
|
||||||
|
|
||||||
|
@ -1107,8 +1102,7 @@ function mob_class:do_env_damage()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- fire damage
|
-- fire damage
|
||||||
elseif self.fire_damage ~= 0
|
elseif self.fire_damage ~= 0 and nodef.groups.fire then
|
||||||
and nodef.groups.fire then
|
|
||||||
|
|
||||||
self.health = self.health - self.fire_damage
|
self.health = self.health - self.fire_damage
|
||||||
|
|
||||||
|
@ -1241,19 +1235,21 @@ function mob_class:do_jump()
|
||||||
|
|
||||||
local blocked = minetest.registered_nodes[nodt.name].walkable
|
local blocked = minetest.registered_nodes[nodt.name].walkable
|
||||||
|
|
||||||
--print("standing on:", self.standing_on, pos.y - 0.25)
|
-- are we facing a fence or wall
|
||||||
--print("in front:", nod.name, pos.y + 0.5)
|
if nod.name:find("fence") or nod.name:find("gate") or nod.name:find("wall") then
|
||||||
--print("in front above:", nodt.name, pos.y + 1.5)
|
self.facing_fence = true
|
||||||
|
end
|
||||||
-- jump if standing on solid node (not snow) and not blocked above
|
--[[
|
||||||
if (self.walk_chance == 0
|
print("on: " .. self.standing_on
|
||||||
or minetest.registered_items[nod.name].walkable)
|
.. ", front: " .. nod.name
|
||||||
and not blocked
|
.. ", front above: " .. nodt.name
|
||||||
and nod.name ~= node_snow then
|
.. ", blocked: " .. (blocked and "yes" or "no")
|
||||||
|
.. ", fence: " .. (self.facing_fence and "yes" or "no")
|
||||||
if not nod.name:find("fence")
|
)
|
||||||
and not nod.name:find("gate")
|
]]
|
||||||
and not nod.name:find("wall") then
|
-- 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
|
||||||
|
|
||||||
local v = self.object:get_velocity()
|
local v = self.object:get_velocity()
|
||||||
|
|
||||||
|
@ -1280,19 +1276,17 @@ function mob_class:do_jump()
|
||||||
self:mob_sound(self.sounds.jump)
|
self:mob_sound(self.sounds.jump)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
self.jump_count = 0
|
||||||
|
|
||||||
return true
|
return true
|
||||||
else
|
|
||||||
self.facing_fence = true
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- if blocked against a block/wall for 5 counts then turn
|
-- if blocked for 3 counts then turn
|
||||||
if not self.following
|
if not self.following and (self.facing_fence or blocked) then
|
||||||
and (self.facing_fence or blocked) then
|
|
||||||
|
|
||||||
self.jump_count = (self.jump_count or 0) + 1
|
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 yaw = self.object:get_yaw() or 0
|
||||||
local turn = random(0, 2) + 1.35
|
local turn = random(0, 2) + 1.35
|
||||||
|
@ -1363,7 +1357,7 @@ end
|
||||||
|
|
||||||
-- Thanks Wuzzy for the following editable settings
|
-- Thanks Wuzzy for the following editable settings
|
||||||
local HORNY_TIME = 30
|
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
|
local CHILD_GROW_TIME = 60 * 20 -- 20 minutes
|
||||||
|
|
||||||
-- find two animals of same type and breed if nearby and horny
|
-- 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
|
if self.on_grown then
|
||||||
self.on_grown(self)
|
self.on_grown(self)
|
||||||
else
|
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 pos = self.object:get_pos() ; if not pos then return end
|
||||||
local ent = self.object:get_luaentity()
|
local ent = self.object:get_luaentity()
|
||||||
|
|
||||||
pos.y = pos.y + (ent.collisionbox[2] * -1) - 0.4
|
pos.y = pos.y + (ent.collisionbox[2] * -1) - 0.4
|
||||||
|
|
||||||
self.object:set_pos(pos)
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1623,6 +1616,40 @@ end
|
||||||
|
|
||||||
local los_switcher = false
|
local los_switcher = false
|
||||||
local height_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,
|
-- path finding and smart mob routine by rnd,
|
||||||
-- line_of_sight and other edits by Elkien3
|
-- 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
|
-- lets make way by digging/building if not accessible
|
||||||
if self.pathfinding == 2 and mobs_griefing then
|
if self.pathfinding == 2 and mobs_griefing then
|
||||||
|
|
||||||
-- is player higher than mob?
|
-- is player more than 1 block higher than mob?
|
||||||
if s.y < p1.y then
|
if p1.y > (s.y + 1) then
|
||||||
|
|
||||||
-- build upwards
|
-- build upwards
|
||||||
if not minetest.is_protected(s, "") then
|
if not minetest.is_protected(s, "") then
|
||||||
|
@ -1797,7 +1824,6 @@ function mob_class:smart_mobs(s, p, dist, dtime)
|
||||||
local ndef1 = minetest.registered_nodes[self.standing_in]
|
local ndef1 = minetest.registered_nodes[self.standing_in]
|
||||||
|
|
||||||
if ndef1 and (ndef1.buildable_to or ndef1.groups.liquid) then
|
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
|
||||||
end
|
end
|
||||||
|
@ -1808,27 +1834,19 @@ function mob_class:smart_mobs(s, p, dist, dtime)
|
||||||
s.y = s.y + sheight
|
s.y = s.y + sheight
|
||||||
|
|
||||||
-- remove one block above to make room to jump
|
-- remove one block above to make room to jump
|
||||||
if not minetest.is_protected(s, "") then
|
can_dig_drop(s)
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
s.y = s.y - sheight
|
s.y = s.y - sheight
|
||||||
self.object:set_pos({x = s.x, y = s.y + 2, z = s.z})
|
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
|
else -- dig 2 blocks to make door toward player direction
|
||||||
|
|
||||||
local yaw1 = self.object:get_yaw() + pi / 2
|
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)
|
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]
|
|
||||||
|
|
||||||
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
|
p1.y = p1.y + 1
|
||||||
node1 = node_ok(p1, "air").name
|
|
||||||
ndef1 = minetest.registered_nodes[node1]
|
|
||||||
|
|
||||||
if node1 ~= "air"
|
can_dig_drop(p1)
|
||||||
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
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -2600,7 +2593,10 @@ function mob_class:do_states(dtime)
|
||||||
self:smart_mobs(s, p, dist, dtime)
|
self:smart_mobs(s, p, dist, dtime)
|
||||||
end
|
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_velocity(0)
|
||||||
self:set_animation("stand")
|
self:set_animation("stand")
|
||||||
|
@ -2618,7 +2614,6 @@ function mob_class:do_states(dtime)
|
||||||
self:set_animation("walk")
|
self:set_animation("walk")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
else -- rnd: if inside reach range
|
else -- rnd: if inside reach range
|
||||||
|
|
||||||
self.path.stuck = false
|
self.path.stuck = false
|
||||||
|
@ -2765,11 +2760,7 @@ function mob_class:falling(pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- fall at set speed
|
-- fall at set speed
|
||||||
self.object:set_acceleration({
|
self.object:set_acceleration({x = 0, y = fall_speed, z = 0})
|
||||||
x = 0,
|
|
||||||
y = fall_speed,
|
|
||||||
z = 0
|
|
||||||
})
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -2792,8 +2783,9 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
|
||||||
|
|
||||||
-- error checking when mod profiling is enabled
|
-- error checking when mod profiling is enabled
|
||||||
if not tool_capabilities then
|
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
|
return true
|
||||||
end
|
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
|
if self.immune_to[n][1] == weapon_def.name then
|
||||||
|
|
||||||
damage = self.immune_to[n][2] or 0
|
damage = self.immune_to[n][2] or 0
|
||||||
|
|
||||||
break
|
break
|
||||||
|
|
||||||
-- if "all" then no tools deal damage unless it's specified in list
|
-- 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
|
-- healing
|
||||||
if damage <= -1 then
|
if damage <= -1 then
|
||||||
|
|
||||||
self.health = self.health - floor(damage)
|
self.health = self.health - floor(damage)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
if use_cmi
|
if use_cmi
|
||||||
and cmi.notify_punch(
|
and cmi.notify_punch(self.object, hitter, tflp, tool_capabilities, dir, damage) then
|
||||||
self.object, hitter, tflp, tool_capabilities, dir, damage) then
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -2906,10 +2900,8 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if tr then
|
if tr and weapon_def.original_description then
|
||||||
if weapon_def.original_description then
|
|
||||||
toolranks.new_afteruse(weapon, hitter, nil, {wear = wear})
|
toolranks.new_afteruse(weapon, hitter, nil, {wear = wear})
|
||||||
end
|
|
||||||
else
|
else
|
||||||
weapon:add_wear(wear)
|
weapon:add_wear(wear)
|
||||||
end
|
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
|
if self:check_for_death({type = "punch", puncher = hitter, hot = hot}) then
|
||||||
return true
|
return true
|
||||||
end
|
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
|
end -- END if damage
|
||||||
|
|
||||||
-- knock back effect (only on full punch)
|
-- 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
|
-- use tool knockback value or default
|
||||||
kb = tool_capabilities.damage_groups["knockback"] or kb
|
kb = tool_capabilities.damage_groups["knockback"] or kb
|
||||||
|
|
||||||
self.object:set_velocity({
|
self.object:set_velocity({x = dir.x * kb, y = up, z = dir.z * kb})
|
||||||
x = dir.x * kb,
|
|
||||||
y = up,
|
|
||||||
z = dir.z * kb
|
|
||||||
})
|
|
||||||
|
|
||||||
self.pause_timer = 0.25
|
self.pause_timer = 0.25
|
||||||
end
|
end
|
||||||
|
@ -3247,10 +3221,8 @@ function mob_class:mob_activate(staticdata, def, dtime)
|
||||||
local armor
|
local armor
|
||||||
if type(self.armor) == "table" then
|
if type(self.armor) == "table" then
|
||||||
armor = table_copy(self.armor)
|
armor = table_copy(self.armor)
|
||||||
-- armor.immortal = 1
|
|
||||||
else
|
else
|
||||||
-- armor = {immortal = 1, fleshy = self.armor}
|
armor = {fleshy = self.armor} -- immortal = 1
|
||||||
armor = {fleshy = self.armor}
|
|
||||||
end
|
end
|
||||||
self.object:set_armor_groups(armor)
|
self.object:set_armor_groups(armor)
|
||||||
|
|
||||||
|
@ -3348,23 +3320,7 @@ end
|
||||||
-- main mob function
|
-- main mob function
|
||||||
function mob_class:on_step(dtime, moveresult)
|
function mob_class:on_step(dtime, moveresult)
|
||||||
|
|
||||||
--[[ moveresult contains this for physical mobs
|
if self.state == "die" then return end
|
||||||
{
|
|
||||||
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 use_cmi then
|
if use_cmi then
|
||||||
cmi.notify_step(self.object, dtime)
|
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)
|
local numbers = settings:get(name)
|
||||||
|
|
||||||
if numbers then
|
if numbers then
|
||||||
|
|
||||||
numbers = numbers:split(",")
|
numbers = numbers:split(",")
|
||||||
chance = tonumber(numbers[1]) or chance
|
chance = tonumber(numbers[1]) or chance
|
||||||
aoc = tonumber(numbers[2]) or aoc
|
aoc = tonumber(numbers[2]) or aoc
|
||||||
|
|
||||||
if chance == 0 then
|
if chance == 0 then
|
||||||
|
|
||||||
minetest.log("warning",
|
minetest.log("warning",
|
||||||
string.format("[mobs] %s has spawning disabled", name))
|
string.format("[mobs] %s has spawning disabled", name))
|
||||||
return
|
return
|
||||||
|
@ -4678,14 +4636,14 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
|
||||||
|
|
||||||
self.health = self.hp_max
|
self.health = self.hp_max
|
||||||
|
|
||||||
if self.htimer < 1 then
|
-- if self.htimer < 1 then
|
||||||
|
|
||||||
minetest.chat_send_player(clicker:get_player_name(),
|
-- minetest.chat_send_player(clicker:get_player_name(),
|
||||||
S("@1 at full health (@2)",
|
-- S("@1 at full health (@2)",
|
||||||
self.name:split(":")[2], tostring(self.health)))
|
-- self.name:split(":")[2], tostring(self.health)))
|
||||||
|
|
||||||
self.htimer = 5
|
-- self.htimer = 5
|
||||||
end
|
-- end
|
||||||
end
|
end
|
||||||
|
|
||||||
self.object:set_hp(self.health)
|
self.object:set_hp(self.health)
|
||||||
|
|
|
@ -3,3 +3,4 @@ hunger?
|
||||||
hbhunger?
|
hbhunger?
|
||||||
stamina?
|
stamina?
|
||||||
lucky_block?
|
lucky_block?
|
||||||
|
screwdriver?
|
||||||
|
|
|
@ -4,8 +4,10 @@ local hmod = minetest.global_exists("hunger")
|
||||||
local hbmod = minetest.global_exists("hbhunger")
|
local hbmod = minetest.global_exists("hbhunger")
|
||||||
local stmod = minetest.global_exists("stamina")
|
local stmod = minetest.global_exists("stamina")
|
||||||
|
|
||||||
|
local screwdriver_exists = minetest.global_exists("screwdriver")
|
||||||
|
|
||||||
-- eat pie slice function
|
-- eat pie slice function
|
||||||
local replace_pie = function(node, puncher, pos)
|
local function replace_pie(node, puncher, pos)
|
||||||
|
|
||||||
-- is this my pie?
|
-- is this my pie?
|
||||||
if minetest.is_protected(pos, puncher:get_player_name()) then
|
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)
|
node.name = pie .. "_" .. (num + 1)
|
||||||
end
|
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
|
-- Blockmen's hud_hunger mod
|
||||||
if hmod then
|
if hmod then
|
||||||
|
@ -91,12 +97,13 @@ end
|
||||||
|
|
||||||
|
|
||||||
-- register pie bits
|
-- register pie bits
|
||||||
local register_pie = function(pie, desc)
|
local function register_pie(pie, desc)
|
||||||
|
|
||||||
-- full pie
|
-- full pie
|
||||||
minetest.register_node("pie:" .. pie .. "_0", {
|
minetest.register_node("pie:" .. pie .. "_0", {
|
||||||
description = desc,
|
description = desc,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
use_texture_alpha = "clip",
|
use_texture_alpha = "clip",
|
||||||
sunlight_propagates = false,
|
sunlight_propagates = false,
|
||||||
tiles = {
|
tiles = {
|
||||||
|
@ -108,9 +115,11 @@ local register_pie = function(pie, desc)
|
||||||
drawtype = "nodebox",
|
drawtype = "nodebox",
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
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)
|
on_punch = function(pos, node, puncher, pointed_thing)
|
||||||
replace_pie(node, puncher, pos)
|
replace_pie(node, puncher, pos)
|
||||||
end
|
end
|
||||||
|
@ -120,6 +129,7 @@ local register_pie = function(pie, desc)
|
||||||
minetest.register_node("pie:" .. pie .. "_1", {
|
minetest.register_node("pie:" .. pie .. "_1", {
|
||||||
description = "3/4 " .. desc,
|
description = "3/4 " .. desc,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
use_texture_alpha = "clip",
|
use_texture_alpha = "clip",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
tiles = {
|
tiles = {
|
||||||
|
@ -131,9 +141,11 @@ local register_pie = function(pie, desc)
|
||||||
drawtype = "nodebox",
|
drawtype = "nodebox",
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
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)
|
on_punch = function(pos, node, puncher, pointed_thing)
|
||||||
replace_pie(node, puncher, pos)
|
replace_pie(node, puncher, pos)
|
||||||
end
|
end
|
||||||
|
@ -143,6 +155,7 @@ local register_pie = function(pie, desc)
|
||||||
minetest.register_node("pie:" .. pie .. "_2", {
|
minetest.register_node("pie:" .. pie .. "_2", {
|
||||||
description = "Half " .. desc,
|
description = "Half " .. desc,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
use_texture_alpha = "clip",
|
use_texture_alpha = "clip",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
tiles = {
|
tiles = {
|
||||||
|
@ -154,9 +167,11 @@ local register_pie = function(pie, desc)
|
||||||
drawtype = "nodebox",
|
drawtype = "nodebox",
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
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)
|
on_punch = function(pos, node, puncher, pointed_thing)
|
||||||
replace_pie(node, puncher, pos)
|
replace_pie(node, puncher, pos)
|
||||||
end
|
end
|
||||||
|
@ -166,6 +181,7 @@ local register_pie = function(pie, desc)
|
||||||
minetest.register_node("pie:" .. pie .. "_3", {
|
minetest.register_node("pie:" .. pie .. "_3", {
|
||||||
description = "Piece of " .. desc,
|
description = "Piece of " .. desc,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
use_texture_alpha = "clip",
|
use_texture_alpha = "clip",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
tiles = {
|
tiles = {
|
||||||
|
@ -177,9 +193,11 @@ local register_pie = function(pie, desc)
|
||||||
drawtype = "nodebox",
|
drawtype = "nodebox",
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
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)
|
on_punch = function(pos, node, puncher, pointed_thing)
|
||||||
replace_pie(node, puncher, pos)
|
replace_pie(node, puncher, pos)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
name = pie
|
name = pie
|
||||||
depends = default
|
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.
|
description = Add a selection of tasty Pie/Cakes to eat.
|
||||||
|
|
|
@ -26,7 +26,7 @@ node_box = {
|
||||||
{-0.0612,-0.500000,-0.500000,0.0612,0.500000,-0.375000}, --NodeBox 1
|
{-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(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
drop = 'default:stick'
|
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
|
-- tree=1, -- MM: disabled because some recipes use group:tree for trunks
|
||||||
snappy=3,
|
snappy=3,
|
||||||
flammable=2,
|
flammable=2,
|
||||||
leaves=1
|
leaves=1,
|
||||||
|
attached_node=1
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
drop = 'default:stick 4'
|
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
|
-- tree=1, -- MM: disabled because some recipes use group:tree for trunks
|
||||||
snappy=3,
|
snappy=3,
|
||||||
flammable=2,
|
flammable=2,
|
||||||
leaves=1
|
leaves=1,
|
||||||
|
attached_node=1
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
drop = 'default:stick 3'
|
drop = 'default:stick 3'
|
||||||
|
|
|
@ -15,7 +15,7 @@ minetest.register_node("cavestuff:pebble_1",{
|
||||||
tiles = {"undergrowth_pebble.png"},
|
tiles = {"undergrowth_pebble.png"},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
groups = {cracky=3, stone=1},
|
groups = {cracky=3, stone=1, attached_node=1},
|
||||||
selection_box = cbox,
|
selection_box = cbox,
|
||||||
collision_box = cbox,
|
collision_box = cbox,
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
|
@ -35,7 +35,7 @@ minetest.register_node("cavestuff:pebble_2",{
|
||||||
tiles = {"undergrowth_pebble.png"},
|
tiles = {"undergrowth_pebble.png"},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
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,
|
selection_box = cbox,
|
||||||
collision_box = cbox,
|
collision_box = cbox,
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
@ -48,7 +48,7 @@ minetest.register_node("cavestuff:desert_pebble_1",{
|
||||||
tiles = {"default_desert_stone.png"},
|
tiles = {"default_desert_stone.png"},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
groups = {cracky=3, stone=1},
|
groups = {cracky=3, stone=1, attached_node=1},
|
||||||
selection_box = cbox,
|
selection_box = cbox,
|
||||||
collision_box = cbox,
|
collision_box = cbox,
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
|
@ -67,7 +67,7 @@ minetest.register_node("cavestuff:desert_pebble_2",{
|
||||||
tiles = {"default_desert_stone.png"},
|
tiles = {"default_desert_stone.png"},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
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,
|
selection_box = cbox,
|
||||||
collision_box = cbox,
|
collision_box = cbox,
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
|
|
@ -4,6 +4,12 @@
|
||||||
-- TWiGS
|
-- 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)
|
abstract_trunks.place_twig = function(pos)
|
||||||
local twig_size = math.random(1,27)
|
local twig_size = math.random(1,27)
|
||||||
|
|
||||||
|
@ -26,6 +32,16 @@ abstract_trunks.place_twig = function(pos)
|
||||||
local node_s_w = minetest.get_node(south_west)
|
local node_s_w = minetest.get_node(south_west)
|
||||||
local node_west = minetest.get_node(west)
|
local node_west = minetest.get_node(west)
|
||||||
local node_n_w = minetest.get_node(north_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
|
||||||
|
|
||||||
-- small twigs
|
-- small twigs
|
||||||
if twig_size <= 16 then
|
if twig_size <= 16 then
|
||||||
minetest.swap_node(right_here, {name="trunks:twig_"..math.random(1,4), param2=math.random(0,3)})
|
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)
|
abstract_trunks.grow_moss_on_ground = function(pos)
|
||||||
local on_ground = {x=pos.x, y=pos.y+1, z=pos.z}
|
local on_ground = {x=pos.x, y=pos.y+1, z=pos.z}
|
||||||
local moss_type = math.random(1,21)
|
local moss_type = math.random(1,21)
|
||||||
|
local rot = math.random(0,3)
|
||||||
|
|
||||||
if moss_type == 1 then
|
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
|
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
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -406,44 +423,49 @@ abstract_trunks.grow_moss_on_trunk = function(pos)
|
||||||
local node_under = minetest.get_node(undrneath)
|
local node_under = minetest.get_node(undrneath)
|
||||||
|
|
||||||
--if minetest.get_item_group(node_under.name, "tree") < 1 then
|
--if minetest.get_item_group(node_under.name, "tree") < 1 then
|
||||||
|
if minetest.registered_nodes[node_here.name].buildable_to then
|
||||||
local moss_type = math.random(1,41)
|
local moss_type = math.random(1,41)
|
||||||
if minetest.registered_nodes[node_here.name].buildable_to then -- instead of check_air = true,
|
local rot = math.random(0,3)
|
||||||
if moss_type == 1 then
|
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
|
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
|
||||||
end
|
end
|
||||||
|
if minetest.registered_nodes[node_north.name].buildable_to then
|
||||||
local moss_type = math.random(1,31) -- cliche of more moss at north
|
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,
|
local rot = math.random(0,3)
|
||||||
if moss_type == 1 then
|
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
|
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
|
||||||
end
|
end
|
||||||
|
if minetest.registered_nodes[node_east.name].buildable_to then
|
||||||
local moss_type = math.random(1,41)
|
local moss_type = math.random(1,41)
|
||||||
if minetest.registered_nodes[node_east.name].buildable_to then -- instead of check_air = true,
|
local rot = math.random(0,3)
|
||||||
if moss_type == 1 then
|
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
|
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
|
||||||
end
|
end
|
||||||
|
if minetest.registered_nodes[node_south.name].buildable_to then
|
||||||
local moss_type = math.random(1,41)
|
local moss_type = math.random(1,41)
|
||||||
if minetest.registered_nodes[node_south.name].buildable_to then -- instead of check_air = true,
|
local rot = math.random(0,3)
|
||||||
if moss_type == 1 then
|
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
|
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
|
||||||
end
|
end
|
||||||
|
if minetest.registered_nodes[node_west.name].buildable_to then
|
||||||
local moss_type = math.random(1,41)
|
local moss_type = math.random(1,41)
|
||||||
if minetest.registered_nodes[node_west.name].buildable_to then -- instead of check_air = true,
|
local rot = math.random(0,3)
|
||||||
if moss_type == 1 then
|
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
|
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
|
end
|
||||||
--end
|
--end
|
||||||
|
|
|
@ -65,42 +65,63 @@ end
|
||||||
-----------------------------------------------------------------------------------------------
|
-----------------------------------------------------------------------------------------------
|
||||||
-- MoSS
|
-- MoSS
|
||||||
-----------------------------------------------------------------------------------------------
|
-----------------------------------------------------------------------------------------------
|
||||||
local flat_moss = {-1/2, -1/2, -1/2, 1/2, -15/32--[[<-flickers if smaller]], 1/2}
|
|
||||||
|
|
||||||
minetest.register_node("trunks:moss", {
|
-- 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},
|
||||||
|
|
||||||
|
-- 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"),
|
description = S("Moss"),
|
||||||
drawtype = "nodebox",--"signlike",
|
drawtype = "nodebox",
|
||||||
tiles = {"trunks_moss.png"},
|
tiles = {"trunks_moss.png"..xform},
|
||||||
inventory_image = "trunks_moss.png",
|
inventory_image = "trunks_moss.png",
|
||||||
wield_image = "trunks_moss.png",
|
wield_image = "trunks_moss.png",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",--"wallmounted",
|
paramtype2 = "wallmounted",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
node_box = {type = "fixed", fixed = flat_moss},
|
node_box = cbox,
|
||||||
selection_box = {type = "fixed", fixed = flat_stick},--{type = "wallmounted"},
|
groups = {snappy = 3, flammable = 3, attached_node=1, not_in_creative_inventory = r},
|
||||||
groups = {snappy = 3, flammable = 3 },
|
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
|
drop = "trunks:moss_plain_0",
|
||||||
})
|
})
|
||||||
|
|
||||||
-----------------------------------------------------------------------------------------------
|
-----------------------------------------------------------------------------------------------
|
||||||
-- MoSS & FuNGuS
|
-- MoSS & FuNGuS
|
||||||
-----------------------------------------------------------------------------------------------
|
-----------------------------------------------------------------------------------------------
|
||||||
minetest.register_node("trunks:moss_fungus", {
|
minetest.register_node("trunks:moss_with_fungus_"..r, {
|
||||||
description = S("Moss with Fungus"),
|
description = S("Moss with Fungus"),
|
||||||
drawtype = "nodebox",--"signlike",
|
drawtype = "nodebox",
|
||||||
tiles = {"trunks_moss_fungus.png"},
|
tiles = {"trunks_moss_fungus.png"..xform},
|
||||||
inventory_image = "trunks_moss_fungus.png",
|
inventory_image = "trunks_moss_fungus.png",
|
||||||
wield_image = "trunks_moss_fungus.png",
|
wield_image = "trunks_moss_fungus.png",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",--"wallmounted",
|
paramtype2 = "wallmounted",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
node_box = {type = "fixed", fixed = flat_moss},
|
node_box = cbox,
|
||||||
selection_box = {type = "fixed", fixed = flat_stick},--{type = "wallmounted"},
|
groups = {snappy = 3, flammable = 3, attached_node=1, not_in_creative_inventory = r},
|
||||||
groups = {snappy = 3, flammable = 3 },
|
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
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
|
-- TWiGS BLoCK
|
||||||
|
@ -361,7 +382,8 @@ for i in pairs(TRuNKS) do
|
||||||
snappy=1,
|
snappy=1,
|
||||||
choppy=2,
|
choppy=2,
|
||||||
oddly_breakable_by_hand=1,
|
oddly_breakable_by_hand=1,
|
||||||
flammable=2--,
|
flammable=2,
|
||||||
|
attached_node = 1
|
||||||
--not_in_creative_inventory=1 -- atm in inv for testing
|
--not_in_creative_inventory=1 -- atm in inv for testing
|
||||||
},
|
},
|
||||||
--drop = "trunks:twig_1", -- not sure about this yet
|
--drop = "trunks:twig_1", -- not sure about this yet
|
||||||
|
@ -376,3 +398,26 @@ end
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_alias("trunks:pine_trunkroot", "trunks:pine_treeroot")
|
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
|
||||||
|
})
|
||||||
|
|
|
@ -40,7 +40,7 @@ minetest.register_node("youngtrees:youngtree2_middle",{
|
||||||
{-0.500000,0.125000,-0.500000,0.500000,0.500000,0.500000}, --NodeBox 3
|
{-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(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
drop = 'trunks:twig_1'
|
drop = 'trunks:twig_1'
|
||||||
})
|
})
|
||||||
|
@ -58,7 +58,7 @@ minetest.register_node("youngtrees:youngtree_top", {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
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(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
drop = 'trunks:twig_1'
|
drop = 'trunks:twig_1'
|
||||||
})
|
})
|
||||||
|
@ -77,7 +77,7 @@ minetest.register_node("youngtrees:youngtree_middle", {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
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(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
drop = 'trunks:twig_1'
|
drop = 'trunks:twig_1'
|
||||||
})
|
})
|
||||||
|
@ -97,7 +97,7 @@ minetest.register_node("youngtrees:youngtree_bottom", {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
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(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
drop = 'trunks:twig_1'
|
drop = 'trunks:twig_1'
|
||||||
})
|
})
|
||||||
|
|
3
mods/skinsdb/meta/character_2060.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
rainbow gohst
|
||||||
|
Phill
|
||||||
|
CC BY-SA 3.0
|
3
mods/skinsdb/meta/character_2061.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Danger
|
||||||
|
Phill
|
||||||
|
CC BY-SA 3.0
|
3
mods/skinsdb/meta/character_2062.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Monster Boy
|
||||||
|
Phill
|
||||||
|
CC BY-SA 3.0
|
3
mods/skinsdb/meta/character_2063.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Gohst sam
|
||||||
|
Phill
|
||||||
|
CC BY-SA 3.0
|
3
mods/skinsdb/meta/character_2064.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
FBI
|
||||||
|
Phill
|
||||||
|
CC BY-SA 3.0
|
3
mods/skinsdb/meta/character_2065.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Endersam
|
||||||
|
Phill
|
||||||
|
CC BY-SA 3.0
|
3
mods/skinsdb/meta/character_2066.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Flaming
|
||||||
|
Flaming Strike
|
||||||
|
CC BY-SA 3.0
|
3
mods/skinsdb/meta/character_2067.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
FBI Ninja
|
||||||
|
Phill
|
||||||
|
CC BY-SA 3.0
|
3
mods/skinsdb/meta/character_2068.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
euro 2021 -FR10- minetest footmod? free NC share modify ok
|
||||||
|
DcyD3
|
||||||
|
CC BY-NC-SA 4.0
|
3
mods/skinsdb/meta/character_2069.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
spider-man
|
||||||
|
DcyD3
|
||||||
|
CC BY-NC-SA 3.0
|
3
mods/skinsdb/meta/character_2070.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
eye you !
|
||||||
|
DcyD3
|
||||||
|
CC BY-NC-SA 3.0
|
3
mods/skinsdb/meta/character_2071.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Xbox 360 Skin Pack 1
|
||||||
|
angel
|
||||||
|
CC BY 3.0
|
3
mods/skinsdb/meta/character_2072.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Irrlicht
|
||||||
|
Phill
|
||||||
|
CC BY-SA 3.0
|
3
mods/skinsdb/meta/character_2073.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
kinie? 4minetest
|
||||||
|
DcyD3
|
||||||
|
CC BY-NC-SA 3.0
|
3
mods/skinsdb/meta/character_2074.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
barca 4fans ! thx
|
||||||
|
DcyD3
|
||||||
|
CC BY-NC-SA 3.0
|
3
mods/skinsdb/meta/character_2075.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
oh no no not me ! lool
|
||||||
|
DcyD3
|
||||||
|
CC BY-NC-SA 3.0
|
BIN
mods/skinsdb/textures/character_2060.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
mods/skinsdb/textures/character_2061.png
Normal file
After Width: | Height: | Size: 993 B |
BIN
mods/skinsdb/textures/character_2062.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
mods/skinsdb/textures/character_2063.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
mods/skinsdb/textures/character_2064.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
mods/skinsdb/textures/character_2065.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
mods/skinsdb/textures/character_2066.png
Normal file
After Width: | Height: | Size: 8.7 KiB |
BIN
mods/skinsdb/textures/character_2067.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
mods/skinsdb/textures/character_2068.png
Normal file
After Width: | Height: | Size: 8.3 KiB |
BIN
mods/skinsdb/textures/character_2069.png
Normal file
After Width: | Height: | Size: 9.4 KiB |
BIN
mods/skinsdb/textures/character_2070.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
mods/skinsdb/textures/character_2071.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
mods/skinsdb/textures/character_2072.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
mods/skinsdb/textures/character_2073.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
mods/skinsdb/textures/character_2074.png
Normal file
After Width: | Height: | Size: 9 KiB |
BIN
mods/skinsdb/textures/character_2075.png
Normal file
After Width: | Height: | Size: 12 KiB |
|
@ -204,6 +204,30 @@ local function set_sprinting(name, sprinting)
|
||||||
end
|
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()
|
local function drunk_tick()
|
||||||
|
|
||||||
for _,player in ipairs(minetest.get_connected_players()) do
|
for _,player in ipairs(minetest.get_connected_players()) do
|
||||||
|
@ -218,6 +242,9 @@ local function drunk_tick()
|
||||||
local num = stamina.players[name].drunk
|
local num = stamina.players[name].drunk
|
||||||
|
|
||||||
if num and num > 0 and math.floor(num / 20) == num / 20 then
|
if num and num > 0 and math.floor(num / 20) == num / 20 then
|
||||||
|
|
||||||
|
head_particle(player, "bubble.png")
|
||||||
|
|
||||||
minetest.sound_play("stamina_burp",
|
minetest.sound_play("stamina_burp",
|
||||||
{to_player = name, gain = 0.7}, true)
|
{to_player = name, gain = 0.7}, true)
|
||||||
end
|
end
|
||||||
|
@ -381,6 +408,8 @@ local function poison_tick()
|
||||||
|
|
||||||
local hp = player:get_hp() - 1
|
local hp = player:get_hp() - 1
|
||||||
|
|
||||||
|
head_particle(player, "stamina_poison_particle.png")
|
||||||
|
|
||||||
if hp > 0 then
|
if hp > 0 then
|
||||||
player:set_hp(hp, {poison = true})
|
player:set_hp(hp, {poison = true})
|
||||||
end
|
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)
|
minetest.sound_play(snd, {to_player = name, gain = 0.7}, true)
|
||||||
|
|
||||||
-- particle effect when eating
|
-- 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 texture = minetest.registered_items[itemname].inventory_image
|
||||||
local dir = user:get_look_dir()
|
|
||||||
|
|
||||||
minetest.add_particlespawner({
|
head_particle(user, texture)
|
||||||
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
|
|
||||||
})
|
|
||||||
|
|
||||||
-- if player drinks milk then stop poison and being drunk
|
-- if player drinks milk then stop poison and being drunk
|
||||||
local item_name = itemstack:get_name() or ""
|
local item_name = itemstack:get_name() or ""
|
||||||
|
|
BIN
mods/stamina/textures/stamina_poison_particle.png
Normal file
After Width: | Height: | Size: 134 B |
|
@ -124,6 +124,7 @@ for idx,color in ipairs(tColors) do
|
||||||
|
|
||||||
paramtype = 'light',
|
paramtype = 'light',
|
||||||
light_source = minetest.LIGHT_MAX,
|
light_source = minetest.LIGHT_MAX,
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
groups = {choppy=2, cracky=1, not_in_creative_inventory=1},
|
groups = {choppy=2, cracky=1, not_in_creative_inventory=1},
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
drop = "tubelib_addons2:lamp"
|
drop = "tubelib_addons2:lamp"
|
||||||
|
|
|
@ -71,6 +71,7 @@ minetest.register_node("tubelib_addons2:lamp_on", {
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "color",
|
paramtype2 = "color",
|
||||||
palette = "unifieddyes_palette_extended.png",
|
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},
|
groups = {choppy=2, cracky=1, not_in_creative_inventory=1, ud_param2_colorable = 1},
|
||||||
|
|
||||||
on_construct = unifieddyes.on_construct,
|
on_construct = unifieddyes.on_construct,
|
||||||
|
|