Помогите Убрать открытие сундука.

  • Автор темы Автор темы Kloper
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Kloper

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
f3azzy
Привет, для сервера нужен плагин на кейсы, и ключи которые выпадают за копание той же земли.(не призон)

Сделал сам кейс, и ключи с дропом, но не знаю как сделать так чтобы сундук не открывался.

вот код кейсов

Код:
@SuppressWarnings("deprecation")
    @EventHandler
    public void DropedChest(PlayerInteractEvent e)
    {
        Player p = e.getPlayer();
        if(e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
        if(e.getPlayer().getInventory().getItemInMainHand().getType() != Material.MAGMA_CREAM) return;
            Block b = e.getClickedBlock();
            if(b.getType() == Material.TRAPPED_CHEST) {
                
                ItemStack item = p.getInventory().getItemInMainHand();
                if(!item.getItemMeta().hasDisplayName()) return;
                if(item.getItemMeta().getDisplayName().equals("§6§lКлюч Первого Уровня")) {
                    
                    ItemStack onedrop = new ItemStack(Material.DIRT);
                    ItemStack twodrop = new ItemStack(Material.DIAMOND);
                    ItemStack threedrop = new ItemStack(Material.APPLE);
                    ItemStack fourdrop = new ItemStack(Material.COAL);
                    ItemStack fivedrop = new ItemStack(Material.QUARTZ);
                    ItemStack sixdrop = new ItemStack(Material.LEATHER);
                    ItemStack sevendrop = new ItemStack(Material.ANVIL);
                    ItemStack eightdrop = new ItemStack(Material.PURPUR_BLOCK);
                    ItemStack ninedrop = new ItemStack(Material.DIAMOND);
                    ItemStack tendrop = new ItemStack(Material.IRON_CHESTPLATE);
                    
                    Inventory inv = p.getInventory();
                    
                    Random rd = new Random();
                    
                    int gavno_random_haha;
                    for(int counter = 1; counter<=1;counter++) {
                    gavno_random_haha = 1+rd.nextInt(10);
                        
                    if(gavno_random_haha == 1) {
                        inv.addItem(onedrop);
                        p.sendMessage("§8§l[§c§lRelease§3§lProject§8§l] §a§lВам выпала Земля!");
                    }
                        
                    if(gavno_random_haha == 2) {
                        inv.addItem(twodrop);
                        p.sendMessage("§8§l[§c§lRelease§3§lProject§8§l] §a§lВам выпал Алмаз!");
                    }
                    
                    if(gavno_random_haha == 3) {
                        inv.addItem(threedrop);
                        p.sendMessage("§8§l[§c§lRelease§3§lProject§8§l] §a§lВам выпало Яблоко!");
                    }
                    
                    if(gavno_random_haha == 4) {
                        inv.addItem(fourdrop);
                        p.sendMessage("§8§l[§c§lRelease§3§lProject§8§l] §a§lВам выпал Угль!");
                    }
                        
                    if(gavno_random_haha == 5) {
                        inv.addItem(fivedrop);
                        p.sendMessage("§8§l[§c§lRelease§3§lProject§8§l] §a§lВам выпало Кварц!");
                    }
                    
                    if(gavno_random_haha == 6) {
                        inv.addItem(sixdrop);
                        p.sendMessage("§8§l[§c§lRelease§3§lProject§8§l] §a§lВам выпала Кожа!");
                    }
                    
                    if(gavno_random_haha == 7) {
                        inv.addItem(sevendrop);
                        p.sendMessage("§8§l[§c§lRelease§3§lProject§8§l] §a§lВам выпала Наковальня!");
                    }
                        
                    if(gavno_random_haha == 8) {
                        inv.addItem(eightdrop);
                        p.sendMessage("§8§l[§c§lRelease§3§lProject§8§l] §a§lВам выпал Пурпурный Блок!");
                    }
                    
                    if(gavno_random_haha == 9) {
                        inv.addItem(ninedrop);
                        p.sendMessage("§8§l[§c§lRelease§3§lProject§8§l] §a§lВам выпал Алмаз!");
                    }
                    
                    if(gavno_random_haha == 10) {
                        inv.addItem(tendrop);
                        p.sendMessage("§8§l[§c§lRelease§3§lProject§8§l] §a§lВам выпал Железный Нагрудник!");
                    }
                    
                }
                
                    
                    
                }
            }
            
            if(e.getAction() != Action.RIGHT_CLICK_BLOCK) {
            if(p.getItemInHand().getType() != Material.MAGMA_CREAM) {
                e.setCancelled(true);
            }
            if(p.getItemInHand().getType() == Material.MAGMA_CREAM) {
                e.setCancelled(true);
            }
        
        
            }
    }
 
дак не получается, объясни подробнее
Ну в смысле - объясни? Ты сам же используешь это внизу.
Судя по стилю и кривым табам, начал программировать ты либо недавно, либо упоролся - рано взялся за разработку.
 
Это можно сделать с помощью Skript.

Код:
on rightclick on chest:
    if player's tool is coal:
        if name of player's tool is equal to "<magenta>Ключ":
            set event-block to air
            drop diamond at location of event-block
            stop
    cancel event
 
Не тестировал, но скорее всего, будет работать нормально. Разберись, что к чему.
Pair<First, Second> - это объект, содержащий два других объекта.
Импорт: com.sun.tools.javac.util.Pair
Вместо него можешь использовать что-то другое.
Или вовсе создать свой объект по типу CaseResult...

Вместо ItemStack в этой паре можно хранить Material, а стак создавать непосредственно при выдаче предмета. Но тогда не будет возможности удобно задавать какие-то уникальные характеристики этим предметам по типу имени/описания, урона/защиты, (если это оружие или броня) и всего прочего.

@Nonnull - аннотация, сообщающая о том, что объект заведомо не может быть null.
Импорт: javax.annotation.Nonnull
@Nullable - соответственно, объект может иметь значение null.
Импорт: javax.annotation.Nullable
Добавлено исключительно для наглядности.
PHP:
    @EventHandler
    private void on(PlayerInteractEvent event) {
        // Проверяем, что на блок нажали правой кнопкой мыши
        @Nonnull Action action = event.getAction();
        if (action != Action.RIGHT_CLICK_BLOCK) // Если это не правый клик по блоку
            return; // То далее метод не выполняем

        // Проверяем, что нажали на блок сундука-ловушки
        @Nullable Block clickedBlock = event.getClickedBlock();
        if (clickedBlock == null // Если нажатый блок отсутствует
                || clickedBlock.getType() != Material.TRAPPED_CHEST) //Или если материал блока не сундук-ловушка
            return; // То далее метод не выполняем

        // Проверяем, что в руке игрока ключ
        @Nonnull ItemStack handItem = event.getPlayer().getInventory().getItemInMainHand();
        if (handItem.getType() != Material.MAGMA_CREAM // Если это не магма-крем
                || !handItem.hasItemMeta() // Или если не имеет мета-данные
                || !handItem.getItemMeta().hasDisplayName() // Или если не имеет какого-либо названия
                || !handItem.getItemMeta().getDisplayName().equals("§6§lКлюч Первого Уровня")) // Или если не имеет название "Ключ"
            return; // То далее метод не выполняем

        // Все условия совпадают, запускаем работу "кейса"
 
        // Сразу отменяем дефолтное действие - открытие сундука, чтобы потом не забыть
        event.setCancelled(true);

        // Создаём список выпадающих предметов
        // Можно создать один раз при запуске сервера
        // Обрати внимание, что у тебя в списке два алмиза. Так и должно быть?
        List<Pair<ItemStack, String>> items = new ArrayList<>(Arrays.asList(
                new Pair<>(new ItemStack(Material.DIRT), "выпала Земля"),
                new Pair<>(new ItemStack(Material.DIAMOND), "выпал Алмаз"),
                new Pair<>(new ItemStack(Material.APPLE), "выпало Яблоко"),
                new Pair<>(new ItemStack(Material.COAL), "выпал Угль"),
                new Pair<>(new ItemStack(Material.QUARTZ), "выпало Кварц"),
                new Pair<>(new ItemStack(Material.LEATHER), "выпала Кожа"),
                new Pair<>(new ItemStack(Material.ANVIL), "выпала Наковальня"),
                new Pair<>(new ItemStack(Material.PURPUR_BLOCK), "выпал Пурпурный Блок"),
                new Pair<>(new ItemStack(Material.DIAMOND), "выпал Алмаз"),
                new Pair<>(new ItemStack(Material.IRON_CHESTPLATE), "выпал Железный Нагрудник")
        ));

        // Получаем произвольный результат из списка по индексу
        Pair<ItemStack, String> result = items.get(new Random().nextInt(items.size()));

        // Выдаём игроку предмет и выводим сообщение
        @Nonnull Player player = event.getPlayer();
        player.getInventory().addItem(result.fst);
        player.sendMessage("§8§l[§c§lRelease§3§lProject§8§l] §a§lВам " + result.snd + "!");
    }
 
Последнее редактирование:
Это можно сделать с помощью Skript.

Код:
on rightclick on chest:
    if player's tool is coal:
        if name of player's tool is equal to "<magenta>Ключ":
            set event-block to air
            drop diamond at location of event-block
            stop
    cancel event
Еще реакшн предложи, везде свой скрипт 🤓
 
Еще реакшн предложи, везде свой скрипт 🤓
ez)00))0
Код:
BLOCK_CLICK:
  case_click:
    block-type: CHEST
    click-type: RIGHT
    flags:
    - item=type:gold_nugget name:{&6&lКлюч Первого Уровня}
    actions:
    - item_remove=type:gold_nugget name:{&6&lКлюч Первого Уровня}
    - cancel_event=true
    - var_temp_set=id:rnd value:%random:dirt,diamond,coal%
    - execute=activator:case_result_%rnd%
