Skip to content

Commit 1292bdb

Browse files
sfan5nerzhul
authored andcommittedApr 11, 2020
Various features and fixes
1 parent 5f3a17e commit 1292bdb

File tree

5 files changed

+123
-69
lines changed

5 files changed

+123
-69
lines changed
 

Diff for: ‎clientmods/preview/init.lua

+5-35
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ core.after(4, function()
3131
end)
3232

3333
core.after(1, function()
34+
print("armor: " .. dump(core.localplayer:get_armor_groups()))
3435
id = core.localplayer:hud_add({
3536
hud_elem_type = "text",
3637
name = "example",
@@ -125,19 +126,6 @@ core.register_chatcommand("dump", {
125126
end,
126127
})
127128

128-
core.register_chatcommand("colorize_test", {
129-
func = function(param)
130-
return true, core.colorize("red", param)
131-
end,
132-
})
133-
134-
core.register_chatcommand("test_node", {
135-
func = function(param)
136-
core.display_chat_message(dump(core.get_node({x=0, y=0, z=0})))
137-
core.display_chat_message(dump(core.get_node_or_nil({x=0, y=0, z=0})))
138-
end,
139-
})
140-
141129
local function preview_minimap()
142130
local minimap = core.ui.minimap
143131
if not minimap then
@@ -157,7 +145,7 @@ end
157145
core.after(2, function()
158146
print("[PREVIEW] loaded " .. modname .. " mod")
159147
modstorage:set_string("current_mod", modname)
160-
print(modstorage:get_string("current_mod"))
148+
assert(modstorage:get_string("current_mod") == modname)
161149
preview_minimap()
162150
end)
163151

@@ -184,30 +172,12 @@ end)
184172

185173
core.register_on_punchnode(function(pos, node)
186174
print("The local player punched a node!")
187-
local itemstack = core.get_wielded_item()
188-
--[[
189-
-- getters
190-
print(dump(itemstack:is_empty()))
191-
print(dump(itemstack:get_name()))
192-
print(dump(itemstack:get_count()))
193-
print(dump(itemstack:get_wear()))
194-
print(dump(itemstack:get_meta()))
195-
print(dump(itemstack:get_metadata()
196-
print(dump(itemstack:is_known()))
197-
--print(dump(itemstack:get_definition()))
198-
print(dump(itemstack:get_tool_capabilities()))
199-
print(dump(itemstack:to_string()))
200-
print(dump(itemstack:to_table()))
201-
-- setters
202-
print(dump(itemstack:set_name("default:dirt")))
203-
print(dump(itemstack:set_count("95")))
204-
print(dump(itemstack:set_wear(934)))
205-
print(dump(itemstack:get_meta()))
206-
print(dump(itemstack:get_metadata()))
207-
--]]
175+
local itemstack = core.localplayer:get_wielded_item()
208176
print(dump(itemstack:to_table()))
209177
print("pos:" .. dump(pos))
210178
print("node:" .. dump(node))
179+
local meta = core.get_meta(pos)
180+
print("punched meta: " .. (meta and dump(meta:to_table()) or "(missing)"))
211181
return false
212182
end)
213183

Diff for: ‎doc/client_lua_api.txt

+26-5
Original file line numberDiff line numberDiff line change
@@ -804,8 +804,6 @@ Call these functions only at load time!
804804
* get max available level for leveled node
805805

806806
### Player
807-
* `minetest.get_wielded_item()`
808-
* Returns the itemstack the local player is holding
809807
* `minetest.send_chat_message(message)`
810808
* Act as if `message` was typed by the player into the terminal.
811809
* `minetest.run_server_chatcommand(cmd, param)`
@@ -1006,6 +1004,10 @@ Methods:
10061004
* returns player HP
10071005
* `get_name()`
10081006
* returns player name
1007+
* `get_wield_index()`
1008+
* returns the index of the wielded item
1009+
* `get_wielded_item()`
1010+
* returns the itemstack the player is holding
10091011
* `is_attached()`
10101012
* returns true if player is attached
10111013
* `is_touching_ground()`
@@ -1029,7 +1031,8 @@ Methods:
10291031
jump = float,
10301032
gravity = float,
10311033
sneak = boolean,
1032-
sneak_glitch = boolean
1034+
sneak_glitch = boolean,
1035+
new_move = boolean,
10331036
}
10341037
```
10351038

@@ -1081,8 +1084,26 @@ Methods:
10811084
* returns last look horizontal angle
10821085
* `get_last_look_vertical()`:
10831086
* returns last look vertical angle
1084-
* `get_key_pressed()`:
1085-
* returns last key typed by the player
1087+
* `get_control()`:
1088+
* returns pressed player controls
1089+
1090+
```lua
1091+
{
1092+
up = boolean,
1093+
down = boolean,
1094+
left = boolean,
1095+
right = boolean,
1096+
jump = boolean,
1097+
aux1 = boolean,
1098+
sneak = boolean,
1099+
zoom = boolean,
1100+
LMB = boolean,
1101+
RMB = boolean,
1102+
}
1103+
```
1104+
1105+
* `get_armor_groups()`
1106+
* returns a table with the armor group ratings
10861107
* `hud_add(definition)`
10871108
* add a HUD element described by HUD def, returns ID number on success and `nil` on failure.
10881109
* See [`HUD definition`](#hud-definition-hud_add-hud_get)

Diff for: ‎src/script/lua_api/l_client.cpp

+9-17
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
2929
#include "cpp_api/s_base.h"
3030
#include "gettext.h"
3131
#include "l_internal.h"
32-
#include "lua_api/l_item.h"
3332
#include "lua_api/l_nodemeta.h"
3433
#include "gui/mainmenumanager.h"
3534
#include "map.h"
@@ -245,25 +244,18 @@ int ModApiClient::l_get_language(lua_State *L)
245244
return 2;
246245
}
247246

248-
// get_wielded_item()
249-
int ModApiClient::l_get_wielded_item(lua_State *L)
250-
{
251-
Client *client = getClient(L);
252-
LocalPlayer *player = client->getEnv().getLocalPlayer();
253-
if (!player)
254-
return 0;
255-
256-
ItemStack selected_item;
257-
player->getWieldedItem(&selected_item, nullptr);
258-
LuaItemStack::create(L, selected_item);
259-
return 1;
260-
}
261-
262247
// get_meta(pos)
263248
int ModApiClient::l_get_meta(lua_State *L)
264249
{
265250
v3s16 p = read_v3s16(L, 1);
266-
NodeMetadata *meta = getClient(L)->getEnv().getMap().getNodeMetadata(p);
251+
252+
// check restrictions first
253+
bool pos_ok;
254+
getClient(L)->CSMGetNode(p, &pos_ok);
255+
if (!pos_ok)
256+
return 0;
257+
258+
NodeMetadata *meta = getEnv(L)->getMap().getNodeMetadata(p);
267259
NodeMetaRef::createClient(L, meta);
268260
return 1;
269261
}
@@ -390,6 +382,7 @@ int ModApiClient::l_get_node_def(lua_State *L)
390382
return 1;
391383
}
392384

385+
// get_privilege_list()
393386
int ModApiClient::l_get_privilege_list(lua_State *L)
394387
{
395388
const Client *client = getClient(L);
@@ -436,7 +429,6 @@ void ModApiClient::Initialize(lua_State *L, int top)
436429
API_FCT(send_respawn);
437430
API_FCT(gettext);
438431
API_FCT(get_node_or_nil);
439-
API_FCT(get_wielded_item);
440432
API_FCT(disconnect);
441433
API_FCT(get_meta);
442434
API_FCT(sound_play);

Diff for: ‎src/script/lua_api/l_localplayer.cpp

+63-11
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
1919

2020
#include "l_localplayer.h"
2121
#include "l_internal.h"
22+
#include "lua_api/l_item.h"
2223
#include "script/common/c_converter.h"
2324
#include "client/localplayer.h"
2425
#include "hud.h"
2526
#include "common/c_content.h"
27+
#include "client/content_cao.h"
2628

2729
LuaLocalPlayer::LuaLocalPlayer(LocalPlayer *m) : m_localplayer(m)
2830
{
@@ -74,6 +76,26 @@ int LuaLocalPlayer::l_get_name(lua_State *L)
7476
return 1;
7577
}
7678

79+
// get_wield_index(self)
80+
int LuaLocalPlayer::l_get_wield_index(lua_State *L)
81+
{
82+
LocalPlayer *player = getobject(L, 1);
83+
84+
lua_pushinteger(L, player->getWieldIndex());
85+
return 1;
86+
}
87+
88+
// get_wielded_item(self)
89+
int LuaLocalPlayer::l_get_wielded_item(lua_State *L)
90+
{
91+
LocalPlayer *player = getobject(L, 1);
92+
93+
ItemStack selected_item;
94+
player->getWieldedItem(&selected_item, nullptr);
95+
LuaItemStack::create(L, selected_item);
96+
return 1;
97+
}
98+
7799
int LuaLocalPlayer::l_is_attached(lua_State *L)
78100
{
79101
LocalPlayer *player = getobject(L, 1);
@@ -130,6 +152,7 @@ int LuaLocalPlayer::l_swimming_vertical(lua_State *L)
130152
return 1;
131153
}
132154

155+
// get_physics_override(self)
133156
int LuaLocalPlayer::l_get_physics_override(lua_State *L)
134157
{
135158
LocalPlayer *player = getobject(L, 1);
@@ -150,14 +173,9 @@ int LuaLocalPlayer::l_get_physics_override(lua_State *L)
150173
lua_pushboolean(L, player->physics_override_sneak_glitch);
151174
lua_setfield(L, -2, "sneak_glitch");
152175

153-
return 1;
154-
}
155-
156-
int LuaLocalPlayer::l_get_override_pos(lua_State *L)
157-
{
158-
LocalPlayer *player = getobject(L, 1);
176+
lua_pushboolean(L, player->physics_override_new_move);
177+
lua_setfield(L, -2, "new_move");
159178

160-
push_v3f(L, player->getPosition());
161179
return 1;
162180
}
163181

@@ -193,14 +211,33 @@ int LuaLocalPlayer::l_get_last_look_horizontal(lua_State *L)
193211
return 1;
194212
}
195213

196-
int LuaLocalPlayer::l_get_key_pressed(lua_State *L)
214+
// get_control(self)
215+
int LuaLocalPlayer::l_get_control(lua_State *L)
197216
{
198217
LocalPlayer *player = getobject(L, 1);
218+
const PlayerControl &c = player->getPlayerControl();
219+
220+
auto set = [L] (const char *name, bool value) {
221+
lua_pushboolean(L, value);
222+
lua_setfield(L, -2, name);
223+
};
224+
225+
lua_createtable(L, 0, 12);
226+
set("up", c.up);
227+
set("down", c.down);
228+
set("left", c.left);
229+
set("right", c.right);
230+
set("jump", c.jump);
231+
set("aux1", c.aux1);
232+
set("sneak", c.sneak);
233+
set("zoom", c.zoom);
234+
set("LMB", c.LMB);
235+
set("RMB", c.RMB);
199236

200-
lua_pushinteger(L, player->last_keyPressed);
201237
return 1;
202238
}
203239

240+
// get_breath(self)
204241
int LuaLocalPlayer::l_get_breath(lua_State *L)
205242
{
206243
LocalPlayer *player = getobject(L, 1);
@@ -209,6 +246,7 @@ int LuaLocalPlayer::l_get_breath(lua_State *L)
209246
return 1;
210247
}
211248

249+
// get_pos(self)
212250
int LuaLocalPlayer::l_get_pos(lua_State *L)
213251
{
214252
LocalPlayer *player = getobject(L, 1);
@@ -217,6 +255,7 @@ int LuaLocalPlayer::l_get_pos(lua_State *L)
217255
return 1;
218256
}
219257

258+
// get_movement_acceleration(self)
220259
int LuaLocalPlayer::l_get_movement_acceleration(lua_State *L)
221260
{
222261
LocalPlayer *player = getobject(L, 1);
@@ -234,6 +273,7 @@ int LuaLocalPlayer::l_get_movement_acceleration(lua_State *L)
234273
return 1;
235274
}
236275

276+
// get_movement_speed(self)
237277
int LuaLocalPlayer::l_get_movement_speed(lua_State *L)
238278
{
239279
LocalPlayer *player = getobject(L, 1);
@@ -257,6 +297,7 @@ int LuaLocalPlayer::l_get_movement_speed(lua_State *L)
257297
return 1;
258298
}
259299

300+
// get_movement(self)
260301
int LuaLocalPlayer::l_get_movement(lua_State *L)
261302
{
262303
LocalPlayer *player = getobject(L, 1);
@@ -278,6 +319,13 @@ int LuaLocalPlayer::l_get_movement(lua_State *L)
278319
return 1;
279320
}
280321

322+
// get_armor_groups(self)
323+
int LuaLocalPlayer::l_get_armor_groups(lua_State *L)
324+
{
325+
LocalPlayer *player = getobject(L, 1);
326+
push_groups(L, player->getCAO()->getGroups());
327+
return 1;
328+
}
281329

282330
// hud_add(self, form)
283331
int LuaLocalPlayer::l_hud_add(lua_State *L)
@@ -407,6 +455,8 @@ const luaL_Reg LuaLocalPlayer::methods[] = {
407455
luamethod(LuaLocalPlayer, get_velocity),
408456
luamethod(LuaLocalPlayer, get_hp),
409457
luamethod(LuaLocalPlayer, get_name),
458+
luamethod(LuaLocalPlayer, get_wield_index),
459+
luamethod(LuaLocalPlayer, get_wielded_item),
410460
luamethod(LuaLocalPlayer, is_attached),
411461
luamethod(LuaLocalPlayer, is_touching_ground),
412462
luamethod(LuaLocalPlayer, is_in_liquid),
@@ -415,17 +465,19 @@ const luaL_Reg LuaLocalPlayer::methods[] = {
415465
luamethod(LuaLocalPlayer, is_climbing),
416466
luamethod(LuaLocalPlayer, swimming_vertical),
417467
luamethod(LuaLocalPlayer, get_physics_override),
418-
luamethod(LuaLocalPlayer, get_override_pos),
468+
// TODO: figure our if these are useful in any way
419469
luamethod(LuaLocalPlayer, get_last_pos),
420470
luamethod(LuaLocalPlayer, get_last_velocity),
421471
luamethod(LuaLocalPlayer, get_last_look_horizontal),
422472
luamethod(LuaLocalPlayer, get_last_look_vertical),
423-
luamethod(LuaLocalPlayer, get_key_pressed),
473+
//
474+
luamethod(LuaLocalPlayer, get_control),
424475
luamethod(LuaLocalPlayer, get_breath),
425476
luamethod(LuaLocalPlayer, get_pos),
426477
luamethod(LuaLocalPlayer, get_movement_acceleration),
427478
luamethod(LuaLocalPlayer, get_movement_speed),
428479
luamethod(LuaLocalPlayer, get_movement),
480+
luamethod(LuaLocalPlayer, get_armor_groups),
429481
luamethod(LuaLocalPlayer, hud_add),
430482
luamethod(LuaLocalPlayer, hud_remove),
431483
luamethod(LuaLocalPlayer, hud_change),

Diff for: ‎src/script/lua_api/l_localplayer.h

+20-1
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,21 @@ class LuaLocalPlayer : public ModApiBase
3232
// garbage collector
3333
static int gc_object(lua_State *L);
3434

35+
// get_velocity(self)
3536
static int l_get_velocity(lua_State *L);
3637

38+
// get_hp(self)
3739
static int l_get_hp(lua_State *L);
3840

41+
// get_name(self)
3942
static int l_get_name(lua_State *L);
4043

44+
// get_wield_index(self)
45+
static int l_get_wield_index(lua_State *L);
46+
47+
// get_wielded_item(self)
48+
static int l_get_wielded_item(lua_State *L);
49+
4150
static int l_is_attached(lua_State *L);
4251
static int l_is_touching_ground(lua_State *L);
4352
static int l_is_in_liquid(lua_State *L);
@@ -54,18 +63,28 @@ class LuaLocalPlayer : public ModApiBase
5463
static int l_get_last_velocity(lua_State *L);
5564
static int l_get_last_look_vertical(lua_State *L);
5665
static int l_get_last_look_horizontal(lua_State *L);
57-
static int l_get_key_pressed(lua_State *L);
5866

67+
// get_control(self)
68+
static int l_get_control(lua_State *L);
69+
70+
// get_breath(self)
5971
static int l_get_breath(lua_State *L);
6072

73+
// get_pos(self)
6174
static int l_get_pos(lua_State *L);
6275

76+
// get_movement_acceleration(self)
6377
static int l_get_movement_acceleration(lua_State *L);
6478

79+
// get_movement_speed(self)
6580
static int l_get_movement_speed(lua_State *L);
6681

82+
// get_movement(self)
6783
static int l_get_movement(lua_State *L);
6884

85+
// get_armor_groups(self)
86+
static int l_get_armor_groups(lua_State *L);
87+
6988
// hud_add(self, id, form)
7089
static int l_hud_add(lua_State *L);
7190

0 commit comments

Comments
 (0)
Please sign in to comment.