From 9697db788f3eaa29c3013b68527c496c2557c3d1 Mon Sep 17 00:00:00 2001 From: OgelGames Date: Fri, 24 May 2024 21:15:51 +1000 Subject: [PATCH] Replace fake player code with `fakelib` (#101) * replace fake player with fakelib * update luacheck workflow * remove depends.txt and description.txt * mention fakelib in readme --- .github/workflows/luacheck.yml | 17 ++-- .luacheckrc | 22 ++--- README.md | 2 +- class_fakeplayer.lua | 143 --------------------------------- class_layout.lua | 2 +- depends.txt | 8 -- description.txt | 5 -- init.lua | 4 +- mod.conf | 2 +- 9 files changed, 21 insertions(+), 184 deletions(-) delete mode 100644 class_fakeplayer.lua delete mode 100644 depends.txt delete mode 100644 description.txt diff --git a/.github/workflows/luacheck.yml b/.github/workflows/luacheck.yml index 1effc90..18088bc 100644 --- a/.github/workflows/luacheck.yml +++ b/.github/workflows/luacheck.yml @@ -1,17 +1,10 @@ name: luacheck - on: [push, pull_request] - jobs: - build: - + luacheck: runs-on: ubuntu-latest - steps: - - uses: actions/checkout@master - - name: apt - run: sudo apt-get install -y luarocks - - name: luacheck install - run: luarocks install --local luacheck - - name: luacheck run - run: $HOME/.luarocks/bin/luacheck ./ + - name: Checkout + uses: actions/checkout@main + - name: Luacheck + uses: lunarmodules/luacheck@master diff --git a/.luacheckrc b/.luacheckrc index d28b414..3a7fac5 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -6,22 +6,24 @@ globals = { } read_globals = { - -- Stdlib - string = {fields = {"split"}}, - table = {fields = {"copy", "getn"}}, - "VoxelManip", - -- Minetest "minetest", - "vector", "ItemStack", - "dump", "VoxelArea", + "vector", + "ItemStack", - -- Deps - "default", "awards", "pipeworks", "hopper", "technic", "doc", "intllib" + -- Mods + "default", + "awards", + "pipeworks", + "hopper", + "technic", + "doc", + "intllib", + "fakelib", } files = { ["doc.lua"] = { max_line_length = 1000 } -} \ No newline at end of file +} diff --git a/README.md b/README.md index 02ae5ad..d5aa448 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Other specialized Digtron blocks include: * A light that can be mounted on a Digtron to illuminate the workspace as it moves * Structural components to make it look cool -The Digtron mod only depends on the default mod, but includes optional support for several other mods: +The Digtron mod only depends on the default mod and [fakelib](https://content.minetest.net/packages/OgelGames/fakelib/), but includes optional support for several other mods: * [doc](https://forum.minetest.net/viewtopic.php?t=15912), an in-game documentation mod. Detailed documentation for all of the Digtron's individual blocks are included as well as pages of general concepts and design tips. * [pipeworks](https://forum.minetest.net/viewtopic.php?id=2155), a set of pneumatic tubes that allows inventory items to be extracted from or inserted into Digtron inventories. diff --git a/class_fakeplayer.lua b/class_fakeplayer.lua deleted file mode 100644 index 91c8d32..0000000 --- a/class_fakeplayer.lua +++ /dev/null @@ -1,143 +0,0 @@ --- 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. - -digtron.DigtronFakePlayer = {} -digtron.DigtronFakePlayer.__index = digtron.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 digtron.DigtronFakePlayer.update(self, pos, player_name) - self.is_fake_player = ":digtron " .. player_name - self.get_pos = return_value(pos) -end - -function digtron.DigtronFakePlayer.create(pos, player_name) - local self = {} - setmetatable(self, digtron.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.set_wielded_item = return_value(false) - 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 \ No newline at end of file diff --git a/class_layout.lua b/class_layout.lua index 678aed2..7ffaa9f 100644 --- a/class_layout.lua +++ b/class_layout.lua @@ -490,7 +490,7 @@ function digtron.DigtronLayout.write_layout_image(self, player) -- fake_player will be passed to callbacks to prevent actual player from "taking the blame" for this action. -- For example, the hunger mod shouldn't be making the player hungry when he moves Digtron. - digtron.fake_player:update(self.controller, player:get_player_name()) + digtron.fake_player:set_pos(self.controller) -- note that the actual player is still passed to the per-node after_place_node and after_dig_node, should they exist. node_callbacks(player) dug_nodes_count = 0 diff --git a/depends.txt b/depends.txt deleted file mode 100644 index c482b27..0000000 --- a/depends.txt +++ /dev/null @@ -1,8 +0,0 @@ -default -pipeworks? -doc? -hopper? -awards? -catacomb? -intllib? -technic? \ No newline at end of file diff --git a/description.txt b/description.txt deleted file mode 100644 index 1f0fdd0..0000000 --- a/description.txt +++ /dev/null @@ -1,5 +0,0 @@ -digtron - a modular tunnel boring/building machine for minetest, v0.7.6 - 2017-01-22 - -Forum : https://forum.minetest.net/viewtopic.php?t=16295 -Github: https://github.com/FaceDeer/digtron/ -Wiki: http://wiki.minetest.net/Mods/digtron \ No newline at end of file diff --git a/init.lua b/init.lua index 665ef65..69aa730 100644 --- a/init.lua +++ b/init.lua @@ -42,10 +42,8 @@ digtron.builder_on_place_prefixes = { local digtron_modpath = minetest.get_modpath( "digtron" ) -dofile( digtron_modpath .. "/class_fakeplayer.lua") - -- since we only need one fake player at a time and it doesn't retain useful state, create a global one and just update it as needed. -digtron.fake_player = digtron.DigtronFakePlayer.create({x=0,y=0,z=0}, "fake_player") +digtron.fake_player = fakelib.create_player() dofile( digtron_modpath .. "/config.lua" ) dofile( digtron_modpath .. "/util.lua" ) diff --git a/mod.conf b/mod.conf index eafca0c..8f2274d 100644 --- a/mod.conf +++ b/mod.conf @@ -2,7 +2,7 @@ name = digtron title = Digtron author = FaceDeer description = Adds components for building modular tunnel boring machines. -depends = default +depends = default, fakelib optional_depends = pipeworks, doc, hopper, awards, catacomb, intllib, technic license = MIT, LGPL 2.1 or later forum = https://forum.minetest.net/viewtopic.php?t=16295