-
Ilość zawartości
987 -
Rejestracja
-
Ostatnia wizyta
-
Wygrane w rankingu
13
Treść opublikowana przez yooniks
-
programista? chyba skrypter afk na serwerze xd jakieś gotowe prace?
-
gdzies musi rzucać wyjątek jak kliknie sie slot większy niż x, po stacktrace łatwo to znajdziesz pewnie
-
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
-
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
-
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)
-
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()
-
kod wyżej raczej nieprzydatny, uzywaj streamow long count Bukkit.getOnlinePlayers() .stream() .filter(player -> player.getWorld().getName().equals("swiat")) .count();
-
Zmniejszenie liczby pobierania eventu(?)
yooniks odpowiedział(a) na Oedeopol pytanie w Pytania i problemy
no to w else daj stopowanie taska -
Zmniejszenie liczby pobierania eventu(?)
yooniks odpowiedział(a) na Oedeopol pytanie w Pytania i problemy
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 -
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
-
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=(
-
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
-
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ę;(
-
PLUGINY/CORE POD SERWER EASYHC OPIS
yooniks odpowiedział(a) na arekgrawminecraf pytanie w Pytania i problemy
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 -
Jak zrobic itemy stale, tymczasowe?
yooniks odpowiedział(a) na Kola13567 pytanie w Pytania i problemy
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 -
moze czas skonfigurowac server.properties
-
ja nie podawalem i dzialalo dobrze
-
# 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
-
^ i nie zagłębiam się jakoś w atrybuty, ale nie można nimi tego zrobić? lub do nbt po prostu dodac, o wiele latwiej
-
Jakiś przykładowy projekt?
-
a hopper ma dwa rzedy czy jeden?
-
Problem z eventem RegionEnterEvent
yooniks odpowiedział(a) na deusowy_yt pytanie w Pytania i problemy
getEyeLocation moze @edir w sumie to bez sensu, masz vector i to powinno wystarczyć -
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; } } }
-
daj to w on place i dodaj cancel event
