Помогите как продолжить StringList

  • Автор темы Автор темы KoltR
  • Дата начала Дата начала

KoltR

Активный участник
Баллы
61
Имя в Minecraft
KoltR
Привет!
Я не знаю какой есть метод(или что-то другое) который бы продолжал команду.
Подробнее:
Код:

List<String> list = plugin.getConfig().getStringList("ID");
for (String s : list) {
Material limited = Material.getMaterial(s);


У меня в конфиге стоит самым первым GOLD_BLOCK
Если это GOLD_BLOCK то он пишет команду
И получается что он пишет
  • GOLD_BLOCK
  • IRON_BLOCK
Но вторым стоит IRON_BLOCK
Если это IRON_BLOCK то
получается что он пишет
  • GOLD_BLOCK
Потому-что GOLD_BLOCK не обнаружен и не продолжается StringList
Как это исправить?
 
Если честно - я мало что понял, можешь немного детальнее описать проблему?
 
Если честно - я мало что понял, можешь немного детальнее описать проблему?
Проблема в том,что StringList при не выполнении команды не продолжается

Ща по лучше скажу
Config.yml

id:
- GOLD_BLOCK // материал
- IRON_BLOCK // материал

я вписываю материал блоков в конфиг, а из конфига берется данные.
Если я ставлю материал в первую строку то всё работает.Но если второй материал добавить то нет.Потому-что
StringList продолжает читать в конфиге если действие выполнилось. Как это исправить.

Ещё подробней.

Ставлю блок GOLD_BLOCK
пишет в чат

GOLD_BLOCK
IRON_BLOCK

Ставлю блок IRON_BLOCK
пишет в чат

GOLD_BLOCK

потому-что GOLD_BLOCK не обнаружен.
 
Как я понял, нужно прекратить проход по циклу, верно?
Команда
PHP:
break;
Может принудительно выходить из цикла, соответственно код
PHP:
for (String materialName : materialList) {
    if (условие) {
        // code...
        break;
    }
}
выйдет из цикла, если условие выполняется
 
Вообще я написал почти одно и тоже что NyanGuyMF, но более подробнее


PHP:
        for(String materialName : materialList) {
            if(Material.getMaterial(materialName) != null) {
                Material mat = Material.getMaterial(materialName);
                //Допустим что переменная blockPlace это поставленный тобою блок
                if(blockPlace.getType() != mat) {
                    break;
                }
                //Ну и дальше свой код
            }
        }
 
Вообще я написал почти одно и тоже что NyanGuyMF, но более подробнее


PHP:
        for(String materialName : materialList) {
            if(Material.getMaterial(materialName) != null) {
                Material mat = Material.getMaterial(materialName);
                //Допустим что переменная blockPlace это поставленный тобою блок
                if(blockPlace.getType() != mat) {
                    break;
                }
                //Ну и дальше свой код
            }
        }

@EventHandler
public void onSetBlock(BlockPlaceEvent event){
Player p = event.getPlayer();
List<String> list = plugin.getConfig().getStringList("id");
for(String s : list) {
if(Material.getMaterial(s) != null) {
Material limited = Material.getMaterial(s);
p.sendMessage(s);
String t = plugin.getConfig().getString("warning");
t = t.replace("&", "\u00a7");
Block set = event.getBlockPlaced();
if(set.getType() != limited) { return; }
int maxnumber = 1;
int number = 0;
Chunk checkchunk = set.getLocation().getChunk();
for ( x = 0; x < 16; ){
for ( y = 0; y < 128; ){
for (z = 0; z < 16; ){
Material check = checkchunk.getBlock(x, y, z).getType();
if(check.equals(limited)){number++;}
z++;
}
y++;
}
x++;
}
if(number > maxnumber){event.setCancelled(true);p.sendMessage(t);}
}
}
}
}

Куда в этом коде написать
break;
???
P.S Я тупой
 
Последнее редактирование:
Тут вообще в логике проблема: код не успевает пройтись по всему массиву и уже выходит из цикла, я бы на Вашем месте перебирал материалы из конфига и выполнял действие только если поставленный блок равен блоку из конфига.

И return, и break навсегда выйдут из цикла, вернуться можно будет только с goto или continue, но их лучше вообще не использовать и забыть про их существование 😁
 
Тут вообще в логике проблема: код не успевает пройтись по всему массиву и уже выходит из цикла, я бы на Вашем месте перебирал материалы из конфига и выполнял действие только если поставленный блок равен блоку из конфига.

И return, и break навсегда выйдут из цикла, вернуться можно будет только с goto или continue, но их лучше вообще не использовать и забыть про их существование 😁
Насколько я знаю, goto в java нет.
 
Тут вообще в логике проблема: код не успевает пройтись по всему массиву и уже выходит из цикла, я бы на Вашем месте перебирал материалы из конфига и выполнял действие только если поставленный блок равен блоку из конфига.

И return, и break навсегда выйдут из цикла, вернуться можно будет только с goto или continue, но их лучше вообще не использовать и забыть про их существование 😁
goto запрещен
continue норм тема, в чем трабл?
 
goto запрещен
continue норм тема, в чем трабл?
Усложняет структуру кода и в большинстве случаев можно избежать использование continue. Прочитай «Совершенный код», в главе 31 листинг 31-34 хорошо объясняются проблемы использования оператора goto, который схож сontinue :KappaPride:
 
Усложняет структуру кода и в большинстве случаев можно избежать использование continue. Прочитай «Совершенный код», в главе 31 листинг 31-34 хорошо объясняются проблемы использования оператора goto, который схож сontinue :KappaPride:
В отличии от goto, который может скакать куда угодно, не вижу никаких усложнений при чтении кода с continue. Наоборот он зачастую позволяет уменьшить количество вложенных блоков if'ов например.
Самый простой пример:
Код:
for (int number : numbers) {
    if (number < 0) continue;
    // Выполнение кода
}
Код:
for (int number : numbers) {
    if (number >= 0) {
        // Выполнение кода
    }
}
Первый вариант будет намного легче читать например, если будет множество проверок с промежуточными расчетами (какие нибудь фильтры). Во втором варианте придется сделать кучу блоков if.

Та же самая штука про break с меткой во вложенных циклах. Понятное дело мы можем обойтись, но добавим кучу лишнего кода, который скорее будет запутаннее.

Вот кстати нашел в книге которую ты написал:
Ashampoo-Snap-20-2018-15h15m54s-001.png


UPD: Понятное дело, что его тоже нужно использовать с умом, но я только хочу сказать, что нельзя равнять к goto.
 
Последнее редактирование:
А может кто-то всё-таки перефразировать, чего хочется достичь? Я тоже 6 раз прочитал, но не понял.
 
А может кто-то всё-таки перефразировать, чего хочется достичь? Я тоже 6 раз прочитал, но не понял.
Да я сам не с первого раза понял... Понял только из его примера, или как это назвать...
 
Назад
Верх