-
Ilość zawartości
987 -
Rejestracja
-
Ostatnia wizyta
-
Wygrane w rankingu
13
Treść opublikowana przez yooniks
-
Wychwytuj cause (powód) śmierci w playerdeathevent i wtedy setDeathMessage
-
Nie castuj playera do playera, zmien boolean shoot na true, nie uzywaj getTypeId()
-
DOBRZE @EventHandler(ignoreCancelled = true) public void onDamage(EntityDamageByEntityEvent e) { final Entity entity = e.getEntity(); final Entity damager = e.getDamager(); if (!(entity instanceof Player))return; if (damager instanceof Projectile) { final ProjectileSource shooter = ((Projectile) damager).getShooter(); if (shooter instanceof Player) { final Player attacker = (Player) shooter; final Player victim = (Player) entity; attacker.sendMessage("hp gracza: "+victim.getHealth()+" maxymalne hp: "+victim.getHealthScale()); return; } } }
-
Ale autor ma po prostu zwykly serwer, bez zadnym modow czy innych dodatków, dałem mu prosty kod, co z tym zrobi to jego sprawa, jeśli bym robił taki plugin 'publiczny' to oczywiście ,że zrobiłbym to inaczej, szukasz nieistotnych szczegółów.. Pisane na szybko, nieprzemyślane
-
serduszek jest 10, wiec zamiast zwracac 20hp moim zdaniem jest lepiej zwracac 10 (m.in. tak mi kazano pod ostatnie zlecenie)
-
@EventHandler(ignoreCancelled = true) public void onDamage(EntityDamageByEntityEvent e) { final Entity entity = e.getEntity(); final Entity damager = e.getDamager(); if (!(entity instanceof Player))return; if (damager instanceof Projectile) { final ProjectileSource shooter = ((Projectile) damager).getShooter(); if (shooter instanceof Player) { final Player attacker = (Player) shooter; final Player victim = (Player) entity; attacker.sendMessage("zabrano damage! "+e.getDamage()+" teraz hp tego gracza wynosi: " + (victim.getHealth()/2)); return; } } } sprobuj. (victim.getHealth() mozesz dac w decimalformat) i nie wiem czy victim.getHealth() to bedzie od razu z 'zadanym damage', jezeli nie to zrob sobie cos typu private double getHealth(Player target, double givenDamage) { final double health = ((target.getHealth()/2)-givenDamage); return health; } no i mozesz tez sprawdzac czy nie jest na minusie itd
-
probowales 'every 1 second: ' ?
-
https://www.spigotmc.org/threads/skript-custom-command-alias.101236/ if player doesn't have permission "pluginy": on command "/gamemode": set {_test::*} to "test" and "test2" #dlugo nie pisalem skryptow nie pamietam jak sie to robi #lub add "test" and "test2" to {_test::*} on command: if {_text::*} contains event-command: #do something
-
Tak jak napisal goto, jak dodajesz stringi to uzywaj stringbuildera, bo roznica jest duza pomiedzy 'szybkoscia', tutaj masz przyklad: https://javastart.pl/static/klasy/string-stringbuffer-i-stringbuilder/ 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
-
jak chcesz oceny i porad co do kodu to wrzuc src na githuba
-
@bvcz jezeli w skrypcie jest tak samo jak w pluginie to raczej nie, bo to jest cos typu: public class Config { private final Map<String,String> strings = new HashMap<>(); public void init() { strings.put("key","value"); } public String getString(String s) { return strings.get(s); } } wiec jezeli raz zrobi sie init() (zalozmy ze w init jest pelno 'czegos', i to pobiera cos z pliku YAML i tak dalej..), to przy pobieraniu wartosci nie bedzie jakos magicznie obciazalo serwera (jezeli wgl bedzie), bo zaladowanie jest tylko raz, a potem tylko to pobierasz, inaczej byloby jezeli cos caly czas wrzucaloby sie do configu i jeszcze go przeladowywano, wtedy moze byc jedynie lag, w skrocie, pobieranie wartosci z yaml w bukkicie (w plg) to tak samo jakbys zaladowal to tylko raz, np: private final String someValue; public SomeString(String someValue) { this.someValue = someValue; } i pobieral w ten sposob: public String getStringValue() { return someValue; } (anty-goto: moge sie mylic)
-
Jeśli chodzi o topki to możesz użyć treemap lub comparatora.
-
W porownaniu do skryptow na tym forum, to dosc slabo miedzy innymi: format slot 7 of player with red glass named "&c&l&oWYLACZ POWIADOMIENIA DROPOW Z PREMIUMCASE NA CHACIE" to close then run [make player execute command "/cpow off"] format slot 8 of player with red glass named "&c&l&oWYLACZ POWIADOMIENIA DROPOW Z PREMIUMCASE NA CHACIE" to close then run [make player execute command "/cpow off"] format slot 16 of player with red glass named "&c&l&oWYLACZ POWIADOMIENIA DROPOW Z PREMIUMCASE NA CHACIE" to close then run [make player execute command "/cpow off"] format slot 17 of player with red glass named "&c&l&oWYLACZ POWIADOMIENIA DROPOW Z PREMIUMCASE NA CHACIE" to close then run [make player execute command "/cpow off"] format slot 25 of player with red glass named "&c&l&oWYLACZ POWIADOMIENIA DROPOW Z PREMIUMCASE NA CHACIE" to close then run [make player execute command "/cpow off"] format slot 26 of player with red glass named "&c&l&oWYLACZ POWIADOMIENIA DROPOW Z PREMIUMCASE NA CHACIE" to close then run [make player execute command "/cpow off"] tu wystarczy loop (petla) on place: if player is holding a chest named "&9&lPremiumCase": cancel event remove 1 chest named "&9&lPremiumCase" from player loop all players: if {powiadomienia::%loop-player%} is true: send "&c%player% &7otworzy &9&lPremiumCase &7i wylosowal&8:" to loop-players chance of 25%: drop 1 diamond sword of sharpness 5 and fire aspect 2 loop all players: if {powiadomienia::%loop-player%} is true: send "&8- &cMiecz 5/2" a tutaj moglby byc config
-
wrzucaj to do mapki i po prostu ustawiaj na air, lub co tam chcesz wysylasz sendblockchange, to wrzucaj tez blok do mapki, key uuid, value List<Block> (lub location) i wtedy mozesz pobierasz block przy uzyciu przyklad: final Block block = blocks.get(p.getUniqueId()).get(0); i wysylasz sendblockchange gdzie zamieniasz ten block na cos innego, i mozesz usunac z mapki ten blok.
-
Ludzie jak piszecie 'ja napisze' to chociaz dajcie jakis swoj projekt, zeby spojrzec na kod, bo kazdy moze napisac 'zrobie', a kod będzie nie wydajny.
-
bede technikiem dodaj do white nick: xNeleqx a ja ci potem napisze tego antycheata bez backdoorow itp :) woooooooooooooooooooooooooooooooooooooooooooooooooo, ale z bugami ;/ @topic AAC, NoCheatPlus i tyle
-
wywal to: if(p instanceof Player){ bo chyba np. Enderman na serwer nie wbija tylko sie respi Sprobuj otworzyc to sekunde po dolaczeniu gracza, czyli np. new BukkitRunnable() { @Override public void run() { if (p.isOnline()) openRules(p); } }.runTaskLater(plugin,20L); //20L = 1 sekunda - powinno rozwiazac twoj problem no i: Inventory inv = Bukkit.getServer().createInventory(null,9,"§6§lRegulamin"); ItemStack book = new ItemStack(Material.BOOK, 1); ItemMeta bookim = book.getItemMeta(); ArrayList <String> booklore = new ArrayList<String>(); booklore.add("§c» §4Zakaz gry na cheatach"); booklore.add("§c» §4Nie badz noobem i nie niszcz gdy innym"); booklore.add("§c» §4Gra na cheatach = §c§lBAN , TEMPBAN"); bookim.setLore(booklore); bookim.setDisplayName("§1. §4§lCHEATY"); book.setItemMeta(bookim); inv.setItem(0, book); rob to tylko raz, w onEnable. i wywal to z metody createMenu - lub po prostu otwieraj graczu ksiazke, a nie inventory z ksiazka. @edit pisalem to zanim GotoFinal skomentowal, jesli bym to widzial to juz bym nie skomentowal Możesz spróbować wrzucić otwieranie inventory do taska, by było opóźnione o np jeden tick, pewnie wina starej wersji silnika.
-
Tworzenie bloku tylko dla Jednego gracza w danej lokacji
yooniks odpowiedział(a) na XXXXXXXXXX pytanie w Pytania i problemy
@XXXXXXXXXXmozesz użyć player.getEyeLocaton() i wtedy getBlock() ale nie wiem czy będziesz mial taki rezultat jaki chcesz -
@xxTrollPLxx https://github.com/TheMolkaPL @TheMolkaPL lepiej się nie odzywaj bo lepszy nie jesteś jak on chce to mu zrobię, ale [ciach] nie wtrącaj się w sprawy innych :) PS: Ty jesteś bez sensu ;< @topic To nie exploity, to po prostu twój błąd, gracz dostał uprawnienie, dał sobie je pewnie używając pexa na kilka innych kont i tyle, lub po prostu masz luki w plikach konfiguracyjnych/pluginach. Przejrzyj dokładnie plik permissions.yml (chyba tak sie nazywal) w folderze PermissionsEx Do tego wgraj UUID Spoof fix, https://www.spigotmc.org/resources/uuidspoof-fix.26948/
-
TWORZENIE BLOKU DLA JEDNEGO GRACZA
yooniks odpowiedział(a) na XXXXXXXXXX pytanie w Pytania i problemy
@XXXXXXXXXX jakas mapka z key jako uuid, value jako lista blockow, i przy tworzeniu blokow dodajesz je do listy w mapce do gracza, zanim zmienisz znow blok na taki jaki byl to sprawdz w petli czy ma taki sam material jaki byl w mapce, jezeli nie to continue (ale watpie?) - napisz dokladniej co chcesz osiagniac -
@DreaMPL @yooniks Czy to przypadkiem nie będzie mocno spowalniać działanie serwera? nie
-
Problem z liczbą np. 18.1931361 itd
yooniks odpowiedział(a) na ihn04849 pytanie w Pytania i problemy
private static String getTPS () { final double[] tpsArray = new double[]{20.00000D,19.999999D}; String tps = Double.toString(tpsArray[0]); if (tps.length() > 4) tps = tps.substring(0,4); return tps; } -
@Myrlakusss nie, to nie jest twoje, ja to widzę już któryś raz, dużo razy było na mpcforum Lepiej jest już napisać od nowa taki plugin, niż to edytować
-
Caused by: java.lang.IllegalArgumentException: Plugin already initialized! 51 at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:98) ~[craftbukkit-1.8.jar:git-Bukkit-33d5de3] 52 at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[craftbukkit-1.8.jar:git-Bukkit-33d5de3] 53 at pl.hotangel2k17.Main.<init>(Main.java:5) ~[?:?] 54 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.7.0_80] 55 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) ~[?:1.7.0_80] 56 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.7.0_80] 57 at java.lang.reflect.Constructor.newInstance(Constructor.java:526) ~[?:1.7.0_80] 58 at java.lang.Class.newInstance(Class.java:383) ~[?:1.7.0_80] 59 at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:52) ~[craftbukkit-1.8.jar:git-Bukkit-33d5de3] 60 at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:129) ~[craftbukkit-1.8.jar:git-Bukkit-33d5de3] 61 ... 9 more zgaduje ze masz 2 pluginy z takim samym package i klasa glowna, dlatego po 'pl.hotangel2k17' powinienes dodac np. 'kits', czyli: 'pl.hotangel2k17.kits' - zmien package.
