Slomix / ParkourBeat

4 stars 5 forks source link

Исправить табуляцию команд /delete, /edit, /play, /tptoworld #78

Closed Dymeth closed 5 months ago

Dymeth commented 5 months ago

До перехода на LiteCommands логика таб-комплита у всех перечисленных команд была разной. После перехода появился GameSettingsArgumentResolver, который свёл на нет все различия. Чтобы вернуть прежнюю логику - придётся создать несколько классов, наследующих данный ресолвер, либо внедрить в исходный ресолвер несколько параметров:

private final boolean allowPlayers; // Отображать ли табуляцию игрокам
private final boolean allowConsole; // Отображать ли табуляцию всем кроме игрока
private final boolean onlyOwning; // Отображать ли исключительно уровни, на управление которыми есть права

Для команд данные флаги должны быть такими:

/delete: allowPlayers = false; allowConsole = true; onlyOwning = true; 
/edit: allowPlayers = true; allowConsole = false; onlyOwning = true; 
/play: allowPlayers = true; allowConsole = false; onlyOwning = false; 
/tptoworld: allowPlayers = true; allowConsole = false; onlyOwning = false; 

Логика работы ресолвера должна быть примерно такой:

CommandSender sender = invocation.sender();
if (sender instanceof Player) {
    if (!this.allowPlayers) return SuggestionResult.empty();
} else {
    if (!this.allowConsole) return SuggestionResult.empty();
}
return SuggestionResult.of(
    this.levelsManager.getUniqueLevelNames(
        context.getCurrent().multilevel(),
        this.onlyOwning ? sender : null
    )
);
Dymeth commented 5 months ago

Исправлено