Untitled

 avatar
unknown
plain_text
2 months ago
4.0 kB
5
Indexable
package com.arknesia.timesync;

import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;

public class TimeSyncPlaceholder extends PlaceholderExpansion {
    private final Plugin plugin;
    private final TimeManager timeManager;

    public TimeSyncPlaceholder(Plugin plugin, TimeManager timeManager) {
        this.plugin = plugin;
        this.timeManager = timeManager;
    }

    @Override
    public String getIdentifier() {
        return "timesync";
    }

    @Override
    public String getAuthor() {
        return "Lexivale";
    }

    @Override
    public String getVersion() {
        return "0.2.0";
    }

    @Override
    public boolean persist() {
        return true;
    }

    @Override
    public String onPlaceholderRequest(Player player, String identifier) {
        if (timeManager == null) return "N/A";

        long ticks = timeManager.getCurrentTicks();
        Calendar calendar = timeManager.getCalendar();

        switch (identifier.toLowerCase()) {
            case "time_24h":
                return get24HourTime(ticks);
            case "time_12h":
                return get12HourTime(ticks);
            case "time_ampm":
                return getAMPM(ticks);
            case "date":
                return String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));
            case "date_ordinal":
                return getOrdinalNumber(calendar.get(Calendar.DAY_OF_MONTH));
            case "day_of_year":
                return String.valueOf(calendar.get(Calendar.DAY_OF_YEAR));
            case "month":
                return String.valueOf(calendar.get(Calendar.MONTH) + 1);
            case "season":
                return getSeason(calendar.get(Calendar.MONTH) + 1);
            case "year":
                return String.valueOf(calendar.get(Calendar.YEAR));
            case "dayparts":
                return getDayPartSymbol(ticks);
            default:
                return null;
        }
    }

    private String get24HourTime(long ticks) {
        int hours = (int) ((ticks / 1000) % 24);
        int minutes = (int) ((ticks % 1000) * 60 / 1000);
        return String.format("%02d:%02d", hours, minutes);
    }

    private String get12HourTime(long ticks) {
        int hours = (int) ((ticks / 1000) % 24);
        int minutes = (int) ((ticks % 1000) * 60 / 1000);
        String period = (hours >= 12) ? "PM" : "AM";
        if (hours > 12) hours -= 12;
        if (hours == 0) hours = 12;
        return String.format("%02d:%02d %s", hours, minutes, period);
    }

    private String getAMPM(long ticks) {
        int hours = (int) ((ticks / 1000) % 24);
        return (hours >= 12) ? "PM" : "AM";
    }

    private String getOrdinalNumber(int day) {
        if (day >= 11 && day <= 13) return day + "th";
        switch (day % 10) {
            case 1: return day + "st";
            case 2: return day + "nd";
            case 3: return day + "rd";
            default: return day + "th";
        }
    }

    private String getSeason(int month) {
        switch (month) {
            case 1: return "Mid Winter";
            case 2: return "Late Winter";
            case 3: return "Early Spring";
            case 4: return "Mid Spring";
            case 5: return "Late Spring";
            case 6: return "Early Summer";
            case 7: return "Mid Summer";
            case 8: return "Late Summer";
            case 9: return "Early Autumn";
            case 10: return "Mid Autumn";
            case 11: return "Late Autumn";
            case 12: return "Early Winter";
            default: return "Unknown";
        }
    }

    private String getDayPartSymbol(long ticks) {
        if (ticks < 1000) return "&6☀";
        if (ticks < 12000) return "&e☀";
        if (ticks < 13000) return "&7☀";
        return "&8☀";
    }
}
Editor is loading...
Leave a Comment