Essentia/plugin/src/main/java/com/alttd/essentia/request/EssentiaRequest.java
2024-07-28 12:52:55 +02:00

73 lines
2.2 KiB
Java

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) {
}
}
}