Skip to content
Merged
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
85 changes: 41 additions & 44 deletions src/main/java/fr/openmc/core/commands/utils/RTPCommands.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import revxrsal.commands.annotation.Command;
import revxrsal.commands.annotation.Cooldown;
import revxrsal.commands.annotation.Description;
import revxrsal.commands.bukkit.annotation.CommandPermission;

import java.io.File;
import java.util.concurrent.ThreadLocalRandom;

import static net.kyori.adventure.text.format.NamedTextColor.YELLOW;

Expand Down Expand Up @@ -56,7 +56,7 @@ private void loadRTPConfig() {
@Description("Permet de se téléporter à un endroit aléatoire")
@CommandPermission("omc.commands.rtp")
@DynamicCooldown(
group="player:rtp",
group = "player:rtp",
messageKey = "command.utils.rtp.must_wait")
@Cooldown(15)
public void rtp(Player player) {
Expand All @@ -66,57 +66,55 @@ public void rtp(Player player) {
}

private void rtpPlayer(Player player, int tries) {
new BukkitRunnable() {
@Override
public void run() {
if (tryRtp(player))
return;

if ((tries + 1) >= maxTries) {
// On a déjà mis le cooldown au début
player.sendActionBar(TranslationManager.translation("command.utils.rtp.fail"));
return;
}

player.sendActionBar(TranslationManager.translation("command.utils.rtp.try",
Component.text(tries + 1),
Component.text(maxTries)));

new BukkitRunnable() {
@Override
public void run() {
rtpPlayer(player, tries + 1);
Bukkit.getScheduler().runTaskAsynchronously(OMCPlugin.getInstance(), () -> {
int[] coords = generateRandomCoords();
int chunkX = coords[0] >> 4;
int chunkZ = coords[1] >> 4;

World world = player.getWorld();

world.getChunkAtAsync(chunkX, chunkZ).thenAccept(_ -> {
Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> {
Location loc = world.getHighestBlockAt(coords[0], coords[1]).getLocation();

if (isSafe(loc)) {
loc.add(0.5, 1, 0.5);
tpPlayer(player, loc);
return;
}
}.runTaskLaterAsynchronously(OMCPlugin.getInstance(), 20);
}
}.runTaskAsynchronously(OMCPlugin.getInstance());

}
int nextTry = tries + 1;
if (nextTry >= maxTries) {
// On a déjà mis le cooldown au début
player.sendActionBar(TranslationManager.translation("command.utils.rtp.fail"));
return;
}

public boolean tryRtp(Player player) {
Location loc = generateRandomLocation(player.getWorld());
if (isSafe(loc)) {
loc.add(0.5, 1, 0.5);
tpPlayer(player, loc);
return true;
} else {
return false;
}
}
player.sendActionBar(TranslationManager.translation("command.utils.rtp.try",
Component.text(nextTry),
Component.text(maxTries)));

public boolean isSafe(Location loc) {
return loc.getBlock().isSolid() && loc.getBlockY() > 50;
Bukkit.getScheduler().runTaskLater(OMCPlugin.getInstance(),
() -> rtpPlayer(player, nextTry), 20L);
});
});
});
}

public Location generateRandomLocation(World world) {
int radius = (int) (Math.random() * (maxRadius - minRadius + 1)) + minRadius;
float angle = (float) (Math.random() * 2 * Math.PI);
private int[] generateRandomCoords() {
ThreadLocalRandom random = ThreadLocalRandom.current();
int radius = random.nextInt(minRadius, maxRadius + 1);
double angle = random.nextDouble() * 2 * Math.PI;
int x = (int) (Math.cos(angle) * radius);
int z = (int) (Math.sin(angle) * radius);
return world.getHighestBlockAt(x, z).getLocation();
return new int[]{x, z};
}

private boolean isSafe(Location loc) {
return loc.getBlock().isSolid() && loc.getBlockY() > 50;
}

public void tpPlayer(Player player, Location loc) {
private void tpPlayer(Player player, Location loc) {
PlayerUtils.sendFadeTitleTeleport(player, loc);
MessagesManager.sendMessage(player, TranslationManager.translation("command.utils.rtp.success",
Component.text(loc.getBlockX()).color(YELLOW),
Expand All @@ -127,5 +125,4 @@ public void tpPlayer(Player player, Location loc) {
DynamicCooldownManager.use(player.getUniqueId(), "player:rtp", rtpCooldown * 1000L)
);
}

}
Loading