This commit is contained in:
Elias Fleckenstein 2020-12-21 17:58:39 +01:00
commit ef9a54872e
17 changed files with 265 additions and 53 deletions

View file

@ -67,7 +67,7 @@ local disable_blood = minetest.settings:get_bool("mobs_disable_blood")
local mobs_drop_items = minetest.settings:get_bool("mobs_drop_items") ~= false
local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false
local spawn_protected = minetest.settings:get_bool("mobs_spawn_protected") ~= false
local remove_far = false
local remove_far = true
local difficulty = tonumber(minetest.settings:get("mob_difficulty")) or 1.0
local show_health = false
local max_per_block = tonumber(minetest.settings:get("max_objects_per_block") or 64)
@ -2964,8 +2964,8 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
local die = false
-- only play hit sound and show blood effects if damage is 1 or over
if damage >= 1 then
-- only play hit sound and show blood effects if damage is 1 or over; lower to 0.1 to ensure armor works appropriately.
if damage >= 0.1 then
-- weapon sounds
if weapon:get_definition().sounds ~= nil then
@ -2986,7 +2986,7 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
damage_effect(self, damage)
-- do damage
self.health = self.health - floor(damage)
self.health = self.health - damage
-- skip future functions if dead, except alerting others
if check_for_death(self, "hit", {type = "punch", puncher = hitter}) then
@ -3113,6 +3113,7 @@ end
-- get entity staticdata
local mob_staticdata = function(self)
--[[
-- remove mob when out of range unless tamed
if remove_far
and self.can_despawn
@ -3125,7 +3126,7 @@ local mob_staticdata = function(self)
return ""-- nil
end
--]]
self.remove_ok = true
self.attack = nil
self.following = nil
@ -3334,37 +3335,6 @@ local mob_step = function(self, dtime)
update_tag(self)
end
-- Despawning: when lifetimer expires, remove mob
if remove_far
and self.can_despawn == true
and ((not self.nametag) or (self.nametag == "")) then
-- TODO: Finish up implementation of despawning rules
self.lifetimer = self.lifetimer - dtime
if self.lifetimer <= 0 then
-- only despawn away from player
local objs = minetest.get_objects_inside_radius(pos, 32)
for n = 1, #objs do
if objs[n]:is_player() then
self.lifetimer = 20
return
end
end
minetest.log("action", "Mob "..name.." despawns in mob_step at "..minetest.pos_to_string(pos))
self.object:remove()
return
end
end
if self.state == "die" then
return
end
@ -3548,6 +3518,40 @@ local mob_step = function(self, dtime)
set_animation(self, "stand")
end
-- Despawning: when lifetimer expires, remove mob
if remove_far
and self.can_despawn == true
and ((not self.nametag) or (self.nametag == "")) then
self.lifetimer = self.lifetimer - dtime
if self.lifetimer <= 10 then
-- only despawn away from player
local far_objs = minetest.get_objects_inside_radius(pos, 48)
for n = 1, #far_objs do
if far_objs[n]:is_player() then
local close_objs = minetest.get_objects_inside_radius(pos, 16)
for n = 1, #close_objs do
if close_objs[n]:is_player() then
self.lifetimer = 20
else
if math.random(1,10) <= 3 then
minetest.log("action", "Mob "..self.name.." despawns in mob_step at "..minetest.pos_to_string(pos))
self.object:remove()
return
end
end
end
else
minetest.log("action", "Mob "..self.name.." despawns in mob_step at "..minetest.pos_to_string(pos))
self.object:remove()
return
end
end
end
end
end

View file

