Skip to content

Commit

Permalink
Important changes
Browse files Browse the repository at this point in the history
Added language fallback
Rewrote mailbox system
Added mailbox logging system
  • Loading branch information
leothawne committed Dec 22, 2023
1 parent 139ef9c commit 83a186c
Show file tree
Hide file tree
Showing 24 changed files with 325 additions and 266 deletions.
6 changes: 3 additions & 3 deletions config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ cost-per-item: true
#Cost to send items to another players. Default: 0.50 (per item), 100.0 (per mailbox).
mail-cost: 0.50

#Time (in seconds) before a mailbox open. Default: 5.
mail-time: 5
#Name of the mail inventory. Default: Mailbox.
mailbox-name: "Mailbox"

#Should administrators be warned about new updates? Default: true.
#If 'true', this will not bother you while you are playing. I promisse!
update:
check: true

#Do not change this under any circumstances!
config-version: 6
config-version: 7
10 changes: 2 additions & 8 deletions english.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,12 @@
no-permission: "You do not have permission to do this."
mailbox-closed: "Box closed."
mailbox-closed-items: "You lost % items:"
mailbox-paid: "You paid $% to the post office."
mailbox-sent: "Sending box to %..."
mailbox-from: "Mailbox from %."
mailbox-from: "New mailbox from"
special-mailbox: "Special Mailbox!!!"
mailbox-opening: "Opening box..."
mailbox-opening-seconds: "Opening in % seconds..."
mailbox-lose: "Do not let items inside before closing it!"
mailbox-delivered: "The box was delivered!"
mailbox-aborted: "Shipping canceled!"
transaction-error: "Transaction not succeeded!"
transaction-no-money: "You do not have $% to pay to the post office."
recipient-busy: "% is busy right now. Try again in a few seconds."
recipient-full: "% does not have % free slot(s)."
recipient-empty: "You must specify a player!"
recipient-offline: "The specified player is not online."
Expand All @@ -21,4 +15,4 @@ player-tma: "Too many arguments!"
player-self: "You can not send a mailbox to yourself."

#Do not change it under any circumstances!
language-version: 4
language-version: 5
4 changes: 2 additions & 2 deletions plugin.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: LTItemMail
description: A way of sending items to another players without needing to teleport to them.
version: 0.2.6
description: A new way of sending items to another player without need teleporting to them.
version: 0.2.7
api-version: 1.13
load: STARTUP
author: [leothawne]
Expand Down
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
<modelVersion>4.0.0</modelVersion>
<groupId>io.github.leothawne</groupId>
<artifactId>LTItemMail</artifactId>
<version>0.2.6</version>
<version>0.2.7</version>
<name>LT Item Mail</name>
<description>A way of sending items to another players without needing to teleport to them.</description>
<description>A new way of sending items to another player without need teleporting to them.</description>
<build>
<finalName>LT Item Mail</finalName>
<plugins>
Expand Down
10 changes: 2 additions & 8 deletions portuguese.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,12 @@
no-permission: "Você não tem permissão para fazer isso."
mailbox-closed: "Caixa fechada."
mailbox-closed-items: "Você perdeu % itens:"
mailbox-paid: "Você pagou $% ao corrêio."
mailbox-sent: "Enviando caixa para %..."
mailbox-from: "Corrêio de % chegando"
mailbox-from: "Novo corrêio de"
special-mailbox: "Corrêio especial!!!"
mailbox-opening: "Abrindo caixa..."
mailbox-opening-seconds: "Abrindo em % segundos..."
mailbox-lose: "Não deixe itens dentro antes de fechar!"
mailbox-delivered: "A caixa foi entregue!"
mailbox-aborted: "Envio cancelado."
transaction-error: "Transação mal sucedida!"
transaction-no-money: "Você não tem $% para pagar ao corrêio."
recipient-busy: "% está ocupado agora. Tente novamente em alguns segundos."
recipient-full: "% não tem % slot(s) livre(s)."
recipient-empty: "Enter the name of the recipient."
recipient-offline: "The recipient you have chosen is not online."
Expand All @@ -21,4 +15,4 @@ player-tma: "Muitos argumentos inseridos!"
player-self: "Você não pode enviar uma caixa de itens para você mesmo."

