Add files via upload
commit
dc1f2e227b
|
@ -0,0 +1,30 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2021 Skandarella
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
|
||||
Lincense for original Code (mobs redo + mobs_animal + mob_horse + mobs_npc): (MIT) Copyright (c) 2014 Krupnov Pavel and 2016 TenPlus1
|
||||
|
||||
Modified Code by Liil/Wilhelmine/Skandarella (c) 2021
|
||||
Textures, Models and Animation by Liil/Wilhelmine/Skandarella under (MIT) License (c) 2021
|
||||
|
||||
Human Sounds by Liil/Wilhelmine/Skandarella. Animal Sounds + Environment are from freesound.org under Creative Commons License.
|
||||
Thanks to Roboroo, www-Bonson, Mixmasterdylan, Jarl Fenrir, Mafon2, Hamface, InspectorJ, Breviceps, Starcat 322 and Roman cgr!
|
|
@ -0,0 +1,65 @@
|
|||
minetest.register_node("nativevillages:sledge", {
|
||||
description = "Sledge",
|
||||
visual_scale = 1,
|
||||
mesh = "Sledge.b3d",
|
||||
tiles = {"texturesledge.png"},
|
||||
inventory_image = "asledge.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 3},
|
||||
drawtype = "mesh",
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -1.3, 0.5, 0.5, 1.3},
|
||||
--[[{-0.5, -0.5, -1.3, 0.5, 0.5, 1.3},
|
||||
{-0.5, -0.5, -1.3, 0.5, 0.5, 1.3}]]
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -1.3, 0.5, 0.5, 1.3}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "default:bronzeblock",
|
||||
recipe = "nativevillages:sledge",
|
||||
})
|
||||
|
||||
minetest.register_node("nativevillages:blanket", {
|
||||
description = "Blanket",
|
||||
visual_scale = 1,
|
||||
mesh = "Blanket.b3d",
|
||||
tiles = {"textureblanket.png"},
|
||||
inventory_image = "ablanket.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 3},
|
||||
drawtype = "mesh",
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.45, 0.5},
|
||||
--[[{-0.5, -0.5, -0.5, 0.5, -0.45, 0.5},
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.45, 0.5}]]
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.45, 0.5}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mobs:leather",
|
||||
recipe = "nativevillages:blanket",
|
||||
})
|
|
@ -0,0 +1,714 @@
|
|||
mobs:register_mob("nativevillages:icedog", {
|
||||
stepheight = 1,
|
||||
type = "animal",
|
||||
passive = false,
|
||||
attack_type = "dogfight",
|
||||
group_attack = true,
|
||||
owner_loyal = true,
|
||||
attack_npcs = false,
|
||||
reach = 2,
|
||||
damage = 6,
|
||||
hp_min = 35,
|
||||
hp_max = 55,
|
||||
armor = 100,
|
||||
collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.95, 0.5},
|
||||
visual = "mesh",
|
||||
mesh = "Icedog.b3d",
|
||||
textures = {
|
||||
{"textureicedog.png"},
|
||||
{"textureicedog2.png"},
|
||||
{"textureicedog3.png"},
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_dog2",
|
||||
attack = "nativevillages_dog",
|
||||
damage = "nativevillages_dog4",
|
||||
death = "nativevillages_dog5",
|
||||
},
|
||||
walk_velocity = 1,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
jump_height = 3,
|
||||
pushable = true,
|
||||
follow = {"mobs:meat_raw", "people:dogfood", "people:dogfood_cooked"},
|
||||
view_range = 6,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 2,
|
||||
lava_damage = 5,
|
||||
light_damage = 0,
|
||||
fear_height = 2,
|
||||
animation = {
|
||||
speed_normal = 80,
|
||||
stand_speed = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
stand2_start = 100,
|
||||
stand2_end = 200,
|
||||
walk_start = 200,
|
||||
walk_end = 300,
|
||||
punch_start = 300,
|
||||
punch_end = 400,
|
||||
|
||||
die_start = 1, -- we dont have a specific death animation so we will
|
||||
die_end = 2, -- re-use 2 standing frames at a speed of 1 fps and
|
||||
die_speed = 1, -- have mob rotate when dying.
|
||||
die_loop = false,
|
||||
die_rotate = true,
|
||||
},
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) then return end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:icedog",
|
||||
nodes = {"default:snowblock"},
|
||||
neighbors = {"nativevillages:sledge"},
|
||||
min_light = 14,
|
||||
interval = 60,
|
||||
chance = 8000, -- 15000
|
||||
active_object_count = 3,
|
||||
min_height = 1,
|
||||
max_height = 80,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:icedog", ("Ice Dog"), "aicedog.png")
|
||||
|
||||
|
||||
mobs:alias_mob("nativevillages:icedog", "nativevillages:icedog") -- compatibility
|
||||
|
||||
mobs.icesledgetrader_drops = {
|
||||
"nativevillages:sledgewithdog", "nativevillages:icedog"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:icesledgetrader", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 40,
|
||||
hp_max = 80,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Icesledgetrader.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"textureicesledgetrader.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_icevillagermale2",
|
||||
random = "nativevillages_icevillagermale",
|
||||
damage = "nativevillages_icevillagermale4",
|
||||
death = "nativevillages_icevillagermale3",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:sledge",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.icesledgetrader_drops
|
||||
if item:get_name() == "default:steel_ingot" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.icesledgetrader_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Trader dropped you an item for steel!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("NPC stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("NPC will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:icesledgetrader",
|
||||
nodes = {"default:snowblock"},
|
||||
neighbors = {"nativevillages:sledge"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 1,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:icesledgetrader", ("Sledge Trader"), "aicesledgetrader.png")
|
||||
|
||||
mobs.icevillagerfemale_drops = {
|
||||
"mobs:meat", "mobs:leather", "wool:brown", "wool:white"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:icevillagerfemale", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 1,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 30,
|
||||
hp_max = 60,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Icevillagerfemale.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"textureicevillagerfemale.png"},
|
||||
|
||||
},
|
||||
child_texture = {
|
||||
{"textureicevillagerfemalebaby.png"},
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_icevillagerfemale2",
|
||||
random = "nativevillages_icevillagerfemale",
|
||||
damage = "nativevillages_icevillagerfemale4",
|
||||
death = "nativevillages_icevillagerfemale3",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:blanket",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.icevillagerfemale_drops
|
||||
if item:get_name() == "default:iron_lump" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.icevillagerfemale_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Icelander dropped you an item for iron!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Icelander stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Icelander will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:icevillagerfemale",
|
||||
nodes = {"default:snowblock", "wool:brown"},
|
||||
neighbors = {"nativevillages:blanket"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 2,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:icevillagerfemale", ("Female Icelander"), "aicevillagerfemale.png")
|
||||
|
||||
mobs.icevillagermale_drops = {
|
||||
"mobs:meat", "mobs:leather", "wool:brown", "wool:white"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:icevillagermale", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 30,
|
||||
hp_max = 70,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Icevillagermale.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"textureicevillagermale.png"},
|
||||
|
||||
},
|
||||
child_texture = {
|
||||
{"textureicevillagermalebaby.png"},
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_icevillagermale2",
|
||||
random = "nativevillages_icevillagermale",
|
||||
damage = "nativevillages_icevillagermale4",
|
||||
death = "nativevillages_icevillagermale3",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:blanket",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.icevillagermale_drops
|
||||
if item:get_name() == "default:iron_lump" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.icevillagermale_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Icelander dropped you an item for iron!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Icelander stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Icelander will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:icevillagermale",
|
||||
nodes = {"default:snowblock", "wool:brown"},
|
||||
neighbors = {"nativevillages:blanket"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 2,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:icevillagermale", ("Male Icelander"), "aicevillagermale.png")
|
||||
|
||||
|
||||
-- Load support for intllib.
|
||||
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||
local S = minetest.get_translator and minetest.get_translator("nativevillages") or
|
||||
dofile(MP .. "/intllib.lua")
|
||||
|
||||
-- 0.4.17 or 5.0 check
|
||||
local y_off = 20
|
||||
if minetest.features.object_independent_selectionbox then
|
||||
y_off = 10
|
||||
end
|
||||
|
||||
-- horse shoes (speed, jump, break, overlay texture)
|
||||
local shoes = {
|
||||
["people:horseshoe_steel"] = {7, 4, 2, "people_horseshoe_steelo.png"},
|
||||
["people:horseshoe_bronze"] = {7, 4, 4, "people_horseshoe_bronzeo.png"},
|
||||
["people:horseshoe_mese"] = {9, 5, 8, "people_horseshoe_meseo.png"},
|
||||
["people:horseshoe_diamond"] = {10, 6, 6, "people_horseshoe_diamondo.png"}
|
||||
}
|
||||
|
||||
-- rideable sledge
|
||||
mobs:register_mob("nativevillages:sledgewithdog", {
|
||||
type = "animal",
|
||||
visual = "mesh",
|
||||
visual_size = {x = 1, y = 1},
|
||||
mesh = "Sledgewithdog.b3d",
|
||||
collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.25, 0.4},
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
run_speed = 125,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
stand2_start = 200,
|
||||
stand2_end = 300,
|
||||
walk_speed = 85,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
run_start = 100,
|
||||
run_end = 200,
|
||||
},
|
||||
textures = {
|
||||
{"texturesledgewithdog.png"},
|
||||
|
||||
},
|
||||
fear_height = 3,
|
||||
runaway = true,
|
||||
fly = false,
|
||||
walk_chance = 0.1,
|
||||
walk_velocity = 1.5,
|
||||
view_range = 10,
|
||||
follow = {"mobs:meat_raw", "people:dogfood", "people:dogfood_cooked"},
|
||||
passive = true,
|
||||
hp_min = 100,
|
||||
hp_max = 250,
|
||||
armor = 100,
|
||||
lava_damage = 5,
|
||||
fall_damage = 5,
|
||||
water_damage = 1,
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_dog2",
|
||||
attack = "nativevillages_dog",
|
||||
damage = "nativevillages_dog4",
|
||||
death = "nativevillages_dog5",
|
||||
},
|
||||
drops = {
|
||||
{name = "mobs:leather", chance = 1, min = 0, max = 2}
|
||||
},
|
||||
|
||||
do_custom = function(self, dtime)
|
||||
|
||||
-- set needed values if not already present
|
||||
if not self.v2 then
|
||||
self.v2 = 0
|
||||
self.max_speed_forward = 7
|
||||
self.max_speed_reverse = 2
|
||||
self.accel = 6
|
||||
self.terrain_type = 3
|
||||
self.driver_attach_at = {x = 0, y = 6, z = -17}
|
||||
self.driver_eye_offset = {x = 0, y = 5, z = -14}
|
||||
end
|
||||
|
||||
-- if driver present allow control of horse
|
||||
if self.driver then
|
||||
|
||||
mobs.drive(self, "walk", "stand", false, dtime)
|
||||
|
||||
return false -- skip rest of mob functions
|
||||
end
|
||||
|
||||
return true
|
||||
end,
|
||||
|
||||
on_die = function(self, pos)
|
||||
|
||||
-- drop saddle when horse is killed while riding
|
||||
-- also detach from horse properly
|
||||
if self.driver then
|
||||
|
||||
minetest.add_item(pos, "mobs:saddle")
|
||||
|
||||
mobs.detach(self.driver, {x = 1, y = 0, z = 1})
|
||||
|
||||
self.saddle = nil
|
||||
end
|
||||
|
||||
-- drop any horseshoes added
|
||||
if self.shoed then
|
||||
minetest.add_item(pos, self.shoed)
|
||||
end
|
||||
|
||||
end,
|
||||
|
||||
do_punch = function(self, hitter)
|
||||
|
||||
-- don't cut the branch you're... ah, that's not about that
|
||||
if hitter ~= self.driver then
|
||||
return true
|
||||
end
|
||||
end,
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- make sure player is clicking
|
||||
if not clicker or not clicker:is_player() then
|
||||
return
|
||||
end
|
||||
|
||||
-- feed, tame or heal horse
|
||||
if mobs:feed_tame(self, clicker, 10, true, true) then
|
||||
return
|
||||
end
|
||||
|
||||
-- applying protection rune
|
||||
if mobs:protect(self, clicker) then
|
||||
return
|
||||
end
|
||||
|
||||
local player_name = clicker:get_player_name()
|
||||
|
||||
-- make sure tamed horse is being clicked by owner only
|
||||
if self.tamed and self.owner == player_name then
|
||||
|
||||
local inv = clicker:get_inventory()
|
||||
local tool = clicker:get_wielded_item()
|
||||
local item = tool:get_name()
|
||||
|
||||
-- detatch player already riding horse
|
||||
if self.driver and clicker == self.driver then
|
||||
|
||||
mobs.detach(clicker, {x = 1, y = 0, z = 1})
|
||||
|
||||
-- add saddle back to inventory
|
||||
if inv:room_for_item("main", "mobs:saddle") then
|
||||
inv:add_item("main", "mobs:saddle")
|
||||
else
|
||||
minetest.add_item(clicker:get_pos(), "mobs:saddle")
|
||||
end
|
||||
|
||||
self.saddle = nil
|
||||
|
||||
-- attach player to horse
|
||||
elseif (not self.driver and not self.child
|
||||
and clicker:get_wielded_item():get_name() == "mobs:saddle")
|
||||
or self.saddle then
|
||||
|
||||
self.object:set_properties({stepheight = 1.1})
|
||||
mobs.attach(self, clicker)
|
||||
|
||||
-- take saddle from inventory
|
||||
if not self.saddle then
|
||||
inv:remove_item("main", "mobs:saddle")
|
||||
end
|
||||
|
||||
self.saddle = true
|
||||
end
|
||||
|
||||
-- apply horseshoes
|
||||
if item:find("people:horseshoe") then
|
||||
|
||||
-- drop any existing shoes
|
||||
if self.shoed then
|
||||
minetest.add_item(self.object:get_pos(), self.shoed)
|
||||
end
|
||||
|
||||
local speed = shoes[item][1]
|
||||
local jump = shoes[item][2]
|
||||
local reverse = shoes[item][3]
|
||||
local overlay = shoes[item][4]
|
||||
|
||||
self.max_speed_forward = speed
|
||||
self.jump_height = jump
|
||||
self.max_speed_reverse = reverse
|
||||
self.accel = speed
|
||||
self.shoed = item
|
||||
|
||||
-- apply horseshoe overlay to current horse texture
|
||||
if overlay then
|
||||
self.texture_mods = "^" .. overlay
|
||||
self.object:set_texture_mod(self.texture_mods)
|
||||
end
|
||||
|
||||
-- show horse speed and jump stats with shoes fitted
|
||||
minetest.chat_send_player(player_name,
|
||||
S("Horse shoes fitted -")
|
||||
.. S(" speed: ") .. speed
|
||||
.. S(" , jump height: ") .. jump
|
||||
.. S(" , stop speed: ") .. reverse)
|
||||
|
||||
tool:take_item()
|
||||
|
||||
clicker:set_wielded_item(tool)
|
||||
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
-- used to capture horse with magic lasso
|
||||
mobs:capture_mob(self, clicker, 0, 0, 80, false, nil)
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:sledgewithdog", S("Sledge with Dog"), "asledwithdog.png")
|
||||
|
|
@ -0,0 +1,844 @@
|
|||
mobs:register_mob("nativevillages:tamecatfish", {
|
||||
stepheight = 1,
|
||||
type = "animal",
|
||||
passive = true,
|
||||
attack_type = "dogfight",
|
||||
group_attack = true,
|
||||
owner_loyal = true,
|
||||
attack_npcs = true,
|
||||
reach = 2,
|
||||
damage = 1,
|
||||
hp_min = 5,
|
||||
hp_max = 55,
|
||||
armor = 100,
|
||||
collisionbox = {-0.4, -0.01, -0.4, 0.4, 0.5, 0.4},
|
||||
visual = "mesh",
|
||||
mesh = "Lakecatfish.b3d",
|
||||
textures = {
|
||||
{"texturecatfish1.png"},
|
||||
{"texturecatfish2.png"},
|
||||
{"texturecatfish3.png"},
|
||||
{"texturecatfish4.png"},
|
||||
{"texturecatfish5.png"},
|
||||
{"texturecatfish6.png"},
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
},
|
||||
walk_velocity = 1,
|
||||
run_velocity = 2,
|
||||
fly = true,
|
||||
fly_in = "default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing",
|
||||
fall_speed = 0,
|
||||
jump = true,
|
||||
jump_height = 0,
|
||||
pushable = true,
|
||||
follow = {
|
||||
"ethereal:worm", "seaweed", "fishing:bait_worm",
|
||||
"default:grass", "farming:cucumber", "farming:cabbage", "animalworld:ant", "animalworld:termite", "animalworld:fishfood"
|
||||
},
|
||||
view_range = 6,
|
||||
drops = {
|
||||
{name = "nativevillages:catfish_raw", chance = 1, min = 1, max = 3},
|
||||
},
|
||||
water_damage = 0,
|
||||
air_damage = 1,
|
||||
lava_damage = 5,
|
||||
light_damage = 0,
|
||||
fear_height = 2,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 200,
|
||||
stand_end = 300,
|
||||
fly_start = 0,
|
||||
fly_end = 100,
|
||||
fly2_start = 100,
|
||||
fly2_end = 200,
|
||||
|
||||
|
||||
die_start = 1, -- we dont have a specific death animation so we will
|
||||
die_end = 2, -- re-use 2 standing frames at a speed of 1 fps and
|
||||
die_speed = 1, -- have mob rotate when dying.
|
||||
die_loop = false,
|
||||
die_rotate = true,
|
||||
},
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) then return end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:tamecatfish", ("Domesticated Catfish"), "alakecatfish.png")
|
||||
|
||||
|
||||
mobs:alias_mob("nativevillages:tamecatfish", "nativevillages:tamecatfish") -- compatibility
|
||||
|
||||
|
||||
-- raw catfish
|
||||
minetest.register_craftitem(":nativevillages:catfish_raw", {
|
||||
description = ("Raw Catfish"),
|
||||
inventory_image = "nativevillages_catfish_raw.png",
|
||||
on_use = minetest.item_eat(4),
|
||||
groups = {food_meat_raw = 1, flammable = 2},
|
||||
})
|
||||
|
||||
-- cooked catfish
|
||||
minetest.register_craftitem(":nativevillages:catfish_cooked", {
|
||||
description = ("Cooked Catfish"),
|
||||
inventory_image = "nativevillages_catfish_cooked.png",
|
||||
on_use = minetest.item_eat(8),
|
||||
groups = {food_meat = 1, flammable = 2},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "nativevillages:catfish_cooked",
|
||||
recipe = "nativevillages:catfish_raw",
|
||||
cooktime = 2,
|
||||
})
|
||||
|
||||
|
||||
local S = mobs.intllib
|
||||
|
||||
mobs:register_mob("nativevillages:zombietame", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
attack_type = "dogfight",
|
||||
group_attack = true,
|
||||
owner_loyal = true,
|
||||
attack_npcs = false,
|
||||
reach = 2,
|
||||
damage = 5,
|
||||
hp_min = 55,
|
||||
hp_max = 95,
|
||||
armor = 100,
|
||||
attacks_monsters = true,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Zombie2.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturezombietame.png"},
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_tamedzombie2",
|
||||
random = "nativevillages_tamedzombie",
|
||||
damage = "nativevillages_tamedzombie3",
|
||||
death = "nativevillages_tamedzombie4",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 2,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {"nativevillages:driedhumanmeat"},
|
||||
view_range = 20,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 60,
|
||||
stand_speed = 50,
|
||||
stand_start = 300,
|
||||
stand_end = 400,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
walk2_start = 200,
|
||||
walk2_end = 300,
|
||||
punch_start = 0,
|
||||
punch_end = 100,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, S("Zombie stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, S("Zombie will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:zombietame", S("Tamed Zombie"), "azombietame.png" )
|
||||
|
||||
mobs:register_mob("nativevillages:domesticcow", {
|
||||
type = "animal",
|
||||
passive = false,
|
||||
attack_type = "dogfight",
|
||||
attack_npcs = false,
|
||||
group_attack = true,
|
||||
reach = 2,
|
||||
damage = 4,
|
||||
hp_min = 5,
|
||||
hp_max = 55,
|
||||
armor = 100,
|
||||
collisionbox = {-0.6, -0.01, -0.4, 0.6, 1.2, 0.4},
|
||||
visual = "mesh",
|
||||
mesh = "Grasslandcow.b3d",
|
||||
textures = {
|
||||
{"texturegrasslandcow.png"},
|
||||
{"texturegrasslandcow2.png"},
|
||||
{"texturegrasslandcow3.png"},
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_cow",
|
||||
attack = "nativevillages_cow2",
|
||||
damage = "nativevillages_cow3",
|
||||
},
|
||||
walk_velocity = 1,
|
||||
run_velocity = 2,
|
||||
jump = true,
|
||||
jump_height = 6,
|
||||
pushable = true,
|
||||
drops = {
|
||||
{name = "mobs:meat_raw", chance = 1, min = 1, max = 3},
|
||||
{name = "mobs:leather", chance = 1, min = 0, max = 2},
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 5,
|
||||
light_damage = 0,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
stand2_start = 100,
|
||||
stand2_end = 200,
|
||||
walk_start = 200,
|
||||
walk_end = 300,
|
||||
punch_start = 300,
|
||||
punch_end = 400,
|
||||
|
||||
|
||||
die_start = 1, -- we dont have a specific death animation so we will
|
||||
die_end = 2, -- re-use 2 standing frames at a speed of 1 fps and
|
||||
die_speed = 1, -- have mob rotate when dying.
|
||||
die_loop = false,
|
||||
die_rotate = true,
|
||||
},
|
||||
follow = {
|
||||
"farming:wheat", "default:grass_1", "farming:barley",
|
||||
"farming:oat", "farming:rye", "farming:carrot", "farming:beans", "farming:lettuce"
|
||||
},
|
||||
view_range = 8,
|
||||
replace_rate = 10,
|
||||
replace_what = {
|
||||
{"group:grass", "air", 0},
|
||||
{"default:dirt_with_grass", "default:dirt", -1}
|
||||
},
|
||||
-- stay_near = {"farming:straw", "group:grass"}, 10},
|
||||
fear_height = 2,
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed or tame
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then
|
||||
|
||||
-- if fed 7x wheat or grass then cow can be milked again
|
||||
if self.food and self.food > 6 then
|
||||
self.gotten = false
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) then return end
|
||||
|
||||
local tool = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- milk cow with empty bucket
|
||||
if tool:get_name() == "bucket:bucket_empty" then
|
||||
|
||||
--if self.gotten == true
|
||||
if self.child == true then
|
||||
return
|
||||
end
|
||||
|
||||
if self.gotten == true then
|
||||
minetest.chat_send_player(name,
|
||||
("Cow already milked!"))
|
||||
return
|
||||
end
|
||||
|
||||
local inv = clicker:get_inventory()
|
||||
|
||||
tool:take_item()
|
||||
clicker:set_wielded_item(tool)
|
||||
|
||||
if inv:room_for_item("main", {name = "nativevillages:bucket_milk"}) then
|
||||
clicker:get_inventory():add_item("main", "nativevillages:bucket_milk")
|
||||
else
|
||||
local pos = self.object:get_pos()
|
||||
pos.y = pos.y + 0.5
|
||||
minetest.add_item(pos, {name = "nativevillages:bucket_milk"})
|
||||
end
|
||||
|
||||
self.gotten = true -- milked
|
||||
|
||||
return
|
||||
end
|
||||
end,
|
||||
|
||||
on_replace = function(self, pos, oldnode, newnode)
|
||||
|
||||
self.food = (self.food or 0) + 1
|
||||
|
||||
-- if cow replaces 8x grass then it can be milked again
|
||||
if self.food >= 8 then
|
||||
self.food = 0
|
||||
self.gotten = false
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:domesticcow", ("Domesticated Cow"), "agrasslandcow.png")
|
||||
|
||||
|
||||
mobs:alias_mob("nativevillages:domesticcow", "nativevillages:domesticcow") -- compatibility
|
||||
|
||||
|
||||
-- bucket of milk
|
||||
minetest.register_craftitem(":nativevillages:bucket_milk", {
|
||||
description = ("Bucket of Milk"),
|
||||
inventory_image = "nativevillages_bucket_milk.png",
|
||||
stack_max = 1,
|
||||
on_use = minetest.item_eat(8, "bucket:bucket_empty"),
|
||||
groups = {food_milk = 1, flammable = 3, drink = 1},
|
||||
})
|
||||
|
||||
-- glass of milk
|
||||
minetest.register_craftitem(":mobs:glass_milk", {
|
||||
description = ("Glass of Milk"),
|
||||
inventory_image = "mobs_glass_milk.png",
|
||||
on_use = minetest.item_eat(2, "vessels:drinking_glass"),
|
||||
groups = {food_milk_glass = 1, flammable = 3, vessel = 1, drink = 1},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "mobs:glass_milk 4",
|
||||
recipe = {
|
||||
"vessels:drinking_glass", "vessels:drinking_glass",
|
||||
"vessels:drinking_glass", "vessels:drinking_glass",
|
||||
"nativevillages:bucket_milk"
|
||||
},
|
||||
replacements = { {"nativevillages:bucket_milk", "bucket:bucket_empty"} }
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "nativevillages:bucket_milk",
|
||||
recipe = {
|
||||
"group:food_milk_glass", "group:food_milk_glass",
|
||||
"group:food_milk_glass", "group:food_milk_glass",
|
||||
"bucket:bucket_empty"
|
||||
},
|
||||
replacements = {
|
||||
{"group:food_milk_glass", "vessels:drinking_glass 4"},
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
-- butter
|
||||
minetest.register_craftitem(":nativevillages:butter", {
|
||||
description = ("Butter"),
|
||||
inventory_image = "nativevillages_butter.png",
|
||||
on_use = minetest.item_eat(1),
|
||||
groups = {food_butter = 1, flammable = 2},
|
||||
})
|
||||
|
||||
if minetest.get_modpath("farming") and farming and farming.mod then
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "nativevillages:butter",
|
||||
recipe = {"nativevillages:bucket_milk", "farming:salt"},
|
||||
replacements = {{ "nativevillages:bucket_milk", "bucket:bucket_empty"}}
|
||||
})
|
||||
else -- some saplings are high in sodium so makes a good replacement item
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "nativevillages:butter",
|
||||
recipe = {"nativevillages:bucket_milk", "default:sapling"},
|
||||
replacements = {{ "nativevillages:bucket_milk", "bucket:bucket_empty"}}
|
||||
})
|
||||
end
|
||||
|
||||
-- cheese wedge
|
||||
minetest.register_craftitem(":nativevillages:cheese", {
|
||||
description = ("Mozzarella Cheese"),
|
||||
inventory_image = "nativevillages_cheese.png",
|
||||
on_use = minetest.item_eat(4),
|
||||
groups = {food_cheese = 1, flammable = 2},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "nativevillages:cheese",
|
||||
recipe = "nativevillages:bucket_milk",
|
||||
cooktime = 5,
|
||||
replacements = {{ "nativevillages:bucket_milk", "bucket:bucket_empty"}}
|
||||
})
|
||||
|
||||
-- cheese block
|
||||
minetest.register_node(":nativevillages:cheeseblock", {
|
||||
description = ("Mozzarella Cheese Block"),
|
||||
tiles = {"nativevillages_cheeseblock.png"},
|
||||
is_ground_content = false,
|
||||
groups = {crumbly = 3},
|
||||
sounds = default.node_sound_dirt_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "nativevillages:cheeseblock",
|
||||
recipe = {
|
||||
{"nativevillages:cheese", "nativevillages:cheese", "nativevillages:cheese"},
|
||||
{"nativevillages:cheese", "nativevillages:cheese", "nativevillages:cheese"},
|
||||
{"nativevillages:cheese", "nativevillages:cheese", "nativevillages:cheese"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "nativevillages:cheese 9",
|
||||
recipe = {
|
||||
{"nativevillages:cheeseblock"},
|
||||
}
|
||||
})
|
||||
|
||||
mobs:register_mob("nativevillages:desertchickentame", {
|
||||
stepheight = 1,
|
||||
type = "animal",
|
||||
passive = true,
|
||||
attack_type = "dogfight",
|
||||
group_attack = false,
|
||||
owner_loyal = true,
|
||||
attack_npcs = false,
|
||||
reach = 2,
|
||||
damage = 1,
|
||||
hp_min = 10,
|
||||
hp_max = 25,
|
||||
armor = 100,
|
||||
collisionbox = {-0.4, -0.01, -0.3, 0.4, 0.8, 0.4},
|
||||
visual = "mesh",
|
||||
mesh = "Desertchicken.b3d",
|
||||
textures = {
|
||||
{"texturedesertchicken.png"},
|
||||
|
||||
},
|
||||
child_texture = {
|
||||
{"desertchicken.png"},
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_chicken",
|
||||
damage = "nativevillages_chicken2",
|
||||
death = "nativevillages_chicken3",
|
||||
},
|
||||
walk_velocity = 0.5,
|
||||
run_velocity = 3,
|
||||
runaway = true,
|
||||
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion"},
|
||||
drops = {
|
||||
{name = "nativevillages:chicken_raw", chance = 1, min = 1, max = 1},
|
||||
},
|
||||
water_damage = 1,
|
||||
lava_damage = 5,
|
||||
light_damage = 0,
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 75,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
stand2_start = 100,
|
||||
stand2_end = 200,
|
||||
walk_start = 200,
|
||||
walk_end = 300,
|
||||
|
||||
},
|
||||
follow = {
|
||||
"farming:seed_wheat", "farming:seed_cotton", "farming:seed_barley",
|
||||
"farming:seed_oat", "farming:seed_rye"
|
||||
},
|
||||
view_range = 10,
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 30, 50, 80, false, nil) then return end
|
||||
end,
|
||||
|
||||
do_custom = function(self, dtime)
|
||||
|
||||
self.egg_timer = (self.egg_timer or 0) + dtime
|
||||
if self.egg_timer < 10 then
|
||||
return
|
||||
end
|
||||
self.egg_timer = 0
|
||||
|
||||
if self.child
|
||||
or math.random(1, 100) > 1 then
|
||||
return
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
minetest.add_item(pos, "mobs:egg")
|
||||
|
||||
minetest.sound_play("default_place_node_hard", {
|
||||
pos = pos,
|
||||
gain = 1.0,
|
||||
max_hear_distance = 5,
|
||||
})
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:desertchickentame", ("Domesticated Desert Chicken"), "adesertchicken.png", 0)
|
||||
|
||||
local S = mobs.intllib
|
||||
|
||||
mobs:register_mob("nativevillages:maleliontame", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
attack_type = "dogfight",
|
||||
group_attack = true,
|
||||
owner_loyal = true,
|
||||
attack_npcs = false,
|
||||
attack_monsters = true,
|
||||
reach = 2,
|
||||
damage = 10,
|
||||
hp_min = 45,
|
||||
hp_max = 115,
|
||||
armor = 100,
|
||||
collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.95, 0.5},
|
||||
visual = "mesh",
|
||||
mesh = "Lionmale.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturelionmale.png"},
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_lion2",
|
||||
random = "nativevillages_lion",
|
||||
damage = "nativevillages_lion4",
|
||||
death = "nativevillages_lion3",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 2,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {
|
||||
"ethereal:fish_raw", "animalworld:rawfish", "mobs_fish:tropical",
|
||||
"mobs:meat_raw", "animalworld:rabbit_raw", "animalworld:pork_raw", "water_life:meat_raw", "animalworld:chicken_raw", "nativevillages:chicken_raw"
|
||||
},
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 75,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
stand2_start = 100,
|
||||
stand2_end = 200,
|
||||
walk_start = 200,
|
||||
walk_end = 300,
|
||||
punch_speed = 100,
|
||||
punch_start = 300,
|
||||
punch_end = 400,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, S("Lion stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, S("Lion will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:maleliontame", S("Tamed Male Lion"), "amalelion.png" )
|
||||
|
||||
local S = mobs.intllib
|
||||
|
||||
mobs:register_mob("nativevillages:femaleliontame", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
attack_type = "dogfight",
|
||||
group_attack = true,
|
||||
owner_loyal = true,
|
||||
attack_npcs = false,
|
||||
attack_monsters = true,
|
||||
reach = 2,
|
||||
damage = 7,
|
||||
hp_min = 45,
|
||||
hp_max = 75,
|
||||
armor = 100,
|
||||
collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.95, 0.5},
|
||||
visual = "mesh",
|
||||
mesh = "Lionfemale.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturelionfemale.png"},
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_lion2",
|
||||
random = "nativevillages_lion",
|
||||
damage = "nativevillages_lion4",
|
||||
death = "nativevillages_lion3",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 2,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {
|
||||
"ethereal:fish_raw", "animalworld:rawfish", "mobs_fish:tropical",
|
||||
"mobs:meat_raw", "animalworld:rabbit_raw", "animalworld:pork_raw", "water_life:meat_raw", "animalworld:chicken_raw", "nativevillages:chicken_raw"
|
||||
},
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 75,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
stand2_start = 100,
|
||||
stand2_end = 200,
|
||||
walk_start = 200,
|
||||
walk_end = 300,
|
||||
punch_speed = 100,
|
||||
punch_start = 300,
|
||||
punch_end = 400,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, S("Lion stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, S("Lion will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:femaleliontame", S("Tamed Female Lion"), "afemalelion.png" )
|
||||
|
||||
mobs:register_mob("nativevillages:grasslandcat", {
|
||||
stay_near = {"singleplayer", 10},
|
||||
type = "animal",
|
||||
visual = "mesh",
|
||||
mesh = "Grasslandcat.b3d",
|
||||
collisionbox = {-0.4, -0.01, -0.4, 0.4, 0.5, 0.4},
|
||||
animation = {
|
||||
speed_normal = 100,
|
||||
stand_speed = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
stand2_speed = 50,
|
||||
stand2_start = 100,
|
||||
stand2_end = 200,
|
||||
stand3_speed = 50,
|
||||
stand3_start = 200,
|
||||
stand3_end = 300,
|
||||
stand4_speed = 50,
|
||||
stand4_start = 0,
|
||||
stand4_end = 100,
|
||||
stand5_speed = 50,
|
||||
stand5_start = 200,
|
||||
stand5_end = 300,
|
||||
walk_start = 300,
|
||||
walk_end = 400,
|
||||
punch_start = 400,
|
||||
punch_end = 500,
|
||||
|
||||
|
||||
die_start = 1, -- we dont have a specific death animation so we will
|
||||
die_end = 2, -- re-use 2 standing frames at a speed of 1 fps and
|
||||
die_speed = 1, -- have mob rotate when dying.
|
||||
die_loop = false,
|
||||
die_rotate = true,
|
||||
},
|
||||
textures = {
|
||||
{"texturegrasslandcat.png"},
|
||||
{"texturegrasslandcat2.png"},
|
||||
{"texturegrasslandcat3.png"},
|
||||
{"texturegrasslandcat4.png"},
|
||||
{"texturegrasslandcat5.png"},
|
||||
},
|
||||
fear_height = 5,
|
||||
stepheight = 2,
|
||||
runaway = false,
|
||||
jump = true,
|
||||
jump_height = 8,
|
||||
fly = false,
|
||||
walk_velocity = 2,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
view_range = 12,
|
||||
passive = false,
|
||||
attack_type = "dogfight",
|
||||
damage = 4,
|
||||
reach = 2,
|
||||
attack_monsters = true,
|
||||
attack_animals = false,
|
||||
attack_npcs = false,
|
||||
pathfinding = true,
|
||||
group_attack = true,
|
||||
hp_min = 25,
|
||||
hp_max = 75,
|
||||
armor = 100,
|
||||
knock_back = 2,
|
||||
lava_damage = 5,
|
||||
fall_damage = 1,
|
||||
water_damage = 1,
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_cat",
|
||||
random = "nativevillages_cat2",
|
||||
damage = "nativevillages_cat3",
|
||||
death = "nativevillages_cat4",
|
||||
distance = 10,
|
||||
},
|
||||
follow = {"ethereal:fish_raw", "animalworld:rawfish", "mobs_fish:tropical",
|
||||
"mobs:meat_raw", "animalworld:rabbit_raw", "xocean:fish_edible", "fishing:fish_raw", "water_life:meat_raw", "fishing:carp_raw", "animalworld:chicken_raw", "nativevillages:chicken_raw", "nativevillages:chicken_cooked", "nativevillages:catfish_raw", "nativevillages:catfish_cooked"},
|
||||
on_rightclick = function(self, clicker)
|
||||
if mobs:feed_tame(self, clicker, 6, true, true) then return end
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 30, 50, 100, false, nil) then return end
|
||||
|
||||
if clicker:get_wielded_item():is_empty() and clicker:get_player_name() == self.owner then
|
||||
if clicker:get_player_control().sneak then
|
||||
self.order = ""
|
||||
self.state = "walk"
|
||||
self.walk_velocity = 2
|
||||
self.stepheight = 2
|
||||
else
|
||||
if self.order == "follow" then
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self.walk_velocity = 2
|
||||
self.stepheight = 2
|
||||
else
|
||||
self.order = "follow"
|
||||
self.state = "walk"
|
||||
self.walk_velocity = 3
|
||||
self.stepheight = 2
|
||||
end
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
mobs:register_egg("nativevillages:grasslandcat", "Cat", "agrasslandcat.png")
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
minetest.register_node("nativevillages:driedpeople", {
|
||||
description = "Dried Human Remains",
|
||||
tiles = {
|
||||
"nativevillages_driedpeople_top.png",
|
||||
"nativevillages_driedpeople_bottom.png",
|
||||
"nativevillages_driedpeople_right.png",
|
||||
"nativevillages_driedpeople_left.png",
|
||||
"nativevillages_driedpeople_back.png",
|
||||
"nativevillages_driedpeople_front.png"
|
||||
},
|
||||
groups = {crumbly = 3},
|
||||
drop = "nativevillages:driedhumanmeat 9",
|
||||
sounds = default.node_sound_dirt_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "nativevillages:driedpeople",
|
||||
recipe = {
|
||||
{"nativevillages:driedhumanmeat", "nativevillages:driedhumanmeat", "nativevillages:driedhumanmeat"},
|
||||
{"nativevillages:driedhumanmeat", "nativevillages:driedhumanmeat", "nativevillages:driedhumanmeat"},
|
||||
{"nativevillages:driedhumanmeat", "nativevillages:driedhumanmeat", "nativevillages:driedhumanmeat"},
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
minetest.register_craftitem(":nativevillages:driedhumanmeat", {
|
||||
description = ("Dried Human Meat"),
|
||||
inventory_image = "nativevillages_driedhumanmeat.png",
|
||||
on_use = minetest.item_eat(2),
|
||||
groups = {mushroom = 1, snappy = 3, attached_node = 1, flammable = 1},
|
||||
})
|
||||
|
||||
|
||||
minetest.register_node("nativevillages:cannibalshrine", {
|
||||
description = "Cannibal Shrine",
|
||||
visual_scale = 1,
|
||||
mesh = "Cannibalshrine.b3d",
|
||||
tiles = {"texturecannibalshrine.png"},
|
||||
inventory_image = "acannibalshrine.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 3},
|
||||
drawtype = "mesh",
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
--[[{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}]]
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "default:bronzeblock",
|
||||
recipe = "nativevillages:cannibalshrine",
|
||||
})
|
|
@ -0,0 +1,9 @@
|
|||
mobs
|
||||
default
|
||||
people
|
||||
farming
|
||||
animalworld?
|
||||
ethereal?
|
||||
xocean?
|
||||
fishing?
|
||||
hunger_ng?
|
|
@ -0,0 +1 @@
|
|||
Adds villages of native people to the world.
|
|
@ -0,0 +1,131 @@
|
|||
minetest.register_node("nativevillages:hookah", {
|
||||
description = "Hookah",
|
||||
visual_scale = 1,
|
||||
mesh = "Hookah.b3d",
|
||||
tiles = {"texturehookah.png"},
|
||||
inventory_image = "ahookah.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 3},
|
||||
drawtype = "mesh",
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.2, -0.5, -0.2, 0.2, 0.5, 0.2},
|
||||
--[[{-0.2, -0.5, -0.2, 0.2, 0.5, 0.2},
|
||||
{-0.2, -0.5, -0.2, 0.2, 0.5, 0.2}]]
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.2, -0.5, -0.2, 0.2, 0.5, 0.2}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "default:bronzeblock",
|
||||
recipe = "nativevillages:hookah",
|
||||
})
|
||||
|
||||
minetest.register_node("nativevillages:desertcrpet", {
|
||||
description = "Desert Carpet",
|
||||
visual_scale = 1,
|
||||
mesh = "Desertcarpet.b3d",
|
||||
tiles = {"texturedesertcarpet.png"},
|
||||
inventory_image = "adesertcarpet.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 3},
|
||||
drawtype = "mesh",
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.45, 0.5},
|
||||
--[[{-0.5, -0.5, -0.5, 0.5, -0.45, 0.5},
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.45, 0.5}]]
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.45, 0.5}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "wool:red",
|
||||
recipe = "nativevillages:desertcarpet",
|
||||
})
|
||||
|
||||
minetest.register_node("nativevillages:desertcage", {
|
||||
description = "Slave Bracelet",
|
||||
visual_scale = 1,
|
||||
mesh = "Desertcage.b3d",
|
||||
tiles = {"texturedesertcage.png"},
|
||||
inventory_image = "adesertcage.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 3},
|
||||
drawtype = "mesh",
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
--[[{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}]]
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "default:steelblock",
|
||||
recipe = "nativevillages:desertcage",
|
||||
})
|
||||
|
||||
minetest.register_node("nativevillages:desertseeds", {
|
||||
description = "Desert Seeds",
|
||||
visual_scale = 1,
|
||||
mesh = "Desertseeds.b3d",
|
||||
tiles = {"texturedesertseeds.png"},
|
||||
inventory_image = "adesertseeds.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 3},
|
||||
drawtype = "mesh",
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.45, 0.5},
|
||||
--[[{-0.5, -0.5, -0.5, 0.5, -0.45, 0.5},
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.45, 0.5}]]
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.45, 0.5}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "farming:bread",
|
||||
recipe = "nativevillages:deserseeds",
|
||||
})
|
|
@ -0,0 +1,119 @@
|
|||
minetest.register_decoration({
|
||||
name = "nativevillages:deserthouse1",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:desert_sand"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"desert"},
|
||||
y_max = 30.5,
|
||||
y_min = 25.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/deserthouse1_30_180.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:deserthouse2",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:desert_sand"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"desert"},
|
||||
y_max = 30.5,
|
||||
y_min = 25.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/deserthouse2_30_180.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:deserthouse3",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:desert_sand"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"desert"},
|
||||
y_max = 30.5,
|
||||
y_min = 25.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/deserthouse3_30_180.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:deserthouse4",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:desert_sand"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"desert"},
|
||||
y_max = 30.5,
|
||||
y_min = 25.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/deserthouse4_30_180.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:deserthouse5",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:desert_sand"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"desert"},
|
||||
y_max = 30.5,
|
||||
y_min = 25.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/deserthouse5_30_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:desertwell",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:desert_sand"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00004,
|
||||
biomes = {"desert"},
|
||||
y_max = 30.5,
|
||||
y_min = 25.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/desertwell_30_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:desertmarket",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:desert_sand"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00008,
|
||||
biomes = {"desert"},
|
||||
y_max = 30.5,
|
||||
y_min = 25.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/desertmarket_30_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:desertstable",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:desert_sand"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00004,
|
||||
biomes = {"desert"},
|
||||
y_max = 30.5,
|
||||
y_min = 25.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/deserstable_30_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
|
@ -0,0 +1,848 @@
|
|||
mobs.desertvillagermale_drops = {
|
||||
"farming:salt"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:desertvillagermale", {
|
||||
type = "monster",
|
||||
passive = false,
|
||||
damage = 2,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = false,
|
||||
attack_npcs = true,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 30,
|
||||
hp_max = 60,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Desertvillagermale.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturedesertvillagermale.png"},
|
||||
{"texturedesertvillagermale2.png"},
|
||||
{"texturedesertvillagermale3.png"},
|
||||
{"texturedesertvillagermale4.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_desertmale2",
|
||||
random = "nativevillages_desertmale",
|
||||
damage = "nativevillages_desertmale4",
|
||||
death = "nativevillages_desertmaledesertmale3",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:desertcrpet",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.desertvillagermale_drops
|
||||
if item:get_name() == "default:stick" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.desertvillagermale_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Desert Villager dropped you an item for a stick!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Desert Villager stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Desert Villager will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:desertvillagermale",
|
||||
nodes = {"default:desert_sand", "group:wool"},
|
||||
neighbors = {"nativevillages:desertcrpet"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 2,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:desertvillagermale", ("Male Desert Villager"), "adesertvillagermale.png")
|
||||
|
||||
mobs.desertvillagerfemale_drops = {
|
||||
"farming:salt"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:desertvillagerfemale", {
|
||||
type = "monster",
|
||||
passive = false,
|
||||
damage = 1,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = false,
|
||||
attack_npcs = true,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 20,
|
||||
hp_max = 40,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Desertvillagerfemale.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturedesertvillagerfemale.png"},
|
||||
{"texturedesertvillagerfemale2.png"},
|
||||
{"texturedesertvillagerfemale3.png"},
|
||||
{"texturedesertvillagerfemale4.png"},
|
||||
{"texturedesertvillagerfemale5.png"},
|
||||
{"texturedesertvillagerfemale6.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_desertfemale2",
|
||||
random = "nativevillages_desertfemale",
|
||||
damage = "nativevillages_desertfemale4",
|
||||
death = "nativevillages_desertfemale3",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:desertcrpet",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.desertvillagerfemale_drops
|
||||
if item:get_name() == "default:stick" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.desertvillagerfemale_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Desert Villager dropped you an item for a stick!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Desert Villager stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Desert will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:desertvillagerfemale",
|
||||
nodes = {"default:desert_sand", "group:wool"},
|
||||
neighbors = {"nativevillages:desertcrpet"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 2,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:desertvillagerfemale", ("Female Desert Villager"), "adesertvillagerfemale.png")
|
||||
|
||||
mobs.desertslavetrader_drops = {
|
||||
"nativevillages:slavechickenbreeder", "nativevillages:slavecowherder", "nativevillages:slaveliontrainer",
|
||||
"nativevillages:slavefemaledancer", "nativevillages:slaveloyalcannibal", "nativevillages:slavemaledancer"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:desertslavetrader", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 5,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 30,
|
||||
hp_max = 60,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Desertslavetrader.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturedesertslavetrader.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_desertmale2",
|
||||
random = "nativevillages_desertmale",
|
||||
damage = "nativevillages_desertmale4",
|
||||
death = "nativevillages_desertmale3",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:desertcage",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.desertslavetrader_drops
|
||||
if item:get_name() == "default:gold_ingot" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.desertslavetrader_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Slave delivered!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Slavetrader stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Slavetrader will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:desertslavetrader",
|
||||
nodes = {"default:desert_sand", "group:wool"},
|
||||
neighbors = {"nativevillages:desertcage"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 1,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:desertslavetrader", ("Slave Trader"), "adesertslavetrader.png")
|
||||
|
||||
mobs:register_mob("nativevillages:desertranger", {
|
||||
type = "monster",
|
||||
passive = false,
|
||||
damage = 7,
|
||||
raeach = 4,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = false,
|
||||
attack_npcs = true,
|
||||
attack_player = true,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 50,
|
||||
hp_max = 85,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Desertranger.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturedesertranger.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_desertmale2",
|
||||
random = "nativevillages_desertmale",
|
||||
damage = "nativevillages_desertmale4",
|
||||
death = "nativevillages_desertmaledesertmale3",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 2,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
{name = "default:apple", chance = 2, min = 1, max = 2},
|
||||
{name = "default:sword_stone", chance = 5, min = 1, max = 1},
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:hookah",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 100,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) then return end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:desertranger",
|
||||
nodes = {"default:desert_sand", "group:wool"},
|
||||
neighbors = {"nativevillages:hookah"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 2,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:desertranger", ("Desert Ranger"), "adesertranger.png")
|
||||
|
||||
|
||||
mobs:register_mob("nativevillages:desertraider", {
|
||||
type = "monster",
|
||||
passive = false,
|
||||
damage = 7,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = false,
|
||||
attack_npcs = true,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 50,
|
||||
hp_max = 100,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Desertraider.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturedesertraider.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_desertmale2",
|
||||
random = "nativevillages_desertmale",
|
||||
damage = "nativevillages_desertmale4",
|
||||
death = "nativevillages_desertmale3",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
{name = "default:apple", chance = 2, min = 1, max = 2},
|
||||
{name = "default:sword_stone", chance = 5, min = 1, max = 1},
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:hookah",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 100,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) then return end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:desertraider",
|
||||
nodes = {"default:desert_sand", "group:wool"},
|
||||
neighbors = {"nativevillages:hookah"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 2,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:desertraider", ("Desert Raider"), "adesertraider.png")
|
||||
|
||||
mobs:register_mob("nativevillages:desertchicken", {
|
||||
stepheight = 1,
|
||||
type = "animal",
|
||||
passive = false,
|
||||
attack_type = "dogfight",
|
||||
group_attack = true,
|
||||
owner_loyal = true,
|
||||
attack_npcs = false,
|
||||
reach = 2,
|
||||
damage = 3,
|
||||
hp_min = 10,
|
||||
hp_max = 20,
|
||||
armor = 100,
|
||||
collisionbox = {-0.4, -0.01, -0.3, 0.4, 0.8, 0.4},
|
||||
visual = "mesh",
|
||||
mesh = "Desertchicken.b3d",
|
||||
textures = {
|
||||
{"texturedesertchicken.png"},
|
||||
|
||||
},
|
||||
child_texture = {
|
||||
{"desertchicken.png"},
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_chicken",
|
||||
damage = "nativevillages_chicken2",
|
||||
death = "nativevillages_chicken3",
|
||||
},
|
||||
walk_velocity = 1,
|
||||
run_velocity = 3,
|
||||
runaway = true,
|
||||
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion"},
|
||||
drops = {
|
||||
},
|
||||
water_damage = 1,
|
||||
lava_damage = 5,
|
||||
light_damage = 0,
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 100,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
stand2_start = 100,
|
||||
stand2_end = 200,
|
||||
walk_start = 200,
|
||||
walk_end = 300,
|
||||
|
||||
},
|
||||
follow = {},
|
||||
view_range = 10,
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 30, 50, 80, false, nil) then return end
|
||||
end,
|
||||
|
||||
do_custom = function(self, dtime)
|
||||
|
||||
self.egg_timer = (self.egg_timer or 0) + dtime
|
||||
if self.egg_timer < 10 then
|
||||
return
|
||||
end
|
||||
self.egg_timer = 0
|
||||
|
||||
if self.child
|
||||
or math.random(1, 100) > 1 then
|
||||
return
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
minetest.add_item(pos, "mobs:egg")
|
||||
|
||||
minetest.sound_play("default_place_node_hard", {
|
||||
pos = pos,
|
||||
gain = 1.0,
|
||||
max_hear_distance = 5,
|
||||
})
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:desertchicken",
|
||||
nodes = {"default:clay", "default:desert_sand"},
|
||||
neighbors = {"nativevillages:desertseeds"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
chance = 1, -- 15000
|
||||
active_object_count = 3,
|
||||
min_height = 0,
|
||||
max_height = 100,
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:desertchicken", ("Desert Chicken"), "adesertchicken.png", 0)
|
||||
|
||||
|
||||
|
||||
|
||||
-- egg entity
|
||||
|
||||
mobs:register_arrow("nativevillages:egg_entity", {
|
||||
visual = "sprite",
|
||||
visual_size = {x=.5, y=.5},
|
||||
textures = {"mobs_chicken_egg.png"},
|
||||
velocity = 6,
|
||||
|
||||
hit_player = function(self, player)
|
||||
player:punch(minetest.get_player_by_name(self.playername) or self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = 1},
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_mob = function(self, player)
|
||||
player:punch(minetest.get_player_by_name(self.playername) or self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = 1},
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_node = function(self, pos, node)
|
||||
|
||||
if math.random(1, 10) > 1 then
|
||||
return
|
||||
end
|
||||
|
||||
pos.y = pos.y + 1
|
||||
|
||||
local nod = minetest.get_node_or_nil(pos)
|
||||
|
||||
if not nod
|
||||
or not minetest.registered_nodes[nod.name]
|
||||
or minetest.registered_nodes[nod.name].walkable == true then
|
||||
return
|
||||
end
|
||||
|
||||
local mob = minetest.add_entity(pos, "nativevillages:desertchicken")
|
||||
local ent2 = mob:get_luaentity()
|
||||
|
||||
mob:set_properties({
|
||||
textures = ent2.child_texture[1],
|
||||
visual_size = {
|
||||
x = ent2.base_size.x / 2,
|
||||
y = ent2.base_size.y / 2
|
||||
},
|
||||
collisionbox = {
|
||||
ent2.base_colbox[1] / 2,
|
||||
ent2.base_colbox[2] / 2,
|
||||
ent2.base_colbox[3] / 2,
|
||||
ent2.base_colbox[4] / 2,
|
||||
ent2.base_colbox[5] / 2,
|
||||
ent2.base_colbox[6] / 2
|
||||
},
|
||||
})
|
||||
|
||||
ent2.child = true
|
||||
ent2.tamed = true
|
||||
ent2.owner = self.playername
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
-- egg throwing item
|
||||
|
||||
local egg_GRAVITY = 9
|
||||
local egg_VELOCITY = 19
|
||||
|
||||
-- shoot egg
|
||||
local mobs_shoot_egg = function (item, player, pointed_thing)
|
||||
|
||||
local playerpos = player:get_pos()
|
||||
|
||||
minetest.sound_play("default_place_node_hard", {
|
||||
pos = playerpos,
|
||||
gain = 1.0,
|
||||
max_hear_distance = 5,
|
||||
})
|
||||
|
||||
local obj = minetest.add_entity({
|
||||
x = playerpos.x,
|
||||
y = playerpos.y +1.5,
|
||||
z = playerpos.z
|
||||
}, "nativevillages:egg_entity")
|
||||
|
||||
local ent = obj:get_luaentity()
|
||||
local dir = player:get_look_dir()
|
||||
|
||||
ent.velocity = egg_VELOCITY -- needed for api internal timing
|
||||
ent.switch = 1 -- needed so that egg doesn't despawn straight away
|
||||
|
||||
obj:setvelocity({
|
||||
x = dir.x * egg_VELOCITY,
|
||||
y = dir.y * egg_VELOCITY,
|
||||
z = dir.z * egg_VELOCITY
|
||||
})
|
||||
|
||||
obj:setacceleration({
|
||||
x = dir.x * -3,
|
||||
y = -egg_GRAVITY,
|
||||
z = dir.z * -3
|
||||
})
|
||||
|
||||
-- pass player name to egg for chick ownership
|
||||
local ent2 = obj:get_luaentity()
|
||||
ent2.playername = player:get_player_name()
|
||||
|
||||
item:take_item()
|
||||
|
||||
return item
|
||||
end
|
||||
|
||||
|
||||
-- egg
|
||||
minetest.register_node(":nativevillages:egg", {
|
||||
description = ("Bird Egg"),
|
||||
tiles = {"mobs_chicken_egg.png"},
|
||||
inventory_image = "mobs_chicken_egg.png",
|
||||
visual_scale = 0.7,
|
||||
drawtype = "plantlike",
|
||||
wield_image = "mobs_chicken_egg.png",
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
is_ground_content = true,
|
||||
sunlight_propagates = true,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
|
||||
},
|
||||
groups = {food_egg = 1, snappy = 2, dig_immediate = 3},
|
||||
after_place_node = function(pos, placer, itemstack)
|
||||
if placer:is_player() then
|
||||
minetest.set_node(pos, {name = "nativevillages:egg", param2 = 1})
|
||||
end
|
||||
end,
|
||||
on_use = mobs_shoot_egg
|
||||
})
|
||||
|
||||
|
||||
-- fried egg
|
||||
minetest.register_craftitem(":nativevillages:chicken_egg_fried", {
|
||||
description = ("Fried Desert Chicken Egg"),
|
||||
inventory_image = "nativevillages_chicken_egg_fried.png",
|
||||
on_use = minetest.item_eat(2),
|
||||
groups = {food_egg_fried = 1, flammable = 2},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
recipe = "nativevillages:egg",
|
||||
output = "nativevillages:chicken_egg_fried",
|
||||
})
|
||||
|
||||
-- raw chicken
|
||||
minetest.register_craftitem(":nativevillages:chicken_raw", {
|
||||
description = ("Raw Desert Chicken meat"),
|
||||
inventory_image = "nativevillages_chicken_raw.png",
|
||||
on_use = minetest.item_eat(2),
|
||||
groups = {food_meat_raw = 1, food_chicken_raw = 1, flammable = 2},
|
||||
})
|
||||
|
||||
-- cooked chicken
|
||||
minetest.register_craftitem(":nativevillages:chicken_cooked", {
|
||||
description = ("Cooked Desert Chicken"),
|
||||
inventory_image = "nativevillages_chicken_cooked.png",
|
||||
on_use = minetest.item_eat(6),
|
||||
groups = {food_meat = 1, food_chicken = 1, flammable = 2},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
recipe = "nativevillages:chicken_raw",
|
||||
output = "nativevillages:chicken_cooked",
|
||||
})
|
||||
|
||||
|
|
@ -0,0 +1,215 @@
|
|||
mobs:register_mob("nativevillages:toad", {
|
||||
stepheight = 3,
|
||||
type = "monster",
|
||||
passive = false,
|
||||
attack_type = "explode",
|
||||
explosion_radius = 2,
|
||||
explosion_damage__radius = 6,
|
||||
explosion_timer = 2,
|
||||
attack_npcs = false,
|
||||
attack_animals = false,
|
||||
reach = 3,
|
||||
damage = 18,
|
||||
hp_min = 15,
|
||||
hp_max = 30,
|
||||
armor = 100,
|
||||
collisionbox = {-0.268, -0.01, -0.268, 0.268, 0.25, 0.268},
|
||||
visual = "mesh",
|
||||
mesh = "Toad.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturetoad.png"},
|
||||
|
||||
},
|
||||
sounds = {
|
||||
random = "",},
|
||||
makes_footstep_sound = true,
|
||||
walk_velocity = 1.5,
|
||||
run_velocity = 2,
|
||||
runaway = true,
|
||||
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion"},
|
||||
jump = true,
|
||||
jump_height = 6,
|
||||
sounds = {
|
||||
attack = "nativevillages_toad",
|
||||
random = "nativevillages_toad2",
|
||||
damage = "nativevillages_toad",
|
||||
death = "nativevillages_toad",
|
||||
distance = 10,
|
||||
},
|
||||
drops = {
|
||||
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 4,
|
||||
light_damage = 0,
|
||||
fear_height = 6,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 1,
|
||||
stand_end = 100,
|
||||
walk_speed = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
fly_start = 300, -- swim animation
|
||||
fly_end = 400,
|
||||
},
|
||||
fly_in = {"default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing"},
|
||||
floats = 0,
|
||||
follow = {"fishing:bait:worm", "ethereal:worm", "animalworld:ant", "animalworld:termite"},
|
||||
view_range = 13,
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) then return end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
if minetest.get_modpath("ethereal") then
|
||||
spawn_on = "ethereal:prairie_dirt", "default:dirt_with_grass", "ethereal:green_dirt"
|
||||
end
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:toad",
|
||||
nodes = {"default:dirt_with_grass"}, {"default:dirt_with_rainforest_litter"}, {"default:dry_dirt_with_dry_grass"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
chance = 8000, -- 15000
|
||||
active_object_count = 1,
|
||||
min_height = 1,
|
||||
max_height = 15,
|
||||
day_toogle = false
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:toad", ("Toad"), "atoad.png", 0)
|
||||
|
||||
|
||||
mobs:alias_mob("nativevillages:toad", "nativevillages:toad") -- compatibility
|
||||
|
||||
|
||||
mobs:register_mob("nativevillages:toadtamed", {
|
||||
stepheight = 3,
|
||||
type = "NPC",
|
||||
passive = false,
|
||||
attack_type = "explode",
|
||||
explosion_radius = 4,
|
||||
explosion_damage__radius = 12,
|
||||
explosion_timer = 4,
|
||||
attack_npcs = false,
|
||||
attack_animals = false,
|
||||
attack_monsters = true,
|
||||
reach = 3,
|
||||
damage = 550,
|
||||
hp_min = 25,
|
||||
hp_max = 50,
|
||||
armor = 100,
|
||||
collisionbox = {-0.268, -0.01, -0.268, 0.268, 0.25, 0.268},
|
||||
visual = "mesh",
|
||||
mesh = "Toad.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturetoad.png"},
|
||||
|
||||
},
|
||||
sounds = {
|
||||
random = "",},
|
||||
makes_footstep_sound = true,
|
||||
owner_loyal = true,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
pathfinding = true,
|
||||
walk_velocity = 1.5,
|
||||
run_velocity = 2,
|
||||
runaway = false,
|
||||
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion"},
|
||||
jump = true,
|
||||
jump_height = 6,
|
||||
drops = {
|
||||
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 4,
|
||||
light_damage = 0,
|
||||
fear_height = 6,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 1,
|
||||
stand_end = 100,
|
||||
walk_speed = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
fly_start = 300, -- swim animation
|
||||
fly_end = 400,
|
||||
},
|
||||
fly_in = {"default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing"},
|
||||
floats = 0,
|
||||
follow = {"fishing:bait:worm", "ethereal:worm", "animalworld:ant", "animalworld:termite"},
|
||||
view_range = 13,
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
|
||||
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Exploding Toad stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Exploding Toad will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:toadtamed", ("Tamed Exploding Toad"), "atoad.png", 0)
|
||||
|
||||
|
||||
mobs:alias_mob("nativevillages:toadtamed", "nativevillages:toadtamed") -- compatibility
|
||||
|
||||
minetest.register_node("nativevillages:toadbag", {
|
||||
description = "Bag full of toads!",
|
||||
tiles = {
|
||||
"nativevillages_toadbag_top.png",
|
||||
"nativevillages_toadbag_bottom.png",
|
||||
"nativevillages_toadbag_right.png",
|
||||
"nativevillages_toadbag_left.png",
|
||||
"nativevillages_toadbag_back.png",
|
||||
"nativevillages_toadbag_front.png"
|
||||
},
|
||||
groups = {crumbly = 3},
|
||||
drop = "nativevillages:toadtamed 9",
|
||||
sounds = default.node_sound_dirt_defaults(),
|
||||
})
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,99 @@
|
|||
minetest.register_node("nativevillages:grasslandaltar", {
|
||||
description = "Altar",
|
||||
visual_scale = 1,
|
||||
mesh = "Grasslandaltar.b3d",
|
||||
tiles = {"texturegrasslandaltar.png"},
|
||||
inventory_image = "agrasslandaltar.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 3},
|
||||
drawtype = "mesh",
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
--[[{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}]]
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "default:cobble",
|
||||
recipe = "nativevillages:grasslandaltar",
|
||||
})
|
||||
|
||||
minetest.register_node("nativevillages:grasslandbarrel", {
|
||||
description = "Barrel",
|
||||
visual_scale = 1,
|
||||
mesh = "Grasslandbarrel.b3d",
|
||||
tiles = {"texturegrasslandbarrel.png"},
|
||||
inventory_image = "agrasslandbarrel.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 3},
|
||||
drawtype = "mesh",
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 1, 0.5},
|
||||
--[[{-0.5, -0.5, -0.5, 0.5, 1, 0.5},
|
||||
{-0.5, -0.5, -0.5, 0.5, 1, 0.5}]]
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 1, 0.5}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "default:cobble",
|
||||
recipe = "nativevillages:grasslandbarrel",
|
||||
})
|
||||
|
||||
minetest.register_node("nativevillages:cowdropping", {
|
||||
description = "Cow Dropping",
|
||||
visual_scale = 1,
|
||||
mesh = "Cowdropping.b3d",
|
||||
tiles = {"texturecowdropping.png"},
|
||||
inventory_image = "acowdropping.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 3},
|
||||
drawtype = "mesh",
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.45, 0.5},
|
||||
--[[{-0.5, -0.5, -0.5, 0.5, -0.45, 0.5},
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.45, 0.5}]]
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.45, 0.5}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "default:coal_lump",
|
||||
recipe = "nativevillages:cowdropping",
|
||||
|
||||
})
|
|
@ -0,0 +1,122 @@
|
|||
minetest.register_decoration({
|
||||
name = "nativevillages:grasslandblot",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_grass"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00004,
|
||||
biomes = {"grassland", "snowy_grassland"},
|
||||
y_max = 20.5,
|
||||
y_min = 15.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/grasslandblot_30_180.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:grasslandhouse1",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_grass"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"grassland", "snowy_grassland"},
|
||||
y_max = 20.5,
|
||||
y_min = 15.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/grasslandhouse1_30_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:grasslandhouse2",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_grass"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"grassland", "snowy_grassland"},
|
||||
y_max = 20.5,
|
||||
y_min = 15.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/grasslandhouse2_30_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:grasslandhouse3",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_grass"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"grassland", "snowy_grassland"},
|
||||
y_max = 20.5,
|
||||
y_min = 15.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/grasslandhouse3_30_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:grasslandhouse4",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_grass"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"grassland", "snowy_grassland"},
|
||||
y_max = 20.5,
|
||||
y_min = 15.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/grasslandhouse4_30_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:grasslandhouse5",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_grass"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"grassland", "snowy_grassland"},
|
||||
y_max = 20.5,
|
||||
y_min = 15.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/grasslandhouse5_30_180.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:grasslandpond",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_grass"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00004,
|
||||
biomes = {"grassland", "snowy_grassland"},
|
||||
y_max = 20.5,
|
||||
y_min = 15.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/grasslandpond_30_180.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:grasslandstable",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_grass"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00004,
|
||||
biomes = {"grassland", "snowy_grassland"},
|
||||
y_max = 20.5,
|
||||
y_min = 15.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/grasslandstable_30_180.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
|
@ -0,0 +1,516 @@
|
|||
mobs:register_mob("nativevillages:grasslandcow", {
|
||||
stepheight = 1,
|
||||
type = "animal",
|
||||
passive = false,
|
||||
attack_type = "dogfight",
|
||||
group_attack = true,
|
||||
owner_loyal = true,
|
||||
attack_npcs = false,
|
||||
reach = 2,
|
||||
damage = 4,
|
||||
hp_min = 20,
|
||||
hp_max = 60,
|
||||
armor = 100,
|
||||
collisionbox = {-0.25, -0.01, -0.25, 0.25, 1.5, 0.25},
|
||||
visual = "mesh",
|
||||
mesh = "Grasslandcow.b3d",
|
||||
textures = {
|
||||
{"texturegrasslandcow.png"},
|
||||
{"texturegrasslandcow2.png"},
|
||||
{"texturegrasslandcow3.png"},
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_cow",
|
||||
attack = "nativevillages_cow2",
|
||||
damage = "nativevillages_cow3",
|
||||
},
|
||||
walk_velocity = 1,
|
||||
run_velocity = 3,
|
||||
runaway = false,
|
||||
jump = false,
|
||||
jump_height = 3,
|
||||
pushable = true,
|
||||
follow = {},
|
||||
view_range = 10,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 5,
|
||||
light_damage = 0,
|
||||
fear_height = 2,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
stand2_start = 100,
|
||||
stand2_end = 200,
|
||||
walk_start = 200,
|
||||
walk_end = 300,
|
||||
punch_start = 300,
|
||||
punch_end = 400,
|
||||
|
||||
die_start = 1, -- we dont have a specific death animation so we will
|
||||
die_end = 2, -- re-use 2 standing frames at a speed of 1 fps and
|
||||
die_speed = 1, -- have mob rotate when dying.
|
||||
die_loop = false,
|
||||
die_rotate = true,
|
||||
},
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 0, 0, 25, false, nil) then return end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:grasslandcow",
|
||||
nodes = {"default:dirt_with_grass", "default:dirt_with_coniferous_litter", "default:clay"},
|
||||
neighbors = {"nativevillages:cowdropping"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 3,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:grasslandcow", ("Grassland Cow"), "agrasslandcow.png")
|
||||
|
||||
|
||||
mobs:alias_mob("nativevillages:grasslandcow", "nativevillages:grasslandcow") -- compatibility
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
mobs.grasslandfemale_drops = {
|
||||
"nativevillages:bucket_milk", "nativevillages:cheese", "default:iron_lump",
|
||||
"default:copper_lump", "default:tin_lump", "mobs:meat"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:grasslandfemale", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 40,
|
||||
hp_max = 70,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Grasslandfemale.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturegrasslandfemale.png"},
|
||||
{"texturegrasslandfemale2.png"},
|
||||
{"texturegrasslandfemale3.png"},
|
||||
{"texturegrasslandfemale4.png"},
|
||||
|
||||
},
|
||||
child_texture = {
|
||||
{"texturegrasslandbabyf.png"},
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_grasslandfemale2",
|
||||
random = "nativevillages_grasslandfemale",
|
||||
damage = "nativevillages_grasslandfemale3",
|
||||
death = "nativevillages_grasslandfemale3",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:grasslandbarrel",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.grasslandfemale_drops
|
||||
if item:get_name() == "farming:bread" or item:get_name() == "farming:garlic_bread" or item:get_name() == "ethereal:banana_bread" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.grasslandfemale_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Grasslander dropped you an item for bread!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Grasslander stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Grasslander will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:grasslandfemale",
|
||||
nodes = {"default:dirt_with_grass", "default:cobble", "default:dirt_with_coniferous_litter", "default:clay"},
|
||||
neighbors = {"nativevillages:grasslandbarrel"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 2,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:grasslandfemale", ("Female Grasslander"), "agrasslandfemale.png")
|
||||
|
||||
-- compatibility
|
||||
mobs:alias_mob("nativevillages:grasslandfemale", "nativevillages:grasslandfemale")
|
||||
|
||||
mobs.grasslandmale_drops = {
|
||||
"nativevillages:bucket_milk", "nativevillages:cheese", "default:iron_lump",
|
||||
"default:copper_lump", "default:tin_lump", "mobs:meat"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:grasslandmale", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 5,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 70,
|
||||
hp_max = 90,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Grasslandmale.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturegrasslandmale.png"},
|
||||
{"texturegrasslandmale2.png"},
|
||||
{"texturegrasslandmale3.png"},
|
||||
{"texturegrasslandmale4.png"},
|
||||
|
||||
},
|
||||
child_texture = {
|
||||
{"texturegrasslandbabym.png"},
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_grasslandmale2",
|
||||
random = "nativevillages_grasslandmale",
|
||||
damage = "nativevillages_grasslandmale3",
|
||||
death = "nativevillages_grasslandmale3",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:grasslandbarrel",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.grasslandmale_drops
|
||||
if item:get_name() == "farming:bread" or item:get_name() == "farming:garlic_bread" or item:get_name() == "ethereal:banana_bread" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.grasslandmale_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Grasslander dropped you an item for bread!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Grasslander stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Grasslander will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:grasslandmale",
|
||||
nodes = {"default:dirt_with_grass", "default:cobble", "default:dirt_with_coniferous_litter", "default:clay"},
|
||||
neighbors = {"nativevillages:grasslandbarrel"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 2,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:grasslandmale", ("Male Grasslander"), "agrasslandmale.png")
|
||||
|
||||
-- compatibility
|
||||
mobs:alias_mob("nativevillages:grasslandmale", "nativevillages:grasslandmale")
|
||||
|
||||
|
||||
mobs.grasslandwitch_drops = {
|
||||
"nativevillages:grasslandcat", "nativevillages:toadbag"
|
||||
}
|
||||
|
||||
|
||||
mobs:register_mob("nativevillages:grasslandwitch", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
attack_type = "shoot",
|
||||
shoot_interval = 1,
|
||||
arrow = "nativevillages:fireball",
|
||||
shoot_offset = 2,
|
||||
attack_animals = false,
|
||||
damage = 7,
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 20,
|
||||
hp_max = 60,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Grasslandwitch.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturegrasslandwitch.png"},
|
||||
{"texturegrasslandwitch2.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
shoot = "nativevillages_witch2",
|
||||
random = "nativevillages_witch",
|
||||
damage = "nativevillages_witch4",
|
||||
death = "nativevillages_witch3",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
{name = "default:coal_lump", chance = 1, min = 1, max = 3},
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:grasslandaltar",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
shoot_speed = 100,
|
||||
shoot_start = 200,
|
||||
shoot_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.grasslandwitch_drops
|
||||
if item:get_name() == "default:diamond" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.grasslandwitch_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Witch dropped you an item for diamond!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Witch stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Witch will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:grasslandwitch",
|
||||
nodes = {"default:dirt_with_grass", "default:clay"},
|
||||
neighbors = {"nativevillages:grasslandaltar"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 1,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:grasslandwitch", ("Grassland Witch"), "agrasslandwitch.png")
|
||||
|
||||
-- compatibility
|
||||
mobs:alias_mob("nativevillages:grasslandwitch", "nativevillages:grasslandwitch")
|
|
@ -0,0 +1,91 @@
|
|||
People Mod provides NPCs to be integrated in your own village, follow you and provide many trading items.
|
||||
Native Villages is focused on ambience. The villagers of this mod can be found in the specific biomes but
|
||||
wont follow you and some are even aggressive by nature.
|
||||
As an additional challenge similar to Minecraft Creepers, you will find now exploding toads at night near the coastal regions
|
||||
of jungle, savanna and forest biomes.
|
||||
|
||||
This guide will shortly introduce you to the trading options of every specific tribe provided by the mod.
|
||||
All trading drops are random (Like in People Mod)
|
||||
|
||||
Arctic/Icelander Tribe:
|
||||
|
||||
Sledge Trader
|
||||
Sells Ice Dogs and Dog Sledges for steel ingots.
|
||||
|
||||
Ice Villager
|
||||
Sells brown and white wool, leather and meat for iron lumps.
|
||||
|
||||
Sledge with Dog
|
||||
Can be fed with meat(Mod Mobs Redo), dogfood or cooked dogfood.
|
||||
|
||||
Desert Tribe:
|
||||
|
||||
Villagers, Raiders and Rangers are aggressive and don't like to trade with you.
|
||||
|
||||
Desert Slave Trader
|
||||
Sells Chicken Breeders, Cow Herders, Lion Trainers, Dancers and Loyal Cannibals for gold ingots.
|
||||
|
||||
Grasslander Tribe:
|
||||
|
||||
Grasslander
|
||||
Sells milk buckets, mozzarella cheese, iron lumps, copper lumps, tin lumps and meat for bread, garlic bread and ethereal banana bread.
|
||||
|
||||
Grassland Witch
|
||||
Sells cats and bags of exploding toads for diamonds.
|
||||
|
||||
Lake Tribe:
|
||||
|
||||
Lake Villager
|
||||
Sells cooked catfish, strings, water buckets, salt and pearls for ethereal bananas, sugar, cocoa and bananas(farming).
|
||||
|
||||
Fisher
|
||||
Sells domesticated catfish(can be bred) and pearls for gold lumps.
|
||||
|
||||
Savanna Tribe:
|
||||
|
||||
Witch Doctor
|
||||
Sells tamed zombies for all graves found in People Mod.
|
||||
|
||||
Savanna Queen + King
|
||||
Sells gold block for diamond.
|
||||
|
||||
Savanna Villagers
|
||||
Sells pumpkin, vanilla, potatoes, pineapple, pepper, onion, peas, melon, cucumber and coffee beans for pearls.
|
||||
|
||||
Various Creatures:
|
||||
|
||||
Tamed Catfish
|
||||
Can be bred with worm, seaweed, grass, cucumber, cabbage, ants, termite, fish food.
|
||||
|
||||
Tamed Zombie
|
||||
Can be bred with dried human meat(Can be found in Jungle/Cannibal settlements).
|
||||
|
||||
Cow Herder
|
||||
Sells domestic cows for various farming dishes.
|
||||
|
||||
Domestic Cow
|
||||
Can be milked with a bucket, can be bred with wheat, grass, barley, oat, rye, carrot, beans and lettuce.
|
||||
|
||||
Chicken Breeder
|
||||
Sells tamed desert chickens for various farming dishes.
|
||||
|
||||
Tamed Desert Chicken
|
||||
Can be bred with wheat seeds, cotton seeds, barley seeds, oat seeds and rye seeds.
|
||||
|
||||
Lion Trainer
|
||||
Sells tamed lions for gold lumps.
|
||||
|
||||
Tamed Lions
|
||||
Can be fed with many kind of raw meat and fish.
|
||||
|
||||
Grassland Cat
|
||||
Can be fed with many kind of raw meat and fish.
|
||||
|
||||
Dancers
|
||||
Can be fed with various farming dishes.
|
||||
|
||||
Loyal Cannibal
|
||||
Can be fed with dried human meat(Can be found in Jungle/Cannibal settlements).
|
||||
|
||||
|
||||
It is useless to kill animals to be found in the villages, they wont drop anything and wont get tame to prevent cheating.
|
|
@ -0,0 +1,29 @@
|
|||
if minetest.get_modpath("hunger_ng") ~= nil then
|
||||
hunger_ng.add_hunger_data('nativevillages:bucket_milk', {
|
||||
satiates = 1.0,
|
||||
})
|
||||
hunger_ng.add_hunger_data('nativevillages:cheese', {
|
||||
satiates = 1.0,
|
||||
})
|
||||
hunger_ng.add_hunger_data('nativevillages:catfish_raw', {
|
||||
satiates = 1.0,
|
||||
})
|
||||
hunger_ng.add_hunger_data('nativevillages:catfish_cooked', {
|
||||
satiates = 2.0,
|
||||
})
|
||||
hunger_ng.add_hunger_data('nativevillages:chicken_raw', {
|
||||
satiates = 1.0,
|
||||
})
|
||||
hunger_ng.add_hunger_data('nativevillages:chicken_cooked', {
|
||||
satiates = 2.0,
|
||||
})
|
||||
hunger_ng.add_hunger_data('nativevillages:chicken_egg_fried', {
|
||||
satiates = 1.0,
|
||||
})
|
||||
hunger_ng.add_hunger_data('nativevillages:butter', {
|
||||
satiates = 1.0,
|
||||
})
|
||||
hunger_ng.add_hunger_data('nativevillages:driedhumanmeat', {
|
||||
satiates = 2.0,
|
||||
})
|
||||
end
|
|
@ -0,0 +1,89 @@
|
|||
minetest.register_decoration({
|
||||
name = "nativevillages:icehouse1",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:snowblock", "default:ice"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.0001,
|
||||
biomes = {"icesheet", "icesheet_ocean"},
|
||||
y_max = 3.5,
|
||||
y_min = 1.0,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/icehouse1_30_90.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:icehouse2",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:snowblock", "default:ice"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.0001,
|
||||
biomes = {"icesheet", "icesheet_ocean"},
|
||||
y_max = 3.5,
|
||||
y_min = 1.0,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/icehouse2_30_90.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:icehouse3",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:snowblock", "default:ice"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.0001,
|
||||
biomes = {"icesheet", "icesheet_ocean"},
|
||||
y_max = 3.5,
|
||||
y_min = 1.0,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/icehouse3_30_90.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:icelogs",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:snowblock", "default:ice"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.0001,
|
||||
biomes = {"icesheet", "icesheet_ocean"},
|
||||
y_max = 3.5,
|
||||
y_min = 1.0,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/icelogs_30_90.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:icepelts",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:snowblock", "default:ice"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.0001,
|
||||
biomes = {"icesheet", "icesheet_ocean"},
|
||||
y_max = 3.5,
|
||||
y_min = 1.0,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/icepelts_30_90.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:icesledge",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:snowblock", "default:ice"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.0001,
|
||||
biomes = {"icesheet", "icesheet_ocean"},
|
||||
y_max = 3.5,
|
||||
y_min = 1.0,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/icesledge_30_90.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
|
@ -0,0 +1,55 @@
|
|||
|
||||
-- Load support for intllib.
|
||||
local path = minetest.get_modpath(minetest.get_current_modname()) .. "/"
|
||||
|
||||
local S = minetest.get_translator and minetest.get_translator("nativevillages") or
|
||||
dofile(path .. "intllib.lua")
|
||||
|
||||
mobs.intllib = S
|
||||
|
||||
|
||||
-- Check for custom mob spawn file
|
||||
local input = io.open(path .. "spawn.lua", "r")
|
||||
|
||||
if input then
|
||||
mobs.custom_spawn_nativevillages = true
|
||||
input:close()
|
||||
input = nil
|
||||
end
|
||||
|
||||
|
||||
-- Buildings
|
||||
|
||||
|
||||
dofile(path .. "cannibalblocks.lua") --
|
||||
dofile(path .. "savannablocks.lua") --
|
||||
dofile(path .. "arcticblocks.lua") --
|
||||
dofile(path .. "grasslandblocks.lua") --
|
||||
dofile(path .. "lakeblocks.lua") --
|
||||
dofile(path .. "desertblocks.lua") --
|
||||
dofile(path .. "junglebuildings.lua") --
|
||||
dofile(path .. "icebuildings.lua") --
|
||||
dofile(path .. "grasslandbuildings.lua") --
|
||||
dofile(path .. "lakebuildings.lua") --
|
||||
dofile(path .. "desertbuildings.lua") --
|
||||
dofile(path .. "savannabuildings.lua") --
|
||||
dofile(path .. "grasslandcreatures.lua") --
|
||||
dofile(path .. "junglecreatures.lua") --
|
||||
dofile(path .. "arcticcreatures.lua") --
|
||||
dofile(path .. "savannacreatures.lua") --
|
||||
dofile(path .. "lakecreatures.lua") --
|
||||
dofile(path .. "desertcreatures.lua") --
|
||||
dofile(path .. "slavecreatures.lua") --
|
||||
dofile(path .. "buyablestuff.lua") --
|
||||
dofile(path .. "explodingtoad.lua") --
|
||||
dofile(path .. "hunger.lua") --
|
||||
|
||||
|
||||
-- Load custom spawning
|
||||
if mobs.custom_spawn_nativevillages then
|
||||
dofile(path .. "spawn.lua")
|
||||
end
|
||||
|
||||
|
||||
|
||||
print (S("[MOD] Buildings loaded"))
|
|
@ -0,0 +1,3 @@
|
|||
-- Support for the old multi-load method
|
||||
dofile(minetest.get_modpath("intllib").."/init.lua")
|
||||
|
|
@ -0,0 +1,89 @@
|
|||
minetest.register_decoration({
|
||||
name = "nativevillages:junglehouse1",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_rainforest_litter"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"rainforest"},
|
||||
y_max = 20.5,
|
||||
y_min = 10.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/cannibalhouse1_30_90.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:junglehouse2",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_rainforest_litter"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"rainforest"},
|
||||
y_max = 20.5,
|
||||
y_min = 10.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/cannibalhouse2_30_90.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:junglehouse3",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_rainforest_litter"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"rainforest"},
|
||||
y_max = 20.5,
|
||||
y_min = 10.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/cannibalhouse3_30_90.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:junglecage",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_rainforest_litter"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"rainforest"},
|
||||
y_max = 20.5,
|
||||
y_min = 10.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/cannibalcage_30_270.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:junglepit",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_rainforest_litter"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"rainforest"},
|
||||
y_max = 20.5,
|
||||
y_min = 10.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/cannibalpit_30_270.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:jungletower",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_rainforest_litter"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"rainforest"},
|
||||
y_max = 20.5,
|
||||
y_min = 10.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/cannibaltower_30_180.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
|
@ -0,0 +1,329 @@
|
|||
mobs:register_mob("nativevillages:cannibalking", {
|
||||
type = "monster",
|
||||
passive = false,
|
||||
attack_type = "shoot",
|
||||
shoot_interval = 1,
|
||||
arrow = "nativevillages:fireball",
|
||||
shoot_offset = 2,
|
||||
attack_animals = true,
|
||||
damage = 7,
|
||||
hp_min = 55,
|
||||
hp_max = 85,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Cannibalking.b3d",
|
||||
visual_size = {x = 1.0, y = 1.0},
|
||||
textures = {
|
||||
{"texturecannibalking.png"},
|
||||
},
|
||||
sounds = {
|
||||
random = "nativevillages_cannibalmale",
|
||||
shoot = "nativevillages_cannibalmale2",
|
||||
damage = "nativevillages_cannibalmale3",
|
||||
death = "nativevillages_cannibalmale4",
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
walk_velocity = 1.5,
|
||||
run_velocity = 3,
|
||||
runaway = false,
|
||||
jump = true,
|
||||
jump_height = 2,
|
||||
stepheight = 2,
|
||||
fear_height = 3,
|
||||
drops = {
|
||||
{name = "default:copper_lump", chance = 1, min = 1, max = 1},
|
||||
},
|
||||
water_damage = 5,
|
||||
lava_damage = 4,
|
||||
light_damage = 0,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_speed = 75,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
shoot_speed = 100,
|
||||
shoot_start = 200,
|
||||
shoot_end = 300,
|
||||
},
|
||||
view_range = 15,
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed or tame
|
||||
if mobs:feed_tame(self, clicker, 4, false, true) then return end
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:cannibalking",
|
||||
nodes = {"default:junglewood"},
|
||||
neighbors = {"nativevillages:cannibalshrine"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
chance = 2, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 40,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_arrow("nativevillages:fireball", {
|
||||
visual = "sprite",
|
||||
visual_size = {x=.5, y=.5},
|
||||
textures = {"nativevillages_fireball.png"},
|
||||
velocity = 12,
|
||||
drop = true,
|
||||
|
||||
hit_player = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval=1.0,
|
||||
damage_groups = {fleshy=13},
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_mob = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval=1.0,
|
||||
damage_groups = {fleshy=13},
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_node = function(self, pos, node)
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:cannibalking", ("Cannibal King"), "acannibalking.png")
|
||||
|
||||
mobs:register_mob("nativevillages:cannibalarcher", {
|
||||
type = "monster",
|
||||
passive = false,
|
||||
attack_type = "shoot",
|
||||
shoot_interval = 2,
|
||||
arrow = "people:bolt",
|
||||
shoot_offset = 2,
|
||||
attacks_monsters = false,
|
||||
damage = 4,
|
||||
hp_min = 55,
|
||||
hp_max = 85,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Cannibalarcher.b3d",
|
||||
visual_size = {x = 1.0, y = 1.0},
|
||||
textures = {
|
||||
{"texturecannibalarcher.png"},
|
||||
},
|
||||
sounds = {
|
||||
random = "nativevillages_cannibalmale",
|
||||
attack = "nativevillages_cannibalmale2",
|
||||
damage = "nativevillages_cannibalmale3",
|
||||
death = "nativevillages_cannibalmale4",
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
walk_velocity = 2,
|
||||
run_velocity = 3,
|
||||
runaway = false,
|
||||
jump = true,
|
||||
jump_height = 2,
|
||||
stepheight = 2,
|
||||
fear_height = 3,
|
||||
drops = {
|
||||
{name = "default:tin_lump", chance = 1, min = 1, max = 1},
|
||||
},
|
||||
water_damage = 5,
|
||||
lava_damage = 4,
|
||||
light_damage = 0,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_speed = 75,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
shoot_speed = 50,
|
||||
shoot_start = 200,
|
||||
shoot_end = 300,
|
||||
},
|
||||
view_range = 15,
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed or tame
|
||||
if mobs:feed_tame(self, clicker, 4, false, true) then return end
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:cannibalarcher",
|
||||
nodes = {"default:junglewood"},
|
||||
neighbors = {"nativevillages:cannibalshrine"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
chance = 2, -- 15000
|
||||
active_object_count = 2,
|
||||
min_height = 0,
|
||||
max_height = 40,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:cannibalarcher", ("Cannibal Hunter"), "acannibalarcher.png")
|
||||
|
||||
mobs:register_mob("nativevillages:cannibalmurderer", {
|
||||
type = "monster",
|
||||
passive = false,
|
||||
attack_type = "dogfight",
|
||||
attack_animals = true,
|
||||
reach = 2,
|
||||
damage = 6,
|
||||
hp_min = 55,
|
||||
hp_max = 85,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Cannibalmurderer.b3d",
|
||||
visual_size = {x = 1.0, y = 1.0},
|
||||
textures = {
|
||||
{"texturecannibalmurderer.png"},
|
||||
},
|
||||
sounds = {
|
||||
random = "nativevillages_cannibalfemale",
|
||||
attack = "nativevillages_cannibalfemale2",
|
||||
damage = "nativevillages_cannibalfemale3",
|
||||
death = "nativevillages_cannibalfemale4",
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
walk_velocity = 2,
|
||||
run_velocity = 3,
|
||||
runaway = false,
|
||||
jump = true,
|
||||
jump_height = 2,
|
||||
stepheight = 2,
|
||||
fear_height = 3,
|
||||
drops = {
|
||||
{name = "default:copper_lump", chance = 1, min = 1, max = 1},
|
||||
},
|
||||
water_damage = 5,
|
||||
lava_damage = 4,
|
||||
light_damage = 0,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_speed = 75,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
view_range = 15,
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed or tame
|
||||
if mobs:feed_tame(self, clicker, 4, false, true) then return end
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:cannibalmurderer",
|
||||
nodes = {"default:junglewood"},
|
||||
neighbors = {"nativevillages:driedpeople"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 2,
|
||||
chance = 2, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 40,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:cannibalmurderer", ("Cannibal Murderer"), "acannibalmurderer.png")
|
||||
|
||||
mobs:register_mob("nativevillages:cannibalchild", {
|
||||
type = "monster",
|
||||
passive = false,
|
||||
attack_type = "dogfight",
|
||||
attack_animals = true,
|
||||
reach = 2,
|
||||
damage = 6,
|
||||
hp_min = 15,
|
||||
hp_max = 35,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Cannibalchild.b3d",
|
||||
visual_size = {x = 1, y = 1},
|
||||
textures = {
|
||||
{"texturecannibalchild.png"},
|
||||
},
|
||||
sounds = {
|
||||
random = "nativevillages_cannibalchild3",
|
||||
attack = "nativevillages_cannibalchild2",
|
||||
damage = "nativevillages_cannibalchild",
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
walk_velocity = 3,
|
||||
run_velocity = 5,
|
||||
runaway = false,
|
||||
stepheight = 4,
|
||||
fear_height = 6,
|
||||
jump = true,
|
||||
jump_height = 4,
|
||||
stepheight = 2,
|
||||
fear_height = 5,
|
||||
drops = {
|
||||
{name = "default:iron_lump", chance = 1, min = 1, max = 1},
|
||||
},
|
||||
water_damage = 5,
|
||||
lava_damage = 4,
|
||||
light_damage = 0,
|
||||
animation = {
|
||||
speed_normal = 100,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_speed = 150,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
view_range = 15,
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed or tame
|
||||
if mobs:feed_tame(self, clicker, 4, false, true) then return end
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:cannibalchild",
|
||||
nodes = {"default:junglewood"},
|
||||
neighbors = {"nativevillages:driedpeople"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
chance = 2, -- 15000
|
||||
active_object_count = 2,
|
||||
min_height = 0,
|
||||
max_height = 40,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:cannibalchild", ("Cannibal Child"), "acannibalchild.png")
|
|
@ -0,0 +1,70 @@
|
|||
minetest.register_node("nativevillages:fishtrap", {
|
||||
description = "Fish Trap",
|
||||
visual_scale = 1,
|
||||
mesh = "Fishtrap.b3d",
|
||||
tiles = {"texturefishtrap.png"},
|
||||
inventory_image = "afishtrap.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 3},
|
||||
drawtype = "mesh",
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.25, -0.5, -0.5, 0.25, 0.12, 0.5},
|
||||
--[[{-0.25, -0.5, -0.5, 0.25, 0.12, 0.5},
|
||||
{-0.25, -0.5, -0.5, 0.25, 0.12, 0.5}]]
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.25, -0.5, -0.5, 0.25, 0.12, 0.5}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "nativevillages:fishtrap",
|
||||
burntime = 3,
|
||||
})
|
||||
|
||||
minetest.register_node("nativevillages:hangingfish", {
|
||||
description = "Hangning Fish",
|
||||
visual_scale = 1,
|
||||
mesh = "Hangingfish.b3d",
|
||||
tiles = {"texturehangingfish.png"},
|
||||
inventory_image = "ahangingfish.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 3},
|
||||
drawtype = "mesh",
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-1, -0.5, -0.2, 1, 0.9, 0.2},
|
||||
--[[{-1, -0.5, -0.2, 1, 0.9, 0.2},
|
||||
{-1, -0.5, -0.2, 1, 0.9, 0.2}]]
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-1, -0.5, -0.2, 1, 0.9, 0.2}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "nativevillages:hangingfish",
|
||||
burntime = 3,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("nativevillages:pearl", {
|
||||
description = ("Pearl"),
|
||||
inventory_image = "nativevillages_pearl.png",
|
||||
})
|
|
@ -0,0 +1,89 @@
|
|||
minetest.register_decoration({
|
||||
name = "nativevillages:lakehouse1",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt", "default:sand"},
|
||||
place_offset_y = 0,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"deciduous_forest_ocean", "deciduous_forest_shore", "coniferous_forest_ocean"},
|
||||
y_max = -0.5,
|
||||
y_min = -0.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/lakehouse1_0_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:lakehouse2",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt", "default:sand"},
|
||||
place_offset_y = 0,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"deciduous_forest_ocean", "deciduous_forest_shore", "coniferous_forest_ocean"},
|
||||
y_max = -0.5,
|
||||
y_min = -0.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/lakehouse2_0_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:lakehouse3",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt", "default:sand"},
|
||||
place_offset_y = 0,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"deciduous_forest_ocean", "deciduous_forest_shore", "coniferous_forest_ocean"},
|
||||
y_max = -0.5,
|
||||
y_min = -0.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/lakehouse3_0_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:lakehouse4",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt", "default:sand"},
|
||||
place_offset_y = 0,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"deciduous_forest_ocean", "deciduous_forest_shore", "coniferous_forest_ocean"},
|
||||
y_max = -0.5,
|
||||
y_min = -0.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/lakehouse4_0_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:lakefishtrap",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt", "default:sand"},
|
||||
place_offset_y = 0,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00003,
|
||||
biomes = {"deciduous_forest_ocean", "deciduous_forest_shore", "coniferous_forest_ocean"},
|
||||
y_max = -0.5,
|
||||
y_min = -0.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/lakefishtrap_0_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:lakeharbour",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt", "default:sand"},
|
||||
place_offset_y = 0,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00003,
|
||||
biomes = {"deciduous_forest_ocean", "deciduous_forest_shore", "coniferous_forest_ocean"},
|
||||
y_max = -0.5,
|
||||
y_min = -0.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/lakeharbour_0_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
|
@ -0,0 +1,479 @@
|
|||
mobs:register_mob("nativevillages:lakecatfish", {
|
||||
stepheight = 0.0,
|
||||
type = "animal",
|
||||
passive = true,
|
||||
attack_type = "dogfight",
|
||||
attack_animals = false,
|
||||
reach = 1,
|
||||
damage = 1,
|
||||
hp_min = 15,
|
||||
hp_max = 55,
|
||||
armor = 100,
|
||||
collisionbox = {-0.4, -0.01, -0.4, 0.4, 0.5, 0.4},
|
||||
visual = "mesh",
|
||||
mesh = "Lakecatfish.b3d",
|
||||
visual_size = {x = 1.0, y = 1.0},
|
||||
textures = {
|
||||
{"texturelakecatfish.png"},
|
||||
},
|
||||
sounds = {},
|
||||
makes_footstep_sound = false,
|
||||
walk_velocity = 1,
|
||||
run_velocity = 2,
|
||||
fly = true,
|
||||
fly_in = "default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing",
|
||||
fall_speed = 0,
|
||||
runaway = true,
|
||||
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:divingbeetle", "animalworld:scorpion", "player"},
|
||||
jump = false,
|
||||
stepheight = 0.0,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
air_damage = 1,
|
||||
lava_damage = 4,
|
||||
light_damage = 0,
|
||||
fear_height = 2,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 200,
|
||||
stand_end = 300,
|
||||
fly_start = 0,
|
||||
fly_end = 100,
|
||||
fly2_start = 100,
|
||||
fly2_end = 200,
|
||||
},
|
||||
fly_in = {"default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing"},
|
||||
floats = 0,
|
||||
follow = {},
|
||||
view_range = 10,
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed or tame
|
||||
if mobs:feed_tame(self, clicker, 4, false, true) then return end
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:lakecatfish",
|
||||
nodes = {"default:water_source"}, {"default:river_water_source"},
|
||||
neighbors = {"nativevillages:fishtrap"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
chance = 1, -- 15000
|
||||
active_object_count = 3,
|
||||
min_height = -10,
|
||||
max_height = 30,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:lakecatfish", ("Catfish"), "alakecatfish.png")
|
||||
|
||||
mobs.lakevillagerfemale_drops = {
|
||||
"nativevillages:catfish_cooked", "farming:string", "bucket:bucket_water", "farming:salt", "nativevillages:pearl"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:lakevillagerfemale", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 40,
|
||||
hp_max = 60,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Lakevillagerfemale.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturelakevillagerfemale.png"},
|
||||
{"texturelakevillagerfemale2.png"},
|
||||
{"texturelakevillagerfemale3.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_lakefemale",
|
||||
attack = "nativevillages_lakefemale2",
|
||||
damage = "nativevillages_lakefemale4",
|
||||
death = "nativevillages_lakefemale3",
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = false,
|
||||
jump_height = 1,
|
||||
stepheight = 0,
|
||||
fear_height = 1,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 200,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:hangingfish",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.lakevillagerfemale_drops
|
||||
if item:get_name() == "ethereal:banana" or item:get_name() == "farming:sugar" or item:get_name() == "group:food_cocoa" or item:get_name() == "farming:banana" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.lakevillagerfemale_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Lake Villager dropped you an item for fruit!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Lake Villager stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Lake Villager will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:lakevillagerfemale",
|
||||
nodes = {"default:pine_wood"},
|
||||
neighbors = {"nativevillages:hangingfish"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 2,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:lakevillagerfemale", ("Female Lake Villager"), "alakevillagerfemale.png")
|
||||
|
||||
mobs.lakevillagerfisher_drops = {
|
||||
"nativevillages:tamecatfish", "nativevillages:pearl"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:lakevillagerfisher", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 40,
|
||||
hp_max = 80,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Lakevillagerfisher.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturelakevillagerfisher.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_lakemale",
|
||||
attack = "nativevillages_lakemale2",
|
||||
damage = "nativevillages_lakemale4",
|
||||
death = "nativevillages_lakemale3",
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = false,
|
||||
jump_height = 1,
|
||||
stepheight = 0,
|
||||
fear_height = 1,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 200,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:fishtrap",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.lakevillagerfisher_drops
|
||||
if item:get_name() == "default:gold_lump" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.lakevillagerfisher_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Fisher bred you a catfish for gold!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Fisher stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Fisher will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:lakevillagerfisher",
|
||||
nodes = {"default:pine_wood"},
|
||||
neighbors = {"nativevillages:fishtrap"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 1,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:lakevillagerfisher", ("Fisher"), "alakevillagerfisher.png")
|
||||
|
||||
|
||||
mobs.lakevillagermale_drops = {
|
||||
"nativevillages:catfish_cooked", "farming:string", "bucket:bucket_water", "farming:salt", "nativevillages:pearl"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:lakevillagermale", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 40,
|
||||
hp_max = 90,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Lakevillagermale.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturelakevillagermale.png"},
|
||||
{"texturelakevillagermale2.png"},
|
||||
{"texturelakevillagermale3.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_lakemale",
|
||||
attack = "nativevillages_lakemale2",
|
||||
damage = "nativevillages_lakemale4",
|
||||
death = "nativevillages_lakemale3",
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = false,
|
||||
jump_height = 1,
|
||||
stepheight = 0,
|
||||
fear_height = 1,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 200,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:fishtrap",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.lakevillagermale_drops
|
||||
if item:get_name() == "ethereal:banana" or item:get_name() == "farming:sugar" or item:get_name() == "group:food_cocoa" or item:get_name() == "farming:banana" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.lakevillagermale_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Lake Villager dropped you an item for fruit!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("NPC stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("NPC will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:lakevillagermale",
|
||||
nodes = {"default:pine_wood"},
|
||||
neighbors = {"nativevillages:hangingfish"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 1,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:lakevillagermale", ("Male Lake Villager"), "alakevillagermale.png")
|
||||
|
|
@ -0,0 +1,131 @@
|
|||
minetest.register_node("nativevillages:savannathrone", {
|
||||
description = "Savanna Throne",
|
||||
visual_scale = 1,
|
||||
mesh = "Savannathrone.b3d",
|
||||
tiles = {"texturesavannathrone.png"},
|
||||
inventory_image = "asavannathrone.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 3},
|
||||
drawtype = "mesh",
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
--[[{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}]]
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "default:bronzeblock",
|
||||
recipe = "nativevillages:savannathrone",
|
||||
})
|
||||
|
||||
minetest.register_node("nativevillages:savannavessels", {
|
||||
description = "Savanna Vessels",
|
||||
visual_scale = 1,
|
||||
mesh = "Savannavessels.b3d",
|
||||
tiles = {"texturesavannavessels.png"},
|
||||
inventory_image = "asavannavessels.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 3},
|
||||
drawtype = "mesh",
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
--[[{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}]]
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "default:bronzeblock",
|
||||
recipe = "nativevillages:savannavessels",
|
||||
})
|
||||
|
||||
minetest.register_node("nativevillages:savannavshrine", {
|
||||
description = "Savanna Shrine",
|
||||
visual_scale = 1,
|
||||
mesh = "Savannashrine.b3d",
|
||||
tiles = {"texturesavannashrine.png"},
|
||||
inventory_image = "asavannashrine.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 3},
|
||||
drawtype = "mesh",
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
--[[{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}]]
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "default:bronzeblock",
|
||||
recipe = "nativevillages:savannashrine",
|
||||
})
|
||||
|
||||
minetest.register_node("nativevillages:savannacorpse", {
|
||||
description = "Savanna Corpse",
|
||||
visual_scale = 1,
|
||||
mesh = "Savannacorpse.b3d",
|
||||
tiles = {"texturesavannacorpse.png"},
|
||||
inventory_image = "asavannacorpse.png",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy = 3},
|
||||
drawtype = "mesh",
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-1, -0.5, -0.5, 0.5, 0.1, 1.3},
|
||||
--[[{-1, -0.5, -0.5, 0.5, 0.1, 1.3},
|
||||
{-1, -0.5, -0.5, 0.5, 0.1, 1.3}]]
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-1, -0.5, -0.5, 0.5, 0.1, 1.3}
|
||||
}
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mobs:meat",
|
||||
recipe = "nativevillages:savannacorpse",
|
||||
})
|
|
@ -0,0 +1,127 @@
|
|||
minetest.register_decoration({
|
||||
name = "nativevillages:savannahouse1",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dry_dirt_with_dry_grass"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"savanna"},
|
||||
y_max = 15.5,
|
||||
y_min = 10.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/savannahouse1_30_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:savannahouse2",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dry_dirt_with_dry_grass"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"savanna"},
|
||||
y_max = 15.5,
|
||||
y_min = 10.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/savannahouse2_30_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:savannahouse3",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dry_dirt_with_dry_grass"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00005,
|
||||
biomes = {"savanna"},
|
||||
y_max = 15.5,
|
||||
y_min = 10.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/savannahouse3_30_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:savannawitchhouse",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dry_dirt_with_dry_grass"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00003,
|
||||
biomes = {"savanna"},
|
||||
y_max = 15.5,
|
||||
y_min = 10.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/savannawitchhouse_30_0.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:savannawell",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dry_dirt_with_dry_grass"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00003,
|
||||
biomes = {"savanna"},
|
||||
y_max = 15.5,
|
||||
y_min = 10.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/savannawell_30_180.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:savannastable",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dry_dirt_with_dry_grass"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00003,
|
||||
biomes = {"savanna"},
|
||||
y_max = 15.5,
|
||||
y_min = 10.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/savannastable_30_180.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:savannapond",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dry_dirt_with_dry_grass"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00003,
|
||||
biomes = {"savanna"},
|
||||
y_max = 15.5,
|
||||
y_min = 10.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/savannapond_30_180.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:savannalogs",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dry_dirt_with_dry_grass"},
|
||||
place_offset_y = -29,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00003,
|
||||
biomes = {"savanna"},
|
||||
y_max = 15.5,
|
||||
y_min = 10.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/savannalogs_30_180.mts",
|
||||
flags = "force_placement",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,829 @@
|
|||
mobs:register_mob("nativevillages:malelion", {
|
||||
stepheight = 1,
|
||||
type = "monster",
|
||||
passive = false,
|
||||
attack_type = "dogfight",
|
||||
attack_animals = true,
|
||||
reach = 2,
|
||||
damage = 10,
|
||||
hp_min = 45,
|
||||
hp_max = 75,
|
||||
armor = 100,
|
||||
collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.95, 0.5},
|
||||
visual = "mesh",
|
||||
mesh = "Lionmale.b3d",
|
||||
visual_size = {x = 1.0, y = 1.0},
|
||||
textures = {
|
||||
{"texturelionmale.png"},
|
||||
},
|
||||
sounds = {
|
||||
attack = "nativevillages_lion2",
|
||||
random = "nativevillages_lion",
|
||||
damage = "nativevillages_lion4",
|
||||
death = "nativevillages_lion3",
|
||||
distance = 10,
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_lion2",
|
||||
random = "nativevillages_lion",
|
||||
damage = "nativevillages_lion4",
|
||||
death = "nativevillages_lion3",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 1,
|
||||
run_velocity = 3,
|
||||
runaway = false,
|
||||
jump = false,
|
||||
jump_height = 2,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 4,
|
||||
light_damage = 0,
|
||||
fear_height = 4,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
stand2_start = 100,
|
||||
stand2_end = 200,
|
||||
walk_start = 200,
|
||||
walk_end = 300,
|
||||
punch_speed = 100,
|
||||
punch_start = 300,
|
||||
punch_end = 400,
|
||||
},
|
||||
|
||||
follow = {
|
||||
},
|
||||
view_range = 15,
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed or tame
|
||||
if mobs:feed_tame(self, clicker, 4, false, true) then return end
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:malelion",
|
||||
neighbors = {"nativevillages:savannacorpse"},
|
||||
nodes = {"default:dry_dirt_with_dry_grass"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 1,
|
||||
chance = 1, -- 15000
|
||||
min_height = 10,
|
||||
max_height = 50,
|
||||
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:malelion", ("Male Lion"), "amalelion.png")
|
||||
|
||||
mobs:register_mob("nativevillages:femalelion", {
|
||||
stepheight = 1,
|
||||
type = "monster",
|
||||
passive = false,
|
||||
attack_type = "dogfight",
|
||||
attack_animals = true,
|
||||
reach = 2,
|
||||
damage = 7,
|
||||
hp_min = 45,
|
||||
hp_max = 75,
|
||||
armor = 100,
|
||||
collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.95, 0.5},
|
||||
visual = "mesh",
|
||||
mesh = "Lionfemale.b3d",
|
||||
visual_size = {x = 1.0, y = 1.0},
|
||||
textures = {
|
||||
{"texturelionfemale.png"},
|
||||
},
|
||||
sounds = {
|
||||
attack = "nativevillages_lion2",
|
||||
random = "nativevillages_lion",
|
||||
damage = "nativevillages_lion4",
|
||||
death = "nativevillages_lion3",
|
||||
distance = 10,
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
walk_velocity = 1,
|
||||
run_velocity = 4,
|
||||
runaway = false,
|
||||
jump = false,
|
||||
jump_height = 2,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 4,
|
||||
light_damage = 0,
|
||||
fear_height = 4,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
stand2_start = 100,
|
||||
stand2_end = 200,
|
||||
walk_start = 200,
|
||||
walk_end = 300,
|
||||
punch_speed = 100,
|
||||
punch_start = 300,
|
||||
punch_end = 400,
|
||||
},
|
||||
|
||||
follow = {
|
||||
},
|
||||
view_range = 15,
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed or tame
|
||||
if mobs:feed_tame(self, clicker, 4, false, true) then return end
|
||||
if mobs:protect(self, clicker) then return end
|
||||
if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:femalelion",
|
||||
neighbors = {"nativevillages:savannacorpse"},
|
||||
nodes = {"default:dry_dirt_with_dry_grass"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 1,
|
||||
chance = 1, -- 15000
|
||||
min_height = 10,
|
||||
max_height = 50,
|
||||
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:femalelion", ("Female Lion"), "afemalelion.png")
|
||||
|
||||
mobs.savannadoctor_drops = {
|
||||
"nativevillages:zombietame"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:savannadoctor", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 3,
|
||||
range = 4,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 40,
|
||||
hp_max = 70,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Savannadoctor.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturesavannadoctor.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_witchdoctor",
|
||||
attack = "nativevillages_witchdoctor2",
|
||||
damage = "nativevillages_savannamale4",
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:savannashrine",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.savannadoctor_drops
|
||||
if item:get_name() == "people:warriorgrave" or item:get_name() == "people:doctorgrave" or item:get_name() == "people:minergrave" or item:get_name() == "people:farmergrave" or item:get_name() == "people:villagergrave" or item:get_name() == "people:instructorgrave" or item:get_name() == "people:smithgrave" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.savannadoctor_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Witch Doctor created a tame Zombie!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Witch Doctor stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Witch Doctor will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:savannadoctor",
|
||||
nodes = {"default:dry_dirt_with_dry_grass", "default:clay"},
|
||||
neighbors = {"nativevillages:savannashrine"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 1,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:savannadoctor", ("Witch Doctor"), "asavannadoctor.png")
|
||||
|
||||
mobs.savannaqueen_drops = {
|
||||
"default:goldblock"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:savannaqueen", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 50,
|
||||
hp_max = 100,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Savannaqueen.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturesavannaqueen.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_savannafemale",
|
||||
attack = "nativevillages_savannafemale3",
|
||||
damage = "nativevillages_savannafemale4",
|
||||
death = "nativevillages_savannafemale2",
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:savannashrine",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.savannaqueen_drops
|
||||
if item:get_name() == "default:diamond" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.savannaqueen_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Royalty dropped you an item for gold!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Royalty stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Royalty will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:savannaqueen",
|
||||
nodes = {"default:dry_dirt_with_dry_grass", "default:clay"},
|
||||
neighbors = {"nativevillages:savannathrone"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 1,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:savannaqueen", ("Savanna Queen"), "asavannaqueen.png")
|
||||
|
||||
mobs.savannamale_drops = {
|
||||
"farming:vanilla", "farming:pumpkin", "farming:potato", "farming:pineapple", "farming:pepper", "farming:onion", "farming:peas", "farming:melon", "farming:cucumber", "farming:coffee_beans"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:savannamale", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 40,
|
||||
hp_max = 60,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Savannamale.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturesavannamale.png"},
|
||||
{"texturesavannamale2.png"},
|
||||
{"texturesavannamale3.png"},
|
||||
{"texturesavannamale4.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_savannamale",
|
||||
attack = "nativevillages_savannamale3",
|
||||
damage = "nativevillages_savannamale4",
|
||||
death = "nativevillages_savannamale2",
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:savannavessels",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.savannamale_drops
|
||||
if item:get_name() == "nativevillages:pearl" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.savannamale_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Savanna Villager dropped you an item for a pearl!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Savanna Villager stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Savanna Villager will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:savannamale",
|
||||
nodes = {"default:dry_dirt_with_dry_grass", "default:clay"},
|
||||
neighbors = {"nativevillages:savannavessels"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 2,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:savannamale", ("Male Savanna Villager"), "asavannamale.png")
|
||||
|
||||
mobs.savannaking_drops = {
|
||||
"default:goldblock"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:savannaking", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 50,
|
||||
hp_max = 120,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Savannaking.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturesavannaking.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_savannamale",
|
||||
attack = "nativevillages_savannamale3",
|
||||
damage = "nativevillages_savannamale4",
|
||||
death = "nativevillages_savannamale2",
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:savannathrone",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.savannaking_drops
|
||||
if item:get_name() == "default:diamond" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.savannaking_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Royalty dropped you an item for gold!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Royalty stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Royalty will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:savannaking",
|
||||
nodes = {"default:dry_dirt_with_dry_grass", "default:clay"},
|
||||
neighbors = {"nativevillages:savannathrone"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 1,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:savannaking", ("Savanna King"), "asavannaking.png")
|
||||
|
||||
mobs.savannafemale_drops = {
|
||||
"farming:vanilla", "farming:pumpkin", "farming:potato", "farming:pineapple", "farming:pepper", "farming:onion", "farming:peas", "farming:melon", "farming:cucumber", "farming:coffee_beans"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:savannafemale", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 30,
|
||||
hp_max = 60,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Savannafemale.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"texturesavannafemale.png"},
|
||||
{"texturesavannafemale2.png"},
|
||||
{"texturesavannafemale3.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_savannafemale",
|
||||
attack = "nativevillages_savannafemale3",
|
||||
damage = "nativevillages_savannafemale4",
|
||||
death = "nativevillages_savannafemale2",
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {},
|
||||
stay_near = "nativevillages:savannavessels",
|
||||
view_range = 15,
|
||||
owner = "",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.savannafemale_drops
|
||||
if item:get_name() == "nativevillages:pearl" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.savannafemale_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Savanna Villager dropped you an item for a pearl!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Savanna Villager stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Savanna Villager will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
if not mobs.custom_spawn_nativevillages then
|
||||
mobs:spawn({
|
||||
name = "nativevillages:savannafemale",
|
||||
nodes = {"default:dry_dirt_with_dry_grass", "default:clay"},
|
||||
neighbors = {"nativevillages:savannavessels"},
|
||||
min_light = 0,
|
||||
interval = 60,
|
||||
active_object_count = 2,
|
||||
chance = 1, -- 15000
|
||||
min_height = 0,
|
||||
max_height = 120,
|
||||
})
|
||||
end
|
||||
|
||||
mobs:register_egg("nativevillages:savannafemale", ("Female Savanna Villager"), "asavannafemale.png")
|
||||
|
Binary file not shown.
After Width: | Height: | Size: 576 KiB |
|
@ -0,0 +1,697 @@
|
|||
mobs.slavechickenbreeder_drops = {
|
||||
"nativevillages:desertchickentame"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:slavechickenbreeder", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 40,
|
||||
hp_max = 60,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Slavechickenbreeder.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"textureslavechickenbreeder.png"},
|
||||
{"textureslavechickenbreeder2.png"},
|
||||
{"textureslavechickenbreeder3.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_desertfemale2",
|
||||
random = "nativevillages_desertfemale",
|
||||
damage = "nativevillages_desertfemale4",
|
||||
death = "nativevillages_icevillagerfemale3",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {"farming:turkish_delight", "farming:garlic_bread", "farming:donut", "farming:donut_chocolate", "farming:donut_apple", "farming:porridge", "farming:jaffa_cake", "farming:apple_pie", "farming:spaghetti", "farming:burger", "farming:bibimbap"},
|
||||
view_range = 15,
|
||||
owner = "singleplayer",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.slavechickenbreeder_drops
|
||||
if item:get_name() == "farming:seed_wheat" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.slavechickenbreeder_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Chicken hatched!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Chicken Breeder stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Chicken Breeder will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:slavechickenbreeder", ("Chicken Breeder"), "aslavechickenbreeder.png")
|
||||
|
||||
mobs.slavecowherder_drops = {
|
||||
"nativevillages:domesticcow"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:slavecowherder", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 40,
|
||||
hp_max = 60,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Slavecowherder.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"textureslavecowherder.png"},
|
||||
{"textureslavecowherder2.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
attack = "nativevillages_grasslandfemale2",
|
||||
random = "nativevillages_grasslandfemale",
|
||||
damage = "nativevillages_grasslandfemale3",
|
||||
death = "nativevillages_grasslandfemale3",
|
||||
distance = 10,
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {"farming:turkish_delight", "farming:garlic_bread", "farming:donut", "farming:donut_chocolate", "farming:donut_apple", "farming:porridge", "farming:jaffa_cake", "farming:apple_pie", "farming:spaghetti", "farming:burger", "farming:bibimbap"},
|
||||
view_range = 15,
|
||||
owner = "singleplayer",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.slavecowherder_drops
|
||||
if item:get_name() == "farming:wheat" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.slavecowherder_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Cow has been raised!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Cow Herder stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Cow Herder will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:slavecowherder", ("Cow Herder"), "aslavecowherder.png")
|
||||
|
||||
mobs.slaveliontrainer_drops = {
|
||||
"nativevillages:femaleliontame", "nativevillages:maleliontame"
|
||||
}
|
||||
|
||||
mobs:register_mob("nativevillages:slaveliontrainer", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 40,
|
||||
hp_max = 90,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Slaveliontrainer.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"textureslaveliontrainer.png"},
|
||||
{"textureslaveliontrainer2.png"},
|
||||
{"textureslaveliontrainer3.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_savannamale",
|
||||
attack = "nativevillages_savannamale3",
|
||||
damage = "nativevillages_savannamale4",
|
||||
death = "nativevillages_savannamale2",
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {"farming:turkish_delight", "farming:garlic_bread", "farming:donut", "farming:donut_chocolate", "farming:donut_apple", "farming:porridge", "farming:jaffa_cake", "farming:apple_pie", "farming:spaghetti", "farming:burger", "farming:bibimbap"},
|
||||
view_range = 15,
|
||||
owner = "singleplayer",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.slaveliontrainer_drops
|
||||
if item:get_name() == "default:gold_lump" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.slaveliontrainer_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("Lion has been raised!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Lion Trainer stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Lion Trainer will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:slaveliontrainer", ("Lion Trainer"), "aslaveliontrainer.png")
|
||||
|
||||
|
||||
|
||||
mobs:register_mob("nativevillages:slavefemaledancer", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 40,
|
||||
hp_max = 50,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Slavefemaledancer.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"textureslavefemaledancer.png"},
|
||||
{"textureslavefemaledancer2.png"},
|
||||
{"textureslavefemaledancer3.png"},
|
||||
{"textureslavefemaledancer4.png"},
|
||||
{"textureslavefemaledancer5.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_dancefermale",
|
||||
attack = "nativevillages_dancefermale2",
|
||||
damage = "nativevillages_dancefermale3",
|
||||
death = "nativevillages_dancefermale4",
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {"farming:turkish_delight", "farming:garlic_bread", "farming:donut", "farming:donut_chocolate", "farming:donut_apple", "farming:porridge", "farming:jaffa_cake", "farming:apple_pie", "farming:spaghetti", "farming:burger", "farming:bibimbap"},
|
||||
view_range = 15,
|
||||
owner = "singleplayer",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
stand2_start = 100,
|
||||
stand2_end = 200,
|
||||
stand3_start = 200,
|
||||
stand3_end = 300,
|
||||
walk_start = 300,
|
||||
walk_end = 400,
|
||||
punch_speed = 100,
|
||||
punch_start = 400,
|
||||
punch_end = 500,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.npc_drops
|
||||
if item:get_name() == "default:gold_lump" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.npc_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("NPC dropped you an item for gold!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Dancer will dance!."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Dancer will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:slavefemaledancer", ("Female Dancer"), "aslavefemaledancer.png")
|
||||
|
||||
|
||||
mobs:register_mob("nativevillages:slaveloyalcannibal", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 6,
|
||||
reach = 4,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 50,
|
||||
hp_max = 100,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Slaveloyalcannibal.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"textureslaveloyalcannibal.png"},
|
||||
{"textureslaveloyalcannibal2.png"},
|
||||
{"textureslaveloyalcannibal3.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_cannibalmale",
|
||||
attack = "nativevillages_cannibalmale2",
|
||||
damage = "nativevillages_cannibalmale3",
|
||||
death = "nativevillages_cannibalmale4",
|
||||
},
|
||||
walk_velocity = 2,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {"nativevillages:driedhumanmeat"},
|
||||
view_range = 15,
|
||||
owner = "singleplayer",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 100,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
walk_start = 100,
|
||||
walk_end = 200,
|
||||
punch_speed = 100,
|
||||
punch_start = 200,
|
||||
punch_end = 300,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
|
||||
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Cannibal stands still."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Cannibal will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:slaveloyalcannibal", ("Loyal Cannibal"), "aslaveloyalcannibal.png")
|
||||
|
||||
|
||||
mobs:register_mob("nativevillages:slavemaledancer", {
|
||||
type = "npc",
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "dogfight",
|
||||
attacks_monsters = true,
|
||||
attack_npcs = false,
|
||||
owner_loyal = true,
|
||||
pathfinding = true,
|
||||
hp_min = 60,
|
||||
hp_max = 70,
|
||||
armor = 100,
|
||||
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
|
||||
visual = "mesh",
|
||||
mesh = "Slavemaledancer.b3d",
|
||||
drawtype = "front",
|
||||
textures = {
|
||||
{"textureslavemaledancer.png"},
|
||||
{"textureslavemaledancer2.png"},
|
||||
{"textureslavemaledancer3.png"},
|
||||
{"textureslavemaledancer4.png"},
|
||||
|
||||
},
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "nativevillages_dancermale",
|
||||
attack = "nativevillages_dancermale2",
|
||||
damage = "nativevillages_dancermale3",
|
||||
death = "nativevillages_dancermale4",
|
||||
},
|
||||
walk_velocity = 1,
|
||||
walk_chance = 15,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
drops = {
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 2,
|
||||
light_damage = 0,
|
||||
follow = {"farming:turkish_delight", "farming:garlic_bread", "farming:donut", "farming:donut_chocolate", "farming:donut_apple", "farming:porridge", "farming:jaffa_cake", "farming:apple_pie", "farming:spaghetti", "farming:burger", "farming:bibimbap"},
|
||||
view_range = 15,
|
||||
owner = "singleplayer",
|
||||
order = "follow",
|
||||
fear_height = 3,
|
||||
animation = {
|
||||
speed_normal = 50,
|
||||
stand_start = 0,
|
||||
stand_end = 100,
|
||||
stand2_start = 100,
|
||||
stand2_end = 200,
|
||||
stand3_start = 200,
|
||||
stand3_end = 300,
|
||||
walk_start = 300,
|
||||
walk_end = 400,
|
||||
punch_speed = 100,
|
||||
punch_start = 400,
|
||||
punch_end = 500,
|
||||
},
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
|
||||
-- feed to heal npc
|
||||
if mobs:feed_tame(self, clicker, 8, true, true) then return end
|
||||
|
||||
-- capture npc with net or lasso
|
||||
if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end
|
||||
|
||||
-- protect npc with mobs:protector
|
||||
if mobs:protect(self, clicker) then return end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- right clicking with gold lump drops random item from mobs.npc_drops
|
||||
if item:get_name() == "default:gold_lump" then
|
||||
|
||||
if not mobs.is_creative(name) then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.y = pos.y + 0.5
|
||||
|
||||
local drops = self.npc_drops or mobs.npc_drops
|
||||
|
||||
minetest.add_item(pos, {
|
||||
name = drops[math.random(1, #drops)]
|
||||
})
|
||||
|
||||
minetest.chat_send_player(name, ("NPC dropped you an item for gold!"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- by right-clicking owner can switch npc between follow and stand
|
||||
if self.owner and self.owner == name then
|
||||
|
||||
if self.order == "follow" then
|
||||
|
||||
self.attack = nil
|
||||
self.order = "stand"
|
||||
self.state = "stand"
|
||||
self:set_animation("stand")
|
||||
self:set_velocity(0)
|
||||
|
||||
minetest.chat_send_player(name, ("Dancer will dance!."))
|
||||
else
|
||||
self.order = "follow"
|
||||
|
||||
minetest.chat_send_player(name, ("Dancer will follow you."))
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
mobs:register_egg("nativevillages:slavemaledancer", ("Male Dancer"), "aslavemaledancer.png")
|
|
@ -0,0 +1,83 @@
|
|||
minetest.register_decoration({
|
||||
name = "nativevillages:lakevillage",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt", "default:sand"},
|
||||
place_offset_y = 0,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.00008,
|
||||
biomes = {"deciduous_forest_ocean", "grassland_ocean", "deciduous_forest_shore", "coniferous_forest_ocean"},
|
||||
y_max = -0.5,
|
||||
y_min = -0.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/lakevillage3_0_180.mts",
|
||||
flags = "force_placement",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:junglevillage",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_rainforest_litter"},
|
||||
place_offset_y = -4,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.0001,
|
||||
biomes = {"rainforest", "rainforest_swamp"},
|
||||
y_max = 3.5,
|
||||
y_min = 2.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/junglevillage_4_180.mts",
|
||||
flags = "force_placement",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:grasslandvillage",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dirt_with_grass"},
|
||||
place_offset_y = -4,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.0001,
|
||||
biomes = {"grassland", "grassland_dunes", "deciduous_forest_shore"},
|
||||
y_max = 3.5,
|
||||
y_min = 2.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/grasslandvillage_4_270.mts",
|
||||
flags = "force_placement",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:savannavillge",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:dry_dirt_with_dry_grass"},
|
||||
place_offset_y = -4,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.0001,
|
||||
biomes = {"savanna"},
|
||||
y_max = 3.5,
|
||||
y_min = 2.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/savannavillage_4_180.mts",
|
||||
flags = "force_placement",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:desertvillage",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:desert_sand", "default:sand"},
|
||||
place_offset_y = -4,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.0001,
|
||||
biomes = {"desert"},
|
||||
y_max = 3.5,
|
||||
y_min = 2.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/desertvillage_4_180.mts",
|
||||
flags = "force_placement",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
name = "nativevillages:icevillage",
|
||||
deco_type = "schematic",
|
||||
place_on = {"default:snowblock"},
|
||||
place_offset_y = -4,
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.0001,
|
||||
biomes = {"icesheet", "icesheet_ocean", "tundra", "tundra_ocean", "tundra_highland", },
|
||||
y_max = 3.5,
|
||||
y_min = 2.5,
|
||||
schematic = minetest.get_modpath("nativevillages").."/schematics/icevillage_4_90.mts",
|
||||
flags = "force_placement",
|
||||
})
|
Loading…
Reference in New Issue