feat: dynamic items

This commit is contained in:
aro 2023-01-12 01:09:57 +01:00
parent 311ca5d423
commit 8b0b7076da

View file

@ -12,19 +12,10 @@ import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.Optional; import java.util.*;
public class LanguageCyclingItem { public class LanguageCyclingItem {
private final ItemProvider[] providers = new ItemProvider[]{ private final ItemProvider[] providers = getItems();
getItemProviderForLocale(Locale.ENGLISH),
getItemProviderForLocale(Locale.FRENCH),
getItemProviderForLocale(Locale.CUSTOM),
};
private final ItemProvider[] providersNoCustom = new ItemProvider[]{
getItemProviderForLocale(Locale.ENGLISH),
getItemProviderForLocale(Locale.FRENCH)
};
public BaseItem get(Player player) { public BaseItem get(Player player) {
final NickoBukkit instance = NickoBukkit.getInstance(); final NickoBukkit instance = NickoBukkit.getInstance();
@ -35,16 +26,16 @@ public class LanguageCyclingItem {
return CycleItem.withStateChangeHandler((observer, integer) -> { return CycleItem.withStateChangeHandler((observer, integer) -> {
nickoProfile.setLocale(Locale.values()[integer]); nickoProfile.setLocale(Locale.values()[integer]);
observer.playSound(player, Sound.UI_BUTTON_CLICK, 1f, 0.707107f); // 0.707107 ~= C observer.playSound(player, Sound.UI_BUTTON_CLICK, 1f, 0.707107f); // 0.707107 ~= C
}, localeOrdinal, instance.getNickoConfig().isCustomLocale() ? providers : providersNoCustom); }, localeOrdinal, providers);
} }
return new SimpleItem(ItemProvider.EMPTY); return new SimpleItem(ItemProvider.EMPTY);
} }
private ItemProvider getItemProviderForLocale(Locale locale) { private ItemProvider generateItem(Locale locale, List<Locale> locales) {
final ItemBuilder builder = new ItemBuilder(Material.OAK_SIGN); final ItemBuilder builder = new ItemBuilder(Material.OAK_SIGN);
builder.setDisplayName("§6Select your language:"); builder.setDisplayName("§6Select your language:");
for (Locale value : Locale.values()) { for (Locale value : locales) {
if (locale != value) { if (locale != value) {
builder.addLoreLines("§7> " + value.getName()); builder.addLoreLines("§7> " + value.getName());
} else { } else {
@ -54,4 +45,17 @@ public class LanguageCyclingItem {
builder.addLoreLines("§7§oCycle through the values by", "§7§oleft and right clicking."); builder.addLoreLines("§7§oCycle through the values by", "§7§oleft and right clicking.");
return builder; return builder;
} }
private ItemProvider[] getItems() {
final NickoBukkit instance = NickoBukkit.getInstance();
final ArrayList<ItemProvider> items = new ArrayList<>();
final ArrayList<Locale> localesToGenerate = new ArrayList<>();
Collections.addAll(localesToGenerate, Locale.values());
if (!instance.getNickoConfig().isCustomLocale()) {
localesToGenerate.remove(Locale.CUSTOM);
}
localesToGenerate.forEach(locale -> items.add(generateItem(locale, localesToGenerate)));
return items.toArray(new ItemProvider[]{});
}
} }