Skocz do zawartości

yooniks

Użytkownik
  • Ilość zawartości

    987
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    13

Treść opublikowana przez yooniks

  1. programista? chyba skrypter afk na serwerze xd jakieś gotowe prace?
  2. yooniks

    Enderchest

    gdzies musi rzucać wyjątek jak kliknie sie slot większy niż x, po stacktrace łatwo to znajdziesz pewnie
  3. yooniks

    Enderchest

    watpie że ktoś ci to napisze za darmo, to jest dużo pisania, a poza tym są juz gotowe pluginy na to. enderchest ma 3 rzędy, a żeby to zmienić trzeba zrobić własny zapis enderchesta itd. co może później powodować jakieś błędy pomiędzy pluginami, np. jakiś pluginy będzie chciał pobrać itemy z enderchesta, a on będzie pusty bo jest zapisywanie gdzieś indziej
  4. tak jak napisał Sewer, single responsibility, jedna klasa - jedno zadanie, o wiele łatwiej jest się odnaleźć w kodzie i ogólnie bardzo duzo ułatwia, a to czy będzie jeden task z 1000 linijkami kodu, czy 10 taskow po 100 linijek tak jak napisałeś, nie wpływa na wydajnosc, i tak są wrzucane do kolejki, a kolejka jest tak duza(tzn. dużo taskow może się wykonywać jednocześnie) że taski wykonają się od razu
  5. https://www.spigotmc.org/wiki/connecting-to-databases-mysql/#asynchronous-database-interaction @edit a reszta to na logike.. ladowanie itemow do gui itd. ktore sie nie zmienia - tylko podczas wlaczania pluginu, a nie przy kazdym evencie od nowa tworzyc (np. gui od dropow, bossow itp)
  6. tylko ze ty dodajesz gracza do lore a on chce cały amount jako zmienna i wgl teraz ogarnąłem że przecież w klasie world jest getPlayers()
  7. kod wyżej raczej nieprzydatny, uzywaj streamow long count Bukkit.getOnlinePlayers() .stream() .filter(player -> player.getWorld().getName().equals("swiat")) .count();
  8. no to w else daj stopowanie taska
  9. sprawdzaj czy x, y, z się zmieniło (porównuj koordy z event.getto i event.getfrom) itemstacki które tworzysz w metodzie zrob finalne poza ciałem klasy zamiast tworzyć je tysiąc razy przy każdym wywowalniu eventu (a liczy się tutaj nawet małe poruszenie myszka) i target block pewnie może być nullem @edit chociaz w sumie nie wiem, musisz sprawdzić jak to będzie działało i btw ten task który puszczasz nigdy nie stopuje
  10. z takim podejsciem to :xd: nie pisze ci co masz poprawic tylko co robisz zle/twoje bledy (ktore maja duzy wplyw na wydajnosc), jak w obecnych pracach takie cos dalej masz to serwery beda mialy spadki tps, ciekawe czemu
  11. u.setNpc(new NPC("00000"+Main.generateString(new Random().nextInt(10))+"", u.getPlayer().getLocation())); za kazdym razem tworzysz nowa instancje klasy random, niepotrzebnie dodajesz + " " i przez te 0000 na koncu mozna juz ominac antyaure (ale mniejsza) uzywasz refleksji a potem i tak nms 1.8.r3... widac ze polowa kodu nie twoja :d public User(Player p){ this.name = p.getName(); this.npc = new NPC("akill"+Main.generateString(new Random().nextInt(10))+"", new Location(p.getWorld(), 4000,100,400)); this.killsboots = 0; start(); } i za kazdym razem nowa instancja klasy random zamiast trzymac to juz w jakis statycznym finalnym fieldzie =( do tego sideeffects (.start()) getPlayer() moze zwracac nulla, nie sprawdzasz czy jest to nullem, a uzywasz tego w petlach, taskach co moze powodac bledy public void create(){ if(UserManager.users.contains(this)){ return; } User u = new User(this.getPlayer()); UserManager.users.add(u); } oczy bolą =( }.runTaskLater((Plugin)Main.getPlugin(), 5*20L); pakiety mogą lecieć async public static String generateString(int lenght){ Random rnd = new Random(); String s = ""; for(int i = 0; i<lenght; i++){ char c = (char) (rnd.nextInt(26) + 'a'); s+=c; } return s; } apache juz nawet ma metode go generowania randomowych liter, liczb, no i polaczonych liter z liczbami, a ty za kazdym razem nowy random, poza tym w mainie.. juz nie wpomne o tym ze tak sie nie laczy stringow no ale length to u ciebie zazwyczaj malo, wiec juz narzekac nie bede no i najgorsze co czesto widze: public static List<User> users = Lists.newArrayList(); public static User getUser(Player p){ if(users.isEmpty()) return null; for(User u : users){ if(u.getName().equalsIgnoreCase(p.getName())){ return u; } } return null; } public static User getUser(String s){ if(users.isEmpty()) return null; for(User u : users){ if(u.getName().equalsIgnoreCase(s)){ return u; } } return null; } public static void createUser(Player p){ User u = getUser(p); if(users.contains(u)){ return; } User u2 = new User(p); users.add(u2); } nullom sie zapobiega, a nie tworzy jeszcze wiecej! mozesz tutaj uzyc mapki <uuid, user> zamaist iterowac po 127363 elementach i sprawdzac czy name = szukane, gdy element szukany znajduje sie gdzies na koncu, no i lepiej sprawdzac graczy po uuid a nie name, bo uuid sie nie zmieni, a nick juz tak no i ogolnie oczy bolą jak sie to czyta, wątpie ze napisalbys kazdy plugin tak jak to napisales, no a tanio to sie nie dziwie, skoro tak wykonane=(
  12. tak profesjonalny programista a nie potrafi wrzucic kodu np. na githuba;( na telefonie nie sprawdzę, a na komputerze nie chce mi się pobierać i dekompilowac, dekompilacja dużo zmieni
  13. przeciez można przenieść temat.. poza tym nikogo nie obchodzi gdzie jesteś programista, pokaz portfolio a nie p8szesz ile to ty nie potrafisz, do tego 100℅ ceny po 75℅ napisania pluginu to trochę bez sensu, jak skończysz i będą pewnie jakieś bugi, lub coś się nie spodoba to pewnie nie będziesz chciał zmieniać @edit o, kolega wyżej też o przeniesieniu napisal, wyprzedził o minutę;(
  14. core za 50zl, to chyba jakiś z wycieku tylko z zedytowanym plugin.yml, drop tak samo, no chyba że to jest sprzedawane wielu graczom, a nie na zlecenie, no ale to i tak 30zl to mało
  15. itemy stałe trzymasz w zmiennych ktore sa zapisywanie po restarcie, po prostu {stale_refy.%player%} - boolean, a w tymczasowych od razu dajesz do ekwipunku item przy zakupie
  16. moze czas skonfigurowac server.properties
  17. ja nie podawalem i dzialalo dobrze
  18. # Here you have to specify a list of whitelisted ips. # Note that you do not need to specify bungee IPs here. # Those are automatically imported from your bukkit.yml. # Set them there if you didn't already. whitelist: [217.182.35.185, nsplay.pl] #ip bungeecorda /\ # Here you have to specify the message sent to the player when kicked. playerKickMessage: '&cPolacz sie poprzez &6nsplay.pl&c!' # Put this to true to print the real IP of every player attempting to connect. debug: false # Setup mode, enabled on first run, will automatically whitelist the IP of the # first player that is detected to connect through bungeecord, kicking the # other players after 1 second. # WARNING : This should be set to false once you have whitelisted your bungeecord ! setup: false ip-forwarding wlacz wszedzie
  19. ^ i nie zagłębiam się jakoś w atrybuty, ale nie można nimi tego zrobić? lub do nbt po prostu dodac, o wiele latwiej
  20. Jakiś przykładowy projekt?
  21. yooniks

    Pomocy!

    em chodzi ci po prostu o right click? xd
  22. a hopper ma dwa rzedy czy jeden?
  23. getEyeLocation moze @edir w sumie to bez sensu, masz vector i to powinno wystarczyć
  24. Github: https://github.com/yooniks/phasmatos-inventory-api/ Przyklad uzycia: public final class ExamplePlugin extends JavaPlugin { @Override public void onEnable() { final PhasmatosBukkitInventoryAPI inventoryAPI = new PhasmatosBukkitInventoryAPI(); inventoryAPI.register(this); final PhasmatosInventory stableInventory = new ExampleStableInventory("This is simple stable inventory!", 9); stableInventory.addItem(0, new ItemBuilder(Material.COBBLESTONE) .withName("Hello!= )") .withLore("You can only look at me!") .build()); final ExampleChangeableInventory changeableInventory = new ExampleChangeableInventory("Changeable inventory", 9); final ItemStack changeableItem = new ItemBuilder(Material.COBBLESTONE) .withName("Your name: {PLAYER}") .withLore("You can look at me, i will change my meta", "You can click me!!!") .build(); changeableInventory.addItem(4, changeableItem); changeableInventory.addItemAction(4, (player) -> player.sendMessage("Wow! You clicked at me!")); inventoryAPI.addInventory(stableInventory); inventoryAPI.addInventory(changeableInventory); } private final class ExampleStableInventory extends PhasmatosStableInventory implements PhasmatosCloseableInventory { ExampleStableInventory(String title, int size) { super(title, size); } @Override public void onClose(InventoryCloseEvent event) { //closed inventory, you can send message etc.. } } private final class ExampleChangeableInventory extends PhasmatosClickableChangeableInventory { ExampleChangeableInventory(String title, int size) { super(title, size); } @Override public ItemStack updateItem(ItemStack item, Player player) { if (item.getType() == Material.COBBLESTONE) { final ItemMeta meta = item.getItemMeta(); meta.setDisplayName(StringUtils.replace(meta.getDisplayName(), "{PLAYER}", player.getName())); item.setItemMeta(meta); } return item; } } }
  25. yooniks

    Itemy

    daj to w on place i dodaj cancel event
×
×
  • Dodaj nową pozycję...