Skocz do zawartości
  • 0

Zbugowane Inventory ?


Arczi98

Pytanie

Witam.

Bawię się w tworzenie nowego inventory. Wszystko niby śmiga, ale pojawia się dziwny bug powodujący że inventory gracza działa tak samo jak to które stworzę.

Tj. jeśli np na slot 0 w nowym inventory ustawię leczenie gracza to to samo polecenie będzie wykonywane po kliknięci w item w slocie 0 w nowym inventory jak i w inventory gracza.

Da się to jakoś naprawić?

Mój kod:

Komenda otwierająca nowe Inventory:

Spoiler

package com.gmail.arczigames8991.VIPEffects.Commands;

import java.util.Arrays;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
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.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public class VipCommand implements CommandExecutor {
	
	@Override
	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
		if (args.length == 0 ) {
			if (sender.hasPermission("vip.cmd")) {
				if (sender instanceof Player) {
				ItemStack heal = new ItemStack(Material.POTION);
				ItemMeta meta = heal.getItemMeta();
				meta.setDisplayName(ChatColor.GOLD + "Leczenie");
				meta.setLore(Arrays.asList(ChatColor.RED + "Wylecz sie!"));
				heal.setItemMeta(meta);
				
				ItemStack feed = new ItemStack(Material.APPLE);
				ItemMeta feedmeta = feed.getItemMeta();
				feedmeta.setDisplayName(ChatColor.GOLD + "Jedzonko");
				feed.setItemMeta(feedmeta);
			    
				ItemStack itm = new ItemStack(Material.DIAMOND_SWORD);
				ItemMeta itmmeta = itm.getItemMeta();
				itmmeta.setDisplayName(ChatColor.GOLD + "Przedmioty");
				itm.setItemMeta(itmmeta);
				
				ItemStack vip = new ItemStack(Material.ENCHANTED_BOOK);
				ItemMeta vipmeta = vip.getItemMeta();
				vipmeta.setDisplayName(ChatColor.GOLD + "Strefa VIP");
				vip.setItemMeta(vipmeta);
				
				ItemStack end = new ItemStack(Material.ENDER_CHEST);
				ItemMeta endmeta = end.getItemMeta();
				endmeta.setDisplayName(ChatColor.GOLD + "Enderchest");
				end.setItemMeta(endmeta);
				
				String n = sender.getName();
				Player p = Bukkit.getPlayer(n);
		        Inventory inv = Bukkit.createInventory(null, 9, ChatColor.GOLD + "Ekwipunek VIP");
		        inv.setItem(2, heal);
		    	inv.setItem(3, feed);
		    	inv.setItem(4, itm);
		    	inv.setItem(5, vip);
		    	inv.setItem(6, end);
		    	p.openInventory(inv);
				}
				else if (!(sender instanceof Player)) {
					sender.sendMessage(ChatColor.RED + "Komenda tylko dla graczy.");
				}
			}	
			else if (!(sender.hasPermission("vip.cmd"))) {
				sender.sendMessage(ChatColor.RED + "Brak uprawnien do wykonywania tej komendy.");
			}
		}
		else if (!(args.length == 0)) {
			sender.sendMessage(ChatColor.RED + "Uzycie: /vip.");
		}
		return false;
	}
}

 

Samo Inventory:

Spoiler

package com.gmail.arczigames8991.VIPEffects.Listeners;

import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import com.gmail.arczigames8991.VIPEffects.Main.Main;



public class InventoryClick implements Listener {
	
