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

Задетектить падение предмета в котёл

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

Статус темы:
Закрыта.
  1. Автор темы
    Snowmaze

    Snowmaze Участник Пользователь

    Баллы:
    36
    А есть способ нормально задетектить падение предмета в котёл? Или надо мониторить каждый кинутый предмет самому? 1.12.2 версия
     
  2. dimkaS

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

    Баллы:
    76
    Имя в Minecraft:
    dimkaS
    Таумкрафт на плагинах пишешь?)
    См: Здесь
     
  3. Автор темы
    Snowmaze

    Snowmaze Участник Пользователь

    Баллы:
    36
    Так там по сути ничего и нет
     
  4. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Нету, насколько я знаю. Но такая механика используется в ванили для тушения игроков, которые прыгнули в котёл с водой. Возможно NMS чем-то поможет в этом плане.

    В целом да.
    Сделал это за тебя, ибо самому будет интересно поюзать.
    PHP:
    import org.bukkit.entity.Entity;
    import org.bukkit.event.HandlerList;
    import org.bukkit.event.entity.EntityEvent;

    public class 
    EntityFallEvent extends EntityEvent {
        private static final 
    HandlerList handlers = new HandlerList();

        public 
    EntityFallEvent(Entity entity) {
            
    super(entity);
        }

        @
    Override
        
    public HandlerList getHandlers() {
            return 
    handlers;
        }

        @
    SuppressWarnings("unused")
        public static 
    HandlerList getHandlerList() {
            return 
    handlers;
        }
    }

    PHP:
    new BukkitRunnable() {
        
    String key "pOnGround";

        @
    Override
        
    public void run() {
            for (
    World world Bukkit.getWorlds()) {
                for (
    Entity entity world.getEntities()) {
                    
    boolean actualOnGround entity.isOnGround();
                    
    Boolean previousOnGround getNbtValue(entitykeyBoolean.class, null);
                    if (
    previousOnGround == null) {
                        
    setNbtValue(pluginentitykeyactualOnGround);
                        continue;
                    }
                    if (
    previousOnGround == actualOnGround) continue;
                    if (
    actualOnGround)
                        
    Bukkit.getPluginManager().callEvent(new EntityFallEvent(entity));
                    
    setNbtValue(pluginentitykeyactualOnGround);
                }
            }
        }
    }.
    runTaskTimer(plugin1L1L);

    PHP:
    private static <TT getNbtValue(@Nonnull Entity entity, @Nonnull String key, @Nonnull Class<Ttype, @Nullable T defaults) {
        
    Iterator<MetadataValueiterator entity.getMetadata(key).iterator();
        return 
    iterator.hasNext() ? type.cast(iterator.next().value()) : defaults;
    }

    private static 
    void setNbtValue(@Nonnull Plugin plugin, @Nonnull Entity entity, @Nonnull String key, @Nullable Object value) {
        
    entity.setMetadata(key, new FixedMetadataValue(pluginvalue));
    }

    PHP:
        @EventHandler
        
    private void on(EntityFallEvent event) {
            
    Entity entity event.getEntity();
            if (!(
    entity instanceof Item)) return;
            
    Block block entity.getLocation().getBlock();
            if (
    block.getType() != Material.CAULDRON) return;
            
    Item item = (Itementity;
            
    ItemStack stack item.getItemStack();
            
    Bukkit.broadcastMessage("Предмет " stack.getType() + " упал в котёл");
        }
     
    Последнее редактирование: 5 июл 2019
  5. Автор темы
    Snowmaze

    Snowmaze Участник Пользователь

    Баллы:
    36
    Спасибо, работает. Только оно неплохо так грузит для моей локалки с 1 онлайном
    upload_2019-7-5_13-53-38.png
     
    Последнее редактирование: 5 июл 2019
  6. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Ну, оптимизируй так, чтобы не грузил )
    Можешь попробовать увеличить время между выполнениями раннабла шедулером
     
  7. Автор темы
    Snowmaze

    Snowmaze Участник Пользователь

    Баллы:
    36
    а, сейчас посмотрели на сервере, вообще не лагает
    [​IMG]
    всё
     
Статус темы:
Закрыта.

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