Komut Bayrakları

Komut bayrakları, bir komut argümanı olarak ait olmayan bir komutun işlenmesi için kullanılacak fazladan parametreleri belirtirken yararlıdır.

Bir bayrak oluşturmak için öncelikle bayrakları için bir Oluşturucu gerekir. Biz-ebilmek sade bir şekilde kullanma :javadoc:’GenericArguments#flags()’ :javadoc: ihtiyacımız Oluşturucusu elde etmek için ‘ GenericArguments’ tarafından sağlanan yöntem. Oradan, ne tür bir bayrağı oluşturmak ister misiniz belirtebilirsiniz. Not bayrakları bağımsız değişken olarak belirtilir.

import org.spongepowered.api.command.args.GenericArguments;
import org.spongepowered.api.command.spec.CommandSpec;

CommandSpec myCommand = CommandSpec.builder()
    .executor(new MyCommand())
    .arguments(GenericArguments.flags().flag("s").buildWith(GenericArguments.none()))
    .build();

Böylece oyuncu gerçekleştirdiğinde bu-ecek yaratmak bir komut bayrak ‘’ / bizim komut - s’’, ‘’ s’’ bayrağı gerçek olacak. O binayı :javadoc:’GenericArguments#none() ile Not ‘ komutu herhangi bir değişkene sahip olmasını önler. Komut bağımsız değişkenleri ve bayrakları isterseniz, düşüncelerinizi :javadoc:’CommandFlags.Builder#buildWith(CommandElement) içinde belirtmeniz gerekir ‘ yöntemi.

Bayrağı ile bizim komutu çalıştırabilirsiniz belirttiğiniz Şimdi, biz şimdi bayrak değerini elde edebilirsiniz. İçin basit bir Boole bayrağı gibi bir biz belirtilen yukarıda, biz sade bir şekilde adil olup olmadığını kontrol edebilirsiniz. Aşağıdaki örnekte komut için ‘CommandContext’ :javadoc: ‘’ s’’ için bir değer olup olmadığını kontrol ediyor.

import org.spongepowered.api.text.Text;

if (args.hasAny("s")) {
    src.sendMessage(Text.of("The command flag s was specified!"));
}

İzin Bayrakları

Şimdiye kadar bayraklarımız harika, ama eğer bir oyuncunun bayrağı kullanmak için izin almak zorunda kalmasını istiyorsak ne olurdu? Bunun yerine :javadoc:’CommandFlags.Builder#permissionFlag (String, String…) ‘ Yöntemimizi bayrak kurucumuzda. Bu, oyuncunun bayrağı kullanarak komutu çalıştırmak için özel bir izne sahip olmasını gerektirir. Bunun bir örneği aşağıdadır:

CommandSpec myCommand = CommandSpec.builder()
        .executor(new MyCommand())
        .arguments(GenericArguments.flags().permissionFlag("myplugin.command.flag",
            "s").buildWith(GenericArguments.none()))
        .build();

Bir oyuncu ‘’ myplugin.command.flag’’ izni yoksa, o zaman onlar bizim komutuyla komut bayrağı ‘’ s’’ yürütmek için izin verilmeyecek.

Değer Bayrakları

Boolean değerleri büyük olabilir, ama ne dizeler veya tamsayılar gibi şeyler için bayrakları istediysek? Burası değer bayraklarıdır. Biz :javadoc:’CommandFlags.Builder#valueFlag (CommandElement, dize…) kullanmak yeterlidir ‘ bizim bayrak builder yöntemi. ‘’ ValueFlag()’’ yöntemini kullanarak, biz, bir tamsayı veya dize gibi oluşturmak istediğiniz bayrak türünü belirtebilirsiniz. Bir tamsayı değer bayrağı oluşturmak şu şekilde yapılabilir:

CommandSpec myCommand = CommandSpec.builder()
        .executor(new MyCommand())
        .arguments(GenericArguments.flags().valueFlag(GenericArguments
                .integer(Text.of("value")), "s").buildWith(GenericArguments.none()))
        .build();

‘Yerine, :javadoc:’GenericArguments#string(Text) gibi belirtmek istiyorum başka bayrak türü’ :javadoc:’GenericArguments#integer(Text) koyabilirsiniz.

Şimdi, bayrak değerini komutumuzdan almak için, onu başka herhangi bir komut argümanı gibi basitçe ele alalım. Alınmadan önce var olup olmadığını kontrol etmeniz yeterlidir:

import java.util.Optional;

Optional<Integer> optional = args.<Integer>getOne("value");
if (optional.isPresent()) {
    int value = optional.get().intValue();
} else {
    src.sendMessage(Text.of("The value flag was not specified."));
}

Uzun Bayraklar

Yukarıda kullandığımız gibi kısa bayraklara alternatif olarak, uzun bayraklar da kullanabiliriz. Uzun bir bayrak kullanarak, komut içinde eşit (`` = ) kullanarak bayrakla birlikte bir değer belirtebilirsiniz. Uzun bir bayrak oluşturmak için, normal bayrağınızı `` - çizgisiyle örnek olarak girin, şöyle:

CommandSpec myCommand = CommandSpec.builder()
        .executor(new MyCommand())
        .arguments(GenericArguments.flags().flag("-myflag")
            .buildWith(GenericArguments.none()))
        .build();

Bayrağımızla belirtilen değerin değer bayraklarına benzer şekilde alınabilir:

Optional<String> optional = args.<String>getOne("myflag");
if (optional.isPresent()) {
    String value = optional.get();
}

Dolayısıyla bir kullanıcı `` / our-command –myflag = Flag_Value`` çalıştırıyorsa, `` Flag_Value`` dize `` value`` içinde saklanır.

Bilinmeyen Bayrak Davranışı

Peki şimdi, komutumuzla birlikte hareket etmek için belirli bir bayrak belirtmediysek, ancak bilinmeyen bayrakları kabul etmek istiyorsak ne olacaktı? Bunu başarmak için komutanımızın bilinmeyen bayrak davranışını belirleyebiliriz:

import org.spongepowered.api.command.args.CommandFlags;

CommandSpec myCommand = CommandSpec.builder()
            .executor(new MyCommand())
            .arguments(GenericArguments.flags()
                    .setUnknownShortFlagBehavior(
                        CommandFlags.UnknownFlagBehavior.ACCEPT_VALUE)
                    .buildWith(GenericArguments.none()))
            .build();

Bunu kullanarak, belirtilen bir değere sahip kısa bayrakların kabul edileceğini belirtebiliriz. Bu olmadan, bilinmeyen bir bayrak kullanmaya teşebbüs bir istisna atar. Olası bilinmeyen bayrak davranışlarından bazıları “ERROR”, “ACCEPT_NONVALUE”, “ACCEPT_VALUE” ve “IGNORE” dir. Bilinmeyen bayrakların varsayılan davranışının “ERROR” olduğu unutmayın.