Skip to content

Commit

Permalink
Big update
Browse files Browse the repository at this point in the history
- Added a permission system and implemented new permission nodes.
- Improved language system and file structure. Missing lines will be automatically added instead of deleting the current yml file.
- Economy fix (plugin creates a thread to keep waiting for an Economy plugin to be registered by Vault if there is any)
- Now you can send items to offline players.
- Now you can have a physical mailbox.
  • Loading branch information
leothawne committed Dec 27, 2023
1 parent 7b360a1 commit 629fd5e
Show file tree
Hide file tree
Showing 29 changed files with 543 additions and 106 deletions.
36 changes: 26 additions & 10 deletions src/main/java/io/github/leothawne/LTItemMail/LTItemMail.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,19 @@
import io.github.leothawne.LTItemMail.command.tabCompleter.ItemMailAdminCommandTabCompleter;
import io.github.leothawne.LTItemMail.command.tabCompleter.ItemMailCommandTabCompleter;
import io.github.leothawne.LTItemMail.command.tabCompleter.MailItemCommandTabCompleter;
import io.github.leothawne.LTItemMail.listener.MailboxListener;
import io.github.leothawne.LTItemMail.listener.ItemMailboxListener;
import io.github.leothawne.LTItemMail.listener.PlayerListener;
import io.github.leothawne.LTItemMail.listener.VirtualMailboxListener;
import io.github.leothawne.LTItemMail.module.ConfigurationModule;
import io.github.leothawne.LTItemMail.module.ConsoleModule;
import io.github.leothawne.LTItemMail.module.DataModule;
import io.github.leothawne.LTItemMail.module.DatabaseModule;
import io.github.leothawne.LTItemMail.module.LanguageModule;
import io.github.leothawne.LTItemMail.module.MailboxLogModule;
import io.github.leothawne.LTItemMail.module.MetricsModule;
import io.github.leothawne.LTItemMail.module.RecipeModule;
import io.github.leothawne.LTItemMail.module.VaultModule;
import io.github.leothawne.LTItemMail.task.MailboxItemTask;
import io.github.leothawne.LTItemMail.task.VersionTask;
import net.milkbowl.vault.economy.Economy;

