diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/BonusAmount.java b/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/BonusAmount.java index d596a846b..17b12a1c7 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/BonusAmount.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/BonusAmount.java @@ -150,7 +150,7 @@ public class BonusAmount if (amount > 0) lore.add(C.cYellow + "Reward: " + C.cWhite + amount + " " + suffix); - if (bonus > 0) - lore.add(C.cYellow + "Streak Bonus: " + C.cWhite + bonus + " " + suffix); +// if (bonus > 0) +// lore.add(C.cYellow + "Streak Bonus: " + C.cWhite + bonus + " " + suffix); } } diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/BonusManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/BonusManager.java index 08bf386c9..b91ff0527 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/BonusManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/BonusManager.java @@ -211,6 +211,8 @@ public class BonusManager extends MiniClientPlugin implements I public void handleVote(Player player) { +// _repository.attemptDailyBonus(); + addPendingExplosion(player, player.getName()); } @@ -500,20 +502,54 @@ public class BonusManager extends MiniClientPlugin implements I return calendar.getTimeInMillis(); } + public int getDailyMultiplier(Player player) + { + BonusClientData client = Get(player); + int streak = client.getDailyStreak(); + + int multiplyer = Math.min(200, 5 * streak); + if (streak >= 40) multiplyer += (1 * (streak - 40)); + return multiplyer; + } + + public int getVoteMultiplyer(Player player) + { + BonusClientData client = Get(player); + int streak = client.getVoteStreak(); + + int multiplyer = Math.min(100, 5 * streak); + if (streak >= 20) multiplyer += (1 * (streak - 40)); + return multiplyer; + } + public BonusAmount getDailyBonusAmount(Player player) { + double mult = getDailyMultiplier(player) / 100.0; + BonusAmount amount = new BonusAmount(); - amount.setTickets(1); - amount.setBonusCoins(100); - amount.setBonusExperience(1000); + int coins = 100; + int gems = 100; + int experience = 250; + + amount.setCoins(coins); + amount.setGems(gems); + amount.setExperience(experience); + amount.setBonusCoins((int) (mult * coins)); + amount.setBonusGems((int) (mult * gems)); + amount.setBonusExperience((int) (mult * experience)); + return amount; } public BonusAmount getVoteBonusAmount(Player player) { + double mult = getVoteMultiplyer(player) / 100.0; + BonusAmount amount = new BonusAmount(); amount.setTickets(1); - amount.setGems(500); + amount.setGems(400); + amount.setBonusGems((int) (mult * 400)); + return amount; } @@ -545,7 +581,7 @@ public class BonusManager extends MiniClientPlugin implements I //VOTE - public void atteptVoteBonus(final Player player, final Callback result) + public void attemptVoteBonus(final Player player, final Callback result) { if (timeTillRankBonus(player) > 0) result.run(false); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/BonusRepository.java b/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/BonusRepository.java index 8fcc95d6d..bed58e3dd 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/BonusRepository.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/BonusRepository.java @@ -251,13 +251,8 @@ public class BonusRepository extends RepositoryBase }); } - public void voteBonus(final Player player, final Callback result) + public void attemptVoteBonus(final Player player, final Callback result) { - if (!Recharge.Instance.usable(player, "AttemptVoteBonus")) - { - result.run(false); - return; - } final int accountId = _manager.getClientManager().Get(player).getAccountId(); final int coins = _manager.getRankBonusAmount(player).getCoins(); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/gui/buttons/DailyBonusButton.java b/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/gui/buttons/DailyBonusButton.java index f6534589d..8ee34647f 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/gui/buttons/DailyBonusButton.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/gui/buttons/DailyBonusButton.java @@ -143,6 +143,8 @@ public class DailyBonusButton implements GuiItem, Listener lore.add(" "); lore.add(C.cYellow + "Current Streak: " + C.cWhite + client.getDailyStreak()); + lore.add(C.cYellow + "Streak Bonus: " + C.cWhite + _bonusManager.getDailyMultiplier(_player) + "%"); + lore.add(" "); lore.add(C.cYellow + "Highest Streak: " + C.cWhite + client.getMaxDailyStreak()); if (client.getDailyTime() != null) diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/gui/buttons/VoteButton.java b/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/gui/buttons/VoteButton.java index f7fcb06a1..969fc2f9d 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/gui/buttons/VoteButton.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/bonuses/gui/buttons/VoteButton.java @@ -139,6 +139,8 @@ public class VoteButton implements GuiItem, Listener { lore.add(" "); lore.add(C.cYellow + "Current Streak: " + C.cWhite + client.getVoteStreak()); + lore.add(C.cYellow + "Streak Bonus: " + C.cWhite + _bonusManager.getVoteMultiplyer(_player) + "%"); + lore.add(" "); lore.add(C.cYellow + "Highest Streak: " + C.cWhite + client.getMaxVoteStreak()); if (client.getVoteTime() != null) diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ServerManager.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ServerManager.java index fbf5d563b..4ed251ae4 100644 --- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ServerManager.java +++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/servers/ServerManager.java @@ -20,8 +20,9 @@ import mineplex.serverdata.servers.ConnectionData.ConnectionType; * */ public class ServerManager -{ +{ public static final String SERVER_STATUS_LABEL = "ServerStatus"; // Label differentiating ServerStatus related servers + private static final String DEFAULT_CONFIG = "redis-config.dat"; // Configuration determining connection information private static RedisConfig _config; @@ -74,7 +75,7 @@ public class ServerManager public static ConnectionData getConnection(boolean writeable, String name) { - return getConfig().getConnection(writeable, name); + return getConfig(DEFAULT_CONFIG).getConnection(writeable, name); } /** @@ -89,13 +90,13 @@ public class ServerManager /** * @return the {@link RedisConfig} associated with this manager, providing appropriate connections. */ - public static RedisConfig getConfig() + public static RedisConfig getConfig(String fileName) { if (_config == null) { try { - File configFile = new File("redis-config.dat"); + File configFile = new File(fileName); if (configFile.exists()) { @@ -113,7 +114,7 @@ public class ServerManager } else { - log("redis-config.dat not found at " + configFile.toPath().toString()); + log(fileName + " not found at " + configFile.toPath().toString()); _config = new RedisConfig(); } } diff --git a/Plugins/Mineplex.Votifier/Mineplex.Votifier.iml b/Plugins/Mineplex.Votifier/Mineplex.Votifier.iml index b7d71d202..c5e840788 100644 --- a/Plugins/Mineplex.Votifier/Mineplex.Votifier.iml +++ b/Plugins/Mineplex.Votifier/Mineplex.Votifier.iml @@ -19,5 +19,9 @@ + + + + \ No newline at end of file diff --git a/Plugins/Mineplex.Votifier/src/mineplex/votifier/VotifierManager.java b/Plugins/Mineplex.Votifier/src/mineplex/votifier/VotifierManager.java index ecef96339..3ff5e1f0f 100644 --- a/Plugins/Mineplex.Votifier/src/mineplex/votifier/VotifierManager.java +++ b/Plugins/Mineplex.Votifier/src/mineplex/votifier/VotifierManager.java @@ -1,5 +1,7 @@ package mineplex.votifier; +import java.util.UUID; + import org.bukkit.event.EventHandler; import org.bukkit.plugin.java.JavaPlugin; @@ -7,64 +9,156 @@ import com.vexsoftware.votifier.model.Vote; import com.vexsoftware.votifier.model.VotifierEvent; import mineplex.core.MiniPlugin; import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.UUIDFetcher; +import mineplex.core.database.DBPool; import mineplex.core.donation.DonationManager; import mineplex.core.votifier.VotifierCommand; +import mineplex.database.Tables; import mineplex.serverdata.Region; +import mineplex.serverdata.Utility; +import mineplex.serverdata.commands.ServerCommand; import mineplex.serverdata.commands.ServerCommandManager; import mineplex.serverdata.data.PlayerStatus; +import mineplex.serverdata.redis.RedisConfig; import mineplex.serverdata.redis.RedisDataRepository; import mineplex.serverdata.servers.ServerManager; +import org.jooq.DSLContext; +import org.jooq.SQLDialect; +import org.jooq.impl.DSL; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.exceptions.JedisConnectionException; /** * Created by shaun on 15-08-05. */ public class VotifierManager extends MiniPlugin { + private CoreClientManager _clientManager; + private DonationManager _donationManager; + + private RedisConfig _usConfig; + private RedisConfig _euConfig; private RedisDataRepository _usPlayerRepo; private RedisDataRepository _euPlayerRepo; + private JedisPool _usWritePool; + private JedisPool _euWritePool; public VotifierManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager) { super("Votifier", plugin); - _usPlayerRepo = new RedisDataRepository(ServerManager.getMasterConnection(), ServerManager.getSlaveConnection(), - Region.US, PlayerStatus.class, "playerStatus"); - _euPlayerRepo = new RedisDataRepository(ServerManager.getMasterConnection(), ServerManager.getSlaveConnection(), - Region.EU, PlayerStatus.class, "playerStatus"); + _clientManager = clientManager; + _donationManager = donationManager; - ServerCommandManager.getInstance().registerCommandType("VotifierCommand", VotifierCommand.class); + _usConfig = ServerManager.getConfig("us-redis.dat"); + _euConfig = ServerManager.getConfig("eu-redis.dat"); + + _usPlayerRepo = new RedisDataRepository(_usConfig.getConnection(true, "DefaultConnection"), + _usConfig.getConnection(false, "DefaultConnection"), Region.US, PlayerStatus.class, "playerStatus"); + _euPlayerRepo = new RedisDataRepository(_euConfig.getConnection(true, "DefaultConnection"), + _euConfig.getConnection(false, "DefaultConnection"), Region.EU, PlayerStatus.class, "playerStatus"); + + _usWritePool = Utility.generatePool(_usConfig.getConnection(true, "DefaultConnection")); + _euWritePool = Utility.generatePool(_euConfig.getConnection(true, "DefaultConnection")); } @EventHandler public void handleVote(VotifierEvent event) { Vote vote = event.getVote(); + String playerName = "Phinary"; - System.out.println("New Vote: " + vote.getUsername()); + System.out.println("New Vote: " + playerName); - PlayerStatus usStatus = _usPlayerRepo.getElement(vote.getUsername()); -// VotifierCommand command = new VotifierCommand(vote.getUsername(), "PhiTest-1"); -// command.publish(); +// UUID uuid = UUIDFetcher.getUUIDOf(playerName); + UUID uuid = _clientManager.loadUUIDFromDB(playerName); + if (uuid != null) + { + System.out.println("Found UUID:" + uuid.toString()); +// if (playerName.equalsIgnoreCase("Phinary")) +// { +// System.out.println("award bonus"); +// awardBonus(uuid); +// } + } + else + { + System.out.println("Failed to load UUID for player: " + playerName); + } + notifyServer(playerName); + } + + private boolean notifyServer(String playerName) + { + JedisPool writePool = null; + String serverName = null; + + PlayerStatus usStatus = _usPlayerRepo.getElement(playerName); if (usStatus != null) { System.out.println("Found on US Server: " + usStatus.getServer()); - VotifierCommand command = new VotifierCommand(vote.getUsername(), usStatus.getServer()); - command.publish(); - } - else - { - System.out.println("Not found on US Server!"); + writePool = _usWritePool; + serverName = usStatus.getServer(); } - PlayerStatus euStatus = _euPlayerRepo.getElement(vote.getUsername()); + PlayerStatus euStatus = _euPlayerRepo.getElement(playerName); if (euStatus != null) { System.out.println("Found on EU Server: " + euStatus.getServer()); + writePool = _euWritePool; + serverName = euStatus.getServer(); } - else + + if (writePool != null && serverName != null) { - System.out.println("Not found on EU Server!"); + VotifierCommand command = new VotifierCommand(playerName, serverName); + System.out.println("Publishing Server Command!"); + publishCommand(command, writePool); + + return true; } + + return false; + } + + private void awardBonus(UUID uuid) + { + DSLContext create = DSL.using(DBPool.ACCOUNT, SQLDialect.MYSQL); + int updated = create.update(Tables.bonus).set(Tables.bonus.tickets, Tables.bonus.tickets.add(1)) + .where(Tables.bonus.accountId.eq(DSL.select(Tables.accounts.id).where(Tables.accounts.uuid.eq(uuid.toString())))).execute(); + System.out.println("Ran query with response: " + updated); + } + + private void publishCommand(final ServerCommand serverCommand, final JedisPool writePool) + { + new Thread(new Runnable() + { + public void run() + { + Jedis jedis = writePool.getResource(); + + try + { + String commandType = serverCommand.getClass().getSimpleName(); + String serializedCommand = Utility.serialize(serverCommand); + jedis.publish("commands.server" + ":" + commandType, serializedCommand); + } + catch (JedisConnectionException exception) + { + exception.printStackTrace(); + writePool.returnBrokenResource(jedis); + jedis = null; + } + finally + { + if (writePool != null) + { + writePool.returnResource(jedis); + } + } + } + }).start(); } } \ No newline at end of file