From 0da2691a87c520af0b7e42fef32e86acffc9894a Mon Sep 17 00:00:00 2001 From: AlexTheCoder Date: Sat, 26 Aug 2017 02:06:38 -0400 Subject: [PATCH] Create panic system to protect official content creators --- .../clans/freeze/ClansFreezeManager.java | 147 ++++++++++++++++-- .../clans/freeze/commands/PanicCommand.java | 31 ++++ 2 files changed, 167 insertions(+), 11 deletions(-) create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/freeze/commands/PanicCommand.java diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/freeze/ClansFreezeManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/freeze/ClansFreezeManager.java index 4f91363ad..05ded2fd7 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/freeze/ClansFreezeManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/freeze/ClansFreezeManager.java @@ -2,9 +2,11 @@ package mineplex.game.clans.clans.freeze; import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.UUID; import org.bukkit.Bukkit; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -12,12 +14,18 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityTargetLivingEntityEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerToggleFlightEvent; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; +import com.google.common.collect.Sets; + import mineplex.core.MiniPlugin; import mineplex.core.account.CoreClientManager; import mineplex.core.account.permissions.Permission; @@ -31,7 +39,9 @@ import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.game.clans.clans.event.ClansCommandExecutedEvent; +import mineplex.game.clans.clans.event.IronDoorOpenEvent; import mineplex.game.clans.clans.freeze.commands.FreezeCommand; +import mineplex.game.clans.clans.freeze.commands.PanicCommand; import mineplex.game.clans.clans.freeze.commands.UnfreezeCommand; import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -46,8 +56,11 @@ public class ClansFreezeManager extends MiniPlugin } private static final long FREEZE_MESSAGE_INTERVAL = 10000; + private static final Set CONTAINERS = Sets.newHashSet(Material.CHEST, Material.TRAPPED_CHEST, Material.HOPPER, Material.FURNACE, Material.BURNING_FURNACE, Material.DISPENSER, Material.DROPPER, Material.WORKBENCH, Material.BREWING_STAND); + private final CoreClientManager _clientManager; private final Map _frozen = new HashMap<>(); + private final Map _panic = new HashMap<>(); public ClansFreezeManager(JavaPlugin plugin, CoreClientManager clientManager) { @@ -77,6 +90,7 @@ public class ClansFreezeManager extends MiniPlugin { addCommand(new FreezeCommand(this)); addCommand(new UnfreezeCommand(this)); + addCommand(new PanicCommand(this)); } @EventHandler(priority = EventPriority.LOW) @@ -95,12 +109,19 @@ public class ClansFreezeManager extends MiniPlugin } } } + + walkSpeed = _panic.remove(event.getPlayer().getUniqueId()); + if (walkSpeed != null) + { + event.getPlayer().setWalkSpeed(walkSpeed); + event.getPlayer().removePotionEffect(PotionEffectType.JUMP); + } } @EventHandler public void onMove(PlayerMoveEvent event) { - if (isFrozen(event.getPlayer()) && UtilMath.offset2d(event.getFrom().getBlock().getLocation(), event.getTo().getBlock().getLocation()) >= 1) + if ((isFrozen(event.getPlayer()) || isPanicking(event.getPlayer())) && UtilMath.offset2d(event.getFrom().getBlock().getLocation(), event.getTo().getBlock().getLocation()) >= 1) { event.setCancelled(true); event.getPlayer().teleport(event.getFrom().getBlock().getLocation().add(0, 0.5, 0)); @@ -148,7 +169,7 @@ public class ClansFreezeManager extends MiniPlugin if (event.getTarget() instanceof Player) { Player player = (Player) event.getTarget(); - if (isFrozen(player)) + if (isFrozen(player) || isPanicking(player)) { event.setCancelled(true); } @@ -161,12 +182,12 @@ public class ClansFreezeManager extends MiniPlugin Player damager = event.GetDamagerPlayer(event.GetCause() == DamageCause.PROJECTILE); Player damagee = event.GetDamageePlayer(); - if (damager != null && isFrozen(damager)) + if (damager != null && (isFrozen(damager) || isPanicking(damager))) { event.SetCancelled("Frozen Attacker"); UtilPlayer.message(damager, F.main(getName(), "You cannot attack others while frozen!")); } - if (damagee != null && isFrozen(damagee)) + if (damagee != null && (isFrozen(damagee) || isPanicking(damagee))) { event.SetCancelled("Frozen Damagee"); if (damager != null) @@ -179,7 +200,7 @@ public class ClansFreezeManager extends MiniPlugin @EventHandler public void onUseSkill(SkillTriggerEvent event) { - if (isFrozen(event.GetPlayer())) + if (isFrozen(event.GetPlayer()) || isPanicking(event.GetPlayer())) { event.SetCancelled(true); UtilPlayer.message(event.GetPlayer(), F.main(getName(), "You cannot use " + F.skill(event.GetSkillName()) + " while frozen!")); @@ -189,7 +210,7 @@ public class ClansFreezeManager extends MiniPlugin @EventHandler public void onBreak(BlockBreakEvent event) { - if (isFrozen(event.getPlayer())) + if (isFrozen(event.getPlayer()) || isPanicking(event.getPlayer())) { event.setCancelled(true); UtilPlayer.message(event.getPlayer(), F.main(getName(), "You cannot break blocks while frozen!")); @@ -199,7 +220,7 @@ public class ClansFreezeManager extends MiniPlugin @EventHandler public void onPlace(BlockPlaceEvent event) { - if (isFrozen(event.getPlayer())) + if (isFrozen(event.getPlayer()) || isPanicking(event.getPlayer())) { event.setCancelled(true); UtilPlayer.message(event.getPlayer(), F.main(getName(), "You cannot place blocks while frozen!")); @@ -209,13 +230,62 @@ public class ClansFreezeManager extends MiniPlugin @EventHandler public void onTpHome(ClansCommandExecutedEvent event) { - if (isFrozen(event.getPlayer())) + if (isFrozen(event.getPlayer()) || isPanicking(event.getPlayer())) { event.setCancelled(true); UtilPlayer.message(event.getPlayer(), F.main(getName(), "You cannot use that command while frozen!")); } } + @EventHandler + public void onDropItem(PlayerDropItemEvent event) + { + if (isFrozen(event.getPlayer()) || isPanicking(event.getPlayer())) + { + event.setCancelled(true); + UtilPlayer.message(event.getPlayer(), F.main(getName(), "You cannot drop items while frozen!")); + } + } + + @EventHandler + public void onPickupItem(PlayerPickupItemEvent event) + { + if (isFrozen(event.getPlayer()) || isPanicking(event.getPlayer())) + { + event.setCancelled(true); + UtilPlayer.message(event.getPlayer(), F.main(getName(), "You cannot pick up items while frozen!")); + } + } + + @EventHandler + public void onOpenContainer(PlayerInteractEvent event) + { + if ((isFrozen(event.getPlayer()) || isPanicking(event.getPlayer())) && event.getClickedBlock() != null && CONTAINERS.contains(event.getClickedBlock().getType())) + { + event.setCancelled(true); + UtilPlayer.message(event.getPlayer(), F.main(getName(), "You cannot open containers while frozen!")); + } + } + + @EventHandler + public void onOpenDoor(IronDoorOpenEvent event) + { + if (isFrozen(event.getPlayer()) || isPanicking(event.getPlayer())) + { + event.setCancelled(true); + UtilPlayer.message(event.getPlayer(), F.main(getName(), "You cannot use doors while frozen!")); + } + } + + @EventHandler + public void onToggleFlight(PlayerToggleFlightEvent event) + { + if ((isFrozen(event.getPlayer()) || isPanicking(event.getPlayer())) && event.isFlying()) + { + event.setCancelled(true); + } + } + /** * Checks if a player is frozen * @param player The player to check @@ -226,6 +296,57 @@ public class ClansFreezeManager extends MiniPlugin return _frozen.containsKey(player.getUniqueId()); } + /** + * Checks if a player is panicking + * @param player The player to check + * @return Whether the player is panicking + */ + public boolean isPanicking(Player player) + { + return _panic.containsKey(player.getUniqueId()); + } + + /** + * Enters a player into panic mode + * @param player The player who is panicking + */ + public void panic(Player player) + { + _panic.put(player.getUniqueId(), _frozen.getOrDefault(player.getUniqueId(), player.getWalkSpeed())); + player.setFlying(false); + player.setWalkSpeed(0); + player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 999999, -10)); + for (Player alert : UtilServer.GetPlayers()) + { + if (_clientManager.Get(alert).GetRank().has(null, Rank.ADMIN, new Rank[] {Rank.CMOD, Rank.CMA}, false)) + { + UtilPlayer.message(alert, F.main(getName(), F.elem(player.getName()) + " has entered panic mode!")); + } + if (alert.getName().equals(player.getName())) + { + UtilPlayer.message(alert, F.main(getName(), "You have entered panic mode!")); + } + } + } + + /** + * Removes a player from panic mode + * @param player The player to unpanic + */ + public void unpanic(Player player) + { + Float walkSpeed = _panic.remove(player.getUniqueId()); + if (walkSpeed != null) + { + if (!_frozen.containsKey(player.getUniqueId())) + { + player.setWalkSpeed(walkSpeed); + player.removePotionEffect(PotionEffectType.JUMP); + } + UtilPlayer.message(player, F.main(getName(), "You have exited panic mode!")); + } + } + /** * Freezes a player * @param player The player to freeze @@ -233,7 +354,8 @@ public class ClansFreezeManager extends MiniPlugin */ public void freeze(Player player, Player staff) { - _frozen.put(player.getUniqueId(), player.getWalkSpeed()); + _frozen.put(player.getUniqueId(), _panic.getOrDefault(player.getUniqueId(), player.getWalkSpeed())); + player.setFlying(false); player.setWalkSpeed(0); player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 999999, -10)); for (Player alert : UtilServer.GetPlayers()) @@ -255,8 +377,11 @@ public class ClansFreezeManager extends MiniPlugin Float walkSpeed = _frozen.remove(player.getUniqueId()); if (walkSpeed != null) { - player.setWalkSpeed(walkSpeed); - player.removePotionEffect(PotionEffectType.JUMP); + if (!_panic.containsKey(player.getUniqueId())) + { + player.setWalkSpeed(walkSpeed); + player.removePotionEffect(PotionEffectType.JUMP); + } for (Player alert : UtilServer.GetPlayers()) { if (_clientManager.Get(alert).hasPermission(Perm.NOTIFY)) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/freeze/commands/PanicCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/freeze/commands/PanicCommand.java new file mode 100644 index 000000000..c58481b6c --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/freeze/commands/PanicCommand.java @@ -0,0 +1,31 @@ +package mineplex.game.clans.clans.freeze.commands; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.game.clans.clans.freeze.ClansFreezeManager; + +/** + * Command to enter panic mode + */ +public class PanicCommand extends CommandBase +{ + public PanicCommand(ClansFreezeManager plugin) + { + super(plugin, Rank.ADMIN, new Rank[] {Rank.YOUTUBE, Rank.TWITCH}, "panic"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (Plugin.isPanicking(caller)) + { + Plugin.unpanic(caller); + } + else + { + Plugin.panic(caller); + } + } +} \ No newline at end of file