Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Pytanie] Jak zrobić topke w Java?


Nitex03

Rekomendowane odpowiedzi

Opublikowano

Cześć,

mam autorski plugin na ranking, i mam problem bo nie wiem za bardzo jak zrobić topke

 

wszystkie dane zapisują się w osobnym pliku, players.yml, i wygląda to mniej więcej tak:

players:
  gracz:
    punkty: 1000

i jak zrobić z tego topke?

Opublikowano

lepiej by bylo jak bys 

w sql zapisywal ale ok

  1. Set<String> players = plugin.getConfig().getKeys(false);
  2. Map<String, Integer> points = new HashMap<>();
  3. for (String player : players)
  4. {
  5.     points.put(player,
  6.        plugin.getConfig().getConfigurationSection(player).getInt("points"));
  7. }
poznej tylko sortujesz
Opublikowano

public class topkaCommand
  implements CommandExecutor
{
  Main plugin;
  
  public topkaCommand(Main plugin)
  {
    this.plugin = plugin;
    this.plugin.getCommand("topka").setExecutor(this);
  }
  
  public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
  {
    String s;
    if (args.length == 0)
    {
      if (!(sender instanceof Player))
      {
        sender.sendMessage(this.plugin.fixMsg(this.plugin.messageManager.playerCorrectUsage));
        return true;
      }
      Player p = (Player)sender;
      DataGuildUser user = this.plugin.data.getUserByPlayer(p);
      if (user == null)
      {
        sender.sendMessage(this.plugin.fixMsg(this.plugin.messageManager.playerNoPlayer));
        return true;
      }
      for (Iterator localIterator = this.plugin.messageManager.playerMsg.iterator(); localIterator.hasNext()
      {
        s = (String)localIterator.next();
        sender.sendMessage(this.plugin.fixMsg(s).replace("%player%", p.getName()).replace("%kills%", Integer.toString(user.getKills())).replace("%deaths%", Integer.toString(user.getDeaths())).replace("%points%", Integer.toString(user.getPoints())));
      }
    }
    else if (args.length == 1)
    {
      DataGuildUser user2 = this.plugin.data.getUserByNickName(args[0]);
      if (user2 == null)
      {
        sender.sendMessage(this.plugin.fixMsg(this.plugin.messageManager.playerNoPlayer));
        return true;
      }
      for (String s2 : this.plugin.messageManager.playerMsg) {
        sender.sendMessage(this.plugin.fixMsg(s2).replace("%player%", user2.getNick()).replace("%kills%", Integer.toString(user2.getKills())).replace("%deaths%", Integer.toString(user2.getDeaths())).replace("%points%", Integer.toString(user2.getPoints())));
      }
    }
    return false;
  }
}

o to ci chodzi bo jak tak to daj like !

Opublikowano

najlepiej było by dać to do MySQL/SqLite czy innego gie, wtedy 99% roboty baza wykonuje za nas.

 

Ale jak wolisz config....

Załaduj wszystko do Map<String, Integer>

 

A resztę zrobi za nas biblioteczka google co byśmy sobie palców pisaniem nie uszkodzili <3

Ordering.natural().reverse().onResultOf(Functions.forMap(map)).compound(Ordering.natural().reverse());

z wyjaśnieniem:

Wszystkie dane dajemy do takiej mapki:

final Map<String, Comparable> variableMap = new HashMap<>();

Comparable oczywiście zmieniamy na to co potrzebujemy, ważne by było "Comparable", Integer spokojnie można tam dać ;) Jak to nasza jakaś własna klasa, to musimy w niej zaimplementować owe "Comparable"

 

I potem już tylko:

final SortedMap<String, Comparable> sortedMap = ImmutableSortedMap.copyOf(variableMap, Ordering.natural().reverse().onResultOf(Functions.forMap(variableMap)).compound(Ordering.natural().reverse()));

I... to wszystko :P sortedMap to nasza gotowa, posortowana mapka ;)

Jak chcesz sortować w drugą stronę to usuń oba ".reverse()"

To już jest koniec smerfa:


http://www.mpcforum.pl/topic/1323530-info-znikam/


GG: 48522543


PS: Na innych forach i stronach znajdziesz mnie pod nickiem: 


BukkitSmerf

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...