Помогите Упростить код прокрутки GUI

amw202020

Активный участник
Пользователь
Баллы
66
Нужно уменьшить код
(Внимание) Опасно для психики, смотреть только профессионалам!
src - click
VT
 
Подпишусь на темку только для того чтобы увидеть, какие дибилы будут скачивать это, ради того чтоб тебе помочь..)



Кееееек
upload_2017-2-3_15-21-40.png


Ясно кто это был
Список файлов показывает только один класс. кидай сюда
 
Залей на гитхаб, че как лох
 
Java:
http://pastebin.com/FiH1DRDN
Rubukkit не дал залить слишком много кода XD
 
Java:
final static Random random = new Random(); //подключаем наш супирпупир рандом
//не забываем что рандом - это поле (вне метода), а все что ниже  - это где то в методе должно быть
        final Inventory inv = Bukkit.createInventory(null, 27, "name"); //создаем инвентарь
        final List<ItemStack> items = new ArrayList<>();
        items.add(new ItemStack(Material.ACACIA_DOOR));//заполняем массив с вещами
        for (int i=0; i<27; i++){
            if (((i>=0&&i<9)||(i>=18&&i<27))&&(i!=4&&i!=22)){
                inv.setItem(i, ItemUtil.create(35,(short)14, null));
            } else if (i==4||i==22) {inv.setItem(i, new ItemStack(Material.GLASS));} //засовываем в первую и третью строку стекло.
        }
   
        for (int i =0; i<9; i++) {
            ItemStack item = items.get(random.nextInt(items.size()));
            inv.setItem(i+9, item); //засовываем во вторую строку инвентаря вещи, благодоря рандому они берутся случайно из массива с вещами.
        }
        p.openInventory(inv);
        BukkitRunnable cani = new BukkitRunnable() { //таймер
            double i = 1;
            double time = 0;
            ItemStack winitem  = null;
            @Override
            public void run() {
                if (time>i&&time<100){
                    for (int f=9; f<17; f++) {
                        inv.setItem(f, inv.getItem(f+1)); //смещаем все вещи во второй троке на один слот влево.
                    }
                    inv.setItem(17, items.get(random.nextInt(items.size()))); //заполняем слот который оказался пустым, т.к. мы все сместили. вещь снова берем рандомную из того же массива               
                    i=i*1.125; //магия. тут я делаю что бы прокрутка сначала шла быстро, а последние несколько делала "из последних сил"
                }
                time++; //увеличиваем некий аналог "времени"
                if (p.getInventory().getName()!=genS.genStrng(plugin.cases.getString("cases."+casetype+".Name"))) {p.openInventory(inv);} //если игрок дибил и вдруг закрыл инвентарь до того как он прокрутился, то открываем его снова
                if (time==100) {
                    winitem = inv.getItem(13); //получаем из середины инвентаря вещь которую выиграл игрок
                    p.sendMessage("ты дурак, который выиграл вещь {item}".replace("{item}", inv.getItem(13).getItemMeta().getDisplayName())); //поздравляем игрока
                }
           
           
                if (time>100&&time<150&&time%10==0){ //это сделано чтобы вещь которую игрок выиграл еще немного помаргала.
                    if (time%20==0){
                        inv.setItem(13, winitem);
                    }else {
                        inv.setItem(13, null);       
                        }
                }//о да, анимация
                if (time>150){
                    p.getInventory().addItem(winitem); //выдаем игроку его вещь которую он выиграл. Тут же делаем еще кучу всего что связано с выигрышем. поздравлять можно тоже тут, но я не стали ибо "0)0)))0)"
                    p.closeInventory(); //закрываем инвентарь куда подальше
                    cancel(); //останавливаем таймер, ибо нефиг опертивку кушть
                }
            }
        };
        cani.runTaskTimer(plugin, 10, 1);//ну а это запускатор таймера. про сокр. форму не писать ибо мне такая нравится.

Вот мой код прокрутки инвентаря.
 
