Skip to content
This repository was archived by the owner on Oct 12, 2025. It is now read-only.
23 changes: 13 additions & 10 deletions src/main/java/fr/communaywen/core/AywenCraftPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import fr.communaywen.core.claim.ClaimListener;
import fr.communaywen.core.claim.GamePlayer;
import fr.communaywen.core.claim.RegionManager;
import fr.communaywen.core.clockinfos.tasks.CompassClockTask;
import fr.communaywen.core.commands.credits.CreditCommand;
import fr.communaywen.core.commands.credits.FeatureCommand;
import fr.communaywen.core.commands.economy.AdminShopCommand;
Expand All @@ -16,22 +17,21 @@
import fr.communaywen.core.commands.explosion.ExplodeRandomCommand;
import fr.communaywen.core.commands.explosion.FBoomCommand;
import fr.communaywen.core.commands.fun.*;
import fr.communaywen.core.commands.staff.ReportCommands;
import fr.communaywen.core.commands.utils.*;
import fr.communaywen.core.commands.teleport.RTPCommand;
import fr.communaywen.core.commands.teleport.SpawnCommand;
import fr.communaywen.core.commands.link.LinkCommand;
import fr.communaywen.core.commands.link.ManualLinkCommand;
import fr.communaywen.core.commands.socials.DiscordCommand;
import fr.communaywen.core.commands.socials.GithubCommand;
import fr.communaywen.core.commands.staff.ReportCommands;
import fr.communaywen.core.commands.teams.TeamAdminCommand;
import fr.communaywen.core.commands.teams.TeamCommand;
import fr.communaywen.core.commands.teleport.RTPCommand;
import fr.communaywen.core.commands.teleport.SpawnCommand;
import fr.communaywen.core.commands.utils.*;
import fr.communaywen.core.customitems.commands.ShowCraftCommand;
import fr.communaywen.core.customitems.listeners.CIBreakBlockListener;
import fr.communaywen.core.customitems.listeners.CIEnchantListener;
import fr.communaywen.core.customitems.listeners.CIPrepareAnvilListener;
import fr.communaywen.core.fallblood.BandageRecipe;
import fr.communaywen.core.clockinfos.tasks.CompassClockTask;
import fr.communaywen.core.friends.commands.FriendsCommand;
import fr.communaywen.core.levels.LevelsCommand;
import fr.communaywen.core.levels.LevelsListeners;
Expand All @@ -50,7 +50,10 @@
import fr.communaywen.core.trade.TradeAcceptCommand;
import fr.communaywen.core.trade.TradeCommand;
import fr.communaywen.core.trade.TradeListener;
import fr.communaywen.core.utils.*;
import fr.communaywen.core.utils.DiscordWebhook;
import fr.communaywen.core.utils.LinkerAPI;
import fr.communaywen.core.utils.MOTDChanger;
import fr.communaywen.core.utils.PermissionCategory;
import fr.communaywen.core.utils.command.InteractiveHelpMenu;
import lombok.Getter;
import lombok.SneakyThrows;
Expand All @@ -59,6 +62,8 @@
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.inventory.Inventory;
Expand All @@ -72,12 +77,9 @@
import revxrsal.commands.autocomplete.SuggestionProvider;
import revxrsal.commands.bukkit.BukkitCommandHandler;

import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.io.File;

