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
|
||||
self.timer = self.timer + dtime
|
||||
self.blinktimer = (self.blinktimer or 0) + dtime
|
||||
self:set_animation("fuse")
|
||||
|
||||
if self.blinktimer > 0.2 then
|
||||
self.blinktimer = 0
|
||||
|
|
|
@ -314,6 +314,7 @@ function mcl_mobs.register_mob(name, def)
|
|||
|
||||
return self:mob_activate(staticdata, def, dtime)
|
||||
end,
|
||||
after_activate = def.after_activate,
|
||||
attack_state = def.attack_state, -- custom attack state
|
||||
on_attack = def.on_attack, -- called after attack, useful with otherwise predefined attack states (not custom)
|
||||
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
|
||||
* Skeleton
|
||||
* Stray
|
||||
* Creeper
|
||||
* Stalker
|
||||
* Slime
|
||||
* Spider
|
||||
* Cave Spider
|
||||
* Enderman
|
||||
* Rover
|
||||
* Zombie Villager
|
||||
* Zombie Piglin
|
||||
* Wither Skeleton
|
||||
|
|
|
@ -5,7 +5,7 @@ Blaze=Lohe
|
|||
Chicken=Huhn
|
||||
Cow=Kuh
|
||||
Mooshroom=Pilzkuh
|
||||
Creeper=Creeper
|
||||
Stalker=Stalker
|
||||
Ender Dragon=Enderdrache
|
||||
Enderman=Enderman
|
||||
Endermite=Endermilbe
|
||||
|
|
|
@ -6,7 +6,7 @@ Blaze=Blaze
|
|||
Chicken=Kylling
|
||||
Cow=Ko
|
||||
Mooshroom=Svamp
|
||||
Creeper=Creeper
|
||||
Stalker=Stalker
|
||||
Ender Dragon=Enderdrage
|
||||
Enderman=Enderman
|
||||
Endermite=Endermide
|
||||
|
|
|
@ -5,7 +5,7 @@ Chicken=Pollo
|
|||
Cod=Bacalao
|
||||
Cow=Vaca
|
||||
Mooshroom=Champivaca
|
||||
Creeper=Creeper
|
||||
Stalker=Stalker
|
||||
Dolphin=Delfín
|
||||
Ender Dragon=Ender Dragon
|
||||
Enderman=Enderman
|
||||
|
|
|
@ -6,7 +6,7 @@ Blaze=Blaze
|
|||
Chicken=Poulet
|
||||
Cow=Vache
|
||||
Mooshroom=Champimeuh
|
||||
Creeper=Creeper
|
||||
Stalker=Stalker
|
||||
Ender Dragon=Ender Dragon
|
||||
Enderman=Enderman
|
||||
Endermite=Endermite
|
||||
|
|
|
@ -6,7 +6,7 @@ Blaze=Flamor
|
|||
Chicken=Polet
|
||||
Cow=Vacha
|
||||
Mooshroom=Vachairòla
|
||||
Creeper=Creeper
|
||||
Stalker=Stalker
|
||||
Ender Dragon=Dragon de Finuèit
|
||||
Enderman=Finuèairi
|
||||
Endermite=Finuèibau
|
||||
|
|
|
@ -6,7 +6,7 @@ Blaze=Blaze
|
|||
Chicken=Galinha
|
||||
Cow=Vaca
|
||||
Mooshroom=Coguvaca
|
||||
Creeper=Creeper
|
||||
Stalker=Stalker
|
||||
Ender Dragon=Dragão do Fim
|
||||
Enderman=Enderman
|
||||
Endermite=Endermite
|
||||
|
|
|
@ -6,7 +6,7 @@ Blaze=Ифрит
|
|||
Chicken=Курица
|
||||
Cow=Корова
|
||||
Mooshroom=Грибная корова
|
||||
Creeper=Крипер
|
||||
Stalker=Сталкер
|
||||
Ender Dragon=Дракон Края
|
||||
Enderman=Эндермен
|
||||
Endermite=Эндермит
|
||||
|
|
|
@ -6,7 +6,7 @@ Blaze=
|
|||
Chicken=
|
||||
Cow=
|
||||
Mooshroom=
|
||||
Creeper=
|
||||
Stalker=
|
||||
Ender Dragon=
|
||||
Enderman=
|
||||
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
|
||||
|
||||
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)
|
||||
if self and self.object then
|
||||
if not self.object:get_attach() then
|
||||
self.object:remove()
|
||||
end
|
||||
end
|
||||
end,
|
||||
glow = 50,
|
||||
})
|
||||
|
||||
local S = minetest.get_translator("mobs_mc")
|
||||
|
@ -66,142 +55,8 @@ end
|
|||
|
||||
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.
|
||||
local select_enderman_animation = function(animation_type)
|
||||
local select_rover_animation = function(animation_type)
|
||||
-- Enderman holds a block
|
||||
if animation_type == "block" then
|
||||
return {
|
||||
|
@ -254,8 +109,8 @@ local psdefs = {{
|
|||
texture = "mcl_portals_particle"..math.random(1, 5)..".png",
|
||||
}}
|
||||
|
||||
mcl_mobs.register_mob("mobs_mc:enderman", {
|
||||
description = S("Enderman"),
|
||||
mcl_mobs.register_mob("mobs_mc:rover", {
|
||||
description = S("Rover"),
|
||||
type = "monster",
|
||||
spawn_class = "passive",
|
||||
can_despawn = true,
|
||||
|
@ -267,23 +122,11 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
|||
xp_max = 5,
|
||||
collisionbox = {-0.3, -0.01, -0.3, 0.3, 2.89, 0.3},
|
||||
visual = "mesh",
|
||||
mesh = "mobs_mc_enderman.b3d",
|
||||
textures = create_enderman_textures(),
|
||||
visual_size = {x=3, y=3},
|
||||
mesh = "vl_rover.b3d",
|
||||
textures = { "vl_mobs_rover.png^vl_mobs_rover_face.png" },
|
||||
glow = 100,
|
||||
visual_size = {x=10, y=10},
|
||||
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 = {
|
||||
-- TODO: Custom war cry sound
|
||||
war_cry = "mobs_sandmonster",
|
||||
|
@ -292,8 +135,8 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
|||
random = {name="mobs_mc_enderman_random", gain=0.5},
|
||||
distance = 16,
|
||||
},
|
||||
walk_velocity = 0.2,
|
||||
run_velocity = 3.4,
|
||||
walk_velocity = 2,
|
||||
run_velocity = 4,
|
||||
damage = 7,
|
||||
reach = 2,
|
||||
particlespawners = psdefs,
|
||||
|
@ -304,7 +147,7 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
|||
max = 1,
|
||||
looting = "common"},
|
||||
},
|
||||
animation = select_enderman_animation("normal"),
|
||||
animation = select_rover_animation("normal"),
|
||||
_taken_node = "",
|
||||
can_spawn = function(pos)
|
||||
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.
|
||||
if self.state == "attack" then
|
||||
self.object:set_properties({textures={"vl_mobs_rover.png^vl_mobs_rover_face_angry.png"}})
|
||||
if self.attack then
|
||||
local target = self.attack
|
||||
local pos = target:get_pos()
|
||||
|
@ -358,6 +202,7 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
|||
end
|
||||
end
|
||||
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
|
||||
local light = minetest.get_node_light(enderpos)
|
||||
if light and light > minetest.LIGHT_MAX then
|
||||
|
@ -489,38 +334,17 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
|||
minetest.remove_node(take_pos)
|
||||
local dug = minetest.get_node_or_nil(take_pos)
|
||||
if dug and dug.name == "air" then
|
||||
local node_obj = vl_held_item.create_item_entity(take_pos, node.name)
|
||||
if node_obj then
|
||||
node_obj:set_attach(self.object, "held_node")
|
||||
self._node_obj = node_obj
|
||||
self._taken_node = node.name
|
||||
self.persistent = true
|
||||
local def = minetest.registered_nodes[self._taken_node]
|
||||
-- Update animation and texture accordingly (adds visibly carried block)
|
||||
local block_type
|
||||
-- Cube-shaped
|
||||
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"
|
||||
node_obj:set_properties({visual_size={x=0.02, y=0.02}})
|
||||
end
|
||||
self.base_texture = create_enderman_textures(block_type, self._taken_node)
|
||||
self.object:set_properties({ textures = self.base_texture })
|
||||
self.animation = select_enderman_animation("block")
|
||||
local def = minetest.registered_nodes[self._taken_node]
|
||||
self.animation = select_rover_animation("block")
|
||||
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)
|
||||
end
|
||||
end
|
||||
|
@ -542,12 +366,14 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
|||
local def = minetest.registered_nodes[self._taken_node]
|
||||
-- Update animation accordingly (removes visible block)
|
||||
self.persistent = false
|
||||
self.animation = select_enderman_animation("normal")
|
||||
self.animation = select_rover_animation("normal")
|
||||
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)
|
||||
end
|
||||
self._taken_node = ""
|
||||
self._node_obj:remove()
|
||||
self._node_obj = nil
|
||||
self._taken_node = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -645,6 +471,21 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
|||
--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 },
|
||||
water_damage = 8,
|
||||
view_range = 64,
|
||||
|
@ -652,9 +493,22 @@ mcl_mobs.register_mob("mobs_mc:enderman", {
|
|||
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
|
||||
mcl_mobs:spawn_specific(
|
||||
"mobs_mc:enderman",
|
||||
"mobs_mc:rover",
|
||||
"end",
|
||||
"ground",
|
||||
{
|
||||
|
@ -674,7 +528,7 @@ mcl_vars.mg_end_min,
|
|||
mcl_vars.mg_end_max)
|
||||
-- Overworld spawn
|
||||
mcl_mobs:spawn_specific(
|
||||
"mobs_mc:enderman",
|
||||
"mobs_mc:rover",
|
||||
"overworld",
|
||||
"ground",
|
||||
{
|
||||
|
@ -823,7 +677,7 @@ mcl_vars.mg_overworld_max)
|
|||
|
||||
-- Nether spawn (rare)
|
||||
mcl_mobs:spawn_specific(
|
||||
"mobs_mc:enderman",
|
||||
"mobs_mc:rover",
|
||||
"nether",
|
||||
"ground",
|
||||
{
|
||||
|
@ -840,7 +694,7 @@ mcl_vars.mg_nether_max)
|
|||
|
||||
-- Warped Forest spawn (common)
|
||||
mcl_mobs:spawn_specific(
|
||||
"mobs_mc:enderman",
|
||||
"mobs_mc:rover",
|
||||
"nether",
|
||||
"ground",
|
||||
{
|
||||
|
@ -855,4 +709,5 @@ mcl_vars.mg_nether_min,
|
|||
mcl_vars.mg_nether_max)
|
||||
|
||||
-- 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",},
|
||||
|
||||
-- Head
|
||||
-- TODO: Only drop if killed by charged creeper
|
||||
-- TODO: Only drop if killed by charged stalker
|
||||
{name = "mcl_heads:skeleton",
|
||||
chance = 200, -- 0.5% chance
|
||||
min = 1,
|
||||
|
|
|
@ -3,14 +3,59 @@
|
|||
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",
|
||||
spawn_class = "hostile",
|
||||
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},
|
||||
pathfinding = 1,
|
||||
visual = "mesh",
|
||||
mesh = "mobs_mc_creeper.b3d",
|
||||
head_swivel = "Head_Control",
|
||||
mesh = "vl_stalker.b3d",
|
||||
-- head_swivel = "Head_Control",
|
||||
bone_eye_height = 2.35,
|
||||
head_eye_height = 1.8;
|
||||
curiosity = 2,
|
||||
textures = {
|
||||
{"mobs_mc_creeper.png",
|
||||
{get_texture({}),
|
||||
"mobs_mc_empty.png"},
|
||||
},
|
||||
visual_size = {x=3, y=3},
|
||||
visual_size = {x=2, y=2},
|
||||
sounds = {
|
||||
attack = "tnt_ignite",
|
||||
death = "mobs_mc_creeper_death",
|
||||
|
@ -56,8 +101,8 @@ mcl_mobs.register_mob("mobs_mc:creeper", {
|
|||
allow_fuse_reset = true,
|
||||
stop_to_explode = true,
|
||||
|
||||
-- Force-ignite creeper with flint and steel and explode after 1.5 seconds.
|
||||
-- TODO: Make creeper flash after doing this as well.
|
||||
-- Force-ignite stalker with flint and steel and explode after 1.5 seconds.
|
||||
-- TODO: Make stalker flash after doing this as well.
|
||||
-- TODO: Test and debug this code.
|
||||
on_rightclick = function(self, clicker)
|
||||
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)
|
||||
end
|
||||
end
|
||||
self.object:set_properties({textures={get_texture(self)}})
|
||||
end,
|
||||
on_die = function(self, pos, cmi_cause)
|
||||
-- Drop a random music disc when killed by skeleton or stray
|
||||
|
@ -108,35 +154,31 @@ mcl_mobs.register_mob("mobs_mc:creeper", {
|
|||
looting = "common",},
|
||||
|
||||
-- Head
|
||||
-- TODO: Only drop if killed by charged creeper
|
||||
{name = "mcl_heads:creeper",
|
||||
-- TODO: Only drop if killed by charged stalker
|
||||
{name = "mcl_heads:stalker",
|
||||
chance = 200, -- 0.5%
|
||||
min = 1,
|
||||
max = 1,},
|
||||
},
|
||||
animation = {
|
||||
speed_normal = 24,
|
||||
speed_run = 48,
|
||||
speed_normal = 30,
|
||||
speed_run = 60,
|
||||
stand_start = 0,
|
||||
stand_end = 23,
|
||||
walk_start = 24,
|
||||
walk_end = 49,
|
||||
run_start = 24,
|
||||
run_end = 49,
|
||||
hurt_start = 110,
|
||||
hurt_end = 139,
|
||||
death_start = 140,
|
||||
death_end = 189,
|
||||
look_start = 50,
|
||||
look_end = 108,
|
||||
fuse_start = 49,
|
||||
fuse_end = 80,
|
||||
},
|
||||
floats = 1,
|
||||
fear_height = 4,
|
||||
view_range = 16,
|
||||
})
|
||||
|
||||
mcl_mobs.register_mob("mobs_mc:creeper_charged", {
|
||||
description = S("Charged Creeper"),
|
||||
mcl_mobs.register_mob("mobs_mc:stalker_overloaded", {
|
||||
description = S("Overloaded Stalker"),
|
||||
type = "monster",
|
||||
spawn_class = "hostile",
|
||||
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},
|
||||
pathfinding = 1,
|
||||
visual = "mesh",
|
||||
mesh = "mobs_mc_creeper.b3d",
|
||||
mesh = "vl_stalker.b3d",
|
||||
|
||||
--BOOM
|
||||
|
||||
textures = {
|
||||
{"mobs_mc_creeper.png",
|
||||
"mobs_mc_creeper_charge.png"},
|
||||
{get_texture({}),
|
||||
AURA},
|
||||
},
|
||||
visual_size = {x=3, y=3},
|
||||
use_texture_alpha = true,
|
||||
visual_size = {x=2, y=2},
|
||||
sounds = {
|
||||
attack = "tnt_ignite",
|
||||
death = "mobs_mc_creeper_death",
|
||||
|
@ -178,8 +221,8 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", {
|
|||
allow_fuse_reset = true,
|
||||
stop_to_explode = true,
|
||||
|
||||
-- Force-ignite creeper with flint and steel and explode after 1.5 seconds.
|
||||
-- TODO: Make creeper flash after doing this as well.
|
||||
-- Force-ignite stalker with flint and steel and explode after 1.5 seconds.
|
||||
-- TODO: Make stalker flash after doing this as well.
|
||||
-- TODO: Test and debug this code.
|
||||
on_rightclick = function(self, clicker)
|
||||
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)
|
||||
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,
|
||||
on_die = function(self, pos, cmi_cause)
|
||||
-- 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,
|
||||
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
|
||||
end,
|
||||
maxdrops = 2,
|
||||
|
@ -234,27 +280,23 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", {
|
|||
looting = "common",},
|
||||
|
||||
-- Head
|
||||
-- TODO: Only drop if killed by charged creeper
|
||||
{name = "mcl_heads:creeper",
|
||||
-- TODO: Only drop if killed by overloaded stalker
|
||||
{name = "mcl_heads:stalker",
|
||||
chance = 200, -- 0.5%
|
||||
min = 1,
|
||||
max = 1,},
|
||||
},
|
||||
animation = {
|
||||
speed_normal = 24,
|
||||
speed_run = 48,
|
||||
speed_normal = 30,
|
||||
speed_run = 60,
|
||||
stand_start = 0,
|
||||
stand_end = 23,
|
||||
walk_start = 24,
|
||||
walk_end = 49,
|
||||
run_start = 24,
|
||||
run_end = 49,
|
||||
hurt_start = 110,
|
||||
hurt_end = 139,
|
||||
death_start = 140,
|
||||
death_end = 189,
|
||||
look_start = 50,
|
||||
look_end = 108,
|
||||
fuse_start = 49,
|
||||
fuse_end = 80,
|
||||
},
|
||||
floats = 1,
|
||||
fear_height = 4,
|
||||
|
@ -264,8 +306,38 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", {
|
|||
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(
|
||||
"mobs_mc:creeper",
|
||||
"mobs_mc:stalker",
|
||||
"overworld",
|
||||
"ground",
|
||||
{
|
||||
|
@ -413,4 +485,6 @@ mcl_vars.mg_overworld_min,
|
|||
mcl_vars.mg_overworld_max)
|
||||
|
||||
-- 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)
|
||||
table.insert(drops_zombie, {
|
||||
-- Zombie Head
|
||||
-- TODO: Only drop if killed by charged creeper
|
||||
-- TODO: Only drop if killed by charged stalker
|
||||
name = "mcl_heads:zombie",
|
||||
chance = 200, -- 0.5%
|
||||
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 = {
|
||||
enchanting = { "table" },
|
||||
experience = { "bottle" },
|
||||
heads = { "skeleton", "zombie", "creeper", "wither_skeleton" },
|
||||
heads = { "skeleton", "zombie", "stalker", "wither_skeleton" },
|
||||
mobitems = { "rabbit", "chicken" },
|
||||
walls = {
|
||||
"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
|
||||
Zombie view range: -50%=Zombiesichtweite: -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): @2=Schaden (@1): @2
|
||||
Healing: @1=Heilung: @1
|
||||
|
|
|
@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt=Crece sobre bloques de pasto,
|
|||
Flammable=Inflamable
|
||||
Zombie view range: -50%=Rango de visión zombie: -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): @2=Daño (@1): @2
|
||||
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
|
||||
Zombie view range: -50%=Distance de vue de Zombie : -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): @2=Dégâts (@1) : @2
|
||||
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
|
||||
Zombie view range: -50%=Zasięg widzenia zombie: -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): @2=Obrażenia (@1): @2
|
||||
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
|
||||
Zombie view range: -50%=Alcançe de visão do zumbi: -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): @2=Dano (@1): @2
|
||||
Healing: @1=Cura: @1
|
||||
|
|
|
@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt=Растёт на дёрне,
|
|||
Flammable=Воспламенимо
|
||||
Zombie view range: -50%=Дальность зрения зомби: -50%
|
||||
Skeleton view range: -50%=Дальность зрения скелета: -50%
|
||||
Creeper view range: -50%=Дальность зрения крипера: -50%
|
||||
Stalker view range: -50%=Дальность зрения сталкера: -50%
|
||||
Damage: @1=Урон: @1
|
||||
Damage (@1): @2=Урон (@1): @2
|
||||
Durability: @1=Прочность: @1
|
||||
|
|
|
@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt=
|
|||
Flammable=
|
||||
Zombie view range: -50%=
|
||||
Skeleton view range: -50%=
|
||||
Creeper view range: -50%=
|
||||
Stalker view range: -50%=
|
||||
Damage: @1=
|
||||
Damage (@1): @2=
|
||||
Healing: @1=
|
||||
|
|
|
@ -108,8 +108,8 @@ tt.register_snippet(function(itemstring)
|
|||
return S("Zombie view range: -50%")
|
||||
elseif itemstring == "mcl_heads:skeleton" then
|
||||
return S("Skeleton view range: -50%")
|
||||
elseif itemstring == "mcl_heads:creeper" then
|
||||
return S("Creeper view range: -50%")
|
||||
elseif itemstring == "mcl_heads:stalker" then
|
||||
return S("Stalker view range: -50%")
|
||||
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:waterlily")
|
||||
-- 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:steve")
|
||||
mesecon.register_mvps_unsticky("mcl_heads:wither_skeleton")
|
||||
|
|
|
@ -36,7 +36,7 @@ local patterns = {
|
|||
["creeper"] = {
|
||||
name = N("@1 Creeper Charge"),
|
||||
type = "shapeless",
|
||||
{ e, "mcl_heads:creeper", d },
|
||||
{ e, "mcl_heads:stalker", d },
|
||||
},
|
||||
["cross"] = {
|
||||
name = N("@1 Saltire"),
|
||||
|
|
|
@ -249,7 +249,7 @@ function ARROW_ENTITY.on_step(self, dtime)
|
|||
end
|
||||
|
||||
-- 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
|
||||
damage_particles(vector.add(pos, vector.multiply(self.object:get_velocity(), 0.1)), self._is_critical)
|
||||
end
|
||||
|
|
|
@ -470,7 +470,7 @@ function ARROW_ENTITY.on_step(self, dtime)
|
|||
end
|
||||
|
||||
-- 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
|
||||
damage_particles(self.object:get_pos(), self._is_critical)
|
||||
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.non_combat_armor_head=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._mcl_armor_mob_range_mob = "mobs_mc:rover"
|
||||
|
||||
pumpkin_face_base_def._mcl_armor_element = "head"
|
||||
pumpkin_face_base_def._mcl_armor_texture = "mcl_farming_pumpkin_face.png"
|
||||
|
|
|
@ -264,11 +264,11 @@ mcl_heads.register_head{
|
|||
}
|
||||
|
||||
mcl_heads.register_head{
|
||||
name = "creeper",
|
||||
texture = "mcl_heads_creeper.png",
|
||||
description = S("Creeper 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%."),
|
||||
range_mob = "mobs_mc:creeper",
|
||||
name = "stalker",
|
||||
texture = "mcl_heads_stalker.png",
|
||||
description = S("Stalker Head"),
|
||||
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:stalker",
|
||||
range_factor = 0.5,
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# textdomain: mcl_heads
|
||||
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.
|
||||
Creeper Head=Creeper-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.
|
||||
Stalker Head=Stalker-Kopf
|
||||
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
|
||||
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
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# textdomain: mcl_heads
|
||||
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.
|
||||
Creeper Head=Cabeza de creeper
|
||||
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.
|
||||
Stalker Head=Cabeza de stalker
|
||||
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
|
||||
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
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# textdomain: mcl_heads
|
||||
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%.
|
||||
Creeper Head=Tête de Creeper
|
||||
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%.
|
||||
Stalker Head=Tête de Stalker
|
||||
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
|
||||
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
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# textdomain: mcl_heads
|
||||
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%.
|
||||
Creeper Head=Głowa creepera
|
||||
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%.
|
||||
Stalker Head=Głowa stalkera
|
||||
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
|
||||
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
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# textdomain: mcl_heads
|
||||
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%.
|
||||
Creeper Head=Cabeça de Creeper
|
||||
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%.
|
||||
Stalker Head=Cabeça de Stalker
|
||||
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
|
||||
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
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# textdomain: mcl_heads
|
||||
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%.
|
||||
Creeper 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%.
|
||||
Stalker Head=Голова сталкера
|
||||
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=Голова игрока
|
||||
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=Череп скелета
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# textdomain: mcl_heads
|
||||
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%.=
|
||||
Creeper 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%.=
|
||||
Stalker Head=
|
||||
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=
|
||||
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=
|
||||
|
|
|
@ -39,7 +39,7 @@ end
|
|||
local doll_size_overrides = {
|
||||
["mobs_mc:guardian"] = { x = 0.6, y = 0.6 },
|
||||
["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:ghast"] = { x = 1.05, y = 1.05 },
|
||||
["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.
|
||||
if lua then
|
||||
if lua.name ~= "mobs_mc:enderman" then
|
||||
if lua.name ~= "mobs_mc:rover" then
|
||||
obj:punch(self.object, 1.0, {
|
||||
full_punch_interval=1.0,
|
||||
damage_groups={fleshy=self._damage},
|
||||
|
|
|
@ -34,7 +34,7 @@ end, function(minp,maxp,blockseed)
|
|||
table.shuffle(nn)
|
||||
if nn and #nn > 0 then
|
||||
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, 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_heads
|
||||
mcl_heads:creeper22_5 94 115 69
|
||||
mcl_heads:creeper45 94 115 69
|
||||
mcl_heads:creeper67_5 94 115 69
|
||||
mcl_heads:stalker22_5 94 115 69
|
||||
mcl_heads:stalker45 94 115 69
|
||||
mcl_heads:stalker67_5 94 115 69
|
||||
mcl_heads:skeleton22_5 126 126 126
|
||||
mcl_heads:skeleton45 126 126 126
|
||||
mcl_heads:skeleton67_5 126 126 126
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
1f
|
||||
Badlandach
|
||||
biomeinfo
|
||||
creeper
|
||||
Creeper
|
||||
creepera
|
||||
stalker
|
||||
Stalker
|
||||
stalkera
|
||||
czerwienit
|
||||
czerwienitem
|
||||
czerwienitowych
|
||||
|
|