Зависает ад при телепортации в него

Версия Minecraft
1.12.2
69
3
3
Здравствуйте, мне необходимо телепортировать игрока, который подключается к обычному миру в ад, делаю я это таким образом:
Java:
  @SubscribeEvent
  public static void OnPlayerJoinToSurface (EntityJoinWorldEvent Event)
  {
    if (Event.getEntity () != null && Event.getEntity () instanceof EntityPlayer && !Event.getWorld ().isRemote && Event.getWorld ().getWorldType () == Netherland.NetherlandWorld && Event.getWorld ().provider.isSurfaceWorld ())
    {
      Event.getWorld ().getMinecraftServer ().getPlayerList ().transferPlayerToDimension ((EntityPlayerMP)Event.getEntity (), -1, new Teleporter (Event.getWorld ().getMinecraftServer ().getWorld (-1)));     
    }
  }
Но при телепортации в ад он зависает, и в консоли повляется от одного до нескольких таких сообщений - [Server thread/WARN] [minecraft/MinecraftServer]: Can't keep up! Did the system time change, or is the server overloaded? Running 4044ms behind, skipping 80 tick(s). Помогает только перезаход, зависает во всех типах мира, не только в моем (NetherlandWorld).
Пробовал телепортировать игрока с помощью Entity#changeDimension, со своим и дефолтным Teleporter, но с дефолтным происходил краш, а с моим - зависание.
Пробовал синхронизировать время миров, но не помогло.
Java:
//===================================================================================================
package ru.harushitsune.netherland.world;
//===================================================================================================
import net.minecraft.init.Biomes;
import net.minecraft.world.World;
import net.minecraft.world.WorldType;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.BiomeProvider;
import net.minecraft.world.biome.BiomeProviderSingle;
import net.minecraft.world.gen.ChunkGeneratorFlat;
import net.minecraft.world.gen.FlatGeneratorInfo;
import net.minecraft.world.gen.IChunkGenerator;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
//===================================================================================================
public class NetherlandType extends WorldType
{
  //=================================================================================================
  public NetherlandType ()
  {
    super ("NETHERLAND");
    this.onGUICreateWorldPress ();
  }
  //=================================================================================================
  @SideOnly (Side.CLIENT)
  public String getTranslationKey()
  {
    return "generator.NETHERLAND";
  }
  //-------------------------------------------------------------------------------------------------
  public BiomeProvider getBiomeProvider ()
  {
    FlatGeneratorInfo Info = FlatGeneratorInfo.createFlatGeneratorFromString ("3;minecraft:air;1;");
    return new BiomeProviderSingle (Biome.getBiome (Info.getBiome (), Biomes.VOID));
  } 
  //-------------------------------------------------------------------------------------------------
  public boolean isCustomizable ()
  {
    return false;
  }
  //-------------------------------------------------------------------------------------------------
  public IChunkGenerator getChunkGenerator (World Nether)
  {
    return new ChunkGeneratorFlat (Nether, Nether.getSeed (), false, "3;minecraft:air;1;");
  }
  //=================================================================================================
}
//===================================================================================================
Java:
//===================================================================================================
package ru.harushitsune.netherland.world;
//---------------------------------------------------------------------------------------------------
import net.minecraft.entity.Entity;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
//===================================================================================================
public class Teleporter extends net.minecraft.world.Teleporter
{
  //=================================================================================================
  public Teleporter (WorldServer Server)
  {
    super (Server);
  }
 
  public void placeInPortal(Entity entityIn, float rotationYaw) {
  }

  public boolean placeInExistingPortal(Entity entityIn, float rotationYaw) {
      return true;
  }

  public boolean makePortal(Entity entityIn) {
      return false;
  }
  //=================================================================================================
}
//===================================================================================================
Java:
//===================================================================================================
package ru.harushitsune.netherland.world;
//---------------------------------------------------------------------------------------------------
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import ru.harushitsune.netherland.Netherland;
//===================================================================================================
@EventBusSubscriber
public class Traveling
{
  //=================================================================================================
  @SubscribeEvent
  public static void OnPlayerJoinToSurface (EntityJoinWorldEvent Event)
  {
    if (Event.getEntity () != null && Event.getEntity () instanceof EntityPlayer && !Event.getWorld ().isRemote && Event.getWorld ().getWorldType () == Netherland.NetherlandWorld && Event.getWorld ().provider.isSurfaceWorld ())
    {
      Event.getWorld ().getMinecraftServer ().getPlayerList ().transferPlayerToDimension ((EntityPlayerMP)Event.getEntity (), -1, new Teleporter (Event.getWorld ().getMinecraftServer ().getWorld (-1)));     
    }
  }
  //=================================================================================================
}
//===================================================================================================
 
69
3
3
Лучше хукнуться в readFromNbt игрока, проверить что dimensionId == 0 и изменить на нужный. Тогда при подключении к серверу ты окажешься в нужном мире.
Хукнулся в EntityPlayer#readEntityFromNBT, при подключении к миру ничего не происходит (с хуками все впорядке). Видимо, этот метод не вызывается. В EntityPlayer только readEntityFromNBT читает NBT, других читающих методов там нету.
 
Сверху