#Não mude isso sob nenhuma circunstância!
language-version: 4
language-version: 5
20 changes: 9 additions & 11 deletions src/main/java/io/github/leothawne/LTItemMail/LTItemMail.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,10 @@

import java.sql.Connection;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.UUID;

import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitScheduler;
Expand All @@ -42,6 +39,7 @@
import io.github.leothawne.LTItemMail.module.ConsoleModule;
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.VaultModule;
import io.github.leothawne.LTItemMail.task.VersionTask;
Expand All @@ -58,11 +56,10 @@ public final class LTItemMail extends JavaPlugin {
private final void registerEvents(final Listener...listeners) {
for(final Listener listener : listeners) Bukkit.getServer().getPluginManager().registerEvents(listener, this);
}
private final ConsoleModule console = new ConsoleModule(this);
private final ConsoleModule console = new ConsoleModule();
private FileConfiguration configuration;
private FileConfiguration language;
private Connection con;
private HashMap<UUID, Boolean> playerBusy = new HashMap<UUID, Boolean>();
private MetricsAPI metrics;
private BukkitScheduler scheduler;
private Economy economyPlugin;
Expand All @@ -76,9 +73,14 @@ public final void onEnable() {
instance = this;
this.console.Hello();
this.console.info("Loading...");
for(final Player player : getServer().getOnlinePlayers()) playerBusy.put(player.getUniqueId(), false);
ConfigurationModule.check();
configuration = ConfigurationModule.load();
LanguageModule.check();
language = LanguageModule.load();
if(configuration == null || language == null) {
Bukkit.getServer().shutdown();
return;
}
if(configuration.getBoolean("enable-plugin")) {
metrics = MetricsModule.init();
economyPlugin = null;
Expand All @@ -93,10 +95,9 @@ public final void onEnable() {
} else console.info("Economy plugin is missing. Skipping...");
} else console.info("Vault is not installed. Skipping...");
}
LanguageModule.check();
language = LanguageModule.load();
DatabaseModule.check();
con = DatabaseModule.load();
MailboxLogModule.init();
getCommand("itemmail").setExecutor(new ItemMailCommand());
getCommand("itemmail").setTabCompleter(new ItemMailCommandTabCompleter());
getCommand("itemmailadmin").setExecutor(new ItemMailAdminCommand());
Expand Down Expand Up @@ -142,9 +143,6 @@ public final FileConfiguration getConfiguration() {
public final FileConfiguration getLanguage() {
return language;
}
public final HashMap<UUID, Boolean> getPlayerBusy(){
return playerBusy;
}
public final ConsoleModule getConsole() {
return console;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,51 +37,6 @@ public LTItemMailAPI() {}
public final boolean isUsingVault() {
return LTItemMail.getInstance().getConfiguration().getBoolean("use-vault");
}
/**
*
* Returns a boolean type value that can be used to determine
* if a player is marked as busy. While opening a mailbox,
* the receiver is marked as busy to not receive other
* mailboxes until it closes the currently opened one.
*
* @param player The Player type variable.
*
* @return A boolean type value.
*
*/
public final boolean isPlayerBusy(final Player player) {
return (boolean) LTItemMail.getInstance().getPlayerBusy().get(player.getUniqueId()).booleanValue();
}
/**
*
* Returns a boolean type value that can be used to determine
* if a player is marked as busy. While opening a mailbox,
* the receiver is marked as busy to not receive other
* mailboxes until it closes the currently opened one.
*
* @param playerUUID The player's unique id.
*
* @return A boolean type value.
*
*/
public final boolean isPlayerBusy(final UUID playerUUID) {
return isPlayerBusy(Bukkit.getPlayer(playerUUID));
}
/**
*
* Returns a boolean type value that can be used to determine
* if a player is marked as busy. While opening a mailbox,
* the receiver is marked as busy to not receive other
* mailboxes until it closes the currently opened one.
*
* @param playerName The player's name.
*
* @return A boolean type value.
*
*/
public final boolean isPlayerBusy(final String playerName) {
return isPlayerBusy(Bukkit.getPlayer(playerName));
}
/**
*
* Returns a FileConfiguration type value that can be used
Expand Down
26 changes: 8 additions & 18 deletions src/main/java/io/github/leothawne/LTItemMail/api/MailboxAPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,18 @@
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable;

import io.github.leothawne.LTItemMail.LTItemMail;
import io.github.leothawne.LTItemMail.inventory.MailboxInventory;
import io.github.leothawne.LTItemMail.type.MailboxType;
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 {
public static final void sendSpecial(final Player receiver, final LinkedList<ItemStack> items) {
final String mailboxFrom = LTItemMail.getInstance().getLanguage().getString("special-mailbox");
final String[] mailboxOpening = LTItemMail.getInstance().getLanguage().getString("mailbox-opening-seconds").split("%");
LTItemMail.getInstance().getPlayerBusy().put(receiver.getUniqueId(), true);
if(LTItemMail.getInstance().getConfiguration().getBoolean("use-title") == true) {
receiver.sendTitle(ChatColor.LIGHT_PURPLE + "" + mailboxFrom, ChatColor.AQUA + "" + mailboxOpening[0] + "" + ChatColor.GREEN + "" + LTItemMail.getInstance().getConfiguration().getInt("mail-time") + "" + ChatColor.AQUA + "" + mailboxOpening[1], 20 * 1, 20 * LTItemMail.getInstance().getConfiguration().getInt("mail-time"), 20 * 1);
} else {
receiver.sendMessage(ChatColor.DARK_GREEN + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.AQUA + "" + mailboxFrom);
receiver.sendMessage(ChatColor.DARK_GREEN + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.AQUA + "" + mailboxOpening[0] + "" + ChatColor.GREEN + "" + LTItemMail.getInstance().getConfiguration().getInt("mail-time") + "" + ChatColor.AQUA + "" + mailboxOpening[1]);
}
new BukkitRunnable() {
@Override
public final void run() {
receiver.openInventory(MailboxInventory.getMailboxInventory(MailboxType.IN, null, null, items));
}
}.runTaskLater(LTItemMail.getInstance(), 20 * LTItemMail.getInstance().getConfiguration().getInt("mail-time") + 2);
if(LTItemMail.getInstance().getConfiguration().getBoolean("use-title")) {
receiver.sendTitle(ChatColor.AQUA + "" + LanguageModule.get("special-mailbox"), "", 20 * 1, 20 * 5, 20 * 1);
} else receiver.sendMessage(ChatColor.DARK_GREEN + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.AQUA + "" + LanguageModule.get("special-mailbox"));
final Integer mailboxID = DatabaseModule.Function.saveMailbox(null, receiver.getUniqueId(), items);
MailboxLogModule.log(null, null, MailboxLogModule.ActionType.RECEIVED, mailboxID);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
import io.github.leothawne.LTItemMail.inventory.MailboxInventory;
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.type.MailboxType;

public final class ItemMailAdminCommand implements CommandExecutor {
Expand Down Expand Up @@ -66,24 +68,29 @@ public final void run() {
final HashMap<Integer, String> mailboxes = DatabaseModule.Function.getOpenedMailboxesList(offPlayer.getUniqueId());
if(mailboxes.size() > 0) {
player.sendMessage(offPlayer.getName() + "'s opened mailboxes:");
for(final Integer mailboxID : mailboxes.keySet()) player.sendMessage("Mailbox #" + mailboxID + " : " + mailboxes.get(mailboxID));
for(final Integer mailboxID : mailboxes.keySet()) {
String x = "";
final LinkedList<ItemStack> items = DatabaseModule.Function.getMailbox(mailboxID);
if(items.size() == 0) x = " [Empty]";
player.sendMessage("Mailbox #" + mailboxID + " : " + mailboxes.get(mailboxID) + x);
}
} else player.sendMessage("No opened mailboxes for player " + offPlayer.getName() + ".");
}
} else if(args[0].equalsIgnoreCase("recover") && sender instanceof Player) {
final Player player = (Player) sender;
if(args.length == 2) try {
final Integer mailboxID = Integer.valueOf(args[1]);
final LinkedList<ItemStack> items = DatabaseModule.Function.getLostMailbox(mailboxID);
final LinkedList<ItemStack> items = DatabaseModule.Function.getMailbox(mailboxID);
if(items.size() > 0) {
LTItemMail.getInstance().getPlayerBusy().put(player.getUniqueId(), true);
player.openInventory(MailboxInventory.getMailboxInventory(MailboxType.IN, mailboxID, null, items));
MailboxLogModule.log(player.getUniqueId(), null, MailboxLogModule.ActionType.RECOVERED, mailboxID);
} else player.sendMessage("There is no lost items on this mailbox.");
} catch (final NumberFormatException e) {
player.sendMessage("Mailbox ID must be a number!");
}
} else sender.sendMessage(ChatColor.AQUA + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + " :: Admin] " + ChatColor.YELLOW + "Invalid command! Type " + ChatColor.GREEN + "/itemmailadmin " + ChatColor.YELLOW + "to see all available commands.");
} else {
sender.sendMessage(ChatColor.AQUA + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + " :: Admin] " + ChatColor.YELLOW + "" + LTItemMail.getInstance().getLanguage().getString("no-permission"));
sender.sendMessage(ChatColor.AQUA + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + " :: Admin] " + ChatColor.YELLOW + "" + LanguageModule.get("no-permission"));
LTItemMail.getInstance().getConsole().severe(sender.getName() + " does not have permission [LTItemMail.admin].");
}
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import io.github.leothawne.LTItemMail.inventory.MailboxInventory;
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.type.MailboxType;

public final class ItemMailCommand implements CommandExecutor {
Expand All @@ -37,12 +39,7 @@ public final boolean onCommand(final CommandSender sender, final Command cmd, fi
final Player player = (Player) sender;
if(args.length == 2) try {
final Integer mailboxID = Integer.valueOf(args[1]);
if(DatabaseModule.Function.isMaiboxOwner(player.getUniqueId(), mailboxID) && !DatabaseModule.Function.isMailboxOpened(mailboxID)) {
player.sendMessage(ChatColor.DARK_RED + "" + LTItemMail.getInstance().getLanguage().getString("mailbox-lose"));
LTItemMail.getInstance().getPlayerBusy().put(player.getUniqueId(), true);
player.openInventory(MailboxInventory.getMailboxInventory(MailboxType.IN, mailboxID, null, DatabaseModule.Function.getMailbox(mailboxID)));
DatabaseModule.Function.setMailboxOpened(mailboxID);
}
if(DatabaseModule.Function.isMaiboxOwner(player.getUniqueId(), mailboxID) && !DatabaseModule.Function.isMailboxOpened(mailboxID)) player.openInventory(MailboxInventory.getMailboxInventory(MailboxType.IN, mailboxID, null, DatabaseModule.Function.getMailbox(mailboxID)));
} catch (final NumberFormatException e) {
player.sendMessage("Mailbox ID must be a number!");
}
Expand All @@ -52,9 +49,21 @@ public final boolean onCommand(final CommandSender sender, final Command cmd, fi
if(mailboxes.size() > 0) {
for(final Integer mailboxID : mailboxes.keySet()) player.sendMessage("Mailbox #" + mailboxID + " : " + mailboxes.get(mailboxID));
} else player.sendMessage("No new mailboxes.");
} else if(args[0].equalsIgnoreCase("delete") && sender instanceof Player) {
final Player player = (Player) sender;
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.ActionType.OPENED, mailboxID);
player.sendMessage("Deleted!");
}
} catch (final NumberFormatException e) {
player.sendMessage("Mailbox ID must be a number!");
}
} else sender.sendMessage(ChatColor.AQUA + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.YELLOW + "Invalid command! Type " + ChatColor.GREEN + "/itemmail " + ChatColor.YELLOW + "to see all available commands.");
} else {
sender.sendMessage(ChatColor.AQUA + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.YELLOW + "" + LTItemMail.getInstance().getLanguage().getString("no-permission"));
sender.sendMessage(ChatColor.AQUA + "[" + LTItemMail.getInstance().getConfiguration().getString("plugin-tag") + "] " + ChatColor.YELLOW + "" + LanguageModule.get("no-permission"));
LTItemMail.getInstance().getConsole().severe(sender.getName() + " does not have permission [LTItemMail.use].");
}
return true;
Expand Down

0 comments on commit 83a186c

Please sign in to comment.