From f883ccc3f56dfad10a51c741ab7e8dc1830fcc5a Mon Sep 17 00:00:00 2001 From: IamPyu Date: Sat, 7 Dec 2024 20:28:34 -0600 Subject: [PATCH] Improve command system and add command blocks --- mods/CORE/pyutest/damage.lua | 2 +- .../pyutest/models/pyutest-frying-pan.obj | 325 ------------------ mods/CORE/pyutest/models/pyutest-pig.glb | Bin 13004 -> 0 bytes mods/CORE/pyutest/models/pyutest-pig.gltf | 1 - mods/CORE/pyutest/util.lua | 66 ++++ mods/ITEMS/pyutest_blocks/api.lua | 2 + .../devices/command_block.lua | 29 ++ mods/ITEMS/pyutest_electricity/init.lua | 5 + mods/PLAYER/pyutest_cmds/init.lua | 78 +++++ mods/PLAYER/pyutest_cmds/worldedit.lua | 6 +- mods/PLAYER/pyutest_hud/init.lua | 18 +- textures/pyutest-device.png | Bin 172 -> 153 bytes 12 files changed, 191 insertions(+), 341 deletions(-) delete mode 100644 mods/CORE/pyutest/models/pyutest-frying-pan.obj delete mode 100644 mods/CORE/pyutest/models/pyutest-pig.glb delete mode 100644 mods/CORE/pyutest/models/pyutest-pig.gltf create mode 100644 mods/ITEMS/pyutest_electricity/devices/command_block.lua diff --git a/mods/CORE/pyutest/damage.lua b/mods/CORE/pyutest/damage.lua index 82b731b..6646cb9 100644 --- a/mods/CORE/pyutest/damage.lua +++ b/mods/CORE/pyutest/damage.lua @@ -93,7 +93,7 @@ core.register_on_dieplayer(function(player, reason) end end elseif reason.type == "node_damage" then - local desc = minetest.registered_nodes[reason.node].description or "a block" + local desc = core.registered_nodes[reason.node].description or "a block" message = string.format("%s was killed by %s", playername, desc) end diff --git a/mods/CORE/pyutest/models/pyutest-frying-pan.obj b/mods/CORE/pyutest/models/pyutest-frying-pan.obj deleted file mode 100644 index 8343179..0000000 --- a/mods/CORE/pyutest/models/pyutest-frying-pan.obj +++ /dev/null @@ -1,325 +0,0 @@ -# Made in Blockbench 4.11.1 -mtllib pyutest-frying-pan.mtl - -o cube -v 0.5 -0.4375 0.5 -v 0.5 -0.4375 -0.5 -v 0.5 -0.5 0.5 -v 0.5 -0.5 -0.5 -v -0.5 -0.4375 -0.5 -v -0.5 -0.4375 0.5 -v -0.5 -0.5 -0.5 -v -0.5 -0.5 0.5 -vt 0 1 -vt 1 1 -vt 1 0.9375 -vt 0 0.9375 -vt 0 1 -vt 1 1 -vt 1 0.9375 -vt 0 0.9375 -vt 0 1 -vt 1 1 -vt 1 0.9375 -vt 0 0.9375 -vt 0 1 -vt 1 1 -vt 1 0.9375 -vt 0 0.9375 -vt 0 1 -vt 1 1 -vt 1 0 -vt 0 0 -vt 0 1 -vt 1 1 -vt 1 0 -vt 0 0 -vn 0 0 -1 -vn 1 0 0 -vn 0 0 1 -vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -usemtl none -f 4/4/1 7/3/1 5/2/1 2/1/1 -f 3/8/2 4/7/2 2/6/2 1/5/2 -f 8/12/3 3/11/3 1/10/3 6/9/3 -f 7/16/4 8/15/4 6/14/4 5/13/4 -f 6/20/5 1/19/5 2/18/5 5/17/5 -f 7/24/6 4/23/6 3/22/6 8/21/6 -o cube -v 0.5 -0.3125 -0.4375 -v 0.5 -0.3125 -0.5 -v 0.5 -0.4375 -0.4375 -v 0.5 -0.4375 -0.5 -v -0.5 -0.3125 -0.5 -v -0.5 -0.3125 -0.4375 -v -0.5 -0.4375 -0.5 -v -0.5 -0.4375 -0.4375 -vt 0 1 -vt 1 1 -vt 1 0.875 -vt 0 0.875 -vt 0 1 -vt 0.0625 1 -vt 0.0625 0.875 -vt 0 0.875 -vt 0 1 -vt 1 1 -vt 1 0.875 -vt 0 0.875 -vt 0 1 -vt 0.0625 1 -vt 0.0625 0.875 -vt 0 0.875 -vt 0 1 -vt 1 1 -vt 1 0.9375 -vt 0 0.9375 -vt 0 1 -vt 1 1 -vt 1 0.9375 -vt 0 0.9375 -vn 0 0 -1 -vn 1 0 0 -vn 0 0 1 -vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -usemtl none -f 12/28/7 15/27/7 13/26/7 10/25/7 -f 11/32/8 12/31/8 10/30/8 9/29/8 -f 16/36/9 11/35/9 9/34/9 14/33/9 -f 15/40/10 16/39/10 14/38/10 13/37/10 -f 14/44/11 9/43/11 10/42/11 13/41/11 -f 15/48/12 12/47/12 11/46/12 16/45/12 -o cube -v 0.5 -0.3125 0.5 -v 0.5 -0.3125 0.4375 -v 0.5 -0.4375 0.5 -v 0.5 -0.4375 0.4375 -v -0.5 -0.3125 0.4375 -v -0.5 -0.3125 0.5 -v -0.5 -0.4375 0.4375 -v -0.5 -0.4375 0.5 -vt 0 1 -vt 1 1 -vt 1 0.875 -vt 0 0.875 -vt 0 1 -vt 0.0625 1 -vt 0.0625 0.875 -vt 0 0.875 -vt 0 1 -vt 1 1 -vt 1 0.875 -vt 0 0.875 -vt 0 1 -vt 0.0625 1 -vt 0.0625 0.875 -vt 0 0.875 -vt 0 1 -vt 1 1 -vt 1 0.9375 -vt 0 0.9375 -vt 0 1 -vt 1 1 -vt 1 0.9375 -vt 0 0.9375 -vn 0 0 -1 -vn 1 0 0 -vn 0 0 1 -vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -usemtl none -f 20/52/13 23/51/13 21/50/13 18/49/13 -f 19/56/14 20/55/14 18/54/14 17/53/14 -f 24/60/15 19/59/15 17/58/15 22/57/15 -f 23/64/16 24/63/16 22/62/16 21/61/16 -f 22/68/17 17/67/17 18/66/17 21/65/17 -f 23/72/18 20/71/18 19/70/18 24/69/18 -o cube -v 0.4375000000000001 -0.3125 0.4375 -v 0.5 -0.3125 0.4375 -v 0.4375000000000001 -0.4375 0.4375 -v 0.5 -0.4375 0.4375 -v 0.4999999999999999 -0.3125 -0.4375 -v 0.4374999999999999 -0.3125 -0.4375 -v 0.4999999999999999 -0.4375 -0.4375 -v 0.4374999999999999 -0.4375 -0.4375 -vt 0 1 -vt 0.875 1 -vt 0.875 0.875 -vt 0 0.875 -vt 0 1 -vt 0.0625 1 -vt 0.0625 0.875 -vt 0 0.875 -vt 0 1 -vt 0.875 1 -vt 0.875 0.875 -vt 0 0.875 -vt 0 1 -vt 0.0625 1 -vt 0.0625 0.875 -vt 0 0.875 -vt 0 1 -vt 0.875 1 -vt 0.875 0.9375 -vt 0 0.9375 -vt 0 1 -vt 0.875 1 -vt 0.875 0.9375 -vt 0 0.9375 -vn 1 0 -2.220446049250313e-16 -vn 2.220446049250313e-16 0 1 -vn -1 0 2.220446049250313e-16 -vn -2.220446049250313e-16 0 -1 -vn 0 1 0 -vn 0 -1 0 -usemtl none -f 28/76/19 31/75/19 29/74/19 26/73/19 -f 27/80/20 28/79/20 26/78/20 25/77/20 -f 32/84/21 27/83/21 25/82/21 30/81/21 -f 31/88/22 32/87/22 30/86/22 29/85/22 -f 30/92/23 25/91/23 26/90/23 29/89/23 -f 31/96/24 28/95/24 27/94/24 32/93/24 -o cube -v -0.4999999999999999 -0.3125 0.4375 -v -0.4374999999999999 -0.3125 0.4375 -v -0.4999999999999999 -0.4375 0.4375 -v -0.4374999999999999 -0.4375 0.4375 -v -0.4375000000000001 -0.3125 -0.4375 -v -0.5000000000000001 -0.3125 -0.4375 -v -0.4375000000000001 -0.4375 -0.4375 -v -0.5000000000000001 -0.4375 -0.4375 -vt 0 1 -vt 0.875 1 -vt 0.875 0.875 -vt 0 0.875 -vt 0 1 -vt 0.0625 1 -vt 0.0625 0.875 -vt 0 0.875 -vt 0 1 -vt 0.875 1 -vt 0.875 0.875 -vt 0 0.875 -vt 0 1 -vt 0.0625 1 -vt 0.0625 0.875 -vt 0 0.875 -vt 0 1 -vt 0.875 1 -vt 0.875 0.9375 -vt 0 0.9375 -vt 0 1 -vt 0.875 1 -vt 0.875 0.9375 -vt 0 0.9375 -vn 1 0 -2.220446049250313e-16 -vn 2.220446049250313e-16 0 1 -vn -1 0 2.220446049250313e-16 -vn -2.220446049250313e-16 0 -1 -vn 0 1 0 -vn 0 -1 0 -usemtl none -f 36/100/25 39/99/25 37/98/25 34/97/25 -f 35/104/26 36/103/26 34/102/26 33/101/26 -f 40/108/27 35/107/27 33/106/27 38/105/27 -f 39/112/28 40/111/28 38/110/28 37/109/28 -f 38/116/29 33/115/29 34/114/29 37/113/29 -f 39/120/30 36/119/30 35/118/30 40/117/30 -o cube -v 0.0625 -0.3125 1.25 -v 0.0625 -0.3125 0.625 -v 0.0625 -0.4375 1.25 -v 0.0625 -0.4375 0.625 -v -0.0625 -0.3125 0.625 -v -0.0625 -0.3125 1.25 -v -0.0625 -0.4375 0.625 -v -0.0625 -0.4375 1.25 -vt 0 1 -vt 0.125 1 -vt 0.125 0.875 -vt 0 0.875 -vt 0 1 -vt 0.625 1 -vt 0.625 0.875 -vt 0 0.875 -vt 0 1 -vt 0.125 1 -vt 0.125 0.875 -vt 0 0.875 -vt 0 1 -vt 0.625 1 -vt 0.625 0.875 -vt 0 0.875 -vt 0 1 -vt 0.125 1 -vt 0.125 0.375 -vt 0 0.375 -vt 0 1 -vt 0.125 1 -vt 0.125 0.375 -vt 0 0.375 -vn 0 0 -1 -vn 1 0 0 -vn 0 0 1 -vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -usemtl none -f 44/124/31 47/123/31 45/122/31 42/121/31 -f 43/128/32 44/127/32 42/126/32 41/125/32 -f 48/132/33 43/131/33 41/130/33 46/129/33 -f 47/136/34 48/135/34 46/134/34 45/133/34 -f 46/140/35 41/139/35 42/138/35 45/137/35 -f 47/144/36 44/143/36 43/142/36 48/141/36 -o cube -v 0.125 -0.3125 0.625 -v 0.125 -0.3125 0.5 -v 0.125 -0.4375 0.625 -v 0.125 -0.4375 0.5 -v -0.125 -0.3125 0.5 -v -0.125 -0.3125 0.625 -v -0.125 -0.4375 0.5 -v -0.125 -0.4375 0.625 -vt 0 1 -vt 0.25 1 -vt 0.25 0.875 -vt 0 0.875 -vt 0 1 -vt 0.125 1 -vt 0.125 0.875 -vt 0 0.875 -vt 0 1 -vt 0.25 1 -vt 0.25 0.875 -vt 0 0.875 -vt 0 1 -vt 0.125 1 -vt 0.125 0.875 -vt 0 0.875 -vt 0 1 -vt 0.25 1 -vt 0.25 0.875 -vt 0 0.875 -vt 0 1 -vt 0.25 1 -vt 0.25 0.875 -vt 0 0.875 -vn 0 0 -1 -vn 1 0 0 -vn 0 0 1 -vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -usemtl none -f 52/148/37 55/147/37 53/146/37 50/145/37 -f 51/152/38 52/151/38 50/150/38 49/149/38 -f 56/156/39 51/155/39 49/154/39 54/153/39 -f 55/160/40 56/159/40 54/158/40 53/157/40 -f 54/164/41 49/163/41 50/162/41 53/161/41 -f 55/168/42 52/167/42 51/166/42 56/165/42 \ No newline at end of file diff --git a/mods/CORE/pyutest/models/pyutest-pig.glb b/mods/CORE/pyutest/models/pyutest-pig.glb deleted file mode 100644 index c8ea09eb4d8f564b1b4717b95bde39df3c359f55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13004 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 +There are some text replacement macros you can use. +Here is a list of them: +- %s: Replaced with your username +]], + func = function(name, param) + local str = param + str = str:gsub("%%s", name) + + core.chat_send_all(str) + end +}) + +core.register_chatcommand("teleport", { + params = " ", + description = "Teleport to ", + func = function(name, param) + local found, _, player, x, y, z = param:find("^([^%s]+)%s+([^%s]+)%s+([^%s]+)%s+([^%s]+)$") + + if found == nil then + core.chat_send_player(name, "Invalid usage: " .. param) + return + end + + local targets = PyuTest.chatcommand_entity_selector(name, player) + for _, v in pairs(targets) do + if not core.get_player_by_name(v) then + core.chat_send_player(name, "Invalid player: " .. v) + return + end + end + + for _, v in pairs(targets) do + local plr = core.get_player_by_name(v) + local pos = plr:get_pos() + + local nx = core.parse_relative_number(x, pos.x) + local ny = core.parse_relative_number(y, pos.y) + local nz = core.parse_relative_number(z, pos.z) + + plr:set_pos(vector.new(nx, ny, nz)) + end + end +}) + +core.register_chatcommand("execute", { + params = "at|as ", + description = "Execute as or at ", + func = function (name, param) + local found, _, method, player, command = param:find("^([^%s]+)%s+([^%s]+)%s+(.*)$") + + if found == nil then + core.chat_send_player(name, "Invalid usage: " .. param) + return + end + local targets = PyuTest.chatcommand_entity_selector(name, player) + + for _, v in pairs(targets) do + if not core.get_player_by_name(v) then + core.chat_send_player(name, "Invalid player: " .. v) + return + end + end + + for _, v in pairs(targets) do + if method == "as" then + PyuTest.execute_as(v, command) + elseif method == "at" then + -- TODO + end + end + + end +}) + dofile(modpath .. "/worldedit.lua") dofile(modpath .. "/gameplay.lua") dofile(modpath .. "/fun.lua") diff --git a/mods/PLAYER/pyutest_cmds/worldedit.lua b/mods/PLAYER/pyutest_cmds/worldedit.lua index dc9d675..5543a93 100644 --- a/mods/PLAYER/pyutest_cmds/worldedit.lua +++ b/mods/PLAYER/pyutest_cmds/worldedit.lua @@ -24,10 +24,10 @@ core.register_chatcommand("replacenear", { local function replace(p) for _, v in pairs(from) do - local name = core.get_node(p).name - local anyblock_match = (v == "anyblock" or v == "anynode" and name ~= "air" and name ~= "ignore") + local nname = core.get_node(p).name + local anyblock_match = (v == "anyblock" or v == "anynode" and nname ~= "air" and nname ~= "ignore") - if name == v or v == "any" or anyblock_match then + if nname == v or v == "any" or anyblock_match then core.set_node(p, { name = to }) replaced = replaced + 1 end diff --git a/mods/PLAYER/pyutest_hud/init.lua b/mods/PLAYER/pyutest_hud/init.lua index e308afb..9086263 100644 --- a/mods/PLAYER/pyutest_hud/init.lua +++ b/mods/PLAYER/pyutest_hud/init.lua @@ -10,23 +10,19 @@ PyuTest.Hudbar = {} local HudbarMeta = { __index = PyuTest.Hudbar, __newindex = PyuTest.Hudbar } core.register_on_joinplayer(function(player) + local key = player:get_player_name() + PyuTest.HUDBARS.players[key] = PyuTest.HUDBARS.players[key] or {} for k, v in pairs(PyuTest.HUDBARS.defs) do - local key = player:get_player_name() - if PyuTest.HUDBARS.players[key] == nil then - PyuTest.HUDBARS.players[key] = {} - end local ref = PyuTest.HUDBARS.players[key] ref[k] = {idx = player:hud_add(v.cfg), name = k} end -end) -core.register_globalstep(function(dtime) - for _, player in pairs(core.get_connected_players()) do - for _, v in pairs(PyuTest.HUDBARS.players[player:get_player_name()]) do - PyuTest.HUDBARS.defs[v.name].update(v.idx, player) - end - end + core.register_globalstep(function(dtime) + for _, v in pairs(PyuTest.HUDBARS.players[key]) do + PyuTest.HUDBARS.defs[v.name].update(v.idx, player) + end + end) end) function PyuTest.Hudbar:add(name, def, update) diff --git a/textures/pyutest-device.png b/textures/pyutest-device.png index ac63bb5d7a9383da13653efb7ae6d34b0eef1558..35c99f28ab3acc3377d61d637691335861f942f5 100644 GIT binary patch delta 124 zcmV-?0E7Rm0hs}iBz0g(L_t(Ijbqf*RQ}IE0bpTZU|BL_t(Ijm?w64S+BV0}Wz_43YgeNruQ2@I#2iRUtg^vx={7 z>n>)tqoEA|RP~kF-LZCdKNB$eRV-x*aCbyRTCX7K2+SN2DOCb6^9a(u#Ge6F6(T~1 yMI^mMO28nM86Z8V1|Jn^WVq{_zfd)7RtKCiD`c;dqQ?LL00{s|MNUMnLSTZrxj5kf