Skip to content

Commit

Permalink
[LuaCore] New event 'PlayerConnected' added.
Browse files Browse the repository at this point in the history
  • Loading branch information
Unarelith committed May 22, 2020
1 parent b789fc3 commit b344805
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 50 deletions.
13 changes: 7 additions & 6 deletions docs/lua-api-core.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ Adds a listener to a specific type of event.

Example:
```lua
openminer:add_listener(EventType.OnBlockPlaced, function(pos, block, player, world, client, server)
openminer:add_listener(Event.BlockPlaced, function(pos, block, player, world, client, server)
server:send_chat_message(0, "Block placed at " .. pos.x .. ";" .. pos.y .. ";" .. pos.z .. " by Client" .. player:client_id(), client);
end)

openminer:add_listener(EventType.OnBlockDigged, function(pos, block, player, world, client, server)
openminer:add_listener(Event.BlockDigged, function(pos, block, player, world, client, server)
server:send_chat_message(0, "Block digged at " .. pos.x .. ";" .. pos.y .. ";" .. pos.z .. " by Client" .. player:client_id(), client);
end)

openminer:add_listener(EventType.OnBlockActivated, function(pos, block, player, world, client, server)
openminer:add_listener(Event.BlockActivated, function(pos, block, player, world, client, server)
if block:string_id() == "default:portal" then
server:send_chat_message(0, "Swoosh! Changing dimension...", client);
end
Expand All @@ -35,7 +35,8 @@ end)

Possible events:

- `OnBlockPlaced`: `funcion(pos, block, player, world, client, server)`
- `OnBlockDigged`: `funcion(pos, block, player, world, client, server)`
- `OnBlockActivated`: `function(pos, block, player, world, client, server)`
- `BlockPlaced`: `funcion(pos, block, player, world, client, server)`
- `BlockDigged`: `funcion(pos, block, player, world, client, server)`
- `BlockActivated`: `function(pos, block, player, world, client, server)`
- `PlayerConnected`: `function(pos, player, client, server)`

72 changes: 40 additions & 32 deletions mods/default/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -37,46 +37,54 @@ dofile("trees.lua")
dofile("biomes.lua")
dofile("dimensions.lua")

-- openminer:add_listener(EventType.OnBlockPlaced, function(pos, block, player, world, client, server)
-- server:send_chat_message(0, "Block placed at " .. pos.x .. ";" .. pos.y .. ";" .. pos.z .. " by Client" .. player:client_id(), client);
-- openminer:add_listener(Event.BlockPlaced, function(pos, block, player, world, client, server)
-- server:send_chat_message(0, "Block placed at " .. pos.x .. ";" .. pos.y .. ";" .. pos.z .. " by Client" .. player:client_id(), client)
-- end)

-- openminer:add_listener(EventType.OnBlockDigged, function(pos, block, player, world, client, server)
-- server:send_chat_message(0, "Block digged at " .. pos.x .. ";" .. pos.y .. ";" .. pos.z .. " by Client" .. player:client_id(), client);
-- openminer:add_listener(Event.BlockDigged, function(pos, block, player, world, client, server)
-- server:send_chat_message(0, "Block digged at " .. pos.x .. ";" .. pos.y .. ";" .. pos.z .. " by Client" .. player:client_id(), client)
-- end)

openminer:add_listener(EventType.OnBlockActivated, function(pos, block, player, world, client, server)
openminer:add_listener(Event.BlockActivated, function(pos, block, player, world, client, server)
if block:string_id() == "default:portal" then
server:send_chat_message(0, "Swoosh! Changing dimension...", client);
server:send_chat_message(0, "Swoosh! Changing dimension...", client)
end
end)

function init(player)
openminer:add_listener(Event.PlayerConnected, function(pos, player, client, server)
local starting_items = {
{"default:workbench", 1},
{"default:dirt", 64},
{"default:grass", 64},
{"default:stone", 64},
{"default:glass", 64},
{"default:glowstone", 64},
{"default:furnace", 1},
{"default:stone_pickaxe", 1},
{"default:stone_axe", 1},

{"default:oak_wood", 64},
{"default:oak_planks", 64},
{"default:cobblestone", 64},
{"default:stick", 64},
{"default:stone_hoe", 1},
{"default:stone_shovel", 1},
{"default:iron_ore", 64},
{"default:coal", 64},

{"default:iron_ingot", 64},
{"default:gold_ingot", 64},
{"default:diamond", 64}
}


local player_inv = player:inventory()
for _, v in ipairs(starting_items) do
player_inv:add_stack(v[1], v[2])
end

player_inv:add_stack("default:workbench", 1);
player_inv:add_stack("default:dirt", 64);
player_inv:add_stack("default:grass", 64);
player_inv:add_stack("default:stone", 64);
player_inv:add_stack("default:glass", 64);
player_inv:add_stack("default:glowstone", 64);
player_inv:add_stack("default:furnace", 1);
player_inv:add_stack("default:stone_pickaxe", 1);
player_inv:add_stack("default:stone_axe", 1);

player_inv:add_stack("default:oak_wood", 64);
player_inv:add_stack("default:oak_planks", 64);
player_inv:add_stack("default:cobblestone", 64);
player_inv:add_stack("default:stick", 64);
player_inv:add_stack("default:stone_hoe", 1);
player_inv:add_stack("default:stone_shovel", 1);
player_inv:add_stack("default:iron_ore", 64);
player_inv:add_stack("default:coal", 64);

player_inv:add_stack("default:iron_ingot", 64);
player_inv:add_stack("default:gold_ingot", 64);
player_inv:add_stack("default:diamond", 64);
end
server:send_chat_message(0, "Welcome to OpenMiner!", client)
end)

local modpath = mod:path()

Expand Down Expand Up @@ -175,12 +183,12 @@ mod:entity {
},

on_collision = function(entity, player, server)
mods["default"]:give_item_stack(player, entity:item_stack());
mods["default"]:give_item_stack(player, entity:item_stack())
mods["default"]:despawn_entity(entity)
end,
}

openminer:add_listener(EventType.OnBlockDigged, function(pos, block, player, world, client, server)
openminer:add_listener(Event.BlockDigged, function(pos, block, player, world, client, server)
if ServerConfig.useItemDrops then
mods["default"]:spawn_entity("default:item_drop", {
position = {pos.x + 0.5, pos.y + 0.5, pos.z + 0.5},
Expand Down
10 changes: 6 additions & 4 deletions source/server/lua/LuaCore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,12 @@ void LuaCore::addListener(LuaEventType eventType, const sol::function &listener)
}

void LuaCore::initUsertype(sol::state &lua) {
lua["EventType"] = lua.create_table_with(
"OnBlockPlaced", LuaEventType::OnBlockPlaced,
"OnBlockDigged", LuaEventType::OnBlockDigged,
"OnBlockActivated", LuaEventType::OnBlockActivated
lua["Event"] = lua.create_table_with(
"BlockPlaced", LuaEventType::BlockPlaced,
"BlockDigged", LuaEventType::BlockDigged,
"BlockActivated", LuaEventType::BlockActivated,

"PlayerConnected", LuaEventType::PlayerConnected
);

lua["ServerConfig"] = lua.create_table_with(
Expand Down
8 changes: 5 additions & 3 deletions source/server/lua/LuaCore.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,11 @@ class Registry;
class ServerModLoader;

enum class LuaEventType {
OnBlockPlaced,
OnBlockDigged,
OnBlockActivated
BlockPlaced,
BlockDigged,
BlockActivated,

PlayerConnected,
};

class LuaCore {
Expand Down
9 changes: 4 additions & 5 deletions source/server/network/ServerCommandHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -196,8 +196,7 @@ void ServerCommandHandler::setupCallbacks() {
auto &player = m_players.addPlayer(client);
player.setPosition(m_spawnPosition.x, m_spawnPosition.y, m_spawnPosition.z);

// FIXME: Find a better way to give starting items
m_scriptEngine.lua()["init"](player);
m_scriptEngine.luaCore().onEvent(LuaEventType::PlayerConnected, glm::ivec3{m_spawnPosition.x, m_spawnPosition.y, m_spawnPosition.z}, player, client, *this);

Network::Packet invPacket;
invPacket << Network::Command::PlayerInvUpdate << client.id;
Expand Down Expand Up @@ -266,7 +265,7 @@ void ServerCommandHandler::setupCallbacks() {
world.setBlock(x, y, z, block & 0xffff);
const Block &blockDef = Registry::getInstance().getBlock(block & 0xffff);

m_scriptEngine.luaCore().onEvent(LuaEventType::OnBlockPlaced, glm::ivec3{x, y, z}, blockDef, *player, world, client, *this);
m_scriptEngine.luaCore().onEvent(LuaEventType::BlockPlaced, glm::ivec3{x, y, z}, blockDef, *player, world, client, *this);

Network::Packet answer;
answer << Network::Command::BlockUpdate << x << y << z << block;
Expand All @@ -286,7 +285,7 @@ void ServerCommandHandler::setupCallbacks() {
const Block &blockDef = Registry::getInstance().getBlock(world.getBlock(x, y, z));
world.setBlock(x, y, z, 0);

m_scriptEngine.luaCore().onEvent(LuaEventType::OnBlockDigged, glm::ivec3{x, y, z}, blockDef, *player, world, client, *this);
m_scriptEngine.luaCore().onEvent(LuaEventType::BlockDigged, glm::ivec3{x, y, z}, blockDef, *player, world, client, *this);

Network::Packet answer;
answer << Network::Command::BlockUpdate << x << y << z << u32(0);
Expand Down Expand Up @@ -341,7 +340,7 @@ void ServerCommandHandler::setupCallbacks() {
bool hasBeenActivated = block.onBlockActivated({x, y, z}, *player, world, client, *this, screenWidth, screenHeight, guiScale);

if (hasBeenActivated)
m_scriptEngine.luaCore().onEvent(LuaEventType::OnBlockActivated, glm::ivec3{x, y, z}, block, *player, world, client, *this);
m_scriptEngine.luaCore().onEvent(LuaEventType::BlockActivated, glm::ivec3{x, y, z}, block, *player, world, client, *this);
}
else
gkError() << ("Failed to activate block using player " + std::to_string(client.id) + ": Player not found").c_str();
Expand Down

0 comments on commit b344805

Please sign in to comment.