package ru.mestoff.mpromocode;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.scheduler.BukkitTask;
import ru.mestoff.mpromocode.utils.ConfigUtil;
import java.util.Random;
public class MPromocode extends JavaPlugin {
public static MPromocode instance;
private int delay = ConfigUtil.getInt("promo-delay");
private BukkitTask bukkitTask;
private static Economy economy;
private static String currentPromoCode;
public static Economy getEconomy() {
return economy;
}
public static MPromocode getInstance() {
return instance;
}
@Override
public void onEnable() {
instance = this;
saveDefaultConfig();
startTask();
}
public void startTask() {
bukkitTask = Bukkit.getScheduler().runTaskTimer(this, () -> {
currentPromoCode = generatePromoCode();
for (String message : ConfigUtil.getStringColorizedList("messages.new-promo")) {
Bukkit.broadcastMessage(message.replace("{promo}", String.valueOf(currentPromoCode)));
}
}, delay * 20L, delay * 20L);
if (!setupEconomy()) {
getLogger().severe(String.format("Vault не найден!", new Object(), getDescription().getName()));
getServer().getPluginManager().disablePlugin(this);
}
}
private boolean setupEconomy() {
if (getServer().getPluginManager().getPlugin("Vault") == null)
return false;
RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
if (rsp == null)
return false;
economy = (Economy) rsp.getProvider();
return (economy != null);
}
public String generatePromoCode() {
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuilder promoCode = new StringBuilder();
for (int i = 0; i < ConfigUtil.getInt("promo-length"); i++) {
promoCode.append(characters.charAt(random.nextInt(characters.length())));
}
return promoCode.toString();
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("mpromocode")) {
if (!sender.hasPermission("mpromocode.admin")) {
sender.sendMessage("§fИспользуется: §amPromocode " + this.instance.getDescription().getVersion() + " §fby mestoff");
return true;
}
if (args[0].equalsIgnoreCase("reload") && sender.hasPermission("mpromocode.admin")) {
bukkitTask.cancel();
bukkitTask = null;
this.reloadConfig();
delay = ConfigUtil.getInt("promo-delay");
startTask();
sender.sendMessage(ConfigUtil.getColorizedString("messages.reload"));
return true;
}
if (cmd.getName().equalsIgnoreCase("promo")) {
if (args.length == 0) {
sender.sendMessage(ConfigUtil.getColorizedString("messages.usage"));
return true;
}
if (!(sender instanceof Player)) {
sender.sendMessage(ConfigUtil.getColorizedString("messages.only-player"));
return true;
}
String promoCodeEntered = args[0];
String name = sender.getName();
int reward = ConfigUtil.getInt("reward-amount");
if (!promoCodeEntered.equals(currentPromoCode)) {
sender.sendMessage(ConfigUtil.getColorizedString("messages.error-promo"));
return true;
}
if (promoCodeEntered.equals(currentPromoCode)) {
MPromocode.getEconomy().depositPlayer((OfflinePlayer) sender, ConfigUtil.getInt("reward"));
for (String message : ConfigUtil.getStringColorizedList("messages.player-activate")) {
Bukkit.broadcastMessage(message.replace("{player}", String.valueOf(name)).replace("{reward-amount}", String.valueOf(reward)));
}
sender.sendMessage(ConfigUtil.getColorizedString("messages.successful-input").replace("{reward}", String.valueOf(reward)));
currentPromoCode = null;
}
}
}
return false;
}
@Override
public void onDisable() {}
}