diff --git a/src/main/java/com/sekwah/advancedportals/bukkit/AdvancedPortalsCommand.java b/src/main/java/com/sekwah/advancedportals/bukkit/AdvancedPortalsCommand.java index 9acca52..6adbabc 100644 --- a/src/main/java/com/sekwah/advancedportals/bukkit/AdvancedPortalsCommand.java +++ b/src/main/java/com/sekwah/advancedportals/bukkit/AdvancedPortalsCommand.java @@ -8,10 +8,7 @@ import com.sekwah.advancedportals.bukkit.portals.AdvancedPortal; import com.sekwah.advancedportals.bukkit.portals.Portal; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.*; -import org.bukkit.DyeColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; +import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.EndGateway; import org.bukkit.command.Command; @@ -210,6 +207,8 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter { String serverName = null; String permission = null; String portalCommand = null; + String particleDisp = null; + String particleDest = null; ArrayList extraData = new ArrayList<>(); @@ -305,6 +304,12 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter { } else if (startsWithPortalArg("leavedesti:", args[i])) { String leaveDesti = parseArgVariable(args, i, "leavedesti:"); extraData.add(new PortalArg("leavedesti", leaveDesti)); + } else if (startsWithPortalArg("particledisp:", args[i])) { + String value = parseArgVariable(args, i, "particledisp:"); + extraData.add(new PortalArg("particledisp", value)); + } else if (startsWithPortalArg("particledest:", args[i])) { + String value = parseArgVariable(args, i, "particledest:"); + extraData.add(new PortalArg("particledest", value)); } } if (!hasName) { @@ -426,8 +431,13 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter { } break; case "variables": - sender.sendMessage(PluginMessages.customPrefix - + " \u00A77Variables \u00A7c: \u00A7aname, triggerBlock, desti, destination, bungee, permission, command, cooldowndelay, leavedesti"); + sender.sendMessage( + PluginMessages.customPrefix + + " \u00A77Variables \u00A7c: " + + "\u00A7aname, triggerBlock, desti, destination, " + + "bungee, permission, command, cooldowndelay, leavedesti" + + "particledisp, particledest" + ); sender.sendMessage(""); sender.sendMessage("\u00A7aExample command: \u00A7e/portal create name:test triggerId:portal"); break; @@ -897,6 +907,8 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter { boolean hasCommand = false; boolean hasCooldownDelay = false; boolean hasLeaveDesti = false; + boolean hasDispParticle = false; + boolean hasDestParticle = false; // TODO change auto complete when quotes are opened and closed. Such as // autocomplete @Player and stuff when specifying commands @@ -932,6 +944,12 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter { case "cooldowndelay": hasCooldownDelay = true; break; + case "particledisp": + hasDispParticle = true; + break; + case "particledest": + hasDestParticle = true; + break; } } @@ -965,6 +983,12 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter { if (!hasLeaveDesti) { autoComplete.add("leavedesti:"); } + if (!hasDispParticle) { + autoComplete.add("particledisp:"); + } + if (!hasDestParticle) { + autoComplete.add("particledest:"); + } } } if (args.length == 2 && (args[0].equalsIgnoreCase("warp"))) { @@ -1007,6 +1031,14 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter { autoComplete.add(tagStart + object.toString()); } } + if (args[args.length - 1].startsWith("particledisp:") || args[args.length - 1].startsWith("particledest:")) { + String tagStart = args[args.length - 1].startsWith("particledisp:") ? "particledisp:" : "particledest:"; + for (Particle particle : Particle.values()) { + if(particle.getDataType() != Void.class) + continue; + autoComplete.add(tagStart + particle.name().toLowerCase()); + } + } Collections.sort(autoComplete); for (Object result : autoComplete.toArray()) { if (!result.toString().startsWith(args[args.length - 1])) { 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 70826a0..94ae2c7 100644 --- a/src/main/java/com/sekwah/advancedportals/bukkit/destinations/Destination.java +++ b/src/main/java/com/sekwah/advancedportals/bukkit/destinations/Destination.java @@ -113,22 +113,30 @@ public class Destination { return warp(player, name, null, hideActionBar, false); } - public static boolean warp(Player player, String name, boolean hideActionbar, boolean noEffects) { + public static boolean warp(Player player, String name, boolean hideActionBar, boolean noEffects) { + return warp(player, name, null, hideActionBar, noEffects); + } + + public static boolean warp(Player player, String dest, AdvancedPortal disp, boolean hideActionbar, boolean noEffects) { ConfigAccessor config = new ConfigAccessor(plugin, "destinations.yml"); - if (config.getConfig().getString(name + ".world") != null) { + if (config.getConfig().getString(dest + ".world") != null) { Location loc = player.getLocation(); - if (Bukkit.getWorld(config.getConfig().getString(name + ".world")) != null) { - loc.setWorld(Bukkit.getWorld(config.getConfig().getString(name + ".world"))); + if (Bukkit.getWorld(config.getConfig().getString(dest + ".world")) != null) { + loc.setWorld(Bukkit.getWorld(config.getConfig().getString(dest + ".world"))); - loc.setX(config.getConfig().getDouble(name + ".pos.X")); - loc.setY(config.getConfig().getDouble(name + ".pos.Y")); - loc.setZ(config.getConfig().getDouble(name + ".pos.Z")); + loc.setX(config.getConfig().getDouble(dest + ".pos.X")); + loc.setY(config.getConfig().getDouble(dest + ".pos.Y")); + loc.setZ(config.getConfig().getDouble(dest + ".pos.Z")); - loc.setPitch((float) config.getConfig().getDouble(name + ".pos.pitch")); - loc.setYaw((float) config.getConfig().getDouble(name + ".pos.yaw")); + loc.setPitch((float) config.getConfig().getDouble(dest + ".pos.pitch")); + loc.setYaw((float) config.getConfig().getDouble(dest + ".pos.yaw")); + + if (disp != null && disp.getArg("particledisp") != null) { + WarpEffects.activateParticle(player, disp.getArg("particledisp")); + } if(!noEffects) { - WarpEffects.activateParticles(player); + WarpEffects.activateEffect(player); WarpEffects.activateSound(player); } Chunk c = loc.getChunk(); @@ -145,17 +153,21 @@ public class Destination { } else { player.teleport(loc, PlayerTeleportEvent.TeleportCause.PLUGIN); } + + if (disp != null && disp.getArg("particledest") != null) { + WarpEffects.activateParticle(player, disp.getArg("particledest")); + } if(!noEffects) { - WarpEffects.activateParticles(player); + WarpEffects.activateEffect(player); WarpEffects.activateSound(player); } if (PORTAL_MESSAGE_DISPLAY == 1) { player.sendMessage(""); - player.sendMessage(PluginMessages.customPrefix + "\u00A7a You have been warped to \u00A7e" + name.replaceAll("_", " ") + "\u00A7a."); + player.sendMessage(PluginMessages.customPrefix + "\u00A7a You have been warped to \u00A7e" + dest.replaceAll("_", " ") + "\u00A7a."); player.sendMessage(""); } else if (PORTAL_MESSAGE_DISPLAY == 2 && !hideActionbar) { - player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("\u00A7aYou have warped to \u00A7e" + name.replaceAll("_", " ") + "\u00A7a.")); + player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("\u00A7aYou have warped to \u00A7e" + dest.replaceAll("_", " ") + "\u00A7a.")); } Location newLoc = player.getLocation(); @@ -171,12 +183,12 @@ public class Destination { return true; } else { player.sendMessage(PluginMessages.customPrefixFail + "\u00A7c The destination you are trying to warp to seems to be linked to a world that doesn't exist!"); - plugin.getLogger().log(Level.SEVERE, "The destination '" + name + "' is linked to the world " - + config.getConfig().getString(name + ".world") + " which doesnt seem to exist any more!"); + plugin.getLogger().log(Level.SEVERE, "The destination '" + dest + "' is linked to the world " + + config.getConfig().getString(dest + ".world") + " which doesnt seem to exist any more!"); } } else { player.sendMessage(PluginMessages.customPrefix + "\u00A7c The destination you are currently attempting to warp to doesnt exist!"); - plugin.getLogger().log(Level.SEVERE, "The destination '" + name + "' has just had a warp " + plugin.getLogger().log(Level.SEVERE, "The destination '" + dest + "' has just had a warp " + "attempt and either the data is corrupt or that destination doesn't exist!"); } return false; diff --git a/src/main/java/com/sekwah/advancedportals/bukkit/effects/WarpEffects.java b/src/main/java/com/sekwah/advancedportals/bukkit/effects/WarpEffects.java index 52009c6..55b8881 100644 --- a/src/main/java/com/sekwah/advancedportals/bukkit/effects/WarpEffects.java +++ b/src/main/java/com/sekwah/advancedportals/bukkit/effects/WarpEffects.java @@ -1,7 +1,11 @@ package com.sekwah.advancedportals.bukkit.effects; import com.sekwah.advancedportals.bukkit.AdvancedPortalsPlugin; +import com.sekwah.advancedportals.bukkit.portals.AdvancedPortal; +import com.sekwah.advancedportals.bukkit.portals.Portal; +import jdk.tools.jlink.plugin.Plugin; import org.bukkit.Effect; +import org.bukkit.Particle; import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.World; @@ -45,7 +49,7 @@ public class WarpEffects { return soundFound; } - public static void activateParticles(Player player) { + public static void activateEffect(Player player) { Location loc = player.getLocation(); World world = player.getWorld(); switch (plugin.getSettings().getCurrentWarpParticles()){ @@ -62,6 +66,21 @@ public class WarpEffects { } + public static void activateParticle(Player player, String particle_name) { + Particle particle = Portal.getParticle(particle_name); + if(particle == null) { + plugin.getLogger().warning("wrong particle name: " + particle_name); + return; + } + + Location loc_from = player.getLocation(); + + World world = player.getWorld(); + + world.spawnParticle(particle, loc_from, 100, 1, 1, 1); + + } + public static void activateSound(Player player) { if(!soundError){ Location loc = player.getLocation(); 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 ad2bc47..c5ec8f0 100644 --- a/src/main/java/com/sekwah/advancedportals/bukkit/portals/Portal.java +++ b/src/main/java/com/sekwah/advancedportals/bukkit/portals/Portal.java @@ -162,6 +162,14 @@ public class Portal { return blockTypes; } + public static Particle getParticle(String name) { + try { + return Particle.valueOf(name.toUpperCase()); + } catch (IllegalArgumentException e) { + return null; + } + } + public static String create(Location pos1, Location pos2, String name, String destination, Set triggerBlocks, PortalArg... extraData) { return create(pos1, pos2, name, destination, triggerBlocks, null, extraData); @@ -534,7 +542,7 @@ public class Portal { } else if (portal.getDestiation() != null) { ConfigAccessor configDesti = new ConfigAccessor(plugin, "destinations.yml"); if (configDesti.getConfig().getString(portal.getDestiation() + ".world") != null) { - warped = Destination.warp(player, portal.getDestiation(), hasMessage); + warped = Destination.warp(player, portal.getDestiation(), portal, hasMessage, false); if (!warped) { if(doKnockback) throwPlayerBack(player);