Последнее редактирование:
Java:
final static Random random = new Random(); //подключаем наш супирпупир рандом
//не забываем что рандом - это поле (вне метода), а все что ниже  - это где то в методе должно быть
        final Inventory inv = Bukkit.createInventory(null, 27, "name"); //создаем инвентарь
        final List<ItemStack> items = new ArrayList<>();
        items.add(new ItemStack(Material.ACACIA_DOOR));//заполняем массив с вещами
        for (int i=0; i<27; i++){
            if (((i>=0&&i<9)||(i>=18&&i<27))&&(i!=4&&i!=22)){
                inv.setItem(i, ItemUtil.create(35,(short)14, null));
            } else if (i==4||i==22) {inv.setItem(i, new ItemStack(Material.GLASS));} //засовываем в первую и третью строку стекло.
        }
   
        for (int i =0; i<9; i++) {
            ItemStack item = items.get(random.nextInt(items.size()));
            inv.setItem(i+9, item); //засовываем во вторую строку инвентаря вещи, благодоря рандому они берутся случайно из массива с вещами.
        }
        p.openInventory(inv);
        BukkitRunnable cani = new BukkitRunnable() { //таймер
            double i = 1;
            double time = 0;
            ItemStack winitem  = null;
            @Override
            public void run() {
                if (time>i&&time<100){
                    for (int f=9; f<17; f++) {
                        inv.setItem(f, inv.getItem(f+1)); //смещаем все вещи во второй троке на один слот влево.
                    }
                    inv.setItem(17, items.get(random.nextInt(items.size()))); //заполняем слот который оказался пустым, т.к. мы все сместили. вещь снова берем рандомную из того же массива               
                    i=i*1.125; //магия. тут я делаю что бы прокрутка сначала шла быстро, а последние несколько делала "из последних сил"
                }
                time++; //увеличиваем некий аналог "времени"
                if (p.getInventory().getName()!=genS.genStrng(plugin.cases.getString("cases."+casetype+".Name"))) {p.openInventory(inv);} //если игрок дибил и вдруг закрыл инвентарь до того как он прокрутился, то открываем его снова
                if (time==100) {
                    winitem = inv.getItem(13); //получаем из середины инвентаря вещь которую выиграл игрок
                    p.sendMessage("ты дурак, который выиграл вещь {item}".replace("{item}", inv.getItem(13).getItemMeta().getDisplayName())); //поздравляем игрока
                }
           
           
                if (time>100&&time<150&&time%10==0){ //это сделано чтобы вещь которую игрок выиграл еще немного помаргала.
                    if (time%20==0){
                        inv.setItem(13, winitem);
                    }else {
                        inv.setItem(13, null);       
                        }
                }//о да, анимация
                if (time>140){
                    p.getInventory().addItem(winitem); //выдаем игроку его вещь которую он выиграл. Тут же делаем еще кучу всего что связано с выигрышем. поздравлять можно тоже тут, но я не стали ибо "0)0)))0)"
                    p.closeInventory(); //закрываем инвентарь куда подальше
                    cancel(); //останавливаем таймер, ибо нефиг опертивку кушть
                }
            }
        };
        cani.runTaskTimer(plugin, 10, 1);//ну а это запускатор таймера. про сокр. форму не писать ибо мне такая нравится.

Вот мой код прокрутки инвентаря.
можешь это в мой гавноплагин вшить ? XD
 
Нет, ну я понимаю, что люди говнокодят, потому что это быстрее, чем научиться писать нормально. Но наверно это не тот случай. ТС, тебе было не лень это всё писать? Вот серьёзно... 1300 строк? Что-о-о?
Ладно...
На данном этапе могу лишь посоветовать определять однотипные участки кода в отдельные методы. А различающиеся значения передавать в параметрах. Так читабельность кода заметно возрастёт, а вот размер текста уменьшится в разы.
Вот сделаешь это - кидай обновлённый паст в тему, а то в твоём нынешнем варианте вряд ли кто-то будет разбираться.
 
Извините конечно, но, БОЖЕ КАК ЖЕ Я ОРУ.
 
Назад
Верх