diff options
author | Elias Fleckenstein <eliasfleckenstein@web.de> | 2020-06-05 09:57:04 +0200 |
---|---|---|
committer | Elias Fleckenstein <eliasfleckenstein@web.de> | 2020-06-05 09:57:04 +0200 |
commit | a35cf885066b717d17a143a5ef01658616ed2331 (patch) | |
tree | 5ed5a7c9d3bc98016725de1d9029331a5a5e9349 /lobby.lua | |
download | skycraft-a35cf885066b717d17a143a5ef01658616ed2331.tar.xz |
Initial Commit
Diffstat (limited to 'lobby.lua')
-rw-r--r-- | lobby.lua | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/lobby.lua b/lobby.lua new file mode 100644 index 0000000..282a7fb --- /dev/null +++ b/lobby.lua @@ -0,0 +1,79 @@ +skycraft.lobby_pos = {x = 0, y = 10000, z = 0} + +function skycraft.join_lobby(name) + local player = minetest.get_player_by_name(name) + if not player then return false, "You have to be online to use this command" end + minetest.chat_send_all(skycraft.get_player_name(name) .. " joined the Lobby") + local pos = player:get_pos() + if pos.y < 5000 and (pos.y > 1000 or pos.y < -100) then player:get_meta():set_string("skycraft:skyblock_pos", minetest.pos_to_string(pos)) end + player:set_pos(skycraft.lobby_pos) +end + +function skycraft.join_skyblock(name) + local player = minetest.get_player_by_name(name) + if not player then return false, "You have to be online to use this command" end + local old_pos = player:get_pos() + if old_pos.y < 5000 then return false, "You are already on the Skyblock map." end + minetest.chat_send_all(skycraft.get_player_name(name) .. " joined Skyblock") + local pos = minetest.string_to_pos(player:get_meta():get_string("skycraft:skyblock_pos")) + if pos then + player:set_pos(pos) + else + skycraft.spawn_player(player) + end +end + +function skycraft.lobby_tick() + local players = minetest.get_connected_players() + for _, player in pairs(players) do + local name = player:get_player_name() + local privs = minetest.get_player_privs(name) + local pos = player:get_pos() + privs.skycraft = (pos.y < 5000 or privs.protection_bypass) and true or nil + minetest.set_player_privs(name, privs) + end + minetest.after(0.5, skycraft.lobby_tick) +end + +minetest.register_chatcommand("lobby", { + description = "Warp to the Lobby", + func = skycraft.join_lobby +}) + +minetest.register_chatcommand("skyblock", { + description = "Join Skyblock", + func = skycraft.join_skyblock +}) + +minetest.register_chatcommand("shop", { + description = "Join Skyblock", + func = function(name) + skycraft.join_lobby(name) + local player = minetest.get_player_by_name(name) + if player then + player:set_pos({x = 50, y = 10000, z = 50}) + end + end +}) +minetest.register_on_joinplayer(function(player) + minetest.after(0, skycraft.join_lobby, player:get_player_name()) +end) + +minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage) + if player:get_pos().y > 5000 then + minetest.chat_send_player(hitter:get_player_name(), minetest.colorize("#FF6737", "You can not do PvP here!")) + return true + end +end) + +minetest.register_on_player_hpchange(function(player, hp_change) + return (player:get_pos().y > 5000) and 0 or hp_change +end, true) + +minetest.register_on_mods_loaded(function() + function mcl_spawn.get_world_spawn_pos() + return skycraft.lobby_pos + end +end) + +minetest.after(0.5, skycraft.lobby_tick) |