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

Помогите Отлечить один предмет от другово

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    kolia1_1
    В gui инвенторе есть 2 предмета которые находятся на 1 - 2 слоте
    надо пометить 1 и потом найти его среди всех, точно такие-же по виду, которые внешним видом не отличаются.
    1 :grass
    2 :grass
    -Можно ли такое сделать вопще?
     
  2. alexandrage

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

    Баллы:
    173
    stack.isSimilar(stack2);
     
  3. Автор темы
    koliab

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

    Баллы:
    76
    Имя в Minecraft:
    kolia1_1
    Объясните
     
  4. alexandrage

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

    Баллы:
    173
    Чего именно? Это метод в ItemStack.
     
  5. Автор темы
    koliab

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

    Баллы:
    76
    Имя в Minecraft:
    kolia1_1
    Что он из себя представляет
     
  6. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Ну открой исходники и посмотри
     
  7. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Сравнивает в предметах все, кроме количества.
    Возвращает true если все одинаково, false если нет.
     
  8. Автор темы
    koliab

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

    Баллы:
    76
    Имя в Minecraft:
    kolia1_1
    Мне надо поставить отметку на предмет что бы его найти, не по внншневнвиду а по отметке
     
  9. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    ставь кастомный NBT тег.
     
  10. Автор темы
    koliab

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

    Баллы:
    76
    Имя в Minecraft:
    kolia1_1
    А цена уже интересно как
     
  11. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Что, какая цена?
     
  12. Автор темы
    koliab

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

    Баллы:
    76
    Имя в Minecraft:
    kolia1_1
    XD авто поправка : це - цена
     
  13. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Ну серез нмс итемстак ставишь теги, погугли в кой то веке, там все прозрачно и очевидно. Хочешь на нескольких версиях - абстракция или прокси классы.
     
  14. alexandrage

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

    Баллы:
    173
    Вот тебе метка.
    Код:
    package Example;
    
    import java.lang.reflect.Field;
    
    import org.bukkit.NamespacedKey;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.enchantments.EnchantmentTarget;
    import org.*********ventory.ItemStack;
    
    public class FaceEnchantment extends Enchantment {
    
        public FaceEnchantment(NamespacedKey key) {
            super(key);
            fix(this);
        }
    
        @Override
        public boolean canEnchantItem(ItemStack arg0) {
            return true;
        }
    
        @Override
        public boolean conflictsWith(Enchantment arg0) {
            return false;
        }
    
        @Override
        public EnchantmentTarget getItemTarget() {
            return null;
        }
    
        @Override
        public int getMaxLevel() {
            return 2;
        }
    
        @Override
        public String getName() {
            return "FaceEnchantment";
        }
    
        @Override
        public int getStartLevel() {
            return 1;
        }
    
        @Override
        public boolean isCursed() {
            return false;
        }
    
        @Override
        public boolean isTreasure() {
            return false;
        }
    
        private void fix(FaceEnchantment ench) {
            try {
                Field f = Enchantment.class.getDeclaredField("acceptingNew");
                f.setAccessible(true);
                f.set(null, true);
                Enchantment.registerEnchantment(ench);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    this.ench = new FaceEnchantment(NamespacedKey.minecraft("120"));
    Item.addEnchantment(this.plugin.ench, 1);
    Item.getEnchantments().get(this.plugin.ench) !=null
     
    Последнее редактирование: 4 янв 2019
  15. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Смысл костылить зачарованием, если это тот же Nbt тег, когда можно поставить кастомный нбт тег.
     
  16. alexandrage

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

    Баллы:
    173
    Смысл кроссверсионности без костылей с nms. Один раз зарегал и все. И теперь энчантов с 1.13 может быть околобесконечно.
    Да и кастомные теги могут стираться бакитом, чарки останутся железно.
     
    Последнее редактирование: 4 янв 2019
  17. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    На предмете бакит не стирает кастомное нбт. В нбт можно помимо метки информацию какую-то адекватно хранить, а костыль твой это именно с зачарованием, это тот же самый нбт тег, но применяется не по назначению и неудобно его использовать для этого. Хз у кого там проблеми с кроссверсионностью, можно использовать прокси классы и при помощи аннотаций легко врапать NBTTagCompount и т. п., намного быстрее писать чем этот костыль с зачарованием. upload_2019-1-4_15-11-18.png
     
  18. alexandrage

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

    Баллы:
    173
    Слишком жирно так костылять ради тупо метки. Чарки хватит. И ТС не осилит твои прокси классы, которые еще частенько придется подгонять под новые nms имена. Ему легче мое готовое взять.
     
  19. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Ну если тс только метка нужна и все, то можно и костылить зачаром, если уже написанного апи нет.
    Но костыль это применение не по назначению, и использование нбт тегов по назначению не нужно называть костылем.
    Сетать нбт теги оч часто может понадобится, так что лучше один раз апи для проксирования написать, чем каждый раз выдумывать что-то.
    Ну и не ток нбт теги, для многих вещей в нмс лезть приходится.
     
  20. alexandrage

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

    Баллы:
    173
    1 раз не получится. nms мапинг иногда меняется. Инжект чарки же проживет околовечно.
     

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