Собственное измерение (проблема с порталом)

Версия Minecraft
1.7.10
26
1
Сделал значит-ся по гайду измерение, решил его протестировать. При переходе в него кидает в ад. Сначала подумал может что-то не так с переходом, а потом понял, во мне портал спавнит просто. Можно как-то заменить адский портал на свой?
Java:
import net.minecraft.init.Blocks;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.WorldProvider;
import net.minecraft.world.WorldProviderEnd;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.biome.WorldChunkManagerHell;
import net.minecraft.world.chunk.IChunkProvider;

public class YourWorldProvider extends WorldProvider {
    public void registerWorldChunkManager() { // Чанк менеджер
        this.dimensionId = 55553; // ID мира
        this.worldChunkMgr = new WorldChunkManagerHell(BiomeGenBase.jungle, 0.0F); // Чанк менеджер, например тут генерация будет как замёрзший океан
    }
    public IChunkProvider createChunkGenerator()
    {
        return terrainType.getChunkGenerator(worldObj, field_82913_c);
    }

    @Override
    public String getDimensionName() {
        return "MagicBook";
    }
    
    public String getSaveFolder()
    {
        return  ("DIMA" + dimensionId);
    }
    
    public String getWelcomeMessage()
    {
        if (this instanceof YourWorldProvider)
        {
            return "Вы входите в какую-то опасную зону";
        }
        return null;
}
    public boolean canCoordinateBeSpawn(int p_76566_1_, int p_76566_2_)
    {
        return this.worldObj.getTopBlock(p_76566_1_, p_76566_2_) == Blocks.grass;
    }
    public ChunkCoordinates getEntrancePortalLocation()
    {
        return null;
    }
}
Сверху - код настроек измерения
 
Решение
Это телепортер
Java:
import net.minecraft.world.WorldServer;
import net.minecraft.world.Teleporter;
import net.minecraft.entity.Entity;

public class TeleporterEmpty extends Teleporter {

    public TeleporterEmpty(WorldServer worldIn) {
        super(worldIn);
    }

    public void placeInPortal(Entity entityIn, float rotationYaw) {
    }

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

    public boolean makePortal(Entity entityIn) {
        return true;
    }
}
Вот так тпать
Java:
PlayerList list = worldIn.getMinecraftServer().getPlayerList();
list.transferPlayerToDimension((EntityPlayerMP)playerIn, id_мира, new...
26
1
А тепаешь как в свой мир то?
Java:
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int i, float f0, float f1, float f2){
    if (!world.isRemote) {
        if ((player.ridingEntity == null) && (player.riddenByEntity == null)
                && ((player instanceof EntityPlayerMP))) { //
            EntityPlayerMP playerMP = (EntityPlayerMP) player;
            if (playerMP.dimension != 55553) {
                playerMP.travelToDimension(55553);
            } else { // Иначе
                playerMP.travelToDimension(0); // Телепорт в овер
            }
        }
    }
    return blockConstructorCalled;
}
 
26
1
EntityPlayerMP#server#teleport
Я пробовал через
WorldServer worldTo = player.mcServer.worldServerForDimension(dimTo);
player.mcServer.getConfigurationManager().transferPlayerToDimension(player, dimTo, new FreeTeleporter(worldTo, x, y, z));
Но блок перестает работать ( Вот сам код телепортера) :

Java:
public class FreeTeleporter extends Teleporter {
WorldServer world;
double x, y, z;
public FreeTeleporter(WorldServer worldIn, double x, double y, double z) {
super(worldIn);
world = worldIn;
this.x = x;
this.y = y;
this.z = z;
}
@Override
public boolean placeInExistingPortal(Entity entity, double x, double y, double z, float rotationYaw) {
entity.posX = this.x;
entity.posY = this.y;
entity.posZ = this.z;
if (entity instanceof EntityPlayer) {
EntityPlayer player = (EntityPlayer) entity;
if (player.capabilities.allowFlying) player.capabilities.isFlying = true;
}
return true;
}
}
После вписывания тех двух строк, блок просто перестает реагировать на нажатия
 
7,099
324
1,510
Так добавь println-ы, чтобы выводил
1593296837297.png
 

ReyMagos

Тег-бомбастер
412
7
121
Это телепортер
Java:
import net.minecraft.world.WorldServer;
import net.minecraft.world.Teleporter;
import net.minecraft.entity.Entity;

public class TeleporterEmpty extends Teleporter {

    public TeleporterEmpty(WorldServer worldIn) {
        super(worldIn);
    }

    public void placeInPortal(Entity entityIn, float rotationYaw) {
    }

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

    public boolean makePortal(Entity entityIn) {
        return true;
    }
}
Вот так тпать
Java:
PlayerList list = worldIn.getMinecraftServer().getPlayerList();
list.transferPlayerToDimension((EntityPlayerMP)playerIn, id_мира, new TeleporterEmpty(worldIn.getMinecraftServer().getWorld(id_мира)));

Проверено, сам использую! (y)

P.S. На 1.7.10 код может быть немного другим.
 
Последнее редактирование:
26
1
PlayerList list = worldIn.getMinecraftServer().getPlayerList();
Не могу найти альтернативу этой строке на 1.7.10. Он не определяет PlayerList, и нет server.getPlayerList. с wolrdIn оно уж и подавно не работает. Остальное вроде сделал. (делал через server, потому что getMinecraftServer не определяет)
 
Последнее редактирование:
26
1
P.S. На 1.7.10 код может быть немного другим.
Я так понимаю на 1.7.10 вообще нет PlayerList'a, потому что при его импорте (import net.minecraft.server.management.PlayerList; ), выдает ошибку.
P.S. Нашел альтернативу UserList, но вопрос с worldIn.getMinecraftServer().getPlayerList(); остается открыт. getMinecraftServer он не определяет никак.
 

will0376

Токсичная личность
2,079
55
585
найти альтернативу этой строке на 1.7.10
Вот поэтому я и не кожу под 1.7...(на публику. А если и пишу моды на заказ - беру х2.5 цену за них)
Вырезка из моего класса утилит:
Java:
public static List<EntityPlayerMP> getAllPlayers() {
        return FMLCommonHandler.instance().getMinecraftServerInstance().getConfigurationManager().playerEntityList;
    }
 
26
1
public static List<EntityPlayerMP> getAllPlayers() { return FMLCommonHandler.instance().getMinecraftServerInstance().getConfigurationManager().playerEntityList; }
UserList не подходит, нужен PlayerList. Госпаде...
P.S. Однако нет (The import net.minecraft.server.management.PlayerList cannot be resolved)
P.S.S. Попытался сделать getPlayerList() вместо .playerEntityList, однако ему требуются аргументы
 
26
1
MinecraftServer.getServer().getConfigurationManager().transferPlayerToDimension(...);
Блок все равно не реагирует на OnBlockActivated, пробовал в итем сунуть, на OnItemRightClick тоже не реагирует
MinecraftServer.getServer().getConfigurationManager().transferPlayerToDimension(entityplayerMP, 55553, new FreeTeleporter(DimensionManager.getWorld(55553)));
 
Сверху