Skip to content

Commit 44ca9c9

Browse files
committedMar 13, 2017
[CSM] Add enable_client_modding param (default: false)
1 parent 0727bb3 commit 44ca9c9

9 files changed

+41
-14
lines changed
 

Diff for: ‎builtin/settingtypes.txt

+3
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,9 @@ show_entity_selectionbox (Show entity selection boxes) bool true
264264
# when connecting to the server.
265265
enable_remote_media_server (Connect to external media server) bool true
266266

267+
# Enable Lua modding support on client.
268+
enable_client_modding (Client modding) bool false
269+
267270
# URL to the server list displayed in the Multiplayer Tab.
268271
serverlist_url (Serverlist URL) string servers.minetest.net
269272

Diff for: ‎minetest.conf.example

+5
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,11 @@
282282
# type: bool
283283
# enable_remote_media_server = true
284284

285+
# Enable Lua modding support on client.
286+
# This support is experimental and API can change.
287+
# type: bool
288+
enable_client_modding (Client modding) bool false
289+
285290
# URL to the server list displayed in the Multiplayer Tab.
286291
# type: string
287292
# serverlist_url = servers.minetest.net

Diff for: ‎src/client.cpp

+9-1
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,8 @@ Client::Client(
248248
m_recommended_send_interval(0.1),
249249
m_removed_sounds_check_timer(0),
250250
m_state(LC_Created),
251-
m_localdb(NULL)
251+
m_localdb(NULL),
252+
m_script(NULL)
252253
{
253254
// Add local player
254255
m_env.setLocalPlayer(new LocalPlayer(this, playername));
@@ -262,6 +263,7 @@ Client::Client(
262263
g_settings->getBool("enable_bumpmapping") ||
263264
g_settings->getBool("enable_parallax_occlusion"));
264265

266+
m_modding_enabled = g_settings->getBool("enable_client_modding");
265267
m_script = new ClientScripting(this);
266268
m_env.setScript(m_script);
267269
}
@@ -270,6 +272,11 @@ void Client::initMods()
270272
{
271273
m_script->loadMod(getBuiltinLuaPath() + DIR_DELIM "init.lua", BUILTIN_MOD_NAME);
272274

275+
// If modding is not enabled, don't load mods, just builtin
276+
if (!m_modding_enabled) {
277+
return;
278+
}
279+
273280
ClientModConfiguration modconf(getClientModsLuaPath());
274281
std::vector<ModSpec> mods = modconf.getMods();
275282
std::vector<ModSpec> unsatisfied_mods = modconf.getUnsatisfiedMods();
@@ -327,6 +334,7 @@ const ModSpec* Client::getModSpec(const std::string &modname) const
327334

328335
void Client::Stop()
329336
{
337+
// Don't disable this part when modding is disabled, it's used in builtin
330338
m_script->on_shutdown();
331339
//request all client managed threads to stop
332340
m_mesh_update_thread.stop();

Diff for: ‎src/client.h

+2
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
572572
}
573573

574574
ClientScripting *getScript() { return m_script; }
575+
const bool moddingEnabled() const { return m_modding_enabled; }
575576

576577
inline void pushToEventQueue(const ClientEvent &event)
577578
{
@@ -722,6 +723,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
722723
bool m_cache_use_tangent_vertices;
723724

724725
ClientScripting *m_script;
726+
bool m_modding_enabled;
725727

726728
DISABLE_CLASS_COPY(Client);
727729
};

Diff for: ‎src/clientenvironment.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,9 @@ void ClientEnvironment::step(float dtime)
245245
}
246246
}
247247

248-
m_script->environment_step(dtime);
248+
if (m_client->moddingEnabled()) {
249+
m_script->environment_step(dtime);
250+
}
249251

