Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

gayph

Активный участник
Пользователь
Баллы
61
Имя в Minecraft
gayph333
Хочу сделать плагин на динамит и если в радиусе 5 блоков от взрыва динамита есть спавнер то он выбрасывался. Только я не понимаю как проверить что взорвался именно нужный динамит который выдаётся по команде
 
Не знаю как сделать это боле цивилизованно, наверняка есть идеи получше.

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

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

P.S. Я не уверен, что это можно реализовать так, как я думаю
 
Не знаю как сделать это боле цивилизованно, наверняка есть идеи получше.

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

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

P.S. Я не уверен, что это можно реализовать так, как я думаю
Я не понимаю как узнать тот ли динамит ставит игрок потому что в ивенте когда он ставит его используется блок а как преобразовать предмет в блок я хз
 
Я не понимаю как узнать тот ли динамит ставит игрок потому что в ивенте когда он ставит его используется блок а как преобразовать предмет в блок я хз
player.getInventory().getItemInMainHand()(or ...InOffHand)
 
Я не понимаю как узнать тот ли динамит ставит игрок потому что в ивенте когда он ставит его используется блок а как преобразовать предмет в блок я хз

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

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

Ну так а как сделать проверку что игрок поджог именно нужный динамит а не обычный
 
Оно так не сработает ивент срабатывает когда ты ставишь блок то есть если ты поставишь последний блок то ивент не сработает
Всё срабатывает, только получать нужно чуть иначе:
https://jd.papermc.io/paper/1.20.6/org/bukkit/event/block/BlockPlaceEvent.html#getItemInHand()

Информацию о динамите можешь хранить в предмете при помощи PersistentDataContainer
 
Всё срабатывает, только получать нужно чуть иначе:
https://jd.papermc.io/paper/1.20.6/org/bukkit/event/block/BlockPlaceEvent.html#getItemInHand()

Информацию о динамите можешь хранить в предмете при помощи PersistentDataContainer
Не работает посмотри код может я чет не так сделал
Код:
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;
    }
}
 

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

Назад
Верх