Expand All @@ -53,6 +56,7 @@ private final void registerEvents(final Listener...listeners) {
private FileConfiguration language;
private Connection con;
private Economy economyPlugin;
private Integer versionTaskID;
@Override
public final void onEnable() {
instance = this;
Expand All @@ -64,13 +68,13 @@ public final void onEnable() {
new BukkitRunnable() {
@Override
public final void run() {
Bukkit.getPluginManager().disablePlugin(LTItemMail.getInstance());
Bukkit.getPluginManager().disablePlugin(instance);
}
}.runTaskTimer(this, 0, 0);
return;
}
if(configuration.getBoolean("enable-plugin")) {
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new VersionTask(), 0, 20 * 60 * 60);
versionTaskID = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new VersionTask(), 0, 20 * 10);
MetricsModule.init();
LanguageModule.check();
language = LanguageModule.load();
Expand All @@ -85,7 +89,7 @@ public final void run() {
if(economyPlugin != null) {
ConsoleModule.info("Economy plugin found.");
} else {
ConsoleModule.info("Economy plugin not found. Waiting for Vault registration.");
ConsoleModule.warning("Economy plugin not found. Waiting for Vault registration.");
new BukkitRunnable() {
@Override
public final void run() {
Expand All @@ -95,9 +99,9 @@ public final void run() {
this.cancel();
}
}
}.runTaskTimer(this, 20, 20);
}.runTaskTimer(this, 0, 20 * 5);
}
} else ConsoleModule.info("Vault is not installed. Skipping.");
} else ConsoleModule.warning("Vault is not installed. Skipping.");
}
DatabaseModule.check();
con = DatabaseModule.load();
Expand All @@ -106,12 +110,16 @@ public final void run() {
for(Integer i = dbVer; i < Integer.valueOf(DataModule.getVersion(DataModule.VersionType.DATABASE)); i++) {
ConsoleModule.warning("Updating database... (" + i + " -> " + (i + 1) + ")");
if(DatabaseModule.updateDb(i)) {
ConsoleModule.info("Database updated! (" + i + " -> " + (i + 1) + ")");
ConsoleModule.warning("Database updated! (" + i + " -> " + (i + 1) + ")");
} else ConsoleModule.severe("Database update failed! (" + i + " -> " + (i + 1) + ")");
}
} else ConsoleModule.info("Database is up to date! (" + dbVer + ")");
MailboxLogModule.init();
registerEvents(new MailboxListener(), new PlayerListener());
RecipeModule.register();
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new MailboxItemTask(), 0, 0);
registerEvents(new VirtualMailboxListener(),
new PlayerListener(),
new ItemMailboxListener());
getCommand("itemmail").setExecutor(new ItemMailCommand());
getCommand("itemmail").setTabCompleter(new ItemMailCommandTabCompleter());
getCommand("itemmailadmin").setExecutor(new ItemMailAdminCommand());
Expand All @@ -120,8 +128,13 @@ public final void run() {
getCommand("mailitem").setTabCompleter(new MailItemCommandTabCompleter());
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "itemmailadmin update");
} else {
ConsoleModule.severe("You've choosen to disable me!");
Bukkit.getPluginManager().disablePlugin(this);
ConsoleModule.severe("You've choosen to disable me.");
new BukkitRunnable() {
@Override
public final void run() {
Bukkit.getPluginManager().disablePlugin(instance);
}
}.runTaskTimer(this, 0, 20);
}
}
@Override
Expand Down Expand Up @@ -154,4 +167,7 @@ public final Economy getEconomy() {
public final Connection getConnection() {
return con;
}
public final Integer getVersionTask() {
return versionTaskID;
}
}
1 change: 1 addition & 0 deletions src/main/java/io/github/leothawne/LTItemMail/api/HTTP.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public static final String getData(final String url) {
try {
final URLConnection connection = new URL(url).openConnection();
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36");
connection.setUseCaches(false);
connection.connect();
final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), Charset.forName("UTF-8")));
final StringBuilder builder = new StringBuilder();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import java.util.UUID;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.OfflinePlayer;
import org.bukkit.inventory.ItemStack;