250252
/*
251253
A quick draft of lava damage

Diff for: ‎src/defaultsettings.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ void set_default_settings(Settings *settings)
5454
settings->setDefault("curl_file_download_timeout", "300000");
5555
settings->setDefault("curl_verify_cert", "true");
5656
settings->setDefault("enable_remote_media_server", "true");
57+
settings->setDefault("enable_client_modding", "false");
5758

5859
// Keymap
5960
settings->setDefault("remote_port", "30000");

Diff for: ‎src/game.cpp

+13-8
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,8 @@ struct LocalFormspecHandler : public TextDest {
179179
return;
180180
}
181181
}
182+
183+
// Don't disable this part when modding is disabled, it's used in builtin
182184
m_client->getScript()->on_formspec_input(m_formname, fields);
183185
}
184186

@@ -3185,9 +3187,10 @@ void Game::processClientEvents(CameraOrientation *cam, float *damage_flash)
31853187

31863188
for ( ; event.type != CE_NONE; event = client->getClientEvent()) {
31873189

3188-
if (event.type == CE_PLAYER_DAMAGE &&
3189-
client->getHP() != 0) {
3190-
client->getScript()->on_damage_taken(event.player_damage.amount);
3190+
if (event.type == CE_PLAYER_DAMAGE && client->getHP() != 0) {
3191+
if (client->moddingEnabled()) {
3192+
client->getScript()->on_damage_taken(event.player_damage.amount);
3193+
}
31913194

31923195
*damage_flash += 95.0 + 3.2 * event.player_damage.amount;
31933196
*damage_flash = MYMIN(*damage_flash, 127.0);
@@ -3202,6 +3205,7 @@ void Game::processClientEvents(CameraOrientation *cam, float *damage_flash)
32023205
cam->camera_yaw = event.player_force_move.yaw;
32033206
cam->camera_pitch = event.player_force_move.pitch;
32043207
} else if (event.type == CE_DEATHSCREEN) {
3208+
// This should be enabled for death formspec in builtin
32053209
client->getScript()->on_death();
32063210

32073211
/* Handle visualization */
@@ -3902,7 +3906,7 @@ void Game::handleDigging(GameRunData *runData,
39023906

39033907
if (!runData->digging) {
39043908
infostream << "Started digging" << std::endl;
3905-
if (client->getScript()->on_punchnode(nodepos, n))
3909+
if (client->moddingEnabled() && client->getScript()->on_punchnode(nodepos, n))
39063910
return;
39073911
client->interact(0, pointed);
39083912
runData->digging = true;
@@ -3971,7 +3975,7 @@ void Game::handleDigging(GameRunData *runData,
39713975
} else {
39723976
infostream << "Digging completed" << std::endl;
39733977
client->setCrack(-1, v3s16(0, 0, 0));
3974-
3978+
39753979
runData->dig_time = 0;
39763980
runData->digging = false;
39773981

@@ -3993,9 +3997,10 @@ void Game::handleDigging(GameRunData *runData,
39933997
bool is_valid_position;
39943998
MapNode wasnode = map.getNodeNoEx(nodepos, &is_valid_position);
39953999
if (is_valid_position) {
3996-
bool block = client->getScript()->on_dignode(nodepos, wasnode);
3997-
if (block) {
3998-
return;
4000+
if (client->moddingEnabled()) {
4001+
if (client->getScript()->on_dignode(nodepos, wasnode)) {
4002+
return;
4003+
}
39994004
}
40004005
client->removeNode(nodepos);
40014006
}

Diff for: ‎src/network/clientpackethandler.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ void Client::handleCommand_ChatMessage(NetworkPacket* pkt)
413413
}
414414

415415
// If chat message not consummed by client lua API
416-
if (!m_script->on_receiving_message(wide_to_utf8(message))) {
416+
if (!moddingEnabled() || !m_script->on_receiving_message(wide_to_utf8(message))) {
417417
pushToChatQueue(message);
418418
}
419419
}
@@ -526,7 +526,9 @@ void Client::handleCommand_HP(NetworkPacket* pkt)
526526

527527
player->hp = hp;
528528

529-
m_script->on_hp_modification(hp);
529+
if (moddingEnabled()) {
530+
m_script->on_hp_modification(hp);
531+
}
530532

531533
if (hp < oldhp) {
532534
// Add to ClientEvent queue

Diff for: ‎src/script/cpp_api/s_client.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,7 @@ bool ScriptApiClient::on_dignode(v3s16 p, MapNode node)
155155

156156
// Call functions
157157
runCallbacks(2, RUN_CALLBACKS_MODE_OR);
158-
bool blocked = lua_toboolean(L, -1);
159-
return blocked;
158+
return lua_toboolean(L, -1);
160159
}
161160

162161
bool ScriptApiClient::on_punchnode(v3s16 p, MapNode node)

0 commit comments

Comments
 (0)
Please sign in to comment.