diff --git a/src/com/esophose/playerparticles/FixedParticleEffect.java b/src/com/esophose/playerparticles/FixedParticleEffect.java index b83945d..4f65d07 100644 --- a/src/com/esophose/playerparticles/FixedParticleEffect.java +++ b/src/com/esophose/playerparticles/FixedParticleEffect.java @@ -214,6 +214,37 @@ public class FixedParticleEffect { return null; } + /** + * Gets the particle data as a string + * + * @return A string of the current effect's data + */ + public String getParticleDataString() { + if (this.particleEffect.hasProperty(ParticleProperty.COLORABLE)) { + if (this.particleEffect == ParticleEffect.NOTE) { + if (this.particleNoteColorData.getValueX() * 24 == 99) { + return "rainbow"; + } else { + return (this.particleNoteColorData.getValueX() * 24) + ""; + } + } else { + if (this.particleColorData.getRed() == 999 && this.particleColorData.getGreen() == 999 && this.particleColorData.getBlue() == 999) { + return "rainbow"; + } else { + return this.particleColorData.getRed() + " " + this.particleColorData.getGreen() + " " + this.particleColorData.getBlue(); + } + } + } else if (this.particleEffect.hasProperty(ParticleProperty.REQUIRES_DATA)) { + if (this.particleEffect == ParticleEffect.BLOCK_CRACK || this.particleEffect == ParticleEffect.BLOCK_DUST || this.particleEffect == ParticleEffect.FALLING_DUST) { + return this.particleBlockData.getMaterial() + " " + this.particleBlockData.getData(); + } else if (this.particleEffect == ParticleEffect.ITEM_CRACK) { + return this.particleItemData.getMaterial() + " " + this.particleItemData.getData(); + } + } + + return "None"; + } + /** * Gets the location this effect will be displayed at * diff --git a/src/com/esophose/playerparticles/ParticleCommandCompleter.java b/src/com/esophose/playerparticles/ParticleCommandCompleter.java index fee53d5..1314ccd 100644 --- a/src/com/esophose/playerparticles/ParticleCommandCompleter.java +++ b/src/com/esophose/playerparticles/ParticleCommandCompleter.java @@ -9,17 +9,22 @@ package com.esophose.playerparticles; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; import org.bukkit.entity.Player; +import org.bukkit.util.StringUtil; import com.esophose.playerparticles.manager.PermissionManager; public class ParticleCommandCompleter implements TabCompleter { + private final String[] COMMANDS = { "help", "effect", "effects", "style", "styles", "worlds", "version", "fixed", "reset" }; + private final String[] FIXED_COMMANDS = { "create", "remove", "list", "info" }; + /** * Activated when a user pushes tab in chat prefixed with /pp * @@ -30,28 +35,27 @@ public class ParticleCommandCompleter implements TabCompleter { * @return A list of commands available to the sender */ public List onTabComplete(CommandSender sender, Command cmd, String alias, String[] args) { + List completions = new ArrayList(); if (cmd.getName().equalsIgnoreCase("pp")) { - if (args.length == 0) { - List list = new ArrayList(); - list.add("help"); - list.add("effect"); - list.add("effects"); - list.add("style"); - list.add("styles"); - list.add("worlds"); - list.add("version"); - list.add("fixed"); - list.add("reset"); - return list; - } else if (args.length == 1) { + if (args.length > 1) { if (args[0].equalsIgnoreCase("effect")) { - return PermissionManager.getParticlesUserHasPermissionFor((Player) sender); + List commands = PermissionManager.getParticlesUserHasPermissionFor((Player) sender); + StringUtil.copyPartialMatches(args[1], commands, completions); + return completions; } else if (args[0].equalsIgnoreCase("style")) { - return PermissionManager.getStylesUserHasPermissionFor((Player) sender); + List commands = PermissionManager.getStylesUserHasPermissionFor((Player) sender); + StringUtil.copyPartialMatches(args[1], commands, completions); + return completions; + } else if (args[0].equalsIgnoreCase("fixed")) { + List commands = Arrays.asList(FIXED_COMMANDS); + StringUtil.copyPartialMatches(args[1], commands, completions); } + } else { + List commands = new ArrayList(Arrays.asList(COMMANDS)); + StringUtil.copyPartialMatches(args[0], commands, completions); } } - return null; + return completions; } } diff --git a/src/com/esophose/playerparticles/ParticleCommandExecutor.java b/src/com/esophose/playerparticles/ParticleCommandExecutor.java index 1c8450b..cdb25ad 100644 --- a/src/com/esophose/playerparticles/ParticleCommandExecutor.java +++ b/src/com/esophose/playerparticles/ParticleCommandExecutor.java @@ -8,10 +8,14 @@ package com.esophose.playerparticles; +import java.text.DecimalFormat; import java.util.Arrays; +import java.util.Collections; +import java.util.List; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -184,7 +188,7 @@ public class ParticleCommandExecutor implements CommandExecutor { MessageManager.sendMessage(p, MessageType.DATA_APPLIED, "note"); return; } - + int note = -1; try { note = Integer.parseInt(args[0]); @@ -330,7 +334,7 @@ public class ParticleCommandExecutor implements CommandExecutor { } else { ConfigManager.getInstance().resetPPlayer(altPlayer.getUniqueId()); MessageManager.sendMessage(altPlayer, MessageType.RESET); - + MessageManager.sendMessage(p, MessageType.EXECUTED_FOR_PLAYER, altPlayer.getName()); } } @@ -445,16 +449,7 @@ public class ParticleCommandExecutor implements CommandExecutor { MessageManager.sendCustomMessage(p, toSend); MessageManager.sendCustomMessage(p, MessageType.USAGE.getMessage() + " " + MessageType.STYLE_USAGE.getMessage()); } - - /* - - - - - Requires permission playerparticles.fixed - Maximum number of fixed effects defined in config.yml, default value 5 - */ - + /** * Called when a player uses /pp fixed * @@ -466,7 +461,7 @@ public class ParticleCommandExecutor implements CommandExecutor { MessageManager.sendMessage(p, MessageType.NO_PERMISSION_FIXED); return; } - + if (args.length == 0) { // General information on command MessageManager.sendMessage(p, MessageType.INVALID_FIXED_COMMAND); MessageManager.sendMessage(p, MessageType.FIXED_COMMAND_DESC_CREATE); @@ -475,21 +470,267 @@ public class ParticleCommandExecutor implements CommandExecutor { MessageManager.sendMessage(p, MessageType.FIXED_COMMAND_DESC_INFO); return; } - + String cmd = args[0]; - + + String[] cmdArgs = new String[args.length - 1]; + for (int i = 1; i < args.length; i++) { + cmdArgs[i - 1] = args[i]; + } + args = cmdArgs; + if (cmd.equalsIgnoreCase("create")) { - if (ConfigManager.getInstance().getNumberOfFixedEffectsForPlayer(p.getUniqueId()) >= PlayerParticles.getPlugin().getConfig().getInt("max-fixed-effects")) { - + if (ConfigManager.getInstance().hasPlayerReachedMaxFixedEffects(p.getUniqueId())) { + MessageManager.sendMessage(p, MessageType.MAX_FIXED_EFFECTS_REACHED); + return; } - // /pp fixed create