- Баллы
- 61
- Имя в Minecraft
- gayph333
Хочу сделать плагин на динамит и если в радиусе 5 блоков от взрыва динамита есть спавнер то он выбрасывался. Только я не понимаю как проверить что взорвался именно нужный динамит который выдаётся по команде
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Я не понимаю как узнать тот ли динамит ставит игрок потому что в ивенте когда он ставит его используется блок а как преобразовать предмет в блок я хзНе знаю как сделать это боле цивилизованно, наверняка есть идеи получше.
Когда игрок ставит динамит, проверяй, нужный ли динамит поставил игрок, и если он нужный, записывай координаты в массив.
Когда происходит взрыв, проверяй на каких координатах он произошёл, сверяя данные с данными из массива.
P.S. Я не уверен, что это можно реализовать так, как я думаю
Это немного не то что мне надо. Этот плагин меняет динамиты на сервере полностью а я хочу сделать кастомные динамитыМожно взять за основу уже готовый плагин и узнать как сделать https://www.spigotmc.org/resources/ultimatetnt-the-ultimate-tnt-plugin.49388/
player.getInventory().getItemInMainHand()(or ...InOffHand)Я не понимаю как узнать тот ли динамит ставит игрок потому что в ивенте когда он ставит его используется блок а как преобразовать предмет в блок я хз
Оно так не сработает ивент срабатывает когда ты ставишь блок то есть если ты поставишь последний блок то ивент не сработает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;
}
}
EntityExplodeEventКакое событие ты используешь для отслЕживания взрыва?