forked from VoxeLibre/VoxeLibre
Merge remote-tracking branch 'origin/master' into mineclone5
This commit is contained in:
commit
034af87cd7
|
@ -3562,7 +3562,7 @@ local mob_step = function(self, dtime)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- mob plays random sound at times
|
-- mob plays random sound at times
|
||||||
if random(1, 70) == 1 then
|
if random(1, 100) == 1 then
|
||||||
mob_sound(self, "random", true)
|
mob_sound(self, "random", true)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -3925,35 +3925,7 @@ end
|
||||||
end -- END mobs:register_mob function
|
end -- END mobs:register_mob function
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--BEGIN SPAWNING ALGORITHM
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- count how many mobs of one type are inside an area
|
-- count how many mobs of one type are inside an area
|
||||||
--[[
|
|
||||||
local count_mobs = function(pos, mobtype)
|
local count_mobs = function(pos, mobtype)
|
||||||
|
|
||||||
local num = 0
|
local num = 0
|
||||||
|
@ -3997,7 +3969,7 @@ local count_mobs = function(pos, mobtype)
|
||||||
|
|
||||||
return num
|
return num
|
||||||
end
|
end
|
||||||
]]--
|
|
||||||
|
|
||||||
-- global functions
|
-- global functions
|
||||||
|
|
||||||
|
@ -4007,49 +3979,9 @@ function mobs:spawn_abm_check(pos, node, name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
--[[
|
function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light,
|
||||||
Custom elements changed:
|
interval, chance, aoc, min_height, max_height, day_toggle, on_spawn)
|
||||||
name:
|
|
||||||
the mobs name
|
|
||||||
|
|
||||||
dimension:
|
|
||||||
"overworld"
|
|
||||||
"nether"
|
|
||||||
"end"
|
|
||||||
|
|
||||||
types of spawning:
|
|
||||||
"air"
|
|
||||||
"water"
|
|
||||||
"ground"
|
|
||||||
"lava"
|
|
||||||
|
|
||||||
what is aoc???
|
|
||||||
|
|
||||||
WARNING: BIOME INTEGRATION NEEDED -> How to get biome through lua??
|
|
||||||
]]--
|
|
||||||
|
|
||||||
--this is where all of the spawning information is kept
|
|
||||||
local spawn_dictionary = {
|
|
||||||
["overworld"] = {},
|
|
||||||
["nether"] = {},
|
|
||||||
["end"] = {}
|
|
||||||
}
|
|
||||||
|
|
||||||
function mobs:spawn_specific(
|
|
||||||
name,
|
|
||||||
dimension,
|
|
||||||
type_of_spawning,
|
|
||||||
min_light,
|
|
||||||
max_light,
|
|
||||||
interval,
|
|
||||||
chance,
|
|
||||||
aoc,
|
|
||||||
min_height,
|
|
||||||
max_height,
|
|
||||||
day_toggle,
|
|
||||||
on_spawn)
|
|
||||||
|
|
||||||
|
|
||||||
-- Do mobs spawn at all?
|
-- Do mobs spawn at all?
|
||||||
if not mobs_spawn then
|
if not mobs_spawn then
|
||||||
return
|
return
|
||||||
|
@ -4070,6 +4002,7 @@ function mobs:spawn_specific(
|
||||||
|
|
||||||
minetest.log("action",
|
minetest.log("action",
|
||||||
string.format("[mobs] Chance setting for %s changed to %s (total: %s)", name, chance, aoc))
|
string.format("[mobs] Chance setting for %s changed to %s (total: %s)", name, chance, aoc))
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local spawn_action
|
local spawn_action
|
||||||
|
@ -4234,24 +4167,6 @@ function mobs:spawn_specific(
|
||||||
spawn_action(pos, node, active_object_count, active_object_count_wider, name)
|
spawn_action(pos, node, active_object_count, active_object_count_wider, name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
--load information into the spawn dictionary
|
|
||||||
local key = #spawn_dictionary[dimension] + 1
|
|
||||||
|
|
||||||
spawn_dictionary[dimension][key] = {}
|
|
||||||
spawn_dictionary[dimension][key]["name"] = name
|
|
||||||
spawn_dictionary[dimension][key]["type"] = type_of_spawning
|
|
||||||
spawn_dictionary[dimension][key]["min_light"] = min_light
|
|
||||||
spawn_dictionary[dimension][key]["max_light"] = max_light
|
|
||||||
spawn_dictionary[dimension][key]["interval"] = interval
|
|
||||||
spawn_dictionary[dimension][key]["chance"] = chance
|
|
||||||
spawn_dictionary[dimension][key]["aoc"] = aoc
|
|
||||||
spawn_dictionary[dimension][key]["min_height"] = min_height
|
|
||||||
spawn_dictionary[dimension][key]["max_height"] = max_height
|
|
||||||
spawn_dictionary[dimension][key]["day_toggle"] = day_toggle
|
|
||||||
spawn_dictionary[dimension][key]["on_spawn"] = spawn_abm_action
|
|
||||||
|
|
||||||
--[[
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
label = name .. " spawning",
|
label = name .. " spawning",
|
||||||
nodenames = nodes,
|
nodenames = nodes,
|
||||||
|
@ -4261,24 +4176,18 @@ function mobs:spawn_specific(
|
||||||
catch_up = false,
|
catch_up = false,
|
||||||
action = spawn_abm_action,
|
action = spawn_abm_action,
|
||||||
})
|
})
|
||||||
]]--
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- compatibility with older mob registration
|
-- compatibility with older mob registration
|
||||||
-- we're going to forget about this for now -j4i
|
|
||||||
--[[
|
|
||||||
function mobs:register_spawn(name, nodes, max_light, min_light, chance, active_object_count, max_height, day_toggle)
|
function mobs:register_spawn(name, nodes, max_light, min_light, chance, active_object_count, max_height, day_toggle)
|
||||||
|
|
||||||
mobs:spawn_specific(name, nodes, {"air"}, min_light, max_light, 30,
|
mobs:spawn_specific(name, nodes, {"air"}, min_light, max_light, 30,
|
||||||
chance, active_object_count, -31000, max_height, day_toggle)
|
chance, active_object_count, -31000, max_height, day_toggle)
|
||||||
end
|
end
|
||||||
]]--
|
|
||||||
|
|
||||||
|
|
||||||
--I'm not sure what this does but disabling it doesn't cause a crash -j4i
|
|
||||||
-- MarkBu's spawn function
|
-- MarkBu's spawn function
|
||||||
--[[
|
|
||||||
function mobs:spawn(def)
|
function mobs:spawn(def)
|
||||||
|
|
||||||
local name = def.name
|
local name = def.name
|
||||||
|
@ -4297,160 +4206,6 @@ function mobs:spawn(def)
|
||||||
mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, interval,
|
mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, interval,
|
||||||
chance, active_object_count, min_height, max_height, day_toggle, on_spawn)
|
chance, active_object_count, min_height, max_height, day_toggle, on_spawn)
|
||||||
end
|
end
|
||||||
]]--
|
|
||||||
|
|
||||||
|
|
||||||
local axis
|
|
||||||
--inner and outer part of square donut radius
|
|
||||||
local inner = 1
|
|
||||||
local outer = 70
|
|
||||||
local int = {-1,1}
|
|
||||||
local position_calculation = function(pos)
|
|
||||||
|
|
||||||
pos = vector.floor(pos)
|
|
||||||
|
|
||||||
--this is used to determine the axis buffer from the player
|
|
||||||
axis = math.random(0,1)
|
|
||||||
|
|
||||||
--cast towards the direction
|
|
||||||
if axis == 0 then --x
|
|
||||||
pos.x = pos.x + math.random(inner,outer)*int[math.random(1,2)]
|
|
||||||
pos.z = pos.z + math.random(-outer,outer)
|
|
||||||
else --z
|
|
||||||
pos.z = pos.z + math.random(inner,outer)*int[math.random(1,2)]
|
|
||||||
pos.x = pos.x + math.random(-outer,outer)
|
|
||||||
end
|
|
||||||
return(pos)
|
|
||||||
end
|
|
||||||
|
|
||||||
--[[
|
|
||||||
local decypher_limits_dictionary = {
|
|
||||||
["overworld"] = {mcl_vars.mg_overworld_min,mcl_vars.mg_overworld_max},
|
|
||||||
["nether"] = {mcl_vars.mg_nether_min, mcl_vars.mg_nether_max},
|
|
||||||
["end"] = {mcl_vars.mg_end_min, mcl_vars.mg_end_max}
|
|
||||||
}
|
|
||||||
]]--
|
|
||||||
|
|
||||||
local function decypher_limits(posy)
|
|
||||||
--local min_max_table = decypher_limits_dictionary[dimension]
|
|
||||||
--return min_max_table[1],min_max_table[2]
|
|
||||||
posy = math.floor(posy)
|
|
||||||
return posy - 32, posy + 32
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
--todo mob limiting
|
|
||||||
--MAIN LOOP
|
|
||||||
local timer = 0
|
|
||||||
minetest.register_globalstep(function(dtime)
|
|
||||||
timer = timer + dtime
|
|
||||||
if timer >= 15 then
|
|
||||||
timer = 0
|
|
||||||
for _,player in ipairs(minetest.get_connected_players()) do
|
|
||||||
for i = 1,math.random(5) do
|
|
||||||
local player_pos = player:get_pos()
|
|
||||||
local _,dimension = mcl_worlds.y_to_layer(player_pos.y)
|
|
||||||
local min,max = decypher_limits(player_pos.y)
|
|
||||||
|
|
||||||
local goal_pos = position_calculation(player_pos)
|
|
||||||
|
|
||||||
|
|
||||||
local mob_def = spawn_dictionary[dimension][math.random(1,#spawn_dictionary[dimension])]
|
|
||||||
|
|
||||||
if not mob_def then --to catch a crazy error if it ever happens
|
|
||||||
minetest.log("error", "WARNING!! mob spawning attempted to index a NIL mob!")
|
|
||||||
goto continue
|
|
||||||
end
|
|
||||||
|
|
||||||
if mob_def.type == "ground" then
|
|
||||||
|
|
||||||
local spawning_position_list = minetest.find_nodes_in_area_under_air(vector.new(goal_pos.x,min,goal_pos.z), vector.new(goal_pos.x,max,goal_pos.z), {"group:solid"})
|
|
||||||
|
|
||||||
if #spawning_position_list <= 0 then
|
|
||||||
goto continue
|
|
||||||
end
|
|
||||||
|
|
||||||
local spawning_position = spawning_position_list[math.random(1,#spawning_position_list)]
|
|
||||||
|
|
||||||
spawning_position.y = spawning_position.y + 1
|
|
||||||
|
|
||||||
local gotten_light = minetest.get_node_light(spawning_position)
|
|
||||||
|
|
||||||
if gotten_light and gotten_light >= mob_def.min_light and gotten_light <= mob_def.max_light then
|
|
||||||
minetest.add_entity(spawning_position, mob_def.name)
|
|
||||||
end
|
|
||||||
elseif mob_def.type == "air" then
|
|
||||||
local spawning_position_list = minetest.find_nodes_in_area(vector.new(goal_pos.x,min,goal_pos.z), vector.new(goal_pos.x,max,goal_pos.z), {"air"})
|
|
||||||
|
|
||||||
if #spawning_position_list <= 0 then
|
|
||||||
goto continue
|
|
||||||
end
|
|
||||||
|
|
||||||
local spawning_position = spawning_position_list[math.random(1,#spawning_position_list)]
|
|
||||||
|
|
||||||
local gotten_light = minetest.get_node_light(spawning_position)
|
|
||||||
|
|
||||||
if gotten_light and gotten_light >= mob_def.min_light and gotten_light <= mob_def.max_light then
|
|
||||||
minetest.add_entity(spawning_position, mob_def.name)
|
|
||||||
end
|
|
||||||
elseif mob_def.type == "water" then
|
|
||||||
local spawning_position_list = minetest.find_nodes_in_area(vector.new(goal_pos.x,min,goal_pos.z), vector.new(goal_pos.x,max,goal_pos.z), {"group:water"})
|
|
||||||
|
|
||||||
if #spawning_position_list <= 0 then
|
|
||||||
goto continue
|
|
||||||
end
|
|
||||||
|
|
||||||
local spawning_position = spawning_position_list[math.random(1,#spawning_position_list)]
|
|
||||||
|
|
||||||
local gotten_light = minetest.get_node_light(spawning_position)
|
|
||||||
|
|
||||||
if gotten_light and gotten_light >= mob_def.min_light and gotten_light <= mob_def.max_light then
|
|
||||||
minetest.add_entity(spawning_position, mob_def.name)
|
|
||||||
end
|
|
||||||
--elseif mob_def.type == "lava" then
|
|
||||||
--implement later
|
|
||||||
end
|
|
||||||
--local spawn minetest.find_nodes_in_area_under_air(vector.new(pos.x,pos.y-find_node_height,pos.z), vector.new(pos.x,pos.y+find_node_height,pos.z), {"group:solid"})
|
|
||||||
|
|
||||||
|
|
||||||
::continue:: --this is a safety catch
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--END SPAWNING ALGORITHM
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- register arrow for shoot attack
|
-- register arrow for shoot attack
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--###################
|
--###################
|
||||||
--################### AGENT - seemingly unused
|
--################### AGENT
|
||||||
--###################
|
--###################
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator("mobs_mc")
|
||||||
|
|
|
@ -64,7 +64,7 @@ else
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Spawn on solid blocks at or below Sea level and the selected light level
|
-- Spawn on solid blocks at or below Sea level and the selected light level
|
||||||
mobs:spawn_specific("mobs_mc:bat", "overworld", "air", 0, maxlight, 20, 5000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water-1)
|
mobs:spawn_specific("mobs_mc:bat", mobs_mc.spawn.solid, {"air"}, 0, maxlight, 20, 5000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water-1)
|
||||||
|
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
-- daufinsyd
|
-- daufinsyd
|
||||||
-- My work is under the LGPL terms
|
-- My work is under the LGPL terms
|
||||||
-- Model and mobs_blaze.png see https://github.com/22i/minecraft-voxel-blender-models -hi 22i ~jordan4ibanez
|
-- Model and mobs_blaze.png see https://github.com/22i/minecraft-voxel-blender-models
|
||||||
-- blaze.lua partial copy of mobs_mc/ghast.lua
|
-- blaze.lua partial copy of mobs_mc/ghast.lua
|
||||||
|
|
||||||
local S = minetest.get_translator("mobs_mc")
|
local S = minetest.get_translator("mobs_mc")
|
||||||
|
@ -128,7 +128,7 @@ mobs:register_mob("mobs_mc:blaze", {
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
mobs:spawn_specific("mobs_mc:blaze", "nether", "ground", 0, minetest.LIGHT_MAX+1, 30, 5000, 3, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
|
mobs:spawn_specific("mobs_mc:blaze", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 5000, 3, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
|
||||||
|
|
||||||
-- Blaze fireball
|
-- Blaze fireball
|
||||||
mobs:register_arrow("mobs_mc:blaze_fireball", {
|
mobs:register_arrow("mobs_mc:blaze_fireball", {
|
||||||
|
|
|
@ -100,7 +100,7 @@ mobs:register_mob("mobs_mc:chicken", {
|
||||||
})
|
})
|
||||||
|
|
||||||
--spawn
|
--spawn
|
||||||
mobs:spawn_specific("mobs_mc:chicken", "overworld", "ground", 9, minetest.LIGHT_MAX+1, 30, 17000, 3, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:chicken", mobs_mc.spawn.grassland, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 17000, 3, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mobs:register_egg("mobs_mc:chicken", S("Chicken"), "mobs_mc_spawn_icon_chicken.png", 0)
|
mobs:register_egg("mobs_mc:chicken", S("Chicken"), "mobs_mc_spawn_icon_chicken.png", 0)
|
||||||
|
|
|
@ -145,9 +145,8 @@ mobs:register_mob("mobs_mc:mooshroom", mooshroom_def)
|
||||||
|
|
||||||
|
|
||||||
-- Spawning
|
-- Spawning
|
||||||
mobs:spawn_specific("mobs_mc:cow", "overworld", "ground", 9, minetest.LIGHT_MAX+1, 30, 17000, 10, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:cow", mobs_mc.spawn.grassland, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 17000, 10, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
||||||
--WARNING: THIS NEEDS A BIOME INTEGRATION
|
mobs:spawn_specific("mobs_mc:mooshroom", mobs_mc.spawn.mushroom_island, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 17000, 5, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
||||||
mobs:spawn_specific("mobs_mc:mooshroom", "overworld", "ground", 9, minetest.LIGHT_MAX+1, 30, 17000, 5, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
|
||||||
|
|
||||||
-- spawn egg
|
-- spawn egg
|
||||||
mobs:register_egg("mobs_mc:cow", S("Cow"), "mobs_mc_spawn_icon_cow.png", 0)
|
mobs:register_egg("mobs_mc:cow", S("Cow"), "mobs_mc_spawn_icon_cow.png", 0)
|
||||||
|
|
|
@ -39,8 +39,6 @@ mobs:register_mob("mobs_mc:creeper", {
|
||||||
runaway_from = { "mobs_mc:ocelot", "mobs_mc:cat" },
|
runaway_from = { "mobs_mc:ocelot", "mobs_mc:cat" },
|
||||||
attack_type = "explode",
|
attack_type = "explode",
|
||||||
|
|
||||||
--hssssssssssss
|
|
||||||
|
|
||||||
explosion_strength = 3,
|
explosion_strength = 3,
|
||||||
explosion_radius = 3.5,
|
explosion_radius = 3.5,
|
||||||
explosion_damage_radius = 3.5,
|
explosion_damage_radius = 3.5,
|
||||||
|
@ -140,9 +138,6 @@ mobs:register_mob("mobs_mc:creeper_charged", {
|
||||||
pathfinding = 1,
|
pathfinding = 1,
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
mesh = "mobs_mc_creeper.b3d",
|
mesh = "mobs_mc_creeper.b3d",
|
||||||
|
|
||||||
--BOOM
|
|
||||||
|
|
||||||
textures = {
|
textures = {
|
||||||
{"mobs_mc_creeper.png",
|
{"mobs_mc_creeper.png",
|
||||||
"mobs_mc_creeper_charge.png"},
|
"mobs_mc_creeper_charge.png"},
|
||||||
|
@ -253,7 +248,7 @@ mobs:register_mob("mobs_mc:creeper_charged", {
|
||||||
glow = 3,
|
glow = 3,
|
||||||
})
|
})
|
||||||
|
|
||||||
mobs:spawn_specific("mobs_mc:creeper", "overworld", "ground", 0, 7, 20, 16500, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:creeper", mobs_mc.spawn.solid, {"air"}, 0, 7, 20, 16500, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mobs:register_egg("mobs_mc:creeper", S("Creeper"), "mobs_mc_spawn_icon_creeper.png", 0)
|
mobs:register_egg("mobs_mc:creeper", S("Creeper"), "mobs_mc_spawn_icon_creeper.png", 0)
|
||||||
|
|
|
@ -562,11 +562,11 @@ mobs:register_mob("mobs_mc:enderman", {
|
||||||
|
|
||||||
|
|
||||||
-- End spawn
|
-- End spawn
|
||||||
mobs:spawn_specific("mobs_mc:enderman", "end", "ground", 0, minetest.LIGHT_MAX+1, 30, 3000, 12, mobs_mc.spawn_height.end_min, mobs_mc.spawn_height.end_max)
|
mobs:spawn_specific("mobs_mc:enderman", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 3000, 12, mobs_mc.spawn_height.end_min, mobs_mc.spawn_height.end_max)
|
||||||
-- Overworld spawn
|
-- Overworld spawn
|
||||||
mobs:spawn_specific("mobs_mc:enderman", "overworld", "ground", 0, 7, 30, 19000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:enderman", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 19000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
||||||
-- Nether spawn (rare)
|
-- Nether spawn (rare)
|
||||||
mobs:spawn_specific("mobs_mc:enderman", "nether", "ground", 0, 7, 30, 27500, 4, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
|
mobs:spawn_specific("mobs_mc:enderman", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 27500, 4, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mobs:register_egg("mobs_mc:enderman", S("Enderman"), "mobs_mc_spawn_icon_enderman.png", 0)
|
mobs:register_egg("mobs_mc:enderman", S("Enderman"), "mobs_mc_spawn_icon_enderman.png", 0)
|
||||||
|
|
|
@ -75,7 +75,7 @@ mobs:register_mob("mobs_mc:ghast", {
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
mobs:spawn_specific("mobs_mc:ghast", "nether", "air", 0, minetest.LIGHT_MAX+1, 30, 18000, 2, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
|
mobs:spawn_specific("mobs_mc:ghast", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 18000, 2, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
|
||||||
|
|
||||||
-- fireball (projectile)
|
-- fireball (projectile)
|
||||||
mobs:register_arrow("mobs_mc:fireball", {
|
mobs:register_arrow("mobs_mc:fireball", {
|
||||||
|
|
|
@ -106,7 +106,7 @@ mobs:register_mob("mobs_mc:guardian_elder", {
|
||||||
view_range = 16,
|
view_range = 16,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Spawning disabled due to size issues <- what do you mean? -j4i
|
-- Spawning disabled due to size issues
|
||||||
-- TODO: Re-enable spawning
|
-- TODO: Re-enable spawning
|
||||||
-- 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)
|
-- 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)
|
||||||
|
|
||||||
|
|
|
@ -510,8 +510,8 @@ mobs:register_mob("mobs_mc:mule", mule)
|
||||||
|
|
||||||
--===========================
|
--===========================
|
||||||
--Spawn Function
|
--Spawn Function
|
||||||
mobs:spawn_specific("mobs_mc:horse", "overworld", "ground", 0, minetest.LIGHT_MAX+1, 30, 15000, 4, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:horse", mobs_mc.spawn.grassland_savanna, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 4, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max)
|
||||||
mobs:spawn_specific("mobs_mc:donkey", "overworld", "ground", 0, minetest.LIGHT_MAX+1, 30, 15000, 4, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:donkey", mobs_mc.spawn.grassland_savanna, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 4, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mobs:register_egg("mobs_mc:horse", S("Horse"), "mobs_mc_spawn_icon_horse.png", 0)
|
mobs:register_egg("mobs_mc:horse", S("Horse"), "mobs_mc_spawn_icon_horse.png", 0)
|
||||||
|
|
|
@ -217,7 +217,7 @@ mobs:register_mob("mobs_mc:llama", {
|
||||||
})
|
})
|
||||||
|
|
||||||
--spawn
|
--spawn
|
||||||
mobs:spawn_specific("mobs_mc:llama", "overworld", "ground", 0, minetest.LIGHT_MAX+1, 30, 15000, 5, mobs_mc.spawn_height.water+15, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:llama", mobs_mc.spawn.savanna, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 5, mobs_mc.spawn_height.water+15, mobs_mc.spawn_height.overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mobs:register_egg("mobs_mc:llama", S("Llama"), "mobs_mc_spawn_icon_llama.png", 0)
|
mobs:register_egg("mobs_mc:llama", S("Llama"), "mobs_mc_spawn_icon_llama.png", 0)
|
||||||
|
|
|
@ -152,9 +152,6 @@ mobs:register_mob("mobs_mc:cat", cat)
|
||||||
local base_spawn_chance = 5000
|
local base_spawn_chance = 5000
|
||||||
|
|
||||||
-- Spawn ocelot
|
-- Spawn ocelot
|
||||||
--they get the same as the llama because I'm trying to rework so much of this code right now -j4i
|
|
||||||
mobs:spawn_specific("mobs_mc:ocelot", "overworld", "ground", 0, minetest.LIGHT_MAX+1, 30, 15000, 5, mobs_mc.spawn_height.water+15, mobs_mc.spawn_height.overworld_max)
|
|
||||||
--[[
|
|
||||||
mobs:spawn({
|
mobs:spawn({
|
||||||
name = "mobs_mc:ocelot",
|
name = "mobs_mc:ocelot",
|
||||||
nodes = mobs_mc.spawn.jungle,
|
nodes = mobs_mc.spawn.jungle,
|
||||||
|
@ -166,8 +163,8 @@ mobs:spawn({
|
||||||
min_height = mobs_mc.spawn_height.water+1, -- Right above ocean level
|
min_height = mobs_mc.spawn_height.water+1, -- Right above ocean level
|
||||||
max_height = mobs_mc.spawn_height.overworld_max,
|
max_height = mobs_mc.spawn_height.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). ]]
|
||||||
|
|
||||||
-- 1/7 chance to spawn 2 ocelot kittens
|
-- 1/7 chance to spawn 2 ocelot kittens
|
||||||
if pr:next(1,7) == 1 then
|
if pr:next(1,7) == 1 then
|
||||||
|
@ -210,7 +207,6 @@ mobs:spawn({
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
]]--
|
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
-- FIXME: The spawn icon shows a cat texture, not an ocelot texture
|
-- FIXME: The spawn icon shows a cat texture, not an ocelot texture
|
||||||
|
|
|
@ -90,8 +90,8 @@ mobs:register_mob("mobs_mc:parrot", {
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Parrots spawn rarely in jungles. TODO: Also check for jungle *biome* <- I'll get to this eventually -j4i
|
-- Parrots spawn rarely in jungles. TODO: Also check for jungle *biome*
|
||||||
mobs:spawn_specific("mobs_mc:parrot","overworld", "air", 0, minetest.LIGHT_MAX+1, 7, 30000, 1, mobs_mc.spawn_height.water+7, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:parrot", {"mcl_core:jungletree", "mcl_core:jungleleaves"}, {"air"}, 0, minetest.LIGHT_MAX+1, 7, 30000, 1, mobs_mc.spawn_height.water+7, mobs_mc.spawn_height.overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mobs:register_egg("mobs_mc:parrot", S("Parrot"), "mobs_mc_spawn_icon_parrot.png", 0)
|
mobs:register_egg("mobs_mc:parrot", S("Parrot"), "mobs_mc_spawn_icon_parrot.png", 0)
|
||||||
|
|
|
@ -182,7 +182,7 @@ mobs:register_mob("mobs_mc:pig", {
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
mobs:spawn_specific("mobs_mc:pig", "overworld", "ground", 9, minetest.LIGHT_MAX+1, 30, 15000, 8, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:pig", mobs_mc.spawn.grassland, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 15000, 8, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mobs:register_egg("mobs_mc:pig", S("Pig"), "mobs_mc_spawn_icon_pig.png", 0)
|
mobs:register_egg("mobs_mc:pig", S("Pig"), "mobs_mc_spawn_icon_pig.png", 0)
|
||||||
|
|
|
@ -67,7 +67,7 @@ mobs:register_mob("mobs_mc:polar_bear", {
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
mobs:spawn_specific("mobs_mc:polar_bear", "overworld", "ground", 0, minetest.LIGHT_MAX+1, 30, 7000, 3, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:polar_bear", mobs_mc.spawn.snow, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 7000, 3, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
||||||
|
|
||||||
-- spawn egg
|
-- spawn egg
|
||||||
mobs:register_egg("mobs_mc:polar_bear", S("Polar Bear"), "mobs_mc_spawn_icon_polarbear.png", 0)
|
mobs:register_egg("mobs_mc:polar_bear", S("Polar Bear"), "mobs_mc_spawn_icon_polarbear.png", 0)
|
||||||
|
|
|
@ -107,11 +107,8 @@ end
|
||||||
mobs:register_mob("mobs_mc:killer_bunny", killer_bunny)
|
mobs:register_mob("mobs_mc:killer_bunny", killer_bunny)
|
||||||
|
|
||||||
-- Mob spawning rules.
|
-- Mob spawning rules.
|
||||||
-- Different skins depending on spawn location <- we'll get to this when the spawning algorithm is fleshed out
|
-- Different skins depending on spawn location
|
||||||
|
|
||||||
mobs:spawn_specific("mobs_mc:rabbit", "overworld", "ground", 9, minetest.LIGHT_MAX+1, 30, 15000, 8, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
|
||||||
|
|
||||||
--[[
|
|
||||||
local spawn = {
|
local spawn = {
|
||||||
name = "mobs_mc:rabbit",
|
name = "mobs_mc:rabbit",
|
||||||
neighbors = {"air"},
|
neighbors = {"air"},
|
||||||
|
@ -168,7 +165,6 @@ spawn_grass.on_spawn = function(self, pos)
|
||||||
self.object:set_properties({textures = self.base_texture})
|
self.object:set_properties({textures = self.base_texture})
|
||||||
end
|
end
|
||||||
mobs:spawn(spawn_grass)
|
mobs:spawn(spawn_grass)
|
||||||
]]--
|
|
||||||
|
|
||||||
-- Spawn egg
|
-- Spawn egg
|
||||||
mobs:register_egg("mobs_mc:rabbit", S("Rabbit"), "mobs_mc_spawn_icon_rabbit.png", 0)
|
mobs:register_egg("mobs_mc:rabbit", S("Rabbit"), "mobs_mc_spawn_icon_rabbit.png", 0)
|
||||||
|
|
|
@ -303,7 +303,7 @@ mobs:register_mob("mobs_mc:sheep", {
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
mobs:spawn_specific("mobs_mc:sheep", "overworld", "ground", 0, minetest.LIGHT_MAX+1, 30, 15000, 3, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:sheep", mobs_mc.spawn.grassland, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 3, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mobs:register_egg("mobs_mc:sheep", S("Sheep"), "mobs_mc_spawn_icon_sheep.png", 0)
|
mobs:register_egg("mobs_mc:sheep", S("Sheep"), "mobs_mc_spawn_icon_sheep.png", 0)
|
||||||
|
|
|
@ -81,4 +81,4 @@ mobs:register_arrow("mobs_mc:shulkerbullet", {
|
||||||
|
|
||||||
mobs:register_egg("mobs_mc:shulker", S("Shulker"), "mobs_mc_spawn_icon_shulker.png", 0)
|
mobs:register_egg("mobs_mc:shulker", S("Shulker"), "mobs_mc_spawn_icon_shulker.png", 0)
|
||||||
|
|
||||||
mobs:spawn_specific("mobs_mc:shulker", "end", "ground", 0, minetest.LIGHT_MAX+1, 30, 5000, 2, mobs_mc.spawn_height.end_min, mobs_mc.spawn_height.end_max)
|
mobs:spawn_specific("mobs_mc:shulker", mobs_mc.spawn.end_city, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 5000, 2, mobs_mc.spawn_height.end_min, mobs_mc.spawn_height.end_max)
|
||||||
|
|
|
@ -139,13 +139,13 @@ table.insert(stray.drops, {
|
||||||
mobs:register_mob("mobs_mc:stray", stray)
|
mobs:register_mob("mobs_mc:stray", stray)
|
||||||
|
|
||||||
-- Overworld spawn
|
-- Overworld spawn
|
||||||
mobs:spawn_specific("mobs_mc:skeleton", "overworld", "ground", 0, 7, 20, 17000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:skeleton", mobs_mc.spawn.solid, {"air"}, 0, 7, 20, 17000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
||||||
-- Nether spawn
|
-- Nether spawn
|
||||||
mobs:spawn_specific("mobs_mc:skeleton", "nether", "ground", 0, 7, 30, 10000, 3, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
|
mobs:spawn_specific("mobs_mc:skeleton", mobs_mc.spawn.nether_fortress, {"air"}, 0, 7, 30, 10000, 3, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
|
||||||
|
|
||||||
-- Stray spawn
|
-- Stray spawn
|
||||||
-- TODO: Spawn directly under the sky
|
-- TODO: Spawn directly under the sky
|
||||||
mobs:spawn_specific("mobs_mc:stray", "overworld", "ground", 0, 7, 20, 19000, 2, mobs_mc.spawn_height.water, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:stray", mobs_mc.spawn.snow, {"air"}, 0, 7, 20, 19000, 2, mobs_mc.spawn_height.water, mobs_mc.spawn_height.overworld_max)
|
||||||
|
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
|
|
|
@ -94,7 +94,7 @@ mobs:register_mob("mobs_mc:witherskeleton", {
|
||||||
})
|
})
|
||||||
|
|
||||||
--spawn
|
--spawn
|
||||||
mobs:spawn_specific("mobs_mc:witherskeleton", "nether", "ground", 0, 7, 30, 5000, 5, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
|
mobs:spawn_specific("mobs_mc:witherskeleton", mobs_mc.spawn.nether_fortress, {"air"}, 0, 7, 30, 5000, 5, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mobs:register_egg("mobs_mc:witherskeleton", S("Wither Skeleton"), "mobs_mc_spawn_icon_witherskeleton.png", 0)
|
mobs:register_egg("mobs_mc:witherskeleton", S("Wither Skeleton"), "mobs_mc_spawn_icon_witherskeleton.png", 0)
|
||||||
|
|
|
@ -157,9 +157,9 @@ mobs:register_mob("mobs_mc:slime_tiny", slime_tiny)
|
||||||
local smin = mobs_mc.spawn_height.overworld_min
|
local smin = mobs_mc.spawn_height.overworld_min
|
||||||
local smax = mobs_mc.spawn_height.water - 23
|
local smax = mobs_mc.spawn_height.water - 23
|
||||||
|
|
||||||
mobs:spawn_specific("mobs_mc:slime_tiny", "overworld", "ground", 0, minetest.LIGHT_MAX+1, 30, 12000, 4, smin, smax)
|
mobs:spawn_specific("mobs_mc:slime_tiny", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 12000, 4, smin, smax)
|
||||||
mobs:spawn_specific("mobs_mc:slime_small", "overworld", "ground", 0, minetest.LIGHT_MAX+1, 30, 8500, 4, smin, smax)
|
mobs:spawn_specific("mobs_mc:slime_small", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 8500, 4, smin, smax)
|
||||||
mobs:spawn_specific("mobs_mc:slime_big", "overworld", "ground", 0, minetest.LIGHT_MAX+1, 30, 10000, 4, smin, smax)
|
mobs:spawn_specific("mobs_mc:slime_big", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 10000, 4, smin, smax)
|
||||||
|
|
||||||
-- Magma cube
|
-- Magma cube
|
||||||
local magma_cube_big = {
|
local magma_cube_big = {
|
||||||
|
@ -272,13 +272,13 @@ mobs:register_mob("mobs_mc:magma_cube_tiny", magma_cube_tiny)
|
||||||
local mmin = mobs_mc.spawn_height.nether_min
|
local mmin = mobs_mc.spawn_height.nether_min
|
||||||
local mmax = mobs_mc.spawn_height.nether_max
|
local mmax = mobs_mc.spawn_height.nether_max
|
||||||
|
|
||||||
mobs:spawn_specific("mobs_mc:magma_cube_tiny", "nether", "ground", 0, minetest.LIGHT_MAX+1, 30, 15000, 4, mmin, mmax)
|
mobs:spawn_specific("mobs_mc:magma_cube_tiny", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 4, mmin, mmax)
|
||||||
mobs:spawn_specific("mobs_mc:magma_cube_small", "nether", "ground", 0, minetest.LIGHT_MAX+1, 30, 15500, 4, mmin, mmax)
|
mobs:spawn_specific("mobs_mc:magma_cube_small", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15500, 4, mmin, mmax)
|
||||||
mobs:spawn_specific("mobs_mc:magma_cube_big", "nether", "ground", 0, minetest.LIGHT_MAX+1, 30, 16000, 4, mmin, mmax)
|
mobs:spawn_specific("mobs_mc:magma_cube_big", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 16000, 4, mmin, mmax)
|
||||||
|
|
||||||
--mobs:spawn_specific("mobs_mc:magma_cube_tiny", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11000, 4, mmin, mmax)
|
mobs:spawn_specific("mobs_mc:magma_cube_tiny", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11000, 4, mmin, mmax)
|
||||||
--mobs:spawn_specific("mobs_mc:magma_cube_small", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11100, 4, mmin, mmax)
|
mobs:spawn_specific("mobs_mc:magma_cube_small", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11100, 4, mmin, mmax)
|
||||||
--mobs:spawn_specific("mobs_mc:magma_cube_big", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11200, 4, mmin, mmax)
|
mobs:spawn_specific("mobs_mc:magma_cube_big", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11200, 4, mmin, mmax)
|
||||||
|
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
|
|
|
@ -87,7 +87,7 @@ cave_spider.sounds.base_pitch = 1.25
|
||||||
mobs:register_mob("mobs_mc:cave_spider", cave_spider)
|
mobs:register_mob("mobs_mc:cave_spider", cave_spider)
|
||||||
|
|
||||||
|
|
||||||
mobs:spawn_specific("mobs_mc:spider", "overworld", "ground", 0, 7, 30, 17000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:spider", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 17000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mobs:register_egg("mobs_mc:spider", S("Spider"), "mobs_mc_spawn_icon_spider.png", 0)
|
mobs:register_egg("mobs_mc:spider", S("Spider"), "mobs_mc_spawn_icon_spider.png", 0)
|
||||||
|
|
|
@ -62,7 +62,7 @@ mobs:register_mob("mobs_mc:squid", {
|
||||||
|
|
||||||
local water = mobs_mc.spawn_height.water
|
local water = mobs_mc.spawn_height.water
|
||||||
--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
|
||||||
mobs:spawn_specific("mobs_mc:squid", "overworld", "water", 0, minetest.LIGHT_MAX+1, 30, 5500, 3, water-16, water)
|
mobs:spawn_specific("mobs_mc:squid", mobs_mc.spawn.water, {mobs_mc.items.water_source}, 0, minetest.LIGHT_MAX+1, 30, 5500, 3, water-16, water)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mobs:register_egg("mobs_mc:squid", S("Squid"), "mobs_mc_spawn_icon_squid.png", 0)
|
mobs:register_egg("mobs_mc:squid", S("Squid"), "mobs_mc_spawn_icon_squid.png", 0)
|
||||||
|
|
|
@ -1074,7 +1074,7 @@ mobs:register_mob("mobs_mc:villager", {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mobs:spawn_specific("mobs_mc:villager", "overworld", "ground", 0, minetest.LIGHT_MAX+1, 30, 20, 4, mobs_mc.spawn_height.water+1, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:villager", mobs_mc.spawn.village, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 20, 4, mobs_mc.spawn_height.water+1, mobs_mc.spawn_height.overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mobs:register_egg("mobs_mc:villager", S("Villager"), "mobs_mc_spawn_icon_villager.png", 0)
|
mobs:register_egg("mobs_mc:villager", S("Villager"), "mobs_mc_spawn_icon_villager.png", 0)
|
||||||
|
|
|
@ -146,8 +146,8 @@ mobs:register_mob("mobs_mc:villager_zombie", {
|
||||||
harmed_by_heal = true,
|
harmed_by_heal = true,
|
||||||
})
|
})
|
||||||
|
|
||||||
mobs:spawn_specific("mobs_mc:villager_zombie", "overworld", "ground", 0, 7, 30, 4090, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:villager_zombie", mobs_mc.spawn.village, {"air"}, 0, 7, 30, 4090, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
||||||
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)
|
mobs:spawn_specific("mobs_mc:villager_zombie", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 60000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mobs:register_egg("mobs_mc:villager_zombie", S("Zombie Villager"), "mobs_mc_spawn_icon_zombie_villager.png", 0)
|
mobs:register_egg("mobs_mc:villager_zombie", S("Zombie Villager"), "mobs_mc_spawn_icon_zombie_villager.png", 0)
|
||||||
|
|
|
@ -99,7 +99,7 @@ mobs:register_arrow("mobs_mc:potion_arrow", {
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
-- TODO: Spawn when witch works properly <- eventually -j4i
|
-- TODO: Spawn when witch works properly
|
||||||
--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)
|
--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)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
|
|
|
@ -232,6 +232,6 @@ end
|
||||||
mobs:register_mob("mobs_mc:dog", dog)
|
mobs:register_mob("mobs_mc:dog", dog)
|
||||||
|
|
||||||
-- Spawn
|
-- Spawn
|
||||||
mobs:spawn_specific("mobs_mc:wolf", "overworld", "ground", 0, minetest.LIGHT_MAX+1, 30, 9000, 7, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:wolf", mobs_mc.spawn.wolf, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 9000, 7, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max)
|
||||||
|
|
||||||
mobs:register_egg("mobs_mc:wolf", S("Wolf"), "mobs_mc_spawn_icon_wolf.png", 0)
|
mobs:register_egg("mobs_mc:wolf", S("Wolf"), "mobs_mc_spawn_icon_wolf.png", 0)
|
||||||
|
|
|
@ -135,11 +135,11 @@ mobs:register_mob("mobs_mc:baby_husk", baby_husk)
|
||||||
|
|
||||||
-- Spawning
|
-- Spawning
|
||||||
|
|
||||||
mobs:spawn_specific("mobs_mc:zombie", "overworld", "ground", 0, 7, 30, 6000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:zombie", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 6000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
||||||
-- Baby zombie is 20 times less likely than regular zombies
|
-- Baby zombie is 20 times less likely than regular zombies
|
||||||
mobs:spawn_specific("mobs_mc:baby_zombie", "overworld", "ground", 0, 7, 30, 60000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:baby_zombie", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 60000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
||||||
mobs:spawn_specific("mobs_mc:husk", "overworld", "ground", 0, 7, 30, 6500, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:husk", mobs_mc.spawn.desert, {"air"}, 0, 7, 30, 6500, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
||||||
mobs:spawn_specific("mobs_mc:baby_husk", "overworld", "ground", 0, 7, 30, 65000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
mobs:spawn_specific("mobs_mc:baby_husk", mobs_mc.spawn.desert, {"air"}, 0, 7, 30, 65000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
|
||||||
|
|
||||||
-- Spawn eggs
|
-- Spawn eggs
|
||||||
mobs:register_egg("mobs_mc:husk", S("Husk"), "mobs_mc_spawn_icon_husk.png", 0)
|
mobs:register_egg("mobs_mc:husk", S("Husk"), "mobs_mc_spawn_icon_husk.png", 0)
|
||||||
|
|
|
@ -111,12 +111,12 @@ baby_pigman.child = 1
|
||||||
mobs:register_mob("mobs_mc:baby_pigman", baby_pigman)
|
mobs:register_mob("mobs_mc:baby_pigman", baby_pigman)
|
||||||
|
|
||||||
-- Regular spawning in the Nether
|
-- Regular spawning in the Nether
|
||||||
mobs:spawn_specific("mobs_mc:pigman", "nether", "ground", 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
|
mobs:spawn_specific("mobs_mc:pigman", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
|
||||||
-- Baby zombie is 20 times less likely than regular zombies
|
-- Baby zombie is 20 times less likely than regular zombies
|
||||||
mobs:spawn_specific("mobs_mc:baby_pigman", "nether", "ground", 0, minetest.LIGHT_MAX+1, 30, 100000, 4, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
|
mobs:spawn_specific("mobs_mc:baby_pigman", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 100000, 4, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.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", 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)
|
||||||
|
|
||||||
-- spawn eggs
|
-- spawn eggs
|
||||||
mobs:register_egg("mobs_mc:pigman", S("Zombie Pigman"), "mobs_mc_spawn_icon_zombie_pigman.png", 0)
|
mobs:register_egg("mobs_mc:pigman", S("Zombie Pigman"), "mobs_mc_spawn_icon_zombie_pigman.png", 0)
|
||||||
|
|
|
@ -17,7 +17,7 @@ To give you a *very* brief overview over this API, here is the basic workflow on
|
||||||
In order to use this API, you should be aware of a few basic rules in order to understand it:
|
In order to use this API, you should be aware of a few basic rules in order to understand it:
|
||||||
|
|
||||||
* A HUD bar is an approximate graphical representation of the ratio of a current value and a maximum value, i.e. current health of 15 and maximum health of 20. A full HUD bar represents 100%, an empty HUD bar represents 0%.
|
* A HUD bar is an approximate graphical representation of the ratio of a current value and a maximum value, i.e. current health of 15 and maximum health of 20. A full HUD bar represents 100%, an empty HUD bar represents 0%.
|
||||||
* The current value must always be equal to or smaller then the maximum
|
* The current value must always be equal to or smaller then the maximum
|
||||||
* Both current value and maximum must not be smaller than 0
|
* Both current value and maximum must not be smaller than 0
|
||||||
* Both current value and maximum must be real numbers. So no NaN, infinity, etc.
|
* Both current value and maximum must be real numbers. So no NaN, infinity, etc.
|
||||||
* The HUD bar will be hidden if the maximum equals 0. This is intentional.
|
* The HUD bar will be hidden if the maximum equals 0. This is intentional.
|
||||||
|
@ -45,7 +45,7 @@ a vertical gradient.
|
||||||
### Icon
|
### Icon
|
||||||
A 16×16 image shown left of the HUD bar. This is optional.
|
A 16×16 image shown left of the HUD bar. This is optional.
|
||||||
|
|
||||||
### `hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string, format_string_config)`
|
### `hb.register_hudbar(identifier, text_color, label, textures, direction, default_start_value, default_start_max, default_start_hidden, format_string, format_string_config)`
|
||||||
This function registers a new custom HUD bar definition to the HUD bars mod, so it can be later used to be displayed, changed, hidden
|
This function registers a new custom HUD bar definition to the HUD bars mod, so it can be later used to be displayed, changed, hidden
|
||||||
and unhidden on a per-player basis.
|
and unhidden on a per-player basis.
|
||||||
Note this does not yet display the HUD bar.
|
Note this does not yet display the HUD bar.
|
||||||
|
@ -63,6 +63,7 @@ for more information.
|
||||||
* `bar`: The file name of the bar image (as string). This is only used for the `progress_bar` bar type (see `README.txt`, settings section).
|
* `bar`: The file name of the bar image (as string). This is only used for the `progress_bar` bar type (see `README.txt`, settings section).
|
||||||
* `icon`: The file name of the icon, as string. For the `progress_bar` type, it is shown as single image left of the bar, for the two statbar bar types, it is used as the statbar icon and will be repeated. This field can be `nil`, in which case no icon will be used, but this is not recommended, because the HUD bar will be invisible if the one of the statbar bar types is used.
|
* `icon`: The file name of the icon, as string. For the `progress_bar` type, it is shown as single image left of the bar, for the two statbar bar types, it is used as the statbar icon and will be repeated. This field can be `nil`, in which case no icon will be used, but this is not recommended, because the HUD bar will be invisible if the one of the statbar bar types is used.
|
||||||
* `bgicon`: The file name of the background icon, it is used as the background for the modern statbar mode only. This field can be `nil`, in which case no background icon will be displayed in this mode.
|
* `bgicon`: The file name of the background icon, it is used as the background for the modern statbar mode only. This field can be `nil`, in which case no background icon will be displayed in this mode.
|
||||||
|
* `direction`: Either left to right(0), or right to left(1).
|
||||||
* `default_start_value`: If this HUD bar is added to a player, and no initial value is specified, this value will be used as initial current value
|
* `default_start_value`: If this HUD bar is added to a player, and no initial value is specified, this value will be used as initial current value
|
||||||
* `default_max_value`: If this HUD bar is added to a player, and no initial maximum value is specified, this value will be used as initial maximum value
|
* `default_max_value`: If this HUD bar is added to a player, and no initial maximum value is specified, this value will be used as initial maximum value
|
||||||
* `default_start_hidden`: The HUD bar will be initially start hidden by default when added to a player. Use `hb.unhide_hudbar` to unhide it.
|
* `default_start_hidden`: The HUD bar will be initially start hidden by default when added to a player. Use `hb.unhide_hudbar` to unhide it.
|
||||||
|
|
|
@ -124,7 +124,7 @@ function hb.get_hudbar_position_index(identifier)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string, format_string_config)
|
function hb.register_hudbar(identifier, text_color, label, textures, direction, default_start_value, default_start_max, default_start_hidden, format_string, format_string_config)
|
||||||
minetest.log("action", "hb.register_hudbar: "..tostring(identifier))
|
minetest.log("action", "hb.register_hudbar: "..tostring(identifier))
|
||||||
local hudtable = {}
|
local hudtable = {}
|
||||||
local pos, offset
|
local pos, offset
|
||||||
|
@ -133,30 +133,33 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
|
||||||
if hb.settings.alignment_pattern == "stack_up" then
|
if hb.settings.alignment_pattern == "stack_up" then
|
||||||
pos = hb.settings.pos_left
|
pos = hb.settings.pos_left
|
||||||
offset = {
|
offset = {
|
||||||
x = hb.settings.start_offset_left.x,
|
x = direction == 0 and hb.settings.start_offset_left.x or -hb.settings.start_offset_right.x,
|
||||||
y = hb.settings.start_offset_left.y - hb.settings.vmargin * index
|
y = hb.settings.start_offset_left.y - hb.settings.vmargin * index
|
||||||
}
|
}
|
||||||
elseif hb.settings.alignment_pattern == "stack_down" then
|
elseif hb.settings.alignment_pattern == "stack_down" then
|
||||||
pos = hb.settings.pos_left
|
pos = hb.settings.pos_left
|
||||||
offset = {
|
offset = {
|
||||||
x = hb.settings.start_offset_left.x,
|
x = direction == 0 and hb.settings.start_offset_right.x or -hb.settings.start_offset_left.x,
|
||||||
y = hb.settings.start_offset_left.y + hb.settings.vmargin * index
|
y = hb.settings.start_offset_left.y + hb.settings.vmargin * index
|
||||||
}
|
}
|
||||||
else
|
else -- zigzag
|
||||||
if index % 2 == 0 then
|
if index % 2 == 0 then
|
||||||
pos = hb.settings.pos_left
|
pos = hb.settings.pos_left
|
||||||
offset = {
|
offset = {
|
||||||
x = hb.settings.start_offset_left.x,
|
-- -(24+18) = -42. using linear eq, -42 = -258m - 24.
|
||||||
|
x = direction == 0 and hb.settings.start_offset_left.x or (-42+24)/(-258.0) * hb.settings.start_offset_left.x - 24,
|
||||||
y = hb.settings.start_offset_left.y - hb.settings.vmargin * (index/2)
|
y = hb.settings.start_offset_left.y - hb.settings.vmargin * (index/2)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
pos = hb.settings.pos_right
|
pos = hb.settings.pos_right
|
||||||
offset = {
|
offset = {
|
||||||
x = hb.settings.start_offset_right.x,
|
-- 24*10+30 - 24 = 234. using linear eq, 234 = 16m - 24.
|
||||||
|
x = direction == 0 and hb.settings.start_offset_right.x or (234+24)/(16) * hb.settings.start_offset_right.x - 24,
|
||||||
y = hb.settings.start_offset_right.y - hb.settings.vmargin * ((index-1)/2)
|
y = hb.settings.start_offset_right.y - hb.settings.vmargin * ((index-1)/2)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if format_string == nil then
|
if format_string == nil then
|
||||||
format_string = N("@1: @2/@3")
|
format_string = N("@1: @2/@3")
|
||||||
end
|
end
|
||||||
|
@ -181,6 +184,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
|
||||||
local state = {}
|
local state = {}
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
local bgscale, iconscale, text, barnumber, bgiconnumber
|
local bgscale, iconscale, text, barnumber, bgiconnumber
|
||||||
|
|
||||||
if start_max == 0 or start_hidden then
|
if start_max == 0 or start_hidden then
|
||||||
bgscale = { x=0, y=0 }
|
bgscale = { x=0, y=0 }
|
||||||
else
|
else
|
||||||
|
@ -197,6 +201,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
|
||||||
bgiconnumber = hb.settings.statbar_length
|
bgiconnumber = hb.settings.statbar_length
|
||||||
text = make_label(format_string, format_string_config, label, start_value, start_max)
|
text = make_label(format_string, format_string_config, label, start_value, start_max)
|
||||||
end
|
end
|
||||||
|
|
||||||
if hb.settings.bar_type == "progress_bar" then
|
if hb.settings.bar_type == "progress_bar" then
|
||||||
ids.bg = player:hud_add({
|
ids.bg = player:hud_add({
|
||||||
hud_elem_type = "image",
|
hud_elem_type = "image",
|
||||||
|
@ -219,6 +224,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local bar_image, bgicon, bar_size
|
local bar_image, bgicon, bar_size
|
||||||
if hb.settings.bar_type == "progress_bar" then
|
if hb.settings.bar_type == "progress_bar" then
|
||||||
bar_image = textures.bar
|
bar_image = textures.bar
|
||||||
|
@ -234,10 +240,12 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
|
||||||
bgicon = textures.bgicon
|
bgicon = textures.bgicon
|
||||||
bar_size = {x=24, y=24}
|
bar_size = {x=24, y=24}
|
||||||
end
|
end
|
||||||
|
|
||||||
local text2
|
local text2
|
||||||
if hb.settings.bar_type == "statbar_modern" then
|
if hb.settings.bar_type == "statbar_modern" then
|
||||||
text2 = bgicon
|
text2 = bgicon
|
||||||
end
|
end
|
||||||
|
|
||||||
ids.bar = player:hud_add({
|
ids.bar = player:hud_add({
|
||||||
hud_elem_type = "statbar",
|
hud_elem_type = "statbar",
|
||||||
position = pos,
|
position = pos,
|
||||||
|
@ -247,7 +255,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
|
||||||
item = bgiconnumber,
|
item = bgiconnumber,
|
||||||
alignment = {x=-1,y=-1},
|
alignment = {x=-1,y=-1},
|
||||||
offset = offset,
|
offset = offset,
|
||||||
direction = 0,
|
direction = direction,
|
||||||
size = bar_size,
|
size = bar_size,
|
||||||
z_index = 1,
|
z_index = 1,
|
||||||
})
|
})
|
||||||
|
@ -258,7 +266,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
|
||||||
text = text,
|
text = text,
|
||||||
alignment = {x=1,y=1},
|
alignment = {x=1,y=1},
|
||||||
number = text_color,
|
number = text_color,
|
||||||
direction = 0,
|
direction = direction,
|
||||||
offset = { x = offset.x + 2, y = offset.y - 1},
|
offset = { x = offset.x + 2, y = offset.y - 1},
|
||||||
z_index = 2,
|
z_index = 2,
|
||||||
})
|
})
|
||||||
|
@ -298,7 +306,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
|
||||||
hudtable.default_start_max = default_start_max
|
hudtable.default_start_max = default_start_max
|
||||||
|
|
||||||
hb.hudbars_count= hb.hudbars_count + 1
|
hb.hudbars_count= hb.hudbars_count + 1
|
||||||
|
|
||||||
hb.hudtables[identifier] = hudtable
|
hb.hudtables[identifier] = hudtable
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -359,6 +367,7 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon
|
||||||
if new_text_color ~= nil then
|
if new_text_color ~= nil then
|
||||||
player:hud_change(hudtable.hudids[name].text, "number", new_text_color)
|
player:hud_change(hudtable.hudids[name].text, "number", new_text_color)
|
||||||
end
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
if new_icon ~= nil and hudtable.hudids[name].bar ~= nil then
|
if new_icon ~= nil and hudtable.hudids[name].bar ~= nil then
|
||||||
player:hud_change(hudtable.hudids[name].bar, "text", new_icon)
|
player:hud_change(hudtable.hudids[name].bar, "text", new_icon)
|
||||||
|
@ -474,8 +483,8 @@ end
|
||||||
|
|
||||||
--register built-in HUD bars
|
--register built-in HUD bars
|
||||||
if minetest.settings:get_bool("enable_damage") or hb.settings.forceload_default_hudbars then
|
if minetest.settings:get_bool("enable_damage") or hb.settings.forceload_default_hudbars then
|
||||||
hb.register_hudbar("health", 0xFFFFFF, S("Health"), { bar = "hudbars_bar_health.png", icon = "hudbars_icon_health.png", bgicon = "hudbars_bgicon_health.png" }, 20, 20, false)
|
hb.register_hudbar("health", 0xFFFFFF, S("Health"), { bar = "hudbars_bar_health.png", icon = "hudbars_icon_health.png", bgicon = "hudbars_bgicon_health.png" }, 0, 20, 20, false)
|
||||||
hb.register_hudbar("breath", 0xFFFFFF, S("Breath"), { bar = "hudbars_bar_breath.png", icon = "hudbars_icon_breath.png", bgicon = "hudbars_bgicon_breath.png" }, 10, 10, true)
|
hb.register_hudbar("breath", 0xFFFFFF, S("Breath"), { bar = "hudbars_bar_breath.png", icon = "hudbars_icon_breath.png", bgicon = "hudbars_bgicon_breath.png" }, 1, 10, 10, true)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function hide_builtin(player)
|
local function hide_builtin(player)
|
||||||
|
@ -520,7 +529,7 @@ local function update_hud(player, has_damage)
|
||||||
--air
|
--air
|
||||||
local breath_max = player:get_properties().breath_max
|
local breath_max = player:get_properties().breath_max
|
||||||
local breath = player:get_breath()
|
local breath = player:get_breath()
|
||||||
|
|
||||||
if breath >= breath_max and hb.settings.autohide_breath == true then
|
if breath >= breath_max and hb.settings.autohide_breath == true then
|
||||||
hb.hide_hudbar(player, "breath")
|
hb.hide_hudbar(player, "breath")
|
||||||
else
|
else
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
mcl_bossbars = {
|
mcl_bossbars = {
|
||||||
bars = {},
|
bars = {},
|
||||||
huds = {},
|
huds = {},
|
||||||
|
static = {},
|
||||||
colors = {"light_purple", "blue", "red", "green", "yellow", "dark_purple", "white"},
|
colors = {"light_purple", "blue", "red", "green", "yellow", "dark_purple", "white"},
|
||||||
|
max_bars = tonumber(minetest.settings:get("max_bossbars")) or 4
|
||||||
}
|
}
|
||||||
|
|
||||||
function mcl_bossbars.recalculate_colors()
|
function mcl_bossbars.recalculate_colors()
|
||||||
|
@ -27,21 +29,66 @@ function mcl_bossbars.recalculate_colors()
|
||||||
mcl_bossbars.colors_sorted = sorted
|
mcl_bossbars.colors_sorted = sorted
|
||||||
end
|
end
|
||||||
|
|
||||||
function mcl_bossbars.update_bar(player, text, color, percentage)
|
local function get_color_info(color, percentage)
|
||||||
local cdef = mcl_bossbars.colors_sorted[color]
|
local cdef = mcl_bossbars.colors_sorted[color]
|
||||||
table.insert(mcl_bossbars.bars[player:get_player_name()], {color = cdef.hex, text = text, image = string.format(cdef.image, percentage)})
|
return cdef.hex, string.format(cdef.image, percentage)
|
||||||
|
end
|
||||||
|
|
||||||
|
local last_id = 0
|
||||||
|
|
||||||
|
function mcl_bossbars.add_bar(player, def)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
local bars = mcl_bossbars.bars[name]
|
||||||
|
local bar = {text = def.text}
|
||||||
|
bar.color, bar.image = get_color_info(def.color, def.percentage)
|
||||||
|
if def.dynamic then
|
||||||
|
for _, other in pairs(bars) do
|
||||||
|
if not other.id and other.color == bar.color and (other.original_text or other.text) == bar.text and other.image == bar.image then
|
||||||
|
if not other.count then
|
||||||
|
other.count = 1
|
||||||
|
other.original_text = other.text
|
||||||
|
end
|
||||||
|
other.count = other.count + 1
|
||||||
|
other.text = other.original_text .. " x" .. other.count
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
table.insert(bars, bar)
|
||||||
|
if not def.dynamic then
|
||||||
|
bar.raw_color = def.color
|
||||||
|
bar.id = last_id + 1
|
||||||
|
last_id = bar.id
|
||||||
|
mcl_bossbars.static[bar.id] = bar
|
||||||
|
return id
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function mcl_bossbars.remove_bar(id)
|
||||||
|
mcl_bossbars.static[id].bar.static = false
|
||||||
|
mcl_bossbars.static[id] = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function mcl_bossbars.update_bar(id, def)
|
||||||
|
local old = mcl_bossbars.static[id]
|
||||||
|
old.color = get_color_info(def.color or old.raw_color, def.percentage or old.percentage)
|
||||||
|
old.text = def.text or old.text
|
||||||
end
|
end
|
||||||
|
|
||||||
function mcl_bossbars.update_boss(luaentity, name, color)
|
function mcl_bossbars.update_boss(luaentity, name, color)
|
||||||
local object = luaentity.object
|
local object = luaentity.object
|
||||||
local text = luaentity.nametag
|
local bardef = {
|
||||||
if not text or text == "" then
|
text = luaentity.nametag,
|
||||||
text = name
|
percentage = math.floor(luaentity.health / luaentity.hp_max * 100),
|
||||||
|
color = color,
|
||||||
|
dynamic = true,
|
||||||
|
}
|
||||||
|
if not bardef.text or bardef.text == "" then
|
||||||
|
bardef.text = name
|
||||||
end
|
end
|
||||||
local percentage = math.floor(luaentity.health / luaentity.hp_max * 100)
|
|
||||||
for _, obj in pairs(minetest.get_objects_inside_radius(object:get_pos(), 128)) do
|
for _, obj in pairs(minetest.get_objects_inside_radius(object:get_pos(), 128)) do
|
||||||
if obj:is_player() then
|
if obj:is_player() then
|
||||||
mcl_bossbars.update_bar(obj, text, color, percentage)
|
mcl_bossbars.add_bar(obj, bardef)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -55,6 +102,11 @@ end)
|
||||||
minetest.register_on_leaveplayer(function(player)
|
minetest.register_on_leaveplayer(function(player)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
mcl_bossbars.huds[name] = nil
|
mcl_bossbars.huds[name] = nil
|
||||||
|
for _, bar in pairs(mcl_bossbars.bars[name]) do
|
||||||
|
if bar.id then
|
||||||
|
mcl_bossbars.static[bar.id] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
mcl_bossbars.bars[name] = nil
|
mcl_bossbars.bars[name] = nil
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
@ -64,34 +116,41 @@ minetest.register_globalstep(function()
|
||||||
local bars = mcl_bossbars.bars[name]
|
local bars = mcl_bossbars.bars[name]
|
||||||
local huds = mcl_bossbars.huds[name]
|
local huds = mcl_bossbars.huds[name]
|
||||||
local huds_new = {}
|
local huds_new = {}
|
||||||
|
local bars_new = {}
|
||||||
local i = 0
|
local i = 0
|
||||||
|
|
||||||
while #huds > 0 or #bars > 0 do
|
while #huds > 0 or #bars > 0 do
|
||||||
local bar = table.remove(bars, 1)
|
local bar = table.remove(bars, 1)
|
||||||
local hud = table.remove(huds, 1)
|
local hud = table.remove(huds, 1)
|
||||||
|
|
||||||
|
if bar and bar.id then
|
||||||
|
table.insert(bars_new, bar)
|
||||||
|
end
|
||||||
|
|
||||||
if bar and not hud then
|
if bar and not hud then
|
||||||
hud = {
|
if i < mcl_bossbars.max_bars then
|
||||||
color = bar.color,
|
hud = {
|
||||||
image = bar.image,
|
color = bar.color,
|
||||||
text = bar.text,
|
image = bar.image,
|
||||||
text_id = player:hud_add({
|
|
||||||
hud_elem_type = "text",
|
|
||||||
text = bar.text,
|
text = bar.text,
|
||||||
number = bar.color,
|
text_id = player:hud_add({
|
||||||
position = {x = 0.5, y = 0},
|
hud_elem_type = "text",
|
||||||
alignment = {x = 0, y = 1},
|
text = bar.text,
|
||||||
offset = {x = 0, y = i * 40},
|
number = bar.color,
|
||||||
}),
|
position = {x = 0.5, y = 0},
|
||||||
image_id = player:hud_add({
|
alignment = {x = 0, y = 1},
|
||||||
hud_elem_type = "image",
|
offset = {x = 0, y = i * 40},
|
||||||
text = bar.image,
|
}),
|
||||||
position = {x = 0.5, y = 0},
|
image_id = player:hud_add({
|
||||||
alignment = {x = 0, y = 1},
|
hud_elem_type = "image",
|
||||||
offset = {x = 0, y = i * 40 + 25},
|
text = bar.image,
|
||||||
scale = {x = 3, y = 3},
|
position = {x = 0.5, y = 0},
|
||||||
}),
|
alignment = {x = 0, y = 1},
|
||||||
}
|
offset = {x = 0, y = i * 40 + 25},
|
||||||
|
scale = {x = 3, y = 3},
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
end
|
||||||
elseif hud and not bar then
|
elseif hud and not bar then
|
||||||
player:hud_remove(hud.text_id)
|
player:hud_remove(hud.text_id)
|
||||||
player:hud_remove(hud.image_id)
|
player:hud_remove(hud.image_id)
|
||||||
|
@ -118,6 +177,7 @@ minetest.register_globalstep(function()
|
||||||
end
|
end
|
||||||
|
|
||||||
mcl_bossbars.huds[name] = huds_new
|
mcl_bossbars.huds[name] = huds_new
|
||||||
|
mcl_bossbars.bars[name] = bars_new
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ local function custom_hud(player)
|
||||||
end
|
end
|
||||||
|
|
||||||
--register and define armor HUD bar
|
--register and define armor HUD bar
|
||||||
hb.register_hudbar("armor", 0xFFFFFF, S("Armor"), { icon = "hbarmor_icon.png", bgicon = "hbarmor_bgicon.png", bar = "hbarmor_bar.png" }, 0, 20, mcl_hbarmor.autohide)
|
hb.register_hudbar("armor", 0xFFFFFF, S("Armor"), { icon = "hbarmor_icon.png", bgicon = "hbarmor_bgicon.png", bar = "hbarmor_bar.png" }, 0, 0, 20, mcl_hbarmor.autohide)
|
||||||
|
|
||||||
function mcl_hbarmor.get_armor(player)
|
function mcl_hbarmor.get_armor(player)
|
||||||
if not player or not armor.def then
|
if not player or not armor.def then
|
||||||
|
|
|
@ -105,6 +105,11 @@ minetest.register_abm({
|
||||||
if preparing[minetest.pos_to_string(pos)] then return end
|
if preparing[minetest.pos_to_string(pos)] then return end
|
||||||
for _, obj in pairs(minetest.get_objects_inside_radius(pos, 1)) do
|
for _, obj in pairs(minetest.get_objects_inside_radius(pos, 1)) do
|
||||||
if obj:get_hp() > 0 then
|
if obj:get_hp() > 0 then
|
||||||
|
local luaentity = obj:get_luaentity()
|
||||||
|
if luaentity and luaentity.name == "mcl_throwing:ender_pearl" then
|
||||||
|
obj:remove()
|
||||||
|
obj = luaentity._thrower
|
||||||
|
end
|
||||||
teleport(pos, obj)
|
teleport(pos, obj)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
|
@ -89,10 +89,10 @@ function mcl_hunger.update_exhaustion_hud(player, exhaustion)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- register saturation hudbar
|
-- register saturation hudbar
|
||||||
hb.register_hudbar("hunger", 0xFFFFFF, S("Food"), { icon = "hbhunger_icon.png", bgicon = "hbhunger_bgicon.png", bar = "hbhunger_bar.png" }, 20, 20, false)
|
hb.register_hudbar("hunger", 0xFFFFFF, S("Food"), { icon = "hbhunger_icon.png", bgicon = "hbhunger_bgicon.png", bar = "hbhunger_bar.png" }, 1, 20, 20, false)
|
||||||
if mcl_hunger.debug then
|
if mcl_hunger.debug then
|
||||||
hb.register_hudbar("saturation", 0xFFFFFF, S("Saturation"), { icon = "mcl_hunger_icon_saturation.png", bgicon = "mcl_hunger_bgicon_saturation.png", bar = "mcl_hunger_bar_saturation.png" }, mcl_hunger.SATURATION_INIT, 200, false, S("%s: %.1f/%d"))
|
hb.register_hudbar("saturation", 0xFFFFFF, S("Saturation"), { icon = "mcl_hunger_icon_saturation.png", bgicon = "mcl_hunger_bgicon_saturation.png", bar = "mcl_hunger_bar_saturation.png" }, 1, mcl_hunger.SATURATION_INIT, 200, false, S("%s: %.1f/%d"))
|
||||||
hb.register_hudbar("exhaustion", 0xFFFFFF, S("Exhaust."), { icon = "mcl_hunger_icon_exhaustion.png", bgicon = "mcl_hunger_bgicon_exhaustion.png", bar = "mcl_hunger_bar_exhaustion.png" }, 0, mcl_hunger.EXHAUST_LVL, false, S("%s: %d/%d"))
|
hb.register_hudbar("exhaustion", 0xFFFFFF, S("Exhaust."), { icon = "mcl_hunger_icon_exhaustion.png", bgicon = "mcl_hunger_bgicon_exhaustion.png", bar = "mcl_hunger_bar_exhaustion.png" }, 1, 0, mcl_hunger.EXHAUST_LVL, false, S("%s: %d/%d"))
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
|
|
|
@ -97,6 +97,9 @@ animated_chests (Animated chests) bool true
|
||||||
# Whether to preview the player in inventory in 3D (requires Minetest 5.4)
|
# Whether to preview the player in inventory in 3D (requires Minetest 5.4)
|
||||||
3d_player_preview (3D Player preview) bool true
|
3d_player_preview (3D Player preview) bool true
|
||||||
|
|
||||||
|
# The maximum number of boss bars to simultaniously display on the screen
|
||||||
|
max_bossbars (Maximum Boss bars) int 4
|
||||||
|
|
||||||
[Experimental]
|
[Experimental]
|
||||||
# Whether ice is translucent. If disabled, ice is fully opaque.
|
# Whether ice is translucent. If disabled, ice is fully opaque.
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in New Issue