73 lines
2.2 KiB
Java
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) {
|
|
}
|
|
}
|
|
}
|