Bring Rp Up-to-date

This commit is contained in:
epCode 2021-02-14 19:22:23 -08:00
parent 3f9bd759b5
commit 964607e5b9
36 changed files with 356 additions and 246 deletions

View File

@ -5,7 +5,7 @@ Wow, thank you! :-)
But first, some things to note:
MineClone 2's development target is to make a free software clone of Minecraft,
***version 1.11***, ***PC edition***.
***version 1.12***, ***PC edition***, *** + Optifine features supported by the Minetest Engine ***.
MineClone 2 is maintained by two persons. Namely, kay27 and EliasFleckenstein. You can find us
in the Minetest forums (forums.minetest.net), in IRC in the #minetest

View File

@ -86,7 +86,8 @@ Minetest to learn more.
## Project description
The main goal of **MineClone 2** is to be a clone of Minecraft and to be released as free software.
* **Target of development: Minecraft, PC Edition, version 1.11** (later known as “Java Edition”)
* **Target of development: Minecraft, PC Edition, version 1.12** (later known as “Java Edition”)
* MineClone2 also includes Optifine features supported by the Minetest
* Features of later Minecraft versions might sneak in, but they have a low priority
* In general, Minecraft is aimed to be cloned as good as Minetest currently permits (no hacks)
* Cloning the gameplay has highest priority

View File

@ -405,3 +405,53 @@ function mcl_util.get_object_center(obj)
pos.y = pos.y + (ymax - ymin) / 2.0
return pos
end
local get_node_emerge_queue = {}
local function ecb_get_far_node(blockpos, action, calls_remaining, param)
if calls_remaining <= 0 and param then
minetest.log("verbose","[mcl_util] ecb done for param = "..param.." node.name="..minetest.get_node(minetest.string_to_pos(param)).name)
get_node_emerge_queue[param] = nil
end
end
function mcl_util.get_far_node(pos, force)
local node = minetest.get_node(pos)
if node.name ~= "ignore" then
return node
end
minetest.get_voxel_manip():read_from_map(pos, pos)
node = minetest.get_node(pos)
if node.name ~= "ignore" or not force then
return node
end
local blockpos = vector.multiply(vector.floor(vector.divide(pos, mcl_vars.MAP_BLOCKSIZE)), mcl_vars.MAP_BLOCKSIZE)
local key = minetest.pos_to_string(blockpos)
for i=1,2 do -- give engine 2 chances to emerge the data
if not get_node_emerge_queue[key] then
get_node_emerge_queue[key] = 1
minetest.log("verbose","[mcl_util] emerge during get_far_node("..minetest.pos_to_string(pos).."), key="..key..", blockpos="..minetest.pos_to_string(blockpos))
minetest.emerge_area(blockpos, vector.add(blockpos, mcl_vars.MAP_BLOCKSIZE-1), ecb_get_far_node, key)
end
while not get_node_emerge_queue[key] do end
minetest.log("verbose","[mcl_util] emerge finished for node "..minetest.pos_to_string(pos)..", key="..key..", blockpos="..minetest.pos_to_string(blockpos)..", node.name="..mcl_util.get_far_node(pos).name)
node = minetest.get_node(pos)
if node.name ~= "ignore" then
return node
end
minetest.get_voxel_manip():read_from_map(pos, pos)
node = minetest.get_node(pos)
if node.name ~= "ignore" or not force then
return node
end
end
node.name = "air" -- engine continuously returns "ignore" - probably it is a bug
minetest.swap_node(pos, node) -- engine continuously returns "ignore" - probably it is a bug
return node -- engine continuously returns "ignore" - probably it is a bug
end

View File

