Merge branch 'feature/gem-hunters-persistence' into develop
This commit is contained in:
commit
e6c7aa469b
@ -5,6 +5,7 @@ import java.util.Iterator;
|
|||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -76,6 +77,8 @@ public class TextTutorialManager extends MiniPlugin
|
|||||||
other.hidePlayer(event.getPlayer());
|
other.hidePlayer(event.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
((CraftPlayer) event.getPlayer()).getHandle().spectating = true;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -117,6 +120,8 @@ public class TextTutorialManager extends MiniPlugin
|
|||||||
other.showPlayer(player);
|
other.showPlayer(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
((CraftPlayer) player).getHandle().spectating = false;
|
||||||
|
|
||||||
//Gems
|
//Gems
|
||||||
if (tut.getGemReward() > 0)
|
if (tut.getGemReward() > 0)
|
||||||
{
|
{
|
||||||
|
@ -1,20 +1,11 @@
|
|||||||
package mineplex.gemhunters;
|
package mineplex.gemhunters;
|
||||||
|
|
||||||
import net.minecraft.server.v1_8_R3.MinecraftServer;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.World;
|
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
|
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
|
||||||
import org.spigotmc.SpigotConfig;
|
|
||||||
|
|
||||||
import mineplex.core.CustomTagFix;
|
import mineplex.core.CustomTagFix;
|
||||||
import mineplex.core.FoodDupeFix;
|
import mineplex.core.FoodDupeFix;
|
||||||
import mineplex.core.TimingsFix;
|
import mineplex.core.TimingsFix;
|
||||||
import mineplex.core.account.CoreClientManager;
|
import mineplex.core.account.CoreClientManager;
|
||||||
import mineplex.core.achievement.AchievementManager;
|
import mineplex.core.achievement.AchievementManager;
|
||||||
import mineplex.core.antihack.AntiHack;
|
import mineplex.core.antihack.AntiHack;
|
||||||
import mineplex.core.aprilfools.AprilFoolsManager;
|
|
||||||
import mineplex.core.blockrestore.BlockRestore;
|
import mineplex.core.blockrestore.BlockRestore;
|
||||||
import mineplex.core.boosters.BoosterManager;
|
import mineplex.core.boosters.BoosterManager;
|
||||||
import mineplex.core.chat.Chat;
|
import mineplex.core.chat.Chat;
|
||||||
@ -62,7 +53,9 @@ import mineplex.core.report.ReportPlugin;
|
|||||||
import mineplex.core.serverConfig.ServerConfiguration;
|
import mineplex.core.serverConfig.ServerConfiguration;
|
||||||
import mineplex.core.stats.StatsManager;
|
import mineplex.core.stats.StatsManager;
|
||||||
import mineplex.core.status.ServerStatusManager;
|
import mineplex.core.status.ServerStatusManager;
|
||||||
|
import mineplex.core.task.TaskManager;
|
||||||
import mineplex.core.teleport.Teleport;
|
import mineplex.core.teleport.Teleport;
|
||||||
|
import mineplex.core.texttutorial.TextTutorialManager;
|
||||||
import mineplex.core.thank.ThankManager;
|
import mineplex.core.thank.ThankManager;
|
||||||
import mineplex.core.twofactor.TwoFactorAuth;
|
import mineplex.core.twofactor.TwoFactorAuth;
|
||||||
import mineplex.core.updater.FileUpdater;
|
import mineplex.core.updater.FileUpdater;
|
||||||
@ -75,11 +68,13 @@ import mineplex.gemhunters.death.DeathModule;
|
|||||||
import mineplex.gemhunters.death.quitnpc.QuitNPCModule;
|
import mineplex.gemhunters.death.quitnpc.QuitNPCModule;
|
||||||
import mineplex.gemhunters.economy.CashOutModule;
|
import mineplex.gemhunters.economy.CashOutModule;
|
||||||
import mineplex.gemhunters.economy.EconomyModule;
|
import mineplex.gemhunters.economy.EconomyModule;
|
||||||
|
import mineplex.gemhunters.join.JoinModule;
|
||||||
import mineplex.gemhunters.loot.InventoryModule;
|
import mineplex.gemhunters.loot.InventoryModule;
|
||||||
import mineplex.gemhunters.loot.LootModule;
|
import mineplex.gemhunters.loot.LootModule;
|
||||||
import mineplex.gemhunters.map.ItemMapModule;
|
import mineplex.gemhunters.map.ItemMapModule;
|
||||||
import mineplex.gemhunters.moderation.ModerationModule;
|
import mineplex.gemhunters.moderation.ModerationModule;
|
||||||
import mineplex.gemhunters.mount.MountModule;
|
import mineplex.gemhunters.mount.MountModule;
|
||||||
|
import mineplex.gemhunters.persistence.PersistenceModule;
|
||||||
import mineplex.gemhunters.playerstatus.PlayerStatusModule;
|
import mineplex.gemhunters.playerstatus.PlayerStatusModule;
|
||||||
import mineplex.gemhunters.quest.QuestModule;
|
import mineplex.gemhunters.quest.QuestModule;
|
||||||
import mineplex.gemhunters.safezone.SafezoneModule;
|
import mineplex.gemhunters.safezone.SafezoneModule;
|
||||||
@ -87,6 +82,7 @@ import mineplex.gemhunters.scoreboard.ScoreboardModule;
|
|||||||
import mineplex.gemhunters.shop.ShopModule;
|
import mineplex.gemhunters.shop.ShopModule;
|
||||||
import mineplex.gemhunters.spawn.SpawnModule;
|
import mineplex.gemhunters.spawn.SpawnModule;
|
||||||
import mineplex.gemhunters.supplydrop.SupplyDropModule;
|
import mineplex.gemhunters.supplydrop.SupplyDropModule;
|
||||||
|
import mineplex.gemhunters.tutorial.GemHuntersTutorial;
|
||||||
import mineplex.gemhunters.world.DebugListeners;
|
import mineplex.gemhunters.world.DebugListeners;
|
||||||
import mineplex.gemhunters.world.TimeCycle;
|
import mineplex.gemhunters.world.TimeCycle;
|
||||||
import mineplex.gemhunters.world.UndergroundMobs;
|
import mineplex.gemhunters.world.UndergroundMobs;
|
||||||
@ -95,6 +91,12 @@ import mineplex.gemhunters.worldevent.WorldEventModule;
|
|||||||
import mineplex.minecraft.game.core.combat.CombatManager;
|
import mineplex.minecraft.game.core.combat.CombatManager;
|
||||||
import mineplex.minecraft.game.core.condition.ConditionManager;
|
import mineplex.minecraft.game.core.condition.ConditionManager;
|
||||||
import mineplex.minecraft.game.core.damage.DamageManager;
|
import mineplex.minecraft.game.core.damage.DamageManager;
|
||||||
|
import net.minecraft.server.v1_8_R3.MinecraftServer;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.spigotmc.SpigotConfig;
|
||||||
|
|
||||||
import static mineplex.core.Managers.require;
|
import static mineplex.core.Managers.require;
|
||||||
|
|
||||||
@ -263,8 +265,8 @@ public class GemHunters extends JavaPlugin
|
|||||||
gadgetManager.setGadgetEnabled(false);
|
gadgetManager.setGadgetEnabled(false);
|
||||||
|
|
||||||
// Tutorials
|
// Tutorials
|
||||||
//TextTutorialManager tutorialManager = new TextTutorialManager(this, donationManager, new TaskManager(this, clientManager));
|
TextTutorialManager tutorialManager = new TextTutorialManager(this, donationManager, new TaskManager(this, clientManager));
|
||||||
//tutorialManager.addTutorial(new GemHuntersTutorial());
|
tutorialManager.addTutorial(new GemHuntersTutorial());
|
||||||
|
|
||||||
// Now we finally get to enable the Gem Hunters modules
|
// Now we finally get to enable the Gem Hunters modules
|
||||||
// Though if any other module needs one of these it will be generated in
|
// Though if any other module needs one of these it will be generated in
|
||||||
@ -278,8 +280,10 @@ public class GemHunters extends JavaPlugin
|
|||||||
require(InventoryModule.class);
|
require(InventoryModule.class);
|
||||||
require(LootModule.class);
|
require(LootModule.class);
|
||||||
require(ItemMapModule.class);
|
require(ItemMapModule.class);
|
||||||
|
require(JoinModule.class);
|
||||||
require(ModerationModule.class);
|
require(ModerationModule.class);
|
||||||
require(MountModule.class);
|
require(MountModule.class);
|
||||||
|
require(PersistenceModule.class);
|
||||||
require(PlayerStatusModule.class);
|
require(PlayerStatusModule.class);
|
||||||
require(QuestModule.class);
|
require(QuestModule.class);
|
||||||
require(QuitNPCModule.class);
|
require(QuitNPCModule.class);
|
||||||
@ -297,8 +301,6 @@ public class GemHunters extends JavaPlugin
|
|||||||
new UndergroundMobs(this);
|
new UndergroundMobs(this);
|
||||||
new DebugListeners(this);
|
new DebugListeners(this);
|
||||||
|
|
||||||
AprilFoolsManager.getInstance();
|
|
||||||
|
|
||||||
// UpdateEvent!!!
|
// UpdateEvent!!!
|
||||||
new Updater(this);
|
new Updater(this);
|
||||||
|
|
||||||
|
@ -70,14 +70,6 @@ public class DeathModule extends MiniPlugin
|
|||||||
_toRemove = new HashMap<>();
|
_toRemove = new HashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
|
||||||
public void join(PlayerJoinEvent event)
|
|
||||||
{
|
|
||||||
PlayerCustomRespawnEvent event2 = new PlayerCustomRespawnEvent(event.getPlayer());
|
|
||||||
|
|
||||||
UtilServer.CallEvent(event2);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void death(PlayerDeathEvent event)
|
public void death(PlayerDeathEvent event)
|
||||||
{
|
{
|
||||||
|
@ -12,11 +12,13 @@ public class QuitNPCDespawnEvent extends Event implements Cancellable
|
|||||||
private static final HandlerList HANDLERS = new HandlerList();
|
private static final HandlerList HANDLERS = new HandlerList();
|
||||||
|
|
||||||
private final QuitNPC _npc;
|
private final QuitNPC _npc;
|
||||||
|
private final boolean _pluginRemove;
|
||||||
private boolean _cancel;
|
private boolean _cancel;
|
||||||
|
|
||||||
public QuitNPCDespawnEvent(QuitNPC npc)
|
public QuitNPCDespawnEvent(QuitNPC npc, boolean pluginRemove)
|
||||||
{
|
{
|
||||||
_npc = npc;
|
_npc = npc;
|
||||||
|
_pluginRemove = pluginRemove;
|
||||||
}
|
}
|
||||||
|
|
||||||
public QuitNPC getNpc()
|
public QuitNPC getNpc()
|
||||||
@ -24,6 +26,11 @@ public class QuitNPCDespawnEvent extends Event implements Cancellable
|
|||||||
return _npc;
|
return _npc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isPluginRemove()
|
||||||
|
{
|
||||||
|
return _pluginRemove;
|
||||||
|
}
|
||||||
|
|
||||||
public HandlerList getHandlers()
|
public HandlerList getHandlers()
|
||||||
{
|
{
|
||||||
return HANDLERS;
|
return HANDLERS;
|
||||||
|
@ -50,15 +50,8 @@ public class QuitNPC implements Listener
|
|||||||
private final UUID _uuid;
|
private final UUID _uuid;
|
||||||
private final PlayerInventory _inventory;
|
private final PlayerInventory _inventory;
|
||||||
|
|
||||||
// Unlocked Slots
|
|
||||||
private final int _slotsUnlocked;
|
|
||||||
|
|
||||||
// Gems
|
|
||||||
private final int _gems;
|
private final int _gems;
|
||||||
|
|
||||||
// Quests
|
|
||||||
private final QuestPlayerData _questPlayerData;
|
|
||||||
|
|
||||||
public QuitNPC(QuitNPCModule npc, Player player, long quitMills)
|
public QuitNPC(QuitNPCModule npc, Player player, long quitMills)
|
||||||
{
|
{
|
||||||
// Managers
|
// Managers
|
||||||
@ -91,50 +84,14 @@ public class QuitNPC implements Listener
|
|||||||
_name = player.getName();
|
_name = player.getName();
|
||||||
_uuid = player.getUniqueId();
|
_uuid = player.getUniqueId();
|
||||||
_inventory = player.getInventory();
|
_inventory = player.getInventory();
|
||||||
|
|
||||||
// Unlocked Slots
|
|
||||||
_slotsUnlocked = Managers.get(InventoryModule.class).getSlotsUnlocked(player);
|
|
||||||
|
|
||||||
// Gems
|
|
||||||
_gems = Managers.get(EconomyModule.class).Get(player);
|
_gems = Managers.get(EconomyModule.class).Get(player);
|
||||||
|
|
||||||
// Quests
|
|
||||||
_questPlayerData = Managers.get(QuestModule.class).Get(player);
|
|
||||||
|
|
||||||
UtilServer.RegisterEvents(this);
|
UtilServer.RegisterEvents(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void restore(Player player)
|
public void despawn(boolean pluginRemove)
|
||||||
{
|
{
|
||||||
// Player
|
QuitNPCDespawnEvent event = new QuitNPCDespawnEvent(this, pluginRemove);
|
||||||
player.getInventory().clear();
|
|
||||||
player.teleport(_entity.getLocation());
|
|
||||||
player.setHealth(_entity.getHealth());
|
|
||||||
|
|
||||||
// Inventory
|
|
||||||
int i = 0;
|
|
||||||
for (ItemStack itemStack : _inventory.getContents())
|
|
||||||
{
|
|
||||||
player.getInventory().setItem(i++, itemStack);
|
|
||||||
}
|
|
||||||
|
|
||||||
player.getInventory().setArmorContents(_inventory.getArmorContents());
|
|
||||||
|
|
||||||
// Unlocked Slots
|
|
||||||
Managers.get(InventoryModule.class).setSlotsUnlocked(player, _slotsUnlocked);
|
|
||||||
|
|
||||||
// Gems
|
|
||||||
// Subtract GEM_START_COST (100 by default) because EconomyModule adds
|
|
||||||
// this value on join regardless if they have an NPC.
|
|
||||||
Managers.get(EconomyModule.class).setStore(player, _gems - EconomyModule.GEM_START_COST);
|
|
||||||
|
|
||||||
// Quests
|
|
||||||
Managers.require(QuestModule.class).setPlayerData(player, _questPlayerData);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void despawn()
|
|
||||||
{
|
|
||||||
QuitNPCDespawnEvent event = new QuitNPCDespawnEvent(this);
|
|
||||||
|
|
||||||
UtilServer.CallEvent(event);
|
UtilServer.CallEvent(event);
|
||||||
|
|
||||||
@ -185,7 +142,7 @@ public class QuitNPC implements Listener
|
|||||||
|
|
||||||
if (UtilTime.elapsed(_start, _quitMills))
|
if (UtilTime.elapsed(_start, _quitMills))
|
||||||
{
|
{
|
||||||
despawn();
|
despawn(true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -212,7 +169,7 @@ public class QuitNPC implements Listener
|
|||||||
event.getDrops().clear();
|
event.getDrops().clear();
|
||||||
_entity.setHealth(_entity.getMaxHealth());
|
_entity.setHealth(_entity.getMaxHealth());
|
||||||
dropItems();
|
dropItems();
|
||||||
despawn();
|
despawn(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -226,6 +183,11 @@ public class QuitNPC implements Listener
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getName()
|
||||||
|
{
|
||||||
|
return _name;
|
||||||
|
}
|
||||||
|
|
||||||
public UUID getUniqueId()
|
public UUID getUniqueId()
|
||||||
{
|
{
|
||||||
return _uuid;
|
return _uuid;
|
||||||
|
@ -7,6 +7,8 @@ import java.util.Set;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import mineplex.core.common.util.UtilPlayer;
|
||||||
|
import mineplex.gemhunters.economy.CashOutModule;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -29,21 +31,19 @@ public class QuitNPCModule extends MiniPlugin
|
|||||||
|
|
||||||
private static final long LOG_OUT_TIME = TimeUnit.SECONDS.toMillis(60);
|
private static final long LOG_OUT_TIME = TimeUnit.SECONDS.toMillis(60);
|
||||||
|
|
||||||
private final TextTutorialManager _tutorial;
|
private final CashOutModule _cashOut;
|
||||||
|
|
||||||
private final Map<UUID, QuitNPC> _npcs;
|
private final Map<UUID, QuitNPC> _npcs;
|
||||||
private final Map<UUID, String> _killedBy;
|
private final Map<UUID, String> _killedBy;
|
||||||
private final Set<UUID> _aboutToCashOut;
|
|
||||||
|
|
||||||
private QuitNPCModule()
|
private QuitNPCModule()
|
||||||
{
|
{
|
||||||
super("Quit NPC");
|
super("Quit NPC");
|
||||||
|
|
||||||
_tutorial = require(TextTutorialManager.class);
|
_cashOut = require(CashOutModule.class);
|
||||||
|
|
||||||
_npcs = new HashMap<>();
|
_npcs = new HashMap<>();
|
||||||
_killedBy = new HashMap<>();
|
_killedBy = new HashMap<>();
|
||||||
_aboutToCashOut = new HashSet<>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void spawnNpc(Player player)
|
public void spawnNpc(Player player)
|
||||||
@ -56,10 +56,9 @@ public class QuitNPCModule extends MiniPlugin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_aboutToCashOut.contains(player.getUniqueId()))
|
if (_cashOut.isAboutToCashOut(player))
|
||||||
{
|
{
|
||||||
log(player.getName() + " was cashing out");
|
log(player.getName() + " was cashing out");
|
||||||
_aboutToCashOut.remove(player.getUniqueId());
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,20 +76,12 @@ public class QuitNPCModule extends MiniPlugin
|
|||||||
_npcs.put(player.getUniqueId(), new QuitNPC(this, player, LOG_OUT_TIME));
|
_npcs.put(player.getUniqueId(), new QuitNPC(this, player, LOG_OUT_TIME));
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void cashOutComplete(PlayerCashOutCompleteEvent event)
|
|
||||||
{
|
|
||||||
UUID key = event.getPlayer().getUniqueId();
|
|
||||||
|
|
||||||
_aboutToCashOut.add(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void playerQuit(PlayerQuitEvent event)
|
public void playerQuit(PlayerQuitEvent event)
|
||||||
{
|
{
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
if (_tutorial.isInTutorial(player))
|
if (UtilPlayer.isSpectator(player))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -101,7 +92,7 @@ public class QuitNPCModule extends MiniPlugin
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void npcDespawn(QuitNPCDespawnEvent event)
|
public void npcDespawn(QuitNPCDespawnEvent event)
|
||||||
{
|
{
|
||||||
log("Despawning npc for " + _npcs.remove(event.getNpc().getUniqueId()).getUniqueId());
|
log("Despawning npc for " + _npcs.remove(event.getNpc().getUniqueId()).getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
@ -1,32 +1,10 @@
|
|||||||
package mineplex.gemhunters.economy;
|
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.EventPriority;
|
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
|
||||||
import org.bukkit.event.entity.ItemSpawnEvent;
|
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
import mineplex.core.MiniPlugin;
|
import mineplex.core.MiniPlugin;
|
||||||
import mineplex.core.ReflectivelyCreateMiniPlugin;
|
import mineplex.core.ReflectivelyCreateMiniPlugin;
|
||||||
import mineplex.core.common.currency.GlobalCurrency;
|
import mineplex.core.common.currency.GlobalCurrency;
|
||||||
import mineplex.core.common.util.C;
|
import mineplex.core.common.util.*;
|
||||||
import mineplex.core.common.util.F;
|
|
||||||
import mineplex.core.common.util.UtilEvent;
|
|
||||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||||
import mineplex.core.common.util.UtilPlayer;
|
|
||||||
import mineplex.core.common.util.UtilServer;
|
|
||||||
import mineplex.core.common.util.UtilTextMiddle;
|
|
||||||
import mineplex.core.donation.DonationManager;
|
import mineplex.core.donation.DonationManager;
|
||||||
import mineplex.core.itemstack.ItemBuilder;
|
import mineplex.core.itemstack.ItemBuilder;
|
||||||
import mineplex.core.portal.GenericServer;
|
import mineplex.core.portal.GenericServer;
|
||||||
@ -38,13 +16,27 @@ import mineplex.core.updater.event.UpdateEvent;
|
|||||||
import mineplex.gemhunters.economy.command.CashOutItemCommand;
|
import mineplex.gemhunters.economy.command.CashOutItemCommand;
|
||||||
import mineplex.gemhunters.economy.event.PlayerCashOutCompleteEvent;
|
import mineplex.gemhunters.economy.event.PlayerCashOutCompleteEvent;
|
||||||
import mineplex.gemhunters.spawn.event.PlayerTeleportIntoMapEvent;
|
import mineplex.gemhunters.spawn.event.PlayerTeleportIntoMapEvent;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.ArmorStand;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
|
import org.bukkit.event.entity.ItemSpawnEvent;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
@ReflectivelyCreateMiniPlugin
|
@ReflectivelyCreateMiniPlugin
|
||||||
public class CashOutModule extends MiniPlugin
|
public class CashOutModule extends MiniPlugin
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final DecimalFormat ARMOUR_STAND_FORMAT = new DecimalFormat("0.0");
|
private static final DecimalFormat ARMOUR_STAND_FORMAT = new DecimalFormat("0.0");
|
||||||
public 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 gives you your gems, shards, ", C.cGray + "chests and any particles you have.", C.cGray + "However you will lose all your current loot!").build();
|
public static final ItemStack CASH_OUT_ITEM = new ItemBuilder(Material.EMERALD).setTitle(C.cGreen + "Cash Out").addLore("", "Click to begin the process to cash out.", "Cashing out gives you your gems, shards,", "chests and any particles you have.", "However you will lose all your current loot!").build();
|
||||||
|
|
||||||
private static final int CASH_OUT_SECONDS = 10;
|
private static final int CASH_OUT_SECONDS = 10;
|
||||||
private static final int CASH_OUT_COOLDOWN = 10000;
|
private static final int CASH_OUT_COOLDOWN = 10000;
|
||||||
@ -53,6 +45,7 @@ public class CashOutModule extends MiniPlugin
|
|||||||
private final DonationManager _donation;
|
private final DonationManager _donation;
|
||||||
|
|
||||||
private final Map<UUID, CashOutSession> _sessions;
|
private final Map<UUID, CashOutSession> _sessions;
|
||||||
|
private final Set<UUID> _aboutToCashOut;
|
||||||
|
|
||||||
public CashOutModule()
|
public CashOutModule()
|
||||||
{
|
{
|
||||||
@ -61,6 +54,7 @@ public class CashOutModule extends MiniPlugin
|
|||||||
_donation = require(DonationManager.class);
|
_donation = require(DonationManager.class);
|
||||||
|
|
||||||
_sessions = new HashMap<>();
|
_sessions = new HashMap<>();
|
||||||
|
_aboutToCashOut = new HashSet<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -72,7 +66,7 @@ public class CashOutModule extends MiniPlugin
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void teleportIn(PlayerTeleportIntoMapEvent event)
|
public void teleportIn(PlayerTeleportIntoMapEvent event)
|
||||||
{
|
{
|
||||||
if (event.isCancelled())
|
if (event.isCancelled() || event.getPlayer().getInventory().contains(CASH_OUT_ITEM))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -126,7 +120,7 @@ public class CashOutModule extends MiniPlugin
|
|||||||
while (iterator.hasNext())
|
while (iterator.hasNext())
|
||||||
{
|
{
|
||||||
UUID key = iterator.next();
|
UUID key = iterator.next();
|
||||||
Player player = UtilPlayer.searchExact(key);
|
final Player player = UtilPlayer.searchExact(key);
|
||||||
CashOutSession session = _sessions.get(key);
|
CashOutSession session = _sessions.get(key);
|
||||||
double current = session.getCurrent();
|
double current = session.getCurrent();
|
||||||
ArmorStand stand = session.getArmourStand();
|
ArmorStand stand = session.getArmourStand();
|
||||||
@ -149,11 +143,29 @@ public class CashOutModule extends MiniPlugin
|
|||||||
|
|
||||||
UtilServer.CallEvent(completeEvent);
|
UtilServer.CallEvent(completeEvent);
|
||||||
|
|
||||||
|
_aboutToCashOut.add(player.getUniqueId());
|
||||||
|
|
||||||
_donation.rewardCurrencyUntilSuccess(GlobalCurrency.GEM, player, "Earned", completeEvent.getGems());
|
_donation.rewardCurrencyUntilSuccess(GlobalCurrency.GEM, player, "Earned", completeEvent.getGems());
|
||||||
|
|
||||||
session.endSession();
|
session.endSession();
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
|
|
||||||
|
if (UtilServer.isTestServer())
|
||||||
|
{
|
||||||
|
kickPlayer(player);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
Portal.getInstance().sendPlayerToGenericServer(player, GenericServer.BETA_HUB, Intent.FORCE_TRANSFER);
|
Portal.getInstance().sendPlayerToGenericServer(player, GenericServer.BETA_HUB, Intent.FORCE_TRANSFER);
|
||||||
|
|
||||||
|
runSyncLater(() ->
|
||||||
|
{
|
||||||
|
if (player.isOnline())
|
||||||
|
{
|
||||||
|
kickPlayer(player);
|
||||||
|
}
|
||||||
|
}, 20);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -220,6 +232,12 @@ public class CashOutModule extends MiniPlugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
|
public void playerQuit(PlayerQuitEvent event)
|
||||||
|
{
|
||||||
|
_aboutToCashOut.remove(event.getPlayer().getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
public void attemptCashOut(Player player)
|
public void attemptCashOut(Player player)
|
||||||
{
|
{
|
||||||
UUID key = player.getUniqueId();
|
UUID key = player.getUniqueId();
|
||||||
@ -253,6 +271,11 @@ public class CashOutModule extends MiniPlugin
|
|||||||
return getCashOutSession(player) != null;
|
return getCashOutSession(player) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isAboutToCashOut(Player player)
|
||||||
|
{
|
||||||
|
return _aboutToCashOut.contains(player.getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
public CashOutSession getCashOutSession(Player player)
|
public CashOutSession getCashOutSession(Player player)
|
||||||
{
|
{
|
||||||
for (UUID key : _sessions.keySet())
|
for (UUID key : _sessions.keySet())
|
||||||
@ -266,4 +289,9 @@ public class CashOutModule extends MiniPlugin
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void kickPlayer(Player player)
|
||||||
|
{
|
||||||
|
player.kickPlayer(C.cGreen + "Imagine you are being sent to the lobby.");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -42,16 +42,12 @@ public class EconomyModule extends MiniClientPlugin<Integer>
|
|||||||
addCommand(new GiveGemsCommand(this));
|
addCommand(new GiveGemsCommand(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void respawn(PlayerCustomRespawnEvent event)
|
|
||||||
{
|
|
||||||
addToStore(event.getPlayer(), null, GEM_START_COST);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void teleportIn(PlayerTeleportIntoMapEvent event)
|
public void teleportIn(PlayerTeleportIntoMapEvent event)
|
||||||
{
|
{
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
addToStore(event.getPlayer(), null, GEM_START_COST);
|
||||||
|
|
||||||
Donor donor = _donation.Get(event.getPlayer());
|
Donor donor = _donation.Get(event.getPlayer());
|
||||||
|
|
||||||
if (donor.getBalance(GlobalCurrency.GEM) >= GEM_START_COST)
|
if (donor.getBalance(GlobalCurrency.GEM) >= GEM_START_COST)
|
||||||
@ -68,7 +64,7 @@ public class EconomyModule extends MiniClientPlugin<Integer>
|
|||||||
|
|
||||||
int oldGems = getGems(player);
|
int oldGems = getGems(player);
|
||||||
|
|
||||||
if (killer instanceof Player)
|
if (killer != null)
|
||||||
{
|
{
|
||||||
Player killerPlayer = (Player) killer;
|
Player killerPlayer = (Player) killer;
|
||||||
int newGems = (int) (oldGems * GEM_KILL_FACTOR);
|
int newGems = (int) (oldGems * GEM_KILL_FACTOR);
|
||||||
|
@ -0,0 +1,89 @@
|
|||||||
|
package mineplex.gemhunters.join;
|
||||||
|
|
||||||
|
import mineplex.core.MiniPlugin;
|
||||||
|
import mineplex.core.ReflectivelyCreateMiniPlugin;
|
||||||
|
import mineplex.core.account.CoreClient;
|
||||||
|
import mineplex.core.account.CoreClientManager;
|
||||||
|
import mineplex.core.inventory.InventoryManager;
|
||||||
|
import mineplex.gemhunters.death.quitnpc.QuitNPC;
|
||||||
|
import mineplex.gemhunters.death.quitnpc.QuitNPCModule;
|
||||||
|
import mineplex.gemhunters.economy.EconomyModule;
|
||||||
|
import mineplex.gemhunters.loot.InventoryModule;
|
||||||
|
import mineplex.gemhunters.map.ItemMapModule;
|
||||||
|
import mineplex.gemhunters.persistence.PersistenceData;
|
||||||
|
import mineplex.gemhunters.persistence.PersistenceModule;
|
||||||
|
import mineplex.gemhunters.persistence.PersistenceRepository;
|
||||||
|
import mineplex.gemhunters.quest.QuestModule;
|
||||||
|
import mineplex.gemhunters.spawn.SpawnModule;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
@ReflectivelyCreateMiniPlugin
|
||||||
|
public class JoinModule extends MiniPlugin
|
||||||
|
{
|
||||||
|
|
||||||
|
private final CoreClientManager _client;
|
||||||
|
private final EconomyModule _economy;
|
||||||
|
private final QuestModule _quest;
|
||||||
|
private final PersistenceModule _persistence;
|
||||||
|
private final QuitNPCModule _npc;
|
||||||
|
private final InventoryModule _inventory;
|
||||||
|
private final SpawnModule _spawn;
|
||||||
|
|
||||||
|
private JoinModule()
|
||||||
|
{
|
||||||
|
super("Join");
|
||||||
|
|
||||||
|
_client = require(CoreClientManager.class);
|
||||||
|
_economy = require(EconomyModule.class);
|
||||||
|
_quest = require(QuestModule.class);
|
||||||
|
_persistence = require(PersistenceModule.class);
|
||||||
|
_npc = require(QuitNPCModule.class);
|
||||||
|
_inventory = require(InventoryModule.class);
|
||||||
|
_spawn = require(SpawnModule.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void playerJoin(PlayerJoinEvent event)
|
||||||
|
{
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
CoreClient client = _client.Get(player);
|
||||||
|
PersistenceRepository repository = _persistence.getRepository();
|
||||||
|
Consumer<PersistenceData> response = data ->
|
||||||
|
runSync(() -> {
|
||||||
|
_economy.setStore(player, data.getGems());
|
||||||
|
_quest.setPlayerData(player, data.getQuestData());
|
||||||
|
player.teleport(data.getLocation());
|
||||||
|
player.setHealth(data.getHealth());
|
||||||
|
player.setMaxHealth(data.getMaxHealth());
|
||||||
|
player.setFoodLevel(data.getHunger());
|
||||||
|
player.getInventory().addItem(data.getItems());
|
||||||
|
player.getInventory().setArmorContents(data.getArmour());
|
||||||
|
_inventory.unlockSlots(player, data.getSlots(), false);
|
||||||
|
});
|
||||||
|
|
||||||
|
player.getInventory().clear();
|
||||||
|
|
||||||
|
if (_npc.hasNPC(player))
|
||||||
|
{
|
||||||
|
QuitNPC npc = _npc.getNPC(player);
|
||||||
|
npc.despawn(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
_inventory.resetSlots(player);
|
||||||
|
|
||||||
|
runAsync(() ->
|
||||||
|
{
|
||||||
|
repository.getPersistenceData(response, client);
|
||||||
|
|
||||||
|
if (!repository.exists(client))
|
||||||
|
{
|
||||||
|
_spawn.teleportToSpawn(player);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -10,6 +10,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
@ -48,15 +49,7 @@ public class InventoryModule extends MiniPlugin
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void respawn(PlayerCustomRespawnEvent event)
|
public void respawn(PlayerCustomRespawnEvent event)
|
||||||
{
|
{
|
||||||
Player player = event.getPlayer();
|
resetSlots(event.getPlayer());
|
||||||
Inventory inv = player.getInventory();
|
|
||||||
|
|
||||||
_slotsUnlocked.put(player.getUniqueId(), 0);
|
|
||||||
|
|
||||||
for (int i = START_INDEX; i < inv.getSize(); i++)
|
|
||||||
{
|
|
||||||
inv.setItem(i, LOCKED);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -111,6 +104,13 @@ public class InventoryModule extends MiniPlugin
|
|||||||
|
|
||||||
public void unlockSlots(Player player, int slots)
|
public void unlockSlots(Player player, int slots)
|
||||||
{
|
{
|
||||||
|
unlockSlots(player, slots, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unlockSlots(Player player, int slots, boolean inform)
|
||||||
|
{
|
||||||
|
_slotsUnlocked.putIfAbsent(player.getUniqueId(), 0);
|
||||||
|
|
||||||
Inventory inv = player.getInventory();
|
Inventory inv = player.getInventory();
|
||||||
UUID key = player.getUniqueId();
|
UUID key = player.getUniqueId();
|
||||||
|
|
||||||
@ -123,16 +123,26 @@ public class InventoryModule extends MiniPlugin
|
|||||||
inv.setItem(i, null);
|
inv.setItem(i, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (inform)
|
||||||
|
{
|
||||||
player.sendMessage(F.main(_moduleName, "You unlocked an additional " + F.count(String.valueOf(delta)) + " slots of your inventory!"));
|
player.sendMessage(F.main(_moduleName, "You unlocked an additional " + F.count(String.valueOf(delta)) + " slots of your inventory!"));
|
||||||
|
}
|
||||||
_slotsUnlocked.put(key, _slotsUnlocked.get(key) + slots);
|
_slotsUnlocked.put(key, _slotsUnlocked.get(key) + slots);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSlotsUnlocked(Player player, int amount)
|
public void resetSlots(Player player)
|
||||||
{
|
{
|
||||||
_slotsUnlocked.put(player.getUniqueId(), amount);
|
Inventory inv = player.getInventory();
|
||||||
|
|
||||||
|
_slotsUnlocked.put(player.getUniqueId(), 0);
|
||||||
|
|
||||||
|
for (int i = START_INDEX; i < inv.getSize(); i++)
|
||||||
|
{
|
||||||
|
inv.setItem(i, LOCKED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSlotsUnlocked(Player player)
|
public int getSlots(Player player)
|
||||||
{
|
{
|
||||||
return _slotsUnlocked.get(player.getUniqueId());
|
return _slotsUnlocked.get(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
@ -535,10 +535,7 @@ public class LootModule extends MiniPlugin
|
|||||||
String key = metadataSplit[0];
|
String key = metadataSplit[0];
|
||||||
String[] values = new String[metadataSplit.length - 1];
|
String[] values = new String[metadataSplit.length - 1];
|
||||||
|
|
||||||
for (int i = 1; i < metadataSplit.length; i++)
|
System.arraycopy(metadataSplit, 1, values, 0, metadataSplit.length - 1);
|
||||||
{
|
|
||||||
values[i - 1] = metadataSplit[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (key)
|
switch (key)
|
||||||
{
|
{
|
||||||
@ -568,8 +565,11 @@ public class LootModule extends MiniPlugin
|
|||||||
_itemRewards.add(reward);
|
_itemRewards.add(reward);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (reward != null)
|
||||||
|
{
|
||||||
reward.collectItem(player);
|
reward.collectItem(player);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void addItemReward(LootItemReward reward)
|
public void addItemReward(LootItemReward reward)
|
||||||
{
|
{
|
||||||
|
@ -29,6 +29,7 @@ import org.bukkit.event.entity.ItemSpawnEvent;
|
|||||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.event.player.PlayerItemHeldEvent;
|
import org.bukkit.event.player.PlayerItemHeldEvent;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.event.world.ChunkLoadEvent;
|
import org.bukkit.event.world.ChunkLoadEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
@ -662,12 +663,21 @@ public class ItemMapModule extends MiniPlugin
|
|||||||
showZoom(player, info);
|
showZoom(player, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
|
public void playerJoin(PlayerJoinEvent event)
|
||||||
|
{
|
||||||
|
handleGive(event.getPlayer());
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void teleportIn(PlayerCustomRespawnEvent event)
|
public void respawn(PlayerCustomRespawnEvent event)
|
||||||
|
{
|
||||||
|
handleGive(event.getPlayer());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handleGive(Player player)
|
||||||
{
|
{
|
||||||
MapInfo info = new MapInfo(_mapId);
|
MapInfo info = new MapInfo(_mapId);
|
||||||
|
|
||||||
Player player = event.getPlayer();
|
|
||||||
Location loc = player.getLocation();
|
Location loc = player.getLocation();
|
||||||
|
|
||||||
int zoom = getZoom(1);
|
int zoom = getZoom(1);
|
||||||
|
@ -0,0 +1,78 @@
|
|||||||
|
package mineplex.gemhunters.persistence;
|
||||||
|
|
||||||
|
import mineplex.gemhunters.quest.QuestPlayerData;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class PersistenceData
|
||||||
|
{
|
||||||
|
|
||||||
|
private final int _gems;
|
||||||
|
private final Location _location;
|
||||||
|
private final QuestPlayerData _questData;
|
||||||
|
private final int _health;
|
||||||
|
private final int _maxHealth;
|
||||||
|
private final int _hunger;
|
||||||
|
private final int _slots;
|
||||||
|
private final ItemStack[] _items;
|
||||||
|
private final ItemStack[] _armour;
|
||||||
|
|
||||||
|
public PersistenceData(int gems, Location location, QuestPlayerData questData, int health, int maxHealth, int hunger, int slots, ItemStack[] items, ItemStack[] armour)
|
||||||
|
{
|
||||||
|
_gems = gems;
|
||||||
|
_location = location;
|
||||||
|
_questData = questData;
|
||||||
|
_health = health;
|
||||||
|
_maxHealth = maxHealth;
|
||||||
|
_hunger = hunger;
|
||||||
|
_items = items;
|
||||||
|
_slots = slots;
|
||||||
|
_armour = armour;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getGems()
|
||||||
|
{
|
||||||
|
return _gems;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Location getLocation()
|
||||||
|
{
|
||||||
|
return _location;
|
||||||
|
}
|
||||||
|
|
||||||
|
public QuestPlayerData getQuestData()
|
||||||
|
{
|
||||||
|
return _questData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getHealth()
|
||||||
|
{
|
||||||
|
return _health;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMaxHealth()
|
||||||
|
{
|
||||||
|
return _maxHealth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getHunger()
|
||||||
|
{
|
||||||
|
return _hunger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSlots()
|
||||||
|
{
|
||||||
|
return _slots;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack[] getItems()
|
||||||
|
{
|
||||||
|
return _items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack[] getArmour()
|
||||||
|
{
|
||||||
|
return _armour;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,139 @@
|
|||||||
|
package mineplex.gemhunters.persistence;
|
||||||
|
|
||||||
|
import mineplex.core.MiniPlugin;
|
||||||
|
import mineplex.core.ReflectivelyCreateMiniPlugin;
|
||||||
|
import mineplex.core.account.CoreClient;
|
||||||
|
import mineplex.core.account.CoreClientManager;
|
||||||
|
import mineplex.gemhunters.death.event.QuitNPCDespawnEvent;
|
||||||
|
import mineplex.gemhunters.economy.CashOutModule;
|
||||||
|
import mineplex.gemhunters.economy.EconomyModule;
|
||||||
|
import mineplex.gemhunters.loot.InventoryModule;
|
||||||
|
import mineplex.gemhunters.quest.QuestModule;
|
||||||
|
import mineplex.gemhunters.quest.QuestPlayerData;
|
||||||
|
import net.minecraft.server.v1_8_R3.EntityItemFrame;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
|
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
|
||||||
|
import org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@ReflectivelyCreateMiniPlugin
|
||||||
|
public class PersistenceModule extends MiniPlugin
|
||||||
|
{
|
||||||
|
|
||||||
|
private final CoreClientManager _client;
|
||||||
|
private final CashOutModule _cashOut;
|
||||||
|
private final EconomyModule _economy;
|
||||||
|
private final QuestModule _quest;
|
||||||
|
private final InventoryModule _inventory;
|
||||||
|
|
||||||
|
private final PersistenceRepository _repository;
|
||||||
|
|
||||||
|
private final List<String> _denyJoining;
|
||||||
|
|
||||||
|
public PersistenceModule()
|
||||||
|
{
|
||||||
|
super("Persistence");
|
||||||
|
|
||||||
|
_client = require(CoreClientManager.class);
|
||||||
|
_cashOut = require(CashOutModule.class);
|
||||||
|
_quest = require(QuestModule.class);
|
||||||
|
_economy = require(EconomyModule.class);
|
||||||
|
_inventory = require(InventoryModule.class);
|
||||||
|
|
||||||
|
_repository = new PersistenceRepository();
|
||||||
|
|
||||||
|
_denyJoining = Collections.synchronizedList(new ArrayList<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void preLogin(AsyncPlayerPreLoginEvent event)
|
||||||
|
{
|
||||||
|
if (_denyJoining.contains(event.getName()))
|
||||||
|
{
|
||||||
|
event.disallow(Result.KICK_OTHER, "Please wait a few seconds before connecting again.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
|
public void playerQuit(PlayerQuitEvent event)
|
||||||
|
{
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
CoreClient client = _client.Get(player);
|
||||||
|
|
||||||
|
if (_cashOut.isAboutToCashOut(player))
|
||||||
|
{
|
||||||
|
runAsync(() ->
|
||||||
|
{
|
||||||
|
_denyJoining.add(player.getName());
|
||||||
|
_repository.deletePersistence(client);
|
||||||
|
_denyJoining.remove(player.getName());
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int gems = _economy.Get(player);
|
||||||
|
Location location = player.getLocation();
|
||||||
|
QuestPlayerData quest = _quest.Get(player);
|
||||||
|
int health = (int) player.getHealth();
|
||||||
|
int maxHealth = (int) player.getMaxHealth();
|
||||||
|
int hunger = player.getFoodLevel();
|
||||||
|
int slots = _inventory.getSlots(player);
|
||||||
|
ItemStack[] items = player.getInventory().getContents();
|
||||||
|
ItemStack[] armour = player.getInventory().getArmorContents();
|
||||||
|
|
||||||
|
PersistenceData data = new PersistenceData(gems, location, quest, health, maxHealth, hunger, slots, items, armour);
|
||||||
|
|
||||||
|
runAsync(() ->
|
||||||
|
{
|
||||||
|
_denyJoining.add(player.getName());
|
||||||
|
_repository.savePersistence(client, data);
|
||||||
|
_denyJoining.remove(player.getName());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
|
public void playerDeath(PlayerDeathEvent event)
|
||||||
|
{
|
||||||
|
Player player = event.getEntity();
|
||||||
|
CoreClient client = _client.Get(player);
|
||||||
|
|
||||||
|
runAsync(() ->
|
||||||
|
{
|
||||||
|
_denyJoining.add(player.getName());
|
||||||
|
_repository.deletePersistence(client);
|
||||||
|
_denyJoining.remove(player.getName());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void npcDespawn(QuitNPCDespawnEvent event)
|
||||||
|
{
|
||||||
|
if (!event.isPluginRemove())
|
||||||
|
{
|
||||||
|
runAsync(() ->
|
||||||
|
{
|
||||||
|
String name = event.getNpc().getName();
|
||||||
|
_denyJoining.add(name);
|
||||||
|
_client.getOrLoadClient(event.getNpc().getName(), _repository::deletePersistence);
|
||||||
|
_denyJoining.remove(name);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public final PersistenceRepository getRepository()
|
||||||
|
{
|
||||||
|
return _repository;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,230 @@
|
|||||||
|
package mineplex.gemhunters.persistence;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import mineplex.core.account.CoreClient;
|
||||||
|
import mineplex.gemhunters.quest.QuestPlayerData;
|
||||||
|
import mineplex.serverdata.database.DBPool;
|
||||||
|
import mineplex.serverdata.database.RepositoryBase;
|
||||||
|
import mineplex.serverdata.database.column.ColumnInt;
|
||||||
|
import mineplex.serverdata.database.column.ColumnVarChar;
|
||||||
|
import net.minecraft.server.v1_8_R3.ItemMapEmpty;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
import java.lang.reflect.Constructor;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
public class PersistenceRepository extends RepositoryBase
|
||||||
|
{
|
||||||
|
|
||||||
|
private static final String GET_DATA = "SELECT * FROM gemHunters WHERE accountId=?;";
|
||||||
|
private static final String INSERT_DATA = "INSERT INTO gemHunters VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
|
||||||
|
private static final String UPDATE_DATA = "UPDATE gemHunters SET gems=?,health=?,maxHealth=?,hunger=?,x=?,y=?,z=?,yaw=?,pitch=?,quests=?,slots=?,items=?,armour=? WHERE accountId=?;";
|
||||||
|
private static final String DELETE_DATA = "DELETE FROM gemHunters WHERE accountId=?;";
|
||||||
|
private static final Gson GSON;
|
||||||
|
private static final ItemStack AIR = new ItemStack(Material.AIR);
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
GSON = new Gson();
|
||||||
|
}
|
||||||
|
|
||||||
|
private final List<Integer> _exists;
|
||||||
|
|
||||||
|
public PersistenceRepository()
|
||||||
|
{
|
||||||
|
super(DBPool.getAccount());
|
||||||
|
|
||||||
|
_exists = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getPersistenceData(Consumer<PersistenceData> response, CoreClient client)
|
||||||
|
{
|
||||||
|
int accountId = client.getAccountId();
|
||||||
|
|
||||||
|
executeQuery(GET_DATA, resultSet ->
|
||||||
|
{
|
||||||
|
if (resultSet.next())
|
||||||
|
{
|
||||||
|
int gems = resultSet.getInt("gems");
|
||||||
|
int health = resultSet.getInt("health");
|
||||||
|
int maxHealth = resultSet.getInt("maxHealth");
|
||||||
|
int hunger = resultSet.getInt("hunger");
|
||||||
|
int x = resultSet.getInt("x");
|
||||||
|
int y = resultSet.getInt("y");
|
||||||
|
int z = resultSet.getInt("z");
|
||||||
|
int yaw = resultSet.getInt("yaw");
|
||||||
|
int pitch = resultSet.getInt("pitch");
|
||||||
|
int slots = resultSet.getInt("slots");
|
||||||
|
String quests = resultSet.getString("quests");
|
||||||
|
QuestPlayerData questData = GSON.fromJson(quests, QuestPlayerData.class);
|
||||||
|
|
||||||
|
String items = resultSet.getString("items");
|
||||||
|
List<Map<String, Object>> itemsMap = GSON.fromJson(items, List.class);
|
||||||
|
List<ItemStack> itemsList = new ArrayList<>(itemsMap.size());
|
||||||
|
|
||||||
|
for (Map<String, Object> map : itemsMap)
|
||||||
|
{
|
||||||
|
ItemStack itemStack = CraftItemStack.deserialize(map);
|
||||||
|
|
||||||
|
if (map.containsKey("meta"))
|
||||||
|
{
|
||||||
|
itemStack.setItemMeta(deserialiseMeta(map.get("meta")));
|
||||||
|
}
|
||||||
|
|
||||||
|
itemsList.add(itemStack);
|
||||||
|
}
|
||||||
|
|
||||||
|
String armour = resultSet.getString("armour");
|
||||||
|
List<Map<String, Object>> armourMap = GSON.fromJson(armour, List.class);
|
||||||
|
List<ItemStack> armourList = new ArrayList<>(armourMap.size());
|
||||||
|
|
||||||
|
for (Map<String, Object> map : armourMap)
|
||||||
|
{
|
||||||
|
ItemStack itemStack = CraftItemStack.deserialize(map);
|
||||||
|
|
||||||
|
if (map.containsKey("meta"))
|
||||||
|
{
|
||||||
|
itemStack.setItemMeta(deserialiseMeta(map.get("meta")));
|
||||||
|
}
|
||||||
|
|
||||||
|
armourList.add(CraftItemStack.deserialize(map));
|
||||||
|
}
|
||||||
|
|
||||||
|
_exists.add(accountId);
|
||||||
|
Location location = new Location(Bukkit.getWorlds().get(0), x, y, z, yaw, pitch);
|
||||||
|
|
||||||
|
PersistenceData data = new PersistenceData(gems, location, questData, health, maxHealth, hunger, slots, itemsList.toArray(new ItemStack[0]), armourList.toArray(new ItemStack[0]));
|
||||||
|
response.accept(data);
|
||||||
|
}
|
||||||
|
}, new ColumnInt("accountId", accountId));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void savePersistence(CoreClient client, PersistenceData data)
|
||||||
|
{
|
||||||
|
int accountId = client.getAccountId();
|
||||||
|
|
||||||
|
int gems = data.getGems();
|
||||||
|
int health = data.getHealth();
|
||||||
|
int maxHealth = data.getMaxHealth();
|
||||||
|
int hunger = data.getHunger();
|
||||||
|
int x = data.getLocation().getBlockX();
|
||||||
|
int y = data.getLocation().getBlockY();
|
||||||
|
int z = data.getLocation().getBlockZ();
|
||||||
|
int yaw = (int) data.getLocation().getYaw();
|
||||||
|
int pitch = (int) data.getLocation().getPitch();
|
||||||
|
int slots = data.getSlots();
|
||||||
|
ItemStack[] items = data.getItems();
|
||||||
|
ItemStack[] armour = data.getArmour();
|
||||||
|
List<Map<String, Object>> itemsMap = new ArrayList<>(items.length);
|
||||||
|
List<Map<String, Object>> armourMap = new ArrayList<>(armour.length);
|
||||||
|
|
||||||
|
for (ItemStack itemStack : items)
|
||||||
|
{
|
||||||
|
if (itemStack == null || itemStack.getType() == Material.MAP || itemStack.getType() == Material.STAINED_GLASS_PANE)
|
||||||
|
{
|
||||||
|
itemStack = AIR;
|
||||||
|
}
|
||||||
|
|
||||||
|
itemsMap.add(itemStack.serialize());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ItemStack itemStack : armour)
|
||||||
|
{
|
||||||
|
if (itemStack == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
armourMap.add(itemStack.serialize());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(client))
|
||||||
|
{
|
||||||
|
executeUpdate(UPDATE_DATA,
|
||||||
|
new ColumnInt("gems", gems),
|
||||||
|
new ColumnInt("health", health),
|
||||||
|
new ColumnInt("maxHealth", maxHealth),
|
||||||
|
new ColumnInt("hunger", hunger),
|
||||||
|
new ColumnInt("x", x),
|
||||||
|
new ColumnInt("y", y),
|
||||||
|
new ColumnInt("z", z),
|
||||||
|
new ColumnInt("yaw", yaw),
|
||||||
|
new ColumnInt("pitch", pitch),
|
||||||
|
new ColumnVarChar("quests", 500, GSON.toJson(data.getQuestData())),
|
||||||
|
new ColumnInt("slots", slots),
|
||||||
|
new ColumnVarChar("items", 10000, GSON.toJson(itemsMap)),
|
||||||
|
new ColumnVarChar("armour", 1000, GSON.toJson(armourMap)),
|
||||||
|
new ColumnInt("accountId", accountId)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
executeInsert(INSERT_DATA, null,
|
||||||
|
new ColumnInt("accountId", accountId),
|
||||||
|
new ColumnInt("gems", gems),
|
||||||
|
new ColumnInt("health", health),
|
||||||
|
new ColumnInt("maxHealth", maxHealth),
|
||||||
|
new ColumnInt("hunger", hunger),
|
||||||
|
new ColumnInt("x", x),
|
||||||
|
new ColumnInt("y", y),
|
||||||
|
new ColumnInt("z", z),
|
||||||
|
new ColumnInt("yaw", yaw),
|
||||||
|
new ColumnInt("pitch", pitch),
|
||||||
|
new ColumnVarChar("quests", 500, GSON.toJson(data.getQuestData())),
|
||||||
|
new ColumnInt("slots", slots),
|
||||||
|
new ColumnVarChar("items", 10000, GSON.toJson(itemsMap)),
|
||||||
|
new ColumnVarChar("armour", 1000, GSON.toJson(armourMap))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
_exists.remove(Integer.valueOf(accountId));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deletePersistence(CoreClient client)
|
||||||
|
{
|
||||||
|
int accountId = client.getAccountId();
|
||||||
|
|
||||||
|
executeUpdate(DELETE_DATA, new ColumnInt("accountId", accountId));
|
||||||
|
_exists.remove(Integer.valueOf(accountId));
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean exists(CoreClient client)
|
||||||
|
{
|
||||||
|
return _exists.contains(client.getAccountId());
|
||||||
|
}
|
||||||
|
|
||||||
|
private ItemMeta deserialiseMeta(Object map)
|
||||||
|
{
|
||||||
|
if (!(map instanceof Map))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Class<?> clazz = Class.forName("org.bukkit.craftbukkit.v1_8_R3.inventory.CraftMetaItem");
|
||||||
|
Constructor<?> constructor = clazz.getDeclaredConstructor(Map.class);
|
||||||
|
|
||||||
|
constructor.setAccessible(true);
|
||||||
|
|
||||||
|
ItemMeta meta = (ItemMeta) constructor.newInstance(map);
|
||||||
|
meta.setDisplayName((String) ((Map) map).get("displayName"));
|
||||||
|
|
||||||
|
return meta;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -4,6 +4,7 @@ import java.util.List;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import mineplex.core.common.util.*;
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -25,14 +26,7 @@ import org.bukkit.metadata.FixedMetadataValue;
|
|||||||
import mineplex.core.MiniClientPlugin;
|
import mineplex.core.MiniClientPlugin;
|
||||||
import mineplex.core.ReflectivelyCreateMiniPlugin;
|
import mineplex.core.ReflectivelyCreateMiniPlugin;
|
||||||
import mineplex.core.common.currency.GlobalCurrency;
|
import mineplex.core.common.currency.GlobalCurrency;
|
||||||
import mineplex.core.common.util.C;
|
|
||||||
import mineplex.core.common.util.F;
|
|
||||||
import mineplex.core.common.util.UtilInv;
|
|
||||||
import mineplex.core.common.util.UtilItem;
|
|
||||||
import mineplex.core.common.util.UtilItem.ItemAttribute;
|
import mineplex.core.common.util.UtilItem.ItemAttribute;
|
||||||
import mineplex.core.common.util.UtilMath;
|
|
||||||
import mineplex.core.common.util.UtilTextMiddle;
|
|
||||||
import mineplex.core.common.util.UtilTime;
|
|
||||||
import mineplex.core.itemstack.ItemBuilder;
|
import mineplex.core.itemstack.ItemBuilder;
|
||||||
import mineplex.core.menu.Menu;
|
import mineplex.core.menu.Menu;
|
||||||
import mineplex.core.recharge.Recharge;
|
import mineplex.core.recharge.Recharge;
|
||||||
@ -491,7 +485,7 @@ public class QuestModule extends MiniClientPlugin<QuestPlayerData>
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void debug(PlayerCommandPreprocessEvent event)
|
public void debug(PlayerCommandPreprocessEvent event)
|
||||||
{
|
{
|
||||||
if (event.getMessage().startsWith("/test"))
|
if (event.getMessage().startsWith("/questdatatest"))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
@ -5,6 +5,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import mineplex.core.recharge.Recharge;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.HumanEntity;
|
import org.bukkit.entity.HumanEntity;
|
||||||
@ -12,6 +13,7 @@ import org.bukkit.entity.LivingEntity;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Projectile;
|
import org.bukkit.entity.Projectile;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
||||||
@ -112,7 +114,7 @@ public class SafezoneModule extends MiniPlugin
|
|||||||
{
|
{
|
||||||
_playerStatus.setStatus(player, PlayerStatusType.SAFE, true);
|
_playerStatus.setStatus(player, PlayerStatusType.SAFE, true);
|
||||||
}
|
}
|
||||||
else
|
else if (Recharge.Instance.usable(player, "Cash Out"))
|
||||||
{
|
{
|
||||||
_playerStatus.setStatus(player, PlayerStatusType.SAFE);
|
_playerStatus.setStatus(player, PlayerStatusType.SAFE);
|
||||||
}
|
}
|
||||||
@ -128,7 +130,7 @@ public class SafezoneModule extends MiniPlugin
|
|||||||
_currentSafezone.remove(player.getUniqueId());
|
_currentSafezone.remove(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
public void entityDamage(EntityDamageEvent event)
|
public void entityDamage(EntityDamageEvent event)
|
||||||
{
|
{
|
||||||
if (!(event.getEntity() instanceof Player))
|
if (!(event.getEntity() instanceof Player))
|
||||||
@ -138,10 +140,15 @@ public class SafezoneModule extends MiniPlugin
|
|||||||
|
|
||||||
Player player = (Player) event.getEntity();
|
Player player = (Player) event.getEntity();
|
||||||
|
|
||||||
if (isInSafeZone(player))
|
if (isInSafeZone(player) && _playerStatus.Get(player).getStatusType() != PlayerStatusType.COMBAT)
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!Recharge.Instance.usable(player, "Cash Out"))
|
||||||
|
{
|
||||||
|
event.setCancelled(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
@ -67,35 +67,16 @@ public class SpawnModule extends MiniPlugin
|
|||||||
addCommand(new HubCommand(this));
|
addCommand(new HubCommand(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void playerJoin(PlayerJoinEvent event)
|
public void playerJoin(PlayerJoinEvent event)
|
||||||
{
|
{
|
||||||
if (_spawn == null || _center == null)
|
if (_spawn == null || _center == null)
|
||||||
{
|
{
|
||||||
_spawn = _worldData.getCustomLocation("PLAYER_SPAWN").get(0);
|
_spawn = _worldData.getCustomLocation("PLAYER_SPAWN").get(0);
|
||||||
_center = new Location(_worldData.World, 0, 64, 0);
|
_center = new Location(_worldData.World, 0, 64, 0);
|
||||||
|
_worldData.World.setSpawnLocation(_spawn.getBlockX(), _spawn.getBlockY(), _spawn.getBlockZ());
|
||||||
}
|
}
|
||||||
|
|
||||||
Player player = event.getPlayer();
|
|
||||||
|
|
||||||
if (_npc.hasNPC(player))
|
|
||||||
{
|
|
||||||
QuitNPC npc = _npc.getNPC(player);
|
|
||||||
|
|
||||||
npc.despawn();
|
|
||||||
npc.restore(player);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
player.teleport(_spawn);
|
|
||||||
player.setFoodLevel(20);
|
|
||||||
player.setExhaustion(0);
|
|
||||||
player.setLevel(0);
|
|
||||||
player.setExp(0);
|
|
||||||
player.getInventory().clear();
|
|
||||||
player.getInventory().setArmorContents(null);
|
|
||||||
player.updateInventory();
|
|
||||||
|
|
||||||
if (_npcsSpawned)
|
if (_npcsSpawned)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
@ -5,19 +5,18 @@ import java.io.IOException;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import mineplex.core.common.util.*;
|
||||||
import org.bukkit.DyeColor;
|
import org.bukkit.DyeColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.FallingBlock;
|
import org.bukkit.entity.FallingBlock;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import org.bukkit.util.BlockVector;
|
import org.bukkit.util.BlockVector;
|
||||||
|
|
||||||
import mineplex.core.common.block.schematic.Schematic;
|
import mineplex.core.common.block.schematic.Schematic;
|
||||||
import mineplex.core.common.block.schematic.SchematicData;
|
import mineplex.core.common.block.schematic.SchematicData;
|
||||||
import mineplex.core.common.block.schematic.UtilSchematic;
|
import mineplex.core.common.block.schematic.UtilSchematic;
|
||||||
import mineplex.core.common.util.UtilFirework;
|
|
||||||
import mineplex.core.common.util.UtilMath;
|
|
||||||
import mineplex.core.common.util.UtilShapes;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents an instance of a Supply Drop. <br>
|
* Represents an instance of a Supply Drop. <br>
|
||||||
@ -101,11 +100,7 @@ public class SupplyDrop
|
|||||||
|
|
||||||
if (_blade != null)
|
if (_blade != null)
|
||||||
{
|
{
|
||||||
if (UtilMath.offset2d(_blade, _destination) < 1)
|
if (UtilMath.offset2d(_blade, _despawn) < 1)
|
||||||
{
|
|
||||||
spawnLootChest();
|
|
||||||
}
|
|
||||||
else if (UtilMath.offset2d(_blade, _despawn) < 1)
|
|
||||||
{
|
{
|
||||||
for (Block block : _bladeBlocks)
|
for (Block block : _bladeBlocks)
|
||||||
{
|
{
|
||||||
@ -198,16 +193,6 @@ public class SupplyDrop
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void spawnLootChest()
|
|
||||||
{
|
|
||||||
FallingBlock fallingBlock = _blade.getWorld().spawnFallingBlock(_blade.clone().subtract(0, 10, 0), Material.WOOD, (byte) 0);
|
|
||||||
|
|
||||||
fallingBlock.setHurtEntities(false);
|
|
||||||
fallingBlock.setDropItem(false);
|
|
||||||
|
|
||||||
UtilFirework.playFirework(fallingBlock.getLocation().add(0.5, 1, 0.5), UtilFirework.getRandomFireworkEffect(false, 2, 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
public final String getName()
|
public final String getName()
|
||||||
{
|
{
|
||||||
return _name;
|
return _name;
|
||||||
@ -222,4 +207,6 @@ public class SupplyDrop
|
|||||||
{
|
{
|
||||||
return _destination;
|
return _destination;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final Location getBladeLocation() { return _blade; }
|
||||||
}
|
}
|
||||||
|
@ -1,37 +1,32 @@
|
|||||||
package mineplex.gemhunters.supplydrop;
|
package mineplex.gemhunters.supplydrop;
|
||||||
|
|
||||||
|
import mineplex.core.MiniPlugin;
|
||||||
|
import mineplex.core.ReflectivelyCreateMiniPlugin;
|
||||||
|
import mineplex.core.blockrestore.BlockRestore;
|
||||||
|
import mineplex.core.common.Pair;
|
||||||
|
import mineplex.core.common.util.*;
|
||||||
|
import mineplex.core.updater.UpdateType;
|
||||||
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
|
import mineplex.gemhunters.loot.LootModule;
|
||||||
|
import mineplex.gemhunters.supplydrop.command.SupplyDropCommand;
|
||||||
|
import mineplex.gemhunters.world.WorldDataModule;
|
||||||
|
import org.bukkit.Color;
|
||||||
|
import org.bukkit.FireworkEffect;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.BlockFace;
|
||||||
|
import org.bukkit.entity.FallingBlock;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.entity.ItemSpawnEvent;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.entity.FallingBlock;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
|
||||||
import org.bukkit.event.entity.ItemSpawnEvent;
|
|
||||||
|
|
||||||
import mineplex.core.MiniPlugin;
|
|
||||||
import mineplex.core.ReflectivelyCreateMiniPlugin;
|
|
||||||
import mineplex.core.blockrestore.BlockRestore;
|
|
||||||
import mineplex.core.common.Pair;
|
|
||||||
import mineplex.core.common.util.C;
|
|
||||||
import mineplex.core.common.util.F;
|
|
||||||
import mineplex.core.common.util.UtilBlock;
|
|
||||||
import mineplex.core.common.util.UtilMath;
|
|
||||||
import mineplex.core.common.util.UtilServer;
|
|
||||||
import mineplex.core.common.util.UtilTextMiddle;
|
|
||||||
import mineplex.core.common.util.UtilTime;
|
|
||||||
import mineplex.core.common.util.UtilWorld;
|
|
||||||
import mineplex.core.updater.UpdateType;
|
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
|
||||||
import mineplex.gemhunters.loot.LootModule;
|
|
||||||
import mineplex.gemhunters.supplydrop.command.SupplyDropCommand;
|
|
||||||
import mineplex.gemhunters.world.WorldDataModule;
|
|
||||||
|
|
||||||
@ReflectivelyCreateMiniPlugin
|
@ReflectivelyCreateMiniPlugin
|
||||||
public class SupplyDropModule extends MiniPlugin
|
public class SupplyDropModule extends MiniPlugin
|
||||||
{
|
{
|
||||||
@ -85,6 +80,10 @@ public class SupplyDropModule extends MiniPlugin
|
|||||||
{
|
{
|
||||||
stopSequence();
|
stopSequence();
|
||||||
}
|
}
|
||||||
|
else if (UtilMath.offset2d(_current.getBladeLocation(), _current.getChestLocation()) < 1)
|
||||||
|
{
|
||||||
|
spawnLootChest();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (UtilTime.elapsed(_lastSupplyDrop, SEQUENCE_TIMER))
|
else if (UtilTime.elapsed(_lastSupplyDrop, SEQUENCE_TIMER))
|
||||||
{
|
{
|
||||||
@ -103,31 +102,6 @@ public class SupplyDropModule extends MiniPlugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void fallingBlockChange(EntityChangeBlockEvent event)
|
|
||||||
{
|
|
||||||
if (event.getEntity() instanceof FallingBlock && event.getTo() == Material.WOOD && isActive() && UtilMath.offsetSquared(_current.getChestLocation(), event.getBlock().getLocation()) < 16)
|
|
||||||
{
|
|
||||||
Block block = event.getBlock();
|
|
||||||
|
|
||||||
block.setType(Material.CHEST);
|
|
||||||
|
|
||||||
// Add location that the chest will appear at into the spawned
|
|
||||||
// chests list so that LootModule can populate it with loot.
|
|
||||||
_loot.addSpawnedChest(block.getLocation(), CHEST_COLOUR);
|
|
||||||
|
|
||||||
// Remove beacon
|
|
||||||
for (Block beacon : _beaconBlocks)
|
|
||||||
{
|
|
||||||
_blockRestore.restore(beacon);
|
|
||||||
}
|
|
||||||
|
|
||||||
_beaconBlocks.clear();
|
|
||||||
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void startSequence(String locationKey)
|
public void startSequence(String locationKey)
|
||||||
{
|
{
|
||||||
Location spawn = _worldData.getCustomLocation(LOCATION_DATA + " " + locationKey + " Start").get(0);
|
Location spawn = _worldData.getCustomLocation(LOCATION_DATA + " " + locationKey + " Start").get(0);
|
||||||
@ -168,6 +142,43 @@ public class SupplyDropModule extends MiniPlugin
|
|||||||
_current = null;
|
_current = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void spawnLootChest()
|
||||||
|
{
|
||||||
|
Location chest = _current.getBladeLocation().clone().subtract(0, 10, 0);
|
||||||
|
|
||||||
|
runSyncTimer(new BukkitRunnable()
|
||||||
|
{
|
||||||
|
|
||||||
|
Block chestBlock = chest.getBlock();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
chestBlock.setType(Material.AIR);
|
||||||
|
chestBlock = chestBlock.getRelative(BlockFace.DOWN);
|
||||||
|
chestBlock.setType(Material.CHEST);
|
||||||
|
|
||||||
|
if (chestBlock.getRelative(BlockFace.DOWN).getType() != Material.AIR)
|
||||||
|
{
|
||||||
|
// Add location that the chest will appear at into the spawned
|
||||||
|
// chests list so that LootModule can populate it with loot.
|
||||||
|
_loot.addSpawnedChest(chestBlock.getLocation(), CHEST_COLOUR);
|
||||||
|
|
||||||
|
// Remove beacon
|
||||||
|
for (Block beacon : _beaconBlocks)
|
||||||
|
{
|
||||||
|
_blockRestore.restore(beacon);
|
||||||
|
}
|
||||||
|
|
||||||
|
_beaconBlocks.clear();
|
||||||
|
cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
UtilFirework.playFirework(chestBlock.getLocation().add(0.5, 1, 0.5), FireworkEffect.Type.BALL, Color.YELLOW, true, false);
|
||||||
|
}
|
||||||
|
}, 0, 5);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isActive()
|
public boolean isActive()
|
||||||
{
|
{
|
||||||
return _current != null;
|
return _current != null;
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package mineplex.gemhunters.tutorial;
|
package mineplex.gemhunters.tutorial;
|
||||||
|
|
||||||
|
import mineplex.core.updater.UpdateType;
|
||||||
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@ -11,8 +14,10 @@ import mineplex.core.texttutorial.tutorial.Tutorial;
|
|||||||
import mineplex.gemhunters.economy.EconomyModule;
|
import mineplex.gemhunters.economy.EconomyModule;
|
||||||
import mineplex.gemhunters.spawn.SpawnModule;
|
import mineplex.gemhunters.spawn.SpawnModule;
|
||||||
import mineplex.gemhunters.world.WorldDataModule;
|
import mineplex.gemhunters.world.WorldDataModule;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
public class GemHuntersTutorial extends Tutorial
|
public class GemHuntersTutorial extends Tutorial implements Listener
|
||||||
{
|
{
|
||||||
|
|
||||||
private final SpawnModule _spawn;
|
private final SpawnModule _spawn;
|
||||||
@ -59,8 +64,8 @@ public class GemHuntersTutorial extends Tutorial
|
|||||||
}));
|
}));
|
||||||
addPhase(new Phase(getLocation(3), "Items", new String[] {
|
addPhase(new Phase(getLocation(3), "Items", new String[] {
|
||||||
"Collect items from chests and powerup.",
|
"Collect items from chests and powerup.",
|
||||||
"You can find anything from Weaponrs to Cosmetics.",
|
"You can find anything from Weapons to Cosmetics.",
|
||||||
"If you find somethiing you want to keep you can",
|
"If you find something you want to keep you can",
|
||||||
C.cGreen + "Cash Out" + C.cWhite + " at any time by right clicking the " + C.cGreen + "Emerald" + C.cWhite + " in your inventory.",
|
C.cGreen + "Cash Out" + C.cWhite + " at any time by right clicking the " + C.cGreen + "Emerald" + C.cWhite + " in your inventory.",
|
||||||
}));
|
}));
|
||||||
addPhase(new Phase(getLocation(4), "Cashing Out", new String[] {
|
addPhase(new Phase(getLocation(4), "Cashing Out", new String[] {
|
||||||
@ -71,6 +76,8 @@ public class GemHuntersTutorial extends Tutorial
|
|||||||
addPhase(new Phase(getLocation(5), "Good luck", new String[] {
|
addPhase(new Phase(getLocation(5), "Good luck", new String[] {
|
||||||
"Stay safe! Anarchy rules in the world of " + C.cGreen + "Gem Hunters" + C.cWhite + "!"
|
"Stay safe! Anarchy rules in the world of " + C.cGreen + "Gem Hunters" + C.cWhite + "!"
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
UtilServer.RegisterEvents(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -100,4 +107,21 @@ public class GemHuntersTutorial extends Tutorial
|
|||||||
return new Location(_worldData.World, locations[0] + 0.5, locations[1] + 0.5, locations[2] + 0.5, locations[3], locations[4]);
|
return new Location(_worldData.World, locations[0] + 0.5, locations[1] + 0.5, locations[2] + 0.5, locations[3], locations[4]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void updateFlight(UpdateEvent event)
|
||||||
|
{
|
||||||
|
if (event.getType() != UpdateType.FASTER)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Player player : Bukkit.getOnlinePlayers())
|
||||||
|
{
|
||||||
|
if (isInTutorial(player) && !player.isFlying())
|
||||||
|
{
|
||||||
|
player.setFlying(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -112,7 +112,9 @@ public class WorldDataModule extends MiniPlugin
|
|||||||
{
|
{
|
||||||
Location loc = stringToLocation(tokens[i]);
|
Location loc = stringToLocation(tokens[i]);
|
||||||
if (loc == null)
|
if (loc == null)
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
loc.setYaw(currentDirection);
|
loc.setYaw(currentDirection);
|
||||||
|
|
||||||
@ -132,7 +134,9 @@ public class WorldDataModule extends MiniPlugin
|
|||||||
{
|
{
|
||||||
Location loc = stringToLocation(tokens[i]);
|
Location loc = stringToLocation(tokens[i]);
|
||||||
if (loc == null)
|
if (loc == null)
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
currentData.add(loc);
|
currentData.add(loc);
|
||||||
}
|
}
|
||||||
@ -150,7 +154,9 @@ public class WorldDataModule extends MiniPlugin
|
|||||||
{
|
{
|
||||||
Location loc = stringToLocation(tokens[i]);
|
Location loc = stringToLocation(tokens[i]);
|
||||||
if (loc == null)
|
if (loc == null)
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
currentData.add(loc);
|
currentData.add(loc);
|
||||||
}
|
}
|
||||||
|
@ -14,21 +14,13 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.*;
|
||||||
import org.bukkit.event.block.BlockBurnEvent;
|
|
||||||
import org.bukkit.event.block.BlockFadeEvent;
|
|
||||||
import org.bukkit.event.block.BlockIgniteEvent;
|
|
||||||
import org.bukkit.event.block.BlockIgniteEvent.IgniteCause;
|
import org.bukkit.event.block.BlockIgniteEvent.IgniteCause;
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
|
||||||
import org.bukkit.event.block.LeavesDecayEvent;
|
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
||||||
import org.bukkit.event.hanging.HangingBreakEvent;
|
import org.bukkit.event.hanging.HangingBreakEvent;
|
||||||
import org.bukkit.event.player.PlayerArmorStandManipulateEvent;
|
import org.bukkit.event.inventory.FurnaceSmeltEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractAtEntityEvent;
|
import org.bukkit.event.player.*;
|
||||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
|
||||||
import org.bukkit.event.weather.WeatherChangeEvent;
|
import org.bukkit.event.weather.WeatherChangeEvent;
|
||||||
import org.bukkit.event.world.ChunkUnloadEvent;
|
import org.bukkit.event.world.ChunkUnloadEvent;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
@ -52,7 +44,8 @@ public class WorldListeners implements Listener
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void deletePlayerData(PlayerQuitEvent event)
|
public void deletePlayerData(PlayerQuitEvent event)
|
||||||
{
|
{
|
||||||
_plugin.getServer().getScheduler().runTaskLater(_plugin, () -> {
|
_plugin.getServer().getScheduler().runTaskLater(_plugin, () ->
|
||||||
|
{
|
||||||
World world = event.getPlayer().getWorld();
|
World world = event.getPlayer().getWorld();
|
||||||
UUID uuid = event.getPlayer().getUniqueId();
|
UUID uuid = event.getPlayer().getUniqueId();
|
||||||
String path = world.getWorldFolder().getPath();
|
String path = world.getWorldFolder().getPath();
|
||||||
@ -213,6 +206,29 @@ public class WorldListeners implements Listener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void bucketEmpty(PlayerBucketEmptyEvent event)
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void fishingExpRemove(PlayerFishEvent event)
|
||||||
|
{
|
||||||
|
event.setExpToDrop(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void smelt(BlockExpEvent event)
|
||||||
|
{
|
||||||
|
Material material = event.getBlock().getType();
|
||||||
|
|
||||||
|
if (material == Material.FURNACE || material == Material.BURNING_FURNACE)
|
||||||
|
{
|
||||||
|
event.setExpToDrop(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public boolean shouldBlock(Player player)
|
public boolean shouldBlock(Player player)
|
||||||
{
|
{
|
||||||
return player.getGameMode() != GameMode.CREATIVE;
|
return player.getGameMode() != GameMode.CREATIVE;
|
||||||
|
@ -37,7 +37,6 @@ public class BlizzardWorldEvent extends WorldEvent
|
|||||||
private static final double START_CHANCE = 0.01;
|
private static final double START_CHANCE = 0.01;
|
||||||
private static final long MAX_TIME = TimeUnit.MINUTES.toMillis(10);
|
private static final long MAX_TIME = TimeUnit.MINUTES.toMillis(10);
|
||||||
private static final long GRACE_TIME = TimeUnit.SECONDS.toMillis(60);
|
private static final long GRACE_TIME = TimeUnit.SECONDS.toMillis(60);
|
||||||
private static final long WARM_TIME = TimeUnit.SECONDS.toMillis(5);
|
|
||||||
private static final int DAMAGE = 2;
|
private static final int DAMAGE = 2;
|
||||||
private static final String TIP = "EQUIP LEATHER ARMOUR OR GET NEAR A FIRE";
|
private static final String TIP = "EQUIP LEATHER ARMOUR OR GET NEAR A FIRE";
|
||||||
|
|
||||||
@ -108,8 +107,13 @@ public class BlizzardWorldEvent extends WorldEvent
|
|||||||
{
|
{
|
||||||
if (shouldDamage(player))
|
if (shouldDamage(player))
|
||||||
{
|
{
|
||||||
|
_playerStatus.setStatus(player, PlayerStatusType.COLD);
|
||||||
_damage.NewDamageEvent(player, null, null, DamageCause.CUSTOM, DAMAGE, false, true, true, "Hurricane", "Frostbite");
|
_damage.NewDamageEvent(player, null, null, DamageCause.CUSTOM, DAMAGE, false, true, true, "Hurricane", "Frostbite");
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_playerStatus.setStatus(player, PlayerStatusType.WARM);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -141,31 +145,9 @@ public class BlizzardWorldEvent extends WorldEvent
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_playerStatus.setStatus(player, PlayerStatusType.WARM, WARM_TIME);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void updatePlayerStatus(UpdateEvent event)
|
|
||||||
{
|
|
||||||
if (event.getType() != UpdateType.SLOW || !isLive())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Player player : Bukkit.getOnlinePlayers())
|
|
||||||
{
|
|
||||||
PlayerStatus status = _playerStatus.Get(player);
|
|
||||||
|
|
||||||
if (status.getStatusType() == PlayerStatusType.COLD)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
_playerStatus.setStatus(player, PlayerStatusType.COLD, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart()
|
public void onStart()
|
||||||
{
|
{
|
||||||
|
@ -73,7 +73,7 @@ public class GiantWorldEvent extends WorldEvent
|
|||||||
public void onEnd()
|
public void onEnd()
|
||||||
{
|
{
|
||||||
ItemStack itemStack = SkinData.OMEGA_CHEST.getSkull(C.cAqua + "Omega Chest", new ArrayList<>());
|
ItemStack itemStack = SkinData.OMEGA_CHEST.getSkull(C.cAqua + "Omega Chest", new ArrayList<>());
|
||||||
LootChestReward reward = new LootChestReward(CASH_OUT_DELAY, SkinData.OMEGA_CHEST.getSkull(C.cAqua + "Omega Chest", null), "Omega", 1);
|
LootChestReward reward = new LootChestReward(CASH_OUT_DELAY, itemStack, "Omega", 1);
|
||||||
|
|
||||||
_worldData.World.dropItemNaturally(getEventLocations()[0], itemStack);
|
_worldData.World.dropItemNaturally(getEventLocations()[0], itemStack);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user