update
|
@ -55,12 +55,14 @@ armor = {
|
|||
crystal = "ethereal:crystal_ingot",
|
||||
},
|
||||
fire_nodes = {
|
||||
{"nether:lava_source", 5, 8},
|
||||
{"default:lava_source", 5, 8},
|
||||
{"default:lava_flowing", 5, 8},
|
||||
{"fire:basic_flame", 3, 4},
|
||||
{"fire:permanent_flame", 3, 4},
|
||||
{"ethereal:crystal_spike", 2, 1},
|
||||
{"ethereal:fire_flower", 2, 1},
|
||||
{"nether:lava_crust", 2, 1},
|
||||
{"default:torch", 1, 1},
|
||||
{"default:torch_ceiling", 1, 1},
|
||||
{"default:torch_wall", 1, 1},
|
||||
|
@ -671,3 +673,10 @@ armor.drop_armor = function(pos, stack)
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- Allows skin mod to be set manually.
|
||||
--
|
||||
-- Useful for skin mod forks that do not use the same name.
|
||||
armor.set_skin_mod = function(mod)
|
||||
armor.skin_mod = mod
|
||||
end
|
||||
|
|
|
@ -69,12 +69,12 @@ end
|
|||
minetest.register_on_joinplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
wieldview.wielded_item[name] = ""
|
||||
minetest.after(0, function()
|
||||
local pplayer = minetest.get_player_by_name(name)
|
||||
if player then
|
||||
minetest.after(0, function(pname)
|
||||
local pplayer = minetest.get_player_by_name(pname)
|
||||
if pplayer then
|
||||
wieldview:update_wielded_item(pplayer)
|
||||
end
|
||||
end)
|
||||
end, name)
|
||||
end)
|
||||
|
||||
minetest.register_globalstep(function(dtime)
|
||||
|
|
|
@ -19,5 +19,6 @@ Based on Immersive Sounds .36 mod by Neuromancer and optimized to run on servers
|
|||
- 1.4 - Re-ordered water sets to come before fire and lava, day/night sounds play when leaves around and above ground
|
||||
- 1.5 - Added 'flame_sound' and fire redo check, code tidy and tweak, added ephemeral flag for background sounds.
|
||||
- 1.6 - Finding env_sounds disables water and lava sets, added 'ambience_water_move' flag to override water walking sounds, use eye level for head node.
|
||||
- 1.7 - Music will play every 20-30 minutes if found, use '/mvol 0' to stop playing music or disable in-game.
|
||||
|
||||
Code license: MIT
|
||||
|
|
|
@ -3,7 +3,7 @@ ambience = {}
|
|||
|
||||
-- settings
|
||||
local SOUNDVOLUME = 1.0
|
||||
local MUSICVOLUME = 1.0
|
||||
local MUSICVOLUME = 0.6
|
||||
local play_music = minetest.settings:get_bool("ambience_music") ~= false
|
||||
local pplus = minetest.get_modpath("playerplus")
|
||||
local radius = 6
|
||||
|
@ -91,7 +91,7 @@ end
|
|||
|
||||
-- setup table when player joins
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
playing[player:get_player_name()] = {}
|
||||
playing[player:get_player_name()] = {music = -1}
|
||||
end)
|
||||
|
||||
-- remove table when player leaves
|
||||
|
@ -103,24 +103,31 @@ end)
|
|||
-- plays music and selects sound set
|
||||
local get_ambience = function(player, tod, name)
|
||||
|
||||
-- play server or local music if available
|
||||
if play_music then
|
||||
-- play server or local music if music enabled and music not already playing
|
||||
if play_music and MUSICVOLUME > 0 and playing[name].music < 0 then
|
||||
|
||||
-- play at midnight
|
||||
if tod >= 0.0 and tod <= 0.01 then
|
||||
-- count backwards
|
||||
playing[name].music = playing[name].music -1
|
||||
|
||||
if not playing[name].music then
|
||||
-- play music every 20 minutes
|
||||
if playing[name].music < -(60 * 20) then
|
||||
|
||||
playing[name].music = minetest.sound_play("ambience_music", {
|
||||
to_player = name,
|
||||
gain = MUSICVOLUME
|
||||
})
|
||||
|
||||
-- reset music timer after 10 minutes
|
||||
minetest.after(60 * 10, function(name)
|
||||
|
||||
if playing[name] then
|
||||
playing[name].music = -1
|
||||
end
|
||||
end, name)
|
||||
end
|
||||
|
||||
elseif tod > 0.1 and playing[name].music then
|
||||
--print("-- music count", playing[name].music)
|
||||
|
||||
playing[name].music = nil
|
||||
end
|
||||
end
|
||||
|
||||
-- get foot and head level nodes at player position
|
||||
|
@ -198,7 +205,7 @@ minetest.register_globalstep(function(dtime)
|
|||
|
||||
--print(string.format("elapsed time: %.4f\n", os.clock() - t1))
|
||||
|
||||
ok = playing[player_name] -- everything starts off ok if player around
|
||||
ok = playing[player_name] -- everything starts off ok if player found
|
||||
|
||||
-- are we playing something already?
|
||||
if ok and playing[player_name].handler then
|
||||
|
@ -295,19 +302,23 @@ minetest.register_chatcommand("svol", {
|
|||
-- music volume command (0 stops music)
|
||||
minetest.register_chatcommand("mvol", {
|
||||
params = "<mvol>",
|
||||
description = "set music volume (0.1 to 1.0)",
|
||||
description = "set music volume (0.1 to 1.0, 0 to stop music)",
|
||||
privs = {server = true},
|
||||
|
||||
func = function(name, param)
|
||||
|
||||
MUSICVOLUME = tonumber(param) or MUSICVOLUME
|
||||
|
||||
-- ability to stop music just as it begins
|
||||
if MUSICVOLUME == 0 and playing[name].music then
|
||||
-- ability to stop music by setting volume to 0
|
||||
if MUSICVOLUME == 0 and playing[name].music
|
||||
and playing[name].music >= 0 then
|
||||
|
||||
minetest.sound_stop(playing[name].music)
|
||||
|
||||
playing[name].music = -1
|
||||
end
|
||||
|
||||
if MUSICVOLUME < 0.1 then MUSICVOLUME = 0.1 end
|
||||
if MUSICVOLUME < 0 then MUSICVOLUME = 0 end
|
||||
if MUSICVOLUME > 1.0 then MUSICVOLUME = 1.0 end
|
||||
|
||||
return true, "Music volume set to " .. MUSICVOLUME
|
||||
|
|
|
@ -220,6 +220,21 @@ local anvildef = {
|
|||
|
||||
sounds = default.node_sound_metal_defaults(),
|
||||
|
||||
---------------- added
|
||||
can_dig = function(pos, player)
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
if inv:is_empty("input") and inv:is_empty("output") then
|
||||
|
||||
if not minetest.is_protected(pos, player:get_player_name()) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end,
|
||||
-----------------
|
||||
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
|
|
@ -95,6 +95,8 @@ end)
|
|||
|
||||
-- default biomes deco
|
||||
local deco = {
|
||||
{"default:dry_dirt", dry_grass, {}},
|
||||
{"default:dry_dirt_with_dry_grass", dry_grass, {}},
|
||||
{"default:dirt_with_dry_grass", dry_grass, flowers},
|
||||
{"default:sand", {}, {"default:dry_shrub", "", "", ""} },
|
||||
{"default:desert_sand", {}, {"default:dry_shrub", "", "", ""} },
|
||||
|
|
|
@ -11,13 +11,13 @@ if minetest.get_modpath("lucky_block") then
|
|||
{"dro", {"bows:arrow_diamond"}, 5},
|
||||
{"nod", "default:chest", 0, {
|
||||
{name = "default:stick", max = 5},
|
||||
{name = "default:flint", max = 3},
|
||||
{name = "default:steel_ingot", max = 3},
|
||||
{name = "default:bronze_ingot", max = 3},
|
||||
{name = "default:mese_crystal_fragment", max = 3},
|
||||
{name = "default:flint", max = 5},
|
||||
{name = "default:steel_ingot", max = 5},
|
||||
{name = "default:bronze_ingot", max = 5},
|
||||
{name = "default:mese_crystal_fragment", max = 5},
|
||||
{name = "farming:string", max = 5},
|
||||
{name = bows.feather, max = 4},
|
||||
{name = "bows:bow_bowie", max = 1}
|
||||
{name = bows.feather, max = 5},
|
||||
{name = "bows:bow_bowie", max = 1, chance = 4}
|
||||
}},
|
||||
})
|
||||
end
|
|
@ -9,6 +9,12 @@
|
|||
|
||||
local S = cottages.S
|
||||
|
||||
-- disable repair with anvil by setting a message for the item in question
|
||||
cottages.forbid_repair = {}
|
||||
-- example for hammer no longer beeing able to repair the hammer
|
||||
--cottages.forbid_repair["cottages:hammer"] = 'The hammer is too complex for repairing.'
|
||||
|
||||
|
||||
-- the hammer for the anvil
|
||||
minetest.register_tool("cottages:hammer", {
|
||||
description = S("Steel hammer for repairing tools on the anvil"),
|
||||
|
@ -138,6 +144,12 @@ minetest.register_node("cottages:anvil", {
|
|||
S('The workpiece slot is for damaged tools only.'));
|
||||
return 0;
|
||||
end
|
||||
if( listname=='input'
|
||||
and cottages.forbid_repair[ stack:get_name() ]) then
|
||||
minetest.chat_send_player( player:get_player_name(),
|
||||
S(cottages.forbid_repair[ stack:get_name() ]));
|
||||
return 0;
|
||||
end
|
||||
return stack:get_count()
|
||||
end,
|
||||
|
||||
|
@ -181,6 +193,14 @@ minetest.register_node("cottages:anvil", {
|
|||
-- 65535 is max damage
|
||||
local damage_state = 40-math.floor(input:get_wear()/1638);
|
||||
|
||||
-- just to make sure that it really can't get repaired if it should not
|
||||
-- (if the check of placing the item in the input slot failed somehow)
|
||||
if( puncher and name and cottages.forbid_repair[ input:get_name() ]) then
|
||||
minetest.chat_send_player( name,
|
||||
S(cottages.forbid_repair[ input:get_name() ]));
|
||||
return;
|
||||
end
|
||||
|
||||
local tool_name = input:get_name();
|
||||
local hud_image = "";
|
||||
if( tool_name
|
||||
|
|
|
@ -117,7 +117,7 @@ minetest.register_node("cottages:water_gen", {
|
|||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
|
||||
groups = {tree = 1, choppy = 2, cracky = 1, flammable = 2},
|
||||
sounds = cottages.sounds.wood,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
|
@ -178,8 +178,14 @@ minetest.register_node("cottages:water_gen", {
|
|||
can_dig = function(pos,player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
return inv:is_empty("main") and
|
||||
default.can_interact_with_node(player, pos)
|
||||
local bucket = meta:get_string("bucket")
|
||||
local start = meta:get_string("fillstarttime")
|
||||
return inv:is_empty("main")
|
||||
and default.can_interact_with_node(player, pos)
|
||||
and (not(bucket) or bucket == "")
|
||||
and ((not(start) or start == "" or
|
||||
(minetest.get_us_time()/1000000) - tonumber(start)
|
||||
>= cottages.water_fill_time -2))
|
||||
end,
|
||||
-- no inventory move allowed
|
||||
allow_metadata_inventory_move = function(pos, from_list, from_index,
|
||||
|
@ -213,7 +219,7 @@ minetest.register_node("cottages:water_gen", {
|
|||
cottages.switch_public(pos, formname, fields, sender, 'tree trunk well')
|
||||
end,
|
||||
-- punch to place and retrieve bucket
|
||||
on_punch = function(pos, node, puncher)
|
||||
on_punch = function(pos, node, puncher, pointed_thing)
|
||||
if( not( pos ) or not( node ) or not( puncher )) then
|
||||
return
|
||||
end
|
||||
|
@ -223,7 +229,8 @@ minetest.register_node("cottages:water_gen", {
|
|||
local owner = meta:get_string("owner")
|
||||
local public = meta:get_string("public")
|
||||
if( name ~= owner and public~="public") then
|
||||
minetest.chat_send_player( name, S("This tree trunk well is owned by %s. You can't use it."):format(name))
|
||||
minetest.chat_send_player( name,
|
||||
S("This tree trunk well is owned by %s. You can't use it."):format(owner))
|
||||
return
|
||||
end
|
||||
|
||||
|
@ -233,13 +240,18 @@ minetest.register_node("cottages:water_gen", {
|
|||
-- is the well working on something? (either empty or full bucket)
|
||||
local bucket = meta:get_string("bucket")
|
||||
-- there is a bucket loaded - either empty or full
|
||||
if( bucket and bucket~="") then
|
||||
if( bucket and bucket~="" and bucket ~= "bucket:bucket_empty") then
|
||||
if( not(pinv:room_for_item("main", bucket))) then
|
||||
minetest.chat_send_player( puncher:get_player_name(),
|
||||
S("Sorry. You have no room for the bucket. Please free some "..
|
||||
"space in your inventory first!"))
|
||||
return
|
||||
end
|
||||
elseif( bucket and bucket == "bucket:bucket_empty") then
|
||||
minetest.chat_send_player( puncher:get_player_name(),
|
||||
S("Please wait until your bucket has been filled."))
|
||||
-- do not give the empty bucket back immediately
|
||||
return
|
||||
end
|
||||
|
||||
-- remove the old entity (either a bucket will be placed now or a bucket taken)
|
||||
|
@ -267,8 +279,6 @@ minetest.register_node("cottages:water_gen", {
|
|||
if( wielded
|
||||
and wielded:get_name()
|
||||
and wielded:get_name() == "bucket:bucket_empty") then
|
||||
-- remove the bucket from the players inventory
|
||||
pinv:remove_item( "main", "bucket:bucket_empty")
|
||||
-- remember that we got a bucket loaded
|
||||
meta:set_string("bucket", "bucket:bucket_empty")
|
||||
-- create the entity
|
||||
|
@ -280,6 +290,8 @@ minetest.register_node("cottages:water_gen", {
|
|||
minetest.after(cottages.water_fill_time, cottages.water_gen_fill_bucket, pos)
|
||||
-- the bucket will only be filled if the water ran long enough
|
||||
meta:set_string("fillstarttime", tostring(minetest.get_us_time()/1000000))
|
||||
-- remove the bucket from the players inventory
|
||||
pinv:remove_item( "main", "bucket:bucket_empty")
|
||||
return;
|
||||
end
|
||||
-- buckets can also be emptied here
|
||||
|
|
|
@ -32,6 +32,25 @@ minetest.register_craft({
|
|||
recipe = "group:food_corn"
|
||||
})
|
||||
|
||||
-- popcorn
|
||||
minetest.register_craftitem("farming:popcorn", {
|
||||
description = S("Popcorn"),
|
||||
inventory_image = "farming_popcorn.png",
|
||||
groups = {food_popcorn = 1, flammable = 2},
|
||||
on_use = minetest.item_eat(4)
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "farming:popcorn",
|
||||
recipe = {
|
||||
{"group:food_pot", "group:food_oil", "group:food_corn"}
|
||||
},
|
||||
replacements = {
|
||||
{"group:food_pot", "farming:pot"},
|
||||
{"group:food_oil", "vessels:glass_bottle"}
|
||||
}
|
||||
})
|
||||
|
||||
-- cornstarch
|
||||
minetest.register_craftitem("farming:cornstarch", {
|
||||
description = S("Cornstarch"),
|
||||
|
|
|
@ -173,3 +173,6 @@ Created by gorlock (CC0)
|
|||
Created by sirrobzeroone (CC0)
|
||||
farming_gyoza.png
|
||||
farming_pineapple_ring.png
|
||||
|
||||
Created by TechM8 (https://www.deviantart.com/techm8)
|
||||
farming_popcorn.png
|
||||
|
|
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},
|
||||
},
|
||||
water_damage = 8,
|
||||
lava_damage = 0,
|
||||
lava_damage = -1,
|
||||
fire_damage = 0,
|
||||
light_damage = 0,
|
||||
immune_to = {
|
||||
|
@ -53,7 +53,7 @@ mobs:register_mob("mobs_monster:lava_flan", {
|
|||
run_start = 20,
|
||||
run_end = 28,
|
||||
punch_start = 20,
|
||||
punch_end = 28,
|
||||
punch_end = 28
|
||||
},
|
||||
on_die = function(self, pos)
|
||||
|
||||
|
@ -174,9 +174,13 @@ minetest.register_tool(":mobs:pick_lava", {
|
|||
inventory_image = "mobs_pick_lava.png",
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 0.4,
|
||||
max_drop_level=3,
|
||||
groupcaps={
|
||||
cracky = {times={[1]=1.80, [2]=0.80, [3]=0.40}, uses=40, maxlevel=3},
|
||||
max_drop_level = 3,
|
||||
groupcaps = {
|
||||
cracky = {
|
||||
times = {[1] = 1.80, [2] = 0.80, [3] = 0.40},
|
||||
uses = 40,
|
||||
maxlevel = 3
|
||||
}
|
||||
},
|
||||
damage_groups = {fleshy = 6, fire = 1},
|
||||
},
|
||||
|
@ -189,7 +193,7 @@ minetest.register_craft({
|
|||
recipe = {
|
||||
{"mobs:lava_orb", "mobs:lava_orb", "mobs:lava_orb"},
|
||||
{"", "default:obsidian_shard", ""},
|
||||
{"", "default:obsidian_shard", ""},
|
||||
{"", "default:obsidian_shard", ""}
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -253,7 +257,7 @@ mobs:register_mob("mobs_monster:obsidian_flan", {
|
|||
run_start = 20,
|
||||
run_end = 28,
|
||||
punch_start = 20,
|
||||
punch_end = 28,
|
||||
punch_end = 28
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -296,9 +300,11 @@ mobs:register_arrow("mobs_monster:obsidian_arrow", {
|
|||
|
||||
local radius = 1
|
||||
local def = minetest.registered_nodes[node]
|
||||
|
||||
if def then
|
||||
node = { name = node }
|
||||
node = {name = node}
|
||||
end
|
||||
|
||||
if def and def.tiles and def.tiles[1] then
|
||||
texture = def.tiles[1]
|
||||
end
|
||||
|
@ -325,7 +331,7 @@ mobs:register_arrow("mobs_monster:obsidian_arrow", {
|
|||
texture = texture,
|
||||
-- ^ only as fallback for clients without support for `node` parameter
|
||||
node = node,
|
||||
collisiondetection = true,
|
||||
collisiondetection = true
|
||||
})
|
||||
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
|
|
|
@ -8,7 +8,7 @@ local use_cmi = minetest.global_exists("cmi")
|
|||
|
||||
mobs = {
|
||||
mod = "redo",
|
||||
version = "20210610",
|
||||
version = "20210614",
|
||||
intllib = S,
|
||||
invis = minetest.global_exists("invisibility") and invisibility or {}
|
||||
}
|
||||
|
@ -28,8 +28,7 @@ local rad = math.rad
|
|||
local atann = math.atan
|
||||
local atan = function(x)
|
||||
if not x or x ~= x then
|
||||
--error("atan bassed NaN")
|
||||
return 0
|
||||
return 0 -- NaN
|
||||
else
|
||||
return atann(x)
|
||||
end
|
||||
|
@ -225,9 +224,6 @@ function mob_class:collision()
|
|||
for _,object in ipairs(minetest.get_objects_inside_radius(pos, width)) do
|
||||
|
||||
if object:is_player() then
|
||||
-- or (object:get_luaentity()
|
||||
-- and object:get_luaentity()._cmi_is_mob == true
|
||||
-- and object ~= self.object) then
|
||||
|
||||
local pos2 = object:get_pos()
|
||||
local vec = {x = pos.x - pos2.x, z = pos.z - pos2.z}
|
||||
|
@ -406,7 +402,6 @@ function mob_class:set_animation(anim, force)
|
|||
0, self.animation[anim .. "_loop"] ~= false)
|
||||
end
|
||||
|
||||
-- above function exported for mount.lua
|
||||
function mobs:set_animation(entity, anim)
|
||||
entity.set_animation(entity, anim)
|
||||
end
|
||||
|
@ -593,7 +588,7 @@ function mob_class:attempt_flight_correction(override)
|
|||
local escape_direction = vdirection(pos, escape_target)
|
||||
|
||||
self.object:set_velocity(
|
||||
vmultiply(escape_direction, 1)) --self.run_velocity))
|
||||
vmultiply(escape_direction, 1))
|
||||
|
||||
return true
|
||||
end
|
||||
|
@ -645,7 +640,7 @@ function mobs:yaw_to_pos(self, target, rot)
|
|||
end
|
||||
|
||||
|
||||
-- if stay near set then check periodically for nodes and turn towards them
|
||||
-- if stay near set then periodically check for nodes and turn towards them
|
||||
function mob_class:do_stay_near()
|
||||
|
||||
if not self.stay_near then return false end
|
||||
|
@ -742,9 +737,15 @@ function mob_class:update_tag()
|
|||
col = "#FF0000"
|
||||
end
|
||||
|
||||
-- build infotext
|
||||
self.infotext = "Health: " .. self.health .. " / " .. self.hp_max
|
||||
.. "\n" .. "Owner: " .. self.owner
|
||||
|
||||
-- set changes
|
||||
self.object:set_properties({
|
||||
nametag = self.nametag,
|
||||
nametag_color = col
|
||||
nametag_color = col,
|
||||
infotext = self.infotext
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -792,10 +793,7 @@ function mob_class:item_drop()
|
|||
end
|
||||
|
||||
-- only drop rare items (drops.min = 0) if killed by player
|
||||
if death_by_player then
|
||||
obj = minetest.add_item(pos, ItemStack(item .. " " .. num))
|
||||
|
||||
elseif self.drops[n].min ~= 0 then
|
||||
if death_by_player or self.drops[n].min ~= 0 then
|
||||
obj = minetest.add_item(pos, ItemStack(item .. " " .. num))
|
||||
end
|
||||
|
||||
|
@ -870,18 +868,17 @@ function mob_class:check_for_death(cmi_cause)
|
|||
end
|
||||
|
||||
-- backup nametag so we can show health stats
|
||||
if not self.nametag2 then
|
||||
self.nametag2 = self.nametag or ""
|
||||
end
|
||||
-- if not self.nametag2 then
|
||||
-- self.nametag2 = self.nametag or ""
|
||||
-- end
|
||||
|
||||
if show_health
|
||||
and (cmi_cause and cmi_cause.type == "punch") then
|
||||
|
||||
self.htimer = 2
|
||||
self.nametag = "♥ " .. self.health .. " / " .. self.hp_max
|
||||
-- if show_health
|
||||
-- and (cmi_cause and cmi_cause.type == "punch") then
|
||||
|
||||
-- self.htimer = 2
|
||||
-- self.nametag = "♥ " .. self.health .. " / " .. self.hp_max
|
||||
self:update_tag()
|
||||
end
|
||||
-- end
|
||||
|
||||
return false
|
||||
end
|
||||
|
@ -1051,13 +1048,13 @@ function mob_class:do_env_damage()
|
|||
end
|
||||
|
||||
-- reset nametag after showing health stats
|
||||
if self.htimer < 1 and self.nametag2 then
|
||||
-- if self.htimer < 1 and self.nametag2 then
|
||||
|
||||
self.nametag = self.nametag2
|
||||
self.nametag2 = nil
|
||||
-- self.nametag = self.nametag2
|
||||
-- self.nametag2 = nil
|
||||
|
||||
self:update_tag()
|
||||
end
|
||||
-- end
|
||||
|
||||
local pos = self.object:get_pos() ; if not pos then return end
|
||||
|
||||
|
@ -1081,8 +1078,7 @@ function mob_class:do_env_damage()
|
|||
local nodef = minetest.registered_nodes[self.standing_in]
|
||||
|
||||
-- water
|
||||
if self.water_damage ~= 0
|
||||
and nodef.groups.water then
|
||||
if self.water_damage ~= 0 and nodef.groups.water then
|
||||
|
||||
self.health = self.health - self.water_damage
|
||||
|
||||
|
@ -1094,8 +1090,7 @@ function mob_class:do_env_damage()
|
|||
end
|
||||
|
||||
-- lava damage
|
||||
elseif self.lava_damage ~= 0
|
||||
and nodef.groups.lava then
|
||||
elseif self.lava_damage ~= 0 and nodef.groups.lava then
|
||||
|
||||
self.health = self.health - self.lava_damage
|
||||
|
||||
|
@ -1107,8 +1102,7 @@ function mob_class:do_env_damage()
|
|||
end
|
||||
|
||||
-- fire damage
|
||||
elseif self.fire_damage ~= 0
|
||||
and nodef.groups.fire then
|
||||
elseif self.fire_damage ~= 0 and nodef.groups.fire then
|
||||
|
||||
self.health = self.health - self.fire_damage
|
||||
|
||||
|
@ -1241,19 +1235,21 @@ function mob_class:do_jump()
|
|||
|
||||
local blocked = minetest.registered_nodes[nodt.name].walkable
|
||||
|
||||
--print("standing on:", self.standing_on, pos.y - 0.25)
|
||||
--print("in front:", nod.name, pos.y + 0.5)
|
||||
--print("in front above:", nodt.name, pos.y + 1.5)
|
||||
|
||||
-- jump if standing on solid node (not snow) and not blocked above
|
||||
if (self.walk_chance == 0
|
||||
or minetest.registered_items[nod.name].walkable)
|
||||
and not blocked
|
||||
and nod.name ~= node_snow then
|
||||
|
||||
if not nod.name:find("fence")
|
||||
and not nod.name:find("gate")
|
||||
and not nod.name:find("wall") then
|
||||
-- are we facing a fence or wall
|
||||
if nod.name:find("fence") or nod.name:find("gate") or nod.name:find("wall") then
|
||||
self.facing_fence = true
|
||||
end
|
||||
--[[
|
||||
print("on: " .. self.standing_on
|
||||
.. ", front: " .. nod.name
|
||||
.. ", front above: " .. nodt.name
|
||||
.. ", blocked: " .. (blocked and "yes" or "no")
|
||||
.. ", fence: " .. (self.facing_fence and "yes" or "no")
|
||||
)
|
||||
]]
|
||||
-- jump if standing on solid node (not snow) and not blocked
|
||||
if (self.walk_chance == 0 or minetest.registered_items[nod.name].walkable)
|
||||
and not blocked and not self.facing_fence and nod.name ~= node_snow then
|
||||
|
||||
local v = self.object:get_velocity()
|
||||
|
||||
|
@ -1280,19 +1276,17 @@ function mob_class:do_jump()
|
|||
self:mob_sound(self.sounds.jump)
|
||||
end
|
||||
|
||||
self.jump_count = 0
|
||||
|
||||
return true
|
||||
else
|
||||
self.facing_fence = true
|
||||
end
|
||||
end
|
||||
|
||||
-- if blocked against a block/wall for 5 counts then turn
|
||||
if not self.following
|
||||
and (self.facing_fence or blocked) then
|
||||
-- if blocked for 3 counts then turn
|
||||
if not self.following and (self.facing_fence or blocked) then
|
||||
|
||||
self.jump_count = (self.jump_count or 0) + 1
|
||||
|
||||
if self.jump_count > 4 then
|
||||
if self.jump_count > 2 then
|
||||
|
||||
local yaw = self.object:get_yaw() or 0
|
||||
local turn = random(0, 2) + 1.35
|
||||
|
@ -1363,7 +1357,7 @@ end
|
|||
|
||||
-- Thanks Wuzzy for the following editable settings
|
||||
local HORNY_TIME = 30
|
||||
local HORNY_AGAIN_TIME = 300
|
||||
local HORNY_AGAIN_TIME = 60 * 5 -- 5 minutes
|
||||
local CHILD_GROW_TIME = 60 * 20 -- 20 minutes
|
||||
|
||||
-- find two animals of same type and breed if nearby and horny
|
||||
|
@ -1391,16 +1385,15 @@ function mob_class:breed()
|
|||
if self.on_grown then
|
||||
self.on_grown(self)
|
||||
else
|
||||
-- jump when fully grown so as not to fall into ground
|
||||
-- self.object:set_velocity({
|
||||
-- x = 0,
|
||||
-- y = self.jump_height,
|
||||
-- z = 0
|
||||
-- })
|
||||
local pos = self.object:get_pos() ; if not pos then return end
|
||||
local ent = self.object:get_luaentity()
|
||||
|
||||
pos.y = pos.y + (ent.collisionbox[2] * -1) - 0.4
|
||||
|
||||
self.object:set_pos(pos)
|
||||
|
||||
-- jump slightly when fully grown so as not to fall into ground
|
||||
self.object:set_velocity({x = 0, y = 0.5, z = 0 })
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -1623,6 +1616,40 @@ end
|
|||
|
||||
local los_switcher = false
|
||||
local height_switcher = false
|
||||
local can_dig_drop = function(pos)
|
||||
|
||||
if minetest.is_protected(pos, "") then
|
||||
return false
|
||||
end
|
||||
|
||||
local node = node_ok(pos, "air").name
|
||||
local ndef = minetest.registered_nodes[node]
|
||||
|
||||
if node ~= "ignore"
|
||||
and ndef
|
||||
and ndef.drawtype ~= "airlike"
|
||||
and not ndef.groups.level
|
||||
and not ndef.groups.unbreakable
|
||||
and not ndef.groups.liquid then
|
||||
|
||||
local drops = minetest.get_node_drops(node)
|
||||
|
||||
for _, item in ipairs(drops) do
|
||||
|
||||
minetest.add_item({
|
||||
x = pos.x - 0.5 + random(),
|
||||
y = pos.y - 0.5 + random(),
|
||||
z = pos.z - 0.5 + random()
|
||||
}, item)
|
||||
end
|
||||
|
||||
minetest.remove_node(pos)
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
-- path finding and smart mob routine by rnd,
|
||||
-- line_of_sight and other edits by Elkien3
|
||||
|
@ -1788,8 +1815,8 @@ function mob_class:smart_mobs(s, p, dist, dtime)
|
|||
-- lets make way by digging/building if not accessible
|
||||
if self.pathfinding == 2 and mobs_griefing then
|
||||
|
||||
-- is player higher than mob?
|
||||
if s.y < p1.y then
|
||||
-- is player more than 1 block higher than mob?
|
||||
if p1.y > (s.y + 1) then
|
||||
|
||||
-- build upwards
|
||||
if not minetest.is_protected(s, "") then
|
||||
|
@ -1797,7 +1824,6 @@ function mob_class:smart_mobs(s, p, dist, dtime)
|
|||
local ndef1 = minetest.registered_nodes[self.standing_in]
|
||||
|
||||
if ndef1 and (ndef1.buildable_to or ndef1.groups.liquid) then
|
||||
|
||||
minetest.set_node(s, {name = mobs.fallback_node})
|
||||
end
|
||||
end
|
||||
|
@ -1808,27 +1834,19 @@ function mob_class:smart_mobs(s, p, dist, dtime)
|
|||
s.y = s.y + sheight
|
||||
|
||||
-- remove one block above to make room to jump
|
||||
if not minetest.is_protected(s, "") then
|
||||
|
||||
local node1 = node_ok(s, "air").name
|
||||
local ndef1 = minetest.registered_nodes[node1]
|
||||
|
||||
if node1 ~= "air"
|
||||
and node1 ~= "ignore"
|
||||
and ndef1
|
||||
and not ndef1.groups.level
|
||||
and not ndef1.groups.unbreakable
|
||||
and not ndef1.groups.liquid then
|
||||
|
||||
minetest.set_node(s, {name = "air"})
|
||||
minetest.add_item(s, ItemStack(node1))
|
||||
|
||||
end
|
||||
end
|
||||
can_dig_drop(s)
|
||||
|
||||
s.y = s.y - sheight
|
||||
self.object:set_pos({x = s.x, y = s.y + 2, z = s.z})
|
||||
|
||||
-- is player more than 1 block lower than mob
|
||||
elseif p1.y < (s.y - 1) then
|
||||
|
||||
-- dig down
|
||||
s.y = s.y - self.collisionbox[4] - 0.2
|
||||
|
||||
can_dig_drop(s)
|
||||
|
||||
else -- dig 2 blocks to make door toward player direction
|
||||
|
||||
local yaw1 = self.object:get_yaw() + pi / 2
|
||||
|
@ -1838,37 +1856,12 @@ function mob_class:smart_mobs(s, p, dist, dtime)
|
|||
z = s.z + sin(yaw1)
|
||||
}
|
||||
|
||||
if not minetest.is_protected(p1, "") then
|
||||
|
||||
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
|
||||
-- dig bottom node first incase of door
|
||||
can_dig_drop(p1)
|
||||
|
||||
p1.y = p1.y + 1
|
||||
node1 = node_ok(p1, "air").name
|
||||
ndef1 = minetest.registered_nodes[node1]
|
||||
|
||||
if node1 ~= "air"
|
||||
and node1 ~= "ignore"
|
||||
and ndef1
|
||||
and not ndef1.groups.level
|
||||
and not ndef1.groups.unbreakable
|
||||
and not ndef1.groups.liquid then
|
||||
|
||||
minetest.add_item(p1, ItemStack(node1))
|
||||
minetest.set_node(p1, {name = "air"})
|
||||
end
|
||||
end
|
||||
can_dig_drop(p1)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -2600,7 +2593,10 @@ function mob_class:do_states(dtime)
|
|||
self:smart_mobs(s, p, dist, dtime)
|
||||
end
|
||||
|
||||
if self.at_cliff then
|
||||
-- distance padding to stop spinning mob
|
||||
local pad = abs(p.x - s.x) + abs(p.z - s.z)
|
||||
|
||||
if self.at_cliff or pad < 0.2 then
|
||||
|
||||
self:set_velocity(0)
|
||||
self:set_animation("stand")
|
||||
|
@ -2618,7 +2614,6 @@ function mob_class:do_states(dtime)
|
|||
self:set_animation("walk")
|
||||
end
|
||||
end
|
||||
|
||||
else -- rnd: if inside reach range
|
||||
|
||||
self.path.stuck = false
|
||||
|
@ -2765,11 +2760,7 @@ function mob_class:falling(pos)
|
|||
end
|
||||
|
||||
-- fall at set speed
|
||||
self.object:set_acceleration({
|
||||
x = 0,
|
||||
y = fall_speed,
|
||||
z = 0
|
||||
})
|
||||
self.object:set_acceleration({x = 0, y = fall_speed, z = 0})
|
||||
end
|
||||
|
||||
|
||||
|
@ -2792,8 +2783,9 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
|
|||
|
||||
-- error checking when mod profiling is enabled
|
||||
if not tool_capabilities then
|
||||
minetest.log("warning",
|
||||
"[mobs] Mod profiling enabled, damage not enabled")
|
||||
|
||||
minetest.log("warning", "[mobs] Mod profiling enabled, damage not enabled")
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
|
@ -2869,6 +2861,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
|
|||
if self.immune_to[n][1] == weapon_def.name then
|
||||
|
||||
damage = self.immune_to[n][2] or 0
|
||||
|
||||
break
|
||||
|
||||
-- if "all" then no tools deal damage unless it's specified in list
|
||||
|
@ -2881,13 +2874,14 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
|
|||
|
||||
-- healing
|
||||
if damage <= -1 then
|
||||
|
||||
self.health = self.health - floor(damage)
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
if use_cmi
|
||||
and cmi.notify_punch(
|
||||
self.object, hitter, tflp, tool_capabilities, dir, damage) then
|
||||
and cmi.notify_punch(self.object, hitter, tflp, tool_capabilities, dir, damage) then
|
||||
return true
|
||||
end
|
||||
|
||||
|
@ -2906,10 +2900,8 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
|
|||
end
|
||||
end
|
||||
|
||||
if tr then
|
||||
if weapon_def.original_description then
|
||||
if tr and weapon_def.original_description then
|
||||
toolranks.new_afteruse(weapon, hitter, nil, {wear = wear})
|
||||
end
|
||||
else
|
||||
weapon:add_wear(wear)
|
||||
end
|
||||
|
@ -2957,20 +2949,6 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
|
|||
if self:check_for_death({type = "punch", puncher = hitter, hot = hot}) then
|
||||
return true
|
||||
end
|
||||
|
||||
--[[ add healthy afterglow when hit (causes lag with large textures)
|
||||
minetest.after(0.1, function()
|
||||
|
||||
if not self.object:get_luaentity() then return end
|
||||
|
||||
self.object:set_texture_mod("^[colorize:#c9900070")
|
||||
|
||||
minetest.after(0.3, function()
|
||||
if not self.object:get_luaentity() then return end
|
||||
self.object:set_texture_mod(self.texture_mods)
|
||||
end)
|
||||
end) ]]
|
||||
|
||||
end -- END if damage
|
||||
|
||||
-- knock back effect (only on full punch)
|
||||
|
@ -2996,11 +2974,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
|
|||
-- use tool knockback value or default
|
||||
kb = tool_capabilities.damage_groups["knockback"] or kb
|
||||
|
||||
self.object:set_velocity({
|
||||
x = dir.x * kb,
|
||||
y = up,
|
||||
z = dir.z * kb
|
||||
})
|
||||
self.object:set_velocity({x = dir.x * kb, y = up, z = dir.z * kb})
|
||||
|
||||
self.pause_timer = 0.25
|
||||
end
|
||||
|
@ -3247,10 +3221,8 @@ function mob_class:mob_activate(staticdata, def, dtime)
|
|||
local armor
|
||||
if type(self.armor) == "table" then
|
||||
armor = table_copy(self.armor)
|
||||
-- armor.immortal = 1
|
||||
else
|
||||
-- armor = {immortal = 1, fleshy = self.armor}
|
||||
armor = {fleshy = self.armor}
|
||||
armor = {fleshy = self.armor} -- immortal = 1
|
||||
end
|
||||
self.object:set_armor_groups(armor)
|
||||
|
||||
|
@ -3348,23 +3320,7 @@ end
|
|||
-- main mob function
|
||||
function mob_class:on_step(dtime, moveresult)
|
||||
|
||||
--[[ moveresult contains this for physical mobs
|
||||
{
|
||||
touching_ground = boolean,
|
||||
collides = boolean,
|
||||
standing_on_object = boolean,
|
||||
collisions = {
|
||||
{
|
||||
type = string, -- "node" or "object",
|
||||
axis = string, -- "x", "y" or "z"
|
||||
node_pos = vector, -- if type is "node"
|
||||
object = ObjectRef, -- if type is "object"
|
||||
old_velocity = vector,
|
||||
new_velocity = vector,
|
||||
}}
|
||||
}]]
|
||||
|
||||
if self.state == "die" then return end ----------------
|
||||
if self.state == "die" then return end
|
||||
|
||||
if use_cmi then
|
||||
cmi.notify_step(self.object, dtime)
|
||||
|
@ -3890,11 +3846,13 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter
|
|||
local numbers = settings:get(name)
|
||||
|
||||
if numbers then
|
||||
|
||||
numbers = numbers:split(",")
|
||||
chance = tonumber(numbers[1]) or chance
|
||||
aoc = tonumber(numbers[2]) or aoc
|
||||
|
||||
if chance == 0 then
|
||||
|
||||
minetest.log("warning",
|
||||
string.format("[mobs] %s has spawning disabled", name))
|
||||
return
|
||||
|
@ -4678,14 +4636,14 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
|
|||
|
||||
self.health = self.hp_max
|
||||
|
||||
if self.htimer < 1 then
|
||||
-- if self.htimer < 1 then
|
||||
|
||||
minetest.chat_send_player(clicker:get_player_name(),
|
||||
S("@1 at full health (@2)",
|
||||
self.name:split(":")[2], tostring(self.health)))
|
||||
-- minetest.chat_send_player(clicker:get_player_name(),
|
||||
-- S("@1 at full health (@2)",
|
||||
-- self.name:split(":")[2], tostring(self.health)))
|
||||
|
||||
self.htimer = 5
|
||||
end
|
||||
-- self.htimer = 5
|
||||
-- end
|
||||
end
|
||||
|
||||
self.object:set_hp(self.health)
|
||||
|
|
|
@ -3,3 +3,4 @@ hunger?
|
|||
hbhunger?
|
||||
stamina?
|
||||
lucky_block?
|
||||
screwdriver?
|
||||
|
|
|
@ -4,8 +4,10 @@ local hmod = minetest.global_exists("hunger")
|
|||
local hbmod = minetest.global_exists("hbhunger")
|
||||
local stmod = minetest.global_exists("stamina")
|
||||
|
||||
local screwdriver_exists = minetest.global_exists("screwdriver")
|
||||
|
||||
-- eat pie slice function
|
||||
local replace_pie = function(node, puncher, pos)
|
||||
local function replace_pie(node, puncher, pos)
|
||||
|
||||
-- is this my pie?
|
||||
if minetest.is_protected(pos, puncher:get_player_name()) then
|
||||
|
@ -41,7 +43,11 @@ local replace_pie = function(node, puncher, pos)
|
|||
node.name = pie .. "_" .. (num + 1)
|
||||
end
|
||||
|
||||
minetest.swap_node(pos, {name = node.name})
|
||||
minetest.swap_node(pos, node)
|
||||
|
||||
if num == 3 then
|
||||
minetest.check_for_falling(pos)
|
||||
end
|
||||
|
||||
-- Blockmen's hud_hunger mod
|
||||
if hmod then
|
||||
|
@ -91,12 +97,13 @@ end
|
|||
|
||||
|
||||
-- register pie bits
|
||||
local register_pie = function(pie, desc)
|
||||
local function register_pie(pie, desc)
|
||||
|
||||
-- full pie
|
||||
minetest.register_node("pie:" .. pie .. "_0", {
|
||||
description = desc,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
use_texture_alpha = "clip",
|
||||
sunlight_propagates = false,
|
||||
tiles = {
|
||||
|
@ -108,9 +115,11 @@ local register_pie = function(pie, desc)
|
|||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {{-0.45, -0.5, -0.45, 0.45, 0, 0.45}}
|
||||
fixed = {-0.45, -0.5, -0.45, 0.45, 0, 0.45}
|
||||
},
|
||||
|
||||
on_rotate = screwdriver_exists and screwdriver.rotate_simple,
|
||||
|
||||
on_punch = function(pos, node, puncher, pointed_thing)
|
||||
replace_pie(node, puncher, pos)
|
||||
end
|
||||
|
@ -118,8 +127,9 @@ local register_pie = function(pie, desc)
|
|||
|
||||
-- 3/4 pie
|
||||
minetest.register_node("pie:" .. pie .. "_1", {
|
||||
description = "3/4" .. desc,
|
||||
description = "3/4 " .. desc,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
use_texture_alpha = "clip",
|
||||
sunlight_propagates = true,
|
||||
tiles = {
|
||||
|
@ -131,9 +141,11 @@ local register_pie = function(pie, desc)
|
|||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {{-0.45, -0.5, -0.25, 0.45, 0, 0.45}}
|
||||
fixed = {-0.45, -0.5, -0.25, 0.45, 0, 0.45}
|
||||
},
|
||||
|
||||
on_rotate = screwdriver_exists and screwdriver.rotate_simple,
|
||||
|
||||
on_punch = function(pos, node, puncher, pointed_thing)
|
||||
replace_pie(node, puncher, pos)
|
||||
end
|
||||
|
@ -143,6 +155,7 @@ local register_pie = function(pie, desc)
|
|||
minetest.register_node("pie:" .. pie .. "_2", {
|
||||
description = "Half " .. desc,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
use_texture_alpha = "clip",
|
||||
sunlight_propagates = true,
|
||||
tiles = {
|
||||
|
@ -154,9 +167,11 @@ local register_pie = function(pie, desc)
|
|||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {{-0.45, -0.5, 0.0, 0.45, 0, 0.45}}
|
||||
fixed = {-0.45, -0.5, 0.0, 0.45, 0, 0.45}
|
||||
},
|
||||
|
||||
on_rotate = screwdriver_exists and screwdriver.rotate_simple,
|
||||
|
||||
on_punch = function(pos, node, puncher, pointed_thing)
|
||||
replace_pie(node, puncher, pos)
|
||||
end
|
||||
|
@ -166,6 +181,7 @@ local register_pie = function(pie, desc)
|
|||
minetest.register_node("pie:" .. pie .. "_3", {
|
||||
description = "Piece of " .. desc,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
use_texture_alpha = "clip",
|
||||
sunlight_propagates = true,
|
||||
tiles = {
|
||||
|
@ -177,9 +193,11 @@ local register_pie = function(pie, desc)
|
|||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {{-0.45, -0.5, 0.25, 0.45, 0, 0.45}}
|
||||
fixed = {-0.45, -0.5, 0.25, 0.45, 0, 0.45}
|
||||
},
|
||||
|
||||
on_rotate = screwdriver_exists and screwdriver.rotate_simple,
|
||||
|
||||
on_punch = function(pos, node, puncher, pointed_thing)
|
||||
replace_pie(node, puncher, pos)
|
||||
end
|
||||
|
@ -197,7 +215,7 @@ minetest.register_craft({
|
|||
{"group:food_sugar", "group:food_egg", "group:food_sugar"},
|
||||
{"group:food_wheat", "group:food_flour", "group:food_wheat"}
|
||||
},
|
||||
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
|
||||
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
|
||||
})
|
||||
|
||||
|
||||
|
@ -211,7 +229,7 @@ minetest.register_craft({
|
|||
{"group:food_sugar", "group:food_egg", "group:food_sugar"},
|
||||
{"group:food_wheat", "group:food_flour", "group:food_wheat"}
|
||||
},
|
||||
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
|
||||
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
|
||||
})
|
||||
|
||||
|
||||
|
@ -225,7 +243,7 @@ minetest.register_craft({
|
|||
{"group:food_sugar", "group:food_egg", "group:food_sugar"},
|
||||
{"group:food_wheat", "group:food_flour", "group:food_wheat"}
|
||||
},
|
||||
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
|
||||
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
|
||||
})
|
||||
|
||||
|
||||
|
@ -239,7 +257,7 @@ minetest.register_craft({
|
|||
{"group:food_sugar", "group:food_egg", "group:food_sugar"},
|
||||
{"group:food_wheat", "group:food_flour", "group:food_wheat"}
|
||||
},
|
||||
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
|
||||
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
|
||||
})
|
||||
|
||||
|
||||
|
@ -253,7 +271,7 @@ minetest.register_craft({
|
|||
{"group:food_sugar", "group:food_egg", "group:food_sugar"},
|
||||
{"group:food_flour", "group:food_cheese", "group:food_flour"}
|
||||
},
|
||||
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
|
||||
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
|
||||
})
|
||||
|
||||
|
||||
|
@ -279,12 +297,12 @@ minetest.register_craft({
|
|||
{"group:food_sugar", "group:food_egg", "group:food_sugar"},
|
||||
{"group:food_wheat", "group:food_flour", "group:food_wheat"}
|
||||
},
|
||||
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
|
||||
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
|
||||
})
|
||||
|
||||
|
||||
-- bread pudding
|
||||
register_pie("brpd","Bread Pudding")
|
||||
register_pie("brpd", "Bread Pudding")
|
||||
|
||||
minetest.register_craft({
|
||||
output = "pie:brpd_0",
|
||||
|
@ -293,12 +311,12 @@ minetest.register_craft({
|
|||
{"group:food_sugar", "group:food_egg", "group:food_sugar"},
|
||||
{"group:food_wheat", "group:food_flour", "group:food_wheat"}
|
||||
},
|
||||
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
|
||||
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
|
||||
})
|
||||
|
||||
|
||||
-- orange pie
|
||||
register_pie("orange","Orange Pie")
|
||||
register_pie("orange", "Orange Pie")
|
||||
|
||||
minetest.register_craft({
|
||||
output = "pie:orange_0",
|
||||
|
@ -307,7 +325,7 @@ minetest.register_craft({
|
|||
{"group:food_sugar", "group:food_egg", "group:food_sugar"},
|
||||
{"group:food_wheat", "group:food_flour", "group:food_wheat"}
|
||||
},
|
||||
replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}}
|
||||
replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}}
|
||||
})
|
||||
|
||||
|
||||
|
@ -343,4 +361,4 @@ minetest.register_alias("pie:sugar", "farming:sugar")
|
|||
minetest.register_alias("pie:knife", "default:sword_steel")
|
||||
|
||||
|
||||
print ("[MOD] Pie loaded")
|
||||
print("[MOD] Pie loaded")
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
name = pie
|
||||
depends = default
|
||||
optional_depends = hunger, hbhunger, stamina, lucky_block
|
||||
optional_depends = hunger, hbhunger, stamina, lucky_block, screwdriver
|
||||
description = Add a selection of tasty Pie/Cakes to eat.
|
||||
|
|
|
@ -26,7 +26,7 @@ node_box = {
|
|||
{-0.0612,-0.500000,-0.500000,0.0612,0.500000,-0.375000}, --NodeBox 1
|
||||
}
|
||||
},
|
||||
groups = {snappy=3,flammable=2},
|
||||
groups = {snappy=3,flammable=2,attached_node=1},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
drop = 'default:stick'
|
||||
})
|
||||
|
@ -61,7 +61,8 @@ for i in pairs(BushBranchCenter) do
|
|||
-- tree=1, -- MM: disabled because some recipes use group:tree for trunks
|
||||
snappy=3,
|
||||
flammable=2,
|
||||
leaves=1
|
||||
leaves=1,
|
||||
attached_node=1
|
||||
},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
drop = 'default:stick 4'
|
||||
|
@ -104,7 +105,8 @@ for i in pairs(BushBranchSide) do
|
|||
-- tree=1, -- MM: disabled because some recipes use group:tree for trunks
|
||||
snappy=3,
|
||||
flammable=2,
|
||||
leaves=1
|
||||
leaves=1,
|
||||
attached_node=1
|
||||
},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
drop = 'default:stick 3'
|
||||
|
|
|
@ -15,7 +15,7 @@ minetest.register_node("cavestuff:pebble_1",{
|
|||
tiles = {"undergrowth_pebble.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=3, stone=1},
|
||||
groups = {cracky=3, stone=1, attached_node=1},
|
||||
selection_box = cbox,
|
||||
collision_box = cbox,
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
|
@ -35,7 +35,7 @@ minetest.register_node("cavestuff:pebble_2",{
|
|||
tiles = {"undergrowth_pebble.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=3, stone=1, not_in_creative_inventory=1},
|
||||
groups = {cracky=3, stone=1, attached_node=1, not_in_creative_inventory=1},
|
||||
selection_box = cbox,
|
||||
collision_box = cbox,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
|
@ -48,7 +48,7 @@ minetest.register_node("cavestuff:desert_pebble_1",{
|
|||
tiles = {"default_desert_stone.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=3, stone=1},
|
||||
groups = {cracky=3, stone=1, attached_node=1},
|
||||
selection_box = cbox,
|
||||
collision_box = cbox,
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
|
@ -67,7 +67,7 @@ minetest.register_node("cavestuff:desert_pebble_2",{
|
|||
tiles = {"default_desert_stone.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=3, stone=1, not_in_creative_inventory=1},
|
||||
groups = {cracky=3, stone=1, attached_node=1, not_in_creative_inventory=1},
|
||||
selection_box = cbox,
|
||||
collision_box = cbox,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
|
|
|
@ -4,6 +4,12 @@
|
|||
-- TWiGS
|
||||
-----------------------------------------------------------------------------------------------
|
||||
|
||||
local fakenode = {
|
||||
name = "default:stone", -- could be anything that's guaranteed to exist at mapgen time, and isn't buildable_to
|
||||
param1 = 0,
|
||||
param2 = 0
|
||||
}
|
||||
|
||||
abstract_trunks.place_twig = function(pos)
|
||||
local twig_size = math.random(1,27)
|
||||
|
||||
|
@ -26,6 +32,16 @@ abstract_trunks.place_twig = function(pos)
|
|||
local node_s_w = minetest.get_node(south_west)
|
||||
local node_west = minetest.get_node(west)
|
||||
local node_n_w = minetest.get_node(north_west)
|
||||
|
||||
node_north = minetest.registered_nodes[node_north.name] and node_north or fakenode
|
||||
node_n_e = minetest.registered_nodes[node_n_e.name] and node_n_e or fakenode
|
||||
node_east = minetest.registered_nodes[node_east.name] and node_east or fakenode
|
||||
node_s_e = minetest.registered_nodes[node_s_e.name] and node_s_e or fakenode
|
||||
node_south = minetest.registered_nodes[node_south.name] and node_south or fakenode
|
||||
node_s_w = minetest.registered_nodes[node_s_w.name] and node_s_w or fakenode
|
||||
node_west = minetest.registered_nodes[node_west.name] and node_west or fakenode
|
||||
node_n_w = minetest.registered_nodes[node_n_w.name] and node_n_w or fakenode
|
||||
|
||||
-- small twigs
|
||||
if twig_size <= 16 then
|
||||
minetest.swap_node(right_here, {name="trunks:twig_"..math.random(1,4), param2=math.random(0,3)})
|
||||
|
@ -356,11 +372,12 @@ if Moss_on_ground == true then
|
|||
abstract_trunks.grow_moss_on_ground = function(pos)
|
||||
local on_ground = {x=pos.x, y=pos.y+1, z=pos.z}
|
||||
local moss_type = math.random(1,21)
|
||||
local rot = math.random(0,3)
|
||||
|
||||
if moss_type == 1 then
|
||||
minetest.swap_node(on_ground, {name="trunks:moss_fungus", param2=math.random(0,3)})
|
||||
minetest.swap_node(on_ground, {name="trunks:moss_with_fungus_"..rot, param2=1})
|
||||
else
|
||||
minetest.swap_node(on_ground, {name="trunks:moss", param2=math.random(0,3)})
|
||||
minetest.swap_node(on_ground, {name="trunks:moss_plain_"..rot, param2=1})
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -406,44 +423,49 @@ abstract_trunks.grow_moss_on_trunk = function(pos)
|
|||
local node_under = minetest.get_node(undrneath)
|
||||
|
||||
--if minetest.get_item_group(node_under.name, "tree") < 1 then
|
||||
if minetest.registered_nodes[node_here.name].buildable_to then
|
||||
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
|
||||
minetest.swap_node(on_ground, {name="trunks:moss_fungus", param2=math.random(0,3) --[[1]]})
|
||||
minetest.swap_node(on_ground, {name="trunks:moss_with_fungus_"..rot, param2=1})
|
||||
elseif moss_type < 22 then
|
||||
minetest.swap_node(on_ground, {name="trunks:moss", param2=math.random(0,3) --[[1]]})
|
||||
minetest.swap_node(on_ground, {name="trunks:moss_plain_"..rot, param2=1})
|
||||
end
|
||||
end
|
||||
if minetest.registered_nodes[node_north.name].buildable_to then
|
||||
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
|
||||
minetest.swap_node(at_side_n, {name="trunks:moss_fungus", param2=math.random(4,7)}) -- 5,4,6,7
|
||||
minetest.swap_node(at_side_n, {name="trunks:moss_with_fungus_"..rot, param2=5})
|
||||
elseif moss_type < 22 then
|
||||
minetest.swap_node(at_side_n, {name="trunks:moss", param2=math.random(4,7)})
|
||||
minetest.swap_node(at_side_n, {name="trunks:moss_plain_"..rot, param2=5})
|
||||
end
|
||||
end
|
||||
if minetest.registered_nodes[node_east.name].buildable_to then
|
||||
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
|
||||
minetest.swap_node(at_side_e, {name="trunks:moss_fungus", param2=math.random(12,15)})
|
||||
minetest.swap_node(at_side_e, {name="trunks:moss_with_fungus_"..rot, param2=3})
|
||||
elseif moss_type < 22 then
|
||||
minetest.swap_node(at_side_e, {name="trunks:moss", param2=math.random(12,15)})
|
||||
minetest.swap_node(at_side_e, {name="trunks:moss_plain_"..rot, param2=3})
|
||||
end
|
||||
end
|
||||
if minetest.registered_nodes[node_south.name].buildable_to then
|
||||
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
|
||||
minetest.swap_node(at_side_s, {name="trunks:moss_fungus", param2=math.random(8,11)})
|
||||
minetest.swap_node(at_side_s, {name="trunks:moss_with_fungus_"..rot, param2=4})
|
||||
elseif moss_type < 22 then
|
||||
minetest.swap_node(at_side_s, {name="trunks:moss", param2=math.random(8,11)})
|
||||
minetest.swap_node(at_side_s, {name="trunks:moss_plain_"..rot, param2=4})
|
||||
end
|
||||
end
|
||||
if minetest.registered_nodes[node_west.name].buildable_to then
|
||||
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
|
||||
minetest.swap_node(at_side_w, {name="trunks:moss_fungus", param2=math.random(16,19)})
|
||||
minetest.swap_node(at_side_w, {name="trunks:moss_with_fungus_"..rot, param2=2})
|
||||
elseif moss_type < 22 then
|
||||
minetest.swap_node(at_side_w, {name="trunks:moss", param2=math.random(16,19)})
|
||||
minetest.swap_node(at_side_w, {name="trunks:moss_plain_"..rot, param2=2})
|
||||
end
|
||||
end
|
||||
--end
|
||||
|
|
|
@ -65,42 +65,63 @@ end
|
|||
-----------------------------------------------------------------------------------------------
|
||||
-- MoSS
|
||||
-----------------------------------------------------------------------------------------------
|
||||
local flat_moss = {-1/2, -1/2, -1/2, 1/2, -15/32--[[<-flickers if smaller]], 1/2}
|
||||
|
||||
minetest.register_node("trunks:moss", {
|
||||
-- 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"),
|
||||
drawtype = "nodebox",--"signlike",
|
||||
tiles = {"trunks_moss.png"},
|
||||
drawtype = "nodebox",
|
||||
tiles = {"trunks_moss.png"..xform},
|
||||
inventory_image = "trunks_moss.png",
|
||||
wield_image = "trunks_moss.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",--"wallmounted",
|
||||
paramtype2 = "wallmounted",
|
||||
sunlight_propagates = true,
|
||||
walkable = false,
|
||||
node_box = {type = "fixed", fixed = flat_moss},
|
||||
selection_box = {type = "fixed", fixed = flat_stick},--{type = "wallmounted"},
|
||||
groups = {snappy = 3, flammable = 3 },
|
||||
node_box = cbox,
|
||||
groups = {snappy = 3, flammable = 3, attached_node=1, not_in_creative_inventory = r},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
})
|
||||
drop = "trunks:moss_plain_0",
|
||||
})
|
||||
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- MoSS & FuNGuS
|
||||
-----------------------------------------------------------------------------------------------
|
||||
minetest.register_node("trunks:moss_fungus", {
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- MoSS & FuNGuS
|
||||
-----------------------------------------------------------------------------------------------
|
||||
minetest.register_node("trunks:moss_with_fungus_"..r, {
|
||||
description = S("Moss with Fungus"),
|
||||
drawtype = "nodebox",--"signlike",
|
||||
tiles = {"trunks_moss_fungus.png"},
|
||||
drawtype = "nodebox",
|
||||
tiles = {"trunks_moss_fungus.png"..xform},
|
||||
inventory_image = "trunks_moss_fungus.png",
|
||||
wield_image = "trunks_moss_fungus.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",--"wallmounted",
|
||||
paramtype2 = "wallmounted",
|
||||
sunlight_propagates = true,
|
||||
walkable = false,
|
||||
node_box = {type = "fixed", fixed = flat_moss},
|
||||
selection_box = {type = "fixed", fixed = flat_stick},--{type = "wallmounted"},
|
||||
groups = {snappy = 3, flammable = 3 },
|
||||
node_box = cbox,
|
||||
groups = {snappy = 3, flammable = 3, attached_node=1, not_in_creative_inventory = r},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
})
|
||||
drop = "trunks:moss_with_fungus_0",
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_alias("trunks:moss_plain", "trunks:moss_plain_0")
|
||||
minetest.register_alias("trunks:moss_with_fungus", "trunks:moss_with_fungus_0")
|
||||
|
||||
-----------------------------------------------------------------------------------------------
|
||||
-- TWiGS BLoCK
|
||||
|
@ -361,7 +382,8 @@ for i in pairs(TRuNKS) do
|
|||
snappy=1,
|
||||
choppy=2,
|
||||
oddly_breakable_by_hand=1,
|
||||
flammable=2--,
|
||||
flammable=2,
|
||||
attached_node = 1
|
||||
--not_in_creative_inventory=1 -- atm in inv for testing
|
||||
},
|
||||
--drop = "trunks:twig_1", -- not sure about this yet
|
||||
|
@ -376,3 +398,26 @@ end
|
|||
end
|
||||
|
||||
minetest.register_alias("trunks:pine_trunkroot", "trunks:pine_treeroot")
|
||||
|
||||
-- convert moss to wallmounted mode so that attached_node works properly.
|
||||
|
||||
local fdirtowall = {
|
||||
[0] = 1,
|
||||
[1] = 5,
|
||||
[2] = 4,
|
||||
[3] = 3,
|
||||
[4] = 2,
|
||||
}
|
||||
|
||||
minetest.register_lbm({
|
||||
name = "trunks:convert_moss_wallmounted",
|
||||
label = "Convert moss to wallmounted mode",
|
||||
run_at_every_load = true,
|
||||
nodenames = {"trunks:moss", "trunks:moss_fungus"},
|
||||
action = function(pos, node)
|
||||
local basedir = math.floor(node.param2 / 4)
|
||||
local rot = node.param2 % 4
|
||||
local newname = node.name == "trunks:moss_fungus" and "trunks:moss_with_fungus" or "trunks:moss_plain"
|
||||
minetest.set_node(pos, {name = newname.."_"..rot, param2 = fdirtowall[basedir] })
|
||||
end
|
||||
})
|
||||
|
|
|
@ -40,7 +40,7 @@ minetest.register_node("youngtrees:youngtree2_middle",{
|
|||
{-0.500000,0.125000,-0.500000,0.500000,0.500000,0.500000}, --NodeBox 3
|
||||
}
|
||||
},
|
||||
groups = {snappy=3,flammable=2},
|
||||
groups = {snappy=3,flammable=2,attached_node=1},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
drop = 'trunks:twig_1'
|
||||
})
|
||||
|
@ -58,7 +58,7 @@ minetest.register_node("youngtrees:youngtree_top", {
|
|||
type = "fixed",
|
||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
||||
},
|
||||
groups = {snappy=3,flammable=2},
|
||||
groups = {snappy=3,flammable=2,attached_node=1},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
drop = 'trunks:twig_1'
|
||||
})
|
||||
|
@ -77,7 +77,7 @@ minetest.register_node("youngtrees:youngtree_middle", {
|
|||
type = "fixed",
|
||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
||||
},
|
||||
groups = {snappy=3,flammable=2},
|
||||
groups = {snappy=3,flammable=2,attached_node=1},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
drop = 'trunks:twig_1'
|
||||
})
|
||||
|
@ -97,7 +97,7 @@ minetest.register_node("youngtrees:youngtree_bottom", {
|
|||
type = "fixed",
|
||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
||||
},
|
||||
groups = {snappy=3,flammable=2},
|
||||
groups = {snappy=3,flammable=2,attached_node=1},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
drop = 'trunks:twig_1'
|
||||
})
|
||||
|
|
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
|
||||
|
||||
|
||||
local function head_particle(player, texture)
|
||||
|
||||
local prop = player:get_properties()
|
||||
local pos = player:get_pos() ; pos.y = pos.y + prop.eye_height -- mouth level
|
||||
local dir = player:get_look_dir()
|
||||
|
||||
|
||||
minetest.add_particlespawner({
|
||||
amount = 5,
|
||||
time = 0.1,
|
||||
minpos = pos,
|
||||
maxpos = pos,
|
||||
minvel = {x = dir.x - 1, y = dir.y, z = dir.z - 1},
|
||||
maxvel = {x = dir.x + 1, y = dir.y, z = dir.z + 1},
|
||||
minacc = {x = 0, y = -5, z = 0},
|
||||
maxacc = {x = 0, y = -9, z = 0},
|
||||
minexptime = 1,
|
||||
maxexptime = 1,
|
||||
minsize = 1,
|
||||
maxsize = 2,
|
||||
texture = texture
|
||||
})
|
||||
end
|
||||
|
||||
local function drunk_tick()
|
||||
|
||||
for _,player in ipairs(minetest.get_connected_players()) do
|
||||
|
@ -218,6 +242,9 @@ local function drunk_tick()
|
|||
local num = stamina.players[name].drunk
|
||||
|
||||
if num and num > 0 and math.floor(num / 20) == num / 20 then
|
||||
|
||||
head_particle(player, "bubble.png")
|
||||
|
||||
minetest.sound_play("stamina_burp",
|
||||
{to_player = name, gain = 0.7}, true)
|
||||
end
|
||||
|
@ -381,6 +408,8 @@ local function poison_tick()
|
|||
|
||||
local hp = player:get_hp() - 1
|
||||
|
||||
head_particle(player, "stamina_poison_particle.png")
|
||||
|
||||
if hp > 0 then
|
||||
player:set_hp(hp, {poison = true})
|
||||
end
|
||||
|
@ -517,26 +546,9 @@ function stamina.eat(hp_change, replace_with_item, itemstack, user, pointed_thin
|
|||
minetest.sound_play(snd, {to_player = name, gain = 0.7}, true)
|
||||
|
||||
-- particle effect when eating
|
||||
local prop = user:get_properties()
|
||||
local pos = user:get_pos() ; pos.y = pos.y + prop.eye_height -- mouth level
|
||||
local texture = minetest.registered_items[itemname].inventory_image
|
||||
local dir = user:get_look_dir()
|
||||
|
||||
minetest.add_particlespawner({
|
||||
amount = 5,
|
||||
time = 0.1,
|
||||
minpos = pos,
|
||||
maxpos = pos,
|
||||
minvel = {x = dir.x - 1, y = dir.y, z = dir.z - 1},
|
||||
maxvel = {x = dir.x + 1, y = dir.y, z = dir.z + 1},
|
||||
minacc = {x = 0, y = -5, z = 0},
|
||||
maxacc = {x = 0, y = -9, z = 0},
|
||||
minexptime = 1,
|
||||
maxexptime = 1,
|
||||
minsize = 1,
|
||||
maxsize = 2,
|
||||
texture = texture
|
||||
})
|
||||
head_particle(user, texture)
|
||||
|
||||
-- if player drinks milk then stop poison and being drunk
|
||||
local item_name = itemstack:get_name() or ""
|
||||
|
|
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',
|
||||
light_source = minetest.LIGHT_MAX,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
groups = {choppy=2, cracky=1, not_in_creative_inventory=1},
|
||||
is_ground_content = false,
|
||||
drop = "tubelib_addons2:lamp"
|
||||
|
|
|
@ -71,6 +71,7 @@ minetest.register_node("tubelib_addons2:lamp_on", {
|
|||
paramtype = "light",
|
||||
paramtype2 = "color",
|
||||
palette = "unifieddyes_palette_extended.png",
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
groups = {choppy=2, cracky=1, not_in_creative_inventory=1, ud_param2_colorable = 1},
|
||||
|
||||
on_construct = unifieddyes.on_construct,
|
||||
|
|