mirror of
https://github.com/RonanPlugins/BetterRTP.git
synced 2025-08-17 17:15:47 +00:00
teleport during event + extraEffects addon
- portals addon can force ignore delay and cooldowns - Rtp commands were moved after a command was actually executed, fixing addons reload
This commit is contained in:
parent
212b000a35
commit
462b2fa6be
@ -4,6 +4,7 @@ import me.SuperRonanCraft.BetterRTP.BetterRTP;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.addons.flashback.AddonFlashback;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.addons.interfaces.AddonInterface;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.addons.logger.AddonLogger;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.addons.magicStick.AddonMagicStick;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.AddonPortals;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -39,6 +40,7 @@ public class AddonsHandler {
|
||||
FLASH_BACK(new AddonFlashback()),
|
||||
PORTALS(new AddonPortals()),
|
||||
//INTERFACES(new AddonInterface())
|
||||
MAGICSTICK(new AddonMagicStick()),
|
||||
;
|
||||
|
||||
Addon addon;
|
||||
|
@ -0,0 +1,58 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.addons.extraEffects;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Addon;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.util.Files;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class AddonExtraEffects implements Addon {
|
||||
|
||||
private final String name = "ExtraEffects";
|
||||
private final List<Effects> effects = new ArrayList<>(); //List of enabled effects
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return getFile(Files.FILETYPE.CONFIG).getBoolean(name + ".Enabled");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
this.effects.clear();
|
||||
for (Effects effect : Effects.values())
|
||||
if (effect.isEnabled()) {
|
||||
effect.load();
|
||||
this.effects.add(effect);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
for (Effects effect : this.effects)
|
||||
effect.unload();
|
||||
this.effects.clear();
|
||||
}
|
||||
|
||||
enum Effects {
|
||||
SKYHIGH(new ExtraEffectsEffect_Skyhigh());
|
||||
|
||||
private final ExtraEffectsEffect effect;
|
||||
|
||||
Effects(ExtraEffectsEffect effect) {
|
||||
this.effect = effect;
|
||||
}
|
||||
|
||||
boolean isEnabled() {
|
||||
return effect.isEnabled();
|
||||
}
|
||||
|
||||
void load() {
|
||||
effect.load();
|
||||
}
|
||||
|
||||
void unload() {
|
||||
effect.unload();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.addons.extraEffects;
|
||||
|
||||
public interface ExtraEffectsEffect {
|
||||
|
||||
void load();
|
||||
|
||||
boolean isEnabled();
|
||||
|
||||
void unload();
|
||||
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.addons.extraEffects;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportEvent;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Main;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.util.Files;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
//Teleport the player VERY high into the sky
|
||||
public class ExtraEffectsEffect_Skyhigh implements ExtraEffectsEffect, Listener {
|
||||
|
||||
private int offset;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
Files.FILETYPE file = Main.getInstance().getFiles().getType(Files.FILETYPE.CONFIG);
|
||||
this.offset = file.getInt("ExtraEffects.YOffset.Offset");
|
||||
Main.getInstance().getServer().getPluginManager().registerEvents(this, Main.getInstance());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return Main.getInstance().getFiles().getType(Files.FILETYPE.CONFIG).getBoolean("ExtraEffects.YOffset.Enabled");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
HandlerList.unregisterAll(this);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
void tpEvent(RTP_TeleportEvent e) {
|
||||
e.changeLocation(e.getLocation().add(0, offset, 0));
|
||||
}
|
||||
}
|
@ -106,10 +106,10 @@ public class FlashbackDatabase extends Database {
|
||||
);
|
||||
UUID id = p.getUniqueId();
|
||||
ps.setString(1, id.toString());
|
||||
ps.setInt(2, timeGoal.intValue());
|
||||
ps.setLong(2, timeGoal);
|
||||
String serialLocation = LocSerialization.getStringFromLocation(oldLocation);
|
||||
ps.setString(3, serialLocation);
|
||||
ps.setInt(4, timeGoal.intValue());
|
||||
ps.setLong(4, timeGoal);
|
||||
ps.setString(5, serialLocation);
|
||||
ps.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
|
@ -0,0 +1,28 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.addons.magicStick;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTP.BetterRTP;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Addon;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Main;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.addons.magicStick.cmds.MagicStickCommand;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.util.Files;
|
||||
|
||||
public class AddonMagicStick implements Addon {
|
||||
|
||||
public MagicStickMessages msgs = new MagicStickMessages();
|
||||
MagicStickCommand cmd = new MagicStickCommand(this);
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return Main.getInstance().getFiles().getType(Files.FILETYPE.CONFIG).getBoolean("MagicStick.Enabled");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
BetterRTP.getInstance().getCmd().registerCommand(cmd, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.addons.magicStick;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTPAddons.AddonsMessages;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
public class MagicStickMessages implements AddonsMessages {
|
||||
private static final String preM = "MagicStick.";
|
||||
|
||||
public String getHelp() {
|
||||
return getLang().getString("Help.MagicStick");
|
||||
}
|
||||
|
||||
//Give
|
||||
public void getGive(CommandSender sendi, String name) {
|
||||
sms(sendi, getLang().getString(preM + "Give").replace("%name%", name));
|
||||
}
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.addons.magicStick.cmds;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTP.BetterRTP;
|
||||
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand;
|
||||
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommandHelpable;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.addons.magicStick.AddonMagicStick;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class MagicStickCommand implements RTPCommand, RTPCommandHelpable {
|
||||
|
||||
AddonMagicStick pl;
|
||||
|
||||
public MagicStickCommand(AddonMagicStick pl) {
|
||||
this.pl = pl;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return "magicstick";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sendi, String label, String[] args) {
|
||||
if (args.length > 1)
|
||||
for (subCmd subCmd : subCmd.values()) {
|
||||
if (args[1].equalsIgnoreCase(subCmd.name())) {
|
||||
subCmd.cmd.execute(sendi, label, args, pl);
|
||||
return;
|
||||
}
|
||||
}
|
||||
sendi.sendMessage("Invalid argument!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> tabComplete(CommandSender sendi, String[] args) {
|
||||
List<String> list = new ArrayList<>();
|
||||
if (args.length == 2)
|
||||
for (subCmd subCmd : subCmd.values()) {
|
||||
if (subCmd.name().toLowerCase().startsWith(args[1].toLowerCase())) {
|
||||
list.add(subCmd.name().toLowerCase());
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean permission(CommandSender sendi) {
|
||||
return BetterRTP.getInstance().getPerms().checkPerm("betterrtp.addon.portals", sendi);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getHelp() {
|
||||
return pl.msgs.getHelp();
|
||||
}
|
||||
|
||||
private enum subCmd {
|
||||
GIVE(new MagicStickCommand_Give());
|
||||
|
||||
MagicStickCommands cmd;
|
||||
|
||||
subCmd(MagicStickCommands cmd) {
|
||||
this.cmd = cmd;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.addons.magicStick.cmds;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTPAddons.addons.magicStick.AddonMagicStick;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.AddonPortals;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.region.PortalsRegionInfo;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
public class MagicStickCommand_Give implements MagicStickCommands {
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sendi, String label, String[] args, AddonMagicStick addon) {
|
||||
sendi.sendMessage("magicstick give command!");
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.addons.magicStick.cmds;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTPAddons.addons.magicStick.AddonMagicStick;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
public interface MagicStickCommands {
|
||||
|
||||
void execute(CommandSender sendi, String label, String[] args, AddonMagicStick addonPortals);
|
||||
|
||||
}
|
@ -24,7 +24,7 @@ public class AddonPortals implements Addon {
|
||||
public void load() {
|
||||
BetterRTP.getInstance().getCmd().registerCommand(cmd, false);
|
||||
database.load(PortalsDatabase.Columns.values());
|
||||
events.register();
|
||||
events.load();
|
||||
portalsCache.load();
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,7 @@ import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_TYPE;
|
||||
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportPostEvent;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.Main;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.region.PortalsRegionInfo;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.util.Files;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -20,13 +21,16 @@ public class PortalsEvents implements Listener {
|
||||
|
||||
AddonPortals addonPortals;
|
||||
private final HashMap<Player, PortalsRegionInfo> playerPortaling = new HashMap<>();
|
||||
private boolean ignoreDelay, ignoreCooldown;
|
||||
|
||||
PortalsEvents(AddonPortals addonPortals) {
|
||||
this.addonPortals = addonPortals;
|
||||
}
|
||||
|
||||
public void register() {
|
||||
public void load() {
|
||||
Main.getInstance().getServer().getPluginManager().registerEvents(this, Main.getInstance());
|
||||
ignoreDelay = Main.getInstance().getFiles().getType(Files.FILETYPE.CONFIG).getBoolean("Portals.IgnoreDelay");
|
||||
ignoreCooldown = Main.getInstance().getFiles().getType(Files.FILETYPE.CONFIG).getBoolean("Portals.IgnoreCooldown");
|
||||
}
|
||||
|
||||
public void unregiter() {
|
||||
@ -52,7 +56,7 @@ public class PortalsEvents implements Listener {
|
||||
&& ploc.getBlockY() >= Math.min(loc1.getBlockY(), loc2.getBlockY())) {
|
||||
playerPortaling.put(e.getPlayer(), portal);
|
||||
BetterRTP.getInstance().getCmd().tp(e.getPlayer(), e.getPlayer(),
|
||||
e.getPlayer().getWorld().getName(), null, RTP_TYPE.ADDON);
|
||||
e.getPlayer().getWorld().getName(), null, RTP_TYPE.ADDON, ignoreCooldown, ignoreDelay);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
Language-File: 'en.yml'
|
||||
#Addon Flashback
|
||||
|
||||
##Addon Flashback
|
||||
Flashback:
|
||||
Enabled: true
|
||||
Timer:
|
||||
@ -7,11 +8,37 @@ Flashback:
|
||||
Warnings: #Warning messages to send to a player when X amount of time is left
|
||||
- 5: "&eYou have 5 seconds left! Grab all your materials quick!"
|
||||
- 1: "&eHang on!"
|
||||
#Addon Logger
|
||||
|
||||
##Addon Logger
|
||||
Logger:
|
||||
Enabled: true
|
||||
LogToConsole: true
|
||||
Format: 'yyyy-MM-dd HH:mm:ss'
|
||||
#Addon Portals
|
||||
|
||||
##Addon Portals
|
||||
Portals:
|
||||
Enabled: true
|
||||
Enabled: true
|
||||
IgnoreDelay: true
|
||||
IgnoreCooldown: true
|
||||
|
||||
##Addon ExtraEffects
|
||||
ExtraEffects:
|
||||
Enabled: true
|
||||
YOffset:
|
||||
Enabled: true
|
||||
Offset: 50
|
||||
|
||||
##Addon MagicStick
|
||||
MagicStick:
|
||||
Enabled: false
|
||||
GiveFirstJoin:
|
||||
Enabled: true
|
||||
Amount: 1
|
||||
Item:
|
||||
Name: '&d&lMagic RTP Stick &8(Right-Click)'
|
||||
Material: 'Stick'
|
||||
Lore:
|
||||
- ''
|
||||
- '&7Right click this stick and unlock'
|
||||
- '&7a brand new adventure!'
|
||||
Take: true
|
@ -17,6 +17,8 @@ Portals:
|
||||
Prefix: '&e&m-----&6&l BetterRTP &7&lAddons &8| Portals List &e&m-----'
|
||||
Portal: ' &7- &6%name% &8| &7%location%'
|
||||
None: '&7There are no portals! &8Create one with `/rtp portals create`'
|
||||
MagicStick:
|
||||
Give: '&7Magic Stick has been given to &a%player%'
|
||||
|
||||
Usage:
|
||||
Portals:
|
||||
@ -24,4 +26,5 @@ Usage:
|
||||
|
||||
|
||||
Help:
|
||||
Portals: ' &7- &e/%command% portals <loc1, loc2, create> &7- Setup an rtp portal'
|
||||
Portals: ' &7- &e/%command% portals <loc1, loc2, create> &7- Setup an rtp portal'
|
||||
MagicStick: ' &7- &e/%command% magicstick give [player] &7- Give a magic stick to a player'
|
@ -48,9 +48,9 @@ public class Commands {
|
||||
for (RTPCommand cmd : commands) {
|
||||
if (cmd.getName().equalsIgnoreCase(args[0])) {
|
||||
if (cmd.permission(sendi)) {
|
||||
cmd.execute(sendi, label, args);
|
||||
//Command Event
|
||||
Bukkit.getServer().getPluginManager().callEvent(new RTP_CommandEvent(sendi, cmd));
|
||||
cmd.execute(sendi, label, args);
|
||||
} else
|
||||
noPerm(sendi);
|
||||
return;
|
||||
@ -137,21 +137,32 @@ public class Commands {
|
||||
}
|
||||
|
||||
public void tp(Player player, CommandSender sendi, String world, List<String> biomes, RTP_TYPE rtpType) {
|
||||
if (checkDelay(sendi, player)) { //Cooling down or rtp'ing
|
||||
boolean delay = false;
|
||||
if (sendi == player) //Forced?
|
||||
if (pl.getSettings().delayEnabled && delayTimer > 0) //Delay enabled?
|
||||
if (!pl.getPerms().getBypassDelay(player)) //Can bypass?
|
||||
delay = true;
|
||||
pl.getRTP().start(player, sendi, world, biomes, delay, rtpType);
|
||||
this.tp(player, sendi, world, biomes, rtpType, false, false);
|
||||
}
|
||||
|
||||
public void tp(Player player, CommandSender sendi, String world, List<String> biomes, RTP_TYPE rtpType, boolean ignoreCooldown, boolean ignoreDelay) {
|
||||
if (checkRTPing(player, sendi)) { //Is RTP'ing
|
||||
if (!ignoreCooldown || checkCooldown(sendi, player)) { //Is Cooling down
|
||||
boolean delay = false;
|
||||
if (!ignoreDelay && sendi == player) //Forced?
|
||||
if (pl.getSettings().delayEnabled && delayTimer > 0) //Delay enabled?
|
||||
if (!pl.getPerms().getBypassDelay(player)) //Can bypass?
|
||||
delay = true;
|
||||
pl.getRTP().start(player, sendi, world, biomes, delay, rtpType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkDelay(CommandSender sendi, Player player) {
|
||||
private boolean checkRTPing(Player player, CommandSender sendi) {
|
||||
if (rtping.containsKey(player.getUniqueId()) && rtping.get(player.getUniqueId())) {
|
||||
pl.getText().getAlready(sendi);
|
||||
return false;
|
||||
} else if (sendi != player || pl.getPerms().getBypassCooldown(player)) { //Bypassing/Forced?
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean checkCooldown(CommandSender sendi, Player player) {
|
||||
if (sendi != player || pl.getPerms().getBypassCooldown(player)) { //Bypassing/Forced?
|
||||
return true;
|
||||
} else if (cooldowns.enabled) { //Cooling down?
|
||||
UUID id = player.getUniqueId();
|
||||
|
@ -41,17 +41,20 @@ public class RTPTeleport {
|
||||
// CompletableFuture.allOf(asyncChunks.toArray(new CompletableFuture[] {})).cancel(true);
|
||||
// }
|
||||
|
||||
void sendPlayer(final CommandSender sendi, final Player p, final Location loc, final int price,
|
||||
void sendPlayer(final CommandSender sendi, final Player p, final Location location, final int price,
|
||||
final int attempts) throws NullPointerException {
|
||||
Location oldLoc = p.getLocation();
|
||||
loadingTeleport(p, sendi); //Send loading message to player who requested
|
||||
List<CompletableFuture<Chunk>> asyncChunks = getChunks(loc); //Get a list of chunks
|
||||
List<CompletableFuture<Chunk>> asyncChunks = getChunks(location); //Get a list of chunks
|
||||
//playerLoads.put(p, asyncChunks);
|
||||
CompletableFuture.allOf(asyncChunks.toArray(new CompletableFuture[] {})).thenRun(() -> { //Async chunk load
|
||||
new BukkitRunnable() { //Run synchronously
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
RTP_TeleportEvent event = new RTP_TeleportEvent(p, location);
|
||||
getPl().getServer().getPluginManager().callEvent(event);
|
||||
Location loc = event.getLocation();
|
||||
PaperLib.teleportAsync(p, loc).thenRun(new BukkitRunnable() { //Async teleport
|
||||
@Override
|
||||
public void run() {
|
||||
|
@ -0,0 +1,39 @@
|
||||
package me.SuperRonanCraft.BetterRTP.references.customEvents;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
public class RTP_TeleportEvent extends Event {
|
||||
|
||||
Player p;
|
||||
Location loc;
|
||||
private static final HandlerList handler = new HandlerList();
|
||||
|
||||
public RTP_TeleportEvent(Player p, Location loc) {
|
||||
this.p = p;
|
||||
this.loc = loc;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return p;
|
||||
}
|
||||
|
||||
public Location getLocation() {
|
||||
return loc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handler;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handler;
|
||||
}
|
||||
|
||||
public void changeLocation(Location loc) {
|
||||
this.loc = loc;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user