Начинающий
- Статус
- Оффлайн
- Регистрация
- 25 Янв 2024
- Сообщения
- 519
- Реакции
- 3
- Выберите загрузчик игры
- Fabric
- OptiFine
- ForgeOptiFine
AutoServerSetup - уникальная функция с появлением которой полностью отпадает надобность в покупке конфигов. Т.к вы сам девелопер сможет настраивать определенные модули под разные сервера
1.Делаем основу
Создадим enum (при надобности можно добавить еще сервера):
Создадим интерфейс (для модулей):
Изменяем ваш суперкласс модуля :
2. Пример :
Теперь в любой из ваших модулей можно настроить под любой сервер,сначало изменяем hasAutoServerSetup на true и в setupToServer делаем вашу логику пример:
3.Создание комманды (для удобства можно сделать и гуишкой) :
Создадим аргумент
Далее в вашу конфиг или любую другую команду вставляем
Все готово!
1.Делаем основу
Создадим enum (при надобности можно добавить еще сервера):
Server.java:
package dev.lasio.wuq.systems.server;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.util.Arrays;
import java.util.List;
@RequiredArgsConstructor
[USER=270918]@Getter[/USER]
public enum Server {
REALYWORLD("RealyWorld"),
FUNTIME("FunTime"),
SPOOKYTIME("SpookyTime"),
HOLYWORLD("HolyWorld");
final String ReadableName;
public static boolean isValid(String name) {
return Arrays.stream(values()).anyMatch(s -> s.name().equalsIgnoreCase(name));
}
public static List<String> getAllNames() {
return Arrays.stream(values()).map(Enum::name).map(String::toLowerCase).toList();
}
public static Server getByName(String name) {
return Arrays.stream(values())
.filter(s -> s.name().equalsIgnoreCase(name))
.findFirst()
.orElse(null);
}
}
IServerOptionable:
package dev.lasio.wuq.systems.server;
public interface IServerOptionable {
default void setupToServer(Server server) {
}
default boolean hasAutoServerSetup() {
return false;
}
}
Module.java:
public class Module implements IServerOptionable {
Теперь в любой из ваших модулей можно настроить под любой сервер,сначало изменяем hasAutoServerSetup на true и в setupToServer делаем вашу логику пример:
setupToServer:
[USER=1367676]@override[/USER]
public void setupToServer(Server server) {
switch (server) {
case HOLYWORLD, REALYWORLD -> {
this.toggle();
display.setValue(true);
}
case FUNTIME, SPOOKYTIME -> {
this.toggle();
}
}
}
Создадим аргумент
ServerArgumentType:
package dev.lasio.wuq.features.command.arguments;
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.arguments.ArgumentType;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
import com.mojang.brigadier.suggestion.Suggestions;
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
import dev.lasio.wuq.systems.server.Server;
import net.minecraft.command.CommandSource;
import net.minecraft.text.Text;
import java.util.Arrays;
import java.util.Collection;
import java.util.concurrent.CompletableFuture;
public class ServerArgumentType implements ArgumentType<Server> {
private static final Collection<String> EXAMPLES = Arrays.asList("realyworld", "funtime", "holyworld");
private static final DynamicCommandExceptionType INVALID_SERVER =
new DynamicCommandExceptionType(name -> Text.literal("Сервер с именем '" + name + "' не найден."));
public static ServerArgumentType create() {
return new ServerArgumentType();
}
[USER=1367676]@override[/USER]
public Server parse(StringReader reader) throws CommandSyntaxException {
String name = reader.readString();
if (!Server.isValid(name)) throw INVALID_SERVER.create(name);
return Server.getByName(name);
}
[USER=1367676]@override[/USER]
public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) {
return CommandSource.suggestMatching(Server.getAllNames(), builder);
}
[USER=1367676]@override[/USER]
public Collection<String> getExamples() {
return EXAMPLES;
}
}
ConfigCommand.java:
builder.then(literal("setup") .then(argument("server", ServerArgumentType.create())
.executes(context -> {
Server server = context.getArgument("server", Server.class);
int setuppedModules = 0;
for (Module module : ModuleRepository.getModules()) {
if (module.hasAutoServerSetup()) {
module.setupToServer(server);
setuppedModules++;
}
}
IMessageSender.print("Успешно настроил " + setuppedModules + " модулей под сервер " + server.getReadableName());
return SINGLE_SUCCESS;
})
)
);