@ -2501,7 +2501,7 @@ local do_states = function(self, dtime)
-- stop timer if out of reach or direct line of sight
elseif self.allow_fuse_reset
and self.v_start
and (dist > self.reach
and (dist >= self.explosiontimer_reset_radius
or not line_of_sight(self, s, p, 2)) then
self.v_start = false
self.timer = 0
@ -2511,7 +2511,7 @@ local do_states = function(self, dtime)
end
-- walk right up to player unless the timer is active
if self.v_start and (self.stop_to_explode or dist < 1.5) then
if self.v_start and (self.stop_to_explode or dist < self.reach) then
set_velocity(self, 0)
else
set_velocity(self, self.run_velocity)
@ -3068,7 +3068,7 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
local up = 2
-- if already in air then dont go up anymore when hit
if v.y > 0
if v.y ~= 0
or self.fly then
up = 0
end
@ -3789,6 +3789,7 @@ minetest.register_entity(name, {
immune_to = def.immune_to or {},
explosion_radius = def.explosion_radius, -- LEGACY
explosion_damage_radius = def.explosion_damage_radius, -- LEGACY
explosiontimer_reset_radius = def.explosiontimer_reset_radius,
explosion_timer = def.explosion_timer or 3,
allow_fuse_reset = def.allow_fuse_reset ~= false,
stop_to_explode = def.stop_to_explode ~= false,

View File

@ -108,6 +108,7 @@ functions needed for the mob to work properly which contains the following:
'explosion_timer' number of seconds before mob explodes while its target
is still inside reach or explosion_damage_radius,
defaults to 3.
'explosiontimer_reset_radius' The distance you must travel before the timer will be reset.
'allow_fuse_reset' Allow 'explode' attack_type to reset fuse and resume
chasing if target leaves the blast radius or line of
sight. Defaults to true.

View File

@ -143,6 +143,7 @@ minetest.register_entity("mcl_paintings:painting", {
_xsize = 1,
_ysize = 1,
on_activate = function(self, staticdata)
self.object:set_armor_groups({immortal = 1})
if staticdata and staticdata ~= "" then
local data = minetest.deserialize(staticdata)
if data then
@ -165,18 +166,20 @@ minetest.register_entity("mcl_paintings:painting", {
}
return minetest.serialize(data)
end,
on_death = function(self, killer)
-- Drop as item on death
local kname = ""
if killer and killer:is_player() then
kname = killer:get_player_name()
end
if not minetest.is_creative_enabled(kname) then
on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir, damage)
-- Drop as item on punch
if puncher and puncher:is_player() then
kname = puncher:get_player_name()
local pos = self._pos
if not pos then
pos = self.object:get_pos()
end
minetest.add_item(pos, "mcl_paintings:painting")
if not minetest.is_protected(pos, kname) then
self.object:remove()
if not minetest.is_creative_enabled(kname) then
minetest.add_item(pos, "mcl_paintings:painting")
end
end
end
end,
})

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

@ -238,6 +238,73 @@ function mcl_experience.add_experience(player, experience)
local name = player:get_player_name()
local temp_pool = pool[name]
local inv = player:get_inventory()
local candidates = {
{list = "main", index = player:get_wield_index()},
{list = "armor", index = 2},
{list = "armor", index = 3},
{list = "armor", index = 4},
{list = "armor", index = 5},
}
local final_candidates = {}
for _, can in ipairs(candidates) do
local stack = inv:get_stack(can.list, can.index)
local wear = stack:get_wear()
if mcl_enchanting.has_enchantment(stack, "mending") and wear > 0 then
can.stack = stack
can.wear = wear
table.insert(final_candidates, can)
end
end
if #final_candidates > 0 then
local can = final_candidates[math.random(#final_candidates)]
local stack, list, index, wear = can.stack, can.list, can.index, can.wear
local unbreaking_level = mcl_enchanting.get_enchantment(stack, "unbreaking")
local uses
local armor_uses = minetest.get_item_group(stack:get_name(), "mcl_armor_uses")
if armor_uses > 0 then
uses = armor_uses
if unbreaking_level > 0 then
uses = uses / (0.6 + 0.4 / (unbreaking_level + 1))
end
else
local def = stack:get_definition()
if def then
local fixed_uses = def._mcl_uses
if fixed_uses then
uses = fixed_uses
if unbreaking_level > 0 then
uses = uses * (unbreaking_level + 1)
end
end
end
if not uses then
local toolcaps = stack:get_tool_capabilities()
local groupcaps = toolcaps.groupcaps
for _, v in pairs(groupcaps) do
uses = v.uses
break
end
end
end
uses = uses or 0
local multiplier = 2 * 65535 / uses
local repair = experience * multiplier
local new_wear = wear - repair
if new_wear < 0 then
experience = math.floor(-new_wear / multiplier + 0.5)
new_wear = 0
else
experience = 0
end
stack:set_wear(math.floor(new_wear))
inv:set_stack(list, index, stack)
if can.list == "armor" then
local armor_inv = minetest.get_inventory({type = "detached", name = player:get_player_name() .. "_armor"})
armor_inv:set_stack(list, index, stack)
end
end
local old_bar, old_xp, old_level = temp_pool.bar, temp_pool.xp, temp_pool.level
temp_pool.xp = math.min(math.max(temp_pool.xp + experience, 0), max_xp)
@ -333,78 +400,7 @@ local function xp_step(self, dtime)
acceleration = vector.new(goal.x-currentvel.x,goal.y-currentvel.y,goal.z-currentvel.z)
self.object:add_velocity(vector.add(acceleration,player_velocity))
elseif distance < 0.8 then
local xp = self._xp
local inv = collector:get_inventory()
local candidates = {
{list = "main", index = collector:get_wield_index()},
{list = "armor", index = 2},
{list = "armor", index = 3},
{list = "armor", index = 4},
{list = "armor", index = 5},
}
local final_candidates = {}
for _, can in ipairs(candidates) do
local stack = inv:get_stack(can.list, can.index)
local wear = stack:get_wear()
if mcl_enchanting.has_enchantment(stack, "mending") and wear > 0 then
can.stack = stack
can.wear = wear
table.insert(final_candidates, can)
end
end
if #final_candidates > 0 then
local can = final_candidates[math.random(#final_candidates)]
local stack, list, index, wear = can.stack, can.list, can.index, can.wear
local unbreaking_level = mcl_enchanting.get_enchantment(stack, "unbreaking")
local uses
local armor_uses = minetest.get_item_group(stack:get_name(), "mcl_armor_uses")
if armor_uses > 0 then
uses = armor_uses
if unbreaking_level > 0 then
uses = uses / (0.6 + 0.4 / (unbreaking_level + 1))
end
else
local def = stack:get_definition()
if def then
local fixed_uses = def._mcl_uses
if fixed_uses then
uses = fixed_uses
if unbreaking_level > 0 then
uses = uses * (unbreaking_level + 1)
end
end
end
if not uses then
local toolcaps = stack:get_tool_capabilities()
local groupcaps = toolcaps.groupcaps
for _, v in pairs(groupcaps) do
uses = v.uses
break
end
end
end
uses = uses or 0
local multiplier = 2 * 65535 / uses
local repair = xp * multiplier
local new_wear = wear - repair
if new_wear < 0 then
xp = math.floor(-new_wear / multiplier + 0.5)
new_wear = 0
else
xp = 0
end
stack:set_wear(math.floor(new_wear))
inv:set_stack(list, index, stack)
if can.list == "armor" then
local armor_inv = minetest.get_inventory({type = "detached", name = collector:get_player_name() .. "_armor"})
armor_inv:set_stack(list, index, stack)
end
end
if xp > 0 then
mcl_experience.add_experience(collector, xp)
else
minetest.sound_play("experience",{gain=0.1,to_player = name,pitch=math.random(75,99)/100})
end
mcl_experience.add_experience(collector, self._xp)
self.object:remove()
end
return

View File

@ -331,7 +331,7 @@ mcl_inventory.set_creative_formspec = function(player, start_i, pagenum, inv_siz
-- Show armor and player image
local player_preview
if minetest.settings:get_bool("3d_player_preview", true) then
if minetest.settings:get_bool("3d_player_preview") then
player_preview = mcl_player.get_player_formspec_model(player, 3.9, 1.4, 1.2333, 2.4666, "")
else
local img, img_player

View File

@ -65,7 +65,7 @@ local function set_inventory(player, armor_change_only)
-- Show armor and player image
local player_preview
if minetest.settings:get_bool("3d_player_preview", true) then
if minetest.settings:get_bool("3d_player_preview") then
player_preview = mcl_player.get_player_formspec_model(player, 1.0, 0.0, 2.25, 4.5, "")
else
local img, img_player

View File

@ -7,7 +7,7 @@ Building Blocks=Blocs de Construction
Decoration Blocks=Blocs de Décoration
Redstone=Redstone
Transportation=Transport
Brewing=
Brewing=Potion
Miscellaneous=Divers
Search Items=Rechercher des objets
Foodstuffs=Denrées alimentaires

View File

@ -13,8 +13,7 @@ Command Block=Bloc de Commande
Command blocks are mighty redstone components which are able to alter reality itself. In other words, they cause the server to execute server commands when they are supplied with redstone power.=Les blocs de commande sont des composants redstone puissants qui sont capables de modifier la réalité elle-même. En d'autres termes, ils obligent le serveur à exécuter des commandes serveur lorsqu'ils sont alimentés en redstone.
Everyone can activate a command block and look at its commands, but not everyone can edit and place them.=Tout le monde peut activer un bloc de commandes et consulter ses commandes, mais tout le monde ne peut pas les modifier et les placer.
To view the commands in a command block, use it. To activate the command block, just supply it with redstone power. This will execute the commands once. To execute the commands again, turn the redstone power off and on again.=Pour afficher les commandes dans un bloc de commandes, utilisez-le. Pour activer le bloc de commande, il suffit de l'alimenter en redstone. Cela exécutera les commandes une fois. Pour exécuter à nouveau les commandes, éteignez puis rallumez le Redstone.
To be able to place a command block and change the commands, you need to be in Creative Mode and must have the “maphack” privilege. A new command block does not have any commands and does nothing. Use the command block (in Creative Mode!) to edit its commands. Read the help entry “Advanced usage > Server Commands” to understand how commands work. Each line contains a single command. You enter them like you would in the console, but without the leading slash. The commands will be executed from top to bottom.=
# ^ OLD TRANSLATION: Pour pouvoir placer un bloc de commande et modifier les commandes, vous devez être en mode créatif et avoir le privilège "maphack". Un nouveau bloc de commandes n'a aucune commande et ne fait rien. Utilisez le bloc de commande (en mode créatif!) Pour modifier ses commandes. Lisez l'entrée d'aide "Rubriques avancées> Commandes du serveur" pour comprendre le fonctionnement des commandes. Chaque ligne contient une seule commande. Vous les entrez comme vous le feriez dans la console, mais sans la barre oblique principale. Les commandes seront exécutées de haut en bas.
To be able to place a command block and change the commands, you need to be in Creative Mode and must have the “maphack” privilege. A new command block does not have any commands and does nothing. Use the command block (in Creative Mode!) to edit its commands. Read the help entry “Advanced usage > Server Commands” to understand how commands work. Each line contains a single command. You enter them like you would in the console, but without the leading slash. The commands will be executed from top to bottom.=Pour pouvoir placer un bloc de commande et modifier les commandes, vous devez être en mode créatif et avoir le privilège "maphack". Un nouveau bloc de commande n'a aucune commande et ne fait rien. Utilisez le bloc de commande (en mode créatif!) Pour modifier ses commandes. Lisez l'entrée d'aide "Utilisation avancée> Commandes du serveur" pour comprendre le fonctionnement des commandes. Chaque ligne contient une seule commande. Vous les entrez comme vous le feriez dans la console, mais sans la barre oblique principale. Les commandes seront exécutées de haut en bas.
All commands will be executed on behalf of the player who placed the command block, as if the player typed in the commands. This player is said to be the “commander” of the block.=Toutes les commandes seront exécutées au nom du joueur qui a placé le bloc de commande, comme si le joueur avait tapé les commandes. Ce joueur est appelé le "commandant" du bloc.
Command blocks support placeholders, insert one of these placeholders and they will be replaced by some other text:=Les blocs de commande prennent en charge les espaces réservés, insérez l'un de ces espaces réservés et ils seront remplacés par un autre texte:
• “@@c”: commander of this command block=• “@@c”: commandant de ce bloc que commande

View File

@ -1348,7 +1348,7 @@ local function select_and_spawn_entity(pos, node)
local node_name = node.name
local node_def = minetest.registered_nodes[node_name]
local double_chest = minetest.get_item_group(node_name, "double_chest") > 0
create_entity(pos, node_name, node_def._chest_entity_textures, node.param2, double_chest, node_def._chest_entity_sound, node_def._chest_entity_mesh, node_def._chest_entity_animation_type)
find_or_create_entity(pos, node_name, node_def._chest_entity_textures, node.param2, double_chest, node_def._chest_entity_sound, node_def._chest_entity_mesh, node_def._chest_entity_animation_type)
end
minetest.register_lbm({

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 B

After

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 B

After

Width:  |  Height:  |  Size: 393 B

View File

@ -349,7 +349,7 @@ minetest.register_lbm({
nodenames = {"mcl_enchanting:table"},
run_at_every_load = true,
action = function(pos)
spawn_book_entity(pos)
spawn_book_entity(pos, true)
end,
})

View File

@ -0,0 +1,100 @@
# textdomain: mcl_enchanting
Aqua Affinity=Affinité aquatique
Increases underwater mining speed.=Augmente la vitesse de minage sous-marine.
Bane of Arthropods=Fléau des arthropodes
Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Augmente les dégâts et applique la lenteur IV aux mobs arthropodes (araignées, araignées des cavernes, lépismes argentés et endermites).
Blast Protection=Protection contre les explosions
Reduces explosion damage and knockback.=Réduit les dégâts d'explosion et de recul.
Channeling=Canalisation
Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Canalise un éclair vers une cible. Fonctionne uniquement pendant les orages et si la cible n'est pas obstruée par des blocs opaques.
Curse of Binding=Malédiction du lien éterne
Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=L'objet ne peut pas être retiré des emplacements d'armure sauf en cas de mort, de rupture ou en mode créatif.
Curse of Vanishing=Malédiction de disparition
Item destroyed on death.=Objet détruit à la mort.
Depth Strider=Agilité aquatique
Increases underwater movement speed.=Augmente la vitesse de déplacement sous l'eau.
Efficiency=Efficacité
Increases mining speed.=Augmente la vitesse de minage.
Feather Falling=Chute amortie
Reduces fall damage.=Reduit les dégats de chute.
Fire Aspect=Aura de feu
Sets target on fire.=Définit la cible en feu.
Fire Protection=Protection contre le feu
Reduces fire damage.=Reduit les dégats de feu.
Flame=Flamme
Arrows set target on fire.=Les flèches mettent le feu à la cible.
Fortune=Fortune
Increases certain block drops.=Multiplie les items droppés
Frost Walker=Semelles givrantes
Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Transforme l'eau sous le joueur en glace givrée et empêche les dommages causés par les blocs de magma.
Impaling=Empalement
Trident deals additional damage to ocean mobs.=Trident inflige des dégâts supplémentaires aux mobs océaniques.
Infinity=Infinité
Shooting consumes no regular arrows.=Le tir ne consomme pas de flèches standard.
Knockback=Recul
Increases knockback.=Augmente le recul.
Looting=Butin
Increases mob loot.=Augmente le butin des mobs.
Loyalty=Loyauté
Trident returns after being thrown. Higher levels reduce return time.=Trident revient après avoir été jeté. Des niveaux plus élevés réduisent le temps de retour.
Luck of the Sea=Chance de la mer
Increases rate of good loot (enchanting books, etc.)=Augmente le taux de bon butin (livres enchanteurs, etc.)
Lure=Appât
Decreases time until rod catches something.=Diminue le temps jusqu'à ce qu'un poisson ne morde à l'hameçon.
Mending=Raccommodage
Repair the item while gaining XP orbs.=Réparez l'objet tout en gagnant des points d'XP.
Multishot=Tir multiple
Shoot 3 arrows at the cost of one.=Tirez sur 3 flèches au prix d'une.
Piercing=Perforation
Arrows passes through multiple objects.=Les flèches traversent plusieurs objets.
Power=Puissance
Increases arrow damage.=Augmente les dégâts des flèches.
Projectile Protection=Protection contre les projectiles
Reduces projectile damage.=Réduit les dommages causés par les projectiles.
Protection=Protection
Reduces most types of damage by 4% for each level.=éduit la plupart des types de dégâts de 4% pour chaque niveau.
Punch=Frappe
Increases arrow knockback.=Augmente le recul de la flèche.
Quick Charge=Charge rapide
Decreases crossbow charging time.=Diminue le temps de chargement de l'arbalète.
Respiration=Apnée
Extends underwater breathing time.=Prolonge le temps de respiration sous l'eau.
Riptide=Impulsion
Trident launches player with itself when thrown. Works only in water or rain.=Trident lance le joueur avec lui-même lorsqu'il est lancé. Fonctionne uniquement sous l'eau ou sous la pluie.
Sharpness=Tranchant
Increases damage.=Augmente les dégâts.
Silk Touch=Toucher de soie
Mined blocks drop themselves.=Les blocs minés tombent d'eux-mêmes.
Smite=Châtiment
Increases damage to undead mobs.=Augmente les dégâts infligés aux monstres morts-vivants.
Soul Speed=Agilité des âmes
Increases walking speed on soul sand.=Augmente la vitesse de marche sur le sable de l'âme.
Sweeping Edge=Affilage
Increases sweeping attack damage.=Augmente les dégâts de l'épée
Thorns=Épines
Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=Reflète une partie des dégâts subis lors de la frappe, au prix d'une réduction de la durabilité à chaque déclenchement.
Unbreaking=Solidité
Increases item durability.=Augmente la durabilité des objets.
Inventory=Inventaire
@1 × Lapis Lazuli=@1 × Lapis Lazuli
Enchantment levels: @1=Niveaux d'enchantement: @1
Level requirement: @1=Niveau requis: @1
Enchant an item=Enchanter un objet
<player> <enchantment> [<level>]=<joueur> <enchantement> [<niveau>]
Usage: /enchant <player> <enchantment> [<level>]=Usage: /enchant <joueur> <enchantement> [<niveau>]
Player '@1' cannot be found.=Le joueur '@1' est introuvable.
There is no such enchantment '@1'.=Il n'y a pas un tel enchantement '@1'.
The target doesn't hold an item.=La cible ne contient aucun élément.
The selected enchantment can't be added to the target item.=L'enchantement sélectionné ne peut pas être ajouté à la cible.
'@1' is not a valid number='@1' n'est pas un nombre valide
The number you have entered (@1) is too big, it must be at most @2.=Le nombre que vous avez entré (@1) est trop grand, il doit être au plus de @2.
The number you have entered (@1) is too small, it must be at least @2.=Le nombre que vous avez entré (@1) est trop petit, il doit être au moins de @2.
@1 can't be combined with @2.=@1 ne peut pas être combiné avec @2.
Enchanting succeded.=L'enchantement a réussi.
Forcefully enchant an item=Enchantement forcé d'un objet
Usage: /forceenchant <player> <enchantment> [<level>]=Usage: /forceenchant <joueur> <enchantrment> [<niveau>]
The target item is not enchantable.=L'objet cible n'est pas enchantable.
'@1' is not a valid number.='@1' n'est pas un nombre valide.
Enchanted Book=Livre enchanté
Enchanting Table=Table d'enchantement
Enchant=Enchantement

View File

@ -115,7 +115,7 @@ minetest.register_tool("mcl_farming:hoe_stone", {
damage_groups = { fleshy = 1, },
punch_attack_uses = uses.stone,
},
_repair_material = "mcl_core:cobblestone",
_repair_material = "mcl_core:cobble",
})
minetest.register_craft({

View File

@ -17,11 +17,9 @@ Fern=Fougère
Ferns are small plants which occur naturally in jungles and taigas. They can be harvested for wheat seeds. By using bone meal, a fern can be turned into a large fern which is two blocks high.=Les fougères sont de petites plantes qui se produisent naturellement dans les jungles et les taigas. Ils peuvent être récoltés pour les graines de blé. En utilisant de la farine d'os, une fougère peut être transformée en une grande fougère haute de deux blocs.
(Top Part)=(Partie supérieure)
Peony=Pivoine
A peony is a large plant which occupies two blocks. It is mainly used in dye production.=
# ^^^ OLD TRANSLATION FOR ABOVE: Une pivoine est une grande plante qui occupe deux blocs. Il est principalement utilisé dans la protection des colorants.
A peony is a large plant which occupies two blocks. It is mainly used in dye production.=Une pivoine est une grande plante qui occupe deux blocs. Principalement utilisé dans la production de colorants.
Rose Bush=Rosier
A rose bush is a large plant which occupies two blocks. It is safe to touch it. Rose bushes are mainly used in dye production.=
# ^^^ OLD TRANSLATION FOR ABOVE: Un rosier est une grande plante qui occupe deux blocs. Il n'y a pas de danger à le toucher. Les rosiers sont principalement utilisés dans la protection des colorants.
A rose bush is a large plant which occupies two blocks. It is safe to touch it. Rose bushes are mainly used in dye production.=Un rosier est une grande plante qui occupe deux blocs. Il n'y a rien a craindre à le toucher. Les rosiers sont principalement utilisés dans la production de teinture.
Lilac=Lilas
A lilac is a large plant which occupies two blocks. It is mainly used in dye production.=Un lilas est une grande plante qui occupe deux blocs. Il est principalement utilisé dans la production de colorants.
Sunflower=Tournesol

View File

@ -40,7 +40,7 @@ Removes all status effects=Supprime tous les effets de statut!
Milk is very refreshing and can be obtained by using a bucket on a cow. Drinking it will remove all status effects, but restores no hunger points.=Le lait est très rafraîchissant et peut être obtenu en utilisant un seau sur une vache. Le boire supprimera tous les effets de statut, mais ne restaure aucun point de faim.
Use the placement key to drink the milk.=
Use the placement key to drink the milk.=Utilisez la clé de placement pour boire le lait.
Spider Eye=Oeil d'Araignée
Poisonous=Toxique
@ -78,7 +78,7 @@ Saddle=Selle
Can be placed on animals to ride them=Peut être placé sur les animaux pour les monter
Saddles can be put on some animals in order to mount them.=Des selles peuvent être posées sur certains animaux afin de les monter.
Use the placement key with the saddle in your hand to try to put on the saddle. Saddles fit on horses, mules, donkeys and pigs. Horses, mules and donkeys need to be tamed first, otherwise they'll reject the saddle. Saddled animals can be mounted by using the placement key on them again.=
Use the placement key with the saddle in your hand to try to put on the saddle. Saddles fit on horses, mules, donkeys and pigs. Horses, mules and donkeys need to be tamed first, otherwise they'll reject the saddle. Saddled animals can be mounted by using the placement key on them again.=Utilisez la clé de placement avec la selle à la main pour essayer de mettre la selle. Les selles conviennent aux chevaux, mulets, ânes et cochons. Les chevaux, les mulets et les ânes doivent d'abord être apprivoisés, sinon ils rejetteront la selle. Les animaux sellés peuvent être montés en utilisant à nouveau la clé de placement.
Rabbit Stew=Ragout de Lapin
Rabbit stew is a very nutricious food item.=Le ragoût de lapin est un aliment très nutritif.

View File

@ -8,11 +8,8 @@ NOTE: The End dimension is currently incomplete and might change in future versi
End Portal Frame with Eye of Ender=Cadre de portail de l'End avec Oeil d'Ender
Nether Portal=Portail du Nether
A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!=A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!
Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.=Tenez-vous un instant dans le portail pour activer la téléportation. Entrer pour la première fois sur un portail Nether créera également un nouveau portail dans l'autre dimension. Si un portail du Nether a été construit dans le Nether, il mènera à l'Overworld. Un portail du Nether est détruit si l'une des obsidiennes qui l'entourent est détruit, ou s'il a été pris dans une explosion.
Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.=Tenez-vous un instant dans le portail pour activer la téléportation. Entrer pour la première fois sur un portail Nether créera également un nouveau portail dans l'Overworld. Si un portail du Nether a été construit dans le Nether, il mènera à l'Overworld. Un portail du Nether est détruit si l'une des obsidiennes qui l'entourent est détruit, ou s'il a été pris dans une explosion.
Obsidian is also used as the frame of Nether portals.=Obsidian is also used as the frame of Nether portals.
To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=
To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=Pour ouvrir un portail du Nether, placez un cadre vertical d'obsidienne d'une largeur d'au moins 4 blocs et d'une hauteur de 5 blocs, ne laissant que de l'air au centre. Après avoir placé ce cadre, allumez un feu dans le cadre d'obsidienne. Les portails du Nether ne fonctionnent que dans l'Overworld et le Nether.
Once placed, an eye of ender can not be taken back.=Une fois placé, un œil d'ender ne peut pas être repris.
Used to construct end portals=Utilisé pour construire des portails d'End
# OUTDATED:
#To open a Nether portal, place an upright frame of obsidian with a width of 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=Pour ouvrir un portail du Nether, placez un cadre vertical d'obsidienne d'une largeur de 4 blocs et d'une hauteur de 5 blocs, ne laissant que de l'air au centre. Après avoir placé ce cadre, allumez un feu dans le cadre en obsidienne. Les portails du Nether ne fonctionnent que dans l'Overworld et le Nether.
Used to construct end portals=Utilisé pour construire des portails d'End

View File

@ -1,12 +1,12 @@
# textdomain: mcl_potions
<effect> <duration> [<factor>]=
<effect> <duration> [<factor>]=<effet> <durée> [<facteurr>]
Add a status effect to yourself. Arguments: <effect>: name of status effect, e.g. poison. <duration>: duration in seconds. <factor>: effect strength multiplier (1 @= 100%)=
Add a status effect to yourself. Arguments: <effect>: name of status effect, e.g. poison. <duration>: duration in seconds. <factor>: effect strength multiplier (1 @= 100%)=Ajoutez-vous un effet de statut. Arguments: <effet>: nom de l'effet de statut, par ex. poison. <duration>: durée en secondes. <facteur>: multiplicateur de force d'effet (1 @ = 100%)
Missing effect parameter!=
Missing or invalid duration parameter!=
Invalid factor parameter!=
@1 is not an available status effect.=
Missing effect parameter!=Paramètre d'effet manquant!
Missing or invalid duration parameter!=Paramètre durée manquant ou invalide!
Invalid factor parameter!=Paramètre facteur invalide!
@1 is not an available status effect.=@1 n'est pas un effet disponible.
Fermented Spider Eye=Oeil d'araignée fermenté
Glass Bottle=Bouteille en verre
Liquid container=Récipient de liquide
@ -25,91 +25,91 @@ River water bottles can be used to fill cauldrons. Drinking it has no effect.=Le
Use the “Place” key to drink. Place this item on a cauldron to pour the river water into the cauldron.=Utilisez la touche "Utiliser" pour boire. Placez cet objet sur un chaudron pour verser l'eau de la rivière dans le chaudron.
Splash Water Bottle=
Extinguishes fire and hurts some mobs=
Splash Water Bottle=Bouteille d'eau jetable
Extinguishes fire and hurts some mobs=Éteint le feu et blesse certains mobs
A throwable water bottle that will shatter on impact, where it extinguishes nearby fire and hurts mobs that are vulnerable to water.=
A throwable water bottle that will shatter on impact, where it extinguishes nearby fire and hurts mobs that are vulnerable to water.=Une bouteille d'eau jetable qui se brisera à l'impact, où elle éteint le feu à proximité et blesse les mobs vulnérables à l'eau.
Lingering Water Bottle=
Lingering Water Bottle=Bouteille d'eau persistante
A throwable water bottle that will shatter on impact, where it creates a cloud of water vapor that lingers on the ground for a while. This cloud extinguishes fire and hurts mobs that are vulnerable to water.=
A throwable water bottle that will shatter on impact, where it creates a cloud of water vapor that lingers on the ground for a while. This cloud extinguishes fire and hurts mobs that are vulnerable to water.=Une bouteille d'eau jetable qui se brisera à l'impact, où elle crée un nuage de vapeur d'eau qui s'attarde au sol pendant un moment. Ce nuage éteint le feu et blesse les mobs vulnérables à l'eau.
Glistering Melon=Melon étincelant
This shiny melon is full of tiny gold nuggets and would be nice in an item frame. It isn't edible and not useful for anything else.=Ce melon brillant est plein de minuscules pépites d'or et serait bien dans un cadre d'objet. Il n'est pas comestible et n'est utile à rien d'autre.
A throwable potion that will shatter on impact, where it creates a magic cloud that lingers around for a while. Any player or mob inside the cloud will receive the potion's effect, possibly repeatedly.=
A throwable potion that will shatter on impact, where it creates a magic cloud that lingers around for a while. Any player or mob inside the cloud will receive the potion's effect, possibly repeatedly.=Une potion jetable qui se brisera à l'impact, où elle crée un nuage magique qui persiste pendant un moment. Tout joueur ou mob à l'intérieur du nuage recevra l'effet de la potion, peut-être à plusieurs reprises.
Use the “Punch” key to throw it.=
Use the “Punch” key to throw it.=Utilisez la touche "Frapper" pour le lancer.
Use the “Place” key to drink it.=Utilisez la touche "Utiliser" pour le boire.
Drinking a potion gives you a particular effect.=
1 HP/@1s | @2=
@1 HP=
@1 Potion=
Splash @1 Potion=
Lingering @1 Potion=
Arrow of @1=
II=
IV=
@1 Potion@2=
Splash @1@2 Potion=
Lingering @1@2 Potion=
Arrow of @1@2=
@1 + Potion=
Splash @1 + Potion=
Lingering @1 + Potion=
Arrow of @1 +=
Awkward Potion=Potion maladroite
Awkward Splash Potion=
Awkward Lingering Potion=
Has an awkward taste and is used for brewing potions.=
Mundane Potion=Potion mondaine
Mundane Splash Potion=
Mundane Lingering Potion=
Has a terrible taste and is not useful for brewing potions.=
Drinking a potion gives you a particular effect.=Boire une potion vous donne un effet particulier.
1 HP/@1s | @2=1 HP/@1s | @2
@1 HP=@1 HP
@1 Potion=Potion @1
Splash @1 Potion=Potion @1 jettable
Lingering @1 Potion=Potion @1 persistante
Arrow of @1=Flêche de @1
II= II
IV= IV
@1 Potion@2=@1 Potion@2
Splash @1@2 Potion=Potion @1@2 jettable
Lingering @1@2 Potion=Potion @1@2 persistante
Arrow of @1@2=Flêche de @1@2
@1 + Potion=@1 + Potion
Splash @1 + Potion=Potion @1 + jettable
Lingering @1 + Potion=Potion @1 + persistante
Arrow of @1 +=Flêche de @1 +
Awkward Potion=Potion étrange
Awkward Splash Potion=Potion étrange jetable
Awkward Lingering Potion=Potion étrange persistante
Has an awkward taste and is used for brewing potions.=A un goût étrange et est utilisé pour préparer des potions.
Mundane Potion=Potion banale
Mundane Splash Potion=Potion banale jetable
Mundane Lingering Potion=Potion banale persistante
Has a terrible taste and is not useful for brewing potions.=A un goût terrible et n'est pas utile pour préparer des potions.
Thick Potion=Potion épaisse
Thick Splash Potion=
Thick Lingering Potion=
Has a bitter taste and is not useful for brewing potions.=
Dragon's Breath=Le souffle du dragon
Thick Splash Potion=Potion épaisse jetable
Thick Lingering Potion=Potion épaisse persistante
Has a bitter taste and is not useful for brewing potions.=A un goût amer et n'est pas utile pour préparer des potions.
Dragon's Breath=Souffle du dragon
This item is used in brewing and can be combined with splash potions to create lingering potions.=
This item is used in brewing and can be combined with splash potions to create lingering potions.=Cet objet est utilisé dans le brassage et peut être combiné avec des potions d'éclaboussures pour créer des potions persistantes.
Healing=
+4 HP=
+8 HP=
Instantly heals.=
Harming=
-6 HP=
-12 HP=
Instantly deals damage.=
Night Vision=
Increases the perceived brightness of light under a dark sky.=
Swiftness=
Increases walking speed.=
Slowness=
Decreases walking speed.=
Leaping=
Increases jump strength.=
Poison=
Applies the poison effect which deals damage at a regular interval.=
Regeneration=
Regenerates health over time.=
Invisibility=
Grants invisibility.=
Water Breathing=
Grants limitless breath underwater.=
Fire Resistance=
Grants immunity to damage from heat sources like fire.=
Weakness=
Weakness +=
Strength=
Strength II=
Strength +=
Try different combinations to create potions.=
Healing=Guérison
+4 HP=+4 HP
+8 HP=+8 HP
Instantly heals.=Guérit instantanément.
Harming=Dégâts
-6 HP=-6 HP
-12 HP=-12 HP
Instantly deals damage.=Instantly deals damage.
Night Vision=Vision Nocturne
Increases the perceived brightness of light under a dark sky.=Augmente la luminosité perçue de la lumière sous un ciel sombre.
Swiftness=Rapidité
Increases walking speed.=Augmente la vitesse de marche.
Slowness=Lenteur
Decreases walking speed.=Diminue la vitesse de marche.
Leaping=Saut
Increases jump strength.=Augmente la force de saut.
Poison=Poison
Applies the poison effect which deals damage at a regular interval.=Applique l'effet de poison qui inflige des dégâts à intervalle régulier.
Regeneration=Régénération
Regenerates health over time.=Régénère la santé au fil du temps.
Invisibility=Invisibilité
Grants invisibility.=Accorde l'invisibilité.
Water Breathing=Respiration Aquatique
Grants limitless breath underwater.=Donne une respiration illimitée sous l'eau.
Fire Resistance=Résistance au Feu
Grants immunity to damage from heat sources like fire.=Confère une immunité aux dommages causés par des sources de chaleur comme le feu.
Weakness=Faiblesse
Weakness +=Faiblesse +
Strength=Force
Strength II=Force II
Strength +=Force +
Try different combinations to create potions.=Essayez différentes combinaisons pour créer des potions.
No effect=Aucun effet
A throwable potion that will shatter on impact, where it gives all nearby players and mobs a status effect.=
A throwable potion that will shatter on impact, where it gives all nearby players and mobs a status effect.=Une potion jetable qui se brisera à l'impact, où elle donne à tous les joueurs et créatures proches un effet de statut.
This particular arrow is tipped and will give an effect when it hits a player or mob.=
This particular arrow is tipped and will give an effect when it hits a player or mob.=Cette flèche particulière est enchantée et donnera un effet lorsqu'elle touche un joueur ou un mob.

View File

@ -4,7 +4,7 @@
-------------------------------------------------------------------------------
function settlements.build_schematic(vm, data, va, pos, building, replace_wall, name)
-- get building node material for better integration to surrounding
local platform_material = minetest.get_node_or_nil(pos)
local platform_material = mcl_util.get_far_node(pos, true)
if not platform_material then
return
end

View File

@ -1,3 +1,4 @@
mcl_util
mcl_core
mcl_loot
mcl_farming?

View File

@ -52,8 +52,7 @@ function settlements.terraform(settlement_info, pr)
else
-- write ground
local p = {x=pos.x+xi, y=pos.y+yi, z=pos.z+zi}
minetest.forceload_block(p)
local node = minetest.get_node_or_nil(p)
local node = mcl_util.get_far_node(p, true)
if node and node.name ~= "air" then
minetest.swap_node(p,{name="air"})
end

View File

@ -94,11 +94,8 @@ if mg_name ~= "singlenode" then
-- don't build settlements on (too) uneven terrain
local height_difference = settlements.evaluate_heightmap(minp, maxp)
if height_difference > max_height_difference then return end
-- new way - slow :(((((
minetest.emerge_area(vector.subtract(minp,24), vector.add(maxp,24), ecb_build_a_settlement, {minp = vector.new(minp), maxp=vector.new(maxp), blockseed=blockseed})
-- old way - wait 3 seconds:
-- minetest.after(3, ecb_build_a_settlement, nil, 1, 0, {minp = vector.new(minp), maxp=vector.new(maxp), blockseed=blockseed})
-- we need 'minetest.after' here to exit from emerging thread we probably currently in:
minetest.after(0.1, build_a_settlement_no_delay, vector.new(minp), vector.new(maxp), blockseed)
end)
end
-- manually place villages

View File

@ -51,7 +51,7 @@ function settlements.find_surface(pos)
local itter -- count up or down
local cnt_max = 200
-- check, in which direction to look for surface
local surface_node = minetest.get_node_or_nil(p6)
local surface_node = mcl_util.get_far_node(p6, true)
if surface_node and string.find(surface_node.name,"air") then
itter = -1
else
@ -60,32 +60,16 @@ function settlements.find_surface(pos)
-- go through nodes an find surface
while cnt < cnt_max do
cnt = cnt+1
minetest.forceload_block(p6)
surface_node = minetest.get_node_or_nil(p6)
if not surface_node then
-- Load the map at pos and try again
minetest.get_voxel_manip():read_from_map(p6, p6)
surface_node = minetest.get_node(p6)
if surface_node.name == "ignore" then
settlements.debug("find_surface1: nil or ignore")
return nil
end
surface_node = mcl_util.get_far_node(p6, true)
if surface_node.name == "ignore" then
settlements.debug("find_surface1: nil or ignore")
return nil
end
-- if surface_node == nil or surface_node.name == "ignore" then
-- --return nil
-- local fl = minetest.forceload_block(p6)
-- if not fl then
--
-- return nil
-- end
-- end
--
-- Check Surface_node and Node above
--
if settlements.surface_mat[surface_node.name] then
local surface_node_plus_1 = minetest.get_node_or_nil({ x=p6.x, y=p6.y+1, z=p6.z})
local surface_node_plus_1 = mcl_util.get_far_node({ x=p6.x, y=p6.y+1, z=p6.z}, true)
if surface_node_plus_1 and surface_node and
(string.find(surface_node_plus_1.name,"air") or
string.find(surface_node_plus_1.name,"snow") or
@ -257,7 +241,7 @@ function settlements.initialize_nodes(settlement_info, pr)
for xi = 0,width do
for zi = 0,depth do
local ptemp = {x=p.x+xi, y=p.y+yi, z=p.z+zi}
local node = minetest.get_node(ptemp)
local node = mcl_util.get_far_node(ptemp, true)
if node.name == "mcl_furnaces:furnace" or
node.name == "mcl_chests:chest" or
node.name == "mcl_anvils:anvil" then

View File

@ -13,14 +13,14 @@ end
--generate a node for every skin
for _,texture in pairs(list) do
-- This is a fake node that should never be placed in the world
minetest.register_node("mcl_meshhand:"..texture.."shield", {
minetest.register_node("mcl_meshhand:"..texture, {
description = "",
tiles = {texture..".png"},
visual_scale = 1,
wield_scale = {x=1,y=1,z=1},
paramtype = "light",
drawtype = "mesh",
mesh = "mcl_meshhand_shield.b3d",
mesh = "mcl_meshhand.b3d",
-- Prevent construction
node_placement_prediction = "",
on_construct = function(pos)
@ -34,29 +34,6 @@ for _,texture in pairs(list) do
groups = { dig_immediate = 3, not_in_creative_inventory = 1 },
range = def.range,
})
minetest.register_node("mcl_meshhand:"..texture, {
description = "",
tiles = {texture..".png"},
visual_scale = 1,
wield_scale = {x=1,y=1,z=1},
paramtype = "light",
drawtype = "mesh",
mesh = "mcl_meshhand.b3d",
-- Prevent construction
node_placement_prediction = "",
on_construct = function(pos)
minetest.log("error", "[mcl_meshhand] Trying to construct mcl_meshhand:"..texture.." at "..minetest.pos_to_string(pos))
minetest.remove_node(pos)
end,
drop = "",
on_drop = function()
return ""
end,
groups = { dig_immediate = 3, not_in_creative_inventory = 1 },
range = def.range,
})
end
if has_mcl_skins == true then

View File

@ -155,7 +155,9 @@ minetest.register_globalstep(function(dtime)
end
-- ask if player is swiming
local standing_on_water = minetest.get_item_group(mcl_playerinfo[name].node_stand, "water") ~= 0
standing_on_water = minetest.get_item_group(mcl_playerinfo[name].node_stand, "water") ~= 0
-- Apply animations based on what the player is doing
if player:get_hp() == 0 then

View File

@ -95,7 +95,7 @@ fire_animation_frames (Fire Animation Frames) int 8
animated_chests (Animated chests) bool true
# Whether to preview the player in inventory in 3D (requires Minetest 5.4)
3d_player_preview (3D Player preview) bool true
3d_player_preview (3D Player preview) bool false
[Experimental]
# Whether ice is translucent. If disabled, ice is fully opaque.

View File

@ -1,8 +1,9 @@
# Output indicator
# !< Indicates a text line without '=' in template.txt
# << Indicates an untranslated line in template.txt
# << Indicates an untranslated line in template.txt or an extra line in translate file (.tr)
# !> Indicates a text line without '=' in translate file (.tr)
# >> Indicates an unknown translated line in translate file (.tr)
# >= Indicate an untrannslated entry in translate file (.tr)
# >> Missing file: Indicates a missing translate file (.tr)
import os
@ -15,7 +16,7 @@ args = parser.parse_args()
path = "../mods/"
code_lang = args.language
def LoadTranslateFile(filename, direction):
def LoadTranslateFile(filename, direction, ref=None):
result = set()
file = open(filename, 'r', encoding="utf-8")
for line in file:
@ -23,15 +24,18 @@ def LoadTranslateFile(filename, direction):
if line.startswith('#') or line == '':
continue
if '=' in line:
result.add(line.split('=')[0])
parts = line.split('=')
result.add(parts[0])
if ref is not None and parts[1] == '' and parts[1] not in ref :
print ('>= ' + parts[0])
else:
print (direction + line)
return result
def CompareFiles(f1, f2):
r1 = LoadTranslateFile(f1, "!> ")
r2 = LoadTranslateFile(f2, "!< ")
r1 = LoadTranslateFile(f1, "!< ")
r2 = LoadTranslateFile(f2, "!> ", r1)
for key in r1.difference(r2):
print (">> " + key )
@ -57,5 +61,5 @@ for root, directories, files in os.walk(path):
print("Compare files %s with %s" % (template, language))
CompareFiles(template, language)
else:
LoadTranslateFile(filename, "!> ")
LoadTranslateFile(template, "!< ")
print(">> Missing file = " + language)