Merge pull request 'Rover and Stalker' (#4282) from rover_stalker into master
Reviewed-on: https://git.minetest.land/VoxeLibre/VoxeLibre/pulls/4282
|
@ -958,6 +958,7 @@ function mob_class:do_states_attack (dtime)
|
||||||
if self.v_start then
|
if self.v_start then
|
||||||
self.timer = self.timer + dtime
|
self.timer = self.timer + dtime
|
||||||
self.blinktimer = (self.blinktimer or 0) + dtime
|
self.blinktimer = (self.blinktimer or 0) + dtime
|
||||||
|
self:set_animation("fuse")
|
||||||
|
|
||||||
if self.blinktimer > 0.2 then
|
if self.blinktimer > 0.2 then
|
||||||
self.blinktimer = 0
|
self.blinktimer = 0
|
||||||
|
|
|
@ -314,6 +314,7 @@ function mcl_mobs.register_mob(name, def)
|
||||||
|
|
||||||
return self:mob_activate(staticdata, def, dtime)
|
return self:mob_activate(staticdata, def, dtime)
|
||||||
end,
|
end,
|
||||||
|
after_activate = def.after_activate,
|
||||||
attack_state = def.attack_state, -- custom attack state
|
attack_state = def.attack_state, -- custom attack state
|
||||||
on_attack = def.on_attack, -- called after attack, useful with otherwise predefined attack states (not custom)
|
on_attack = def.on_attack, -- called after attack, useful with otherwise predefined attack states (not custom)
|
||||||
harmed_by_heal = def.harmed_by_heal,
|
harmed_by_heal = def.harmed_by_heal,
|
||||||
|
|
|
@ -33,11 +33,11 @@ This mod adds mobs which closely resemble the mobs from the game Minecraft, vers
|
||||||
* Husk
|
* Husk
|
||||||
* Skeleton
|
* Skeleton
|
||||||
* Stray
|
* Stray
|
||||||
* Creeper
|
* Stalker
|
||||||
* Slime
|
* Slime
|
||||||
* Spider
|
* Spider
|
||||||
* Cave Spider
|
* Cave Spider
|
||||||
* Enderman
|
* Rover
|
||||||
* Zombie Villager
|
* Zombie Villager
|
||||||
* Zombie Piglin
|
* Zombie Piglin
|
||||||
* Wither Skeleton
|
* Wither Skeleton
|
||||||
|
|
|
@ -5,7 +5,7 @@ Blaze=Lohe
|
||||||
Chicken=Huhn
|
Chicken=Huhn
|
||||||
Cow=Kuh
|
Cow=Kuh
|
||||||
Mooshroom=Pilzkuh
|
Mooshroom=Pilzkuh
|
||||||
Creeper=Creeper
|
Stalker=Stalker
|
||||||
Ender Dragon=Enderdrache
|
Ender Dragon=Enderdrache
|
||||||
Enderman=Enderman
|
Enderman=Enderman
|
||||||
Endermite=Endermilbe
|
Endermite=Endermilbe
|
||||||
|
|
|
@ -6,7 +6,7 @@ Blaze=Blaze
|
||||||
Chicken=Kylling
|
Chicken=Kylling
|
||||||
Cow=Ko
|
Cow=Ko
|
||||||
Mooshroom=Svamp
|
Mooshroom=Svamp
|
||||||
Creeper=Creeper
|
Stalker=Stalker
|
||||||
Ender Dragon=Enderdrage
|
Ender Dragon=Enderdrage
|
||||||
Enderman=Enderman
|
Enderman=Enderman
|
||||||
Endermite=Endermide
|
Endermite=Endermide
|
||||||
|
|
|
@ -5,7 +5,7 @@ Chicken=Pollo
|
||||||
Cod=Bacalao
|
Cod=Bacalao
|
||||||
Cow=Vaca
|
Cow=Vaca
|
||||||
Mooshroom=Champivaca
|
Mooshroom=Champivaca
|
||||||
Creeper=Creeper
|
Stalker=Stalker
|
||||||
Dolphin=Delfín
|
Dolphin=Delfín
|
||||||
Ender Dragon=Ender Dragon
|
Ender Dragon=Ender Dragon
|
||||||
Enderman=Enderman
|
Enderman=Enderman
|
||||||
|
|
|
@ -6,7 +6,7 @@ Blaze=Blaze
|
||||||
Chicken=Poulet
|
Chicken=Poulet
|
||||||
Cow=Vache
|
Cow=Vache
|
||||||
Mooshroom=Champimeuh
|
Mooshroom=Champimeuh
|
||||||
Creeper=Creeper
|
Stalker=Stalker
|
||||||
Ender Dragon=Ender Dragon
|
Ender Dragon=Ender Dragon
|
||||||
Enderman=Enderman
|
Enderman=Enderman
|
||||||
Endermite=Endermite
|
Endermite=Endermite
|
||||||
|
|
|
@ -6,7 +6,7 @@ Blaze=Flamor
|
||||||
Chicken=Polet
|
Chicken=Polet
|
||||||
Cow=Vacha
|
Cow=Vacha
|
||||||
Mooshroom=Vachairòla
|
Mooshroom=Vachairòla
|
||||||
Creeper=Creeper
|
Stalker=Stalker
|
||||||
Ender Dragon=Dragon de Finuèit
|
Ender Dragon=Dragon de Finuèit
|
||||||
Enderman=Finuèairi
|
Enderman=Finuèairi
|
||||||
Endermite=Finuèibau
|
Endermite=Finuèibau
|
||||||
|
|
|
@ -6,7 +6,7 @@ Blaze=Blaze
|
||||||
Chicken=Galinha
|
Chicken=Galinha
|
||||||
Cow=Vaca
|
Cow=Vaca
|
||||||
Mooshroom=Coguvaca
|
Mooshroom=Coguvaca
|
||||||
Creeper=Creeper
|
Stalker=Stalker
|
||||||
Ender Dragon=Dragão do Fim
|
Ender Dragon=Dragão do Fim
|
||||||
Enderman=Enderman
|
Enderman=Enderman
|
||||||
Endermite=Endermite
|
Endermite=Endermite
|
||||||
|
|
|
@ -6,7 +6,7 @@ Blaze=Ифрит
|
||||||
Chicken=Курица
|
Chicken=Курица
|
||||||
Cow=Корова
|
Cow=Корова
|
||||||
Mooshroom=Грибная корова
|
Mooshroom=Грибная корова
|
||||||
Creeper=Крипер
|
Stalker=Сталкер
|
||||||
Ender Dragon=Дракон Края
|
Ender Dragon=Дракон Края
|
||||||
Enderman=Эндермен
|
Enderman=Эндермен
|
||||||
Endermite=Эндермит
|
Endermite=Эндермит
|
||||||
|
|
|
@ -6,7 +6,7 @@ Blaze=
|
||||||
Chicken=
|
Chicken=
|
||||||
Cow=
|
Cow=
|
||||||
Mooshroom=
|
Mooshroom=
|
||||||
Creeper=
|
Stalker=
|
||||||
Ender Dragon=
|
Ender Dragon=
|
||||||
Enderman=
|
Enderman=
|
||||||
Endermite=
|
Endermite=
|
||||||
|
|
BIN
mods/ENTITIES/mobs_mc/models/vl_rover.b3d
Normal file
BIN
mods/ENTITIES/mobs_mc/models/vl_stalker.b3d
Normal file
|
@ -31,20 +31,9 @@ local place_frequency_min = 235
|
||||||
local place_frequency_max = 245
|
local place_frequency_max = 245
|
||||||
|
|
||||||
minetest.register_entity("mobs_mc:ender_eyes", {
|
minetest.register_entity("mobs_mc:ender_eyes", {
|
||||||
visual = "mesh",
|
|
||||||
mesh = "mobs_mc_spider.b3d",
|
|
||||||
visual_size = {x=1.01/3, y=1.01/3},
|
|
||||||
textures = {
|
|
||||||
"mobs_mc_enderman_eyes.png",
|
|
||||||
},
|
|
||||||
on_step = function(self)
|
on_step = function(self)
|
||||||
if self and self.object then
|
self.object:remove()
|
||||||
if not self.object:get_attach() then
|
|
||||||
self.object:remove()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
glow = 50,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator("mobs_mc")
|
||||||
|
@ -66,142 +55,8 @@ end
|
||||||
|
|
||||||
local pr = PseudoRandom(os.time()*(-334))
|
local pr = PseudoRandom(os.time()*(-334))
|
||||||
|
|
||||||
-- Texuture overrides for enderman block. Required for cactus because it's original is a nodebox
|
|
||||||
-- and the textures have tranparent pixels.
|
|
||||||
local block_texture_overrides
|
|
||||||
do
|
|
||||||
local cbackground = "mobs_mc_enderman_cactus_background.png"
|
|
||||||
local ctiles = minetest.registered_nodes["mcl_core:cactus"].tiles
|
|
||||||
|
|
||||||
local ctable = {}
|
|
||||||
local last
|
|
||||||
for i=1, 6 do
|
|
||||||
if ctiles[i] then
|
|
||||||
last = ctiles[i]
|
|
||||||
end
|
|
||||||
table.insert(ctable, cbackground .. "^" .. last)
|
|
||||||
end
|
|
||||||
|
|
||||||
block_texture_overrides = {
|
|
||||||
["mcl_core:cactus"] = ctable,
|
|
||||||
-- FIXME: replace colorize colors with colors from palette
|
|
||||||
["mcl_core:dirt_with_grass"] =
|
|
||||||
{
|
|
||||||
"mcl_core_grass_block_top.png^[colorize:green:90",
|
|
||||||
"default_dirt.png",
|
|
||||||
"default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)",
|
|
||||||
"default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)",
|
|
||||||
"default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)",
|
|
||||||
"default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)"}
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Create the textures table for the enderman, depending on which kind of block
|
|
||||||
-- the enderman holds (if any).
|
|
||||||
local create_enderman_textures = function(block_type, itemstring)
|
|
||||||
local base = "mobs_mc_enderman.png^mobs_mc_enderman_eyes.png"
|
|
||||||
|
|
||||||
--[[ Order of the textures in the texture table:
|
|
||||||
Flower, 90 degrees
|
|
||||||
Flower, 45 degrees
|
|
||||||
Held block, backside
|
|
||||||
Held block, bottom
|
|
||||||
Held block, front
|
|
||||||
Held block, left
|
|
||||||
Held block, right
|
|
||||||
Held block, top
|
|
||||||
Enderman texture (base)
|
|
||||||
]]
|
|
||||||
-- Regular cube
|
|
||||||
if block_type == "cube" then
|
|
||||||
local tiles = minetest.registered_nodes[itemstring].tiles
|
|
||||||
local textures = {}
|
|
||||||
local last
|
|
||||||
if block_texture_overrides[itemstring] then
|
|
||||||
-- Texture override available? Use these instead!
|
|
||||||
textures = block_texture_overrides[itemstring]
|
|
||||||
else
|
|
||||||
-- Extract the texture names
|
|
||||||
for i = 1, 6 do
|
|
||||||
if type(tiles[i]) == "string" then
|
|
||||||
last = tiles[i]
|
|
||||||
elseif type(tiles[i]) == "table" then
|
|
||||||
if tiles[i].name then
|
|
||||||
last = tiles[i].name
|
|
||||||
end
|
|
||||||
end
|
|
||||||
table.insert(textures, last)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return {
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
textures[5],
|
|
||||||
textures[2],
|
|
||||||
textures[6],
|
|
||||||
textures[3],
|
|
||||||
textures[4],
|
|
||||||
textures[1],
|
|
||||||
base, -- Enderman texture
|
|
||||||
}
|
|
||||||
-- Node of plantlike drawtype, 45° (recommended)
|
|
||||||
elseif block_type == "plantlike45" then
|
|
||||||
local textures = minetest.registered_nodes[itemstring].tiles
|
|
||||||
return {
|
|
||||||
"blank.png",
|
|
||||||
textures[1],
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
base,
|
|
||||||
}
|
|
||||||
-- Node of plantlike drawtype, 90°
|
|
||||||
elseif block_type == "plantlike90" then
|
|
||||||
local textures = minetest.registered_nodes[itemstring].tiles
|
|
||||||
return {
|
|
||||||
textures[1],
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
base,
|
|
||||||
}
|
|
||||||
elseif block_type == "unknown" then
|
|
||||||
return {
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
"unknown_node.png",
|
|
||||||
"unknown_node.png",
|
|
||||||
"unknown_node.png",
|
|
||||||
"unknown_node.png",
|
|
||||||
"unknown_node.png",
|
|
||||||
"unknown_node.png",
|
|
||||||
base, -- Enderman texture
|
|
||||||
}
|
|
||||||
-- No block held (for initial texture)
|
|
||||||
elseif block_type == "nothing" or block_type == nil then
|
|
||||||
return {
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
"blank.png",
|
|
||||||
base, -- Enderman texture
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Select a new animation definition.
|
-- Select a new animation definition.
|
||||||
local select_enderman_animation = function(animation_type)
|
local select_rover_animation = function(animation_type)
|
||||||
-- Enderman holds a block
|
-- Enderman holds a block
|
||||||
if animation_type == "block" then
|
if animation_type == "block" then
|
||||||
return {
|
return {
|
||||||
|
@ -254,8 +109,8 @@ local psdefs = {{
|
||||||
texture = "mcl_portals_particle"..math.random(1, 5)..".png",
|
texture = "mcl_portals_particle"..math.random(1, 5)..".png",
|
||||||
}}
|
}}
|
||||||
|
|
||||||
mcl_mobs.register_mob("mobs_mc:enderman", {
|
mcl_mobs.register_mob("mobs_mc:rover", {
|
||||||
description = S("Enderman"),
|
description = S("Rover"),
|
||||||
type = "monster",
|
type = "monster",
|
||||||
spawn_class = "passive",
|
spawn_class = "passive",
|
||||||
can_despawn = true,
|
can_despawn = true,
|
||||||
|
@ -267,23 +122,11 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
||||||
xp_max = 5,
|
xp_max = 5,
|
||||||
collisionbox = {-0.3, -0.01, -0.3, 0.3, 2.89, 0.3},
|
collisionbox = {-0.3, -0.01, -0.3, 0.3, 2.89, 0.3},
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
mesh = "mobs_mc_enderman.b3d",
|
mesh = "vl_rover.b3d",
|
||||||
textures = create_enderman_textures(),
|
textures = { "vl_mobs_rover.png^vl_mobs_rover_face.png" },
|
||||||
visual_size = {x=3, y=3},
|
glow = 100,
|
||||||
|
visual_size = {x=10, y=10},
|
||||||
makes_footstep_sound = true,
|
makes_footstep_sound = true,
|
||||||
on_spawn = function(self)
|
|
||||||
local spider_eyes=false
|
|
||||||
for n = 1, #self.object:get_children() do
|
|
||||||
local obj = self.object:get_children()[n]
|
|
||||||
if obj:get_luaentity() and self.object:get_luaentity().name == "mobs_mc:ender_eyes" then
|
|
||||||
spider_eyes = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if not spider_eyes then
|
|
||||||
minetest.add_entity(self.object:get_pos(), "mobs_mc:ender_eyes"):set_attach(self.object, "head.top", vector.new(0,2.54,-1.99), vector.new(90,0,180))
|
|
||||||
minetest.add_entity(self.object:get_pos(), "mobs_mc:ender_eyes"):set_attach(self.object, "head.top", vector.new(1,2.54,-1.99), vector.new(90,0,180))
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
sounds = {
|
sounds = {
|
||||||
-- TODO: Custom war cry sound
|
-- TODO: Custom war cry sound
|
||||||
war_cry = "mobs_sandmonster",
|
war_cry = "mobs_sandmonster",
|
||||||
|
@ -292,8 +135,8 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
||||||
random = {name="mobs_mc_enderman_random", gain=0.5},
|
random = {name="mobs_mc_enderman_random", gain=0.5},
|
||||||
distance = 16,
|
distance = 16,
|
||||||
},
|
},
|
||||||
walk_velocity = 0.2,
|
walk_velocity = 2,
|
||||||
run_velocity = 3.4,
|
run_velocity = 4,
|
||||||
damage = 7,
|
damage = 7,
|
||||||
reach = 2,
|
reach = 2,
|
||||||
particlespawners = psdefs,
|
particlespawners = psdefs,
|
||||||
|
@ -304,7 +147,7 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "common"},
|
looting = "common"},
|
||||||
},
|
},
|
||||||
animation = select_enderman_animation("normal"),
|
animation = select_rover_animation("normal"),
|
||||||
_taken_node = "",
|
_taken_node = "",
|
||||||
can_spawn = function(pos)
|
can_spawn = function(pos)
|
||||||
return #minetest.find_nodes_in_area(vector.offset(pos,0,1,0),vector.offset(pos,0,3,0),{"air"}) > 2
|
return #minetest.find_nodes_in_area(vector.offset(pos,0,1,0),vector.offset(pos,0,3,0),{"air"}) > 2
|
||||||
|
@ -348,6 +191,7 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
||||||
|
|
||||||
-- AGRESSIVELY WARP/CHASE PLAYER BEHAVIOUR HERE.
|
-- AGRESSIVELY WARP/CHASE PLAYER BEHAVIOUR HERE.
|
||||||
if self.state == "attack" then
|
if self.state == "attack" then
|
||||||
|
self.object:set_properties({textures={"vl_mobs_rover.png^vl_mobs_rover_face_angry.png"}})
|
||||||
if self.attack then
|
if self.attack then
|
||||||
local target = self.attack
|
local target = self.attack
|
||||||
local pos = target:get_pos()
|
local pos = target:get_pos()
|
||||||
|
@ -358,6 +202,7 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else --if not attacking try to tp to the dark
|
else --if not attacking try to tp to the dark
|
||||||
|
self.object:set_properties({textures={"vl_mobs_rover.png^vl_mobs_rover_face.png"}})
|
||||||
if dim == 'overworld' then
|
if dim == 'overworld' then
|
||||||
local light = minetest.get_node_light(enderpos)
|
local light = minetest.get_node_light(enderpos)
|
||||||
if light and light > minetest.LIGHT_MAX then
|
if light and light > minetest.LIGHT_MAX then
|
||||||
|
@ -489,38 +334,17 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
||||||
minetest.remove_node(take_pos)
|
minetest.remove_node(take_pos)
|
||||||
local dug = minetest.get_node_or_nil(take_pos)
|
local dug = minetest.get_node_or_nil(take_pos)
|
||||||
if dug and dug.name == "air" then
|
if dug and dug.name == "air" then
|
||||||
self._taken_node = node.name
|
local node_obj = vl_held_item.create_item_entity(take_pos, node.name)
|
||||||
self.persistent = true
|
if node_obj then
|
||||||
local def = minetest.registered_nodes[self._taken_node]
|
node_obj:set_attach(self.object, "held_node")
|
||||||
-- Update animation and texture accordingly (adds visibly carried block)
|
self._node_obj = node_obj
|
||||||
local block_type
|
self._taken_node = node.name
|
||||||
-- Cube-shaped
|
node_obj:set_properties({visual_size={x=0.02, y=0.02}})
|
||||||
if def.drawtype == "normal" or
|
|
||||||
def.drawtype == "nodebox" or
|
|
||||||
def.drawtype == "liquid" or
|
|
||||||
def.drawtype == "flowingliquid" or
|
|
||||||
def.drawtype == "glasslike" or
|
|
||||||
def.drawtype == "glasslike_framed" or
|
|
||||||
def.drawtype == "glasslike_framed_optional" or
|
|
||||||
def.drawtype == "allfaces" or
|
|
||||||
def.drawtype == "allfaces_optional" or
|
|
||||||
def.drawtype == nil then
|
|
||||||
block_type = "cube"
|
|
||||||
elseif def.drawtype == "plantlike" then
|
|
||||||
-- Flowers and stuff
|
|
||||||
block_type = "plantlike45"
|
|
||||||
elseif def.drawtype == "airlike" then
|
|
||||||
-- Just air
|
|
||||||
block_type = nil
|
|
||||||
else
|
|
||||||
-- Fallback for complex drawtypes
|
|
||||||
block_type = "unknown"
|
|
||||||
end
|
end
|
||||||
self.base_texture = create_enderman_textures(block_type, self._taken_node)
|
local def = minetest.registered_nodes[self._taken_node]
|
||||||
self.object:set_properties({ textures = self.base_texture })
|
self.animation = select_rover_animation("block")
|
||||||
self.animation = select_enderman_animation("block")
|
|
||||||
self:set_animation(self.animation.current)
|
self:set_animation(self.animation.current)
|
||||||
if def.sounds and def.sounds.dug then
|
if def and def.sounds and def.sounds.dug then
|
||||||
minetest.sound_play(def.sounds.dug, {pos = take_pos, max_hear_distance = 16}, true)
|
minetest.sound_play(def.sounds.dug, {pos = take_pos, max_hear_distance = 16}, true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -542,12 +366,14 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
||||||
local def = minetest.registered_nodes[self._taken_node]
|
local def = minetest.registered_nodes[self._taken_node]
|
||||||
-- Update animation accordingly (removes visible block)
|
-- Update animation accordingly (removes visible block)
|
||||||
self.persistent = false
|
self.persistent = false
|
||||||
self.animation = select_enderman_animation("normal")
|
self.animation = select_rover_animation("normal")
|
||||||
self:set_animation(self.animation.current)
|
self:set_animation(self.animation.current)
|
||||||
if def.sounds and def.sounds.place then
|
if def and def.sounds and def.sounds.place then
|
||||||
minetest.sound_play(def.sounds.place, {pos = place_pos, max_hear_distance = 16}, true)
|
minetest.sound_play(def.sounds.place, {pos = place_pos, max_hear_distance = 16}, true)
|
||||||
end
|
end
|
||||||
self._taken_node = ""
|
self._node_obj:remove()
|
||||||
|
self._node_obj = nil
|
||||||
|
self._taken_node = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -645,6 +471,21 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
||||||
--end
|
--end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
after_activate = function(self, staticdata, def, dtime)
|
||||||
|
if not self._taken_node or self._taken_node == "" then
|
||||||
|
self.animation = select_rover_animation("normal")
|
||||||
|
self:set_animation(self.animation.current)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
self.animation = select_rover_animation("block")
|
||||||
|
self:set_animation(self.animation.current)
|
||||||
|
local node_obj = vl_held_item.create_item_entity(self.object:get_pos(), self._taken_node)
|
||||||
|
if node_obj then
|
||||||
|
node_obj:set_attach(self.object, "held_node")
|
||||||
|
self._node_obj = node_obj
|
||||||
|
node_obj:set_properties({visual_size={x=0.02, y=0.02}})
|
||||||
|
end
|
||||||
|
end,
|
||||||
armor = { fleshy = 100, water_vulnerable = 100 },
|
armor = { fleshy = 100, water_vulnerable = 100 },
|
||||||
water_damage = 8,
|
water_damage = 8,
|
||||||
view_range = 64,
|
view_range = 64,
|
||||||
|
@ -652,9 +493,22 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
||||||
attack_type = "dogfight",
|
attack_type = "dogfight",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- compat
|
||||||
|
minetest.register_entity("mobs_mc:enderman", {
|
||||||
|
on_activate = function(self, staticdata, dtime)
|
||||||
|
minetest.add_entity(self.object:get_pos(), "mobs_mc:rover", staticdata)
|
||||||
|
obj:set_properties({
|
||||||
|
mesh = "vl_rover.b3d",
|
||||||
|
textures = { "vl_mobs_rover.png^vl_mobs_rover_face.png" },
|
||||||
|
visual_size = {x=10, y=10},
|
||||||
|
})
|
||||||
|
self.object:remove()
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
-- End spawn
|
-- End spawn
|
||||||
mcl_mobs:spawn_specific(
|
mcl_mobs:spawn_specific(
|
||||||
"mobs_mc:enderman",
|
"mobs_mc:rover",
|
||||||
"end",
|
"end",
|
||||||
"ground",
|
"ground",
|
||||||
{
|
{
|
||||||
|
@ -674,7 +528,7 @@ mcl_vars.mg_end_min,
|
||||||
mcl_vars.mg_end_max)
|
mcl_vars.mg_end_max)
|
||||||
-- Overworld spawn
|
-- Overworld spawn
|
||||||
mcl_mobs:spawn_specific(
|
mcl_mobs:spawn_specific(
|
||||||
"mobs_mc:enderman",
|
"mobs_mc:rover",
|
||||||
"overworld",
|
"overworld",
|
||||||
"ground",
|
"ground",
|
||||||
{
|
{
|
||||||
|
@ -823,7 +677,7 @@ mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- Nether spawn (rare)
|
-- Nether spawn (rare)
|
||||||
mcl_mobs:spawn_specific(
|
mcl_mobs:spawn_specific(
|
||||||
"mobs_mc:enderman",
|
"mobs_mc:rover",
|
||||||
"nether",
|
"nether",
|
||||||
"ground",
|
"ground",
|
||||||
{
|
{
|
||||||
|
@ -840,7 +694,7 @@ mcl_vars.mg_nether_max)
|
||||||
|
|
||||||
-- Warped Forest spawn (common)
|
-- Warped Forest spawn (common)
|
||||||
mcl_mobs:spawn_specific(
|
mcl_mobs:spawn_specific(
|
||||||
"mobs_mc:enderman",
|
"mobs_mc:rover",
|
||||||
"nether",
|
"nether",
|
||||||
"ground",
|
"ground",
|
||||||
{
|
{
|
||||||
|
@ -855,4 +709,5 @@ mcl_vars.mg_nether_min,
|
||||||
mcl_vars.mg_nether_max)
|
mcl_vars.mg_nether_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs.register_egg("mobs_mc:enderman", S("Enderman"), "#252525", "#151515", 0)
|
mcl_mobs.register_egg("mobs_mc:rover", S("Rover"), "#252525", "#151515", 0)
|
||||||
|
minetest.register_alias("mobs_mc:enderman", "mobs_mc:rover")
|
|
@ -73,7 +73,7 @@ local skeleton = {
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
|
|
||||||
-- Head
|
-- Head
|
||||||
-- TODO: Only drop if killed by charged creeper
|
-- TODO: Only drop if killed by charged stalker
|
||||||
{name = "mcl_heads:skeleton",
|
{name = "mcl_heads:skeleton",
|
||||||
chance = 200, -- 0.5% chance
|
chance = 200, -- 0.5% chance
|
||||||
min = 1,
|
min = 1,
|
||||||
|
|
|
@ -3,14 +3,59 @@
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator("mobs_mc")
|
||||||
|
|
||||||
--###################
|
--###################
|
||||||
--################### CREEPER
|
--################### STALKER
|
||||||
--###################
|
--###################
|
||||||
|
|
||||||
|
|
||||||
|
local function get_texture(self)
|
||||||
|
local on_name = self.standing_on
|
||||||
|
local texture
|
||||||
|
local texture_suff = ""
|
||||||
|
if on_name and on_name ~= "air" then
|
||||||
|
local tiles = minetest.registered_nodes[on_name].tiles
|
||||||
|
if tiles then
|
||||||
|
local tile = tiles[1]
|
||||||
|
local color
|
||||||
|
if type(tile) == "table" then
|
||||||
|
texture = tile.name or tile.image
|
||||||
|
if tile.color then
|
||||||
|
color = minetest.colorspec_to_colorstring(tile.color)
|
||||||
|
end
|
||||||
|
elseif type(tile) == "string" then
|
||||||
|
texture = tile
|
||||||
|
end
|
||||||
|
if not color then
|
||||||
|
color = minetest.colorspec_to_colorstring(minetest.registered_nodes[on_name].color)
|
||||||
|
end
|
||||||
|
if color then
|
||||||
|
texture_suff = "^[multiply:" .. color .. "^[hsl:0:0:20"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if not texture then
|
||||||
|
texture = "vl_stalker_default.png"
|
||||||
|
end
|
||||||
|
texture = "([combine:16x24:0,0=" .. texture .. ":0,16=" .. texture .. texture_suff
|
||||||
|
if self.attack then
|
||||||
|
texture = texture .. ")^vl_mobs_stalker_overlay_angry.png"
|
||||||
|
else
|
||||||
|
texture = texture .. ")^vl_mobs_stalker_overlay.png"
|
||||||
|
end
|
||||||
|
return texture
|
||||||
|
end
|
||||||
|
|
||||||
|
local AURA = "vl_stalker_overloaded_aura.png"
|
||||||
|
local function get_overloaded_aura(timer)
|
||||||
|
local frame = math.floor(timer*16)
|
||||||
|
local f = tostring(frame)
|
||||||
|
local nf = tostring(16-f)
|
||||||
|
return "[combine:16x24:-" .. nf ..",0=" .. AURA .. ":" .. f .. ",0=" .. AURA
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
mcl_mobs.register_mob("mobs_mc:creeper", {
|
|
||||||
description = S("Creeper"),
|
mcl_mobs.register_mob("mobs_mc:stalker", {
|
||||||
|
description = S("Stalker"),
|
||||||
type = "monster",
|
type = "monster",
|
||||||
spawn_class = "hostile",
|
spawn_class = "hostile",
|
||||||
spawn_in_group = 1,
|
spawn_in_group = 1,
|
||||||
|
@ -21,16 +66,16 @@ mcl_mobs.register_mob("mobs_mc:creeper", {
|
||||||
collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.69, 0.3},
|
collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.69, 0.3},
|
||||||
pathfinding = 1,
|
pathfinding = 1,
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
mesh = "mobs_mc_creeper.b3d",
|
mesh = "vl_stalker.b3d",
|
||||||
head_swivel = "Head_Control",
|
-- head_swivel = "Head_Control",
|
||||||
bone_eye_height = 2.35,
|
bone_eye_height = 2.35,
|
||||||
head_eye_height = 1.8;
|
head_eye_height = 1.8;
|
||||||
curiosity = 2,
|
curiosity = 2,
|
||||||
textures = {
|
textures = {
|
||||||
{"mobs_mc_creeper.png",
|
{get_texture({}),
|
||||||
"mobs_mc_empty.png"},
|
"mobs_mc_empty.png"},
|
||||||
},
|
},
|
||||||
visual_size = {x=3, y=3},
|
visual_size = {x=2, y=2},
|
||||||
sounds = {
|
sounds = {
|
||||||
attack = "tnt_ignite",
|
attack = "tnt_ignite",
|
||||||
death = "mobs_mc_creeper_death",
|
death = "mobs_mc_creeper_death",
|
||||||
|
@ -56,8 +101,8 @@ mcl_mobs.register_mob("mobs_mc:creeper", {
|
||||||
allow_fuse_reset = true,
|
allow_fuse_reset = true,
|
||||||
stop_to_explode = true,
|
stop_to_explode = true,
|
||||||
|
|
||||||
-- Force-ignite creeper with flint and steel and explode after 1.5 seconds.
|
-- Force-ignite stalker with flint and steel and explode after 1.5 seconds.
|
||||||
-- TODO: Make creeper flash after doing this as well.
|
-- TODO: Make stalker flash after doing this as well.
|
||||||
-- TODO: Test and debug this code.
|
-- TODO: Test and debug this code.
|
||||||
on_rightclick = function(self, clicker)
|
on_rightclick = function(self, clicker)
|
||||||
if self._forced_explosion_countdown_timer ~= nil then
|
if self._forced_explosion_countdown_timer ~= nil then
|
||||||
|
@ -86,6 +131,7 @@ mcl_mobs.register_mob("mobs_mc:creeper", {
|
||||||
self:boom(mcl_util.get_object_center(self.object), self.explosion_strength)
|
self:boom(mcl_util.get_object_center(self.object), self.explosion_strength)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
self.object:set_properties({textures={get_texture(self)}})
|
||||||
end,
|
end,
|
||||||
on_die = function(self, pos, cmi_cause)
|
on_die = function(self, pos, cmi_cause)
|
||||||
-- Drop a random music disc when killed by skeleton or stray
|
-- Drop a random music disc when killed by skeleton or stray
|
||||||
|
@ -108,35 +154,31 @@ mcl_mobs.register_mob("mobs_mc:creeper", {
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
|
|
||||||
-- Head
|
-- Head
|
||||||
-- TODO: Only drop if killed by charged creeper
|
-- TODO: Only drop if killed by charged stalker
|
||||||
{name = "mcl_heads:creeper",
|
{name = "mcl_heads:stalker",
|
||||||
chance = 200, -- 0.5%
|
chance = 200, -- 0.5%
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,},
|
max = 1,},
|
||||||
},
|
},
|
||||||
animation = {
|
animation = {
|
||||||
speed_normal = 24,
|
speed_normal = 30,
|
||||||
speed_run = 48,
|
speed_run = 60,
|
||||||
stand_start = 0,
|
stand_start = 0,
|
||||||
stand_end = 23,
|
stand_end = 23,
|
||||||
walk_start = 24,
|
walk_start = 24,
|
||||||
walk_end = 49,
|
walk_end = 49,
|
||||||
run_start = 24,
|
run_start = 24,
|
||||||
run_end = 49,
|
run_end = 49,
|
||||||
hurt_start = 110,
|
fuse_start = 49,
|
||||||
hurt_end = 139,
|
fuse_end = 80,
|
||||||
death_start = 140,
|
|
||||||
death_end = 189,
|
|
||||||
look_start = 50,
|
|
||||||
look_end = 108,
|
|
||||||
},
|
},
|
||||||
floats = 1,
|
floats = 1,
|
||||||
fear_height = 4,
|
fear_height = 4,
|
||||||
view_range = 16,
|
view_range = 16,
|
||||||
})
|
})
|
||||||
|
|
||||||
mcl_mobs.register_mob("mobs_mc:creeper_charged", {
|
mcl_mobs.register_mob("mobs_mc:stalker_overloaded", {
|
||||||
description = S("Charged Creeper"),
|
description = S("Overloaded Stalker"),
|
||||||
type = "monster",
|
type = "monster",
|
||||||
spawn_class = "hostile",
|
spawn_class = "hostile",
|
||||||
hp_min = 20,
|
hp_min = 20,
|
||||||
|
@ -146,15 +188,16 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", {
|
||||||
collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.69, 0.3},
|
collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.69, 0.3},
|
||||||
pathfinding = 1,
|
pathfinding = 1,
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
mesh = "mobs_mc_creeper.b3d",
|
mesh = "vl_stalker.b3d",
|
||||||
|
|
||||||
--BOOM
|
--BOOM
|
||||||
|
|
||||||
textures = {
|
textures = {
|
||||||
{"mobs_mc_creeper.png",
|
{get_texture({}),
|
||||||
"mobs_mc_creeper_charge.png"},
|
AURA},
|
||||||
},
|
},
|
||||||
visual_size = {x=3, y=3},
|
use_texture_alpha = true,
|
||||||
|
visual_size = {x=2, y=2},
|
||||||
sounds = {
|
sounds = {
|
||||||
attack = "tnt_ignite",
|
attack = "tnt_ignite",
|
||||||
death = "mobs_mc_creeper_death",
|
death = "mobs_mc_creeper_death",
|
||||||
|
@ -178,8 +221,8 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", {
|
||||||
allow_fuse_reset = true,
|
allow_fuse_reset = true,
|
||||||
stop_to_explode = true,
|
stop_to_explode = true,
|
||||||
|
|
||||||
-- Force-ignite creeper with flint and steel and explode after 1.5 seconds.
|
-- Force-ignite stalker with flint and steel and explode after 1.5 seconds.
|
||||||
-- TODO: Make creeper flash after doing this as well.
|
-- TODO: Make stalker flash after doing this as well.
|
||||||
-- TODO: Test and debug this code.
|
-- TODO: Test and debug this code.
|
||||||
on_rightclick = function(self, clicker)
|
on_rightclick = function(self, clicker)
|
||||||
if self._forced_explosion_countdown_timer ~= nil then
|
if self._forced_explosion_countdown_timer ~= nil then
|
||||||
|
@ -208,6 +251,9 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", {
|
||||||
self:boom(mcl_util.get_object_center(self.object), self.explosion_strength)
|
self:boom(mcl_util.get_object_center(self.object), self.explosion_strength)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if not self._aura_timer or self._aura_timer > 1 then self._aura_timer = 0 end
|
||||||
|
self._aura_timer = self._aura_timer + dtime
|
||||||
|
self.object:set_properties({textures={get_texture(self), get_overloaded_aura(self._aura_timer)}})
|
||||||
end,
|
end,
|
||||||
on_die = function(self, pos, cmi_cause)
|
on_die = function(self, pos, cmi_cause)
|
||||||
-- Drop a random music disc when killed by skeleton or stray
|
-- Drop a random music disc when killed by skeleton or stray
|
||||||
|
@ -222,7 +268,7 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", {
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
on_lightning_strike = function(self, pos, pos2, objects)
|
on_lightning_strike = function(self, pos, pos2, objects)
|
||||||
mcl_util.replace_mob(self.object, "mobs_mc:creeper_charged")
|
mcl_util.replace_mob(self.object, "mobs_mc:stalker_overloaded")
|
||||||
return true
|
return true
|
||||||
end,
|
end,
|
||||||
maxdrops = 2,
|
maxdrops = 2,
|
||||||
|
@ -234,27 +280,23 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", {
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
|
|
||||||
-- Head
|
-- Head
|
||||||
-- TODO: Only drop if killed by charged creeper
|
-- TODO: Only drop if killed by overloaded stalker
|
||||||
{name = "mcl_heads:creeper",
|
{name = "mcl_heads:stalker",
|
||||||
chance = 200, -- 0.5%
|
chance = 200, -- 0.5%
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,},
|
max = 1,},
|
||||||
},
|
},
|
||||||
animation = {
|
animation = {
|
||||||
speed_normal = 24,
|
speed_normal = 30,
|
||||||
speed_run = 48,
|
speed_run = 60,
|
||||||
stand_start = 0,
|
stand_start = 0,
|
||||||
stand_end = 23,
|
stand_end = 23,
|
||||||
walk_start = 24,
|
walk_start = 24,
|
||||||
walk_end = 49,
|
walk_end = 49,
|
||||||
run_start = 24,
|
run_start = 24,
|
||||||
run_end = 49,
|
run_end = 49,
|
||||||
hurt_start = 110,
|
fuse_start = 49,
|
||||||
hurt_end = 139,
|
fuse_end = 80,
|
||||||
death_start = 140,
|
|
||||||
death_end = 189,
|
|
||||||
look_start = 50,
|
|
||||||
look_end = 108,
|
|
||||||
},
|
},
|
||||||
floats = 1,
|
floats = 1,
|
||||||
fear_height = 4,
|
fear_height = 4,
|
||||||
|
@ -264,8 +306,38 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", {
|
||||||
glow = 3,
|
glow = 3,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- compat
|
||||||
|
minetest.register_entity("mobs_mc:creeper", {
|
||||||
|
on_activate = function(self, staticdata, dtime)
|
||||||
|
local obj = minetest.add_entity(self.object:get_pos(), "mobs_mc:stalker", staticdata)
|
||||||
|
obj:set_properties({
|
||||||
|
visual_size = {x=2, y=2},
|
||||||
|
mesh = "vl_stalker.b3d",
|
||||||
|
textures = {
|
||||||
|
{get_texture({}),
|
||||||
|
"mobs_mc_empty.png"},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
self.object:remove()
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
minetest.register_entity("mobs_mc:creeper_charged", {
|
||||||
|
on_activate = function(self, staticdata, dtime)
|
||||||
|
local obj = minetest.add_entity(self.object:get_pos(), "mobs_mc:stalker_overloaded", staticdata)
|
||||||
|
obj:set_properties({
|
||||||
|
visual_size = {x=2, y=2},
|
||||||
|
mesh = "vl_stalker.b3d",
|
||||||
|
textures = {
|
||||||
|
{get_texture({}),
|
||||||
|
AURA},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
self.object:remove()
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
mcl_mobs:spawn_specific(
|
mcl_mobs:spawn_specific(
|
||||||
"mobs_mc:creeper",
|
"mobs_mc:stalker",
|
||||||
"overworld",
|
"overworld",
|
||||||
"ground",
|
"ground",
|
||||||
{
|
{
|
||||||
|
@ -413,4 +485,6 @@ mcl_vars.mg_overworld_min,
|
||||||
mcl_vars.mg_overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs.register_egg("mobs_mc:creeper", S("Creeper"), "#0da70a", "#000000", 0)
|
mcl_mobs.register_egg("mobs_mc:stalker", S("Stalker"), "#0da70a", "#000000", 0)
|
||||||
|
minetest.register_alias("mobs_mc:creeper", "mobs_mc:stalker")
|
||||||
|
mcl_mobs.register_egg("mobs_mc:stalker_overloaded", S("Overloaded Stalker"), "#00a77a", "#000000", 0)
|
|
@ -38,7 +38,7 @@ local drops_common = {
|
||||||
local drops_zombie = table.copy(drops_common)
|
local drops_zombie = table.copy(drops_common)
|
||||||
table.insert(drops_zombie, {
|
table.insert(drops_zombie, {
|
||||||
-- Zombie Head
|
-- Zombie Head
|
||||||
-- TODO: Only drop if killed by charged creeper
|
-- TODO: Only drop if killed by charged stalker
|
||||||
name = "mcl_heads:zombie",
|
name = "mcl_heads:zombie",
|
||||||
chance = 200, -- 0.5%
|
chance = 200, -- 0.5%
|
||||||
min = 1,
|
min = 1,
|
||||||
|
|
40
mods/ENTITIES/vl_held_item/init.lua
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
local modname = minetest.get_current_modname()
|
||||||
|
local modpath = minetest.get_modpath(modname)
|
||||||
|
vl_held_item = {}
|
||||||
|
local mod = vl_held_item
|
||||||
|
|
||||||
|
local held_item_entity = {
|
||||||
|
initial_properties = {
|
||||||
|
hp_max = 1,
|
||||||
|
physical = true,
|
||||||
|
pointable = false,
|
||||||
|
collide_with_objects = true,
|
||||||
|
static_save = false, -- TODO remove/change later when needed to persist
|
||||||
|
-- WARNING persisting held items not recommended, mob can recreate it after_activate
|
||||||
|
collision_box = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
|
||||||
|
},
|
||||||
|
visual = "wielditem",
|
||||||
|
textures = { "mcl_core:dirt_with_grass" },
|
||||||
|
}
|
||||||
|
function held_item_entity:on_activate(staticdata, dtime_unloaded)
|
||||||
|
local staticdata = minetest.deserialize(staticdata)
|
||||||
|
self._staticdata = staticdata
|
||||||
|
|
||||||
|
local props = {
|
||||||
|
visual = "wielditem",
|
||||||
|
textures = { staticdata.itemname },
|
||||||
|
}
|
||||||
|
self.object:set_properties(props)
|
||||||
|
end
|
||||||
|
function held_item_entity:get_staticdata()
|
||||||
|
return minetest.serialize(self._staticdata)
|
||||||
|
end
|
||||||
|
minetest.register_entity("vl_held_item:held_item_entity", held_item_entity)
|
||||||
|
|
||||||
|
function mod.create_item_entity(pos, itemname)
|
||||||
|
local staticdata = {
|
||||||
|
itemname = itemname
|
||||||
|
}
|
||||||
|
return minetest.add_entity(pos, "vl_held_item:held_item_entity", minetest.serialize(staticdata))
|
||||||
|
end
|
||||||
|
|
4
mods/ENTITIES/vl_held_item/mod.conf
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
name = vl_held_item
|
||||||
|
author = teknomunk, Herowl
|
||||||
|
description = An entity that represents an item held by a mob
|
||||||
|
depends = mcl_core
|
|
@ -21,7 +21,7 @@ end
|
||||||
local same_id = {
|
local same_id = {
|
||||||
enchanting = { "table" },
|
enchanting = { "table" },
|
||||||
experience = { "bottle" },
|
experience = { "bottle" },
|
||||||
heads = { "skeleton", "zombie", "creeper", "wither_skeleton" },
|
heads = { "skeleton", "zombie", "stalker", "wither_skeleton" },
|
||||||
mobitems = { "rabbit", "chicken" },
|
mobitems = { "rabbit", "chicken" },
|
||||||
walls = {
|
walls = {
|
||||||
"andesite", "brick", "cobble", "diorite", "endbricks",
|
"andesite", "brick", "cobble", "diorite", "endbricks",
|
||||||
|
|
|
@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt=Wächst auf Grasblöcken, Pod
|
||||||
Flammable=Entzündlich
|
Flammable=Entzündlich
|
||||||
Zombie view range: -50%=Zombiesichtweite: -50%
|
Zombie view range: -50%=Zombiesichtweite: -50%
|
||||||
Skeleton view range: -50%=Skelettsichtweite: -50%
|
Skeleton view range: -50%=Skelettsichtweite: -50%
|
||||||
Creeper view range: -50%=Creepersichtweite: -50%
|
Stalker view range: -50%=Stalkersichtweite: -50%
|
||||||
Damage: @1=Schaden: @1
|
Damage: @1=Schaden: @1
|
||||||
Damage (@1): @2=Schaden (@1): @2
|
Damage (@1): @2=Schaden (@1): @2
|
||||||
Healing: @1=Heilung: @1
|
Healing: @1=Heilung: @1
|
||||||
|
|
|
@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt=Crece sobre bloques de pasto,
|
||||||
Flammable=Inflamable
|
Flammable=Inflamable
|
||||||
Zombie view range: -50%=Rango de visión zombie: -50%
|
Zombie view range: -50%=Rango de visión zombie: -50%
|
||||||
Skeleton view range: -50%=Rango de visión de esqueleto: -50%
|
Skeleton view range: -50%=Rango de visión de esqueleto: -50%
|
||||||
Creeper view range: -50%=Rango de visión de creeper: -50%
|
Stalker view range: -50%=Rango de visión de stalker: -50%
|
||||||
Damage: @1=Daño: @1
|
Damage: @1=Daño: @1
|
||||||
Damage (@1): @2=Daño (@1): @2
|
Damage (@1): @2=Daño (@1): @2
|
||||||
Healing: @1=Curación: @1
|
Healing: @1=Curación: @1
|
||||||
|
|
|
@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt=Pousse sur les blocs de gazon
|
||||||
Flammable=Inflammable
|
Flammable=Inflammable
|
||||||
Zombie view range: -50%=Distance de vue de Zombie : -50%
|
Zombie view range: -50%=Distance de vue de Zombie : -50%
|
||||||
Skeleton view range: -50%=Distance de vue de Squelette : -50%
|
Skeleton view range: -50%=Distance de vue de Squelette : -50%
|
||||||
Creeper view range: -50%=Distance de vue de Creeper : -50%
|
Stalker view range: -50%=Distance de vue de Stalker : -50%
|
||||||
Damage: @1=Dégâts : @1
|
Damage: @1=Dégâts : @1
|
||||||
Damage (@1): @2=Dégâts (@1) : @2
|
Damage (@1): @2=Dégâts (@1) : @2
|
||||||
Healing: @1=Guérison : @1
|
Healing: @1=Guérison : @1
|
||||||
|
|
|
@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt=Rośnie na blokach trawy, bie
|
||||||
Flammable=Łatwopalne
|
Flammable=Łatwopalne
|
||||||
Zombie view range: -50%=Zasięg widzenia zombie: -50%
|
Zombie view range: -50%=Zasięg widzenia zombie: -50%
|
||||||
Skeleton view range: -50%=Zasięg widzenia szkieleta: -50%
|
Skeleton view range: -50%=Zasięg widzenia szkieleta: -50%
|
||||||
Creeper view range: -50%=Zasięg widzenia creepera: -50%
|
Stalker view range: -50%=Zasięg widzenia stalkera: -50%
|
||||||
Damage: @1=Obrażenia: @1
|
Damage: @1=Obrażenia: @1
|
||||||
Damage (@1): @2=Obrażenia (@1): @2
|
Damage (@1): @2=Obrażenia (@1): @2
|
||||||
Healing: @1=Leczenie: @1
|
Healing: @1=Leczenie: @1
|
||||||
|
|
|
@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt=Cresce em blocos de grama, po
|
||||||
Flammable=Inflamável
|
Flammable=Inflamável
|
||||||
Zombie view range: -50%=Alcançe de visão do zumbi: -50%
|
Zombie view range: -50%=Alcançe de visão do zumbi: -50%
|
||||||
Skeleton view range: -50%=Alcançe de visão do esqueleto: -50%
|
Skeleton view range: -50%=Alcançe de visão do esqueleto: -50%
|
||||||
Creeper view range: -50%=Alcançe de visão do creeper: -50%
|
Stalker view range: -50%=Alcançe de visão do stalker: -50%
|
||||||
Damage: @1= Dano: @1
|
Damage: @1= Dano: @1
|
||||||
Damage (@1): @2=Dano (@1): @2
|
Damage (@1): @2=Dano (@1): @2
|
||||||
Healing: @1=Cura: @1
|
Healing: @1=Cura: @1
|
||||||
|
|
|
@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt=Растёт на дёрне,
|
||||||
Flammable=Воспламенимо
|
Flammable=Воспламенимо
|
||||||
Zombie view range: -50%=Дальность зрения зомби: -50%
|
Zombie view range: -50%=Дальность зрения зомби: -50%
|
||||||
Skeleton view range: -50%=Дальность зрения скелета: -50%
|
Skeleton view range: -50%=Дальность зрения скелета: -50%
|
||||||
Creeper view range: -50%=Дальность зрения крипера: -50%
|
Stalker view range: -50%=Дальность зрения сталкера: -50%
|
||||||
Damage: @1=Урон: @1
|
Damage: @1=Урон: @1
|
||||||
Damage (@1): @2=Урон (@1): @2
|
Damage (@1): @2=Урон (@1): @2
|
||||||
Durability: @1=Прочность: @1
|
Durability: @1=Прочность: @1
|
||||||
|
|
|
@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt=
|
||||||
Flammable=
|
Flammable=
|
||||||
Zombie view range: -50%=
|
Zombie view range: -50%=
|
||||||
Skeleton view range: -50%=
|
Skeleton view range: -50%=
|
||||||
Creeper view range: -50%=
|
Stalker view range: -50%=
|
||||||
Damage: @1=
|
Damage: @1=
|
||||||
Damage (@1): @2=
|
Damage (@1): @2=
|
||||||
Healing: @1=
|
Healing: @1=
|
||||||
|
|
|
@ -108,8 +108,8 @@ tt.register_snippet(function(itemstring)
|
||||||
return S("Zombie view range: -50%")
|
return S("Zombie view range: -50%")
|
||||||
elseif itemstring == "mcl_heads:skeleton" then
|
elseif itemstring == "mcl_heads:skeleton" then
|
||||||
return S("Skeleton view range: -50%")
|
return S("Skeleton view range: -50%")
|
||||||
elseif itemstring == "mcl_heads:creeper" then
|
elseif itemstring == "mcl_heads:stalker" then
|
||||||
return S("Creeper view range: -50%")
|
return S("Stalker view range: -50%")
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
|
@ -661,7 +661,7 @@ mesecon.register_mvps_unsticky("mcl_flowers:tulip_red")
|
||||||
mesecon.register_mvps_unsticky("mcl_flowers:tulip_white")
|
mesecon.register_mvps_unsticky("mcl_flowers:tulip_white")
|
||||||
mesecon.register_mvps_unsticky("mcl_flowers:waterlily")
|
mesecon.register_mvps_unsticky("mcl_flowers:waterlily")
|
||||||
-- Heads
|
-- Heads
|
||||||
mesecon.register_mvps_unsticky("mcl_heads:creeper")
|
mesecon.register_mvps_unsticky("mcl_heads:stalker")
|
||||||
mesecon.register_mvps_unsticky("mcl_heads:skeleton")
|
mesecon.register_mvps_unsticky("mcl_heads:skeleton")
|
||||||
mesecon.register_mvps_unsticky("mcl_heads:steve")
|
mesecon.register_mvps_unsticky("mcl_heads:steve")
|
||||||
mesecon.register_mvps_unsticky("mcl_heads:wither_skeleton")
|
mesecon.register_mvps_unsticky("mcl_heads:wither_skeleton")
|
||||||
|
|
|
@ -36,7 +36,7 @@ local patterns = {
|
||||||
["creeper"] = {
|
["creeper"] = {
|
||||||
name = N("@1 Creeper Charge"),
|
name = N("@1 Creeper Charge"),
|
||||||
type = "shapeless",
|
type = "shapeless",
|
||||||
{ e, "mcl_heads:creeper", d },
|
{ e, "mcl_heads:stalker", d },
|
||||||
},
|
},
|
||||||
["cross"] = {
|
["cross"] = {
|
||||||
name = N("@1 Saltire"),
|
name = N("@1 Saltire"),
|
||||||
|
|
|
@ -249,7 +249,7 @@ function ARROW_ENTITY.on_step(self, dtime)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Punch target object but avoid hurting enderman.
|
-- Punch target object but avoid hurting enderman.
|
||||||
if not lua or lua.name ~= "mobs_mc:enderman" then
|
if not lua or lua.name ~= "mobs_mc:rover" then
|
||||||
if not self._in_player then
|
if not self._in_player then
|
||||||
damage_particles(vector.add(pos, vector.multiply(self.object:get_velocity(), 0.1)), self._is_critical)
|
damage_particles(vector.add(pos, vector.multiply(self.object:get_velocity(), 0.1)), self._is_critical)
|
||||||
end
|
end
|
||||||
|
|
|
@ -470,7 +470,7 @@ function ARROW_ENTITY.on_step(self, dtime)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Punch target object but avoid hurting enderman.
|
-- Punch target object but avoid hurting enderman.
|
||||||
if not lua or lua.name ~= "mobs_mc:enderman" then
|
if not lua or lua.name ~= "mobs_mc:rover" then
|
||||||
if self._in_player == false then
|
if self._in_player == false then
|
||||||
damage_particles(self.object:get_pos(), self._is_critical)
|
damage_particles(self.object:get_pos(), self._is_critical)
|
||||||
end
|
end
|
||||||
|
|
|
@ -119,7 +119,7 @@ pumpkin_face_base_def.groups.non_combat_armor=1
|
||||||
pumpkin_face_base_def.groups.armor_head=1
|
pumpkin_face_base_def.groups.armor_head=1
|
||||||
pumpkin_face_base_def.groups.non_combat_armor_head=1
|
pumpkin_face_base_def.groups.non_combat_armor_head=1
|
||||||
pumpkin_face_base_def._mcl_armor_mob_range_factor = 0
|
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._mcl_armor_mob_range_mob = "mobs_mc:rover"
|
||||||
|
|
||||||
pumpkin_face_base_def._mcl_armor_element = "head"
|
pumpkin_face_base_def._mcl_armor_element = "head"
|
||||||
pumpkin_face_base_def._mcl_armor_texture = "mcl_farming_pumpkin_face.png"
|
pumpkin_face_base_def._mcl_armor_texture = "mcl_farming_pumpkin_face.png"
|
||||||
|
|
|
@ -264,11 +264,11 @@ mcl_heads.register_head{
|
||||||
}
|
}
|
||||||
|
|
||||||
mcl_heads.register_head{
|
mcl_heads.register_head{
|
||||||
name = "creeper",
|
name = "stalker",
|
||||||
texture = "mcl_heads_creeper.png",
|
texture = "mcl_heads_stalker.png",
|
||||||
description = S("Creeper Head"),
|
description = S("Stalker Head"),
|
||||||
longdesc = S("A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%."),
|
longdesc = S("A stalker head is a small decorative block which resembles the head of a stalker. It can also be worn as a helmet, which reduces the detection range of stalkers by 50%."),
|
||||||
range_mob = "mobs_mc:creeper",
|
range_mob = "mobs_mc:stalker",
|
||||||
range_factor = 0.5,
|
range_factor = 0.5,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# textdomain: mcl_heads
|
# textdomain: mcl_heads
|
||||||
Zombie Head=Zombiekopf
|
Zombie Head=Zombiekopf
|
||||||
A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Ein Zombiekopf ist ein kleiner dekorativer Block, der so wie ein Kopf eines Zombies aussieht. Er kann auch als Helm getragen werden, was den Erkennungsradius von Zombies um 50% verringert.
|
A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Ein Zombiekopf ist ein kleiner dekorativer Block, der so wie ein Kopf eines Zombies aussieht. Er kann auch als Helm getragen werden, was den Erkennungsradius von Zombies um 50% verringert.
|
||||||
Creeper Head=Creeper-Kopf
|
Stalker Head=Stalker-Kopf
|
||||||
A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=Ein Creeperkopf ist ein kleiner dekorativer Block, der so wie ein Kopf eines Creepers aussieht. Er kann auch als Helm getragen werden, was den Erkennungsradius von Creepern um 50% verringert.
|
A stalker head is a small decorative block which resembles the head of a stalker. It can also be worn as a helmet, which reduces the detection range of stalkers by 50%.=Ein Stalkerkopf ist ein kleiner dekorativer Block, der so wie ein Kopf eines Stalkers aussieht. Er kann auch als Helm getragen werden, was den Erkennungsradius von Stalkern um 50% verringert.
|
||||||
Human Head=Menschenkopf
|
Human Head=Menschenkopf
|
||||||
A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Ein Menschenkopf ist ein kleiner dekorativer Block, der so wie der Kopf eines Menschen (das heißt, einer Spielerfigur) aussieht. Er kann auch als Helm zum Spaß getragen werden, aber er bietet keinerlei Schutz.
|
A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Ein Menschenkopf ist ein kleiner dekorativer Block, der so wie der Kopf eines Menschen (das heißt, einer Spielerfigur) aussieht. Er kann auch als Helm zum Spaß getragen werden, aber er bietet keinerlei Schutz.
|
||||||
Skeleton Skull=Skelettschädel
|
Skeleton Skull=Skelettschädel
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# textdomain: mcl_heads
|
# textdomain: mcl_heads
|
||||||
Zombie Head=Cabeza de zombie
|
Zombie Head=Cabeza de zombie
|
||||||
A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet for fun, but does not offer any protection.=Una cabeza de zombie es un pequeño bloque decorativo que se asemeja a la cabeza de un zombie. También se puede usar como casco por diversión, pero no ofrece ninguna protección.
|
A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet for fun, but does not offer any protection.=Una cabeza de zombie es un pequeño bloque decorativo que se asemeja a la cabeza de un zombie. También se puede usar como casco por diversión, pero no ofrece ninguna protección.
|
||||||
Creeper Head=Cabeza de creeper
|
Stalker Head=Cabeza de stalker
|
||||||
A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet for fun, but does not offer any protection.=Una cabeza de creeper es un pequeño bloque decorativo que se asemeja a la cabeza de un creeper. También se puede usar como casco por diversión, pero no ofrece ninguna protección.
|
A stalker head is a small decorative block which resembles the head of a stalker. It can also be worn as a helmet for fun, but does not offer any protection.=Una cabeza de stalker es un pequeño bloque decorativo que se asemeja a la cabeza de un stalker. También se puede usar como casco por diversión, pero no ofrece ninguna protección.
|
||||||
Human Head=Cabeza humana
|
Human Head=Cabeza humana
|
||||||
A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Una cabeza humana es un pequeño bloque decorativo que se asemeja a la cabeza de un humano (es decir, un personaje jugador). También se puede usar como casco por diversión, pero no ofrece ninguna protección.
|
A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Una cabeza humana es un pequeño bloque decorativo que se asemeja a la cabeza de un humano (es decir, un personaje jugador). También se puede usar como casco por diversión, pero no ofrece ninguna protección.
|
||||||
Skeleton Skull=Calavera de esqueleto
|
Skeleton Skull=Calavera de esqueleto
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# textdomain: mcl_heads
|
# textdomain: mcl_heads
|
||||||
Zombie Head=Tête de Zombie
|
Zombie Head=Tête de Zombie
|
||||||
A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Une tête de zombie est un petit bloc décoratif qui ressemble à la tête d'un zombie. Il peut également être porté comme un casque, ce qui réduit la plage de détection des zombies de 50%.
|
A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Une tête de zombie est un petit bloc décoratif qui ressemble à la tête d'un zombie. Il peut également être porté comme un casque, ce qui réduit la plage de détection des zombies de 50%.
|
||||||
Creeper Head=Tête de Creeper
|
Stalker Head=Tête de Stalker
|
||||||
A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=Une tête de creepers est un petit bloc décoratif qui ressemble à la tête d'un creeper. Il peut également être porté comme un casque, ce qui réduit la plage de détection des creepers de 50%.
|
A stalker head is a small decorative block which resembles the head of a stalker. It can also be worn as a helmet, which reduces the detection range of stalkers by 50%.=Une tête de stalkers est un petit bloc décoratif qui ressemble à la tête d'un stalker. Il peut également être porté comme un casque, ce qui réduit la plage de détection des stalkers de 50%.
|
||||||
Human Head=Tête de Joueur
|
Human Head=Tête de Joueur
|
||||||
A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Une tête de joueur est un petit bloc décoratif qui ressemble à la tête d'un humain (c'est-à-dire un personnage de joueur). Il peut également être porté comme un casque pour le plaisir, mais n'offre aucune protection.
|
A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Une tête de joueur est un petit bloc décoratif qui ressemble à la tête d'un humain (c'est-à-dire un personnage de joueur). Il peut également être porté comme un casque pour le plaisir, mais n'offre aucune protection.
|
||||||
Skeleton Skull=Crâne de Squelette
|
Skeleton Skull=Crâne de Squelette
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# textdomain: mcl_heads
|
# textdomain: mcl_heads
|
||||||
Zombie Head=Głowa zombie
|
Zombie Head=Głowa zombie
|
||||||
A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Głowa zombie jest małym blokiem dekoracyjnym i przypomina głowę zombie. Może być noszona jako hełm co zmniejsza obszar wykrycia przez zombie o 50%.
|
A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Głowa zombie jest małym blokiem dekoracyjnym i przypomina głowę zombie. Może być noszona jako hełm co zmniejsza obszar wykrycia przez zombie o 50%.
|
||||||
Creeper Head=Głowa creepera
|
Stalker Head=Głowa stalkera
|
||||||
A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=Głowa creepera jest małym blokiem dekoracyjnym i przypomina głowę creepera. Może być noszona jako hełm co zmniejsza obszar wykrycia przez creepera o 50%.
|
A stalker head is a small decorative block which resembles the head of a stalker. It can also be worn as a helmet, which reduces the detection range of stalkers by 50%.=Głowa stalkera jest małym blokiem dekoracyjnym i przypomina głowę stalkera. Może być noszona jako hełm co zmniejsza obszar wykrycia przez stalkera o 50%.
|
||||||
Human Head=Głowa człowieka
|
Human Head=Głowa człowieka
|
||||||
A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Głowa człowieka jest małym blokiem dekoracyjnym i przypomina głowę człowieka. Może być noszona jako hełm dla zabawy, ale nie zapewnia żadnej dodatkowej ochrony.
|
A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Głowa człowieka jest małym blokiem dekoracyjnym i przypomina głowę człowieka. Może być noszona jako hełm dla zabawy, ale nie zapewnia żadnej dodatkowej ochrony.
|
||||||
Skeleton Skull=Głowa szkieleta
|
Skeleton Skull=Głowa szkieleta
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# textdomain: mcl_heads
|
# textdomain: mcl_heads
|
||||||
Zombie Head=Cabeça de Zumbi
|
Zombie Head=Cabeça de Zumbi
|
||||||
A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Uma cabeça de zumbi é um pequeno bloco decorativo ao qual remete a cabeça de um zumbi. Também pode ser usado como um capacete, o que reduz o alcançe de detecção dos zumbis em 50%.
|
A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Uma cabeça de zumbi é um pequeno bloco decorativo ao qual remete a cabeça de um zumbi. Também pode ser usado como um capacete, o que reduz o alcançe de detecção dos zumbis em 50%.
|
||||||
Creeper Head=Cabeça de Creeper
|
Stalker Head=Cabeça de Stalker
|
||||||
A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=Uma cabeça de creeper é um pequeno bloco decorativo ao qual remete a cabeça de um creeper. Também pode ser usado como um capacete, o que reduz o alcançe de detecção dos creepers em 50%.
|
A stalker head is a small decorative block which resembles the head of a stalker. It can also be worn as a helmet, which reduces the detection range of stalkers by 50%.=Uma cabeça de stalker é um pequeno bloco decorativo ao qual remete a cabeça de um stalker. Também pode ser usado como um capacete, o que reduz o alcançe de detecção dos stalkers em 50%.
|
||||||
Human Head=Cabeça Humana
|
Human Head=Cabeça Humana
|
||||||
A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Uma cabeça de humano é um pequeno bloco decorativo ao qual remete a cabeça de um humano (ou seja, o personagem do jogador). Também pode ser usado como um capacete por diversão, mas não oferece nenhuma proteção.
|
A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Uma cabeça de humano é um pequeno bloco decorativo ao qual remete a cabeça de um humano (ou seja, o personagem do jogador). Também pode ser usado como um capacete por diversão, mas não oferece nenhuma proteção.
|
||||||
Skeleton Skull=Cabeça de Esqueleto
|
Skeleton Skull=Cabeça de Esqueleto
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# textdomain: mcl_heads
|
# textdomain: mcl_heads
|
||||||
Zombie Head=Голова зомби
|
Zombie Head=Голова зомби
|
||||||
A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Голова зомби это небольшой декоративный блок, немного похожий на голову зомби. Его можно носить в качестве шлема, что уменьшит радиус обнаружения вас зомби на 50%.
|
A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Голова зомби это небольшой декоративный блок, немного похожий на голову зомби. Его можно носить в качестве шлема, что уменьшит радиус обнаружения вас зомби на 50%.
|
||||||
Creeper Head=Голова крипера
|
Stalker Head=Голова сталкера
|
||||||
A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=Голова крипера это небольшой декоративный блок, немного похожий на голову крипера. Его можно носить в качестве шлема, что уменьшит радиус обнаружения вас крипером на 50%.
|
A stalker head is a small decorative block which resembles the head of a stalker. It can also be worn as a helmet, which reduces the detection range of stalkers by 50%.=Голова сталкера это небольшой декоративный блок, немного похожий на голову сталкера. Его можно носить в качестве шлема, что уменьшит радиус обнаружения вас сталкером на 50%.
|
||||||
Human Head=Голова игрока
|
Human Head=Голова игрока
|
||||||
A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Голова игрока это небольшой декоративный блок, немного похожий на голову игрового персонажа. Его можно носить в качестве шлема просто для веселья, он не даёт никакой защиты.
|
A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Голова игрока это небольшой декоративный блок, немного похожий на голову игрового персонажа. Его можно носить в качестве шлема просто для веселья, он не даёт никакой защиты.
|
||||||
Skeleton Skull=Череп скелета
|
Skeleton Skull=Череп скелета
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# textdomain: mcl_heads
|
# textdomain: mcl_heads
|
||||||
Zombie Head=
|
Zombie Head=
|
||||||
A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=
|
A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=
|
||||||
Creeper Head=
|
Stalker Head=
|
||||||
A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=
|
A stalker head is a small decorative block which resembles the head of a stalker. It can also be worn as a helmet, which reduces the detection range of stalkers by 50%.=
|
||||||
Human Head=
|
Human Head=
|
||||||
A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=
|
A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=
|
||||||
Skeleton Skull=
|
Skeleton Skull=
|
||||||
|
|
|
@ -39,7 +39,7 @@ end
|
||||||
local doll_size_overrides = {
|
local doll_size_overrides = {
|
||||||
["mobs_mc:guardian"] = { x = 0.6, y = 0.6 },
|
["mobs_mc:guardian"] = { x = 0.6, y = 0.6 },
|
||||||
["mobs_mc:guardian_elder"] = { x = 0.72, y = 0.72 },
|
["mobs_mc:guardian_elder"] = { x = 0.72, y = 0.72 },
|
||||||
["mobs_mc:enderman"] = { x = 0.8, y = 0.8 },
|
["mobs_mc:rover"] = { x = 0.8, y = 0.8 },
|
||||||
["mobs_mc:iron_golem"] = { x = 0.9, y = 0.9 },
|
["mobs_mc:iron_golem"] = { x = 0.9, y = 0.9 },
|
||||||
["mobs_mc:ghast"] = { x = 1.05, y = 1.05 },
|
["mobs_mc:ghast"] = { x = 1.05, y = 1.05 },
|
||||||
["mobs_mc:wither"] = { x = 1.2, y = 1.2 },
|
["mobs_mc:wither"] = { x = 1.2, y = 1.2 },
|
||||||
|
|
|
@ -266,7 +266,7 @@ function mcl_potions.register_arrow(name, desc, color, def)
|
||||||
|
|
||||||
-- Punch target object but avoid hurting enderman.
|
-- Punch target object but avoid hurting enderman.
|
||||||
if lua then
|
if lua then
|
||||||
if lua.name ~= "mobs_mc:enderman" then
|
if lua.name ~= "mobs_mc:rover" then
|
||||||
obj:punch(self.object, 1.0, {
|
obj:punch(self.object, 1.0, {
|
||||||
full_punch_interval=1.0,
|
full_punch_interval=1.0,
|
||||||
damage_groups={fleshy=self._damage},
|
damage_groups={fleshy=self._damage},
|
||||||
|
|
|
@ -34,7 +34,7 @@ end, function(minp,maxp,blockseed)
|
||||||
table.shuffle(nn)
|
table.shuffle(nn)
|
||||||
if nn and #nn > 0 then
|
if nn and #nn > 0 then
|
||||||
for i=1,pr:next(1,math.min(5,#nn)) do
|
for i=1,pr:next(1,math.min(5,#nn)) do
|
||||||
minetest.add_entity(vector.offset(nn[i],0,1,0),"mobs_mc:enderman")
|
minetest.add_entity(vector.offset(nn[i],0,1,0),"mobs_mc:rover")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end, 15, true)
|
end, 15, true)
|
||||||
|
|
BIN
textures/mcl_heads_stalker.png
Normal file
After Width: | Height: | Size: 426 B |
BIN
textures/vl_mobs_rover.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
textures/vl_mobs_rover_face.png
Normal file
After Width: | Height: | Size: 125 B |
BIN
textures/vl_mobs_rover_face_angry.png
Normal file
After Width: | Height: | Size: 127 B |
BIN
textures/vl_mobs_stalker_overlay.png
Normal file
After Width: | Height: | Size: 233 B |
BIN
textures/vl_mobs_stalker_overlay_angry.png
Normal file
After Width: | Height: | Size: 244 B |
BIN
textures/vl_stalker_default.png
Normal file
After Width: | Height: | Size: 478 B |
BIN
textures/vl_stalker_overloaded_aura.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
|
@ -715,9 +715,9 @@ mcl_furnaces:furnace_active 149 139 133
|
||||||
mcl_grindstone:grindstone 216 216 216
|
mcl_grindstone:grindstone 216 216 216
|
||||||
|
|
||||||
# mcl_heads
|
# mcl_heads
|
||||||
mcl_heads:creeper22_5 94 115 69
|
mcl_heads:stalker22_5 94 115 69
|
||||||
mcl_heads:creeper45 94 115 69
|
mcl_heads:stalker45 94 115 69
|
||||||
mcl_heads:creeper67_5 94 115 69
|
mcl_heads:stalker67_5 94 115 69
|
||||||
mcl_heads:skeleton22_5 126 126 126
|
mcl_heads:skeleton22_5 126 126 126
|
||||||
mcl_heads:skeleton45 126 126 126
|
mcl_heads:skeleton45 126 126 126
|
||||||
mcl_heads:skeleton67_5 126 126 126
|
mcl_heads:skeleton67_5 126 126 126
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
1f
|
1f
|
||||||
Badlandach
|
Badlandach
|
||||||
biomeinfo
|
biomeinfo
|
||||||
creeper
|
stalker
|
||||||
Creeper
|
Stalker
|
||||||
creepera
|
stalkera
|
||||||
czerwienit
|
czerwienit
|
||||||
czerwienitem
|
czerwienitem
|
||||||
czerwienitowych
|
czerwienitowych
|
||||||
|
|