
Народ, кто компилит, может ли кто создать данное расширение PlaceholderAPI, используя код, который будет написан ниже?
После создания и установки появятся следующие плейсхолдеры:
• %mytime_time% - Выведет время в формате "HH:mm".
• %mytime_daytime% - Выведет текст: "Утро", "День", "Вечер" или "Ночь", в зависимости от времени суток. (Названия и диапазоны времени в config.yml можно настроить под предпочтения.)
Код, который был сгенерирован по ТЗ
Объяснение кода:
• getIdentifier(), getAuthor(), getVersion(): Стандартные методы для расширения PlaceholderAPI.
• onRequest(OfflinePlayer player, String params): Основной метод, который обрабатывает плейсхолдеры.
• Получает мир игрока (onlinePlayer.getWorld()).
• Получает время мира (world.getTime()).
• Конвертирует время мира в LocalTime для удобного форматирования.
• Если параметр params равен "time", возвращает время в формате "HH:mm".
• Если параметр params равен "daytime", вызывает метод getDayTimeText() для получения текстового описания времени суток.
• getDayTimeText(long worldTime): Этот метод выполняет основную логику:
• Получает доступ к конфигурации PlaceholderAPI (getPlaceholderAPI().getConfig()).
• Читает значения диапазонов времени и соответствующие им названия из config.yml. Эти пути и значения должны быть добавлены в ваш config.yml. (см. пример ниже)
• Определяет, к какому периоду суток относится текущее время мира.
• Возвращает соответствующее название времени суток.
Пример config.yml (для PlaceholderAPI):
Добавьте следующие настройки в файл plugins/PlaceholderAPI/config.yml (или создайте, если его нет), внутри секции config:
После создания и установки появятся следующие плейсхолдеры:
• %mytime_time% - Выведет время в формате "HH:mm".
• %mytime_daytime% - Выведет текст: "Утро", "День", "Вечер" или "Ночь", в зависимости от времени суток. (Названия и диапазоны времени в config.yml можно настроить под предпочтения.)
Код, который был сгенерирован по ТЗ
Код:
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import java.time.LocalTime;
public class MyTimeExpansion extends PlaceholderExpansion {
@Override
public String getIdentifier() {
return "mytime";
}
@Override
public String getAuthor() {
return "Your Name";
}
@Override
public String getVersion() {
return "1.0.0";
}
@Override
public String onRequest(OfflinePlayer player, String params) {
if (player == null || !player.isOnline()) {
return null;
}
Player onlinePlayer = player.getPlayer();
World world = onlinePlayer.getWorld();
long worldTime = world.getTime();
LocalTime localTime = LocalTime.ofSecondOfDay(worldTime);
if (params.equalsIgnoreCase("time")) {
return String.format("%02d:%02d", localTime.getHour(), localTime.getMinute());
} else if (params.equalsIgnoreCase("daytime")) {
return getDayTimeText(worldTime);
}
return null;
}
private String getDayTimeText(long worldTime) {
FileConfiguration config = getPlaceholderAPI().getConfig();
long morningStart = config.getLong("time_ranges.morning.start", 0);
long morningEnd = config.getLong("time_ranges.morning.end", 6000);
long dayStart = config.getLong("time_ranges.day.start", 6000);
long dayEnd = config.getLong("time_ranges.day.end", 12000);
long eveningStart = config.getLong("time_ranges.evening.start", 12000);
long eveningEnd = config.getLong("time_ranges.evening.end", 18000);
// Нормализация worldTime, чтобы учесть циклы в 24000 тиков.
long normalizedTime = worldTime % 24000;
if (normalizedTime >= morningStart && normalizedTime < morningEnd) {
return config.getString("time_names.morning", "Утро");
} else if (normalizedTime >= dayStart && normalizedTime < dayEnd) {
return config.getString("time_names.day", "День");
} else if (normalizedTime >= eveningStart && normalizedTime < eveningEnd) {
return config.getString("time_names.evening", "Вечер");
} else {
return config.getString("time_names.night", "Ночь");
}
}
}
Объяснение кода:
• getIdentifier(), getAuthor(), getVersion(): Стандартные методы для расширения PlaceholderAPI.
• onRequest(OfflinePlayer player, String params): Основной метод, который обрабатывает плейсхолдеры.
• Получает мир игрока (onlinePlayer.getWorld()).
• Получает время мира (world.getTime()).
• Конвертирует время мира в LocalTime для удобного форматирования.
• Если параметр params равен "time", возвращает время в формате "HH:mm".
• Если параметр params равен "daytime", вызывает метод getDayTimeText() для получения текстового описания времени суток.
• getDayTimeText(long worldTime): Этот метод выполняет основную логику:
• Получает доступ к конфигурации PlaceholderAPI (getPlaceholderAPI().getConfig()).
• Читает значения диапазонов времени и соответствующие им названия из config.yml. Эти пути и значения должны быть добавлены в ваш config.yml. (см. пример ниже)
• Определяет, к какому периоду суток относится текущее время мира.
• Возвращает соответствующее название времени суток.
Пример config.yml (для PlaceholderAPI):
Добавьте следующие настройки в файл plugins/PlaceholderAPI/config.yml (или создайте, если его нет), внутри секции config:
Код:
config:
# ... другие настройки ...
time_ranges:
morning:
start: 0
end: 6000
day:
start: 6000
end: 12000
evening:
start: 12000
end: 18000
time_names:
morning: "Утро"
day: "День"
evening: "Вечер"
night: "Ночь"