Tab completion for /pp fixed

This commit is contained in:
Esophose 2018-10-07 21:18:19 -06:00
parent 53fabbacae
commit 36803440c0
13 changed files with 423 additions and 276 deletions

1
.gitignore vendored
View file

@ -38,6 +38,7 @@ Icon
/.settings
/doc
/target
/images
# Files that might appear on external disk
.Spotlight-V100

View file

@ -1,5 +1,6 @@
package com.esophose.playerparticles.command;
import java.util.ArrayList;
import java.util.List;
import com.esophose.playerparticles.manager.LangManager;
@ -13,7 +14,7 @@ public class EffectCommandModule implements CommandModule {
}
public List<String> onTabComplete(PPlayer pplayer, String[] args) {
return null;
return new ArrayList<String>();
}
public String getName() {

View file

@ -1,5 +1,6 @@
package com.esophose.playerparticles.command;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.entity.Player;
@ -33,7 +34,7 @@ public class EffectsCommandModule implements CommandModule {
}
public List<String> onTabComplete(PPlayer pplayer, String[] args) {
return null;
return new ArrayList<String>();
}
public String getName() {

View file

@ -2,12 +2,15 @@ package com.esophose.playerparticles.command;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
import com.esophose.playerparticles.manager.DataManager;
import com.esophose.playerparticles.manager.LangManager;
@ -40,7 +43,6 @@ public class FixedCommandModule implements CommandModule {
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_FIXED_REMOVE);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_FIXED_LIST);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_FIXED_INFO);
if (p.hasPermission("playerparticles.fixed.clear"))
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_FIXED_CLEAR);
return;
}
@ -51,9 +53,41 @@ public class FixedCommandModule implements CommandModule {
for (int i = 1; i < args.length; i++) {
cmdArgs[i - 1] = args[i];
}
args = cmdArgs;
if (cmd.equalsIgnoreCase("create")) {
switch (cmd.toLowerCase()) {
case "create":
handleCreate(pplayer, p, cmdArgs);
return;
case "remove":
handleRemove(pplayer, p, cmdArgs);
return;
case "list":
handleList(pplayer, p, cmdArgs);
return;
case "info":
handleInfo(pplayer, p, cmdArgs);
return;
case "clear":
handleClear(pplayer, p, cmdArgs);
return;
default:
LangManager.sendMessage(pplayer, Lang.FIXED_INVALID_COMMAND);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_FIXED_CREATE);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_FIXED_REMOVE);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_FIXED_LIST);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_FIXED_INFO);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_FIXED_CLEAR);
}
}
/**
* Handles the command /pp fixed create
*
* @param pplayer The PPlayer
* @param p The Player
* @param args The command arguments
*/
private void handleCreate(PPlayer pplayer, Player p, String[] args) {
boolean reachedMax = DataManager.hasPlayerReachedMaxFixedEffects(pplayer);
if (reachedMax) {
LangManager.sendMessage(p, Lang.FIXED_MAX_REACHED);
@ -61,7 +95,7 @@ public class FixedCommandModule implements CommandModule {
}
if (args.length < 5) {
LangManager.sendMessage(p, Lang.FIXED_CREATE_MISSING_ARGS, (5 - args.length) + "");
LangManager.sendMessage(p, Lang.FIXED_CREATE_MISSING_ARGS, 5 - args.length);
return;
}
@ -208,7 +242,16 @@ public class FixedCommandModule implements CommandModule {
LangManager.sendMessage(p, Lang.FIXED_CREATE_SUCCESS);
DataManager.saveFixedEffect(fixedEffect);
} else if (cmd.equalsIgnoreCase("remove")) {
}
/**
* Handles the command /pp fixed remove
*
* @param pplayer The PPlayer
* @param p The Player
* @param args The command arguments
*/
private void handleRemove(PPlayer pplayer, Player p, String[] args) {
if (args.length < 1) {
LangManager.sendMessage(p, Lang.FIXED_REMOVE_NO_ARGS);
return;
@ -228,7 +271,16 @@ public class FixedCommandModule implements CommandModule {
} else {
LangManager.sendMessage(p, Lang.FIXED_REMOVE_INVALID, id + "");
}
} else if (cmd.equalsIgnoreCase("list")) {
}
/**
* Handles the command /pp fixed list
*
* @param pplayer The PPlayer
* @param p The Player
* @param args The command arguments
*/
private void handleList(PPlayer pplayer, Player p, String[] args) {
List<Integer> ids = pplayer.getFixedEffectIds();
Collections.sort(ids);
@ -246,7 +298,16 @@ public class FixedCommandModule implements CommandModule {
}
LangManager.sendMessage(p, Lang.FIXED_LIST_SUCCESS, msg);
} else if (cmd.equalsIgnoreCase("info")) {
}
/**
* Handles the command /pp fixed info
*
* @param pplayer The PPlayer
* @param p The Player
* @param args The command arguments
*/
private void handleInfo(PPlayer pplayer, Player p, String[] args) {
if (args.length < 1) {
LangManager.sendMessage(p, Lang.FIXED_INFO_NO_ARGS);
return;
@ -280,7 +341,16 @@ public class FixedCommandModule implements CommandModule {
particle.getStyle().getName(),
particle.getDataString()
); // @formatter:on
} else if (cmd.equalsIgnoreCase("clear")) {
}
/**
* Handles the command /pp fixed clear
*
* @param pplayer The PPlayer
* @param p The Player
* @param args The command arguments
*/
private void handleClear(PPlayer pplayer, Player p, String[] args) {
if (!p.hasPermission("playerparticles.fixed.clear")) {
LangManager.sendMessage(p, Lang.FIXED_CLEAR_NO_PERMISSION);
return;
@ -303,26 +373,92 @@ public class FixedCommandModule implements CommandModule {
for (PPlayer ppl : ParticleManager.getPPlayers())
for (FixedParticleEffect fixedEffect : ppl.getFixedParticles())
if (fixedEffect.getLocation().getWorld().equals(p.getLocation().getWorld()) && fixedEffect.getLocation().distance(p.getLocation()) <= radius) fixedEffectsToRemove.add(fixedEffect);
if (fixedEffect.getLocation().getWorld().equals(p.getLocation().getWorld()) && fixedEffect.getLocation().distance(p.getLocation()) <= radius)
fixedEffectsToRemove.add(fixedEffect);
for (FixedParticleEffect fixedEffect : fixedEffectsToRemove)
DataManager.removeFixedEffect(fixedEffect.getOwnerUniqueId(), fixedEffect.getId());
LangManager.sendMessage(p, Lang.FIXED_CLEAR_SUCCESS, fixedEffectsToRemove.size() + "", radius + "");
return;
} else {
LangManager.sendMessage(pplayer, Lang.FIXED_INVALID_COMMAND);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_FIXED_CREATE);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_FIXED_REMOVE);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_FIXED_LIST);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_FIXED_INFO);
if (p.hasPermission("playerparticles.fixed.clear"))
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_FIXED_CLEAR);
}
}
public List<String> onTabComplete(PPlayer pplayer, String[] args) {
return null;
Player p = pplayer.getPlayer();
List<String> matches = new ArrayList<String>();
String[] subCommands = new String[] { "create", "remove", "list", "info", "clear" };
if (args.length <= 1) {
List<String> possibleCmds = new ArrayList<String>();
possibleCmds.addAll(new ArrayList<String>(Arrays.asList(subCommands)));
if (args.length == 0) matches = possibleCmds;
else StringUtil.copyPartialMatches(args[0], possibleCmds, matches);
} else {
switch (args[0].toLowerCase()) {
case "create":
if (args.length >= 2 && args.length <= 4) {
List<String> possibleValues = new ArrayList<String>();
if (args.length == 4) {
possibleValues.add("~");
}
if (args.length == 3) {
possibleValues.add("~ ~");
}
if (args.length == 2) {
possibleValues.add("~ ~ ~");
}
StringUtil.copyPartialMatches(args[args.length - 1], possibleValues, matches);
} else if (args.length == 5) {
StringUtil.copyPartialMatches(args[4], PermissionManager.getEffectsUserHasPermissionFor(p), matches);
} else if (args.length == 6) {
StringUtil.copyPartialMatches(args[5], PermissionManager.getStylesUserHasPermissionFor(p), matches);
} else if (args.length >= 7) {
ParticleEffect effect = ParticleEffect.fromName(args[4]);
if (effect != null) {
if (effect.hasProperty(ParticleProperty.COLORABLE)) {
List<String> possibleValues = new ArrayList<String>();
if (effect == ParticleEffect.NOTE) { // Note data
if (args.length == 7) {
possibleValues.add("<0-23>");
possibleValues.add("rainbow");
}
} else { // Color data
if (args.length <= 9 && !args[2].equalsIgnoreCase("rainbow")) {
possibleValues.add("<0-255>");
}
if (args.length <= 8 && !args[2].equalsIgnoreCase("rainbow")) {
possibleValues.add("<0-255> <0-255>");
}
if (args.length <= 7) {
possibleValues.add("<0-255> <0-255> <0-255>");
possibleValues.add("rainbow");
}
}
StringUtil.copyPartialMatches(args[args.length - 1], possibleValues, matches);
} else if (args.length == 7 && effect.hasProperty(ParticleProperty.REQUIRES_MATERIAL_DATA)) {
if (effect == ParticleEffect.BLOCK || effect == ParticleEffect.FALLING_DUST) { // Block material
matches = StringUtil.copyPartialMatches(args[6], ParticleUtils.getAllBlockMaterials(), matches);
} else if (effect == ParticleEffect.ITEM) { // Item material
matches = StringUtil.copyPartialMatches(args[6], ParticleUtils.getAllItemMaterials(), matches);
}
}
}
}
break;
case "remove":
StringUtil.copyPartialMatches(args[1], pplayer.getFixedEffectIds().stream().map((x) -> String.valueOf(x)).collect(Collectors.toList()), matches);
break;
case "list":
break;
case "info":
StringUtil.copyPartialMatches(args[1], pplayer.getFixedEffectIds().stream().map((x) -> String.valueOf(x)).collect(Collectors.toList()), matches);
break;
case "clear":
matches.add("<radius>");
break;
}
}
return matches;
}
public String getName() {

View file

@ -1,5 +1,6 @@
package com.esophose.playerparticles.command;
import java.util.ArrayList;
import java.util.List;
import com.esophose.playerparticles.gui.PlayerParticlesGui;
@ -43,7 +44,7 @@ public class GUICommandModule implements CommandModule {
}
public List<String> onTabComplete(PPlayer pplayer, String[] args) {
return null;
return new ArrayList<String>();
}
public String getName() {

View file

@ -1,5 +1,6 @@
package com.esophose.playerparticles.command;
import java.util.ArrayList;
import java.util.List;
import com.esophose.playerparticles.manager.LangManager.Lang;
@ -16,7 +17,7 @@ public class HelpCommandModule implements CommandModule {
}
public List<String> onTabComplete(PPlayer pplayer, String[] args) {
return null;
return new ArrayList<String>();
}
public String getName() {

View file

@ -1,5 +1,6 @@
package com.esophose.playerparticles.command;
import java.util.ArrayList;
import java.util.List;
import com.esophose.playerparticles.manager.LangManager;
@ -28,7 +29,7 @@ public class ListCommandModule implements CommandModule {
}
public List<String> onTabComplete(PPlayer pplayer, String[] args) {
return null;
return new ArrayList<String>();
}
public String getName() {

View file

@ -1,5 +1,6 @@
package com.esophose.playerparticles.command;
import java.util.ArrayList;
import java.util.List;
import com.esophose.playerparticles.manager.DataManager;
@ -17,7 +18,7 @@ public class ResetCommandModule implements CommandModule {
}
public List<String> onTabComplete(PPlayer pplayer, String[] args) {
return null;
return new ArrayList<String>();
}
public String getName() {

View file

@ -1,5 +1,6 @@
package com.esophose.playerparticles.command;
import java.util.ArrayList;
import java.util.List;
import com.esophose.playerparticles.manager.LangManager;
@ -13,7 +14,7 @@ public class StyleCommandModule implements CommandModule {
}
public List<String> onTabComplete(PPlayer pplayer, String[] args) {
return null;
return new ArrayList<String>();
}
public String getName() {

View file

@ -1,5 +1,6 @@
package com.esophose.playerparticles.command;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.entity.Player;
@ -28,7 +29,7 @@ public class StylesCommandModule implements CommandModule {
}
public List<String> onTabComplete(PPlayer pplayer, String[] args) {
return null;
return new ArrayList<String>();
}
public String getName() {

View file

@ -1,5 +1,6 @@
package com.esophose.playerparticles.command;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.ChatColor;
@ -17,7 +18,7 @@ public class VersionCommandModule implements CommandModule {
}
public List<String> onTabComplete(PPlayer pplayer, String[] args) {
return null;
return new ArrayList<String>();
}
public String getName() {

View file

@ -1,5 +1,6 @@
package com.esophose.playerparticles.command;
import java.util.ArrayList;
import java.util.List;
import com.esophose.playerparticles.manager.DataManager;
@ -25,7 +26,7 @@ public class WorldsCommandModule implements CommandModule {
}
public List<String> onTabComplete(PPlayer pplayer, String[] args) {
return null;
return new ArrayList<String>();
}
public String getName() {