Skocz do zawartości

xMetin


Xyrusek

Rekomendowane odpowiedzi

Witam, tutaj Xyrusek.

Chciałbym przedstawić wam plugin który ostatnio napisałem. Oczywiście, jestem dopiero tzw. świeżakiem w pluginach i właśnie dla tego publikuje ten plugin, aby wysłuchać rad osób które umieją coś więcej w Javie.

Same działanie całego pluginu opiera się na tym, aby kliknąć prawym przyciskiem myszy na kowadło, lecz musimy przed tym posiadać w ekwipunku diamentowy miecz. Po kliknięciu możemy wybrać czy chcemy ulepszyć nasz miecz na poziom wyższy na co mamy tylko określoną szansę. Jeżeli nasza odpowiedz jest pozytywna cały system losuje liczbę, sprawdza czy liczba jest mniejsza od 30 itp. i po tym albo dodaje nam ulepszony miecz lub zabiera nam miecz i wysyła nam powiadomienie o tym, że ulepszanie się nie powiodło. Sam plugin nie został w żaden sposób zaciemniony, aby osoby znające się na Javie były w stanie pomóc mi w poprawie mojego kodu. Jeżeli chciałby ktoś wykorzystać ten system na swoim serwerze, nic nie mam przeciwko, lecz prosiłbym o wcześniejszy kontakt ze mną. Pozdrawiam Xyrusek.

Download: Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

Skan: Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

Kod: Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

Edytowane przez Xyrusek
Odnośnik do komentarza
Udostępnij na innych stronach

  public static String colorize(String msg)
  {
    String coloredMsg = "";
    for (int i = 0; i < msg.length(); i++) {
      if (msg.charAt(i) == '&') {
        coloredMsg = coloredMsg + '�';
      } else {
        coloredMsg = coloredMsg + msg.charAt(i);
      }
    }
    return coloredMsg;
  }

po 1: w bukkcie jest od tego gotowa metoda: 

msg = ChatColor.translateAlternateColorCodes('&', msg);

po 2: jak się operuje na stringach należy używać StringBuildera tak by nigdy w pętli nie dodawać do siebie stringów na takiej zasadzie, bo to bardzo wolne. Tyle razy ile string ma znaków, to tyle razy musisz kopiować całą jego zawartość i tworzyć nowy.

 

Do tego klasy nazywa się zawsze z wielkiej litery. I do nazywania używa się języka angielskiego.
Tak samo fajnie by było mieć wiadomości w osobnym pliku tak że każdy może sobie zmienić, lub nawet z systemem wybierania języka i domyślnymi wiadomościami dla pl/eng.

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

5 godzin temu, Xyrusek napisał:

Dodałem już kod na github'a.

Tak jak napisal goto, jak dodajesz stringi to uzywaj stringbuildera, bo roznica jest duza pomiedzy 'szybkoscia', tutaj masz przyklad: Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

 

Nazwy klas nazywaj z duzej litery, a metody z malej, wszedzie masz static, a to jest niepotrzebne.

public class xMetinOnChatListener implements Listener
{
  public xMetinOnChatListener() {}
  
  @EventHandler
  public void OnChat(AsyncPlayerChatEvent e)
  {
    String msg = e.getMessage();
    e.setCancelled(true);
    org.bukkit.Bukkit.broadcastMessage(me.xyrusek.core.functions.FixColor.colorize("&7" + e.getPlayer().getName() + "&8: &7" + msg));
  }
}

masz juz gotowe e.setMessage(string) lub e.setFormat(string), wiec broadcast zamien na to <-

            p.getInventory().addItem(new ItemStack[] { ulepszony1 });

tablica tak samo jest tutaj niepotrzebna, jezeli chcesz dodac graczowi tylko jeden item.

        if (p.getInventory().contains(ulepszony2)) {

uzywaj metody Inventory#containsAtLeast, bo jezeli gracz ma wiecej niz 1 to wtedy bedzie dzialalo tak jakby tego nie mial.

  public static ItemStack createItemStackTAK() {
    ItemStack tak = new ItemStack(Material.STAINED_CLAY, 1, DyeColor.LIME.getData());
    ItemMeta takMeta = tak.getItemMeta();
    takMeta.setDisplayName(FixColor.colorize("&2&lTAK"));
    tak.setItemMeta(takMeta);
    return tak;
  }

zamiast robic takich pelno klas to mozesz zrobic sobie po prostu jakis obiekt gdzie konstruktorami maja byc fileconfiguration (config yaml) i sciezka, np:

public class ItemParser {

    private final ItemStack item;

    public ItemParser(FileConfiguration config, String path) {
        this.item = new ItemStack(Material.DIAMOND,1);
        final ItemMeta im = item.getItemMeta();
        for (String s : config.getConfigurationSection(path).getKeys(false)) {
            final String toValue = toValue(config,path+"."+s);
            switch (s) {
                case "material": {
                    try {
                        this.item.setType(Material.matchMaterial(toValue));
                    } catch (Exception ex) {
                        UHCPlugin.getInst().getLogger().warning(
                                "Could not find material! " + toValue + " can't be parsed to material!");
                    }
                    continue;
                }
                case "amount": {
                    int amount = this.item.getAmount();
                    try {
                        amount = Integer.parseInt(toValue);
                    }
                    catch (NumberFormatException ex) {
                        UHCPlugin.getInst().getLogger().warning(ex.getMessage());
                    }
                    finally {
						if (this.item.getAmount()!=amount)
                        	this.item.setAmount(amount);
                    }
                    continue;
                }
			... itd.

no i przykladowy config:

items:
  yes-item:
    material: STAINED_CLAY
    data: 5
    amount: 3

 

Edytowane przez yooniks
Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Nieaktywny
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...