diff --git a/README.md b/README.md index aaee28b..abdaef1 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,13 @@ worldedge ========= -A Minetest Mod that teleports you to the other side of the map when you reach the edge. - -This mod makes it so when a player reaches the edge of the world they are teleported to the other side of the map. +A Minetest Mod that teleports you to the other side of the map when you reach its edge. This gives the illusion that that world is round and you can walk all the way around. -You can change the worlds edge by changing 2 numbers at the top of init.lua. +You can change the worlds edge by changing the first variable in init.lua + local edge = 30000 -local edge = 30005 -local newedge = 30000 +License of code: WTFPL -set edge to where you want the edge of the map to be. -newedge sets where player teleports to. it needs to be less than edge by at least 1 block. - -This mod is licenced as WTFPL - -Writen by Amaz -Modified by Don +Written by Amaz +Modified by Don \ No newline at end of file diff --git a/init.lua b/init.lua index 7c42aba..9406af0 100644 --- a/init.lua +++ b/init.lua @@ -1,40 +1,36 @@ +-------------- +-- TODO: Check for terrain height +-- Defines the edge of a world +local edge = 30000 +-------------- local count = 0 -local edge = 30000 --sets the edge of map -local newedge = 29995 --sets the other side where player teleports to. Should be a few blocks less than edge minetest.register_globalstep(function(dtime) count = count + dtime - if count > 5 then - count = 0 - local players = minetest.get_connected_players() - for _,player in pairs(players) do - local pos = player:getpos() - if pos.x >= edge then - player:moveto({x = -newedge, y = pos.y, z = pos.z}) - end - if pos.x <= -edge then - player:moveto({x = newedge, y = pos.y, z = pos.z}) - end - --- This section is for the Y cord. It will move you from bottom to top or top to bottom of map ---[[ - if pos.y >= edge then - player:moveto({x = pos.x, y = -newedge, z = pos.z}) - end - if pos.y <= -edge then - player:moveto({x = pos.x, y = newedge, z = pos.z}) - end ---]] - - - if pos.z >= edge then - player:moveto({x = pos.x, y = pos.y, z = -newedge}) - end - if pos.z <= -edge then - player:moveto({x = pos.x, y = pos.y, z = newedge}) - end - end + if count < 5 then + return + end + count = 0 + + local newedge = edge - 5 + -- Check if the players are near the edge and teleport them + local players = minetest.get_connected_players() + for _,player in pairs(players) do + local pos = player:getpos() + if pos.x >= edge then + player:moveto({x = -newedge, y = pos.y, z = pos.z}) + end + if pos.x <= -edge then + player:moveto({x = newedge, y = pos.y, z = pos.z}) + end + + if pos.z >= edge then + player:moveto({x = pos.x, y = pos.y, z = -newedge}) + end + if pos.z <= -edge then + player:moveto({x = pos.x, y = pos.y, z = newedge}) + end end end)