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

Помогите Самопис запрет ломать картины

Тема в разделе "Разработка плагинов для новичков", создана пользователем pro100koder, 22 авг 2018.

  1. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
     
  2. Nikolai_Faint

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

    Баллы:
    96
    Берем идею и не паримся.
     
  3. Автор темы
    pro100koder

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

    Баллы:
    76
    Н-да... Окей, сделал, но осталось (надеюсь) последнее: из рамок предметы выбивать можно. И это снова не вылавливается теми ивентами. Хотя догадываюсь, что через interact наверное можно... Окей, как?
     
  4. Nikolai_Faint

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

    Баллы:
    96
    PlayerInteractEvent самый(вроде) нагружаемый ивент, и лучше уж костылить чем его юзать.
     
  5. Автор темы
    pro100koder

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

    Баллы:
    76
    Тем не менее, у меня в коде уже есть interact, который нужен для других целей. Я мог бы туда присобачить этот запрет, тогда не будет лишней нагрузки, не так ли? Ну или какой костыль предлагаешь, чтобы запретить игрокам выбивать предметы из рамок? Хотя я знаю один вариант, вообще не юзать рамки на сервере. Но мои друзья их так любят, что просто убьются без своих рамок ободранных...
     
  6. Nikolai_Faint

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

    Баллы:
    96
    Я не заметил что тебе уже ответили
     
  7. Автор темы
    pro100koder

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

    Баллы:
    76
    Он не ловит момент, когда игрок из рамки предмет выбивает.
     
  8. Nikolai_Faint

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

    Баллы:
    96
    Кинь код. Мне самому уже интересно стало.
     
  9. Автор темы
    pro100koder

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

    Баллы:
    76
    Код:
    public void onbreak(HangingBreakByEntityEvent e){
            if(e.getRemover() instanceof Player){
                Player p = (Player) e.getRemover();
                if(!p.getGameMode().equals(GameMode.CREATIVE)){
                    e.setCancelled(true);
                }
            }
        }
     
  10. OsipXD

    OsipXD Старожил Пользователь

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    @pro100koder, на будущее - для отладки событий можно сипользовать Inspector (туц).
     
  11. Nikolai_Faint

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

    Баллы:
    96
    тык
     
  12. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    EntityDamageByEntityEvent
    Спасет еще и от стрел.
     
  13. Slavkaa

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

    Баллы:
    76
    Имя в Minecraft:
    Slavok2001
    Он скинул свой план программирования.
     
  14. Автор темы
    pro100koder

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

    Баллы:
    76
    Боже мой... Вот есть рамка. Вот она, красивая такая, весит на стенке. Вот в ней лежит какой-то предмет. Допустим, алмаз. Вот идёт такой грифер, хочет из этой рамки достать алмаз. ТЫК и нет алмаза в рамке. Теперь понятно? А нужно, чтобы после ТЫК ничего не происходило, кроме как сообщения в чате. И мне не нужно запрещать ставить рамки.
     
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Для предметов в рамке.
    Код:
        @EventHandler
        public void on(EntityDamageByEntityEvent e) {
            if(e.getEntity().getType() ==  EntityType.ITEM_FRAME) {
                if(e.getDamager().getType() ==  EntityType.PLAYER) {
                    e.setCancelled(true);
                }
                if(e.getDamager() instanceof Projectile) {
                    Projectile p = (Projectile) e.getDamager();
                    if(p.getShooter()==null) {
                        return;
                    }
                    if(p.getShooter() instanceof Player) {
                        e.setCancelled(true);
                    } 
                }
            }
        }
    Пустые рамки.
    Код:
        @EventHandler
        public void on(HangingBreakByEntityEvent e) {
            if (e.getRemover().getType() == EntityType.PLAYER) {
                e.setCancelled(true);
            }
        }
    Класс кубоид для самопЕс регионов https://github.com/alexandrage/Example/blob/master/src/Example/Cuboid.java
     
    Последнее редактирование: 24 авг 2018
  16. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Обожаю когда предметы с рамок дропаются после стрелы скелета или взрыва крипера. (WG действительно такое не блочил, у меня на сервере люди фейерверками вещи выбивали)
     
  17. Автор темы
    pro100koder

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

    Баллы:
    76
    Всё, готово. Спасибо всем, кто помогал) Один вопросик на последок: есть ли какой-то чит, который "подделывает" креатив? Я слышал о таком, но не знаю, отправляет ли он на сервер инфу о том, что игрок в GameMode.CREATIVE?
     
  18. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Про мобов речи не было. Это тоже чинится, при желании.
     
  19. OsipXD

    OsipXD Старожил Пользователь

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Я один не понимаю почему нельзя сделать так?
    Код:
     @EventHandler
       public void on(EntityDamageByEntityEvent e) {
           if(e.getEntity().getType() ==  EntityType.ITEM_FRAME) {
               e.setCancelled(true);
           }
       }
    
     
  20. Andoroid

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

    Баллы:
    76
    Нет, это физически невозможно.
     

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