1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Как сделать кастом динамит

Тема в разделе "Разработка плагинов для новичков", создана пользователем gayph, 5 июн 2024.

  1. Автор темы
    gayph

    gayph Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    gayph333
    Хочу сделать плагин на динамит и если в радиусе 5 блоков от взрыва динамита есть спавнер то он выбрасывался. Только я не понимаю как проверить что взорвался именно нужный динамит который выдаётся по команде
     
  2. therimuru_

    therimuru_ Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    therimuru_
    Не знаю как сделать это боле цивилизованно, наверняка есть идеи получше.

    Когда игрок ставит динамит, проверяй, нужный ли динамит поставил игрок, и если он нужный, записывай координаты в массив.

    Когда происходит взрыв, проверяй на каких координатах он произошёл, сверяя данные с данными из массива.

    P.S. Я не уверен, что это можно реализовать так, как я думаю
     
  3. redstoner2015

    redstoner2015 Активный участник

    Баллы:
    61
  4. Автор темы
    gayph

    gayph Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    gayph333
    Я не понимаю как узнать тот ли динамит ставит игрок потому что в ивенте когда он ставит его используется блок а как преобразовать предмет в блок я хз
     
  5. Автор темы
    gayph

    gayph Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    gayph333
    Это немного не то что мне надо. Этот плагин меняет динамиты на сервере полностью а я хочу сделать кастомные динамиты
     
  6. Sturm_PT

    Sturm_PT Активный участник Пользователь

    Баллы:
    76
    player.getInventory().getItemInMainHand()(or ...InOffHand)
     
  7. Автор темы
    gayph

    gayph Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    gayph333
    Оно так не сработает ивент срабатывает когда ты ставишь блок то есть если ты поставишь последний блок то ивент не сработает
     
  8. therimuru_

    therimuru_ Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    therimuru_
    Сохраняй координаты, на которых игрок поджёг динамит в массив. Потом, при взрыве, проверяй, содержит ли массив координаты динамита который взрывается

     
  9. Автор темы
    gayph

    gayph Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    gayph333
    Ну так а как сделать проверку что игрок поджог именно нужный динамит а не обычный
     
  10. therimuru_

    therimuru_ Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    therimuru_
    Какое событие ты используешь для отслЕживания взрыва?
     
  11. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Всё срабатывает, только получать нужно чуть иначе:
    https://jd.papermc.io/paper/1.20.6/org/bukkit/event/block/BlockPlaceEvent.html#getItemInHand()

    Информацию о динамите можешь хранить в предмете при помощи PersistentDataContainer
     
  12. Автор темы
    gayph

    gayph Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    gayph333
  13. Автор темы
    gayph

    gayph Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    gayph333
    Не работает посмотри код может я чет не так сделал
    Код:
    package me.jayph.jayphstiller;
    
    import org.bukkit.*;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.EntityType;
    import org.bukkit.entity.Player;
    import org.bukkit.entity.TNTPrimed;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockExplodeEvent;
    import org.bukkit.event.block.BlockIgniteEvent;
    import org.bukkit.event.block.BlockPlaceEvent;
    import org.bukkit.event.entity.EntityExplodeEvent;
    import org.*********ventory.ItemStack;
    import org.*********ventory.meta.ItemMeta;
    import org.bukkit.persistence.PersistentDataType;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public final class JayphStiller extends JavaPlugin implements CommandExecutor, Listener {
    
        @Override
        public void onEnable() {
            Bukkit.getPluginManager().registerEvents(this, this);
        }
    
    
        public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
            if (label.equalsIgnoreCase("spgive")) {
                if (sender instanceof Player) {
                    Player player = (Player) sender;
                    player.getInventory().addItem(tnt());
                } else {
                    sender.sendMessage("Only players can execute this command!");
                }
                return true;
            }
            return false;
        }
    
    
        Location loctnt = null;
        public void bonEntityExplode(BlockPlaceEvent event) {
            if (event.getBlock().getType() == Material.TNT) {
                if (event.getItemInHand().getItemMeta().getLocalizedName().equalsIgnoreCase("stealer")) {
                    loctnt = event.getBlock().getLocation();
                }
            }
    
    
        }
    
        @EventHandler
        public void onEntityExplode(EntityExplodeEvent event) {
            Location loc = event.getLocation();
            if (loctnt != null) {
                for (int x = -5; x <= 5; x++) {
                    for (int y = -5; y <= 5; y++) {
                        for (int z = -5; z <= 5; z++) {
                            Location checkLoc = loc.clone().add(x, y, z);
                            if (checkLoc.getBlock().getType() == Material.SPAWNER) {
                                checkLoc.getBlock().setType(Material.AIR);
                                loc.getWorld().dropItemNaturally(checkLoc, new ItemStack(Material.SPAWNER));
                            }
                        }
                    }
                }
            }
    
    
        }
    
    
    
        public ItemStack tnt() {
            ItemStack stiller = new ItemStack(Material.TNT, 1);
            ItemMeta meta = stiller.getItemMeta();
            meta.setDisplayName("stealer");
            stiller.setItemMeta(meta);
            return stiller;
        }
    }
     
  14. Автор темы
    gayph

    gayph Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    gayph333
    EntityExplodeEvent
     

Поделиться этой страницей