Skocz do zawartości
  • 0

Proszę o pomoc w tworzeniu komendy


Pytanie

Witam, gdy wpisz komende drop to dziala, i jezeli klikne na ten przedmiot gdzie jest ta komenda(bedzie widac w kodzie) otwiera sie ale nic sie nie canceluje :( Jak co to tylko wycinek z mojego kodu.

Spoiler

	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String l, String[] args) {
		Player p = (Player) sender;
		if(cmd.getName().equalsIgnoreCase("drop")){
			Inventory inv = Bukkit.getServer().createInventory(null,9,"§6§lDrop serwerowy");
			inv.setItem(0, stone);
			inv.setItem(1, blank);
			inv.setItem(2, blank);
			inv.setItem(3, stonecase);
			inv.setItem(4, blank);
			inv.setItem(5, premiumcase);
			inv.setItem(6, blank);
			inv.setItem(7, blank);
			inv.setItem(8, cobblex);
			p.openInventory(inv);
		}
		if(cmd.getName().equalsIgnoreCase("stone0010")){
			Inventory inv2 = Bukkit.getServer().createInventory(null,9,"§5§lDrop ze stone");
			inv2.setItem(0, stonedrop);
			inv2.setItem(1, blank);
			inv2.setItem(2, blank);
			inv2.setItem(3, blank);
			inv2.setItem(4, blank);
			inv2.setItem(5, blank);
			inv2.setItem(6, blank);
			inv2.setItem(7, blank);
			inv2.setItem(8, redwool);
			p.openInventory(inv2);
		}	
		return false;

	}
	@EventHandler
	public void onInvClick(InventoryClickEvent e){
		
		Player p = (Player) e.getWhoClicked();
		
		if(e.getInventory().getName() == "§6§lDrop serwerowy"){
			if(e.getCurrentItem().getItemMeta().getDisplayName().contains("§7§lDrop ze stone")){
				p.performCommand("stone0010");
				e.setCancelled(true);
			}
			if(e.getCurrentItem().getItemMeta().getDisplayName().contains(" ")){
				e.setCancelled(true);
			}
			if(e.getCurrentItem().getItemMeta().getDisplayName().contains("§7§lDrop ze StoneCase")){
				e.setCancelled(true);
			
			}
			if(e.getCurrentItem().getItemMeta().getDisplayName().contains("§7§lDrop z §6§lPREMIUM§b§lCASE")){
				e.setCancelled(true);
			}
			if(e.getCurrentItem().getItemMeta().getDisplayName().contains("§7§lDrop z cobblex")){
				e.setCancelled(true);
			}
		if(e.getInventory().getName() == "§5§lDrop ze stone'a"){
			if(e.getCurrentItem().getItemMeta().getDisplayName().contains("§7§lStoneCase")){
				e.setCancelled(true);
			}
			if(e.getCurrentItem().getItemMeta().getDisplayName().contains("§4§l§oPOWROT")){
				p.performCommand("drop");
				e.setCancelled(true);
			}	
			if(e.getCurrentItem().getItemMeta().getDisplayName().contains(" ")){
				e.setCancelled(true);
				}
			}
		}
		return;
	
	}
	ItemStack stone = new ItemStack(Material.STONE, 1);{
		ItemMeta stoneim = stone.getItemMeta();
		ArrayList<String> stonelore = new ArrayList<String>();
		stonelore.add("§8» §7Kliknij aby zobaczyc drop ze stone");
		stoneim.setDisplayName("§7§lDrop ze stone");
		stoneim.setLore(stonelore);
		stone.setItemMeta(stoneim);
	}
	ItemStack redwool = new ItemStack(Material.WOOL, 1 ,(short) 14);{
		ItemMeta redwoolim = redwool.getItemMeta();
		ArrayList<String> redwoollore = new ArrayList<String>();
		redwoollore.add("§8» §7Powrot do menu glownego");
		redwoolim.setDisplayName("§4§l§oPOWROT");
		redwoolim.setLore(redwoollore);
		redwool.setItemMeta(redwoolim);
	}
	ItemStack stonedrop = new ItemStack(Material.CHEST, 1);{
		ItemMeta stonedropim = stonedrop.getItemMeta();
		ArrayList<String> stonedroplore = new ArrayList<String>();
		stonedroplore.add("§9» §2Szansa: §a1% §8(§eVIP §6+0.5%§8)");
		stonedroplore.add("§9» §2Wykopiesz go: §aKazdym kilofem");
		stonedroplore.add("§9» §2Dropi z: §astone");
		stonedroplore.add("   §a§l§oDROPU NIE DA SIE WYLACZYC!");
		stonedropim.setDisplayName("§7§lStoneCase");
		stonedropim.setLore(stonedroplore);
		stonedrop.setItemMeta(stonedropim);
	}	
	ItemStack blank = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 15);{
		ItemMeta blankim = blank.getItemMeta();
		blankim.setDisplayName(" ");
		blank.setItemMeta(blankim);
		
	}
	ItemStack stonecase = new ItemStack(Material.CHEST, 1);{
		ItemMeta stonecaseim = stonecase.getItemMeta();
		ArrayList<String> stonecaselore = new ArrayList<String>();
		stonecaseim.setDisplayName("§7§lDrop ze StoneCase");
		stonecaseim.setLore(stonecaselore);
		stonecaselore.add("§8» §7Kliknij aby zobaczyc drop ze StoneCase");
		stonecase.setItemMeta(stonecaseim);
		
	}

	ItemStack premiumcase = new ItemStack(Material.CHEST, 1);{
		ItemMeta premiumcaseim = premiumcase.getItemMeta();
		ArrayList<String> premiumlore = new ArrayList<String>();
		premiumlore.add(" §8» §7Kliknij aby zobaczyc drop z PremiumCase'a");
		premiumcaseim.setLore(premiumlore);
		premiumcaseim.setDisplayName("§7§lDrop z §6§lPREMIUM§b§lCASE");
		premiumcase.setItemMeta(premiumcaseim);
	}
	ItemStack cobblex = new ItemStack(Material.MOSSY_COBBLESTONE, 1);{
		ItemMeta cobblexim = cobblex.getItemMeta();
		ArrayList<String> cobblexlore = new ArrayList<String>();
		cobblexlore.add(" §8» §7Kliknij aby zobaczyc drop z cobblex");
		cobblexim.setLore(cobblexlore);
		cobblexim.setDisplayName("§7§lDrop z cobblex");
		cobblex.setItemMeta(cobblexim);
	}

}

 

 

Edytowane przez Ixidi
Odnośnik do komentarza
https://skript.pl/temat/24991-prosz%C4%99-o-pomoc-w-tworzeniu-komendy/
Udostępnij na innych stronach

6 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Stringów nie sprawdzamy poprzez '==' tylko poprzez equals(), sprawdzaj czy e.getInventory() wgl istnieje (!=null), czy gracz kliknal w przedmiot a puste okno lub poza inventory, i czy ten przedmiot ma ItemMete z displayName, do tego zamiast Player#performCommand() uzywaj Server#dispatchCommand(), lub wgl calkiem rob to w metodach, i uzywaj cos typu 'powrot();'.

public class DropBasic implements CommandExecutor, Listener {

	private JavaPlugin plugin;
	private final Inventory dropInventory;

	public DropBasic(JavaPlugin plugin){
		this.plugin=plugin;
		this.plugin.getServer().getPluginManager().registerEvents(this,this.plugin); //chyba tak sie to rejestrowalo, pisze to w 'code' tutaj, a tak to mi intellij podpowiada :>
		this.dropInventory = plugin.getServer().createInventory(null,9,"Drop serwerowy");
		this.dropInventory.setItem(0, stone());
	}

	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String l, String[] args) {
		Player p = (Player) sender;
		if(cmd.getName().equalsIgnoreCase("drop")){
			p.openInventory(this.dropInventory);
			return true;
		}
		return false;

	}
	@EventHandler
	public void onInvClick(InventoryClickEvent e) {
		final Player p = (Player) e.getWhoClicked();
		if (e.getInventory == null || e.getClickedItem() == null) return;
		if (e.getInventory.getTitle().toLowerCase().contains("drop serwerowy")) {
			final ItemStack is = e.getClickedItem();
			if (is.getItemMeta() == null || is.getItemMeta().getDisplayName() == null) return;
			if (is.getItemMeta().getDisplayName().contains("stonehehe") {
				goToMenu1(p);
			}
		}
		return;
	
	}
	private ItemStack stone() {
        final ItemStack stone = new ItemStack(Material.STONE, 1)
		final ItemMeta stoneim = stone.getItemMeta();
		List<String> stonelore = new ArrayList<>();
		stonelore.add("§8» §7Kliknij aby zobaczyc drop ze stone");
		stoneim.setDisplayName("stonehehe");
		stoneim.setLore(stonelore);
		stone.setItemMeta(stoneim);
        return stone;
	}
          
    private void goToMenu1(Player p) { //ja zrobilbym enumy (MenuType) i tam trzymal AchievementsMenu, DropMenu itd. i po prostu przy metodzie z konstruktora bral enuma, ale tak bedzie ci latwiej <-
    	p.closeInventory();
      	//otwierasz nowe inventory z nowymi itemami itd..
    }
}

Inventory twórz jeden raz i po prostu wkladaj do niego itemy od razu, a nie caly czas przy komendzie tworzysz gui i wkladasz od nowa itemy, przeciez nie trzymasz tam niczego od gracza typu "twoj level", wiec na razie mozesz robic tak jak ci dalem, czyli tworzysz tylko raz inventory, przy tworzeniu instancji klasy.

 

 

Pisane w 'code' od razu na forum, wiec moga byc jakies bledy.

Edytowane przez yooniks
Odnośnik do komentarza
https://skript.pl/temat/24991-prosz%C4%99-o-pomoc-w-tworzeniu-komendy/#findComment-166427
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ę...