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

Помогите Сборник багов спигота

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

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

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

    Баллы:
    76
    Ну я погуглил что абстракция это когда ты делаешь примерное описание поведения класса. Как-то так я это понял. То что я читал
     
  2. Автор темы
    Energy warrior

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

    Баллы:
    76
    Если я чёт не так понял. То выходит что я рили тупой и мне не надо было начинать делать плагины.
     
  3. InterWall

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

    Баллы:
    173
    https://ru.stackoverflow.com/questions/277561/Абстракция-в-java
    По ссылкам мало толкового, лишь расплывчатое описание, лучше сразу смотри ответ. Если хоть немного разбираешься в программировании, то всё поймёшь.
     
  4. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Рекомендую этот плейлист, с 10-го урока можешь смотреть, но этого недостаточно, так что читай книги параллельно и гугли непонятные моменты
    https://www.youtube.com/playlist?list=PL786bPIlqEjRDXpAKYbzpdTaOYsWyjtCX
     
  5. Автор темы
    Energy warrior

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

    Баллы:
    76
    Я смотрел этот плей лист. Но там не очень понятно.
     
  6. Автор темы
    Energy warrior

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

    Баллы:
    76
    Немного почитав(ещё раз) у меня появились новые вопросы и ушли старые:
    Почему это костыль? Мне нужно создавать объекты кнопки а не менять имена?
    Что нужно переписывать? Какие требования?
    Я должен создать свой? Или использовать готовый?
    Какой уровень мне нужно использовать? Судя по тому, что ты сказал с разными реализациями, я думаю мне нужно использовать либо абстрактные классы, либо интерфейсы. Как вообще понять абстракция поведения предмета?
     
  7. Автор темы
    Energy warrior

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

    Баллы:
    76
    Как вообще понимать понятие абстракция поведения предмета? В чем она заключается? Как ей пользоваться?
     
  8. Автор темы
    Energy warrior

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

    Баллы:
    76
    Ииииииии... Зачем это? У меня примерно также класс устроен. Ты только что написал сообщение с
    Код:
    public class Button<T>{...}
    И что мне в тип совать?
     
  9. alexandrage

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

    Баллы:
    173
    Это пример контейера. Туда можно помещать любой объект и потом вынимать без каста.
     
  10. Автор темы
    Energy warrior

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

    Баллы:
    76
    Это я понял. Что мне в этот "контейнер" запихивать. Туда помещать дату объекта?
     
  11. alexandrage

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

    Баллы:
    173
    По поводу класса выше. Он юзается примерно так.

    Код:
    public class Menu implements InventoryHolder {
    
        private Inventory inventory;
        private List<Stack> stack;
    
        public Menu(String title) {
            this.inventory = Bukkit.createInventory(this, 9, title);
            this.stack = new ArrayList<Stack>();
        }
    
        @Override
        public Inventory getInventory() {
            return this.inventory;
        }
    
        public void addItem(Stack stack) {
            this.inventory.addItem(stack.getItem());
            this.stack.add(stack);
        }
    
        public Stack getItem(int index) {
            return this.stack.get(index);
        }
    }
     
  12. Автор темы
    Energy warrior

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

    Баллы:
    76
    А где собсно юз контейнера?
     
  13. alexandrage

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

    Баллы:
    173
    Типо такого.
    Button<MyObject> button = new Button<MyObject>(MyObject.class);
    MyObject = button.get();
     
  14. alexandrage

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

    Баллы:
    173
  15. Автор темы
    Energy warrior

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

    Баллы:
    76
    Там не очень понятно что к чему относится. Ты бы хоть комментарии добавил.
    И ещё зачем вот это?
     
  16. alexandrage

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

    Баллы:
    173
    Ну там цепочка с условиями, номер слота, максимальный уровень и уровень когда откроется новое звено. Все собирается в методе setupGui
     
  17. Автор темы
    Energy warrior

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

    Баллы:
    76
    Мне не это надо. Мне надо чтобы когда нажимаешь на кнопку, менялось имя.
     
  18. alexandrage

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

    Баллы:
    173
    Ок. Ты просто спрашивал какие манипуляции можно вытворять.
     
  19. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Я те сказал, делай Consumer с состоянием клика и в меню храни по слоту предметы, у которых может быть разная реализация, некоторые из них реализуй, чтобы менялись при клике, некоторые просто принимают клик.
     
  20. Автор темы
    Energy warrior

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

    Баллы:
    76
    Код:
    package ru.armagidon.aeasybuild;
    
    import org.bukkit.Material;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.*********ventory.ItemFlag;
    import org.*********ventory.ItemStack;
    import org.*********ventory.meta.ItemMeta;
    import ru.armagidon.aeasybuild.utils.buttons.ButtonBuilder;
    import ru.armagidon.aeasybuild.utils.buttons.Choosable;
    
    import java.util.Optional;
    import java.util.SortedMap;
    import java.util.TreeMap;
    import java.util.function.Consumer;
    
    public class ItemButton implements Choosable
    {
        private final Consumer<InventoryClickEvent> action;
        private String[] names;
        private final ItemStack btn;
        private SortedMap<Integer, Optional<ItemButton>> variants = new TreeMap<>();
        private int currentindex = 0;
    
        public ItemButton(ItemStack stack,Consumer<InventoryClickEvent> action,String[] names){
            this.btn = stack;
            this.action = action;
            this.names = names;
            if(names == null){
                this.names = new String[]{""};
            }
            for (int i = 0; i < names.length; i++) {
                ItemButton btn = new ItemButton(new ButtonBuilder(Material.STONE).setName(names[i]));
                variants.put(i,Optional.of(btn));
            }
    
        }
    
        public ItemButton(ItemStack stack){
            this(stack,event -> {});
        }
    
        public ItemButton(ItemStack btn, Consumer<InventoryClickEvent> action) {
            this.action = action;
            this.btn = btn;
        }
    
        public ItemStack getBtn() {
            return variants.get(currentindex).get().getBtn();
        }
    
        public void action(InventoryClickEvent event){
            action.accept(event);
        }
    
        @Override
        public void indexUp() {
            if(currentindex>= variants.size()) currentindex=0;
            currentindex++;
        }
    
        public Consumer<InventoryClickEvent> getAction() {
            return action;
        }
    
        public String[] getNames() {
            return names;
        }
    }
    
    Про Consumer ты мне ничего про Consumer ничего не говорил. Ты говорил только про функциональные интерфейсы, а какие именно не говорил!
     
Статус темы:
Закрыта.

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