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

Версия 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)));     
    }
  }
  //=================================================================================================
}
//===================================================================================================
 
7,099
324
1,509
Попробуй юзать это для телепортации
 
69
3
3
Попробуй юзать это для телепортации
Скопировал классы TeleportUtils и Location, использовал Access Transformers. Телепортируюсь таким кодом:
Java:
TeleportUtils.teleportEntity (Event.getEntity (), -1, 0, 0, 0);
Я все равно зависаю, есть идеи?
 

Sainthozier

Стрелочник
623
11
369
Очень странно, я телепортером Брендона пользуюсь с времён динозавров и всё отлично.
В чем конкретно проявляются эти зависания? А если ещё раз телепортироваться, зависать будет?
 
7,099
324
1,509
Попробуй в конфигурации сервера сделать так, чтобы спавн незера был всегда загружен
 
69
3
3
Очень странно, я телепортером Брендона пользуюсь с времён динозавров и всё отлично.
В чем конкретно проявляются эти зависания? А если ещё раз телепортироваться, зависать будет?
При падении в бездну я не умираю, мобы зависают, не двигаются (если бить, то медленно будут отлетать), лут поднимается, появляется в инвентаре и остается лежать на блоках, с опытом тоже самое.
Так при заходе в обычный мир я сразу телепортируюсь в ад - не знаю, но после перезахода в мир не виснет.
 

jopi

Попрошайка
1,421
30
260
Я бы предположил что событие EntityJoinWorldEvent срабатывает в общем при смене измерения, тем самым ты когда туда тп, срабатывает евент, ты опять тп, опять он срабатывает, система перегружается и умирает.
Возможно я ошибаюсь, но пробуй дебажить через System.out.println(...); в событии и я думаю ты найдешь методом дебага эту фигню

P.S.
У меня не сервер, а обычный клиент.
Мир в клиенте является сервером вида IntegratedServer
 
7,099
324
1,509
69
3
3
Я бы предположил что событие EntityJoinWorldEvent срабатывает в общем при смене измерения, тем самым ты когда туда тп, срабатывает евент, ты опять тп, опять он срабатывает, система перегружается и умирает.
Возможно я ошибаюсь, но пробуй дебажить через System.out.println(...); в событии и я думаю ты найдешь методом дебага эту фигню

P.S.

Мир в клиенте является сервером вида IntegratedServer
Интересное предположение, я проверю.
 
69
3
3
просто getWorldType очень похоже что возвращает енум(интуиция ванги), а у тебя там свое вот думаю и поэтому
Я посмотрю. А на счет предположения: У меня стоит проверка на верхний мир, то есть если игрок подключается к миру и он верхний, то его телепортирует в ад.
Значит, система не перегружается. Наверное, дело не в этом.
 
Сверху