Code Cleanup

This commit is contained in:
ElCeejo 2022-12-03 23:23:06 -08:00
parent 21ad5faf7d
commit 6863359cf6
6 changed files with 80 additions and 89 deletions

View File

@ -58,9 +58,10 @@ if farming_enabled then
for name, def in pairs(minetest.registered_nodes) do
local item_string = name:sub(1, #name - 2)
local item_name = item_string:split(":")[2]
local growth_stage = tonumber(name:sub(-1)) or 1
if farming.registered_plants[item_string]
or farming.registered_plants[item_name] then
def.groups.crop = 2
def.groups.crop = growth_stage
end
minetest.register_node(":" .. name, def)
end
@ -1032,7 +1033,7 @@ creatura.register_utility("animalia:follow_player", function(self, player, force
end)
creatura.register_utility("animalia:flee_from_target", function(self, target)
local los_timeout = 3
local los_timeout = 5
local function func(_self)
local pos = _self.object:get_pos()
if not pos then return end
@ -1041,16 +1042,16 @@ creatura.register_utility("animalia:flee_from_target", function(self, target)
if not los then
los_timeout = los_timeout - _self.dtime
else
los_timeout = 3
los_timeout = 5
end
if los_timeout <= 0 then self._puncher = nil return true end
local dist = vec_dist(pos, tgt_pos)
if dist > _self.tracking_range then self._puncher = nil return true end
if not _self:get_action() then
local flee_dir = vec_dir(tgt_pos, pos)
local pos2 = _self:get_wander_pos(2, 3, flee_dir)
local pos2 = _self:get_wander_pos(1, 2, flee_dir)
local anim = (_self.animations["run"] and "run") or "walk"
creatura.action_move(_self, pos2, 2, "creatura:context_based_steering", 1, anim)
creatura.action_move(_self, pos2, 1, "creatura:context_based_steering", 1, anim)
end
end
self:set_utility(func)
@ -1560,7 +1561,7 @@ creatura.register_utility("animalia:mount_horse", function(self, player)
and vel.y < 1 then
_self.object:add_velocity({
x = 0,
y = _self.jump_power,
y = _self.jump_power * 2,
z = 0
})
elseif not _self.touching_ground then

View File

@ -36,6 +36,7 @@ minetest.register_entity("animalia:lasso_entity", {
if not pos or not parent or not point_to then self.object:remove() return end
if type(parent) == "string" then
parent = minetest.get_player_by_name(parent)
if not parent then self.object:remove() return end
local tgt_pos = parent:get_pos()
tgt_pos.y = tgt_pos.y + 1
point_to.y = point_to.y + pointed_ent.height * 0.5
@ -126,7 +127,7 @@ local function add_lasso(self, origin)
-- Attachment point of entity
ent._attached = origin
if type(origin) == "string" then
local player = minetest.get_player_by_name(origin)
--local player = minetest.get_player_by_name(origin)
--object:set_attach(player)
else
object:set_pos(origin)
@ -171,22 +172,24 @@ function animalia.update_lasso_effects(self)
using_lasso[lasso] = self
local name = lasso
lasso = minetest.get_player_by_name(lasso)
if lasso:get_wielded_item():get_name() ~= "animalia:lasso" then
using_lasso[name] = nil
self._lasso_ent:remove()
self._lasso_ent = nil
self._lassod_to = nil
self:forget("_lassod_to")
if lasso then
if lasso:get_wielded_item():get_name() ~= "animalia:lasso" then
using_lasso[name] = nil
self._lasso_ent:remove()
self._lasso_ent = nil
self._lassod_to = nil
self:forget("_lassod_to")
return
end
local lasso_pos = lasso:get_pos()
local dist = vec_dist(pos, lasso_pos)
local vel = self.object:get_velocity()
if not vel or dist < 8 and self.touching_ground then return end
if vec_len(vel) < 8 then
self.object:add_velocity(get_rope_velocity(pos, lasso_pos, dist))
end
return
end
local lasso_pos = lasso:get_pos()
local dist = vec_dist(pos, lasso_pos)
local vel = self.object:get_velocity()
if not vel or dist < 8 and self.touching_ground then return end
if vec_len(vel) < 8 then
self.object:add_velocity(get_rope_velocity(pos, lasso_pos, dist))
end
return
elseif type(lasso) == "table" then
local dist = vec_dist(pos, lasso)
local vel = self.object:get_velocity()

View File

@ -4,20 +4,10 @@
local random = math.random
local walkable_nodes = {}
local vec_add, vec_sub = vector.add, vector.subtract
local color = minetest.colorize
minetest.register_on_mods_loaded(function()
for name in pairs(minetest.registered_nodes) do
if name ~= "air" and name ~= "ignore" then
if minetest.registered_nodes[name].walkable then
table.insert(walkable_nodes, name)
end
end
end
end)
local function correct_name(str)
if str then
if str:match(":") then str = str:split(":")[2] end
@ -288,7 +278,7 @@ minetest.register_craftitem("animalia:venison_raw", {
groups = {flammable = 2, meat = 1, food_meat = 1},
})
minetest.register_craftitem("animalia:venison_raw_cooked", {
minetest.register_craftitem("animalia:venison_cooked", {
description = "Venison Steak",
inventory_image = "animalia_venison_cooked.png",
on_use = minetest.item_eat(10),
@ -388,45 +378,38 @@ minetest.register_craftitem("animalia:bucket_guano", {
inventory_image = "animalia_guano_bucket.png",
stack_max = 1,
groups = {flammable = 3},
on_place = function(itemstack, placer, pointed_thing)
local pos = pointed_thing.above
if pos then
local under = minetest.get_node(pointed_thing.under)
local node = minetest.registered_nodes[under.name]
if node and node.on_rightclick then
return node.on_rightclick(pointed_thing.under, under, placer,
itemstack)
end
if pos
and not minetest.is_protected(pos, placer:get_player_name()) then
if guano_fert then
local nodes = minetest.find_nodes_in_area_under_air(
vector.subtract(pos, 5),
vector.add(pos, 5),
{"group:grass", "group:plant", "group:flora"}
)
if #nodes > 0 then
for n = 1, #nodes do
grow_crops(nodes[n], minetest.get_node(nodes[n]).name)
end
local replace = itemstack:get_meta():get_string("original_item")
if not replace
or replace == "" then
replace = "bucket:bucket_empty"
end
itemstack:set_name(replace)
end
else
minetest.set_node(pos, {name = "animalia:guano"})
local replace = itemstack:get_meta():get_string("original_item")
if not replace
or replace == "" then
replace = "bucket:bucket_empty"
end
itemstack:set_name(replace)
end
on_place = function(itemstack, placer, pointed)
local pos = pointed.under
local node = minetest.get_node(pos)
if node
and node.on_rightclick then
return node.on_rightclick(pointed_thing.under, under, placer, itemstack)
end
if minetest.is_protected(pos, placer:get_player_name()) then
return
end
local crops = minetest.find_nodes_in_area_under_air(
vec_sub(pos, 5),
vec_add(pos, 5),
{"group:grass", "group:plant", "group:flora", "group:crop"}
) or {}
local crops_grown = 0
for _, crop in ipairs(crops) do
local crop_name = minetest.get_node(crop).name
local growth_stage = tonumber(crop_name:sub(-1)) or 1
local new_name = crop_name:sub(1, #crop_name - 1) .. (growth_stage + 1)
local new_def = minetest.registered_nodes[new_name]
if new_def then
local p2 = new_def.place_param2 or 1
minetest.set_node(crop, {name = new_name, param2 = p2})
crops_grown = crops_grown + 1
end
end
if crops_grown < 1 then minetest.set_node(pointed.above, {name = "animalia:guano"}) end
local meta = itemstack:get_meta()
local og_item = meta:get_string("original_item")
if og_item == "" then og_item = "bucket:bucket_empty" end
itemstack:replace(ItemStack(og_item))
return itemstack
end
})
@ -591,12 +574,16 @@ minetest.register_node("animalia:guano", {
},
groups = {crumbly = 3, falling_node = 1, not_in_creative_inventory = 1},
on_punch = function(pos, _, player)
local item_name = player:get_wielded_item():get_name()
if item_name:find("bucket")
and item_name:find("empty") then
local stack = ItemStack("animalia:bucket_guano")
local inv = player:get_inventory()
local stack = ItemStack("animalia:bucket_guano")
if not inv:room_for_item("main", stack) then return end
local item = player:get_wielded_item()
local item_name = item:get_name()
if item_name:match("bucket_empty") then
item:take_item()
stack:get_meta():set_string("original_item", item_name)
player:set_wielded_item(stack)
inv:add_item("main", stack)
player:set_wielded_item(item)
minetest.remove_node(pos)
end
end

View File

@ -79,18 +79,13 @@ minetest.register_on_mods_loaded(function()
local on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir, damage)
old_punch(self, puncher, time_from_last_punch, tool_capabilities, dir, damage)
local pos = self.object:get_pos()
if not pos then
return
end
if puncher:is_player()
and animalia.pets[puncher:get_player_name()] then
local pets = animalia.pets[puncher:get_player_name()]
if #pets < 1 then return end
for i = 1, #pets do
local ent = pets[i]:get_luaentity()
if ent.assist_owner then
ent.owner_target = self
end
if not pos then return end
local name = puncher:is_player() and puncher:get_player_name()
local pets = (name and animalia.pets[name]) or {}
for _, obj in ipairs(pets) do
local ent = obj and obj:get_luaentity()
if ent.assist_owner then
ent.owner_target = self
end
end
end

View File

@ -201,4 +201,9 @@ creatura.register_mob("animalia:bat", {
on_punch = animalia.punch
})
creatura.register_spawn_egg("animalia:bat", "392517", "321b0b")
creatura.register_spawn_egg("animalia:bat", "392517", "321b0b")
creatura.register_spawn_item("animalia:bat", {
col1 = "392517",
col2 = "321b0b"
})

View File

@ -28,7 +28,7 @@ creatura.register_mob("animalia:bird", {
-- Entity Physics
stepheight = 1.1,
max_fall = 0,
turn_rate = 6,
turn_rate = 3,
boid_seperation = 0.4,
-- Visuals
mesh = "animalia_bird.b3d",