Added license and modularized
authorGabriel Pérez-Cerezo <gabriel@gpcf.eu>
Sun, 12 Nov 2017 12:49:37 +0000 (13:49 +0100)
committerGabriel Pérez-Cerezo <gabriel@gpcf.eu>
Sun, 12 Nov 2017 12:49:37 +0000 (13:49 +0100)
LICENSE [new file with mode: 0644]
fakeplayer.lua [new file with mode: 0644]
init.lua

diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..0184e79
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+Copyright (C) 2017 Gabriel Pérez-Cerezo
+fakeplayer.lua: (C) 2017 FaceDeer
+
+The MIT License (MIT)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/fakeplayer.lua b/fakeplayer.lua
new file mode 100644 (file)
index 0000000..d56f29a
--- /dev/null
@@ -0,0 +1,173 @@
+-- mostly taken from the digtron mod
+
+-- Copyright (C) 2017 FaceDeer, licensed under MIT license
+
+-- The purpose of this class is to have something that can be passed into callbacks that
+-- demand a "Player" object as a parameter and hopefully prevent the mods that have
+-- registered with those callbacks from crashing on a nil dereference or bad function
+-- call. This is not supposed to be a remotely functional thing, it's just supposed
+-- to provide dummy methods and return values of the correct data type for anything that 
+-- might ignore the false "is_player()" return and go ahead and try to use this thing
+-- anyway.
+
+-- I'm trying to patch holes in bad mod programming, essentially. If a mod is so badly
+-- programmed that it crashes anyway there's not a lot else I can do on my end of things.
+
+
+
+feedlotFakePlayer = {}
+feedlotFakePlayer.__index = feedlotFakePlayer
+
+local function return_value(x)
+       return (function() return x end)
+end
+
+local function return_nil()
+       return nil
+end
+
+local function return_empty_string()
+       return ""
+end
+
+local function return_zero()
+       return 0
+end
+
+local function return_empty_table()
+       return {}
+end
+
+function feedlotFakePlayer.update(self, pos, player_name)
+       self.is_fake_player = ":digtron " .. player_name
+       self.get_pos = return_value(pos)
+end
+local function get_feed (pos)
+   return function ()
+      local meta = minetest.get_meta(pos)
+      local inv = meta:get_inventory()
+      if not inv or not inv:get_list("main") then
+        return ItemStack(nil)
+      end
+      -- minetest.chat_send_all(inv:get_stack("main", 1):get_name())
+      return inv:get_stack("main", 1)
+   end
+end
+local function set_feed (pos)
+   return function (_, stack)
+      local meta = minetest.get_meta(pos)
+      local inv = meta:get_inventory()
+      inv:set_stack("main", 1, stack)
+      return 
+   end
+end
+
+function feedlotFakePlayer.create(pos, player_name)
+       local self = {}
+       setmetatable(self, feedlotFakePlayer)
+       
+       self.is_fake_player = ":digtron " .. player_name
+
+       -- ObjectRef    
+       self.get_pos = return_value(pos)
+       self.set_pos = return_nil
+       self.move_to = return_nil
+       self.punch = return_nil
+       self.right_click = return_nil
+       self.get_hp = return_value(10)
+       self.set_hp = return_nil
+       self.get_inventory = return_nil -- returns an `InvRef`
+       self.get_wield_list = return_empty_string
+       self.get_wield_index = return_value(1)
+--     self.get_wielded_item = return_value(ItemStack(nil))
+       self.get_wielded_item = get_feed(pos)
+       self.set_wielded_item = set_feed(pos)
+
+       self.set_armor_groups = return_nil
+       self.get_armor_groups = return_empty_table
+       self.set_animation = return_nil
+       self.get_animation = return_nil -- a set of values, maybe important?
+       self.set_attach = return_nil
+       self.get_attach = return_nil
+       self.set_detach = return_nil
+       self.set_bone_position = return_nil
+       self.get_bone_position = return_nil
+       self.set_properties = return_nil
+       self.get_properties = return_empty_table
+
+       self.is_player = return_value(false)
+       
+       self.get_nametag_attributes = return_empty_table
+       self.set_nametag_attributes = return_nil
+
+       --LuaEntitySAO
+       self.set_velocity = return_nil
+       self.get_velocity = return_value({x=0,y=0,z=0})
+       self.set_acceleration = return_nil
+       self.get_acceleration = return_value({x=0,y=0,z=0})
+       self.set_yaw = return_nil
+       self.get_yaw = return_zero
+       self.set_texture_mod = return_nil
+       self.get_texture_mod = return_nil -- maybe important?
+       self.set_sprite = return_nil
+       --self.get_entity_name` (**Deprecated**: Will be removed in a future version)
+       self.get_luaentity = return_nil
+
+       -- Player object
+       
+       self.get_player_name = return_empty_string
+       self.get_player_velocity = return_nil
+       self.get_look_dir = return_value({x=0,y=1,z=0})
+       self.get_look_horizontal = return_zero
+       self.set_look_horizontal = return_nil
+       self.get_look_vertical = return_zero
+       self.set_look_vertical = return_nil
+
+       --self.get_look_pitch`: pitch in radians - Deprecated as broken. Use `get_look_vertical`
+       --self.get_look_yaw`: yaw in radians - Deprecated as broken. Use `get_look_horizontal`
+       --self.set_look_pitch(radians)`: sets look pitch - Deprecated. Use `set_look_vertical`.
+       --self.set_look_yaw(radians)`: sets look yaw - Deprecated. Use `set_look_horizontal`.
+       self.get_breath = return_value(10)
+       self.set_breath = return_nil
+       self.get_attribute = return_nil
+       self.set_attribute = return_nil
+
+       self.set_inventory_formspec = return_nil
+       self.get_inventory_formspec = return_empty_string
+       self.get_player_control = return_value({jump=false, right=false, left=false, LMB=false, RMB=false, sneak=false, aux1=false, down=false, up=false} )
+    self.get_player_control_bits = return_zero
+
+       self.set_physics_override = return_nil
+       self.get_physics_override = return_value({speed = 1, jump = 1, gravity = 1, sneak = true, sneak_glitch = false, new_move = true,})
+       
+       
+       self.hud_add = return_nil
+       self.hud_remove = return_nil
+       self.hud_change = return_nil
+       self.hud_get = return_nil -- possibly important return value?
+       self.hud_set_flags = return_nil 
+       self.hud_get_flags = return_value({ hotbar=true, healthbar=true, crosshair=true, wielditem=true, breathbar=true, minimap=true })
+       self.hud_set_hotbar_itemcount = return_nil
+       self.hud_get_hotbar_itemcount = return_zero
+       self.hud_set_hotbar_image = return_nil
+       self.hud_get_hotbar_image = return_empty_string
+       self.hud_set_hotbar_selected_image = return_nil
+       self.hud_get_hotbar_selected_image = return_empty_string
+       self.set_sky = return_nil
+       self.get_sky = return_empty_table -- may need members on this table
+       
+       self.set_clouds = return_nil
+       self.get_clouds = return_value({density = 0, color = "#fff0f0e5", ambient = "#000000", height = 120, thickness = 16, speed = {x=0, y=-2}})
+       
+       self.override_day_night_ratio = return_nil
+       self.get_day_night_ratio = return_nil
+       
+       self.set_local_animation = return_nil
+       self.get_local_animation = return_empty_table
+       
+       self.set_eye_offset = return_nil
+       self.get_eye_offset = return_value({x=0,y=0,z=0},{x=0,y=0,z=0})
+       
+       return self
+end
+
index 6480887..26aa1d9 100644 (file)
--- a/init.lua
+++ b/init.lua
@@ -1,170 +1,7 @@
--- The purpose of this class is to have something that can be passed into callbacks that
--- demand a "Player" object as a parameter and hopefully prevent the mods that have
--- registered with those callbacks from crashing on a nil dereference or bad function
--- call. This is not supposed to be a remotely functional thing, it's just supposed
--- to provide dummy methods and return values of the correct data type for anything that 
--- might ignore the false "is_player()" return and go ahead and try to use this thing
--- anyway.
-
--- I'm trying to patch holes in bad mod programming, essentially. If a mod is so badly
--- programmed that it crashes anyway there's not a lot else I can do on my end of things.
-
-DigtronFakePlayer = {}
-DigtronFakePlayer.__index = DigtronFakePlayer
-
-local function return_value(x)
-       return (function() return x end)
-end
-
-local function return_nil()
-       return nil
-end
-
-local function return_empty_string()
-       return ""
-end
-
-local function return_zero()
-       return 0
-end
-
-local function return_empty_table()
-       return {}
-end
-
-function DigtronFakePlayer.update(self, pos, player_name)
-       self.is_fake_player = ":digtron " .. player_name
-       self.get_pos = return_value(pos)
-end
-local function get_feed (pos)
-   return function ()
-      local meta = minetest.get_meta(pos)
-      local inv = meta:get_inventory()
-      if not inv or not inv:get_list("main") then
-        return ItemStack(nil)
-      end
-      -- minetest.chat_send_all(inv:get_stack("main", 1):get_name())
-      return inv:get_stack("main", 1)
-   end
-end
-local function set_feed (pos)
-   return function (_, stack)
-      local meta = minetest.get_meta(pos)
-      local inv = meta:get_inventory()
-      inv:set_stack("main", 1, stack)
-      return 
-   end
-end
-
-function DigtronFakePlayer.create(pos, player_name)
-       local self = {}
-       setmetatable(self, DigtronFakePlayer)
-       
-       self.is_fake_player = ":digtron " .. player_name
-
-       -- ObjectRef    
-       self.get_pos = return_value(pos)
-       self.set_pos = return_nil
-       self.move_to = return_nil
-       self.punch = return_nil
-       self.right_click = return_nil
-       self.get_hp = return_value(10)
-       self.set_hp = return_nil
-       self.get_inventory = return_nil -- returns an `InvRef`
-       self.get_wield_list = return_empty_string
-       self.get_wield_index = return_value(1)
---     self.get_wielded_item = return_value(ItemStack(nil))
-       self.get_wielded_item = get_feed(pos)
-       self.set_wielded_item = set_feed(pos)
-
-       self.set_armor_groups = return_nil
-       self.get_armor_groups = return_empty_table
-       self.set_animation = return_nil
-       self.get_animation = return_nil -- a set of values, maybe important?
-       self.set_attach = return_nil
-       self.get_attach = return_nil
-       self.set_detach = return_nil
-       self.set_bone_position = return_nil
-       self.get_bone_position = return_nil
-       self.set_properties = return_nil
-       self.get_properties = return_empty_table
-
-       self.is_player = return_value(false)
-       
-       self.get_nametag_attributes = return_empty_table
-       self.set_nametag_attributes = return_nil
-
-       --LuaEntitySAO
-       self.set_velocity = return_nil
-       self.get_velocity = return_value({x=0,y=0,z=0})
-       self.set_acceleration = return_nil
-       self.get_acceleration = return_value({x=0,y=0,z=0})
-       self.set_yaw = return_nil
-       self.get_yaw = return_zero
-       self.set_texture_mod = return_nil
-       self.get_texture_mod = return_nil -- maybe important?
-       self.set_sprite = return_nil
-       --self.get_entity_name` (**Deprecated**: Will be removed in a future version)
-       self.get_luaentity = return_nil
-
-       -- Player object
-       
-       self.get_player_name = return_empty_string
-       self.get_player_velocity = return_nil
-       self.get_look_dir = return_value({x=0,y=1,z=0})
-       self.get_look_horizontal = return_zero
-       self.set_look_horizontal = return_nil
-       self.get_look_vertical = return_zero
-       self.set_look_vertical = return_nil
-
-       --self.get_look_pitch`: pitch in radians - Deprecated as broken. Use `get_look_vertical`
-       --self.get_look_yaw`: yaw in radians - Deprecated as broken. Use `get_look_horizontal`
-       --self.set_look_pitch(radians)`: sets look pitch - Deprecated. Use `set_look_vertical`.
-       --self.set_look_yaw(radians)`: sets look yaw - Deprecated. Use `set_look_horizontal`.
-       self.get_breath = return_value(10)
-       self.set_breath = return_nil
-       self.get_attribute = return_nil
-       self.set_attribute = return_nil
-
-       self.set_inventory_formspec = return_nil
-       self.get_inventory_formspec = return_empty_string
-       self.get_player_control = return_value({jump=false, right=false, left=false, LMB=false, RMB=false, sneak=false, aux1=false, down=false, up=false} )
-    self.get_player_control_bits = return_zero
-
-       self.set_physics_override = return_nil
-       self.get_physics_override = return_value({speed = 1, jump = 1, gravity = 1, sneak = true, sneak_glitch = false, new_move = true,})
-       
-       
-       self.hud_add = return_nil
-       self.hud_remove = return_nil
-       self.hud_change = return_nil
-       self.hud_get = return_nil -- possibly important return value?
-       self.hud_set_flags = return_nil 
-       self.hud_get_flags = return_value({ hotbar=true, healthbar=true, crosshair=true, wielditem=true, breathbar=true, minimap=true })
-       self.hud_set_hotbar_itemcount = return_nil
-       self.hud_get_hotbar_itemcount = return_zero
-       self.hud_set_hotbar_image = return_nil
-       self.hud_get_hotbar_image = return_empty_string
-       self.hud_set_hotbar_selected_image = return_nil
-       self.hud_get_hotbar_selected_image = return_empty_string
-       self.set_sky = return_nil
-       self.get_sky = return_empty_table -- may need members on this table
-       
-       self.set_clouds = return_nil
-       self.get_clouds = return_value({density = 0, color = "#fff0f0e5", ambient = "#000000", height = 120, thickness = 16, speed = {x=0, y=-2}})
-       
-       self.override_day_night_ratio = return_nil
-       self.get_day_night_ratio = return_nil
-       
-       self.set_local_animation = return_nil
-       self.get_local_animation = return_empty_table
-       
-       self.set_eye_offset = return_nil
-       self.get_eye_offset = return_value({x=0,y=0,z=0},{x=0,y=0,z=0})
-       
-       return self
-end
+-- feedlot mod Copyright (C) 2017 Gabriel Pérez-Cerezo
 
+local modpath = minetest.get_modpath( "feedlot" )
+dofile(modpath.."/fakeplayer.lua")
 
 local function get_formspec(pos)
    local spos = pos.x .. "," ..pos.y .. "," .. pos.z
@@ -242,7 +79,7 @@ minetest.register_abm({
       chance = 1,
 
       action = function (pos)
-        local fake_player = DigtronFakePlayer.create(pos, "fake_player")
+        local fake_player = feedlotFakePlayer.create(pos, "fake_player")
         local objs = minetest.get_objects_inside_radius(pos, 3)
         for _,obj in ipairs(objs) do
            if not obj:is_player() and obj:get_armor_groups().fleshy and obj:get_armor_groups().fleshy > 0 and is_mob(obj) then