Mati17102 56 Opublikowano 16 maja 2018 Udostępnij Opublikowano 16 maja 2018 Cześć, dzisiaj potrzebuję pomocy, ponieważ próbuje zrobić reload pluginu, lecz nie mogę zrobić. Pomoże ktoś? Kody pluginu: package pl.auroracase.mc; import org.bukkit.Bukkit; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; public class Main extends JavaPlugin{ private static Main i; public void onEnable(){ i = this; PluginManager pm = Bukkit.getPluginManager(); pm.registerEvents(new BlockPlaceListener(), this); getCommand("casegive").setExecutor(new CaseCommands()); } public static Main getInstance(){ return i; } } package pl.auroracase.mc; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import pl.auroracase.mc.ChatUtil; import pl.auroracase.mc.ItemBuilder; public class CaseCommands implements CommandExecutor{ public boolean onCommand(CommandSender sender, Command c, String s, String[] args ){ if(!sender.hasPermission("core.casegive")){ ChatUtil.sendM(sender, "&6» &4Blad: &cBrak dostepu do tej komendy! (core.casegive)"); return false; } if(args.length < 2){ ChatUtil.sendM(sender, "&6» &cPoprawne uzycie: /casegive <gracz/all> <nick/ilosc> <ilosc/puste>"); return false; } if(args[0].equalsIgnoreCase("all")){ int i = Integer.parseInt(args[1]); if(i <= 0){ ChatUtil.sendM(sender, "&6» &cNie mozna dac 0 skrzynek. Gracze byliby smutni :("); return false; } ItemStack item = new ItemBuilder(Material.CHEST, i).setName(ChatUtil.Color("&6» &9AuroraCase")).toItemStack(); for(Player p : Bukkit.getOnlinePlayers()){ p.getInventory().addItem(item); } ChatUtil.sendB("&6» &cAdministrator &7"+sender.getName()+" rozdal AuroraCase x"+i); return false; } if(args[0].equalsIgnoreCase("gracz")) { @SuppressWarnings("deprecation") Player p = Bukkit.getPlayer(args [1]); if(p != null){ int i = 1; if(args.length == 3){ i = Integer.parseInt(args[2]); } if(i <= 0){ ChatUtil.sendM(sender, "&6» &cNie mozna dac 0 skrzynek. Gracze byliby smutni :("); return false; } ItemStack item = new ItemBuilder(Material.CHEST, i).setName(ChatUtil.Color("&6» &9AuroraCase")).toItemStack(); p.getInventory().addItem(item); ChatUtil.sendM(p, "&6» &cAdministrator &7"+sender.getName()+" dal ci AuroraCase x"+i); ChatUtil.sendM(sender, "&6» &7Dales graczowi &7"+p.getName()+" &6AuroraCase x"+i); } else { ChatUtil.sendM(sender, "&6» &cGracz jest offline."); return false; } } else { ChatUtil.sendM(sender, "&6» &cPoprawne uzycie: /casegive <gracz/all> <nick/ilosc> <ilosc/puste>"); return false; } return false; } } package pl.auroracase.mc; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import pl.auroracase.mc.ChatUtil; import pl.auroracase.mc.ItemBuilder; public class BlockPlaceListener implements Listener{ @EventHandler(priority=EventPriority.MONITOR) public void onPlace(BlockPlaceEvent e){ Player p = e.getPlayer(); Block b = e.getBlock(); if(e.isCancelled()){ return; } if(b.getType() == Material.CHEST){ ItemMeta im = p.getItemInHand().getItemMeta(); if(im.getDisplayName() != null){ if(im.getDisplayName().toLowerCase().equalsIgnoreCase(ChatUtil.Color("&6» &9AuroraCase"))){ b.setType(Material.AIR); ChatUtil.sendB(""); ChatUtil.sendB("&6» &7Gracz &9"+p.getName()+"&7otworzyl &9AuroraCase."); ChatUtil.sendB("&6» &9Wylosowal:"); if(Math.random() * 5 <= 1){ ItemStack item1 = new ItemBuilder(Material.DIAMOND_SWORD).addEnchant(Enchantment.DAMAGE_ALL, 6).addEnchant(Enchantment.FIRE_ASPECT, 2).addEnchant(Enchantment.DURABILITY, 3).addLoreLine("&6» &9Wlasciciel: &c"+p.getName()+"").toItemStack(); b.getWorld().dropItemNaturally(b.getLocation(), item1); ChatUtil.sendB("&c» &9Miecz 6/2/3"); } if(Math.random() * 5 <= 1){ ItemStack item1 = new ItemBuilder(Material.DIAMOND_PICKAXE).addEnchant(Enchantment.DIG_SPEED, 6).addEnchant(Enchantment.DURABILITY, 3).addEnchant(Enchantment.LUCK, 3).addLoreLine("&6» &9Wlasciciel: &c"+p.getName()+"").toItemStack(); b.getWorld().dropItemNaturally(b.getLocation(), item1); ChatUtil.sendB("&c» &9Kilof 6/3/3"); } if(Math.random() * 5 <= 1){ ItemStack item1 = new ItemBuilder(Material.DIAMOND_HELMET).addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 6).addEnchant(Enchantment.DURABILITY, 3).addLoreLine("&6» &9Wlasciciel: &c"+p.getName()+"").toItemStack(); b.getWorld().dropItemNaturally(b.getLocation(), item1); ChatUtil.sendB("&c» &9Helm 6/3"); } if(Math.random() * 5 <= 1){ ItemStack item1 = new ItemBuilder(Material.DIAMOND_CHESTPLATE).addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 6).addEnchant(Enchantment.DURABILITY, 3).addLoreLine("&6» &9Wlasciciel: &c"+p.getName()+"").toItemStack(); b.getWorld().dropItemNaturally(b.getLocation(), item1); ChatUtil.sendB("&c» &9Klata 6/3"); } if(Math.random() * 5 <= 1){ ItemStack item1 = new ItemBuilder(Material.DIAMOND_LEGGINGS).addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 6).addEnchant(Enchantment.DURABILITY, 3).addLoreLine("&6» &9Wlasciciel: &c"+p.getName()+"").toItemStack(); b.getWorld().dropItemNaturally(b.getLocation(), item1); ChatUtil.sendB("&c» &9Spodnie 6/3"); } if(Math.random() * 5 <= 1){ ItemStack item1 = new ItemBuilder(Material.DIAMOND_BOOTS).addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 6).addEnchant(Enchantment.DURABILITY, 3).addLoreLine("&6» &9Wlasciciel: &c"+p.getName()+"").toItemStack(); b.getWorld().dropItemNaturally(b.getLocation(), item1); ChatUtil.sendB("&c» &9Buty 6/3"); } } } } } } Odnośnik do komentarza https://skript.pl/temat/27274-reload-pluginu/ Udostępnij na innych stronach Więcej opcji udostępniania...
0 TheMolkaPL 345 Opublikowano 16 maja 2018 Udostępnij Opublikowano 16 maja 2018 Class loader ma taki problem, że GC Javy nie widzi braku referencji do statycznej zmiennej. Prowadzi to do tego, że po wykonaniu reload, a przecież pluginy ładują się przez Bukkitowski class loader, statyczne zmienne nie są czyszczone co ostatecznie w większości przypadków prowadzi do memory leaków. Po drugie co znaczy, że nie możesz zrobić reloadu - występują jakieś błędy? "Core" to nie jest dobra nazwa pluginu, jest zbyt generalna, bardzo łatwo o duplikat takiej nazwy... a sama nazwa też nic nie mówi co ten plugin robi. Kolorowanie powinno się odbywać przez ChatColor, a najlepiej całkowicie wiadomości powinny zostać wysyłane poprzez komponenty chatu. Jako separatora wyboru używa się znaku |, nie /. Czyli masz przykładowo <value1|value2>. Parsujesz string do integera, ale nie wyłapujesz NumberFormatException, który to zostaje wyrzucony gdy nie uda się takiego stringu przekonwertować. Pomyśl o tym - w innej sytuacji nastąpi wyrzucenie tego wyjątku dalej do Bukkita i się wysypie. AuroraCase jest tworzone wielokrotnie bez żadnej różnicy przy wykonywaniu komendy. Takie rzeczy jest sobie fajnie zapisywać np w stałych, a potem gdy chcemy użyć to wystarczy sobie go sklonować. Twój użytek komendy to nie /casegive <gracz/all> <nick/ilosc> <ilosc/puste>, bo jest nieczytelne i błędne (bo wynika z tego, że wybór można mieszać, a nie można); lecz /casegive <gracz <nick> <ilosc>|all <ilosc>>. Na twoim miejscu zamiast gracz spodziewałbym się już nicku gracza - po co tak to rozpisywać? Nie musisz robić sprawdzania isCancelled(), bo Bukkit ma funkcję ignoreCancelled = true w adnotacji, co z resztą powoduje, że ten listener się przy anulowaniu event się po prostu nie wykona. W przyszłości (albo już teraz przez jakiś plugin) getItemInHand() może być nullem; upewniaj się, że nim nie jest, bo inaczej się wysypie. im.getDisplayName() != null - do tego służy metoda hasDisplayName() w ItemMeta. b.setType(Material.AIR); - zmieniasz blok, czyli w jakiś sposób stan event, co na priorytecie MONITOR jest niedozwolone. No i normalnie te szanse napisz yooniks i Toranktto 1 1 Odnośnik do komentarza https://skript.pl/temat/27274-reload-pluginu/#findComment-180060 Udostępnij na innych stronach Więcej opcji udostępniania...
Pytanie
Mati17102 56
Cześć, dzisiaj potrzebuję pomocy, ponieważ próbuje zrobić reload pluginu, lecz nie mogę zrobić. Pomoże ktoś?
Kody pluginu:
Odnośnik do komentarza
https://skript.pl/temat/27274-reload-pluginu/Udostępnij na innych stronach
1 odpowiedź na to pytanie
Rekomendowane odpowiedzi