Cashing out and safezones
This commit is contained in:
parent
9409cbc42c
commit
94f8419187
@ -18,5 +18,10 @@
|
||||
<artifactId>mineplex-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>mineplex-minecraft-game-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -37,6 +37,7 @@ import mineplex.core.itemstack.ItemStackFactory;
|
||||
import mineplex.core.memory.MemoryFix;
|
||||
import mineplex.core.message.MessageManager;
|
||||
import mineplex.core.monitor.LagMeter;
|
||||
import mineplex.core.npc.NpcManager;
|
||||
import mineplex.core.packethandler.PacketHandler;
|
||||
import mineplex.core.portal.Portal;
|
||||
import mineplex.core.preferences.PreferencesManager;
|
||||
@ -51,6 +52,9 @@ import mineplex.core.teleport.Teleport;
|
||||
import mineplex.core.updater.FileUpdater;
|
||||
import mineplex.core.updater.Updater;
|
||||
import mineplex.core.visibility.VisibilityManager;
|
||||
import mineplex.minecraft.game.core.combat.CombatManager;
|
||||
import mineplex.minecraft.game.core.condition.ConditionManager;
|
||||
import mineplex.minecraft.game.core.damage.DamageManager;
|
||||
import net.minecraft.server.v1_8_R3.MinecraftServer;
|
||||
|
||||
/**
|
||||
@ -65,9 +69,6 @@ public class GemHunters extends JavaPlugin
|
||||
|
||||
private static final String WEB_CONFIG = "webServer";
|
||||
|
||||
private CoreClientManager _clientManager;
|
||||
private DonationManager _donationManager;
|
||||
|
||||
@Override
|
||||
public void onEnable()
|
||||
{
|
||||
@ -83,13 +84,13 @@ public class GemHunters extends JavaPlugin
|
||||
CommandCenter.Initialize(this);
|
||||
|
||||
// Client Manager
|
||||
_clientManager = new CoreClientManager(this, webServerAddress);
|
||||
CoreClientManager clientManager = new CoreClientManager(this, webServerAddress);
|
||||
|
||||
// Donation Manager
|
||||
_donationManager = new DonationManager(this, _clientManager, webServerAddress);
|
||||
DonationManager donationManager = require(DonationManager.class);
|
||||
|
||||
// Command Centre
|
||||
CommandCenter.Instance.setClientManager(_clientManager);
|
||||
CommandCenter.Instance.setClientManager(clientManager);
|
||||
|
||||
// Timings
|
||||
require(TimingsFix.class);
|
||||
@ -110,40 +111,43 @@ public class GemHunters extends JavaPlugin
|
||||
Give.Initialize(this);
|
||||
|
||||
// Server config
|
||||
new ServerConfiguration(this, _clientManager);
|
||||
new ServerConfiguration(this, clientManager);
|
||||
|
||||
// Teleport
|
||||
new Teleport(this, _clientManager);
|
||||
new Teleport(this, clientManager);
|
||||
|
||||
// Packets
|
||||
PacketHandler packetHandler = require(PacketHandler.class);
|
||||
|
||||
// Vanish
|
||||
IncognitoManager incognito = new IncognitoManager(this, _clientManager, packetHandler);
|
||||
IncognitoManager incognito = new IncognitoManager(this, clientManager, packetHandler);
|
||||
|
||||
// Preferences
|
||||
PreferencesManager preferenceManager = new PreferencesManager(this, incognito, _clientManager);
|
||||
PreferencesManager preferenceManager = new PreferencesManager(this, incognito, clientManager);
|
||||
|
||||
// Why do these depend on each other... :(
|
||||
incognito.setPreferencesManager(preferenceManager);
|
||||
|
||||
// Server Status
|
||||
ServerStatusManager serverStatusManager = new ServerStatusManager(this, _clientManager, new LagMeter(this, _clientManager));
|
||||
ServerStatusManager serverStatusManager = new ServerStatusManager(this, clientManager, new LagMeter(this, clientManager));
|
||||
|
||||
// Portal
|
||||
Portal portal = new Portal(this, _clientManager, serverStatusManager.getCurrentServerName());
|
||||
Portal portal = new Portal(this, clientManager, serverStatusManager.getCurrentServerName());
|
||||
|
||||
// File Updater
|
||||
new FileUpdater(this, portal, serverStatusManager.getCurrentServerName(), serverStatusManager.getRegion());
|
||||
|
||||
// Punish
|
||||
Punish punish = new Punish(this, webServerAddress, _clientManager);
|
||||
Punish punish = new Punish(this, webServerAddress, clientManager);
|
||||
|
||||
// Disguises
|
||||
require(DisguiseManager.class);
|
||||
DisguiseManager disguiseManager = require(DisguiseManager.class);
|
||||
|
||||
// Creatures
|
||||
new Creature(this);
|
||||
Creature creature = new Creature(this);
|
||||
|
||||
// The old classic Damage Manager
|
||||
new DamageManager(this, new CombatManager(this), new NpcManager(this, creature), disguiseManager, new ConditionManager(this));
|
||||
|
||||
// GWEN
|
||||
AntiHack antiHack = require(AntiHack.class);
|
||||
@ -154,20 +158,20 @@ public class GemHunters extends JavaPlugin
|
||||
BlockRestore blockRestore = new BlockRestore(this);
|
||||
|
||||
// Ignoring
|
||||
IgnoreManager ignoreManager = new IgnoreManager(this, _clientManager, preferenceManager, portal);
|
||||
IgnoreManager ignoreManager = new IgnoreManager(this, clientManager, preferenceManager, portal);
|
||||
|
||||
// Statistics
|
||||
StatsManager statsManager = new StatsManager(this, _clientManager);
|
||||
StatsManager statsManager = new StatsManager(this, clientManager);
|
||||
|
||||
// Elo
|
||||
EloManager eloManager = new EloManager(this, _clientManager);
|
||||
EloManager eloManager = new EloManager(this, clientManager);
|
||||
|
||||
// Achievements
|
||||
AchievementManager achievementManager = new AchievementManager(statsManager, _clientManager, _donationManager, incognito, eloManager);
|
||||
AchievementManager achievementManager = new AchievementManager(statsManager, clientManager, donationManager, incognito, eloManager);
|
||||
|
||||
// Chat/Messaging
|
||||
Chat chat = new Chat(this, incognito, _clientManager, preferenceManager, achievementManager, serverStatusManager.getCurrentServerName());
|
||||
new MessageManager(this, incognito, _clientManager, preferenceManager, ignoreManager, punish, new FriendManager(this, _clientManager, preferenceManager, portal), chat);
|
||||
Chat chat = new Chat(this, incognito, clientManager, preferenceManager, achievementManager, serverStatusManager.getCurrentServerName());
|
||||
new MessageManager(this, incognito, clientManager, preferenceManager, ignoreManager, punish, new FriendManager(this, clientManager, preferenceManager, portal), chat);
|
||||
|
||||
// Fixes
|
||||
new MemoryFix(this);
|
||||
@ -177,12 +181,12 @@ public class GemHunters extends JavaPlugin
|
||||
new Explosion(this, blockRestore);
|
||||
|
||||
// Inventories
|
||||
new InventoryManager(this, _clientManager);
|
||||
new InventoryManager(this, clientManager);
|
||||
|
||||
// Reports
|
||||
SnapshotManager snapshotManager = new SnapshotManager(this, new SnapshotRepository(serverStatusManager.getCurrentServerName(), getLogger()));
|
||||
new SnapshotPlugin(this, snapshotManager, _clientManager);
|
||||
new ReportPlugin(this, new ReportManager(this, snapshotManager, _clientManager, incognito, punish, serverStatusManager.getRegion(), serverStatusManager.getCurrentServerName(), 1));
|
||||
new SnapshotPlugin(this, snapshotManager, clientManager);
|
||||
new ReportPlugin(this, new ReportManager(this, snapshotManager, clientManager, incognito, punish, serverStatusManager.getRegion(), serverStatusManager.getCurrentServerName(), 1));
|
||||
|
||||
// Tag fix
|
||||
new CustomTagFix(this, packetHandler);
|
||||
@ -191,7 +195,7 @@ public class GemHunters extends JavaPlugin
|
||||
new HologramManager(this, packetHandler);
|
||||
|
||||
// Now we finally get to enable the Gem Hunters main module
|
||||
new GemHuntersModule(_clientManager);
|
||||
require(GemHuntersModule.class);
|
||||
|
||||
//UpdateEvent!!!
|
||||
new Updater(this);
|
||||
|
@ -2,8 +2,9 @@ package mineplex.gemhunters;
|
||||
|
||||
import mineplex.core.MiniPlugin;
|
||||
import mineplex.core.ReflectivelyCreateMiniPlugin;
|
||||
import mineplex.core.account.CoreClientManager;
|
||||
import mineplex.gemhunters.economy.CashOutModule;
|
||||
import mineplex.gemhunters.loot.LootModule;
|
||||
import mineplex.gemhunters.safezone.SafezoneModule;
|
||||
import mineplex.gemhunters.scoreboard.ScoreboardModule;
|
||||
import mineplex.gemhunters.supplydrop.SupplyDropModule;
|
||||
|
||||
@ -11,13 +12,14 @@ import mineplex.gemhunters.supplydrop.SupplyDropModule;
|
||||
public class GemHuntersModule extends MiniPlugin
|
||||
{
|
||||
|
||||
public GemHuntersModule(CoreClientManager clientManager)
|
||||
public GemHuntersModule()
|
||||
{
|
||||
super("Gem Hunters");
|
||||
|
||||
require(SupplyDropModule.class);
|
||||
require(CashOutModule.class);
|
||||
require(LootModule.class);
|
||||
|
||||
new ScoreboardModule(clientManager);
|
||||
require(SafezoneModule.class);
|
||||
require(ScoreboardModule.class);
|
||||
require(SupplyDropModule.class);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,267 @@
|
||||
package mineplex.gemhunters.economy;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.MiniPlugin;
|
||||
import mineplex.core.ReflectivelyCreateMiniPlugin;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilTextMiddle;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
|
||||
@ReflectivelyCreateMiniPlugin
|
||||
public class CashOutModule extends MiniPlugin
|
||||
{
|
||||
|
||||
private static final DecimalFormat ARMOUR_STAND_FORMAT = new DecimalFormat("0.0");
|
||||
private static final ItemStack CASH_OUT_ITEM = new ItemBuilder(Material.EMERALD).setTitle(C.cGreen + "Cash Out").addLore("", C.cGray + "Click to begin the process to cash out.", C.cGray + "Cashing out saves your current loot.").build();
|
||||
|
||||
private static final int CASH_OUT_COOLDOWN = 10000;
|
||||
private static final int CASH_OUT_MAX_MOVE_DISTANCE_SQUARED = 4;
|
||||
|
||||
private final Map<UUID, CashOutSession> _sessions;
|
||||
|
||||
public CashOutModule()
|
||||
{
|
||||
super("CashOut");
|
||||
|
||||
_sessions = new HashMap<>();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerInteract(PlayerInteractEvent event)
|
||||
{
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
ItemStack itemStack = player.getItemInHand();
|
||||
|
||||
if (itemStack == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!itemStack.isSimilar(CASH_OUT_ITEM))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
attemptCashOut(player);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void itemDrop(PlayerDropItemEvent event)
|
||||
{
|
||||
if (event.getItemDrop().getItemStack().isSimilar(CASH_OUT_ITEM))
|
||||
{
|
||||
event.getPlayer().sendMessage(F.main("Game", "You cannnot drop the" + F.item("Cash Out Item") + "."));
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void inventoryClick(InventoryClickEvent event)
|
||||
{
|
||||
Inventory inv = event.getInventory();
|
||||
ItemStack itemStack = event.getCurrentItem();
|
||||
|
||||
if (inv == null || itemStack == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (itemStack.isSimilar(CASH_OUT_ITEM))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerJoin(PlayerJoinEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
player.getInventory().setItem(8, CASH_OUT_ITEM);
|
||||
}
|
||||
|
||||
// TODO this probably
|
||||
// @EventHandler
|
||||
public void playerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
attemptCashOut(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void update(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<UUID> iterator = _sessions.keySet().iterator();
|
||||
|
||||
while (iterator.hasNext())
|
||||
{
|
||||
UUID key = iterator.next();
|
||||
Player player = UtilPlayer.searchExact(key);
|
||||
CashOutSession session = _sessions.get(key);
|
||||
double current = session.getCurrent();
|
||||
ArmorStand stand = session.getArmourStand();
|
||||
String standName = ARMOUR_STAND_FORMAT.format(current) + " seconds";
|
||||
|
||||
if (player == null)
|
||||
{
|
||||
session.endSession();
|
||||
iterator.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
UtilTextMiddle.display("", UtilTextMiddle.progress((float) (1 - current / session.getMax())), 0, 10, 0, player);
|
||||
stand.setCustomName(standName);
|
||||
session.setCurrent(current - 0.05);
|
||||
|
||||
if (session.getCurrent() <= 0)
|
||||
{
|
||||
session.endSession();
|
||||
iterator.remove();
|
||||
player.sendMessage(C.cGreen + "Imagine you are being sent to the Lobby.");
|
||||
rewardCashOut(player, session);
|
||||
// Portal.getInstance().sendToHub(player, "You cashed out!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void updateMove(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.FAST)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (UUID key : _sessions.keySet())
|
||||
{
|
||||
Player player = UtilPlayer.searchExact(key);
|
||||
CashOutSession session = _sessions.get(key);
|
||||
|
||||
if (session.getLocation().distanceSquared(player.getLocation()) > CASH_OUT_MAX_MOVE_DISTANCE_SQUARED)
|
||||
{
|
||||
cancelCashOut(player, "You moved!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void entityDamage(EntityDamageEvent event)
|
||||
{
|
||||
if (!(event.getEntity() instanceof Player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) event.getEntity();
|
||||
|
||||
if (isCashingOut(player))
|
||||
{
|
||||
cancelCashOut(player, "You took damage!");
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void entityAttack(EntityDamageByEntityEvent event)
|
||||
{
|
||||
if (!(event.getDamager() instanceof Player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) event.getDamager();
|
||||
|
||||
if (isCashingOut(player))
|
||||
{
|
||||
cancelCashOut(player, "You attacked a player!");
|
||||
}
|
||||
}
|
||||
|
||||
public void attemptCashOut(Player player)
|
||||
{
|
||||
UUID key = player.getUniqueId();
|
||||
|
||||
if (_sessions.containsKey(key))
|
||||
{
|
||||
player.sendMessage(F.main("Game", "You are already cashing out."));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use(player, "Cash Out", CASH_OUT_COOLDOWN, true, false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Test time
|
||||
_sessions.put(key, new CashOutSession(player, 10));
|
||||
}
|
||||
|
||||
public void rewardCashOut(Player player, CashOutSession session)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void cancelCashOut(Player player, String message)
|
||||
{
|
||||
UUID key = player.getUniqueId();
|
||||
CashOutSession session = _sessions.get(key);
|
||||
|
||||
player.sendMessage(F.main("Game", message + " Your cash out has been cancelled."));
|
||||
|
||||
session.endSession();
|
||||
_sessions.remove(key);
|
||||
}
|
||||
|
||||
public boolean isCashingOut(Player player)
|
||||
{
|
||||
return getCashOutSession(player) != null;
|
||||
}
|
||||
|
||||
public CashOutSession getCashOutSession(Player player)
|
||||
{
|
||||
for (UUID key : _sessions.keySet())
|
||||
{
|
||||
if (key.equals(player.getUniqueId()))
|
||||
{
|
||||
return _sessions.get(key);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package mineplex.gemhunters.economy;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class CashOutSession
|
||||
{
|
||||
|
||||
private double _current;
|
||||
private double _max;
|
||||
private ArmorStand _stand;
|
||||
private Location _location;
|
||||
|
||||
public CashOutSession(Player player, double max)
|
||||
{
|
||||
_current = max;
|
||||
_max = max;
|
||||
_stand = player.getWorld().spawn(player.getLocation().add(0, 0.5, 0), ArmorStand.class);
|
||||
|
||||
_stand.setCustomName("Cashing Out");
|
||||
_stand.setCustomNameVisible(true);
|
||||
_stand.setVisible(false);
|
||||
_stand.setGravity(false);
|
||||
|
||||
_location = player.getLocation();
|
||||
}
|
||||
|
||||
public void endSession()
|
||||
{
|
||||
_stand.remove();
|
||||
}
|
||||
|
||||
public void setCurrent(double current)
|
||||
{
|
||||
_current = current;
|
||||
}
|
||||
|
||||
public double getCurrent()
|
||||
{
|
||||
return _current;
|
||||
}
|
||||
|
||||
public double getMax()
|
||||
{
|
||||
return _max;
|
||||
}
|
||||
|
||||
public ArmorStand getArmourStand()
|
||||
{
|
||||
return _stand;
|
||||
}
|
||||
|
||||
public Location getLocation()
|
||||
{
|
||||
return _location;
|
||||
}
|
||||
|
||||
}
|
@ -1,12 +1,14 @@
|
||||
package mineplex.gemhunters.loot;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockState;
|
||||
@ -42,6 +44,7 @@ public class LootModule extends MiniPlugin
|
||||
private WorldDataModule _worldData;
|
||||
|
||||
private Map<String, Set<LootItem>> _chestLoot;
|
||||
private List<Location> _opened;
|
||||
|
||||
private LootModule()
|
||||
{
|
||||
@ -50,6 +53,7 @@ public class LootModule extends MiniPlugin
|
||||
_sheets = require(GoogleSheetsManager.class);
|
||||
_worldData = require(WorldDataModule.class);
|
||||
_chestLoot = new HashMap<>();
|
||||
_opened = new ArrayList<>(200);
|
||||
|
||||
updateChestLoot();
|
||||
}
|
||||
@ -103,6 +107,7 @@ public class LootModule extends MiniPlugin
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
ItemBuilder builder = new ItemBuilder(material, data);
|
||||
@ -234,6 +239,23 @@ public class LootModule extends MiniPlugin
|
||||
return index;
|
||||
}
|
||||
|
||||
private LootItem isLootItem(ItemStack itemStack)
|
||||
{
|
||||
for (Set<LootItem> items : _chestLoot.values())
|
||||
{
|
||||
for (LootItem item : items)
|
||||
{
|
||||
if (item.getItemStack().isSimilar(itemStack))
|
||||
{
|
||||
return item;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@EventHandler
|
||||
public void chestOpen(PlayerInteractEvent event)
|
||||
{
|
||||
@ -250,6 +272,12 @@ public class LootModule extends MiniPlugin
|
||||
return;
|
||||
}
|
||||
|
||||
if (_opened.contains(block.getLocation()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_opened.add(block.getLocation());
|
||||
fillChest(player, block);
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,24 @@
|
||||
package mineplex.gemhunters.loot.rewards;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* @author Sam
|
||||
*/
|
||||
public abstract class LootItemReward
|
||||
{
|
||||
|
||||
private long _cashOutDelay;
|
||||
|
||||
public LootItemReward(long cashOutDelay)
|
||||
{
|
||||
_cashOutDelay = cashOutDelay;
|
||||
}
|
||||
|
||||
public abstract void onCollectItem(Player player);
|
||||
|
||||
public abstract void onSucessful(Player player);
|
||||
|
||||
public abstract void onDeath(Player player);
|
||||
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
package mineplex.gemhunters.loot.rewards;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import mineplex.core.account.CoreClient;
|
||||
import mineplex.core.account.CoreClientManager;
|
||||
import mineplex.core.common.Rank;
|
||||
|
||||
public class LootRankReward extends LootItemReward
|
||||
{
|
||||
|
||||
private static final long CASH_OUT_DELAY = TimeUnit.SECONDS.toMillis(60);
|
||||
|
||||
private final CoreClientManager _clientManager;
|
||||
|
||||
public LootRankReward(CoreClientManager clientManager)
|
||||
{
|
||||
super(CASH_OUT_DELAY);
|
||||
|
||||
_clientManager = clientManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCollectItem(Player player)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSucessful(Player player)
|
||||
{
|
||||
CoreClient client = _clientManager.Get(player);
|
||||
Rank rank = client.GetRank();
|
||||
Rank newRank = null;
|
||||
|
||||
// I could have done this so it runs off the order of the Rank enum,
|
||||
// however knowing some people that might get changed so I'm just going
|
||||
// to hard code what you get.
|
||||
|
||||
switch (rank)
|
||||
{
|
||||
case ALL:
|
||||
newRank = Rank.ULTRA;
|
||||
break;
|
||||
case ULTRA:
|
||||
newRank = Rank.HERO;
|
||||
break;
|
||||
case HERO:
|
||||
newRank = Rank.LEGEND;
|
||||
break;
|
||||
case LEGEND:
|
||||
newRank = Rank.TITAN;
|
||||
break;
|
||||
case TITAN:
|
||||
newRank = Rank.ETERNAL;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// A suitable rank could not be found.
|
||||
if (newRank == null)
|
||||
{
|
||||
// TODO implement shard reward.
|
||||
return;
|
||||
}
|
||||
|
||||
client.SetRank(newRank, false);
|
||||
_clientManager.getRepository().saveRank(null, player.getName(), player.getUniqueId(), newRank, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeath(Player player)
|
||||
{
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,174 @@
|
||||
package mineplex.gemhunters.safezone;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
import mineplex.core.MiniPlugin;
|
||||
import mineplex.core.ReflectivelyCreateMiniPlugin;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilTextMiddle;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.gemhunters.world.WorldDataModule;
|
||||
|
||||
@ReflectivelyCreateMiniPlugin
|
||||
public class SafezoneModule extends MiniPlugin
|
||||
{
|
||||
|
||||
private static final String SAFEZONE_DATA_PREFIX = "SAFEZONE";
|
||||
|
||||
private final WorldDataModule _worldData;
|
||||
|
||||
private Map<UUID, String> _currentSafezone;
|
||||
|
||||
private SafezoneModule()
|
||||
{
|
||||
super("Safezone");
|
||||
|
||||
_worldData = require(WorldDataModule.class);
|
||||
|
||||
_currentSafezone = new HashMap<>();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void updateSafeZone(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.FAST)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : Bukkit.getOnlinePlayers())
|
||||
{
|
||||
UUID key = player.getUniqueId();
|
||||
String oldSafezone = _currentSafezone.get(key);
|
||||
boolean isInOldSafezone = isInSafeZone(player.getLocation(), oldSafezone);
|
||||
String newSafezone = getSafezone(player.getLocation());
|
||||
boolean isInNewSafezone = newSafezone != null;
|
||||
|
||||
// null -> not null
|
||||
// not null -> null
|
||||
// null -> null
|
||||
// not null -> not null
|
||||
|
||||
if (!isInOldSafezone && isInNewSafezone)
|
||||
{
|
||||
UtilTextMiddle.display("", C.cYellow + "Entering " + newSafezone, 10, 40, 10, player);
|
||||
_currentSafezone.put(key, newSafezone);
|
||||
}
|
||||
else if (isInOldSafezone && !isInNewSafezone)
|
||||
{
|
||||
UtilTextMiddle.display("", C.cYellow + "Leaving " + newSafezone, 10, 40, 10, player);
|
||||
_currentSafezone.put(key, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerJoin(PlayerJoinEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
// Temporary
|
||||
player.teleport(UtilAlg.Random(_worldData.getDataLocation("LIME")));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
_currentSafezone.remove(player.getUniqueId());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void entityDamage(EntityDamageEvent event)
|
||||
{
|
||||
if (!(event.getEntity() instanceof Player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) event.getEntity();
|
||||
|
||||
if (getSafezone(player.getLocation()) != null)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void entityAttack(EntityDamageByEntityEvent event)
|
||||
{
|
||||
if (!(event.getDamager() instanceof Player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) event.getDamager();
|
||||
|
||||
if (getSafezone(player.getLocation()) != null)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isInSafeZone(Location location, String safezone)
|
||||
{
|
||||
if (safezone == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
List<Location> bounds = _worldData.getCustomLocation(safezone);
|
||||
|
||||
if (bounds == null || bounds.size() != 2)
|
||||
{
|
||||
log("Error regarding safezone bounds for region " + safezone + " there are " + bounds.size() + " points instead of 2. Ignoring this safezone!");
|
||||
return false;
|
||||
}
|
||||
|
||||
return UtilAlg.inBoundingBox(location, bounds.get(0), bounds.get(1));
|
||||
}
|
||||
|
||||
public String getSafezone(Location location)
|
||||
{
|
||||
Map<String, List<Location>> customLocations = _worldData.getAllCustomLocations();
|
||||
|
||||
for (String key : customLocations.keySet())
|
||||
{
|
||||
if (!key.startsWith(SAFEZONE_DATA_PREFIX))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
List<Location> bounds = customLocations.get(key);
|
||||
|
||||
if (bounds.size() != 2)
|
||||
{
|
||||
log("Error regarding safezone bounds for region " + key + " there are " + bounds.size() + " points instead of 2. Ignoring this safezone!");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilAlg.inBoundingBox(location, bounds.get(0), bounds.get(1)))
|
||||
{
|
||||
return key.split(" ")[1];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@ -17,7 +17,12 @@ public class GemHuntersScoreboard extends WritableMineplexScoreboard
|
||||
{
|
||||
writeNewLine();
|
||||
|
||||
write(C.cGreen + "");
|
||||
write(C.cGreenB + "Top Players");
|
||||
|
||||
writeNewLine();
|
||||
|
||||
write(C.cYellowB + "Reset Time");
|
||||
write("0 seconds");
|
||||
|
||||
writeNewLine();
|
||||
}
|
||||
|
@ -26,23 +26,21 @@ public class ScoreboardModule extends MiniPlugin
|
||||
private static final String PRIMARY_COLOUR = C.cGreenB;
|
||||
private static final String SECONDARY_COLOUR = C.cWhiteB;
|
||||
private static final String TRANSITION_COLOUR = C.cDGreenB;
|
||||
private static final String SCOREBOARD_TITLE = " GEM HUNTERS ";
|
||||
|
||||
private CoreClientManager _clientManager;
|
||||
private final CoreClientManager _clientManager;
|
||||
|
||||
private Map<UUID, GemHuntersScoreboard> _scoreboards;
|
||||
private final Map<UUID, GemHuntersScoreboard> _scoreboards;
|
||||
|
||||
private String _title;
|
||||
private int _shineIndex;
|
||||
private boolean _shineDirection = true;
|
||||
|
||||
public ScoreboardModule(CoreClientManager clientManager)
|
||||
public ScoreboardModule()
|
||||
{
|
||||
super("Scoreboard");
|
||||
|
||||
_clientManager = clientManager;
|
||||
_clientManager = require(CoreClientManager.class);
|
||||
_scoreboards = new HashMap<>();
|
||||
|
||||
_title = " GEM HUNTERS ";
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -125,25 +123,31 @@ public class ScoreboardModule extends MiniPlugin
|
||||
{
|
||||
String out = (_shineDirection ? PRIMARY_COLOUR : SECONDARY_COLOUR);
|
||||
|
||||
for (int i = 0; i < _title.length(); i++)
|
||||
for (int i = 0; i < SCOREBOARD_TITLE.length(); i++)
|
||||
{
|
||||
char c = _title.charAt(i);
|
||||
char c = SCOREBOARD_TITLE.charAt(i);
|
||||
|
||||
if (_shineDirection)
|
||||
{
|
||||
if (i == _shineIndex)
|
||||
{
|
||||
out += TRANSITION_COLOUR;
|
||||
|
||||
if (i == _shineIndex + 1)
|
||||
}
|
||||
else if (i == _shineIndex + 1)
|
||||
{
|
||||
out += SECONDARY_COLOUR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (i == _shineIndex)
|
||||
{
|
||||
out += TRANSITION_COLOUR;
|
||||
|
||||
if (i == _shineIndex + 1)
|
||||
}
|
||||
else if (i == _shineIndex + 1)
|
||||
{
|
||||
out += PRIMARY_COLOUR;
|
||||
}
|
||||
}
|
||||
|
||||
out += c;
|
||||
@ -156,7 +160,7 @@ public class ScoreboardModule extends MiniPlugin
|
||||
|
||||
_shineIndex++;
|
||||
|
||||
if (_shineIndex == _title.length() * 2)
|
||||
if (_shineIndex == SCOREBOARD_TITLE.length() * 2)
|
||||
{
|
||||
_shineIndex = 0;
|
||||
_shineDirection = !_shineDirection;
|
||||
|
Loading…
Reference in New Issue
Block a user