Sekme listeleri
Tab listeleri şu anda bir sunucuda bulunan oyuncuların listesini görüntülemek için Minecraft’ta kullanılır. SpongeAPI sekme listesini oynamak için oyuncu bazında izin verir.
Bir oyuncunun :javadoc:`TabList`ini almak için sadece :javadoc:`Player#getTabList ()`yöntemini çağırmanız yeterlidir:
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.entity.living.player.tab.TabList;
TabList tablist = player.getTabList();
Artık TabList
i elde ettik, onun birkaç bileşenini değiştirebiliriz. Örneğin, ``TabList`’in başlığını veya altbilgisini ayarlamak için, yalnızca uygun yöntemlerini çağırmamız yeterlidir:
import org.spongepowered.api.text.Text;
import org.spongepowered.api.text.format.TextColors;
tablist.setHeader(Text.of(TextColors.GOLD, "The tab list header"));
tablist.setFooter(Text.of(TextColors.RED, "The tab list footer"));
Tek seferde her ikisini de değiştirmek istersek TabList#setHeaderAndFooter(Text, Text) yöntemini çağırabiliriz:
tablist.setHeaderAndFooter(Text.of("header"), Text.of("footer"));
Not
Tab başlığı üstbilgisini * ve * altbilgiyi değiştirmek istiyorsanız, ayrı olarak :javadoc: TabList # setHeader (Text) ve :javadoc: TabList’i çağırmak için setHeaderAndFooter () `yöntemini kullanmanız önerilir. #setFooter (Text) `yöntemlerini kullanır, çünkü yalnızca üstbilgi ve altbilgi için iki ayrı paket yerine bir paket gönderir.
Sekme Listesi Girdileri
Şimdi, TabList
’in üstbilgi ve altbilgisini ayarladığımıza göre, kendi girişlerimizi de listeye ekleyebiliriz. Buna bir örnek aşağıda gösterilmiştir:
import org.spongepowered.api.entity.living.player.gamemode.GameModes;
import org.spongepowered.api.entity.living.player.tab.TabListEntry;
import org.spongepowered.api.profile.GameProfile;
TabListEntry entry = TabListEntry.builder()
.list(tablist)
.gameMode(GameModes.SURVIVAL)
.profile(gameProfile)
.build();
tablist.addEntry(entry);
Şimdi bunu kıralım. Etiket listemizi TabListEntry.Builder#list(TabList) yöntemini çağırarak :javadoc:`TabListEntry ile ilişkilendiriyoruz. Daha sonra oyun modunu şu şekilde ayarlıyoruz :javadoc:`GameModes#SURVIVAL`. Bu ayar, çeşitli şeyler belirleyecektir. İstemcide, oyuncunun bir yaratılış modu veya bir seyirci modu olup olmadığını belirlemek için kullanılır. Eğer oyun modu seyirci ise, karşılık gelen ad gri ve italik olarak gösterilir. Sonra, ilişkili GameProfile’yi ayarlamamız gerekir. GameProfile
, `` GameProfile#of()`` tarafından oluşturulabilir, ancak oyuncu gibi gerçek bir GameProfile
elde edebilirsiniz. Daha fazla bilgi için Oyun Profili Yöneticisi. O oyuncu listesi girişini oyuncu listesine uygulamak istiyorsak, sadece :javadoc:`TabList#addEntry (TabListEntry)’ yöntemini çağırmamız gerekir.
Giriş örneğini veya gecikme süresini belirterek temel örneğimizi inceleyebiliriz:
TabListEntry entry = TabListEntry.builder()
.list(tablist)
.displayName(Text.of("Spongie"))
.latency(0)
.profile(gameProfile)
.build();
tablist.addEntry(entry);
Burada girdimizin TabListEntry.Builder#displayName(Text) yöntemini kullanan Spongie nin altında gözükeceği bir görüntüleme adı ayarlarız. Sonra ``TabListEntry``miz için gecikme süresini beş çizgiye ayarlarız. Girdiniz için diğer tür çizgileri nasıl belirleyeceğinize dair daha fazla bilgi için TabListEntry#setLatency(int) tekniğine bakın.
Geçerli Girdileri Değiştirme/Düzeltme
TabList
kullanarak kendi düzenlememiz için an itibariyle ``TabList``te olan girdiler elde edebiliriz. Belirli bir girdiyi elde etmek için TabList#getEntry(UUID) yöntemini kullanın. Bu yöntem eğer belirtilmiş UUID bulunamazsa ``Optional.empty()``ye geri dönecektir. Aşağıda bir örnek gösterilmiştir:
import java.util.Optional;
Optional<TabListEntry> optional = tablist.getEntry(uuid);
if (optional.isPresent()) {
TabListEntry entry = optional.get();
}
Bununla birlikte, oyun modunu, gecikme süresini ve girişin görünen adını değiştirmek için TabListEntry
yöntemlerini kullanabiliriz:
entry.setDisplayName(Text.of("Pretender Spongie"));
entry.setLatency(1000);
entry.setGameMode(GameModes.SPECTATOR);
Belirtilmiş bir girdiyi silmek de girdi almaya ayrıca bir alternatiftir. Basitçe silmek istediğimiz girdinin``UUID``sini belirten the TabList#removeEntry(UUID) yöntemini çağırmalıyız. ``getEntry(UUID)``da olduğu gibi eğer belirtilen UUID bulunamazsa bu da ``Optional.empty()``ye geri dönecektir.
Değiştirilecek belirli bir girdiye sahip değilsek, `` TabList`` içindeki bütün `` TabListEntry``’i yineleyebiliriz. Tekrarlayabileceğimiz bir `` Collection<TabListEntry> `` elde etmek için TabList#getEntries() metodunu çağırmamız yeterlidir.