Command rework (#1434)
* Network part finished. * Should be more reasonable now * This should be good enough. * Orb finished, needs strings * Bind finished. Needs strings. * Reformat & Help subcommand * Cleanup, strings, no negative amounts * Removed TODOs * Added missing MaxTier check for Blood Orbs. Added TODO: Test with custom Blood Orbs. * Ritual commands finished. Check for valid placement might be optimized. (TODO) * Access modifiers, moved TODO * Added TODOs for localized strings * DrainUtils postponed until the necessary functionality is available with SoulTickets (telling SoulTicket network from soul ticket, a list of all registered soul tickets per network) * Replaced all occurrences of TextHelper with TextComponentTranslation in the commands section * - Moved Teleports.java to teleport package - added teleposer command - added missing strings - cleanup * Fixed spelling of "Successful(ly)" * getUsage() now returns translation keys. getInfo() is now an explicit String ritual creation command now has proper tab completions help is an additional argument with "-h" or "?" cleanup * teleposerSet final cleanup. * Removed ritual removal command Signed-off-by: tobias <angryaeon@icloud.com> * Check if the tile has a ritual first Signed-off-by: tobias <angryaeon@icloud.com> * A bit more optimisation Signed-off-by: tobias <angryaeon@icloud.com> * Cleanup part 1 Signed-off-by: tobias <angryaeon@icloud.com> * Cleanup part 2 Signed-off-by: tobias <angryaeon@icloud.com> * Part 3 Signed-off-by: tobias <angryaeon@icloud.com> * Part 4 Signed-off-by: tobias <angryaeon@icloud.com> * Updated language file to reflect cleanup & continuity changes. Signed-off-by: tobias <angryaeon@icloud.com> * Change to use an abstract class that gets called instead of calling super on overriden execute() for commands Signed-off-by: tobias <angryaeon@icloud.com> * Use player facing for ritual creation. Signed-off-by: tobias <angryaeon@icloud.com>
This commit is contained in:
parent
2a8e1f1271
commit
95d99c0a01
13 changed files with 990 additions and 323 deletions
|
@ -2,21 +2,33 @@ package WayofTime.bloodmagic.command.sub;
|
|||
|
||||
import WayofTime.bloodmagic.core.data.SoulNetwork;
|
||||
import WayofTime.bloodmagic.core.data.SoulTicket;
|
||||
import WayofTime.bloodmagic.util.helper.NetworkHelper;
|
||||
import WayofTime.bloodmagic.command.CommandBloodMagic;
|
||||
import WayofTime.bloodmagic.util.Utils;
|
||||
import WayofTime.bloodmagic.util.helper.TextHelper;
|
||||
import net.minecraft.command.CommandBase;
|
||||
import WayofTime.bloodmagic.util.helper.NetworkHelper;
|
||||
import WayofTime.bloodmagic.util.helper.PlayerHelper;
|
||||
import net.minecraft.command.CommandException;
|
||||
import net.minecraft.command.ICommandSender;
|
||||
import net.minecraft.command.PlayerNotFoundException;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraftforge.server.command.CommandTreeBase;
|
||||
import net.minecraftforge.server.command.CommandTreeHelp;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.List;
|
||||
|
||||
public class SubCommandNetwork extends CommandTreeBase {
|
||||
|
||||
public SubCommandNetwork() {
|
||||
addSubcommand(new Syphon());
|
||||
addSubcommand(new Add());
|
||||
addSubcommand(new Set());
|
||||
addSubcommand(new Get());
|
||||
addSubcommand(new Cap());
|
||||
addSubcommand(new Fill());
|
||||
addSubcommand(new Tickets());
|
||||
addSubcommand(new CommandTreeHelp(this));
|
||||
}
|
||||
|
||||
public class SubCommandNetwork extends CommandBase {
|
||||
@Override
|
||||
public String getName() {
|
||||
return "network";
|
||||
|
@ -24,160 +36,190 @@ public class SubCommandNetwork extends CommandBase {
|
|||
|
||||
@Override
|
||||
public String getUsage(ICommandSender commandSender) {
|
||||
return TextHelper.localizeEffect("commands.bloodmagic.network.usage");
|
||||
return "commands.bloodmagic.network.usage";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRequiredPermissionLevel() {
|
||||
return 2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(MinecraftServer server, ICommandSender commandSender, String[] args) throws CommandException {
|
||||
if (args.length > 1) {
|
||||
if (args[0].equalsIgnoreCase("help"))
|
||||
abstract class NetworkCommand extends CommandTreeBase {
|
||||
|
||||
public EntityPlayerMP player;
|
||||
public SoulNetwork network;
|
||||
public String uuid;
|
||||
|
||||
public Integer commandHelperAmount(MinecraftServer server, ICommandSender sender, String[] args) {
|
||||
int amount;
|
||||
if (args.length == 0)
|
||||
amount = 1000;
|
||||
else if (Utils.isInteger(args[0]))
|
||||
amount = Integer.parseInt(args[0]);
|
||||
else if (args.length > 1 && Utils.isInteger(args[1]))
|
||||
amount = Integer.parseInt(args[1]);
|
||||
else {
|
||||
sender.sendMessage(new TextComponentTranslation("commands.bloodmagic.error.arg.invalid"));
|
||||
sender.sendMessage(new TextComponentTranslation(this.getUsage(sender)));
|
||||
return null;
|
||||
}
|
||||
if (amount < 0) {
|
||||
sender.sendMessage(new TextComponentTranslation("commands.bloodmagic.error.negative"));
|
||||
return null;
|
||||
}
|
||||
return amount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUsage(ICommandSender sender) {
|
||||
return "commands.bloodmagic.network." + getName() + ".usage";
|
||||
}
|
||||
|
||||
public String getHelp() {
|
||||
return "commands.bloodmagic.network." + getName() + ".help";
|
||||
}
|
||||
|
||||
public String getInfo() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
|
||||
if (!getName().equals("get")) {
|
||||
if (args.length == 1 && (args[0].equals("?") || args[0].equals("help"))) {
|
||||
sender.sendMessage(new TextComponentTranslation(getHelp()));
|
||||
return;
|
||||
}
|
||||
this.player = args.length < 2 ? getCommandSenderAsPlayer(sender) : getPlayer(server, sender, args[0]);
|
||||
this.uuid = PlayerHelper.getUUIDFromPlayer(player).toString();
|
||||
this.network = NetworkHelper.getSoulNetwork(uuid);
|
||||
}
|
||||
subExecute(server, sender, args);
|
||||
}
|
||||
|
||||
protected abstract void subExecute(MinecraftServer server, ICommandSender sender, String... args) throws CommandException;
|
||||
}
|
||||
|
||||
class Syphon extends NetworkCommand {
|
||||
@Override
|
||||
public String getName() {
|
||||
return "syphon";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void subExecute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
|
||||
Integer amount = commandHelperAmount(server, sender, args);
|
||||
if (amount == null)
|
||||
return;
|
||||
|
||||
try {
|
||||
EntityPlayer player = CommandBase.getPlayer(server, commandSender, args[1]);
|
||||
|
||||
try {
|
||||
ValidCommands command = ValidCommands.valueOf(args[0].toUpperCase(Locale.ENGLISH));
|
||||
command.run(player, commandSender, args.length > 0 && args.length < 2, args);
|
||||
} catch (IllegalArgumentException e) {
|
||||
|
||||
}
|
||||
} catch (PlayerNotFoundException e) {
|
||||
CommandBloodMagic.displayErrorString(commandSender, e.getLocalizedMessage());
|
||||
int currE = network.getCurrentEssence();
|
||||
if (amount > currE) {
|
||||
sender.sendMessage(new TextComponentTranslation("commands.bloodmagic.network.syphon.amountTooHigh"));
|
||||
if (currE == 0)
|
||||
return;
|
||||
amount = Math.min(amount, currE);
|
||||
}
|
||||
} else {
|
||||
CommandBloodMagic.displayErrorString(commandSender, "commands.bloodmagic.error.arg.missing");
|
||||
network.syphonAndDamage(player, SoulTicket.command(sender, this.getName(), amount));
|
||||
int newE = network.getCurrentEssence();
|
||||
sender.sendMessage(new TextComponentTranslation("commands.bloodmagic.network.syphon.success", currE - newE, player.getDisplayName().getFormattedText()));
|
||||
}
|
||||
}
|
||||
|
||||
private enum ValidCommands {
|
||||
SYPHON("commands.bloodmagic.network.syphon.help") {
|
||||
@Override
|
||||
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args) {
|
||||
if (displayHelp) {
|
||||
CommandBloodMagic.displayHelpString(sender, this.help);
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.length == 3) {
|
||||
if (Utils.isInteger(args[2])) {
|
||||
int amount = Integer.parseInt(args[2]);
|
||||
NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, SoulTicket.command(sender, "syphon", amount));
|
||||
CommandBloodMagic.displaySuccessString(sender, "commands.bloodmagic.network.syphon.success", amount, player.getDisplayName().getFormattedText());
|
||||
} else {
|
||||
CommandBloodMagic.displayErrorString(sender, "commands.bloodmagic.error.arg.invalid");
|
||||
}
|
||||
} else {
|
||||
CommandBloodMagic.displayErrorString(sender, "commands.bloodmagic.error.arg.missing");
|
||||
}
|
||||
}
|
||||
},
|
||||
ADD("commands.bloodmagic.network.add.help") {
|
||||
@Override
|
||||
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args) {
|
||||
if (displayHelp) {
|
||||
CommandBloodMagic.displayHelpString(sender, this.help);
|
||||
return;
|
||||
}
|
||||
|
||||
SoulNetwork network = NetworkHelper.getSoulNetwork(player);
|
||||
|
||||
if (args.length == 3) {
|
||||
if (Utils.isInteger(args[2])) {
|
||||
int amount = Integer.parseInt(args[2]);
|
||||
int maxOrb = NetworkHelper.getMaximumForTier(network.getOrbTier());
|
||||
CommandBloodMagic.displaySuccessString(sender, "commands.bloodmagic.network.add.success", network.add(SoulTicket.command(sender, "add", amount), maxOrb), player.getDisplayName().getFormattedText());
|
||||
} else {
|
||||
CommandBloodMagic.displayErrorString(sender, "commands.bloodmagic.error.arg.invalid");
|
||||
}
|
||||
} else {
|
||||
CommandBloodMagic.displayErrorString(sender, "commands.bloodmagic.error.arg.missing");
|
||||
}
|
||||
}
|
||||
},
|
||||
SET("commands.bloodmagic.network.set.help") {
|
||||
@Override
|
||||
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args) {
|
||||
if (displayHelp) {
|
||||
CommandBloodMagic.displayHelpString(sender, this.help);
|
||||
return;
|
||||
}
|
||||
|
||||
SoulNetwork network = NetworkHelper.getSoulNetwork(player);
|
||||
|
||||
if (args.length == 3) {
|
||||
if (Utils.isInteger(args[2])) {
|
||||
int amount = Integer.parseInt(args[2]);
|
||||
network.setCurrentEssence(amount);
|
||||
CommandBloodMagic.displaySuccessString(sender, "commands.bloodmagic.network.set.success", player.getDisplayName().getFormattedText(), amount);
|
||||
} else {
|
||||
CommandBloodMagic.displayErrorString(sender, "commands.bloodmagic.error.arg.invalid");
|
||||
}
|
||||
} else {
|
||||
CommandBloodMagic.displayErrorString(sender, "commands.bloodmagic.error.arg.missing");
|
||||
}
|
||||
}
|
||||
},
|
||||
GET("commands.bloodmagic.network.get.help") {
|
||||
@Override
|
||||
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args) {
|
||||
if (displayHelp) {
|
||||
CommandBloodMagic.displayHelpString(sender, this.help);
|
||||
return;
|
||||
}
|
||||
|
||||
SoulNetwork network = NetworkHelper.getSoulNetwork(player);
|
||||
|
||||
if (args.length > 1)
|
||||
sender.sendMessage(new TextComponentString(TextHelper.localizeEffect("tooltip.bloodmagic.sigil.divination.currentEssence", network.getCurrentEssence())));
|
||||
|
||||
}
|
||||
},
|
||||
FILL("commands.bloodmagic.network.fill.help") {
|
||||
@Override
|
||||
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args) {
|
||||
if (displayHelp) {
|
||||
CommandBloodMagic.displayHelpString(sender, this.help, Integer.MAX_VALUE);
|
||||
return;
|
||||
}
|
||||
|
||||
SoulNetwork network = NetworkHelper.getSoulNetwork(player);
|
||||
|
||||
if (args.length > 1) {
|
||||
network.setCurrentEssence(Integer.MAX_VALUE);
|
||||
CommandBloodMagic.displaySuccessString(sender, "commands.bloodmagic.network.fill.success", player.getDisplayName().getFormattedText());
|
||||
}
|
||||
}
|
||||
},
|
||||
CAP("commands.bloodmagic.network.cap.help") {
|
||||
@Override
|
||||
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args) {
|
||||
if (displayHelp) {
|
||||
CommandBloodMagic.displayHelpString(sender, this.help);
|
||||
return;
|
||||
}
|
||||
|
||||
SoulNetwork network = NetworkHelper.getSoulNetwork(player);
|
||||
|
||||
if (args.length > 1) {
|
||||
int maxOrb = NetworkHelper.getMaximumForTier(network.getOrbTier());
|
||||
network.setCurrentEssence(maxOrb);
|
||||
CommandBloodMagic.displaySuccessString(sender, "commands.bloodmagic.network.cap.success", player.getDisplayName().getFormattedText());
|
||||
}
|
||||
}
|
||||
},;
|
||||
|
||||
public String help;
|
||||
|
||||
ValidCommands(String help) {
|
||||
this.help = help;
|
||||
class Add extends NetworkCommand {
|
||||
@Override
|
||||
public String getName() {
|
||||
return "add";
|
||||
}
|
||||
|
||||
public abstract void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args);
|
||||
@Override
|
||||
public void subExecute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
|
||||
Integer amount = commandHelperAmount(server, sender, args);
|
||||
if (amount == null)
|
||||
return;
|
||||
sender.sendMessage(new TextComponentTranslation("commands.bloodmagic.network.add.success", network.add(SoulTicket.command(sender, getName(), amount), NetworkHelper.getMaximumForTier(network.getOrbTier())), player.getDisplayName().getFormattedText()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Set extends NetworkCommand {
|
||||
@Override
|
||||
public String getName() {
|
||||
return "set";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void subExecute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
|
||||
Integer amount = commandHelperAmount(server, sender, args);
|
||||
if (amount == null)
|
||||
return;
|
||||
network.setCurrentEssence(amount);
|
||||
sender.sendMessage(new TextComponentTranslation("commands.bloodmagic.network.set.success", player.getDisplayName().getFormattedText(), amount));
|
||||
}
|
||||
}
|
||||
|
||||
class Get extends NetworkCommand {
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "get";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void subExecute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
|
||||
if (args.length == 1 && (args[0].equals("?") || args[0].equals("help"))) {
|
||||
sender.sendMessage(new TextComponentTranslation(getHelp()));
|
||||
return;
|
||||
}
|
||||
this.player = args.length < 1 ? getCommandSenderAsPlayer(sender) : getPlayer(server, sender, args[0]);
|
||||
sender.sendMessage(new TextComponentString((player != sender ? player.getDisplayName().getFormattedText() + " " : "" + new TextComponentTranslation("tooltip.bloodmagic.sigil.divination.currentEssence", network.getCurrentEssence()).getFormattedText())));
|
||||
}
|
||||
}
|
||||
|
||||
class Cap extends NetworkCommand {
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "cap";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void subExecute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
|
||||
network.setCurrentEssence(NetworkHelper.getMaximumForTier(network.getOrbTier()));
|
||||
sender.sendMessage(new TextComponentTranslation("commands.bloodmagic.network.cap.success", player.getDisplayName().getFormattedText()));
|
||||
}
|
||||
}
|
||||
|
||||
class Fill extends NetworkCommand {
|
||||
|
||||
@Override
|
||||
public String getInfo() {
|
||||
return "" + Integer.MAX_VALUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "fill";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void subExecute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
|
||||
network.setCurrentEssence(Integer.MAX_VALUE);
|
||||
sender.sendMessage(new TextComponentTranslation("commands.bloodmagic.network.fill.success", player.getDisplayName().getFormattedText()));
|
||||
}
|
||||
}
|
||||
|
||||
class Tickets extends NetworkCommand {
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "tickethistory";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void subExecute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
|
||||
List<SoulTicket> tickethistory = network.getTicketHistory();
|
||||
if (tickethistory.isEmpty())
|
||||
for (SoulTicket i : network.getTicketHistory())
|
||||
sender.sendMessage(i.getDescription());
|
||||
sender.sendMessage(new TextComponentTranslation("commands.bloodmagic.success", player.getDisplayName().getFormattedText()));
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue