Помогите Проверка на наличие предмета

  • Автор темы Автор темы BBooGG
  • Дата начала Дата начала

BBooGG

Активный участник
Пользователь
Баллы
61
Имя в Minecraft
BBooGG
Как проверить есть ли у игрока кастомный предмет ( назнавие: java, lore: java, енчант: бесконечность) @HunterGaming
 
Как проверить есть ли у игрока кастомный предмет ( назнавие: java, lore: java, енчант: бесконечность) @HunterGaming
Либо проверять через таймер, либо через какой-нибудь подходящий евент, допустим это будет PlayerInteractEvent

@EventHandler
public void onPlayerInteract(PlayerInteractEvent e) {
Player p = e.getPlayer();
ItemStack item = e.getItem();

if (item.getItemMeta() == null || item.getItemMeta().getDisplayName() == null || item.getItemMeta().getLore() == null) {
return;
}

String name = item.getItemMeta().getDisplayName();
List<String> lores = item.getItemMeta().getLore();
Set<Enchantment> enchant = item.getEnchantments().keySet(); //<-- На счет этого не уверен, с энчантами не работал :3
}
 
Либо проверять через таймер, либо через какой-нибудь подходящий евент, допустим это будет PlayerInteractEvent

@EventHandler
public void onPlayerInteract(PlayerInteractEvent e) {
Player p = e.getPlayer();
ItemStack item = e.getItem();

if (item.getItemMeta() == null || item.getItemMeta().getDisplayName() == null || item.getItemMeta().getLore() == null) {
return;
}

String name = item.getItemMeta().getDisplayName();
List<String> lores = item.getItemMeta().getLore();
Set<Enchantment> enchant = item.getEnchantments().keySet(); //<-- На счет этого не уверен, с энчантами не работал :3
}
Мне нужно когда я встаю на блок была проверка на айтем, если он есть , то не выдавало айтем.(проверка что я встал на блок есть)
 
Мне нужно когда я встаю на блок была проверка на айтем, если он есть , то не выдавало айтем.(проверка что я встал на блок есть)
Проверку на блок нужно делать тогда в евенте PlayerMoveEvent
 
public static void checkItem(Player p) {
p.̶g̶e̶t̶I̶t̶e̶m̶I̶n̶H̶a̶n̶d̶();
//The method getItemInHand() from the type HumanEntity is deprecated
Метод в новых версиях уберут/заменят.

Поставь @SuppressWarnings ("deprecation")
 
Метод в новых версиях уберут/заменят.

Поставь @SuppressWarnings ("deprecation")
@EventHandler
public void onPlayerMoveEvent(PlayerMoveEvent e) {

Player p = e.getPlayer();
int X1 = LoaderJob.plugin.getConfig().getInt("pos1.x");
int Y1 = LoaderJob.plugin.getConfig().getInt("pos1.y");
int Z1 = LoaderJob.plugin.getConfig().getInt("pos1.z");

int X2 = LoaderJob.plugin.getConfig().getInt("pos2.x");
int Y2 = LoaderJob.plugin.getConfig().getInt("pos2.y");
int Z2 = LoaderJob.plugin.getConfig().getInt("pos2.z");

if(p.getLocation().getBlockX() == X1 && p.getLocation().getBlockY() == Y1 && p.getLocation().getBlockZ() == Z1){
p.sendMessage("1");
Item.checkItem(p);
}
}
//////////////////////////////////////////////////////////////////

@SuppressWarnings ("deprecation")
public static void checkItem(Player p) {

ItemStack cargo = p.getItemInHand();

if (!cargo.getItemMeta().getDisplayName().equals("Cargo")) {
Item.giveItem(p);
}return;
}


public static void giveItem(Player p) {
ItemStack Item = new ItemStack(Material.BRICK);
ItemMeta meta = Item.getItemMeta();
meta.setDisplayName("Cargo");
List<String> lore = new ArrayList<String>();
lore.add("Cargo");
meta.setLore(lore);
Item.setItemMeta(meta);

p.getInventory().addItem(Item);

}
//////////////////////////////////////////////////////////////////


[21:58:52] [Server thread/ERROR]: Could not pass event PlayerMoveEvent to LoaderJob v1.0
org.bukkit.event.EventException: null
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:499) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:484) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:647) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
at net.minecraft.server.v1_12_R1.PacketPlayInFlying.a(SourceFile:126) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
at net.minecraft.server.v1_12_R1.PacketPlayInFlying$PacketPlayInPosition.a(SourceFile:57) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_131]
at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_131]
at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:747) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:405) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
Caused by: java.lang.NullPointerException
at bboogg.main.Item.checkItem(Item.java:17) ~[?:?]
at bboogg.main.Handler.onPlayerMoveEvent(Handler.java:24) ~[?:?]
at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source) ~[?:?]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_131]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
... 15 more
 
добавь проверку еще в (cargo.getItemMeta() == null !cargo.getItemMeta().getDisplayName().equals("Cargo")) {
 
добавь проверку еще в (cargo.getItemMeta() == null !cargo.getItemMeta().getDisplayName().equals("Cargo")) {
если юзать так cargo.getItemMeta() == null || !cargo.getItemMeta().getDisplayName().equals("Cargo"), тогда если в 1 слоте есть предмет и слот активен, предмет не выдается, если 1 слот пустой, а 2 слот активен, тогда выпадает не 1 блок а много.
P.S. как я понял я чекаю активный слот, мне нужно чекать весь инвентарь или хотя бы хотбар
 
Проверяй с помощью цикла for предметы, в чём трабл, то? Сначала хотбар, потом остальные...
 
Всего лишь пример. Чекай где нужно. player.getInventory().contains(customstack), вроде по всему инвентарю смотрит.
 
Последнее редактирование:
Назад
Верх