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

Плагин [SEC/FIX] DupeFixer v3.2 - фикс дюпов, багов, X-Ray [>=1.9]

Тема в разделе "Неподтвержденные плагины", создана пользователем InterVi, 12 апр 2015.

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

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

    Баллы:
    173
    Готово! Я не пожалел несколько часов своего времени и накатил обновление. Оптимизировал код, поубирал баги, добавил новый фикс. Смотрите историю версий.

    Вот думаю надо ли добавлять чистку предметов с нестандартным уровнем зачарования или это лишнее?
     
  2. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    В Энде — если это измерение. В крае — если это Пермский край или Красноярский ;)

    Мне кажется вполне вписывается в концепцию плагина, только должно быть полностью настраиваемо и отключаемо.
     
  3. alexandrage

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

    Баллы:
    173
    Вот держи, а то опять наговнокодишь :D.

    Код:
    @EventHandler
      public void onItemDrop(PlayerDropItemEvent e) {
          Item it = e.getItemDrop();
          removeEnt(it.getItemStack());
      }
    
      @EventHandler
      public void onPlayerInteract(PlayerInteractEvent e) {
        if (e.getItem() != null) {
            ItemStack it = e.getItem();
            boolean b = removeEnt(it);
            e.setCancelled(b);
        }
      }
    
      @EventHandler
      public void InventoryClick(InventoryClickEvent e) {
        if (e.getCurrentItem() != null) {
            ItemStack it = e.getCurrentItem();
            removeEnt(it);
        }
      }
    
      @EventHandler
      public void onPickupItem(PlayerPickupItemEvent e) {
          Item it = e.getItem();
          removeEnt(it.getItemStack());
      }
    
      @EventHandler
      public void onEntityDamage(EntityDamageEvent e) {
          Entity ent = e.getEntity();
          if ((ent instanceof Player)) {
              Player p = (Player)ent;
              for(ItemStack it : p.getInventory().getArmorContents()) {
                  removeEnt(it);
              }
          }
      }
    
      boolean removeEnt(ItemStack it) {
          boolean b = false;
            for(Entry<Enchantment, Integer> ench : it.getEnchantments().entrySet()) {
                Enchantment E = (Enchantment) ench.getKey();
                if(ench.getValue() > E.getMaxLevel()) {
                  ItemMeta m = it.getItemMeta();
                  m.removeEnchant(E);
                  it.setItemMeta(m);
                  b=true;
                }
            }
        return b;
      }

    P.s Креативщики еще умеют изменять имя и лоре предмета, вписывать там свою рекламу. Но тут уже нужен индивидуальный фильтр под сервер.
    Есть еще вариант отменять такие пакеты от клиента через протоколлиб. Тогда фикс будет универсальным от чарки, лоре и имени предмета.
     
  4. Автор темы
    InterVi

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

    Баллы:
    173
    Дюп с нулевым количеством актуален, но не так как раньше. Вот что получается: из сломанного сундука 1 предмет на земле, второй кладем в раздатчик - он выплевывает 1 раз. Итого у нас 2 предмета. Можно дюпать дорогие предметы, хоть и рискованно. На какой из 1.7 работает как надо не знаю, предположительно 1.7.2 (плагин на ней не тестировался).

    Дюп с вагонеткой / ослом в ад актуален.

    Дюп растений актуален на 1.7 и первых 1.8, не знаю точно до какой версии.

    Дюп рельс убрали только в одной из 1.8 (лень искать коммит).

    Визуальные дюпы быстрыми кликами актуальны для 1.7-1.8, но есть одна вариация, которая пока не фиксится. Позволяет визуально дюпнуть броню, защищает ли она реально - не знаю. На 1.6 и ниже говорят что реально, вполне возможно что на 1.7 тоже. Можно зафиксить только черезпопно, поэтому пока не делаю. Еще кто-то в помощи говорил что на 1.7 быстрыми кликами можно реально размножить вещи, например через наковальню.

    Дюп с воронками в множественных вариантах актуален, зафиксить не могу - нет ивентов. И вряд ли они вообще помогут, похоже что очень хреново их реализовали. Игрок построил механизм, который создает алмазы в бешеном количестве.
    @Shevchik может ты зафиксишь в тик оптимизере? Суть в том чтобы прогнать предметы по куче воронок, в конце их магическим образом становится больше. К сожалению, видео потерялось.

    Дюп с выбрасыванием, выходом и поднятием, как выяснилось, работает не только в одиночке. Попробую что-нибудь придумать.

    Дюп с границей чанка и рамкой предположительно может работать на сервере, все еще не нашел время как следует протестировать. В комментах к видео говорили что работает, значит заслуживает внимания.

    Еще есть популярные дюпы с помощью багов WorldGuard и ChestShop, ими пока что нет желания заниматся.

    Вот так, а кто-то тут пердел что плагин не нужен :lol::lol::lol:

    Добавлю как только еще что-нибудь интересное допишу. У меня код уже есть, просто я его не добавлял конкретно в этот плагин.
     
  5. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Почти всё описанное на 1.8.8 не пашет, зафиксили. С воронками такой дюп ловил опять же только на версии где есть Hopper Tick Scheduling, там косяк на косяке, но его убрали, и есть он только в PaperSpigot.
     
  6. Автор темы
    InterVi

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

    Баллы:
    173
    Ну оно не у всех ведь, потому выкладываю.
    а в какой версии убрали?

    Уже запилил фикс дюпа брони, сейчас еще два фикса добавлю и выложу новую версию.
    Ну и денек сегодня, с 4-5 часов утра сижу над кодом. Вот что добвил в 1.4:
    • удалялка нестандартно зачаренных предметов (не палит новые атрибуты отсюда)
    • удалялка нестандартных зелий
    • фикс дюпа быстрым поднятием вещи и выходом из игры (сам дюп не тестировал)
    Дюп брони только визуальный, когда урон получаешь как будто ее нету. Зафиксить не смог и не хочу. Тестировал на 1.7.9 и на последней версии 1.8.8

    Остальные потенциально рабочие дюпы пока не тестировал. Все, отдых.
     
  7. alexandrage

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

    Баллы:
    173
    Кастомные атрибуты я не смог заюзать на спайготе, удаляются сами. Так что не критично.
     
  8. Автор темы
    InterVi

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

    Баллы:
    173
    На 1.8.7 работают, сделал себе меч на 1000лвл урон. А вот на 1.7.9 нифига.
     
  9. alexandrage

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

    Баллы:
    173
    Надо попробовать, а то я сколько не мучил модификаторы, все удалялось. Хотел ради интереса их вывести.
    Теперь я хоть знаю как оно выводится :).
    Код:
    {id:"minecraft:wooden_sword",Damage:0s,Count:1b,tag:{AttributeModifiers:[0:{Name:"generic.maxHealth",Amount:20,Operation:0,UUIDLeast:306581,UUIDMost:22120,AttributeName:"generic.maxHealth"}],RepairCost:1,ench:[0:{id:35s,lvl:3s}]}}

    Вот тебе костыль для определения AttributeModifiers.

    Код:
        boolean getAttributeModifiers(ItemStack it) {
              NBTTagCompound itemTag = new NBTTagCompound();
              CraftItemStack craft = CraftItemStack.asCraftCopy(it);
              CraftItemStack.asNMSCopy(craft).save(itemTag);
              if(itemTag.get("tag")!=null) {
                  if(((NBTTagCompound) itemTag.get("tag")).hasKey("AttributeModifiers")) {
                      return true;
                  }
              }
              return false;
        }
     
  10. Dereku

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

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Fixes.java:65 - Сравнение String с Enum.

    Уже лучше. Но можно ещё лучше.
    http://puu.sh/klk7u/0969cf28aa.zip
    Навигация по Fixes.java: //Adds, //Fixes, //Edit .
     
  11. Автор темы
    InterVi

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

    Баллы:
    173
    ты меня опередил с реализацией locToString :D
    а насчет остального, может потом покопаюсь с сокращенными вариантами, мне пока так привычнее
    лучше скажи откуда классы импортить и чтобы это все не крашилось на 1.7
     
  12. alexandrage

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

    Баллы:
    173
    С чего оно крашить должно то? Вроде все проверки воткнул. И да в идеале тут нужна рефлексия под быдлопакеты, не дружу с ней.
     
  13. Автор темы
    InterVi

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

    Баллы:
    173
    Так пути то к классам разные. Для 1.8:
    Код:
    import net.minecraft.server.v1_8_R3.NBTTagCompound;
    Либу брал от шевчика, которая у него в тик оптимизере приложена.
     
  14. alexandrage

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

    Баллы:
    173
    Ищи того кто рефлексии хорошо знает.
     
  15. Dereku

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

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    А искать то не нужно - тот же @OsipXD может помочь с этим.
     
  16. Автор темы
    InterVi

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

    Баллы:
    173
    ну и фиг с ним тогда, если у кого раздачи пусть пилят свое решение, под конкретную версию можно же без магии
     
  17. OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    В принципе можно обойтись и без рефлексий, создав для отдельной версии отдельный класс, как это сделано тут
    Но если хочется поизвращаться с рефлексиями, то:
    Код:
    boolean getAttributeModifiers(ItemStack it) {
        String version = "v1_7_R4"; // Тут надо находить версию, мне лень
       
        try {
            Class nbtCompoundClass = Class.forName("net.minecraft.server." + version + ".NBTTagCompound");
            Class craftItemStackClass = Class.forName("org.bukkit.craftbukkit." + version + ".CraftItemStack");
            Class nmsItemStackClass = Class.forName("net.minecraft.server." + version + ".inventory.ItemStack");
    
            Object itemTag = nbtCompoundClass.getConstructor().newInstance();
            Object craft = craftItemStackClass.getMethod("asCraftCopy", ItemStack.class).invoke(null, it);
            Object nms = craftItemStackClass.getMethod("asNMSCopy", ItemStack.class).invoke(null, craft);
            nmsItemStackClass.getMethod("save", nbtCompoundClass).invoke(nms, itemTag);
           
            Method getMethod = nbtCompoundClass.getMethod("get", String.class);
            if (getMethod.invoke(itemTag, "tag") != null) {
                if ((boolean) nbtCompoundClass.getMethod("hasKey", String.class).invoke(getMethod.invoke(itemTag, "tag"), "AttributeModifiers")) {
                    return true;
                }
            }
        } catch (ReflectiveOperationException e) {
            e.printStackTrace();
        }
    
        return false;
    }
    
    Честно? Я бы юзал первый способ. Хотя мне было бы интересно запустить этот код, чтобы проверить работает-ли он.
     
    Последнее редактирование: 6 окт 2015
  18. Автор темы
    InterVi

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

    Баллы:
    173
    Репозиторий: https://bitbucket.org/InterVi/dupefixer
    Пока что это единственный плагин, который я буду хоть как-то поддерживать.
     
  19. MrDeadPool

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

    Баллы:
    78
    лучше бы написали что то глобальное,которое лечит само понятие дюп.
     
  20. Автор темы
    InterVi

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

    Баллы:
    173
    Это моджангу сказать надо. TickOptimizer от шевчика должен более нормально фиксить разные штуки, но я не знаю какие именно.
     

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