EXEC:
  case_result_dirt:
    actions:
    - item_give=type:dirt lore:{&fСтрашный как моя жизнь}
    - message=&aВам выпал огроменный кусок земли!
  case_result_diamond:
    actions:
    - item_give=type:diamond
    - message=&aВам выпал олмас!
  case_result_coal:
    actions:
    - item_give=type:coal name:{Активированный уголь}
    - message=&aВам выпал чудотворный активированный уголь!
 
ez)00))0
Код:
BLOCK_CLICK:
  case_click:
    block-type: CHEST
    click-type: RIGHT
    flags:
    - item=type:gold_nugget name:{&6&lКлюч Первого Уровня}
    actions:
    - item_remove=type:gold_nugget name:{&6&lКлюч Первого Уровня}
    - cancel_event=true
    - var_temp_set=id:rnd value:%random:dirt,diamond,coal%
    - execute=activator:case_result_%rnd%
EXEC:
  case_result_dirt:
    actions:
    - item_give=type:dirt lore:{&fСтрашный как моя жизнь}
    - message=&aВам выпал огроменный кусок земли!
  case_result_diamond:
    actions:
    - item_give=type:diamond
    - message=&aВам выпал олмас!
  case_result_coal:
    actions:
    - item_give=type:coal name:{Активированный уголь}
    - message=&aВам выпал чудотворный активированный уголь!
:risitas:
Ор...
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх