Получить список имён игроков без сервера

476
9
39
Мне нужно без использования MinecraftServer.getServer().getAllUsernames(), то есть без установки мода на сервер получить клиентом будучи уже на сервере количество игроков, хотя достаточно и их ники. 
Копался копался, так нифига и не нарыл.
 
Agravaine написал(а):
Попытка сделать вот так:
Worlds.playerEntities.get(i).toString();
Где Worlds это Minecraft.getMinecraft().theWorld
Привела к 
java.lang.IndexOutOfBoundsException
 
Из класса GuiIngame:
Код:
        if (this.mc.gameSettings.keyBindPlayerList.getIsKeyPressed() && (!this.mc.isIntegratedServerRunning() || this.mc.thePlayer.sendQueue.playerInfoList.size() > 1 || scoreobjective != null))
        {
            this.mc.mcProfiler.startSection("playerList");
            NetHandlerPlayClient nethandlerplayclient = this.mc.thePlayer.sendQueue;
            List list = nethandlerplayclient.playerInfoList;
            i2 = nethandlerplayclient.currentServerMaxPlayers;
Это при нажатии на таб (по умолчанию) рисуется список игроков.
Попробуй так:
Код:
List list = Minecraft.getMinecraft().thePlayer.sendQueue.playerInfoList;
for (int i = 0; i < list.size(); i++)
    System.out.println(i + ") " + ((GuiPlayerInfo)list.get(i)).name);
 
Asd73 написал(а):
Из класса GuiIngame:
Код:
        if (this.mc.gameSettings.keyBindPlayerList.getIsKeyPressed() && (!this.mc.isIntegratedServerRunning() || this.mc.thePlayer.sendQueue.playerInfoList.size() > 1 || scoreobjective != null))
        {
            this.mc.mcProfiler.startSection("playerList");
            NetHandlerPlayClient nethandlerplayclient = this.mc.thePlayer.sendQueue;
            List list = nethandlerplayclient.playerInfoList;
            i2 = nethandlerplayclient.currentServerMaxPlayers;
Это при нажатии на таб (по умолчанию) рисуется список игроков.
Попробуй так:
Код:
List list = Minecraft.getMinecraft().thePlayer.sendQueue.playerInfoList;
for (int i = 0; i < list.size(); i++)
    System.out.println(i + ") " + ((GuiPlayerInfo)list.get(i)).name);
Та же ошибка
Вот код метода:
Код:
        if(!Minecraft.getMinecraft().isSingleplayer()){
        for(int i = 0; i <= list.size(); i++){
            super.buttonList.add(new GuiButton(20 + i, super.width / 8 - minus2 * (i + 1), super.height / 4 + 120, 40, 10, I18n.getString(((GuiPlayerInfo)list.get(i)).name)));
        }
}
Пробовал без I18n
[merge_posts_bbcode]Добавлено: 20.10.2014 20:38:51[/merge_posts_bbcode]

Сделал, но костыльно, сейчас попробую адекватно.
 
Как мне не нравяться ваши for(int i = 0; i <= list.size(); i++). Да начните уже наконец юзать   for(Object element : list).
[merge_posts_bbcode]Добавлено: 21.10.2014 01:38:00[/merge_posts_bbcode]

Как мне не нравяться ваши for(int i = 0; i <= list.size(); i++). Да начните уже наконец юзать   for(Object element : list).

[merge_posts_bbcode]Добавлено: 21.10.2014 01:38:15[/merge_posts_bbcode]

Как мне не нравяться ваши for(int i = 0; i <= list.size(); i++). Да начните уже наконец юзать   for(Object element : list).

[merge_posts_bbcode]Добавлено: 21.10.2014 01:38:40[/merge_posts_bbcode]

Как мне не нравяться ваши for(int i = 0; i <= list.size(); i++). Да начните уже наконец юзать   for(Object element : list).
 
То есть ты предлагаешь вместо
Код:
        if(!Minecraft.getMinecraft().isSingleplayer()){
        for(int i = 0; i <= list.size(); i++){
            super.buttonList.add(new GuiButton(20 + i, super.width / 8 -
 minus2 * (i + 1), super.height / 4 + 120, 40, 10, 
I18n.getString(((GuiPlayerInfo)list.get(i)).name)));
        }
}
писать
Код:
        if(!Minecraft.getMinecraft().isSingleplayer()){
        int i = 0;
        for(pinfo : list){
            super.buttonList.add(new GuiButton(20 + i, super.width / 8 -
 minus2 * (i + 1), super.height / 4 + 120, 40, 10, 
I18n.getString(((GuiPlayerInfo)pinfo.name)));
            i++;
        }
}
По моему первый вариант лучше.
 
Dragon2488 написал(а):
Как мне не нравяться ваши for(int i = 0; i <= list.size(); i++). Да начните уже наконец юзать   for(Object element : list).
[merge_posts_bbcode]Добавлено: 21.10.2014 01:38:00[/merge_posts_bbcode]

Как мне не нравяться ваши for(int i = 0; i <= list.size(); i++). Да начните уже наконец юзать   for(Object element : list).

[merge_posts_bbcode]Добавлено: 21.10.2014 01:38:15[/merge_posts_bbcode]

Как мне не нравяться ваши for(int i = 0; i <= list.size(); i++). Да начните уже наконец юзать   for(Object element : list).

[merge_posts_bbcode]Добавлено: 21.10.2014 01:38:40[/merge_posts_bbcode]

Как мне не нравяться ваши for(int i = 0; i <= list.size(); i++). Да начните уже наконец юзать   for(Object element : list).
В восьмерке есть метод forEach
 
Asd73 написал(а):
То есть ты предлагаешь вместо
Код:
        if(!Minecraft.getMinecraft().isSingleplayer()){
        for(int i = 0; i <= list.size(); i++){
            super.buttonList.add(new GuiButton(20 + i, super.width / 8 -
 minus2 * (i + 1), super.height / 4 + 120, 40, 10, 
I18n.getString(((GuiPlayerInfo)list.get(i)).name)));
        }
}
писать
Код:
        if(!Minecraft.getMinecraft().isSingleplayer()){
        int i = 0;
        for(pinfo : list){
            super.buttonList.add(new GuiButton(20 + i, super.width / 8 -
 minus2 * (i + 1), super.height / 4 + 120, 40, 10, 
I18n.getString(((GuiPlayerInfo)pinfo.name)));
            i++;
        }
}
По моему первый вариант лучше.
Только у тебя в первом варианте выход за границы листа гарантирован, т.к. последний индекс меньше размера листа (лист нумеруется с нуля и <= - неправильно тут), а во втором варианте ты не выйдешь за границу
 
Это написал talosdx, а я и не заметил.
Я вначале как раз правильный пример написал.

talosdx написал(а):
Привела к 
java.lang.IndexOutOfBoundsException
Поэтому и возникла эта ошибка.
 
Да я уже давно всё понял, и сделал валидный код, теперь интересует другой гемор. Но это уже другая тема.
 
Назад
Сверху