Xyrusek 7 Opublikowano 18 marca 2018 Udostępnij Opublikowano 18 marca 2018 (edytowane) 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 18 marca 2018 przez Xyrusek Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
yooniks 347 Opublikowano 18 marca 2018 Udostępnij Opublikowano 18 marca 2018 jak chcesz oceny i porad co do kodu to wrzuc src na githuba Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
GotoFinal 195 Opublikowano 18 marca 2018 Udostępnij Opublikowano 18 marca 2018 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. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Xyrusek 7 Opublikowano 18 marca 2018 Autor Udostępnij Opublikowano 18 marca 2018 4 godziny temu, yooniks napisał: jak chcesz oceny i porad co do kodu to wrzuc src na githuba Dodałem już kod na github'a. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
yooniks 347 Opublikowano 18 marca 2018 Udostępnij Opublikowano 18 marca 2018 (edytowane) 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 18 marca 2018 przez yooniks Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ą.