/**
Expand Down Expand Up @@ -32,12 +32,14 @@ public static final LTItemMailAPI getInstance() {
* to any player on the server. The mailbox
* will be assigned as a "Special Mailbox".
*
* @param player The Player type variable.
* @param player The OfflinePlayer type variable.
* @param items The list of items that the player will receive.
*
* @return "success" if it was successfully delivered. Otherwise it will return an error message.
*
*/
public final void sendSpecialMailbox(final Player player, final LinkedList<ItemStack> items) {
MailboxAPI.sendSpecial(player, items);
public final String sendSpecialMailbox(final OfflinePlayer player, final LinkedList<ItemStack> items) {
return MailboxAPI.sendSpecial(player, items);
}
/**
*
Expand All @@ -48,9 +50,11 @@ public final void sendSpecialMailbox(final Player player, final LinkedList<ItemS
* @param playerUUID The player's unique id.
* @param items The list of items that the player will receive.
*
* @return "success" if it was successfully delivered. Otherwise it will return an error message.
*
*/
public final void sendSpecialMailbox(final UUID playerUUID, final LinkedList<ItemStack> items) {
sendSpecialMailbox(Bukkit.getPlayer(playerUUID), items);
public final String sendSpecialMailbox(final UUID playerUUID, final LinkedList<ItemStack> items) {
return sendSpecialMailbox(Bukkit.getOfflinePlayer(playerUUID), items);
}
/**
*
Expand All @@ -61,8 +65,11 @@ public final void sendSpecialMailbox(final UUID playerUUID, final LinkedList<Ite
* @param playerName The player's name.
* @param items The list of items that the player will receive.
*
* @return "success" if it was successfully delivered. Otherwise it will return an error message.
*
*/
public final void sendSpecialMailbox(final String playerName, final LinkedList<ItemStack> items) {
sendSpecialMailbox(Bukkit.getPlayer(playerName), items);
@SuppressWarnings("deprecation")
public final String sendSpecialMailbox(final String playerName, final LinkedList<ItemStack> items) {
return sendSpecialMailbox(Bukkit.getOfflinePlayer(playerName), items);
}
}
18 changes: 10 additions & 8 deletions src/main/java/io/github/leothawne/LTItemMail/api/MailboxAPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,23 @@
import java.util.LinkedList;

import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.OfflinePlayer;
import org.bukkit.inventory.ItemStack;

import io.github.leothawne.LTItemMail.LTItemMail;
import io.github.leothawne.LTItemMail.module.DatabaseModule;
import io.github.leothawne.LTItemMail.module.LanguageModule;
import io.github.leothawne.LTItemMail.module.MailboxLogModule;

public final class MailboxAPI {
private MailboxAPI() {}
public static final void sendSpecial(final Player receiver, final LinkedList<ItemStack> items) {
if(LTItemMail.getInstance().getConfiguration().getBoolean("use-title")) {
receiver.sendTitle(ChatColor.AQUA + "" + LanguageModule.get(LanguageModule.Type.MAILBOX_SPECIAL), "", 20 * 1, 20 * 5, 20 * 1);
} else receiver.sendMessage(ChatColor.DARK_GREEN + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.AQUA + "" + LanguageModule.get(LanguageModule.Type.MAILBOX_SPECIAL));
final Integer mailboxID = DatabaseModule.Function.saveMailbox(null, receiver.getUniqueId(), items);
MailboxLogModule.log(null, null, MailboxLogModule.Action.RECEIVED, mailboxID);
public static final String sendSpecial(final OfflinePlayer receiver, final LinkedList<ItemStack> items) {
if(receiver.hasPlayedBefore()) {
if(LTItemMail.getInstance().getConfiguration().getBoolean("use-title")) {
if(receiver.getPlayer() != null) receiver.getPlayer().sendTitle(ChatColor.AQUA + "" + LanguageModule.get(LanguageModule.Type.MAILBOX_SPECIAL), "", 20 * 1, 20 * 5, 20 * 1);
} else if(receiver.getPlayer() != null) receiver.getPlayer().sendMessage(ChatColor.DARK_GREEN + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.AQUA + "" + LanguageModule.get(LanguageModule.Type.MAILBOX_SPECIAL));
DatabaseModule.Virtual.saveMailbox(null, receiver.getUniqueId(), items);
return "success";
}
return LanguageModule.Type.PLAYER_NEVERPLAYEDERROR.name();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import io.github.leothawne.LTItemMail.module.PermissionModule;

public final class ItemMailAdminCommand implements CommandExecutor {
@SuppressWarnings("deprecation")
@Override
public final boolean onCommand(final CommandSender sender, final Command cmd, final String commandLabel, final String[] args) {
Boolean hasPermission = false;
Expand Down Expand Up @@ -64,14 +65,13 @@ public final void run() {
} else if(args[0].equalsIgnoreCase("list")) {
if(hasPermission = PermissionModule.hasPermission(sender, PermissionModule.Type.CMD_ADMIN_LIST)) {
if(args.length == 2) {
@SuppressWarnings("deprecation")
final OfflinePlayer offPlayer = Bukkit.getOfflinePlayer(args[1]);
final HashMap<Integer, String> mailboxes = DatabaseModule.Function.getOpenedMailboxesList(offPlayer.getUniqueId());
final HashMap<Integer, String> mailboxes = DatabaseModule.Virtual.getOpenedMailboxesList(offPlayer.getUniqueId());
if(mailboxes.size() > 0) {
sender.sendMessage(ChatColor.AQUA + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + " :: Admin] " + ChatColor.YELLOW + "" + LanguageModule.get(LanguageModule.Type.PLAYER_OPENEDBOXES) + " " + offPlayer.getName() + ":");
for(final Integer mailboxID : mailboxes.keySet()) {
String x = "";
final LinkedList<ItemStack> items = DatabaseModule.Function.getMailbox(mailboxID);
final LinkedList<ItemStack> items = DatabaseModule.Virtual.getMailbox(mailboxID);
if(items.size() == 0) x = " [" + LanguageModule.get(LanguageModule.Type.MAILBOX_EMPTY) + "]";
sender.sendMessage(LTItemMail.getInstance().getConfiguration().getString("mailbox-name") + " #" + mailboxID + " : " + mailboxes.get(mailboxID) + x);
}
Expand All @@ -85,10 +85,10 @@ public final void run() {
if(args.length == 2) {
try {
final Integer mailboxID = Integer.valueOf(args[1]);
final LinkedList<ItemStack> items = DatabaseModule.Function.getMailbox(mailboxID);
final LinkedList<ItemStack> items = DatabaseModule.Virtual.getMailbox(mailboxID);
if(items.size() > 0) {
player.openInventory(MailboxInventory.getMailboxInventory(MailboxInventory.Type.IN, mailboxID, null, items));
MailboxLogModule.log(player.getUniqueId(), null, MailboxLogModule.Action.RECOVERED, mailboxID);
MailboxLogModule.log(player.getUniqueId(), null, MailboxLogModule.Action.RECOVERED, mailboxID, null);
} else player.sendMessage(ChatColor.AQUA + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + " :: Admin] " + ChatColor.YELLOW + "" + LanguageModule.get(LanguageModule.Type.MAILBOX_NOLOST));
} catch (final NumberFormatException e) {
player.sendMessage(ChatColor.AQUA + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + " :: Admin] " + ChatColor.YELLOW + "" + LanguageModule.get(LanguageModule.Type.MAILBOX_IDERROR));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public final boolean onCommand(final CommandSender sender, final Command cmd, fi
if(args.length == 2) {
try {
final Integer mailboxID = Integer.valueOf(args[1]);
if(DatabaseModule.Function.isMaiboxOwner(player.getUniqueId(), mailboxID) && !DatabaseModule.Function.isMailboxOpened(mailboxID)) player.openInventory(MailboxInventory.getMailboxInventory(MailboxInventory.Type.IN, mailboxID, null, DatabaseModule.Function.getMailbox(mailboxID)));
if(DatabaseModule.Virtual.isMaiboxOwner(player.getUniqueId(), mailboxID) && !DatabaseModule.Virtual.isMailboxOpened(mailboxID)) player.openInventory(MailboxInventory.getMailboxInventory(MailboxInventory.Type.IN, mailboxID, null, DatabaseModule.Virtual.getMailbox(mailboxID)));
} catch (final NumberFormatException e) {
player.sendMessage(ChatColor.AQUA + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.YELLOW + "" + LanguageModule.get(LanguageModule.Type.MAILBOX_IDERROR));
}
Expand All @@ -55,7 +55,7 @@ public final boolean onCommand(final CommandSender sender, final Command cmd, fi
if(sender instanceof Player) {
final Player player = (Player) sender;
if(args.length == 1) {
final HashMap<Integer, String> mailboxes = DatabaseModule.Function.getMailboxesList(player.getUniqueId());
final HashMap<Integer, String> mailboxes = DatabaseModule.Virtual.getMailboxesList(player.getUniqueId());
if(mailboxes.size() > 0) {
for(final Integer mailboxID : mailboxes.keySet()) player.sendMessage(LTItemMail.getInstance().getConfiguration().getString("mailbox-name") + " #" + mailboxID + " : " + mailboxes.get(mailboxID));
} else player.sendMessage(ChatColor.AQUA + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.YELLOW + "" + LanguageModule.get(LanguageModule.Type.MAILBOX_NONEW));
Expand All @@ -69,9 +69,9 @@ public final boolean onCommand(final CommandSender sender, final Command cmd, fi
if(args.length == 2) {
try {
final Integer mailboxID = Integer.valueOf(args[1]);
if(DatabaseModule.Function.isMaiboxOwner(player.getUniqueId(), mailboxID) && !DatabaseModule.Function.isMailboxOpened(mailboxID)) {
DatabaseModule.Function.setMailboxOpened(mailboxID);
MailboxLogModule.log(player.getUniqueId(), null, MailboxLogModule.Action.OPENED, mailboxID);
if(DatabaseModule.Virtual.isMaiboxOwner(player.getUniqueId(), mailboxID) && !DatabaseModule.Virtual.isMailboxOpened(mailboxID)) {
DatabaseModule.Virtual.setMailboxOpened(mailboxID);
MailboxLogModule.log(player.getUniqueId(), null, MailboxLogModule.Action.OPENED, mailboxID, null);
player.sendMessage(ChatColor.AQUA + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.YELLOW + "" + LanguageModule.get(LanguageModule.Type.MAILBOX_DELETED) + " " + LTItemMail.getInstance().getConfiguration().getString("mailbox-name") + " #" + mailboxID);
}
} catch (final NumberFormatException e) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package io.github.leothawne.LTItemMail.command;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
Expand All @@ -12,6 +14,7 @@
import io.github.leothawne.LTItemMail.module.PermissionModule;

public final class MailItemCommand implements CommandExecutor {
@SuppressWarnings("deprecation")
@Override
public final boolean onCommand(final CommandSender sender, final Command cmd, final String commandLabel, final String[] args) {
if(PermissionModule.hasPermission(sender, PermissionModule.Type.CMD_PLAYER_SEND)) {
Expand All @@ -20,15 +23,15 @@ public final boolean onCommand(final CommandSender sender, final Command cmd, fi
if(args.length == 0) {
player.sendMessage(ChatColor.DARK_GREEN + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.YELLOW + "" + LanguageModule.get(LanguageModule.Type.PLAYER_MISSINGERROR));
} else if(args.length == 1) {
final Player player1 = LTItemMail.getInstance().getServer().getPlayer(args[0]);
if(player1 != null) {
if(player1.getUniqueId().equals(player.getUniqueId())) {
final OfflinePlayer playerTo = Bukkit.getOfflinePlayer(args[0]);
if(playerTo.hasPlayedBefore()) {
if(playerTo.getUniqueId().equals(player.getUniqueId())) {
if(args.length == 2 && args[1].equalsIgnoreCase("--bypass") && PermissionModule.hasPermission(sender, PermissionModule.Type.CMD_ADMIN_BYPASS)) {
player.sendMessage(ChatColor.DARK_GREEN + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.YELLOW + "Ok...");
player.openInventory(MailboxInventory.getMailboxInventory(MailboxInventory.Type.OUT, null, player1, null));
player.openInventory(MailboxInventory.getMailboxInventory(MailboxInventory.Type.OUT, null, playerTo, null));
} else player.sendMessage(ChatColor.DARK_GREEN + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.YELLOW + "" + LanguageModule.get(LanguageModule.Type.PLAYER_SELFERROR));
} else player.openInventory(MailboxInventory.getMailboxInventory(MailboxInventory.Type.OUT, null, player1, null));
} else player.sendMessage(ChatColor.DARK_GREEN + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.YELLOW + "" + LanguageModule.get(LanguageModule.Type.PLAYER_OFFLINEERROR));
} else player.openInventory(MailboxInventory.getMailboxInventory(MailboxInventory.Type.OUT, null, playerTo, null));
} else player.sendMessage(ChatColor.DARK_GREEN + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.YELLOW + "" + LanguageModule.get(LanguageModule.Type.PLAYER_NEVERPLAYEDERROR));
} else player.sendMessage(ChatColor.DARK_GREEN + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.YELLOW + "" + LanguageModule.get(LanguageModule.Type.PLAYER_SYNTAXERROR));
} else sender.sendMessage(ChatColor.DARK_GREEN + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.YELLOW + "" + LanguageModule.get(LanguageModule.Type.PLAYER_ERROR));
} else sender.sendMessage(ChatColor.DARK_GREEN + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.YELLOW + "" + LanguageModule.get(LanguageModule.Type.PLAYER_PERMISSIONERROR));
Expand Down

0 comments on commit 629fd5e

Please sign in to comment.