diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/block/schematic/UtilSchematic.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/block/schematic/UtilSchematic.java index 4b4ba78cf..606e1e0ed 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/block/schematic/UtilSchematic.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/block/schematic/UtilSchematic.java @@ -44,19 +44,18 @@ import net.minecraft.server.v1_8_R3.WorldServer; public class UtilSchematic { - public static Schematic loadSchematic(File file) throws IOException { FileInputStream fis = new FileInputStream(file); return loadSchematic(fis); } - + public static Schematic loadSchematic(byte[] bytes) throws IOException { ByteArrayInputStream bis = new ByteArrayInputStream(bytes); return loadSchematic(bis); } - + public static Schematic loadSchematic(InputStream input) throws IOException { NBTInputStream nbtStream = new NBTInputStream(new GZIPInputStream(input)); @@ -73,15 +72,15 @@ public class UtilSchematic short width = getChildTag(schematic, "Width", ShortTag.class).getValue(); short height = getChildTag(schematic, "Height", ShortTag.class).getValue(); short length = getChildTag(schematic, "Length", ShortTag.class).getValue(); - - + + byte[] blockId = getChildTag(schematic, "Blocks", ByteArrayTag.class).getValue(); byte[] addId = new byte[0]; short[] blocks = new short[blockId.length]; // Have to later combine IDs byte[] blockData = getChildTag(schematic, "Data", ByteArrayTag.class).getValue(); - + Vector weOffset = null; - if(schematic.containsKey("WEOffsetX") && schematic.containsKey("WEOffsetY") && schematic.containsKey("WEOffsetZ")) + if (schematic.containsKey("WEOffsetX") && schematic.containsKey("WEOffsetY") && schematic.containsKey("WEOffsetZ")) { int x = getChildTag(schematic, "WEOffsetX", IntTag.class).getValue(); int y = getChildTag(schematic, "WEOffsetY", IntTag.class).getValue(); @@ -90,7 +89,7 @@ public class UtilSchematic } // We support 4096 block IDs using the same method as vanilla Minecraft, where - // the highest 4 bits are stored in a separate byte array. + // the highest 4 bits are stored in a separate byte array. if (schematic.containsKey("AddBlocks")) { addId = getChildTag(schematic, "AddBlocks", ByteArrayTag.class).getValue(); @@ -100,62 +99,70 @@ public class UtilSchematic for (int index = 0; index < blockId.length; index++) { if ((index >> 1) >= addId.length) + { blocks[index] = (short) (blockId[index] & 0xFF); + } else { if ((index & 1) == 0) + { blocks[index] = (short) (((addId[index >> 1] & 0x0F) << 8) + (blockId[index] & 0xFF)); + } else + { blocks[index] = (short) (((addId[index >> 1] & 0xF0) << 4) + (blockId[index] & 0xFF)); + } } } - + // Need to pull out tile entities - List tileEntities = getChildTag(schematic, "TileEntities", ListTag.class).getValue(); - Map> tileEntitiesMap = new HashMap<>(); + List tileEntities = getChildTag(schematic, "TileEntities", ListTag.class).getValue(); + Map> tileEntitiesMap = new HashMap<>(); - for (Tag tag : tileEntities) - { - if (!(tag instanceof CompoundTag)) { - continue; - } - CompoundTag t = (CompoundTag) tag; + for (Tag tag : tileEntities) + { + if (!(tag instanceof CompoundTag)) + { + continue; + } + CompoundTag t = (CompoundTag) tag; - int x = 0; - int y = 0; - int z = 0; + int x = 0; + int y = 0; + int z = 0; - Map values = new HashMap<>(); + Map values = new HashMap<>(); - for (Map.Entry entry : t.getValue().entrySet()) - { - if (entry.getValue() instanceof IntTag) - { - if (entry.getKey().equals("x")) - { - x = ((IntTag) entry.getValue()).getValue(); - } else if (entry.getKey().equals("y")) - { - y = ((IntTag) entry.getValue()).getValue(); - } else if (entry.getKey().equals("z")) - { - z = ((IntTag) entry.getValue()).getValue(); - } - } + for (Map.Entry entry : t.getValue().entrySet()) + { + if (entry.getValue() instanceof IntTag) + { + if (entry.getKey().equals("x")) + { + x = ((IntTag) entry.getValue()).getValue(); + } + else if (entry.getKey().equals("y")) + { + y = ((IntTag) entry.getValue()).getValue(); + } + else if (entry.getKey().equals("z")) + { + z = ((IntTag) entry.getValue()).getValue(); + } + } - values.put(entry.getKey(), entry.getValue()); - } + values.put(entry.getKey(), entry.getValue()); + } - BlockVector vec = new BlockVector(x, y, z); - tileEntitiesMap.put(vec, values); - } - - List entityTags = getChildTag(schematic, "Entities", ListTag.class).getValue(); + BlockVector vec = new BlockVector(x, y, z); + tileEntitiesMap.put(vec, values); + } + List entityTags = getChildTag(schematic, "Entities", ListTag.class).getValue(); return new Schematic(width, height, length, blocks, blockData, weOffset, tileEntitiesMap, entityTags); } - + /** * @param schematic The schematic you want to turn into bytes * @return Returns a byte array of the schematic which may be used for saving the schematic to DB or file @@ -166,7 +173,7 @@ public class UtilSchematic writeBytes(schematic, output); return output.toByteArray(); } - + /** * @param schematic The scheamtic you want save somewhere * @return Writes out this schematic on byte form @@ -174,127 +181,127 @@ public class UtilSchematic public static void writeBytes(Schematic schematic, OutputStream output) { Map map = new HashMap<>(); - + short width = schematic.getWidth(); short height = schematic.getHeight(); short length = schematic.getLength(); - + map.put("Width", new ShortTag(width)); map.put("Height", new ShortTag(height)); map.put("Length", new ShortTag(length)); - - if(schematic.hasWorldEditOffset()) + + if (schematic.hasWorldEditOffset()) { Vector weOffset = schematic.getWorldEditOffset(); map.put("WEOffsetX", new IntTag(weOffset.getBlockX())); map.put("WEOffsetY", new IntTag(weOffset.getBlockX())); map.put("WEOffsetZ", new IntTag(weOffset.getBlockX())); } - + map.put("Materials", new StringTag("Alpha")); - + short[] sBlocks = schematic.getBlocks(); Map> sTileEntities = schematic.getTileEntities(); - - + byte[] blocks = new byte[sBlocks.length]; - byte[] addBlocks = null; - byte[] blockData = schematic.getBlockData(); - List tileEntities = new ArrayList(); - - for(int x = 0; x < width; x++) - { - for(int y = 0; y < height; y++) - { - for(int z = 0; z < length; z++) - { - int index = y * width * length + z * width + x; - BlockVector bv = new BlockVector(x, y, z); - - //Save 4096 IDs in an AddBlocks section - if(sBlocks[index] > 255) - { - if (addBlocks == null) { // Lazily create section - addBlocks = new byte[(blocks.length >> 1) + 1]; - } - - addBlocks[index >> 1] = (byte) (((index & 1) == 0) ? - addBlocks[index >> 1] & 0xF0 | (sBlocks[index] >> 8) & 0xF - : addBlocks[index >> 1] & 0xF | ((sBlocks[index] >> 8) & 0xF) << 4); - } - - blocks[index] = (byte) sBlocks[index]; + byte[] addBlocks = null; + byte[] blockData = schematic.getBlockData(); + List tileEntities = new ArrayList<>(); - if(sTileEntities.get(bv) != null) - { - Map values = new HashMap<>(sTileEntities.get(bv)); - values.put("x", new IntTag(x)); - values.put("y", new IntTag(y)); - values.put("z", new IntTag(z)); - - CompoundTag tileEntityTag = new CompoundTag(values); - tileEntities.add(tileEntityTag); - - } - } - } - } - - map.put("Blocks", new ByteArrayTag(blocks)); - map.put("Data", new ByteArrayTag(blockData)); - map.put("TileEntities", new ListTag(CompoundTag.class, tileEntities)); - - if (addBlocks != null) { - map.put("AddBlocks", new ByteArrayTag(addBlocks)); - } - - // ==================================================================== - // Entities - // ==================================================================== - - List entities = schematic.getEntities(); - - map.put("Entities", new ListTag(CompoundTag.class, entities)); - - // ==================================================================== - // Output - // ==================================================================== - - CompoundTag schematicTag = new CompoundTag(map); - - try (NBTOutputStream outputStream = new NBTOutputStream(new GZIPOutputStream(output))) + for (int x = 0; x < width; x++) { - outputStream.writeNamedTag("Schematic", schematicTag); + for (int y = 0; y < height; y++) + { + for (int z = 0; z < length; z++) + { + int index = y * width * length + z * width + x; + BlockVector bv = new BlockVector(x, y, z); + + //Save 4096 IDs in an AddBlocks section + if (sBlocks[index] > 255) + { + if (addBlocks == null) // Lazily create section + { + addBlocks = new byte[(blocks.length >> 1) + 1]; + } + + addBlocks[index >> 1] = (byte) (((index & 1) == 0) ? + addBlocks[index >> 1] & 0xF0 | (sBlocks[index] >> 8) & 0xF + : addBlocks[index >> 1] & 0xF | ((sBlocks[index] >> 8) & 0xF) << 4); + } + + blocks[index] = (byte) sBlocks[index]; + + if (sTileEntities.get(bv) != null) + { + Map values = new HashMap<>(sTileEntities.get(bv)); + values.put("x", new IntTag(x)); + values.put("y", new IntTag(y)); + values.put("z", new IntTag(z)); + + CompoundTag tileEntityTag = new CompoundTag(values); + tileEntities.add(tileEntityTag); + } + } + } + } + + map.put("Blocks", new ByteArrayTag(blocks)); + map.put("Data", new ByteArrayTag(blockData)); + map.put("TileEntities", new ListTag(CompoundTag.class, tileEntities)); + + if (addBlocks != null) + { + map.put("AddBlocks", new ByteArrayTag(addBlocks)); + } + + // ==================================================================== + // Entities + // ==================================================================== + + List entities = schematic.getEntities(); + + map.put("Entities", new ListTag(CompoundTag.class, entities)); + + // ==================================================================== + // Output + // ==================================================================== + + CompoundTag schematicTag = new CompoundTag(map); + + try (NBTOutputStream outputStream = new NBTOutputStream(new GZIPOutputStream(output))) + { + outputStream.writeNamedTag("Schematic", schematicTag); } catch (IOException e) { e.printStackTrace(); } } - + public static Schematic createSchematic(Location locA, Location locB) { return createSchematic(locA, locB, null); } - + public static Schematic createSchematic(Location locA, Location locB, Vector worldEditOffset) { World world = locA.getWorld(); - + Vector min = Vector.getMinimum(locA.toVector(), locB.toVector()); Vector max = Vector.getMaximum(locB.toVector(), locA.toVector()); - + short width = (short) (max.getBlockX()-min.getBlockX()); short height = (short) (max.getBlockY()-min.getBlockY()); short length = (short) (max.getBlockZ()-min.getBlockZ()); - + short[] blocks = new short[width*height*length]; byte[] blocksData = new byte[blocks.length]; - + WorldServer nmsWorld = ((CraftWorld)world).getHandle(); - + Map> tileEntities = new HashMap<>(); - + for(int x = min.getBlockX(); x < max.getBlockX(); x++) { for(int y = min.getBlockY(); y < max.getBlockY(); y++) @@ -304,68 +311,67 @@ public class UtilSchematic int localX = x-min.getBlockX(); int localY = y-min.getBlockY(); int localZ = z-min.getBlockZ(); - + Block b = world.getBlockAt(x, y, z); - + int index = localY * width * length + localZ * width + localX; - + blocks[index] = (short) b.getTypeId(); blocksData[index] = b.getData(); - + BlockPosition bp = new BlockPosition(x, y, z); - + TileEntity tileEntity = nmsWorld.getTileEntity(bp); if(tileEntity == null) continue; - + NBTTagCompound nmsTag = new NBTTagCompound(); tileEntity.b(nmsTag); - + nmsTag.set("x", new NBTTagInt(localX)); nmsTag.set("y", new NBTTagInt(localY)); nmsTag.set("z", new NBTTagInt(localZ)); - + CompoundTag tag = NBTUtils.fromNative(nmsTag); - + tileEntities.put(new BlockVector(localX, localY, localZ), tag.getValue()); } } } - + List entities = new ArrayList<>(); - for(Entity e : world.getEntities()) + for (Entity e : world.getEntities()) { - if(e instanceof Player) continue; - - if(e.getLocation().toVector().isInAABB(min, max)) + if (e instanceof Player) continue; + + if (e.getLocation().toVector().isInAABB(min, max)) { net.minecraft.server.v1_8_R3.Entity nmsEntity = ((CraftEntity)e).getHandle(); - + NBTTagCompound nmsTag = new NBTTagCompound(); - + nmsEntity.c(nmsTag); - + Vector diff = e.getLocation().subtract(min).toVector(); setPosition(nmsTag, diff); - + nmsTag.remove("UUID"); nmsTag.remove("UUIDMost"); nmsTag.remove("UUIDLeast"); - + CompoundTag tag = NBTUtils.fromNative(nmsTag); entities.add(tag); } } - + return new Schematic(width, height, length, blocks, blocksData, worldEditOffset, tileEntities, entities); } - private static T getChildTag(Map items, String key, Class expected) { Tag tag = items.get(key); return expected.cast(tag); } - + public static void setPosition(NBTTagCompound nbtTag, Vector pos) { nbtTag.set("Pos", NBTUtils.doubleArrayToList(pos.getX(), pos.getY(), pos.getZ())); @@ -378,4 +384,4 @@ public class UtilSchematic Schematic m = UtilSchematic.loadSchematic(file); System.out.println(m); } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java index 334549908..c02db3d08 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java @@ -95,6 +95,10 @@ public class UtilEnt public static boolean hasFlag(Entity entity, String flag) { + if (entity == null) + { + return false; + } return entity.hasMetadata("flag:" + flag); } @@ -1058,5 +1062,4 @@ public class UtilEnt { return ((CraftEntity) entity).getHandle().inWater; } - -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/punish/UI/PunishPage.java b/Plugins/Mineplex.Core/src/mineplex/core/punish/UI/PunishPage.java index 8f7868edd..44ff2a993 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/punish/UI/PunishPage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/punish/UI/PunishPage.java @@ -156,7 +156,8 @@ public abstract class PunishPage extends ShopPageBase if ((punishment.GetHours() < 0 || punishment.GetRemaining() > 0) && !punishment.GetRemoved() && punishment.GetActive()) { - addButton(slot, itemStack, (p, c) -> { + addButton(slot, itemStack, (p, c) -> + { if (getPlugin().GetClients().Get(getPlayer()).hasPermission(Punish.Perm.BYPASS_REMOVE_CONFIRMATION)) { removePunishment(punishment); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/punish/clans/command/ClansBanCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/punish/clans/command/ClansBanCommand.java index 17eeea976..c8d25dd9d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/punish/clans/command/ClansBanCommand.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/punish/clans/command/ClansBanCommand.java @@ -12,7 +12,7 @@ public class ClansBanCommand extends CommandBase { public ClansBanCommand(ClansBanManager plugin) { - super(plugin, ClansBanManager.Perm.PUNISHMENT_COMMAND, "cbans", "cb", "cban", "cp", "cpunish", "clanspunish", "clanpunish"); + super(plugin, ClansBanManager.Perm.PUNISHMENT_COMMAND, "cb"); } @Override diff --git a/Plugins/Mineplex.Core/src/mineplex/core/punish/clans/ui/ClansBanPage.java b/Plugins/Mineplex.Core/src/mineplex/core/punish/clans/ui/ClansBanPage.java index c54ccaeee..cf4e187d5 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/punish/clans/ui/ClansBanPage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/punish/clans/ui/ClansBanPage.java @@ -15,6 +15,9 @@ import mineplex.core.punish.clans.ClansBan; import mineplex.core.punish.clans.ClansBanClient; import mineplex.core.punish.clans.ClansBanManager; import mineplex.core.shop.page.ShopPageBase; +import mineplex.core.slack.SlackAPI; +import mineplex.core.slack.SlackMessage; +import mineplex.core.slack.SlackTeam; public class ClansBanPage extends ShopPageBase { @@ -129,8 +132,11 @@ public class ClansBanPage extends ShopPageBase { getPlugin().unban(_victimClient, ban, getPlayer().getName(), _reason, () -> { - refresh(); playAcceptSound(player); + SlackAPI.getInstance().sendMessage(SlackTeam.DEVELOPER, "#clans-commandspy", + new SlackMessage("Clans Command Logger", "crossed_swords", getPlayer().getName() + " has removed a blacklist from " + _victimName + " for " + _reason + "."), + true); + refresh(); }); } }); @@ -149,6 +155,9 @@ public class ClansBanPage extends ShopPageBase if (ban.isPresent()) { playAcceptSound(getPlayer()); + SlackAPI.getInstance().sendMessage(SlackTeam.DEVELOPER, "#clans-commandspy", + new SlackMessage("Clans Command Logger", "crossed_swords", getPlayer().getName() + " has blacklisted " + _victimName + " for " + _reason + ". Duration: " + UtilTime.MakeStr(_time)), + true); refresh(); } else diff --git a/Plugins/Mineplex.Core/src/mineplex/core/shop/confirmation/ConfirmationPage.java b/Plugins/Mineplex.Core/src/mineplex/core/shop/confirmation/ConfirmationPage.java index 89e252f2f..9b096b118 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/shop/confirmation/ConfirmationPage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/shop/confirmation/ConfirmationPage.java @@ -78,7 +78,9 @@ public class ConfirmationPage " + C.mBody + "You do not have permission to do that."); return; } + + StringBuilder cmd = new StringBuilder("/c"); + for (String a : args) + { + cmd.append(" ").append(a); + } + for (int i = 0; i < cmd.length(); i++) + { + if (cmd.charAt(i) == '`') + { + cmd.setCharAt(i, '\''); + } + } + SlackAPI.getInstance().sendMessage(SlackTeam.DEVELOPER, "#clans-commandspy", + new SlackMessage("Clans Command Logger", "crossed_swords", caller.getName() + " has issued command `" + cmd.toString() + "` on " + UtilServer.getServerName() + "."), + true); if (args.length == 1) help(caller); 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 154791b34..a18fd9f90 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 @@ -361,7 +361,7 @@ public class ClansGame extends MiniPlugin { if (_clans.getWarManager().isBeingBesiegedBy(_clans.getClanUtility().getOwner(event.getBlock().getLocation()), _clans.getClan(event.getPlayer()))) { - if (event.getBlock().getType() == Material.CHEST) + if (event.getBlock().getType() == Material.CHEST || event.getBlock().getType() == Material.DISPENSER || event.getBlock().getType() == Material.DROPPER || event.getBlock().getType() == Material.FURNACE || event.getBlock().getType() == Material.BURNING_FURNACE) { return; } @@ -404,7 +404,7 @@ public class ClansGame extends MiniPlugin @EventHandler public void respawn(PlayerRespawnEvent event) { - //_clans.getItemMapManager().setMap(event.getPlayer()); + _clans.getItemMapManager().setMap(event.getPlayer()); } @EventHandler(priority = EventPriority.LOW) @@ -449,7 +449,7 @@ public class ClansGame extends MiniPlugin { if (_clans.getWarManager().isBeingBesiegedBy(_clans.getClanUtility().getOwner(loc), _clans.getClan(player))) { - if (loc.getBlock().getType() == Material.CHEST) + if (loc.getBlock().getType() == Material.CHEST || loc.getBlock().getType() == Material.DISPENSER || loc.getBlock().getType() == Material.DROPPER || loc.getBlock().getType() == Material.FURNACE || loc.getBlock().getType() == Material.BURNING_FURNACE) { return; } 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 90d8e0214..6834ed751 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 @@ -103,6 +103,7 @@ import mineplex.game.clans.clans.commands.ClansAllyChatCommand; import mineplex.game.clans.clans.commands.ClansChatCommand; import mineplex.game.clans.clans.commands.ClansCommand; import mineplex.game.clans.clans.commands.KillCommand; +import mineplex.game.clans.clans.commands.MapCommand; import mineplex.game.clans.clans.commands.RegionsCommand; import mineplex.game.clans.clans.commands.SpeedCommand; import mineplex.game.clans.clans.data.PlayerClan; @@ -110,6 +111,7 @@ import mineplex.game.clans.clans.event.ClansPlayerDeathEvent; import mineplex.game.clans.clans.gui.ClanShop; import mineplex.game.clans.clans.invsee.InvseeManager; import mineplex.game.clans.clans.loot.LootManager; +import mineplex.game.clans.clans.map.ItemMapManager; import mineplex.game.clans.clans.moderation.antialt.AltManager; import mineplex.game.clans.clans.mounts.MountManager; import mineplex.game.clans.clans.nameblacklist.ClansBlacklist; @@ -242,7 +244,7 @@ public class ClansManager extends MiniClientPlugin implements IRelat private ProjectileManager _projectileManager; private WorldEventManager _worldEvent; private Chat _chat; -// private ItemMapManager _itemMapManager; + private ItemMapManager _itemMapManager; private DisguiseManager _disguiseManager; private NpcManager _npcManager; private Explosion _explosion; @@ -328,7 +330,7 @@ public class ClansManager extends MiniClientPlugin implements IRelat _clanGame = new ClansGame(plugin, this); _clanUtility = new ClansUtility(this); _tutorial = new TutorialManager(plugin, clientManager, donationManager, chat, hologramManager, this, _npcManager, _taskManager); -// _itemMapManager = new ItemMapManager(this, _tutorial, _worldEvent); + _itemMapManager = new ItemMapManager(this, _tutorial, _worldEvent); new TntGeneratorManager(plugin, this); new SupplyDropManager(plugin); @@ -442,6 +444,7 @@ public class ClansManager extends MiniClientPlugin implements IRelat _scoreboard = new ClansScoreboardManager(plugin, this, _warManager, _worldEvent, _tutorial, clientManager, donationManager); _clanDataAccess = new ClansDataAccessLayer(this, _scoreboard); + new HelmetPacketManager(); _bannerManager = new BannerManager(plugin); _goldManager = new GoldManager(this, _clientManager, donationManager, _clanDataAccess); @@ -566,7 +569,7 @@ public class ClansManager extends MiniClientPlugin implements IRelat addCommand(new RegionsCommand(this)); addCommand(new ClansChatCommand(this)); addCommand(new ClansAllyChatCommand(this)); -// addCommand(new MapCommand(this)); + addCommand(new MapCommand(this)); addCommand(new SpeedCommand(this)); addCommand(new KillCommand(this)); } @@ -635,10 +638,10 @@ public class ClansManager extends MiniClientPlugin implements IRelat return _inventoryManager; } -// public ItemMapManager getItemMapManager() -// { -// return _itemMapManager; -// } + public ItemMapManager getItemMapManager() + { + return _itemMapManager; + } public Explosion getExplosion() { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java index 247f6caa9..d255fefc2 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java @@ -977,11 +977,18 @@ public class ClansUtility } ClansPlayer self = clan.getMembers().get(caller.getUniqueId()); + + if (self.getRole().ordinal() < ClanRole.ADMIN.ordinal()) + { + UtilPlayer.message(caller, F.main("Clans", "Only Clan Admins and Leaders can promote others.")); + return; + } + ClansPlayer target = clan.getClansPlayerFromName(other); if (target == null) return; - if (target.equals(caller.getName())) + if (target.getPlayerName().equals(caller.getName())) { UtilPlayer.message(caller, F.main("Clans", "You cannot promote yourself.")); return; @@ -1029,11 +1036,18 @@ public class ClansUtility } ClansPlayer self = clan.getMembers().get(caller.getUniqueId()); + + if (self.getRole().ordinal() < ClanRole.ADMIN.ordinal()) + { + UtilPlayer.message(caller, F.main("Clans", "Only Clan Admins and Leaders can demote others.")); + return; + } + ClansPlayer target = clan.getClansPlayerFromName(other); if (target == null) return; - if (target.equals(caller.getName())) + if (target.getPlayerName().equals(caller.getName())) { UtilPlayer.message(caller, F.main("Clans", "You cannot demote yourself.")); return; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/HelmetPacketManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/HelmetPacketManager.java new file mode 100644 index 000000000..88069707e --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/HelmetPacketManager.java @@ -0,0 +1,124 @@ +package mineplex.game.clans.clans; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.packethandler.IPacketHandler; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntityEquipment; +import net.minecraft.server.v1_8_R3.PacketPlayOutSetSlot; + +/** + * Handler for custom helmet display packets + */ +public class HelmetPacketManager implements Listener +{ + private static final net.minecraft.server.v1_8_R3.ItemStack MELON = CraftItemStack.asNMSCopy(new ItemStack(Material.MELON_BLOCK)); + private Field _itemField; + private static HelmetPacketManager Instance; + private final Map _handlers = new HashMap<>(); + + public HelmetPacketManager() + { + try + { + _itemField = PacketPlayOutSetSlot.class.getDeclaredField("c"); + _itemField.setAccessible(true); + + Bukkit.getPluginManager().registerEvents(this, ClansManager.getInstance().getPlugin()); + } + catch (Exception e) + { + e.printStackTrace(); + } + + Instance = this; + } + + /** + * Fetches the registered loaded instance of this class + * @return The loaded instance of this class + */ + public static HelmetPacketManager getInstance() + { + return Instance; + } + + /** + * Sends a player helmet update to all other players + * @param player The player to update for + * @param banner The helmet to display, or null to show the player's actual helmet + */ + public void refreshToAll(Player player, ItemStack item) + { + ItemStack show = item; + + if (show == null) + { + show = new ItemStack(Material.AIR); + if (player.getInventory().getHelmet() != null) + { + show = player.getInventory().getHelmet(); + } + } + + for (Player refresh : Bukkit.getOnlinePlayers()) + { + UtilPlayer.sendPacket(refresh, new PacketPlayOutEntityEquipment(player.getEntityId(), 4, CraftItemStack.asNMSCopy(item))); + } + } + + @EventHandler + public void onJoin(PlayerJoinEvent event) + { + Player player = event.getPlayer(); + IPacketHandler helmetHandler = (packetInfo) -> + { + if (packetInfo.getPacket() instanceof PacketPlayOutEntityEquipment) + { + PacketPlayOutEntityEquipment equip = (PacketPlayOutEntityEquipment) packetInfo.getPacket(); + + if (equip.a == player.getEntityId() && equip.b == 4) + { + ItemStack banner = UtilEnt.GetMetadata(player, "HelmetPacket.Banner"); + boolean melon = UtilEnt.hasFlag(player.getVehicle(), "HelmetPacket.RiderMelon"); + + if (banner != null) + { + equip.c = CraftItemStack.asNMSCopy(banner); + return; + } + if (melon) + { + equip.c = MELON; + return; + } + } + } + }; + + _handlers.put(event.getPlayer(), helmetHandler); + ClansManager.getInstance().getPacketHandler().addPacketHandler(helmetHandler, PacketPlayOutEntityEquipment.class); + } + + @EventHandler + public void onQuit(PlayerQuitEvent event) + { + if (_handlers.containsKey(event.getPlayer())) + { + ClansManager.getInstance().getPacketHandler().removePacketHandler(_handlers.remove(event.getPlayer())); + } + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/banners/BannerManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/banners/BannerManager.java index c1920a2a2..03feccf07 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/banners/BannerManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/banners/BannerManager.java @@ -3,8 +3,6 @@ package mineplex.game.clans.clans.banners; import java.util.HashMap; import java.util.Map; -import net.minecraft.server.v1_8_R3.MinecraftServer; - import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.Banner; @@ -36,6 +34,7 @@ import mineplex.game.clans.clans.ClanInfo; import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.clans.banners.command.BannerCommand; import mineplex.game.clans.core.repository.ClanTerritory; +import net.minecraft.server.v1_8_R3.MinecraftServer; /** * Manager class for cosmetic clans banners @@ -57,7 +56,6 @@ public class BannerManager extends MiniPlugin super("Clan Banners", plugin); _repo = new BannerRepository(plugin, this); - new BannerPacketManager(); addCommand(new BannerCommand(this)); generatePermissions(); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/banners/BannerPacketManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/banners/BannerPacketManager.java deleted file mode 100644 index 43121fea0..000000000 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/banners/BannerPacketManager.java +++ /dev/null @@ -1,113 +0,0 @@ -package mineplex.game.clans.clans.banners; - -import java.lang.reflect.Field; -import java.util.HashMap; - -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.packethandler.IPacketHandler; -import mineplex.core.packethandler.PacketInfo; -import mineplex.game.clans.clans.ClansManager; -import net.minecraft.server.v1_8_R3.PacketPlayOutEntityEquipment; -import net.minecraft.server.v1_8_R3.PacketPlayOutSetSlot; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; - -/** - * Handler for banner wearing packets - */ -public class BannerPacketManager implements Listener -{ - private Field _itemField; - private static BannerPacketManager Instance; - private final HashMap _wearing = new HashMap<>(); - - public BannerPacketManager() - { - try - { - _itemField = PacketPlayOutSetSlot.class.getDeclaredField("c"); - _itemField.setAccessible(true); - - Bukkit.getPluginManager().registerEvents(this, ClansManager.getInstance().getPlugin()); - } - catch (Exception e) - { - e.printStackTrace(); - } - - Instance = this; - } - - /** - * Fetches the registered loaded instance of this class - * @return The loaded instance of this class - */ - public static BannerPacketManager getInstance() - { - return Instance; - } - - /** - * Toggles a player wearing their clan's banner - * @param player The player to toggle for - * @param banner The banner to toggle - */ - public void toggleBanner(Player player, ItemStack banner) - { - if (_wearing.containsKey(player)) - { - IPacketHandler bannerHandler = _wearing.remove(player); - ClansManager.getInstance().getPacketHandler().removePacketHandler(bannerHandler); - for (Player refresh : Bukkit.getOnlinePlayers()) - { - ItemStack helmet = new ItemStack(Material.AIR); - if (player.getInventory().getHelmet() != null) - { - helmet = player.getInventory().getHelmet(); - } - UtilPlayer.sendPacket(refresh, new PacketPlayOutEntityEquipment(player.getEntityId(), 4, CraftItemStack.asNMSCopy(helmet))); - } - } - else - { - IPacketHandler bannerHandler = new IPacketHandler() - { - @Override - public void handle(PacketInfo packetInfo) - { - if (packetInfo.getPacket() instanceof PacketPlayOutEntityEquipment) - { - PacketPlayOutEntityEquipment equip = (PacketPlayOutEntityEquipment) packetInfo.getPacket(); - - if (equip.a == player.getEntityId() && equip.b == 4) - { - equip.c = CraftItemStack.asNMSCopy(banner); - } - } - } - }; - _wearing.put(player, bannerHandler); - ClansManager.getInstance().getPacketHandler().addPacketHandler(bannerHandler, PacketPlayOutEntityEquipment.class); - for (Player refresh : Bukkit.getOnlinePlayers()) - { - UtilPlayer.sendPacket(refresh, new PacketPlayOutEntityEquipment(player.getEntityId(), 4, CraftItemStack.asNMSCopy(banner))); - } - } - } - - @EventHandler - public void onQuit(PlayerQuitEvent event) - { - if (_wearing.containsKey(event.getPlayer())) - { - ClansManager.getInstance().getPacketHandler().removePacketHandler(_wearing.remove(event.getPlayer())); - } - } -} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/banners/gui/nonedit/NonEditOverviewGUI.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/banners/gui/nonedit/NonEditOverviewGUI.java index b7862d8ee..812236bcf 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/banners/gui/nonedit/NonEditOverviewGUI.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/banners/gui/nonedit/NonEditOverviewGUI.java @@ -4,11 +4,12 @@ import java.util.Arrays; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilPlayer; import mineplex.core.itemstack.ItemBuilder; import mineplex.game.clans.clans.ClanRole; import mineplex.game.clans.clans.ClansManager; -import mineplex.game.clans.clans.banners.BannerPacketManager; +import mineplex.game.clans.clans.HelmetPacketManager; import mineplex.game.clans.clans.banners.ClanBanner; import mineplex.game.clans.clans.banners.gui.BannerGUI; import mineplex.game.clans.clans.banners.gui.overview.OverviewGUI; @@ -59,8 +60,19 @@ public class NonEditOverviewGUI extends BannerGUI { if (type == ClickType.LEFT) { - BannerPacketManager.getInstance().toggleBanner(getViewer(), _banner.getBanner()); - UtilPlayer.message(getViewer(), F.main("Clan Banners", "You have toggled your banner!")); + if (UtilEnt.GetMetadata(getViewer(), "HelmetPacket.Banner") != null) + { + UtilEnt.removeMetadata(getViewer(), "HelmetPacket.Banner"); + HelmetPacketManager.getInstance().refreshToAll(getViewer(), null); + UtilPlayer.message(getViewer(), F.main("Clan Banners", "You have removed your banner!")); + } + else + { + ItemStack banner = _banner.getBanner(); + UtilEnt.SetMetadata(getViewer(), "HelmetPacket.Banner", banner); + HelmetPacketManager.getInstance().refreshToAll(getViewer(), banner); + UtilPlayer.message(getViewer(), F.main("Clan Banners", "You have donned your banner!")); + } } else if (type == ClickType.RIGHT) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/boxes/BoxManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/boxes/BoxManager.java index 63e002e34..9c77b83b3 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/boxes/BoxManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/boxes/BoxManager.java @@ -19,11 +19,10 @@ import mineplex.core.Managers; import mineplex.core.MiniPlugin; import mineplex.core.common.util.C; import mineplex.core.itemstack.ItemBuilder; -import mineplex.game.clans.clans.boxes.extra.BuilderBoxInventory; +import mineplex.game.clans.clans.boxes.extra.BuilderBox; public class BoxManager extends MiniPlugin { - private final BuilderBoxInventory _builderBox; private final BoxShop _shop; public BoxManager(JavaPlugin plugin) @@ -31,8 +30,6 @@ public class BoxManager extends MiniPlugin super("Box Manager", plugin); _shop = new BoxShop(this); - - _builderBox = new BuilderBoxInventory(); } public void openDyePage(Player player) @@ -163,7 +160,7 @@ public class BoxManager extends MiniPlugin public static enum BoxType { - BUILDER_BOX("Clans Builder Box", C.cGold + "Builder's Box", Material.GLOWSTONE, Managers.get(BoxManager.class)._builderBox::open), + BUILDER_BOX("Clans Builder Box", C.cGold + "Builder's Box", Material.GLOWSTONE, BuilderBox::open), @SuppressWarnings("deprecation") DYE_BOX(null, C.cGreen + "Dye Box", Material.INK_SACK, DyeColor.RED.getDyeData(), Managers.get(BoxManager.class)::openDyePage), ; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/boxes/extra/BuilderBox.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/boxes/extra/BuilderBox.java new file mode 100644 index 000000000..8fc831ca1 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/boxes/extra/BuilderBox.java @@ -0,0 +1,106 @@ +package mineplex.game.clans.clans.boxes.extra; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.common.Pair; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.itemstack.ItemBuilder; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.boxes.BoxManager.BoxType; + +public class BuilderBox +{ + private static final Map, ItemStack> REPLACEMENT_ITEMS; + + static + { + Map, ItemStack> replacements = new HashMap<>(); + replacements.put(Pair.create(Material.STONE, (byte)0), new ItemStack(Material.STAINED_CLAY)); + replacements.put(Pair.create(Material.GLASS, (byte)0), new ItemStack(Material.STAINED_GLASS)); + replacements.put(Pair.create(Material.THIN_GLASS, (byte)0), new ItemStack(Material.STAINED_GLASS_PANE)); + replacements.put(Pair.create(Material.WOOL, (byte)0), new ItemStack(Material.WOOL)); + replacements.put(Pair.create(Material.CARPET, (byte)0), new ItemStack(Material.CARPET)); + replacements.put(Pair.create(Material.RED_ROSE, (byte)0), new ItemStack(Material.RED_ROSE)); + replacements.put(Pair.create(Material.RED_ROSE, (byte)1), new ItemStack(Material.RED_ROSE)); + replacements.put(Pair.create(Material.RED_ROSE, (byte)2), new ItemStack(Material.RED_ROSE)); + replacements.put(Pair.create(Material.RED_ROSE, (byte)3), new ItemStack(Material.RED_ROSE)); + replacements.put(Pair.create(Material.RED_ROSE, (byte)4), new ItemStack(Material.RED_ROSE)); + replacements.put(Pair.create(Material.RED_ROSE, (byte)5), new ItemStack(Material.RED_ROSE)); + replacements.put(Pair.create(Material.RED_ROSE, (byte)6), new ItemStack(Material.RED_ROSE)); + replacements.put(Pair.create(Material.RED_ROSE, (byte)7), new ItemStack(Material.RED_ROSE)); + replacements.put(Pair.create(Material.RED_ROSE, (byte)8), new ItemStack(Material.RED_ROSE)); + replacements.put(Pair.create(Material.COBBLE_WALL, (byte)0), new ItemStack(Material.COBBLE_WALL)); + replacements.put(Pair.create(Material.JACK_O_LANTERN, (byte)0), new ItemStack(Material.GLOWSTONE)); + replacements.put(Pair.create(Material.SMOOTH_BRICK, (byte)0), new ItemStack(Material.SMOOTH_BRICK)); + + REPLACEMENT_ITEMS = Collections.unmodifiableMap(replacements); + } + + @SuppressWarnings("deprecation") + private static ItemStack convert(ItemStack old) + { + if (old == null) + { + return null; + } + Pair pair = Pair.create(old.getType(), old.getData().getData()); + if (!REPLACEMENT_ITEMS.containsKey(pair)) + { + return null; + } + ItemBuilder after = new ItemBuilder(REPLACEMENT_ITEMS.get(pair)); + if (after.getType() == Material.RED_ROSE) + { + after.setData((short)UtilMath.r(9)); + } + else if (after.getType() == Material.COBBLE_WALL) + { + after.setData((short)1); + } + else if (after.getType() == Material.GLOWSTONE) + { + after.setData((short)0); + } + else if (after.getType() == Material.SMOOTH_BRICK) + { + after.setData(UtilMath.randomElement(new Short[] {1, 3})); + } + else + { + after.setData(UtilMath.randomElement(DyeColor.values()).getWoolData()); + } + after.setAmount(old.getAmount()); + + return after.build(); + } + + public static void open(Player player) + { + boolean used = false; + for (int i = 0; i < player.getInventory().getSize(); i++) + { + ItemStack converted = convert(player.getInventory().getItem(i)); + if (converted == null) + { + continue; + } + used = true; + player.getInventory().setItem(i, converted); + } + + if (used) + { + ClansManager.getInstance().getInventoryManager().addItemToInventory(player, BoxType.BUILDER_BOX.getItemName(), -1); + UtilPlayer.message(player, F.main("Builder's Box", "You have redeemed your box contents!")); + } + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/boxes/extra/BuilderBoxInventory.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/boxes/extra/BuilderBoxInventory.java deleted file mode 100644 index e45db862a..000000000 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/boxes/extra/BuilderBoxInventory.java +++ /dev/null @@ -1,171 +0,0 @@ -package mineplex.game.clans.clans.boxes.extra; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import org.bukkit.Bukkit; -import org.bukkit.DyeColor; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryCloseEvent; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryView; -import org.bukkit.inventory.ItemStack; - -import mineplex.core.common.Pair; -import mineplex.core.common.util.C; -import mineplex.core.common.util.F; -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.game.clans.clans.ClansManager; -import mineplex.game.clans.clans.boxes.BoxManager.BoxType; - -public class BuilderBoxInventory implements Listener -{ - private Map, ItemStack> _replace = new HashMap<>(); - - public BuilderBoxInventory() - { - _replace.put(Pair.create(Material.STONE, (byte)0), new ItemStack(Material.STAINED_CLAY)); - _replace.put(Pair.create(Material.GLASS, (byte)0), new ItemStack(Material.STAINED_GLASS)); - _replace.put(Pair.create(Material.THIN_GLASS, (byte)0), new ItemStack(Material.STAINED_GLASS_PANE)); - _replace.put(Pair.create(Material.WOOL, (byte)0), new ItemStack(Material.WOOL)); - _replace.put(Pair.create(Material.CARPET, (byte)0), new ItemStack(Material.CARPET)); - _replace.put(Pair.create(Material.RED_ROSE, (byte)0), new ItemStack(Material.RED_ROSE)); - _replace.put(Pair.create(Material.RED_ROSE, (byte)1), new ItemStack(Material.RED_ROSE)); - _replace.put(Pair.create(Material.RED_ROSE, (byte)2), new ItemStack(Material.RED_ROSE)); - _replace.put(Pair.create(Material.RED_ROSE, (byte)3), new ItemStack(Material.RED_ROSE)); - _replace.put(Pair.create(Material.RED_ROSE, (byte)4), new ItemStack(Material.RED_ROSE)); - _replace.put(Pair.create(Material.RED_ROSE, (byte)5), new ItemStack(Material.RED_ROSE)); - _replace.put(Pair.create(Material.RED_ROSE, (byte)6), new ItemStack(Material.RED_ROSE)); - _replace.put(Pair.create(Material.RED_ROSE, (byte)7), new ItemStack(Material.RED_ROSE)); - _replace.put(Pair.create(Material.RED_ROSE, (byte)8), new ItemStack(Material.RED_ROSE)); - _replace.put(Pair.create(Material.COBBLE_WALL, (byte)0), new ItemStack(Material.COBBLE_WALL)); - _replace.put(Pair.create(Material.JACK_O_LANTERN, (byte)0), new ItemStack(Material.GLOWSTONE)); - _replace.put(Pair.create(Material.SMOOTH_BRICK, (byte)0), new ItemStack(Material.SMOOTH_BRICK)); - - UtilServer.RegisterEvents(this); - } - - @SuppressWarnings("deprecation") - private Pair convert(ItemStack old) - { - if (old == null) - { - return Pair.create(old, false); - } - Pair pair = Pair.create(old.getType(), old.getData().getData()); - if (!_replace.containsKey(pair)) - { - return Pair.create(old, false); - } - ItemBuilder after = new ItemBuilder(_replace.get(pair)); - if (after.getType() == Material.RED_ROSE) - { - after.setData((short)UtilMath.r(9)); - } - else if (after.getType() == Material.COBBLE_WALL) - { - after.setData((short)1); - } - else if (after.getType() == Material.GLOWSTONE) - { - after.setData((short)0); - } - else if (after.getType() == Material.SMOOTH_BRICK) - { - after.setData(UtilMath.randomElement(new Short[] {1, 3}).shortValue()); - } - else - { - after.setData(UtilMath.randomElement(DyeColor.values()).getWoolData()); - } - after.setAmount(old.getAmount()); - - return Pair.create(after.build(), true); - } - - @SuppressWarnings("deprecation") - public void open(Player player) - { - Inventory newInv = Bukkit.createInventory(player, 27, "Builder's Box"); - ItemStack border = new ItemBuilder(Material.STAINED_GLASS_PANE).setData((short)DyeColor.GRAY.getWoolData()).setTitle(C.cRed + " ").build(); - ItemStack button = new ItemBuilder(Material.STAINED_GLASS_PANE).setData((short)DyeColor.LIME.getWoolData()).setTitle(C.cGreenB + "Convert").build(); - for (int i = 0; i < 27; i++) - { - if (i == 22) - { - newInv.setItem(i, button); - continue; - } - if (i < 9 || i > 17) - { - newInv.setItem(i, border); - } - } - player.openInventory(newInv); - } - - @EventHandler - public void onClose(InventoryCloseEvent event) - { - InventoryView view = event.getView(); - if (view.getTopInventory() != null) - { - Inventory top = view.getTopInventory(); - if (top.getTitle().equals("Builder's Box")) - { - List items = new ArrayList<>(); - for (int i = 9; i < 18; i++) - { - items.add(top.getItem(i)); - } - if (items != null && !items.isEmpty()); - { - int totalChanged = 0; - for (Pair pair : items.stream().map(this::convert).collect(Collectors.toList())) - { - if (pair.getLeft() == null) - { - continue; - } - if (pair.getRight()) - { - totalChanged++; - } - event.getPlayer().getInventory().addItem(pair.getLeft()); - } - if (totalChanged > 0) - { - ClansManager.getInstance().getInventoryManager().addItemToInventory((Player)event.getPlayer(), BoxType.BUILDER_BOX.getItemName(), -1); - UtilPlayer.message(event.getPlayer(), F.main("Builder's Box", "You have redeemed your box contents!")); - } - } - } - } - } - - @EventHandler - public void onClick(InventoryClickEvent event) - { - if (event.getClickedInventory() != null && event.getClickedInventory().getTitle().equals("Builder's Box")) - { - if (event.getSlot() < 9 || event.getSlot() > 17) - { - event.setCancelled(true); - } - if (event.getSlot() == 22) - { - event.getWhoClicked().closeInventory(); - } - } - } -} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/cash/CashOverviewPage.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/cash/CashOverviewPage.java index 73d3e3a65..598d6046a 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/cash/CashOverviewPage.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/cash/CashOverviewPage.java @@ -1,18 +1,25 @@ package mineplex.game.clans.clans.cash; +import java.lang.reflect.Field; import java.util.Arrays; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.inventory.Inventory; import mineplex.core.Managers; import mineplex.core.common.skin.SkinData; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; import mineplex.core.inventory.ClientInventory; import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.shop.confirmation.ConfirmationCallback; +import mineplex.core.shop.confirmation.ConfirmationPage; +import mineplex.core.shop.confirmation.ConfirmationProcessor; import mineplex.core.shop.page.ShopPageBase; import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.clans.amplifiers.AmplifierGUI; @@ -83,8 +90,35 @@ public class CashOverviewPage extends ShopPageBase { return; } - player.closeInventory(); - BoxType.BUILDER_BOX.onUse(player); + getShop().openPageForPlayer(player, new ConfirmationPage<>(player, this, new ConfirmationProcessor() + { + @Override + public void init(Inventory inventory) + { + try + { + Field returnPage = ConfirmationPage.class.getDeclaredField("_returnPage"); + returnPage.setAccessible(true); + returnPage.set(inventory, null); + returnPage.setAccessible(false); + } + catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) + { + e.printStackTrace(); + } + } + + @Override + public void process(ConfirmationCallback callback) + { + BoxType.BUILDER_BOX.onUse(player); + callback.resolve("Opening Builder's Box..."); + } + }, SkinData.CLANS_BUILDERS_BOX.getSkull(C.cRed + "Open Builder's Box", UtilText.splitLines(new String[] + { + C.cRed, + C.cRedB + "WARNING: " + C.cWhite + "This will convert all applicable items in your inventory!" + }, LineFormat.LORE)), "Confirm Opening Box")); }); addButton(SUPPLY_BUTTON_SLOT, SkinData.CLANS_GILDED_SUPPLY_DROP.getSkull(C.cRed + "Supply Drop", Arrays.asList( C.cYellow + "Call down Supply Drops to obtain", diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java index aa15b6381..6c70629f5 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java @@ -123,9 +123,6 @@ public class ClansCommand extends CommandBase * else if (args[0].equalsIgnoreCase("enemy") || args[0].equals("e")) * enemy(caller, args); */ - - else if (args[0].equalsIgnoreCase("territory") || args[0].equalsIgnoreCase("t")) - infoTerritory(caller, args); else if (args[0].equalsIgnoreCase("who") || args[0].equalsIgnoreCase("w")) { @@ -1195,33 +1192,4 @@ public class ClansCommand extends CommandBase _clansManager.getClanShop().openClanWho(caller, clan); } - - public void infoTerritory(Player caller, String[] args) - { - ClanInfo clan; - if (args.length < 2) - { - clan = Plugin.getClanUtility().getClanByPlayer(caller); - - if (clan == null) - { - UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); - return; - } - } - - else - clan = Plugin.getClanUtility().searchClan(caller, args[1], true); - - if (clan == null) return; - - if (_clansManager.getNetherManager().isInNether(caller)) - { - _clansManager.message(caller, "You are currently in " + F.clansNether("The Nether") + "."); - - return; - } - - UtilPlayer.message(caller, clan.mTerritory()); - } } \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/MapCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/MapCommand.java index a724dd133..b5f556309 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/MapCommand.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/MapCommand.java @@ -15,6 +15,6 @@ public class MapCommand extends CommandBase @Override public void Execute(Player caller, String[] args) { - //Plugin.getItemMapManager().setMap(caller); + Plugin.getItemMapManager().setMap(caller); } } \ No newline at end of file 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 11857393a..ce6ba2113 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 @@ -77,7 +77,6 @@ public class ClansFreezeManager extends MiniPlugin private void generatePermissions() { - PermissionGroup.CMOD.setPermission(Perm.FREEZE_COMMAND, false, true); PermissionGroup.CMA.setPermission(Perm.FREEZE_COMMAND, false, true); PermissionGroup.ADMIN.setPermission(Perm.FREEZE_COMMAND, true, true); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/invsee/commands/InvseeCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/invsee/commands/InvseeCommand.java index fb2e7d0ce..5af3c6114 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/invsee/commands/InvseeCommand.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/invsee/commands/InvseeCommand.java @@ -16,6 +16,10 @@ import com.mojang.authlib.GameProfile; import mineplex.core.command.CommandBase; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.slack.SlackAPI; +import mineplex.core.slack.SlackMessage; +import mineplex.core.slack.SlackTeam; import mineplex.game.clans.clans.invsee.InvseeManager; public class InvseeCommand extends CommandBase @@ -89,7 +93,10 @@ public class InvseeCommand extends CommandBase UtilPlayer.message(caller, F.main("Invsee", "You cannot use invsee right now. That person is currently using invsee!")); return; } - + + SlackAPI.getInstance().sendMessage(SlackTeam.DEVELOPER, "#clans-commandspy", + new SlackMessage("Clans Command Logger", "crossed_swords", caller.getName() + " has started to invsee " + exactPlayer.getName() + " on " + UtilServer.getServerName() + "."), + true); Plugin.doInvsee(exactPlayer, caller); } } \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/loot/LootManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/loot/LootManager.java index a1a9c641f..23cfc00b2 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/loot/LootManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/loot/LootManager.java @@ -175,53 +175,53 @@ public class LootManager private void populateCapturePoint() { // Food - _capturePointSet.add(5, new ItemLoot(Material.CARROT, 1, 5)); - _capturePointSet.add(5, new ItemLoot(Material.APPLE, 1, 3)); - _capturePointSet.add(5, new ItemLoot(Material.COOKED_BEEF, 1, 3)); - _capturePointSet.add(5, new ItemLoot(Material.RAW_BEEF, 1, 4)); - _capturePointSet.add(5, new ItemLoot(Material.POTATO_ITEM, 1, 5)); - + _capturePointSet.add(5, new ItemLoot(Material.CARROT, 32, 32)); + _capturePointSet.add(5, new ItemLoot(Material.APPLE, 32, 32)); + _capturePointSet.add(5, new ItemLoot(Material.COOKED_BEEF, 32, 32)); + _capturePointSet.add(5, new ItemLoot(Material.RAW_BEEF, 32, 32)); + _capturePointSet.add(5, new ItemLoot(Material.POTATO_ITEM, 32, 32)); + // Armor _capturePointSet.add(3, new ItemLoot(Material.IRON_HELMET, 1, 1)); _capturePointSet.add(3, new ItemLoot(Material.IRON_CHESTPLATE, 1, 1)); _capturePointSet.add(4, new ItemLoot(Material.IRON_LEGGINGS, 1, 1)); _capturePointSet.add(4, new ItemLoot(Material.IRON_BOOTS, 1, 1)); - - _capturePointSet.add(4, new ItemLoot(Material.GOLD_HELMET, 1, 1)); - _capturePointSet.add(4, new ItemLoot(Material.GOLD_CHESTPLATE, 1, 1)); + + _capturePointSet.add(3, new ItemLoot(Material.GOLD_HELMET, 1, 1)); + _capturePointSet.add(3, new ItemLoot(Material.GOLD_CHESTPLATE, 1, 1)); _capturePointSet.add(4, new ItemLoot(Material.GOLD_LEGGINGS, 1, 1)); _capturePointSet.add(4, new ItemLoot(Material.GOLD_BOOTS, 1, 1)); - - _capturePointSet.add(4, new ItemLoot(Material.LEATHER_HELMET, 1, 1)); - _capturePointSet.add(4, new ItemLoot(Material.LEATHER_CHESTPLATE, 1, 1)); + + _capturePointSet.add(3, new ItemLoot(Material.LEATHER_HELMET, 1, 1)); + _capturePointSet.add(3, new ItemLoot(Material.LEATHER_CHESTPLATE, 1, 1)); _capturePointSet.add(4, new ItemLoot(Material.LEATHER_LEGGINGS, 1, 1)); _capturePointSet.add(4, new ItemLoot(Material.LEATHER_BOOTS, 1, 1)); - - _capturePointSet.add(4, new ItemLoot(Material.DIAMOND_HELMET, 1, 1)); - _capturePointSet.add(4, new ItemLoot(Material.DIAMOND_CHESTPLATE, 1, 1)); + + _capturePointSet.add(3, new ItemLoot(Material.DIAMOND_HELMET, 1, 1)); + _capturePointSet.add(3, new ItemLoot(Material.DIAMOND_CHESTPLATE, 1, 1)); _capturePointSet.add(4, new ItemLoot(Material.DIAMOND_LEGGINGS, 1, 1)); _capturePointSet.add(4, new ItemLoot(Material.DIAMOND_BOOTS, 1, 1)); - - _capturePointSet.add(4, new ItemLoot(Material.CHAINMAIL_HELMET, 1, 1)); - _capturePointSet.add(4, new ItemLoot(Material.CHAINMAIL_CHESTPLATE, 1, 1)); + + _capturePointSet.add(3, new ItemLoot(Material.CHAINMAIL_HELMET, 1, 1)); + _capturePointSet.add(3, new ItemLoot(Material.CHAINMAIL_CHESTPLATE, 1, 1)); _capturePointSet.add(4, new ItemLoot(Material.CHAINMAIL_LEGGINGS, 1, 1)); _capturePointSet.add(4, new ItemLoot(Material.CHAINMAIL_BOOTS, 1, 1)); - + _capturePointSet.add(4, new ItemLoot(Material.IRON_AXE, 1, 1)); _capturePointSet.add(4, new ItemLoot(Material.IRON_SWORD, 1, 1)); - - _capturePointSet.add(3, new ItemLoot(Material.EMERALD, 10, 15)); - - _capturePointSet.add(2, new CustomItemLoot(Material.GOLD_SWORD, 1, 1, "Booster Sword")); - _capturePointSet.add(2, new CustomItemLoot(Material.GOLD_AXE, 1, 1, "Booster Axe")); - _capturePointSet.add(2, new CustomItemLoot(Material.DIAMOND_SWORD, 1, 1, "Power Sword")); - _capturePointSet.add(2, new CustomItemLoot(Material.DIAMOND_AXE, 1, 1, "Power Axe")); - + + _capturePointSet.add(4, new ItemLoot(Material.EMERALD, 10, 15)); + + _capturePointSet.add(3, new CustomItemLoot(Material.GOLD_SWORD, 1, 1, "Booster Sword")); + _capturePointSet.add(3, new CustomItemLoot(Material.GOLD_AXE, 1, 1, "Booster Axe")); + _capturePointSet.add(3, new CustomItemLoot(Material.DIAMOND_SWORD, 1, 1, "Power Sword")); + _capturePointSet.add(3, new CustomItemLoot(Material.DIAMOND_AXE, 1, 1, "Power Axe")); + // Gold - _capturePointSet.add(1, new GoldTokenLoot(50000, 50000)); - + _capturePointSet.add(1, new GoldTokenLoot(10000, 50000)); + // Rune - _capturePointSet.add(1, new RuneLoot()); + _capturePointSet.add(2, new RuneLoot()); } public void dropCommon(Location location) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/mounts/Mount.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/mounts/Mount.java index 1d03f2269..59143607c 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/mounts/Mount.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/mounts/Mount.java @@ -5,6 +5,7 @@ import java.util.function.Consumer; import org.bukkit.ChatColor; import org.bukkit.DyeColor; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftHorse; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.entity.EntityType; @@ -26,6 +27,7 @@ import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.particles.ColoredParticle; import mineplex.core.common.util.particles.DustSpellColor; import mineplex.core.disguise.disguises.DisguiseBase; +import mineplex.core.disguise.disguises.DisguiseBlock; import mineplex.core.disguise.disguises.DisguiseCow; import mineplex.core.disguise.disguises.DisguiseSheep; import mineplex.core.itemstack.ItemBuilder; @@ -217,8 +219,9 @@ public class Mount horse.getInventory().setArmor(new ItemBuilder(Material.IRON_BARDING).setTitle(C.cGoldB + "Knightly Armor").build()); }, horse -> { - UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.APPLE, 0), horse.getLocation().add(0, 1, 0), - 0.25f, 0.25f, 0.25f, 0, 3, ViewDist.NORMAL); + ColoredParticle red = new ColoredParticle(UtilParticle.ParticleType.RED_DUST, + new DustSpellColor(java.awt.Color.RED), horse.getLocation().add(0, 1, 0)); + red.display(3); }, MountType.HORSE), COW(8, "Clans Cow Mount Skin", C.cWhite + "Cow", Material.MILK_BUCKET, Color.WHITE, Variant.HORSE, Style.NONE, true, horse -> { @@ -232,7 +235,36 @@ public class Mount disguise.setName(horse.getCustomName()); ClansManager.getInstance().getDisguiseManager().disguise(disguise); }, horse -> {}, MountType.HORSE), - TRUSTY_MULE(10, "Clans Trusty Mule Mount Skin", C.cBlue + "Trusty Mule", Material.APPLE, Color.BROWN, Variant.MULE, Style.NONE, false, horse -> {}, horse -> {}, MountType.DONKEY) + TRUSTY_MULE(10, "Clans Trusty Mule Mount Skin", C.cBlue + "Trusty Mule", Material.APPLE, Color.BROWN, Variant.MULE, Style.NONE, false, horse -> {}, horse -> {}, MountType.DONKEY), + CAKE(11, "Clans Cake Mount Skin", C.cPurple + "Cake", Material.CAKE, Color.WHITE, Variant.HORSE, Style.NONE, true, horse -> + { + DisguiseBlock disguise = new DisguiseBlock(horse, Material.CAKE_BLOCK, 0); + ClansManager.getInstance().getDisguiseManager().disguise(disguise); + }, horse -> + { + ColoredParticle red = new ColoredParticle(UtilParticle.ParticleType.RED_DUST, + new DustSpellColor(java.awt.Color.RED), horse.getLocation().add(0, 1, 0)); + red.display(2); + ColoredParticle white = new ColoredParticle(UtilParticle.ParticleType.RED_DUST, + new DustSpellColor(java.awt.Color.WHITE), horse.getLocation().add(0, 1, 0)); + white.display(3); + + horse.getWorld().playSound(horse.getLocation(), Sound.EAT, 1, 1); + }, MountType.HORSE), + MELON(12, "Clans Power Melon Mount Skin", C.cGreen + "Power Melon", Material.MELON, Color.WHITE, Variant.HORSE, Style.NONE, true, horse -> + { + DisguiseBlock disguise = new DisguiseBlock(horse, Material.MELON_BLOCK, 0); + ClansManager.getInstance().getDisguiseManager().disguise(disguise); + UtilEnt.addFlag(horse, "HelmetPacket.RiderMelon"); + }, horse -> + { + ColoredParticle red = new ColoredParticle(UtilParticle.ParticleType.RED_DUST, + new DustSpellColor(java.awt.Color.RED), horse.getLocation().add(0, 1, 0)); + red.display(2); + ColoredParticle green = new ColoredParticle(UtilParticle.ParticleType.RED_DUST, + new DustSpellColor(java.awt.Color.GREEN), horse.getLocation().add(0, 1, 0)); + green.display(3); + }, MountType.HORSE), ; private final int _id; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/mounts/MountManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/mounts/MountManager.java index 03946bf39..e6ddf1639 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/mounts/MountManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/mounts/MountManager.java @@ -11,6 +11,7 @@ import java.util.UUID; import java.util.WeakHashMap; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftHorse; import org.bukkit.entity.Entity; @@ -27,6 +28,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.world.ChunkUnloadEvent; import org.bukkit.inventory.HorseInventory; +import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; import org.spigotmc.event.entity.EntityDismountEvent; @@ -49,6 +51,7 @@ import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.game.clans.clans.ClanInfo; import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.HelmetPacketManager; import mineplex.game.clans.clans.mounts.Mount.MountType; import mineplex.game.clans.clans.mounts.Mount.SkinType; import mineplex.game.clans.clans.mounts.gui.MountShop; @@ -185,7 +188,6 @@ public class MountManager extends MiniDbClientPlugin private void generatePermissions() { - PermissionGroup.PLAYER.setPermission(Perm.MOUNT_COMMAND, true, true); PermissionGroup.ADMIN.setPermission(Perm.GIVE_MOUNT_COMMAND, true, true); PermissionGroup.ADMIN.setPermission(Perm.MOUNT_SKIN_UNLOCK, true, true); @@ -540,6 +542,10 @@ public class MountManager extends MiniDbClientPlugin } if (mount.getOwner().getEntityId() == event.getPlayer().getEntityId()) { + if (UtilEnt.hasFlag(event.getRightClicked(), "HelmetPacket.RiderMelon")) + { + HelmetPacketManager.getInstance().refreshToAll(event.getPlayer(), new ItemStack(Material.MELON_BLOCK)); + } return; } @@ -562,11 +568,16 @@ public class MountManager extends MiniDbClientPlugin @EventHandler public void onDismount(EntityDismountEvent event) { - if (_spawnedMounts.containsKey(event.getDismounted()) && event.getEntity() instanceof Player) + if (_spawnedMounts.containsKey(event.getEntity()) && event.getDismounted() instanceof Player) { + Player player = (Player) event.getDismounted(); runSyncLater(() -> { - event.getEntity().teleport(event.getDismounted()); + player.teleport(event.getEntity()); + if (UtilEnt.hasFlag(event.getEntity(), "HelmetPacket.RiderMelon")) + { + HelmetPacketManager.getInstance().refreshToAll(player, null); + } }, 1L); } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/mounts/gui/MountSkinPage.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/mounts/gui/MountSkinPage.java index ffddfd313..757fec953 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/mounts/gui/MountSkinPage.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/mounts/gui/MountSkinPage.java @@ -61,7 +61,7 @@ public class MountSkinPage extends ShopPageBase private ItemStack buildResetItem() { - ItemBuilder builder = new ItemBuilder(Material.WATER_BUCKET); + ItemBuilder builder = new ItemBuilder(Material.PAPER); builder.setTitle(C.cYellow + "Default Skin"); if (_token.Skin == null) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/nameblacklist/commands/AddBlacklistCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/nameblacklist/commands/AddBlacklistCommand.java index 80db31eab..f5285de66 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/nameblacklist/commands/AddBlacklistCommand.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/nameblacklist/commands/AddBlacklistCommand.java @@ -6,6 +6,9 @@ import mineplex.core.command.CommandBase; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.slack.SlackAPI; +import mineplex.core.slack.SlackMessage; +import mineplex.core.slack.SlackTeam; import mineplex.game.clans.clans.nameblacklist.ClansBlacklist; public class AddBlacklistCommand extends CommandBase @@ -30,6 +33,9 @@ public class AddBlacklistCommand extends CommandBase { Plugin.getRepository().add(blacklist, caller.getName()); UtilPlayer.message(caller, F.main("Clans", "Successfully added " + F.elem(blacklist) + " to the clan name blacklist.")); + SlackAPI.getInstance().sendMessage(SlackTeam.DEVELOPER, "#clans-commandspy", + new SlackMessage("Clans Command Logger", "crossed_swords", caller.getName() + " has blacklisted the clan name " + blacklist + "."), + true); }); } else diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/nether/NetherManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/nether/NetherManager.java index d155b8642..0464d8567 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/nether/NetherManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/nether/NetherManager.java @@ -41,6 +41,7 @@ import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime.TimeUnit; @@ -494,13 +495,10 @@ public class NetherManager extends MiniPlugin } } -// UtilServer.getPlayersCollection() -// .stream() -// .filter(player -> isInNether(player)) -// .forEach(player -> -// { -// ClansManager.getInstance().getItemMapManager().removeMap(player); -// }); + UtilServer.getPlayersCollection() + .stream() + .filter(player -> isInNether(player)) + .forEach(player -> ClansManager.getInstance().getItemMapManager().removeMap(player)); } } 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 e53c746bb..2971133a6 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 @@ -64,6 +64,7 @@ public class ObserverManager extends MiniPlugin UtilPlayer.clearInventory(player); UtilPlayer.clearPotionEffects(player); player.setGameMode(GameMode.CREATIVE); + ClansManager.getInstance().getGearManager().getPlayerGear(player).updateCache(true); _observerMap.put(player, data); } @@ -200,4 +201,4 @@ public class ObserverManager extends MiniPlugin { addCommand(new ObserverCommand(this)); } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/pvptimer/PvPTimerManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/pvptimer/PvPTimerManager.java index 160b4d1b0..48cc5620c 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/pvptimer/PvPTimerManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/pvptimer/PvPTimerManager.java @@ -3,17 +3,29 @@ package mineplex.game.clans.clans.pvptimer; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; +import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.WeakHashMap; +import java.util.function.BiConsumer; +import java.util.function.Function; import org.apache.commons.io.FileUtils; import org.bukkit.Bukkit; +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.inventory.ItemStack; import mineplex.core.MiniPlugin; import mineplex.core.ReflectivelyCreateMiniPlugin; @@ -21,10 +33,20 @@ import mineplex.core.account.permissions.Permission; import mineplex.core.account.permissions.PermissionGroup; import mineplex.core.command.CommandBase; import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; +import mineplex.core.common.util.UtilWorld; +import mineplex.core.recharge.Recharge; +import mineplex.core.slack.SlackAPI; +import mineplex.core.slack.SlackMessage; +import mineplex.core.slack.SlackTeam; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.core.repository.ClanTerritory; import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -88,6 +110,9 @@ public class PvPTimerManager extends MiniPlugin { disableTimer(target, true, true); UtilPlayer.message(caller, F.main(getName(), F.elem(target.getName()) + " no longer has a PvP Timer!")); + SlackAPI.getInstance().sendMessage(SlackTeam.DEVELOPER, "#clans-commandspy", + new SlackMessage("Clans Command Logger", "crossed_swords", caller.getName() + " has removed " + target.getName() + "'s PvP Timer on " + UtilServer.getServerName() + "."), + true); } else { @@ -184,6 +209,35 @@ public class PvPTimerManager extends MiniPlugin return false; } + @SuppressWarnings("deprecation") + public boolean handleMining(Player player, Block block, boolean playSound) + { + if (!hasTimer(player)) + { + return false; + } + block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId()); + Function, ItemStack[]> converter = (collection) -> + { + ItemStack[] array = new ItemStack[collection.size()]; + int i = 0; + for (ItemStack item : collection) + { + array[i++] = item; + } + return array; + }; + BiConsumer dropper = (integer, item) -> + { + block.getWorld().dropItemNaturally(block.getLocation().add(0.5, 0.3, 0.5), item); + }; + Collection drops = block.getDrops(player.getItemInHand()); + player.getInventory().addItem(converter.apply(drops)).forEach(dropper); + block.setType(Material.AIR); + + return true; + } + @EventHandler public void onJoin(PlayerJoinEvent event) { @@ -244,7 +298,7 @@ public class PvPTimerManager extends MiniPlugin { if (event.GetDamageePlayer() != null) { - if (hasTimer(event.GetDamageePlayer())) + if (hasTimer(event.GetDamageePlayer()) && event.GetDamagerPlayer(true) != null) { UtilPlayer.message(event.GetDamagerPlayer(true), F.main(getName(), "You cannot harm " + F.elem(event.GetDamageePlayer().getName()) + "!")); event.SetCancelled("PvP Timer"); @@ -259,4 +313,66 @@ public class PvPTimerManager extends MiniPlugin } } } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPickup(PlayerPickupItemEvent event) + { + if (hasTimer(event.getPlayer())) + { + event.setCancelled(true); + if (Recharge.Instance.use(event.getPlayer(), "PvP Timer Inform NoPickup", 5000, false, false)) + { + UtilPlayer.message(event.getPlayer(), F.main(getName(), "You cannot pick up items whilst protected from PvP. Run " + F.elem("/pvp") + " to enable PvP!")); + } + } + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onBlockBreak(BlockBreakEvent event) + { + if (handleMining(event.getPlayer(), event.getBlock(), true)) + { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onEnter(PlayerMoveEvent event) + { + if (!hasTimer(event.getPlayer()) || UtilWorld.areChunksEqual(event.getFrom(), event.getTo()) || ClansManager.getInstance().getClanUtility().isAdmin(event.getTo())) + { + return; + } + ClanTerritory claimTo = ClansManager.getInstance().getClanUtility().getClaim(event.getTo()); + ClanTerritory claimFrom = ClansManager.getInstance().getClanUtility().getClaim(event.getFrom()); + + if (claimTo != null) + { + if (claimFrom == null || !claimFrom.Owner.equals(claimTo.Owner)) + { + UtilPlayer.message(event.getPlayer(), F.main(getName(), "You cannot enter claimed land whilst protected from PvP. Run " + F.elem("/pvp") + " to enable PvP!")); + UtilAction.velocity(event.getPlayer(), UtilAlg.getTrajectory(event.getTo(), event.getFrom()).multiply(4), 1.5, true, 0.8, 0, 1.0, true); + } + } + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onTeleportInto(PlayerTeleportEvent event) + { + if (!hasTimer(event.getPlayer()) || UtilWorld.areChunksEqual(event.getFrom(), event.getTo()) || ClansManager.getInstance().getClanUtility().isAdmin(event.getTo())) + { + return; + } + ClanTerritory claimTo = ClansManager.getInstance().getClanUtility().getClaim(event.getTo()); + ClanTerritory claimFrom = ClansManager.getInstance().getClanUtility().getClaim(event.getFrom()); + + if (claimTo != null) + { + if (claimFrom == null || !claimFrom.Owner.equals(claimTo.Owner)) + { + UtilPlayer.message(event.getPlayer(), F.main(getName(), "You cannot enter claimed land whilst protected from PvP. Run " + F.elem("/pvp") + " to enable PvP!")); + event.setCancelled(true); + } + } + } } \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/SiegeManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/SiegeManager.java index d0da92ce6..0483354ce 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/SiegeManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/SiegeManager.java @@ -73,7 +73,8 @@ public class SiegeManager extends MiniPlugin getRepository().getWeaponsByServer(getClansManager().getServerId(), tokens -> tokens.forEach(token -> - runSync(() -> { + runSync(() -> + { final SiegeWeapon weapon; token.Location.getChunk().load(); @@ -102,7 +103,6 @@ public class SiegeManager extends MiniPlugin private void generatePermissions() { - PermissionGroup.ADMIN.setPermission(Perm.GIVE_CANNON_COMMAND, true, true); } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/outpost/Outpost.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/outpost/Outpost.java index 5dfd1bbbc..3748ff128 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/outpost/Outpost.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/outpost/Outpost.java @@ -24,6 +24,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.util.Vector; +import mineplex.core.common.Pair; import mineplex.core.common.util.C; import mineplex.core.common.util.ColorFader; import mineplex.core.common.util.EnclosedObject; @@ -272,9 +273,13 @@ public class Outpost implements Listener UtilTextMiddle.display("Siege", "Your Outpost has been destroyed", 20, 100, 20, _ownerClan.getOnlinePlayersArray()); if (getState() == OutpostState.AWAITING) + { cleanup(); + } else + { kill(); + } return; } @@ -396,9 +401,13 @@ public class Outpost implements Listener UtilTextMiddle.display("Siege", "Your Outpost has been destroyed", 20, 100, 20, _ownerClan.getOnlinePlayersArray()); if (getState() == OutpostState.AWAITING) + { cleanup(); + } else + { kill(); + } return; } @@ -443,9 +452,13 @@ public class Outpost implements Listener UtilTextMiddle.display("Siege", "Your Outpost has been destroyed", 20, 100, 20, _ownerClan.getOnlinePlayersArray()); if (getState() == OutpostState.AWAITING) + { cleanup(); + } else + { kill(); + } return; } @@ -730,6 +743,11 @@ public class Outpost implements Listener { return UtilAlg.toBoundingBox(_startCorner, _endCorner); } + + public Pair getBoundsBlockBreak() + { + return Pair.create(_startCorner.clone().subtract(0.5, 0, 0.5), _endCorner.clone()); + } public Location getExactMiddle() { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/outpost/OutpostManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/outpost/OutpostManager.java index e7e1b25a6..1297916fe 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/outpost/OutpostManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/outpost/OutpostManager.java @@ -210,7 +210,9 @@ public class OutpostManager extends MiniPlugin public void onBlockFall(EntityChangeBlockEvent event) { if (event.getEntity().hasMetadata("ClansOutpost")) + { event.setCancelled(true); + } } @EventHandler @@ -281,7 +283,8 @@ public class OutpostManager extends MiniPlugin System.out.println("[OUTPOSTS] LOADING OUTPOSTS FROM DATABASE"); _repository.getOutpostsByServer(_clansManager.getServerId(), tokens -> - tokens.forEach(token -> { + tokens.forEach(token -> + { Outpost outpost = new Outpost(this, token); if ((System.currentTimeMillis() - token.TimeSpawned) > Outpost.MAX_LIFETIME) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java index c36c4b5b9..72c210616 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java @@ -359,7 +359,8 @@ public class Cannon extends SiegeWeapon public void FindEntities() { Lists.newArrayList(_location.getWorld().getEntities()) - .forEach(entity -> { + .forEach(entity -> + { if (Integer.toString(_uniqueId).equals(entity.getCustomName())) { entity.remove(); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java index 5ed1191c5..b851b3d28 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java @@ -38,6 +38,7 @@ import mineplex.core.common.util.NautArrayList; import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilCollections; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilItem; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; @@ -66,6 +67,7 @@ import mineplex.game.clans.items.legendaries.AlligatorsTooth; import mineplex.game.clans.items.legendaries.DemonicScythe; import mineplex.game.clans.items.legendaries.GiantsBroadsword; import mineplex.game.clans.items.legendaries.HyperAxe; +import mineplex.game.clans.items.legendaries.KnightLance; import mineplex.game.clans.items.legendaries.LegendaryItem; import mineplex.game.clans.items.legendaries.MagneticMaul; import mineplex.game.clans.items.legendaries.WindBlade; @@ -165,7 +167,8 @@ public abstract class SiegeWeapon implements Listener _infoHologram = new Hologram(ClansManager.getInstance().getHologramManager(), _location.clone().add(.5, 3, .5), _name + " Health", getDisplayHealth()); _infoHologram.start(); - _infoHologram.setInteraction((player, type) -> { + _infoHologram.setInteraction((player, type) -> + { if (type.equals(ClickType.LEFT)) { handleLeftClick(player); @@ -226,18 +229,22 @@ public abstract class SiegeWeapon implements Listener return 1; if (gear.getWeapon() != null && gear.getWeapon() instanceof LegendaryItem) + { if (gear.getWeapon() instanceof AlligatorsTooth) return 8; else if (gear.getWeapon() instanceof GiantsBroadsword) return 10; else if (gear.getWeapon() instanceof HyperAxe) - return 3; + return 6; else if (gear.getWeapon() instanceof MagneticMaul) return 8; else if (gear.getWeapon() instanceof WindBlade) return 7; else if (gear.getWeapon() instanceof DemonicScythe) return 8; + else if (gear.getWeapon() instanceof KnightLance) + return 8; + } return (int) UtilItem.getAttackDamage(stack.getType()); } @@ -407,7 +414,8 @@ public abstract class SiegeWeapon implements Listener { System.out.println("Killing: " + this.getClass().getSimpleName() + " [" + _uniqueId + "]"); - _siegeManager.runSync(() -> { + _siegeManager.runSync(() -> + { CustomCleanup(); _comprisedOf.forEach(Entity::remove); @@ -572,6 +580,7 @@ public abstract class SiegeWeapon implements Listener entity.setCustomName(Integer.toString(_uniqueId)); entity.setCustomNameVisible(false); entity.setMetadata("Creature.DoNotDrop", new FixedMetadataValue(_clans.getPlugin(), true)); + UtilEnt.addFlag(entity, "LegendaryAbility.IgnoreMe"); _comprisedOf.add(entity); @@ -583,6 +592,7 @@ public abstract class SiegeWeapon implements Listener Entity entity = _entityMapping.get(uniqueName); entity.removeMetadata("Creature.DoNotDrop", _clans.getPlugin()); + UtilEnt.removeFlag(entity, "LegendaryAbility.IgnoreMe"); _entityMapping.remove(uniqueName); _comprisedOf.remove(entity); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/supplydrop/SupplyDropManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/supplydrop/SupplyDropManager.java index 61d6da7b9..b0c2ada2e 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/supplydrop/SupplyDropManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/supplydrop/SupplyDropManager.java @@ -274,7 +274,7 @@ public class SupplyDropManager extends MiniPlugin { ItemStack item = set.generateRandom().get(); items.add(set.generateRandom().get()); - if (item.getType() == Material.RECORD_12) + if (item.getType() == Material.RABBIT_FOOT) { set.remove(gold); } @@ -351,7 +351,7 @@ public class SupplyDropManager extends MiniPlugin { ItemStack item = set.generateRandom().get(); items.add(set.generateRandom().get()); - if (item.getType() == Material.RECORD_12) + if (item.getType() == Material.RABBIT_FOOT) { if (++golds > 1) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/worldevent/boss/BossWorldEvent.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/worldevent/boss/BossWorldEvent.java index 7ffa2486d..1fdf45bdd 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/worldevent/boss/BossWorldEvent.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/worldevent/boss/BossWorldEvent.java @@ -12,12 +12,14 @@ import org.bukkit.util.Vector; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.common.util.C; +import mineplex.core.common.util.F; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.disguise.DisguiseManager; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.projectile.ProjectileManager; +import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.game.clans.clans.ClansManager; @@ -79,6 +81,14 @@ public abstract class BossWorldEvent> extends WorldEv { for (Player player : UtilPlayer.getInRadius(from, TELEPORT_PAD_RANGE).keySet()) { + if (ClansManager.getInstance().hasTimer(player)) + { + if (Recharge.Instance.use(player, "PvP Timer Inform NoBoss", 5000, false, false)) + { + UtilPlayer.message(player, F.main(getName(), "You cannot enter a World Boss whilst protected from PvP. Run " + F.elem("/pvp") + " to enable PvP!")); + } + continue; + } player.teleport(UtilMath.randomElement(_teleportTo)); for (ISkill skill : ClansManager.getInstance().getClassManager().Get(player).GetSkills()) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/worldevent/raid/RaidManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/worldevent/raid/RaidManager.java index a1922f007..e5bbe793d 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/worldevent/raid/RaidManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/worldevent/raid/RaidManager.java @@ -28,6 +28,7 @@ import mineplex.core.common.util.UtilServer; import mineplex.core.disguise.DisguiseManager; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.projectile.ProjectileManager; +import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.utils.UtilScheduler; @@ -67,7 +68,6 @@ public class RaidManager extends MiniPlugin private void generatePermissions() { - PermissionGroup.ADMIN.setPermission(Perm.START_RAID_COMMAND, true, true); } @@ -78,6 +78,20 @@ public class RaidManager extends MiniPlugin _raids.clear(); } + private boolean isEligible(Player player) + { + if (ClansManager.getInstance().hasTimer(player)) + { + if (Recharge.Instance.use(player, "PvP Timer Inform NoRaid", 5000, false, false)) + { + UtilPlayer.message(player, F.main(getName(), "You cannot enter a Raid whilst protected from PvP. Run " + F.elem("/pvp") + " to enable PvP!")); + } + return false; + } + + return true; + } + public DisguiseManager getDisguiseManager() { return ClansManager.getInstance().getDisguiseManager(); @@ -129,6 +143,7 @@ public class RaidManager extends MiniPlugin return false; } Set inside = UtilPlayer.getInRadius(player.getLocation(), 4).keySet(); + inside.removeIf(this::isEligible); if (inside.size() > MAX_PARTICIPANTS) { UtilPlayer.message(player, F.main(type.getRaidName() + " Raid", "You cannot start a raid with more than " + MAX_PARTICIPANTS + " participants!")); @@ -172,17 +187,14 @@ public class RaidManager extends MiniPlugin @EventHandler public void update(UpdateEvent event) { -// if (event.getType() == UpdateType.TICK) -// { -// UtilServer.getPlayersCollection() -// .stream() -// .filter(player -> isInRaid(player.getLocation())) -// .forEach(player -> -// { -// ClansManager.getInstance().getItemMapManager().removeMap(player); -// }); -// return; -// } + if (event.getType() == UpdateType.TICK) + { + UtilServer.getPlayersCollection() + .stream() + .filter(player -> isInRaid(player.getLocation())) + .forEach(player -> ClansManager.getInstance().getItemMapManager().removeMap(player)); + return; + } if (event.getType() != UpdateType.SEC) { return; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/ClansCurrency.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/ClansCurrency.java index 65f58c39a..ba1b75040 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/ClansCurrency.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/ClansCurrency.java @@ -7,4 +7,4 @@ import org.bukkit.Material; public class ClansCurrency { public static final Currency GOLD = new Currency("Gold", "Gold", C.cGold, Material.GOLD_NUGGET); -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GemTransfer.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GemTransfer.java index 3fda5e499..983ff6ec3 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GemTransfer.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GemTransfer.java @@ -46,4 +46,4 @@ public class GemTransfer implements Data return null; } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java index a10922af4..c01515c31 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java @@ -158,7 +158,9 @@ public class GoldManager extends MiniDbClientPlugin int pickupMapGold = goldAmount; if (_playerPickupMap.containsKey(event.getPlayer())) + { pickupMapGold += _playerPickupMap.get(event.getPlayer()); + } _playerPickupMap.put(event.getPlayer(), pickupMapGold); } @@ -305,7 +307,7 @@ public class GoldManager extends MiniDbClientPlugin final GoldToken token = new GoldToken(tokenValue); deductGold(success -> { - if (success.booleanValue()) + if (success) { player.getInventory().addItem(token.toItemStack()); GoldManager.notify(player, String.format("You have purchased a gold token worth %dg!", tokenValue)); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/Field.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/Field.java index f02c1e6e7..66d68f97d 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/Field.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/Field.java @@ -40,4 +40,4 @@ public class Field extends MiniPlugin { return _mob; } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldBlock.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldBlock.java index 6974bb078..b7b82b875 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldBlock.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldBlock.java @@ -327,4 +327,4 @@ public class FieldBlock extends MiniPlugin { return _conditionFactory; } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldMonster.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldMonster.java index 32ac7803b..7415ec2e1 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldMonster.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldMonster.java @@ -196,4 +196,4 @@ public class FieldMonster extends MiniPlugin { return _creature; } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldOre.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldOre.java index 813f6c802..9e1659d9c 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldOre.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldOre.java @@ -226,7 +226,7 @@ public class FieldOre extends MiniPlugin event.setCancelled(true); - ore.OreMined(event.getPlayer().getEyeLocation()); + ore.OreMined(event.getPlayer(), event.getPlayer().getEyeLocation()); } @EventHandler diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldOreData.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldOreData.java index 85bc87bb0..c292c494b 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldOreData.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/fields/FieldOreData.java @@ -7,12 +7,15 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Item; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; +import mineplex.core.Managers; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilMath; import mineplex.core.itemstack.ItemStackFactory; +import mineplex.game.clans.clans.pvptimer.PvPTimerManager; public class FieldOreData { @@ -78,10 +81,10 @@ public class FieldOreData return _active; } - public void OreMined(Location source) + public void OreMined(Player player, Location source) { //Persist - OreLoot(source); + OreLoot(player, source); if (Math.random() > 0.9) return; @@ -94,7 +97,8 @@ public class FieldOreData _active = false; } - public void OreLoot(Location source) + @SuppressWarnings("deprecation") + public void OreLoot(Player player, Location source) { ItemStack stack = null; @@ -110,12 +114,17 @@ public class FieldOreData else if (block.getType() == Material.REDSTONE_ORE) stack = ItemStackFactory.Instance.CreateStack(Material.REDSTONE, 3); if (stack == null) + { return; + } - Vector vec = UtilAlg.getTrajectory(_loc.getBlock().getLocation().add(0.5, 0.5, 0.5), source).normalize(); - - Item item = _loc.getWorld().dropItem(_loc.getBlock().getLocation().add(0.5, 0.5, 0.5).add(vec), stack); - item.setPickupDelay(40); + if (!Managers.get(PvPTimerManager.class).handleMining(player, block, false)) + { + Vector vec = UtilAlg.getTrajectory(_loc.getBlock().getLocation().add(0.5, 0.5, 0.5), source).normalize(); + + Item item = _loc.getWorld().dropItem(_loc.getBlock().getLocation().add(0.5, 0.5, 0.5).add(vec), stack); + item.setPickupDelay(40); + } } public void StartVein(int veinSize) 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 abb62eefe..668f91e48 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 @@ -2,6 +2,7 @@ package mineplex.game.clans.gameplay; import java.util.Arrays; +import org.apache.commons.lang.ArrayUtils; import org.bukkit.Bukkit; import org.bukkit.DyeColor; import org.bukkit.Effect; @@ -12,6 +13,7 @@ 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; @@ -43,7 +45,6 @@ import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.MiniPlugin; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.common.util.F; -import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilInv; @@ -71,6 +72,7 @@ public class Gameplay extends MiniPlugin private static final int MAX_BUILD_HEIGHT = 120; private static final int MIN_CHEST_HEIGHT = 30; private static final Material[] REDSTONE_TYPES = new Material[] {Material.ACTIVATOR_RAIL, Material.REDSTONE, Material.REDSTONE_BLOCK, Material.REDSTONE_COMPARATOR, Material.REDSTONE_WIRE, Material.REDSTONE_COMPARATOR_OFF, Material.REDSTONE_COMPARATOR_ON, Material.REDSTONE_LAMP_OFF, Material.REDSTONE_LAMP_ON, Material.REDSTONE_TORCH_OFF, Material.REDSTONE_TORCH_ON, Material.DIODE, Material.DIODE_BLOCK_OFF, Material.DIODE_BLOCK_ON, Material.DETECTOR_RAIL}; + private static final byte[] PLACED_LOG_DATA_VALUES = {12,13,14,15}; private ClansManager _clansManager; private BlockRestore _blockRestore; private DamageManager _damageManager; @@ -192,7 +194,7 @@ public class Gameplay extends MiniPlugin @EventHandler(priority = EventPriority.LOWEST) public void ObsidianCancel(BlockPlaceEvent event) { - if (event.getBlock().getType() == Material.OBSIDIAN) + if (event.getBlock().getType() == Material.OBSIDIAN && event.getPlayer().getGameMode() != GameMode.CREATIVE) { UtilPlayer.message(event.getPlayer(), F.main("Game", "You cannot place " + F.item("Obsidian") + ".")); event.setCancelled(true); @@ -209,9 +211,33 @@ public class Gameplay extends MiniPlugin } } + @EventHandler(priority = EventPriority.LOWEST) + public void BarrierCancel(BlockPlaceEvent event) + { + if (event.getBlock().getType() == Material.BARRIER && event.getPlayer().getGameMode() != GameMode.CREATIVE) + { + UtilPlayer.message(event.getPlayer(), F.main("Game", "You cannot place " + F.item("Barrier Blocks") + ".")); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void HopperCancel(BlockPlaceEvent event) + { + if (event.getBlock().getType() == Material.HOPPER && event.getPlayer().getGameMode() != GameMode.CREATIVE) + { + UtilPlayer.message(event.getPlayer(), F.main("Game", "You cannot place " + F.item("Hoppers") + ".")); + event.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.LOWEST) public void CommandPlace(BlockPlaceEvent event) { + if (event.getPlayer().getGameMode() == GameMode.CREATIVE) + { + return; + } if (event.getBlock().getType() == Material.COMMAND || event.getBlock().getType() == Material.NOTE_BLOCK || event.getBlock().getType() == Material.REDSTONE_LAMP_ON) { UtilPlayer.message(event.getPlayer(), F.main("Game", "You cannot place " + F.item("Proximity Devices") + ".")); @@ -222,7 +248,7 @@ public class Gameplay extends MiniPlugin @EventHandler(priority = EventPriority.LOWEST) public void RedstoneCancel(BlockPlaceEvent event) { - if (Arrays.asList(REDSTONE_TYPES).contains(event.getBlock().getType())) + if (Arrays.asList(REDSTONE_TYPES).contains(event.getBlock().getType()) && event.getPlayer().getGameMode() != GameMode.CREATIVE) { UtilPlayer.message(event.getPlayer(), F.main("Game", "You cannot place redstone based items.")); event.setCancelled(true); @@ -232,6 +258,10 @@ public class Gameplay extends MiniPlugin @EventHandler(priority = EventPriority.LOWEST) public void MaxHeight(BlockPlaceEvent event) { + if (event.getPlayer().getGameMode() == GameMode.CREATIVE) + { + return; + } if (event.getBlock().getLocation().getBlockY() > MAX_BUILD_HEIGHT) { UtilPlayer.message(event.getPlayer(), F.main("Game", "You cannot place blocks this high.")); @@ -243,7 +273,7 @@ public class Gameplay extends MiniPlugin event.setCancelled(true); } - if (event.getBlock().getLocation().getBlockY() < MIN_CHEST_HEIGHT && (event.getBlock().getType() == Material.CHEST || event.getBlock().getType() == Material.TRAPPED_CHEST)) + if (event.getBlock().getLocation().getBlockY() < MIN_CHEST_HEIGHT && (event.getBlock().getType() == Material.CHEST || event.getBlock().getType() == Material.TRAPPED_CHEST || event.getBlock().getType() == Material.DISPENSER || event.getBlock().getType() == Material.DROPPER || event.getBlock().getType() == Material.FURNACE || event.getBlock().getType() == Material.BURNING_FURNACE)) { event.setCancelled(true); } @@ -594,6 +624,43 @@ public class Gameplay extends MiniPlugin } } + @SuppressWarnings("deprecation") + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onLogPlace(BlockPlaceEvent event) + { + if (UtilItem.isLog(event.getBlock().getType())) + { + byte data = event.getBlock().getData(); + final byte newData; + if (data % 4 == 0) + { + newData = 12; + } + else if ((data - 1) % 4 == 0) + { + newData = 13; + } + else if ((data - 2) % 4 == 0) + { + newData = 14; + } + else if ((data - 3) % 4 == 0) + { + newData = 15; + } + else + { + newData = data; + } + + UtilServer.runSyncLater(() -> + { + event.getBlock().setData(newData); + }, 1); + } + } + + @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOWEST) public void replantTree(BlockBreakEvent event) { @@ -625,9 +692,18 @@ public class Gameplay extends MiniPlugin } final byte data = block.getData(); - - UtilServer.getServer().getScheduler().scheduleSyncDelayedTask(getPlugin(), () -> + + if (ArrayUtils.contains(PLACED_LOG_DATA_VALUES, data)) { + return; + } + + UtilServer.runSyncLater(() -> + { + if (block.getType() != Material.AIR) + { + return; + } Material mat = block.getRelative(BlockFace.DOWN).getType(); if (mat == Material.DIRT || mat == Material.GRASS) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java index 08c79ee1e..1da80b4e1 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/CustomItem.java @@ -8,13 +8,11 @@ import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack; import org.bukkit.entity.Player; -import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import mineplex.core.common.util.UtilInv; -import mineplex.core.common.util.UtilServer; import mineplex.game.clans.items.attributes.AttributeContainer; import mineplex.game.clans.items.attributes.ItemAttribute; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -23,7 +21,7 @@ import mineplex.minecraft.game.core.damage.CustomDamageEvent; * Represents a customizable wrapper for an {@link ItemStack}, enabling the * possession of special abilities, attributes, and triggers on item. */ -public class CustomItem implements Listener +public class CustomItem { // Chat color used for item display name private static final ChatColor TITLE_COLOR = ChatColor.GOLD; @@ -56,7 +54,6 @@ public class CustomItem implements Listener _material = material; _attributes = new AttributeContainer(); _uuid = UUID.randomUUID().toString(); - UtilServer.RegisterEvents(this); } public CustomItem(Material material) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java index f366d84c0..87c8585e4 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java @@ -69,6 +69,7 @@ import mineplex.game.clans.items.legendaries.AlligatorsTooth; import mineplex.game.clans.items.legendaries.DemonicScythe; import mineplex.game.clans.items.legendaries.GiantsBroadsword; import mineplex.game.clans.items.legendaries.HyperAxe; +import mineplex.game.clans.items.legendaries.KnightLance; import mineplex.game.clans.items.legendaries.LegendaryItem; import mineplex.game.clans.items.legendaries.MagneticMaul; import mineplex.game.clans.items.legendaries.MeridianScepter; @@ -122,7 +123,8 @@ public class GearManager extends MiniPlugin implements IPacketHandler, Runnable WindBlade.class, GiantsBroadsword.class, HyperAxe.class, - MagneticMaul.class + MagneticMaul.class, + KnightLance.class ); private static final WeightSet> RARE_WEIGHTS = new WeightSet<>( @@ -193,7 +195,8 @@ public class GearManager extends MiniPlugin implements IPacketHandler, Runnable Material.RECORD_9, Material.RECORD_10, Material.RECORD_11, - Material.RECORD_12 + Material.RECORD_12, + Material.RABBIT_FOOT ); static @@ -425,7 +428,7 @@ public class GearManager extends MiniPlugin implements IPacketHandler, Runnable public void spawnItem(Location location) { CustomItem item = generateItem(); - if (item.getMaterial() == Material.RECORD_4 || item.getMaterial() == Material.GOLD_RECORD || item.getMaterial() == Material.RECORD_3 || item.getMaterial() == Material.RECORD_5 || item.getMaterial() == Material.RECORD_6 || item.getMaterial() == Material.GREEN_RECORD) + if (item.getMaterial() == Material.RECORD_4 || item.getMaterial() == Material.GOLD_RECORD || item.getMaterial() == Material.RECORD_3 || item.getMaterial() == Material.RECORD_5 || item.getMaterial() == Material.RECORD_6 || item.getMaterial() == Material.GREEN_RECORD || item.getMaterial() == Material.RECORD_12) { UtilFirework.playFirework(location, Type.BALL, Color.RED, true, false); } @@ -754,7 +757,6 @@ public class GearManager extends MiniPlugin implements IPacketHandler, Runnable CustomItem item = it.next(); if (item._lastUser == null || !item._lastUser.isOnline()) { - UtilServer.Unregister(item); it.remove(); } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java index 0467948bd..8b1fa0bdd 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java @@ -1,6 +1,7 @@ package mineplex.game.clans.items; import org.bukkit.entity.Entity; +import org.bukkit.entity.ItemFrame; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; @@ -10,6 +11,7 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemHeldEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -236,6 +238,22 @@ public class ItemListener implements Listener, Runnable } } } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onUseItemFrame(PlayerInteractEntityEvent event) + { + if (event.getRightClicked() instanceof ItemFrame) + { + boolean frameHas = ((ItemFrame)event.getRightClicked()).getItem() != null; + boolean playerHas = event.getPlayer().getItemInHand() != null; + + if (frameHas || playerHas) + { + GearManager.getInstance().runSyncLater(() -> getGear(event.getPlayer()).updateCache(true), 1); + return; + } + } + } /** * @param player - the player whose gear is to be fetched diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/PlayerGear.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/PlayerGear.java index 081b68516..79757bbfd 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/PlayerGear.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/PlayerGear.java @@ -21,10 +21,12 @@ public class PlayerGear private CustomItem _weapon, _helmet, _chestplate, _leggings, _boots; private Map _inventory = new HashMap<>(); + private int _lastHeldSlot = 0; public PlayerGear(Player owner) { _owner = owner; + _lastHeldSlot = owner.getInventory().getHeldItemSlot(); } /** @@ -65,7 +67,12 @@ public class PlayerGear _inventory.put(i, GearManager.parseItem(getPlayer().getInventory().getItem(i))); } } - _weapon = _inventory.get(getPlayer().getInventory().getHeldItemSlot()); + if (_weapon != null && _weapon instanceof LegendaryItem && _lastHeldSlot != getPlayer().getInventory().getHeldItemSlot()) + { + ((LegendaryItem)_weapon).onUnequip(getPlayer()); + } + _lastHeldSlot = getPlayer().getInventory().getHeldItemSlot(); + _weapon = _inventory.get(_lastHeldSlot); _helmet = GearManager.parseItem(getPlayer().getInventory().getHelmet()); _chestplate = GearManager.parseItem(getPlayer().getInventory().getChestplate()); _leggings = GearManager.parseItem(getPlayer().getInventory().getLeggings()); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java index ab0cc3957..d4be22071 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java @@ -1,15 +1,15 @@ package mineplex.game.clans.items.attributes; -import mineplex.game.clans.clans.ClansManager; -import mineplex.game.clans.clans.ClansUtility; -import mineplex.game.clans.items.generation.ValueDistribution; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; - import org.bukkit.entity.Entity; import org.bukkit.entity.Player; -import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.ClansUtility; +import mineplex.game.clans.items.CustomItem; +import mineplex.game.clans.items.generation.ValueDistribution; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; + /** * Represents an attribute that can be attached to {@link CustomItem} to augment their abilities * and special effects on trigger. @@ -148,4 +148,4 @@ public abstract class ItemAttribute } return false; } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/economy/GoldToken.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/economy/GoldToken.java index 4028d851a..428d71f6a 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/economy/GoldToken.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/economy/GoldToken.java @@ -15,7 +15,7 @@ public class GoldToken extends CustomItem public GoldToken(int goldValue) { - super("Gold Token", null, Material.RECORD_12); + super("Gold Token", null, Material.RABBIT_FOOT); _goldValue = goldValue; } @@ -28,8 +28,9 @@ public class GoldToken extends CustomItem @Override public String[] getDescription() { - return new String[] { - String.format("A gold token worth %s gold coins.", _goldValue), + return new String[] + { + String.format("A gold token worth %s gold coins.", _goldValue), }; } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java index 82e7ba1f3..52feeba33 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java @@ -1,6 +1,5 @@ package mineplex.game.clans.items.legendaries; -import mineplex.core.common.util.UtilAction; import org.bukkit.Effect; import org.bukkit.Material; import org.bukkit.Sound; @@ -14,23 +13,26 @@ import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class AlligatorsTooth extends LegendaryItem { - private static ValueDistribution BOOST_GEN = generateDistribution(0.8d, 1.4d); - private static double LAND_DAMAGE_BONUS = 7; - private static double WATER_DAMAGE_BONUS = 11; + private static final ValueDistribution BOOST_GEN = generateDistribution(0.8d, 1.4d); + private static final double LAND_DAMAGE_BONUS = 7; + private static final double WATER_DAMAGE_BONUS = 11; private double _swimSpeed; private int _soundUpdateCounter; public AlligatorsTooth() { - super("Alligators Tooth", new String[] { + super("Alligators Tooth", new String[] + { C.cWhite + "This deadly tooth was stolen from", - C.cWhite + "a nest of reptillian beasts long", + C.cWhite + "a nest of reptilian beasts long", C.cWhite + "ago. Legends say that the holder", C.cWhite + "is granted the underwater agility", - C.cWhite + "of an Alligator", + C.cWhite + "of an Alligator.", " ", - C.cYellow + "Right-Click" + C.cWhite + " to use" + C.cGreen + " Swim", + C.cWhite + "Deals " + C.cYellow + "8 Damage" + C.cWhite + " with attack on land", + C.cWhite + "Deals " + C.cYellow + "12 Damage" + C.cWhite + " with attack in water", + C.cYellow + "Right-Click" + C.cWhite + " to use " + C.cGreen + "Gator Stroke", }, Material.RECORD_4); _swimSpeed = BOOST_GEN.generateValue(); @@ -83,4 +85,4 @@ public class AlligatorsTooth extends LegendaryItem Material type = player.getLocation().getBlock().getType(); return type == Material.WATER || type == Material.STATIONARY_WATER; } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/DemonicScythe.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/DemonicScythe.java index 0eb4c3f24..de870371a 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/DemonicScythe.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/DemonicScythe.java @@ -1,12 +1,28 @@ package mineplex.game.clans.items.legendaries; import org.bukkit.GameMode; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Entity; import org.bukkit.entity.Horse; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.WitherSkull; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.util.Vector; import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.recharge.Recharge; import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.clans.ClansUtility; @@ -14,17 +30,127 @@ import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class DemonicScythe extends LegendaryItem { + private long _interactWait; + + static + { + UtilServer.RegisterEvents(new Listener() + { + @EventHandler(priority = EventPriority.LOWEST) + public void onDamagedByFireball(CustomDamageEvent event) + { + Projectile proj = event.GetProjectile(); + if (proj != null && UtilEnt.hasFlag(proj, "DemonicScythe.Projectile")) + { + event.SetCancelled("Unnecessary Scythe Damage"); + return; + } + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onHit(ProjectileHitEvent event) + { + if (event.getEntity() instanceof WitherSkull) + { + WitherSkull skull = (WitherSkull) event.getEntity(); + + if (!UtilEnt.hasFlag(skull, "DemonicScythe.Projectile")) + { + return; + } + Location hit = skull.getLocation(); + boolean inverted = skull.isCharged(); + skull.remove(); + if (skull.getShooter() == null) + { + return; + } + Player shooter = (Player) skull.getShooter(); + + for (Entity e : skull.getNearbyEntities(3, 3, 3)) + { + if (e instanceof LivingEntity) + { + LivingEntity entity = (LivingEntity) e; + if (UtilEnt.hasFlag(entity, "LegendaryAbility.IgnoreMe")) + { + continue; + } + if (ClansManager.getInstance().getClanUtility().isSafe(entity.getLocation())) + { + continue; + } + if (e instanceof Player) + { + Player target = (Player) e; + if (ClansManager.getInstance().hasTimer(target)) + { + continue; + } + if (ClansManager.getInstance().isInClan(shooter) && ClansManager.getInstance().getClan(shooter).isMember(target)) + { + continue; + } + if (target.getGameMode() == GameMode.CREATIVE || target.getGameMode() == GameMode.SPECTATOR) + { + continue; + } + if (ClansManager.getInstance().getIncognitoManager().Get(target).Hidden) + { + continue; + } + if (ClansManager.getInstance().isInClan(shooter) && ClansManager.getInstance().getClan(shooter).isAlly(ClansManager.getInstance().getClan(target))) + { + continue; + } + if (target.getEntityId() == shooter.getEntityId()) + { + continue; + } + } + + //Damage Event + ClansManager.getInstance().getDamageManager().NewDamageEvent(entity, shooter, null, + DamageCause.CUSTOM, 8, false, true, false, + shooter.getName(), "Wither Skull"); + + //Velocity + Vector trajectory; + if (inverted) + { + trajectory = UtilAlg.getTrajectory2d(entity.getLocation().toVector(), hit.toVector()); + } + else + { + trajectory = UtilAlg.getTrajectory2d(hit.toVector(), entity.getLocation().toVector()); + } + UtilAction.velocity(entity, + trajectory, + 2.6, true, 0, 0.2, 1.4, true); + + //Condition + ClansManager.getInstance().getCondition().Factory().Falling("Wither Skull", entity, shooter, 10, false, true); + } + } + } + } + }); + } + public DemonicScythe() { super("Scythe of the Fallen Lord", new String[] { - C.cWhite + "An old blade fashioned of nothing more", - C.cWhite + "than bones and cloth which served no", - C.cWhite + "purpose. Brave adventurers however have", - C.cWhite + "imbued it with the remnant powers of a", - C.cWhite + "dark and powerful foe.", - " ", - C.cYellow + "Attack" + C.cWhite + " to use" + C.cGreen + " Leach Health", + C.cWhite + "An old blade fashioned of nothing more", + C.cWhite + "than bones and cloth which served no", + C.cWhite + "purpose. Brave adventurers however have", + C.cWhite + "imbued it with the remnant powers of a", + C.cWhite + "dark and powerful foe.", + " ", + C.cWhite + "Deals " + C.cYellow + "8 Damage" + C.cWhite + " with attack", + C.cYellow + "Attack" + C.cWhite + " to use " + C.cGreen + "Leach Health", + C.cYellow + "Right Click" + C.cWhite + " to use " + C.cGreen + "Skull Launcher", + C.cYellow + "Shift-Right Click" + C.cWhite + " to use " + C.cGreen + "Gravity Skull Launcher", }, Material.RECORD_8); } @@ -44,6 +170,39 @@ public class DemonicScythe extends LegendaryItem } return false; } + + @Override + public void update(Player wielder) + { + if (timeSinceLastBlock() >= 98 || (System.currentTimeMillis() - _interactWait) < 98) + { + return; + } + if (ClansManager.getInstance().hasTimer(wielder)) + { + UtilPlayer.message(wielder, F.main("Clans", "You are not allowed to fire skulls whilst protected from PvP. Run " + F.elem("/pvp") + " to enable PvP!")); + return; + } + if (ClansManager.getInstance().getClanUtility().getClaim(wielder.getLocation()) != null && ClansManager.getInstance().getClanUtility().getClaim(wielder.getLocation()).isSafe(wielder.getLocation())) + { + UtilPlayer.message(wielder, F.main("Clans", "You are not allowed to fire skulls whilst in a safe zone.")); + return; + } + if (!Recharge.Instance.use(wielder, "Scythe Skull Launcher", 9000, true, false)) + { + return; + } + WitherSkull skull = wielder.launchProjectile(WitherSkull.class); + UtilEnt.addFlag(skull, "DemonicScythe.Projectile"); + if (wielder.isSneaking()) + { + skull.setCharged(true); + } + skull.setBounce(false); + skull.setIsIncendiary(false); + skull.setYield(0); + _interactWait = System.currentTimeMillis(); + } @Override public void onAttack(CustomDamageEvent event, Player wielder) @@ -75,7 +234,7 @@ public class DemonicScythe extends LegendaryItem event.AddMod("Scythe of the Fallen Lord", 7); if (!(event.GetDamageeEntity() instanceof Horse) && Recharge.Instance.use(wielder, "Demonic Scythe Heal", 500, false, false)) { - wielder.setHealth(Math.min(wielder.getMaxHealth(), wielder.getHealth() + 2)); + wielder.setHealth(Math.min(wielder.getMaxHealth(), wielder.getHealth() + 3)); } } } \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/EnergyCrossbow.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/EnergyCrossbow.java index d1fa24314..3747f8bd1 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/EnergyCrossbow.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/EnergyCrossbow.java @@ -50,9 +50,10 @@ public class EnergyCrossbow extends LegendaryItem public EnergyCrossbow() { - super("Energy Crossbow", UtilText.splitLinesToArray(new String[] { - C.cWhite + "Legend says " - + " ", + super("Energy Crossbow", UtilText.splitLinesToArray(new String[] + { + C.cWhite + "Legend says ", + " ", "#" + C.cYellow + "Right-Click" + C.cWhite + " to fire Crossbow." }, LineFormat.LORE), Material.RECORD_6); } @@ -73,7 +74,8 @@ public class EnergyCrossbow extends LegendaryItem private void fire(final Player player) { - UtilServer.RegisterEvents(new Listener() { + UtilServer.RegisterEvents(new Listener() + { private Location _lastLoc; private Arrow _arrow; @@ -181,7 +183,6 @@ public class EnergyCrossbow extends LegendaryItem hit(); } - }); } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java index 172f71b5f..016aa93ce 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java @@ -19,14 +19,15 @@ public class GiantsBroadsword extends LegendaryItem public GiantsBroadsword() { - super("Giants Broadsword", new String[]{ - C.cWhite + "Forged in the godly mines of Plagieus", - C.cWhite + "this sword has endured thousands of", - C.cWhite + "wars. It is sure to grant certain", - C.cWhite + "victory in battle.", - C.cWhite + " ", - C.cWhite + "Deals " + C.cYellow + "10 Damage" + C.cWhite + " with attack", - C.cYellow + "Right-Click" + C.cWhite + " to use " + C.cGreen + "Shield", + super("Giants Broadsword", new String[] + { + C.cWhite + "Forged in the godly mines of Plagieus,", + C.cWhite + "this sword has endured thousands of", + C.cWhite + "wars. It is sure to grant glorious", + C.cWhite + "victory in battle.", + C.cWhite + " ", + C.cWhite + "Deals " + C.cYellow + "10 Damage" + C.cWhite + " with attack", + C.cYellow + "Right-Click" + C.cWhite + " to use " + C.cGreen + "Shield", }, Material.GOLD_RECORD); } @@ -62,6 +63,8 @@ public class GiantsBroadsword extends LegendaryItem { grantPotionEffect(player, PotionEffectType.SLOW, 40, SLOW_AMPLIFIER); if (Recharge.Instance.use(player, "Giants Broadsword Regen", 250L, false, false, false)) + { grantPotionEffect(player, PotionEffectType.REGENERATION, 5, REGEN_AMPLIFIER); //Regen + } } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/HyperAxe.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/HyperAxe.java index 7259f89e4..36459fac7 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/HyperAxe.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/HyperAxe.java @@ -13,26 +13,27 @@ import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class HyperAxe extends LegendaryItem { private static final long ATTACK_RATE_DURATION = 1000 / 10; - private static ValueDistribution AMOUNT_GEN = generateDistribution(0, 3); // [1, 4] speed amount - private static ValueDistribution DURATION_GEN = generateDistribution(80, 320); // [4, 16] seconds speed duration + private static final ValueDistribution AMOUNT_GEN = generateDistribution(0, 3); // [1, 4] speed amount + private static final ValueDistribution DURATION_GEN = generateDistribution(80, 320); // [4, 16] seconds speed duration - private int _speedAmount; - private int _speedDuration; + private final int _speedAmount; + private final int _speedDuration; private long _lastAttack; public HyperAxe() { - super("Hyper Axe", new String[] { - C.cWhite + "Of all the weapons known to man,", - C.cWhite + "none is more prevalent than the", - C.cWhite + "Hyper Axe. Infused with rabbit's", - C.cWhite + "speed and pigman's ferocity, this", - C.cWhite + "blade can rip through any opponent.", - C.cWhite + " ", - C.cWhite + "Hit delay is reduced by " + C.cYellow + "50%", - C.cWhite + "Deals " + C.cYellow + "3 Damage" + C.cWhite + " with attack", - C.cYellow + "Right-Click" + C.cWhite + " to use " + C.cGreen + "Dash", + super("Hyper Axe", new String[] + { + C.cWhite + "Of all the weapons known to man,", + C.cWhite + "none matches the savagery of the", + C.cWhite + "Hyper Axe. Infused with a rabbit's", + C.cWhite + "speed and a pigman's ferocity, this", + C.cWhite + "blade can rip through any opponent.", + C.cWhite + " ", + C.cWhite + "Hit delay is reduced by " + C.cYellow + "50%", + C.cWhite + "Deals " + C.cYellow + "6 Damage" + C.cWhite + " with attack", + C.cYellow + "Right-Click" + C.cWhite + " to use " + C.cGreen + "Dash", }, Material.RECORD_3); _speedAmount = AMOUNT_GEN.generateIntValue(); _speedDuration = DURATION_GEN.generateIntValue(); @@ -78,4 +79,4 @@ public class HyperAxe extends LegendaryItem wielder.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, _speedDuration, _speedAmount)); } } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/KnightLance.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/KnightLance.java new file mode 100644 index 000000000..38b5f1342 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/KnightLance.java @@ -0,0 +1,234 @@ +package mineplex.game.clans.items.legendaries; + +import java.util.HashSet; +import java.util.Set; + +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Horse; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTextBottom; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.recharge.Recharge; +import mineplex.game.clans.clans.ClansManager; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; + +public class KnightLance extends LegendaryItem +{ + private static final double CHARGE_VELOCITY = 1.5d; + private static final double MAX_BUILDUP_TICKS = 20 * 3; + + private boolean _charging; + private double _buildup; + + private transient final Set _hit = new HashSet<>(); //Avoid creating a new list every tick + + public KnightLance() + { + super("Knight's Greatlance", new String[] + { + C.cWhite + "Relic of a bygone age.", + C.cWhite + "Emblazoned with cryptic runes, this", + C.cWhite + "Lance bears the marks of its ancient master.", + C.cWhite + "You feel him with you always:", + C.cWhite + "Heed his warnings and stave off the darkness.", + " ", + C.cWhite + "Deals " + C.cYellow + "8 Damage" + C.cWhite + " with attack", + C.cYellow + "Right-Click" + C.cWhite + " to use " + C.cGreen + "Charge", + }, Material.RECORD_12); + } + + @Override + public void update(Player wielder) + { + boolean holding = isHoldingRightClick(); + + if (holding && !_charging) + { + if (canPropel(wielder)) + { + _buildup = 0; + _charging = true; + } + } + else if (!holding && _charging) + { + _charging = false; + _buildup = 0; + } + else if (_charging && !canPropel(wielder)) + { + _charging = false; + _buildup = 0; + } + + if (_charging) + { + for (Entity near : wielder.getNearbyEntities(0.6, 1, 0.6)) + { + if (near instanceof LivingEntity) + { + LivingEntity entity = (LivingEntity) near; + if (!canHit(wielder, entity)) + { + continue; + } + if (entity instanceof Horse) + { + _hit.add((LivingEntity)((Horse)entity).getPassenger()); + ((Horse)entity).eject(); + } + else + { + _hit.add(entity); + } + } + } + if (!_hit.isEmpty()) + { + _charging = false; + double damagePercentage = getBuildup() / MAX_BUILDUP_TICKS; + _buildup = 0; + + wielder.getWorld().playSound(wielder.getLocation(), Sound.ZOMBIE_METAL, 1.5f, 0.5f); + for (LivingEntity hit : _hit) + { + //Damage Event + ClansManager.getInstance().getDamageManager().NewDamageEvent(hit, wielder, null, + DamageCause.CUSTOM, 2 + (10 * damagePercentage), false, true, false, + wielder.getName(), "Knight's Greatlance Charge"); + + //Velocity + UtilAction.velocity(hit, + UtilAlg.getTrajectory2d(wielder.getLocation().toVector(), hit.getLocation().toVector()), + 2.6, true, 0, 0.2, 1.4, true); + + //Condition + ClansManager.getInstance().getCondition().Factory().Falling("Knight's Greatlance Charge", hit, wielder, 10, false, true); + } + _hit.clear(); + Recharge.Instance.useForce(wielder, "Knight Lance Charge Attack", 5000); + Recharge.Instance.recharge(wielder, "Knight Lance Charge CD Inform"); + return; + } + + propelPlayer(wielder); + UtilTextBottom.displayProgress(getBuildup() / MAX_BUILDUP_TICKS, wielder); + _buildup++; + } + } + + @Override + public void onUnequip(Player wielder) + { + _charging = false; + _buildup = 0; + } + + @Override + public void onAttack(CustomDamageEvent event, Player wielder) + { + event.AddMod("Knight's Greatlance", 7); + } + + private void propelPlayer(Player player) + { + Vector direction = player.getLocation().getDirection().normalize(); + direction.setY(0); + direction.multiply(CHARGE_VELOCITY); + + player.setVelocity(direction); + + UtilParticle.PlayParticle(ParticleType.CRIT, player.getLocation(), + (float)(Math.random() - 0.5), 0.2f + (float)(Math.random() * 1), (float)(Math.random() - 0.5), 0, 3, + ViewDist.LONG, UtilServer.getPlayers()); + } + + private boolean canPropel(Player player) + { + return UtilEnt.isGrounded(player) && + !UtilEnt.isInWater(player) && + player.getVehicle() == null && + !ClansManager.getInstance().getClanUtility().isSafe(player) && + Recharge.Instance.usable(player, "Knight Lance Charge Attack", Recharge.Instance.use(player, "Knight Lance Charge CD Inform", 1500, false, false)); + } + + private boolean canHit(Player player, LivingEntity entity) + { + if (UtilEnt.hasFlag(entity, "LegendaryAbility.IgnoreMe")) + { + return false; + } + if (ClansManager.getInstance().getClanUtility().isSafe(entity.getLocation())) + { + return false; + } + if (entity instanceof Horse) + { + Entity passenger = ((Horse)entity).getPassenger(); + if (passenger == null) + { + return false; + } + else + { + if (passenger instanceof LivingEntity) + { + if (!canHit(player, (LivingEntity)passenger)) + { + return false; + } + } + else + { + return false; + } + } + } + if (entity instanceof Player) + { + Player target = (Player) entity; + if (ClansManager.getInstance().hasTimer(target)) + { + return false; + } + if (ClansManager.getInstance().isInClan(player) && ClansManager.getInstance().getClan(player).isMember(target)) + { + return false; + } + if (target.getGameMode() == GameMode.CREATIVE || target.getGameMode() == GameMode.SPECTATOR) + { + return false; + } + if (ClansManager.getInstance().getIncognitoManager().Get(target).Hidden) + { + return false; + } + if (ClansManager.getInstance().isInClan(player) && ClansManager.getInstance().getClan(player).isAlly(ClansManager.getInstance().getClan(target))) + { + return false; + } + } + + return true; + } + + private double getBuildup() + { + return UtilMath.clamp(_buildup, 0d, MAX_BUILDUP_TICKS); + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java index f27d909df..27f476e02 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java @@ -13,7 +13,7 @@ import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class LegendaryItem extends CustomItem { - private static final long BLOCK_COOLDOWN = 200L; // Right clicking activates right click for 200ms + private static final long BLOCK_COOLDOWN = 260L; // Right clicking activates right click for 260ms protected long _lastBlock; // Timestamp of last block from wielder @@ -24,19 +24,25 @@ public class LegendaryItem extends CustomItem _lastBlock = 0L; } - public void update(Player wielder) - { - // Leave implementation to potential subtypes - } + /* + * Leave implementation to potential subtypes + */ + public void update(Player wielder) {} - public void preUpdate(Player wielder) - { - } + /* + * Leave implementation to potential subtypes + */ + public void preUpdate(Player wielder) {} - public void onAttack(CustomDamageEvent event, Player wielder) - { - // Leave implementation to potential subtypes - } + /* + * Leave implementation to potential subtypes + */ + public void onUnequip(Player wielder) {} + + /* + * Leave implementation to potential subtypes + */ + public void onAttack(CustomDamageEvent event, Player wielder) {} @Override public void onAttack(CustomDamageEvent event) @@ -98,4 +104,4 @@ public class LegendaryItem extends CustomItem { player.addPotionEffect(new PotionEffect(type, amplifier, tickDuration), true); } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MagneticMaul.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MagneticMaul.java index a65112279..3c2e34d84 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MagneticMaul.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MagneticMaul.java @@ -7,11 +7,14 @@ import org.bukkit.entity.Player; import org.bukkit.util.Vector; import mineplex.core.common.util.C; +import mineplex.core.common.util.F; import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilServer; @@ -31,11 +34,13 @@ public class MagneticMaul extends LegendaryItem public MagneticMaul() { - super("Magnetic Maul", UtilText.splitLinesToArray(new String[] { - C.cWhite + "This brutal weapon allows you to pull your enemies towards you with magnetic force!", - " ", - C.cYellow + "Right-Click" + C.cWhite + " to use Maul." - }, LineFormat.LORE), Material.RECORD_5); + super("Magnetic Maul", UtilText.splitLinesToArray(new String[] + { + C.cWhite + "For centuries, warlords used this hammer to control their subjects. This brutal weapon allows you to pull your enemies towards you with magnetic force!", + " ", + "#" + C.cWhite + "Deals " + C.cYellow + "8 Damage" + C.cWhite + " with attack", + "#" + C.cYellow + "Right-Click" + C.cWhite + " to use " + C.cGreen + "Magnetism" + }, LineFormat.LORE), Material.RECORD_5); } @Override @@ -47,6 +52,11 @@ public class MagneticMaul extends LegendaryItem { return; } + if (ClansManager.getInstance().hasTimer(wielder)) + { + UtilPlayer.message(wielder, F.main("Clans", "You are not allowed to use the Magnetic Maul whilst protected from PvP. Run " + F.elem("/pvp") + " to enable PvP!")); + return; + } if (isHoldingRightClick()) { @@ -94,6 +104,10 @@ public class MagneticMaul extends LegendaryItem { continue; } + if (UtilEnt.hasFlag(entity, "LegendaryAbility.IgnoreMe")) + { + continue; + } double otherDistance = player.getLocation().distance(entity.getLocation()); double otherTargetDistance = target.distance(entity.getLocation()); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeridianScepter.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeridianScepter.java index f2a645cea..29268c8dd 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeridianScepter.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeridianScepter.java @@ -22,6 +22,7 @@ import mineplex.core.common.util.RGBData; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilCollections; import mineplex.core.common.util.UtilColor; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; @@ -43,11 +44,12 @@ public class MeridianScepter extends LegendaryItem public MeridianScepter() { - super("Meridian Scepter", UtilText.splitLinesToArray(new String[] { - C.cWhite + "Legend says that this scepter was found, and retrieved from the deepest trench in all of Minecraftia. It is said that he who wields this scepter holds the power of Poseidon himself." - + " ", - "#" + C.cYellow + "Right-Click" + C.cWhite + " to use Scepter." - }, LineFormat.LORE), Material.RECORD_6); + super("Meridian Scepter", UtilText.splitLinesToArray(new String[] + { + C.cWhite + "Legend says that this scepter was retrieved from the deepest trench in all of Minecraftia. It is said that he who wields this scepter holds the power of Poseidon himself.", + " ", + "#" + C.cYellow + "Right-Click" + C.cWhite + " to use " + C.cGreen + "Meridian Beam" + }, LineFormat.LORE), Material.RECORD_6); } @Override @@ -93,7 +95,7 @@ public class MeridianScepter extends LegendaryItem { for (Entity cur : projectile.getWorld().getEntities()) { - if (cur == shooter || !(cur instanceof LivingEntity) || (cur instanceof Player && UtilPlayer.isSpectator(cur))) + if (cur == shooter || !(cur instanceof LivingEntity) || (cur instanceof Player && UtilPlayer.isSpectator(cur)) || UtilEnt.hasFlag(cur, "LegendaryAbility.IgnoreMe")) continue; LivingEntity ent = (LivingEntity) cur; @@ -102,7 +104,8 @@ public class MeridianScepter extends LegendaryItem if (ent.getEyeLocation().subtract(0, .3, 0).distance(projectile) <= 2) { AttackAnimation aa = new AttackAnimation(ent, shooter); - int i = UtilServer.getServer().getScheduler().scheduleSyncRepeatingTask(UtilServer.getPlugin(), () -> { + int i = UtilServer.getServer().getScheduler().scheduleSyncRepeatingTask(UtilServer.getPlugin(), () -> + { aa.update(); }, 0, 1); _animations.put(aa, i); @@ -207,7 +210,8 @@ public class MeridianScepter extends LegendaryItem for (Entity cur : projectile.getWorld().getEntities()) { if (cur == shooter || !(cur instanceof LivingEntity) - || (cur instanceof Player && UtilPlayer.isSpectator(cur))) + || (cur instanceof Player && UtilPlayer.isSpectator(cur)) + || UtilEnt.hasFlag(cur, "LegendaryAbility.IgnoreMe")) continue; LivingEntity ent = (LivingEntity) cur; @@ -316,4 +320,4 @@ public class MeridianScepter extends LegendaryItem } } } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeteorBow.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeteorBow.java index 9c5b7b332..8a815479c 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeteorBow.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeteorBow.java @@ -11,8 +11,9 @@ public class MeteorBow extends LegendaryItem public MeteorBow() { - super("Meteor Bow", new String[]{ - "Shoot explosive arrows!" + super("Meteor Bow", new String[] + { + "Shoot explosive arrows!" }, Material.BOW); _flightTime = 0; } @@ -36,4 +37,4 @@ public class MeteorBow extends LegendaryItem { return _flightTime <= MAX_FLIGHT_TIME; } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java index 0c8956638..2558a0d2d 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java @@ -1,13 +1,13 @@ package mineplex.game.clans.items.legendaries; -import mineplex.game.clans.items.GearManager; -import mineplex.game.clans.items.PlayerGear; -import net.minecraft.server.v1_8_R3.PlayerConnection; +import java.lang.reflect.Field; + import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.util.Vector; @@ -20,12 +20,14 @@ import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTextBottom; import mineplex.core.common.util.UtilTime; import mineplex.core.recharge.Recharge; +import mineplex.game.clans.items.GearManager; +import mineplex.game.clans.items.PlayerGear; import mineplex.minecraft.game.core.damage.CustomDamageEvent; - -import java.lang.reflect.Field; +import net.minecraft.server.v1_8_R3.PlayerConnection; public class WindBlade extends LegendaryItem { @@ -42,6 +44,22 @@ public class WindBlade extends LegendaryItem { throw new RuntimeException("Could not reflectively access field", exception); } + + UtilServer.RegisterEvents(new Listener() + { + @EventHandler + public void onFall(CustomDamageEvent event) + { + if (event.GetDamageePlayer() != null && event.GetCause() == EntityDamageEvent.DamageCause.FALL) + { + PlayerGear playerGear = GearManager.getInstance().getPlayerGear(event.GetDamageePlayer()); + if (playerGear.getWeapon() instanceof WindBlade) + { + event.SetCancelled("Wind Blade No Fall Damage"); + } + } + } + }); } private static final double FLIGHT_VELOCITY = 0.75d; @@ -53,14 +71,16 @@ public class WindBlade extends LegendaryItem public WindBlade() { - super("Wind Blade", new String[]{ - C.cWhite + "Long ago, a race of cloud dwellers", - C.cWhite + "terrorized the skies. A remnant of", - C.cWhite + "their tyranny, this airy blade is", - C.cWhite + "the last surviving memorium from", - C.cWhite + "their final battle against the Titans.", - " ", - C.cYellow + "Right-Click" + C.cWhite + " to use" + C.cGreen + " Fly", + super("Wind Blade", new String[] + { + C.cWhite + "Long ago, a race of cloud dwellers", + C.cWhite + "terrorized the skies. A remnant of", + C.cWhite + "their tyranny, this airy blade is", + C.cWhite + "the last surviving memorium from", + C.cWhite + "their final battle against the Titans.", + " ", + C.cWhite + "Deals " + C.cYellow + "7 Damage" + C.cWhite + " with attack", + C.cYellow + "Right-Click" + C.cWhite + " to use " + C.cGreen + "Flight", }, Material.GREEN_RECORD); } @@ -150,19 +170,6 @@ public class WindBlade extends LegendaryItem event.AddMod("Wind Blade", 6); } - @EventHandler - public void onFall(CustomDamageEvent event) - { - if (event.GetDamageePlayer() != null && event.GetCause() == EntityDamageEvent.DamageCause.FALL) - { - PlayerGear playerGear = GearManager.getInstance().getPlayerGear(event.GetDamageePlayer()); - if (playerGear.getWeapon() instanceof WindBlade) - { - event.SetCancelled("Wind Blade No Fall Damage"); - } - } - } - private void propelPlayer(Player player) { Vector direction = player.getLocation().getDirection().normalize(); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/rares/RunedPickaxe.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/rares/RunedPickaxe.java index a2f7643dd..99f1b206e 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/rares/RunedPickaxe.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/rares/RunedPickaxe.java @@ -17,6 +17,7 @@ import org.bukkit.potion.PotionEffectType; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilServer; @@ -122,6 +123,12 @@ public class RunedPickaxe extends RareItem if (ClansManager.getInstance().getBlockRestore().contains(event.getBlock())) return; + if (ClansManager.getInstance().getSiegeManager().getOutpostManager().getOutposts().stream().filter(outpost -> + { + return UtilAlg.inBoundingBox(event.getBlock().getLocation(), outpost.getBoundsBlockBreak().getLeft(), outpost.getBoundsBlockBreak().getRight()); + }).findAny().isPresent()) + return; + if (!UtilTime.elapsed(pick._instamineEnabled, 12000)) { event.getBlock().breakNaturally(); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/runes/RuneManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/runes/RuneManager.java index eb3ba28fd..d7364864f 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/runes/RuneManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/runes/RuneManager.java @@ -353,7 +353,7 @@ public class RuneManager implements Listener { return true; } - if (type == Material.RECORD_4 || type == Material.GOLD_RECORD || type == Material.RECORD_3 || type == Material.RECORD_5 || type == Material.GREEN_RECORD) + if (type == Material.RECORD_4 || type == Material.GOLD_RECORD || type == Material.RECORD_3 || type == Material.RECORD_5 || type == Material.GREEN_RECORD || type == Material.RECORD_12) { return true; } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ui/GearPage.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ui/GearPage.java index 960e312be..201f89970 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ui/GearPage.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ui/GearPage.java @@ -44,14 +44,13 @@ import mineplex.game.clans.items.attributes.weapon.JaggedAttribute; import mineplex.game.clans.items.attributes.weapon.SharpAttribute; import mineplex.game.clans.items.legendaries.AlligatorsTooth; import mineplex.game.clans.items.legendaries.DemonicScythe; -import mineplex.game.clans.items.legendaries.EnergyCrossbow; import mineplex.game.clans.items.legendaries.GiantsBroadsword; import mineplex.game.clans.items.legendaries.HyperAxe; +import mineplex.game.clans.items.legendaries.KnightLance; import mineplex.game.clans.items.legendaries.LegendaryItem; import mineplex.game.clans.items.legendaries.MagneticMaul; import mineplex.game.clans.items.legendaries.MeridianScepter; import mineplex.game.clans.items.legendaries.WindBlade; -import mineplex.game.clans.items.rares.Crossbow; import mineplex.game.clans.items.rares.RareItem; import mineplex.game.clans.items.rares.RunedPickaxe; @@ -106,7 +105,7 @@ public class GearPage extends ShopPageBase } }; - _legendaryItems = Arrays.> asList(MeridianScepter.class, AlligatorsTooth.class, WindBlade.class, GiantsBroadsword.class, HyperAxe.class, MagneticMaul.class, DemonicScythe.class); + _legendaryItems = Arrays.> asList(MeridianScepter.class, AlligatorsTooth.class, WindBlade.class, GiantsBroadsword.class, HyperAxe.class, MagneticMaul.class, DemonicScythe.class, KnightLance.class); _rareItems = Arrays.> asList(RunedPickaxe.class); @@ -176,7 +175,6 @@ public class GearPage extends ShopPageBase { stageMaterial = stage3.getRight(); } - } else if (_stage == 3) { @@ -209,12 +207,7 @@ public class GearPage extends ShopPageBase e.printStackTrace(); } - addButton(4, stageMaterial, 0, stageTitle, new IButton() - { - public void onClick(Player player, ClickType clickType) - { - } - }, false); + addButton(4, stageMaterial, 0, stageTitle, (player, clickType) -> {}, false); addButton(45, Material.REDSTONE_BLOCK, 0, C.cRed + "Previous page", _backButton, false); addButton(53, Material.EMERALD_BLOCK, 0, C.cGreen + "Next page", _nextButton, false); @@ -417,7 +410,7 @@ public class GearPage extends ShopPageBase * The only time this code block should be reached is when * _itemType is BOW, or if there are ever new item types * added which don't have a case, since LEGENDARY is checked - * seperately, and ARMOR, and WEAPON have their own cases. + * separately, and ARMOR, and WEAPON have their own cases. */ _factory.setType(Material.BOW); @@ -782,7 +775,7 @@ public class GearPage extends ShopPageBase public void onClick(Player player, ClickType clickType) { player.getInventory().addItem(item); - + getPlugin().getPlayerGear(player).updateCache(true); } }, new String[] { C.cWhite + "Click to get item" }); } @@ -795,5 +788,4 @@ public class GearPage extends ShopPageBase } buildPage(); } - -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/BankPage.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/BankPage.java index dd6fd97e4..249628730 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/BankPage.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/BankPage.java @@ -100,7 +100,7 @@ public class BankPage extends ShopPageBase String playerGoldString = ChatColor.RESET + F.value("Your Gold", playerGold + "g"); String purchaseString = ChatColor.RESET + F.value("Token Value", TOKEN_VALUE + "g"); String goldString = ChatColor.RESET + C.cWhite + "Store your bank gold in the form of a gold token!"; - ShopItem shopItem = new ShopItem(Material.RECORD_12, title, new String[] {" ", playerGoldString, purchaseString, goldString}, 0, true, true); + ShopItem shopItem = new ShopItem(Material.RABBIT_FOOT, title, new String[] {" ", playerGoldString, purchaseString, goldString}, 0, true, true); addButton(3, shopItem, button); } @@ -114,7 +114,7 @@ public class BankPage extends ShopPageBase String playerGoldString = ChatColor.RESET + F.value("Your Gold", playerGold + "g"); String purchaseString = ChatColor.RESET + C.cWhite + "You don't have enough gold"; String goldString = ChatColor.RESET + C.cWhite + "You need " + C.cYellow + goldCost + C.cWhite + " gold to purchase a token."; - ShopItem shopItem = new ShopItem(Material.RECORD_12, title, new String[] {" ", playerGoldString, purchaseString, goldString}, 0, true, true); + ShopItem shopItem = new ShopItem(Material.RABBIT_FOOT, title, new String[] {" ", playerGoldString, purchaseString, goldString}, 0, true, true); addButton(3, shopItem, button); } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/CashInButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/CashInButton.java index e2259fd51..a5ce9d6c6 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/CashInButton.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/CashInButton.java @@ -1,16 +1,11 @@ package mineplex.game.clans.shop.bank; -import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; -import mineplex.core.common.util.Callback; -import mineplex.core.donation.DonationManager; import mineplex.core.recharge.Recharge; import mineplex.core.shop.item.IButton; -import mineplex.game.clans.clans.ClanInfo; -import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.economy.GoldManager; import mineplex.game.clans.items.CustomItem; import mineplex.game.clans.items.GearManager; @@ -47,5 +42,4 @@ public class CashInButton implements IButton _page.refresh(); } } - -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/StoreGoldButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/StoreGoldButton.java index 66efc500b..6d023085c 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/StoreGoldButton.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/StoreGoldButton.java @@ -1,6 +1,5 @@ package mineplex.game.clans.shop.bank; -import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; @@ -34,5 +33,4 @@ public class StoreGoldButton implements IButton _page.refresh(); } } - } \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/ClansMainTutorial.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/ClansMainTutorial.java index e75da28b3..8fc0f0b92 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/ClansMainTutorial.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/ClansMainTutorial.java @@ -4,8 +4,31 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import org.bukkit.Bukkit; +import org.bukkit.DyeColor; +import org.bukkit.Effect; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockDamageEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.java.JavaPlugin; + +import com.google.common.collect.Lists; +//import mineplex.game.clans.tutorial.tutorials.clans.repository.TutorialRepository; + import mineplex.core.common.util.C; -import mineplex.core.common.util.Callback; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilFirework; @@ -42,30 +65,6 @@ import mineplex.game.clans.tutorial.tutorials.clans.objective.FinalObjective; import mineplex.game.clans.tutorial.tutorials.clans.objective.PurchaseItemsObjective; import mineplex.game.clans.tutorial.tutorials.clans.objective.ShopsObjective; -import org.bukkit.Bukkit; -import org.bukkit.DyeColor; -import org.bukkit.Effect; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockDamageEvent; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.plugin.java.JavaPlugin; - -import com.google.common.collect.Lists; -//import mineplex.game.clans.tutorial.tutorials.clans.repository.TutorialRepository; - public class ClansMainTutorial extends Tutorial { // The distance from which the gate opens when a player approaches. @@ -89,7 +88,7 @@ public class ClansMainTutorial extends Tutorial { super(plugin, message, hologram, "Clans Tutorial", "main", Material.DIAMOND_SWORD, (byte) 0); - _fireworks = new ArrayList(); + _fireworks = new ArrayList<>(); try { @@ -121,14 +120,15 @@ public class ClansMainTutorial extends Tutorial _fireworks.add(player); UtilTextMiddle.display(C.cYellow + "Congratulations", "You have completed the Tutorial!", 10, 60, 10, player); - Bukkit.getScheduler().runTaskLater(getPlugin(), () -> { + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> + { _fireworks.remove(player); getMessage().removePlayer(player); player.teleport(Spawn.getNorthSpawn()); UtilInv.Clear(player); -// ClansManager.getInstance().getItemMapManager().setMap(player); + ClansManager.getInstance().getItemMapManager().setMap(player); }, 20 * 10L); player.setWalkSpeed(0.2F); @@ -145,14 +145,16 @@ public class ClansMainTutorial extends Tutorial } /* - ClansManager.getInstance().runAsync(() -> { + ClansManager.getInstance().runAsync(() -> + { _repository.SetTimesPlayed(player.getUniqueId(), _repository.GetTimesPlayed(player.getUniqueId()) + 1); final int times = _repository.GetTimesPlayed(player.getUniqueId()); if (_repository.GetTimesPlayed(player.getUniqueId()) == 1) { - ClansManager.getInstance().runSync(() -> { + ClansManager.getInstance().runSync(() -> + { if (times == 1) { GoldManager.getInstance().addGold(player, 32000); @@ -620,4 +622,4 @@ public class ClansMainTutorial extends Tutorial TutorialRegion region = getRegion(player); return isIn(block.getLocation(), region, ClansMainTutorial.Bounds.LAND_CLAIM); } -} +} \ No newline at end of file