	@EventHandler
	public void onClick(InventoryClickEvent e) {

			Player p = (Player) e.getWhoClicked();
			if(e.getInventory().getTitle().equals(ChatColor.GOLD + "Ekwipunek VIP")){
			
			if(e.getSlot() == 2) {
				e.setCancelled(true);
				p.setHealth(20);
				p.sendMessage(ChatColor.RED + "Zostales uleczony.");
			}
			
			else if(e.getSlot() == 3) {
				e.setCancelled(true);
				p.setFoodLevel(20);
				p.sendMessage(ChatColor.RED + "Twoj glod zostal zaspokojony.");
			}
			
			else if(e.getSlot() == 4) {
				String where = "nick = '" + p.getName() + "'";
				String nick = p.getName();
				String table = "time";	
				if (Main.mysql.checkRecord(table, "nick = '" + p.getName() + "'")) {
					double gtim = (double) Main.mysql .getRecord(table, "tim", where);
					int days = 604800;
					long tim = System.currentTimeMillis() + 1000L * days;
					long time3 = System.currentTimeMillis();
					if (gtim == time3 || gtim < time3 ) {
					Main.mysql.updateRecord(table, "tim", tim, where);
					
					e.setCancelled(true);
					
					 
					ItemStack chelm = new ItemStack(Material.IRON_HELMET);
					ItemMeta chelmmeta = chelm.getItemMeta();
					chelmmeta.setDisplayName(ChatColor.GOLD + "Chelm VIP");
					chelmmeta.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 4, true);
					chelm.setItemMeta(chelmmeta);
					
					ItemStack tn = new ItemStack(Material.IRON_CHESTPLATE);
					ItemMeta tnmeta = tn.getItemMeta();
					tnmeta.setDisplayName(ChatColor.GOLD + "Klata VIP");
					tnmeta.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 4, true);
					tn.setItemMeta(tnmeta);
					
					ItemStack lg = new ItemStack(Material.IRON_LEGGINGS);
					ItemMeta lgmeta = lg.getItemMeta();
					lgmeta.setDisplayName(ChatColor.GOLD + "Gacie VIP");
					lgmeta.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 4, true);
					lg.setItemMeta(lgmeta);
					
					ItemStack bt = new ItemStack(Material.IRON_BOOTS);
					ItemMeta btmeta = bt.getItemMeta();
					btmeta.setDisplayName(ChatColor.GOLD + "Lakierki VIP");
					btmeta.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 4, true);
					bt.setItemMeta(btmeta);
					
					ItemStack sw = new ItemStack(Material.DIAMOND_SWORD);
					ItemMeta swmeta = sw.getItemMeta();
					swmeta.setDisplayName(ChatColor.GOLD + "Szabla VIP");
					swmeta.addEnchant(Enchantment.DAMAGE_ALL, 3, true);
					sw.setItemMeta(swmeta);
					
					ItemStack ga = new ItemStack(Material.GOLDEN_APPLE);
					ItemMeta gameta = ga.getItemMeta();
					gameta.setDisplayName(ChatColor.GOLD + "Zloty Jabol");
				    ga.setItemMeta(gameta);
					
				    p.getInventory().addItem(new ItemStack(chelm));
				    p.getInventory().addItem(new ItemStack(tn));
				    p.getInventory().addItem(new ItemStack(lg));
				    p.getInventory().addItem(new ItemStack(bt));
				    p.getInventory().addItem(new ItemStack(ga));
				    p.getInventory().addItem(new ItemStack(sw));
				    p.updateInventory();
				    
					p.sendMessage(ChatColor.RED + "Otrzymales itemy VIP.");
					}
					else if (gtim > time3) {
						e.setCancelled(true);
						p.sendMessage(ChatColor.RED + "Musisz odczekac 7 dni.");
					}
				}
				else {
					int days = 604800;
					long r2 = System.currentTimeMillis() + 1000L * days;
					Main.mysql.insertRecord(table, "nick", "tim", nick, r2 );
					e.setCancelled(true);
					
					 
					ItemStack chelm = new ItemStack(Material.IRON_HELMET);
					ItemMeta chelmmeta = chelm.getItemMeta();
					chelmmeta.setDisplayName(ChatColor.GOLD + "Chelm VIP");
					chelmmeta.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 4, true);
					chelm.setItemMeta(chelmmeta);
					
					ItemStack tn = new ItemStack(Material.IRON_CHESTPLATE);
					ItemMeta tnmeta = tn.getItemMeta();
					tnmeta.setDisplayName(ChatColor.GOLD + "Klata VIP");
					tnmeta.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 4, true);
					tn.setItemMeta(tnmeta);
					
					ItemStack lg = new ItemStack(Material.IRON_LEGGINGS);
					ItemMeta lgmeta = lg.getItemMeta();
					lgmeta.setDisplayName(ChatColor.GOLD + "Gacie VIP");
					lgmeta.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 4, true);
					lg.setItemMeta(lgmeta);
					
					ItemStack bt = new ItemStack(Material.IRON_BOOTS);
					ItemMeta btmeta = bt.getItemMeta();
					btmeta.setDisplayName(ChatColor.GOLD + "Lakierki VIP");
					btmeta.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 4, true);
					bt.setItemMeta(btmeta);
					
					ItemStack sw = new ItemStack(Material.DIAMOND_SWORD);
					ItemMeta swmeta = sw.getItemMeta();
					swmeta.setDisplayName(ChatColor.GOLD + "Szabla VIP");
					swmeta.addEnchant(Enchantment.DAMAGE_ALL, 3, true);
					sw.setItemMeta(swmeta);
					
					ItemStack ga = new ItemStack(Material.GOLDEN_APPLE);
					ItemMeta gameta = ga.getItemMeta();
					gameta.setDisplayName(ChatColor.GOLD + "Zloty Jabol");
				    ga.setItemMeta(gameta);
					
				    p.getInventory().addItem(new ItemStack(chelm));
				    p.getInventory().addItem(new ItemStack(tn));
				    p.getInventory().addItem(new ItemStack(lg));
				    p.getInventory().addItem(new ItemStack(bt));
				    p.getInventory().addItem(new ItemStack(ga));
				    p.getInventory().addItem(new ItemStack(sw));
				    p.updateInventory();
				    
					p.sendMessage(ChatColor.RED + "Otrzymales itemy VIP.");
				}
				
			}
			
			else if (e.getSlot() == 5) {
				 int x = Main.config.getInt("warp.yml", "x");
				 int y = Main.config.getInt("warp.yml", "y");
				 int z = Main.config.getInt("warp.yml", "z");
				 p.teleport(new Location(p.getWorld(), x, y, z));
				 p.sendMessage(ChatColor.RED + "Zostales przeniesiony do pokoju VIP.");
			}
			else if (e.getSlot() == 6) {
				Inventory inv = p.getEnderChest();
				p.openInventory(inv);
				p.sendMessage(ChatColor.RED + "Otworzyles swoj " + ChatColor.BLUE + "EnderChest" + ChatColor.RED + "!");
			}
			}
	}
	}
	
	
	

 

 