public final class AywenCraftPlugin extends JavaPlugin {
public static ArrayList<Player> frozenPlayers = new ArrayList<>();
Expand Down Expand Up @@ -244,6 +246,7 @@ public void run() {
new ClaimListener(),
new FarineListener(),
new FallBloodListener(),
new RTPCommand(this),
new CIBreakBlockListener(managers.getCustomItemsManager()),
new CIEnchantListener(managers.getCustomItemsManager()),
new CIPrepareAnvilListener(managers.getCustomItemsManager())
Expand Down
128 changes: 94 additions & 34 deletions src/main/java/fr/communaywen/core/commands/teleport/RTPCommand.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,38 @@
package fr.communaywen.core.commands.teleport;

import dev.lone.itemsadder.api.CustomStack;
import fr.communaywen.core.AywenCraftPlugin;
import fr.communaywen.core.credit.Credit;
import fr.communaywen.core.credit.Feature;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.event.HoverEvent;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.entity.Player;
import revxrsal.commands.annotation.Command;
import revxrsal.commands.annotation.Description;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable;
import revxrsal.commands.annotation.*;
import revxrsal.commands.bukkit.annotation.CommandPermission;

import java.util.HashMap;
import java.util.UUID;


@Feature("RTP")
@Credit("misieur")
public class RTPCommand {
@Command({"rtp", "randomteleportation"})
@Description("Téléportation aléatoire")
@CommandPermission("ayw.command.rtp")
public class RTPCommand implements Listener {
private final String RTP_WAND_NAME;
private final AywenCraftPlugin plugin;

// Configuration values
Expand All @@ -27,6 +43,7 @@ public class RTPCommand {
private final int MIN_Z;
private final int MAX_Z;
private int MAX_TRY;
private String MINE_NAME;

private final HashMap<UUID, Long> cooldowns = new HashMap<>();

Expand All @@ -43,46 +60,89 @@ public RTPCommand(AywenCraftPlugin plugin) {
MIN_Z = plugin.getConfig().getInt("rtp.minz");
MAX_Z = plugin.getConfig().getInt("rtp.maxz");
MAX_TRY = plugin.getConfig().getInt("rtp.max_try");
RTP_WAND_NAME = plugin.getConfig().getString("rtp.rtp_wand");
MINE_NAME = plugin.getConfig().getString("mine.name");

}

@SuppressWarnings("deprecation")
@Command({"rtp", "randomteleportation"})
@Description("Téléportation aléatoire")
@CommandPermission("ayw.command.rtp")

@DefaultFor("~")
public void onCommand(Player player) {
UUID playerId = player.getUniqueId();
long Time = System.currentTimeMillis() / 1000;
long ExactTime = System.currentTimeMillis();
if (player.getWorld().getName().equals(MINE_NAME)) {
UUID playerId = player.getUniqueId();
long Time = System.currentTimeMillis() / 1000;
long ExactTime = System.currentTimeMillis();

if (cooldowns.containsKey(playerId)) {
long lastUsed = cooldowns.get(playerId);
long timeSinceLastUse = Time - lastUsed;
if (cooldowns.containsKey(playerId)) {
long lastUsed = cooldowns.get(playerId);
long timeSinceLastUse = Time - lastUsed;

if (timeSinceLastUse < COOLDOWN_TIME) {
long timeLeft = COOLDOWN_TIME - timeSinceLastUse;
return;
}
}
World world = player.getWorld();
for (int i = 1; i <= MAX_TRY; i++) {
int x = (int) (Math.random() * (MAX_X - MIN_X) + MIN_X);
int z = (int) (Math.random() * (MAX_Z - MIN_Z) + MIN_Z);
if (!world.getBiome(new Location(world, x, 64, z)).equals(Biome.RIVER) || !world.getBiome(new Location(world, x, 64, z)).toString().contains("OCEAN")) {
int y = world.getHighestBlockAt(new Location(world, x, 64, z)).getY();
Location location = new Location(world, x, y + 1, z);
if (new Location(world, x, y, z).getBlock().getType().isSolid()) {
player.teleport(location);
player.sendMessage(" §aRTP réussi x: §f" + x + " §ay: §f" + y + " §az: §f" + z);
player.sendTitle(" §aRTP réussi", "x: " + x + " y: " + y + " z: " + z);
cooldowns.put(playerId, Time);
if (timeSinceLastUse < COOLDOWN_TIME) {
long timeLeft = COOLDOWN_TIME - timeSinceLastUse;
player.sendActionBar("Veyez attendre "+timeLeft+"s");
return;
}
}
if (i == 3) {
player.sendTitle(" §cErreur", "/rtp");
cooldowns.put(playerId, Time - COOLDOWN_TIME + COOLDOWN_ERROR);
}
World world = player.getWorld();
cooldowns.put(playerId, Time - COOLDOWN_TIME + COOLDOWN_ERROR);
new BukkitRunnable() {
@Override
public void run() {
for (int i = 1; i <= MAX_TRY; i++) {
int x = (int) (Math.random() * (MAX_X - MIN_X) + MIN_X);
int z = (int) (Math.random() * (MAX_Z - MIN_Z) + MIN_Z);
if (!world.getBiome(new Location(world, x, 64, z)).equals(Biome.RIVER) || !world.getBiome(new Location(world, x, 64, z)).toString().contains("OCEAN")) {
int y = world.getHighestBlockAt(new Location(world, x, 64, z)).getY();
Location location = new Location(world, x, y + 1, z);
if (new Location(world, x, y, z).getBlock().getType().isSolid()) {
new BukkitRunnable() {
@Override
public void run() {
player.teleport(location);
player.sendMessage(" §aRTP réussi x: §f" + x + " §ay: §f" + y + " §az: §f" + z);
player.sendTitle(" §aRTP réussi", "x: " + x + " y: " + y + " z: " + z);
cooldowns.put(playerId, Time);
}
}.runTask(plugin);
return;
}
} else if (i >= 3) {
new BukkitRunnable() {
@Override
public void run() {
player.sendTitle(" §cErreur", "");
cooldowns.put(playerId, Time - COOLDOWN_TIME + COOLDOWN_ERROR);
}
}.runTask(plugin);
return;
}
}
}
}.runTaskAsynchronously(plugin);
}
else{
player.sendMessage( Component.text("§c❌§7Le /rtp n'es disponible que dans le monde minage pour utiliser le rtp dans l'overworld veyez utiliser le RTPWand [§f§nvoir le craft§r§7]")
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND,"/rtp craft"))
.hoverEvent(HoverEvent.showText(Component.text("Clique pour voir le craft"))));
}
}
@Subcommand("craft")
@Description("Afficher le craft")
public void craft(Player player) {
player.openInventory(getInventory());
}
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
if (e.getWhoClicked().getOpenInventory().getTitle().toString().contains("§f\uF809\uE016\uF801\uF829\uF80C\uF80A\uF808\uF807§0RTP Wand\uF82C\uF82A\uF828\uF827")) {
e.setCancelled(true);
}
}
public Inventory getInventory(){
Inventory inv = Bukkit.createInventory(null, 54, "§f\uF809\uE016\uF801\uF829\uF80C\uF80A\uF808\uF807§0RTP Wand\uF82C\uF82A\uF828\uF827");
inv.setItem(2, new ItemStack(Material.ENDER_PEARL,1));
inv.setItem(11, new ItemStack(Material.STICK,1));
inv.setItem(20, new ItemStack(Material.STICK,1));
inv.setItem(16, CustomStack.getInstance(RTP_WAND_NAME).getItemStack());
return inv;
}
}
105 changes: 71 additions & 34 deletions src/main/java/fr/communaywen/core/listeners/RTPWand.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,23 @@

import dev.lone.itemsadder.api.CustomStack;
import fr.communaywen.core.AywenCraftPlugin;
import org.bukkit.Location;
import org.bukkit.World;
import net.kyori.adventure.text.Component;
import org.bukkit.*;
import org.bukkit.block.Biome;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable;

import java.util.HashMap;
import java.util.UUID;

import static dev.lone.itemsadder.api.ItemsAdder.getCustomItemDurability;
import static dev.lone.itemsadder.api.ItemsAdder.setCustomItemDurability;

public class RTPWand implements Listener {

private final AywenCraftPlugin plugin;
Expand All @@ -24,11 +28,10 @@ public class RTPWand implements Listener {
private int COOLDOWN_ERROR;
private int MIN_X;
private int MAX_X;
private int MIN_Y;
private int MAX_Y;
private int MIN_Z;
private int MAX_Z;
private int MAX_TRY;

private String RTP_WAND_NAME;

private final HashMap<UUID, Long> cooldowns = new HashMap<>();
Expand Down Expand Up @@ -59,42 +62,76 @@ public void onPlayerInteract(PlayerInteractEvent event) {
CustomStack customStack = CustomStack.byItemStack(item);
if (customStack != null && customStack.getNamespacedID().equals(RTP_WAND_NAME)) {
event.setCancelled(true);
UUID playerId = player.getUniqueId();
long Time = System.currentTimeMillis() / 1000;
long ExactTime = System.currentTimeMillis();
if (player.getWorld().getName().equals("world")) {

if (cooldowns.containsKey(playerId)) {
long lastUsed = cooldowns.get(playerId);
long timeSinceLastUse = Time - lastUsed;
UUID playerId = player.getUniqueId();
long Time = System.currentTimeMillis() / 1000;
long ExactTime = System.currentTimeMillis();

if (timeSinceLastUse < COOLDOWN_TIME) {
long timeLeft = COOLDOWN_TIME - timeSinceLastUse;
return;
}
}
World world = player.getWorld();
for (int i = 1; i <= MAX_TRY; i++) {
int x = (int) (Math.random() * (MAX_X - MIN_X) + MIN_X);
int z = (int) (Math.random() * (MAX_Z - MIN_Z) + MIN_Z);
if (!world.getBiome(new Location(world, x, 64, z)).equals(Biome.RIVER) || !world.getBiome(new Location(world, x, 64, z)).toString().contains("OCEAN")) {
int y = world.getHighestBlockAt(new Location(world, x, 64, z)).getY();
Location location = new Location(world, x, y + 1, z);
if (new Location(world, x, y, z).getBlock().getType().isSolid()) {
player.teleport(location);
player.sendMessage(" §aRTP réussi x: §f" + x + " §ay: §f" + y + " §az: §f" + z);
player.sendTitle(" §aRTP réussi", "x: " + x + " y: " + y + " z: " + z);
cooldowns.put(playerId, Time);
player.setCooldown(item.getType(), COOLDOWN_TIME * 20);
if (cooldowns.containsKey(playerId)) {
long lastUsed = cooldowns.get(playerId);
long timeSinceLastUse = Time - lastUsed;

if (timeSinceLastUse < COOLDOWN_TIME) {
long timeLeft = COOLDOWN_TIME - timeSinceLastUse;
return;
}
}
if (i == 3) {
player.sendTitle(" §cErreur", "");
cooldowns.put(playerId, Time - COOLDOWN_TIME + COOLDOWN_ERROR);
player.setCooldown(item.getType(), COOLDOWN_ERROR * 20);
}
World world = player.getWorld();
cooldowns.put(playerId, Time - COOLDOWN_TIME + COOLDOWN_ERROR);
new BukkitRunnable() {
@Override
public void run() {
for (int i = 1; i <= MAX_TRY; i++) {
int x = (int) (Math.random() * (MAX_X - MIN_X) + MIN_X);
int z = (int) (Math.random() * (MAX_Z - MIN_Z) + MIN_Z);
if (!world.getBiome(new Location(world, x, 64, z)).equals(Biome.RIVER) || !world.getBiome(new Location(world, x, 64, z)).toString().contains("OCEAN")) {
int y = world.getHighestBlockAt(new Location(world, x, 64, z)).getY();
Location location = new Location(world, x, y + 1, z);
if (new Location(world, x, y, z).getBlock().getType().isSolid()) {
new BukkitRunnable() {
@Override
public void run() {
player.teleport(location);
player.sendMessage(" §aRTP réussi x: §f" + x + " §ay: §f" + y + " §az: §f" + z);
player.sendTitle(" §aRTP réussi", "x: " + x + " y: " + y + " z: " + z);
cooldowns.put(playerId, Time);
player.setCooldown(item.getType(), COOLDOWN_TIME * 20);
if (getCustomItemDurability(item) <= 1) {
player.getInventory().remove(item);
new BukkitRunnable() {
@Override
public void run() {
player.playSound(player, Sound.ENTITY_ITEM_BREAK,5,1);
}
}.runTaskLater(plugin,1);
}
else{
setCustomItemDurability(item,getCustomItemDurability(item)-1);
}
}
}.runTask(plugin);
return;
}
} else if (i >= 3) {
new BukkitRunnable() {
@Override
public void run() {
player.sendTitle(" §cErreur", "");
cooldowns.put(playerId, Time - COOLDOWN_TIME + COOLDOWN_ERROR);
player.setCooldown(item.getType(), COOLDOWN_ERROR * 20);
}
}.runTask(plugin);
return;
}
}
}
}.runTaskAsynchronously(plugin);
}
else{
player.sendActionBar( Component.text("§cLe RTPWand n'es disponible que dans l'overworld"));
}
}
}
}
}
}