{"id":15143004,"url":"https://github.com/muqsit/dimensionportals","last_synced_at":"2025-07-28T02:08:05.974Z","repository":{"id":44469932,"uuid":"234275975","full_name":"Muqsit/DimensionPortals","owner":"Muqsit","description":"Adds nether and end portals (without nether and end generator) to PocketMine-MP","archived":false,"fork":false,"pushed_at":"2025-01-28T17:51:25.000Z","size":132,"stargazers_count":40,"open_issues_count":1,"forks_count":8,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-06T19:48:26.789Z","etag":null,"topics":["nether","plugin","pmmp","pocketmine","poggit","portal","world"],"latest_commit_sha":null,"homepage":"https://poggit.pmmp.io/ci/Muqsit/DimensionPortals/NetherPortal","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Muqsit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-16T08:52:59.000Z","updated_at":"2025-03-31T04:07:17.000Z","dependencies_parsed_at":"2022-07-16T18:46:19.315Z","dependency_job_id":"9b01757a-bbb0-493c-a6cb-ab74a0fd54dd","html_url":"https://github.com/Muqsit/DimensionPortals","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/Muqsit/DimensionPortals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Muqsit%2FDimensionPortals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Muqsit%2FDimensionPortals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Muqsit%2FDimensionPortals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Muqsit%2FDimensionPortals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Muqsit","download_url":"https://codeload.github.com/Muqsit/DimensionPortals/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Muqsit%2FDimensionPortals/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267451489,"owners_count":24089312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-28T02:00:09.689Z","response_time":68,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nether","plugin","pmmp","pocketmine","poggit","portal","world"],"created_at":"2024-09-26T10:01:04.124Z","updated_at":"2025-07-28T02:08:05.949Z","avatar_url":"https://github.com/Muqsit.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DimensionPortals\nThis plugin lets players build nether portals and end portals, and use them to teleport between worlds. This plugin supports \n\nAlthough this plugin does not generate nether and end dimension terrain, various plugins that do so exist.\nTherefore, you may want to supplement DimensionPortals with the following plugins:\n- [BetterGen](https://github.com/Ad5001/BetterGen) - Generates more enhanced-looking biomes (if you are looking to build custom dimensions)\n- [MultiWorld](https://github.com/CzechPMDevs/MultiWorld) - Generates overworld, nether, and end terrain (and a few kinds of custom terrain)\n- [VanillaGenerator](https://github.com/Muqsit/VanillaGenerator) - Generates overworld and nether terrain\n\nAs of Minecraft Bedrock Edition v1.19.0, the following plugin(s) **are required** as a fix:\n- [DimensionFix](https://github.com/Muqsit/DimensionFix) - Fixes appearance of \"ghost\" blocks in nether and end dimensions. Simply install this plugin and DimensionPortals integrates seamlessly with it. No additional configuration needed.\n\n## Features\n- **Multiple worlds supported**: Have a `nether` world? Have a `nether2` as well? No worries, configure them both as nether.\n- **Extremely fast loading screen**: Do not keep players waiting longer than they need to with near-instantaneous dimension switches!\n\n  https://github.com/user-attachments/assets/bdd78461-6a63-4b6b-bbce-6914c70ef7ed\n## Developer Documentation\n\n### Check if a player is on dimension change screen\n```php\nuse muqsit\\dimensionportals\\event\\PlayerDimensionScreenChangeEvent;\nuse muqsit\\dimensionportals\\Loader;\nuse muqsit\\dimensionportals\\WorldManager;\nuse pocketmine\\player\\Player;\nuse pocketmine\\Server;\n\n// Method 1: query current state\n/** @var Loader $plugin */\n$plugin = Server::getInstance()-\u003egetPluginManager()-\u003egetPlugin(\"DimensionPortals\");\n$player = Server::getInstance()-\u003egetPlayerExact(\"BoxierChimera37\")\n$manager = $plugin-\u003egetPlayerManager();\n$changing_dimension = $manager-\u003eget($player)-\u003egetChangingDimension();\nif($changing_dimension !== null){\n\techo $player-\u003egetName(), \" is changing dimension to \", $changing_dimension, \"!\", PHP_EOL;\n}else{\n\techo  $player-\u003egetName(), \" is not changing dimensions!\", PHP_EOL;\n}\n\n// Method 2: event-driven solution\npublic function onDimensionScreenChange(PlayerDimensionScreenChangeEvent $event) : void{\n\tif($event-\u003estate === PlayerDimensionScreenChangeEvent::STATE_BEGIN){\n\t\techo $player-\u003egetName(), \" is now on dimension change screen (dimension=\", $event-\u003edimension, \")\", PHP_EOL;\n\t}elseif($event-\u003estate === PlayerDimensionScreenChangeEvent::STATE_END){\n\t\techo $player-\u003egetName(), \" is no longer on dimension change screen (dimension=\", $event-\u003edimension, \")\", PHP_EOL;\n\t}\n}\n```\n\n### Configure dimensions of worlds programatically\n```php\nuse muqsit\\dimensionportals\\Loader;\nuse muqsit\\dimensionportals\\WorldManager;\nuse pocketmine\\Server;\n\n/** @var Loader $plugin */\n$plugin = Server::getInstance()-\u003egetPluginManager()-\u003egetPlugin(\"DimensionPortals\");\n$manager = $plugin-\u003egetWorldManager();\n$manager-\u003eworld_dimensions[\"ruins\"] = WorldManager::DIMENSION_END; // set dimension of 'ruins' world to end\n$manager-\u003eworld_dimensions[\"nether2\"] = WorldManager::DIMENSION_NETHER;\n$manager-\u003edefault_worlds[WorldManager::DIMENSION_OVERWORLD] = \"world2\"; // portals tp players back to this world\n$manager-\u003edefault_worlds[WorldManager::DIMENSION_NETHER] = \"nether2\"; // nether portal tps to this world\n$manager-\u003edefault_dimension = WorldManager::DIMENSION_NETHER; // default dimension of the server is nether\n```\n\n### PlayerPortalCreateEvent: Disable creating nether portal 64 blocks within spawn\n```php\nuse muqsit\\dimensionportals\\event\\PlayerPortalCreateEvent;\nuse muqsit\\dimensionportals\\WorldManager;\nuse pocketmine\\math\\Vector3;\n\npublic function onPortalCreate(PlayerPortalCreateEvent $event) : void{\n\tif($event-\u003edimension !== WorldManager::WORLD_NETHER){ // did not create nether portal\n\t\treturn;\n\t}\n\t$player = $event-\u003egetPlayer();\n\t$spawn = $player-\u003egetWorld()-\u003egetSpawnLocation();\n\tforeach($event-\u003eframe_blocks as $block){\n\t\t// the obsidian block\n\t\t// these blocks already exist in the world\n\t\tif($block-\u003egetPosition()-\u003edistance($spawn) \u003c= 64){\n\t\t\t$event-\u003ecancel();\n\t\t\treturn;\n\t\t}\n\t}\n\tforeach($event-\u003etransaction-\u003egetBlocks() as [$x, $y, $z, $block]){\n\t\t// the pink portal block\n\t\t// these are the blocks that will be created\n\t\t$pos = new Vector3($x, $y, $z);\n\t\tif($pos-\u003edistance($spawn) \u003c= 64){\n\t\t\t$event-\u003ecancel();\n\t\t\treturn;\n\t\t}\n\t}\n}\n```\n\n### PlayerPortalEnterEvent: Instant teleportation for ranked players\n```php\nuse muqsit\\dimensionportals\\event\\PlayerPortalEnterEvent;\n\npublic function onPortalEnter(PlayerPortalEnterEvent $event) : void{\n\tif($event-\u003egetPlayer()-\u003ehasPermission(\"rank.vip\")){\n\t\t$event-\u003eteleport_duration = 0;\n\t}\n}\n```\n\n### PlayerPortalTeleportEvent: Make end portals teleport to boring_end world for unranked players\n```php\nuse muqsit\\dimensionportals\\event\\PlayerPortalTeleportEvent;\nuse muqsit\\dimensionportals\\WorldManager;\nuse pocketmine\\entity\\Location;\n\npublic function onPortalTeleport(PlayerPortalTeleportEvent $event) : void{\n\tif($event-\u003edimension !== WorldManager::DIMENSION_END){\n\t\treturn;\n\t}\n\t$player = $event-\u003egetPlayer();\n\tif($player-\u003ehasPermission(\"rank.vip\")){\n\t\treturn;\n\t}\n\t$pos = $player-\u003egetServer()-\u003egetWorldManager()-\u003egetWorldByName(\"boring_end\")-\u003egetSpawnLocation();\n\t$event-\u003etarget = Location::fromObject($pos, $pos-\u003eworld);\n}\n```\n\n## Resources\n- [GlowstoneMC](https://github.com/GlowstoneMC/Glowstone) - End portal creation and destruction logic\n- [MiNET](https://github.com/NiclasOlofsson/MiNET) - Nether portal creation and destruction logic\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuqsit%2Fdimensionportals","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmuqsit%2Fdimensionportals","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuqsit%2Fdimensionportals/lists"}