Odnośnik do komentarza
https://skript.pl/temat/22220-zbugowane-inventory/
Udostępnij na innych stronach

4 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
27 minut temu, GotoFinal napisał:

bo nie sprawdzasz w jakie EQ klika gracz, mając otworzone GUI masz jednocześnie swoje EQ i te GUI, więc są dwa sloty o numerze 0.

if(e.getInventory().getTitle().equals(ChatColor.GOLD + "Ekwipunek VIP")){

Sprawdzam :)

Edytowane przez Arczi98
Odnośnik do komentarza
https://skript.pl/temat/22220-zbugowane-inventory/#findComment-151460
Udostępnij na innych stronach

  • 0
24 minuty temu, Arczi98 napisał:

if(e.getInventory().getTitle().equals(ChatColor.GOLD + "Ekwipunek VIP")){

Sprawdzam :)

nie sprawdzasz.

Tutaj sprawdzasz czy otworzone EQ to te prawidłowe, ale nie sprawdzasz czy to te kliknięte...
Jest osobna metoda .getClickedInventory 

Odnośnik do komentarza
https://skript.pl/temat/22220-zbugowane-inventory/#findComment-151470
Udostępnij na innych stronach

  • 0
22 godziny temu, GotoFinal napisał:

nie sprawdzasz.

Tutaj sprawdzasz czy otworzone EQ to te prawidłowe, ale nie sprawdzasz czy to te kliknięte...
Jest osobna metoda .getClickedInventory 

Oooh.. Dziękuję :)

W takim razie temat do zamknięcia :)

Odnośnik do komentarza
https://skript.pl/temat/22220-zbugowane-inventory/#findComment-151599
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ę...