-
Ilość zawartości
1852 -
Rejestracja
-
Ostatnia wizyta
-
Wygrane w rankingu
44
Treść opublikowana przez kerpson
-
Cuddihosting zabiera ponad 70% zarobków, dodatkowo gdy one są za niskie to trzeba samemu dokładać im pieniądze. Antybot i antycrasher? Porażka I nie próbuj mi wmówić (jakbyś chciał naisać), że gadam glupoty bo mialem tam 3 serwery Dodatkowo kontakt z nimi - porażka, na odpowiedzi trzeba czekać nawet 2 dni.
-
Ja osobiście uważam, że hostingi serwerów minecraft tylko pod mniejsze serwery. Jak chcesz zrobić lepszy, większy serwer to vps (polecam ovh, sam korzystałem i jest bardzo dobry) (ewentualnie serwer dedykowany, ale tu już masz porównanie vps vs dedyk https://www.sprintdatacenter.pl/blog/serwer-dedykowany-czy-vps/)
-
Spoko poradnik. Fajnie jakbyś w niektórych linijkach wyjaśniał skąd co się wzięło, bo osoba która nigdy nie miała styczności z kanałami bungeecorda to mało co ogarnie o co chodzi. Leci plus
-
więc musisz zainwestować w dobrą maszynę
-
public static boolean canBuy(Player p, int serviceID){ File f = new File(Main.getInst().getDataFolder(), "services.yml"); YamlConfiguration config = YamlConfiguration.loadConfiguration(f); List<Integer> services = config.getIntegerList("Players." + p.getName() + ".servicesBought"); if(services.contains(serviceID)){ return true; }else{ return false; } Nie powinno być na odwrót ? Pierw chyba return false, bo przecież gracz ma zakupioną tą usługę, a potem return true po else. O wiele łatwiej byłoby ci zrobić obiekt Shop i tam zapisywać usługi itd itd itd. https://javastart.pl/baza-wiedzy/programowanie-obiektowe public class Shop { private final ItemStack is; private final int price; public Shop(ItemStack is, int price) { this.is = is; this.price = price; } public ItemStack getItem() { return is; } public int getPrice() { return price; public class ShopManager { private final static Map<ItemStack, shop> map = new HashMap>(); public static Shop getShop(ItemStack is) { if (map.containsKey(is)) { return map.get(is); } return null; } public static void add(ItemStack is, Shop shop) { map.put(is, shop); } No i w configu np; Shop shop = new Shop(is, price); ShopManager.add(is, shop); /W jakiejś metodzie Shop shop = ShopManager.getShop(is); int price = shop.getPrice(); /cena
-
wina dekompilatora może nwm, dlatego fajnie jakbyś dał na githuba ta return StringUtil.startsWithIgnoreCase(listaKtoraUtworzysz, args[0]) Tamtego nie dawaj, pomyliłem metody XD Użyj tego: return StringUtil.copyPartialMatches(args[0], listaKtoraZrobisz, new ArrayList<>);
-
możliwy lag serwera przy tej akcji. może za słaba maszyna czy coś
-
Zależy czy chcesz wysyłać wiadomości również do konsoli czy tylko do graczy. Jak to 1 to robisz to samo co przy komendzie tylko wysyłasz wiadomości na Bukkit.broadcastMessage(ChatColor.translate()); A jak tylko do graczy: Bukkit.getOnlinePlayers().forEach(p -> p.sendMessage(wiadomosc));
-
consoleCommands.put(item, consoleCmds); List<String> bc = new ArrayList<>(); for (String s : Main.getInst().getConfig().getStringList(path + ".broadcast")) { bc.add(s); } broadcasts.put(item, bc); item.addUnsafeEnchantments(map); zamień na: item.addUnsafeEnchantments(map); consoleCommands.put(item, consoleCmds); List<String> bc = new ArrayList<>(); for (String s : Main.getInst().getConfig().getStringList(path + ".broadcast")) { bc.add(s); } broadcasts.put(item, bc);
-
nie, nie, w mapce nie masz widocznie zapisanego takiego przedmiotu
-
widocznie w mapoce nie ma takiego przemiotu
-
pokaż tą linijkę ShopPremiumInventoryListener.java: linijka 44
-
Dodaj link do githuba, będzie wygodniej z oceną. A z dekompilatora z tego co widzę, to kod wygląda dziwnie. Momentami używasz paragrafów, a raz metody ChatColor Boolean enableinfo = Boolean.valueOf(Main.plugin.getConfig().getBoolean("enable")); Używasz niepotrzebnie obiektu Boolean + pobierasz zmienne podczas działania pluginu, zamiast wcześniej je gdzieś załadować. (W eventach to samo) No i wydaje mi sie, że metoda UpdateChecker jest wzięta z jakiegoś innego źródła. Skąd to podejrzenie ? Prosto, tutaj używasz obiektowego podejścia: private Main plugin; private int resourceId; public UpdateChecker(Main plugin, int resourceId) { this.plugin = plugin; this.resourceId = resourceId; } No a w reszcie same instancje Dodatkowo TabComplete nie zadziała do końca tak jak powinien, ale po 1: Po co tworzysz cały czas nową listę ? można ją utworzyć wcześniej a potem ją tylko zwracać No i ten błąd: Jeżeli gracz np. wpisze upd i kliknie TAB to z automatu wyskoczy mu Help, a nie update, spowodowane jest to tym, że nie sprawdzasz czy argument jest pusty czy nie itd. Przykład tutaj: Player senderPlayer = sender instanceof Player ? (Player) sender : null; ArrayList<String> matchedPlayers = new ArrayList<String>(); for (Player player : sender.getServer().getOnlinePlayers()) { String name = player.getName(); if ((senderPlayer == null || senderPlayer.canSee(player)) && StringUtil.startsWithIgnoreCase(name, lastWord)) { matchedPlayers.add(name); } } Collections.sort(matchedPlayers, String.CASE_INSENSITIVE_ORDER); return matchedPlayers; Kod działać, działa ale jakieś poprawki by się sprzydały.
-
Po zakupie: for (String cmd : mapka.get(item)) { cmd = cmd.replace("{PLAYER}", p.getDisplayName()); Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), cmd);
-
Nie lepiej zrobić 3 osobne komendy, i jakiegoś utila ? Np coś takiego: public class TpaManager { private final Cache<UUID, UUID> tpa; public TpaManager() { this.tpa = CacheBuilder.newBuilder().expireAfterWrite(60, TimeUnit.SECONDS).build(); } public void addRequest(UUID uuid, UUID uuid1) { this.tpa.asMap().put(uuid1, uuid); } public void removeRequest(UUID uuid) { this.tpa.asMap().remove(uuid); } public Player getPlayer(UUID uuid) { return Bukkit.getPlayer(this.tpa.asMap().get(uuid)); } } W main: public class Main extends JavaPlugin { private TpaManager tpaManager; @Override public void onEnable() { this.tpaManager = new TpaManager(); } public TpaManager getTpaManager() { return this.tpaManager; } I tu przykład z mojego tpa: https://imgur.com/a/TWr7rPc (zamień CorePlugin na nazwę z twoje glównej klasy, ja korzystam z klasy Command, ale tu chodzi o przykład działania )
-
1. Niepotrzebny ci listener, jeżeli nie masz żadnego eventu w tej klasie (chyba, że masz to sry) 2. Nie powinno w mapce bezpośrednio zapisywać się obiektu Player, lecz np. UUID 3. To ma mały sens, powinno być tpa.remove(p1); 4. Jeżeli używasz A co do kodu: (Nie jestem pewny czy zadziała) Działanie hash mapy: Map<Key, Value>. Key to obiekt, za pomocą którego można otrzymać Value (również obiekt) mu przypisany, pod warunkiem, że w mapce znajduje się Key o wartości o jakiej się go sprawdza. W komendzie /tpa <gracz>: Sprawdzasz czy p2 nie jest nullem, a do mapki dodajesz map.put(p2.getUniqueId(), p1.getUniqueId()); No i wysyłasz wiadomość do gracza p2, że p1 chce się tepać itd itd. Komenda /tpaccept może być bez argumentu:) : (W tym przypadku p1 to po prostu player castowany do sendera) Zrób warunek if map.containsKey(p1.getUniqueId()); jeżeli nie to znaczy, że nikt się do ciebie nie tepał Player p2 = Bukkit.getPlayer(map.get(p1.getUniqueId())); (sprawdz czy nie jest nullem) Sprawdzasz czy p2 nie jest nullem, jeżeli tak to znaczy, że jest offline no i możesz zrobić map.remove(p1.getUniqueId()) (usunąć ich z mapki bo są już niepotrzebni); tepasz p2 do ciebie itp Komenda /tpdeny też może być bez argumentu : (W tym przypadku p1 to po prostu player castowany do sendera) Zrób warunek if map.containsKey(p1.getUniqueId()); jeżeli nie to znaczy, że nikt się do ciebie nie tepał Player p2 = Bukkit.getPlayer(map.get(p1.getUniqueId())); (sprawdz czy nie jest nullem) Sprawdzasz czy p2 nie jest nullem, jeżeli tak to znaczy, że jest offline no i możesz zrobić map.remove(p1.getUniqueId()); wysyłasz p2, że nie chcesz go teleportować I jeszcze taka ciekawostka, fajnym rozwiązaniem też jest zamiast mapki użycia cache z guavy, jest to też cos ala mapka, tylko że usuwa dany klucz po określonym czasie np. 60 sekund https://github.com/google/guava/wiki/CachesExplained
-
Po co dajesz "extends JavaPlugin" ? Przecież z tego co widzę, to nie jest klasa główna tylko Listener, wystarczy samo "implements Listener", a w klasie glównej Bukkit.getPluginManager().registerEvents(new NazwaListenera(), this);
-
switch jest niepotrzebne, zrób np. tak Material item = e.getCurrentItem().getType(); if (item == Material.TNT) { cos
-
przecież to to samo, tylko z ignorowaniem wielkości znaków, dodatkowo nie jest problem z tym tylko z getName samo to nic nie da do autora, zmień metodę: e.getView().getTitle().equals("fsdfsdsf")
-
musisz pokazać kod
-
darmowe antycheaty: https://www.spigotmc.org/wiki/anti-cheat-list-bukkit-and-spigot-1-8-x/ (są też płatne, lepsze)
-
jakie błędy?
-
masz widocznie źle podpięty główny serwer do bungeecorda, ustaw na serwie glownym bungeecord na true i dodaj go poprawnie do configu
-
mordo to jest config -_- Żeby zrobić włączanie/wyłączanie musisz zrobić dla każdego gracza zmienną np. {drop::diamond::%player%} i ustawiać ją na true lub false (zależy czy na starcie ma być włączony czy wyłączony) W evencie od klikania w inventory sprawdzasz jaki to przedmiot i ustawiasz zmienną z true na false lub z false na true
-
Mało szczegółów dajesz, tylko mówisz, że się nie łączy. Następnym razem daj jakieś informacje czy są jakieś błędy przy łączeniu lub w konsoli.
