From 55e01b325908f2e88fb17792fecf435508d5dd92 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 24 Jul 2018 13:47:42 +0100 Subject: [PATCH] Fixed some issues in clans --- .../mineplex/game/clans/clans/ClansGame.java | 74 +++++++------- .../game/clans/clans/ClansManager.java | 2 +- .../clans/clans/observer/ObserverManager.java | 18 ++-- .../clans/worldevent/WorldEventType.java | 21 +--- .../game/clans/gameplay/Gameplay.java | 17 ---- .../clans/gameplay/HiddenChestManager.java | 96 ++++++++++++++----- .../src/mineplex/game/clans/spawn/Spawn.java | 2 + .../Skill/Ranger/BarbedArrows.java | 4 + 8 files changed, 137 insertions(+), 97 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansGame.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansGame.java index a18fd9f90..a2dd8a5de 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansGame.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansGame.java @@ -37,6 +37,8 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; @@ -46,7 +48,6 @@ import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.MiniPlugin; import mineplex.core.account.permissions.Permission; import mineplex.core.account.permissions.PermissionGroup; -import mineplex.core.blockrestore.BlockRestoreData; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilBlock; @@ -57,7 +58,6 @@ import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilItem; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.recharge.Recharge; @@ -180,11 +180,11 @@ public class ClansGame extends MiniPlugin if (event.getCause() == IgniteCause.SPREAD) if (_clans.getClanUtility().isBorderlands(event.getBlock().getLocation())) event.setCancelled(true); } - @EventHandler(priority = EventPriority.LOW) + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void BlockPlace(BlockPlaceEvent event) { - if (event.isCancelled()) return; - + Player player = event.getPlayer(); + if (isDupedFromClassShop(event.getItemInHand())) { event.setCancelled(true); @@ -192,57 +192,65 @@ public class ClansGame extends MiniPlugin { if (ClansManager.getInstance().getClientManager().Get(p).hasPermission(Perm.DUPE_ALERT)) { - UtilPlayer.message(p, F.elem("[" + C.cRedB + "!" + C.cGray + "] ") + event.getPlayer().getName() + " just tried to use a duped item/block!"); + UtilPlayer.message(p, F.elem("[" + C.cRedB + "!" + C.cGray + "] ") + player.getName() + " just tried to use a duped item/block!"); } } - final int slot = event.getPlayer().getInventory().getHeldItemSlot(); + final int slot = player.getInventory().getHeldItemSlot(); ClansManager.getInstance().runSyncLater(() -> { - event.getPlayer().getInventory().setItem(slot, new ItemStack(Material.AIR)); - event.getPlayer().updateInventory(); + player.getInventory().setItem(slot, new ItemStack(Material.AIR)); + player.updateInventory(); }, 1L); - + return; } - - if (_clans.getClanUtility().getAccess(event.getPlayer(), event.getBlock().getLocation()) == ClanRelation.SELF) + + if (_clans.getClanUtility().getAccess(player, event.getBlock().getLocation()) == ClanRelation.SELF) { if (_clans.getClanUtility().getOwner(event.getBlock().getLocation()) != null) { if (event.getBlock().getType() == Material.HOPPER && (event.getBlock().getRelative(BlockFace.UP).getType() == Material.CHEST || event.getBlock().getRelative(BlockFace.UP).getType() == Material.TRAPPED_CHEST)) { - if (_clans.getClanUtility().getRole(event.getPlayer()) == ClanRole.RECRUIT) + if (_clans.getClanUtility().getRole(player) == ClanRole.RECRUIT) { UtilPlayer.message(event.getPlayer(), F.main("Clans", "Recruits cannot siphon items out of chests with a hopper!")); event.setCancelled(true); } } } - + return; } - - if (event.getBlock().getType() != Material.LADDER) return; - + final Block block = event.getBlock(); - - UtilServer.getServer().getScheduler().scheduleSyncDelayedTask(_clans.getPlugin(), new Runnable() + + if (block.getType() != Material.LADDER) { - public void run() - { - _clans.getBlockRestore().add(block, 65, block.getData(), 30000); - - BlockRestoreData data = _clans.getBlockRestore().getData(block); - if (data != null) - { - data.setFromId(0); - data.setFromData((byte) 0); - } - } - }, 0); - + return; + } + + if (_clans.getWorldEvent().isInEvent(block.getLocation().add(0.5, 0.5, 0.5), false) || block.equals(player.getLocation().getBlock())) + { + player.sendMessage("Cancelled dodgy ladder placement"); + event.setCancelled(true); + } + else + { + _clans.runSyncLater(() -> _clans.getBlockRestore().add(block, 65, block.getData(), 0, (byte) 0, 30000), 0); + } } - + + @EventHandler(priority = EventPriority.MONITOR) + public void teleport(PlayerTeleportEvent event) + { + Bukkit.broadcastMessage(event.getPlayer().getName() + " : " + event.getCause() + " : " + event.isCancelled()); + + if (event.getCause() == TeleportCause.UNKNOWN) + { + UtilPlayer.closeInventoryIfOpen(event.getPlayer()); + } + } + @EventHandler public void onFishHookEvent(PlayerFishEvent event) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index a22db8f9e..0edbdf59f 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -363,7 +363,7 @@ public class ClansManager extends MiniClientPlugin implements IRelat new Weapon(plugin, energy); new Gameplay(plugin, this, blockRestore, _damageManager); - new HiddenChestManager(this, packetHandler); + new HiddenChestManager(this); _projectileManager = new ProjectileManager(plugin); Fire fire = new Fire(plugin, _condition, _damageManager); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/observer/ObserverManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/observer/ObserverManager.java index 2971133a6..c1093acf2 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/observer/ObserverManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/observer/ObserverManager.java @@ -25,6 +25,8 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.clans.observer.command.ObserverCommand; +import mineplex.minecraft.game.core.condition.Condition; +import mineplex.minecraft.game.core.condition.Condition.ConditionType; import mineplex.minecraft.game.core.condition.ConditionManager; public class ObserverManager extends MiniPlugin @@ -35,16 +37,14 @@ public class ObserverManager extends MiniPlugin } // Used to Cloak Players - private ConditionManager _conditionManager; - private ClansManager _clansManager; - private Map _observerMap; + private final ConditionManager _conditionManager; + private final Map _observerMap; public ObserverManager(JavaPlugin plugin, ConditionManager conditionManager, ClansManager clansManager) { super("Observer", plugin); _conditionManager = conditionManager; - _clansManager = clansManager; _observerMap = new HashMap<>(); generatePermissions(); @@ -60,7 +60,7 @@ public class ObserverManager extends MiniPlugin ObserverData data = new ObserverData(player); ((CraftPlayer) player).getHandle().spectating = true; _conditionManager.Clean(player); - _conditionManager.Factory().Cloak("Observer", player, null, 999999999, true, true); + _conditionManager.Factory().Cloak("Observer", player, null, Integer.MAX_VALUE, true, true); UtilPlayer.clearInventory(player); UtilPlayer.clearPotionEffects(player); player.setGameMode(GameMode.CREATIVE); @@ -82,8 +82,14 @@ public class ObserverManager extends MiniPlugin private void restore(Player player, ObserverData data) { + Condition condition = _conditionManager.GetActiveCondition(player, ConditionType.CLOAK); + + if (condition != null) + { + condition.Remove(); + } + data.getSnapshot().applySnapshot(player); - _conditionManager.Clean(player); player.setGameMode(GameMode.SURVIVAL); ((CraftPlayer) player).getHandle().spectating = false; } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/worldevent/WorldEventType.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/worldevent/WorldEventType.java index 022da5f98..a6b972c71 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/worldevent/WorldEventType.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/worldevent/WorldEventType.java @@ -6,6 +6,7 @@ import mineplex.game.clans.clans.worldevent.api.WorldEvent; import mineplex.game.clans.clans.worldevent.boss.ironwizard.GolemBoss; import mineplex.game.clans.clans.worldevent.boss.skeletonking.SkeletonBoss; import mineplex.game.clans.clans.worldevent.capturepoint.CapturePointEvent; +import mineplex.game.clans.clans.worldevent.undead.UndeadCity; public enum WorldEventType { @@ -15,22 +16,10 @@ public enum WorldEventType //IRON_WIZARD("Iron Wizard", GolemBoss.class, 30), //BROOD_MOTHER("Brood Mother", SpiderBoss.class, 30), //SKELETON_KING("Skeleton King", SkeletonBoss.class, 30) - IRON_WIZARD("Iron Wizard", (man) -> - { - return new GolemBoss(man); - }), - SKELETON_KING("Skeleton King", (man) -> - { - return new SkeletonBoss(man); - }), - CAPTURE_POINT("Capture Point", (man) -> - { - return new CapturePointEvent(man); - }), - /*UNDEAD_CITY("Undead City", (man) -> - { - return new UndeadCity(man); - })*/ + IRON_WIZARD("Iron Wizard", GolemBoss::new), + SKELETON_KING("Skeleton King", SkeletonBoss::new), + CAPTURE_POINT("Capture Point", CapturePointEvent::new), + UNDEAD_CITY("Undead City", UndeadCity::new) ; private String _name; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java index 668f91e48..0dae719ad 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java @@ -13,8 +13,6 @@ import org.bukkit.Sound; import org.bukkit.block.Biome; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import org.bukkit.craftbukkit.v1_8_R3.CraftChunk; -import org.bukkit.entity.EntityType; import org.bukkit.entity.ItemFrame; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -31,7 +29,6 @@ import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityShootBowEvent; -import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.player.PlayerFishEvent; import org.bukkit.event.player.PlayerFishEvent.State; @@ -827,20 +824,6 @@ public class Gameplay extends MiniPlugin event.SetCancelled("Spawn Fall"); } - /** - * Cancel the spawning of all Witches. - * - * @param event - */ - @EventHandler - public void cancelWitchSpawns(EntitySpawnEvent event) - { - if (event.getEntityType() == EntityType.WITCH) - { - event.setCancelled(true); - } - } - public DamageManager getDamageManager() { return _damageManager; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/HiddenChestManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/HiddenChestManager.java index 5c6efc612..a3bca5de0 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/HiddenChestManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/HiddenChestManager.java @@ -1,55 +1,103 @@ package mineplex.game.clans.gameplay; -import mineplex.core.common.util.UtilServer; -import mineplex.core.packethandler.PacketHandler; -import mineplex.game.clans.clans.ClansManager; +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.server.v1_8_R3.BlockPosition; +import net.minecraft.server.v1_8_R3.PacketPlayOutBlockAction; + +import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.block.Chest; -import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventory; -import org.bukkit.craftbukkit.v1_8_R3.inventory.InventoryWrapper; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; +import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import mineplex.core.common.util.UtilServer; +import mineplex.game.clans.clans.ClansManager; public class HiddenChestManager implements Listener { + private final ClansManager _clansManager; - public HiddenChestManager(ClansManager clansManager, PacketHandler packetHandler) + private final Map _openChest; + + private PacketPlayOutBlockAction _lastPacket; + + public HiddenChestManager(ClansManager clansManager) { - this._clansManager = clansManager; + _clansManager = clansManager; + _openChest = new HashMap<>(); + + clansManager.getPacketHandler().addPacketHandler(packetInfo -> + { + PacketPlayOutBlockAction packet = (PacketPlayOutBlockAction) packetInfo.getPacket(); + + if (packet.equals(_lastPacket)) + { + packetInfo.getPlayer().sendMessage("Already modified"); + return; + } + + packetInfo.getPlayer().sendMessage("b= " + packet.b + " c=" + packet.c); + + // b - Action Id + // c - Action Param - How many people have the chest open + // a - Block Position + if (packet.b == 1 && packet.c > 0 && _openChest.containsValue(packet.a)) + { + packetInfo.getPlayer().sendMessage("Removed viewer"); + packet.c--; + _lastPacket = packet; + } + }, PacketPlayOutBlockAction.class); UtilServer.RegisterEvents(this); } - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onInteract(PlayerInteractEvent event) { - if (!_clansManager.getIncognitoManager().Get(event.getPlayer()).Status) + Player player = event.getPlayer(); + + if (event.getAction() != Action.RIGHT_CLICK_BLOCK || !_clansManager.getIncognitoManager().Get(player).Status) { return; } - if (event.getAction() != Action.RIGHT_CLICK_BLOCK) - { - return; - } + Block block = event.getClickedBlock(); + Material type = block.getType(); - if (event.getClickedBlock() == null) - { - return; - } - - Material type = event.getClickedBlock().getType(); if (type != Material.CHEST && type != Material.TRAPPED_CHEST) { return; } - Chest chest = (Chest) event.getClickedBlock().getState(); - event.getPlayer().openInventory(new CraftInventory(new InventoryWrapper(chest.getInventory()))); - event.setCancelled(true); - //fixme opened chest has name "container.chest" and that looks bad + Location location = event.getClickedBlock().getLocation(); + player.sendMessage("Opening silently..."); + _openChest.put(player, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ())); + } + + @EventHandler + public void handleClose(InventoryCloseEvent event) + { + if (_openChest.remove(event.getPlayer()) != null) + { + event.getPlayer().sendMessage("Removed"); + } + } + + @EventHandler + public void handleClose(PlayerQuitEvent event) + { + if (_openChest.remove(event.getPlayer()) != null) + { + event.getPlayer().sendMessage("Removed"); + } } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java index 62b3eac25..9d0da9e62 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java @@ -73,6 +73,8 @@ public class Spawn extends MiniPlugin _spawns = new WeightSet(getNorthSpawn(), getSouthSpawn()); _shops = new WeightSet(getEastTown(), getWestTown()); _clansManager = clansManager; + + getSpawnWorld().setGameRuleValue("doDaylightCycle", "true"); } /** diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/BarbedArrows.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/BarbedArrows.java index 3022fce1e..c276bfa30 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/BarbedArrows.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/BarbedArrows.java @@ -91,8 +91,12 @@ public class BarbedArrows extends Skill if (damageePlayer != null) { + int food = damageePlayer.getFoodLevel(); + damageePlayer.setFoodLevel(2); damageePlayer.setSprinting(false); + + Factory.runSyncLater(() -> damageePlayer.setFoodLevel(food), duration * 20); } }