Fixed some issues in clans

This commit is contained in:
Sam 2018-07-24 13:47:42 +01:00 committed by Alexander Meech
parent 558682f07d
commit 55e01b3259
8 changed files with 137 additions and 97 deletions

View File

@ -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)
{

View File

@ -363,7 +363,7 @@ public class ClansManager extends MiniClientPlugin<ClientClan> 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);

View File

@ -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<Player, ObserverData> _observerMap;
private final ConditionManager _conditionManager;
private final Map<Player, ObserverData> _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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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<Player, BlockPosition> _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");
}
}
}

View File

@ -73,6 +73,8 @@ public class Spawn extends MiniPlugin
_spawns = new WeightSet<Location>(getNorthSpawn(), getSouthSpawn());
_shops = new WeightSet<Location>(getEastTown(), getWestTown());
_clansManager = clansManager;
getSpawnWorld().setGameRuleValue("doDaylightCycle", "true");
}
/**

View File

@ -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);
}
}