commit aae3d62a41a763364649eaf2e203d86d57cb6b94 Author: Sebastian Seedorf Date: Sun Dec 6 18:26:17 2020 +0100 initial commit diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..eac92e8 --- /dev/null +++ b/.classpath @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..78ca779 --- /dev/null +++ b/.gitignore @@ -0,0 +1,72 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/eclipse +# Edit at https://www.toptal.com/developers/gitignore?templates=eclipse + +### Eclipse ### +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ +.apt_generated_test/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet + +# Uncomment this line if you wish to ignore the project description file. +# Typically, this file would be tracked if it contains build/dependency configurations: +#.project + +### Eclipse Patch ### +# Spring Boot Tooling +.sts4-cache/ + +# End of https://www.toptal.com/developers/gitignore/api/eclipse + diff --git a/.project b/.project new file mode 100644 index 0000000..41b9bc0 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + Mailings + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_Help.java b/src/me/Caesar2011/Mailings/Commands/Cmd_Help.java new file mode 100644 index 0000000..b6dbba1 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_Help.java @@ -0,0 +1,90 @@ +package me.Caesar2011.Mailings.Commands; + +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.Messenger; + +import org.bukkit.command.CommandSender; + +public class Cmd_Help { + CommandSender sender; + private String[] args; + + public Cmd_Help(CommandSender sender, String[] args){ + this.sender = sender; + this.args = args; + } + + public EnumCmdExe execute(){ + if (args.length == 0){ + args = new String[]{"1"}; + return execute(); + } else if (args[0].equalsIgnoreCase("1")){ + Messenger.sendPlyHeader(sender, "Help - Mail - Shortcuts - Page 1"); + Messenger.sendPlyHelp(sender, "Show help","/mail [Page]"); + Messenger.sendPlyHelp(sender, "Show mail inbox","/inbox [Player]"); + Messenger.sendPlyHelp(sender, "Show mail outbox","/outbox [Player]"); + Messenger.sendPlyHelp(sender, "Read mail","/readmail "); + Messenger.sendPlyHelp(sender, "Delete mail","/delmail "); + Messenger.sendPlyHelp(sender, "Send mail","/sendmail "); + Messenger.sendPlyHelp(sender, "Send mail to everyone","/sendroundmail "); + Messenger.sendPlyHelp(sender, "Reload config","/reloadmail"); + return EnumCmdExe.SUCCESS; + } else if (args[0].equalsIgnoreCase("2")){ + Messenger.sendPlyHeader(sender, "Help - Mail - Longcuts - Page 2"); + Messenger.sendPlyHelp(sender, "Show help","/mail [Page]"); + Messenger.sendPlyHelp(sender, "Show mail inbox","/mail inbox [Player]"); + Messenger.sendPlyHelp(sender, "Show mail outbox","/mail outbox [Player]"); + Messenger.sendPlyHelp(sender, "Read mail","/mail read [Player]"); + Messenger.sendPlyHelp(sender, "Delete mail","/mail del [Player]"); + Messenger.sendPlyHelp(sender, "Send mail","/mail send "); + Messenger.sendPlyHelp(sender, "Send mail to everyone","/mail sendround "); + Messenger.sendPlyHelp(sender, "Reload config","/mail reload"); + return EnumCmdExe.SUCCESS; + } else if (args[0].equalsIgnoreCase("3")){ + Messenger.sendPlyHeader(sender, "Help - ItemMail - Shortcuts - Page 3"); + Messenger.sendPlyHelp(sender, "Show help","/imail [Page]"); + Messenger.sendPlyHelp(sender, "Show item mail inbox","/iinbox [Player]"); + Messenger.sendPlyHelp(sender, "Show item mail outbox","/ioutbox [Player]"); + Messenger.sendPlyHelp(sender, "Read item mail","/readimail "); + Messenger.sendPlyHelp(sender, "Delete item mail and get item","/delimail "); + Messenger.sendPlyHelp(sender, "Send item mail","/sendimail "); + Messenger.sendPlyHelp(sender, "Get item from item mail","/getimail "); + return EnumCmdExe.SUCCESS; + } else if (args[0].equalsIgnoreCase("4")){ + Messenger.sendPlyHeader(sender, "Help - ItemMail - Longcuts - Page 4"); + Messenger.sendPlyHelp(sender, "Show help","/imail [Page]"); + Messenger.sendPlyHelp(sender, "Show item mail inbox","/imail inbox [Player]"); + Messenger.sendPlyHelp(sender, "Show item mail outbox","/imail outbox [Player]"); + Messenger.sendPlyHelp(sender, "Read item mail","/imail read [Player]"); + Messenger.sendPlyHelp(sender, "Delete item mail and get item","/imail del [Player]"); + Messenger.sendPlyHelp(sender, "Send item mail","/imail send "); + Messenger.sendPlyHelp(sender, "Get item from item mail","/imail get "); + Messenger.sendPlyHelp(sender, "Reload config","/imail reload"); + return EnumCmdExe.SUCCESS; + } else if (args[0].equalsIgnoreCase("5")){ + Messenger.sendPlyHeader(sender, "Help - TradeMail - Shortcuts - Page 5"); + Messenger.sendPlyHelp(sender, "Show help","/tmail [Page]"); + Messenger.sendPlyHelp(sender, "Show trade mail inbox","/tinbox [Player]"); + Messenger.sendPlyHelp(sender, "Show trade mail outbox","/toutbox [Player]"); + Messenger.sendPlyHelp(sender, "Read trade mail","/readtmail "); + Messenger.sendPlyHelp(sender, "Send trade mail","/sendtmail "); + Messenger.sendPlyHelp(sender, "Accept trade mail","/accepttmail "); + Messenger.sendPlyHelp(sender, "Deny trade mail","/denytmail "); + return EnumCmdExe.SUCCESS; + } else if (args[0].equalsIgnoreCase("6")){ + Messenger.sendPlyHeader(sender, "Help - TradeMail - Longcuts - Page 6"); + Messenger.sendPlyHelp(sender, "Show help","/tmail [Page]"); + Messenger.sendPlyHelp(sender, "Show trade mail inbox","/tmail inbox [Player]"); + Messenger.sendPlyHelp(sender, "Show trade mail outbox","/tmail outbox [Player]"); + Messenger.sendPlyHelp(sender, "Read trade mail","/tmail read [Player]"); + Messenger.sendPlyHelp(sender, "Send trade mail","/tmail send "); + Messenger.sendPlyHelp(sender, "Accept trade mail","/tmail accept "); + Messenger.sendPlyHelp(sender, "Deny trade mail","/tmail deny "); + Messenger.sendPlyHelp(sender, "Reload config","/tmail reload"); + return EnumCmdExe.SUCCESS; + } else { + args = new String[]{}; + return execute(); + } + } +} diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Delmail.java b/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Delmail.java new file mode 100644 index 0000000..429ca5a --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Delmail.java @@ -0,0 +1,71 @@ +package me.Caesar2011.Mailings.Commands; + +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.EnumPerm; +import me.Caesar2011.Mailings.Library.ItemMail; +import me.Caesar2011.Mailings.Library.ItemMailManager; + +import org.bukkit.Material; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class Cmd_ItemMail_Delmail { + CommandSender sender; + String[] args; + + public Cmd_ItemMail_Delmail(String[] args, CommandSender sender){ + this.args = args; + this.sender = sender; + } + + public EnumCmdExe execute(){ + if (args.length == 0){ + return EnumCmdExe.TOFEWARGS; + } + int mailID = 0; + try { + mailID = Integer.parseInt(args[0]); + } catch (NumberFormatException e) { + return EnumCmdExe.NONUMBER.addArg("%input%", args[0]); + } + + + if (mailID != 0 && mailID <= ItemMailManager.getLastMailID()) { + if (sender instanceof Player){ + Player p = (Player) sender; + String toPlayerName = ItemMailManager.getString(mailID, "ToPlayer"); + //Permissioncheck + if (EnumPerm.IM_DEL_OWN.noPermission(sender) && p.getName().equals(toPlayerName)){ + return EnumCmdExe.NOPERM; + } + if (EnumPerm.IM_DEL_OTHER.noPermission(sender) && !p.getName().equals(toPlayerName)){ + return EnumCmdExe.NOPERM; + } + ItemMail mail = ItemMailManager.getMail(mailID); + if (mail.item != null){ + if (checkIfFits(p, mail.item)){ + p.getInventory().addItem(mail.item); + } else { + return EnumCmdExe.INVFILLED; + } + } + } + ItemMailManager.delMail(mailID); + return EnumCmdExe.MAILDEL.addArg("%mailid%", new Integer(mailID).toString()).addArg("%type%", ItemMailManager.typeName); + } else { + return EnumCmdExe.MAILNOTFOUND.addArg("%mailid%", new Integer(mailID).toString()).addArg("%type%", ItemMailManager.typeName); + } + } + + private boolean checkIfFits(Player p, ItemStack i){ + int a = i.getAmount(); + for (ItemStack item : p.getInventory().getContents()) { + if(item.isSimilar(i) || (item.getType() == Material.AIR)) { + a -= item.getMaxStackSize() - item.getAmount(); + if (a <= 0) return true; + } + } + return false; + } +} diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Getmail.java b/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Getmail.java new file mode 100644 index 0000000..29ee50b --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Getmail.java @@ -0,0 +1,83 @@ +package me.Caesar2011.Mailings.Commands; + +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.ItemMail; +import me.Caesar2011.Mailings.Library.ItemMailManager; +import me.Caesar2011.Mailings.Library.EnumPerm; + +import org.bukkit.Material; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class Cmd_ItemMail_Getmail { + CommandSender sender; + String[] args; + + public Cmd_ItemMail_Getmail(String[] args, CommandSender sender){ + this.args = args; + this.sender = sender; + } + + public EnumCmdExe execute(){ + if (!(sender instanceof Player)){ + return EnumCmdExe.NOCONS; + } + Player p = (Player) sender; + + if (args.length == 0){ + return EnumCmdExe.TOFEWARGS; + } + int mailID = 0; + try { + mailID = Integer.parseInt(args[0]); + } catch (NumberFormatException e) { + return EnumCmdExe.NONUMBER.addArg("%input%", args[0]); + } + + + if (mailID != 0 && mailID <= ItemMailManager.getLastMailID()) { + String toPlayerName = ItemMailManager.getString(mailID, "ToPlayer"); + //Permissioncheck + if (EnumPerm.IM_DEL_OWN.noPermission(p) && p.getName().equals(toPlayerName)){ + return EnumCmdExe.NOPERM; + } + if (EnumPerm.IM_DEL_OTHER.noPermission(p) && !p.getName().equals(toPlayerName)){ + return EnumCmdExe.NOPERM; + } + + + ItemMail mail = ItemMailManager.getMail(mailID); + if (mail.item != null){ + if (checkIfFits(p, mail.item)){ + p.getInventory().addItem(mail.item); + mail.item = null; + ItemMailManager.overrideMail(mail); + } else { + return EnumCmdExe.INVFILLED; + } + } else { + return EnumCmdExe.NOMAILITEM; + } + + + return EnumCmdExe.MAILGET.addArg("%mailid%", new Integer(mailID).toString()).addArg("%type%", ItemMailManager.typeName); + } else { + return EnumCmdExe.MAILNOTFOUND.addArg("%mailid%", new Integer(mailID).toString()).addArg("%type%", ItemMailManager.typeName); + } + } + + private boolean checkIfFits(Player p, ItemStack i){ + int a = i.getAmount(); + for (ItemStack item : p.getInventory().getContents()) { + if(item == null) { + return true; + } + if(item.isSimilar(i) || (item.getType() == Material.AIR)) { + a -= item.getMaxStackSize() - item.getAmount(); + if (a <= 0) return true; + } + } + return false; + } +} diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Inbox.java b/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Inbox.java new file mode 100644 index 0000000..c10fb89 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Inbox.java @@ -0,0 +1,134 @@ +package me.Caesar2011.Mailings.Commands; + +import me.Caesar2011.Mailings.Mailings; +import me.Caesar2011.Mailings.Library.CastPlayer; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgInbox; +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.EnumPerm; +import me.Caesar2011.Mailings.Library.ItemMail; +import me.Caesar2011.Mailings.Library.ItemMailManager; +import me.Caesar2011.Mailings.Library.Messenger; + +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Cmd_ItemMail_Inbox { + + String[] args; + CommandSender sender; //SenderPlayer + String p2; //InboxPlayer + Mailings plugin; + + public Cmd_ItemMail_Inbox(String[] args, CommandSender sender, Mailings plugin){ + this.args = args; + this.sender = sender; + this.plugin = plugin; + } + + public EnumCmdExe execute(){ + if (!(sender instanceof Player) && args.length == 0){ + return EnumCmdExe.TOFEWARGS; + } + + if (this.args.length == 0) { + this.p2 = this.sender.getName(); + } else if (this.args.length == 1) { + this.args = new String[] {this.sender.getName(), this.args[0]}; + } + if (this.args.length >= 2) { + this.p2 = this.args[0]; + } + + boolean showAll = false; + if (p2.equals("-a")){ + showAll = true; + } else { + //Cast the player with p2 -> toPlayer -RENAME-> p2 + CastPlayer caster = new CastPlayer(p2, true, plugin); + OfflinePlayer toPlayer; + try { + toPlayer = caster.search(); + } catch (NullPointerException e){ + return EnumCmdExe.NOPLAYER.addArg("%player%", p2); + } + p2 = toPlayer.getName(); + } + + //Permissioncheck + if (EnumPerm.IM_IBOX_OWN.noPermission(sender) && sender.getName().equals(p2)){ + return EnumCmdExe.NOPERM; + } + if (EnumPerm.IM_IBOX_OTHER.noPermission(sender) && (!sender.getName().equals(p2) || showAll)){ + if (args.length > 2) { + return EnumCmdExe.NOPERM; + } else { + args = new String[]{this.sender.getName(), args[0]}; + } + } + + //Buffer every mail to (maybe offline) player -> mailinbox[] {messageCount elements, inboxCount in use} + int messageCount = ItemMailManager.getLastMailID(); + ItemMail mailinbox[] = new ItemMail[messageCount]; + int inboxCount = 0; + String toPlayerName; + for (int i = 1; i <= messageCount;i++) { + toPlayerName = ItemMailManager.getString(i, "ToPlayer"); + if (showAll || p2.equals(toPlayerName)) { + mailinbox[inboxCount] = ItemMailManager.getMail(i); + inboxCount++; + } + } + + //Calculate fromNr (first mailinbox[fromNr] showed) and toNr (last mailinbox[fromNr] showed) with an optional parameter + int fromNr = 1; + int toNr = 0; + if (args.length >= 2) { + try { + fromNr = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + return EnumCmdExe.NONUMBER.addArg("%input%", args[1]); + } + } + fromNr = Math.max(1, fromNr) - 1; + fromNr = Math.min(fromNr, (inboxCount-1) / 10); + fromNr = fromNr * 10; + toNr = Math.min(inboxCount, fromNr + 10); + + if (showAll) p2 = "@@@"; + + //Show the inbox header + if (sender.getName().equals(p2)) { + Messenger.sendPlyHeader(sender, CfgInbox.TITLE_OWN.getValue().replaceAll("%type%", ItemMailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((inboxCount-1)/10+1) + "]"); + } else { + Messenger.sendPlyHeader(sender, CfgInbox.TITLE_OTHER.getValue().replaceAll("%player%", p2).replaceAll("%type%", ItemMailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((inboxCount-1)/10+1) + "]"); + } + + //Show a message, if inbox is empty + if (inboxCount == 0){ + if (sender.getName().equals(p2)) { + Messenger.sendPlyHeader(sender, CfgInbox.EMPTY_OWN.getValue().replaceAll("%type%", ItemMailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((inboxCount-1)/10+1) + "]"); + } else { + Messenger.sendPlyHeader(sender, CfgInbox.EMPTY_OTHER.getValue().replaceAll("%player%", p2).replaceAll("%type%", ItemMailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((inboxCount-1)/10+1) + "]"); + } + + //Else list every mail from ID fromNr to ID toNr + } else { + for (int j = fromNr; j < toNr; j++) { + int shortMsgLenght = 40; + shortMsgLenght = shortMsgLenght - mailinbox[j].toPlayer.length(); + shortMsgLenght = shortMsgLenght - new Integer(mailinbox[j].ID).toString().length() / 10 + 1; + String shortMsg; + if (shortMsgLenght < mailinbox[j].msg.length()) { + shortMsg = mailinbox[j].msg.substring(0, shortMsgLenght - 1) + "..."; + } else { + shortMsg = mailinbox[j].msg; + } + Messenger.sendPlyInOutBox(sender, mailinbox[j].ID, mailinbox[j].fromPlayer, shortMsg, mailinbox[j].read); + } + } + + //Exit + return EnumCmdExe.SUCCESS; + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Outbox.java b/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Outbox.java new file mode 100644 index 0000000..e8a5a61 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Outbox.java @@ -0,0 +1,134 @@ +package me.Caesar2011.Mailings.Commands; + +import me.Caesar2011.Mailings.Mailings; +import me.Caesar2011.Mailings.Library.CastPlayer; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgOutbox; +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.ItemMail; +import me.Caesar2011.Mailings.Library.ItemMailManager; +import me.Caesar2011.Mailings.Library.Messenger; +import me.Caesar2011.Mailings.Library.EnumPerm; + +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Cmd_ItemMail_Outbox { + + String[] args; + CommandSender sender; //SenderPlayer + String p2; //OutboxPlayer + Mailings plugin; + + public Cmd_ItemMail_Outbox(String[] args, CommandSender sender, Mailings plugin){ + this.args = args; + this.sender = sender; + this.plugin = plugin; + } + + public EnumCmdExe execute(){ + if (!(sender instanceof Player) && args.length == 0){ + return EnumCmdExe.TOFEWARGS; + } + + if (this.args.length == 0) { + this.p2 = this.sender.getName(); + } else if (this.args.length == 1) { + this.args = new String[] {this.sender.getName(), this.args[0]}; + } + if (this.args.length >= 2) { + this.p2 = this.args[0]; + } + + boolean showAll = false; + if (p2.equals("-a")){ + showAll = true; + } else { + //Cast the player with p2 -> fromPlayer -RENAME-> p2 + CastPlayer caster = new CastPlayer(p2, true, plugin); + OfflinePlayer fromPlayer; + try { + fromPlayer = caster.search(); + } catch (NullPointerException e){ + return EnumCmdExe.NOPLAYER.addArg("%player%", p2); + } + p2 = fromPlayer.getName(); + } + + //Permissioncheck + if (EnumPerm.IM_OBOX_OWN.noPermission(sender) && sender.getName().equals(p2)){ + return EnumCmdExe.NOPERM; + } + if (EnumPerm.IM_OBOX_OTHER.noPermission(sender) && !sender.getName().equals(p2)){ + if (args.length > 2) { + return EnumCmdExe.NOPERM; + } else { + args = new String[]{this.sender.getName(), args[0]}; + } + } + + //Buffer every mail from (maybe offline) fromPlayer -> mailoutbox[] {messageCount elements, outboxCount in use} + int messageCount = ItemMailManager.getLastMailID(); + ItemMail mailoutbox[] = new ItemMail[messageCount]; + int outboxCount = 0; + String fromPlayerName; + for (int i = 1; i <= messageCount;i++) { + fromPlayerName = ItemMailManager.getString(i, "FromPlayer"); + if (showAll || p2.equals(fromPlayerName)) { + mailoutbox[outboxCount] = ItemMailManager.getMail(i); + outboxCount++; + } + } + + //Calculate fromNr (first mailoutbox[fromNr] showed) and toNr (last mailoutbox[fromNr] showed) with an optional parameter + int fromNr = 1; + int toNr = 0; + if (args.length >= 2) { + try { + fromNr = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + return EnumCmdExe.NONUMBER.addArg("%input%", args[1]); + } + } + fromNr = Math.max(1, fromNr) - 1; + fromNr = Math.min(fromNr, (outboxCount-1) / 10); + fromNr = fromNr * 10; + toNr = Math.min(outboxCount, fromNr + 10); + + if (showAll) p2 = "@@@"; + + //Show the outbox header + if (sender.getName().equals(p2)) { + Messenger.sendPlyHeader(sender, CfgOutbox.TITLE_OWN.getValue().replaceAll("%type%", ItemMailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((outboxCount-1)/10+1) + "]"); + } else { + Messenger.sendPlyHeader(sender, CfgOutbox.TITLE_OTHER.getValue().replaceAll("%player%", p2).replaceAll("%type%", ItemMailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((outboxCount-1)/10+1) + "]"); + } + + //Show a message, if outbox is empty + if (outboxCount == 0){ + if (sender.getName().equals(p2)) { + Messenger.sendPlyHeader(sender, CfgOutbox.EMPTY_OWN.getValue().replaceAll("%type%", ItemMailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((outboxCount-1)/10+1) + "]"); + } else { + Messenger.sendPlyHeader(sender, CfgOutbox.EMPTY_OTHER.getValue().replaceAll("%player%", p2).replaceAll("%type%", ItemMailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((outboxCount-1)/10+1) + "]"); + } + + //Else list every mail from ID fromNr to ID toNr + } else { + for (int j = fromNr; j < toNr; j++) { + int shortMsgLenght = 40; + shortMsgLenght = shortMsgLenght - mailoutbox[j].fromPlayer.length(); + shortMsgLenght = shortMsgLenght - new Integer(mailoutbox[j].ID).toString().length() / 10 + 1; + String shortMsg; + if (shortMsgLenght < mailoutbox[j].msg.length()) { + shortMsg = mailoutbox[j].msg.substring(0, shortMsgLenght - 1) + "..."; + } else { + shortMsg = mailoutbox[j].msg; + } + Messenger.sendPlyInOutBox(sender, mailoutbox[j].ID, mailoutbox[j].toPlayer, shortMsg, mailoutbox[j].read); + } + } + + //Exit + return EnumCmdExe.SUCCESS; + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Readmail.java b/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Readmail.java new file mode 100644 index 0000000..08afd03 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Readmail.java @@ -0,0 +1,63 @@ +package me.Caesar2011.Mailings.Commands; + +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.EnumPerm; +import me.Caesar2011.Mailings.Library.ItemMail; +import me.Caesar2011.Mailings.Library.ItemMailManager; +import me.Caesar2011.Mailings.Library.Messenger; + +import org.bukkit.command.CommandSender; + +public class Cmd_ItemMail_Readmail { + + String[] args; + CommandSender sender; //SenderPlayer + + public Cmd_ItemMail_Readmail(String[] args, CommandSender sender){ + this.args = args; + this.sender = sender; + } + + public EnumCmdExe execute(){ + if (args.length == 0){ + return EnumCmdExe.TOFEWARGS; + } + int mailID = 0; + + try { + mailID = Integer.parseInt(args[0]); + } catch (NumberFormatException e) { + return EnumCmdExe.NONUMBER.addArg("%input%", args[0]); + } + ItemMail mail = new ItemMail(); + try { + mail = ItemMailManager.getMail(mailID); + } catch (NullPointerException e) { + return EnumCmdExe.MAILNOTFOUND.addArg("%mailid%", new Integer(mailID).toString()).addArg("%type%", ItemMailManager.typeName); + } + + //Permissioncheck + if (EnumPerm.IM_READ_OWN.noPermission(sender) && sender.getName().equals(mail.toPlayer)){ + return EnumCmdExe.NOPERM; + } + if (EnumPerm.IM_READ_OTHER.noPermission(sender) && !sender.getName().equals(mail.toPlayer)){ + return EnumCmdExe.NOPERM; + } + + String itemString; + if (mail.item != null){ + itemString = mail.item.getAmount() + " x " + mail.item.getType().toString().toLowerCase(); + if (mail.item.getDurability() > 0) { + itemString = itemString + " : " + mail.item.getDurability(); + } + } else { + itemString = "N/A"; + } + Messenger.sendPlyRead(sender, mail.msg, mail.toPlayer, mail.fromPlayer, mail.ID, mail.read, mail.sendDate, mail.endDate, ItemMailManager.typeName, itemString, null); + if (mail.toPlayer.equals(sender.getName())) { + mail.read = true; + ItemMailManager.overrideMail(mail); + } + return EnumCmdExe.SUCCESS; + } +} diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Sendmail.java b/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Sendmail.java new file mode 100644 index 0000000..3b5894d --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_ItemMail_Sendmail.java @@ -0,0 +1,102 @@ +package me.Caesar2011.Mailings.Commands; + + +import me.Caesar2011.Mailings.Mailings; +import me.Caesar2011.Mailings.Library.CastPlayer; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgOther; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgPropInt; +import me.Caesar2011.Mailings.Library.CooldownManager.CooldownType; +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.ItemMail; +import me.Caesar2011.Mailings.Library.ItemMailManager; +import me.Caesar2011.Mailings.Library.Messenger; +import me.Caesar2011.Mailings.Library.EnumPerm; + +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class Cmd_ItemMail_Sendmail { + + String[] args; + CommandSender sender; //SenderPlayer + String p2; //TargetPlayer + String m; //Message + ItemStack item; + Mailings plugin; + + public Cmd_ItemMail_Sendmail(String[] args, CommandSender sender, Mailings plugin){ + this.args = args; + this.sender = sender; + this.plugin = plugin; + } + + public EnumCmdExe execute(){ + if (!(sender instanceof Player)){ + return EnumCmdExe.NOCONS; + } + Player p = (Player) sender; + + //Permissioncheck + if (EnumPerm.IM_SEND_SINGLE.noPermission(p)){ + return EnumCmdExe.NOPERM; + } + + //Cooldown + if (EnumPerm.IM_OVER_COOLDOWN.noPermission(p) && !CooldownType.IMAIL.isCoolDown(p)){ + return EnumCmdExe.COOLDOWN.addArg("%amount%", CooldownType.IMAIL.getTimeFormat(p)); + } + + //Check the length of the arguments + if (args.length < 2){ + return EnumCmdExe.TOFEWARGS; + } + + //Create message string m and player name p2 to search + p2 = args[0]; + m = args[1]; + for (int i = 2; i < args.length; i++){ + m = m + ' ' + args[i]; + } + + //Get item from hand -> item + item = p.getItemInHand(); + if (item.getAmount() == 0){ + return EnumCmdExe.NOITEMINHAND; + } + + //Cast the player with p2 -> toPlayer + CastPlayer caster = new CastPlayer(p2, true, plugin); + OfflinePlayer toPlayer; + try { + toPlayer = caster.search(p); + } catch (NullPointerException e){ + return EnumCmdExe.NOPLAYER.addArg("%player%", p2); + } + + //Delete outdated mails/Count inbox of player + int mInBox = ItemMailManager.getInboxAmount(toPlayer, true, false); + + //Check, if inbox of player toPlayer is bursting at the seams -> return + if (mInBox >= CfgPropInt.IMAIL_MAXINBOX.getValue()){ + return EnumCmdExe.INBOXFILLED.addArg("%player%", toPlayer.getName()).addArg("%type%", ItemMailManager.typeName); + } + + //Send, post message to toPlayer + ItemMail mailSended = new ItemMail(p.getName(), toPlayer.getName(), m, item); + ItemMailManager.addMail(mailSended); + if (toPlayer.isOnline()) { + Messenger.sendOtherMsg(toPlayer.getPlayer(), CfgOther.MAILGET, new String[]{"%player%", p.getName()}, new String[]{"%mailid%", new Integer(mailSended.ID).toString()}, new String[]{"%type%", ItemMailManager.typeName}); + } + + //Remove item in hand + ItemStack toDel = p.getItemInHand(); + toDel.setAmount(0); + p.setItemInHand(toDel); + + //Set cooldown and exit + CooldownType.IMAIL.setPlayer(p); + return EnumCmdExe.MAILSEND.addArg("%player%", toPlayer.getName()).addArg("%mailid%", new Integer(mailSended.ID).toString()).addArg("%type%", ItemMailManager.typeName); + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Delmail.java b/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Delmail.java new file mode 100644 index 0000000..144e289 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Delmail.java @@ -0,0 +1,46 @@ +package me.Caesar2011.Mailings.Commands; + +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.EnumPerm; +import me.Caesar2011.Mailings.Library.MailManager; + +import org.bukkit.command.CommandSender; + +public class Cmd_Mail_Delmail { + CommandSender sender; + String[] args; + + public Cmd_Mail_Delmail(String[] args, CommandSender sender){ + this.args = args; + this.sender = sender; + } + + public EnumCmdExe execute(){ + if (args.length == 0){ + return EnumCmdExe.TOFEWARGS; + } + int mailID = 0; + try { + mailID = Integer.parseInt(args[0]); + } catch (NumberFormatException e) { + return EnumCmdExe.NONUMBER.addArg("%input%", args[0]); + } + + + + if (mailID != 0 && mailID <= MailManager.getLastMailID()) { + String toPlayerName = MailManager.getString(mailID, "ToPlayer"); + //Permissioncheck + if (EnumPerm.M_DEL_OWN.noPermission(sender) && sender.getName().equals(toPlayerName)){ + return EnumCmdExe.NOPERM; + } + if (EnumPerm.M_DEL_OTHER.noPermission(sender) && !sender.getName().equals(toPlayerName)){ + return EnumCmdExe.NOPERM; + } + MailManager.delMail(mailID); + return EnumCmdExe.MAILDEL.addArg("%mailid%", new Integer(mailID).toString()).addArg("%type%", MailManager.typeName); + } else { + return EnumCmdExe.MAILNOTFOUND.addArg("%mailid%", new Integer(mailID).toString()).addArg("%type%", MailManager.typeName); + } + } +} diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Inbox.java b/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Inbox.java new file mode 100644 index 0000000..e4653b1 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Inbox.java @@ -0,0 +1,131 @@ +package me.Caesar2011.Mailings.Commands; + +import me.Caesar2011.Mailings.Mailings; +import me.Caesar2011.Mailings.Library.CastPlayer; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgInbox; +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.EnumPerm; +import me.Caesar2011.Mailings.Library.Mail; +import me.Caesar2011.Mailings.Library.MailManager; +import me.Caesar2011.Mailings.Library.Messenger; + +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; +//import me.Caesar2011.Mailings.Library.MailManager; +import org.bukkit.entity.Player; + +public class Cmd_Mail_Inbox { + + String[] args; + CommandSender sender; //SenderPlayer + String p2; //InboxPlayer + Mailings plugin; + + public Cmd_Mail_Inbox(String[] args, CommandSender sender, Mailings plugin){ + this.args = args; + this.sender = sender; + this.plugin = plugin; + } + + public EnumCmdExe execute(){ + if (!(sender instanceof Player) && args.length == 0){ + return EnumCmdExe.TOFEWARGS; + } + + if (this.args.length == 0) { + this.p2 = this.sender.getName(); + } else if (this.args.length == 1) { + this.args = new String[] {this.sender.getName(), this.args[0]}; + } + if (this.args.length >= 2) { + this.p2 = this.args[0]; + } + + boolean showAll = false; + if (p2.equals("-a")){ + showAll = true; + } else { + //Cast the player with p2 -> toPlayer -RENAME-> p2 + CastPlayer caster = new CastPlayer(p2, true, plugin); + OfflinePlayer toPlayer; + try { + toPlayer = caster.search(); + } catch (NullPointerException e){ + return EnumCmdExe.NOPLAYER.addArg("%player%", p2); + } + p2 = toPlayer.getName(); + } + + //Permissioncheck + if (EnumPerm.M_IBOX_OWN.noPermission(sender) && sender.getName().equals(p2)){ + return EnumCmdExe.NOPERM; + } + if (EnumPerm.M_IBOX_OTHER.noPermission(sender) && (!sender.getName().equals(p2) || showAll)){ + return EnumCmdExe.NOPERM; + } + + //Buffer every mail to (maybe offline) player -> mailinbox[] {messageCount elements, inboxCount in use} + int messageCount = MailManager.getLastMailID(); + Mail mailinbox[] = new Mail[messageCount]; + int inboxCount = 0; + String toPlayerName; + for (int i = 1; i <= messageCount;i++) { + toPlayerName = MailManager.getString(i, "ToPlayer"); + if (showAll || p2.equals(toPlayerName)) { + mailinbox[inboxCount] = MailManager.getMail(i); + inboxCount++; + } + } + + //Calculate fromNr (first mailinbox[fromNr] showed) and toNr (last mailinbox[fromNr] showed) with an optional parameter + int fromNr = 1; + int toNr = 0; + if (args.length >= 2) { + try { + fromNr = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + return EnumCmdExe.NONUMBER.addArg("%input%", args[1]); + } + } + fromNr = Math.max(1, fromNr) - 1; + fromNr = Math.min(fromNr, (inboxCount-1) / 10); + fromNr = fromNr * 10; + toNr = Math.min(inboxCount, fromNr + 10); + + if (showAll) p2 = "@@@"; + + //Show the inbox header + if (sender.getName().equals(p2)) { + Messenger.sendPlyHeader(sender, CfgInbox.TITLE_OWN.getValue().replaceAll("%type%", MailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((inboxCount-1)/10+1) + "]"); + } else { + Messenger.sendPlyHeader(sender, CfgInbox.TITLE_OTHER.getValue().replaceAll("%player%", p2).replaceAll("%type%", MailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((inboxCount-1)/10+1) + "]"); + } + + //Show a message, if inbox is empty + if (inboxCount == 0){ + if (sender.getName().equals(p2)) { + Messenger.sendPlyHeader(sender, CfgInbox.EMPTY_OWN.getValue().replaceAll("%type%", MailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((inboxCount-1)/10+1) + "]"); + } else { + Messenger.sendPlyHeader(sender, CfgInbox.EMPTY_OTHER.getValue().replaceAll("%player%", p2).replaceAll("%type%", MailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((inboxCount-1)/10+1) + "]"); + } + + //Else list every mail from ID fromNr to ID toNr + } else { + for (int j = fromNr; j < toNr; j++) { + int shortMsgLenght = 40; + shortMsgLenght = shortMsgLenght - mailinbox[j].toPlayer.length(); + shortMsgLenght = shortMsgLenght - new Integer(mailinbox[j].ID).toString().length() / 10 + 1; + String shortMsg; + if (shortMsgLenght < mailinbox[j].msg.length()) { + shortMsg = mailinbox[j].msg.substring(0, shortMsgLenght - 1) + "..."; + } else { + shortMsg = mailinbox[j].msg; + } + Messenger.sendPlyInOutBox(sender, mailinbox[j].ID, mailinbox[j].fromPlayer, shortMsg, mailinbox[j].read); + } + } + + //Exit + return EnumCmdExe.SUCCESS; + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Outbox.java b/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Outbox.java new file mode 100644 index 0000000..baf8bf5 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Outbox.java @@ -0,0 +1,134 @@ +package me.Caesar2011.Mailings.Commands; + +import me.Caesar2011.Mailings.Mailings; +import me.Caesar2011.Mailings.Library.CastPlayer; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgOutbox; +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.Mail; +import me.Caesar2011.Mailings.Library.MailManager; +import me.Caesar2011.Mailings.Library.Messenger; +import me.Caesar2011.Mailings.Library.EnumPerm; + +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Cmd_Mail_Outbox { + + String[] args; + CommandSender sender; //SenderPlayer + String p2; //OutboxPlayer + Mailings plugin; + + public Cmd_Mail_Outbox(String[] args, CommandSender sender, Mailings plugin){ + this.args = args; + this.sender = sender; + this.plugin = plugin; + } + + public EnumCmdExe execute(){ + if (!(sender instanceof Player) && args.length == 0){ + return EnumCmdExe.TOFEWARGS; + } + + if (this.args.length == 0) { + this.p2 = this.sender.getName(); + } else if (this.args.length == 1) { + this.args = new String[] {this.sender.getName(), this.args[0]}; + } + if (this.args.length >= 2) { + this.p2 = this.args[0]; + } + + boolean showAll = false; + if (p2.equals("-a")){ + showAll = true; + } else { + //Cast the player with p2 -> fromPlayer -RENAME-> p2 + CastPlayer caster = new CastPlayer(p2, true, plugin); + OfflinePlayer fromPlayer; + try { + fromPlayer = caster.search(); + } catch (NullPointerException e){ + return EnumCmdExe.NOPLAYER.addArg("%player%", p2); + } + p2 = fromPlayer.getName(); + } + + //Permissioncheck + if (EnumPerm.M_OBOX_OWN.noPermission(sender) && sender.getName().equals(p2)){ + return EnumCmdExe.NOPERM; + } + if (EnumPerm.M_OBOX_OTHER.noPermission(sender) && !sender.getName().equals(p2)){ + if (args.length > 2) { + return EnumCmdExe.NOPERM; + } else { + args = new String[]{this.sender.getName(), args[0]}; + } + } + + //Buffer every mail from (maybe offline) fromPlayer -> mailoutbox[] {messageCount elements, outboxCount in use} + int messageCount = MailManager.getLastMailID(); + Mail mailoutbox[] = new Mail[messageCount]; + int outboxCount = 0; + String fromPlayerName; + for (int i = 1; i <= messageCount;i++) { + fromPlayerName = MailManager.getString(i, "FromPlayer"); + if (showAll || p2.equals(fromPlayerName)) { + mailoutbox[outboxCount] = MailManager.getMail(i); + outboxCount++; + } + } + + //Calculate fromNr (first mailoutbox[fromNr] showed) and toNr (last mailoutbox[fromNr] showed) with an optional parameter + int fromNr = 1; + int toNr = 0; + if (args.length >= 2) { + try { + fromNr = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + return EnumCmdExe.NONUMBER.addArg("%input%", args[1]); + } + } + fromNr = Math.max(1, fromNr) - 1; + fromNr = Math.min(fromNr, (outboxCount-1) / 10); + fromNr = fromNr * 10; + toNr = Math.min(outboxCount, fromNr + 10); + + if (showAll) p2 = "@@@"; + + //Show the outbox header + if (sender.getName().equals(p2)) { + Messenger.sendPlyHeader(sender, CfgOutbox.TITLE_OWN.getValue().replaceAll("%type%", MailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((outboxCount-1)/10+1) + "]"); + } else { + Messenger.sendPlyHeader(sender, CfgOutbox.TITLE_OTHER.getValue().replaceAll("%player%", p2).replaceAll("%type%", MailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((outboxCount-1)/10+1) + "]"); + } + + //Show a message, if outbox is empty + if (outboxCount == 0){ + if (sender.getName().equals(p2)) { + Messenger.sendPlyHeader(sender, CfgOutbox.EMPTY_OWN.getValue().replaceAll("%type%", MailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((outboxCount-1)/10+1) + "]"); + } else { + Messenger.sendPlyHeader(sender, CfgOutbox.EMPTY_OTHER.getValue().replaceAll("%player%", p2).replaceAll("%type%", MailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((outboxCount-1)/10+1) + "]"); + } + + //Else list every mail from ID fromNr to ID toNr + } else { + for (int j = fromNr; j < toNr; j++) { + int shortMsgLenght = 40; + shortMsgLenght = shortMsgLenght - mailoutbox[j].fromPlayer.length(); + shortMsgLenght = shortMsgLenght - new Integer(mailoutbox[j].ID).toString().length() / 10 + 1; + String shortMsg; + if (shortMsgLenght < mailoutbox[j].msg.length()) { + shortMsg = mailoutbox[j].msg.substring(0, shortMsgLenght - 1) + "..."; + } else { + shortMsg = mailoutbox[j].msg; + } + Messenger.sendPlyInOutBox(sender, mailoutbox[j].ID, mailoutbox[j].toPlayer, shortMsg, mailoutbox[j].read); + } + } + + //Exit + return EnumCmdExe.SUCCESS; + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Readmail.java b/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Readmail.java new file mode 100644 index 0000000..0bc38bf --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Readmail.java @@ -0,0 +1,55 @@ +package me.Caesar2011.Mailings.Commands; + +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.EnumPerm; +import me.Caesar2011.Mailings.Library.ItemMailManager; +import me.Caesar2011.Mailings.Library.Mail; +import me.Caesar2011.Mailings.Library.MailManager; +import me.Caesar2011.Mailings.Library.Messenger; + +import org.bukkit.command.CommandSender; + +public class Cmd_Mail_Readmail { + + String[] args; + CommandSender sender; //SenderPlayer + + public Cmd_Mail_Readmail(String[] args, CommandSender sender){ + this.args = args; + this.sender = sender; + } + + public EnumCmdExe execute(){ + if (args.length == 0){ + return EnumCmdExe.TOFEWARGS; + } + int mailID = 0; + + try { + mailID = Integer.parseInt(args[0]); + } catch (NumberFormatException e) { + return EnumCmdExe.NONUMBER.addArg("%input%", args[0]); + } + Mail mail = new Mail(); + try { + mail = MailManager.getMail(mailID); + } catch (NullPointerException e) { + return EnumCmdExe.MAILNOTFOUND.addArg("%mailid%", new Integer(mailID).toString()).addArg("%type%", MailManager.typeName); + } + + //Permissioncheck + if (EnumPerm.M_READ_OWN.noPermission(sender) && sender.getName().equals(mail.toPlayer)){ + return EnumCmdExe.NOPERM; + } + if (EnumPerm.M_READ_OTHER.noPermission(sender) && !sender.getName().equals(mail.toPlayer)){ + return EnumCmdExe.NOPERM; + } + + Messenger.sendPlyRead(sender, mail.msg, mail.toPlayer, mail.fromPlayer, mail.ID, mail.read, mail.sendDate, mail.endDate, ItemMailManager.typeName, null, null); + if (mail.toPlayer.equals(sender.getName())) { + mail.read = true; + MailManager.overrideMail(mail); + } + return EnumCmdExe.SUCCESS; + } +} diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Sendmail.java b/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Sendmail.java new file mode 100644 index 0000000..079df62 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Sendmail.java @@ -0,0 +1,88 @@ +package me.Caesar2011.Mailings.Commands; + + +import me.Caesar2011.Mailings.Mailings; +import me.Caesar2011.Mailings.Library.CastPlayer; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgOther; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgPropInt; +import me.Caesar2011.Mailings.Library.CooldownManager.CooldownType; +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.EnumPerm; +import me.Caesar2011.Mailings.Library.Mail; +import me.Caesar2011.Mailings.Library.MailManager; +import me.Caesar2011.Mailings.Library.Messenger; + +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Cmd_Mail_Sendmail { + + String[] args; + CommandSender sender; //SenderPlayer + String p2; //TargetPlayer + String m; //Message + Mailings plugin; + + public Cmd_Mail_Sendmail(String[] args, CommandSender sender, Mailings plugin){ + this.args = args; + this.sender = sender; + this.plugin = plugin; + } + + public EnumCmdExe execute(){ + //Permissioncheck + if (EnumPerm.M_SEND_SINGLE.noPermission(sender)){ + return EnumCmdExe.NOPERM; + } + + //Cooldown + if ((sender instanceof Player) && EnumPerm.M_OVER_COOLDOWN.noPermission((Player) sender) && !CooldownType.MAIL.isCoolDown((Player) sender)){ + return EnumCmdExe.COOLDOWN.addArg("%amount%", CooldownType.MAIL.getTimeFormat((Player) sender)); + } + + //Check the length of the arguments + if (args.length < 2){ + return EnumCmdExe.TOFEWARGS; + } + + //Create message string m and player name p2 to search + p2 = args[0]; + m = args[1]; + for (int i = 2; i < args.length; i++){ + m = m + ' ' + args[i]; + } + + //Cast the player with p2 -> toPlayer + CastPlayer caster = new CastPlayer(p2, true, plugin); + OfflinePlayer toPlayer; + try { + if (sender instanceof Player){ + toPlayer = caster.search((Player) sender); + } else { + toPlayer = caster.search(); + } + } catch (NullPointerException e){ + return EnumCmdExe.NOPLAYER.addArg("%player%", p2); + } + + //Delete outdated mails/Count inbox of player + int mInBox = MailManager.getInboxAmount(toPlayer, true, false); + + //Check, if inbox of player toPlayer is bursting at the seams -> return + if (mInBox >= CfgPropInt.MAIL_MAXINBOX.getValue()){ + return EnumCmdExe.INBOXFILLED.addArg("%player%", toPlayer.getName()).addArg("%type%", MailManager.typeName); + } + + //Send, post message to toPlayer + Mail mailSended = new Mail(sender.getName(), toPlayer.getName(), m); + MailManager.addMail(mailSended); + if (toPlayer.isOnline()) { + Messenger.sendOtherMsg(toPlayer.getPlayer(), CfgOther.MAILGET, new String[]{"%player%", sender.getName()}, new String[]{"%mailid%", new Integer(mailSended.ID).toString()}, new String[]{"%type%", MailManager.typeName}); + } + + //Set cooldown and exit + if (sender instanceof Player) {CooldownType.MAIL.setPlayer((Player) sender);} + return EnumCmdExe.MAILSEND.addArg("%player%", toPlayer.getName()).addArg("%mailid%", new Integer(mailSended.ID).toString()).addArg("%type%", MailManager.typeName); + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Sendroundmail.java b/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Sendroundmail.java new file mode 100644 index 0000000..202f699 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_Mail_Sendroundmail.java @@ -0,0 +1,98 @@ +package me.Caesar2011.Mailings.Commands; + +import me.Caesar2011.Mailings.Mailings; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgError; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgOther; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgPropBool; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgPropInt; +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.EnumPerm; +import me.Caesar2011.Mailings.Library.Mail; +import me.Caesar2011.Mailings.Library.MailManager; +import me.Caesar2011.Mailings.Library.Messenger; +import me.Caesar2011.Mailings.Library.PlayerInboxSize; + +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; + +public class Cmd_Mail_Sendroundmail { + + String[] args; + CommandSender sender; //SenderPlayer + String p2; //TargetPlayer + String m; //Message + Mailings plugin; + + public Cmd_Mail_Sendroundmail(String[] args, CommandSender sender, Mailings plugin){ + this.args = args; + this.sender = sender; + this.plugin = plugin; + this.p2 = ""; + this.m = args[0]; + for (int i = 1; i < args.length; i++){ + this.m = this.m + ' ' + args[i]; + } + } + + public EnumCmdExe execute(){ + + //Permissioncheck + if (EnumPerm.M_SEND_ROUND.noPermission(sender)){ + return EnumCmdExe.NOPERM; + } + + //Check the length of the arguments + if (args.length < 1) { + return EnumCmdExe.TOFEWARGS; + } + + //Create message string m + m = args[0]; + for (int i = 1; i < args.length; i++){ + m = m + ' ' + args[i]; + } + + //Get a list with every player ever been on the sever (includes sender) + OfflinePlayer[] everyPlayer = plugin.getServer().getOfflinePlayers(); + Mail mailSended; + + //Delete outdated mails/Count inboxes of players + PlayerInboxSize[] pis = MailManager.getInboxAmount(true, false); + int j = 0; + int pos = -1; + + //Send a mail to every player of the list + for (int i = 0; i < everyPlayer.length; i++){ + + //Check, if inbox of player everyPlayer[i] is bursting at the seams -> continue + pos = -1; + for (j = 0; j < pis.length; j++){ + if (pis[j].Player.equals(everyPlayer[i].getName())){ + pos = j; + break; + } + } + if (pos != -1 && pis[j].Size >= CfgPropInt.MAIL_MAXINBOX.getValue()){ + if(CfgPropBool.MSG_ROUND_FILLED.getValue()){ + Messenger.sendErrorMsg(sender, CfgError.INBOXFILLED, new String[]{"%player%", everyPlayer[i].getName()}); + } + continue; + } + + //Check, if everyPlayer[i] equals sender -> continue + if (everyPlayer[i].getName().equals(sender.getName())){ + continue; + } + + //Send, post message to toPlayer + mailSended = new Mail(sender.getName(), everyPlayer[i].getName(), m); + MailManager.addMail(mailSended); + if (everyPlayer[i].isOnline()) { + Messenger.sendOtherMsg(everyPlayer[i].getPlayer(), CfgOther.MAILGET, new String[]{"%player%", sender.getName()}, new String[]{"%mailid%", new Integer(mailSended.ID).toString()}, new String[]{"%type%", MailManager.typeName}); + } + } + + //Save and exit + return EnumCmdExe.MAILRSEND.addArg("%type%", MailManager.typeName); + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_Reload.java b/src/me/Caesar2011/Mailings/Commands/Cmd_Reload.java new file mode 100644 index 0000000..ab4647b --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_Reload.java @@ -0,0 +1,41 @@ +package me.Caesar2011.Mailings.Commands; + +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import me.Caesar2011.Mailings.Mailings; +import me.Caesar2011.Mailings.Library.ConfigManager; +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.ItemMailManager; +import me.Caesar2011.Mailings.Library.MailManager; +import me.Caesar2011.Mailings.Library.Messenger; +import me.Caesar2011.Mailings.Library.EnumPerm; +import me.Caesar2011.Mailings.Library.TradeMailManager; +import me.Caesar2011.Mailings.Listener.Listener_PlayerJoin; + +public class Cmd_Reload { + Mailings plugin; + CommandSender sender; + + public Cmd_Reload(CommandSender sender, Mailings plugin){ + this.plugin = plugin; + this.sender = sender; + } + + public EnumCmdExe execute(){ + //Permissioncheck + if (EnumPerm.RELOAD.noPermission(sender)){ + return EnumCmdExe.NOPERM; + } + ConfigManager.onReload(); + MailManager.onSave(); + ItemMailManager.onSave(); + TradeMailManager.onSave(); + Messenger.onEnable(); + Player[] everyOnline = plugin.getServer().getOnlinePlayers(); + for (int i = 0; i < everyOnline.length; i++) { + Listener_PlayerJoin.execute(everyOnline[i], plugin); + } + return EnumCmdExe.RELOAD; + } +} diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Acceptmail.java b/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Acceptmail.java new file mode 100644 index 0000000..f3dd559 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Acceptmail.java @@ -0,0 +1,120 @@ +package me.Caesar2011.Mailings.Commands; + +import me.Caesar2011.Mailings.Mailings; +import me.Caesar2011.Mailings.Library.CastPlayer; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgPropInt; +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.ItemMail; +import me.Caesar2011.Mailings.Library.ItemMailManager; +import me.Caesar2011.Mailings.Library.EnumPerm; +import me.Caesar2011.Mailings.Library.StringOperations; +import me.Caesar2011.Mailings.Library.TradeMail; +import me.Caesar2011.Mailings.Library.TradeMailManager; + +import org.bukkit.Material; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class Cmd_TradeMail_Acceptmail { + CommandSender sender; + String[] args; + Mailings plugin; + + public Cmd_TradeMail_Acceptmail(String[] args, CommandSender sender, Mailings plugin){ + this.args = args; + this.sender = sender; + this.plugin = plugin; + } + + public EnumCmdExe execute(){ + //No console + if (!(sender instanceof Player)){ + return EnumCmdExe.NOCONS; + } + Player p = (Player) sender; + + //Args length >= 2 ? -> else fail + if (args.length <= 1){ + return EnumCmdExe.TOFEWARGS; + } + + //try to get ID (mailID) and message (msg) + int mailID = 0; + try { + mailID = Integer.parseInt(args[0]); + } catch (NumberFormatException e) { + return EnumCmdExe.NONUMBER.addArg("%input%", args[0]); + } + String[] strArr = new String[args.length-1]; + for (int i = 1; i < args.length;) { + strArr[i-1] = args[i]; + i++; + } + String msg = StringOperations.getStringArr(strArr); + + //Try to get TradeMail + if (mailID != 0 && mailID <= TradeMailManager.getLastMailID()) { + + String toPlayerName = TradeMailManager.getString(mailID, "ToPlayer"); + + //Permissioncheck + if (EnumPerm.TM_ACC_OWN.noPermission(p) && p.getName().equals(toPlayerName)){ + return EnumCmdExe.NOPERM; + } + if (EnumPerm.TM_ACC_OTHER.noPermission(p) && !p.getName().equals(toPlayerName)){ + return EnumCmdExe.NOPERM; + } + + //Check if can send back + TradeMail mail = TradeMailManager.getMail(mailID); + CastPlayer caster = new CastPlayer(mail.fromPlayer, true, plugin); + if (ItemMailManager.getInboxAmount(caster.search(), true, false) >= CfgPropInt.IMAIL_MAXINBOX.getValue()){ + return EnumCmdExe.INBOXFILLED.addArg("%player%", mail.fromPlayer).addArg("%type%", ItemMailManager.typeName); + } + + //Trade :) and send ItemMail back + if (!checkIfHas(p, mail.reqitem)) { + return EnumCmdExe.NOTENOUGHINV; + } + p.getInventory().removeItem(mail.reqitem); + if (!checkIfFits(p, mail.getitem)) { + p.getInventory().addItem(mail.reqitem); + return EnumCmdExe.INVFILLED; + } + p.getInventory().addItem(mail.getitem); + ItemMail backMail = new ItemMail(mail.toPlayer, mail.fromPlayer, msg, mail.reqitem); + ItemMailManager.addMail(backMail); + + //Finish and send messages + TradeMailManager.delMail(mailID); + return EnumCmdExe.TRADEACC.addArg("%mailid%", new Integer(mailID).toString()).addArg("%type%", TradeMailManager.typeName).addArg("%player%", mail.fromPlayer); + } else { + return EnumCmdExe.MAILNOTFOUND.addArg("%mailid%", new Integer(mailID).toString()).addArg("%type%", TradeMailManager.typeName); + } + } + + private boolean checkIfFits(Player p, ItemStack i){ + int a = i.getAmount(); + for (ItemStack item : p.getInventory().getContents()) { + if (item == null) { + return true; + } else if(item.isSimilar(i) || (item.getType() == Material.AIR)) { + a -= i.getMaxStackSize() - item.getAmount(); + if (a <= 0) return true; + } + } + return false; + } + + private boolean checkIfHas(Player p, ItemStack i){ + int a = i.getAmount(); + for (ItemStack item : p.getInventory().getContents()) { + if(item != null && item.isSimilar(i)) { + a -= item.getAmount(); + if (a <= 0) return true; + } + } + return false; + } +} diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Denymail.java b/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Denymail.java new file mode 100644 index 0000000..f90058e --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Denymail.java @@ -0,0 +1,78 @@ +package me.Caesar2011.Mailings.Commands; + +import me.Caesar2011.Mailings.Mailings; +import me.Caesar2011.Mailings.Library.CastPlayer; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgPropInt; +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.EnumPerm; +import me.Caesar2011.Mailings.Library.ItemMail; +import me.Caesar2011.Mailings.Library.ItemMailManager; +import me.Caesar2011.Mailings.Library.StringOperations; +import me.Caesar2011.Mailings.Library.TradeMail; +import me.Caesar2011.Mailings.Library.TradeMailManager; + +import org.bukkit.command.CommandSender; + +public class Cmd_TradeMail_Denymail { + CommandSender sender; + String[] args; + Mailings plugin; + + public Cmd_TradeMail_Denymail(String[] args, CommandSender sender, Mailings plugin){ + this.args = args; + this.sender = sender; + this.plugin = plugin; + } + + public EnumCmdExe execute(){ + //Args length >= 2 ? -> else fail + if (args.length <= 1){ + return EnumCmdExe.TOFEWARGS; + } + + //Try to get ID (mailID) and message (msg) + int mailID = 0; + try { + mailID = Integer.parseInt(args[0]); + } catch (NumberFormatException e) { + return EnumCmdExe.NONUMBER.addArg("%input%", args[0]); + } + String[] strArr = new String[args.length-1]; + for (int i = 1; i < args.length;) { + strArr[i-1] = args[i]; + i++; + } + String msg = StringOperations.getStringArr(strArr); + + //Try to get TradeMail + if (mailID != 0 && mailID <= TradeMailManager.getLastMailID()) { + + String toPlayerName = TradeMailManager.getString(mailID, "ToPlayer"); + + //Permissioncheck + if (EnumPerm.TM_ACC_OWN.noPermission(sender) && sender.getName().equals(toPlayerName)){ + return EnumCmdExe.NOPERM; + } + if (EnumPerm.TM_ACC_OTHER.noPermission(sender) && !sender.getName().equals(toPlayerName)){ + return EnumCmdExe.NOPERM; + } + + //Check if can send back + TradeMail mail = TradeMailManager.getMail(mailID); + CastPlayer caster = new CastPlayer(mail.fromPlayer, true, plugin); + if (ItemMailManager.getInboxAmount(caster.search(), true, false) >= CfgPropInt.IMAIL_MAXINBOX.getValue()){ + return EnumCmdExe.INBOXFILLED.addArg("%player%", mail.fromPlayer).addArg("%type%", ItemMailManager.typeName); + } + + //Do not trade :) and send ItemMail back + ItemMail backMail = new ItemMail(mail.toPlayer, mail.fromPlayer, msg, mail.getitem); + ItemMailManager.addMail(backMail); + + //Finish and send messages + TradeMailManager.delMail(mailID); + return EnumCmdExe.TRADEDEN.addArg("%mailid%", new Integer(mailID).toString()).addArg("%type%", TradeMailManager.typeName).addArg("%player%", mail.fromPlayer); + } else { + return EnumCmdExe.MAILNOTFOUND.addArg("%mailid%", new Integer(mailID).toString()).addArg("%type%", TradeMailManager.typeName); + } + } +} diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Inbox.java b/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Inbox.java new file mode 100644 index 0000000..f5448c4 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Inbox.java @@ -0,0 +1,134 @@ +package me.Caesar2011.Mailings.Commands; + +import me.Caesar2011.Mailings.Mailings; +import me.Caesar2011.Mailings.Library.CastPlayer; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgInbox; +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.Messenger; +import me.Caesar2011.Mailings.Library.EnumPerm; +import me.Caesar2011.Mailings.Library.TradeMail; +import me.Caesar2011.Mailings.Library.TradeMailManager; + +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Cmd_TradeMail_Inbox { + + String[] args; + CommandSender sender; //SenderPlayer + String p2; //InboxPlayer + Mailings plugin; + + public Cmd_TradeMail_Inbox(String[] args, CommandSender sender, Mailings plugin){ + this.args = args; + this.sender = sender; + this.plugin = plugin; + } + + public EnumCmdExe execute(){ + if (!(sender instanceof Player) && args.length == 0){ + return EnumCmdExe.TOFEWARGS; + } + + if (this.args.length == 0) { + this.p2 = this.sender.getName(); + } else if (this.args.length == 1) { + this.args = new String[] {this.sender.getName(), this.args[0]}; + } + if (this.args.length >= 2) { + this.p2 = this.args[0]; + } + + boolean showAll = false; + if (p2.equals("-a")){ + showAll = true; + } else { + //Cast the player with p2 -> toPlayer -RENAME-> p2 + CastPlayer caster = new CastPlayer(p2, true, plugin); + OfflinePlayer toPlayer; + try { + toPlayer = caster.search(); + } catch (NullPointerException e){ + return EnumCmdExe.NOPLAYER.addArg("%player%", p2); + } + p2 = toPlayer.getName(); + } + + //Permissioncheck + if (EnumPerm.TM_IBOX_OWN.noPermission(sender) && sender.getName().equals(p2)){ + return EnumCmdExe.NOPERM; + } + if (EnumPerm.TM_IBOX_OTHER.noPermission(sender) && (!sender.getName().equals(p2) || showAll)){ + if (args.length > 2) { + return EnumCmdExe.NOPERM; + } else { + args = new String[]{this.sender.getName(), args[0]}; + } + } + + //Buffer every mail to (maybe offline) player -> mailinbox[] {messageCount elements, inboxCount in use} + int messageCount = TradeMailManager.getLastMailID(); + TradeMail mailinbox[] = new TradeMail[messageCount]; + int inboxCount = 0; + String toPlayerName; + for (int i = 1; i <= messageCount;i++) { + toPlayerName = TradeMailManager.getString(i, "ToPlayer"); + if (showAll || p2.equals(toPlayerName)) { + mailinbox[inboxCount] = TradeMailManager.getMail(i); + inboxCount++; + } + } + + //Calculate fromNr (first mailinbox[fromNr] showed) and toNr (last mailinbox[fromNr] showed) with an optional parameter + int fromNr = 1; + int toNr = 0; + if (args.length >= 2) { + try { + fromNr = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + return EnumCmdExe.NONUMBER.addArg("%input%", args[1]); + } + } + fromNr = Math.max(1, fromNr) - 1; + fromNr = Math.min(fromNr, (inboxCount-1) / 10); + fromNr = fromNr * 10; + toNr = Math.min(inboxCount, fromNr + 10); + + if (showAll) p2 = "@@@"; + + //Show the inbox header + if (sender.getName().equals(p2)) { + Messenger.sendPlyHeader(sender, CfgInbox.TITLE_OWN.getValue().replaceAll("%type%", TradeMailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((inboxCount-1)/10+1) + "]"); + } else { + Messenger.sendPlyHeader(sender, CfgInbox.TITLE_OTHER.getValue().replaceAll("%player%", p2).replaceAll("%type%", TradeMailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((inboxCount-1)/10+1) + "]"); + } + + //Show a message, if inbox is empty + if (inboxCount == 0){ + if (sender.getName().equals(p2)) { + Messenger.sendPlyHeader(sender, CfgInbox.EMPTY_OWN.getValue().replaceAll("%type%", TradeMailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((inboxCount-1)/10+1) + "]"); + } else { + Messenger.sendPlyHeader(sender, CfgInbox.EMPTY_OTHER.getValue().replaceAll("%player%", p2).replaceAll("%type%", TradeMailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((inboxCount-1)/10+1) + "]"); + } + + //Else list every mail from ID fromNr to ID toNr + } else { + for (int j = fromNr; j < toNr; j++) { + int shortMsgLenght = 40; + shortMsgLenght = shortMsgLenght - mailinbox[j].toPlayer.length(); + shortMsgLenght = shortMsgLenght - new Integer(mailinbox[j].ID).toString().length() / 10 + 1; + String shortMsg; + if (shortMsgLenght < mailinbox[j].msg.length()) { + shortMsg = mailinbox[j].msg.substring(0, shortMsgLenght - 1) + "..."; + } else { + shortMsg = mailinbox[j].msg; + } + Messenger.sendPlyInOutBox(sender, mailinbox[j].ID, mailinbox[j].fromPlayer, shortMsg, mailinbox[j].read); + } + } + + //Exit + return EnumCmdExe.SUCCESS; + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Outbox.java b/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Outbox.java new file mode 100644 index 0000000..7d6c54b --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Outbox.java @@ -0,0 +1,134 @@ +package me.Caesar2011.Mailings.Commands; + +import me.Caesar2011.Mailings.Mailings; +import me.Caesar2011.Mailings.Library.CastPlayer; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgOutbox; +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.Messenger; +import me.Caesar2011.Mailings.Library.EnumPerm; +import me.Caesar2011.Mailings.Library.TradeMail; +import me.Caesar2011.Mailings.Library.TradeMailManager; + +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Cmd_TradeMail_Outbox { + + String[] args; + CommandSender sender; //SenderPlayer + String p2; //OutboxPlayer + Mailings plugin; + + public Cmd_TradeMail_Outbox(String[] args, CommandSender sender, Mailings plugin){ + this.args = args; + this.sender = sender; + this.plugin = plugin; + } + + public EnumCmdExe execute(){ + if (!(sender instanceof Player) && args.length == 0){ + return EnumCmdExe.TOFEWARGS; + } + + if (this.args.length == 0) { + this.p2 = this.sender.getName(); + } else if (this.args.length == 1) { + this.args = new String[] {this.sender.getName(), this.args[0]}; + } + if (this.args.length >= 2) { + this.p2 = this.args[0]; + } + + boolean showAll = false; + if (p2.equals("-a")){ + showAll = true; + } else { + //Cast the player with p2 -> fromPlayer -RENAME-> p2 + CastPlayer caster = new CastPlayer(p2, true, plugin); + OfflinePlayer fromPlayer; + try { + fromPlayer = caster.search(); + } catch (NullPointerException e){ + return EnumCmdExe.NOPLAYER.addArg("%player%", p2); + } + p2 = fromPlayer.getName(); + } + + //Permissioncheck + if (EnumPerm.TM_OBOX_OWN.noPermission(sender) && sender.getName().equals(p2)){ + return EnumCmdExe.NOPERM; + } + if (EnumPerm.TM_OBOX_OTHER.noPermission(sender) && !sender.getName().equals(p2)){ + if (args.length > 2) { + return EnumCmdExe.NOPERM; + } else { + args = new String[]{this.sender.getName(), args[0]}; + } + } + + //Buffer every mail from (maybe offline) fromPlayer -> mailoutbox[] {messageCount elements, outboxCount in use} + int messageCount = TradeMailManager.getLastMailID(); + TradeMail mailoutbox[] = new TradeMail[messageCount]; + int outboxCount = 0; + String fromPlayerName; + for (int i = 1; i <= messageCount;i++) { + fromPlayerName = TradeMailManager.getString(i, "FromPlayer"); + if (showAll || p2.equals(fromPlayerName)) { + mailoutbox[outboxCount] = TradeMailManager.getMail(i); + outboxCount++; + } + } + + //Calculate fromNr (first mailoutbox[fromNr] showed) and toNr (last mailoutbox[fromNr] showed) with an optional parameter + int fromNr = 1; + int toNr = 0; + if (args.length >= 2) { + try { + fromNr = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + return EnumCmdExe.NONUMBER.addArg("%input%", args[1]); + } + } + fromNr = Math.max(1, fromNr) - 1; + fromNr = Math.min(fromNr, (outboxCount-1) / 10); + fromNr = fromNr * 10; + toNr = Math.min(outboxCount, fromNr + 10); + + if (showAll) p2 = "@@@"; + + //Show the outbox header + if (sender.getName().equals(p2)) { + Messenger.sendPlyHeader(sender, CfgOutbox.TITLE_OWN.getValue().replaceAll("%type%", TradeMailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((outboxCount-1)/10+1) + "]"); + } else { + Messenger.sendPlyHeader(sender, CfgOutbox.TITLE_OTHER.getValue().replaceAll("%player%", p2).replaceAll("%type%", TradeMailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((outboxCount-1)/10+1) + "]"); + } + + //Show a message, if outbox is empty + if (outboxCount == 0){ + if (sender.getName().equals(p2)) { + Messenger.sendPlyHeader(sender, CfgOutbox.EMPTY_OWN.getValue().replaceAll("%type%", TradeMailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((outboxCount-1)/10+1) + "]"); + } else { + Messenger.sendPlyHeader(sender, CfgOutbox.EMPTY_OTHER.getValue().replaceAll("%player%", p2).replaceAll("%type%", TradeMailManager.typeName) + " [" + (fromNr/10+1) + "/" + ((outboxCount-1)/10+1) + "]"); + } + + //Else list every mail from ID fromNr to ID toNr + } else { + for (int j = fromNr; j < toNr; j++) { + int shortMsgLenght = 40; + shortMsgLenght = shortMsgLenght - mailoutbox[j].fromPlayer.length(); + shortMsgLenght = shortMsgLenght - new Integer(mailoutbox[j].ID).toString().length() / 10 + 1; + String shortMsg; + if (shortMsgLenght < mailoutbox[j].msg.length()) { + shortMsg = mailoutbox[j].msg.substring(0, shortMsgLenght - 1) + "..."; + } else { + shortMsg = mailoutbox[j].msg; + } + Messenger.sendPlyInOutBox(sender, mailoutbox[j].ID, mailoutbox[j].toPlayer, shortMsg, mailoutbox[j].read); + } + } + + //Exit + return EnumCmdExe.SUCCESS; + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Readmail.java b/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Readmail.java new file mode 100644 index 0000000..0f8009e --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Readmail.java @@ -0,0 +1,73 @@ +package me.Caesar2011.Mailings.Commands; + +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.EnumPerm; +import me.Caesar2011.Mailings.Library.ItemMailManager; +import me.Caesar2011.Mailings.Library.Messenger; +import me.Caesar2011.Mailings.Library.TradeMail; +import me.Caesar2011.Mailings.Library.TradeMailManager; + +import org.bukkit.command.CommandSender; + +public class Cmd_TradeMail_Readmail { + + String[] args; + CommandSender sender; //SenderPlayer + + public Cmd_TradeMail_Readmail(String[] args, CommandSender sender){ + this.args = args; + this.sender = sender; + } + + public EnumCmdExe execute(){ + if (args.length == 0){ + return EnumCmdExe.TOFEWARGS; + } + int mailID = 0; + + try { + mailID = Integer.parseInt(args[0]); + } catch (NumberFormatException e) { + return EnumCmdExe.NONUMBER.addArg("%input%", args[0]); + } + TradeMail mail = new TradeMail(); + try { + mail = TradeMailManager.getMail(mailID); + } catch (NullPointerException e) { + return EnumCmdExe.MAILNOTFOUND.addArg("%mailid%", new Integer(mailID).toString()).addArg("%type%", TradeMailManager.typeName); + } + + //Permissioncheck + if (EnumPerm.TM_READ_OWN.noPermission(sender) && sender.getName().equals(mail.toPlayer)){ + return EnumCmdExe.NOPERM; + } + if (EnumPerm.TM_READ_OTHER.noPermission(sender) && !sender.getName().equals(mail.toPlayer)){ + return EnumCmdExe.NOPERM; + } + + String getItemString; + if (mail.getitem != null){ + getItemString = mail.getitem.getAmount() + " x " + mail.getitem.getType().toString().toLowerCase(); + if (mail.getitem.getDurability() > 0) { + getItemString = getItemString + " : " + mail.getitem.getDurability(); + } + } else { + getItemString = "N/A"; + } + String reqItemString; + if (mail.reqitem != null){ + reqItemString = mail.reqitem.getAmount() + " x " + mail.reqitem.getType().toString().toLowerCase(); + if (mail.reqitem.getDurability() > 0) { + reqItemString = reqItemString + " : " + mail.reqitem.getDurability(); + } + } else { + reqItemString = "N/A"; + } + Messenger.sendPlyRead(sender, mail.msg, mail.toPlayer, mail.fromPlayer, mail.ID, mail.read, mail.sendDate, mail.endDate, ItemMailManager.typeName, getItemString, reqItemString); + if (mail.toPlayer.equals(sender.getName())) { + mail.read = true; + TradeMailManager.overrideMail(mail); + } + return EnumCmdExe.SUCCESS; + } +} diff --git a/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Sendmail.java b/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Sendmail.java new file mode 100644 index 0000000..a7435f3 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Commands/Cmd_TradeMail_Sendmail.java @@ -0,0 +1,108 @@ +package me.Caesar2011.Mailings.Commands; + + +import me.Caesar2011.Mailings.Mailings; +import me.Caesar2011.Mailings.Library.CastPlayer; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgOther; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgPropInt; +import me.Caesar2011.Mailings.Library.CooldownManager.CooldownType; +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.Messenger; +import me.Caesar2011.Mailings.Library.EnumPerm; +import me.Caesar2011.Mailings.Library.StringOperations; +import me.Caesar2011.Mailings.Library.TradeMail; +import me.Caesar2011.Mailings.Library.TradeMailManager; + +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class Cmd_TradeMail_Sendmail { + + String[] args; + CommandSender sender; //SenderPlayer + String p2; //TargetPlayer + String m; //Message + ItemStack getitem; + ItemStack reqitem; + Mailings plugin; + + public Cmd_TradeMail_Sendmail(String[] args, CommandSender sender, Mailings plugin){ + this.args = args; + this.sender = sender; + this.plugin = plugin; + } + + public EnumCmdExe execute(){ + if (!(sender instanceof Player)){ + return EnumCmdExe.NOCONS; + } + Player p = (Player) sender; + + //Permissioncheck + if (EnumPerm.TM_SEND_SINGLE.noPermission(p)){ + return EnumCmdExe.NOPERM; + } + + //Cooldown + if (EnumPerm.IM_OVER_COOLDOWN.noPermission(p) && !CooldownType.TMAIL.isCoolDown(p)){ + return EnumCmdExe.COOLDOWN.addArg("%amount%", CooldownType.TMAIL.getTimeFormat(p)); + } + + //Check the length of the arguments + if (args.length < 3){ + return EnumCmdExe.TOFEWARGS; + } + + //Create message string m and player name p2 to search + p2 = args[0]; + reqitem = StringOperations.getItemStack(args[1]); + if (reqitem == null) { + return EnumCmdExe.NOITEM; + } + m = args[2]; + for (int i = 3; i < args.length; i++){ + m = m + ' ' + args[i]; + } + + //Get item from hand -> item + getitem = p.getItemInHand(); + if (getitem.getAmount() == 0){ + return EnumCmdExe.NOITEMINHAND; + } + + //Cast the player with p2 -> toPlayer + CastPlayer caster = new CastPlayer(p2, true, plugin); + OfflinePlayer toPlayer; + try { + toPlayer = caster.search(p); + } catch (NullPointerException e){ + return EnumCmdExe.NOPLAYER.addArg("%player%", p2); + } + + //Delete outdated mails/Count inbox of player + int mInBox = TradeMailManager.getInboxAmount(toPlayer, true, false); + + //Check, if inbox of player toPlayer is bursting at the seams -> return + if (mInBox >= CfgPropInt.TMAIL_MAXINBOX.getValue()){ + return EnumCmdExe.INBOXFILLED.addArg("%player%", toPlayer.getName()).addArg("%type%", TradeMailManager.typeName); + } + + //Send, post message to toPlayer + TradeMail mailSended = new TradeMail(p.getName(), toPlayer.getName(), m, getitem, reqitem); + TradeMailManager.addMail(mailSended); + if (toPlayer.isOnline()) { + Messenger.sendOtherMsg(toPlayer.getPlayer(), CfgOther.MAILGET, new String[]{"%player%", p.getName()}, new String[]{"%mailid%", new Integer(mailSended.ID).toString()}, new String[]{"%type%", TradeMailManager.typeName}); + } + + //Remove item in hand + ItemStack toDel = p.getItemInHand(); + toDel.setAmount(0); + p.setItemInHand(toDel); + + //Set cooldown and exit + CooldownType.TMAIL.setPlayer(p); + return EnumCmdExe.MAILSEND.addArg("%player%", toPlayer.getName()).addArg("%mailid%", new Integer(mailSended.ID).toString()).addArg("%type%", TradeMailManager.typeName); + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Library/CastPlayer.java b/src/me/Caesar2011/Mailings/Library/CastPlayer.java new file mode 100644 index 0000000..c51fc86 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/CastPlayer.java @@ -0,0 +1,62 @@ +package me.Caesar2011.Mailings.Library; + +import me.Caesar2011.Mailings.Mailings; + +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +public class CastPlayer { + public String nameToSearch; + public boolean searchOffPlayers; + private Mailings plugin; + + public CastPlayer(String nameToSearch, boolean searchOffPlayers, Mailings plugin){ + this.nameToSearch = nameToSearch; + this.searchOffPlayers = searchOffPlayers; + this.plugin = plugin; + } + + public OfflinePlayer search(){ + //Search for an online player matching + Player[] everyOnline = plugin.getServer().getOnlinePlayers(); + for(int i = 0;i < everyOnline.length;i++){ + if (everyOnline[i].getName().toLowerCase().indexOf(nameToSearch.toLowerCase()) >= 0){ + return everyOnline[i]; + } + } + if (!searchOffPlayers){ + throw (RuntimeException) null; + } + + OfflinePlayer[] every = plugin.getServer().getOfflinePlayers(); + for(int i = 0;i < every.length;i++){ + if (every[i].getName().toLowerCase().indexOf(nameToSearch.toLowerCase()) >= 0){ + return every[i]; + } + } + + throw (RuntimeException) null; + } + + public OfflinePlayer search(Player except){ + //Search for an online player matching + Player[] everyOnline = plugin.getServer().getOnlinePlayers(); + for(int i = 0;i < everyOnline.length;i++){ + if (everyOnline[i].getName().toLowerCase().indexOf(nameToSearch.toLowerCase()) >= 0 && !everyOnline[i].getName().equalsIgnoreCase(except.getName())){ + return everyOnline[i]; + } + } + if (!searchOffPlayers){ + throw (RuntimeException) null; + } + + OfflinePlayer[] every = plugin.getServer().getOfflinePlayers(); + for(int i = 0;i < every.length;i++){ + if (every[i].getName().toLowerCase().indexOf(nameToSearch.toLowerCase()) >= 0 && !every[i].getName().equalsIgnoreCase(except.getName())){ + return every[i]; + } + } + + throw (RuntimeException) null; + } +} diff --git a/src/me/Caesar2011/Mailings/Library/ColorOperations.java b/src/me/Caesar2011/Mailings/Library/ColorOperations.java new file mode 100644 index 0000000..6174e21 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/ColorOperations.java @@ -0,0 +1,38 @@ +package me.Caesar2011.Mailings.Library; + +import org.bukkit.ChatColor; + +public class ColorOperations { + private static String seperator = "&"; + private static String strings = "0123456789abcdef"; + private static ChatColor[] colors = { + ChatColor.BLACK, + ChatColor.DARK_BLUE, + ChatColor.DARK_GREEN, + ChatColor.DARK_AQUA, + ChatColor.DARK_RED, + ChatColor.DARK_PURPLE, + ChatColor.GOLD, + ChatColor.GRAY, + ChatColor.DARK_GRAY, + ChatColor.DARK_BLUE, + ChatColor.GREEN, + ChatColor.AQUA, + ChatColor.RED, + ChatColor.LIGHT_PURPLE, + ChatColor.YELLOW, + ChatColor.WHITE + }; + + public static ChatColor getChatColor(String str){ + if (str.length() == 2 && str.substring(0, 1).equals(seperator)){ + char c = str.charAt(1); + for (int i = 0; i < strings.length(); i++) { + if (c == strings.charAt(i)){ + return colors[i]; + } + } + } + return null; + } +} diff --git a/src/me/Caesar2011/Mailings/Library/ConfigManager.java b/src/me/Caesar2011/Mailings/Library/ConfigManager.java new file mode 100644 index 0000000..6ef0a0b --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/ConfigManager.java @@ -0,0 +1,378 @@ +package me.Caesar2011.Mailings.Library; + +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.FileConfiguration; + + +public class ConfigManager { + + interface CfgStr { + String getValue(); + void setValue(String s); + } + + interface CfgBool { + boolean getValue(); + void setValue(boolean s); + } + + interface CfgInt { + int getValue(); + void setValue(int s); + } + + interface CfgCol { + ChatColor getValue(); + } + + public enum CfgError implements CfgStr{ + NOPLAYER("NoPlayerFound", "The Player %player% could not be found."), + NONUMBER("NoNumber", "%input% is not a valid number."), + NOITEM("NoItem", "%input% is not a valid item."), + TOFEWARGS("ToFewArgs", "You have entered too few arguments."), + MAILNOTFOUND("MailNotFound", "The %type% with ID %mailid% is not found."), + MAILDAMAGED("DamagedMail", "The %type% with ID %mailid% is damaged. Please notify server admin!"), + SENDYORSELF("SendToYourself", "You can not send %type% to yourself."), + INBOXFILLED("InboxIsBurstingAtTheSeams", "The %type% inbox of %player% is bursting at the seams. Sending unsuccessful."), + NOITEMINHAND("NoItemInHand", "You have to hold an item to send in your hand."), + NOPERM("NoPermission", "You have not enough permissions."), + INVFILLED("InventoryFilledToCapacity", "You have no empty space to store item."), + NOMAILITEM("NoItemInMail", "Item was taken out already."), + NOTENOUGHINV("NotEnoughItemsInInv", "You don not have enough items in in your inventory."), + NOCONS("NoConsole", "Not from console until now."), + COOLDOWN("CooldownTimer", "You have to wait %amount% until entering this command again."), + UNKNOWN("UnknownError", "There was an unknown error."); + private String path; + private String def; + CfgError(String path, String def){this.path = path;this.def = def;} + public String getValue(){return getStr(getPath());} + public void setValue(String s){onGet().set(getPath(), s);} + private String getPath(){return ErrorPath + "." + path;} + private String getDefault(){return def;} + } + + public enum CfgOther implements CfgStr{ + RELOAD("ReloadConfig", "Config was reloaded."), + MAILSEND("SendMail", "The %type% with ID %mailid% was sent to %player%."), + MAILRSEND("SendRoundMail", "A %type% round mail was sent."), + MAILGET("GetMail", "You got a new %type% with ID %mailid% from %player%."), + MAILDEL("DelMail", "The %type% with ID %mailid% deleted successfully."), + ITEMGET("GetItem", "You got the item from %type% with ID %mailid%."), + TRADEACC("TradeAccepted", "You accepted the %type% %mailid% of %player%."), + TRADEDEN("TradeDenied", "You denied the %type% %mailid% of %player%."); + private String path; + private String def; + CfgOther(String path, String def){this.path = path;this.def = def;} + public String getValue(){return getStr(getPath());} + public void setValue(String s){onGet().set(getPath(), s);} + private String getPath(){return OtherPath + "." + path;} + private String getDefault(){return def;} + } + + public enum CfgInbox implements CfgStr{ + TITLE_OWN(TitlePath + ".Own", "Your %type% inbox:"), + TITLE_OTHER(TitlePath + ".Other", "%player%s %type% inbox:"), + EMPTY_OWN(EmptyPath + ".Own", "Your %type% inbox is empty."), + EMPTY_OTHER(EmptyPath + ".Other", "%player%s %type% inbox is empty."); + private String path; + private String def; + CfgInbox(String path, String def){this.path = path;this.def = def;} + public String getValue(){return getStr(getPath());} + public void setValue(String s){onGet().set(getPath(), s);} + private String getPath(){return InboxPath + path;} + private String getDefault(){return def;} + } + + public enum CfgOutbox implements CfgStr{ + TITLE_OWN(TitlePath + ".Own", "Your %type% outbox:"), + TITLE_OTHER(TitlePath + ".Other", "%player%s %type% outbox:"), + EMPTY_OWN(EmptyPath + ".Own", "Your %type% outbox is empty."), + EMPTY_OTHER(EmptyPath + ".Other", "%player%s %type% outbox is empty."); + private String path; + private String def; + CfgOutbox(String path, String def){this.path = path;this.def = def;} + public String getValue(){return getStr(getPath());} + public void setValue(String s){onGet().set(getPath(), s);} + private String getPath(){return OutboxPath + path;} + private String getDefault(){return def;} + } + + public enum CfgEntry implements CfgStr{ + NONEW("NoNewMail", "You have no new %type% messages."), + ONENEW("OneNewMail", "You have a new %type% message."), + MORENEW("MoreNewMail", "You have %amount% new %type% messages."); + private String path; + private String def; + CfgEntry(String path, String def){this.path = path;this.def = def;} + public String getValue(){return getStr(getPath());} + public void setValue(String s){onGet().set(getPath(), s);} + private String getPath(){return EntryPath + "." + path;} + private String getDefault(){return def;} + } + + public enum CfgRead implements CfgStr{ + TO("To", "To"), + FROM("From", "From"), + READ("Read", "Read"), + SENDDATE("SendDate", "SendDate"), + ENDDATE("EndDate", "EndDate"), + MAILTYPE("Type", "Type"), + ITEM("Item", "Item"), + REQITEM("ReqItem", "ReqItem"), + GETITEM("GetItem", "GetItem"), + MESSAGE("Message", "Message"); + private String path; + private String def; + CfgRead(String path, String def){this.path = path;this.def = def;} + public String getValue(){return getStr(getPath());} + public void setValue(String s){onGet().set(getPath(), s);} + private String getPath(){return ReadPath + "." + path;} + private String getDefault(){return def;} + } + + public enum CfgFormat implements CfgBool{ + ERR_UNDER("ErrorUnderlined", true), + ERR_BOLD("ErrorBolded", false), + HEAD_UNDER("HeaderUnderlined", true), + HEAD_BOLD("HeaderBolded", false); + private String path; + private boolean def; + CfgFormat(String path, boolean def){this.path = path;this.def = def;} + public boolean getValue(){return getBool(getPath());} + public void setValue(boolean s){onGet().set(getPath(), s);} + private String getPath(){return PropertyPath + "." + path;} + private boolean getDefault(){return def;} + } + + public enum CfgColor implements CfgCol{ + MSG_FST("FirstMsgColor", "&5"), + MSG_SEC("SecoundMsgColor", "&d"), + ERR_FST("FirstErrColor", "&4"), + ERR_SEC("SecoundErrColor", "&c"), + PREFIX("PrefixColor", "&6"); + private String path; + private String def; + CfgColor(String path, String def){this.path = path;this.def = def;} + public ChatColor getValue(){return ColorOperations.getChatColor(getStr(getPath()));} + private String getPath(){return PropertyPath + "." + path;} + private String getDefault(){return def;} + } + + public enum CfgPropStr implements CfgStr{ + MAIL_NAME("Mail.Name", "Mail"), + IMAIL_NAME("ItemMail.Name", "ItemMail"), + TMAIL_NAME("TradeMail.Name", "TradeMail"), + PRESTRING("PrefixName", "Mailings"); + private String path; + private String def; + CfgPropStr(String path, String def){this.path = path;this.def = def;} + public String getValue(){return getStr(getPath());} + public void setValue(String s){onGet().set(getPath(), s);} + private String getPath(){return PropertyPath + "." + path;} + private String getDefault(){return def;} + } + + public enum CfgPropBool implements CfgBool{ + MSG_ROUND_FILLED("BroadcastIfInboxIsBurstingAtTheSeams", false), + SHOWLOGIN("ShowOnLogin", true), + SHOWLOGINEMPTY("ShowEmptyOnLogin", false); + private String path; + private boolean def; + CfgPropBool(String path, boolean def){this.path = path;this.def = def;} + public boolean getValue(){return getBool(getPath());} + public void setValue(boolean s){onGet().set(getPath(), s);} + private String getPath(){return PropertyPath + "." + path;} + private boolean getDefault(){return def;} + } + + public enum CfgPropInt implements CfgInt{ + MAIL_MAXINBOX("Mail.MaxInboxPerPlayer", 20), + IMAIL_MAXINBOX("ItemMail.MaxInboxPerPlayer", 20), + TMAIL_MAXINBOX("TradeMail.MaxInboxPerPlayer", 20), + MAIL_COOLDOWN("Mail.CooldownInMillis", 10000), + IMAIL_COOLDOWN("ItemMail.CooldownInMillis", 10000), + TMAIL_COOLDOWN("TradeMail.CooldownInMillis", 10000), + MAIL_PRICE_SEND("Mail.PriceSend", 10), + IMAIL_PRICE_SEND("ItemMail.PriceSend", 10), + TMAIL_PRICE_SEND("TradeMail.PriceSend", 10), + AUTODEL("DaysUntilAutoDeleting", 28); + private String path; + private int def; + CfgPropInt(String path, int def){this.path = path;this.def = def;} + public int getValue(){return getInt(getPath());} + public void setValue(int s){onGet().set(getPath(), s);} + private String getPath(){return PropertyPath + "." + path;} + private int getDefault(){return def;} + } + + private static String ConfigPath = "Mailings.Config"; + private static String MessagePath = ConfigPath + ".Messages"; + private static String EntryPath = MessagePath + ".Entry"; + private static String ReadPath = MessagePath + ".Read"; + private static String ErrorPath = MessagePath + ".Error"; + private static String OtherPath = MessagePath + ".Other"; + private static String PropertyPath = ConfigPath + ".Proerties"; + private static String InboxPath = MessagePath + ".Inbox"; + private static String OutboxPath = MessagePath + ".Outbox"; + private static String TitlePath = ".Title"; + private static String EmptyPath = ".Empty"; + + + public static final String className = "ConfigManager"; + private static final String fileName = "config.yml"; + private static FileManager file = new FileManager(className, fileName); + + + public static void onEnable(){ + file.onEnable(); + + + for (CfgError e: CfgError.values()){ + onGet().addDefault(e.getPath(), e.getDefault()); + } + for (CfgOther e: CfgOther.values()){ + onGet().addDefault(e.getPath(), e.getDefault()); + } + for (CfgInbox e: CfgInbox.values()){ + onGet().addDefault(e.getPath(), e.getDefault()); + } + for (CfgOutbox e: CfgOutbox.values()){ + onGet().addDefault(e.getPath(), e.getDefault()); + } + for (CfgEntry e: CfgEntry.values()){ + onGet().addDefault(e.getPath(), e.getDefault()); + } + for (CfgRead e: CfgRead.values()){ + onGet().addDefault(e.getPath(), e.getDefault()); + } + for (CfgFormat e: CfgFormat.values()){ + onGet().addDefault(e.getPath(), e.getDefault()); + } + for (CfgPropStr e: CfgPropStr.values()){ + onGet().addDefault(e.getPath(), e.getDefault()); + } + for (CfgPropBool e: CfgPropBool.values()){ + onGet().addDefault(e.getPath(), e.getDefault()); + } + for (CfgPropInt e: CfgPropInt.values()){ + onGet().addDefault(e.getPath(), e.getDefault()); + } + for (CfgColor e: CfgColor.values()){ + onGet().addDefault(e.getPath(), e.getDefault()); + } + + + onGet().options().copyDefaults(true); + onSave(); + + //TODO + MailManager.typeName = CfgPropStr.MAIL_NAME.getValue(); + ItemMailManager.typeName = CfgPropStr.IMAIL_NAME.getValue(); + TradeMailManager.typeName = CfgPropStr.TMAIL_NAME.getValue(); + + onRepair(); + } + + public static void onDisable(){ + file.onDisable(); + } + + private static FileConfiguration onGet(){ + return file.onGet(); + } + + public static void onSave(){ + file.onSave(); + } + + + + private static String getStr(String path){ + if (onGet().contains(path) && onGet().isString(path)){ + return onGet().getString(path); + } else { + throw (RuntimeException) null; + } + } + + private static Integer getInt(String path){ + if (onGet().contains(path) && onGet().isInt(path)){ + return onGet().getInt(path); + } else { + throw (RuntimeException) null; + } + } + + private static Boolean getBool(String path){ + if (onGet().contains(path) && onGet().isBoolean(path)){ + return onGet().getBoolean(path); + } else { + throw (RuntimeException) null; + } + } + + public static void onReload(){ + onEnable(); + } + + public static void onRepair(){ + boolean changed = false; + if (onGet().contains(PropertyPath + ".ErrColor")){ + String x = onGet().getString(PropertyPath + ".ErrColor"); + onGet().set(PropertyPath + ".FirstErrColor", x); + onGet().set(PropertyPath + ".ErrColor", null); + changed = true; + } + + if (onGet().contains(PropertyPath + ".MaxInboxPerPlayer")){ + int x = onGet().getInt(PropertyPath + ".MaxInboxPerPlayer"); + CfgPropInt.MAIL_MAXINBOX.setValue(x); + CfgPropInt.IMAIL_MAXINBOX.setValue(x); + CfgPropInt.TMAIL_MAXINBOX.setValue(x); + onGet().set(PropertyPath + ".MaxInboxPerPlayer", null); + changed = true; + } + + for (String para: new String[]{"%type%", "%mailid%", "%input%", "%player%", "%amount%"}) { + for (CfgError c: CfgError.values()) { + if (c.getDefault().contains(para) && !onGet().getString(c.getPath()).contains(para)){ + onGet().set(c.getPath(), null); + changed = true; + } + } + for (CfgOther c: CfgOther.values()) { + if (c.getDefault().contains(para) && !onGet().getString(c.getPath()).contains(para)){ + onGet().set(c.getPath(), null); + changed = true; + } + } + for (CfgOutbox c: CfgOutbox.values()) { + if (c.getDefault().contains(para) && !onGet().getString(c.getPath()).contains(para)){ + onGet().set(c.getPath(), null); + changed = true; + } + } + for (CfgInbox c: CfgInbox.values()) { + if (c.getDefault().contains(para) && !onGet().getString(c.getPath()).contains(para)){ + onGet().set(c.getPath(), null); + changed = true; + } + } + for (CfgEntry c: CfgEntry.values()) { + if (c.getDefault().contains(para) && !onGet().getString(c.getPath()).contains(para)){ + onGet().set(c.getPath(), null); + changed = true; + } + } + for (CfgRead c: CfgRead.values()) { + if (c.getDefault().contains(para) && !onGet().getString(c.getPath()).contains(para)){ + onGet().set(c.getPath(), null); + changed = true; + } + } + + onSave(); + if (changed) System.out.println("[" + Messenger.getPreStr() + "] Config updated to latest version."); + } + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Library/CooldownManager.java b/src/me/Caesar2011/Mailings/Library/CooldownManager.java new file mode 100644 index 0000000..deb3ac2 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/CooldownManager.java @@ -0,0 +1,67 @@ +package me.Caesar2011.Mailings.Library; + + +import me.Caesar2011.Mailings.Library.ConfigManager.CfgPropInt; + +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; + +public class CooldownManager { + + public enum CooldownType{ + MAIL("Send.Mail", CfgPropInt.MAIL_COOLDOWN), + IMAIL("Send.ItemMail", CfgPropInt.IMAIL_COOLDOWN), + TMAIL("Send.TradeMail", CfgPropInt.TMAIL_COOLDOWN); + String path; + CfgPropInt cooldown; + + CooldownType(String path, CfgPropInt cooldown){this.path = path + ".";this.cooldown = cooldown;} + public void setPlayer(Player p) {onGet().set(path + p.getName(), System.currentTimeMillis());onSave();} + public boolean isCoolDown(Player p){return (getMillisLeft(p) == 0);} + public long getMillisLeft(Player p){return Math.max(0,onGet().getLong(path + p.getName(), 0) + cooldown.getValue() - System.currentTimeMillis());} + public String getTimeFormat(Player p){ + String timeStr= ""; + long millisLeft = getMillisLeft(p); + if (millisLeft > 1000*60*60*24){ + timeStr = timeStr + (millisLeft/(1000*60*60*24)) + "d"; + millisLeft = millisLeft%(1000*60*60*24); + } + if (millisLeft > 1000*60*60){ + timeStr = timeStr + (millisLeft/(1000*60*60)) + "h"; + millisLeft = millisLeft%(1000*60*60); + } + if (millisLeft > 1000*60){ + timeStr = timeStr + (millisLeft/(1000*60)) + "m"; + millisLeft = millisLeft%(1000*60); + } + if (millisLeft > 1000){ + timeStr = timeStr + (millisLeft/(1000)) + "s"; + millisLeft = millisLeft%(1000); + } + if (millisLeft > 0){ + timeStr = timeStr + millisLeft + "ms"; + } + return timeStr; + } + } + + public static final String className = "CooldownManager"; + private static final String fileName = "cooldown.yml"; + private static FileManager file = new FileManager(className, fileName); + + public static void onEnable(){ + file.onEnable(); + } + + public static void onDisable(){ + file.onDisable(); + } + + private static FileConfiguration onGet(){ + return file.onGet(); + } + + public static void onSave(){ + file.onSave(); + } +} diff --git a/src/me/Caesar2011/Mailings/Library/DateOperations.java b/src/me/Caesar2011/Mailings/Library/DateOperations.java new file mode 100644 index 0000000..24f6e6c --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/DateOperations.java @@ -0,0 +1,135 @@ +package me.Caesar2011.Mailings.Library; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +public class DateOperations { + + Date d; + + public DateOperations(Date d){ + Calendar cal = Calendar.getInstance(); + cal.setTime(d); + cal.set(Calendar.MILLISECOND, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.HOUR_OF_DAY, 0); + this.d = cal.getTime(); + } + + public DateOperations(String s){ + SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy"); + try{ + this.d = format.parse(s); + } catch (ParseException e) { + this.d = new Date(); + } + } + + public void addSecounds(int amount){ + Calendar cal = Calendar.getInstance(); + cal.setTime(d); + cal.add(Calendar.SECOND, amount); + d = cal.getTime(); + } + + public void addMinutes(int amount){ + Calendar cal = Calendar.getInstance(); + cal.setTime(d); + cal.add(Calendar.MINUTE, amount); + d = cal.getTime(); + } + + public void addHours(int amount){ + Calendar cal = Calendar.getInstance(); + cal.setTime(d); + cal.add(Calendar.HOUR, amount); + d = cal.getTime(); + } + + public void addDays(int amount){ + Calendar cal = Calendar.getInstance(); + cal.setTime(d); + cal.add(Calendar.DAY_OF_MONTH, amount); + d = cal.getTime(); + } + + public void addMonth(int amount){ + Calendar cal = Calendar.getInstance(); + cal.setTime(d); + cal.add(Calendar.MONTH, amount); + d = cal.getTime(); + } + + public void addYears(int amount){ + Calendar cal = Calendar.getInstance(); + cal.setTime(d); + cal.add(Calendar.YEAR, amount); + d = cal.getTime(); + } + + public Date toDate(){ + return this.d; + } + + public String toString(){ + Calendar cal = Calendar.getInstance(); + cal.setTime(d); + String buffDay = new Integer(cal.get(Calendar.DAY_OF_MONTH)).toString(); + if (buffDay.length() == 1){ + buffDay = "0" + buffDay; + } + String buffMonth = new Integer(cal.get(Calendar.MONTH) + 1).toString(); + if (buffMonth.length() == 1){ + buffMonth = "0" + buffMonth; + } + String buffYear = new Integer(cal.get(Calendar.YEAR)).toString(); + return buffDay + "." + buffMonth + "." + buffYear; + } + + public boolean isBefore(Date date){ + DateOperations DateToComp = new DateOperations(date); + if(d.compareTo(DateToComp.toDate()) < 0){ + return true; + } else { + return false; + } + } + + public boolean isBefore(String string){ + DateOperations DateToComp = new DateOperations(string); + if(d.compareTo(DateToComp.toDate()) < 0){ + return true; + } else { + return false; + } + } + + public boolean isAfter(Date date){ + DateOperations DateToComp = new DateOperations(date); + if(d.compareTo(DateToComp.toDate()) > 0){ + return true; + } else { + return false; + } + } + + public boolean isAfter(String string) { + DateOperations DateToComp = new DateOperations(string); + if(d.compareTo(DateToComp.toDate()) > 0){ + return true; + } else { + return false; + } + } + + public boolean isAfter(DateOperations endDate) { + DateOperations DateToComp = endDate; + if(d.compareTo(DateToComp.toDate()) > 0){ + return true; + } else { + return false; + } + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Library/Economy.java b/src/me/Caesar2011/Mailings/Library/Economy.java new file mode 100644 index 0000000..630722c --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/Economy.java @@ -0,0 +1,80 @@ +/** + * + */ +package me.Caesar2011.Mailings.Library; + +import me.Caesar2011.Mailings.Mailings; + +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.RegisteredServiceProvider; + +import cosine.boseconomy.BOSEconomy; + + +public class Economy { + + public enum EconPlugin{ + NONE, + BOSECONOMY, + VAULT; + } + + static boolean isEnabled = false; + static EconPlugin EconType = EconPlugin.NONE; + static BOSEconomy bose_economy = null; + static net.milkbowl.vault.economy.Economy vault_economy = null; + + + public static void onEnable(Mailings plugin){ + // BOSEconomy + Plugin temp = plugin.getServer().getPluginManager().getPlugin("BOSEconomy"); + if(temp != null){ + EconType = EconPlugin.BOSECONOMY; + bose_economy = (BOSEconomy) temp; + System.out.println("[" + Messenger.getPreStr() + "] BOSEconomy found and loaded."); + return; + } + + + RegisteredServiceProvider economyProvider = plugin.getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); + if (economyProvider != null) { + vault_economy = economyProvider.getProvider(); + if (vault_economy != null) { + EconType = EconPlugin.VAULT; + System.out.println("[" + Messenger.getPreStr() + "] Vault found and loaded."); + return; + } + } + + + System.out.println("[" + Messenger.getPreStr() + "] No Economy plugin found. Economy function disabled."); + } + + public static boolean addMoney(double x, String name){ + if (EconType == EconPlugin.NONE) return true; + if (EconType == EconPlugin.BOSECONOMY) return bose_economy.addPlayerMoney(name, x, false); + if (EconType == EconPlugin.VAULT) return vault_economy.depositPlayer(name, x).transactionSuccess(); + return false; + } + + public static boolean remMoney(double x, String name){ + if (EconType == EconPlugin.NONE) return true; + if (!hasEnough(x, name)) return false; + if (EconType == EconPlugin.BOSECONOMY) return bose_economy.addPlayerMoney(name, -x, false); + if (EconType == EconPlugin.VAULT) return vault_economy.withdrawPlayer(name, x).transactionSuccess(); + return false; + } + + public static boolean hasEnough(double x, String name){ + if (EconType == EconPlugin.NONE) return true; + if (EconType == EconPlugin.BOSECONOMY) { + if (x >= bose_economy.getPlayerMoneyDouble(name)) return true; + else return false; + } + if (EconType == EconPlugin.VAULT) { + if (vault_economy.has(name, x)) return true; + else return false; + } + else return false; + } +} diff --git a/src/me/Caesar2011/Mailings/Library/EnumCmdExe.java b/src/me/Caesar2011/Mailings/Library/EnumCmdExe.java new file mode 100644 index 0000000..c2d7464 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/EnumCmdExe.java @@ -0,0 +1,71 @@ +package me.Caesar2011.Mailings.Library; + +import java.util.ArrayList; + +import me.Caesar2011.Mailings.Library.ConfigManager.CfgError; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgOther; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgStr; + + +public enum EnumCmdExe { + SUCCESS (true, true, null), + RELOAD (true, true, CfgOther.RELOAD), + MAILDEL (true, true, CfgOther.MAILDEL), + MAILGET (true, true, CfgOther.MAILGET), + MAILSEND (true, true, CfgOther.MAILSEND), + MAILRSEND (true, true, CfgOther.MAILRSEND), + ITEMGET (true, true, CfgOther.ITEMGET), + TRADEACC (true, true, CfgOther.TRADEACC), + TRADEDEN (true, true, CfgOther.TRADEDEN), + + NOMAILITEM (false, true, CfgError.NOMAILITEM), + INVFILLED (false, true, CfgError.INVFILLED), + NOPERM (false, true, CfgError.NOPERM), + NOCONS (false, true, CfgError.NOCONS), + INBOXFILLED (false, true, CfgError.INBOXFILLED), + NOITEMINHAND(false, true, CfgError.NOITEMINHAND), + NOITEM (false, true, CfgError.NOITEM), + NOTENOUGHINV(false, true, CfgError.NOTENOUGHINV), + COOLDOWN (false, true, CfgError.COOLDOWN), + MAILNOTFOUND(false, false, CfgError.MAILNOTFOUND), + NOPLAYER (false, false, CfgError.NOPLAYER), + TOFEWARGS (false, false, CfgError.TOFEWARGS), + NONUMBER (false, false, CfgError.NONUMBER), + UNKNOWN (false, false, CfgError.UNKNOWN); + + private boolean noerror; + private boolean ret; + private CfgStr msg; + private ArrayList args = new ArrayList(); + + EnumCmdExe(boolean noerror, boolean ret, CfgStr msg){ + this.noerror = noerror; + this.ret = ret; + this.msg = msg; + } + + public boolean isError(){ + return !noerror; + } + + public boolean getReturn(){ + return ret; + } + + public CfgStr getMsg(){ + return msg; + } + + public EnumCmdExe addArg(String match, String replace){ + args.add(new String[]{match, replace}); + return this; + } + + public String[][] getArgs(){ + return args.toArray(new String[args.size()][2]); + } + + public void delArgs() { + args.clear(); + } +} diff --git a/src/me/Caesar2011/Mailings/Library/EnumPerm.java b/src/me/Caesar2011/Mailings/Library/EnumPerm.java new file mode 100644 index 0000000..fa6abdb --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/EnumPerm.java @@ -0,0 +1,61 @@ +package me.Caesar2011.Mailings.Library; + +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public enum EnumPerm { + IM_OVER_COOLDOWN("itemmail.overridecooldown"), + IM_DEL_OWN("itemmail.delete.own"), + IM_DEL_OTHER("itemmail.delete.other"), + IM_IBOX_OWN("itemmail.inbox.own"), + IM_IBOX_OTHER("itemmail.inbox.other"), + IM_OBOX_OWN("itemmail.outbox.own"), + IM_OBOX_OTHER("itemmail.outbox.other"), + IM_READ_OWN("itemmail.read.own"), + IM_READ_OTHER("itemmail.read.other"), + IM_SEND_SINGLE("itemmail.send.single"), + M_OVER_COOLDOWN("mail.overridecooldown"), + M_DEL_OWN("mail.delete.own"), + M_DEL_OTHER("mail.delete.other"), + M_IBOX_OWN("mail.inbox.own"), + M_IBOX_OTHER("mail.inbox.other"), + M_OBOX_OWN("mail.outbox.own"), + M_OBOX_OTHER("mail.outbox.other"), + M_READ_OWN("mail.read.own"), + M_READ_OTHER("mail.read.other"), + M_SEND_SINGLE("mail.send.single"), + M_SEND_ROUND("mail.send.round"), + TM_OVER_COOLDOWN("trademail.overridecooldown"), + TM_ACC_OWN("trademail.accept.own"), + TM_ACC_OTHER("trademail.accept.other"), + TM_IBOX_OWN("trademail.inbox.own"), + TM_IBOX_OTHER("trademail.inbox.other"), + TM_OBOX_OWN("trademail.outbox.own"), + TM_OBOX_OTHER("trademail.outbox.other"), + TM_READ_OWN("trademail.read.own"), + TM_READ_OTHER("trademail.read.other"), + TM_SEND_SINGLE("trademail.send.single"), + RELOAD("reload"); + + private String perm; + private final String main = "mailings."; + + EnumPerm(String perm) + { + this.perm = perm; + } + + public boolean hasPermission(CommandSender sender) + { + if(!(sender instanceof Player)){ + return true; + } + if (((Player)sender).hasPermission(main + perm)) return true; + return false; + } + + public boolean noPermission(CommandSender sender) + { + return !hasPermission(sender); + } +} diff --git a/src/me/Caesar2011/Mailings/Library/FileManager.java b/src/me/Caesar2011/Mailings/Library/FileManager.java new file mode 100644 index 0000000..f8473ff --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/FileManager.java @@ -0,0 +1,69 @@ +package me.Caesar2011.Mailings.Library; + +import java.io.File; +import java.io.IOException; + +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +public class FileManager { + protected boolean isLoaded = false; + protected String className; + protected String fileName; + protected String filePath; + protected FileConfiguration yaml = null; + protected File file; + + protected FileManager(String className, String fileName){ + this.className = className; + this.fileName = fileName; + this.filePath = "plugins" + File.separator + "Mailings" + File.separator + fileName; + this.file = new File(filePath); + } + + protected void onEnable(){ + if (!file.exists()) { + try { + file.createNewFile(); + } catch (Exception e) { + try { + new File(file.getAbsoluteFile().getParentFile().toString()).mkdir(); + file.createNewFile(); + } catch (IOException e1) { + System.err.println(ChatColor.DARK_RED + "[" + Messenger.getPreStr() + "] " + className + ": Could not create new file. (IOException)"); + return; + } + } + System.out.println("[" + Messenger.getPreStr() + "] " + className + ": \"" + fileName + "\" did not exist. Created new!"); + } + yaml = YamlConfiguration.loadConfiguration(file); + isLoaded = true; + System.out.println("[" + Messenger.getPreStr() + "] " + className + ": Loaded."); + } + + protected void onDisable(){ + if (isLoaded) { + onSave(); + } + file = null; + System.out.println("[" + Messenger.getPreStr() + "] " + className + ": Saved."); + } + + protected FileConfiguration onGet(){ + if (!isLoaded){ + onEnable(); + } + return yaml; + } + + protected void onSave(){ + try { + onGet().save(file); + } catch (IOException e) { + System.err.println(ChatColor.DARK_RED + "[" + Messenger.getPreStr() + "] " + className + ": Could not save file. (IOException)"); + } + } + + +} diff --git a/src/me/Caesar2011/Mailings/Library/ItemMail.java b/src/me/Caesar2011/Mailings/Library/ItemMail.java new file mode 100644 index 0000000..3e1749c --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/ItemMail.java @@ -0,0 +1,22 @@ +package me.Caesar2011.Mailings.Library; + +import org.bukkit.inventory.ItemStack; + +public class ItemMail extends Mail{ + public ItemStack item; + + public ItemMail (){ + super(); + this.item = null; + } + + public ItemMail (String from, String to, String msg, ItemStack item){ + super(from, to, msg); + this.item = item; + } + + public ItemMail (String from, String to, String[] msg, ItemStack item){ + super(from, to, msg); + this.item = item; + } +} diff --git a/src/me/Caesar2011/Mailings/Library/ItemMailManager.java b/src/me/Caesar2011/Mailings/Library/ItemMailManager.java new file mode 100644 index 0000000..69b068d --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/ItemMailManager.java @@ -0,0 +1,202 @@ +package me.Caesar2011.Mailings.Library; + +import java.util.ArrayList; +import java.util.Date; + +import org.bukkit.OfflinePlayer; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.inventory.ItemStack; + +public class ItemMailManager { + public static String typeName = "ItemMail"; + public static final String className = "ItemMailManager"; + private static final String fileName = "itemmail.yml"; + private static final String mailPath = "Mails"; + private static FileManager file = new FileManager(className, fileName); + + public static void onEnable(){ + file.onEnable(); + } + + public static void onDisable(){ + file.onDisable(); + } + + private static FileConfiguration onGet(){ + return file.onGet(); + } + + public static void onSave(){ + file.onSave(); + } + + public static void addMail(ItemMail iMail){ + iMail.ID = getNextMailID(); + saveMail(iMail); + } + + public static void overrideMail(ItemMail iMail){ + String mailPathInsert = mailPath + "." + iMail.ID; + if (onGet().contains(mailPathInsert)){ + saveMail(iMail); + } + } + + private static void saveMail(final ItemMail iMail){ + String mailPathInsert = mailPath + "." + iMail.ID; + if (iMail.ID > 0){ + onGet().set(mailPathInsert + "." + "FromPlayer", iMail.fromPlayer); + onGet().set(mailPathInsert + "." + "ToPlayer", iMail.toPlayer); + onGet().set(mailPathInsert + "." + "Message", iMail.msg); + onGet().set(mailPathInsert + "." + "SendDate", iMail.sendDate.toString()); + onGet().set(mailPathInsert + "." + "EndDate", iMail.endDate.toString()); + onGet().set(mailPathInsert + "." + "Read", iMail.read); + if (iMail.item != null) { + onGet().set(mailPathInsert + "." + "ItemStack.Type", iMail.item.getTypeId()); + onGet().set(mailPathInsert + "." + "ItemStack.Amount", iMail.item.getAmount()); + onGet().set(mailPathInsert + "." + "ItemStack.Damage", iMail.item.getDurability()); + onGet().set(mailPathInsert + "." + "ItemStack.Empty", false); + } else { + onGet().set(mailPathInsert + "." + "ItemStack.Empty", true); + } + } + onSave(); + } + + public static ItemMail getMail(final Integer id){ + ItemMail iMail = new ItemMail(); + String mailPathInsert = mailPath + "." + id.toString(); + if (onGet().contains(mailPathInsert)){ + iMail.ID = id; + iMail.fromPlayer = onGet().getString(mailPathInsert + "." + "FromPlayer"); + iMail.toPlayer = onGet().getString(mailPathInsert + "." + "ToPlayer"); + iMail.msg = onGet().getString(mailPathInsert + "." + "Message"); + iMail.sendDate = new DateOperations(onGet().getString(mailPathInsert + "." + "SendDate")); + iMail.endDate = new DateOperations(onGet().getString(mailPathInsert + "." + "EndDate")); + if (onGet().getBoolean(mailPathInsert + "." + "ItemStack.Empty")){ + iMail.item = null; + } else { + iMail.item = new ItemStack(onGet().getInt(mailPathInsert + "." + "ItemStack.Type"),onGet().getInt(mailPathInsert + "." + "ItemStack.Amount"),(short) onGet().getInt(mailPathInsert + "." + "ItemStack.Damage")); + } + iMail.read = onGet().getBoolean(mailPathInsert + "." + "Read"); + return iMail; + } + throw (RuntimeException) null; + } + + public static String getString(Integer id, String fieldName){ + String mailPathGet = mailPath + "." + id.toString() + "." + fieldName; + if (onGet().contains(mailPathGet) && onGet().isString(mailPathGet)){ + return onGet().getString(mailPathGet); + } + throw (RuntimeException) null; + } + + public static Integer getInt(Integer id, String fieldName){ + String mailPathGet = mailPath + "." + id.toString() + "." + fieldName; + if (onGet().contains(mailPathGet) && onGet().isInt(mailPathGet)){ + return onGet().getInt(mailPathGet); + } + throw (RuntimeException) null; + } + + public static Boolean getBool(Integer id, String fieldName){ + String mailPathGet = mailPath + "." + id.toString() + "." + fieldName; + if (onGet().contains(mailPathGet) && onGet().isBoolean(mailPathGet)){ + return onGet().getBoolean(mailPathGet); + } + throw (RuntimeException) null; + } + + public static Integer getLastMailID() { + try{ + return onGet().getConfigurationSection(mailPath).getKeys(false).size(); + } catch(NullPointerException e){ + return 0; + } + } + + public static Integer getNextMailID() { + return getLastMailID() + 1; + } + + public static void delMail(final Integer id){ + onRepair(); + String mailToDel = mailPath + "." + id; + String mailLast = mailPath + "." + getLastMailID(); + if (onGet().contains(mailToDel)){ + ItemMail iMail = getMail(getLastMailID()); + iMail.ID = id; + overrideMail(iMail); + onGet().set(mailLast, null); + } + onSave(); + } + + public static Integer getInboxAmount(OfflinePlayer p, boolean DelOld, boolean UnreadOnly){ + onRepair(); + int result = 0; + if (onGet().contains(mailPath)){ + int length = onGet().getConfigurationSection(mailPath).getKeys(false).size(); + ItemMail buffer = null; + DateOperations now = new DateOperations(new Date()); + for(int i = 1; i <= length; i++){ + if (onGet().contains(mailPath + "." + i)){ + buffer = getMail(i); + if (now.isAfter(buffer.endDate) && DelOld){ + delMail(i); + length--; + continue; + } + if (!buffer.toPlayer.equals(p.getName())){ + continue; + } + if (!(buffer.read && UnreadOnly)){ + result++; + } + } + } + } + return result; + } + + public static PlayerInboxSize[] getInboxAmount(boolean DelOld, boolean UnreadOnly){ + onRepair(); + ArrayList result = new ArrayList(); + if (onGet().contains(mailPath)){ + int length = onGet().getConfigurationSection(mailPath).getKeys(false).size(); + ItemMail buffer = null; + DateOperations now = new DateOperations(new Date()); + for(int i = 1; i <= length; i++){ + if (onGet().contains(mailPath + "." + i)){ + buffer = getMail(i); + if (now.isAfter(buffer.endDate) && DelOld){ + delMail(i); + length--; + continue; + } + if (!(buffer.read && UnreadOnly)){ + boolean found = false; + for(int j = 0; j < result.size(); j++){ + if (result.get(j).Player.equals(buffer.toPlayer)){ + result.get(j).Size = result.get(j).Size + 1; + found = true; + break; + } + } + if (!found){ + result.add(new PlayerInboxSize(buffer.toPlayer)); + } + } + } + } + } + PlayerInboxSize[] array = new PlayerInboxSize[result.size()]; + result.toArray(array); + return array; + } + + private static void onRepair() { + //TODO + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Library/Mail.java b/src/me/Caesar2011/Mailings/Library/Mail.java new file mode 100644 index 0000000..fa116ce --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/Mail.java @@ -0,0 +1,42 @@ +package me.Caesar2011.Mailings.Library; + +import java.util.Date; + +import me.Caesar2011.Mailings.Library.ConfigManager.CfgPropInt; + +public class Mail { + public int ID; + public String fromPlayer; + public String toPlayer; + public String msg; + public DateOperations sendDate; + public DateOperations endDate; + public boolean read; + + public Mail () { + this.ID = 0; + this.fromPlayer = null; + this.toPlayer = null; + this.msg = ""; + this.sendDate = new DateOperations(new Date()); + this.endDate = new DateOperations(new Date()); + this.endDate.addDays(CfgPropInt.AUTODEL.getValue()); + this.read = false; + } + + public Mail(String from, String to, String msg){ + this.ID = ItemMailManager.getNextMailID(); + this.fromPlayer = from; + this.toPlayer = to; + this.msg = msg; + this.sendDate = new DateOperations(new Date()); + this.endDate = new DateOperations(new Date()); + this.endDate.addDays(CfgPropInt.AUTODEL.getValue()); + this.read = false; + } + + public Mail(String from, String to, String[] msg){ + String newMsg = StringOperations.getStringArr(msg); + new Mail(from, to, newMsg); + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Library/MailManager.java b/src/me/Caesar2011/Mailings/Library/MailManager.java new file mode 100644 index 0000000..23b94ae --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/MailManager.java @@ -0,0 +1,188 @@ +package me.Caesar2011.Mailings.Library; + +import java.util.ArrayList; +import java.util.Date; + +import org.bukkit.OfflinePlayer; +import org.bukkit.configuration.file.FileConfiguration; + +public class MailManager { + public static String typeName = "Mail"; + public static final String className = "MailManager"; + private static final String fileName = "mail.yml"; + private static final String mailPath = "Mails"; + private static FileManager file = new FileManager(className, fileName); + + public static void onEnable(){ + file.onEnable(); + } + + public static void onDisable(){ + file.onDisable(); + } + + private static FileConfiguration onGet(){ + return file.onGet(); + } + + public static void onSave(){ + file.onSave(); + } + + public static void addMail(Mail mail){ + mail.ID = getNextMailID(); + saveMail(mail); + } + + public static void overrideMail(Mail mail){ + String mailPathInsert = mailPath + "." + mail.ID; + if (onGet().contains(mailPathInsert)){ + saveMail(mail); + } + } + + private static void saveMail(final Mail mail){ + String mailPathInsert = mailPath + "." + mail.ID; + if (mail.ID > 0){ + onGet().set(mailPathInsert + "." + "FromPlayer", mail.fromPlayer); + onGet().set(mailPathInsert + "." + "ToPlayer", mail.toPlayer); + onGet().set(mailPathInsert + "." + "Message", mail.msg); + onGet().set(mailPathInsert + "." + "SendDate", mail.sendDate.toString()); + onGet().set(mailPathInsert + "." + "EndDate", mail.endDate.toString()); + onGet().set(mailPathInsert + "." + "Read", mail.read); + } + onSave(); + } + + public static Mail getMail(final Integer id){ + Mail mail = new Mail(); + String mailPathInsert = mailPath + "." + id.toString(); + if (onGet().contains(mailPathInsert)){ + mail.ID = id; + mail.fromPlayer = onGet().getString(mailPathInsert + "." + "FromPlayer"); + mail.toPlayer = onGet().getString(mailPathInsert + "." + "ToPlayer"); + mail.msg = onGet().getString(mailPathInsert + "." + "Message"); + mail.sendDate = new DateOperations(onGet().getString(mailPathInsert + "." + "SendDate")); + mail.endDate = new DateOperations(onGet().getString(mailPathInsert + "." + "EndDate")); + mail.read = onGet().getBoolean(mailPathInsert + "." + "Read"); + return mail; + } + throw (RuntimeException) null; + } + + public static String getString(Integer id, String fieldName){ + String mailPathGet = mailPath + "." + id.toString() + "." + fieldName; + if (onGet().contains(mailPathGet) && onGet().isString(mailPathGet)){ + return onGet().getString(mailPathGet); + } + throw (RuntimeException) null; + } + + public static Integer getInt(Integer id, String fieldName){ + String mailPathGet = mailPath + "." + id.toString() + "." + fieldName; + if (onGet().contains(mailPathGet) && onGet().isInt(mailPathGet)){ + return onGet().getInt(mailPathGet); + } + throw (RuntimeException) null; + } + + public static Boolean getBool(Integer id, String fieldName){ + String mailPathGet = mailPath + "." + id.toString() + "." + fieldName; + if (onGet().contains(mailPathGet) && onGet().isBoolean(mailPathGet)){ + return onGet().getBoolean(mailPathGet); + } + throw (RuntimeException) null; + } + + public static Integer getLastMailID() { + try{ + return onGet().getConfigurationSection(mailPath).getKeys(false).size(); + } catch(NullPointerException e){ + return 0; + } + } + + public static Integer getNextMailID() { + return getLastMailID() + 1; + } + + public static void delMail(final Integer id){ + onRepair(); + String mailToDel = mailPath + "." + id; + String mailLast = mailPath + "." + getLastMailID(); + if (onGet().contains(mailToDel)){ + Mail me = getMail(getLastMailID()); + me.ID = id; + overrideMail(me); + file.onGet().set(mailLast, null); + } + onSave(); + } + + public static Integer getInboxAmount(OfflinePlayer p, boolean DelOld, boolean UnreadOnly){ + onRepair(); + int result = 0; + if (file.onGet().contains(mailPath)){ + int length = file.onGet().getConfigurationSection(mailPath).getKeys(false).size(); + Mail buffer = null; + DateOperations now = new DateOperations(new Date()); + for(int i = 1; i <= length; i++){ + if (onGet().contains(mailPath + "." + i)){ + buffer = getMail(i); + if (now.isAfter(buffer.endDate) && DelOld){ + delMail(i); + length--; + continue; + } + if (!buffer.toPlayer.equals(p.getName())){ + continue; + } + if (!(buffer.read && UnreadOnly)){ + result++; + } + } + } + } + return result; + } + + public static PlayerInboxSize[] getInboxAmount(boolean DelOld, boolean UnreadOnly){ + onRepair(); + ArrayList result = new ArrayList(); + if (file.onGet().contains(mailPath)){ + int length = file.onGet().getConfigurationSection(mailPath).getKeys(false).size(); + Mail buffer = null; + DateOperations now = new DateOperations(new Date()); + for(int i = 1; i <= length; i++){ + if (onGet().contains(mailPath + "." + i)){ + buffer = getMail(i); + if (now.isAfter(buffer.endDate) && DelOld){ + delMail(i); + length--; + continue; + } + if (!(buffer.read && UnreadOnly)){ + boolean found = false; + for(int j = 0; j < result.size(); j++){ + if (result.get(j).Player.equals(buffer.toPlayer)){ + result.get(j).Size = result.get(j).Size + 1; + found = true; + break; + } + } + if (!found){ + result.add(new PlayerInboxSize(buffer.toPlayer)); + } + } + } + } + } + PlayerInboxSize[] array = new PlayerInboxSize[result.size()]; + result.toArray(array); + return array; + } + + private static void onRepair() { + //TODO + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Library/Messenger.java b/src/me/Caesar2011/Mailings/Library/Messenger.java new file mode 100644 index 0000000..439be87 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/Messenger.java @@ -0,0 +1,158 @@ +package me.Caesar2011.Mailings.Library; + +import me.Caesar2011.Mailings.Library.ConfigManager.CfgColor; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgFormat; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgPropStr; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgRead; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgStr; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +public class Messenger { + private static ChatColor preColor = ChatColor.GOLD; + private static String preString = "Mailings"; + private static ChatColor msgColor1 = ChatColor.DARK_PURPLE; + private static ChatColor msgColor2 = ChatColor.LIGHT_PURPLE; + private static ChatColor errColor1 = ChatColor.DARK_RED; + private static ChatColor errColor2 = ChatColor.RED; + private static boolean errUnderlined = true; + private static boolean errBolded = true; + private static boolean headUnderlined = true; + private static boolean headBolded = true; + private static final int pixelPerRow = 27; + + public static void onEnable() { + preColor = CfgColor.PREFIX.getValue(); + preString = CfgPropStr.PRESTRING.getValue(); + msgColor1 = CfgColor.MSG_FST.getValue(); + msgColor2 = CfgColor.MSG_SEC.getValue(); + errColor1 = CfgColor.ERR_FST.getValue(); + errColor2 = CfgColor.ERR_SEC.getValue(); + errUnderlined = CfgFormat.ERR_UNDER.getValue(); + errBolded = CfgFormat.ERR_BOLD.getValue(); + headUnderlined = CfgFormat.HEAD_UNDER.getValue(); + headBolded = CfgFormat.HEAD_BOLD.getValue(); + } + + protected static String getPreStr(){ + return preString; + } + + private static void send(CommandSender sender, String arg) { + arg = preColor + "[" + preString + "] " + "" + ChatColor.BOLD + arg; + sender.sendMessage(arg); + } + + public static void sendOtherMsg(CommandSender sender, CfgStr msg){ + sendOtherMsg(sender, msg, new String[]{}); + } + + public static void sendOtherMsg(CommandSender sender, CfgStr msg, String[]... value){ + String arg = msgColor1 + msg.getValue(); + for (String[] v: value){ + arg = arg.replaceAll(v[0], msgColor2 + v[1] + msgColor1); + } + send(sender, arg); + } + + public static void sendErrorMsg(CommandSender sender, CfgStr msg){ + sendErrorMsg(sender, msg, new String[0][0]); + } + + /*public static void sendErrorMsg(CommandSender sender, CfgStr msg, String[]... value){ + String arg = msg.getValue(); + for (String[] v: value){ + arg = arg.replaceAll(v[0], errColor2 + v[1] + errColor1); + } + if (errUnderlined){ + arg = ChatColor.UNDERLINE + arg; + } + if (errBolded){ + arg = ChatColor.BOLD + arg; + } + arg = errColor1 + arg; + send(sender, arg); + }*/ + + public static void sendErrorMsg(CommandSender sender, CfgStr msg, String[]... value){ + String arg = msg.getValue(); + String color1 = errColor1 + ""; + String color2 = errColor2 + ""; + if (errUnderlined){ + color1 = ChatColor.UNDERLINE + color1; + color2 = ChatColor.UNDERLINE + color2; + } + if (errBolded){ + color1 = ChatColor.BOLD + color1; + color2 = ChatColor.BOLD + color2; + } + for (String[] v: value){ + arg = arg.replaceAll(v[0], color2 + v[1] + color1); + } + arg = color1 + arg; + send(sender, arg); + } + + + + public static void sendPlyHelp(CommandSender sender, String desc, String command){ + String arg = msgColor1 + desc + preColor + " - " + msgColor2 + command; + send(sender, arg); + } + + public static void sendPlyHeader(CommandSender sender, String header){ + if (headUnderlined){ + header = ChatColor.UNDERLINE + header; + } + if (headBolded){ + header = ChatColor.BOLD + header; + } + header = msgColor1 + header; + send(sender, header); + } + + //------------------------------------------------------------------------------- + + + public static void sendPlyInOutBox(CommandSender sender, Integer ID, String FromPlayer, String Message, boolean Read){ + if (Read){ + send(sender, msgColor1 + "[" + ChatColor.DARK_GREEN + ID + msgColor1 + "] " + preColor + FromPlayer + msgColor2 + ": " + preColor + Message); + } else { + send(sender, msgColor1 + "[" + ChatColor.DARK_RED + ID + msgColor1 + "] " + preColor + FromPlayer + msgColor2 + ": " + preColor + Message); + } + } + + public static void sendPlyHeader(CommandSender sender, CfgStr msg){ + sendPlyHeader(sender, msg.getValue()); + } + + public static void sendPlyRead(CommandSender sender, String msg, String toPly, String fromPly, int id, boolean read, DateOperations sDate, DateOperations eDate, String type, String getItem, String reqItem){ + send(sender, msgColor1 + "" + ChatColor.STRIKETHROUGH + " "); + send(sender, msgColor1 + CfgRead.TO.getValue() + ": " + msgColor2 + toPly + StringOperations.getSpace(CfgRead.TO.getValue() + ": " + toPly, pixelPerRow) + msgColor1 + " - " + CfgRead.FROM.getValue() + ": " + msgColor2 + fromPly); + send(sender, msgColor1 + "ID: " + msgColor2 + id + StringOperations.getSpace("ID: " + id, pixelPerRow) + msgColor1 + " - " + CfgRead.READ.getValue() + ": " + msgColor2 + read); + send(sender, msgColor1 + CfgRead.SENDDATE.getValue() + ": " + msgColor2 + sDate + StringOperations.getSpace(CfgRead.SENDDATE.getValue() + ": " + toPly, pixelPerRow) + msgColor1 + " - " + CfgRead.ENDDATE.getValue() + ": " + msgColor2 + eDate); + + if (getItem == null) { + send(sender,msgColor1 + CfgRead.MAILTYPE.getValue() + ": " + msgColor2 + type); + } else { + if (reqItem == null){ + send(sender,msgColor1 + CfgRead.MAILTYPE.getValue() + ": " + msgColor2 + type + StringOperations.getSpace(CfgRead.MAILTYPE.getValue() + ": " + type, pixelPerRow) + msgColor1 + " - " + CfgRead.ITEM.getValue() + ": " + msgColor2 + getItem); + } else { + send(sender,msgColor1 + CfgRead.MAILTYPE.getValue() + ": " + msgColor2 + type); + send(sender,msgColor1 + CfgRead.GETITEM.getValue() + ": " + msgColor2 + getItem + StringOperations.getSpace(CfgRead.GETITEM.getValue() + ": " + getItem, pixelPerRow) + msgColor1 + " - " + CfgRead.REQITEM.getValue() + ": " + msgColor2 + reqItem); + } + } + + String header = CfgRead.MESSAGE.getValue() + ":"; + if (headUnderlined){ + header = ChatColor.UNDERLINE + header; + } + if (headBolded){ + header = ChatColor.BOLD + header; + } + header = msgColor1 + header; + send(sender, header + ChatColor.RESET + msgColor2 + " " + msg); + send(sender, msgColor1 + "" + ChatColor.STRIKETHROUGH + " "); + } +} diff --git a/src/me/Caesar2011/Mailings/Library/PlayerInboxSize.java b/src/me/Caesar2011/Mailings/Library/PlayerInboxSize.java new file mode 100644 index 0000000..a62435f --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/PlayerInboxSize.java @@ -0,0 +1,16 @@ +package me.Caesar2011.Mailings.Library; + +public class PlayerInboxSize { + public String Player; + public Integer Size; + + public PlayerInboxSize(String player){ + this.Player = player; + this.Size = 1; + } + + public PlayerInboxSize(String player, Integer size){ + this.Player = player; + this.Size = size; + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Library/StringOperations.java b/src/me/Caesar2011/Mailings/Library/StringOperations.java new file mode 100644 index 0000000..1ba6452 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/StringOperations.java @@ -0,0 +1,158 @@ +package me.Caesar2011.Mailings.Library; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +public class StringOperations { + public static String getStringArr(String[] strArr){ + String result = ""; + if (strArr.length > 0) { + result = strArr[0]; // start with the first element + for (int i=1; i < strArr.length; i++) { + result = result + " " + strArr[i]; + } + } + return result; + } + + public static int getStringPixLen(String string){ + final String length5 = "()*<>fk{}"; + final String length4 = " \"I[]t"; + final String length3 = "´`l"; + final String length2 = "!',.:;"; + int result = 0; + boolean found = false; + char c; + + for (int i = 0; i < string.length(); i++){ + c = string.charAt(i); + found = false; + for (int j = 0; j < length5.length() && !found; j++){ + if (c == length5.charAt(j)){ + result += 5; + found = true; + break; + } + } + for (int j = 0; j < length4.length() && !found; j++){ + if (c == length4.charAt(j)){ + result += 4; + found = true; + break; + } + } + for (int j = 0; j < length3.length() && !found; j++){ + if (c == length3.charAt(j)){ + result += 3; + found = true; + break; + } + } + for (int j = 0; j < length2.length() && !found; j++){ + if (c == length2.charAt(j)){ + result += 2; + found = true; + break; + } + } + if (!found) result += 6; + } + + return result; + } + + public static String getSpace(String arg, int pixel){ + int spaces = getStringPixLen(arg); + spaces = pixel - (spaces / 4); + String spacesAdd = ""; + for (;spaces >= 0; spaces--){ + spacesAdd += " "; + } + return spacesAdd; + } + + public static String getMaterial(String material){ + if(){ + + } + } + + public static ItemStack getItemStack(String itemString){ + Material type = null; + int amount = 1; + short damage = 0; + String[] split = itemString.split(":", 3); + if (split.length == 1){ + try { + Material m = Material.matchMaterial(split[0]); + if (m != null) { + type = m; + } else { + return null; + } + } catch (Exception e) { + return null; + } + } else if (split.length == 2) { + try { + Material m = Material.matchMaterial(split[0]); + if (m != null) { + type = m; + damage = new Short(split[1]); + if (!(damage == 0 || dataIsValid(damage, m))) { + return null; + } + } else { + return null; + } + } catch (Exception e) { + return null; + } + } else if (split.length == 3) { + try { + amount = new Integer(split[0]); + Material m = Material.matchMaterial(split[1]); + if (m != null) { + type = m; + damage = new Short(split[2]); + if (!(damage == 0 || dataIsValid(damage, m))) { + return null; + } + if (amount <= 0 || amount > m.getMaxStackSize()){ + return null; + } + } else { + return null; + } + } catch (Exception e) { + return null; + } + } else { + return null; + } + return new ItemStack(type, amount, damage); + } + + private static boolean dataIsValid(short damage, Material m) { + if (damage >= 0) { + if (m.equals(Material.WOOD) && damage <= 3) return true; + if (m.equals(Material.SAPLING) && damage <= 3) return true; + if (m.equals(Material.LOG) && damage <= 3) return true; + if (m.equals(Material.LEAVES) && damage <= 3) return true; + if (m.equals(Material.SANDSTONE) && damage <= 2) return true; + if (m.equals(Material.LONG_GRASS) && damage <= 2) return true; + if (m.equals(Material.WOOL) && damage <= 15) return true; + if (m.equals(Material.DOUBLE_STEP) && damage <= 6) return true; + if (m.equals(Material.STEP) && damage <= 6) return true; + if (m.equals(Material.MONSTER_EGGS) && damage <= 3) return true; + if (m.equals(Material.SMOOTH_BRICK) && damage <= 3) return true; + if (m.equals(Material.WOOD_DOUBLE_STEP) && damage <= 3) return true; + if (m.equals(Material.WOOD_STEP) && damage <= 3) return true; + //TODO 1.4 if (m.equals(Material.ANVIL) && damage <= 2) return true; + if (m.equals(Material.INK_SACK) && damage <= 15) return true; + if (m.equals(Material.MONSTER_EGG) && ((damage >= 50 && damage <= 64 && damage != 53) || (damage >= 90 && damage <= 98 && damage != 97) || (damage == 120))) return true; + //TODO 1.4 if (m.equals(Material.SKULL_ITEM) && damage <= 4) return true; + } + return false; + } +} diff --git a/src/me/Caesar2011/Mailings/Library/TradeMail.java b/src/me/Caesar2011/Mailings/Library/TradeMail.java new file mode 100644 index 0000000..b41cbe5 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/TradeMail.java @@ -0,0 +1,26 @@ +package me.Caesar2011.Mailings.Library; + +import org.bukkit.inventory.ItemStack; + +public class TradeMail extends Mail{ + public ItemStack getitem; + public ItemStack reqitem; + + public TradeMail (){ + super(); + this.getitem = null; + this.reqitem = null; + } + + public TradeMail (String from, String to, String msg, ItemStack getitem, ItemStack reqitem){ + super(from, to, msg); + this.getitem = getitem; + this.reqitem = reqitem; + } + + public TradeMail (String from, String to, String[] msg, ItemStack getitem, ItemStack reqitem){ + super(from, to, msg); + this.getitem = getitem; + this.reqitem = reqitem; + } +} diff --git a/src/me/Caesar2011/Mailings/Library/TradeMailManager.java b/src/me/Caesar2011/Mailings/Library/TradeMailManager.java new file mode 100644 index 0000000..ecdf31b --- /dev/null +++ b/src/me/Caesar2011/Mailings/Library/TradeMailManager.java @@ -0,0 +1,197 @@ +package me.Caesar2011.Mailings.Library; + +import java.util.ArrayList; +import java.util.Date; + +import org.bukkit.OfflinePlayer; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.inventory.ItemStack; + +public class TradeMailManager { + public static String typeName = "TradeMail"; + public static final String className = "TradeMailManager"; + private static final String fileName = "trademail.yml"; + private static final String mailPath = "Mails"; + private static FileManager file = new FileManager(className, fileName); + + public static void onEnable(){ + file.onEnable(); + } + + public static void onDisable(){ + file.onDisable(); + } + + private static FileConfiguration onGet(){ + return file.onGet(); + } + + public static void onSave(){ + file.onSave(); + } + + public static void addMail(final TradeMail tMail){ + tMail.ID = getNextMailID(); + saveMail(tMail); + } + + public static void overrideMail(final TradeMail tMail){ + String mailPathInsert = mailPath + "." + tMail.ID; + if (onGet().contains(mailPathInsert)){ + saveMail(tMail); + } + } + + private static void saveMail(final TradeMail tMail){ + String mailPathInsert = mailPath + "." + tMail.ID; + if (tMail.ID > 0){ + onGet().set(mailPathInsert + "." + "FromPlayer", tMail.fromPlayer); + onGet().set(mailPathInsert + "." + "ToPlayer", tMail.toPlayer); + onGet().set(mailPathInsert + "." + "Message", tMail.msg); + onGet().set(mailPathInsert + "." + "SendDate", tMail.sendDate.toString()); + onGet().set(mailPathInsert + "." + "EndDate", tMail.endDate.toString()); + onGet().set(mailPathInsert + "." + "Read", tMail.read); + onGet().set(mailPathInsert + "." + "GetStack.Type", tMail.getitem.getTypeId()); + onGet().set(mailPathInsert + "." + "GetStack.Amount", tMail.getitem.getAmount()); + onGet().set(mailPathInsert + "." + "GetStack.Damage", tMail.getitem.getDurability()); + onGet().set(mailPathInsert + "." + "ReqStack.Type", tMail.reqitem.getTypeId()); + onGet().set(mailPathInsert + "." + "ReqStack.Amount", tMail.reqitem.getAmount()); + onGet().set(mailPathInsert + "." + "ReqStack.Damage", tMail.reqitem.getDurability()); + } + onSave(); + } + + public static TradeMail getMail(final Integer id){ + TradeMail tMail = new TradeMail(); + String mailPathInsert = mailPath + "." + id.toString(); + if (onGet().contains(mailPathInsert)){ + tMail.ID = id; + tMail.fromPlayer = onGet().getString(mailPathInsert + "." + "FromPlayer"); + tMail.toPlayer = onGet().getString(mailPathInsert + "." + "ToPlayer"); + tMail.msg = onGet().getString(mailPathInsert + "." + "Message"); + tMail.sendDate = new DateOperations(onGet().getString(mailPathInsert + "." + "SendDate")); + tMail.endDate = new DateOperations(onGet().getString(mailPathInsert + "." + "EndDate")); + tMail.getitem = new ItemStack(onGet().getInt(mailPathInsert + "." + "GetStack.Type"),onGet().getInt(mailPathInsert + "." + "GetStack.Amount"),(short) onGet().getInt(mailPathInsert + "." + "GetStack.Damage")); + tMail.reqitem = new ItemStack(onGet().getInt(mailPathInsert + "." + "ReqStack.Type"),onGet().getInt(mailPathInsert + "." + "ReqStack.Amount"),(short) onGet().getInt(mailPathInsert + "." + "ReqStack.Damage")); + tMail.read = onGet().getBoolean(mailPathInsert + "." + "Read"); + return tMail; + } + throw (RuntimeException) null; + } + + public static String getString(final Integer id, final String fieldName){ + String mailPathGet = mailPath + "." + id.toString() + "." + fieldName; + if (onGet().contains(mailPathGet) && onGet().isString(mailPathGet)){ + return onGet().getString(mailPathGet); + } + throw (RuntimeException) null; + } + + public static Integer getInt(Integer id, String fieldName){ + String mailPathGet = mailPath + "." + id.toString() + "." + fieldName; + if (onGet().contains(mailPathGet) && onGet().isInt(mailPathGet)){ + return onGet().getInt(mailPathGet); + } + throw (RuntimeException) null; + } + + public static Boolean getBool(Integer id, String fieldName){ + String mailPathGet = mailPath + "." + id.toString() + "." + fieldName; + if (onGet().contains(mailPathGet) && onGet().isBoolean(mailPathGet)){ + return onGet().getBoolean(mailPathGet); + } + throw (RuntimeException) null; + } + + public static Integer getLastMailID() { + try{ + return onGet().getConfigurationSection(mailPath).getKeys(false).size(); + } catch(NullPointerException e){ + return 0; + } + } + + public static Integer getNextMailID() { + return getLastMailID() + 1; + } + + public static void delMail(final Integer id){ + onRepair(); + String mailToDel = mailPath + "." + id; + String mailLast = mailPath + "." + getLastMailID(); + if (onGet().contains(mailToDel)){ + TradeMail tMail = getMail(getLastMailID()); + tMail.ID = id; + overrideMail(tMail); + onGet().set(mailLast, null); + } + onSave(); + } + + public static Integer getInboxAmount(final OfflinePlayer p, final boolean DelOld, final boolean UnreadOnly){ + onRepair(); + int result = 0; + if (onGet().contains(mailPath)){ + int length = onGet().getConfigurationSection(mailPath).getKeys(false).size(); + TradeMail buffer = null; + DateOperations now = new DateOperations(new Date()); + for(int i = 1; i <= length; i++){ + if (onGet().contains(mailPath + "." + i)){ + buffer = getMail(i); + if (now.isAfter(buffer.endDate) && DelOld){ + delMail(i); + length--; + continue; + } + if (!buffer.toPlayer.equals(p.getName())){ + continue; + } + if (!(buffer.read && UnreadOnly)){ + result++; + } + } + } + } + return result; + } + + public static PlayerInboxSize[] getInboxAmount(boolean DelOld, boolean UnreadOnly){ + onRepair(); + ArrayList result = new ArrayList(); + if (onGet().contains(mailPath)){ + int length = onGet().getConfigurationSection(mailPath).getKeys(false).size(); + TradeMail buffer = null; + DateOperations now = new DateOperations(new Date()); + for(int i = 1; i <= length; i++){ + if (onGet().contains(mailPath + "." + i)){ + buffer = getMail(i); + if (now.isAfter(buffer.endDate) && DelOld){ + delMail(i); + length--; + continue; + } + if (!(buffer.read && UnreadOnly)){ + boolean found = false; + for(int j = 0; j < result.size(); j++){ + if (result.get(j).Player.equals(buffer.toPlayer)){ + result.get(j).Size = result.get(j).Size + 1; + found = true; + break; + } + } + if (!found){ + result.add(new PlayerInboxSize(buffer.toPlayer)); + } + } + } + } + } + PlayerInboxSize[] array = new PlayerInboxSize[result.size()]; + result.toArray(array); + return array; + } + + private static void onRepair() { + //TODO + } +} \ No newline at end of file diff --git a/src/me/Caesar2011/Mailings/Listener/Listener_PlayerJoin.java b/src/me/Caesar2011/Mailings/Listener/Listener_PlayerJoin.java new file mode 100644 index 0000000..1ed2035 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Listener/Listener_PlayerJoin.java @@ -0,0 +1,89 @@ +package me.Caesar2011.Mailings.Listener; + +import me.Caesar2011.Mailings.Mailings; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgEntry; +import me.Caesar2011.Mailings.Library.ConfigManager.CfgPropBool; +import me.Caesar2011.Mailings.Library.ItemMailManager; +import me.Caesar2011.Mailings.Library.MailManager; +import me.Caesar2011.Mailings.Library.Messenger; +import me.Caesar2011.Mailings.Library.TradeMailManager; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +public class Listener_PlayerJoin implements Listener { + private Mailings plugin; + + public Listener_PlayerJoin(Mailings plugin){ + this.plugin = plugin; + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerJoin(PlayerJoinEvent event){ + execute(event.getPlayer(), plugin); + } + + public static void execute(final Player p, final Mailings plugin){ + plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + public void run() { + if (CfgPropBool.SHOWLOGIN.getValue()) { + Integer amount = MailManager.getInboxAmount(p, true, true); + if (amount > 0 || CfgPropBool.SHOWLOGINEMPTY.getValue()){ + switch (amount) { + case 0: { + Messenger.sendOtherMsg(p, CfgEntry.NONEW, new String[]{"%type%", MailManager.typeName}); + break; + } + case 1: { + Messenger.sendOtherMsg(p, CfgEntry.ONENEW, new String[]{"%type%", MailManager.typeName}); + break; + } + default: { + Messenger.sendOtherMsg(p, CfgEntry.MORENEW, new String[]{"%type%", MailManager.typeName}, new String[]{"%amount%", amount.toString()}); + break; + } + } + } + amount = ItemMailManager.getInboxAmount(p, true, true); + if (amount > 0 || CfgPropBool.SHOWLOGINEMPTY.getValue()){ + switch (amount) { + case 0: { + Messenger.sendOtherMsg(p, CfgEntry.NONEW, new String[]{"%type%", ItemMailManager.typeName}); + break; + } + case 1: { + Messenger.sendOtherMsg(p, CfgEntry.ONENEW, new String[]{"%type%", ItemMailManager.typeName}); + break; + } + default: { + Messenger.sendOtherMsg(p, CfgEntry.MORENEW, new String[]{"%type%", ItemMailManager.typeName}, new String[]{"%amount%", amount.toString()}); + break; + } + } + } + amount = TradeMailManager.getInboxAmount(p, true, true); + if (amount > 0 || CfgPropBool.SHOWLOGINEMPTY.getValue()){ + switch (amount) { + case 0: { + Messenger.sendOtherMsg(p, CfgEntry.NONEW, new String[]{"%type%", TradeMailManager.typeName}); + break; + } + case 1: { + Messenger.sendOtherMsg(p, CfgEntry.ONENEW, new String[]{"%type%", TradeMailManager.typeName}); + break; + } + default: { + Messenger.sendOtherMsg(p, CfgEntry.MORENEW, new String[]{"%type%", TradeMailManager.typeName}, new String[]{"%amount%", amount.toString()}); + break; + } + } + } + } + } + }, 20L); + } +} diff --git a/src/me/Caesar2011/Mailings/Mailings.java b/src/me/Caesar2011/Mailings/Mailings.java new file mode 100644 index 0000000..29c6155 --- /dev/null +++ b/src/me/Caesar2011/Mailings/Mailings.java @@ -0,0 +1,186 @@ +package me.Caesar2011.Mailings; + +import me.Caesar2011.Mailings.Commands.Cmd_Help; +import me.Caesar2011.Mailings.Commands.Cmd_ItemMail_Delmail; +import me.Caesar2011.Mailings.Commands.Cmd_ItemMail_Getmail; +import me.Caesar2011.Mailings.Commands.Cmd_ItemMail_Inbox; +import me.Caesar2011.Mailings.Commands.Cmd_ItemMail_Outbox; +import me.Caesar2011.Mailings.Commands.Cmd_ItemMail_Readmail; +import me.Caesar2011.Mailings.Commands.Cmd_ItemMail_Sendmail; +import me.Caesar2011.Mailings.Commands.Cmd_Mail_Delmail; +import me.Caesar2011.Mailings.Commands.Cmd_Mail_Inbox; +import me.Caesar2011.Mailings.Commands.Cmd_Mail_Outbox; +import me.Caesar2011.Mailings.Commands.Cmd_Mail_Readmail; +import me.Caesar2011.Mailings.Commands.Cmd_Mail_Sendmail; +import me.Caesar2011.Mailings.Commands.Cmd_Mail_Sendroundmail; +import me.Caesar2011.Mailings.Commands.Cmd_Reload; +import me.Caesar2011.Mailings.Commands.Cmd_TradeMail_Acceptmail; +import me.Caesar2011.Mailings.Commands.Cmd_TradeMail_Denymail; +import me.Caesar2011.Mailings.Commands.Cmd_TradeMail_Inbox; +import me.Caesar2011.Mailings.Commands.Cmd_TradeMail_Outbox; +import me.Caesar2011.Mailings.Commands.Cmd_TradeMail_Readmail; +import me.Caesar2011.Mailings.Commands.Cmd_TradeMail_Sendmail; +import me.Caesar2011.Mailings.Library.ConfigManager; +import me.Caesar2011.Mailings.Library.CooldownManager; +import me.Caesar2011.Mailings.Library.Economy; +import me.Caesar2011.Mailings.Library.EnumCmdExe; +import me.Caesar2011.Mailings.Library.ItemMailManager; +import me.Caesar2011.Mailings.Library.MailManager; +import me.Caesar2011.Mailings.Library.Messenger; +import me.Caesar2011.Mailings.Library.TradeMailManager; +import me.Caesar2011.Mailings.Listener.Listener_PlayerJoin; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; + +public class Mailings extends JavaPlugin { + + @Override + public void onEnable() { + //Enable-Stuff + ConfigManager.onEnable(); + MailManager.onEnable(); + ItemMailManager.onEnable(); + TradeMailManager.onEnable(); + Economy.onEnable(this); + CooldownManager.onEnable(); + Messenger.onEnable(); + + new Listener_PlayerJoin(this); + + Player[] everyOnline = this.getServer().getOnlinePlayers(); + for (int i = 0; i < everyOnline.length; i++) { + Listener_PlayerJoin.execute(everyOnline[i], this); + } + + System.out.println("[" + this.getName() + "] Plugin activated successfully."); + } + + @Override + public void onDisable() { + //Disable-Stuff + MailManager.onDisable(); + ItemMailManager.onDisable(); + TradeMailManager.onDisable(); + CooldownManager.onDisable(); + System.out.println("[" + this.getName() + "] Plugin deactivated successfully."); + } + + public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args){ + EnumCmdExe result = EnumCmdExe.UNKNOWN; + if(cmd.getName().equalsIgnoreCase("mail") || cmd.getName().equalsIgnoreCase("imail") || cmd.getName().equalsIgnoreCase("tmail")){ + if (args.length == 0){ + result = new Cmd_Help(sender, args).execute(); + } else { + String[] newargs = new String[args.length-1]; + for (int i = 1; i < args.length;) { + newargs[i-1] = args[i]; + i++; + } + if (cmd.getName().equalsIgnoreCase("mail")){ + if (args[0].equalsIgnoreCase("inbox")){ + result = new Cmd_Mail_Inbox(newargs, sender, this).execute(); + } else if (args[0].equalsIgnoreCase("outbox")){ + result = new Cmd_Mail_Outbox(newargs, sender, this).execute(); + } else if (args[0].equalsIgnoreCase("read")){ + result = new Cmd_Mail_Readmail(newargs, sender).execute(); + } else if (args[0].equalsIgnoreCase("del")){ + result = new Cmd_Mail_Delmail(newargs, sender).execute(); + } else if (args[0].equalsIgnoreCase("send")){ + result = new Cmd_Mail_Sendmail(newargs, sender, this).execute(); + } else if (args[0].equalsIgnoreCase("sendroundmail")){ + result = new Cmd_Mail_Sendroundmail(newargs, sender, this).execute(); + } + } + if (cmd.getName().equalsIgnoreCase("imail")){ + if (args[0].equalsIgnoreCase("inbox")){ + result = new Cmd_ItemMail_Inbox(newargs, sender, this).execute(); + } else if (args[0].equalsIgnoreCase("outbox")){ + result = new Cmd_ItemMail_Outbox(newargs, sender, this).execute(); + } else if (args[0].equalsIgnoreCase("read")){ + result = new Cmd_ItemMail_Readmail(newargs, sender).execute(); + } else if (args[0].equalsIgnoreCase("del")){ + result = new Cmd_ItemMail_Delmail(newargs, sender).execute(); + } else if (args[0].equalsIgnoreCase("send")){ + result = new Cmd_ItemMail_Sendmail(newargs, sender, this).execute(); + } else if (args[0].equalsIgnoreCase("get")){ + result = new Cmd_ItemMail_Getmail(newargs, sender).execute(); + } + } + if (cmd.getName().equalsIgnoreCase("tmail")){ + if (args[0].equalsIgnoreCase("inbox")){ + result = new Cmd_TradeMail_Inbox(newargs, sender, this).execute(); + } else if (args[0].equalsIgnoreCase("outbox")){ + result = new Cmd_TradeMail_Outbox(newargs, sender, this).execute(); + } else if (args[0].equalsIgnoreCase("read")){ + result = new Cmd_TradeMail_Readmail(newargs, sender).execute(); + } else if (args[0].equalsIgnoreCase("send")){ + result = new Cmd_TradeMail_Sendmail(newargs, sender, this).execute(); + } else if (args[0].equalsIgnoreCase("accept")){ + result = new Cmd_TradeMail_Acceptmail(newargs, sender, this).execute(); + } else if (args[0].equalsIgnoreCase("deny")){ + result = new Cmd_TradeMail_Denymail(newargs, sender, this).execute(); + } + } + if (args[0].equalsIgnoreCase("reload")){ + result = new Cmd_Reload(sender, this).execute(); + } + } + } else if (cmd.getName().equalsIgnoreCase("inbox")) { + result = new Cmd_Mail_Inbox(args, sender, this).execute(); + } else if (cmd.getName().equalsIgnoreCase("outbox")) { + result = new Cmd_Mail_Outbox(args, sender, this).execute(); + } else if (cmd.getName().equalsIgnoreCase("readmail")) { + result = new Cmd_Mail_Readmail(args, sender).execute(); + } else if (cmd.getName().equalsIgnoreCase("reloadmail")) { + result = new Cmd_Reload(sender, this).execute(); + } else if (cmd.getName().equalsIgnoreCase("sendmail")) { + result = new Cmd_Mail_Sendmail(args, sender, this).execute(); + } else if (cmd.getName().equalsIgnoreCase("sendroundmail")) { + result = new Cmd_Mail_Sendroundmail(args, sender, this).execute(); + } else if (cmd.getName().equalsIgnoreCase("delmail")) { + result = new Cmd_Mail_Delmail(args, sender).execute(); + + } else if (cmd.getName().equalsIgnoreCase("iinbox")) { + result = new Cmd_ItemMail_Inbox(args, sender, this).execute(); + } else if (cmd.getName().equalsIgnoreCase("ioutbox")) { + result = new Cmd_ItemMail_Outbox(args, sender, this).execute(); + } else if (cmd.getName().equalsIgnoreCase("readimail")) { + result = new Cmd_ItemMail_Readmail(args, sender).execute(); + } else if (cmd.getName().equalsIgnoreCase("sendimail")) { + result = new Cmd_ItemMail_Sendmail(args, sender, this).execute(); + } else if (cmd.getName().equalsIgnoreCase("delimail")) { + result = new Cmd_ItemMail_Delmail(args, sender).execute(); + } else if (cmd.getName().equalsIgnoreCase("getimail")) { + result = new Cmd_ItemMail_Getmail(args, sender).execute(); + + } else if (cmd.getName().equalsIgnoreCase("tinbox")) { + result = new Cmd_TradeMail_Inbox(args, sender, this).execute(); + } else if (cmd.getName().equalsIgnoreCase("toutbox")) { + result = new Cmd_TradeMail_Outbox(args, sender, this).execute(); + } else if (cmd.getName().equalsIgnoreCase("readtmail")) { + result = new Cmd_TradeMail_Readmail(args, sender).execute(); + } else if (cmd.getName().equalsIgnoreCase("sendtmail")) { + result = new Cmd_TradeMail_Sendmail(args, sender, this).execute(); + } else if (cmd.getName().equalsIgnoreCase("accepttmail")) { + result = new Cmd_TradeMail_Acceptmail(args, sender, this).execute(); + } else if (cmd.getName().equalsIgnoreCase("denytmail")) { + result = new Cmd_TradeMail_Denymail(args, sender, this).execute(); + } + + if (result.equals(EnumCmdExe.UNKNOWN)){ + result = new Cmd_Help(sender, args).execute(); + } else if (result.isError()){ + Messenger.sendErrorMsg(sender, result.getMsg(), result.getArgs()); + } else if (result != EnumCmdExe.SUCCESS) { + Messenger.sendOtherMsg(sender, result.getMsg(), result.getArgs()); + } + result.delArgs(); + return result.getReturn(); + } + + + +} diff --git a/src/plugin.yml b/src/plugin.yml new file mode 100644 index 0000000..2cf117f --- /dev/null +++ b/src/plugin.yml @@ -0,0 +1,285 @@ +name: Mailings +version: 1.4.4 +main: me.Caesar2011.Mailings.Mailings +author: Caesar2011 +softdepend: [BOSEconomy, Vault] + +commands: + reloadmail: + description: Reload config + usage: /reloadmail + mail: + description: Show help menu + usage: /mail + inbox: + description: Show mail inbox + usage: /inbox [player] [page] + outbox: + description: Show mail outbox + usage: /outbox [player] [page] + readmail: + description: Read mail + usage: /readmail + sendroundmail: + description: Send mail to every player (also offline) + usage: /sendroundmail + sendmail: + description: Send mail to a target + usage: /sendmail + delmail: + description: Delete mail + usage: /delmail + + imail: + description: Show help menu + usage: /imail + aliases: itemmail + iinbox: + description: Show item mail inbox + usage: /iinbox [player] [page] + aliases: iteminbox + ioutbox: + description: Show item mail outbox + usage: /ioutbox [player] [page] + aliases: itemoutbox + readimail: + description: Read item mail + usage: /readimail + aliases: readitemmail + sendimail: + description: Send item mail to a target + usage: /sendimail + aliases: senditemmail + delimail: + description: Delete item mail + usage: /delimail + aliases: delitemmail + getimail: + description: Get item from item mail + usage: /getimail + aliases: getitemmail + + tmail: + description: Show help menu + usage: /tmail + aliases: trademail + tinbox: + description: Show trade mail inbox + usage: /tinbox [player] [page] + aliases: tradeinbox + toutbox: + description: Show trade mail outbox + usage: /toutbox [player] [page] + aliases: tradeoutbox + readtmail: + description: Read trade mail + usage: /readtmail + aliases: readtrademail + sendtmail: + description: Send trade mail to a target + usage: /sendtmail + aliases: sendtrademail + accepttmail: + description: Accept trade mail + usage: /accepttmail + aliases: accepttrademail + denytmail: + description: Deny trade mail + usage: /getimail + aliases: denytrademail + + + + + + + + +permissions: + mailings.*: + description: 'Access to all commands.' + children: + mailings.mail.*: true + mailings.itemmail.*: true + mailings.trademail.*: true + mailings.reload: true + default: op + + + mailings.mail.*: + description: 'Access to all mail commands.' + children: + mailings.mail.overridecooldown: true + mailings.mail.inbox.*: true + mailings.mail.outbox.*: true + mailings.mail.send.*: true + mailings.mail.delete.*: true + mailings.mail.read.*: true + + mailings.itemmail.*: + description: 'Access to all item mail commands.' + children: + mailings.mail.overridecooldown: true + mailings.itemmail.inbox.*: true + mailings.itemmail.outbox.*: true + mailings.itemmail.send.*: true + mailings.itemmail.delete.*: true + mailings.itemmail.read.*: true + + mailings.trademail.*: + description: 'Access to all trade mail commands.' + children: + mailings.mail.overridecooldown: true + mailings.trademail.inbox.*: true + mailings.trademail.outbox.*: true + mailings.trademail.send.*: true + mailings.trademail.delete.*: true + mailings.trademail.read.*: true + + + mailings.mail.overridecooldown: + description: 'No cooldown when sending mails.' + mailings.mail.inbox.*: + description: 'Access to any mail inbox of any player.' + children: + mailings.mail.inbox.own: true + mailings.mail.inbox.other: true + mailings.mail.outbox.*: + description: 'Access to any mail outbox of any player.' + children: + mailings.mail.outbox.own: true + mailings.mail.outbox.other: true + mailings.mail.send.*: + description: 'Send single and circular mail.' + children: + mailings.mail.send.single: true + mailings.mail.send.round: true + mailings.mail.delete.*: + description: 'Delete any mail.' + children: + mailings.mail.delete.own: true + mailings.mail.delete.other: true + mailings.mail.read.*: + description: 'Read any mail.' + children: + mailings.mail.read.own: true + mailings.mail.read.other: true + + mailings.itemmail.overridecooldown: + description: 'No cooldown when sending item mails.' + mailings.itemmail.inbox.*: + description: 'Access to any item mail inbox of any player.' + children: + mailings.itemmail.inbox.own: true + mailings.itemmail.inbox.other: true + mailings.itemmail.outbox.*: + description: 'Access to any item mail outbox of any player.' + children: + mailings.itemmail.outbox.own: true + mailings.itemmail.outbox.other: true + mailings.itemmail.send.*: + description: 'Send single and circular item mail.' + children: + mailings.itemmail.send.single: true + mailings.itemmail.delete.*: + description: 'Delete any item mail.' + children: + mailings.itemmail.delete.own: true + mailings.itemmail.delete.other: true + mailings.itemmail.read.*: + description: 'Read any item mail.' + children: + mailings.itemmail.read.own: true + mailings.itemmail.read.other: true + + mailings.trademail.overridecooldown: + description: 'No cooldown when sending trade mails.' + mailings.trademail.inbox.*: + description: 'Access to any trade mail inbox of any player.' + children: + mailings.trademail.inbox.own: true + mailings.trademail.inbox.other: true + mailings.trademail.outbox.*: + description: 'Access to any trade mail outbox of any player.' + children: + mailings.trademail.outbox.own: true + mailings.trademail.outbox.other: true + mailings.trademail.send.*: + description: 'Send single and circular trade mail.' + children: + mailings.trademail.send.single: true + mailings.trademail.accept.*: + description: 'Accept and deny any trade mail.' + children: + mailings.trademail.accept.own: true + mailings.trademail.accept.other: true + mailings.trademail.read.*: + description: 'Read any trade mail.' + children: + mailings.trademail.read.own: true + mailings.trademail.read.other: true + + + mailings.mail.inbox.own: + description: 'Access to own mail inbox.' + mailings.mail.inbox.other: + description: 'Access to mail inboxes of other players.' + mailings.mail.outbox.own: + description: 'Access to own mail outbox.' + mailings.mail.outbox.other: + description: 'Access to mail outboxes of other players.' + mailings.mail.send.single: + description: 'Send single mail.' + mailings.mail.send.round: + description: 'Send cirrcular mail.' + mailings.mail.delete.own: + description: 'Delete own mail.' + mailings.mail.delete.other: + description: 'Delete mail sended to other players.' + mailings.mail.read.own: + description: 'Read own mail.' + mailings.mail.read.other: + description: 'Read mail sended to other players.' + + mailings.itemmail.inbox.own: + description: 'Access to own item mail inbox.' + mailings.itemmail.inbox.other: + description: 'Access to item mail inboxes of other players.' + mailings.itemmail.outbox.own: + description: 'Access to own item mail outbox.' + mailings.itemmail.outbox.other: + description: 'Access to item mail outboxes of other players.' + mailings.itemmail.send.single: + description: 'Send single item mail.' + mailings.itemmail.delete.own: + description: 'Delete own item mail.' + mailings.itemmail.delete.other: + description: 'Delete item mail sended to other players.' + mailings.itemmail.read.own: + description: 'Read own item mail.' + mailings.itemmail.read.other: + description: 'Read item mail sended to other players.' + + mailings.trademail.inbox.own: + description: 'Access to own trade mail inbox.' + mailings.trademail.inbox.other: + description: 'Access to trade mail inboxes of other players.' + mailings.trademail.outbox.own: + description: 'Access to own trade mail outbox.' + mailings.trademail.outbox.other: + description: 'Access to trade mail outboxes of other players.' + mailings.trademail.send.single: + description: 'Send single trade mail.' + mailings.trademail.accept.own: + description: 'Accept and deny own trade mail.' + mailings.trademail.accept.other: + description: 'Accept and deny trade mail sended to other players.' + mailings.trademail.read.own: + description: 'Read own trade mail.' + mailings.trademail.read.other: + description: 'Read trade mail sended to other players.' + + + + mailings.reload: + description: 'Reload config and save mail files.' \ No newline at end of file