KNOVME
Пользователь
- Сообщения
- 11
Я делаю меню, мне надо запретить переместить его в любые слоты другие слоты, он всегда должен стоять на 1 слоте (0), что я только не пробовал, но с помощью гарячих клавиш 1-9, я все равно могу его перемещать, уже не знаю что мне делать.
Java:
@EventHandler
public void onPlayerDropItem(PlayerDropItemEvent event) {
ItemStack itemDrop = event.getItemDrop().getItemStack();
if (isProtectedItem(itemDrop)) {
event.setCancelled(true);
}
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
Player player = (Player) event.getWhoClicked();
ItemStack currentItem = event.getCurrentItem();
if (isProtectedItem(currentItem)) {
if (event.getClick() == ClickType.NUMBER_KEY) {
int destinationSlot = event.getHotbarButton();
int sourceSlot = event.getSlot();
if (sourceSlot == 0 || destinationSlot == 0) {
event.setCancelled(true);
player.updateInventory();
player.closeInventory();
}
}
}
}
@EventHandler
public void onInventoryDrag(InventoryDragEvent event) {
for (ItemStack item : event.getNewItems().values()) {
if (isProtectedItem(item)) {
event.setCancelled(true);
break;
}
}
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
if (player.getWorld().getName().equals("world")) {
boolean hasModeSelector = false;
for (ItemStack item : player.getInventory()) {
if (item != null && item.getType() == Material.PLAYER_HEAD) {
ItemMeta meta = item.getItemMeta();
if (meta != null && meta.hasDisplayName() && meta.getDisplayName().equals("Выбрать режим")) {
hasModeSelector = true;
break;
}
}
}
if (!hasModeSelector) {
giveModeSelector(player);
}
}
}
private void giveModeSelector(Player player) {
ItemStack playerHead = new ItemStack(Material.PLAYER_HEAD);
SkullMeta skullMeta = (SkullMeta) playerHead.getItemMeta();
if (skullMeta != null) {
GameProfile profile = new GameProfile(UUID.randomUUID(), "");
profile.getProperties().put("textures", new Property("textures", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzY5MTk2YjMzMGM2Yjg5NjJmMjNhZDU2MjdmYjZlY2NlNDcyZWFmNWM5ZDQ0Zjc5MWY2NzA5YzdkMGY0ZGVjZSJ9fX0="));
try {
Field profileField = skullMeta.getClass().getDeclaredField("profile");
profileField.setAccessible(true);
profileField.set(skullMeta, profile);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
skullMeta.setDisplayName("Выбрать режим");
skullMeta.getCustomTagContainer().setCustomTag(new NamespacedKey(plugin, "no-drop"), ItemTagType.BYTE, (byte) 1);
playerHead.setItemMeta(skullMeta);
player.getInventory().setItem(0, playerHead);
}
}
private boolean isProtectedItem(ItemStack item) {
if (item != null && item.getType() == Material.PLAYER_HEAD) {
ItemMeta meta = item.getItemMeta();
return meta != null && meta.getCustomTagContainer().hasCustomTag(new NamespacedKey(plugin, "no-drop"), ItemTagType.BYTE);
}
return false;
}
}
Вам необходимо зарегистрироваться для просмотра изображений-вложений