mirror of
https://github.com/RonanPlugins/BetterRTP.git
synced 2025-07-04 00:36:08 +00:00
TpPre & FindLocation Event cancellable
This commit is contained in:
parent
865a6cead9
commit
33a25bccab
2
pom.xml
2
pom.xml
@ -7,7 +7,7 @@
|
|||||||
<groupId>me.SuperRonanCraft</groupId>
|
<groupId>me.SuperRonanCraft</groupId>
|
||||||
<artifactId>BetterRTP</artifactId>
|
<artifactId>BetterRTP</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<version>3.6.0</version>
|
<version>3.6.1</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.source>1.8</maven.compiler.source>
|
<maven.compiler.source>1.8</maven.compiler.source>
|
||||||
|
@ -99,8 +99,8 @@ public class RTP {
|
|||||||
if (getPl().getSettings().isDelayEnabled() && pWorld.isApplyDelay()) {
|
if (getPl().getSettings().isDelayEnabled() && pWorld.isApplyDelay()) {
|
||||||
new RTPDelay(sendi, rtpPlayer, delayTime, cancelOnMove, cancelOnDamage);
|
new RTPDelay(sendi, rtpPlayer, delayTime, cancelOnMove, cancelOnDamage);
|
||||||
} else {
|
} else {
|
||||||
teleport.beforeTeleportInstant(sendi, p);
|
if (!teleport.beforeTeleportInstant(sendi, p))
|
||||||
rtpPlayer.randomlyTeleport(sendi);
|
rtpPlayer.randomlyTeleport(sendi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,10 +24,11 @@ class RTPDelay implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void delay(CommandSender sendi, int delay) {
|
private void delay(CommandSender sendi, int delay) {
|
||||||
getPl().getRTP().getTeleport().beforeTeleportDelay(rtp.getPlayer(), delay);
|
if (!getPl().getRTP().getTeleport().beforeTeleportDelay(rtp.getPlayer(), delay)) {
|
||||||
run = Bukkit.getScheduler().scheduleSyncDelayedTask(BetterRTP.getInstance(), run(sendi, this), delay * 20L);
|
run = Bukkit.getScheduler().scheduleSyncDelayedTask(BetterRTP.getInstance(), run(sendi, this), delay * 20L);
|
||||||
if (cancelOnMove || cancelOnDamage)
|
if (cancelOnMove || cancelOnDamage)
|
||||||
Bukkit.getPluginManager().registerEvents(this, BetterRTP.getInstance());
|
Bukkit.getPluginManager().registerEvents(this, BetterRTP.getInstance());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -60,7 +61,7 @@ class RTPDelay implements Listener {
|
|||||||
HandlerList.unregisterAll(this);
|
HandlerList.unregisterAll(this);
|
||||||
getPl().getRTP().getTeleport().cancelledTeleport(rtp.getPlayer());
|
getPl().getRTP().getTeleport().cancelledTeleport(rtp.getPlayer());
|
||||||
//getPl().getEco().unCharge(rtp.getPlayer(), rtp.pWorld);
|
//getPl().getEco().unCharge(rtp.getPlayer(), rtp.pWorld);
|
||||||
getPl().getCooldowns().removeCooldown(rtp.getPlayer(), rtp.pWorld.getWorld());
|
getPl().getCooldowns().removeCooldown(rtp.getPlayer(), rtp.worldPlayer.getWorld());
|
||||||
getPl().getpInfo().getRtping().put(rtp.getPlayer(), false);
|
getPl().getpInfo().getRtping().put(rtp.getPlayer(), false);
|
||||||
Bukkit.getServer().getPluginManager().callEvent(new RTP_CancelledEvent(rtp.getPlayer()));
|
Bukkit.getServer().getPluginManager().callEvent(new RTP_CancelledEvent(rtp.getPlayer()));
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package me.SuperRonanCraft.BetterRTP.player.rtp;
|
package me.SuperRonanCraft.BetterRTP.player.rtp;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_FindLocationEvent;
|
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_FindLocationEvent;
|
||||||
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueData;
|
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueData;
|
||||||
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueHandler;
|
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueHandler;
|
||||||
@ -18,42 +19,43 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
|
|
||||||
public class RTPPlayer {
|
public class RTPPlayer {
|
||||||
|
|
||||||
private final Player p;
|
@Getter private final Player player;
|
||||||
private final RTP settings;
|
private final RTP settings;
|
||||||
WorldPlayer pWorld;
|
@Getter WorldPlayer worldPlayer;
|
||||||
RTP_TYPE type;
|
@Getter RTP_TYPE type;
|
||||||
int attempts;
|
@Getter int attempts;
|
||||||
List<Location> attemptedLocations = new ArrayList<>();
|
List<Location> attemptedLocations = new ArrayList<>();
|
||||||
|
|
||||||
RTPPlayer(Player p, RTP settings, WorldPlayer pWorld, RTP_TYPE type) {
|
RTPPlayer(Player player, RTP settings, WorldPlayer worldPlayer, RTP_TYPE type) {
|
||||||
this.p = p;
|
this.player = player;
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.pWorld = pWorld;
|
this.worldPlayer = worldPlayer;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
void randomlyTeleport(CommandSender sendi) {
|
void randomlyTeleport(CommandSender sendi) {
|
||||||
if (attempts >= settings.maxAttempts) //Cancel out, too many tries
|
if (attempts >= settings.maxAttempts) //Cancel out, too many tries
|
||||||
metMax(sendi, p);
|
metMax(sendi, player);
|
||||||
else { //Try again to find a safe location
|
else { //Try again to find a safe location
|
||||||
//Find a location from another Plugin
|
//Find a location from another Plugin
|
||||||
RTP_FindLocationEvent event = new RTP_FindLocationEvent(p, pWorld); //Find an external plugin location
|
RTP_FindLocationEvent event = new RTP_FindLocationEvent(this); //Find an external plugin location
|
||||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||||
//Async Location finder
|
//Async Location finder
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
randomlyTeleport(sendi);
|
||||||
|
attempts++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> {
|
Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> {
|
||||||
Location loc;
|
Location loc;
|
||||||
if (event.getLocation() != null) // && WorldPlayer.checkIsValid(event.getLocation(), pWorld))
|
if (event.getLocation() != null) // && WorldPlayer.checkIsValid(event.getLocation(), pWorld))
|
||||||
loc = event.getLocation();
|
loc = event.getLocation();
|
||||||
else {
|
else {
|
||||||
QueueData queueData = QueueHandler.getRandomAsync(pWorld);
|
QueueData queueData = QueueHandler.getRandomAsync(worldPlayer);
|
||||||
if (queueData != null)
|
if (queueData != null)
|
||||||
loc = queueData.getLocation();
|
loc = queueData.getLocation();
|
||||||
else
|
else
|
||||||
loc = WorldPlayer.generateLocation(pWorld);
|
loc = WorldPlayer.generateLocation(worldPlayer);
|
||||||
}
|
}
|
||||||
attempts++; //Add an attempt
|
attempts++; //Add an attempt
|
||||||
//Load chunk and find out if safe location (asynchronously)
|
//Load chunk and find out if safe location (asynchronously)
|
||||||
@ -61,16 +63,16 @@ public class RTPPlayer {
|
|||||||
chunk.thenAccept(result -> {
|
chunk.thenAccept(result -> {
|
||||||
//BetterRTP.debug("Checking location for " + p.getName());
|
//BetterRTP.debug("Checking location for " + p.getName());
|
||||||
Location tpLoc;
|
Location tpLoc;
|
||||||
tpLoc = getSafeLocation(pWorld.getWorldtype(), pWorld.getWorld(), loc, pWorld.getMinY(), pWorld.getMaxY(), pWorld.getBiomes());
|
tpLoc = getSafeLocation(worldPlayer.getWorldtype(), worldPlayer.getWorld(), loc, worldPlayer.getMinY(), worldPlayer.getMaxY(), worldPlayer.getBiomes());
|
||||||
attemptedLocations.add(loc);
|
attemptedLocations.add(loc);
|
||||||
//Valid location?
|
//Valid location?
|
||||||
if (tpLoc != null && checkDepends(tpLoc)) {
|
if (tpLoc != null && checkDepends(tpLoc)) {
|
||||||
tpLoc.add(0.5, 0, 0.5); //Center location
|
tpLoc.add(0.5, 0, 0.5); //Center location
|
||||||
if (getPl().getEco().charge(p, pWorld)) {
|
if (getPl().getEco().charge(player, worldPlayer)) {
|
||||||
tpLoc.setYaw(p.getLocation().getYaw());
|
tpLoc.setYaw(player.getLocation().getYaw());
|
||||||
tpLoc.setPitch(p.getLocation().getPitch());
|
tpLoc.setPitch(player.getLocation().getPitch());
|
||||||
Bukkit.getScheduler().runTask(BetterRTP.getInstance(), () ->
|
Bukkit.getScheduler().runTask(BetterRTP.getInstance(), () ->
|
||||||
settings.teleport.sendPlayer(sendi, p, tpLoc, pWorld.getPrice(), attempts, type, pWorld.getWorldtype()));
|
settings.teleport.sendPlayer(sendi, player, tpLoc, worldPlayer.getPrice(), attempts, type, worldPlayer.getWorldtype()));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
randomlyTeleport(sendi);
|
randomlyTeleport(sendi);
|
||||||
@ -92,7 +94,7 @@ public class RTPPlayer {
|
|||||||
// Compressed code for MaxAttempts being met
|
// Compressed code for MaxAttempts being met
|
||||||
private void metMax(CommandSender sendi, Player p) {
|
private void metMax(CommandSender sendi, Player p) {
|
||||||
settings.teleport.failedTeleport(p, sendi);
|
settings.teleport.failedTeleport(p, sendi);
|
||||||
getPl().getCooldowns().removeCooldown(p, pWorld.getWorld());
|
getPl().getCooldowns().removeCooldown(p, worldPlayer.getWorld());
|
||||||
getPl().getpInfo().getRtping().put(p, false);
|
getPl().getpInfo().getRtping().put(p, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.WORLD_TYPE;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -85,19 +86,28 @@ public class RTPTeleport {
|
|||||||
getPl().getServer().getPluginManager().callEvent(new RTP_TeleportPostEvent(p, loc, oldLoc, type));
|
getPl().getServer().getPluginManager().callEvent(new RTP_TeleportPostEvent(p, loc, oldLoc, type));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void beforeTeleportInstant(CommandSender sendi, Player p) {
|
public boolean beforeTeleportInstant(CommandSender sendi, Player p) {
|
||||||
effects.getSounds().playDelay(p);
|
RTP_TeleportPreEvent event = new RTP_TeleportPreEvent(p);
|
||||||
effects.getTitles().showTitle(RTPEffect_Titles.RTP_TITLE_TYPE.NODELAY, p, p.getLocation(), 0, 0);
|
getPl().getServer().getPluginManager().callEvent(event);
|
||||||
if (effects.getTitles().sendMsg(RTPEffect_Titles.RTP_TITLE_TYPE.NODELAY))
|
if (!event.isCancelled()) {
|
||||||
MessagesCore.SUCCESS_TELEPORT.send(sendi);
|
effects.getSounds().playDelay(p);
|
||||||
getPl().getServer().getPluginManager().callEvent(new RTP_TeleportPreEvent(p));
|
effects.getTitles().showTitle(RTPEffect_Titles.RTP_TITLE_TYPE.NODELAY, p, p.getLocation(), 0, 0);
|
||||||
|
if (effects.getTitles().sendMsg(RTPEffect_Titles.RTP_TITLE_TYPE.NODELAY))
|
||||||
|
MessagesCore.SUCCESS_TELEPORT.send(sendi);
|
||||||
|
}
|
||||||
|
return event.isCancelled();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void beforeTeleportDelay(Player p, int delay) { //Only Delays should call this
|
public boolean beforeTeleportDelay(Player p, int delay) { //Only Delays should call this
|
||||||
effects.getSounds().playDelay(p);
|
RTP_TeleportPreEvent event = new RTP_TeleportPreEvent(p);
|
||||||
effects.getTitles().showTitle(RTPEffect_Titles.RTP_TITLE_TYPE.DELAY, p, p.getLocation(), 0, delay);
|
getPl().getServer().getPluginManager().callEvent(event);
|
||||||
if (effects.getTitles().sendMsg(RTPEffect_Titles.RTP_TITLE_TYPE.DELAY))
|
if (!event.isCancelled()) {
|
||||||
MessagesCore.DELAY.send(p, delay);
|
effects.getSounds().playDelay(p);
|
||||||
|
effects.getTitles().showTitle(RTPEffect_Titles.RTP_TITLE_TYPE.DELAY, p, p.getLocation(), 0, delay);
|
||||||
|
if (effects.getTitles().sendMsg(RTPEffect_Titles.RTP_TITLE_TYPE.DELAY))
|
||||||
|
MessagesCore.DELAY.send(p, delay);
|
||||||
|
}
|
||||||
|
return event.isCancelled();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cancelledTeleport(Player p) { //Only Delays should call this
|
public void cancelledTeleport(Player p) { //Only Delays should call this
|
||||||
|
@ -1,20 +1,25 @@
|
|||||||
package me.SuperRonanCraft.BetterRTP.references.customEvents;
|
package me.SuperRonanCraft.BetterRTP.references.customEvents;
|
||||||
|
|
||||||
|
import me.SuperRonanCraft.BetterRTP.player.rtp.RTPPlayer;
|
||||||
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.RTPWorld;
|
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.RTPWorld;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
//Called when an rtp is finding a valid location
|
//Called when an rtp is finding a valid location
|
||||||
public class RTP_FindLocationEvent extends RTPEvent {
|
public class RTP_FindLocationEvent extends RTPEvent implements Cancellable {
|
||||||
|
|
||||||
Player p;
|
Player p;
|
||||||
RTPWorld world;
|
RTPWorld world;
|
||||||
Location loc; //Used to force a location into find event
|
Location loc; //Used to force a location into find event
|
||||||
|
int attempts;
|
||||||
|
boolean cancelled;
|
||||||
|
|
||||||
public RTP_FindLocationEvent(Player p, RTPWorld world) {
|
public RTP_FindLocationEvent(RTPPlayer rtpPlayer) {
|
||||||
this.p = p;
|
this.p = rtpPlayer.getPlayer();
|
||||||
this.world = world;
|
this.world = rtpPlayer.getWorldPlayer();
|
||||||
|
this.attempts = rtpPlayer.getAttempts();
|
||||||
}
|
}
|
||||||
|
|
||||||
//A location can be pushed in if a developer wants to inject a custom location
|
//A location can be pushed in if a developer wants to inject a custom location
|
||||||
@ -35,4 +40,14 @@ public class RTP_FindLocationEvent extends RTPEvent {
|
|||||||
public Player getPlayer() {
|
public Player getPlayer() {
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCancelled(boolean b) {
|
||||||
|
cancelled = b;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,25 @@
|
|||||||
package me.SuperRonanCraft.BetterRTP.references.customEvents;
|
package me.SuperRonanCraft.BetterRTP.references.customEvents;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
|
|
||||||
public class RTP_TeleportPreEvent extends RTPEvent { //Called upon every rtp call, does not mean player will be teleported
|
public class RTP_TeleportPreEvent extends RTPEvent implements Cancellable { //Called upon every rtp call, does not mean player will be teleported
|
||||||
|
|
||||||
Player p;
|
@Getter Player p;
|
||||||
|
boolean cancelled;
|
||||||
|
|
||||||
public RTP_TeleportPreEvent(Player p) {
|
public RTP_TeleportPreEvent(Player p) {
|
||||||
this.p = p;
|
this.p = p;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
@Override
|
||||||
return p;
|
public boolean isCancelled() {
|
||||||
|
return cancelled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCancelled(boolean b) {
|
||||||
|
cancelled = b;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package me.SuperRonanCraft.BetterRTP.references.rtpinfo;
|
package me.SuperRonanCraft.BetterRTP.references.rtpinfo;
|
||||||
|
|
||||||
import me.SuperRonanCraft.BetterRTP.BetterRTP;
|
import me.SuperRonanCraft.BetterRTP.BetterRTP;
|
||||||
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_FindLocationEvent;
|
|
||||||
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportPostEvent;
|
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportPostEvent;
|
||||||
import me.SuperRonanCraft.BetterRTP.references.database.DatabaseHandler;
|
import me.SuperRonanCraft.BetterRTP.references.database.DatabaseHandler;
|
||||||
import me.SuperRonanCraft.BetterRTP.references.database.DatabaseQueue;
|
import me.SuperRonanCraft.BetterRTP.references.database.DatabaseQueue;
|
||||||
@ -11,10 +10,11 @@ import org.bukkit.Location;
|
|||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
public class QueueHandler implements Listener { //Randomly queues up some safe locations
|
public class QueueHandler implements Listener { //Randomly queues up some safe locations
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user