Почему не работает команда

Версия Minecraft
1.7.10
API
Forge
1,374
113
241
А что не так с кодом ?)
1. Для подобного лучше использовать Set вместо List
2. Отрезок с foreach clans бессмыслен
3. По причине 2 костыльный и if (точнее он даже нерабочий)
4. Проверка на серверный мир не нужна, т.к. команды исполняются на сервере

От себя: по этому огрызку кода весьма трудно понять где ошибка. Либо кидай код всей команды, либо делай пояснения к отправленному.
И как уже сказал @mts2200, проблема, скорее всего, кроется в том, что список clans либо имеет длину 0, либо не определён, из-за чего и clan2 тоже становится неопределённым.
 
Последнее редактирование:
А ты прав . Set же по сути не разрешает пропускать едентичные данные ,всё должно быть уникальным .
world.isRemote - честно сказать ,то я смотрел туториал и тоже не видел в этом блоке кода смысла ) Спасибо за критику
 
команда clan_create:
package com.example.examplemod.command_clan;

import com.example.examplemod.clan.Clan;
import net.minecraft.command.CommandBase;
import net.minecraft.command.ICommandSender;
import net.minecraft.util.ChatComponentText;
import net.minecraft.world.World;

import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;

public class CreateClanCMD extends CommandBase {

    private final String
            NAME = "clan_create";
    private final String USAGE = "/clan_create <name>";
    private String nameClan = null;

    private static final Set<Clan> clans = new HashSet<>();

    private static final Clan clanus = new Clan();


    public CreateClanCMD() {

    }

    @Override
    public String getCommandName() {
        return NAME;
    }

    @Override
    public String getCommandUsage(ICommandSender p_71518_1_) {
        return USAGE;
    }

    @Override
    public void processCommand(ICommandSender sender, String[] args) {
        if (args.length == 0) {
            sender.addChatMessage(new ChatComponentText("invalid arguments"));
            return;
        }
        nameClan = args[0];
        for (Clan clansi :clans) {
            if (!(clansi.getName().equals(nameClan))){
                clans.add(new Clan(nameClan));
                sender.addChatMessage(new ChatComponentText("Clan is created"));
            }
        }


    }

Вот код команды .Я не понимаю , почему у меня просто ничего не происходит :(
Не создается клан
 

jopi

Попрошайка
1,421
30
260
@fukkivdan @will0376 каким образом тогда появляется сообщение 'произошла ошибка при выполнении команды', вместо 'команды не существует'
@superinviz в цикле он будет прогонять все кланы на наличие стринга, если не выходить из цикла будет создано много кланов с одним названием это раз
Два, кланы не создаются потому-что ты итерируешься через clans, который изначально пуст, и в данном случае цикл не срабатывает вообще, а вместе с циклом и создание клана.

Вот тебе пример на коленке как это можно сделать по другому, и так, что-бы работало

Java:
public List<Clan> clans = new ArrayList<>();

public void processCommand(ICommandSender sender, String[] args) {
    if (args.length < 1) {
        sender.addChatMessage(new ChatComponentText("недостаточно аргументов"));
        return;
    }
    //далее всё зависит от реализации, поскольку кэширования именно имен кланов не
    // я просто проитерируюсь через все кланы, но сам бы отдельно кэшировал бы и имена кланов
    //  для более простой проверки по названию
    String clanName = args[0];
    for (Clan clan : this.clans) { //Итерация через список кланов
        if (clan.getName().equals(clanName)) { //проверяем названия
            //Если код прошел сюда, то значит имя существующего клана и клана который мы хотим создать совпадают
            // значит отсекаем этот вариант имени клана, и шлем игрока придумывать новое название, заканчивая метод
            sender.addChatMessage(new ChatComponentText("Клан с таким названием уже существует"));
            return; //рвем цикл и выходим из метода
        }
    }
    //Если код прошел сюда, значит название не занято, цикл не порвался и выход из метода не был осуществлен
    this.clans.add(new Clan(clanName));
    sender.addChatMessage(new ChatComponentText("Вы успешно создали клан"));
}
 
Сверху