list

Версия Minecraft
1.7.10
271
2
0
Как в GuiScreen сделать лист с кликабельными лейбылами, как в гуи выбора языка.
 
271
2
0
Можете какой нибудь туториал, или кусочек кода, или что-то еще.
 

Icosider

Kotliner
Администратор
3,603
99
664
volt написал(а):
Можете какой нибудь туториал, или кусочек кода, или что-то еще.
Туториалов нет.
Код:
this.list = new GuiTest.List(this.mc);
        this.list.registerScrollButtons(7, 8);
Код:
public void handleMouseInput() throws IOException
    {
        super.handleMouseInput();
        this.list.handleMouseInput();
    }
Код:
this.list.drawScreen(mouseX, mouseY, partialTicks);
Код:
@SideOnly(Side.CLIENT)
    class List extends GuiSlot
    {
        private final java.util.List<String> langCodeList = Lists.<String>newArrayList();//Создаём лист
        private final Map<String, Language> languageMap = Maps.<String, Language>newHashMap();//Создаём мапу

        public List(Minecraft mcIn)
        {
        //Создаём лист
            super(mcIn, GuiTest.this.width, GuiTest.this.height, 32, GuiTest.this.height - 65 + 4, 18);

            //Получаем все языки с помощью цыкла
            for (Language language : GuiTest.this.languageManager.getLanguages())
            {
                this.languageMap.put(language.getLanguageCode(), language);
                this.langCodeList.add(language.getLanguageCode());
            }
        }

        protected int getSize()
        {
            return this.langCodeList.size();
        }

        /**
         * Срабатывает когда нажали на язык
         */
        protected void elementClicked(int slotIndex, boolean isDoubleClick, int mouseX, int mouseY)
        {
            Language language = (Language)this.languageMap.get(this.langCodeList.get(slotIndex));//Подгружаем языки из мапы
            GuiTest.this.languageManager.setCurrentLanguage(language);//тут язык который на данный момент выбран
            GuiTest.this.game_settings_3.language = language.getLanguageCode();//Получаем из мапы код языка ru_RU и т.п.
            this.mc.refreshResources();//Перезапустить ресурспак
            GuiTest.this.fontRendererObj.setUnicodeFlag(GuiTest.this.languageManager.isCurrentLocaleUnicode() || GuiTest.this.game_settings_3.forceUnicodeFont);//Устанавливаем Юникод(тонкий шрифт) в зависимости от языка
            GuiTest.this.fontRendererObj.setBidiFlag(GuiTest.this.languageManager.isCurrentLanguageBidirectional());//Точно не знаю, но вроде отвечает за язык
            GuiTest.this.confirmSettingsBtn.displayString = I18n.format("gui.done", new Object[0]);//Ну тут всё ясно
            GuiTest.this.forceUnicodeFontBtn.displayString = GuiTest.this.game_settings_3.getKeyBinding(GameSettings.Options.FORCE_UNICODE_FONT);//тут тоже всё понятно(Если нет, эта настройка сохраняется в options)
            GuiTest.this.game_settings_3.saveOptions();//Сохраняем настройки
        }

        /**
         * Передаёт true если элемент выбран(Так же сохраняется в options как FORCE_UNICODE_FONT TRUE)
         */
        protected boolean isSelected(int slotIndex)
        {
            return ((String)this.langCodeList.get(slotIndex)).equals(GuiTest.this.languageManager.getCurrentLanguage().getLanguageCode());
        }

        /**
         * Получается высота для скролов
         */
        protected int getContentHeight()
        {
            return this.getSize() * 18;
        }

        //Тут всё ясно
        protected void drawBackground()
        {
            GuiTest.this.drawDefaultBackground();
        }

        //Тут тоже
        protected void drawSlot(int entryID, int insideLeft, int yPos, int insideSlotHeight, int mouseXIn, int mouseYIn)
        {
            GuiTest.this.fontRendererObj.setBidiFlag(true);//Выставляем флаг на true
            GuiTest.this.drawCenteredString(GuiTest.this.fontRendererObj, ((Language)this.languageMap.get(this.langCodeList.get(entryID))).toString(), this.width / 2, yPos + 1, 16777215);//Пишем на экране название языка "Язык ru_RU"
            GuiTest.this.fontRendererObj.setBidiFlag(GuiTest.this.languageManager.getCurrentLanguage().isBidirectional());//Выставляем флаг в зависимости от выбранного языка
        }
    }
 
271
2
0
Зачем я сказал что лист языков, я себе и вам затруднил работу. Я хотел сделать гуи с файлами из папки.
К стате а как это сделать?
 
271
2
0
Как считать файлы из папки и записать в этот лист. Я смотрел в ГуиРесурспаков ГуиВыборМира так ничего и не нашёл.
 

timaxa007

Модератор
5,831
409
672
Это был вопрос? Если да, то ... "File#list();" вернёт массив String имен файлов в указанном каталоге. Как использовать для "этот лист", я точно не знаю.
 
271
2
0
Почему она возвращает номера файлов а не названия?

File f = new File("C:/1.7.10/src/main/resources/assets/mod/schem/");
String[] st = f.list();

for (int i = 0; i < f.list().length;i++)

{
this.langCodeList.add(st);
}
}
 

timaxa007

Модератор
5,831
409
672
Не знаю, у меня нормально.
Код:
File file = new File(".");
for (String fl : file.list())
System.out.println(fl);
Код:
[21:53:33] [Client thread/INFO] [STDOUT]: .metadata
[21:53:33] [Client thread/INFO] [STDOUT]: banned-ips.json
[21:53:33] [Client thread/INFO] [STDOUT]: banned-players.json
[21:53:33] [Client thread/INFO] [STDOUT]: betterfps.txt
[21:53:33] [Client thread/INFO] [STDOUT]: config
[21:53:33] [Client thread/INFO] [STDOUT]: crash-reports
[21:53:33] [Client thread/INFO] [STDOUT]: eula.txt
[21:53:33] [Client thread/INFO] [STDOUT]: hs_err_pid2776.log
[21:53:33] [Client thread/INFO] [STDOUT]: logs
[21:53:33] [Client thread/INFO] [STDOUT]: mods
[21:53:33] [Client thread/INFO] [STDOUT]: ops.json
[21:53:33] [Client thread/INFO] [STDOUT]: options.txt
[21:53:33] [Client thread/INFO] [STDOUT]: resourcepacks
[21:53:33] [Client thread/INFO] [STDOUT]: saves
[21:53:33] [Client thread/INFO] [STDOUT]: screenshots
[21:53:33] [Client thread/INFO] [STDOUT]: server.properties
[21:53:33] [Client thread/INFO] [STDOUT]: servers.dat
[21:53:33] [Client thread/INFO] [STDOUT]: usercache.json
[21:53:33] [Client thread/INFO] [STDOUT]: usernamecache.json
[21:53:33] [Client thread/INFO] [STDOUT]: whitelist.json
[21:53:33] [Client thread/INFO] [STDOUT]: world
[21:53:33] [Client thread/INFO] [STDOUT]: world-20160524-172511.zip
 
271
2
0
Вывел через System.out.println на консоле всё ок, но когда добавляю в лист то 0,1,2,3...
 
Сверху