@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());//Выставляем флаг в зависимости от выбранного языка
}
}