diff --git a/api.lua b/api.lua index f62cec1..ab36dca 100644 --- a/api.lua +++ b/api.lua @@ -1,35 +1,35 @@ -- translation & mod checks -local S = minetest.get_translator("mobs") -local FS = function(...) return minetest.formspec_escape(S(...)) end -local use_cmi = minetest.global_exists("cmi") -local use_mc2 = minetest.get_modpath("mcl_core") -- MineClonia support -local use_vh1 = minetest.get_modpath("visual_harm_1ndicators") -local use_tr = minetest.get_modpath("toolranks") -local use_invisibility = minetest.get_modpath("invisibility") +local S = core.get_translator("mobs") +local FS = function(...) return core.formspec_escape(S(...)) end +local use_cmi = core.global_exists("cmi") +local use_mc2 = core.get_modpath("mcl_core") -- MineClonia support +local use_vh1 = core.get_modpath("visual_harm_1ndicators") +local use_tr = core.get_modpath("toolranks") +local use_invisibility = core.get_modpath("invisibility") -- node check helper local function has(nodename) - return minetest.registered_nodes[nodename] and nodename + return core.registered_nodes[nodename] and nodename end -- global table mobs = { - mod = "redo", version = "20250501", + mod = "redo", version = "20250504", spawning_mobs = {}, translate = S, - node_snow = has(minetest.registered_aliases["mapgen_snow"]) + node_snow = has(core.registered_aliases["mapgen_snow"]) or has("mcl_core:snow") or has("default:snow") or "air", - node_dirt = has(minetest.registered_aliases["mapgen_dirt"]) + node_dirt = has(core.registered_aliases["mapgen_dirt"]) or has("mcl_core:dirt") or has("default:dirt") or "mobs:fallback_node" } mobs.fallback_node = mobs.node_dirt -- load compatibility check function -dofile(minetest.get_modpath("mobs") .. "/compatibility.lua") +dofile(core.get_modpath("mobs") .. "/compatibility.lua") -- localize common functions @@ -38,7 +38,7 @@ local square, random = math.sqrt, math.random local sin, cos, rad, deg = math.sin, math.cos, math.rad, math.deg local floor, ceil, vdirection = math.floor, math.ceil, vector.direction local vmultiply, vsubtract = vector.multiply, vector.subtract -local settings, atann = minetest.settings, math.atan +local settings, atann = core.settings, math.atan local function atan(x) if not x or x ~= x then return 0 else return atann(x) end end @@ -46,9 +46,9 @@ local table_copy, table_remove = table.copy, table.remove -- creative check -local creative_cache = minetest.settings:get_bool("creative_mode") +local creative_cache = core.settings:get_bool("creative_mode") function mobs.is_creative(name) - return creative_cache or minetest.check_player_privs(name, {creative = true}) + return creative_cache or core.check_player_privs(name, {creative = true}) end -- load settings @@ -104,8 +104,8 @@ local pathfinding_searchdistance = tonumber( -- show peaceful mode message if peaceful_only then - minetest.register_on_joinplayer(function(player) - minetest.chat_send_player(player:get_player_name(), + core.register_on_joinplayer(function(player) + core.chat_send_player(player:get_player_name(), S("** Peaceful Mode Active - No Monsters Will Spawn")) end) end @@ -116,7 +116,7 @@ local aoc_range = tonumber(settings:get("active_block_range")) * 16 -- can we attack Creatura mobs ? -local creatura = minetest.get_modpath("creatura") and +local creatura = core.get_modpath("creatura") and settings:get_bool("mobs_attack_creatura") == true -- default mob settings @@ -208,7 +208,7 @@ function mob_class:mob_sound(sound) pitch = pitch + random(-10, 10) * 0.005 -- random pitch difference - minetest.sound_play(sound, { + core.sound_play(sound, { object = self.object, gain = 1.0, max_hear_distance = (self.sounds and self.sounds.distance) or 10, @@ -242,7 +242,7 @@ end local function is_player(player) - if player and type(player) == "userdata" and minetest.is_player(player) then + if player and type(player) == "userdata" and core.is_player(player) then return true end end @@ -256,7 +256,7 @@ function mob_class:collision() local prop = self.object:get_properties() local width = -prop.collisionbox[1] + prop.collisionbox[4] + 0.5 - for _,object in pairs(minetest.get_objects_inside_radius(pos, width)) do + for _,object in pairs(core.get_objects_inside_radius(pos, width)) do if object:is_player() then @@ -289,7 +289,7 @@ local function check_for(look_for, look_inside) local group = str:split(":")[2] or "" - if minetest.get_item_group(look_for, group) ~= 0 then return true end + if core.get_item_group(look_for, group) ~= 0 then return true end end end end @@ -319,7 +319,7 @@ function mob_class:set_velocity(v) local yaw = (self.object:get_yaw() or 0) + self.rotate -- is mob standing in liquid? - local visc = min(minetest.registered_nodes[self.standing_in].liquid_viscosity, 7) + local visc = min(core.registered_nodes[self.standing_in].liquid_viscosity, 7) -- only slow moving mobs when inside a viscous fluid they cannot swim in -- e.g. fish in water, spiders in cobweb @@ -407,7 +407,7 @@ end function mob_class:line_of_sight(pos1, pos2) - local ray = minetest.raycast(pos1, pos2, true, false) -- ignore entities + local ray = core.raycast(pos1, pos2, true, false) -- ignore entities local thing = ray:next() local name, nodedef @@ -415,8 +415,8 @@ function mob_class:line_of_sight(pos1, pos2) if thing.type == "node" then - name = minetest.get_node(thing.under).name - nodedef = minetest.registered_items[name] + name = core.get_node(thing.under).name + nodedef = core.registered_items[name] if nodedef and nodedef.walkable then return false end end @@ -434,7 +434,7 @@ function mob_class:attempt_flight_correction(override) if self:flight_check() and override ~= true then return true end local pos = self.object:get_pos() ; if not pos then return true end - local flyable_nodes = minetest.find_nodes_in_area( + local flyable_nodes = core.find_nodes_in_area( {x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, self.fly_in) @@ -443,7 +443,7 @@ function mob_class:attempt_flight_correction(override) local escape_target = flyable_nodes[random(#flyable_nodes)] -- stop swimming mobs moving above water surface - if escape_target.y > pos.y and #minetest.find_nodes_in_area( + if escape_target.y > pos.y and #core.find_nodes_in_area( {x = escape_target.x, y = escape_target.y + 1, z = escape_target.z}, {x = escape_target.x, y = escape_target.y + 1, z = escape_target.z}, self.fly_in) == 0 then @@ -461,7 +461,7 @@ end function mob_class:flight_check() - local def = minetest.registered_nodes[self.standing_in] + local def = core.registered_nodes[self.standing_in] if not def then return false end @@ -502,7 +502,7 @@ function mob_class:do_stay_near() if not pos or random(chance) > 1 then return false end local r = self.view_range - local nearby_nodes = minetest.find_nodes_in_area( + local nearby_nodes = core.find_nodes_in_area( {x = pos.x - r, y = pos.y - 1, z = pos.z - r}, {x = pos.x + r, y = pos.y + 1, z = pos.z + r}, self.stay_near[1]) @@ -523,7 +523,7 @@ local function effect(pos, amount, texture, min_size, max_size, radius, grav, gl grav = grav or -10 fall = fall == true and 0 or fall == false and radius or -radius - minetest.add_particlespawner({ + core.add_particlespawner({ amount = amount, time = 0.25, minpos = pos, maxpos = pos, @@ -641,7 +641,7 @@ function mob_class:item_drop() local wield_stack = self.cause_of_death.puncher:get_wielded_item() local wield_name = wield_stack:get_name() local wield_stack_meta = wield_stack:get_meta() - local item_def = minetest.registered_items[wield_name] + local item_def = core.registered_items[wield_name] local item_looting = item_def and item_def.tool_capabilities and item_def.tool_capabilities.looting_level or 0 @@ -661,7 +661,7 @@ function mob_class:item_drop() -- cook items for a hot death if self.cause_of_death.hot then - local output = minetest.get_craft_result( + local output = core.get_craft_result( {method = "cooking", width = 1, items = {item}}) if output and output.item and not output.item:is_empty() then @@ -671,7 +671,7 @@ function mob_class:item_drop() -- only drop rare items (drops.min = 0) if killed by player if death_by_player or self.drops[n].min ~= 0 then - obj = minetest.add_item(pos, ItemStack(item .. " " .. (num + looting))) + obj = core.add_item(pos, ItemStack(item .. " " .. (num + looting))) end if obj and obj:get_luaentity() then @@ -783,7 +783,7 @@ function mob_class:check_for_death(cmi_cause) self:set_velocity(0) self:set_animation("die") - minetest.after(length, function(self) + core.after(length, function(self) if self.object:get_luaentity() then @@ -811,11 +811,11 @@ end local function node_ok(pos, fallback) - local node = minetest.get_node_or_nil(pos) + local node = core.get_node_or_nil(pos) - if node and minetest.registered_nodes[node.name] then return node end + if node and core.registered_nodes[node.name] then return node end - return minetest.registered_nodes[(fallback or mobs.fallback_node)] + return core.registered_nodes[(fallback or mobs.fallback_node)] end function mobs:node_ok(pos, fallback) @@ -826,7 +826,7 @@ end local function is_node_dangerous(self, nodename) - local def = minetest.registered_nodes[nodename] + local def = core.registered_nodes[nodename] if (self.water_damage and self.water_damage > 0 and def.groups.water) or (self.lava_damage and self.lava_damage > 0 and def.groups.lava) @@ -866,7 +866,7 @@ function mob_class:is_at_cliff() local pos = self.object:get_pos() local ypos = pos.y + prop.collisionbox[2] -- just above floor - local free_fall, blocker = minetest.line_of_sight( + local free_fall, blocker = core.line_of_sight( {x = pos.x + dir_x, y = ypos, z = pos.z + dir_z}, {x = pos.x + dir_x, y = ypos - self.fear_height, z = pos.z + dir_z}) @@ -877,7 +877,7 @@ function mob_class:is_at_cliff() -- will we drop onto dangerous node? if is_node_dangerous(self, bnode.name) then return true end - local def = minetest.registered_nodes[bnode.name] + local def = core.registered_nodes[bnode.name] return (not def and def.walkable) end @@ -888,7 +888,7 @@ function mob_class:is_inside(itemtable) local cb = self.object:get_properties().collisionbox local pos = self.object:get_pos() - local nn = minetest.find_nodes_in_area( + local nn = core.find_nodes_in_area( vector.offset(pos, cb[1], cb[2], cb[3]), vector.offset(pos, cb[4], cb[5], cb[6]), itemtable) @@ -903,7 +903,7 @@ function mob_class:do_env_damage() self:update_tag() - self.time_of_day = minetest.get_timeofday() + self.time_of_day = core.get_timeofday() -- halt mob when standing in ignore node if self.standing_in == "ignore" then @@ -912,7 +912,7 @@ function mob_class:do_env_damage() local prop = self.object:get_properties() local py = {x = pos.x, y = pos.y + prop.collisionbox[5], z = pos.z} - local nodef = minetest.registered_nodes[self.standing_in] + local nodef = core.registered_nodes[self.standing_in] -- water damage if self.water_damage ~= 0 and nodef.groups.water then @@ -987,9 +987,9 @@ function mob_class:do_env_damage() -- if max set to 16 then only natural sunlight can kill mob if self.light_damage_max == 16 then - light = minetest.get_natural_light(pos) or 0 + light = core.get_natural_light(pos) or 0 else - light = minetest.get_node_light(pos) or 0 + light = core.get_node_light(pos) or 0 end if light >= self.light_damage_min and light <= self.light_damage_max then @@ -1040,20 +1040,20 @@ function mob_class:do_jump() or self.fly or self.child then return false end -- only jump if standing on solid node that allows it - local ndef = minetest.registered_nodes[self.standing_on] + local ndef = core.registered_nodes[self.standing_on] if ndef.walkable == false or (ndef.groups and ndef.groups.disable_jump == 1) then return false end -- is there anything stopping us from jumping up onto a block? - local blocked = minetest.registered_nodes[self.looking_above].walkable + local blocked = core.registered_nodes[self.looking_above].walkable -- if mob can leap then remove blockages and let them try if self.can_leap then blocked = false ; self.facing_fence = false end -- what node are we looking at? - ndef = minetest.registered_nodes[self.looking_at] + ndef = core.registered_nodes[self.looking_at] -- jump if possible if self.jump_height > 0 @@ -1066,7 +1066,7 @@ function mob_class:do_jump() self.object:set_velocity(vel) - minetest.after(0.3, function(self, vel) -- move forward when in air + core.after(0.3, function(self, vel) -- move forward when in air if self.object:get_luaentity() then @@ -1104,7 +1104,7 @@ local function entity_physics(pos, radius) radius = radius * 2 - local objs = minetest.get_objects_inside_radius(pos, radius) + local objs = core.get_objects_inside_radius(pos, radius) local obj_pos, dist for n = 1, #objs do @@ -1208,7 +1208,7 @@ function mob_class:breed() effect({x = pos.x, y = pos.y + prop[5], z = pos.z}, 8, "mobs_heart_particle.png", 3, 4, 1, 0.1, 1, true) - local objs = minetest.get_objects_inside_radius(pos, 3) + local objs = core.get_objects_inside_radius(pos, 3) local ent for n = 1, #objs do @@ -1253,13 +1253,13 @@ function mob_class:breed() -- have we reached active mob limit if at_limit() then - minetest.chat_send_player(self.owner, S("Active Mob Limit Reached!") + core.chat_send_player(self.owner, S("Active Mob Limit Reached!") .. " (" .. active_mobs .. " / " .. active_limit .. ")") return end -- spawn baby - minetest.after(5, function(self, ent) + core.after(5, function(self, ent) if not self.object:get_luaentity() then return end @@ -1325,7 +1325,7 @@ function mob_class:replace(pos) pos.y = pos.y + y_offset - local found = minetest.find_nodes_in_area( + local found = core.find_nodes_in_area( {x = pos.x - reach, y = pos.y, z = pos.z - reach}, {x = pos.x + reach, y = pos.y, z = pos.z + reach}, what) @@ -1333,7 +1333,7 @@ function mob_class:replace(pos) pos = found[random(#found)] --- print("replace node = ".. minetest.get_node(pos).name, pos.y) +-- print("replace node = ".. core.get_node(pos).name, pos.y) if self.on_replace then @@ -1342,13 +1342,13 @@ function mob_class:replace(pos) -- pass node name when using table or groups if type(oldnode) == "table" or oldnode:find("group:") then - oldnode = minetest.get_node(pos).name + oldnode = core.get_node(pos).name end if self:on_replace(pos, oldnode, newnode) == false then return end end - minetest.set_node(pos, {name = with}) + core.set_node(pos, {name = with}) self:mob_sound(self.sounds.replace) end @@ -1360,7 +1360,7 @@ function mob_class:check_item_pickup(pos) if not self.on_pick_up or not self.pick_up or #self.pick_up == 0 then return end - for _,o in pairs(minetest.get_objects_inside_radius(pos, 2)) do + for _,o in pairs(core.get_objects_inside_radius(pos, 2)) do local l = o:get_luaentity() @@ -1395,27 +1395,27 @@ end local function can_dig_drop(pos) - if minetest.is_protected(pos, "") then return false end + if core.is_protected(pos, "") then return false end local node = node_ok(pos, "air").name - local ndef = minetest.registered_nodes[node] + local ndef = core.registered_nodes[node] if node ~= "ignore" and ndef and ndef.drawtype ~= "airlike" and not ndef.groups.level and not ndef.groups.unbreakable and not ndef.groups.liquid then - local drops = minetest.get_node_drops(node) + local drops = core.get_node_drops(node) for _, item in ipairs(drops) do - minetest.add_item({ + core.add_item({ x = pos.x - 0.5 + random(), y = pos.y - 0.5 + random(), z = pos.z - 0.5 + random() }, item) end - minetest.remove_node(pos) + core.remove_node(pos) return true end @@ -1423,7 +1423,7 @@ end -- pathfinder mod check and settings -local pathfinder_mod = minetest.get_modpath("pathfinder") +local pathfinder_mod = core.get_modpath("pathfinder") local los_switcher = false local height_switcher = false @@ -1444,7 +1444,7 @@ function mob_class:smart_mobs(s, p, dist, dtime) self.path.lastpos = {x = s.x, y = s.y, z = s.z} local use_pathfind = false - local has_lineofsight = minetest.line_of_sight( + local has_lineofsight = core.line_of_sight( {x = s.x, y = (s.y) + .5, z = s.z}, {x = target_pos.x, y = (target_pos.y) + 1.5, z = target_pos.z}, .2) @@ -1459,7 +1459,7 @@ function mob_class:smart_mobs(s, p, dist, dtime) los_switcher = true ; use_pathfind = false - minetest.after(1, function(self) + core.after(1, function(self) if not self.object:get_luaentity() then return end @@ -1473,7 +1473,7 @@ function mob_class:smart_mobs(s, p, dist, dtime) use_pathfind = true self.path.stuck_timer = 0 - minetest.after(1, function(self) + core.after(1, function(self) if not self.object:get_luaentity() then return end @@ -1486,7 +1486,7 @@ function mob_class:smart_mobs(s, p, dist, dtime) use_pathfind = true self.path.stuck_timer = 0 - minetest.after(1, function(self) + core.after(1, function(self) if not self.object:get_luaentity() then return end @@ -1509,7 +1509,7 @@ function mob_class:smart_mobs(s, p, dist, dtime) -- round position to avoid getting stuck in walls s.x = floor(s.x + 0.5) ; s.z = floor(s.z + 0.5) - local ssight, sground = minetest.line_of_sight(s, + local ssight, sground = core.line_of_sight(s, {x = s.x, y = s.y - 4, z = s.z}, 1) -- determine node above ground (adjust height for player models) @@ -1537,7 +1537,7 @@ function mob_class:smart_mobs(s, p, dist, dtime) if pathfinder_mod then self.path.way = pathfinder.find_path(s, p1, self, dtime) else - self.path.way = minetest.find_path(s, p1, pathfinding_searchdistance, + self.path.way = core.find_path(s, p1, pathfinding_searchdistance, jumpheight, dropheight, pathfinding_algorithm) end @@ -1548,7 +1548,7 @@ function mob_class:smart_mobs(s, p, dist, dtime) for _,pos in pairs(self.path.way) do - minetest.add_particle({ + core.add_particle({ pos = pos, velocity = {x = 0, y = 0, z = 0}, acceleration = {x = 0, y = 0, z = 0}, @@ -1577,12 +1577,12 @@ function mob_class:smart_mobs(s, p, dist, dtime) if p1.y > (s.y + 1) then -- build upwards - if not minetest.is_protected(s, "") then + if not core.is_protected(s, "") then - local ndef1 = minetest.registered_nodes[self.standing_in] + local ndef1 = core.registered_nodes[self.standing_in] if ndef1 and (ndef1.buildable_to or ndef1.groups.liquid) then - minetest.set_node(s, {name = mobs.fallback_node}) + core.set_node(s, {name = mobs.fallback_node}) end end @@ -1640,7 +1640,7 @@ end -- temporary entity for go_to() function -minetest.register_entity("mobs:_pos", { +core.register_entity("mobs:_pos", { initial_properties = { visual = "sprite", texture = "", hp_max = 1, physical = false, static_save = false, pointable = false, is_visible = false @@ -1658,7 +1658,7 @@ minetest.register_entity("mobs:_pos", { function mob_class:go_to(pos) - local obj = minetest.add_entity(pos, "mobs:_pos") + local obj = core.add_entity(pos, "mobs:_pos") if obj and obj:get_luaentity() then self:do_attack(obj, true) end end @@ -1673,7 +1673,7 @@ local function is_peaceful_player(player) local player_name = player:get_player_name() -- player priv enabled - if player_name and minetest.check_player_privs(player_name, "peaceful_player") then + if player_name and core.check_player_privs(player_name, "peaceful_player") then return true end end @@ -1689,7 +1689,7 @@ function mob_class:general_attack() end local s = self.object:get_pos() ; if not s then return end - local objs = minetest.get_objects_inside_radius(s, self.view_range) + local objs = core.get_objects_inside_radius(s, self.view_range) -- remove entities we aren't interested in for n = 1, #objs do @@ -1778,7 +1778,7 @@ function mob_class:do_runaway_from() local s = self.object:get_pos() ; if not s then return end local p, sp, dist, pname, player, obj, min_player, name local min_dist = self.view_range + 1 - local objs = minetest.get_objects_inside_radius(s, self.view_range) + local objs = core.get_objects_inside_radius(s, self.view_range) for n = 1, #objs do -- loop through entities surrounding mob @@ -1831,7 +1831,7 @@ function mob_class:do_runaway_from() end -- check for nodes to runaway from - objs = minetest.find_node_near(s, self.view_range, self.runaway_from, true) + objs = core.find_node_near(s, self.view_range, self.runaway_from, true) if objs then @@ -1851,7 +1851,7 @@ function mob_class:follow_flop() and self.state ~= "attack" and self.state ~= "runaway" then local s = self.object:get_pos() ; if not s then return end - local players = minetest.get_connected_players() + local players = core.get_connected_players() for n = 1, #players do @@ -1979,7 +1979,7 @@ function mob_class:do_states(dtime) local s = self.object:get_pos() - local lp = minetest.find_nodes_in_area_under_air( + local lp = core.find_nodes_in_area_under_air( {x = s.x - 7, y = s.y - 1.0, z = s.z - 7}, {x = s.x + 7, y = s.y + 1.0, z = s.z + 7}, {"group:cracky", "group:crumbly", "group:choppy", "group:solid"}) @@ -2004,7 +2004,7 @@ function mob_class:do_states(dtime) local lp local s = self.object:get_pos() - for _,player in pairs(minetest.get_connected_players()) do + for _,player in pairs(core.get_connected_players()) do local player_pos = player:get_pos() @@ -2067,8 +2067,8 @@ function mob_class:do_states(dtime) if self:flight_check() and self.animation and self.animation.fly_start and self.animation.fly_end then - local on_ground = minetest.registered_nodes[self.standing_on].walkable - local in_water = minetest.registered_nodes[self.standing_in].groups.water + local on_ground = core.registered_nodes[self.standing_on].walkable + local in_water = core.registered_nodes[self.standing_in].groups.water if on_ground and in_water then self:set_animation("fly") @@ -2209,8 +2209,8 @@ function mob_class:do_states(dtime) local pos = self.object:get_pos() -- dont damage anything if area protected or near water - if minetest.find_node_near(pos, 1, {"group:water"}) - or minetest.is_protected(pos, "") then + if core.find_node_near(pos, 1, {"group:water"}) + or core.is_protected(pos, "") then node_break_radius = 1 end @@ -2238,7 +2238,7 @@ function mob_class:do_states(dtime) if s_y < p_y then -- if correct medium above then move up - if #minetest.find_nodes_in_area( + if #core.find_nodes_in_area( {x = s.x, y = s.y + 1, z = s.z}, {x = s.x, y = s.y + 1, z = s.z}, self.fly_in) > 0 then @@ -2252,7 +2252,7 @@ function mob_class:do_states(dtime) elseif s_y > p_y then -- if correct medium below then move down - if #minetest.find_nodes_in_area( + if #core.find_nodes_in_area( {x = s.x, y = s.y - 1, z = s.z}, {x = s.x, y = s.y - 1, z = s.z}, self.fly_in) > 0 then @@ -2387,9 +2387,9 @@ function mob_class:do_states(dtime) p.y = p.y + (prop.collisionbox[2] + prop.collisionbox[5]) / 2 - if minetest.registered_entities[self.arrow] then + if core.registered_entities[self.arrow] then - local obj = minetest.add_entity(p, self.arrow) + local obj = core.add_entity(p, self.arrow) local ent = obj:get_luaentity() local amount = (vec.x * vec.x + vec.y * vec.y + vec.z * vec.z) ^ 0.5 @@ -2428,10 +2428,10 @@ function mob_class:falling(pos) -- use liquid viscosity for float/sink speed when in water if self.floats and self.standing_in - and minetest.registered_nodes[self.standing_in].groups.liquid then + and core.registered_nodes[self.standing_in].groups.liquid then local visc = min( - minetest.registered_nodes[self.standing_in].liquid_viscosity, 7) + 1 + core.registered_nodes[self.standing_in].liquid_viscosity, 7) + 1 self.object:set_velocity({x = v.x, y = 0.6, z = v.z}) @@ -2446,7 +2446,7 @@ function mob_class:falling(pos) if d > 5 then local damage = d - 5 - local add = minetest.get_item_group( + local add = core.get_item_group( self.standing_on, "fall_damage_add_percent") if add ~= 0 then @@ -2478,7 +2478,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) -- error checking when mod profiling is enabled if not tool_capabilities then - minetest.log("warning", "[mobs] Mod profiling enabled, damage not enabled") + core.log("warning", "[mobs] Mod profiling enabled, damage not enabled") return true end @@ -2489,9 +2489,9 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) local player_name = hitter:get_player_name() if player_name ~= self.owner - and minetest.is_protected(self.object:get_pos(), player_name) then + and core.is_protected(self.object:get_pos(), player_name) then - minetest.chat_send_player(hitter:get_player_name(), + core.chat_send_player(hitter:get_player_name(), S("Mob has been protected!")) return true @@ -2560,7 +2560,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) if use_mc2 then -- get enchants from mineclonia or voxelibre - enchants = minetest.deserialize( + enchants = core.deserialize( weapon:get_meta():get_string("mcl_enchanting:enchantments")) or {} -- check for damage increasing enchantments @@ -2620,7 +2620,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) -- select tool use sound if found, or fallback to default local snd = weapon_def.sound and weapon_def.sound.use or "mobs_punch" - minetest.sound_play(snd, {object = self.object, max_hear_distance = 8}, true) + core.sound_play(snd, {object = self.object, max_hear_distance = 8}, true) local prop = self.object:get_properties() @@ -2651,7 +2651,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) self.object:set_texture_mod(self.texture_mods .. prop.damage_texture_modifier) - minetest.after(0.3, function() + core.after(0.3, function() if self and self.object and self.object:get_pos() then @@ -2747,7 +2747,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) self:do_attack(hitter) -- attack whoever punched mob -- alert others to the attack - local objs = minetest.get_objects_inside_radius(hitter:get_pos(), self.view_range) + local objs = core.get_objects_inside_radius(hitter:get_pos(), self.view_range) local ent for n = 1, #objs do @@ -2811,7 +2811,7 @@ function mob_class:mob_staticdata() remove_mob(self, true) - return minetest.serialize({remove_ok = true, static_save = true}) + return core.serialize({remove_ok = true, static_save = true}) end self.remove_ok = true @@ -2823,7 +2823,7 @@ function mob_class:mob_staticdata() self.serialized_cmi_components = cmi.serialize_components(self._cmi_components) end - return minetest.serialize(clean_staticdata(self)) + return core.serialize(clean_staticdata(self)) end -- list of items used in initial_properties @@ -2856,7 +2856,7 @@ function mob_class:mob_activate(staticdata, def, dtime) end -- load entity variables from staticdata into self.* - local tmp = minetest.deserialize(staticdata) + local tmp = core.deserialize(staticdata) if tmp then @@ -2995,7 +2995,7 @@ function mob_class:mob_expire(pos, dtime) if self.lifetimer <= 0 then -- only despawn away from player - for _,player in pairs(minetest.get_connected_players()) do + for _,player in pairs(core.get_connected_players()) do if get_distance(player:get_pos(), pos) <= 15 then self.lifetimer = 20 @@ -3003,7 +3003,7 @@ function mob_class:mob_expire(pos, dtime) end end --- minetest.log("action", "lifetimer expired, removed " .. self.name) +-- core.log("action", "lifetimer expired, removed " .. self.name) effect(pos, 15, "mobs_tnt_smoke.png", 2, 4, 2, 0) @@ -3213,7 +3213,7 @@ function mobs:register_mob(name, def) collisionbox[5] = collisionbox[2] + 0.99 end - minetest.register_entity(":" .. name, setmetatable({ + core.register_entity(":" .. name, setmetatable({ initial_properties = { hp_max = max(1, (def.hp_max or 10) * difficulty), @@ -3352,7 +3352,7 @@ function mobs:register_mob(name, def) }, mob_class_meta)) - local self = minetest.registered_entities[name] + local self = core.registered_entities[name] mobs.compatibility_check(self) -- older setting check for compatibility end @@ -3361,7 +3361,7 @@ end local function count_mobs(pos, type) local total = 0 - local objs = minetest.get_objects_inside_radius(pos, aoc_range * 2) + local objs = core.get_objects_inside_radius(pos, aoc_range * 2) local ent, players for n = 1, #objs do @@ -3383,7 +3383,7 @@ end local function can_spawn(pos, name) - local ent = minetest.registered_entities[name] + local ent = core.registered_entities[name] local width_x = max(1, ceil(ent.base_colbox[4] - ent.base_colbox[1])) local min_x, max_x @@ -3411,7 +3411,7 @@ local function can_spawn(pos, name) pos2 = {x = pos.x + x, y = pos.y + y, z = pos.z + z} - if minetest.registered_nodes[node_ok(pos2).name].walkable then + if core.registered_nodes[node_ok(pos2).name].walkable then return nil end end @@ -3438,7 +3438,7 @@ function mobs:add_mob(pos, def) return end - if not mobs.spawning_mobs[def.name] or not minetest.registered_entities[def.name] then + if not mobs.spawning_mobs[def.name] or not core.registered_entities[def.name] then --print("--- mob doesn't exist", def.name) return end @@ -3463,9 +3463,9 @@ function mobs:add_mob(pos, def) return end - local mob = minetest.add_entity(pos, def.name) + local mob = core.add_entity(pos, def.name) ---print("[mobs] Spawned " .. def.name .. " at " .. minetest.pos_to_string(pos)) +--print("[mobs] Spawned " .. def.name .. " at " .. core.pos_to_string(pos)) local ent = mob:get_luaentity() @@ -3550,7 +3550,7 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter return end - -- chance/spawn number override in minetest.conf + -- chance/spawn number override in core.conf local numbers = settings:get(name) if numbers then @@ -3561,12 +3561,12 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter if chance == 0 then - minetest.log("warning", + core.log("warning", string.format("[mobs] %s has spawning disabled", name)) return end - minetest.log("action", string.format( + core.log("action", string.format( "[mobs] Chance setting for %s changed to %s (total: %s)", name, chance, aoc)) end @@ -3581,12 +3581,12 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter end if map_load and (random(max(1, (chance * mob_chance_multiplier))) > 1 - or not minetest.find_node_near(pos, 1, neighbors)) then + or not core.find_node_near(pos, 1, neighbors)) then --print("-- lbm no chance or neighbor not found") return end - local ent = minetest.registered_entities[name] + local ent = core.registered_entities[name] if not mobs.spawning_mobs[name] or not ent then --print("--- mob doesn't exist", name) @@ -3617,7 +3617,7 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter if day_toggle ~= nil then - local tod = (minetest.get_timeofday() or 0) * 24000 + local tod = (core.get_timeofday() or 0) * 24000 if tod > 4500 and tod < 19500 then @@ -3633,7 +3633,7 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter end end - if #minetest.find_nodes_in_area( + if #core.find_nodes_in_area( {x = pos.x - 16, y = pos.y - 16, z = pos.z - 16}, {x = pos.x + 16, y = pos.y + 16, z = pos.z + 16}, {"mobs:mob_repellent"}) > 0 then @@ -3648,7 +3648,7 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter return end - local light = minetest.get_node_light(pos) + local light = core.get_node_light(pos) if not light or light > max_light or light < min_light then --print("--- light limits not met", name, light) return @@ -3656,13 +3656,13 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter if (spawn_protected == false or (spawn_monster_protected == false - and minetest.registered_entities[name].type == "monster")) - and minetest.is_protected(pos, "") then + and core.registered_entities[name].type == "monster")) + and core.is_protected(pos, "") then --print("--- inside protected area", name) return end - for _,player in pairs(minetest.get_connected_players()) do + for _,player in pairs(core.get_connected_players()) do if get_distance(player:get_pos(), pos) <= mob_nospawn_range then --print("--- player too close", name) @@ -3679,7 +3679,7 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter local pos2 = {x = pos.x, y = pos.y + n, z = pos.z} - if minetest.registered_nodes[node_ok(pos2).name].walkable then + if core.registered_nodes[node_ok(pos2).name].walkable then --print ("--- inside block", name, node_ok(pos2).name) return end @@ -3696,13 +3696,13 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter pos.y = pos.y + _y - local mob = minetest.add_entity(pos, name) + local mob = core.add_entity(pos, name) if mob_log_spawn then - local pos_string = pos and minetest.pos_to_string(pos) or "" + local pos_string = pos and core.pos_to_string(pos) or "" - minetest.log("[MOBS] Spawned " .. (name or "") .. " at " .. pos_string) + core.log("[MOBS] Spawned " .. (name or "") .. " at " .. pos_string) end if on_spawn and mob then on_spawn(mob:get_luaentity(), pos) end @@ -3713,7 +3713,7 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter if map_load then - minetest.register_lbm({ -- on map_load use lbm to spawn on generation + core.register_lbm({ -- on map_load use lbm to spawn on generation name = name .. "_spawning", label = name .. " spawning", nodenames = nodes, @@ -3725,7 +3725,7 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter end }) else - minetest.register_abm({ -- abm spawns at every interval/chance + core.register_abm({ -- abm spawns at every interval/chance label = name .. " spawning", nodenames = nodes, neighbors = neighbors, @@ -3764,7 +3764,7 @@ function mobs:register_arrow(name, def) if not name or not def then return end - minetest.register_entity(":" .. name, { + core.register_entity(":" .. name, { initial_properties = { physical = def.physical, @@ -3812,7 +3812,7 @@ function mobs:register_arrow(name, def) -- does arrow have a tail? if def.tail and def.tail == 1 and def.tail_texture then - minetest.add_particle({ + core.add_particle({ pos = pos, velocity = {x = 0, y = 0, z = 0}, acceleration = {x = 0, y = 0, z = 0}, @@ -3831,7 +3831,7 @@ function mobs:register_arrow(name, def) if p then - if minetest.line_of_sight(self.object:get_pos(), p) then + if core.line_of_sight(self.object:get_pos(), p) then self.object:set_velocity( vector.direction(self.object:get_pos(), p) * self.velocity) @@ -3843,7 +3843,7 @@ function mobs:register_arrow(name, def) self.lastpos = self.lastpos or pos - local cast = minetest.raycast(self.lastpos, pos, true, true) + local cast = core.raycast(self.lastpos, pos, true, true) local thing = cast:next() while thing do -- loop through things @@ -3887,8 +3887,8 @@ function mobs:register_arrow(name, def) -- if inside node if thing.type == "node" and self.hit_node then - local node = minetest.get_node(pos) - local def = minetest.registered_nodes[node.name] + local node = core.get_node(pos) + local def = core.registered_nodes[node.name] if def and def.walkable then @@ -3899,7 +3899,7 @@ function mobs:register_arrow(name, def) pos.y = pos.y + 1 - minetest.add_item(self.lastpos, + core.add_item(self.lastpos, self.object:get_luaentity().name) end @@ -3922,7 +3922,7 @@ end function mobs:safe_boom(self, pos, radius, texture) - minetest.sound_play(self and self.sounds and self.sounds.explode or "tnt_explode", { + core.sound_play(self and self.sounds and self.sounds.explode or "tnt_explode", { pos = pos, gain = 1.0, max_hear_distance = (self.sounds and self.sounds.distance) or 32 @@ -3941,11 +3941,11 @@ function mobs:boom(self, pos, node_damage_radius, entity_radius, texture) if mobs_griefing then - if minetest.get_modpath("mcl_explosions") then + if core.get_modpath("mcl_explosions") then mcl_explosions.explode(pos, node_damage_radius) - elseif minetest.get_modpath("tnt") and tnt and tnt.boom then + elseif core.get_modpath("tnt") and tnt and tnt.boom then tnt.boom(pos, { radius = node_damage_radius, @@ -3978,7 +3978,7 @@ function mobs:register_egg(mob, desc, background, addegg, no_creative) end -- does mob/entity exist - local is_mob = minetest.registered_entities[mob] + local is_mob = core.registered_entities[mob] if not is_mob then print("[Mobs Redo] Spawn Egg cannot be created for " .. mob) ; return @@ -3992,7 +3992,7 @@ function mobs:register_egg(mob, desc, background, addegg, no_creative) -- these are only created for animals and npc's, not monsters if is_mob.type ~= "monster" then - minetest.register_craftitem(":" .. mob .. "_set", { + core.register_craftitem(":" .. mob .. "_set", { description = S("@1 (Tamed)", desc), inventory_image = invimg, @@ -4004,8 +4004,8 @@ function mobs:register_egg(mob, desc, background, addegg, no_creative) local pos = pointed_thing.above -- does existing on_rightclick function exist? - local under = minetest.get_node(pointed_thing.under) - local def = minetest.registered_nodes[under.name] + local under = core.get_node(pointed_thing.under) + local def = core.registered_nodes[under.name] if def and def.on_rightclick then @@ -4013,11 +4013,11 @@ function mobs:register_egg(mob, desc, background, addegg, no_creative) pointed_thing.under, under, placer, itemstack, pointed_thing) end - if pos and not minetest.is_protected(pos, placer:get_player_name()) then + if pos and not core.is_protected(pos, placer:get_player_name()) then if at_limit() then -- have we reached active mob limit - minetest.chat_send_player(placer:get_player_name(), + core.chat_send_player(placer:get_player_name(), S("Active Mob Limit Reached!") .. " (" .. active_mobs .. " / " .. active_limit .. ")") @@ -4027,7 +4027,7 @@ function mobs:register_egg(mob, desc, background, addegg, no_creative) pos.y = pos.y + _y local data = itemstack:get_metadata() - local smob = minetest.add_entity(pos, mob, data) + local smob = core.add_entity(pos, mob, data) local ent = smob and smob:get_luaentity() if not ent then return end -- sanity check @@ -4046,7 +4046,7 @@ function mobs:register_egg(mob, desc, background, addegg, no_creative) end -- register old stackable mob egg - minetest.register_craftitem(":" .. mob, { + core.register_craftitem(":" .. mob, { description = desc, inventory_image = invimg, @@ -4057,8 +4057,8 @@ function mobs:register_egg(mob, desc, background, addegg, no_creative) local pos = pointed_thing.above -- does existing on_rightclick function exist? - local under = minetest.get_node(pointed_thing.under) - local def = minetest.registered_nodes[under.name] + local under = core.get_node(pointed_thing.under) + local def = core.registered_nodes[under.name] if def and def.on_rightclick then @@ -4066,11 +4066,11 @@ function mobs:register_egg(mob, desc, background, addegg, no_creative) pointed_thing.under, under, placer, itemstack, pointed_thing) end - if pos and not minetest.is_protected(pos, placer:get_player_name()) then + if pos and not core.is_protected(pos, placer:get_player_name()) then if at_limit() then -- have we reached active mob limit - minetest.chat_send_player(placer:get_player_name(), + core.chat_send_player(placer:get_player_name(), S("Active Mob Limit Reached!") .. " (" .. active_mobs .. " / " .. active_limit .. ")") @@ -4079,7 +4079,7 @@ function mobs:register_egg(mob, desc, background, addegg, no_creative) pos.y = pos.y + _y - local smob = minetest.add_entity(pos, mob) + local smob = core.add_entity(pos, mob) local ent = smob and smob:get_luaentity() if not ent then return end -- sanity check @@ -4108,7 +4108,7 @@ function mobs:force_capture(self, clicker) -- add special mob egg with all mob information local new_stack = ItemStack(self.name .. "_set") - local data_str = minetest.serialize(clean_staticdata(self)) + local data_str = core.serialize(clean_staticdata(self)) new_stack:set_metadata(data_str) @@ -4117,7 +4117,7 @@ function mobs:force_capture(self, clicker) if inv:room_for_item("main", new_stack) then inv:add_item("main", new_stack) -- add to inventory if room found else - minetest.add_item(clicker:get_pos(), new_stack) -- drop spawn egg + core.add_item(clicker:get_pos(), new_stack) -- drop spawn egg end self:mob_sound("default_place_node_hard") @@ -4149,13 +4149,13 @@ function mobs:capture_mob( -- is mob tamed? if self.tamed == false and force_take == false then - minetest.chat_send_player(name, S("Not tamed!")) ; return false + core.chat_send_player(name, S("Not tamed!")) ; return false end -- cannot pick up if not owner (unless player has protection_bypass priv) - if not minetest.check_player_privs(name, "protection_bypass") + if not core.check_player_privs(name, "protection_bypass") and self.owner ~= name and force_take == false then - minetest.chat_send_player(name, S("@1 is owner!", self.owner)) ; return false + core.chat_send_player(name, S("@1 is owner!", self.owner)) ; return false end if clicker:get_inventory():room_for_item("main", mobname) then @@ -4194,7 +4194,7 @@ function mobs:capture_mob( new_stack = ItemStack(mobname .. "_set") - local data_str = minetest.serialize(clean_staticdata(self)) + local data_str = core.serialize(clean_staticdata(self)) new_stack:set_metadata(data_str) end @@ -4204,7 +4204,7 @@ function mobs:capture_mob( if inv:room_for_item("main", new_stack) then inv:add_item("main", new_stack) else - minetest.add_item(clicker:get_pos(), new_stack) + core.add_item(clicker:get_pos(), new_stack) end self:mob_sound("default_place_node_hard") @@ -4216,7 +4216,7 @@ function mobs:capture_mob( -- when chance above fails elseif chance and chance ~= 0 then - minetest.chat_send_player(name, S("Missed!")) + core.chat_send_player(name, S("Missed!")) self:mob_sound("mobs_swing") @@ -4244,12 +4244,12 @@ function mobs:protect(self, clicker) end if not self.tamed then - minetest.chat_send_player(name, S("Not tamed!")) ; return true + core.chat_send_player(name, S("Not tamed!")) ; return true end if (self.protected and tool_name == "mobs:protector") or (self.protected == 2 and tool_name == "mobs:protector2") then - minetest.chat_send_player(name, S("Already protected!")) ; return true + core.chat_send_player(name, S("Already protected!")) ; return true end if not mobs.is_creative(clicker:get_player_name()) then @@ -4326,7 +4326,7 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame) if self.tamed == false then - minetest.chat_send_player(clicker:get_player_name(), + core.chat_send_player(clicker:get_player_name(), S("@1 has been tamed!", self.name:split(":")[2])) end @@ -4350,16 +4350,16 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame) -- only tames mobs can be named with nametag if item:get_name() == "mobs:nametag" - and (name == self.owner or minetest.check_player_privs(name, "protection_bypass")) then + and (name == self.owner or core.check_player_privs(name, "protection_bypass")) then -- store mob and nametag stack in external variables mob_obj[name] = self ; mob_sta[name] = item local prop = self.object:get_properties() local tag = self._nametag or "" - local esc = minetest.formspec_escape + local esc = core.formspec_escape - minetest.show_formspec(name, "mobs_nametag", "size[8,4]" + core.show_formspec(name, "mobs_nametag", "size[8,4]" .. "field[0.5,1;7.5,0;name;" .. esc(FS("Enter name:")) .. ";" .. esc(tag) .. "]" .. "button_exit[2.5,3.5;3,1;mob_rename;" .. esc(FS("Rename")) .. "]") @@ -4374,7 +4374,7 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame) self.follow = {self.follow} end - minetest.chat_send_player(clicker:get_player_name(), + core.chat_send_player(clicker:get_player_name(), S("@1 follows:", self.name:split(":")[2]) .. "\n- " .. table.concat(self.follow, "\n- ")) @@ -4386,7 +4386,7 @@ end -- inspired by blockmen's nametag mod -minetest.register_on_player_receive_fields(function(player, formname, fields) +core.register_on_player_receive_fields(function(player, formname, fields) -- right-clicked with nametag and name entered? if formname == "mobs_nametag" and fields.name and fields.name ~= "" then @@ -4420,32 +4420,32 @@ end) function mobs:alias_mob(old_name, new_name) -- check old_name entity doesnt already exist - if minetest.registered_entities[old_name] then return end + if core.registered_entities[old_name] then return end - minetest.register_alias(old_name, new_name) -- spawn egg + core.register_alias(old_name, new_name) -- spawn egg - minetest.register_entity(":" .. old_name, { -- entity + core.register_entity(":" .. old_name, { -- entity initial_properties = {physical = false, static_save = false}, on_activate = function(self, staticdata) - if minetest.registered_entities[new_name] then - minetest.add_entity(self.object:get_pos(), new_name, staticdata) + if core.registered_entities[new_name] then + core.add_entity(self.object:get_pos(), new_name, staticdata) end remove_mob(self) end, get_staticdata = function(self) - return minetest.serialize(clean_staticdata(self)) + return core.serialize(clean_staticdata(self)) end }) end -- admin command to remove untamed mobs around players -minetest.register_chatcommand("clear_mobs", { +core.register_chatcommand("clear_mobs", { params = "", description = "Remove untamed mobs from around players.", privs = {server = true}, @@ -4454,12 +4454,12 @@ minetest.register_chatcommand("clear_mobs", { local count = 0 - for _, player in pairs(minetest.get_connected_players()) do + for _, player in pairs(core.get_connected_players()) do if player then local pos = player:get_pos() - local objs = minetest.get_objects_inside_radius(pos, 28) + local objs = core.get_objects_inside_radius(pos, 28) for _, obj in pairs(objs) do @@ -4479,18 +4479,18 @@ minetest.register_chatcommand("clear_mobs", { end end - minetest.chat_send_player(name, S("@1 mobs removed.", count)) + core.chat_send_player(name, S("@1 mobs removed.", count)) end }) --- Is mob hearing enabled, if so override minetest.sound_play with custom function +-- Is mob hearing enabled, if so override core.sound_play with custom function if settings:get_bool("mobs_can_hear") ~= false then local node_hear = settings:get_bool("mobs_can_hear_node") - local old_sound_play = minetest.sound_play + local old_sound_play = core.sound_play - minetest.sound_play = function(spec, param, eph) + core.sound_play = function(spec, param, eph) if type(spec) == "table" then return old_sound_play(spec, param, eph) end @@ -4503,7 +4503,7 @@ if settings:get_bool("mobs_can_hear") ~= false then -- def.pos = param.object:get_pos() -- def.object = param.object -- elseif param.to_player then --- local player = minetest.get_player_by_name(param.to_player) +-- local player = core.get_player_by_name(param.to_player) -- def.pos = player and player:get_pos() -- def.player = param.to_player end @@ -4528,7 +4528,7 @@ if settings:get_bool("mobs_can_hear") ~= false then def.max_hear_distance = param.max_hear_distance or 32 -- find mobs within sounds hearing range - local objs = minetest.get_objects_inside_radius(def.pos, def.max_hear_distance) + local objs = core.get_objects_inside_radius(def.pos, def.max_hear_distance) local bit = def.gain / def.max_hear_distance for n = 1, #objs do @@ -4555,7 +4555,7 @@ if settings:get_bool("mobs_can_hear") ~= false then if node_hear then local dist = min(def.max_hear_distance, 8) - local ps = minetest.find_nodes_in_area( + local ps = core.find_nodes_in_area( vector.subtract(def.pos, dist), vector.add(def.pos, dist), {"group:on_sound"}) @@ -4563,7 +4563,7 @@ if settings:get_bool("mobs_can_hear") ~= false then for n = 1, #ps do - local ndef = minetest.registered_nodes[minetest.get_node(ps[n]).name] + local ndef = core.registered_nodes[core.get_node(ps[n]).name] def.distance = get_distance(def.pos, ps[n]) def.loudness = def.gain - (bit * def.distance) diff --git a/crafts.lua b/crafts.lua index e5c8499..63e658a 100644 --- a/crafts.lua +++ b/crafts.lua @@ -1,8 +1,8 @@ -local S = minetest.get_translator("mobs") -local FS = function(...) return minetest.formspec_escape(S(...)) end -local mc2 = minetest.get_modpath("mcl_core") -local mod_def = minetest.get_modpath("default") +local S = core.get_translator("mobs") +local FS = function(...) return core.formspec_escape(S(...)) end +local mc2 = core.get_modpath("mcl_core") +local mod_def = core.get_modpath("default") -- determine which sounds to use, default or mcl_sounds @@ -27,7 +27,7 @@ sound_helper("node_sound_glass_defaults") -- mob repellent node -minetest.register_node("mobs:mob_repellent", { +core.register_node("mobs:mob_repellent", { description = S("Mob Repellent"), tiles = {"mobs_repellent.png"}, is_ground_content = false, @@ -39,7 +39,7 @@ minetest.register_node("mobs:mob_repellent", { function mobs.add_eatable(item, hp) - local def = minetest.registered_items[item] + local def = core.registered_items[item] if def then @@ -47,7 +47,7 @@ function mobs.add_eatable(item, hp) groups.eatable = hp ; groups.flammable = 2 - minetest.override_item(item, {groups = groups}) + core.override_item(item, {groups = groups}) end end @@ -72,13 +72,13 @@ local items = { -- name tag -minetest.register_craftitem("mobs:nametag", { +core.register_craftitem("mobs:nametag", { description = S("Name Tag") .. " " .. S("\nRight-click Mobs Redo mob to apply"), inventory_image = "mobs_nametag.png", groups = {flammable = 2, nametag = 1} }) -minetest.register_craft({ +core.register_craft({ output = "mobs:nametag", recipe = { { items.paper, items.dye_black, items.string } @@ -87,7 +87,7 @@ minetest.register_craft({ -- leather -minetest.register_craftitem("mobs:leather", { +core.register_craftitem("mobs:leather", { description = S("Leather"), inventory_image = "mobs_leather.png", groups = {flammable = 2, leather = 1} @@ -95,10 +95,10 @@ minetest.register_craftitem("mobs:leather", { -- raw meat -minetest.register_craftitem("mobs:meat_raw", { +core.register_craftitem("mobs:meat_raw", { description = S("Raw Meat"), inventory_image = "mobs_meat_raw.png", - on_use = minetest.item_eat(3), + on_use = core.item_eat(3), groups = {food_meat_raw = 1} }) @@ -106,16 +106,16 @@ mobs.add_eatable("mobs:meat_raw", 3) -- cooked meat -minetest.register_craftitem("mobs:meat", { +core.register_craftitem("mobs:meat", { description = S("Meat"), inventory_image = "mobs_meat.png", - on_use = minetest.item_eat(8), + on_use = core.item_eat(8), groups = {food_meat = 1} }) mobs.add_eatable("mobs:meat", 8) -minetest.register_craft({ +core.register_craft({ type = "cooking", output = "mobs:meat", recipe = "mobs:meat_raw", @@ -124,13 +124,13 @@ minetest.register_craft({ -- lasso -minetest.register_tool("mobs:lasso", { +core.register_tool("mobs:lasso", { description = S("Lasso (right-click animal to put in inventory)"), inventory_image = "mobs_magic_lasso.png", groups = {flammable = 2} }) -minetest.register_craft({ +core.register_craft({ output = "mobs:lasso", recipe = { { items.string, "", items.string}, @@ -139,17 +139,17 @@ minetest.register_craft({ } }) -minetest.register_alias("mobs:magic_lasso", "mobs:lasso") +core.register_alias("mobs:magic_lasso", "mobs:lasso") -- net -minetest.register_tool("mobs:net", { +core.register_tool("mobs:net", { description = S("Net (right-click animal to put in inventory)"), inventory_image = "mobs_net.png", groups = {flammable = 2} }) -minetest.register_craft({ +core.register_craft({ output = "mobs:net", recipe = { { items.stick, "", items.stick }, @@ -160,13 +160,13 @@ minetest.register_craft({ -- shears (right click to shear animal) -minetest.register_tool("mobs:shears", { +core.register_tool("mobs:shears", { description = S("Steel Shears (right-click to shear)"), inventory_image = "mobs_shears.png", groups = {flammable = 2} }) -minetest.register_craft({ +core.register_craft({ output = "mobs:shears", recipe = { { "", items.steel_ingot, "" }, @@ -176,13 +176,13 @@ minetest.register_craft({ -- protection rune -minetest.register_craftitem("mobs:protector", { +core.register_craftitem("mobs:protector", { description = S("Mob Protection Rune"), inventory_image = "mobs_protector.png", groups = {flammable = 2} }) -minetest.register_craft({ +core.register_craft({ output = "mobs:protector", recipe = { { items.stone, items.stone, items.stone }, @@ -193,13 +193,13 @@ minetest.register_craft({ -- protection rune (level 2) -minetest.register_craftitem("mobs:protector2", { +core.register_craftitem("mobs:protector2", { description = S("Mob Protection Rune (Level 2)"), inventory_image = "mobs_protector2.png", groups = {flammable = 2} }) -minetest.register_craft({ +core.register_craft({ output = "mobs:protector2", recipe = { { "mobs:protector", items.mese_crystal, "mobs:protector" }, @@ -210,13 +210,13 @@ minetest.register_craft({ -- saddle -minetest.register_craftitem("mobs:saddle", { +core.register_craftitem("mobs:saddle", { description = S("Saddle"), inventory_image = "mobs_saddle.png", groups = {flammable = 2, saddle = 1} }) -minetest.register_craft({ +core.register_craft({ output = "mobs:saddle", recipe = { {"group:leather", "group:leather", "group:leather"}, @@ -244,7 +244,7 @@ end -- mob fence top (has enlarged collisionbox to stop mobs getting over) -minetest.register_node("mobs:fence_top", { +core.register_node("mobs:fence_top", { description = S("Mob Fence Top"), drawtype = "nodebox", tiles = {"default_wood.png"}, @@ -257,7 +257,7 @@ minetest.register_node("mobs:fence_top", { selection_box = {type = "fixed", fixed = {-0.4, -1.5, -0.4, 0.4, 0, 0.4}} }) -minetest.register_craft({ +core.register_craft({ output = "mobs:fence_top 12", recipe = { {"group:wood", "group:wood", "group:wood"}, @@ -267,13 +267,13 @@ minetest.register_craft({ -- items that can be used as fuel -minetest.register_craft({type = "fuel", recipe = "mobs:nametag", burntime = 3}) -minetest.register_craft({type = "fuel", recipe = "mobs:lasso", burntime = 7}) -minetest.register_craft({type = "fuel", recipe = "mobs:net", burntime = 8}) -minetest.register_craft({type = "fuel", recipe = "mobs:leather", burntime = 4}) -minetest.register_craft({type = "fuel", recipe = "mobs:saddle", burntime = 7}) -minetest.register_craft({type = "fuel", recipe = "mobs:fence_wood", burntime = 7}) -minetest.register_craft({type = "fuel", recipe = "mobs:fence_top", burntime = 2}) +core.register_craft({type = "fuel", recipe = "mobs:nametag", burntime = 3}) +core.register_craft({type = "fuel", recipe = "mobs:lasso", burntime = 7}) +core.register_craft({type = "fuel", recipe = "mobs:net", burntime = 8}) +core.register_craft({type = "fuel", recipe = "mobs:leather", burntime = 4}) +core.register_craft({type = "fuel", recipe = "mobs:saddle", burntime = 7}) +core.register_craft({type = "fuel", recipe = "mobs:fence_wood", burntime = 7}) +core.register_craft({type = "fuel", recipe = "mobs:fence_top", burntime = 2}) -- this tool spawns same mob and adds owner, protected, nametag info @@ -282,7 +282,7 @@ minetest.register_craft({type = "fuel", recipe = "mobs:fence_top", burntime = 2} local tex_obj -minetest.register_tool(":mobs:mob_reset_stick", { +core.register_tool(":mobs:mob_reset_stick", { description = S("Mob Reset Stick"), inventory_image = "default_stick.png^[colorize:#ff000050", stack_max = 1, @@ -300,7 +300,7 @@ minetest.register_tool(":mobs:mob_reset_stick", { if obj and not sneak then local self = obj:get_luaentity() - local obj2 = minetest.add_entity(obj:get_pos(), self.name) + local obj2 = core.add_entity(obj:get_pos(), self.name) if obj2 then @@ -336,7 +336,7 @@ minetest.register_tool(":mobs:mob_reset_stick", { local name = user:get_player_name() - minetest.show_formspec(name, "mobs_texture", "size[8,4]" + core.show_formspec(name, "mobs_texture", "size[8,4]" .. "field[0.5,1;7.5,0;name;" .. FS("Enter texture:") .. ";" .. bt .. "]" .. "button_exit[2.5,3.5;3,1;mob_texture_change;" @@ -345,7 +345,7 @@ minetest.register_tool(":mobs:mob_reset_stick", { end }) -minetest.register_on_player_receive_fields(function(player, formname, fields) +core.register_on_player_receive_fields(function(player, formname, fields) -- right-clicked with nametag and name entered? if formname == "mobs_texture" and fields.name and fields.name ~= "" then @@ -375,22 +375,22 @@ end) -- Meat Block -minetest.register_node("mobs:meatblock", { +core.register_node("mobs:meatblock", { description = S("Meat Block"), tiles = {"mobs_meat_top.png", "mobs_meat_bottom.png", "mobs_meat_side.png"}, paramtype2 = "facedir", groups = {choppy = 1, oddly_breakable_by_hand = 1, axey = 1, handy = 1}, is_ground_content = false, sounds = mobs.node_sound_dirt_defaults(), - on_place = minetest.rotate_node, - on_use = minetest.item_eat(20), + on_place = core.rotate_node, + on_use = core.item_eat(20), _mcl_hardness = 0.8, _mcl_blast_resistance = 1 }) mobs.add_eatable("mobs:meatblock", 20) -minetest.register_craft({ +core.register_craft({ output = "mobs:meatblock", recipe = { { items.meat_cooked, items.meat_cooked, items.meat_cooked }, @@ -401,22 +401,22 @@ minetest.register_craft({ -- Meat Block (raw) -minetest.register_node("mobs:meatblock_raw", { +core.register_node("mobs:meatblock_raw", { description = S("Raw Meat Block"), tiles = {"mobs_meat_raw_top.png", "mobs_meat_raw_bottom.png", "mobs_meat_raw_side.png"}, paramtype2 = "facedir", groups = {choppy = 1, oddly_breakable_by_hand = 1, axey = 1, handy = 1}, is_ground_content = false, sounds = mobs.node_sound_dirt_defaults(), - on_place = minetest.rotate_node, - on_use = minetest.item_eat(20), + on_place = core.rotate_node, + on_use = core.item_eat(20), _mcl_hardness = 0.8, _mcl_blast_resistance = 1 }) mobs.add_eatable("mobs:meatblock_raw", 20) -minetest.register_craft({ +core.register_craft({ output = "mobs:meatblock_raw", recipe = { { items.meat_raw, items.meat_raw, items.meat_raw }, @@ -425,7 +425,7 @@ minetest.register_craft({ } }) -minetest.register_craft({ +core.register_craft({ type = "cooking", output = "mobs:meatblock", recipe = "mobs:meatblock_raw", @@ -434,9 +434,9 @@ minetest.register_craft({ -- hearing vines (if mesecons active it acts like blinkyplant) -local mod_mese = minetest.get_modpath("mesecons") +local mod_mese = core.get_modpath("mesecons") -minetest.register_node("mobs:hearing_vines", { +core.register_node("mobs:hearing_vines", { description = S("Hearing Vines"), drawtype = "firelike", waving = 1, @@ -454,12 +454,12 @@ minetest.register_node("mobs:hearing_vines", { }, on_sound = function(pos, def) if def.loudness > 0.5 then - minetest.set_node(pos, {name = "mobs:hearing_vines_active"}) + core.set_node(pos, {name = "mobs:hearing_vines_active"}) end end }) -minetest.register_node("mobs:hearing_vines_active", { +core.register_node("mobs:hearing_vines_active", { description = S("Active Hearing Vines"), drawtype = "firelike", waving = 1, @@ -479,11 +479,11 @@ minetest.register_node("mobs:hearing_vines_active", { type = "fixed", fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25, 6 / 16}, }, on_construct = function(pos) - minetest.get_node_timer(pos):start(1) + core.get_node_timer(pos):start(1) if mod_mese then mesecon.receptor_on(pos) end end, on_timer = function(pos) - minetest.set_node(pos, {name = "mobs:hearing_vines"}) + core.set_node(pos, {name = "mobs:hearing_vines"}) if mod_mese then mesecon.receptor_off(pos) end end }) diff --git a/init.lua b/init.lua index ce5b474..6b2699b 100644 --- a/init.lua +++ b/init.lua @@ -1,16 +1,16 @@ -local S = minetest.get_translator("mobs") +local S = core.get_translator("mobs") -- peaceful player privilege -minetest.register_privilege("peaceful_player", { +core.register_privilege("peaceful_player", { description = "Prevents Mobs Redo mobs from attacking player", give_to_singleplayer = false }) -- fallback node -minetest.register_node("mobs:fallback_node", { +core.register_node("mobs:fallback_node", { description = S("Fallback Node"), tiles = {"mobs_fallback.png"}, is_ground_content = false, @@ -19,7 +19,7 @@ minetest.register_node("mobs:fallback_node", { }) -local path = minetest.get_modpath("mobs") +local path = core.get_modpath("mobs") dofile(path .. "/api.lua") -- mob API @@ -31,7 +31,7 @@ dofile(path .. "/spawner.lua") -- mob spawner -- Lucky Blocks -if minetest.get_modpath("lucky_block") then +if core.get_modpath("lucky_block") then dofile(path .. "/lucky_block.lua") end diff --git a/lucky_block.lua b/lucky_block.lua index c271303..ac52ea9 100644 --- a/lucky_block.lua +++ b/lucky_block.lua @@ -1,5 +1,5 @@ -local S = minetest.get_translator("mobs") +local S = core.get_translator("mobs") -- add lucky blocks @@ -21,7 +21,7 @@ lucky_block:add_blocks({ -- pint sized rune, use on tamed mob to shrink to half-size -minetest.register_craftitem(":mobs:pint_sized_rune", { +core.register_craftitem(":mobs:pint_sized_rune", { description = S("Pint Sized Rune"), inventory_image = "mobs_pint_sized_rune.png", groups = {flammable = 2}, @@ -39,17 +39,17 @@ minetest.register_craftitem(":mobs:pint_sized_rune", { local self = pointed_thing.ref:get_luaentity() if not self._cmi_is_mob then - minetest.chat_send_player(name, S("Not a Mobs Redo mob!")) + core.chat_send_player(name, S("Not a Mobs Redo mob!")) return end if not self.tamed then - minetest.chat_send_player(name, S("Not tamed!")) + core.chat_send_player(name, S("Not tamed!")) return end if self.pint_size_potion then - minetest.chat_send_player(name, S("Potion already applied!")) + core.chat_send_player(name, S("Potion already applied!")) return end @@ -92,7 +92,7 @@ minetest.register_craftitem(":mobs:pint_sized_rune", { end }) -minetest.register_craft({ +core.register_craft({ output = "lucky_block:pint_sized_rune", recipe = {{"lucky_block:pint_sized_potion", "mobs:protector"}} }) diff --git a/mount.lua b/mount.lua index ded3acc..a55b74d 100644 --- a/mount.lua +++ b/mount.lua @@ -1,11 +1,11 @@ -- lib_mount by Blert2112 (edited by TenPlus1) -local is_mc2 = minetest.get_modpath("mcl_mobs") -- MineClone2 check +local is_mc2 = core.get_modpath("mcl_mobs") -- MineClone2 check -- one of these is needed to ride mobs, otherwise no riding for you -if not minetest.get_modpath("player_api") and not is_mc2 then +if not core.get_modpath("player_api") and not is_mc2 then function mobs.attach() end function mobs.detach() end @@ -28,7 +28,7 @@ local function node_is(entity) if entity.standing_on == "air" then return "air" end - local def = minetest.registered_nodes[entity.standing_on] + local def = core.registered_nodes[entity.standing_on] if def.groups.lava then return "lava" end if def.groups.liquid then return "liquid" end @@ -90,15 +90,15 @@ end -- detach player on leaving -minetest.register_on_leaveplayer(function(player) +core.register_on_leaveplayer(function(player) force_detach(player) end) -- detatch all players on shutdown -minetest.register_on_shutdown(function() +core.register_on_shutdown(function() - local players = minetest.get_connected_players() + local players = core.get_connected_players() for i = 1, #players do force_detach(players[i]) @@ -107,7 +107,7 @@ end) -- detatch player when dead -minetest.register_on_dieplayer(function(player) +core.register_on_dieplayer(function(player) force_detach(player) return true end) @@ -125,11 +125,11 @@ local function find_free_pos(pos) for _, c in pairs(check) do local npos = {x = pos.x + c.x, y = pos.y + c.y, z = pos.z + c.z} - local node = minetest.get_node_or_nil(npos) + local node = core.get_node_or_nil(npos) if node and node.name then - local def = minetest.registered_nodes[node.name] + local def = core.registered_nodes[node.name] if def and not def.walkable and def.liquidtype == "none" then return npos @@ -144,7 +144,7 @@ end local function is_player(player) - if player and type(player) == "userdata" and minetest.is_player(player) then + if player and type(player) == "userdata" and core.is_player(player) then return true end end @@ -184,7 +184,7 @@ function mobs.attach(entity, player) visual_size = {x = entity.driver_scale.x, y = entity.driver_scale.y} }) - minetest.after(0.2, function() + core.after(0.2, function() if is_player(player) then @@ -205,7 +205,7 @@ function mobs.detach(player) force_detach(player) - minetest.after(0.1, function() + core.after(0.1, function() if player and player:is_player() then @@ -299,7 +299,7 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) if velo.y == 0 and entity.standing_on ~= "air" and entity.standing_on ~= "ignore" - and minetest.get_item_group(entity.standing_on, "liquid") == 0 then + and core.get_item_group(entity.standing_on, "liquid") == 0 then velo.y = velo.y + entity.jump_height acce_y = acce_y + (acce_y * 3) + 1 end @@ -391,7 +391,7 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) new_acce.y = 0 p.y = p.y + 1 - if minetest.get_item_group(entity.standing_in, "liquid") ~= 0 then + if core.get_item_group(entity.standing_in, "liquid") ~= 0 then if velo.y >= 5 then velo.y = 5 @@ -458,7 +458,7 @@ function mobs.fly(entity, _, speed, shoots, arrow, moving_anim, stand_anim) if ctrl.LMB and ctrl.sneak and shoots then local pos = entity.object:get_pos() - local obj = minetest.add_entity({ + local obj = core.add_entity({ x = pos.x + 0 + dir.x * 2.5, y = pos.y + 1.5 + dir.y, z = pos.z + 0 + dir.z * 2.5}, arrow) diff --git a/spawner.lua b/spawner.lua index 271cbd6..862e090 100644 --- a/spawner.lua +++ b/spawner.lua @@ -1,12 +1,12 @@ -local S = minetest.get_translator("mobs") -local max_per_block = tonumber(minetest.settings:get("max_objects_per_block") or 99) +local S = core.get_translator("mobs") +local max_per_block = tonumber(core.settings:get("max_objects_per_block") or 99) -- helper functions local function is_player(player) - if player and type(player) == "userdata" and minetest.is_player(player) then + if player and type(player) == "userdata" and core.is_player(player) then return true end end @@ -26,7 +26,7 @@ end local spawner_default = "mobs_animal:pumba 10 15 0 0 0" -minetest.register_node("mobs:spawner", { +core.register_node("mobs:spawner", { tiles = {"mob_spawner.png"}, drawtype = "glasslike", paramtype = "light", @@ -40,7 +40,7 @@ minetest.register_node("mobs:spawner", { on_construct = function(pos) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) -- setup formspec local head = S("(mob name) (min light) (max light) (amount)" @@ -48,7 +48,7 @@ minetest.register_node("mobs:spawner", { -- text entry formspec meta:set_string("formspec", "size[10,3.5]" - .. "label[0.15,0.5;" .. minetest.formspec_escape(head) .. "]" + .. "label[0.15,0.5;" .. core.formspec_escape(head) .. "]" .. "field[1,2.5;8.5,0.8;text;" .. S("Command:") .. ";${command}]") @@ -58,19 +58,19 @@ minetest.register_node("mobs:spawner", { on_right_click = function(pos, placer) - if minetest.is_protected(pos, placer:get_player_name()) then return end + if core.is_protected(pos, placer:get_player_name()) then return end end, on_receive_fields = function(pos, formname, fields, sender) if not fields.text or fields.text == "" then return end - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) local comm = fields.text:split(" ") local name = sender:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) + if core.is_protected(pos, name) then + core.record_protection_violation(pos, name) return end @@ -88,8 +88,8 @@ minetest.register_node("mobs:spawner", { meta:set_string("command", fields.text) meta:set_string("infotext", S("Spawner Active (@1)", mob)) else - minetest.chat_send_player(name, S("Mob Spawner settings failed!")) - minetest.chat_send_player(name, + core.chat_send_player(name, S("Mob Spawner settings failed!")) + core.chat_send_player(name, S("Syntax: “name min_light[0-14] max_light[0-14] " .. "max_mobs_in_area[0 to disable] player_distance[1-20] " .. "y_offset[-10 to 10]”")) @@ -99,7 +99,7 @@ minetest.register_node("mobs:spawner", { -- spawner abm -minetest.register_abm({ +core.register_abm({ label = "Mob spawner node", nodenames = {"mobs:spawner"}, interval = 10, @@ -112,7 +112,7 @@ minetest.register_abm({ if active_object_count_wider >= max_per_block then return end -- get meta and command - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) local comm = meta:get_string("command"):split(" ") -- get settings from command @@ -133,7 +133,7 @@ minetest.register_abm({ end -- check objects inside 9x9 area around spawner - local objs = minetest.get_objects_inside_radius(pos, 9) + local objs = core.get_objects_inside_radius(pos, 9) local count = 0 local ent @@ -152,7 +152,7 @@ minetest.register_abm({ if pla > 0 then local in_range, player - local players = minetest.get_connected_players() + local players = core.get_connected_players() for i = 1, #players do @@ -171,12 +171,12 @@ minetest.register_abm({ end -- set medium mob usually spawns in (defaults to air) - local reg = minetest.registered_entities[mob].fly_in + local reg = core.registered_entities[mob].fly_in if not reg or type(reg) == "string" then reg = {(reg or "air")} end -- find air blocks within 5 nodes of spawner - local air = minetest.find_nodes_in_area( + local air = core.find_nodes_in_area( {x = pos.x - 5, y = pos.y + yof, z = pos.z - 5}, {x = pos.x + 5, y = pos.y + yof, z = pos.z + 5}, reg) @@ -184,13 +184,13 @@ minetest.register_abm({ if air and #air > 0 then local pos2 = air[math.random(#air)] - local lig = minetest.get_node_light(pos2) or 0 + local lig = core.get_node_light(pos2) or 0 pos2.y = pos2.y + 0.5 -- only if light levels are within range - if lig >= mlig and lig <= xlig and minetest.registered_entities[mob] then - minetest.add_entity(pos2, mob) + if lig >= mlig and lig <= xlig and core.registered_entities[mob] then + core.add_entity(pos2, mob) end end end