@ -185,7 +185,7 @@ local magma_cube_big = {
run_velocity = 4,
damage = 6,
reach = 3,
armor = 40,
armor = 53,
drops = {
{name = mobs_mc.items.magma_cream,
chance = 4,
@ -240,7 +240,7 @@ magma_cube_small.run_velocity = 2.6
magma_cube_small.jump_height = 6
magma_cube_small.damage = 4
magma_cube_small.reach = 2.75
magma_cube_small.armor = 70
magma_cube_small.armor = 66
magma_cube_small.spawn_small_alternative = "mobs_mc:magma_cube_tiny"
magma_cube_small.on_die = spawn_children_on_die("mobs_mc:magma_cube_tiny", 4, 0.6, 1.0)
mobs:register_mob("mobs_mc:magma_cube_small", magma_cube_small)
@ -260,7 +260,7 @@ magma_cube_tiny.run_velocity = 1.02
magma_cube_tiny.jump_height = 4
magma_cube_tiny.damage = 3
magma_cube_tiny.reach = 2.5
magma_cube_tiny.armor = 85
magma_cube_tiny.armor = 50
magma_cube_tiny.drops = {}
magma_cube_tiny.spawn_small_alternative = nil
magma_cube_tiny.on_die = nil

View file

@ -0,0 +1,7 @@
# textdomain: mcl_experience
[[<player>] <xp>]=[[<Spieler>] <EP>]
Gives a player some XP=Gibt einen Spieler ein paar EP
Error: Too many parameters!=Fehler: Zu viele Parameter!
Error: Incorrect value of XP=Fehler: Ungültiger EP-Wert
Error: Player not found=Fehler: Spieler nicht gefunden
Added @1 XP to @2, total: @3, experience level: @4=@1 EP an @2 gegeben, gesamt: @3, Erfahrungsstufe: @4

View file

@ -1,3 +1,4 @@
# textdomain: mcl_experience
[[<player>] <xp>]=[[<игрок>] <xp>]
Gives a player some XP=Даёт игроку XP
Error: Too many parameters!=Ошибка: слишком много параметров!

View file

@ -1,3 +1,4 @@
# textdomain: mcl_experience
[[<player>] <xp>]=[[<joueur>] <xp>]
Gives a player some XP=Donne de l'XP à un joueur
Error: Too many parameters!=Erreur: Trop de paramètres!

View file

@ -1,7 +1,7 @@
# textdomain: mcl_experience
[[<player>] <xp>]=
Gives a player some XP=
Error: Too many parameters!=
Error: Incorrect value of XP=
Error: Player not found=
Added @1 XP to @2, total: @3, experience level: @4=
XP are disabled!=

View file

@ -2,4 +2,3 @@ mcl_core
mcl_worlds
mesecons
doc?
mcl_enchanting

View file

@ -57,9 +57,6 @@ minetest.register_globalstep(function(dtime)
if minetest.get_item_group(stack:get_name(), "compass") ~= 0 and
minetest.get_item_group(stack:get_name(), "compass")-1 ~= compass_image then
local itemname = "mcl_compass:"..compass_image
if mcl_enchanting.is_enchanted(stack:get_name()) then
itemname = itemname .. "_enchanted"
end
stack:set_name(itemname)
player:get_inventory():set_stack("main", j, stack)
end
@ -98,7 +95,7 @@ for i,img in ipairs(images) do
inventory_image = img,
wield_image = img,
stack_max = 64,
groups = {not_in_creative_inventory=inv, compass=i, tool=1, disable_repair=1, enchantability=1 }
groups = {not_in_creative_inventory=inv, compass=i, tool=1, disable_repair=1 }
})
-- Help aliases. Makes sure the lookup tool works correctly

View file

@ -0,0 +1,100 @@
# textdomain: mcl_enchanting
Aqua Affinity=Aquaaffinität
Increases underwater mining speed.=Erhöht Unterwassergrabegeschwindigkeit.
Bane of Arthropods=Schrecken der Gliederfüßler
Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Erhöht Schaden und gibt Langsamkeit IV an Gliederfüßlern (Spinnen, Höhlenspinenn, Silberfischchen und Endermilben).
Blast Protection=Explosionsschutz
Reduces explosion damage and knockback.=Reduziert Explosionsschaden und -rückschlag.
Channeling=Kanalisierung
Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Kanalisiert einen Blitz zu einem Ziel. Funktioniert nur während Gewitterstürmen und solange kein undurchsichtiger Block im Weg ist.
Curse of Binding=Fluch der Bindung
Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=Gegenstand kann nicht von den Rüstungsplätzen entfernt werden, außer beim Tod, Zerbrechen oder im Kreativmodus.
Curse of Vanishing=Fluch des Verschwindens
Item destroyed on death.=Gegenstand wird bei Tod zerstört.
Depth Strider=Tiefenstreicher
Increases underwater movement speed.=Erhöht Bewegungsgeschwindigkeit im Wasser.
Efficiency=Effizienz
Increases mining speed.=Erhöht Grabegeschwindigkeit.
Feather Falling=Federfall
Reduces fall damage.=Reduziert Fallschaden.
Fire Aspect=Feieraspekt
Sets target on fire.=Zündes das Ziel an.
Fire Protection=Feuerschutz
Reduces fire damage.=Reduziert Feuerschaden
Flame=Flamme
Arrows set target on fire.=Pfeile zünden Ziel an.
Fortune=Glück
Increases certain block drops.=Erhöht bestimmte Blockabwürfe.
Frost Walker=Frostläufer
Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Verwandelt Wasser unter dem Spieler zu brüchigem Eis und verhindert Schaden von Magmablöcken.
Impaling=Aufspießen
Trident deals additional damage to ocean mobs.=Dreizack richtet Zusatzschaden an Ozeanmobs an.
Infinity=Unendlichkeit
Shooting consumes no regular arrows.=Schüsse verbrauchen keine regulären Pfeile.
Knockback=Rückschlag.
Increases knockback.=Verstärkt Rückschlag.
Looting=Plünderer
Increases mob loot.=Erhöht Abwürfe von Mobs.
Loyalty=Loyalität
Trident returns after being thrown. Higher levels reduce return time.=Dreizack kehrt nach Wurf zurück. Höhere Stufen reduzieren die Rückkehrzeit.
Luck of the Sea=Glück des Meeres
Increases rate of good loot (enchanting books, etc.)=Erhöht die Rate von guten Abwürfen (verzauberte Bücher, usw.)
Lure=Köder
Decreases time until rod catches something.=Reduziert die Zeit, bis die Angel etwas fängt.
Mending=Ausbessern
Repair the item while gaining XP orbs.=Gegenstand reparieren, während man Erfahrungskugeln erhält.
Multishot=Mehrschuss
Shoot 3 arrows at the cost of one.=3 Pfeile zum Preis von 1 schießen.
Piercing=Durchbohren
Arrows passes through multiple objects.=Pfeile durchdringen mehrere Objekte.
Power=Stärke
Increases arrow damage.=Erhöht Pfeilschaden.
Projectile Protection=Projektilprojektion
Reduces projectile damage.=Reduziert Projektilschaden.
Protection=Schutz
Reduces most types of damage by 4% for each level.=Reduziert die meisten Schadensarten um 4% je Stufe.
Punch=Schlag
Increases arrow knockback.=Erhöht Pfeilrückschlag.
Quick Charge=Schnellladen
Decreases crossbow charging time.=Reduziert Armbrustladezeit.
Respiration=Atmung
Extends underwater breathing time.=Erhöht Unterwasseratemzeit.
Riptide=Strömung
Trident launches player with itself when thrown. Works only in water or rain.=Dreizack wirft den Spieler mit. Funktioniert nur im Wasser oder Regen.
Sharpness=Schärfe
Increases damage.=Erhöht Schaden.
Silk Touch=Sorgfalt
Mined blocks drop themselves.=Abgebaute Blöcke werfen sich selbst ab.
Smite=Qual
Increases damage to undead mobs.=Erhöht Schaden für untote Mobs.
Soul Speed=Schnelle Seele
Increases walking speed on soul sand.=Erhöht Gehgeschwindigkeit auf Seelensand.
Sweeping Edge=Schwungklinge
Increases sweeping attack damage.=Erhöht Schwungangriffsschaden.
Thorns=Dornen
Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=Reflektiert etwas des Schadens beim Erleiden eines Treffers, auf Kosten der Haltbarkeit.
Unbreaking=Haltbarkeit
Increases item durability.=Erhöht Haldbarkeit des Gegenstands.
Inventory=Inventar
@1 × Lapis Lazuli=@1 × Lapislazuli
Enchantment levels: @1=Verzauberungsstufen: @1
Level requirement: @1=Level benötigt: @1
Enchant an item=Gegenstand verzaubern
<player> <enchantment> [<level>]=<Spieler> <Verzauberung> [<Stufe>]
Usage: /enchant <player> <enchantment> [<level>]=Verwendung: /enchant <Spieler> <Verzauberung> [<Stufe>]
Player '@1' cannot be found.=Spieler „@1“ kann nicht gefunden werden.
There is no such enchantment '@1'.=Es gibt keine Verzauberung namens „@1“.
The target doesn't hold an item.=Das Ziel hält keinen Gegenstand.
The selected enchantment can't be added to the target item.=Die gewählte Verzauberug kann nicht dem Ziel gegeben werden.
'@1' is not a valid number='@1' ist keine gültige Zahl
The number you have entered (@1) is too big, it must be at most @2.=Die eingegebene Zahl (@1) ist zu groß, maximal @1 erlaubt.
The number you have entered (@1) is too small, it must be at least @2.=Die eingegebene Zahl (@1) ist zu klein, minimal @1 erlaubt.
@1 can't be combined with @2.=@1 kann nicht mit @2 kombiniert werden.
Enchanting succeded.=Verzauberug erfolgreich.
Forcefully enchant an item=Einen Gegenstand zwangsweise verzaubern
Usage: /forceenchant <player> <enchantment> [<level>]=Verwendung: /forceenchant <Spieler> <Verzauberung> [<Stufe>]
The target item is not enchantable.=Der Zielgegenstand ist nicht verzauberbar.
'@1' is not a valid number.='@1' ist keine gültige Zahl.
Enchanted Book=Verzaubertes Buch
Enchanting Table=Zaubertisch
Enchant=Verzaubern

View file

@ -0,0 +1,100 @@
# textdomain: mcl_enchanting
Aqua Affinity=
Increases underwater mining speed.=
Bane of Arthropods=
Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=
Blast Protection=
Reduces explosion damage and knockback.=
Channeling=
Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=
Curse of Binding=
Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=
Curse of Vanishing=
Item destroyed on death.=
Depth Strider=
Increases underwater movement speed.=
Efficiency=
Increases mining speed.=
Feather Falling=
Reduces fall damage.=
Fire Aspect=
Sets target on fire.=
Fire Protection=
Reduces fire damage.=
Flame=
Arrows set target on fire.=
Fortune=
Increases certain block drops.=
Frost Walker=
Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=
Impaling=
Trident deals additional damage to ocean mobs.=
Infinity=
Shooting consumes no regular arrows.=
Knockback=
Increases knockback.=
Looting=
Increases mob loot.=
Loyalty=
Trident returns after being thrown. Higher levels reduce return time.=
Luck of the Sea=
Increases rate of good loot (enchanting books, etc.)=
Lure=
Decreases time until rod catches something.=
Mending=
Repair the item while gaining XP orbs.=
Multishot=
Shoot 3 arrows at the cost of one.=
Piercing=
Arrows passes through multiple objects.=
Power=
Increases arrow damage.=
Projectile Protection=
Reduces projectile damage.=
Protection=
Reduces most types of damage by 4% for each level.=
Punch=
Increases arrow knockback.=
Quick Charge=
Decreases crossbow charging time.=
Respiration=
Extends underwater breathing time.=
Riptide=
Trident launches player with itself when thrown. Works only in water or rain.=
Sharpness=
Increases damage.=
Silk Touch=
Mined blocks drop themselves.=
Smite=
Increases damage to undead mobs.=
Soul Speed=
Increases walking speed on soul sand.=
Sweeping Edge=
Increases sweeping attack damage.=
Thorns=
Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=
Unbreaking=
Increases item durability.=
Inventory=
@1 × Lapis Lazuli=
Enchantment levels: @1=
Level requirement: @1=
Enchant an item=
<player> <enchantment> [<level>]=
Usage: /enchant <player> <enchantment> [<level>]=
Player '@1' cannot be found.=
There is no such enchantment '@1'.=
The target doesn't hold an item.=
The selected enchantment can't be added to the target item.=
'@1' is not a valid number=
The number you have entered (@1) is too big, it must be at most @2.=
The number you have entered (@1) is too small, it must be at least @2.=
@1 can't be combined with @2.=
Enchanting succeded.=
Forcefully enchant an item=
Usage: /forceenchant <player> <enchantment> [<level>]=
The target item is not enchantable.=
'@1' is not a valid number.=
Enchanted Book=
Enchanting Table=
Enchant=

View file

@ -112,7 +112,6 @@ pumpkin_face_base_def._doc_items_longdesc = S("A pumpkin can be worn as a helmet
pumpkin_face_base_def._doc_items_usagehelp = nil
pumpkin_face_base_def.tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_face.png"}
pumpkin_face_base_def.groups.armor_head=1
pumpkin_face_base_def.groups.enchantability=1
pumpkin_face_base_def._mcl_armor_mob_range_factor = 0
pumpkin_face_base_def._mcl_armor_mob_range_mob = "mobs_mc:enderman"
pumpkin_face_base_def.groups.non_combat_armor=1

View file

@ -9,7 +9,7 @@ minetest.register_tool("mcl_fire:flint_and_steel", {
inventory_image = "mcl_fire_flint_and_steel.png",
liquids_pointable = false,
stack_max = 1,
groups = { tool = 1, enchantability = 1 },
groups = { tool = 1, },
on_place = function(itemstack, user, pointed_thing)
-- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node(pointed_thing.under)

View file

@ -42,7 +42,7 @@ local function addhead(name, texture, desc, longdesc, rangemob, rangefactor)
{ -0.25, -0.5, -0.25, 0.25, 0.0, 0.25, },
},
},
groups = {handy=1, armor_head=1,non_combat_armor=1, head=1, deco_block=1, dig_by_piston=1, enchantability=1},
groups = {handy=1, armor_head=1,non_combat_armor=1, head=1, deco_block=1, dig_by_piston=1 },
-- The head textures are based off the textures of an actual mob.
tiles = {
-- Note: bottom texture is overlaid over top texture to get rid of possible transparency.

View file

@ -81,7 +81,7 @@ local function now_playing(player, track_id)
if not player or not player:is_player() or not active_huds[playername] or not hud_sequence_numbers[playername] or seq ~= hud_sequence_numbers[playername] then
return
end
if id == active_huds[playername] then
if id ~= nil and id == active_huds[playername] then
player:hud_remove(active_huds[playername])
active_huds[playername] = nil
end
@ -162,8 +162,10 @@ minetest.register_node("mcl_jukebox:jukebox", {
inv:set_stack("main", 1, "")
if active_tracks[cname] ~= nil then
minetest.sound_stop(active_tracks[cname])
clicker:hud_remove(active_huds[cname])
active_tracks[cname] = nil
end
if active_huds[cname] ~= nil then
clicker:hud_remove(active_huds[cname])
active_huds[cname] = nil
end
else
@ -219,8 +221,10 @@ minetest.register_node("mcl_jukebox:jukebox", {
dropped_item:set_yaw(math.pi/2)
if active_tracks[name] ~= nil then
minetest.sound_stop(active_tracks[name])
digger:hud_remove(active_huds[name])
active_tracks[name] = nil
end
if active_huds[name] ~= nil then
digger:hud_remove(active_huds[name])
active_huds[name] = nil
end
end

View file

@ -576,7 +576,7 @@ minetest.register_tool("mcl_tools:shears", {
inventory_image = "default_tool_shears.png",
wield_image = "default_tool_shears.png",
stack_max = 1,
groups = { tool=1, shears=1, dig_speed_class=4, enchantability=1 },
groups = { tool=1, shears=1, dig_speed_class=4, },
tool_capabilities = {
full_punch_interval = 0.5,
max_drop_level=1,

View file

@ -176,7 +176,7 @@ minetest.register_tool("screwdriver:screwdriver", {
description = S("Screwdriver"),
inventory_image = "screwdriver.png",
wield_image = "screwdriver.png^[transformFX",
groups = { tool = 1, not_in_creative_inventory = 1, enchantability = 1 },
groups = { tool = 1, not_in_creative_inventory = 1 },
on_use = function(itemstack, user, pointed_thing)
screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_FACE, 200)
return itemstack