Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,16 @@
import com.eternalcode.core.injector.annotations.component.Service;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import java.util.ArrayList;
import java.time.Instant;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@Service
class TeleportRequestService {

private final Cache<UUID, UUID> requests;
private final Cache<UUID, Request> requests;

@Inject
TeleportRequestService(TeleportRequestSettings settings) {
Expand All @@ -23,30 +24,26 @@ class TeleportRequestService {
}

void createRequest(UUID requester, UUID target) {
this.requests.put(requester, target);
this.requests.put(requester, new Request(target, Instant.now()));
}

void removeRequest(UUID requester) {
this.requests.asMap().remove(requester);
}

boolean hasRequest(UUID requester, UUID target) {
UUID foundTarget = this.requests.getIfPresent(requester);
return foundTarget != null && foundTarget.equals(target);
Request request = this.requests.getIfPresent(requester);
return request != null && request.target().equals(target);
}

List<UUID> findRequests(UUID target) {
Map<UUID, UUID> map = this.requests.asMap();

List<UUID> requesters = new ArrayList<>();

for (Map.Entry<UUID, UUID> entry : map.entrySet()) {
if (entry.getValue().equals(target)) {
requesters.add(entry.getKey());
}
}

return requesters;
return this.requests.asMap().entrySet().stream()
.filter(entry -> entry.getValue().target().equals(target))
.sorted(Map.Entry.comparingByValue(Comparator.comparing(Request::createdAt).reversed()))
.map(Map.Entry::getKey)
.toList();
}

private record Request(UUID target, Instant createdAt) {}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import dev.rollczi.litecommands.annotations.execute.Execute;
import dev.rollczi.litecommands.annotations.permission.Permission;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import org.bukkit.Server;
import org.bukkit.entity.Player;
Expand All @@ -34,6 +35,24 @@ class TpaAcceptCommand {
this.server = server;
}

@Execute
@DescriptionDocs(description = "Accept the last received teleport request")
void executeLatest(@Sender Player player) {
Player target = this.requestService.findRequests(player.getUniqueId()).stream()
.map(this.server::getPlayer)
.filter(Objects::nonNull)
.findFirst()
.orElse(null);

if (target == null) {
this.noticeService.player(player.getUniqueId(), translation -> translation.tpa().tpaAcceptNoRequestMessage());

return;
}

this.executeTarget(player, target);
}

@Execute
@DescriptionDocs(description = "Accept teleport request", arguments = "<player>")
void executeTarget(@Sender Player player, @Arg(RequesterArgument.KEY) Player target) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@
import com.eternalcode.core.injector.annotations.component.Service;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import java.util.ArrayList;
import java.time.Instant;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@Service
class TeleportHereRequestService {

private final Cache<UUID, UUID> requests;
private final Cache<UUID, Request> requests;

@Inject
TeleportHereRequestService(TeleportRequestSettings settings) {
Expand All @@ -24,37 +25,26 @@ class TeleportHereRequestService {
}

void createRequest(UUID requester, UUID target) {
this.requests.put(requester, target);
this.requests.put(requester, new Request(target, Instant.now()));
}

void removeRequest(UUID requester) {
this.requests.asMap().remove(requester);
}

boolean hasRequest(UUID requester, UUID target) {
Map<UUID, UUID> map = this.requests.asMap();

for (Map.Entry<UUID, UUID> entry : map.entrySet()) {
if (entry.getKey().equals(requester) && entry.getValue().equals(target)) {
return true;
}
}

return false;
Request request = this.requests.getIfPresent(requester);
return request != null && request.target().equals(target);
}

List<UUID> findRequests(UUID target) {
Map<UUID, UUID> map = this.requests.asMap();

List<UUID> requesters = new ArrayList<>();

for (Map.Entry<UUID, UUID> entry : map.entrySet()) {
if (entry.getValue().equals(target)) {
requesters.add(entry.getKey());
}
}

return requesters;
return this.requests.asMap().entrySet().stream()
.filter(entry -> entry.getValue().target().equals(target))
.sorted(Map.Entry.comparingByValue(Comparator.comparing(Request::createdAt).reversed()))
.map(Map.Entry::getKey)
.toList();
}

private record Request(UUID target, Instant createdAt) {}

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import dev.rollczi.litecommands.annotations.execute.Execute;
import dev.rollczi.litecommands.annotations.permission.Permission;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import org.bukkit.Server;
import org.bukkit.entity.Player;
Expand All @@ -34,28 +35,49 @@ class TpaHereActionCommand {
this.server = server;
}

@Execute(name = "tpahereaccept")
@Permission("eternalcore.tpaccept")
@DescriptionDocs(description = "Accept the last received teleport here request")
void acceptLatest(@Sender Player player) {
Player target = this.requestService.findRequests(player.getUniqueId()).stream()
.map(this.server::getPlayer)
.filter(Objects::nonNull)
.findFirst()
.orElse(null);

if (target == null) {
this.noticeService.player(player.getUniqueId(), translation -> translation.tpa().tpaAcceptNoRequestMessage());

return;
}

this.accept(player, target);
}

@Execute(name = "tpahereaccept")
@Permission("eternalcore.tpaccept")
void accept(@Sender Player player, @Arg(SelfRequesterArgument.KEY) Player target) {
UUID playerId = player.getUniqueId();

this.teleportTaskService.createTeleport(
player.getUniqueId(),
playerId,
PositionAdapter.convert(player.getLocation()),
PositionAdapter.convert(target.getLocation()),
this.settings.tpaTimer()
);

this.requestService.removeRequest(target.getUniqueId());
this.requestService.removeRequest(playerId);

this.noticeService
.create()
.player(player.getUniqueId())
.player(playerId)
.notice(translation -> translation.tpa().tpaAcceptMessage())
.placeholder("{PLAYER}", target.getName())
.send();

this.noticeService
.create()
.player(target.getUniqueId())
.player(playerId)
.notice(translation -> translation.tpa().tpaAcceptReceivedMessage())
.placeholder("{PLAYER}", player.getName())
.send();
Expand All @@ -65,18 +87,19 @@ void accept(@Sender Player player, @Arg(SelfRequesterArgument.KEY) Player target
@Permission("eternalcore.tpahere.deny")
@DescriptionDocs(description = "Deny a teleport here request")
void executeTarget(@Sender Player player, @Arg(SelfRequesterArgument.KEY) Player target) {
this.requestService.removeRequest(target.getUniqueId());
UUID playerId = player.getUniqueId();
this.requestService.removeRequest(playerId);

this.noticeService
.create()
.player(player.getUniqueId())
.player(playerId)
.notice(translation -> translation.tpa().tpaDenyDoneMessage())
.placeholder("{PLAYER}", target.getName())
.send();

this.noticeService
.create()
.player(target.getUniqueId())
.player(playerId)
.notice(translation -> translation.tpa().tpaDenyReceivedMessage())
.placeholder("{PLAYER}", player.getName())
.send();
Expand All @@ -86,10 +109,11 @@ void executeTarget(@Sender Player player, @Arg(SelfRequesterArgument.KEY) Player
@Permission("eternalcore.tpahere.deny")
@DescriptionDocs(description = "Deny all teleport here requests")
void executeAll(@Sender Player player) {
List<UUID> requests = this.requestService.findRequests(player.getUniqueId());
UUID playerId = player.getUniqueId();
List<UUID> requests = this.requestService.findRequests(playerId);

if (requests.isEmpty()) {
this.noticeService.player(player.getUniqueId(), translation -> translation.tpa().tpaDenyNoRequestMessage());
this.noticeService.player(playerId, translation -> translation.tpa().tpaDenyNoRequestMessage());
return;
}

Expand All @@ -107,7 +131,7 @@ void executeAll(@Sender Player player) {
}
}

this.noticeService.player(player.getUniqueId(), translation -> translation.tpa().tpaDenyAllDenied());
this.noticeService.player(playerId, translation -> translation.tpa().tpaDenyAllDenied());
}

}
Loading