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;
}
}
Pytanie
Arczi98 1
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:
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:
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