Merge pull request 'mobs-redo mobitems breakup' (#2247) from mobs-redo-mobitem-breakup into master
Reviewed-on: MineClone2/MineClone2#2247
|
@ -14,7 +14,7 @@ mcl_damage = {
|
||||||
cactus = {},
|
cactus = {},
|
||||||
fall = {bypasses_armor = true},
|
fall = {bypasses_armor = true},
|
||||||
fly_into_wall = {bypasses_armor = true}, -- unused
|
fly_into_wall = {bypasses_armor = true}, -- unused
|
||||||
out_of_world = {bypasses_armor = true, bypasses_magic = true, bypasses_invulnerability = true},
|
out_of_world = {bypasses_armor = true, bypasses_magic = true, bypasses_invulnerability = true, bypasses_totem = true},
|
||||||
generic = {bypasses_armor = true},
|
generic = {bypasses_armor = true},
|
||||||
magic = {is_magic = true, bypasses_armor = true},
|
magic = {is_magic = true, bypasses_armor = true},
|
||||||
dragon_breath = {is_magic = true, bypasses_armor = true}, -- this is only used for dragon fireball; dragon fireball does not actually deal impact damage tho, so this is unreachable
|
dragon_breath = {is_magic = true, bypasses_armor = true}, -- this is only used for dragon fireball; dragon fireball does not actually deal impact damage tho, so this is unreachable
|
||||||
|
|
|
@ -43,8 +43,9 @@ local function wither_spawn(pos)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local old_onplace=minetest.registered_nodes[mobs_mc.items.head_wither_skeleton].on_place
|
local wither_head = minetest.registered_nodes["mcl_heads:wither_skeleton"]
|
||||||
minetest.registered_nodes[mobs_mc.items.head_wither_skeleton].on_place=function(itemstack,placer,pointed)
|
local old_on_place = wither_head.on_place
|
||||||
|
function wither_head.on_place(itemstack, placer, pointed)
|
||||||
minetest.after(0, wither_spawn, pointed.above)
|
minetest.after(0, wither_spawn, pointed.above)
|
||||||
old_onplace(itemstack,placer,pointed)
|
old_on_place(itemstack, placer, pointed)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,276 +0,0 @@
|
||||||
--[[ This table contains the concrete itemstrings to be used by this mod.
|
|
||||||
All mobs in this mod must use variables in this table, instead
|
|
||||||
of hardcoding the itemstring.
|
|
||||||
This way, external mods are enabled to replace the itemstrings to provide
|
|
||||||
their own items and game integration is made much simpler.
|
|
||||||
|
|
||||||
An item IDs is supposed to be overwritten by adding
|
|
||||||
mobs_mc.override.items["example:item"] in a game mod
|
|
||||||
with name "mobs_mc_gameconfig". ]]
|
|
||||||
|
|
||||||
|
|
||||||
-- Standard items
|
|
||||||
|
|
||||||
-- If true, mobs_mc adds the monster egg nodes (needs default mod).
|
|
||||||
-- Set to false in your gameconfig mod if you create your own monster egg nodes.
|
|
||||||
mobs_mc.create_monster_egg_nodes = true
|
|
||||||
|
|
||||||
mobs_mc.items = {}
|
|
||||||
|
|
||||||
mobs_mc.items = {
|
|
||||||
-- Items defined in mobs_mc
|
|
||||||
blaze_rod = "mobs_mc:blaze_rod",
|
|
||||||
blaze_powder = "mobs_mc:blaze_powder",
|
|
||||||
chicken_raw = "mobs_mc:chicken_raw",
|
|
||||||
chicken_cooked = "mobs_mc:chicken_cooked",
|
|
||||||
feather = "mobs_mc:feather",
|
|
||||||
beef_raw = "mobs_mc:beef_raw",
|
|
||||||
beef_cooked = "mobs_mc:beef_cooked",
|
|
||||||
bowl = "mobs_mc:bowl",
|
|
||||||
mushroom_stew = "mobs_mc:mushroom_stew",
|
|
||||||
milk = "mobs_mc:milk_bucket",
|
|
||||||
dragon_egg = "mobs_mc:dragon_egg",
|
|
||||||
egg = "mobs_mc:egg",
|
|
||||||
ender_eye = "mobs_mc:ender_eye",
|
|
||||||
ghast_tear = "mobs_mc:ghast_tear",
|
|
||||||
saddle = "mobs:saddle",
|
|
||||||
iron_horse_armor = "mobs_mc:iron_horse_armor",
|
|
||||||
gold_horse_armor = "mobs_mc:gold_horse_armor",
|
|
||||||
diamond_horse_armor = "mobs_mc:diamond_horse_armor",
|
|
||||||
porkchop_raw = "mobs_mc:porkchop_raw",
|
|
||||||
porkchop_cooked = "mobs_mc:porkchop_cooked",
|
|
||||||
carrot_on_a_stick = "mobs_mc:carrot_on_a_stick",
|
|
||||||
rabbit_raw = "mobs_mc:rabbit_raw",
|
|
||||||
rabbit_cooked = "mobs_mc:rabbit_cooked",
|
|
||||||
rabbit_hide = "mobs_mc:rabbit_hide",
|
|
||||||
mutton_raw = "mobs_mc:mutton_raw",
|
|
||||||
mutton_cooked = "mobs_mc:mutton_cooked",
|
|
||||||
shulker_shell = "mobs_mc:shulker_shell",
|
|
||||||
magma_cream = "mobs_mc:magma_cream",
|
|
||||||
spider_eye = "mobs_mc:spider_eye",
|
|
||||||
snowball = "mobs_mc:snowball",
|
|
||||||
totem = "mobs_mc:totem",
|
|
||||||
rotten_flesh = "mobs_mc:rotten_flesh",
|
|
||||||
nether_star = "mobs_mc:nether_star",
|
|
||||||
bone = "mobs_mc:bone",
|
|
||||||
slimeball = "mobs_mc:slimeball",
|
|
||||||
arrow = "mobs_mc:arrow",
|
|
||||||
bow = "mobs_mc:bow_wood",
|
|
||||||
head_creeper = "mobs_mc:head_creeper",
|
|
||||||
head_zombie = "mobs_mc:head_zombie",
|
|
||||||
head_skeleton = "mobs_mc:head_skeleton",
|
|
||||||
head_wither_skeleton = "mobs_mc:head_wither_skeleton",
|
|
||||||
|
|
||||||
-- External items
|
|
||||||
-- Mobs Redo
|
|
||||||
leather = "mobs:leather",
|
|
||||||
shears = "mobs:shears",
|
|
||||||
|
|
||||||
-- Minetest Game
|
|
||||||
top_snow = "default:snow",
|
|
||||||
snow_block = "default:snowblock",
|
|
||||||
mushroom_red = "flowers:mushroom_red",
|
|
||||||
bucket = "bucket:bucket_empty",
|
|
||||||
grass_block = "default:dirt_with_grass",
|
|
||||||
string = "farming:string",
|
|
||||||
stick = "default:stick",
|
|
||||||
flint = "default:flint",
|
|
||||||
iron_ingot = "default:steel_ingot",
|
|
||||||
iron_block = "default:steelblock",
|
|
||||||
fire = "fire:basic_flame",
|
|
||||||
gunpowder = "tnt:gunpowder",
|
|
||||||
flint_and_steel = "fire:flint_and_steel",
|
|
||||||
water_source = "default:water_source",
|
|
||||||
river_water_source = "default:river_water_source",
|
|
||||||
black_dye = "dye:black",
|
|
||||||
poppy = "flowers:rose",
|
|
||||||
dandelion = "flowers:dandelion_yellow",
|
|
||||||
coal = "default:coal_lump",
|
|
||||||
emerald = "default:diamond",
|
|
||||||
iron_axe = "default:axe_steel",
|
|
||||||
gold_sword = "default:sword_mese",
|
|
||||||
gold_ingot = "default:gold_ingot",
|
|
||||||
gold_nugget = "default:gold_lump",
|
|
||||||
glowstone_dust = "default:mese_crystal_fragment",
|
|
||||||
redstone = "default:mese_crystal_fragment",
|
|
||||||
glass_bottle = "vessels:glass_bottle",
|
|
||||||
sugar = "default:papyrus",
|
|
||||||
wheat = "farming:wheat",
|
|
||||||
hay_bale = "farming:straw",
|
|
||||||
prismarine_shard = "default:mese_crystal_fragment",
|
|
||||||
prismarine_crystals = "default:mese_crystal",
|
|
||||||
apple = "default:apple",
|
|
||||||
golden_apple = "default:apple",
|
|
||||||
rabbit_foot = "mobs_mc:rabbit_foot",
|
|
||||||
|
|
||||||
-- Boss items
|
|
||||||
wet_sponge = "default:gold_block", -- only dropped by elder guardian; there is no equivalent block in Minetest Game
|
|
||||||
|
|
||||||
-- Other
|
|
||||||
nether_brick_block = "nether:brick",
|
|
||||||
mycelium = "ethereal:mushroom_dirt",
|
|
||||||
carrot = "farming:carrot",
|
|
||||||
potato = "farming:potato",
|
|
||||||
golden_carrot = "farming:carrot_gold",
|
|
||||||
fishing_rod = "fishing:pole_wood",
|
|
||||||
fish_raw = "fishing:fish_raw",
|
|
||||||
salmon_raw = "fishing:carp_raw",
|
|
||||||
clownfish_raw = "fishing:clownfish_raw",
|
|
||||||
pufferfish_raw = "fishing:pike_raw",
|
|
||||||
|
|
||||||
cookie = "farming:cookie",
|
|
||||||
|
|
||||||
|
|
||||||
-- TODO: Add actual ender pearl
|
|
||||||
ender_pearl = "farorb:farorb",
|
|
||||||
|
|
||||||
nether_portal = "nether:portal",
|
|
||||||
netherrack = "nether:rack",
|
|
||||||
nether_brick_block = "nether:brick",
|
|
||||||
|
|
||||||
-- Wool (Minecraft color scheme)
|
|
||||||
wool_white = "wool:white",
|
|
||||||
wool_light_grey = "wool:grey",
|
|
||||||
wool_grey = "wool:dark_grey",
|
|
||||||
wool_blue = "wool:blue",
|
|
||||||
wool_lime = "wool:green",
|
|
||||||
wool_green = "wool:dark_green",
|
|
||||||
wool_purple = "wool:violet",
|
|
||||||
wool_pink = "wool:pink",
|
|
||||||
wool_yellow = "wool:yellow",
|
|
||||||
wool_orange = "wool:orange",
|
|
||||||
wool_brown = "wool:brown",
|
|
||||||
wool_red = "wool:red",
|
|
||||||
wool_cyan = "wool:cyan",
|
|
||||||
wool_magenta = "wool:magenta",
|
|
||||||
wool_black = "wool:black",
|
|
||||||
-- Light blue intentionally missing
|
|
||||||
|
|
||||||
-- Special items
|
|
||||||
music_discs = {}, -- No music discs by default; used by creeper. Override this if your game has music discs.
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Tables for attracting, feeding and breeding mobs
|
|
||||||
mobs_mc.follow = {
|
|
||||||
sheep = { mobs_mc.items.wheat },
|
|
||||||
cow = { mobs_mc.items.wheat },
|
|
||||||
chicken = { "farming:seed_wheat", "farming:seed_cotton" }, -- seeds in general
|
|
||||||
parrot = { "farming:seed_wheat", "farming:seed_cotton" }, -- seeds in general
|
|
||||||
horse = { mobs_mc.items.apple, mobs_mc.items.sugar, mobs_mc.items.wheat, mobs_mc.items.hay_bale, mobs_mc.items.golden_apple, mobs_mc.items.golden_carrot },
|
|
||||||
llama = { mobs_mc.items.wheat, mobs_mc.items.hay_bale, },
|
|
||||||
pig = { mobs_mc.items.potato, mobs_mc.items.carrot, mobs_mc.items.carrot_on_a_stick,
|
|
||||||
mobs_mc.items.apple, -- Minetest Game extra
|
|
||||||
},
|
|
||||||
rabbit = { mobs_mc.items.dandelion, mobs_mc.items.carrot, mobs_mc.items.golden_carrot, "farming_plus:carrot_item", },
|
|
||||||
ocelot = { mobs_mc.items.fish_raw, mobs_mc.items.salmon_raw, mobs_mc.items.clownfish_raw, mobs_mc.items.pufferfish_raw,
|
|
||||||
mobs_mc.items.chicken_raw, -- Minetest Game extra
|
|
||||||
},
|
|
||||||
wolf = { mobs_mc.items.bone },
|
|
||||||
dog = { mobs_mc.items.rabbit_raw, mobs_mc.items.rabbit_cooked, mobs_mc.items.mutton_raw, mobs_mc.items.mutton_cooked, mobs_mc.items.beef_raw, mobs_mc.items.beef_cooked, mobs_mc.items.chicken_raw, mobs_mc.items.chicken_cooked, mobs_mc.items.rotten_flesh,
|
|
||||||
-- Mobs Redo items
|
|
||||||
"mobs:meat", "mobs:meat_raw" },
|
|
||||||
villager = { "mcl_farming:bread", "mcl_farming:carrot_item", "mcl_farming:beetroot_item" , "mcl_farming:potato_item" },
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Contents for replace_what
|
|
||||||
mobs_mc.replace = {
|
|
||||||
-- Rabbits reduce carrot growth stage by 1
|
|
||||||
rabbit = {
|
|
||||||
-- Farming Redo carrots
|
|
||||||
{"farming:carrot_8", "farming:carrot_7", 0},
|
|
||||||
{"farming:carrot_7", "farming:carrot_6", 0},
|
|
||||||
{"farming:carrot_6", "farming:carrot_5", 0},
|
|
||||||
{"farming:carrot_5", "farming:carrot_4", 0},
|
|
||||||
{"farming:carrot_4", "farming:carrot_3", 0},
|
|
||||||
{"farming:carrot_3", "farming:carrot_2", 0},
|
|
||||||
{"farming:carrot_2", "farming:carrot_1", 0},
|
|
||||||
{"farming:carrot_1", "air", 0},
|
|
||||||
-- Farming Plus carrots
|
|
||||||
{"farming_plus:carrot", "farming_plus:carrot_7", 0},
|
|
||||||
{"farming_plus:carrot_6", "farming_plus:carrot_5", 0},
|
|
||||||
{"farming_plus:carrot_5", "farming_plus:carrot_4", 0},
|
|
||||||
{"farming_plus:carrot_4", "farming_plus:carrot_3", 0},
|
|
||||||
{"farming_plus:carrot_3", "farming_plus:carrot_2", 0},
|
|
||||||
{"farming_plus:carrot_2", "farming_plus:carrot_1", 0},
|
|
||||||
{"farming_plus:carrot_1", "air", 0},
|
|
||||||
},
|
|
||||||
-- Sheep eat grass
|
|
||||||
sheep = {
|
|
||||||
-- Grass Block
|
|
||||||
{ "default:dirt_with_grass", "default:dirt", -1 },
|
|
||||||
-- “Tall Grass”
|
|
||||||
{ "default:grass_5", "air", 0 },
|
|
||||||
{ "default:grass_4", "air", 0 },
|
|
||||||
{ "default:grass_3", "air", 0 },
|
|
||||||
{ "default:grass_2", "air", 0 },
|
|
||||||
{ "default:grass_1", "air", 0 },
|
|
||||||
},
|
|
||||||
-- Silverfish populate stone, etc. with monster eggs
|
|
||||||
silverfish = {
|
|
||||||
{"default:stone", "mobs_mc:monster_egg_stone", -1},
|
|
||||||
{"default:cobble", "mobs_mc:monster_egg_cobble", -1},
|
|
||||||
{"default:mossycobble", "mobs_mc:monster_egg_mossycobble", -1},
|
|
||||||
{"default:stonebrick", "mobs_mc:monster_egg_stonebrick", -1},
|
|
||||||
{"default:stone_block", "mobs_mc:monster_egg_stone_block", -1},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
-- List of nodes on which mobs can spawn
|
|
||||||
mobs_mc.spawn = {
|
|
||||||
solid = { "group:cracky", "group:crumbly", "group:shovely", "group:pickaxey" }, -- spawn on "solid" nodes (this is mostly just guessing)
|
|
||||||
|
|
||||||
grassland = { mobs_mc.items.grass_block, "ethereal:prairie_dirt" },
|
|
||||||
savanna = { "default:dirt_with_dry_grass" },
|
|
||||||
grassland_savanna = { mobs_mc.items.grass_block, "default:dirt_with_dry_grass" },
|
|
||||||
desert = { "default:desert_sand", "group:sand" },
|
|
||||||
jungle = { "default:dirt_with_rainforest_litter", "default:jungleleaves", "default:junglewood", "mcl_core:jungleleaves", "mcl_core:junglewood" },
|
|
||||||
snow = { "default:snow", "default:snowblock", "default:dirt_with_snow" },
|
|
||||||
end_city = { "default:sandstonebrick", "mcl_end:purpur_block", "mcl_end:end_stone" },
|
|
||||||
wolf = { mobs_mc.items.grass_block, "default:dirt_with_rainforest_litter", "default:dirt", "default:dirt_with_snow", "default:snow", "default:snowblock" },
|
|
||||||
village = { "mg_villages:road" },
|
|
||||||
|
|
||||||
-- These probably don't need overrides
|
|
||||||
mushroom_island = { mobs_mc.items.mycelium, "mcl_core:mycelium" },
|
|
||||||
nether_fortress = { mobs_mc.items.nether_brick_block, "mcl_nether:nether_brick", },
|
|
||||||
nether = { mobs_mc.items.netherrack, "mcl_nether:netherrack", },
|
|
||||||
nether_portal = { mobs_mc.items.nether_portal, "mcl_portals:portal" },
|
|
||||||
water = { mobs_mc.items.water_source, "mcl_core:water_source", "default:water_source" },
|
|
||||||
}
|
|
||||||
|
|
||||||
-- This table contains important spawn height references for the mob spawn height.
|
|
||||||
-- Please base your mob spawn height on these numbers to keep things clean.
|
|
||||||
mobs_mc.spawn_height = {
|
|
||||||
water = tonumber(minetest.settings:get("water_level")) or 0, -- Water level in the Overworld
|
|
||||||
|
|
||||||
-- Overworld boundaries (inclusive) --I adjusted this to be more reasonable
|
|
||||||
overworld_min = -64,-- -2999,
|
|
||||||
overworld_max = 31000,
|
|
||||||
|
|
||||||
-- Nether boundaries (inclusive)
|
|
||||||
nether_min = -29067,-- -3369,
|
|
||||||
nether_max = -28939,-- -3000,
|
|
||||||
|
|
||||||
-- End boundaries (inclusive)
|
|
||||||
end_min = -6200,
|
|
||||||
end_max = -6000,
|
|
||||||
}
|
|
||||||
|
|
||||||
mobs_mc.misc = {
|
|
||||||
shears_wear = 276, -- Wear to add per shears usage (238 uses)
|
|
||||||
totem_fail_nodes = {} -- List of nodes in which the totem of undying fails
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Item name overrides from mobs_mc_gameconfig (if present)
|
|
||||||
if minetest.get_modpath("mobs_mc_gameconfig") and mobs_mc.override then
|
|
||||||
local tables = {"items", "follow", "replace", "spawn", "spawn_height", "misc"}
|
|
||||||
|
|
||||||
for t=1, #tables do
|
|
||||||
local tbl = tables[t]
|
|
||||||
if mobs_mc.override[tbl] then
|
|
||||||
for k, v in pairs(mobs_mc.override[tbl]) do
|
|
||||||
mobs_mc[tbl][k] = v
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
|
@ -1,587 +0,0 @@
|
||||||
--MCmobs v0.5
|
|
||||||
--maikerumine
|
|
||||||
--made for MC like Survival game
|
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
|
||||||
|
|
||||||
--THIS IS THE MASTER ITEM LIST TO USE WITH DEFAULT
|
|
||||||
|
|
||||||
-- NOTE: Most strings intentionally not marked for translation, other mods already have these items.
|
|
||||||
-- TODO: Remove this file eventually, most items are already outsourced in other mods.
|
|
||||||
|
|
||||||
local S = minetest.get_translator(minetest.get_current_modname())
|
|
||||||
|
|
||||||
local c = mobs_mc.is_item_variable_overridden
|
|
||||||
|
|
||||||
-- Blaze
|
|
||||||
if c("blaze_rod") then
|
|
||||||
minetest.register_craftitem("mobs_mc:blaze_rod", {
|
|
||||||
description = "Blaze Rod",
|
|
||||||
_doc_items_longdesc = "This is a crafting component dropped from dead blazes.",
|
|
||||||
wield_image = "mcl_mobitems_blaze_rod.png",
|
|
||||||
inventory_image = "mcl_mobitems_blaze_rod.png",
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Make blaze rod furnace-burnable. 1.5 times the burn time of a coal lump
|
|
||||||
local coalcraft, burntime
|
|
||||||
if minetest.get_modpath("default") then
|
|
||||||
coalcraft = minetest.get_craft_result({method="fuel", width=1, items={"default:coal_lump"}})
|
|
||||||
end
|
|
||||||
if coalcraft then
|
|
||||||
burntime = math.floor(coalcraft.time * 1.5)
|
|
||||||
end
|
|
||||||
if burntime == nil or burntime == 0 then
|
|
||||||
burntime = 60
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "fuel",
|
|
||||||
burntime = burntime,
|
|
||||||
recipe = "mobs_mc:blaze_rod",
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("blaze_powder") then
|
|
||||||
minetest.register_craftitem("mobs_mc:blaze_powder", {
|
|
||||||
description = "Blaze Powder",
|
|
||||||
_doc_items_longdesc = "This item is mainly used for brewing potions and crafting.",
|
|
||||||
wield_image = "mcl_mobitems_blaze_powder.png",
|
|
||||||
inventory_image = "mcl_mobitems_blaze_powder.png",
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("blaze_rod") and c("blaze_powder") then
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "mobs_mc:blaze_powder 2",
|
|
||||||
recipe = {{ "mobs_mc:blaze_rod" }},
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Chicken
|
|
||||||
if c("chicken_raw") then
|
|
||||||
minetest.register_craftitem("mobs_mc:chicken_raw", {
|
|
||||||
description = "Raw Chicken",
|
|
||||||
_doc_items_longdesc = "Raw chicken is a food item and can be eaten safely. Cooking it will increase its nutritional value.",
|
|
||||||
inventory_image = "mcl_mobitems_chicken_raw.png",
|
|
||||||
groups = { food = 2, eatable = 2 },
|
|
||||||
on_use = minetest.item_eat(2),
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("chicken_cooked") then
|
|
||||||
minetest.register_craftitem("mobs_mc:chicken_cooked", {
|
|
||||||
description = "Cooked Chicken",
|
|
||||||
_doc_items_longdesc = "A cooked chicken is a healthy food item which can be eaten.",
|
|
||||||
inventory_image = "mcl_mobitems_chicken_cooked.png",
|
|
||||||
groups = { food = 2, eatable = 6 },
|
|
||||||
on_use = minetest.item_eat(6),
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("chicken_raw") and c("chicken_cooked") then
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "cooking",
|
|
||||||
output = "mobs_mc:chicken_cooked",
|
|
||||||
recipe = "mobs_mc:chicken_raw",
|
|
||||||
cooktime = 5,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("feather") then
|
|
||||||
minetest.register_craftitem("mobs_mc:feather", {
|
|
||||||
description = "Feather",
|
|
||||||
_doc_items_longdesc = "Feathers are used in crafting and are dropped from chickens.",
|
|
||||||
inventory_image = "mcl_mobitems_feather.png",
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Cow and mooshroom
|
|
||||||
if c("beef_raw") then
|
|
||||||
minetest.register_craftitem("mobs_mc:beef_raw", {
|
|
||||||
description = "Raw Beef",
|
|
||||||
_doc_items_longdesc = "Raw beef is the flesh from cows and can be eaten safely. Cooking it will greatly increase its nutritional value.",
|
|
||||||
inventory_image = "mcl_mobitems_beef_raw.png",
|
|
||||||
groups = { food = 2, eatable = 3 },
|
|
||||||
on_use = minetest.item_eat(3),
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("beef_cooked") then
|
|
||||||
minetest.register_craftitem("mobs_mc:beef_cooked", {
|
|
||||||
description = "Steak",
|
|
||||||
_doc_items_longdesc = "Steak is cooked beef from cows and can be eaten.",
|
|
||||||
inventory_image = "mcl_mobitems_beef_cooked.png",
|
|
||||||
groups = { food = 2, eatable = 8 },
|
|
||||||
on_use = minetest.item_eat(8),
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("beef_raw") and c("beef_cooked") then
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "cooking",
|
|
||||||
output = "mobs_mc:beef_cooked",
|
|
||||||
recipe = "mobs_mc:beef_raw",
|
|
||||||
cooktime = 5,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
if c("milk") then
|
|
||||||
-- milk
|
|
||||||
minetest.register_craftitem("mobs_mc:milk_bucket", {
|
|
||||||
description = "Milk",
|
|
||||||
_doc_items_longdesc = "Milk is a food item obtained by using a bucket on a cow.",
|
|
||||||
inventory_image = "mobs_bucket_milk.png",
|
|
||||||
groups = { food = 3, eatable = 1 },
|
|
||||||
on_use = minetest.item_eat(1, "bucket:bucket_empty"),
|
|
||||||
stack_max = 1,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("bowl") then
|
|
||||||
minetest.register_craftitem("mobs_mc:bowl", {
|
|
||||||
description = "Bowl",
|
|
||||||
_doc_items_longdesc = "Bowls are mainly used to hold tasty soups.",
|
|
||||||
inventory_image = "mcl_core_bowl.png",
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "mobs_mc:bowl",
|
|
||||||
recipe = {
|
|
||||||
{ "group:wood", "", "group:wood" },
|
|
||||||
{ "", "group:wood", "", },
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "fuel",
|
|
||||||
recipe = "mobs_mc:bowl",
|
|
||||||
burntime = 5,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("mushroom_stew") then
|
|
||||||
minetest.register_craftitem("mobs_mc:mushroom_stew", {
|
|
||||||
description = "Mushroom Stew",
|
|
||||||
_doc_items_longdesc = "Mushroom stew is a healthy soup.",
|
|
||||||
inventory_image = "farming_mushroom_stew.png",
|
|
||||||
groups = { food = 3, eatable = 6 },
|
|
||||||
on_use = minetest.item_eat(6, "mobs_mc:bowl"),
|
|
||||||
stack_max = 1,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Ender dragon
|
|
||||||
if c("dragon_egg") then
|
|
||||||
|
|
||||||
local dragon_egg_sounds
|
|
||||||
if minetest.get_modpath("default") then
|
|
||||||
dragon_egg_sounds = default.node_sound_stone_defaults()
|
|
||||||
end
|
|
||||||
|
|
||||||
--ender dragon
|
|
||||||
minetest.register_node("mobs_mc:dragon_egg", {
|
|
||||||
description = "Dragon Egg",
|
|
||||||
tiles = {
|
|
||||||
"mcl_end_dragon_egg.png",
|
|
||||||
"mcl_end_dragon_egg.png",
|
|
||||||
"mcl_end_dragon_egg.png",
|
|
||||||
"mcl_end_dragon_egg.png",
|
|
||||||
"mcl_end_dragon_egg.png",
|
|
||||||
"mcl_end_dragon_egg.png",
|
|
||||||
},
|
|
||||||
drawtype = "nodebox",
|
|
||||||
is_ground_content = false,
|
|
||||||
paramtype = "light",
|
|
||||||
light_source = 1,
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {
|
|
||||||
{-0.375, -0.5, -0.375, 0.375, -0.4375, 0.375},
|
|
||||||
{-0.5, -0.4375, -0.5, 0.5, -0.1875, 0.5},
|
|
||||||
{-0.4375, -0.1875, -0.4375, 0.4375, 0, 0.4375},
|
|
||||||
{-0.375, 0, -0.375, 0.375, 0.125, 0.375},
|
|
||||||
{-0.3125, 0.125, -0.3125, 0.3125, 0.25, 0.3125},
|
|
||||||
{-0.25, 0.25, -0.25, 0.25, 0.3125, 0.25},
|
|
||||||
{-0.1875, 0.3125, -0.1875, 0.1875, 0.375, 0.1875},
|
|
||||||
{-0.125, 0.375, -0.125, 0.125, 0.4375, 0.125},
|
|
||||||
{-0.0625, 0.4375, -0.0625, 0.0625, 0.5, 0.0625},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
selection_box = {
|
|
||||||
type = "regular",
|
|
||||||
},
|
|
||||||
groups = {snappy = 1, falling_node = 1, deco_block = 1, not_in_creative_inventory = 1, dig_by_piston = 1 },
|
|
||||||
sounds = dragon_egg_sounds,
|
|
||||||
-- TODO: Make dragon egg teleport on punching
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
local longdesc_craftitem
|
|
||||||
if minetest.get_modpath("doc_items") then
|
|
||||||
longdesc_craftitem = doc.sub.items.temp.craftitem
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Enderman
|
|
||||||
if c("ender_eye") then
|
|
||||||
minetest.register_craftitem("mobs_mc:ender_eye", {
|
|
||||||
description = "Eye of Ender",
|
|
||||||
_doc_items_longdesc = longdesc_craftitem,
|
|
||||||
inventory_image = "mcl_end_ender_eye.png",
|
|
||||||
groups = { craftitem = 1 },
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("ender_eye") and c("blaze_powder") and c("blaze_rod") then
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "shapeless",
|
|
||||||
output = "mobs_mc:ender_eye",
|
|
||||||
recipe = { "mobs_mc:blaze_powder", "mobs_mc:blaze_rod"},
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Ghast
|
|
||||||
if c("ghast_tear") then
|
|
||||||
minetest.register_craftitem("mobs_mc:ghast_tear", {
|
|
||||||
description = "Ghast Tear",
|
|
||||||
_doc_items_longdesc = "A ghast tear is an item used in potion brewing. It is dropped from dead ghasts.",
|
|
||||||
wield_image = "mcl_mobitems_ghast_tear.png",
|
|
||||||
inventory_image = "mcl_mobitems_ghast_tear.png",
|
|
||||||
groups = { brewitem = 1 },
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Saddle
|
|
||||||
if c("saddle") then
|
|
||||||
-- Overwrite the saddle from Mobs Redo
|
|
||||||
minetest.register_craftitem(":mobs:saddle", {
|
|
||||||
description = "Saddle",
|
|
||||||
_doc_items_longdesc = "Saddles can be put on horses, donkeys, mules and pigs in order to mount them.",
|
|
||||||
_doc_items_usagehelp = "Rightclick an animal while holding a saddle to put on the saddle. You can now mount the animal by rightclicking it again.",
|
|
||||||
inventory_image = "mcl_mobitems_saddle.png",
|
|
||||||
stack_max = 1,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Horse Armor
|
|
||||||
local horse_armor_use = S("Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.")
|
|
||||||
-- TODO: Balance the horse armor strength, compare with MC armor strength
|
|
||||||
if c("iron_horse_armor") then
|
|
||||||
minetest.register_craftitem("mobs_mc:iron_horse_armor", {
|
|
||||||
description = S("Iron Horse Armor"),
|
|
||||||
_doc_items_longdesc = S("Iron horse armor can be worn by horses to increase their protection from harm a bit."),
|
|
||||||
_doc_items_usagehelp = horse_armor_use,
|
|
||||||
inventory_image = "mobs_mc_iron_horse_armor.png",
|
|
||||||
_horse_overlay_image = "mobs_mc_horse_armor_iron.png",
|
|
||||||
sounds = {
|
|
||||||
_mcl_armor_equip = "mcl_armor_equip_iron",
|
|
||||||
},
|
|
||||||
stack_max = 1,
|
|
||||||
groups = { horse_armor = 85 },
|
|
||||||
})
|
|
||||||
end
|
|
||||||
if c("gold_horse_armor") then
|
|
||||||
minetest.register_craftitem("mobs_mc:gold_horse_armor", {
|
|
||||||
description = S("Golden Horse Armor"),
|
|
||||||
_doc_items_longdesc = S("Golden horse armor can be worn by horses to increase their protection from harm."),
|
|
||||||
_doc_items_usagehelp = horse_armor_use,
|
|
||||||
inventory_image = "mobs_mc_gold_horse_armor.png",
|
|
||||||
_horse_overlay_image = "mobs_mc_horse_armor_gold.png",
|
|
||||||
sounds = {
|
|
||||||
_mcl_armor_equip = "mcl_armor_equip_iron",
|
|
||||||
},
|
|
||||||
stack_max = 1,
|
|
||||||
groups = { horse_armor = 60 },
|
|
||||||
})
|
|
||||||
end
|
|
||||||
if c("diamond_horse_armor") then
|
|
||||||
minetest.register_craftitem("mobs_mc:diamond_horse_armor", {
|
|
||||||
description = S("Diamond Horse Armor"),
|
|
||||||
_doc_items_longdesc = S("Diamond horse armor can be worn by horses to greatly increase their protection from harm."),
|
|
||||||
_doc_items_usagehelp = horse_armor_use,
|
|
||||||
inventory_image = "mobs_mc_diamond_horse_armor.png",
|
|
||||||
_horse_overlay_image = "mobs_mc_horse_armor_diamond.png",
|
|
||||||
sounds = {
|
|
||||||
_mcl_armor_equip = "mcl_armor_equip_diamond",
|
|
||||||
},
|
|
||||||
stack_max = 1,
|
|
||||||
groups = { horse_armor = 45 },
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Pig
|
|
||||||
if c("porkchop_raw") then
|
|
||||||
minetest.register_craftitem("mobs_mc:porkchop_raw", {
|
|
||||||
description = "Raw Porkchop",
|
|
||||||
_doc_items_longdesc = "A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value.",
|
|
||||||
inventory_image = "mcl_mobitems_porkchop_raw.png",
|
|
||||||
groups = { food = 2, eatable = 3 },
|
|
||||||
on_use = minetest.item_eat(3),
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("porkchop_cooked") then
|
|
||||||
minetest.register_craftitem("mobs_mc:porkchop_cooked", {
|
|
||||||
description = "Cooked Porkchop",
|
|
||||||
_doc_items_longdesc = "Cooked porkchop is the cooked flesh of a pig and is used as food.",
|
|
||||||
inventory_image = "mcl_mobitems_porkchop_cooked.png",
|
|
||||||
groups = { food = 2, eatable = 8 },
|
|
||||||
on_use = minetest.item_eat(8),
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("porkchop_raw") and c("porkchop_cooked") then
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "cooking",
|
|
||||||
output = "mobs_mc:porkchop_cooked",
|
|
||||||
recipe = "mobs_mc:porkchop_raw",
|
|
||||||
cooktime = 5,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("carrot_on_a_stick") then
|
|
||||||
minetest.register_tool("mobs_mc:carrot_on_a_stick", {
|
|
||||||
description = "Carrot on a Stick",
|
|
||||||
_doc_items_longdesc = "A carrot on a stick can be used on saddled pigs to ride them. Pigs will also follow anyone who holds a carrot on a stick near them.",
|
|
||||||
_doc_items_usagehelp = "Rightclick a saddled pig with the carrot on a stick to mount it. You can now ride it like a horse.",
|
|
||||||
wield_image = "mcl_mobitems_carrot_on_a_stick.png",
|
|
||||||
inventory_image = "mcl_mobitems_carrot_on_a_stick.png",
|
|
||||||
sounds = { breaks = "default_tool_breaks" },
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Poor-man's recipes for carrot on a stick
|
|
||||||
if c("carrot_on_a_stick") and c("stick") and c("string") and minetest.get_modpath("farming") then
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "mobs_mc:carrot_on_a_stick",
|
|
||||||
recipe = {
|
|
||||||
{"", "", "farming:string" },
|
|
||||||
{"", "group:stick", "farming:string" },
|
|
||||||
{"group:stick", "", "farming:bread" },
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
-- FIXME: Identify correct farming mod (check if it includes the carrot item)
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "mobs_mc:carrot_on_a_stick",
|
|
||||||
recipe = {
|
|
||||||
{"", "", "farming:string" },
|
|
||||||
{"", "group:stick", "farming:string" },
|
|
||||||
{"group:stick", "", "farming:carrot" },
|
|
||||||
}
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("carrot_on_a_stick") and c("stick") and c("string") and minetest.get_modpath("fishing") and minetest.get_modpath("farming") then
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "shapeless",
|
|
||||||
output = "mobs_mc:carrot_on_a_stick",
|
|
||||||
recipe = {"fishing:pole_wood", "farming:carrot"},
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Rabbit
|
|
||||||
if c("rabbit_raw") then
|
|
||||||
minetest.register_craftitem("mobs_mc:rabbit_raw", {
|
|
||||||
description = "Raw Rabbit",
|
|
||||||
_doc_items_longdesc = "Raw rabbit is a food item from a dead rabbit. It can be eaten safely. Cooking it will increase its nutritional value.",
|
|
||||||
inventory_image = "mcl_mobitems_rabbit_raw.png",
|
|
||||||
groups = { food = 2, eatable = 3 },
|
|
||||||
on_use = minetest.item_eat(3),
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("rabbit_cooked") then
|
|
||||||
minetest.register_craftitem("mobs_mc:rabbit_cooked", {
|
|
||||||
description = "Cooked Rabbit",
|
|
||||||
_doc_items_longdesc = "This is a food item which can be eaten.",
|
|
||||||
inventory_image = "mcl_mobitems_rabbit_cooked.png",
|
|
||||||
groups = { food = 2, eatable = 5 },
|
|
||||||
on_use = minetest.item_eat(5),
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("rabbit_raw") and c("rabbit_cooked") then
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "cooking",
|
|
||||||
output = "mobs_mc:rabbit_cooked",
|
|
||||||
recipe = "mobs_mc:rabbit_raw",
|
|
||||||
cooktime = 5,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("rabbit_hide") then
|
|
||||||
minetest.register_craftitem("mobs_mc:rabbit_hide", {
|
|
||||||
description = "Rabbit Hide",
|
|
||||||
_doc_items_longdesc = "Rabbit hide is used to create leather.",
|
|
||||||
inventory_image = "mcl_mobitems_rabbit_hide.png"
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("leather") and c("rabbit_hide") then
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "mobs:leather",
|
|
||||||
recipe = {
|
|
||||||
{ "mobs_mc:rabbit_hide", "mobs_mc:rabbit_hide" },
|
|
||||||
{ "mobs_mc:rabbit_hide", "mobs_mc:rabbit_hide" },
|
|
||||||
}
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("rabbit_foot") then
|
|
||||||
minetest.register_craftitem("mobs_mc:rabbit_foot", {
|
|
||||||
description = "Rabbit's Foot",
|
|
||||||
_doc_items_longdesc = "This item is used in brewing.",
|
|
||||||
inventory_image = "mcl_mobitems_rabbit_foot.png"
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Sheep
|
|
||||||
if c("mutton_raw") then
|
|
||||||
minetest.register_craftitem("mobs_mc:mutton_raw", {
|
|
||||||
description = "Raw Mutton",
|
|
||||||
_doc_items_longdesc = "Raw mutton is the flesh from a sheep and can be eaten safely. Cooking it will greatly increase its nutritional value.",
|
|
||||||
inventory_image = "mcl_mobitems_mutton_raw.png",
|
|
||||||
groups = { food = 2, eatable = 4 },
|
|
||||||
on_use = minetest.item_eat(4),
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("mutton_cooked") then
|
|
||||||
minetest.register_craftitem("mobs_mc:mutton_cooked", {
|
|
||||||
description = "Cooked Mutton",
|
|
||||||
_doc_items_longdesc = "Cooked mutton is the cooked flesh from a sheep and is used as food.",
|
|
||||||
inventory_image = "mcl_mobitems_mutton_cooked.png",
|
|
||||||
groups = { food = 2, eatable = 8 },
|
|
||||||
on_use = minetest.item_eat(8),
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("mutton_raw") and c("mutton_cooked") then
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "cooking",
|
|
||||||
output = "mobs_mc:mutton_cooked",
|
|
||||||
recipe = "mobs_mc:mutton_raw",
|
|
||||||
cooktime = 5,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Shulker
|
|
||||||
if c("shulker_shell") then
|
|
||||||
minetest.register_craftitem("mobs_mc:shulker_shell", {
|
|
||||||
description = "Shulker Shell",
|
|
||||||
_doc_items_longdesc = "Shulker shells are used in crafting. They are dropped from dead shulkers.",
|
|
||||||
inventory_image = "mcl_mobitems_shulker_shell.png",
|
|
||||||
groups = { craftitem = 1 },
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Magma cube
|
|
||||||
if c("magma_cream") then
|
|
||||||
minetest.register_craftitem("mobs_mc:magma_cream", {
|
|
||||||
description = "Magma Cream",
|
|
||||||
_doc_items_longdesc = "Magma cream is a crafting component.",
|
|
||||||
wield_image = "mcl_mobitems_magma_cream.png",
|
|
||||||
inventory_image = "mcl_mobitems_magma_cream.png",
|
|
||||||
groups = { brewitem = 1 },
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Slime
|
|
||||||
if c("slimeball") then
|
|
||||||
minetest.register_craftitem("mobs_mc:slimeball", {
|
|
||||||
description = "Slimeball",
|
|
||||||
_doc_items_longdesc = "Slimeballs are used in crafting. They are dropped from slimes.",
|
|
||||||
inventory_image = "mcl_mobitems_slimeball.png"
|
|
||||||
})
|
|
||||||
if minetest.get_modpath("mesecons_materials") then
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "mesecons_materials:glue",
|
|
||||||
recipe = {{ "mobs_mc:slimeball" }},
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Spider
|
|
||||||
if c("spider_eye") then
|
|
||||||
minetest.register_craftitem("mobs_mc:spider_eye", {
|
|
||||||
description = "Spider Eye",
|
|
||||||
_doc_items_longdesc = "Spider eyes are used mainly in crafting and brewing. Spider eyes can be eaten, but they poison you and reduce your health by 2 hit points.",
|
|
||||||
inventory_image = "mcl_mobitems_spider_eye.png",
|
|
||||||
wield_image = "mcl_mobitems_spider_eye.png",
|
|
||||||
-- Simplified poisonous food
|
|
||||||
groups = { food = 2, eatable = -2 },
|
|
||||||
on_use = minetest.item_eat(-2),
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Evoker
|
|
||||||
if c("totem") then
|
|
||||||
-- Totem of Undying
|
|
||||||
minetest.register_craftitem("mobs_mc:totem", {
|
|
||||||
description = S("Totem of Undying"),
|
|
||||||
_tt_help = minetest.colorize(mcl_colors.GREEN, S("Protects you from death while wielding it")),
|
|
||||||
_doc_items_longdesc = S("A totem of undying is a rare artifact which may safe you from certain death."),
|
|
||||||
_doc_items_usagehelp = S("The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however."),
|
|
||||||
inventory_image = "mcl_totems_totem.png",
|
|
||||||
wield_image = "mcl_totems_totem.png",
|
|
||||||
stack_max = 1,
|
|
||||||
groups = {combat_item = 1, offhand_item = 1},
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Rotten flesh
|
|
||||||
if c("rotten_flesh") then
|
|
||||||
minetest.register_craftitem("mobs_mc:rotten_flesh", {
|
|
||||||
description = "Rotten Flesh",
|
|
||||||
_doc_items_longdesc = "Yuck! This piece of flesh clearly has seen better days. Eating it will only poison you and reduces your health by 4 hit points. But tamed wolves can eat it just fine.",
|
|
||||||
inventory_image = "mcl_mobitems_rotten_flesh.png",
|
|
||||||
-- Simplified poisonous food
|
|
||||||
groups = { food = 2, eatable = -4 },
|
|
||||||
on_use = minetest.item_eat(-4),
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Misc.
|
|
||||||
if c("nether_star") then
|
|
||||||
minetest.register_craftitem("mobs_mc:nether_star", {
|
|
||||||
description = "Nether Star",
|
|
||||||
_doc_items_longdesc = "A nether star is a crafting component. It is dropped from the Wither.",
|
|
||||||
inventory_image = "mcl_mobitems_nether_star.png"
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("snowball") and minetest.get_modpath("default") then
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "mobs_mc:snowball 2",
|
|
||||||
recipe = {
|
|
||||||
{"default:snow"},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "default:snow 2",
|
|
||||||
recipe = {
|
|
||||||
{"mobs_mc:snowball", "mobs_mc:snowball"},
|
|
||||||
{"mobs_mc:snowball", "mobs_mc:snowball"},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
-- Change the appearance of default snow to avoid confusion with snowball
|
|
||||||
minetest.override_item("default:snow", {
|
|
||||||
inventory_image = "",
|
|
||||||
wield_image = "",
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("bone") then
|
|
||||||
minetest.register_craftitem("mobs_mc:bone", {
|
|
||||||
description = "Bone",
|
|
||||||
_doc_items_longdesc = "Bones can be used to tame wolves so they will protect you. They are also useful as a crafting ingredient.",
|
|
||||||
_doc_items_usagehelp = "Hold the bone in your hand near wolves to attract them. Rightclick the wolf to give it a bone and tame it.",
|
|
||||||
inventory_image = "mcl_mobitems_bone.png"
|
|
||||||
})
|
|
||||||
if minetest.get_modpath("bones") then
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "mobs_mc:bone 3",
|
|
||||||
recipe = {{ "bones:bones" }},
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,402 +0,0 @@
|
||||||
--MCmobs v0.5
|
|
||||||
--maikerumine
|
|
||||||
--made for MC like Survival game
|
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
|
||||||
|
|
||||||
-- NOTE: Strings intentionally not marked for translation, other mods already have these items.
|
|
||||||
-- TODO: Remove this file eventually, all items here are already outsourced in other mods.
|
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
|
||||||
|
|
||||||
--maikerumines throwing code
|
|
||||||
--arrow (weapon)
|
|
||||||
|
|
||||||
local c = mobs_mc.is_item_variable_overridden
|
|
||||||
|
|
||||||
minetest.register_node("mobs_mc:arrow_box", {
|
|
||||||
drawtype = "nodebox",
|
|
||||||
is_ground_content = false,
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {
|
|
||||||
-- Shaft
|
|
||||||
{-6.5/17, -1.5/17, -1.5/17, -4.5/17, 1.5/17, 1.5/17},
|
|
||||||
{-4.5/17, -0.5/17, -0.5/17, 5.5/17, 0.5/17, 0.5/17},
|
|
||||||
{5.5/17, -1.5/17, -1.5/17, 6.5/17, 1.5/17, 1.5/17},
|
|
||||||
-- Tip
|
|
||||||
{-4.5/17, 2.5/17, 2.5/17, -3.5/17, -2.5/17, -2.5/17},
|
|
||||||
{-8.5/17, 0.5/17, 0.5/17, -6.5/17, -0.5/17, -0.5/17},
|
|
||||||
-- Fletching
|
|
||||||
{6.5/17, 1.5/17, 1.5/17, 7.5/17, 2.5/17, 2.5/17},
|
|
||||||
{7.5/17, -2.5/17, 2.5/17, 6.5/17, -1.5/17, 1.5/17},
|
|
||||||
{7.5/17, 2.5/17, -2.5/17, 6.5/17, 1.5/17, -1.5/17},
|
|
||||||
{6.5/17, -1.5/17, -1.5/17, 7.5/17, -2.5/17, -2.5/17},
|
|
||||||
|
|
||||||
{7.5/17, 2.5/17, 2.5/17, 8.5/17, 3.5/17, 3.5/17},
|
|
||||||
{8.5/17, -3.5/17, 3.5/17, 7.5/17, -2.5/17, 2.5/17},
|
|
||||||
{8.5/17, 3.5/17, -3.5/17, 7.5/17, 2.5/17, -2.5/17},
|
|
||||||
{7.5/17, -2.5/17, -2.5/17, 8.5/17, -3.5/17, -3.5/17},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
tiles = {"mcl_bows_arrow.png^[transformFX", "mcl_bows_arrow.png^[transformFX", "mcl_bows_arrow_back.png", "mcl_bows_arrow_front.png", "mcl_bows_arrow.png", "mcl_bows_arrow.png^[transformFX"},
|
|
||||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = {not_in_creative_inventory=1, dig_immediate=3},
|
|
||||||
node_placement_prediction = "",
|
|
||||||
on_construct = function(pos)
|
|
||||||
minetest.log("error", "[mobs_mc] Trying to construct mobs_mc:arrow_box at "..minetest.pos_to_string(pos))
|
|
||||||
minetest.remove_node(pos)
|
|
||||||
end,
|
|
||||||
drop = "",
|
|
||||||
})
|
|
||||||
|
|
||||||
local THROWING_ARROW_ENTITY={
|
|
||||||
physical = false,
|
|
||||||
timer=0,
|
|
||||||
visual = "wielditem",
|
|
||||||
visual_size = {x=0.1, y=0.1},
|
|
||||||
textures = {"mobs_mc:arrow_box"},
|
|
||||||
velocity = 10,
|
|
||||||
lastpos={},
|
|
||||||
collisionbox = {0,0,0,0,0,0},
|
|
||||||
}
|
|
||||||
|
|
||||||
--ARROW CODE
|
|
||||||
THROWING_ARROW_ENTITY.on_step = function(self, dtime)
|
|
||||||
self.timer=self.timer+dtime
|
|
||||||
local pos = self.object:get_pos()
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
|
|
||||||
minetest.add_particle({
|
|
||||||
pos = pos,
|
|
||||||
velocity = {x=0, y=0, z=0},
|
|
||||||
acceleration = {x=0, y=0, z=0},
|
|
||||||
expirationtime = .3,
|
|
||||||
size = 1,
|
|
||||||
collisiondetection = false,
|
|
||||||
vertical = false,
|
|
||||||
texture = "mobs_mc_arrow_particle.png",
|
|
||||||
})
|
|
||||||
|
|
||||||
if self.timer>0.2 then
|
|
||||||
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1.5)
|
|
||||||
for k, obj in pairs(objs) do
|
|
||||||
if obj:get_luaentity() ~= nil then
|
|
||||||
if obj:get_luaentity().name ~= "mobs_mc:arrow_entity" and obj:get_luaentity().name ~= "__builtin:item" then
|
|
||||||
local damage = 3
|
|
||||||
minetest.sound_play("damage", {pos = pos}, true)
|
|
||||||
obj:punch(self.object, 1.0, {
|
|
||||||
full_punch_interval=1.0,
|
|
||||||
damage_groups={fleshy=damage},
|
|
||||||
}, nil)
|
|
||||||
self.object:remove()
|
|
||||||
end
|
|
||||||
else
|
|
||||||
local damage = 3
|
|
||||||
minetest.sound_play("damage", {pos = pos}, true)
|
|
||||||
obj:punch(self.object, 1.0, {
|
|
||||||
full_punch_interval=1.0,
|
|
||||||
damage_groups={fleshy=damage},
|
|
||||||
}, nil)
|
|
||||||
self.object:remove()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if self.lastpos.x~=nil then
|
|
||||||
if node.name ~= "air" then
|
|
||||||
minetest.sound_play("bowhit1", {pos = pos}, true)
|
|
||||||
minetest.add_item(self.lastpos, 'mobs_mc:arrow')
|
|
||||||
self.object:remove()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
self.lastpos={x=pos.x, y=pos.y, z=pos.z}
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_entity("mobs_mc:arrow_entity", THROWING_ARROW_ENTITY)
|
|
||||||
|
|
||||||
local arrows = {
|
|
||||||
{"mobs_mc:arrow", "mobs_mc:arrow_entity" },
|
|
||||||
}
|
|
||||||
|
|
||||||
local throwing_shoot_arrow = function(itemstack, player)
|
|
||||||
for _,arrow in pairs(arrows) do
|
|
||||||
if player:get_inventory():get_stack("main", player:get_wield_index()+1):get_name() == arrow[1] then
|
|
||||||
if not minetest.is_creative_enabled(player:get_player_name()) then
|
|
||||||
player:get_inventory():remove_item("main", arrow[1])
|
|
||||||
end
|
|
||||||
local playerpos = player:get_pos()
|
|
||||||
local obj = minetest.add_entity({x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, arrow[2]) --mc
|
|
||||||
local dir = player:get_look_dir()
|
|
||||||
obj:set_velocity({x=dir.x*22, y=dir.y*22, z=dir.z*22})
|
|
||||||
obj:set_acceleration({x=dir.x*-3, y=-10, z=dir.z*-3})
|
|
||||||
obj:set_yaw(player:get_look_yaw()+math.pi)
|
|
||||||
minetest.sound_play("throwing_sound", {pos=playerpos}, true)
|
|
||||||
if obj:get_luaentity().player == "" then
|
|
||||||
obj:get_luaentity().player = player
|
|
||||||
end
|
|
||||||
obj:get_luaentity().node = player:get_inventory():get_stack("main", 1):get_name()
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("arrow") then
|
|
||||||
minetest.register_craftitem("mobs_mc:arrow", {
|
|
||||||
description = "Arrow",
|
|
||||||
_doc_items_longdesc = "Arrows are ammunition for bows.",
|
|
||||||
_doc_items_usagehelp = "To use arrows as ammunition for a bow, put them in the inventory slot following the bow. Slots are counted left to right, top to bottom.",
|
|
||||||
inventory_image = "mcl_bows_arrow_inv.png",
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("arrow") and c("flint") and c("feather") and c("stick") then
|
|
||||||
minetest.register_craft({
|
|
||||||
output = 'mobs_mc:arrow 4',
|
|
||||||
recipe = {
|
|
||||||
{mobs_mc.items.flint},
|
|
||||||
{mobs_mc.items.stick},
|
|
||||||
{mobs_mc.items.feather},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if c("bow") then
|
|
||||||
minetest.register_tool("mobs_mc:bow_wood", {
|
|
||||||
description = "Bow",
|
|
||||||
_doc_items_longdesc = "Bows are ranged weapons to shoot arrows at your foes.",
|
|
||||||
_doc_items_usagehelp = "To use the bow, you first need to have at least one arrow in slot following the bow. Leftclick to shoot. Each hit deals 3 damage.",
|
|
||||||
inventory_image = "mcl_bows_bow.png",
|
|
||||||
on_use = function(itemstack, user, pointed_thing)
|
|
||||||
if throwing_shoot_arrow(itemstack, user, pointed_thing) then
|
|
||||||
if not minetest.is_creative_enabled(user:get_player_name()) then
|
|
||||||
itemstack:add_wear(65535/50)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return itemstack
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = 'mobs_mc:bow_wood',
|
|
||||||
recipe = {
|
|
||||||
{mobs_mc.items.string, mobs_mc.items.stick, ''},
|
|
||||||
{mobs_mc.items.string, '', mobs_mc.items.stick},
|
|
||||||
{mobs_mc.items.string, mobs_mc.items.stick, ''},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
local how_to_throw = "Hold it in your and and leftclick to throw."
|
|
||||||
|
|
||||||
-- egg throwing item
|
|
||||||
-- egg entity
|
|
||||||
if c("egg") then
|
|
||||||
local egg_GRAVITY = 9
|
|
||||||
local egg_VELOCITY = 19
|
|
||||||
|
|
||||||
mcl_mobs:register_arrow("mobs_mc:egg_entity", {
|
|
||||||
visual = "sprite",
|
|
||||||
visual_size = {x=.5, y=.5},
|
|
||||||
textures = {"mobs_chicken_egg.png"},
|
|
||||||
velocity = egg_VELOCITY,
|
|
||||||
|
|
||||||
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 = {},
|
|
||||||
}, nil)
|
|
||||||
end,
|
|
||||||
|
|
||||||
hit_mob = function(self, mob)
|
|
||||||
mob:punch(minetest.get_player_by_name(self.playername) or self.object, 1.0, {
|
|
||||||
full_punch_interval = 1.0,
|
|
||||||
damage_groups = {},
|
|
||||||
}, 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, "mobs_mc:chicken")
|
|
||||||
local ent2 = mob:get_luaentity()
|
|
||||||
|
|
||||||
mob:set_properties({
|
|
||||||
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
|
|
||||||
})
|
|
||||||
|
|
||||||
-- 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,
|
|
||||||
}, true)
|
|
||||||
|
|
||||||
local obj = minetest.add_entity({
|
|
||||||
x = playerpos.x,
|
|
||||||
y = playerpos.y +1.5,
|
|
||||||
z = playerpos.z
|
|
||||||
}, "mobs_mc: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:set_velocity({
|
|
||||||
x = dir.x * egg_VELOCITY,
|
|
||||||
y = dir.y * egg_VELOCITY,
|
|
||||||
z = dir.z * egg_VELOCITY
|
|
||||||
})
|
|
||||||
|
|
||||||
obj:set_acceleration({
|
|
||||||
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()
|
|
||||||
|
|
||||||
if not minetest.is_creative_enabled(player:get_player_name()) then
|
|
||||||
item:take_item()
|
|
||||||
end
|
|
||||||
|
|
||||||
return item
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_craftitem("mobs_mc:egg", {
|
|
||||||
description = "Egg",
|
|
||||||
_doc_items_longdesc = "Eggs can be thrown and break on impact. There is a small chance that 1 or even 4 chicks will pop out",
|
|
||||||
_doc_items_usagehelp = how_to_throw,
|
|
||||||
inventory_image = "mobs_chicken_egg.png",
|
|
||||||
on_use = mobs_shoot_egg,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Snowball
|
|
||||||
|
|
||||||
local snowball_GRAVITY = 9
|
|
||||||
local snowball_VELOCITY = 19
|
|
||||||
|
|
||||||
mcl_mobs:register_arrow("mobs_mc:snowball_entity", {
|
|
||||||
visual = "sprite",
|
|
||||||
visual_size = {x=.5, y=.5},
|
|
||||||
textures = {"mcl_throwing_snowball.png"},
|
|
||||||
velocity = snowball_VELOCITY,
|
|
||||||
|
|
||||||
hit_player = function(self, player)
|
|
||||||
-- FIXME: No knockback
|
|
||||||
player:punch(self.object, 1.0, {
|
|
||||||
full_punch_interval = 1.0,
|
|
||||||
damage_groups = {},
|
|
||||||
}, nil)
|
|
||||||
end,
|
|
||||||
|
|
||||||
hit_mob = function(self, mob)
|
|
||||||
-- Hurt blazes, but not damage to anything else
|
|
||||||
local dmg = {}
|
|
||||||
if mob:get_luaentity().name == "mobs_mc:blaze" then
|
|
||||||
dmg = {fleshy = 3}
|
|
||||||
end
|
|
||||||
-- FIXME: No knockback
|
|
||||||
mob:punch(self.object, 1.0, {
|
|
||||||
full_punch_interval = 1.0,
|
|
||||||
damage_groups = dmg,
|
|
||||||
}, nil)
|
|
||||||
end,
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
if c("snowball") then
|
|
||||||
-- shoot snowball
|
|
||||||
local mobs_shoot_snowball = function (item, player, pointed_thing)
|
|
||||||
|
|
||||||
local playerpos = player:get_pos()
|
|
||||||
|
|
||||||
local obj = minetest.add_entity({
|
|
||||||
x = playerpos.x,
|
|
||||||
y = playerpos.y +1.5,
|
|
||||||
z = playerpos.z
|
|
||||||
}, "mobs_mc:snowball_entity")
|
|
||||||
|
|
||||||
local ent = obj:get_luaentity()
|
|
||||||
local dir = player:get_look_dir()
|
|
||||||
|
|
||||||
ent.velocity = snowball_VELOCITY -- needed for api internal timing
|
|
||||||
ent.switch = 1 -- needed so that egg doesn't despawn straight away
|
|
||||||
|
|
||||||
obj:set_velocity({
|
|
||||||
x = dir.x * snowball_VELOCITY,
|
|
||||||
y = dir.y * snowball_VELOCITY,
|
|
||||||
z = dir.z * snowball_VELOCITY
|
|
||||||
})
|
|
||||||
|
|
||||||
obj:set_acceleration({
|
|
||||||
x = dir.x * -3,
|
|
||||||
y = -snowball_GRAVITY,
|
|
||||||
z = dir.z * -3
|
|
||||||
})
|
|
||||||
|
|
||||||
-- pass player name to egg for chick ownership
|
|
||||||
local ent2 = obj:get_luaentity()
|
|
||||||
ent2.playername = player:get_player_name()
|
|
||||||
|
|
||||||
if not minetest.is_creative_enabled(player:get_player_name()) then
|
|
||||||
item:take_item()
|
|
||||||
end
|
|
||||||
|
|
||||||
return item
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- Snowball
|
|
||||||
minetest.register_craftitem("mobs_mc:snowball", {
|
|
||||||
description = "Snowball",
|
|
||||||
_doc_items_longdesc = "Snowballs can be thrown at your enemies. A snowball deals 3 damage to blazes, but is harmless to anything else.",
|
|
||||||
_doc_items_usagehelp = how_to_throw,
|
|
||||||
inventory_image = "mcl_throwing_snowball.png",
|
|
||||||
on_use = mobs_shoot_snowball,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
--end maikerumine code
|
|
|
@ -1,65 +0,0 @@
|
||||||
local pr = PseudoRandom(os.time()*5)
|
|
||||||
|
|
||||||
local offsets = {}
|
|
||||||
for x=-2, 2 do
|
|
||||||
for z=-2, 2 do
|
|
||||||
table.insert(offsets, {x=x, y=0, z=z})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
--[[ Periodically check and teleport mob to owner if not sitting (order ~= "sit") and
|
|
||||||
the owner is too far away. To be used with do_custom. Note: Optimized for mobs smaller than 1×1×1.
|
|
||||||
Larger mobs might have space problems after teleportation.
|
|
||||||
|
|
||||||
* dist: Minimum required distance from owner to teleport. Default: 12
|
|
||||||
* teleport_check_interval: Optional. Interval in seconds to check the mob teleportation. Default: 4 ]]
|
|
||||||
mobs_mc.make_owner_teleport_function = function(dist, teleport_check_interval)
|
|
||||||
return function(self, dtime)
|
|
||||||
-- No teleportation if no owner or if sitting
|
|
||||||
if not self.owner or self.order == "sit" then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
if not teleport_check_interval then
|
|
||||||
teleport_check_interval = 4
|
|
||||||
end
|
|
||||||
if not dist then
|
|
||||||
dist = 12
|
|
||||||
end
|
|
||||||
if self._teleport_timer == nil then
|
|
||||||
self._teleport_timer = teleport_check_interval
|
|
||||||
return
|
|
||||||
end
|
|
||||||
self._teleport_timer = self._teleport_timer - dtime
|
|
||||||
if self._teleport_timer <= 0 then
|
|
||||||
self._teleport_timer = teleport_check_interval
|
|
||||||
local mob_pos = self.object:get_pos()
|
|
||||||
local owner = minetest.get_player_by_name(self.owner)
|
|
||||||
if not owner then
|
|
||||||
-- No owner found, no teleportation
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local owner_pos = owner:get_pos()
|
|
||||||
local dist_from_owner = vector.distance(owner_pos, mob_pos)
|
|
||||||
if dist_from_owner > dist then
|
|
||||||
-- Check for nodes below air in a 5×1×5 area around the owner position
|
|
||||||
local check_offsets = table.copy(offsets)
|
|
||||||
-- Attempt to place mob near player. Must be placed on walkable node below a non-walkable one. Place inside that air node.
|
|
||||||
while #check_offsets > 0 do
|
|
||||||
local r = pr:next(1, #check_offsets)
|
|
||||||
local telepos = vector.add(owner_pos, check_offsets[r])
|
|
||||||
local telepos_below = {x=telepos.x, y=telepos.y-1, z=telepos.z}
|
|
||||||
table.remove(check_offsets, r)
|
|
||||||
-- Long story short, spawn on a platform
|
|
||||||
local trynode = minetest.registered_nodes[minetest.get_node(telepos).name]
|
|
||||||
local trybelownode = minetest.registered_nodes[minetest.get_node(telepos_below).name]
|
|
||||||
if trynode and not trynode.walkable and
|
|
||||||
trybelownode and trybelownode.walkable then
|
|
||||||
-- Correct position found! Let's teleport.
|
|
||||||
self.object:set_pos(telepos)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,62 +0,0 @@
|
||||||
--MC Heads for minetest
|
|
||||||
--maikerumine
|
|
||||||
|
|
||||||
-- NOTE: Strings intentionally not marked for translation, other mods already have these items.
|
|
||||||
-- TODO: Remove this file eventually, all items here are already outsourced in other mods.
|
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
|
||||||
|
|
||||||
-- Heads system
|
|
||||||
|
|
||||||
local sounds
|
|
||||||
if minetest.get_modpath("default") then
|
|
||||||
sounds = default.node_sound_defaults({
|
|
||||||
footstep = {name="default_hard_footstep", gain=0.3}
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
local function addhead(mobname, desc, longdesc)
|
|
||||||
if not mobs_mc.is_item_variable_overridden("head_"..mobname) then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
minetest.register_node("mobs_mc:head_"..mobname, {
|
|
||||||
description = desc,
|
|
||||||
_doc_items_longdesc = longdesc,
|
|
||||||
drawtype = "nodebox",
|
|
||||||
is_ground_content = false,
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {
|
|
||||||
{ -0.25, -0.5, -0.25, 0.25, 0.0, 0.25, },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
groups = { oddly_breakable_by_hand=3, head=1, },
|
|
||||||
-- The head textures are based off the textures of an actual mob.
|
|
||||||
-- FIXME: This code assumes 16×16 textures for the mob textures!
|
|
||||||
tiles = {
|
|
||||||
-- Note: bottom texture is overlaid over top texture to get rid of possible transparency.
|
|
||||||
-- This is required for skeleton skull and wither skeleton skull.
|
|
||||||
"[combine:16x16:-4,4=mobs_mc_"..mobname..".png", -- top
|
|
||||||
"([combine:16x16:-4,4=mobs_mc_"..mobname..".png)^([combine:16x16:-12,4=mobs_mc_"..mobname..".png)", -- bottom
|
|
||||||
"[combine:16x16:-12,0=mobs_mc_"..mobname..".png", -- left
|
|
||||||
"[combine:16x16:4,0=mobs_mc_"..mobname..".png", -- right
|
|
||||||
"[combine:16x16:-20,0=mobs_mc_"..mobname..".png", -- back
|
|
||||||
"[combine:16x16:-4,0=mobs_mc_"..mobname..".png", -- front
|
|
||||||
},
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
walkable = true,
|
|
||||||
sounds = sounds,
|
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = { -0.25, -0.5, -0.25, 0.25, 0.0, 0.25, },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Add heads
|
|
||||||
addhead("zombie", "Zombie Head", "A zombie head is a small decorative block which resembles the head of a zombie.")
|
|
||||||
addhead("creeper", "Creeper Head", "A creeper head is a small decorative block which resembles the head of a creeper.")
|
|
||||||
addhead("skeleton", "Skeleton Skull", "A skeleton skull is a small decorative block which resembles the skull of a skeleton.")
|
|
||||||
addhead("wither_skeleton", "Wither Skeleton Skull", "A wither skeleton skull is a small decorative block which resembles the skull of a wither skeleton.")
|
|
|
@ -1,20 +0,0 @@
|
||||||
local function is_forbidden_node(pos, node)
|
|
||||||
node = node or minetest.get_node(pos)
|
|
||||||
return minetest.get_item_group(node.name, "stair") > 0 or minetest.get_item_group(node.name, "slab") > 0 or minetest.get_item_group(node.name, "carpet") > 0
|
|
||||||
end
|
|
||||||
|
|
||||||
function mcl_mobs:spawn_abm_check(pos, node, name)
|
|
||||||
-- Don't spawn monsters on mycelium
|
|
||||||
if (node.name == "mcl_core:mycelium" or node.name == "mcl_core:mycelium_snow") and minetest.registered_entities[name].type == "monster" then
|
|
||||||
return true
|
|
||||||
--Don't Spawn mobs on stairs, slabs, or carpets
|
|
||||||
elseif is_forbidden_node(pos, node) or is_forbidden_node(vector.add(pos, vector.new(0, 1, 0))) then
|
|
||||||
return true
|
|
||||||
-- Spawn on opaque or liquid nodes
|
|
||||||
elseif minetest.get_item_group(node.name, "opaque") ~= 0 or minetest.registered_nodes[node.name].liquidtype ~= "none" or node.name == "mcl_core:grass_path" then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Reject everything else
|
|
||||||
return true
|
|
||||||
end
|
|
|
@ -17,11 +17,6 @@ This mod adds mobs which closely resemble the mobs from the game Minecraft, vers
|
||||||
* Code: GNU General Public License, version 3 (see `LICENSE`)
|
* Code: GNU General Public License, version 3 (see `LICENSE`)
|
||||||
* Media: MIT, CC0, CC BY 3.0 CC BY-SA 4.0, LGPLv2.1, GPLv3. See `LICENSE_media.md` for details
|
* Media: MIT, CC0, CC BY 3.0 CC BY-SA 4.0, LGPLv2.1, GPLv3. See `LICENSE_media.md` for details
|
||||||
|
|
||||||
## Useful information for developers
|
|
||||||
|
|
||||||
### Game integration
|
|
||||||
Want to include this mod in your game? Read `gameconfig.md`.
|
|
||||||
|
|
||||||
### Links
|
### Links
|
||||||
|
|
||||||
* [`mobs_mc`](https://github.com/maikerumine/mobs_mc)
|
* [`mobs_mc`](https://github.com/maikerumine/mobs_mc)
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
--###################
|
|
||||||
--################### AGENT - seemingly unused
|
|
||||||
--###################
|
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
|
||||||
|
|
||||||
mcl_mobs:register_mob("mobs_mc:agent", {
|
|
||||||
type = "npc",
|
|
||||||
spawn_class = "passive",
|
|
||||||
passive = true,
|
|
||||||
hp_min = 20,
|
|
||||||
hp_max = 20,
|
|
||||||
armor = 100,
|
|
||||||
collisionbox = {-0.35, -0.01, -0.35, 0.35, 1, 0.35},
|
|
||||||
visual = "mesh",
|
|
||||||
mesh = "mobs_mc_agent.b3d",
|
|
||||||
textures = {
|
|
||||||
{"mobs_mc_agent.png"},
|
|
||||||
},
|
|
||||||
-- TODO: sounds
|
|
||||||
visual_size = {x=3, y=3},
|
|
||||||
walk_chance = 0,
|
|
||||||
walk_velocity = 0.6,
|
|
||||||
run_velocity = 2,
|
|
||||||
jump = true,
|
|
||||||
animation = {
|
|
||||||
stand_speed = 25,
|
|
||||||
walk_speed = 25,
|
|
||||||
run_speed = 50,
|
|
||||||
stand_start = 20,
|
|
||||||
stand_end = 60,
|
|
||||||
walk_start = 0,
|
|
||||||
walk_end = 20,
|
|
||||||
run_start = 0,
|
|
||||||
run_end = 20,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
mcl_mobs:register_egg("mobs_mc:agent", S("Agent"), "mobs_mc_spawn_icon_agent.png", 0)
|
|
|
@ -138,8 +138,8 @@ maxlight,
|
||||||
20,
|
20,
|
||||||
5000,
|
5000,
|
||||||
2,
|
2,
|
||||||
mobs_mc.spawn_height.overworld_min,
|
mcl_vars.mg_overworld_min,
|
||||||
mobs_mc.spawn_height.water-1)
|
mobs_mc.water_level-1)
|
||||||
|
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
|
|
|
@ -41,7 +41,7 @@ mcl_mobs:register_mob("mobs_mc:blaze", {
|
||||||
reach = 2,
|
reach = 2,
|
||||||
pathfinding = 1,
|
pathfinding = 1,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.blaze_rod,
|
{name = "mcl_mobitems:blaze_rod",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 1,
|
max = 1,
|
||||||
|
@ -141,8 +141,8 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
5000,
|
5000,
|
||||||
3,
|
3,
|
||||||
mobs_mc.spawn_height.nether_min,
|
mcl_vars.mg_nether_min,
|
||||||
mobs_mc.spawn_height.nether_max)
|
mcl_vars.mg_nether_max)
|
||||||
|
|
||||||
-- Blaze fireball
|
-- Blaze fireball
|
||||||
mcl_mobs:register_arrow("mobs_mc:blaze_fireball", {
|
mcl_mobs:register_arrow("mobs_mc:blaze_fireball", {
|
||||||
|
@ -181,7 +181,7 @@ mcl_mobs:register_arrow("mobs_mc:blaze_fireball", {
|
||||||
-- Node hit, make fire
|
-- Node hit, make fire
|
||||||
hit_node = function(self, pos, node)
|
hit_node = function(self, pos, node)
|
||||||
if node == "air" then
|
if node == "air" then
|
||||||
minetest.set_node(pos, {name = mobs_mc.items.fire})
|
minetest.set_node(pos, {name = "mcl_fire:fire"})
|
||||||
else
|
else
|
||||||
if self._shot_from_dispenser and mod_target and node == "mcl_target:target_off" then
|
if self._shot_from_dispenser and mod_target and node == "mcl_target:target_off" then
|
||||||
mcl_target.hit(vector.round(pos), 0.4) --4 redstone ticks
|
mcl_target.hit(vector.round(pos), 0.4) --4 redstone ticks
|
||||||
|
@ -193,7 +193,7 @@ mcl_mobs:register_arrow("mobs_mc:blaze_fireball", {
|
||||||
-- Set fire if node is air, or a replacable flammable node (e.g. a plant)
|
-- Set fire if node is air, or a replacable flammable node (e.g. a plant)
|
||||||
if crashnode.name == "air" or
|
if crashnode.name == "air" or
|
||||||
(cndef and cndef.buildable_to and minetest.get_item_group(crashnode.name, "flammable") >= 1) then
|
(cndef and cndef.buildable_to and minetest.get_item_group(crashnode.name, "flammable") >= 1) then
|
||||||
minetest.set_node(crashpos, {name = mobs_mc.items.fire})
|
minetest.set_node(crashpos, {name = "mcl_fire:fire"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -30,12 +30,12 @@ mcl_mobs:register_mob("mobs_mc:chicken", {
|
||||||
makes_footstep_sound = true,
|
makes_footstep_sound = true,
|
||||||
walk_velocity = 1,
|
walk_velocity = 1,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.chicken_raw,
|
{name = "mcl_mobitems:chicken",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
{name = mobs_mc.items.feather,
|
{name = "mcl_mobitems:feather",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,
|
max = 2,
|
||||||
|
@ -64,7 +64,12 @@ mcl_mobs:register_mob("mobs_mc:chicken", {
|
||||||
run_start = 0, run_end = 40,
|
run_start = 0, run_end = 40,
|
||||||
},
|
},
|
||||||
|
|
||||||
follow = mobs_mc.follow.chicken,
|
follow = {
|
||||||
|
"mcl_farming:wheat_seeds",
|
||||||
|
"mcl_farming:melon_seeds",
|
||||||
|
"mcl_farming:pumpkin_seeds",
|
||||||
|
"mcl_farming:beetroot_seeds",
|
||||||
|
},
|
||||||
view_range = 16,
|
view_range = 16,
|
||||||
fear_height = 4,
|
fear_height = 4,
|
||||||
|
|
||||||
|
@ -89,7 +94,7 @@ mcl_mobs:register_mob("mobs_mc:chicken", {
|
||||||
|
|
||||||
local pos = self.object:get_pos()
|
local pos = self.object:get_pos()
|
||||||
|
|
||||||
minetest.add_item(pos, mobs_mc.items.egg)
|
minetest.add_item(pos, "mcl_throwing:egg")
|
||||||
|
|
||||||
minetest.sound_play("mobs_mc_chicken_lay_egg", {
|
minetest.sound_play("mobs_mc_chicken_lay_egg", {
|
||||||
pos = pos,
|
pos = pos,
|
||||||
|
@ -147,8 +152,8 @@ mcl_mobs:spawn_specific(
|
||||||
minetest.LIGHT_MAX+1,
|
minetest.LIGHT_MAX+1,
|
||||||
30, 17000,
|
30, 17000,
|
||||||
3,
|
3,
|
||||||
mobs_mc.spawn_height.water,
|
mobs_mc.water_level,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:chicken", S("Chicken"), "mobs_mc_spawn_icon_chicken.png", 0)
|
mcl_mobs:register_egg("mobs_mc:chicken", S("Chicken"), "mobs_mc_spawn_icon_chicken.png", 0)
|
||||||
|
|
|
@ -21,12 +21,12 @@ local cow_def = {
|
||||||
makes_footstep_sound = true,
|
makes_footstep_sound = true,
|
||||||
walk_velocity = 1,
|
walk_velocity = 1,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.beef_raw,
|
{name = "mcl_mobitems:beef",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 3,
|
max = 3,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
{name = mobs_mc.items.leather,
|
{name = "mcl_mobitems:leather",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,
|
max = 2,
|
||||||
|
@ -47,7 +47,6 @@ local cow_def = {
|
||||||
walk_end = 40, run_start = 0,
|
walk_end = 40, run_start = 0,
|
||||||
run_end = 40,
|
run_end = 40,
|
||||||
},
|
},
|
||||||
follow = mobs_mc.follow.cow,
|
|
||||||
on_rightclick = function(self, clicker)
|
on_rightclick = function(self, clicker)
|
||||||
if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end
|
if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end
|
||||||
if mcl_mobs:protect(self, clicker) then return end
|
if mcl_mobs:protect(self, clicker) then return end
|
||||||
|
@ -57,23 +56,23 @@ local cow_def = {
|
||||||
end
|
end
|
||||||
|
|
||||||
local item = clicker:get_wielded_item()
|
local item = clicker:get_wielded_item()
|
||||||
if item:get_name() == mobs_mc.items.bucket and clicker:get_inventory() then
|
if item:get_name() == "mcl_buckets:bucket_empty" and clicker:get_inventory() then
|
||||||
local inv = clicker:get_inventory()
|
local inv = clicker:get_inventory()
|
||||||
inv:remove_item("main", mobs_mc.items.bucket)
|
inv:remove_item("main", "mcl_buckets:bucket_empty")
|
||||||
minetest.sound_play("mobs_mc_cow_milk", {pos=self.object:get_pos(), gain=0.6})
|
minetest.sound_play("mobs_mc_cow_milk", {pos=self.object:get_pos(), gain=0.6})
|
||||||
-- if room add bucket of milk to inventory, otherwise drop as item
|
-- if room add bucket of milk to inventory, otherwise drop as item
|
||||||
if inv:room_for_item("main", {name=mobs_mc.items.milk}) then
|
if inv:room_for_item("main", {name = "mcl_mobitems:milk_bucket"}) then
|
||||||
clicker:get_inventory():add_item("main", mobs_mc.items.milk)
|
clicker:get_inventory():add_item("main", "mcl_mobitems:milk_bucket")
|
||||||
else
|
else
|
||||||
local pos = self.object:get_pos()
|
local pos = self.object:get_pos()
|
||||||
pos.y = pos.y + 0.5
|
pos.y = pos.y + 0.5
|
||||||
minetest.add_item(pos, {name = mobs_mc.items.milk})
|
minetest.add_item(pos, {name = "mcl_mobitems:milk_bucket"})
|
||||||
end
|
end
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
mcl_mobs:capture_mob(self, clicker, 0, 5, 60, false, nil)
|
mcl_mobs:capture_mob(self, clicker, 0, 5, 60, false, nil)
|
||||||
end,
|
end,
|
||||||
follow = mobs_mc.items.wheat,
|
follow = "mcl_farming:wheat_item",
|
||||||
view_range = 10,
|
view_range = 10,
|
||||||
fear_height = 4,
|
fear_height = 4,
|
||||||
}
|
}
|
||||||
|
@ -94,14 +93,14 @@ mooshroom_def.on_rightclick = function(self, clicker)
|
||||||
end
|
end
|
||||||
local item = clicker:get_wielded_item()
|
local item = clicker:get_wielded_item()
|
||||||
-- Use shears to get mushrooms and turn mooshroom into cow
|
-- Use shears to get mushrooms and turn mooshroom into cow
|
||||||
if item:get_name() == mobs_mc.items.shears then
|
if item:get_name() == "mcl_tools:shears" then
|
||||||
local pos = self.object:get_pos()
|
local pos = self.object:get_pos()
|
||||||
minetest.sound_play("mcl_tools_shears_cut", {pos = pos}, true)
|
minetest.sound_play("mcl_tools_shears_cut", {pos = pos}, true)
|
||||||
|
|
||||||
if self.base_texture[1] == "mobs_mc_mooshroom_brown.png" then
|
if self.base_texture[1] == "mobs_mc_mooshroom_brown.png" then
|
||||||
minetest.add_item({x=pos.x, y=pos.y+1.4, z=pos.z}, mobs_mc.items.mushroom_brown .. " 5")
|
minetest.add_item({x=pos.x, y=pos.y+1.4, z=pos.z}, "mcl_mushrooms:mushroom_brown 5")
|
||||||
else
|
else
|
||||||
minetest.add_item({x=pos.x, y=pos.y+1.4, z=pos.z}, mobs_mc.items.mushroom_red .. " 5")
|
minetest.add_item({x=pos.x, y=pos.y+1.4, z=pos.z}, "mcl_mushrooms:mushroom_red 5")
|
||||||
end
|
end
|
||||||
|
|
||||||
local oldyaw = self.object:get_yaw()
|
local oldyaw = self.object:get_yaw()
|
||||||
|
@ -110,34 +109,34 @@ mooshroom_def.on_rightclick = function(self, clicker)
|
||||||
cow:set_yaw(oldyaw)
|
cow:set_yaw(oldyaw)
|
||||||
|
|
||||||
if not minetest.is_creative_enabled(clicker:get_player_name()) then
|
if not minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||||
item:add_wear(mobs_mc.misc.shears_wear)
|
item:add_wear(mobs_mc.shears_wear)
|
||||||
clicker:get_inventory():set_stack("main", clicker:get_wield_index(), item)
|
clicker:get_inventory():set_stack("main", clicker:get_wield_index(), item)
|
||||||
end
|
end
|
||||||
-- Use bucket to milk
|
-- Use bucket to milk
|
||||||
elseif item:get_name() == mobs_mc.items.bucket and clicker:get_inventory() then
|
elseif item:get_name() == "mcl_buckets:bucket_empty" and clicker:get_inventory() then
|
||||||
local inv = clicker:get_inventory()
|
local inv = clicker:get_inventory()
|
||||||
inv:remove_item("main", mobs_mc.items.bucket)
|
inv:remove_item("main", "mcl_buckets:bucket_empty")
|
||||||
minetest.sound_play("mobs_mc_cow_milk", {pos=self.object:get_pos(), gain=0.6})
|
minetest.sound_play("mobs_mc_cow_milk", {pos=self.object:get_pos(), gain=0.6})
|
||||||
-- If room, add milk to inventory, otherwise drop as item
|
-- If room, add milk to inventory, otherwise drop as item
|
||||||
if inv:room_for_item("main", {name=mobs_mc.items.milk}) then
|
if inv:room_for_item("main", {name="mcl_mobitems:milk_bucket"}) then
|
||||||
clicker:get_inventory():add_item("main", mobs_mc.items.milk)
|
clicker:get_inventory():add_item("main", "mcl_mobitems:milk_bucket")
|
||||||
else
|
else
|
||||||
local pos = self.object:get_pos()
|
local pos = self.object:get_pos()
|
||||||
pos.y = pos.y + 0.5
|
pos.y = pos.y + 0.5
|
||||||
minetest.add_item(pos, {name = mobs_mc.items.milk})
|
minetest.add_item(pos, {name = "mcl_mobitems:milk_bucket"})
|
||||||
end
|
end
|
||||||
-- Use bowl to get mushroom stew
|
-- Use bowl to get mushroom stew
|
||||||
elseif item:get_name() == mobs_mc.items.bowl and clicker:get_inventory() then
|
elseif item:get_name() == "mcl_core:bowl" and clicker:get_inventory() then
|
||||||
local inv = clicker:get_inventory()
|
local inv = clicker:get_inventory()
|
||||||
inv:remove_item("main", mobs_mc.items.bowl)
|
inv:remove_item("main", "mcl_core:bowl")
|
||||||
minetest.sound_play("mobs_mc_cow_mushroom_stew", {pos=self.object:get_pos(), gain=0.6})
|
minetest.sound_play("mobs_mc_cow_mushroom_stew", {pos=self.object:get_pos(), gain=0.6})
|
||||||
-- If room, add mushroom stew to inventory, otherwise drop as item
|
-- If room, add mushroom stew to inventory, otherwise drop as item
|
||||||
if inv:room_for_item("main", {name=mobs_mc.items.mushroom_stew}) then
|
if inv:room_for_item("main", {name="mcl_mushrooms:mushroom_stew"}) then
|
||||||
clicker:get_inventory():add_item("main", mobs_mc.items.mushroom_stew)
|
clicker:get_inventory():add_item("main", "mcl_mushrooms:mushroom_stew")
|
||||||
else
|
else
|
||||||
local pos = self.object:get_pos()
|
local pos = self.object:get_pos()
|
||||||
pos.y = pos.y + 0.5
|
pos.y = pos.y + 0.5
|
||||||
minetest.add_item(pos, {name = mobs_mc.items.mushroom_stew})
|
minetest.add_item(pos, {name = "mcl_mushrooms:mushroom_stew"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
mcl_mobs:capture_mob(self, clicker, 0, 5, 60, false, nil)
|
mcl_mobs:capture_mob(self, clicker, 0, 5, 60, false, nil)
|
||||||
|
@ -193,8 +192,8 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
17000,
|
17000,
|
||||||
10,
|
10,
|
||||||
mobs_mc.spawn_height.water,
|
mobs_mc.water_level,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -211,8 +210,8 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
17000,
|
17000,
|
||||||
5,
|
5,
|
||||||
mobs_mc.spawn_height.overworld_min,
|
mcl_vars.mg_overworld_min,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- spawn egg
|
-- spawn egg
|
||||||
mcl_mobs:register_egg("mobs_mc:cow", S("Cow"), "mobs_mc_spawn_icon_cow.png", 0)
|
mcl_mobs:register_egg("mobs_mc:cow", S("Cow"), "mobs_mc_spawn_icon_cow.png", 0)
|
||||||
|
|
|
@ -58,7 +58,7 @@ mcl_mobs:register_mob("mobs_mc:creeper", {
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local item = clicker:get_wielded_item()
|
local item = clicker:get_wielded_item()
|
||||||
if item:get_name() == mobs_mc.items.flint_and_steel then
|
if item:get_name() == "mcl_fire:flint_and_steel" then
|
||||||
if not minetest.is_creative_enabled(clicker:get_player_name()) then
|
if not minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||||
-- Wear tool
|
-- Wear tool
|
||||||
local wdef = item:get_definition()
|
local wdef = item:get_definition()
|
||||||
|
@ -88,14 +88,14 @@ mcl_mobs:register_mob("mobs_mc:creeper", {
|
||||||
if luaentity and luaentity.name:find("arrow") then
|
if luaentity and luaentity.name:find("arrow") then
|
||||||
local shooter_luaentity = luaentity._shooter and luaentity._shooter:get_luaentity()
|
local shooter_luaentity = luaentity._shooter and luaentity._shooter:get_luaentity()
|
||||||
if shooter_luaentity and (shooter_luaentity.name == "mobs_mc:skeleton" or shooter_luaentity.name == "mobs_mc:stray") then
|
if shooter_luaentity and (shooter_luaentity.name == "mobs_mc:skeleton" or shooter_luaentity.name == "mobs_mc:stray") then
|
||||||
minetest.add_item({x=pos.x, y=pos.y+1, z=pos.z}, mobs_mc.items.music_discs[math.random(1, #mobs_mc.items.music_discs)])
|
minetest.add_item({x=pos.x, y=pos.y+1, z=pos.z}, "mcl_jukebox:record_" .. math.random(9))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
maxdrops = 2,
|
maxdrops = 2,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.gunpowder,
|
{name = "mcl_mobitems:gunpowder",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,
|
max = 2,
|
||||||
|
@ -103,7 +103,7 @@ mcl_mobs:register_mob("mobs_mc:creeper", {
|
||||||
|
|
||||||
-- Head
|
-- Head
|
||||||
-- TODO: Only drop if killed by charged creeper
|
-- TODO: Only drop if killed by charged creeper
|
||||||
{name = mobs_mc.items.head_creeper,
|
{name = "mcl_heads:creeper",
|
||||||
chance = 200, -- 0.5%
|
chance = 200, -- 0.5%
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,},
|
max = 1,},
|
||||||
|
@ -180,7 +180,7 @@ mcl_mobs:register_mob("mobs_mc:creeper_charged", {
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local item = clicker:get_wielded_item()
|
local item = clicker:get_wielded_item()
|
||||||
if item:get_name() == mobs_mc.items.flint_and_steel then
|
if item:get_name() == "mcl_fire:flint_and_steel" then
|
||||||
if not minetest.is_creative_enabled(clicker:get_player_name()) then
|
if not minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||||
-- Wear tool
|
-- Wear tool
|
||||||
local wdef = item:get_definition()
|
local wdef = item:get_definition()
|
||||||
|
@ -210,14 +210,14 @@ mcl_mobs:register_mob("mobs_mc:creeper_charged", {
|
||||||
if luaentity and luaentity.name:find("arrow") then
|
if luaentity and luaentity.name:find("arrow") then
|
||||||
local shooter_luaentity = luaentity._shooter and luaentity._shooter:get_luaentity()
|
local shooter_luaentity = luaentity._shooter and luaentity._shooter:get_luaentity()
|
||||||
if shooter_luaentity and (shooter_luaentity.name == "mobs_mc:skeleton" or shooter_luaentity.name == "mobs_mc:stray") then
|
if shooter_luaentity and (shooter_luaentity.name == "mobs_mc:skeleton" or shooter_luaentity.name == "mobs_mc:stray") then
|
||||||
minetest.add_item({x=pos.x, y=pos.y+1, z=pos.z}, mobs_mc.items.music_discs[math.random(1, #mobs_mc.items.music_discs)])
|
minetest.add_item({x=pos.x, y=pos.y+1, z=pos.z}, "mcl_jukebox:record_" .. math.random(9))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
maxdrops = 2,
|
maxdrops = 2,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.gunpowder,
|
{name = "mcl_mobitems:gunpowder",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,
|
max = 2,
|
||||||
|
@ -225,7 +225,7 @@ mcl_mobs:register_mob("mobs_mc:creeper_charged", {
|
||||||
|
|
||||||
-- Head
|
-- Head
|
||||||
-- TODO: Only drop if killed by charged creeper
|
-- TODO: Only drop if killed by charged creeper
|
||||||
{name = mobs_mc.items.head_creeper,
|
{name = "mcl_heads:creeper",
|
||||||
chance = 200, -- 0.5%
|
chance = 200, -- 0.5%
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,},
|
max = 1,},
|
||||||
|
@ -404,8 +404,8 @@ mcl_mobs:spawn_specific(
|
||||||
20,
|
20,
|
||||||
16500,
|
16500,
|
||||||
2,
|
2,
|
||||||
mobs_mc.spawn_height.overworld_min,
|
mcl_vars.mg_overworld_min,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:creeper", S("Creeper"), "mobs_mc_spawn_icon_creeper.png", 0)
|
mcl_mobs:register_egg("mobs_mc:creeper", S("Creeper"), "mobs_mc_spawn_icon_creeper.png", 0)
|
||||||
|
|
|
@ -98,7 +98,7 @@ mcl_mobs:register_mob("mobs_mc:enderdragon", {
|
||||||
mcl_structures.call_struct(self._portal_pos, "end_exit_portal_open")
|
mcl_structures.call_struct(self._portal_pos, "end_exit_portal_open")
|
||||||
if self._initial then
|
if self._initial then
|
||||||
mcl_experience.throw_xp(pos, 11500) -- 500 + 11500 = 12000
|
mcl_experience.throw_xp(pos, 11500) -- 500 + 11500 = 12000
|
||||||
minetest.set_node(vector.add(self._portal_pos, vector.new(3, 5, 3)), {name = mobs_mc.items.dragon_egg})
|
minetest.set_node(vector.add(self._portal_pos, vector.new(3, 5, 3)), {name = "mcl_end:dragon_egg"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|
|
@ -249,7 +249,7 @@ mcl_mobs:register_mob("mobs_mc:enderman", {
|
||||||
damage = 7,
|
damage = 7,
|
||||||
reach = 2,
|
reach = 2,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.ender_pearl,
|
{name = "mcl_throwing:ender_pearl",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 1,
|
max = 1,
|
||||||
|
@ -604,8 +604,8 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
3000,
|
3000,
|
||||||
12,
|
12,
|
||||||
mobs_mc.spawn_height.end_min,
|
mcl_vars.mg_end_min,
|
||||||
mobs_mc.spawn_height.end_max)
|
mcl_vars.mg_end_max)
|
||||||
-- Overworld spawn
|
-- Overworld spawn
|
||||||
mcl_mobs:spawn_specific(
|
mcl_mobs:spawn_specific(
|
||||||
"mobs_mc:enderman",
|
"mobs_mc:enderman",
|
||||||
|
@ -757,8 +757,8 @@ mcl_mobs:spawn_specific(
|
||||||
30,
|
30,
|
||||||
19000,
|
19000,
|
||||||
2,
|
2,
|
||||||
mobs_mc.spawn_height.overworld_min,
|
mcl_vars.mg_overworld_min,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- Nether spawn (rare)
|
-- Nether spawn (rare)
|
||||||
mcl_mobs:spawn_specific(
|
mcl_mobs:spawn_specific(
|
||||||
|
@ -773,8 +773,8 @@ mcl_mobs:spawn_specific(
|
||||||
30,
|
30,
|
||||||
27500,
|
27500,
|
||||||
4,
|
4,
|
||||||
mobs_mc.spawn_height.nether_min,
|
mcl_vars.mg_nether_min,
|
||||||
mobs_mc.spawn_height.nether_max)
|
mcl_vars.mg_nether_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:enderman", S("Enderman"), "mobs_mc_spawn_icon_enderman.png", 0)
|
mcl_mobs:register_egg("mobs_mc:enderman", S("Enderman"), "mobs_mc_spawn_icon_enderman.png", 0)
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
# Game integration help
|
|
||||||
|
|
||||||
This mod has been designed to make game integration rather easy. Ideally, it should be possible to include this mod verbatim in your game, with modifications only done by an external mod.
|
|
||||||
|
|
||||||
To integrate this mod in a game, you have to do 2 things: Adding the mod, and adding another mod which tells `mobs_mc` which items to use. The idea is that `mobs_mc` should work with any items. Specifically, these are the steps you need to follow:
|
|
||||||
|
|
||||||
* Add the `mobs_mc` mod and its dependencies
|
|
||||||
* Add a mod with name “`mobs_mc_gameconfig`”
|
|
||||||
* In this mod, do this:
|
|
||||||
* Do *not* depend on `mobs_mc`
|
|
||||||
* Create the table `mobs_mc`
|
|
||||||
* Create the table `mobs_mc.override`
|
|
||||||
* In `mobs_mc.override`, create subtables (`items`, `spawn`, etc.) like in `0_gameconfig.lua`, defining the na
|
|
||||||
* Read `0_gameconfig.lua` to see which items you can override (and more explanations)
|
|
||||||
* In `on_construct` of a pumpkin or jack'o lantern node, call:
|
|
||||||
* `mobs_mc.tools.check_iron_golem_summon(pos)`
|
|
||||||
* `mobs_mc.tools.check_snow_golem_summon(pos)`
|
|
||||||
* For more information, see `snowman.lua` and `iron_golem.lua`
|
|
||||||
|
|
||||||
Some things to note:
|
|
||||||
|
|
||||||
* Every override is optional, but explicitly setting all the item overrides is strongly recommended
|
|
||||||
* `mobs_mc` ships many (but not all) items on its own. If not item name override is set, the `mobs_mc` item is used
|
|
||||||
* You decide whether your game defines its own items, outside of `mobs_mc` or if you let `mobs_mc` do the work.
|
|
||||||
* Make sure to avoid duplicate items!
|
|
||||||
* After finishing this, throughly test this
|
|
||||||
* Without `mobs_mc_gameconfig`, the mod assumes Minetest Game items
|
|
||||||
* `mobs_mc` optionally depends on `mobs_mc_gameconfig`
|
|
||||||
|
|
||||||
## Example `init.lua` in `mobs_mc_gameconfig`
|
|
||||||
```
|
|
||||||
mobs_mc = {}
|
|
||||||
|
|
||||||
mobs_mc.override = {}
|
|
||||||
|
|
||||||
-- Set the item names here
|
|
||||||
mobs_mc.override.items = {
|
|
||||||
blaze_rod = "mcl_mobitems:blaze_rod",
|
|
||||||
blaze_powder = "mcl_mobitems:blaze_powder",
|
|
||||||
chicken_raw = "mcl_mobitems:chicken",
|
|
||||||
-- And so on ...
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Set the “follow” field of mobs (used for attracting mob, feeding and breeding)
|
|
||||||
mobs_mc.override.follow = {
|
|
||||||
chicken = { "mcl_farming:wheat_seeds", "mcl_farming:melon_seeds", "mcl_farming:pumpkin_seeds", "mcl_farming:beetroot_seeds", },
|
|
||||||
horse = { "mcl_core:apple", mobs_mc.override.items.wheat }, -- TODO
|
|
||||||
pig = { "mcl_farming:potato", mobs_mc.override.items.carrot, mobs_mc.override.items.carrot_on_a_stick},
|
|
||||||
-- And so on ...
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Custom spawn nodes
|
|
||||||
mobs_mc.override.spawn = {
|
|
||||||
snow = { "example:snow", "example:snow2" },
|
|
||||||
-- And so on ...
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Take a look at the other possible tables, see 0_gameconfig.lua
|
|
||||||
```
|
|
|
@ -39,8 +39,8 @@ mcl_mobs:register_mob("mobs_mc:ghast", {
|
||||||
walk_velocity = 1.6,
|
walk_velocity = 1.6,
|
||||||
run_velocity = 3.2,
|
run_velocity = 3.2,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.gunpowder, chance = 1, min = 0, max = 2, looting = "common"},
|
{name = "mcl_mobitems:gunpowder", chance = 1, min = 0, max = 2, looting = "common"},
|
||||||
{name = mobs_mc.items.ghast_tear, chance = 10/6, min = 0, max = 1, looting = "common", looting_ignore_chance = true},
|
{name = "mcl_mobitems:ghast_tear", chance = 10/6, min = 0, max = 1, looting = "common", looting_ignore_chance = true},
|
||||||
},
|
},
|
||||||
animation = {
|
animation = {
|
||||||
stand_speed = 50, walk_speed = 50, run_speed = 50,
|
stand_speed = 50, walk_speed = 50, run_speed = 50,
|
||||||
|
@ -88,8 +88,8 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
18000,
|
18000,
|
||||||
2,
|
2,
|
||||||
mobs_mc.spawn_height.nether_min,
|
mcl_vars.mg_nether_min,
|
||||||
mobs_mc.spawn_height.nether_max)
|
mcl_vars.mg_nether_max)
|
||||||
|
|
||||||
-- fireball (projectile)
|
-- fireball (projectile)
|
||||||
mcl_mobs:register_arrow("mobs_mc:fireball", {
|
mcl_mobs:register_arrow("mobs_mc:fireball", {
|
||||||
|
|
|
@ -44,7 +44,7 @@ mcl_mobs:register_mob("mobs_mc:guardian", {
|
||||||
},
|
},
|
||||||
drops = {
|
drops = {
|
||||||
-- Greatly increased amounts of prismarine
|
-- Greatly increased amounts of prismarine
|
||||||
{name = mobs_mc.items.prismarine_shard,
|
{name = "mcl_ocean:prismarine_shard",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 32,
|
max = 32,
|
||||||
|
@ -53,37 +53,37 @@ mcl_mobs:register_mob("mobs_mc:guardian", {
|
||||||
|
|
||||||
-- The following drops are approximations
|
-- The following drops are approximations
|
||||||
-- Fish / prismarine crystal
|
-- Fish / prismarine crystal
|
||||||
{name = mobs_mc.items.fish_raw,
|
{name = "mcl_fishing:fish_raw",
|
||||||
chance = 4,
|
chance = 4,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
{name = mobs_mc.items.prismarine_crystals,
|
{name = "mcl_ocean:prismarine_crystals",
|
||||||
chance = 4,
|
chance = 4,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 2,
|
max = 2,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
|
|
||||||
-- Rare drop: fish
|
-- Rare drop: fish
|
||||||
{name = mobs_mc.items.fish_raw,
|
{name = "mcl_fishing:fish_raw",
|
||||||
chance = 160, -- 2.5% / 4
|
chance = 160, -- 2.5% / 4
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "rare",
|
looting = "rare",
|
||||||
looting_factor = 0.0025,},
|
looting_factor = 0.0025,},
|
||||||
{name = mobs_mc.items.salmon_raw,
|
{name = "mcl_fishing:salmon_raw",
|
||||||
chance = 160,
|
chance = 160,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "rare",
|
looting = "rare",
|
||||||
looting_factor = 0.0025,},
|
looting_factor = 0.0025,},
|
||||||
{name = mobs_mc.items.clownfish_raw,
|
{name = "mcl_fishing:clownfish_raw",
|
||||||
chance = 160,
|
chance = 160,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "rare",
|
looting = "rare",
|
||||||
looting_factor = 0.0025,},
|
looting_factor = 0.0025,},
|
||||||
{name = mobs_mc.items.pufferfish_raw,
|
{name = "mcl_fishing:pufferfish_raw",
|
||||||
chance = 160,
|
chance = 160,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
|
@ -92,14 +92,14 @@ mcl_mobs:register_mob("mobs_mc:guardian", {
|
||||||
},
|
},
|
||||||
fly = true,
|
fly = true,
|
||||||
makes_footstep_sound = false,
|
makes_footstep_sound = false,
|
||||||
fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source },
|
fly_in = { "mcl_core:water_source", "mclx_core:river_water_source" },
|
||||||
jump = false,
|
jump = false,
|
||||||
view_range = 16,
|
view_range = 16,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Spawning disabled due to size issues
|
-- Spawning disabled due to size issues
|
||||||
-- TODO: Re-enable spawning
|
-- TODO: Re-enable spawning
|
||||||
--mcl_mobs:spawn_specific("mobs_mc:guardian", mobs_mc.spawn.water, mobs_mc.spawn_water, 0, minetest.LIGHT_MAX+1, 30, 25000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water - 10)
|
--mcl_mobs:spawn_specific("mobs_mc:guardian", { "mcl_core:water_source", "mclx_core:river_water_source" }, { "mcl_core:water_source", "mclx_core:river_water_source" }, 0, minetest.LIGHT_MAX+1, 30, 25000, 2, mcl_vars.mg_overworld_min, mobs_mc.water_level - 10)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:guardian", S("Guardian"), "mobs_mc_spawn_icon_guardian.png", 0)
|
mcl_mobs:register_egg("mobs_mc:guardian", S("Guardian"), "mobs_mc_spawn_icon_guardian.png", 0)
|
||||||
|
|
|
@ -49,51 +49,51 @@ mcl_mobs:register_mob("mobs_mc:guardian_elder", {
|
||||||
-- TODO: Reduce # of drops when ocean monument is ready.
|
-- TODO: Reduce # of drops when ocean monument is ready.
|
||||||
|
|
||||||
-- Greatly increased amounts of prismarine
|
-- Greatly increased amounts of prismarine
|
||||||
{name = mobs_mc.items.prismarine_shard,
|
{name = "mcl_ocean:prismarine_shard",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 64,
|
max = 64,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
|
|
||||||
-- TODO: Only drop if killed by player
|
-- TODO: Only drop if killed by player
|
||||||
{name = mobs_mc.items.wet_sponge,
|
{name = "mcl_sponges:sponge_wet",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,},
|
max = 1,},
|
||||||
|
|
||||||
-- The following drops are approximations
|
-- The following drops are approximations
|
||||||
-- Fish / prismarine crystal
|
-- Fish / prismarine crystal
|
||||||
{name = mobs_mc.items.fish_raw,
|
{name = "mcl_fishing:fish_raw",
|
||||||
chance = 4,
|
chance = 4,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
{name = mobs_mc.items.prismarine_crystals,
|
{name = "mcl_ocean:prismarine_crystals",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 10,
|
max = 10,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
|
|
||||||
-- Rare drop: fish
|
-- Rare drop: fish
|
||||||
{name = mobs_mc.items.fish_raw,
|
{name = "mcl_fishing:fish_raw",
|
||||||
chance = 160, -- 2.5% / 4
|
chance = 160, -- 2.5% / 4
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "rare",
|
looting = "rare",
|
||||||
looting_factor = 0.01 / 4,},
|
looting_factor = 0.01 / 4,},
|
||||||
{name = mobs_mc.items.salmon_raw,
|
{name = "mcl_fishing:salmon_raw",
|
||||||
chance = 160,
|
chance = 160,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "rare",
|
looting = "rare",
|
||||||
looting_factor = 0.01 / 4,},
|
looting_factor = 0.01 / 4,},
|
||||||
{name = mobs_mc.items.clownfish_raw,
|
{name = "mcl_fishing:clownfish_raw",
|
||||||
chance = 160,
|
chance = 160,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "rare",
|
looting = "rare",
|
||||||
looting_factor = 0.01 / 4,},
|
looting_factor = 0.01 / 4,},
|
||||||
{name = mobs_mc.items.pufferfish_raw,
|
{name = "mcl_fishing:pufferfish_raw",
|
||||||
chance = 160,
|
chance = 160,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
|
@ -102,14 +102,14 @@ mcl_mobs:register_mob("mobs_mc:guardian_elder", {
|
||||||
},
|
},
|
||||||
fly = true,
|
fly = true,
|
||||||
makes_footstep_sound = false,
|
makes_footstep_sound = false,
|
||||||
fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source },
|
fly_in = { "mcl_core:water_source", "mclx_core:river_water_source" },
|
||||||
jump = false,
|
jump = false,
|
||||||
view_range = 16,
|
view_range = 16,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Spawning disabled due to size issues <- what do you mean? -j4i
|
-- Spawning disabled due to size issues <- what do you mean? -j4i
|
||||||
-- TODO: Re-enable spawning
|
-- TODO: Re-enable spawning
|
||||||
-- mcl_mobs:spawn_specific("mobs_mc:guardian_elder", mobs_mc.spawn.water, mobs_mc.spawn_water, 0, minetest.LIGHT_MAX+1, 30, 40000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water-18)
|
-- mcl_mobs:spawn_specific("mobs_mc:guardian_elder", { "mcl_core:water_source", "mclx_core:river_water_source" }, { "mcl_core:water_source", "mclx_core:river_water_source" }, 0, minetest.LIGHT_MAX+1, 30, 40000, 2, mcl_vars.mg_overworld_min, mobs_mc.water_level-18)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:guardian_elder", S("Elder Guardian"), "mobs_mc_spawn_icon_guardian_elder.png", 0)
|
mcl_mobs:register_egg("mobs_mc:guardian_elder", S("Elder Guardian"), "mobs_mc_spawn_icon_guardian_elder.png", 0)
|
||||||
|
|
|
@ -114,7 +114,14 @@ local horse = {
|
||||||
fly = false,
|
fly = false,
|
||||||
walk_chance = 60,
|
walk_chance = 60,
|
||||||
view_range = 16,
|
view_range = 16,
|
||||||
follow = mobs_mc.follow.horse,
|
follow = {
|
||||||
|
"mcl_core:apple",
|
||||||
|
"mcl_core:sugar",
|
||||||
|
"mcl_farming:wheat_item",
|
||||||
|
"mcl_farming:hay_block",
|
||||||
|
"mcl_core:apple_gold",
|
||||||
|
"mcl_farming:carrot_item_gold",
|
||||||
|
},
|
||||||
passive = true,
|
passive = true,
|
||||||
hp_min = 15,
|
hp_min = 15,
|
||||||
hp_max = 30,
|
hp_max = 30,
|
||||||
|
@ -125,7 +132,7 @@ local horse = {
|
||||||
jump = true,
|
jump = true,
|
||||||
jump_height = 5.75, -- can clear 2.5 blocks
|
jump_height = 5.75, -- can clear 2.5 blocks
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.leather,
|
{name = "mcl_mobitems:leather",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,
|
max = 2,
|
||||||
|
@ -194,7 +201,7 @@ local horse = {
|
||||||
|
|
||||||
-- drop saddle when horse is killed while riding
|
-- drop saddle when horse is killed while riding
|
||||||
if self._saddle then
|
if self._saddle then
|
||||||
minetest.add_item(pos, mobs_mc.items.saddle)
|
minetest.add_item(pos, "mcl_mobitems:saddle")
|
||||||
end
|
end
|
||||||
-- also detach from horse properly
|
-- also detach from horse properly
|
||||||
if self.driver then
|
if self.driver then
|
||||||
|
@ -222,15 +229,15 @@ local horse = {
|
||||||
|
|
||||||
-- Feeding, intentionally not using mobs:feed_tame because horse taming is
|
-- Feeding, intentionally not using mobs:feed_tame because horse taming is
|
||||||
-- different and more complicated
|
-- different and more complicated
|
||||||
if (iname == mobs_mc.items.sugar) then
|
if (iname == "mcl_core:sugar") then
|
||||||
temper_increase = 3
|
temper_increase = 3
|
||||||
elseif (iname == mobs_mc.items.wheat) then
|
elseif (iname == "mcl_farming:wheat_item") then
|
||||||
temper_increase = 3
|
temper_increase = 3
|
||||||
elseif (iname == mobs_mc.items.apple) then
|
elseif (iname == "mcl_core:apple") then
|
||||||
temper_increase = 3
|
temper_increase = 3
|
||||||
elseif (iname == mobs_mc.items.golden_carrot) then
|
elseif (iname == "mcl_farming:carrot_item_gold") then
|
||||||
temper_increase = 5
|
temper_increase = 5
|
||||||
elseif (iname == mobs_mc.items.golden_apple) then
|
elseif (iname == "mcl_core:apple_gold") then
|
||||||
temper_increase = 10
|
temper_increase = 10
|
||||||
-- Trying to ride
|
-- Trying to ride
|
||||||
elseif not self.driver then
|
elseif not self.driver then
|
||||||
|
@ -258,9 +265,9 @@ local horse = {
|
||||||
|
|
||||||
if can_breed(self.name) then
|
if can_breed(self.name) then
|
||||||
-- Breed horse with golden apple or golden carrot
|
-- Breed horse with golden apple or golden carrot
|
||||||
if (iname == mobs_mc.items.golden_apple) then
|
if (iname == "mcl_core:apple_gold") then
|
||||||
heal = 10
|
heal = 10
|
||||||
elseif (iname == mobs_mc.items.golden_carrot) then
|
elseif (iname == "mcl_farming:carrot_item_gold") then
|
||||||
heal = 4
|
heal = 4
|
||||||
end
|
end
|
||||||
if heal > 0 and mcl_mobs:feed_tame(self, clicker, heal, true, false) then
|
if heal > 0 and mcl_mobs:feed_tame(self, clicker, heal, true, false) then
|
||||||
|
@ -269,13 +276,13 @@ local horse = {
|
||||||
end
|
end
|
||||||
-- Feed with anything else
|
-- Feed with anything else
|
||||||
-- TODO heal amounts don't work
|
-- TODO heal amounts don't work
|
||||||
if (iname == mobs_mc.items.sugar) then
|
if (iname == "mcl_core:sugar") then
|
||||||
heal = 1
|
heal = 1
|
||||||
elseif (iname == mobs_mc.items.wheat) then
|
elseif (iname == "mcl_farming:wheat_item") then
|
||||||
heal = 2
|
heal = 2
|
||||||
elseif (iname == mobs_mc.items.apple) then
|
elseif (iname == "mcl_core:apple") then
|
||||||
heal = 3
|
heal = 3
|
||||||
elseif (iname == mobs_mc.items.hay_bale) then
|
elseif (iname == "mcl_farming:hay_block") then
|
||||||
heal = 20
|
heal = 20
|
||||||
end
|
end
|
||||||
if heal > 0 and mcl_mobs:feed_tame(self, clicker, heal, false, false) then
|
if heal > 0 and mcl_mobs:feed_tame(self, clicker, heal, false, false) then
|
||||||
|
@ -298,7 +305,7 @@ local horse = {
|
||||||
|
|
||||||
-- Put on saddle if tamed
|
-- Put on saddle if tamed
|
||||||
elseif not self.driver and not self._saddle
|
elseif not self.driver and not self._saddle
|
||||||
and iname == mobs_mc.items.saddle then
|
and iname == "mcl_mobitems:saddle" then
|
||||||
|
|
||||||
-- Put on saddle and take saddle from player's inventory
|
-- Put on saddle and take saddle from player's inventory
|
||||||
local w = clicker:get_wielded_item()
|
local w = clicker:get_wielded_item()
|
||||||
|
@ -424,7 +431,7 @@ skeleton_horse.breath_max = -1
|
||||||
skeleton_horse.armor = {undead = 100, fleshy = 100}
|
skeleton_horse.armor = {undead = 100, fleshy = 100}
|
||||||
skeleton_horse.textures = {{"blank.png", "mobs_mc_horse_skeleton.png", "blank.png"}}
|
skeleton_horse.textures = {{"blank.png", "mobs_mc_horse_skeleton.png", "blank.png"}}
|
||||||
skeleton_horse.drops = {
|
skeleton_horse.drops = {
|
||||||
{name = mobs_mc.items.bone,
|
{name = "mcl_mobitems:bone",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,},
|
max = 2,},
|
||||||
|
@ -447,7 +454,7 @@ zombie_horse.breath_max = -1
|
||||||
zombie_horse.armor = {undead = 100, fleshy = 100}
|
zombie_horse.armor = {undead = 100, fleshy = 100}
|
||||||
zombie_horse.textures = {{"blank.png", "mobs_mc_horse_zombie.png", "blank.png"}}
|
zombie_horse.textures = {{"blank.png", "mobs_mc_horse_zombie.png", "blank.png"}}
|
||||||
zombie_horse.drops = {
|
zombie_horse.drops = {
|
||||||
{name = mobs_mc.items.rotten_flesh,
|
{name = "mcl_mobitems:rotten_flesh",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,},
|
max = 2,},
|
||||||
|
@ -562,8 +569,8 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
15000,
|
15000,
|
||||||
4,
|
4,
|
||||||
mobs_mc.spawn_height.water+3,
|
mobs_mc.water_level+3,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
|
|
||||||
mcl_mobs:spawn_specific(
|
mcl_mobs:spawn_specific(
|
||||||
|
@ -583,8 +590,8 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
15000,
|
15000,
|
||||||
4,
|
4,
|
||||||
mobs_mc.spawn_height.water+3,
|
mobs_mc.water_level+3,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:horse", S("Horse"), "mobs_mc_spawn_icon_horse.png", 0)
|
mcl_mobs:register_egg("mobs_mc:horse", S("Horse"), "mobs_mc_spawn_icon_horse.png", 0)
|
||||||
|
|
|
@ -2,45 +2,100 @@
|
||||||
--maikerumine
|
--maikerumine
|
||||||
--made for MC like Survival game
|
--made for MC like Survival game
|
||||||
--License for code WTFPL and otherwise stated in readmes
|
--License for code WTFPL and otherwise stated in readmes
|
||||||
|
mobs_mc = {}
|
||||||
|
|
||||||
local path = minetest.get_modpath("mobs_mc")
|
local pr = PseudoRandom(os.time()*5)
|
||||||
|
|
||||||
if not minetest.get_modpath("mobs_mc_gameconfig") then
|
local offsets = {}
|
||||||
mobs_mc = {}
|
for x=-2, 2 do
|
||||||
|
for z=-2, 2 do
|
||||||
|
table.insert(offsets, {x=x, y=0, z=z})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- For utility functions
|
--[[ Periodically check and teleport mob to owner if not sitting (order ~= "sit") and
|
||||||
mobs_mc.tools = {}
|
the owner is too far away. To be used with do_custom. Note: Optimized for mobs smaller than 1×1×1.
|
||||||
|
Larger mobs might have space problems after teleportation.
|
||||||
|
|
||||||
-- This function checks if the item ID has been overwritten and returns true if it is unchanged
|
* dist: Minimum required distance from owner to teleport. Default: 12
|
||||||
if minetest.get_modpath("mobs_mc_gameconfig") and mobs_mc.override and mobs_mc.override.items then
|
* teleport_check_interval: Optional. Interval in seconds to check the mob teleportation. Default: 4 ]]
|
||||||
mobs_mc.is_item_variable_overridden = function(id)
|
mobs_mc.make_owner_teleport_function = function(dist, teleport_check_interval)
|
||||||
return mobs_mc.override.items[id] == nil
|
return function(self, dtime)
|
||||||
|
-- No teleportation if no owner or if sitting
|
||||||
|
if not self.owner or self.order == "sit" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not teleport_check_interval then
|
||||||
|
teleport_check_interval = 4
|
||||||
|
end
|
||||||
|
if not dist then
|
||||||
|
dist = 12
|
||||||
|
end
|
||||||
|
if self._teleport_timer == nil then
|
||||||
|
self._teleport_timer = teleport_check_interval
|
||||||
|
return
|
||||||
|
end
|
||||||
|
self._teleport_timer = self._teleport_timer - dtime
|
||||||
|
if self._teleport_timer <= 0 then
|
||||||
|
self._teleport_timer = teleport_check_interval
|
||||||
|
local mob_pos = self.object:get_pos()
|
||||||
|
local owner = minetest.get_player_by_name(self.owner)
|
||||||
|
if not owner then
|
||||||
|
-- No owner found, no teleportation
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local owner_pos = owner:get_pos()
|
||||||
|
local dist_from_owner = vector.distance(owner_pos, mob_pos)
|
||||||
|
if dist_from_owner > dist then
|
||||||
|
-- Check for nodes below air in a 5×1×5 area around the owner position
|
||||||
|
local check_offsets = table.copy(offsets)
|
||||||
|
-- Attempt to place mob near player. Must be placed on walkable node below a non-walkable one. Place inside that air node.
|
||||||
|
while #check_offsets > 0 do
|
||||||
|
local r = pr:next(1, #check_offsets)
|
||||||
|
local telepos = vector.add(owner_pos, check_offsets[r])
|
||||||
|
local telepos_below = {x=telepos.x, y=telepos.y-1, z=telepos.z}
|
||||||
|
table.remove(check_offsets, r)
|
||||||
|
-- Long story short, spawn on a platform
|
||||||
|
local trynode = minetest.registered_nodes[minetest.get_node(telepos).name]
|
||||||
|
local trybelownode = minetest.registered_nodes[minetest.get_node(telepos_below).name]
|
||||||
|
if trynode and not trynode.walkable and
|
||||||
|
trybelownode and trybelownode.walkable then
|
||||||
|
-- Correct position found! Let's teleport.
|
||||||
|
self.object:set_pos(telepos)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
else
|
end
|
||||||
-- No items are overwritten, so always return true
|
|
||||||
mobs_mc.is_item_variable_overridden = function(id)
|
local function is_forbidden_node(pos, node)
|
||||||
|
node = node or minetest.get_node(pos)
|
||||||
|
return minetest.get_item_group(node.name, "stair") > 0 or minetest.get_item_group(node.name, "slab") > 0 or minetest.get_item_group(node.name, "carpet") > 0
|
||||||
|
end
|
||||||
|
|
||||||
|
function mcl_mobs:spawn_abm_check(pos, node, name)
|
||||||
|
-- Don't spawn monsters on mycelium
|
||||||
|
if (node.name == "mcl_core:mycelium" or node.name == "mcl_core:mycelium_snow") and minetest.registered_entities[name].type == "monster" then
|
||||||
return true
|
return true
|
||||||
|
--Don't Spawn mobs on stairs, slabs, or carpets
|
||||||
|
elseif is_forbidden_node(pos, node) or is_forbidden_node(vector.add(pos, vector.new(0, 1, 0))) then
|
||||||
|
return true
|
||||||
|
-- Spawn on opaque or liquid nodes
|
||||||
|
elseif minetest.get_item_group(node.name, "opaque") ~= 0 or minetest.registered_nodes[node.name].liquidtype ~= "none" or node.name == "mcl_core:grass_path" then
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Reject everything else
|
||||||
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
--MOB ITEMS SELECTOR SWITCH
|
mobs_mc.shears_wear = 276
|
||||||
dofile(path .. "/0_gameconfig.lua")
|
mobs_mc.water_level = tonumber(minetest.settings:get("water_level")) or 0
|
||||||
--Items
|
|
||||||
dofile(path .. "/1_items_default.lua")
|
|
||||||
|
|
||||||
-- Bow, arrow and throwables
|
|
||||||
dofile(path .. "/2_throwing.lua")
|
|
||||||
|
|
||||||
-- Shared functions
|
|
||||||
dofile(path .. "/3_shared.lua")
|
|
||||||
|
|
||||||
--Mob heads
|
|
||||||
dofile(path .. "/4_heads.lua")
|
|
||||||
|
|
||||||
dofile(path .. "/5_spawn_abm_check.lua")
|
|
||||||
|
|
||||||
-- Animals
|
-- Animals
|
||||||
|
local path = minetest.get_modpath("mobs_mc")
|
||||||
dofile(path .. "/bat.lua") -- Mesh and animation by toby109tt / https://github.com/22i
|
dofile(path .. "/bat.lua") -- Mesh and animation by toby109tt / https://github.com/22i
|
||||||
dofile(path .. "/rabbit.lua") -- Mesh and animation byExeterDad
|
dofile(path .. "/rabbit.lua") -- Mesh and animation byExeterDad
|
||||||
dofile(path .. "/chicken.lua") -- Mesh and animation by Pavel_S
|
dofile(path .. "/chicken.lua") -- Mesh and animation by Pavel_S
|
||||||
|
@ -57,8 +112,6 @@ dofile(path .. "/squid.lua") -- Animation, sound and egg texture by daufinsyd
|
||||||
|
|
||||||
-- NPCs
|
-- NPCs
|
||||||
dofile(path .. "/villager.lua") -- KrupnoPavel Mesh and animation by toby109tt / https://github.com/22i
|
dofile(path .. "/villager.lua") -- KrupnoPavel Mesh and animation by toby109tt / https://github.com/22i
|
||||||
-- Agent texture missing
|
|
||||||
--dofile(path .. "/agent.lua") -- Mesh and animation by toby109tt / https://github.com/22i
|
|
||||||
|
|
||||||
-- Illagers and witch
|
-- Illagers and witch
|
||||||
dofile(path .. "/villager_evoker.lua") -- Mesh and animation by toby109tt / https://github.com/22i
|
dofile(path .. "/villager_evoker.lua") -- Mesh and animation by toby109tt / https://github.com/22i
|
||||||
|
@ -89,12 +142,3 @@ dofile(path .. "/slime+magma_cube.lua") -- Wuzzy
|
||||||
dofile(path .. "/spider.lua") -- Spider by AspireMint (fishyWET (CC-BY-SA 3.0 license for texture)
|
dofile(path .. "/spider.lua") -- Spider by AspireMint (fishyWET (CC-BY-SA 3.0 license for texture)
|
||||||
dofile(path .. "/vex.lua") -- KrupnoPavel
|
dofile(path .. "/vex.lua") -- KrupnoPavel
|
||||||
dofile(path .. "/wither.lua") -- Mesh and animation by toby109tt / https://github.com/22i
|
dofile(path .. "/wither.lua") -- Mesh and animation by toby109tt / https://github.com/22i
|
||||||
--NOTES:
|
|
||||||
--
|
|
||||||
--[[
|
|
||||||
COLISIONBOX in minetest press f5 to see where you are looking at then put these wool collor nodes on the ground in direction of north/east/west... to make colisionbox editing easier
|
|
||||||
#1west-pink/#2down/#3south-blue/#4east-red/#5up/#6north-yelow
|
|
||||||
{-1, -0.5, -1, 1, 3, 1}, Right, Bottom, Back, Left, Top, Front
|
|
||||||
--]]
|
|
||||||
--
|
|
||||||
--
|
|
||||||
|
|
|
@ -62,11 +62,11 @@ mcl_mobs:register_mob("mobs_mc:iron_golem", {
|
||||||
return false
|
return false
|
||||||
end,
|
end,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.iron_ingot,
|
{name = "mcl_core:iron_ingot",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 3,
|
min = 3,
|
||||||
max = 5,},
|
max = 5,},
|
||||||
{name = mobs_mc.items.poppy,
|
{name = "mcl_flowers:poppy",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,},
|
max = 2,},
|
||||||
|
@ -107,7 +107,7 @@ I = Iron block
|
||||||
. = Air
|
. = Air
|
||||||
]]
|
]]
|
||||||
|
|
||||||
mobs_mc.tools.check_iron_golem_summon = function(pos)
|
function mobs_mc.check_iron_golem_summon(pos)
|
||||||
local checks = {
|
local checks = {
|
||||||
-- These are the possible placement patterns, with offset from the pumpkin block.
|
-- These are the possible placement patterns, with offset from the pumpkin block.
|
||||||
-- These tables include the positions of the iron blocks (1-4) and air blocks (5-8)
|
-- These tables include the positions of the iron blocks (1-4) and air blocks (5-8)
|
||||||
|
@ -165,7 +165,7 @@ mobs_mc.tools.check_iron_golem_summon = function(pos)
|
||||||
for i=1, 4 do
|
for i=1, 4 do
|
||||||
local cpos = vector.add(pos, checks[c][i])
|
local cpos = vector.add(pos, checks[c][i])
|
||||||
local node = minetest.get_node(cpos)
|
local node = minetest.get_node(cpos)
|
||||||
if node.name ~= mobs_mc.items.iron_block then
|
if node.name ~= "mcl_core:ironblock" then
|
||||||
ok = false
|
ok = false
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
|
|
@ -51,7 +51,7 @@ mcl_mobs:register_mob("mobs_mc:llama", {
|
||||||
follow_velocity = 4.4,
|
follow_velocity = 4.4,
|
||||||
floats = 1,
|
floats = 1,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.leather,
|
{name = "mcl_mobitems:leather",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,
|
max = 2,
|
||||||
|
@ -82,7 +82,7 @@ mcl_mobs:register_mob("mobs_mc:llama", {
|
||||||
look_start = 78,
|
look_start = 78,
|
||||||
look_end = 108,
|
look_end = 108,
|
||||||
},
|
},
|
||||||
follow = mobs_mc.follow.llama,
|
follow = { "mcl_farming:wheat_item", "mcl_farming:hay_block" },
|
||||||
view_range = 16,
|
view_range = 16,
|
||||||
do_custom = function(self, dtime)
|
do_custom = function(self, dtime)
|
||||||
|
|
||||||
|
@ -126,7 +126,7 @@ mcl_mobs:register_mob("mobs_mc:llama", {
|
||||||
end
|
end
|
||||||
|
|
||||||
local item = clicker:get_wielded_item()
|
local item = clicker:get_wielded_item()
|
||||||
if item:get_name() == mobs_mc.items.hay_bale then
|
if item:get_name() == "mcl_farming:hay_block" then
|
||||||
-- Breed with hay bale
|
-- Breed with hay bale
|
||||||
if mcl_mobs:feed_tame(self, clicker, 1, true, false) then return end
|
if mcl_mobs:feed_tame(self, clicker, 1, true, false) then return end
|
||||||
else
|
else
|
||||||
|
@ -155,7 +155,7 @@ mcl_mobs:register_mob("mobs_mc:llama", {
|
||||||
})
|
})
|
||||||
self.carpet = item:get_name()
|
self.carpet = item:get_name()
|
||||||
self.drops = {
|
self.drops = {
|
||||||
{name = mobs_mc.items.leather,
|
{name = "mcl_mobitems:leather",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,},
|
max = 2,},
|
||||||
|
@ -235,8 +235,8 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
15000,
|
15000,
|
||||||
5,
|
5,
|
||||||
mobs_mc.spawn_height.water+15,
|
mobs_mc.water_level+15,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:llama", S("Llama"), "mobs_mc_spawn_icon_llama.png", 0)
|
mcl_mobs:register_egg("mobs_mc:llama", S("Llama"), "mobs_mc_spawn_icon_llama.png", 0)
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
# textdomain: mobs_mc
|
# textdomain: mobs_mc
|
||||||
Totem of Undying=Totem der Unsterblichkeit
|
|
||||||
A totem of undying is a rare artifact which may safe you from certain death.=Ein Totem der Unsterblichkeit ist ein seltenes Artefakt, dass Sie vor dem sicheren Tod bewahren kann.
|
|
||||||
The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=Der Totem funktioniert nur, während Sie ihn halten. Wenn Sie normalerweise tödlich hohen Schaden erhalten, werden Sie vor dem Tod bewahrt und Sie erhalten eine zweite Chance mit 1 TP. Der Totem wird dabei zerstört.
|
|
||||||
Agent=Akteur
|
Agent=Akteur
|
||||||
Bat=Fledermaus
|
Bat=Fledermaus
|
||||||
Blaze=Lohe
|
Blaze=Lohe
|
||||||
|
@ -52,13 +49,6 @@ Wolf=Wolf
|
||||||
Husk=Wüstenzombie
|
Husk=Wüstenzombie
|
||||||
Zombie=Zombie
|
Zombie=Zombie
|
||||||
Zombie Pigman=Schweinezombie
|
Zombie Pigman=Schweinezombie
|
||||||
Iron Horse Armor=Eisenpferderüstung
|
|
||||||
Iron horse armor can be worn by horses to increase their protection from harm a bit.=Eine Eisenpferderüstung kann von Pferden getragen werden, um ihren Schutz vor Schaden etwas zu erhöhen.
|
|
||||||
Golden Horse Armor=Goldpferderüstung
|
|
||||||
Golden horse armor can be worn by horses to increase their protection from harm.=Eine Goldpferderüstung kann von Pferden getragen werden, um ihren Schutz vor Schaden zu erhöhen.
|
|
||||||
Diamond Horse Armor=Diamantpferderüstung
|
|
||||||
Diamond horse armor can be worn by horses to greatly increase their protection from harm.=Eine Diamantpferderüstung kann von Pferden getragen werden, um ihren Schutz vor Schaden beträchtlich zu erhöhen.
|
|
||||||
Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=Platzieren Sie es auf einem Pferd, um die Pferderüstung aufzusetzen. Esel und Maultiere können keine Pferderüstung tragen.
|
|
||||||
Farmer=Bauer
|
Farmer=Bauer
|
||||||
Fisherman=Fischer
|
Fisherman=Fischer
|
||||||
Fletcher=Pfeilmacher
|
Fletcher=Pfeilmacher
|
||||||
|
@ -72,4 +62,3 @@ Weapon Smith=Waffenschmied
|
||||||
Tool Smith=Werkzeugschmied
|
Tool Smith=Werkzeugschmied
|
||||||
Cleric=Priester
|
Cleric=Priester
|
||||||
Nitwit=Dorftrottel
|
Nitwit=Dorftrottel
|
||||||
Protects you from death while wielding it=Schützt vor dem Tod, wenn es gehalten wird
|
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
# textdomain: mobs_mc
|
# textdomain: mobs_mc
|
||||||
Totem of Undying=Tótem de la inmortalidad
|
|
||||||
A totem of undying is a rare artifact which may safe you from certain death.=Un tótem de la inmortalidad es un artefacto raro que puede salvarte de una muerte segura.
|
|
||||||
The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=El tótem solo funciona mientras lo sostienes en tu mano. Si recibes un daño crítico, no mueres y obtienes una segunda oportunidad con 1 HP. Sin embargo, el tótem se destruye en el proceso.
|
|
||||||
Agent=Agente
|
Agent=Agente
|
||||||
Bat=Murciélago
|
Bat=Murciélago
|
||||||
Blaze=Blaze
|
Blaze=Blaze
|
||||||
|
@ -52,13 +49,6 @@ Wolf=Lobo
|
||||||
Husk=Husk
|
Husk=Husk
|
||||||
Zombie=Zombie
|
Zombie=Zombie
|
||||||
Zombie Pigman=Cerdo Zombie
|
Zombie Pigman=Cerdo Zombie
|
||||||
Iron Horse Armor=Armadura de hierro para caballo
|
|
||||||
Iron horse armor can be worn by horses to increase their protection from harm a bit.=Los caballos pueden usar armadura de caballo de hierro para aumentar un poco su protección contra el daño.
|
|
||||||
Golden Horse Armor=Armadura de oro para caballo
|
|
||||||
Golden horse armor can be worn by horses to increase their protection from harm.=Los caballos pueden usar armadura de caballo de oro para aumentar su protección contra el daño.
|
|
||||||
Diamond Horse Armor=Armadura de diamante para caballo
|
|
||||||
Diamond horse armor can be worn by horses to greatly increase their protection from harm.=Los caballos pueden usar armadura de caballo de diamante para aumentar en gran medida su protección contra el daño.
|
|
||||||
Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=Colóquelo en un caballo para ponerle la armadura de caballo. Los burros y las mulas no pueden usar armadura de caballo.
|
|
||||||
Farmer=Granjero
|
Farmer=Granjero
|
||||||
Fisherman=Pescador
|
Fisherman=Pescador
|
||||||
Fletcher=Flechador
|
Fletcher=Flechador
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
# textdomain: mobs_mc
|
# textdomain: mobs_mc
|
||||||
Totem of Undying=Totem d'immortalité
|
|
||||||
A totem of undying is a rare artifact which may safe you from certain death.=Un totem d'immortalité est un artefact rare qui peut vous protéger d'une mort certaine.
|
|
||||||
The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=Le totem ne fonctionne que lorsque vous le tenez dans votre main. Si vous recevez des dégâts mortels, vous êtes sauvé de la mort et vous obtenez une seconde chance avec 1 HP. Cependant, le totem est détruit.
|
|
||||||
Agent=Agent
|
Agent=Agent
|
||||||
Bat=Chauve-souris
|
Bat=Chauve-souris
|
||||||
Blaze=Blaze
|
Blaze=Blaze
|
||||||
|
@ -52,13 +49,6 @@ Wolf=Loup
|
||||||
Husk=Zombie Momifié
|
Husk=Zombie Momifié
|
||||||
Zombie=Zombie
|
Zombie=Zombie
|
||||||
Zombie Pigman=Zombie Cochon
|
Zombie Pigman=Zombie Cochon
|
||||||
Iron Horse Armor=Armure de cheval en fer
|
|
||||||
Iron horse armor can be worn by horses to increase their protection from harm a bit.=L'armure de cheval en fer peut être portée par les chevaux pour augmenter un peu leur protection contre les dommages.
|
|
||||||
Golden Horse Armor=Armure de cheval en or
|
|
||||||
Golden horse armor can be worn by horses to increase their protection from harm.=Une armure de cheval en or peut être portée par les chevaux pour augmenter leur protection contre les dommages.
|
|
||||||
Diamond Horse Armor=Armure de cheval en diamant
|
|
||||||
Diamond horse armor can be worn by horses to greatly increase their protection from harm.=Une armure de cheval en diament peut être portée par les chevaux pour augmenter fortement leur protection contre les dommages.
|
|
||||||
Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=Placez-la sur un cheval pour mettre l'armure de cheval. Les ânes et les mules ne peuvent pas porter d'armure de cheval.
|
|
||||||
Farmer=Fermier
|
Farmer=Fermier
|
||||||
Fisherman=Pêcheur
|
Fisherman=Pêcheur
|
||||||
Fletcher=Archer
|
Fletcher=Archer
|
||||||
|
@ -72,4 +62,3 @@ Weapon Smith=Fabriquant d'arme
|
||||||
Tool Smith=Fabriquant d'outil
|
Tool Smith=Fabriquant d'outil
|
||||||
Cleric=Clerc
|
Cleric=Clerc
|
||||||
Nitwit=Crétin
|
Nitwit=Crétin
|
||||||
Protects you from death while wielding it=Vous protège de la mort en la maniant
|
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
# textdomain: mobs_mc
|
# textdomain: mobs_mc
|
||||||
Totem of Undying=Тотем бессмертия
|
|
||||||
A totem of undying is a rare artifact which may safe you from certain death.=Тотем бессмертия это редкий артефакт, способный спасти вас от смерти.
|
|
||||||
The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=Тотем работает только когда вы держите его в руке. Если вы получаете смертельный урон, вы спасаетесь от смерти и получаете второй шанс с 1 HP. Однако тотем при этом уничтожается.
|
|
||||||
Agent=Агент
|
Agent=Агент
|
||||||
Bat=Летучая мышь
|
Bat=Летучая мышь
|
||||||
Blaze=Ифрит
|
Blaze=Ифрит
|
||||||
|
@ -52,13 +49,6 @@ Wolf=Волк
|
||||||
Husk=Кадавр
|
Husk=Кадавр
|
||||||
Zombie=Зомби
|
Zombie=Зомби
|
||||||
Zombie Pigman=Зомби-свиночеловек
|
Zombie Pigman=Зомби-свиночеловек
|
||||||
Iron Horse Armor=Железные доспехи лошади
|
|
||||||
Iron horse armor can be worn by horses to increase their protection from harm a bit.=Железные доспехи лошади, надетые на лошадь, немного защищают её от вреда.
|
|
||||||
Golden Horse Armor=Золотые доспехи лошади
|
|
||||||
Golden horse armor can be worn by horses to increase their protection from harm.=Золотые доспехи лошади, надетые на лошадь, защищают её от вреда.
|
|
||||||
Diamond Horse Armor=Алмазные доспехи лошади
|
|
||||||
Diamond horse armor can be worn by horses to greatly increase their protection from harm.=Алмазные доспехи лошади, надетые на лошадь, отлично защищают её от вреда.
|
|
||||||
Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=Поместите это на лошадь, чтобы одеть лошадь в доспехи. Ослики и мулы не могут носить лошадиные доспехи.
|
|
||||||
Farmer=Фермер
|
Farmer=Фермер
|
||||||
Fisherman=Рыбак
|
Fisherman=Рыбак
|
||||||
Fletcher=Лучник
|
Fletcher=Лучник
|
||||||
|
@ -72,4 +62,3 @@ Weapon Smith=Оружейник
|
||||||
Tool Smith=Инструментальщик
|
Tool Smith=Инструментальщик
|
||||||
Cleric=Церковник
|
Cleric=Церковник
|
||||||
Nitwit=Нищий
|
Nitwit=Нищий
|
||||||
Protects you from death while wielding it=Защищает вас от смерти, пока вы владеете им
|
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
# textdomain: mobs_mc
|
# textdomain: mobs_mc
|
||||||
Totem of Undying=
|
|
||||||
A totem of undying is a rare artifact which may safe you from certain death.=
|
|
||||||
The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=
|
|
||||||
Agent=
|
Agent=
|
||||||
Bat=
|
Bat=
|
||||||
Blaze=
|
Blaze=
|
||||||
|
@ -52,13 +49,6 @@ Wolf=
|
||||||
Husk=
|
Husk=
|
||||||
Zombie=
|
Zombie=
|
||||||
Zombie Pigman=
|
Zombie Pigman=
|
||||||
Iron Horse Armor=
|
|
||||||
Iron horse armor can be worn by horses to increase their protection from harm a bit.=
|
|
||||||
Golden Horse Armor=
|
|
||||||
Golden horse armor can be worn by horses to increase their protection from harm.=
|
|
||||||
Diamond Horse Armor=
|
|
||||||
Diamond horse armor can be worn by horses to greatly increase their protection from harm.=
|
|
||||||
Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=
|
|
||||||
Farmer=
|
Farmer=
|
||||||
Fisherman=
|
Fisherman=
|
||||||
Fletcher=
|
Fletcher=
|
||||||
|
@ -72,4 +62,3 @@ Weapon Smith=
|
||||||
Tool Smith=
|
Tool Smith=
|
||||||
Cleric=
|
Cleric=
|
||||||
Nitwit=
|
Nitwit=
|
||||||
Protects you from death while wielding it=
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
name = mobs_mc
|
name = mobs_mc
|
||||||
author = maikerumine
|
author = maikerumine
|
||||||
description = Adds Minecraft-like monsters and animals.
|
description = Adds Minecraft-like monsters and animals.
|
||||||
depends = mcl_init, mcl_particles, mcl_mobs, mcl_wip
|
depends = mcl_init, mcl_particles, mcl_mobs, mcl_wip, mcl_core
|
||||||
optional_depends = default, mcl_tnt, mcl_bows, mcl_throwing, mcl_fishing, bones, mesecons_materials, mobs_mc_gameconfig, doc_items
|
optional_depends = default, mcl_tnt, mcl_bows, mcl_throwing, mcl_fishing, bones, mesecons_materials, mobs_mc_gameconfig, doc_items
|
||||||
|
|
||||||
|
|
|
@ -13,16 +13,15 @@ local pr = PseudoRandom(os.time()*12)
|
||||||
|
|
||||||
local default_walk_chance = 70
|
local default_walk_chance = 70
|
||||||
|
|
||||||
-- Returns true if the item is food (taming) for the cat/ocelot
|
local follow = {
|
||||||
local is_food = function(itemstring)
|
"mcl_fishing:fish_raw",
|
||||||
for f=1, #mobs_mc.follow.ocelot do
|
"mcl_fishing:salmon_raw",
|
||||||
if itemstring == mobs_mc.follow.ocelot[f] then
|
"mcl_fishing:clownfish_raw",
|
||||||
return true
|
"mcl_fishing:pufferfish_raw",
|
||||||
elseif string.sub(itemstring, 1, 6) == "group:" and minetest.get_item_group(itemstring, string.sub(itemstring, 7, -1)) ~= 0 then
|
}
|
||||||
return true
|
|
||||||
end
|
local function is_food(itemstring)
|
||||||
end
|
return table.indexof(follow, itemstring) ~= -1
|
||||||
return false
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Ocelot
|
-- Ocelot
|
||||||
|
@ -65,7 +64,7 @@ local ocelot = {
|
||||||
run_start = 0,
|
run_start = 0,
|
||||||
run_end = 40,
|
run_end = 40,
|
||||||
},
|
},
|
||||||
follow = mobs_mc.follow.ocelot,
|
follow = follow,
|
||||||
view_range = 12,
|
view_range = 12,
|
||||||
passive = true,
|
passive = true,
|
||||||
attack_type = "dogfight",
|
attack_type = "dogfight",
|
||||||
|
@ -170,19 +169,19 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
15000,
|
15000,
|
||||||
5,
|
5,
|
||||||
mobs_mc.spawn_height.water+15,
|
mobs_mc.water_level+15,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
--[[
|
--[[
|
||||||
mobs:spawn({
|
mobs:spawn({
|
||||||
name = "mobs_mc:ocelot",
|
name = "mobs_mc:ocelot",
|
||||||
nodes = mobs_mc.spawn.jungle,
|
nodes = { "mcl_core:jungletree", "mcl_core:jungleleaves", "mcl_flowers:fern", "mcl_core:vine" },
|
||||||
neighbors = {"air"},
|
neighbors = {"air"},
|
||||||
light_max = minetest.LIGHT_MAX+1,
|
light_max = minetest.LIGHT_MAX+1,
|
||||||
light_min = 0,
|
light_min = 0,
|
||||||
chance = math.ceil(base_spawn_chance * 1.5), -- emulates 1/3 spawn failure rate
|
chance = math.ceil(base_spawn_chance * 1.5), -- emulates 1/3 spawn failure rate
|
||||||
active_object_count = 12,
|
active_object_count = 12,
|
||||||
min_height = mobs_mc.spawn_height.water+1, -- Right above ocean level
|
min_height = mobs_mc.water_level+1, -- Right above ocean level
|
||||||
max_height = mobs_mc.spawn_height.overworld_max,
|
max_height = mcl_vars.mg_overworld_max,
|
||||||
on_spawn = function(self, pos)
|
on_spawn = function(self, pos)
|
||||||
Note: Minecraft has a 1/3 spawn failure rate.
|
Note: Minecraft has a 1/3 spawn failure rate.
|
||||||
In this mod it is emulated by reducing the spawn rate accordingly (see above).
|
In this mod it is emulated by reducing the spawn rate accordingly (see above).
|
||||||
|
|
|
@ -35,13 +35,13 @@ mcl_mobs:register_mob("mobs_mc:parrot", {
|
||||||
distance = 16,
|
distance = 16,
|
||||||
},
|
},
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.feather,
|
{name = "mcl_mobitems:feather",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 2,
|
max = 2,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
},
|
},
|
||||||
animation = {
|
animation = {
|
||||||
stand_speed = 50,
|
stand_speed = 50,
|
||||||
walk_speed = 50,
|
walk_speed = 50,
|
||||||
fly_speed = 50,
|
fly_speed = 50,
|
||||||
|
@ -66,12 +66,17 @@ mcl_mobs:register_mob("mobs_mc:parrot", {
|
||||||
makes_footstep_sound = false,
|
makes_footstep_sound = false,
|
||||||
fear_height = 0,
|
fear_height = 0,
|
||||||
view_range = 16,
|
view_range = 16,
|
||||||
follow = mobs_mc.follow.parrot,
|
follow = {
|
||||||
|
"mcl_farming:wheat_seeds",
|
||||||
|
"mcl_farming:melon_seeds",
|
||||||
|
"mcl_farming:pumpkin_seeds",
|
||||||
|
"mcl_farming:beetroot_seeds",
|
||||||
|
},
|
||||||
on_rightclick = function(self, clicker)
|
on_rightclick = function(self, clicker)
|
||||||
if self._doomed then return end
|
if self._doomed then return end
|
||||||
local item = clicker:get_wielded_item()
|
local item = clicker:get_wielded_item()
|
||||||
-- Kill parrot if fed with cookie
|
-- Kill parrot if fed with cookie
|
||||||
if item:get_name() == mobs_mc.items.cookie then
|
if item:get_name() == "mcl_farming:cookie" then
|
||||||
minetest.sound_play("mobs_mc_animal_eat_generic", {object = self.object, max_hear_distance=16}, true)
|
minetest.sound_play("mobs_mc_animal_eat_generic", {object = self.object, max_hear_distance=16}, true)
|
||||||
self.health = 0
|
self.health = 0
|
||||||
-- Doomed to die
|
-- Doomed to die
|
||||||
|
@ -107,8 +112,8 @@ minetest.LIGHT_MAX+1,
|
||||||
7,
|
7,
|
||||||
30000,
|
30000,
|
||||||
1,
|
1,
|
||||||
mobs_mc.spawn_height.water+7,
|
mobs_mc.water_level+7,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:parrot", S("Parrot"), "mobs_mc_spawn_icon_parrot.png", 0)
|
mcl_mobs:register_egg("mobs_mc:parrot", S("Parrot"), "mobs_mc_spawn_icon_parrot.png", 0)
|
||||||
|
|
|
@ -25,7 +25,7 @@ mcl_mobs:register_mob("mobs_mc:pig", {
|
||||||
run_velocity = 3,
|
run_velocity = 3,
|
||||||
follow_velocity = 3.4,
|
follow_velocity = 3.4,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.porkchop_raw,
|
{name = "mcl_mobitems:porkchop",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 3,
|
max = 3,
|
||||||
|
@ -50,7 +50,12 @@ mcl_mobs:register_mob("mobs_mc:pig", {
|
||||||
run_start = 0,
|
run_start = 0,
|
||||||
run_end = 40,
|
run_end = 40,
|
||||||
},
|
},
|
||||||
follow = mobs_mc.follow.pig,
|
follow = {
|
||||||
|
"mcl_farming:potato_item",
|
||||||
|
"mcl_farming:carrot_item",
|
||||||
|
"mcl_farming:beetroot_item",
|
||||||
|
"mcl_mobitems:carrot_on_a_stick"
|
||||||
|
},
|
||||||
view_range = 8,
|
view_range = 8,
|
||||||
do_custom = function(self, dtime)
|
do_custom = function(self, dtime)
|
||||||
|
|
||||||
|
@ -93,7 +98,7 @@ mcl_mobs:register_mob("mobs_mc:pig", {
|
||||||
|
|
||||||
local wielditem = clicker:get_wielded_item()
|
local wielditem = clicker:get_wielded_item()
|
||||||
-- Feed pig
|
-- Feed pig
|
||||||
if wielditem:get_name() ~= mobs_mc.items.carrot_on_a_stick then
|
if wielditem:get_name() ~= "mcl_mobitems:carrot_on_a_stick" then
|
||||||
if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end
|
if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end
|
||||||
end
|
end
|
||||||
if mcl_mobs:protect(self, clicker) then return end
|
if mcl_mobs:protect(self, clicker) then return end
|
||||||
|
@ -104,7 +109,7 @@ mcl_mobs:register_mob("mobs_mc:pig", {
|
||||||
|
|
||||||
-- Put saddle on pig
|
-- Put saddle on pig
|
||||||
local item = clicker:get_wielded_item()
|
local item = clicker:get_wielded_item()
|
||||||
if item:get_name() == mobs_mc.items.saddle and self.saddle ~= "yes" then
|
if item:get_name() == "mcl_mobitems:saddle" and self.saddle ~= "yes" then
|
||||||
self.base_texture = {
|
self.base_texture = {
|
||||||
"blank.png", -- baby
|
"blank.png", -- baby
|
||||||
"mobs_mc_pig.png", -- base
|
"mobs_mc_pig.png", -- base
|
||||||
|
@ -116,11 +121,11 @@ mcl_mobs:register_mob("mobs_mc:pig", {
|
||||||
self.saddle = "yes"
|
self.saddle = "yes"
|
||||||
self.tamed = true
|
self.tamed = true
|
||||||
self.drops = {
|
self.drops = {
|
||||||
{name = mobs_mc.items.porkchop_raw,
|
{name = "mcl_mobitems:porkchop",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 3,},
|
max = 3,},
|
||||||
{name = mobs_mc.items.saddle,
|
{name = "mcl_mobitems:saddle",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,},
|
max = 1,},
|
||||||
|
@ -142,7 +147,7 @@ mcl_mobs:register_mob("mobs_mc:pig", {
|
||||||
mcl_mobs.detach(clicker, {x=1, y=0, z=0})
|
mcl_mobs.detach(clicker, {x=1, y=0, z=0})
|
||||||
return
|
return
|
||||||
|
|
||||||
elseif not self.driver and self.saddle == "yes" and wielditem:get_name() == mobs_mc.items.carrot_on_a_stick then
|
elseif not self.driver and self.saddle == "yes" and wielditem:get_name() == "mcl_mobitems:carrot_on_a_stick" then
|
||||||
-- Ride pig if it has a saddle and player uses a carrot on a stick
|
-- Ride pig if it has a saddle and player uses a carrot on a stick
|
||||||
|
|
||||||
mcl_mobs.attach(self, clicker)
|
mcl_mobs.attach(self, clicker)
|
||||||
|
@ -157,7 +162,7 @@ mcl_mobs:register_mob("mobs_mc:pig", {
|
||||||
if def.sounds and def.sounds.breaks then
|
if def.sounds and def.sounds.breaks then
|
||||||
minetest.sound_play(def.sounds.breaks, {pos = clicker:get_pos(), max_hear_distance = 8, gain = 0.5}, true)
|
minetest.sound_play(def.sounds.breaks, {pos = clicker:get_pos(), max_hear_distance = 8, gain = 0.5}, true)
|
||||||
end
|
end
|
||||||
wielditem = {name = mobs_mc.items.fishing_rod, count = 1}
|
wielditem = {name = "mcl_fishing:fishing_rod", count = 1}
|
||||||
else
|
else
|
||||||
wielditem:add_wear(2521)
|
wielditem:add_wear(2521)
|
||||||
end
|
end
|
||||||
|
@ -230,8 +235,8 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
15000,
|
15000,
|
||||||
8,
|
8,
|
||||||
mobs_mc.spawn_height.overworld_min,
|
mcl_vars.mg_overworld_min,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:pig", S("Pig"), "mobs_mc_spawn_icon_pig.png", 0)
|
mcl_mobs:register_egg("mobs_mc:pig", S("Pig"), "mobs_mc_spawn_icon_pig.png", 0)
|
||||||
|
|
|
@ -34,13 +34,13 @@ mcl_mobs:register_mob("mobs_mc:polar_bear", {
|
||||||
attack_type = "dogfight",
|
attack_type = "dogfight",
|
||||||
drops = {
|
drops = {
|
||||||
-- 3/4 chance to drop raw fish (poor approximation)
|
-- 3/4 chance to drop raw fish (poor approximation)
|
||||||
{name = mobs_mc.items.fish_raw,
|
{name = "mcl_fishing:fish_raw",
|
||||||
chance = 2,
|
chance = 2,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,
|
max = 2,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
-- 1/4 to drop raw salmon
|
-- 1/4 to drop raw salmon
|
||||||
{name = mobs_mc.items.salmon_raw,
|
{name = "mcl_fishing:salmon_raw",
|
||||||
chance = 4,
|
chance = 4,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,
|
max = 2,
|
||||||
|
@ -83,8 +83,8 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
7000,
|
7000,
|
||||||
3,
|
3,
|
||||||
mobs_mc.spawn_height.overworld_min,
|
mcl_vars.mg_overworld_min,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- spawn egg
|
-- spawn egg
|
||||||
mcl_mobs:register_egg("mobs_mc:polar_bear", S("Polar Bear"), "mobs_mc_spawn_icon_polarbear.png", 0)
|
mcl_mobs:register_egg("mobs_mc:polar_bear", S("Polar Bear"), "mobs_mc_spawn_icon_polarbear.png", 0)
|
||||||
|
|
|
@ -42,9 +42,9 @@ local rabbit = {
|
||||||
runaway = true,
|
runaway = true,
|
||||||
jump = true,
|
jump = true,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.rabbit_raw, chance = 1, min = 0, max = 1, looting = "common",},
|
{name = "mcl_mobitems:rabbit", chance = 1, min = 0, max = 1, looting = "common",},
|
||||||
{name = mobs_mc.items.rabbit_hide, chance = 1, min = 0, max = 1, looting = "common",},
|
{name = "mcl_mobitems:rabbit_hide", chance = 1, min = 0, max = 1, looting = "common",},
|
||||||
{name = mobs_mc.items.rabbit_foot, chance = 10, min = 0, max = 1, looting = "rare", looting_factor = 0.03,},
|
{name = "mcl_mobitems:rabbit_foot", chance = 10, min = 0, max = 1, looting = "rare", looting_factor = 0.03,},
|
||||||
},
|
},
|
||||||
fear_height = 4,
|
fear_height = 4,
|
||||||
animation = {
|
animation = {
|
||||||
|
@ -54,11 +54,24 @@ local rabbit = {
|
||||||
run_start = 0, run_end = 20,
|
run_start = 0, run_end = 20,
|
||||||
},
|
},
|
||||||
-- Follow (yellow) dangelions, carrots and golden carrots
|
-- Follow (yellow) dangelions, carrots and golden carrots
|
||||||
follow = mobs_mc.follow.rabbit,
|
follow = {
|
||||||
|
"mcl_flowers:dandelion",
|
||||||
|
"mcl_farming:carrot_item",
|
||||||
|
"mcl_farming:carrot_item_gold",
|
||||||
|
},
|
||||||
view_range = 8,
|
view_range = 8,
|
||||||
-- Eat carrots and reduce their growth stage by 1
|
-- Eat carrots and reduce their growth stage by 1
|
||||||
replace_rate = 10,
|
replace_rate = 10,
|
||||||
replace_what = mobs_mc.replace.rabbit,
|
replace_what = {
|
||||||
|
{"mcl_farming:carrot", "mcl_farming:carrot_7", 0},
|
||||||
|
{"mcl_farming:carrot_7", "mcl_farming:carrot_6", 0},
|
||||||
|
{"mcl_farming:carrot_6", "mcl_farming:carrot_5", 0},
|
||||||
|
{"mcl_farming:carrot_5", "mcl_farming:carrot_4", 0},
|
||||||
|
{"mcl_farming:carrot_4", "mcl_farming:carrot_3", 0},
|
||||||
|
{"mcl_farming:carrot_3", "mcl_farming:carrot_2", 0},
|
||||||
|
{"mcl_farming:carrot_2", "mcl_farming:carrot_1", 0},
|
||||||
|
{"mcl_farming:carrot_1", "air", 0},
|
||||||
|
},
|
||||||
on_rightclick = function(self, clicker)
|
on_rightclick = function(self, clicker)
|
||||||
-- Feed, tame protect or capture
|
-- Feed, tame protect or capture
|
||||||
if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end
|
if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end
|
||||||
|
@ -137,8 +150,8 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
15000,
|
15000,
|
||||||
8,
|
8,
|
||||||
mobs_mc.spawn_height.overworld_min,
|
mcl_vars.mg_overworld_min,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
local spawn = {
|
local spawn = {
|
||||||
|
@ -148,12 +161,12 @@ local spawn = {
|
||||||
active_object_count = 10,
|
active_object_count = 10,
|
||||||
min_light = 0,
|
min_light = 0,
|
||||||
max_light = minetest.LIGHT_MAX+1,
|
max_light = minetest.LIGHT_MAX+1,
|
||||||
min_height = mobs_mc.spawn_height.overworld_min,
|
min_height = mcl_vars.mg_overworld_min,
|
||||||
max_height = mobs_mc.spawn_height.overworld_max,
|
max_height = mcl_vars.mg_overworld_max,
|
||||||
}
|
}
|
||||||
|
|
||||||
local spawn_desert = table.copy(spawn)
|
local spawn_desert = table.copy(spawn)
|
||||||
spawn_desert.nodes = mobs_mc.spawn.desert
|
spawn_desert.nodes = { "mcl_core:sand", "mcl_core:sandstone" }
|
||||||
spawn_desert.on_spawn = function(self, pos)
|
spawn_desert.on_spawn = function(self, pos)
|
||||||
local texture = "mobs_mc_rabbit_gold.png"
|
local texture = "mobs_mc_rabbit_gold.png"
|
||||||
self.base_texture = { "mobs_mc_rabbit_gold.png" }
|
self.base_texture = { "mobs_mc_rabbit_gold.png" }
|
||||||
|
@ -162,7 +175,7 @@ end
|
||||||
mcl_mobs:spawn(spawn_desert)
|
mcl_mobs:spawn(spawn_desert)
|
||||||
|
|
||||||
local spawn_snow = table.copy(spawn)
|
local spawn_snow = table.copy(spawn)
|
||||||
spawn_snow.nodes = mobs_mc.spawn.snow
|
spawn_snow.nodes = { "mcl_core:snow", "mcl_core:snowblock", "mcl_core:dirt_with_grass_snow" }
|
||||||
spawn_snow.on_spawn = function(self, pos)
|
spawn_snow.on_spawn = function(self, pos)
|
||||||
local texture
|
local texture
|
||||||
local r = math.random(1, 100)
|
local r = math.random(1, 100)
|
||||||
|
@ -179,7 +192,7 @@ end
|
||||||
mcl_mobs:spawn(spawn_snow)
|
mcl_mobs:spawn(spawn_snow)
|
||||||
|
|
||||||
local spawn_grass = table.copy(spawn)
|
local spawn_grass = table.copy(spawn)
|
||||||
spawn_grass.nodes = mobs_mc.spawn.grassland
|
spawn_grass.nodes = { "mcl_core:dirt_with_grass" }
|
||||||
spawn_grass.on_spawn = function(self, pos)
|
spawn_grass.on_spawn = function(self, pos)
|
||||||
local texture
|
local texture
|
||||||
local r = math.random(1, 100)
|
local r = math.random(1, 100)
|
||||||
|
|
|
@ -8,21 +8,22 @@ local S = minetest.get_translator("mobs_mc")
|
||||||
|
|
||||||
local colors = {
|
local colors = {
|
||||||
-- group = { wool, textures }
|
-- group = { wool, textures }
|
||||||
unicolor_white = { mobs_mc.items.wool_white, "#FFFFFF00" },
|
unicolor_white = { "mcl_wool:white", "#FFFFFF00" },
|
||||||
unicolor_dark_orange = { mobs_mc.items.wool_brown, "#502A00D0" },
|
unicolor_dark_orange = { "mcl_wool:brown", "#502A00D0" },
|
||||||
unicolor_grey = { mobs_mc.items.wool_light_grey, "#5B5B5BD0" },
|
unicolor_grey = { "mcl_wool:silver", "#5B5B5BD0" },
|
||||||
unicolor_darkgrey = { mobs_mc.items.wool_grey, "#303030D0" },
|
unicolor_darkgrey = { "mcl_wool:grey", "#303030D0" },
|
||||||
unicolor_blue = { mobs_mc.items.wool_blue, "#0000CCD0" },
|
unicolor_blue = { "mcl_wool:blue", "#0000CCD0" },
|
||||||
unicolor_dark_green = { mobs_mc.items.wool_green, "#005000D0" },
|
unicolor_dark_green = { "mcl_wool:green", "#005000D0" },
|
||||||
unicolor_green = { mobs_mc.items.wool_lime, "#50CC00D0" },
|
unicolor_green = { "mcl_wool:lime", "#50CC00D0" },
|
||||||
unicolor_violet = { mobs_mc.items.wool_purple , "#5000CCD0" },
|
unicolor_violet = { "mcl_wool:purple" , "#5000CCD0" },
|
||||||
unicolor_light_red = { mobs_mc.items.wool_pink, "#FF5050D0" },
|
unicolor_light_red = { "mcl_wool:pink", "#FF5050D0" },
|
||||||
unicolor_yellow = { mobs_mc.items.wool_yellow, "#CCCC00D0" },
|
unicolor_yellow = { "mcl_wool:yellow", "#CCCC00D0" },
|
||||||
unicolor_orange = { mobs_mc.items.wool_orange, "#CC5000D0" },
|
unicolor_orange = { "mcl_wool:orange", "#CC5000D0" },
|
||||||
unicolor_red = { mobs_mc.items.wool_red, "#CC0000D0" },
|
unicolor_red = { "mcl_wool:red", "#CC0000D0" },
|
||||||
unicolor_cyan = { mobs_mc.items.wool_cyan, "#00CCCCD0" },
|
unicolor_cyan = { "mcl_wool:cyan", "#00CCCCD0" },
|
||||||
unicolor_red_violet = { mobs_mc.items.wool_magenta, "#CC0050D0" },
|
unicolor_red_violet = { "mcl_wool:magenta", "#CC0050D0" },
|
||||||
unicolor_black = { mobs_mc.items.wool_black, "#000000D0" },
|
unicolor_black = { "mcl_wool:black", "#000000D0" },
|
||||||
|
unicolor_light_blue = { "mcl_wool:light_blue", "#5050FFD0" },
|
||||||
}
|
}
|
||||||
|
|
||||||
local rainbow_colors = {
|
local rainbow_colors = {
|
||||||
|
@ -38,10 +39,6 @@ local rainbow_colors = {
|
||||||
"unicolor_red_violet"
|
"unicolor_red_violet"
|
||||||
}
|
}
|
||||||
|
|
||||||
if minetest.get_modpath("mcl_wool") ~= nil then
|
|
||||||
colors["unicolor_light_blue"] = { mobs_mc.items.wool_light_blue, "#5050FFD0" }
|
|
||||||
end
|
|
||||||
|
|
||||||
local sheep_texture = function(color_group)
|
local sheep_texture = function(color_group)
|
||||||
if not color_group then
|
if not color_group then
|
||||||
color_group = "unicolor_white"
|
color_group = "unicolor_white"
|
||||||
|
@ -74,7 +71,7 @@ mcl_mobs:register_mob("mobs_mc:sheep", {
|
||||||
makes_footstep_sound = true,
|
makes_footstep_sound = true,
|
||||||
walk_velocity = 1,
|
walk_velocity = 1,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.mutton_raw,
|
{name = "mcl_mobitems:mutton",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 2,
|
max = 2,
|
||||||
|
@ -99,12 +96,15 @@ mcl_mobs:register_mob("mobs_mc:sheep", {
|
||||||
walk_start = 0, walk_end = 40,
|
walk_start = 0, walk_end = 40,
|
||||||
run_start = 0, run_end = 40,
|
run_start = 0, run_end = 40,
|
||||||
},
|
},
|
||||||
follow = mobs_mc.follow.sheep,
|
follow = { "mcl_farming:wheat_item" },
|
||||||
view_range = 12,
|
view_range = 12,
|
||||||
|
|
||||||
-- Eat grass
|
-- Eat grass
|
||||||
replace_rate = 20,
|
replace_rate = 20,
|
||||||
replace_what = mobs_mc.replace.sheep,
|
replace_what = {
|
||||||
|
{ "mcl_core:dirt_with_grass", "mcl_core:dirt", -1 },
|
||||||
|
{ "mcl_flowers:tallgrass", "air", 0 },
|
||||||
|
},
|
||||||
-- Properly regrow wool after eating grass
|
-- Properly regrow wool after eating grass
|
||||||
on_replace = function(self, pos, oldnode, newnode)
|
on_replace = function(self, pos, oldnode, newnode)
|
||||||
if not self.color or not colors[self.color] then
|
if not self.color or not colors[self.color] then
|
||||||
|
@ -114,7 +114,7 @@ mcl_mobs:register_mob("mobs_mc:sheep", {
|
||||||
self.base_texture = sheep_texture(self.color)
|
self.base_texture = sheep_texture(self.color)
|
||||||
self.object:set_properties({ textures = self.base_texture })
|
self.object:set_properties({ textures = self.base_texture })
|
||||||
self.drops = {
|
self.drops = {
|
||||||
{name = mobs_mc.items.mutton_raw,
|
{name = "mcl_mobitems:mutton",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 2,},
|
max = 2,},
|
||||||
|
@ -152,7 +152,7 @@ mcl_mobs:register_mob("mobs_mc:sheep", {
|
||||||
self.base_texture = sheep_texture(self.color)
|
self.base_texture = sheep_texture(self.color)
|
||||||
self.object:set_properties({ textures = self.base_texture })
|
self.object:set_properties({ textures = self.base_texture })
|
||||||
self.drops = {
|
self.drops = {
|
||||||
{name = mobs_mc.items.mutton_raw,
|
{name = "mcl_mobitems:mutton",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 2,},
|
max = 2,},
|
||||||
|
@ -198,7 +198,7 @@ mcl_mobs:register_mob("mobs_mc:sheep", {
|
||||||
if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end
|
if mcl_mobs:feed_tame(self, clicker, 1, true, true) then return end
|
||||||
if mcl_mobs:protect(self, clicker) then return end
|
if mcl_mobs:protect(self, clicker) then return end
|
||||||
|
|
||||||
if item:get_name() == mobs_mc.items.shears and not self.gotten and not self.child then
|
if item:get_name() == "mcl_tools:shears" and not self.gotten and not self.child then
|
||||||
self.gotten = true
|
self.gotten = true
|
||||||
local pos = self.object:get_pos()
|
local pos = self.object:get_pos()
|
||||||
minetest.sound_play("mcl_tools_shears_cut", {pos = pos}, true)
|
minetest.sound_play("mcl_tools_shears_cut", {pos = pos}, true)
|
||||||
|
@ -212,11 +212,11 @@ mcl_mobs:register_mob("mobs_mc:sheep", {
|
||||||
textures = self.base_texture,
|
textures = self.base_texture,
|
||||||
})
|
})
|
||||||
if not minetest.is_creative_enabled(clicker:get_player_name()) then
|
if not minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||||
item:add_wear(mobs_mc.misc.shears_wear)
|
item:add_wear(mobs_mc.shears_wear)
|
||||||
clicker:get_inventory():set_stack("main", clicker:get_wield_index(), item)
|
clicker:get_inventory():set_stack("main", clicker:get_wield_index(), item)
|
||||||
end
|
end
|
||||||
self.drops = {
|
self.drops = {
|
||||||
{name = mobs_mc.items.mutton_raw,
|
{name = "mcl_mobitems:mutton",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 2,},
|
max = 2,},
|
||||||
|
@ -238,7 +238,7 @@ mcl_mobs:register_mob("mobs_mc:sheep", {
|
||||||
})
|
})
|
||||||
self.color = group
|
self.color = group
|
||||||
self.drops = {
|
self.drops = {
|
||||||
{name = mobs_mc.items.mutton_raw,
|
{name = "mcl_mobitems:mutton",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 2,},
|
max = 2,},
|
||||||
|
@ -351,8 +351,8 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
15000,
|
15000,
|
||||||
3,
|
3,
|
||||||
mobs_mc.spawn_height.overworld_min,
|
mcl_vars.mg_overworld_min,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:sheep", S("Sheep"), "mobs_mc_spawn_icon_sheep.png", 0)
|
mcl_mobs:register_egg("mobs_mc:sheep", S("Sheep"), "mobs_mc_spawn_icon_sheep.png", 0)
|
||||||
|
|
|
@ -35,7 +35,7 @@ mcl_mobs:register_mob("mobs_mc:shulker", {
|
||||||
walk_chance = 0,
|
walk_chance = 0,
|
||||||
jump = false,
|
jump = false,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.shulker_shell,
|
{name = "mcl_mobitems:shulker_shell",
|
||||||
chance = 2,
|
chance = 2,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
|
@ -94,5 +94,5 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
5000,
|
5000,
|
||||||
2,
|
2,
|
||||||
mobs_mc.spawn_height.end_min,
|
mcl_vars.mg_end_min,
|
||||||
mobs_mc.spawn_height.end_max)
|
mcl_vars.mg_end_max)
|
||||||
|
|
|
@ -35,7 +35,14 @@ mcl_mobs:register_mob("mobs_mc:silverfish", {
|
||||||
run_velocity = 2,
|
run_velocity = 2,
|
||||||
jump = true,
|
jump = true,
|
||||||
fear_height = 4,
|
fear_height = 4,
|
||||||
replace_what = mobs_mc.replace.silverfish,
|
replace_what = {
|
||||||
|
{"mcl_core:stone", "mcl_monster_eggs:monster_egg_stone", -1},
|
||||||
|
{"mcl_core:cobble", "mcl_monster_eggs:monster_egg_cobble", -1},
|
||||||
|
{"mcl_core:stonebrick", "mcl_monster_eggs:monster_egg_stonebrick", -1},
|
||||||
|
{"mcl_core:stonebrickmossy", "mcl_monster_eggs:monster_egg_stonebrickmossy", -1},
|
||||||
|
{"mcl_core:stonebrickcracked", "mcl_monster_eggs:monster_egg_stonebrickcracked", -1},
|
||||||
|
{"mcl_core:stonebrickcarved", "mcl_monster_eggs:monster_egg_stonebrickcarved", -1},
|
||||||
|
},
|
||||||
replace_rate = 2,
|
replace_rate = 2,
|
||||||
animation = {
|
animation = {
|
||||||
speed_normal = 25, speed_run = 50,
|
speed_normal = 25, speed_run = 50,
|
||||||
|
|
|
@ -45,17 +45,17 @@ local skeleton = {
|
||||||
damage = 2,
|
damage = 2,
|
||||||
reach = 2,
|
reach = 2,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.arrow,
|
{name = "mcl_bows:arrow",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,
|
max = 2,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
{name = mobs_mc.items.bow,
|
{name = "mcl_bows:bow",
|
||||||
chance = 100 / 8.5,
|
chance = 100 / 8.5,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "rare",},
|
looting = "rare",},
|
||||||
{name = mobs_mc.items.bone,
|
{name = "mcl_mobitems:bone",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,
|
max = 2,
|
||||||
|
@ -63,7 +63,7 @@ local skeleton = {
|
||||||
|
|
||||||
-- Head
|
-- Head
|
||||||
-- TODO: Only drop if killed by charged creeper
|
-- TODO: Only drop if killed by charged creeper
|
||||||
{name = mobs_mc.items.head_skeleton,
|
{name = "mcl_heads:skeleton",
|
||||||
chance = 200, -- 0.5% chance
|
chance = 200, -- 0.5% chance
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,},
|
max = 1,},
|
||||||
|
@ -292,8 +292,8 @@ mcl_mobs:spawn_specific(
|
||||||
20,
|
20,
|
||||||
17000,
|
17000,
|
||||||
2,
|
2,
|
||||||
mobs_mc.spawn_height.overworld_min,
|
mcl_vars.mg_overworld_min,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
|
|
||||||
-- Nether spawn
|
-- Nether spawn
|
||||||
|
@ -309,8 +309,8 @@ mcl_mobs:spawn_specific(
|
||||||
30,
|
30,
|
||||||
10000,
|
10000,
|
||||||
3,
|
3,
|
||||||
mobs_mc.spawn_height.nether_min,
|
mcl_vars.mg_nether_min,
|
||||||
mobs_mc.spawn_height.nether_max)
|
mcl_vars.mg_nether_max)
|
||||||
|
|
||||||
-- Stray spawn
|
-- Stray spawn
|
||||||
-- TODO: Spawn directly under the sky
|
-- TODO: Spawn directly under the sky
|
||||||
|
@ -329,8 +329,8 @@ mcl_mobs:spawn_specific(
|
||||||
20,
|
20,
|
||||||
19000,
|
19000,
|
||||||
2,
|
2,
|
||||||
mobs_mc.spawn_height.water,
|
mobs_mc.water_level,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
|
|
|
@ -44,19 +44,19 @@ mcl_mobs:register_mob("mobs_mc:witherskeleton", {
|
||||||
damage = 7,
|
damage = 7,
|
||||||
reach = 2,
|
reach = 2,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.coal,
|
{name = "mcl_core:coal_lump",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
{name = mobs_mc.items.bone,
|
{name = "mcl_mobitems:bone",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,
|
max = 2,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
|
|
||||||
-- Head
|
-- Head
|
||||||
{name = mobs_mc.items.head_wither_skeleton,
|
{name = "mcl_heads:wither_skeleton",
|
||||||
chance = 40, -- 2.5% chance
|
chance = 40, -- 2.5% chance
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
|
@ -108,8 +108,8 @@ mcl_mobs:spawn_specific(
|
||||||
30,
|
30,
|
||||||
5000,
|
5000,
|
||||||
5,
|
5,
|
||||||
mobs_mc.spawn_height.nether_min,
|
mcl_vars.mg_nether_min,
|
||||||
mobs_mc.spawn_height.nether_max)
|
mcl_vars.mg_nether_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:witherskeleton", S("Wither Skeleton"), "mobs_mc_spawn_icon_witherskeleton.png", 0)
|
mcl_mobs:register_egg("mobs_mc:witherskeleton", S("Wither Skeleton"), "mobs_mc_spawn_icon_witherskeleton.png", 0)
|
||||||
|
|
|
@ -140,7 +140,7 @@ slime_tiny.damage = 0
|
||||||
slime_tiny.reach = 2.5
|
slime_tiny.reach = 2.5
|
||||||
slime_tiny.drops = {
|
slime_tiny.drops = {
|
||||||
-- slimeball
|
-- slimeball
|
||||||
{name = mobs_mc.items.slimeball,
|
{name = "mcl_mobitems:slimeball",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,},
|
max = 2,},
|
||||||
|
@ -153,8 +153,8 @@ slime_tiny.on_die = nil
|
||||||
|
|
||||||
mcl_mobs:register_mob("mobs_mc:slime_tiny", slime_tiny)
|
mcl_mobs:register_mob("mobs_mc:slime_tiny", slime_tiny)
|
||||||
|
|
||||||
local smin = mobs_mc.spawn_height.overworld_min
|
local smin = mcl_vars.mg_overworld_min
|
||||||
local smax = mobs_mc.spawn_height.water - 23
|
local smax = mobs_mc.water_level - 23
|
||||||
|
|
||||||
mcl_mobs:spawn_specific(
|
mcl_mobs:spawn_specific(
|
||||||
"mobs_mc:slime_tiny",
|
"mobs_mc:slime_tiny",
|
||||||
|
@ -315,7 +315,7 @@ local magma_cube_big = {
|
||||||
reach = 3,
|
reach = 3,
|
||||||
armor = 53,
|
armor = 53,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.magma_cream,
|
{name = "mcl_mobitems:magma_cream",
|
||||||
chance = 4,
|
chance = 4,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,},
|
max = 1,},
|
||||||
|
@ -394,8 +394,8 @@ magma_cube_tiny.on_die = nil
|
||||||
mcl_mobs:register_mob("mobs_mc:magma_cube_tiny", magma_cube_tiny)
|
mcl_mobs:register_mob("mobs_mc:magma_cube_tiny", magma_cube_tiny)
|
||||||
|
|
||||||
|
|
||||||
local mmin = mobs_mc.spawn_height.nether_min
|
local mmin = mcl_vars.mg_nether_min
|
||||||
local mmax = mobs_mc.spawn_height.nether_max
|
local mmax = mcl_vars.mg_nether_max
|
||||||
|
|
||||||
mcl_mobs:spawn_specific(
|
mcl_mobs:spawn_specific(
|
||||||
"mobs_mc:magma_cube_tiny",
|
"mobs_mc:magma_cube_tiny",
|
||||||
|
@ -443,9 +443,9 @@ minetest.LIGHT_MAX+1,
|
||||||
mmin,
|
mmin,
|
||||||
mmax)
|
mmax)
|
||||||
|
|
||||||
--mcl_mobs:spawn_specific("mobs_mc:magma_cube_tiny", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11000, 4, mmin, mmax)
|
--mcl_mobs:spawn_specific("mobs_mc:magma_cube_tiny", { "mcl_nether:nether_brick", "mcl_nether:netherrack" }, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11000, 4, mmin, mmax)
|
||||||
--mcl_mobs:spawn_specific("mobs_mc:magma_cube_small", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11100, 4, mmin, mmax)
|
--mcl_mobs:spawn_specific("mobs_mc:magma_cube_small", { "mcl_nether:nether_brick", "mcl_nether:netherrack" }, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11100, 4, mmin, mmax)
|
||||||
--mcl_mobs:spawn_specific("mobs_mc:magma_cube_big", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11200, 4, mmin, mmax)
|
--mcl_mobs:spawn_specific("mobs_mc:magma_cube_big", { "mcl_nether:nether_brick", "mcl_nether:netherrack" }, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11200, 4, mmin, mmax)
|
||||||
|
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
|
|
|
@ -52,7 +52,7 @@ mcl_mobs:register_mob("mobs_mc:snowman", {
|
||||||
"farming_pumpkin_top.png", --left
|
"farming_pumpkin_top.png", --left
|
||||||
},
|
},
|
||||||
gotten_texture = gotten_texture,
|
gotten_texture = gotten_texture,
|
||||||
drops = {{ name = mobs_mc.items.snowball, chance = 1, min = 0, max = 15 }},
|
drops = {{ name = "mcl_throwing:snowball", chance = 1, min = 0, max = 15 }},
|
||||||
visual_size = {x=3, y=3},
|
visual_size = {x=3, y=3},
|
||||||
walk_velocity = 0.6,
|
walk_velocity = 0.6,
|
||||||
run_velocity = 2,
|
run_velocity = 2,
|
||||||
|
@ -106,7 +106,7 @@ mcl_mobs:register_mob("mobs_mc:snowman", {
|
||||||
local belowdef = minetest.registered_nodes[minetest.get_node(below).name]
|
local belowdef = minetest.registered_nodes[minetest.get_node(below).name]
|
||||||
if belowdef and belowdef.walkable and (belowdef.node_box == nil or belowdef.node_box.type == "regular") then
|
if belowdef and belowdef.walkable and (belowdef.node_box == nil or belowdef.node_box.type == "regular") then
|
||||||
-- Place top snow
|
-- Place top snow
|
||||||
minetest.set_node(pos, {name = mobs_mc.items.top_snow})
|
minetest.set_node(pos, {name = "mcl_core:snow"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -114,7 +114,7 @@ mcl_mobs:register_mob("mobs_mc:snowman", {
|
||||||
-- Remove pumpkin if using shears
|
-- Remove pumpkin if using shears
|
||||||
on_rightclick = function(self, clicker)
|
on_rightclick = function(self, clicker)
|
||||||
local item = clicker:get_wielded_item()
|
local item = clicker:get_wielded_item()
|
||||||
if self.gotten ~= true and item:get_name() == mobs_mc.items.shears then
|
if self.gotten ~= true and item:get_name() == "mcl_tools:shears" then
|
||||||
-- Remove pumpkin
|
-- Remove pumpkin
|
||||||
self.gotten = true
|
self.gotten = true
|
||||||
self.object:set_properties({
|
self.object:set_properties({
|
||||||
|
@ -130,7 +130,7 @@ mcl_mobs:register_mob("mobs_mc:snowman", {
|
||||||
|
|
||||||
-- Wear out
|
-- Wear out
|
||||||
if not minetest.is_creative_enabled(clicker:get_player_name()) then
|
if not minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||||
item:add_wear(mobs_mc.misc.shears_wear)
|
item:add_wear(mobs_mc.shears_wear)
|
||||||
clicker:get_inventory():set_stack("main", clicker:get_wield_index(), item)
|
clicker:get_inventory():set_stack("main", clicker:get_wield_index(), item)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -160,7 +160,7 @@ end
|
||||||
-- This is to be called when a pumpkin or jack'o lantern has been placed. Recommended: In the on_construct function
|
-- This is to be called when a pumpkin or jack'o lantern has been placed. Recommended: In the on_construct function
|
||||||
-- of the node.
|
-- of the node.
|
||||||
-- This summons a snow golen when pos is next to a row of two snow blocks.
|
-- This summons a snow golen when pos is next to a row of two snow blocks.
|
||||||
mobs_mc.tools.check_snow_golem_summon = function(pos)
|
function mobs_mc.check_snow_golem_summon(pos)
|
||||||
local checks = {
|
local checks = {
|
||||||
-- These are the possible placement patterns
|
-- These are the possible placement patterns
|
||||||
-- { snow block pos. 1, snow block pos. 2, snow golem spawn position }
|
-- { snow block pos. 1, snow block pos. 2, snow golem spawn position }
|
||||||
|
@ -178,7 +178,7 @@ mobs_mc.tools.check_snow_golem_summon = function(pos)
|
||||||
local place = checks[c][3]
|
local place = checks[c][3]
|
||||||
local b1n = minetest.get_node(b1)
|
local b1n = minetest.get_node(b1)
|
||||||
local b2n = minetest.get_node(b2)
|
local b2n = minetest.get_node(b2)
|
||||||
if b1n.name == mobs_mc.items.snow_block and b2n.name == mobs_mc.items.snow_block then
|
if b1n.name == "mcl_core:snowblock" and b2n.name == "mcl_core:snowblock" then
|
||||||
-- Remove the pumpkin and both snow blocks and summon the snow golem
|
-- Remove the pumpkin and both snow blocks and summon the snow golem
|
||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
minetest.remove_node(b1)
|
minetest.remove_node(b1)
|
||||||
|
|
|
@ -50,8 +50,8 @@ local spider = {
|
||||||
view_range = 16,
|
view_range = 16,
|
||||||
floats = 1,
|
floats = 1,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.string, chance = 1, min = 0, max = 2, looting = "common"},
|
{name = "mcl_mobitems:string", chance = 1, min = 0, max = 2, looting = "common"},
|
||||||
{name = mobs_mc.items.spider_eye, chance = 3, min = 1, max = 1, looting = "common", looting_chance_function = function(lvl)
|
{name = "mcl_mobitems:spider_eye", chance = 3, min = 1, max = 1, looting = "common", looting_chance_function = function(lvl)
|
||||||
return 1 - 2 / (lvl + 3)
|
return 1 - 2 / (lvl + 3)
|
||||||
end},
|
end},
|
||||||
},
|
},
|
||||||
|
@ -239,8 +239,8 @@ mcl_mobs:spawn_specific(
|
||||||
30,
|
30,
|
||||||
17000,
|
17000,
|
||||||
2,
|
2,
|
||||||
mobs_mc.spawn_height.overworld_min,
|
mcl_vars.mg_overworld_min,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:spider", S("Spider"), "mobs_mc_spawn_icon_spider.png", 0)
|
mcl_mobs:register_egg("mobs_mc:spider", S("Spider"), "mobs_mc_spawn_icon_spider.png", 0)
|
||||||
|
|
|
@ -40,7 +40,7 @@ mcl_mobs:register_mob("mobs_mc:squid", {
|
||||||
run_end = 60,
|
run_end = 60,
|
||||||
},
|
},
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.black_dye,
|
{name = "mcl_dye:black",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 3,
|
max = 3,
|
||||||
|
@ -49,7 +49,7 @@ mcl_mobs:register_mob("mobs_mc:squid", {
|
||||||
visual_size = {x=3, y=3},
|
visual_size = {x=3, y=3},
|
||||||
makes_footstep_sound = false,
|
makes_footstep_sound = false,
|
||||||
fly = true,
|
fly = true,
|
||||||
fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source },
|
fly_in = { "mcl_core:water_source", "mclx_core:river_water_source" },
|
||||||
breathes_in_water = true,
|
breathes_in_water = true,
|
||||||
jump = false,
|
jump = false,
|
||||||
view_range = 16,
|
view_range = 16,
|
||||||
|
@ -61,7 +61,7 @@ mcl_mobs:register_mob("mobs_mc:squid", {
|
||||||
|
|
||||||
-- Spawn near the water surface
|
-- Spawn near the water surface
|
||||||
|
|
||||||
local water = mobs_mc.spawn_height.water
|
local water = mobs_mc.water_level
|
||||||
--name, nodes, neighbours, minlight, maxlight, interval, chance, active_object_count, min_height, max_height
|
--name, nodes, neighbours, minlight, maxlight, interval, chance, active_object_count, min_height, max_height
|
||||||
mcl_mobs:spawn_specific(
|
mcl_mobs:spawn_specific(
|
||||||
"mobs_mc:squid",
|
"mobs_mc:squid",
|
||||||
|
|
|
@ -1200,6 +1200,8 @@ end)
|
||||||
|
|
||||||
--[=======[ MOB REGISTRATION AND SPAWNING ]=======]
|
--[=======[ MOB REGISTRATION AND SPAWNING ]=======]
|
||||||
|
|
||||||
|
local pick_up = { "mcl_farming:bread", "mcl_farming:carrot_item", "mcl_farming:beetroot_item" , "mcl_farming:potato_item" }
|
||||||
|
|
||||||
mcl_mobs:register_mob("mobs_mc:villager", {
|
mcl_mobs:register_mob("mobs_mc:villager", {
|
||||||
description = S("Villager"),
|
description = S("Villager"),
|
||||||
type = "npc",
|
type = "npc",
|
||||||
|
@ -1239,7 +1241,7 @@ mcl_mobs:register_mob("mobs_mc:villager", {
|
||||||
die_end = 220,
|
die_end = 220,
|
||||||
die_loop = false,
|
die_loop = false,
|
||||||
},
|
},
|
||||||
follow = mobs_mc.follow.villager,
|
follow = pick_up,
|
||||||
nofollow = true,
|
nofollow = true,
|
||||||
view_range = 16,
|
view_range = 16,
|
||||||
fear_height = 4,
|
fear_height = 4,
|
||||||
|
@ -1249,7 +1251,7 @@ mcl_mobs:register_mob("mobs_mc:villager", {
|
||||||
_id = nil,
|
_id = nil,
|
||||||
_profession = "unemployed",
|
_profession = "unemployed",
|
||||||
look_at_player = true,
|
look_at_player = true,
|
||||||
pick_up = mobs_mc.follow.villager,
|
pick_up = pick_up,
|
||||||
can_open_doors = true,
|
can_open_doors = true,
|
||||||
on_pick_up = function(self,itementity)
|
on_pick_up = function(self,itementity)
|
||||||
local clicker
|
local clicker
|
||||||
|
@ -1402,8 +1404,8 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
20,
|
20,
|
||||||
4,
|
4,
|
||||||
mobs_mc.spawn_height.water+1,
|
mobs_mc.water_level+1,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:villager", S("Villager"), "mobs_mc_spawn_icon_villager.png", 0)
|
mcl_mobs:register_egg("mobs_mc:villager", S("Villager"), "mobs_mc_spawn_icon_villager.png", 0)
|
||||||
|
|
|
@ -53,12 +53,12 @@ mcl_mobs:register_mob("mobs_mc:evoker", {
|
||||||
shoot_interval = 15,
|
shoot_interval = 15,
|
||||||
passive = false,
|
passive = false,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.emerald,
|
{name = "mcl_core:emerald",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
{name = mobs_mc.items.totem,
|
{name = "mcl_totems:totem",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,},
|
max = 1,},
|
||||||
|
|
|
@ -39,12 +39,12 @@ mcl_mobs:register_mob("mobs_mc:vindicator", {
|
||||||
run_velocity = 2.4,
|
run_velocity = 2.4,
|
||||||
attack_type = "dogfight",
|
attack_type = "dogfight",
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.emerald,
|
{name = "mcl_core:emerald",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
{name = mobs_mc.items.iron_axe,
|
{name = "mcl_tools:axe_iron",
|
||||||
chance = 100 / 8.5,
|
chance = 100 / 8.5,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
|
|
|
@ -55,24 +55,24 @@ mcl_mobs:register_mob("mobs_mc:villager_zombie", {
|
||||||
attack_type = "dogfight",
|
attack_type = "dogfight",
|
||||||
group_attack = true,
|
group_attack = true,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.rotten_flesh,
|
{name = "mcl_mobitems:rotten_flesh",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,
|
max = 2,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
{name = mobs_mc.items.iron_ingot,
|
{name = "mcl_core:iron_ingot",
|
||||||
chance = 120, -- 2.5% / 3
|
chance = 120, -- 2.5% / 3
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "rare",
|
looting = "rare",
|
||||||
looting_factor = 0.01 / 3,},
|
looting_factor = 0.01 / 3,},
|
||||||
{name = mobs_mc.items.carrot,
|
{name = "mcl_farming:carrot_item",
|
||||||
chance = 120, -- 2.5% / 3
|
chance = 120, -- 2.5% / 3
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "rare",
|
looting = "rare",
|
||||||
looting_factor = 0.01 / 3,},
|
looting_factor = 0.01 / 3,},
|
||||||
{name = mobs_mc.items.potato,
|
{name = "mcl_farming:potato_item",
|
||||||
chance = 120, -- 2.5% / 3
|
chance = 120, -- 2.5% / 3
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
|
@ -237,9 +237,9 @@ mcl_mobs:spawn_specific(
|
||||||
30,
|
30,
|
||||||
4090,
|
4090,
|
||||||
4,
|
4,
|
||||||
mobs_mc.spawn_height.overworld_min,
|
mcl_vars.mg_overworld_min,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
--mcl_mobs:spawn_specific("mobs_mc:villager_zombie", "overworld", "ground", 0, 7, 30, 60000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
--mcl_mobs:spawn_specific("mobs_mc:villager_zombie", "overworld", "ground", 0, 7, 30, 60000, 4, mcl_vars.mg_overworld_min, mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:villager_zombie", S("Zombie Villager"), "mobs_mc_spawn_icon_zombie_villager.png", 0)
|
mcl_mobs:register_egg("mobs_mc:villager_zombie", S("Zombie Villager"), "mobs_mc_spawn_icon_zombie_villager.png", 0)
|
||||||
|
|
|
@ -42,13 +42,13 @@ mcl_mobs:register_mob("mobs_mc:witch", {
|
||||||
dogshoot_count_max =1.8,
|
dogshoot_count_max =1.8,
|
||||||
max_drops = 3,
|
max_drops = 3,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.glass_bottle, chance = 8, min = 0, max = 2, looting = "common",},
|
{name = "mcl_potions:glass_bottle", chance = 8, min = 0, max = 2, looting = "common",},
|
||||||
{name = mobs_mc.items.glowstone_dust, chance = 8, min = 0, max = 2, looting = "common",},
|
{name = "mcl_nether:glowstone_dust", chance = 8, min = 0, max = 2, looting = "common",},
|
||||||
{name = mobs_mc.items.gunpowder, chance = 8, min = 0, max = 2, looting = "common",},
|
{name = "mcl_mobitems:gunpowder", chance = 8, min = 0, max = 2, looting = "common",},
|
||||||
{name = mobs_mc.items.redstone, chance = 8, min = 0, max = 2, looting = "common",},
|
{name = "mesecons:redstone", chance = 8, min = 0, max = 2, looting = "common",},
|
||||||
{name = mobs_mc.items.spider_eye, chance = 8, min = 0, max = 2, looting = "common",},
|
{name = "mcl_mobitems:spider_eye", chance = 8, min = 0, max = 2, looting = "common",},
|
||||||
{name = mobs_mc.items.sugar, chance = 8, min = 0, max = 2, looting = "common",},
|
{name = "mcl_core:sugar", chance = 8, min = 0, max = 2, looting = "common",},
|
||||||
{name = mobs_mc.items.stick, chance = 4, min = 0, max = 2, looting = "common",},
|
{name = "mcl_core:stick", chance = 4, min = 0, max = 2, looting = "common",},
|
||||||
},
|
},
|
||||||
-- TODO: sounds
|
-- TODO: sounds
|
||||||
animation = {
|
animation = {
|
||||||
|
@ -101,7 +101,7 @@ mcl_mobs:register_arrow("mobs_mc:potion_arrow", {
|
||||||
})
|
})
|
||||||
|
|
||||||
-- TODO: Spawn when witch works properly <- eventually -j4i
|
-- TODO: Spawn when witch works properly <- eventually -j4i
|
||||||
--mcl_mobs:spawn_specific("mobs_mc:witch", mobs_mc.spawn.jungle, {"air"}, 0, minetest.LIGHT_MAX-6, 12, 20000, 2, mobs_mc.spawn_height.water-6, mobs_mc.spawn_height.overworld_max)
|
--mcl_mobs:spawn_specific("mobs_mc:witch", { "mcl_core:jungletree", "mcl_core:jungleleaves", "mcl_flowers:fern", "mcl_core:vine" }, {"air"}, 0, minetest.LIGHT_MAX-6, 12, 20000, 2, mobs_mc.water_level-6, mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:witch", S("Witch"), "mobs_mc_spawn_icon_witch.png", 0, true)
|
mcl_mobs:register_egg("mobs_mc:witch", S("Witch"), "mobs_mc_spawn_icon_witch.png", 0, true)
|
||||||
|
|
|
@ -46,7 +46,7 @@ mcl_mobs:register_mob("mobs_mc:wither", {
|
||||||
attack_animals = true,
|
attack_animals = true,
|
||||||
can_despawn = false,
|
can_despawn = false,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.nether_star,
|
{name = "mcl_mobitems:nether_star",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1},
|
max = 1},
|
||||||
|
|
|
@ -6,17 +6,6 @@ local default_walk_chance = 50
|
||||||
|
|
||||||
local pr = PseudoRandom(os.time()*10)
|
local pr = PseudoRandom(os.time()*10)
|
||||||
|
|
||||||
local is_food = function(itemstring)
|
|
||||||
for f=1, #mobs_mc.follow.dog do
|
|
||||||
if itemstring == mobs_mc.follow.dog[f] then
|
|
||||||
return true
|
|
||||||
elseif string.sub(itemstring, 1, 6) == "group:" and minetest.get_item_group(itemstring, string.sub(itemstring, 7, -1)) ~= 0 then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Wolf
|
-- Wolf
|
||||||
local wolf = {
|
local wolf = {
|
||||||
description = S("Wolf"),
|
description = S("Wolf"),
|
||||||
|
@ -55,13 +44,13 @@ local wolf = {
|
||||||
reach = 2,
|
reach = 2,
|
||||||
attack_type = "dogfight",
|
attack_type = "dogfight",
|
||||||
fear_height = 4,
|
fear_height = 4,
|
||||||
follow = mobs_mc.follow.wolf,
|
follow = { "mcl_mobitems:bone" },
|
||||||
on_rightclick = function(self, clicker)
|
on_rightclick = function(self, clicker)
|
||||||
-- Try to tame wolf (intentionally does NOT use mcl_mobs:feed_tame)
|
-- Try to tame wolf (intentionally does NOT use mcl_mobs:feed_tame)
|
||||||
local tool = clicker:get_wielded_item()
|
local tool = clicker:get_wielded_item()
|
||||||
|
|
||||||
local dog, ent
|
local dog, ent
|
||||||
if tool:get_name() == mobs_mc.items.bone then
|
if tool:get_name() == "mcl_mobitems:bone" then
|
||||||
|
|
||||||
minetest.sound_play("mobs_mc_wolf_take_bone", {object=self.object, max_hear_distance=16}, true)
|
minetest.sound_play("mobs_mc_wolf_take_bone", {object=self.object, max_hear_distance=16}, true)
|
||||||
if not minetest.is_creative_enabled(clicker:get_player_name()) then
|
if not minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||||
|
@ -142,9 +131,21 @@ dog.owner_loyal = true
|
||||||
dog.follow_velocity = 3.2
|
dog.follow_velocity = 3.2
|
||||||
-- Automatically teleport dog to owner
|
-- Automatically teleport dog to owner
|
||||||
dog.do_custom = mobs_mc.make_owner_teleport_function(12)
|
dog.do_custom = mobs_mc.make_owner_teleport_function(12)
|
||||||
dog.follow = mobs_mc.follow.dog
|
dog.follow = {
|
||||||
|
"mcl_mobitems:rabbit", "mcl_mobitems:cooked_rabbit",
|
||||||
|
"mcl_mobitems:mutton", "mcl_mobitems:cooked_mutton",
|
||||||
|
"mcl_mobitems:beef", "mcl_mobitems:cooked_beef",
|
||||||
|
"mcl_mobitems:chicken", "mcl_mobitems:cooked_chicken",
|
||||||
|
"mcl_mobitems:porkchop", "mcl_mobitems:cooked_porkchop",
|
||||||
|
"mcl_mobitems:rotten_flesh",
|
||||||
|
}
|
||||||
dog.attack_animals = nil
|
dog.attack_animals = nil
|
||||||
dog.specific_attack = nil
|
dog.specific_attack = nil
|
||||||
|
|
||||||
|
local is_food = function(itemstring)
|
||||||
|
return table.indexof(dog.follow, itemstring) ~= -1
|
||||||
|
end
|
||||||
|
|
||||||
dog.on_rightclick = function(self, clicker)
|
dog.on_rightclick = function(self, clicker)
|
||||||
local item = clicker:get_wielded_item()
|
local item = clicker:get_wielded_item()
|
||||||
|
|
||||||
|
@ -160,7 +161,7 @@ dog.on_rightclick = function(self, clicker)
|
||||||
local eatable = minetest.get_item_group(item, "eatable")
|
local eatable = minetest.get_item_group(item, "eatable")
|
||||||
if eatable > 0 then
|
if eatable > 0 then
|
||||||
hp_add = eatable
|
hp_add = eatable
|
||||||
elseif item:get_name() == mobs_mc.items.rotten_flesh then
|
elseif item:get_name() == "mcl_mobitems:rotten_flesh" then
|
||||||
hp_add = 4
|
hp_add = 4
|
||||||
else
|
else
|
||||||
hp_add = 4
|
hp_add = 4
|
||||||
|
@ -260,7 +261,7 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
9000,
|
9000,
|
||||||
7,
|
7,
|
||||||
mobs_mc.spawn_height.water+3,
|
mobs_mc.water_level+3,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
mcl_mobs:register_egg("mobs_mc:wolf", S("Wolf"), "mobs_mc_spawn_icon_wolf.png", 0)
|
mcl_mobs:register_egg("mobs_mc:wolf", S("Wolf"), "mobs_mc_spawn_icon_wolf.png", 0)
|
||||||
|
|
|
@ -10,24 +10,24 @@ local S = minetest.get_translator("mobs_mc")
|
||||||
--###################
|
--###################
|
||||||
|
|
||||||
local drops_common = {
|
local drops_common = {
|
||||||
{name = mobs_mc.items.rotten_flesh,
|
{name = "mcl_mobitems:rotten_flesh",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 2,
|
max = 2,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
{name = mobs_mc.items.iron_ingot,
|
{name = "mcl_core:iron_ingot",
|
||||||
chance = 120, -- 2.5% / 3
|
chance = 120, -- 2.5% / 3
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "rare",
|
looting = "rare",
|
||||||
looting_factor = 0.01 / 3,},
|
looting_factor = 0.01 / 3,},
|
||||||
{name = mobs_mc.items.carrot,
|
{name = "mcl_farming:carrot_item",
|
||||||
chance = 120, -- 2.5% / 3
|
chance = 120, -- 2.5% / 3
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "rare",
|
looting = "rare",
|
||||||
looting_factor = 0.01 / 3,},
|
looting_factor = 0.01 / 3,},
|
||||||
{name = mobs_mc.items.potato,
|
{name = "mcl_farming:potato_item",
|
||||||
chance = 120, -- 2.5% / 3
|
chance = 120, -- 2.5% / 3
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
|
@ -39,7 +39,7 @@ local drops_zombie = table.copy(drops_common)
|
||||||
table.insert(drops_zombie, {
|
table.insert(drops_zombie, {
|
||||||
-- Zombie Head
|
-- Zombie Head
|
||||||
-- TODO: Only drop if killed by charged creeper
|
-- TODO: Only drop if killed by charged creeper
|
||||||
name = mobs_mc.items.head_zombie,
|
name = "mcl_heads:zombie",
|
||||||
chance = 200, -- 0.5%
|
chance = 200, -- 0.5%
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
|
@ -238,8 +238,8 @@ mcl_mobs:spawn_specific(
|
||||||
30,
|
30,
|
||||||
6000,
|
6000,
|
||||||
4,
|
4,
|
||||||
mobs_mc.spawn_height.overworld_min,
|
mcl_vars.mg_overworld_min,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
-- Baby zombie is 20 times less likely than regular zombies
|
-- Baby zombie is 20 times less likely than regular zombies
|
||||||
mcl_mobs:spawn_specific(
|
mcl_mobs:spawn_specific(
|
||||||
"mobs_mc:baby_zombie",
|
"mobs_mc:baby_zombie",
|
||||||
|
@ -330,8 +330,8 @@ mcl_mobs:spawn_specific(
|
||||||
30,
|
30,
|
||||||
60000,
|
60000,
|
||||||
4,
|
4,
|
||||||
mobs_mc.spawn_height.overworld_min,
|
mcl_vars.mg_overworld_min,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
|
|
||||||
mcl_mobs:spawn_specific(
|
mcl_mobs:spawn_specific(
|
||||||
|
@ -346,8 +346,8 @@ mcl_mobs:spawn_specific(
|
||||||
30,
|
30,
|
||||||
6500,
|
6500,
|
||||||
4,
|
4,
|
||||||
mobs_mc.spawn_height.overworld_min,
|
mcl_vars.mg_overworld_min,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
mcl_mobs:spawn_specific(
|
mcl_mobs:spawn_specific(
|
||||||
"mobs_mc:baby_husk",
|
"mobs_mc:baby_husk",
|
||||||
"overworld",
|
"overworld",
|
||||||
|
@ -360,8 +360,8 @@ mcl_mobs:spawn_specific(
|
||||||
30,
|
30,
|
||||||
65000,
|
65000,
|
||||||
4,
|
4,
|
||||||
mobs_mc.spawn_height.overworld_min,
|
mcl_vars.mg_overworld_min,
|
||||||
mobs_mc.spawn_height.overworld_max)
|
mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- Spawn eggs
|
-- Spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:husk", S("Husk"), "mobs_mc_spawn_icon_husk.png", 0)
|
mcl_mobs:register_egg("mobs_mc:husk", S("Husk"), "mobs_mc_spawn_icon_husk.png", 0)
|
||||||
|
|
|
@ -47,22 +47,22 @@ local pigman = {
|
||||||
run_velocity = 2.6,
|
run_velocity = 2.6,
|
||||||
pathfinding = 1,
|
pathfinding = 1,
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.rotten_flesh,
|
{name = "mcl_mobitems:rotten_flesh",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "common"},
|
looting = "common"},
|
||||||
{name = mobs_mc.items.gold_nugget,
|
{name = "mcl_core:gold_nugget",
|
||||||
chance = 1,
|
chance = 1,
|
||||||
min = 0,
|
min = 0,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "common"},
|
looting = "common"},
|
||||||
{name = mobs_mc.items.gold_ingot,
|
{name = "mcl_core:gold_ingot",
|
||||||
chance = 40, -- 2.5%
|
chance = 40, -- 2.5%
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "rare"},
|
looting = "rare"},
|
||||||
{name = mobs_mc.items.gold_sword,
|
{name = "mcl_tools:sword_gold",
|
||||||
chance = 100 / 8.5,
|
chance = 100 / 8.5,
|
||||||
min = 1,
|
min = 1,
|
||||||
max = 1,
|
max = 1,
|
||||||
|
@ -125,8 +125,8 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
6000,
|
6000,
|
||||||
3,
|
3,
|
||||||
mobs_mc.spawn_height.nether_min,
|
mcl_vars.mg_nether_min,
|
||||||
mobs_mc.spawn_height.nether_max)
|
mcl_vars.mg_nether_max)
|
||||||
-- Baby zombie is 20 times less likely than regular zombies
|
-- Baby zombie is 20 times less likely than regular zombies
|
||||||
mcl_mobs:spawn_specific(
|
mcl_mobs:spawn_specific(
|
||||||
"mobs_mc:baby_pigman",
|
"mobs_mc:baby_pigman",
|
||||||
|
@ -140,11 +140,11 @@ minetest.LIGHT_MAX+1,
|
||||||
30,
|
30,
|
||||||
100000,
|
100000,
|
||||||
4,
|
4,
|
||||||
mobs_mc.spawn_height.nether_min,
|
mcl_vars.mg_nether_min,
|
||||||
mobs_mc.spawn_height.nether_max)
|
mcl_vars.mg_nether_max)
|
||||||
|
|
||||||
-- Spawning in Nether portals in the Overworld
|
-- Spawning in Nether portals in the Overworld
|
||||||
--mobs:spawn_specific("mobs_mc:pigman", mobs_mc.spawn.nether_portal, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 500, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
--mobs:spawn_specific("mobs_mc:pigman", {"mcl_portals:portal"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 500, 4, mcl_vars.mg_overworld_min, mcl_vars.mg_overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mcl_mobs:register_egg("mobs_mc:pigman", S("Zombie Pigman"), "mobs_mc_spawn_icon_zombie_pigman.png", 0)
|
mcl_mobs:register_egg("mobs_mc:pigman", S("Zombie Pigman"), "mobs_mc_spawn_icon_zombie_pigman.png", 0)
|
||||||
|
|
|
@ -1,213 +0,0 @@
|
||||||
mobs_mc = {}
|
|
||||||
|
|
||||||
mobs_mc.override = {}
|
|
||||||
|
|
||||||
mobs_mc.override.items = {
|
|
||||||
blaze_rod = "mcl_mobitems:blaze_rod",
|
|
||||||
blaze_powder = "mcl_mobitems:blaze_powder",
|
|
||||||
chicken_raw = "mcl_mobitems:chicken",
|
|
||||||
chicken_cooked = "mcl_mobitems:cooked_chicken",
|
|
||||||
feather = "mcl_mobitems:feather",
|
|
||||||
beef_raw = "mcl_mobitems:beef",
|
|
||||||
beef_cooked = "mcl_mobitems:cooked_beef",
|
|
||||||
bowl = "mcl_core:bowl",
|
|
||||||
mushroom_stew = "mcl_mushrooms:mushroom_stew",
|
|
||||||
milk = "mcl_mobitems:milk_bucket",
|
|
||||||
dragon_egg = "mcl_end:dragon_egg",
|
|
||||||
egg = "mcl_throwing:egg",
|
|
||||||
ender_eye = "mcl_mobitems:ender_eye",
|
|
||||||
ghast_tear = "mcl_mobitems:ghast_tear",
|
|
||||||
saddle = "mcl_mobitems:saddle",
|
|
||||||
porkchop_raw = "mcl_mobitems:porkchop",
|
|
||||||
porkchop_cooked = "mcl_mobitems:cooked_porkchop",
|
|
||||||
carrot_on_a_stick = "mcl_mobitems:carrot_on_a_stick",
|
|
||||||
rabbit_raw = "mcl_mobitems:rabbit",
|
|
||||||
rabbit_cooked = "mcl_mobitems:cooked_rabbit",
|
|
||||||
rabbit_hide = "mcl_mobitems:rabbit_hide",
|
|
||||||
mutton_raw = "mcl_mobitems:mutton",
|
|
||||||
mutton_cooked = "mcl_mobitems:cooked_mutton",
|
|
||||||
shulker_shell = "mcl_mobitems:shulker_shell",
|
|
||||||
magma_cream = "mcl_mobitems:magma_cream",
|
|
||||||
spider_eye = "mcl_mobitems:spider_eye",
|
|
||||||
rotten_flesh = "mcl_mobitems:rotten_flesh",
|
|
||||||
snowball = "mcl_throwing:snowball",
|
|
||||||
top_snow = "mcl_core:snow",
|
|
||||||
snow_block = "mcl_core:snowblock",
|
|
||||||
arrow = "mcl_bows:arrow",
|
|
||||||
bow = "mcl_bows:bow",
|
|
||||||
head_zombie = "mcl_heads:zombie",
|
|
||||||
head_creeper = "mcl_heads:creeper",
|
|
||||||
head_skeleton = "mcl_heads:skeleton",
|
|
||||||
head_wither_skeleton = "mcl_heads:wither_skeleton",
|
|
||||||
|
|
||||||
leather = "mcl_mobitems:leather",
|
|
||||||
shears = "mcl_tools:shears",
|
|
||||||
|
|
||||||
mushroom_red = "mcl_mushrooms:mushroom_red",
|
|
||||||
mushroom_brown = "mcl_mushrooms:mushroom_brown",
|
|
||||||
bucket = "mcl_buckets:bucket_empty",
|
|
||||||
grass_block = "mcl_core:dirt_with_grass",
|
|
||||||
string = "mcl_mobitems:string",
|
|
||||||
stick = "mcl_core:stick",
|
|
||||||
flint = "mcl_core:flint",
|
|
||||||
iron_ingot = "mcl_core:iron_ingot",
|
|
||||||
iron_block = "mcl_core:ironblock",
|
|
||||||
fire = "mcl_fire:fire",
|
|
||||||
gunpowder = "mcl_mobitems:gunpowder",
|
|
||||||
flint_and_steel = "mcl_fire:flint_and_steel",
|
|
||||||
water_source = "mcl_core:water_source",
|
|
||||||
river_water_source = "mclx_core:river_water_source",
|
|
||||||
black_dye = "mcl_dye:black",
|
|
||||||
poppy = "mcl_flowers:poppy",
|
|
||||||
dandelion = "mcl_flowers:dandelion",
|
|
||||||
coal = "mcl_core:coal_lump",
|
|
||||||
emerald = "mcl_core:emerald",
|
|
||||||
iron_axe = "mcl_tools:axe_iron",
|
|
||||||
gold_sword = "mcl_tools:sword_gold",
|
|
||||||
gold_ingot = "mcl_core:gold_ingot",
|
|
||||||
gold_nugget = "mcl_core:gold_nugget",
|
|
||||||
glowstone_dust = "mcl_nether:glowstone_dust",
|
|
||||||
redstone = "mesecons:redstone",
|
|
||||||
glass_bottle = "mcl_potions:glass_bottle",
|
|
||||||
sugar = "mcl_core:sugar",
|
|
||||||
wheat = "mcl_farming:wheat_item",
|
|
||||||
cookie = "mcl_farming:cookie",
|
|
||||||
potato = "mcl_farming:potato_item",
|
|
||||||
hay_bale = "mcl_farming:hay_block",
|
|
||||||
prismarine_shard = "mcl_ocean:prismarine_shard",
|
|
||||||
prismarine_crystals = "mcl_ocean:prismarine_crystals",
|
|
||||||
apple = "mcl_core:apple",
|
|
||||||
golden_apple = "mcl_core:apple_gold",
|
|
||||||
rabbit_foot = "mcl_mobitems:rabbit_foot",
|
|
||||||
wet_sponge = "mcl_sponges:sponge_wet",
|
|
||||||
|
|
||||||
-- Other
|
|
||||||
nether_brick_block = "mcl_nether:nether_brick",
|
|
||||||
netherrack = "mcl_nether:netherrack",
|
|
||||||
nether_star = "mcl_mobitems:nether_star",
|
|
||||||
nether_portal = "mcl_portals:portal",
|
|
||||||
mycelium = "mcl_core:mycelium",
|
|
||||||
carrot = "mcl_farming:carrot_item",
|
|
||||||
golden_carrot = "mcl_farming:carrot_item_gold",
|
|
||||||
fishing_rod = "mcl_fishing:fishing_rod",
|
|
||||||
fish_raw = "mcl_fishing:fish_raw",
|
|
||||||
salmon_raw = "mcl_fishing:salmon_raw",
|
|
||||||
clownfish_raw = "mcl_fishing:clownfish_raw",
|
|
||||||
pufferfish_raw = "mcl_fishing:pufferfish_raw",
|
|
||||||
bone = "mcl_mobitems:bone",
|
|
||||||
slimeball = "mcl_mobitems:slimeball",
|
|
||||||
|
|
||||||
ender_pearl = "mcl_throwing:ender_pearl",
|
|
||||||
|
|
||||||
wool_white = "mcl_wool:white",
|
|
||||||
wool_light_grey = "mcl_wool:silver",
|
|
||||||
wool_grey = "mcl_wool:grey",
|
|
||||||
wool_blue = "mcl_wool:blue",
|
|
||||||
wool_lime = "mcl_wool:lime",
|
|
||||||
wool_green = "mcl_wool:green",
|
|
||||||
wool_purple = "mcl_wool:purple",
|
|
||||||
wool_pink = "mcl_wool:pink",
|
|
||||||
wool_yellow = "mcl_wool:yellow",
|
|
||||||
wool_orange = "mcl_wool:orange",
|
|
||||||
wool_brown = "mcl_wool:brown",
|
|
||||||
wool_red = "mcl_wool:red",
|
|
||||||
wool_cyan = "mcl_wool:cyan",
|
|
||||||
wool_magenta = "mcl_wool:magenta",
|
|
||||||
wool_black = "mcl_wool:black",
|
|
||||||
wool_light_blue = "mcl_wool:light_blue",
|
|
||||||
|
|
||||||
music_discs = {
|
|
||||||
"mcl_jukebox:record_1",
|
|
||||||
"mcl_jukebox:record_2",
|
|
||||||
"mcl_jukebox:record_3",
|
|
||||||
"mcl_jukebox:record_4",
|
|
||||||
"mcl_jukebox:record_5",
|
|
||||||
"mcl_jukebox:record_6",
|
|
||||||
"mcl_jukebox:record_7",
|
|
||||||
"mcl_jukebox:record_8",
|
|
||||||
"mcl_jukebox:record_9",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
--Horses, Llamas, and Wolves shouldn't follow, but leaving this alone until leads are implemented.
|
|
||||||
mobs_mc.override.follow = {
|
|
||||||
chicken = { "mcl_farming:wheat_seeds", "mcl_farming:melon_seeds", "mcl_farming:pumpkin_seeds", "mcl_farming:beetroot_seeds", },
|
|
||||||
parrot = { "mcl_farming:wheat_seeds", "mcl_farming:melon_seeds", "mcl_farming:pumpkin_seeds", "mcl_farming:beetroot_seeds", },
|
|
||||||
pig = { mobs_mc.override.items.potato, mobs_mc.override.items.carrot, "mcl_farming:beetroot_item", mobs_mc.override.items.carrot_on_a_stick},
|
|
||||||
ocelot = { mobs_mc.override.items.fish_raw, mobs_mc.override.items.salmon_raw, mobs_mc.override.items.clownfish_raw, mobs_mc.override.items.pufferfish_raw, },
|
|
||||||
sheep = { mobs_mc.override.items.wheat },
|
|
||||||
cow = { mobs_mc.override.items.wheat },
|
|
||||||
horse = { mobs_mc.override.items.apple, mobs_mc.override.items.sugar, mobs_mc.override.items.wheat, mobs_mc.override.items.hay_bale, mobs_mc.override.items.golden_apple, mobs_mc.override.items.golden_carrot },
|
|
||||||
llama = { mobs_mc.override.items.wheat, mobs_mc.override.items.hay_bale },
|
|
||||||
rabbit = { mobs_mc.override.items.dandelion, mobs_mc.override.items.carrot, mobs_mc.override.items.golden_carrot },
|
|
||||||
wolf = { mobs_mc.override.items.bone },
|
|
||||||
dog = { mobs_mc.override.items.rabbit_raw, mobs_mc.override.items.rabbit_cooked, mobs_mc.override.items.mutton_raw, mobs_mc.override.items.mutton_cooked, mobs_mc.override.items.beef_raw, mobs_mc.override.items.beef_cooked, mobs_mc.override.items.chicken_raw, mobs_mc.override.items.chicken_cooked, mobs_mc.override.items.rotten_flesh, mobs_mc.override.items.porkchop_raw, mobs_mc.override.items.porkchop_cooked },
|
|
||||||
}
|
|
||||||
|
|
||||||
mobs_mc.override.replace = {
|
|
||||||
-- Rabbits reduce carrot growth stage by 1
|
|
||||||
rabbit = {
|
|
||||||
{"mcl_farming:carrot", "mcl_farming:carrot_7", 0},
|
|
||||||
{"mcl_farming:carrot_7", "mcl_farming:carrot_6", 0},
|
|
||||||
{"mcl_farming:carrot_6", "mcl_farming:carrot_5", 0},
|
|
||||||
{"mcl_farming:carrot_5", "mcl_farming:carrot_4", 0},
|
|
||||||
{"mcl_farming:carrot_4", "mcl_farming:carrot_3", 0},
|
|
||||||
{"mcl_farming:carrot_3", "mcl_farming:carrot_2", 0},
|
|
||||||
{"mcl_farming:carrot_2", "mcl_farming:carrot_1", 0},
|
|
||||||
{"mcl_farming:carrot_1", "air", 0},
|
|
||||||
},
|
|
||||||
-- Sheep eat grass
|
|
||||||
sheep = {
|
|
||||||
{ "mcl_core:dirt_with_grass", "mcl_core:dirt", -1 },
|
|
||||||
{ "mcl_flowers:tallgrass", "air", 0 },
|
|
||||||
},
|
|
||||||
-- Silverfish populate stone, etc. with monster eggs
|
|
||||||
silverfish = {
|
|
||||||
{"mcl_core:stone", "mcl_monster_eggs:monster_egg_stone", -1},
|
|
||||||
{"mcl_core:cobble", "mcl_monster_eggs:monster_egg_cobble", -1},
|
|
||||||
{"mcl_core:stonebrick", "mcl_monster_eggs:monster_egg_stonebrick", -1},
|
|
||||||
{"mcl_core:stonebrickmossy", "mcl_monster_eggs:monster_egg_stonebrickmossy", -1},
|
|
||||||
{"mcl_core:stonebrickcracked", "mcl_monster_eggs:monster_egg_stonebrickcracked", -1},
|
|
||||||
{"mcl_core:stonebrickcarved", "mcl_monster_eggs:monster_egg_stonebrickcarved", -1},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
mobs_mc.override.misc = {
|
|
||||||
totem_fail_nodes = { "mcl_core:void", "mcl_core:realm_barrier" },
|
|
||||||
}
|
|
||||||
|
|
||||||
-- List of nodes on which mobs can spawn
|
|
||||||
mobs_mc.override.spawn = {
|
|
||||||
solid = { "group:solid", }, -- spawn on "solid" nodes
|
|
||||||
grassland = { "mcl_core:dirt_with_grass" },
|
|
||||||
savanna = { "mcl_core:dirt_with_grass" },
|
|
||||||
grassland_savanna = { "mcl_core:dirt_with_grass" },
|
|
||||||
desert = { "mcl_core:sand", "mcl_core:sandstone" },
|
|
||||||
jungle = { "mcl_core:jungletree", "mcl_core:jungleleaves", "mcl_flowers:fern", "mcl_core:vine" },
|
|
||||||
snow = { "mcl_core:snow", "mcl_core:snowblock", "mcl_core:dirt_with_grass_snow" },
|
|
||||||
-- End stone added for shulkers because End cities don't generate yet
|
|
||||||
end_city = { "mcl_end:end_stone", "mcl_end:purpur_block" },
|
|
||||||
-- Netherrack added because there are no Nether fortresses yet. TODO: Remove netherrac from list as soon they're available
|
|
||||||
nether_fortress = { "mcl_nether:nether_brick", "mcl_nether:netherrack" },
|
|
||||||
nether_portal = { mobs_mc.override.items.nether_portal },
|
|
||||||
wolf = { mobs_mc.override.items.grass_block, "mcl_core:dirt", "mcl_core:dirt_with_grass_snow", "mcl_core:snow", "mcl_core:snowblock", "mcl_core:podzol" },
|
|
||||||
village = { "mcl_villages:stonebrickcarved", "mcl_core:grass_path", "mcl_core:sandstonesmooth2" },
|
|
||||||
}
|
|
||||||
|
|
||||||
-- This table contains important spawn height references for the mob spawn height.
|
|
||||||
mobs_mc.override.spawn_height = {
|
|
||||||
water = tonumber(minetest.settings:get("water_level")) or 0, -- Water level in the Overworld
|
|
||||||
|
|
||||||
-- Overworld boundaries (inclusive)
|
|
||||||
overworld_min = mcl_vars.mg_overworld_min,
|
|
||||||
overworld_max = mcl_vars.mg_overworld_max,
|
|
||||||
|
|
||||||
-- Nether boundaries (inclusive)
|
|
||||||
nether_min = mcl_vars.mg_nether_min,
|
|
||||||
nether_max = mcl_vars.mg_nether_max,
|
|
||||||
|
|
||||||
-- End boundaries (inclusive)
|
|
||||||
end_min = mcl_vars.mg_end_min,
|
|
||||||
end_max = mcl_vars.mg_end_max,
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
name = mobs_mc_gameconfig
|
|
||||||
author = Wuzzy
|
|
||||||
description = mobs_mc game configuration for MCL2
|
|
||||||
depends = mcl_init, mcl_core
|
|
|
@ -185,7 +185,7 @@ local dispenserdef = {
|
||||||
entity.base_texture = { "blank.png", "mobs_mc_sheep.png" }
|
entity.base_texture = { "blank.png", "mobs_mc_sheep.png" }
|
||||||
texture = entity.base_texture
|
texture = entity.base_texture
|
||||||
entity.drops = {
|
entity.drops = {
|
||||||
{ name = mobs_mc.items.mutton_raw, chance = 1, min = 1, max = 2 },
|
{ name = "mcl_mobitems:mutton", chance = 1, min = 1, max = 2 },
|
||||||
}
|
}
|
||||||
used = true
|
used = true
|
||||||
elseif entname == "mobs_mc:snowman" then
|
elseif entname == "mobs_mc:snowman" then
|
||||||
|
@ -199,9 +199,9 @@ local dispenserdef = {
|
||||||
elseif entname == "mobs_mc:mooshroom" then
|
elseif entname == "mobs_mc:mooshroom" then
|
||||||
local droppos = vector.offset(pos, 0, 1.4, 0)
|
local droppos = vector.offset(pos, 0, 1.4, 0)
|
||||||
if entity.base_texture[1] == "mobs_mc_mooshroom_brown.png" then
|
if entity.base_texture[1] == "mobs_mc_mooshroom_brown.png" then
|
||||||
minetest.add_item(droppos, mobs_mc.items.mushroom_brown .. " 5")
|
minetest.add_item(droppos, "mcl_mushrooms:mushroom_brown 5")
|
||||||
else
|
else
|
||||||
minetest.add_item(droppos, mobs_mc.items.mushroom_red .. " 5")
|
minetest.add_item(droppos, "mcl_mushrooms:mushroom_red 5")
|
||||||
end
|
end
|
||||||
obj = mcl_util.replace_mob(obj, "mobs_mc:cow")
|
obj = mcl_util.replace_mob(obj, "mobs_mc:cow")
|
||||||
entity = obj:get_luaentity()
|
entity = obj:get_luaentity()
|
||||||
|
|
|
@ -228,14 +228,14 @@ minetest.register_craft({
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
type = "cooking",
|
type = "cooking",
|
||||||
output = "mcl_core:iron_nugget",
|
output = "mcl_core:iron_nugget",
|
||||||
recipe = "mobs_mc:iron_horse_armor",
|
recipe = "mcl_mobitems:iron_horse_armor",
|
||||||
cooktime = 10,
|
cooktime = 10,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
type = "cooking",
|
type = "cooking",
|
||||||
output = "mcl_core:gold_nugget",
|
output = "mcl_core:gold_nugget",
|
||||||
recipe = "mobs_mc:gold_horse_armor",
|
recipe = "mcl_mobitems:gold_horse_armor",
|
||||||
cooktime = 10,
|
cooktime = 10,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -126,8 +126,8 @@ pumpkin_face_base_def._mcl_armor_texture = "mcl_farming_pumpkin_face.png"
|
||||||
|
|
||||||
pumpkin_face_base_def.on_construct = function(pos)
|
pumpkin_face_base_def.on_construct = function(pos)
|
||||||
-- Attempt to spawn iron golem or snow golem
|
-- Attempt to spawn iron golem or snow golem
|
||||||
mobs_mc.tools.check_iron_golem_summon(pos)
|
mobs_mc.check_iron_golem_summon(pos)
|
||||||
mobs_mc.tools.check_snow_golem_summon(pos)
|
mobs_mc.check_snow_golem_summon(pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
if minetest.get_modpath("mcl_armor") then
|
if minetest.get_modpath("mcl_armor") then
|
||||||
|
@ -203,8 +203,8 @@ minetest.register_node("mcl_farming:pumpkin_face_light", {
|
||||||
sounds = mcl_sounds.node_sound_wood_defaults(),
|
sounds = mcl_sounds.node_sound_wood_defaults(),
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
-- Attempt to spawn iron golem or snow golem
|
-- Attempt to spawn iron golem or snow golem
|
||||||
mobs_mc.tools.check_iron_golem_summon(pos)
|
mobs_mc.check_iron_golem_summon(pos)
|
||||||
mobs_mc.tools.check_snow_golem_summon(pos)
|
mobs_mc.check_snow_golem_summon(pos)
|
||||||
end,
|
end,
|
||||||
on_rotate = on_rotate,
|
on_rotate = on_rotate,
|
||||||
_mcl_blast_resistance = 1,
|
_mcl_blast_resistance = 1,
|
||||||
|
|
|
@ -327,6 +327,51 @@ minetest.register_tool("mcl_mobitems:carrot_on_a_stick", {
|
||||||
_mcl_toollike_wield = true,
|
_mcl_toollike_wield = true,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
local horse_armor_use = S("Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.")
|
||||||
|
|
||||||
|
minetest.register_craftitem("mcl_mobitems:iron_horse_armor", {
|
||||||
|
description = S("Iron Horse Armor"),
|
||||||
|
_doc_items_longdesc = S("Iron horse armor can be worn by horses to increase their protection from harm a bit."),
|
||||||
|
_doc_items_usagehelp = horse_armor_use,
|
||||||
|
inventory_image = "mcl_mobitems_iron_horse_armor.png",
|
||||||
|
_horse_overlay_image = "mcl_mobitems_horse_armor_iron.png",
|
||||||
|
sounds = {
|
||||||
|
_mcl_armor_equip = "mcl_armor_equip_iron",
|
||||||
|
},
|
||||||
|
stack_max = 1,
|
||||||
|
groups = { horse_armor = 85 },
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craftitem("mcl_mobitems:gold_horse_armor", {
|
||||||
|
description = S("Golden Horse Armor"),
|
||||||
|
_doc_items_longdesc = S("Golden horse armor can be worn by horses to increase their protection from harm."),
|
||||||
|
_doc_items_usagehelp = horse_armor_use,
|
||||||
|
inventory_image = "mcl_mobitems_gold_horse_armor.png",
|
||||||
|
_horse_overlay_image = "mcl_mobitems_horse_armor_gold.png",
|
||||||
|
sounds = {
|
||||||
|
_mcl_armor_equip = "mcl_armor_equip_iron",
|
||||||
|
},
|
||||||
|
stack_max = 1,
|
||||||
|
groups = { horse_armor = 60 },
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craftitem("mcl_mobitems:diamond_horse_armor", {
|
||||||
|
description = S("Diamond Horse Armor"),
|
||||||
|
_doc_items_longdesc = S("Diamond horse armor can be worn by horses to greatly increase their protection from harm."),
|
||||||
|
_doc_items_usagehelp = horse_armor_use,
|
||||||
|
inventory_image = "mcl_mobitems_diamond_horse_armor.png",
|
||||||
|
_horse_overlay_image = "mcl_mobitems_horse_armor_diamond.png",
|
||||||
|
sounds = {
|
||||||
|
_mcl_armor_equip = "mcl_armor_equip_diamond",
|
||||||
|
},
|
||||||
|
stack_max = 1,
|
||||||
|
groups = { horse_armor = 45 },
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_alias("mobs_mc:iron_horse_armor", "mcl_mobitems:iron_horse_armor")
|
||||||
|
minetest.register_alias("mobs_mc:gold_horse_armor", "mcl_mobitems:gold_horse_armor")
|
||||||
|
minetest.register_alias("mobs_mc:diamond_horse_armor", "mcl_mobitems:diamond_horse_armor")
|
||||||
|
|
||||||
-----------
|
-----------
|
||||||
-- Crafting
|
-- Crafting
|
||||||
-----------
|
-----------
|
||||||
|
@ -437,11 +482,8 @@ minetest.register_craft({
|
||||||
{"mcl_mobitems:slimeball","mcl_mobitems:slimeball","mcl_mobitems:slimeball",}},
|
{"mcl_mobitems:slimeball","mcl_mobitems:slimeball","mcl_mobitems:slimeball",}},
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_on_item_eat(function (hp_change, replace_with_item, itemstack, user, pointed_thing)
|
minetest.register_on_item_eat(function (hp_change, replace_with_item, itemstack, user, pointed_thing) -- poisoning with spider eye
|
||||||
|
|
||||||
-- poisoning with spider eye
|
|
||||||
if itemstack:get_name() == "mcl_mobitems:spider_eye" then
|
if itemstack:get_name() == "mcl_mobitems:spider_eye" then
|
||||||
mcl_potions.poison_func(user, 1, 4)
|
mcl_potions.poison_func(user, 1, 4)
|
||||||
end
|
end
|
||||||
|
end)
|
||||||
end )
|
|
||||||
|
|
|
@ -93,3 +93,10 @@ A carrot on a stick can be used on saddled pigs to ride them.=Eine Karottenrute
|
||||||
|
|
||||||
Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.=Platzieren Sie sie auf einem Schwein mit Sattel, um sich aufzusatteln. Sie können nun das Schwein wie ein Pferd reiten. Schweine werden auch auf Sie zugehen, wenn Sie einfach nur die Karottenrute halten.
|
Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.=Platzieren Sie sie auf einem Schwein mit Sattel, um sich aufzusatteln. Sie können nun das Schwein wie ein Pferd reiten. Schweine werden auch auf Sie zugehen, wenn Sie einfach nur die Karottenrute halten.
|
||||||
|
|
||||||
|
Iron Horse Armor=Eisenpferderüstung
|
||||||
|
Iron horse armor can be worn by horses to increase their protection from harm a bit.=Eine Eisenpferderüstung kann von Pferden getragen werden, um ihren Schutz vor Schaden etwas zu erhöhen.
|
||||||
|
Golden Horse Armor=Goldpferderüstung
|
||||||
|
Golden horse armor can be worn by horses to increase their protection from harm.=Eine Goldpferderüstung kann von Pferden getragen werden, um ihren Schutz vor Schaden zu erhöhen.
|
||||||
|
Diamond Horse Armor=Diamantpferderüstung
|
||||||
|
Diamond horse armor can be worn by horses to greatly increase their protection from harm.=Eine Diamantpferderüstung kann von Pferden getragen werden, um ihren Schutz vor Schaden beträchtlich zu erhöhen.
|
||||||
|
Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=Platzieren Sie es auf einem Pferd, um die Pferderüstung aufzusetzen. Esel und Maultiere können keine Pferderüstung tragen.
|
||||||
|
|
|
@ -93,10 +93,15 @@ A carrot on a stick can be used on saddled pigs to ride them.=La caña con zanah
|
||||||
|
|
||||||
Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.=Colóquelo sobre un cerdo ensillado para montarlo. Ahora puedes montar el cerdo como un caballo. Los cerdos también caminarán hacia ti cuando solo manejes la zanahoria en un palo.
|
Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.=Colóquelo sobre un cerdo ensillado para montarlo. Ahora puedes montar el cerdo como un caballo. Los cerdos también caminarán hacia ti cuando solo manejes la zanahoria en un palo.
|
||||||
|
|
||||||
|
Iron Horse Armor=Armadura de hierro para caballo
|
||||||
|
Iron horse armor can be worn by horses to increase their protection from harm a bit.=Los caballos pueden usar armadura de caballo de hierro para aumentar un poco su protección contra el daño.
|
||||||
|
Golden Horse Armor=Armadura de oro para caballo
|
||||||
|
Golden horse armor can be worn by horses to increase their protection from harm.=Los caballos pueden usar armadura de caballo de oro para aumentar su protección contra el daño.
|
||||||
|
Diamond Horse Armor=Armadura de diamante para caballo
|
||||||
|
Diamond horse armor can be worn by horses to greatly increase their protection from harm.=Los caballos pueden usar armadura de caballo de diamante para aumentar en gran medida su protección contra el daño.
|
||||||
|
Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=Colóquelo en un caballo para ponerle la armadura de caballo. Los burros y las mulas no pueden usar armadura de caballo.
|
||||||
|
|
||||||
##### not used anymore #####
|
##### not used anymore #####
|
||||||
|
|
||||||
|
|
||||||
Milk is very refreshing and can be obtained by using a bucket on a cow. Drinking it will cure all forms of poisoning, but restores no hunger points.=La leche es muy refrescante y se puede obtener usando un cubo en una vaca. Beberlo curará todas las formas de envenenamiento, pero no restaura los puntos de hambre.
|
Milk is very refreshing and can be obtained by using a bucket on a cow. Drinking it will cure all forms of poisoning, but restores no hunger points.=La leche es muy refrescante y se puede obtener usando un cubo en una vaca. Beberlo curará todas las formas de envenenamiento, pero no restaura los puntos de hambre.
|
||||||
|
|
||||||
|
|
|
@ -92,3 +92,11 @@ Lets you ride a saddled pig=Vous permet de monter un cochon sellé
|
||||||
A carrot on a stick can be used on saddled pigs to ride them.=Une carotte sur un bâton peut être utilisée sur les porcs sellés pour les monter.
|
A carrot on a stick can be used on saddled pigs to ride them.=Une carotte sur un bâton peut être utilisée sur les porcs sellés pour les monter.
|
||||||
|
|
||||||
Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.=Placez-le sur un cochon sellé pour le monter. Vous pouvez maintenant monter le cochon comme un cheval. Les porcs marcheront également vers vous lorsque vous brandirez la carotte sur un bâton.
|
Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.=Placez-le sur un cochon sellé pour le monter. Vous pouvez maintenant monter le cochon comme un cheval. Les porcs marcheront également vers vous lorsque vous brandirez la carotte sur un bâton.
|
||||||
|
|
||||||
|
Iron Horse Armor=Armure de cheval en fer
|
||||||
|
Iron horse armor can be worn by horses to increase their protection from harm a bit.=L'armure de cheval en fer peut être portée par les chevaux pour augmenter un peu leur protection contre les dommages.
|
||||||
|
Golden Horse Armor=Armure de cheval en or
|
||||||
|
Golden horse armor can be worn by horses to increase their protection from harm.=Une armure de cheval en or peut être portée par les chevaux pour augmenter leur protection contre les dommages.
|
||||||
|
Diamond Horse Armor=Armure de cheval en diamant
|
||||||
|
Diamond horse armor can be worn by horses to greatly increase their protection from harm.=Une armure de cheval en diament peut être portée par les chevaux pour augmenter fortement leur protection contre les dommages.
|
||||||
|
Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=Placez-la sur un cheval pour mettre l'armure de cheval. Les ânes et les mules ne peuvent pas porter d'armure de cheval.
|
||||||
|
|
|
@ -93,3 +93,10 @@ A carrot on a stick can be used on saddled pigs to ride them.=Удочку с м
|
||||||
|
|
||||||
Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.=Поместите это на осёдланную свинью, чтобы закрепиться на ней. Теперь вы можете ехать на ней, как на лошади. Свиньи также идут вперёд, когда вы просто держите удочку с морковью.
|
Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.=Поместите это на осёдланную свинью, чтобы закрепиться на ней. Теперь вы можете ехать на ней, как на лошади. Свиньи также идут вперёд, когда вы просто держите удочку с морковью.
|
||||||
|
|
||||||
|
Iron Horse Armor=Железные доспехи лошади
|
||||||
|
Iron horse armor can be worn by horses to increase their protection from harm a bit.=Железные доспехи лошади, надетые на лошадь, немного защищают её от вреда.
|
||||||
|
Golden Horse Armor=Золотые доспехи лошади
|
||||||
|
Golden horse armor can be worn by horses to increase their protection from harm.=Золотые доспехи лошади, надетые на лошадь, защищают её от вреда.
|
||||||
|
Diamond Horse Armor=Алмазные доспехи лошади
|
||||||
|
Diamond horse armor can be worn by horses to greatly increase their protection from harm.=Алмазные доспехи лошади, надетые на лошадь, отлично защищают её от вреда.
|
||||||
|
Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=Поместите это на лошадь, чтобы одеть лошадь в доспехи. Ослики и мулы не могут носить лошадиные доспехи.
|
||||||
|
|
|
@ -93,3 +93,10 @@ A carrot on a stick can be used on saddled pigs to ride them.=
|
||||||
|
|
||||||
Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.=
|
Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.=
|
||||||
|
|
||||||
|
Iron Horse Armor=
|
||||||
|
Iron horse armor can be worn by horses to increase their protection from harm a bit.=
|
||||||
|
Golden Horse Armor=
|
||||||
|
Golden horse armor can be worn by horses to increase their protection from harm.=
|
||||||
|
Diamond Horse Armor=
|
||||||
|
Diamond horse armor can be worn by horses to greatly increase their protection from harm.=
|
||||||
|
Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=
|
||||||
|
|
After Width: | Height: | Size: 207 B |
After Width: | Height: | Size: 187 B |
Before Width: | Height: | Size: 1023 B After Width: | Height: | Size: 1023 B |
Before Width: | Height: | Size: 837 B After Width: | Height: | Size: 837 B |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 216 B |
|
@ -1,35 +1,43 @@
|
||||||
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
local hud_totem = {}
|
local hud_totem = {}
|
||||||
|
|
||||||
minetest.register_on_leaveplayer(function(player)
|
minetest.register_on_leaveplayer(function(player)
|
||||||
hud_totem[player] = nil
|
hud_totem[player] = nil
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
minetest.register_craftitem("mcl_totems:totem", {
|
||||||
|
description = S("Totem of Undying"),
|
||||||
|
_tt_help = minetest.colorize(mcl_colors.GREEN, S("Protects you from death while wielding it")),
|
||||||
|
_doc_items_longdesc = S("A totem of undying is a rare artifact which may safe you from certain death."),
|
||||||
|
_doc_items_usagehelp = S("The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however."),
|
||||||
|
inventory_image = "mcl_totems_totem.png",
|
||||||
|
wield_image = "mcl_totems_totem.png",
|
||||||
|
stack_max = 1,
|
||||||
|
groups = {combat_item = 1, offhand_item = 1},
|
||||||
|
})
|
||||||
|
minetest.register_alias("mobs_mc:totem", "mcl_totems:totem")
|
||||||
|
|
||||||
local particle_colors = {"98BF22", "C49E09", "337D0B", "B0B021", "1E9200"} -- TODO: real MC colors
|
local particle_colors = {"98BF22", "C49E09", "337D0B", "B0B021", "1E9200"} -- TODO: real MC colors
|
||||||
|
|
||||||
-- Save the player from death when holding totem of undying in hand
|
-- Save the player from death when holding totem of undying in hand
|
||||||
mcl_damage.register_modifier(function(obj, damage, reason)
|
mcl_damage.register_modifier(function(obj, damage, reason)
|
||||||
if obj:is_player() then
|
if obj:is_player() and not reason.bypasses_totem then
|
||||||
local hp = obj:get_hp()
|
local hp = obj:get_hp()
|
||||||
if hp - damage <= 0 then
|
if hp - damage <= 0 then
|
||||||
local wield = obj:get_wielded_item()
|
local wield = obj:get_wielded_item()
|
||||||
local in_offhand = false
|
local in_offhand = false
|
||||||
if not (wield:get_name() == "mobs_mc:totem") then
|
if not (wield:get_name() == "mcl_totems:totem") then
|
||||||
local inv = obj:get_inventory()
|
local inv = obj:get_inventory()
|
||||||
if inv then
|
if inv then
|
||||||
wield = obj:get_inventory():get_stack("offhand", 1)
|
wield = obj:get_inventory():get_stack("offhand", 1)
|
||||||
in_offhand = true
|
in_offhand = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if wield:get_name() == "mobs_mc:totem" then
|
if wield:get_name() == "mcl_totems:totem" then
|
||||||
local ppos = obj:get_pos()
|
local ppos = obj:get_pos()
|
||||||
local pnname = minetest.get_node(ppos).name
|
local pnname = minetest.get_node(ppos).name
|
||||||
-- Some exceptions when _not_ to save the player
|
|
||||||
for n = 1, #mobs_mc.misc.totem_fail_nodes do
|
|
||||||
if pnname == mobs_mc.misc.totem_fail_nodes[n] then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- Reset breath as well
|
|
||||||
if obj:get_breath() < 11 then
|
if obj:get_breath() < 11 then
|
||||||
obj:set_breath(10)
|
obj:set_breath(10)
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
# textdomain: mcl_totems
|
||||||
|
Totem of Undying=Totem der Unsterblichkeit
|
||||||
|
A totem of undying is a rare artifact which may safe you from certain death.=Ein Totem der Unsterblichkeit ist ein seltenes Artefakt, dass Sie vor dem sicheren Tod bewahren kann.
|
||||||
|
The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=Der Totem funktioniert nur, während Sie ihn halten. Wenn Sie normalerweise tödlich hohen Schaden erhalten, werden Sie vor dem Tod bewahrt und Sie erhalten eine zweite Chance mit 1 TP. Der Totem wird dabei zerstört.
|
||||||
|
Protects you from death while wielding it=Schützt vor dem Tod, wenn es gehalten wird
|
|
@ -0,0 +1,4 @@
|
||||||
|
# textdomain: mcl_totems
|
||||||
|
Totem of Undying=Tótem de la inmortalidad
|
||||||
|
A totem of undying is a rare artifact which may safe you from certain death.=Un tótem de la inmortalidad es un artefacto raro que puede salvarte de una muerte segura.
|
||||||
|
The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=El tótem solo funciona mientras lo sostienes en tu mano. Si recibes un daño crítico, no mueres y obtienes una segunda oportunidad con 1 HP. Sin embargo, el tótem se destruye en el proceso.
|
|
@ -0,0 +1,5 @@
|
||||||
|
# textdomain: mcl_totems
|
||||||
|
Totem of Undying=Totem d'immortalité
|
||||||
|
A totem of undying is a rare artifact which may safe you from certain death.=Un totem d'immortalité est un artefact rare qui peut vous protéger d'une mort certaine.
|
||||||
|
The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=Le totem ne fonctionne que lorsque vous le tenez dans votre main. Si vous recevez des dégâts mortels, vous êtes sauvé de la mort et vous obtenez une seconde chance avec 1 HP. Cependant, le totem est détruit.
|
||||||
|
Protects you from death while wielding it=Vous protège de la mort en la maniant
|
|
@ -0,0 +1,5 @@
|
||||||
|
# textdomain: mcl_totems
|
||||||
|
Totem of Undying=Тотем бессмертия
|
||||||
|
A totem of undying is a rare artifact which may safe you from certain death.=Тотем бессмертия это редкий артефакт, способный спасти вас от смерти.
|
||||||
|
The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=Тотем работает только когда вы держите его в руке. Если вы получаете смертельный урон, вы спасаетесь от смерти и получаете второй шанс с 1 HP. Однако тотем при этом уничтожается.
|
||||||
|
Protects you from death while wielding it=Защищает вас от смерти, пока вы владеете им
|
|
@ -0,0 +1,5 @@
|
||||||
|
# textdomain: mcl_totems
|
||||||
|
Totem of Undying=
|
||||||
|
A totem of undying is a rare artifact which may safe you from certain death.=
|
||||||
|
The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=
|
||||||
|
Protects you from death while wielding it=
|
Before Width: | Height: | Size: 346 B After Width: | Height: | Size: 346 B |
|
@ -73,13 +73,13 @@ local loottable =
|
||||||
{ itemstring = "mcl_mobitems:saddle", weight = 20 },
|
{ itemstring = "mcl_mobitems:saddle", weight = 20 },
|
||||||
{ itemstring = "mcl_jukebox:record_1", weight = 15 },
|
{ itemstring = "mcl_jukebox:record_1", weight = 15 },
|
||||||
{ itemstring = "mcl_jukebox:record_4", weight = 15 },
|
{ itemstring = "mcl_jukebox:record_4", weight = 15 },
|
||||||
{ itemstring = "mobs_mc:iron_horse_armor", weight = 15 },
|
{ itemstring = "mcl_mobitems:iron_horse_armor", weight = 15 },
|
||||||
{ itemstring = "mcl_core:apple_gold", weight = 15 },
|
{ itemstring = "mcl_core:apple_gold", weight = 15 },
|
||||||
{ itemstring = "mcl_books:book", weight = 10, func = function(stack, pr)
|
{ itemstring = "mcl_books:book", weight = 10, func = function(stack, pr)
|
||||||
mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr)
|
mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr)
|
||||||
end },
|
end },
|
||||||
{ itemstring = "mobs_mc:gold_horse_armor", weight = 10 },
|
{ itemstring = "mcl_mobitems:gold_horse_armor", weight = 10 },
|
||||||
{ itemstring = "mobs_mc:diamond_horse_armor", weight = 5 },
|
{ itemstring = "mcl_mobitems:diamond_horse_armor", weight = 5 },
|
||||||
{ itemstring = "mcl_core:apple_gold_enchanted", weight = 2 },
|
{ itemstring = "mcl_core:apple_gold_enchanted", weight = 2 },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -463,9 +463,9 @@ local function temple_placement_callback(p1, p2, size, rotation, pr)
|
||||||
{ itemstring = "mcl_core:iron_ingot", weight = 15, amount_min = 1, amount_max = 5 },
|
{ itemstring = "mcl_core:iron_ingot", weight = 15, amount_min = 1, amount_max = 5 },
|
||||||
{ itemstring = "mcl_core:emerald", weight = 15, amount_min = 1, amount_max = 3 },
|
{ itemstring = "mcl_core:emerald", weight = 15, amount_min = 1, amount_max = 3 },
|
||||||
{ itemstring = "", weight = 15, },
|
{ itemstring = "", weight = 15, },
|
||||||
{ itemstring = "mobs_mc:iron_horse_armor", weight = 15, },
|
{ itemstring = "mcl_mobitems:iron_horse_armor", weight = 15, },
|
||||||
{ itemstring = "mobs_mc:gold_horse_armor", weight = 10, },
|
{ itemstring = "mcl_mobitems:gold_horse_armor", weight = 10, },
|
||||||
{ itemstring = "mobs_mc:diamond_horse_armor", weight = 5, },
|
{ itemstring = "mcl_mobitems:diamond_horse_armor", weight = 5, },
|
||||||
{ itemstring = "mcl_core:diamond", weight = 5, amount_min = 1, amount_max = 3 },
|
{ itemstring = "mcl_core:diamond", weight = 5, amount_min = 1, amount_max = 3 },
|
||||||
{ itemstring = "mcl_core:apple_gold_enchanted", weight = 2, },
|
{ itemstring = "mcl_core:apple_gold_enchanted", weight = 2, },
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,9 +122,9 @@ function settlements.fill_chest(pos, pr)
|
||||||
{ itemstring = "mcl_core:obsidian", weight = 5, amount_min = 3, amount_max = 7 },
|
{ itemstring = "mcl_core:obsidian", weight = 5, amount_min = 3, amount_max = 7 },
|
||||||
{ itemstring = "mcl_core:sapling", weight = 5, amount_min = 3, amount_max = 7 },
|
{ itemstring = "mcl_core:sapling", weight = 5, amount_min = 3, amount_max = 7 },
|
||||||
{ itemstring = "mcl_mobitems:saddle", weight = 3 },
|
{ itemstring = "mcl_mobitems:saddle", weight = 3 },
|
||||||
{ itemstring = "mobs_mc:iron_horse_armor", weight = 1 },
|
{ itemstring = "mcl_mobitems:iron_horse_armor", weight = 1 },
|
||||||
{ itemstring = "mobs_mc:gold_horse_armor", weight = 1 },
|
{ itemstring = "mcl_mobitems:gold_horse_armor", weight = 1 },
|
||||||
{ itemstring = "mobs_mc:diamond_horse_armor", weight = 1 },
|
{ itemstring = "mcl_mobitems:diamond_horse_armor", weight = 1 },
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
local items = mcl_loot.get_multi_loot(loottable, prand)
|
local items = mcl_loot.get_multi_loot(loottable, prand)
|
||||||
|
|
|
@ -14,12 +14,6 @@ local function handle_kill_command(suspect, victim)
|
||||||
return false, S("@1 is already dead", victim)
|
return false, S("@1 is already dead", victim)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- If player holds a totem of undying, destroy it before killing,
|
|
||||||
-- so it doesn't rescue the player.
|
|
||||||
local wield = victimref:get_wielded_item()
|
|
||||||
if wield:get_name() == "mobs_mc:totem" then
|
|
||||||
victimref:set_wielded_item("")
|
|
||||||
end
|
|
||||||
-- DIE!
|
-- DIE!
|
||||||
victimref:set_hp(0, {_mcl_type = "out_of_world"})
|
victimref:set_hp(0, {_mcl_type = "out_of_world"})
|
||||||
-- Log
|
-- Log
|
||||||
|
|