From 36a75a2bd622632881ffbc7b6fd9bec3f0e69de3 Mon Sep 17 00:00:00 2001 From: Sekwah Date: Wed, 8 Apr 2020 17:28:26 +0100 Subject: [PATCH] Added leavedesti --- .../bukkit/AdvancedPortalsCommand.java | 9 ++++++++- .../bukkit/destinations/Destination.java | 18 +++++++++++++----- .../bukkit/listeners/Listeners.java | 15 +++++++++------ .../listeners/PluginMessageReceiver.java | 2 +- .../advancedportals/bukkit/portals/Portal.java | 13 ++++++++++++- src/main/resources/bungee.yml | 4 ++-- src/main/resources/plugin.yml | 2 +- 7 files changed, 46 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/sekwah/advancedportals/bukkit/AdvancedPortalsCommand.java b/src/main/java/com/sekwah/advancedportals/bukkit/AdvancedPortalsCommand.java index 1ec9b03..8e7eabb 100644 --- a/src/main/java/com/sekwah/advancedportals/bukkit/AdvancedPortalsCommand.java +++ b/src/main/java/com/sekwah/advancedportals/bukkit/AdvancedPortalsCommand.java @@ -257,6 +257,9 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter { } else if (startsWithPortalArg("cooldowndelay:", args[i])) { String cooldownDelay = parseArgVariable(args, i, "cooldowndelay:"); extraData.add(new PortalArg("cooldowndelay", cooldownDelay)); + } else if (startsWithPortalArg("leavedesti:", args[i])) { + String leaveDesti = parseArgVariable(args, i, "leavedesti:"); + extraData.add(new PortalArg("leavedesti", leaveDesti)); } } if (!hasName) { @@ -373,7 +376,7 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter { break; case "variables": sender.sendMessage(PluginMessages.customPrefix - + " \u00A77Variables \u00A7c: \u00A7aname, triggerBlock, desti, destination, bungee, permission, command, cooldowndelay"); + + " \u00A77Variables \u00A7c: \u00A7aname, triggerBlock, desti, destination, bungee, permission, command, cooldowndelay, leavedesti"); sender.sendMessage(""); sender.sendMessage("\u00A7aExample command: \u00A7e/portal create name:test triggerId:portal"); break; @@ -782,6 +785,7 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter { boolean needsPermission = false; boolean hasCommand = false; boolean hasCooldownDelay = false; + boolean hasLeaveDesti = false; // TODO change auto complete when quotes are opened and closed. Such as // autocomplete @Player and stuff when specifying commands @@ -847,6 +851,9 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter { if (!hasCooldownDelay) { autoComplete.add("cooldowndelay:"); } + if (!hasLeaveDesti) { + autoComplete.add("leavedesti:"); + } } } if (args.length == 2 && args[0].equalsIgnoreCase("warp")) { diff --git a/src/main/java/com/sekwah/advancedportals/bukkit/destinations/Destination.java b/src/main/java/com/sekwah/advancedportals/bukkit/destinations/Destination.java index 1c02607..8a3280f 100644 --- a/src/main/java/com/sekwah/advancedportals/bukkit/destinations/Destination.java +++ b/src/main/java/com/sekwah/advancedportals/bukkit/destinations/Destination.java @@ -104,7 +104,11 @@ public class Destination { return warp(player, name, false); } - public static boolean warp(Player player, String name, boolean hideActionbar) { + public static boolean warp(Player player, String name, boolean hideActionBar) { + return warp(player, name, false, false); + } + + public static boolean warp(Player player, String name, boolean hideActionbar, boolean noEffects) { ConfigAccessor config = new ConfigAccessor(plugin, "destinations.yml"); if (config.getConfig().getString(name + ".world") != null) { Location loc = player.getLocation(); @@ -118,8 +122,10 @@ public class Destination { loc.setPitch((float) config.getConfig().getDouble(name + ".pos.pitch")); loc.setYaw((float) config.getConfig().getDouble(name + ".pos.yaw")); - WarpEffects.activateParticles(player); - WarpEffects.activateSound(player); + if(!noEffects) { + WarpEffects.activateParticles(player); + WarpEffects.activateSound(player); + } Chunk c = loc.getChunk(); Entity riding = player.getVehicle(); if (!c.isLoaded()) c.load(); @@ -134,8 +140,10 @@ public class Destination { } else { player.teleport(loc, PlayerTeleportEvent.TeleportCause.PLUGIN); } - WarpEffects.activateParticles(player); - WarpEffects.activateSound(player); + if(!noEffects) { + WarpEffects.activateParticles(player); + WarpEffects.activateSound(player); + } if (PORTAL_MESSAGE_DISPLAY == 1) { player.sendMessage(""); diff --git a/src/main/java/com/sekwah/advancedportals/bukkit/listeners/Listeners.java b/src/main/java/com/sekwah/advancedportals/bukkit/listeners/Listeners.java index d2ce617..040b461 100644 --- a/src/main/java/com/sekwah/advancedportals/bukkit/listeners/Listeners.java +++ b/src/main/java/com/sekwah/advancedportals/bukkit/listeners/Listeners.java @@ -80,15 +80,18 @@ public class Listeners implements Listener { Portal.joinCooldown.put(event.getPlayer().getName(), System.currentTimeMillis()); } + @EventHandler + public void onLeaveEvent(PlayerQuitEvent event) { + Player player = event.getPlayer(); + if(player.hasMetadata("leaveDesti")) { + Destination.warp(player, player.getMetadata("leaveDesti").get(0).asString(), + false, true); + } + } + @EventHandler public void onJoinEvent(PlayerJoinEvent event) { Portal.joinCooldown.put(event.getPlayer().getName(), System.currentTimeMillis()); - /* - * if (plugin.PlayerDestiMap.containsKey(event.getPlayer())) { String desti = - * plugin.PlayerDestiMap.get(event.getPlayer()); - * - * Destination.warp(event.getPlayer(), desti); } - */ } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) diff --git a/src/main/java/com/sekwah/advancedportals/bukkit/listeners/PluginMessageReceiver.java b/src/main/java/com/sekwah/advancedportals/bukkit/listeners/PluginMessageReceiver.java index 36c76d6..7d54610 100644 --- a/src/main/java/com/sekwah/advancedportals/bukkit/listeners/PluginMessageReceiver.java +++ b/src/main/java/com/sekwah/advancedportals/bukkit/listeners/PluginMessageReceiver.java @@ -36,7 +36,7 @@ public class PluginMessageReceiver implements PluginMessageListener { if (msgPlayer != null) { plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, - () -> Destination.warp(msgPlayer, targetDestination), + () -> Destination.warp(msgPlayer, targetDestination, false, true), 20L ); } diff --git a/src/main/java/com/sekwah/advancedportals/bukkit/portals/Portal.java b/src/main/java/com/sekwah/advancedportals/bukkit/portals/Portal.java index 9be90bb..96286c0 100644 --- a/src/main/java/com/sekwah/advancedportals/bukkit/portals/Portal.java +++ b/src/main/java/com/sekwah/advancedportals/bukkit/portals/Portal.java @@ -8,9 +8,11 @@ import com.sekwah.advancedportals.bukkit.PluginMessages; import com.sekwah.advancedportals.bukkit.api.portaldata.PortalArg; import com.sekwah.advancedportals.bukkit.destinations.Destination; import com.sekwah.advancedportals.bukkit.effects.WarpEffects; +import com.sekwah.advancedportals.bukkit.listeners.Listeners; import org.bukkit.*; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; +import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.permissions.PermissionAttachment; import org.bukkit.util.Vector; @@ -441,7 +443,7 @@ public class Portal { int portalCooldown = 0; // default cooldowndelay when cooldowndelay is not specified try { portalCooldown = Integer.parseInt(portal.getArg("cooldowndelay")); - } catch (Exception e) { + } catch (Exception ignored) { } if (diff < portalCooldown) { int time = (portalCooldown - diff); @@ -473,6 +475,13 @@ public class Portal { + "\u00A7a."); } + if(portal.hasArg("leavedesti")) { + player.setMetadata("leaveDesti", new FixedMetadataValue(plugin, portal.getArg("leavedesti"))); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { + player.removeMetadata("leaveDesti", plugin); + }, 20 * 10); + } + if (portal.getDestiation() != null) { ByteArrayDataOutput outForList = ByteStreams.newDataOutput(); outForList.writeUTF("PortalEnter"); @@ -487,6 +496,8 @@ public class Portal { outForSend.writeUTF("Connect"); outForSend.writeUTF(bungeeServer); + + portal.inPortal.add(player.getUniqueId()); player.sendPluginMessage(plugin, "BungeeCord", outForSend.toByteArray()); // Down to bungee to sort out the teleporting but yea theoretically they should diff --git a/src/main/resources/bungee.yml b/src/main/resources/bungee.yml index 9438d5c..6ae4d32 100644 --- a/src/main/resources/bungee.yml +++ b/src/main/resources/bungee.yml @@ -1,4 +1,4 @@ main: com.sekwah.advancedportals.bungee.AdvancedPortalsPlugin name: AdvancedPortals -version: 0.3.0 -author: sekwah41 \ No newline at end of file +version: 0.4.0 +author: sekwah41 diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index bd0c9cd..592066a 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ main: com.sekwah.advancedportals.bukkit.AdvancedPortalsPlugin name: AdvancedPortals -version: 0.3.0 +version: 0.4.0 author: sekwah41 description: An advanced portals plugin for bukkit. api-version: 1.13