Multiverse / Multiverse-Core

The original Bukkit Multi-World Plugin!
BSD 3-Clause "New" or "Revised" License
948 stars 297 forks source link

[1.15.2] Unable to exit end dimension #2160

Open willies952002 opened 4 years ago

willies952002 commented 4 years ago

Environment

Tested Server Software: PaperDragon 1.15.2 (Base: Paper @ f11d64728fd4351a74edd672ec336f3f07921abb) Paper 1.15.2 - Build 67 (8a0b371c6803027f15a3bfc66e2285955e9b8dc1)

Plugins: - Multiverse-Core @ 4.1.1-SNAPSHOT-b777

Summary

When attempting to exit the end dimension through the central end portal, you get teleported on top of where the dragon egg spawns. Nether portals work in both directions, as well as entering the end.

Debug: https://j.mp/2TMqmce

Related:

kashalls commented 4 years ago

Have you experienced this with just a 1.15.2 "Generic" Spigot Build?

willies952002 commented 4 years ago

Have you experienced this with just a 1.15.2 "Generic" Spigot Build?

Confirmed - Spigot git-Spigot-8faa8b4-3d61a85

nbastin commented 4 years ago

We've had this problem for a while - it seems to be when you don't have a bed set. My guess is it tries to respawn you at "spawn", in the current dimension, which then in our case just drops you through the portal over and over again (and an admin has to teleport you out). If your bed has been properly set and not destroyed before you enter the end, everything seems to work fine.

dcoshea commented 4 years ago

I'm seeing the same with git-Spigot-e7dc2f5-ce66f69 and Multiverse-Core, -NetherPortals and -Portals 4.1.0. As noted above it is only an issue when the player's bed is missing or obstructed.

I'm also using CommandHelper 3.3.4 snapshot build 3911. I put the following in my main.ms as a workaround, it seems to work:

# Work around https://github.com/Multiverse/Multiverse-Core/issues/2160
#
# We need to bind the player_spawn event, even though it's ugly, because:
# - player_portal_travel doesn't seem to fire for leaving the end
# - world_changed only fires if you actually leave the end
# - player_teleport doesn't fire in the problem case
# Note that player_spawn doesn't seem to fire at all when entering the end, but
# will fire when using the exit portal or dying regardless of whether a bed is
# set or the workaround is needed, and in both cases the current location will
# still be the end at the time the event fires.
bind('player_spawn', null, null, @event) {
    @loc = ploc(@event['player'])
    if(world_info(@loc['world'])['environment'] == 'THE_END') {
        # The player is meant to be leaving the end.  Wait until they've
        # actually finished spawning at their new location, then check if
        # they're still in the end.  If so, we need to teleport them out.
        queue_push(closure(
            @loc = ploc(@event['player'])
            if(world_info(@loc['world'])['environment'] == 'THE_END') {
                if(string_ends_with(@loc['world'], '_the_end')) {
                    console('Working around Multiverse-Core#2160 for '.@event['player'].
                            ' in '.@loc['world'])
                    # Push this onto the end of the queue of things to do so it's done
                    # immediately after the player has respawned, as running the command
                    # right now won't work.
                      sudo('/mvtp '.substr(@loc['world'], 0,
                                           length(@loc['world']) - 8))
                } else {
                    console('Cannot work around Multiverse-Core#2160 for '.
                            @event['player'].' in '.@loc['world'])
                }
            }
        ))
    }
}

It only works if your overworld world's name is the same as your end world's name without the _the_end suffix. It will write a message to the console every time the workaround is invoked, or if it needs to be but fails because the world's name doesn't end in _the_end.

dcoshea commented 4 years ago

I found a much simpler workaround - the respawnWorld property can be set for the end world, so if your overworld is called WORLD, use this command:

mv modify set respawnWorld WORLD WORLD_the_end

It seems like this should be the default for consistency with vanilla Minecraft.

Lycarex commented 4 years ago

hey,

is there a way to get to the end sequence of Minecraft instead of respawning in the Normal world when going through the portal in the middle of the end?

thanks for all answers :D

nicegamer7 commented 3 years ago

Can someone confirm whether this was in issue in 1.14?

nicegamer7 commented 3 years ago

I believe there was a change in either 1.15.1 or 1.15.2 that meant that exit portals no longer trigger the PlayerPortalEvent, but instead the PlayerRespawnEvent. That's my theory as to why this issue popped up. I'll do some testing to make sure, I'll post my findings here.

gXLg commented 3 years ago

I can confirm, the issue is still present in Spigot 1.16.5 The above command from dcoshea fixed that for me

PaBox commented 3 years ago

Same for me here. The described does fix the teleporting, but you still get a message saying that your home bed was destroyed or obstructed or no charged respawn anchor has been found. This is no big deal, as it is fixable, but it shouldn't be an extra step ("just works").

gXLg commented 3 years ago

@PaBox the message about bed is vanilla minecraft, it is not about the plugin

bierdosenhalter commented 2 years ago

i can confirm this is still present in 1.17.1

purejosh commented 2 years ago

@dumptruckman The vanilla behavior of this action is to return the player to the world spawn point, if their bed is broken or obstructed. With multiverse, it teleports the player to the top of the bedrock pillar at the end gateway, and gives the error that their bed was broken or obstructed.

Please fix this issue by restoring the vanilla behavior if the player's bed is broken or obstructed. This is still present in 1.18.1.

MrFabulous97 commented 1 year ago

Even after using the command dcoshea posted players are still leaving the end and immediately spawning above the end portal.

I'm assuming its because last location is set to on.

Is there anyway to make it so leaving the end puts people back at their bed spawn like normal?

bloodnighttw commented 1 year ago

I also encounter this bug recently (CraftBukkit version 3508-Spigot-fa893f0-50ef122 (MC: 1.19). Can you mention this bug in README or wiki, until this bug have been fixed.

s3nkwr commented 1 year ago

This bug appears on version 1.19.3 (Purpur 1933). And it's really sad because I have to use Velocity for extra worlds.

GaryCraft commented 1 month ago

I can confirm this issue in Paper 1.21-109 this is a very annoying issue for survival servers with multiple worlds

Players entering the end portal cannot return to the overworld

NeverGrowUp commented 1 month ago

I can confirm this issue in Paper 1.21-109 this is a very annoying issue for survival servers with multiple worlds

You need to set the respawn world. /mvm set respawnworld <overworldname> <end WorldName>