PlayerParticles/src/com/esophose/playerparticles/command/GroupCommandModule.java
2018-10-16 19:09:20 -06:00

246 lines
9.2 KiB
Java

package com.esophose.playerparticles.command;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
import com.esophose.playerparticles.manager.DataManager;
import com.esophose.playerparticles.manager.LangManager;
import com.esophose.playerparticles.manager.LangManager.Lang;
import com.esophose.playerparticles.particles.PPlayer;
import com.esophose.playerparticles.particles.ParticleGroup;
import com.esophose.playerparticles.particles.ParticlePair;
public class GroupCommandModule implements CommandModule {
public void onCommandExecute(PPlayer pplayer, String[] args) {
Player p = pplayer.getPlayer();
List<String> validCommands = Arrays.asList(new String[] { "save", "load", "remove", "info", "list" });
if (args.length == 0 || !validCommands.contains(args[0])) {
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_GROUP_SAVE);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_GROUP_LOAD);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_GROUP_REMOVE);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_GROUP_INFO);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_GROUP_LIST);
return;
}
if (args.length == 1 && !args[0].equalsIgnoreCase("list")) {
LangManager.sendMessage(p, Lang.GROUP_NO_NAME, args[0].toLowerCase());
return;
}
switch (args[0].toLowerCase()) {
case "save":
onSave(pplayer, args[1].toLowerCase());
break;
case "load":
onLoad(pplayer, args[1].toLowerCase());
break;
case "remove":
onRemove(pplayer, args[1].toLowerCase());
break;
case "info":
onInfo(pplayer, args[1].toLowerCase());
break;
case "list":
onList(pplayer);
break;
default:
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_GROUP_SAVE);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_GROUP_LOAD);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_GROUP_REMOVE);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_GROUP_INFO);
LangManager.sendMessage(p, Lang.COMMAND_DESCRIPTION_GROUP_LIST);
break;
}
}
/**
* Handles the command /pp group save
*
* @param pplayer The PPlayer
* @param groupName The target group name
*/
private void onSave(PPlayer pplayer, String groupName) {
// Check that the groupName isn't the reserved name
if (groupName.equalsIgnoreCase(ParticleGroup.DEFAULT_NAME)) {
LangManager.sendMessage(pplayer, Lang.GROUP_RESERVED);
return;
}
// The database column can only hold up to 100 characters, cut it off there
if (groupName.length() >= 100) {
groupName = groupName.substring(0, 100);
}
// Use the existing group if available, otherwise create a new one
ParticleGroup group = pplayer.getParticlesByName(groupName);
boolean groupUpdated = false;
if (group == null) {
List<ParticlePair> particles = new ArrayList<ParticlePair>();
for (ParticlePair particle : pplayer.getActiveParticles())
particles.add(particle.clone()); // Make sure the ParticlePairs aren't the same references in both the active and saved group
group = new ParticleGroup(groupName, particles);
} else {
groupUpdated = true;
}
// Apply changes and notify player
DataManager.saveParticleGroup(pplayer.getUniqueId(), group);
if (groupUpdated) {
LangManager.sendMessage(pplayer, Lang.GROUP_SAVE_SUCCESS_OVERWRITE, groupName);
} else {
LangManager.sendMessage(pplayer, Lang.GROUP_SAVE_SUCCESS, groupName);
}
}
/**
* Handles the command /pp group load
*
* @param pplayer The PPlayer
* @param groupName The target group name
*/
private void onLoad(PPlayer pplayer, String groupName) {
// Check that the groupName isn't the reserved name
if (groupName.equalsIgnoreCase(ParticleGroup.DEFAULT_NAME)) {
LangManager.sendMessage(pplayer, Lang.GROUP_RESERVED);
return;
}
// Get the group
ParticleGroup group = pplayer.getParticlesByName(groupName);
if (group == null) {
LangManager.sendMessage(pplayer, Lang.GROUP_INVALID, groupName);
return;
}
// Empty out the active group and fill it with clones from the target group
ParticleGroup activeGroup = pplayer.getActiveParticleGroup();
activeGroup.getParticles().clear();
for (ParticlePair particle : group.getParticles())
activeGroup.getParticles().add(particle.clone());
// Update group and notify player
DataManager.saveParticleGroup(pplayer.getUniqueId(), activeGroup);
LangManager.sendMessage(pplayer, Lang.GROUP_LOAD_SUCCESS, activeGroup.getParticles().size(), groupName);
}
/**
* Handles the command /pp group remove
*
* @param pplayer The PPlayer
* @param groupName The target group name
*/
private void onRemove(PPlayer pplayer, String groupName) {
// Check that the groupName isn't the reserved name
if (groupName.equalsIgnoreCase(ParticleGroup.DEFAULT_NAME)) {
LangManager.sendMessage(pplayer, Lang.GROUP_RESERVED);
return;
}
// Get the group
ParticleGroup group = pplayer.getParticlesByName(groupName);
if (group == null) {
LangManager.sendMessage(pplayer, Lang.GROUP_INVALID, groupName);
return;
}
// Delete the group and notify player
DataManager.removeParticleGroup(pplayer.getUniqueId(), group);
LangManager.sendMessage(pplayer, Lang.GROUP_REMOVE_SUCCESS, groupName);
}
/**
* Handles the command /pp group info
*
* @param pplayer The PPlayer
* @param groupName The target group name
*/
private void onInfo(PPlayer pplayer, String groupName) {
// Check that the groupName isn't the reserved name
if (groupName.equalsIgnoreCase(ParticleGroup.DEFAULT_NAME)) {
LangManager.sendMessage(pplayer, Lang.GROUP_RESERVED);
return;
}
// Get the group
ParticleGroup group = pplayer.getParticlesByName(groupName);
if (group == null) {
LangManager.sendMessage(pplayer, Lang.GROUP_INVALID, groupName);
return;
}
LangManager.sendMessage(pplayer, Lang.GROUP_INFO_HEADER, groupName);
for (ParticlePair particle : group.getParticles())
LangManager.sendMessage(pplayer, Lang.LIST_OUTPUT, particle.getId(), particle.getEffect().getName(), particle.getStyle().getName(), particle.getDataString());
}
/**
* Handles the command /pp group list
*
* @param pplayer The PPlayer
*/
private void onList(PPlayer pplayer) {
List<ParticleGroup> groups = pplayer.getParticleGroups();
if (groups.size() == 1) {
LangManager.sendMessage(pplayer, Lang.GROUP_LIST_NONE);
return;
}
String groupsList = "";
for (ParticleGroup group : groups)
if (!group.getName().equals(ParticleGroup.DEFAULT_NAME))
groupsList += group.getName() + ", ";
if (groupsList.endsWith(", "))
groupsList = groupsList.substring(0, groupsList.length() - 2);
LangManager.sendMessage(pplayer, Lang.GROUP_LIST_OUTPUT, groupsList);
// TODO: Implement Group Presets and output them here
}
public List<String> onTabComplete(PPlayer pplayer, String[] args) {
List<String> matches = new ArrayList<String>();
List<String> subCommands = Arrays.asList(new String[] { "save", "load", "remove", "info", "list" });
if (args.length <= 1) {
if (args.length == 0) matches = subCommands;
else StringUtil.copyPartialMatches(args[0], subCommands, matches);
} else if (args.length == 2 && !args[0].equalsIgnoreCase("list")) {
if (args[0].equalsIgnoreCase("save")) {
matches.add("<groupName>");
} else {
List<String> groupNames = new ArrayList<String>();
for (ParticleGroup group : pplayer.getParticleGroups())
if (!group.getName().equals(ParticleGroup.DEFAULT_NAME))
groupNames.add(group.getName());
// TODO: Include Group Presets and add them to groupNames
StringUtil.copyPartialMatches(args[1], groupNames, matches);
}
}
return matches;
}
public String getName() {
return "group";
}
public Lang getDescription() {
return Lang.COMMAND_DESCRIPTION_GROUP;
}
public String getArguments() {
return "<sub-command>";
}
public boolean requiresEffects() {
return true;
}
}