{"action":"created","issue":{"url":"https://api.github.com/repos/minetest/minetest/issues/4428","repository_url":"https://api.github.com/repos/minetest/minetest","labels_url":"https://api.github.com/repos/minetest/minetest/issues/4428/labels{/name}","comments_url":"https://api.github.com/repos/minetest/minetest/issues/4428/comments","events_url":"https://api.github.com/repos/minetest/minetest/issues/4428/events","html_url":"https://github.com/minetest/minetest/issues/4428","id":170268516,"number":4428,"title":"Different \"Dimensions\" / Other worlds","user":{"login":"C1ffisme","id":9893266,"avatar_url":"https://avatars.githubusercontent.com/u/9893266?v=3","gravatar_id":"","url":"https://api.github.com/users/C1ffisme","html_url":"https://github.com/C1ffisme","followers_url":"https://api.github.com/users/C1ffisme/followers","following_url":"https://api.github.com/users/C1ffisme/following{/other_user}","gists_url":"https://api.github.com/users/C1ffisme/gists{/gist_id}","starred_url":"https://api.github.com/users/C1ffisme/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/C1ffisme/subscriptions","organizations_url":"https://api.github.com/users/C1ffisme/orgs","repos_url":"https://api.github.com/users/C1ffisme/repos","events_url":"https://api.github.com/users/C1ffisme/events{/privacy}","received_events_url":"https://api.github.com/users/C1ffisme/received_events","type":"User","site_admin":false},"labels":[{"id":73368921,"url":"https://api.github.com/repos/minetest/minetest/labels/@%20Server%20/%20Client%20/%20Env.","name":"@ Server / Client / Env.","color":"009800","default":false},{"id":108307769,"url":"https://api.github.com/repos/minetest/minetest/labels/Feature%20request","name":"Feature request","color":"207de5","default":false},{"id":11426245,"url":"https://api.github.com/repos/minetest/minetest/labels/Non-trivial","name":"Non-trivial","color":"e144d8","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":67,"created_at":"2016-08-09T20:56:09Z","updated_at":"2017-02-22T23:50:21Z","closed_at":null,"body":"I don't think anyone suggested this in the past, and I thought maybe a place to discuss this (and put bounties) would be a good start.\n# Problem\n\nThe Minetest world is pretty big for the average player, right? 31 kilometers in 6 directions is enough for at least singleplayer, and most multiplayer servers, apparently.\n\nHowever, even then, you have a server that is just too big, or a player who wants to explore a pretty big area. Now, with only one \"dimension\", the current \"Overworld\", you already have enough space to last a good long time, but if you added mods like the nether mod, or anything else that adds a new space that is supposed to be \"far away\", then you run into problems.\n\nFor example, lets say I made a new dimension, and put it at around -30000. That seems to be far down enough. To get it, you need to mine a lot of diamonds to make a portal. Except, if you are one of those players who needs a lot of room (Or you just really love the colour of stone) you may mine all the way down to -30000. Then no matter how many diamonds you may have mined, you have reached the diamond dimension. Sure, I could use a bedrock-like block to stop people, but now we've lost 1000 layers downward of our world to a diamond dimension. Besides that, if I need any more space for my dimension, I need to take more room.\n\nBesides that, if I wanted to make a dimension like the Moon, and I want to make sure every player has a certain sky texture applied to them, I would need to check every so many times whether or not the player was above a certain height. How often would I need to check? Too fast, and the server would lag more than it already does. Too slow, and people would think it was \"glitching\".\n\nAfter all that, if even a world with no mods isn't enough space for a player, there really is no other way at the moment to give the player more space to work with. (Although the correct fix for this would be truly infinite worlds.)\n# Solution : Different Dimensions\n\nThe best way I can think to picture this is having two or more \"sub-worlds\" in the same world folder, both accessible in-game. Each of these \"sub-worlds\", or dimensions, can be accessed through the API. The player would have a fourth coordinate, d. Because nobody wants to deal with numbering off dimensions, this coord will be a string, and all dimensions will have string names. (Like \"nether\", or \"overworld\". Preferably, each mod's dimensions would start with the mod name, like \"builtin:overworld\" and \"nether:nether\"). The only way to travel through this fourth coordinate is through mods moving you.\n# API changes needed\n- minetest.set_node() and minetest.get_node() would need to allow for another coordinate. Perhaps these could be methods of the subworld, and not of minetest? (e.g., nether.get_node(),overworld.set_node())\n- Setting generation type and biomes for each world. Singlenode could be set as a default for some dimensions that use a luagen.\n- player:get_dimension() and player:set_dimension()\n- Other things I may have forgotten? (WIP, I'll write stuff here as it's disscussed.)\n# Problems to deal with.\n- One world is already a lot for some servers.\n- Again, other things I may have forgotten.\n# Profits\n\nTo sum up all of the things that were mentioned in the \"Problem\" section, here is what dimensions would allow:\n- Even more building space.\n- No hacked in dimensions, no need for bedrock.\n- No need to check whether or not the player is in your dimension with something like minetest.register_globalstep(). (In case they say, nerd-poled all the way up to your \"Moon\", or teleported there.) Because a dimension can only be reached through mods, all you would need is code like this:\n\n```\nif (player is in conditions to change dimension) then\n    player:set_dimension(\"mod:dimension\")\n    do(thing that you want to do to the player when he reaches that dimension.)\n```\n\nThe only concern is if another mod puts you in a dimension, then they have to worry about making sure they do the things you want them to do. Another option is to have something like:\n\n`dimension:register_on_entering(function(player))`\n- Enough space for as many dimensions as the computer has memory to hold them.\n- \"Home Worlds\"- type servers where every player gets a private world to do what they like with, and a hub world to play with/trade with/ attack other players.\n- Again, anything I forgot.\n\n(Sorry for the incomplete lists and such.)\n"},"comment":{"url":"https://api.github.com/repos/minetest/minetest/issues/comments/281843842","html_url":"https://github.com/minetest/minetest/issues/4428#issuecomment-281843842","issue_url":"https://api.github.com/repos/minetest/minetest/issues/4428","id":281843842,"user":{"login":"XtremeHacker","id":14966535,"avatar_url":"https://avatars.githubusercontent.com/u/14966535?v=3","gravatar_id":"","url":"https://api.github.com/users/XtremeHacker","html_url":"https://github.com/XtremeHacker","followers_url":"https://api.github.com/users/XtremeHacker/followers","following_url":"https://api.github.com/users/XtremeHacker/following{/other_user}","gists_url":"https://api.github.com/users/XtremeHacker/gists{/gist_id}","starred_url":"https://api.github.com/users/XtremeHacker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/XtremeHacker/subscriptions","organizations_url":"https://api.github.com/users/XtremeHacker/orgs","repos_url":"https://api.github.com/users/XtremeHacker/repos","events_url":"https://api.github.com/users/XtremeHacker/events{/privacy}","received_events_url":"https://api.github.com/users/XtremeHacker/received_events","type":"User","site_admin":false},"created_at":"2017-02-22T23:50:21Z","updated_at":"2017-02-22T23:50:21Z","body":"@numberZero That could work, but using multiple server running seems like a superglue type \"fix\", instead of a full on \"mechanic repair\", get what I mean? :)"}}
{"actor":{"display_login":"XtremeHacker"}}