From eca6cd30b6832410954dd272c318b15ffff3bf91 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Tue, 14 Feb 2017 23:41:19 +0100 Subject: [PATCH] Refactor throwable code even more, add mini API --- mods/mcl_throwing/throwable.lua | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/mods/mcl_throwing/throwable.lua b/mods/mcl_throwing/throwable.lua index baeb7d7b69..3d84a6e557 100644 --- a/mods/mcl_throwing/throwable.lua +++ b/mods/mcl_throwing/throwable.lua @@ -4,26 +4,39 @@ local GRAVITY = tonumber(minetest.setting_get("movement_gravity")) +local entity_mapping = { + ["mcl_throwing:snowball"] = "mcl_throwing:snowball_entity", + ["mcl_throwing:egg"] = "mcl_throwing:egg_entity", + ["mcl_throwing:ender_pearl"] = "mcl_throwing:ender_pearl_entity", +} + local velocities = { ["mcl_throwing:snowball_entity"] = 22, ["mcl_throwing:egg_entity"] = 22, ["mcl_throwing:ender_pearl_entity"] = 22, } --- Throw item -local throw_function = function(entity_name, velocity) +mcl_throwing.throw = function(throw_item, pos, dir, velocity) if velocity == nil then velocity = velocities[entity_name] end if velocity == nil then velocity = 22 end + + local itemstring = throw_item:get_name() + local obj = minetest.add_entity(pos, entity_mapping[itemstring]) + obj:setvelocity({x=dir.x*velocity, y=dir.y*velocity, z=dir.z*velocity}) + obj:setacceleration({x=dir.x*-3, y=-GRAVITY, z=dir.z*-3}) + return obj +end + +-- Throw item +local throw_function = function(entity_name, velocity) local func = function(item, player, pointed_thing) - local playerpos=player:getpos() - local obj=minetest.add_entity({x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, entity_name) - local dir=player:get_look_dir() - obj:setvelocity({x=dir.x*velocity, y=dir.y*velocity, z=dir.z*velocity}) - obj:setacceleration({x=dir.x*-3, y=-GRAVITY, z=dir.z*-3}) + local playerpos = player:getpos() + local dir = player:get_look_dir() + local obj = mcl_throwing.throw(item, {x=playerpos.x, y=playerpos.y+1.5, z=playerpos.z}, dir, velocity) obj:get_luaentity()._thrower = player:get_player_name() if not minetest.setting_getbool("creative_mode") then item:take_item()