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
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Plugin version
pluginVersion=4.0.5
pluginVersion=4.0.6

# Java version
javaVersion=21
Expand Down
7 changes: 6 additions & 1 deletion src/main/java/lol/hub/hubtp/Plugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -411,7 +412,11 @@ public void clearOldRequests() {
* Checks if requests are blocked in the config for a specific player.
*/
public boolean isRequestBlock(Player player) {
return this.getConfig().getBoolean("requests-blocked-" + player.getUniqueId());
return isRequestBlock(player.getUniqueId());
}

public boolean isRequestBlock(UUID uuid) {
return this.getConfig().getBoolean("requests-blocked-" + uuid);
}

/**
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/lol/hub/hubtp/Request.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
import org.bukkit.entity.Player;

public record Request(PlayerData target, PlayerData requester) {
static Request of(Player target, Player requester) {
return new Request(PlayerData.of(target), PlayerData.of(requester));
static Request of(PlayerData target, Player requester) {
return new Request(target, PlayerData.of(requester));
}

boolean isSamePlayers(Player target, Player requester) {
return this.target.uuid().equals(target.getUniqueId()) && this.requester.uuid().equals(requester.getUniqueId());
boolean isSamePlayers(PlayerData target, Player requester) {
return this.target.uuid().equals(target.uuid()) && this.requester.uuid().equals(requester.getUniqueId());
}
}
12 changes: 12 additions & 0 deletions src/main/java/lol/hub/hubtp/RequestManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,19 @@ static void clearOldRequests(int timeoutValue) {
}

public static void addRequest(Player target, Player requester) {
addRequest(PlayerData.of(target), requester);
}

public static void addRequest(PlayerData target, Player requester) {
removeRequests(target, requester);
pendingRequests.put(Request.of(target, requester), System.currentTimeMillis());
}

public static void removeRequests(Player target, Player requester) {
removeRequests(PlayerData.of(target), requester);
}

public static void removeRequests(PlayerData target, Player requester) {
for (Request request : pendingRequests.keySet()) {
if (request.isSamePlayers(target, requester)) {
pendingRequests.remove(request);
Expand Down Expand Up @@ -73,6 +81,10 @@ public static List<Request> cancelRequestsByRequester(Player requester, String t
}

public static boolean isRequestActive(Player target, Player requester) {
return isRequestActive(PlayerData.of(target), requester);
}

public static boolean isRequestActive(PlayerData target, Player requester) {
for (Request request : pendingRequests.keySet()) {
if (request.isSamePlayers(target, requester)) {
return true;
Expand Down
95 changes: 69 additions & 26 deletions src/main/java/lol/hub/hubtp/commands/AskCmd.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,80 @@ public AskCmd(Plugin plugin, PluginCommand pluginCommand) {

@Override
public void run(Player commandSender, String targetName) {
if (Config.spawnTpDeny() && Players.isAtSpawn(commandSender)) {
Log.debug("Denying teleport request while in spawn area from " + commandSender.getName() + " to " + targetName + ".");

commandSender.sendMessage(
Component.text("You are not allowed to teleport while in the spawn area!", NamedTextColor.RED)
);
return;
}

if (plugin.isRequestBlock(commandSender)) {
commandSender.sendMessage(
Component.text("Unable to send teleport requests while ignoring incoming requests!", NamedTextColor.RED)
);
return;
}

if (!Config.allowMultiTargetRequest() && RequestManager.isRequestActiveByRequester(commandSender)) {
commandSender.sendMessage(
Component.text("Please wait for your existing request to be accepted or denied.",
NamedTextColor.RED)
);
return;
}

var target = Players.getOnlinePlayer(plugin.getServer(), targetName);

// an unreachable target still gets a request nobody delivers, so offline and vanished look alike
if (target == null) {
var targetUuid = Players.getPlayerUUID(plugin.getServer(), targetName);

if (targetUuid != null) {
if (Ignores.get(targetUuid, commandSender.getUniqueId())) {
commandSender.sendMessage(
Component.text(targetName, NamedTextColor.RED)
.append(Component.text(" is ignoring your tpa requests!"))
);
return;
}

if (Ignores.get(commandSender.getUniqueId(), targetUuid)) {
commandSender.sendMessage(
Component.text("You are ignoring ", NamedTextColor.RED)
.append(Component.text(targetName))
.append(Component.text(". Cannot send teleport requests."))
);
return;
}

if (plugin.isRequestBlock(targetUuid)) {
commandSender.sendMessage(
Component.text(targetName, NamedTextColor.RED)
.append(Component.text(" is currently not accepting any teleport requests!"))
);
return;
}

var targetData = new PlayerData(targetName, targetUuid);

if (RequestManager.isRequestActive(targetData, commandSender)) {
commandSender.sendMessage(
Component.text("Please wait for ", NamedTextColor.RED)
.append(Component.text(targetName))
.append(Component.text(" to accept or deny your request."))
);
return;
}

RequestManager.addRequest(targetData, commandSender);
}

commandSender.sendMessage(
Component.text("Player ", NamedTextColor.RED)
Component.text("Request sent to ", NamedTextColor.GOLD)
.append(Component.text(targetName))
.append(Component.text(" is not online."))
.append(Component.text("."))
);
return;
}
Expand All @@ -44,15 +111,6 @@ public void run(Player commandSender, String targetName) {
return;
}

if (Config.spawnTpDeny() && Players.isAtSpawn(commandSender)) {
Log.debug("Denying teleport request while in spawn area from " + commandSender.getName() + " to " + target.getName() + ".");

commandSender.sendMessage(
Component.text("You are not allowed to teleport while in the spawn area!", NamedTextColor.RED)
);
return;
}

if (plugin.isRequestBlock(target)) {
commandSender.sendMessage(
Component.text(target.getName(), NamedTextColor.RED)
Expand All @@ -61,13 +119,6 @@ public void run(Player commandSender, String targetName) {
return;
}

if (plugin.isRequestBlock(commandSender)) {
commandSender.sendMessage(
Component.text("Unable to send teleport requests while ignoring incoming requests!", NamedTextColor.RED)
);
return;
}

if (Config.distanceLimit() &&
Players.getOverworldXzVector(commandSender).distance(Players.getOverworldXzVector(target)) > Config.distanceLimitRadius()) {
Log.debug("Denying teleport request while out of range from " + commandSender.getName() + " to " + target.getName() + ".");
Expand All @@ -89,14 +140,6 @@ public void run(Player commandSender, String targetName) {
return;
}

if (!Config.allowMultiTargetRequest() && RequestManager.isRequestActiveByRequester(commandSender)) {
commandSender.sendMessage(
Component.text("Please wait for your existing request to be accepted or denied.",
NamedTextColor.RED)
);
return;
}

commandSender.sendMessage(
Component.text("Request sent to ", NamedTextColor.GOLD)
.append(Component.text(target.getName()))
Expand Down
9 changes: 8 additions & 1 deletion src/main/java/lol/hub/hubtp/util/Players.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,14 @@
public class Players {

public static Player getOnlinePlayer(Server server, String name) {
return server.getOnlinePlayers().stream().filter(p -> p.getName().equals(name)).findAny().orElse(null);
return server.getOnlinePlayers().stream().filter(p -> p.getName().equals(name) && !isVanished(p)).findAny().orElse(null);
}

// vanished players count as offline
private static boolean isVanished(Player player) {
return player.hasMetadata("vanished")
&& !player.getMetadata("vanished").isEmpty()
&& player.getMetadata("vanished").get(0).asBoolean();
}

public static UUID getPlayerUUID(Server server, String name) {
Expand Down