package com.alttd.essentia.request; import com.alttd.essentia.EssentiaPlugin; import com.alttd.essentia.api.request.Request; import com.alttd.essentia.configuration.Config; import com.alttd.essentia.tasks.RequestTimeout; import com.alttd.essentia.tasks.TeleportSounds; import lombok.Getter; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import org.bukkit.entity.Player; public abstract class EssentiaRequest implements Request { private final EssentiaPlugin plugin; @Getter private final Player requester; @Getter private final Player target; private final RequestTimeout timeoutTask; TagResolver placeholders; public EssentiaRequest(EssentiaPlugin plugin, Player requester, Player target) { this.plugin = plugin; this.requester = requester; this.target = target; this.timeoutTask = new RequestTimeout(this); if (Config.TELEPORT_REQUEST_TIMEOUT > 0) { this.timeoutTask.runTaskLater(plugin, Config.TELEPORT_REQUEST_TIMEOUT * 20L); } placeholders = TagResolver.resolver( Placeholder.component("requester", requester().displayName()), Placeholder.component("target", target().displayName()) ); } public void accept() { teleport(); target.sendRichMessage(Config.TELEPORT_ACCEPT_TARGET, placeholders); requester.sendRichMessage(Config.TELEPORT_ACCEPT_REQUESTER, placeholders); cancel(); } public void deny() { target.sendRichMessage(Config.TELEPORT_DENIED_TARGET, placeholders); requester.sendRichMessage(Config.TELEPORT_DENIED_REQUESTER, placeholders); cancel(); } protected abstract void teleport(); void playTeleportSounds() { if (Config.TELEPORT_SOUNDS) { new TeleportSounds(target.getLocation(), requester.getLocation()) .runTaskLater(plugin, 1); } } public void cancel() { try { timeoutTask.cancel(); plugin.userManager().getUser(target).request(null); } catch (IllegalStateException ignore) { } } }