Skocz do zawartości
  • 0

Reload pluginu


Mati17102

Pytanie

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

1 odpowiedź na to pytanie

Rekomendowane odpowiedzi

  • 0

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 :D

Odnośnik do komentarza
https://skript.pl/temat/27274-reload-pluginu/#findComment-180060
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...