diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..427417b --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Plugins REQUIRED/GenricUtils-1.0-SNAPSHOT.jar b/Plugins REQUIRED/GenricUtils-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..0ca7e5b Binary files /dev/null and b/Plugins REQUIRED/GenricUtils-1.0-SNAPSHOT.jar differ diff --git a/Plugins REQUIRED/KoTH.jar b/Plugins REQUIRED/KoTH.jar new file mode 100644 index 0000000..59aa4e1 Binary files /dev/null and b/Plugins REQUIRED/KoTH.jar differ diff --git a/Plugins REQUIRED/Popura-1.0-SNAPSHOT.jar b/Plugins REQUIRED/Popura-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..0c18a34 Binary files /dev/null and b/Plugins REQUIRED/Popura-1.0-SNAPSHOT.jar differ diff --git a/Plugins REQUIRED/Vault-1.4.1.jar b/Plugins REQUIRED/Vault-1.4.1.jar new file mode 100644 index 0000000..d4d4ecc Binary files /dev/null and b/Plugins REQUIRED/Vault-1.4.1.jar differ diff --git a/Plugins REQUIRED/WorldEdit.jar b/Plugins REQUIRED/WorldEdit.jar new file mode 100644 index 0000000..48ab614 Binary files /dev/null and b/Plugins REQUIRED/WorldEdit.jar differ diff --git a/Plugins REQUIRED/worldguard-6.0.0-beta-03.jar b/Plugins REQUIRED/worldguard-6.0.0-beta-03.jar new file mode 100644 index 0000000..ac57234 Binary files /dev/null and b/Plugins REQUIRED/worldguard-6.0.0-beta-03.jar differ diff --git a/Popura-1.0-SNAPSHOT.jar b/Popura-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..0c18a34 Binary files /dev/null and b/Popura-1.0-SNAPSHOT.jar differ diff --git a/READ ME.txt b/READ ME.txt new file mode 100644 index 0000000..81f0177 --- /dev/null +++ b/READ ME.txt @@ -0,0 +1,10 @@ +------------------------------------------------------ + +1. Minetweak.jar is the custom spigot +2. Put Popura into the plugin folder +3. The .JAR files are in the folders. To easily get them just search .JAR +4. All files contain the src code +5. Upon loading the plugins you will recieve an error w/ Popura. It's because you need to hook into the MySQL database. +6. Enjoy! + +------------------------------------------------------ diff --git a/README.md b/README.md index ec3b130..95e5603 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# ViperMC-2016-or-some-shit \ No newline at end of file +Viper diff --git a/ViperCore/.gitignore b/ViperCore/.gitignore new file mode 100644 index 0000000..fff3a70 --- /dev/null +++ b/ViperCore/.gitignore @@ -0,0 +1,6 @@ +*.iml +bin/ +META-INF/ +target/ +.idea/ +upload.sh \ No newline at end of file diff --git a/ViperCore/libs/GenricUtils-1.0-SNAPSHOT.jar b/ViperCore/libs/GenricUtils-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..0ca7e5b Binary files /dev/null and b/ViperCore/libs/GenricUtils-1.0-SNAPSHOT.jar differ diff --git a/ViperCore/libs/HCFactions.jar b/ViperCore/libs/HCFactions.jar new file mode 100644 index 0000000..474c8a0 Binary files /dev/null and b/ViperCore/libs/HCFactions.jar differ diff --git a/ViperCore/libs/KoTH.jar b/ViperCore/libs/KoTH.jar new file mode 100644 index 0000000..59aa4e1 Binary files /dev/null and b/ViperCore/libs/KoTH.jar differ diff --git a/ViperCore/libs/Popura-1.0-SNAPSHOT.jar b/ViperCore/libs/Popura-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..0c18a34 Binary files /dev/null and b/ViperCore/libs/Popura-1.0-SNAPSHOT.jar differ diff --git a/ViperCore/libs/Vault-1.4.1.jar b/ViperCore/libs/Vault-1.4.1.jar new file mode 100644 index 0000000..d4d4ecc Binary files /dev/null and b/ViperCore/libs/Vault-1.4.1.jar differ diff --git a/ViperCore/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar b/ViperCore/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar new file mode 100644 index 0000000..794f22b Binary files /dev/null and b/ViperCore/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar differ diff --git a/ViperCore/libs/paperspigot-api-1.7.10-R0.1-SNAPSHOT.jar b/ViperCore/libs/paperspigot-api-1.7.10-R0.1-SNAPSHOT.jar new file mode 100644 index 0000000..2bddac4 Binary files /dev/null and b/ViperCore/libs/paperspigot-api-1.7.10-R0.1-SNAPSHOT.jar differ diff --git a/ViperCore/out/artifacts/DeltaCore/DeltaCore.jar b/ViperCore/out/artifacts/DeltaCore/DeltaCore.jar new file mode 100644 index 0000000..fec910c Binary files /dev/null and b/ViperCore/out/artifacts/DeltaCore/DeltaCore.jar differ diff --git a/ViperCore/pom.xml b/ViperCore/pom.xml new file mode 100644 index 0000000..e7fbf85 --- /dev/null +++ b/ViperCore/pom.xml @@ -0,0 +1,92 @@ + + + 4.0.0 + + net.libhalt.bukkit.kaede + ViperCore + 0.0.8 + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + sk89q-repo + http://maven.sk89q.com/repo/ + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.2 + + 1.7 + 1.7 + + + + + ${project.artifactId} + + + + + + org.spigotmc + spigot-api + 1.8-R0.1-SNAPSHOT + + system + ${project.basedir}/libs/paperspigot-api-1.7.10-R0.1-SNAPSHOT.jar + + + org.spigotmc + spigot-server + 1.8-R0.1-SNAPSHOT + + system + ${project.basedir}/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar + + + io.syuu + GenericUtils + 0.0.8 + + system + ${project.basedir}/libs/GenricUtils-1.0-SNAPSHOT.jar + + + io.syuu + Popura + 0.0.8 + system + ${project.basedir}/libs/Popura-1.0-SNAPSHOT.jar + + + vault + vault + LATEST + system + ${project.basedir}/libs/Vault-1.4.1.jar + + + + subside.plugins + KoTH + LATEST + system + ${project.basedir}/libs/KoTH.jar + + + com.sk89q + worldguard + 6.1.1-SNAPSHOT + + + \ No newline at end of file diff --git a/ViperCore/src/main/java/cloth/bugs/FenceGateBug.java b/ViperCore/src/main/java/cloth/bugs/FenceGateBug.java new file mode 100644 index 0000000..246ac2a --- /dev/null +++ b/ViperCore/src/main/java/cloth/bugs/FenceGateBug.java @@ -0,0 +1,76 @@ +package cloth.bugs; + +import com.igodlik3.subclaims.FactionsUtils; +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.syuu.popura.faction.FactionType; +import net.syuu.popura.faction.bean.Faction; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.UUID; + +/** + * Created by Brennan on 6/18/2017. + */ +public class FenceGateBug implements Listener +{ + + HCFactionPlugin plugin; + public FenceGateBug(HCFactionPlugin instance){ + this.plugin = instance; + } + + @EventHandler + public void openDoor(PlayerInteractEvent e) + { + final Player p = e.getPlayer(); + if(e.getClickedBlock() != null) + { + if(e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) + { + if(e.getClickedBlock().getType() == Material.FENCE_GATE) + { + if(FactionsUtils.getFactionAt(e.getClickedBlock().getLocation()) != null) + { + if(FactionsUtils.getFactionAt(e.getClickedBlock().getLocation()).getFactionType() != FactionType.WARZONE) + { + Faction pFaction = FactionsUtils.getFaction(p); + Faction lFaction = FactionsUtils.getFactionAt(e.getClickedBlock().getLocation()); + + if(pFaction == null) + { + if(p.getLocation().subtract(0, 1, 0).getBlock().getType() == Material.AIR || p.getLocation().subtract(0, 1, 0).getBlock().getType() == Material.FENCE_GATE) + { + return; + } + + p.setVelocity(p.getLocation().getDirection().multiply(-1).setY(0)); + return; + } + + if(!pFaction.equals(lFaction)) + { + if(p.getLocation().subtract(0, 1, 0).getBlock().getType() == Material.AIR || p.getLocation().subtract(0, 1, 0).getBlock().getType() == Material.FENCE_GATE) + { + return; + } + + p.setVelocity(p.getLocation().getDirection().multiply(-1).setY(0)); + return; + } + } + } + } + } + } + } +} diff --git a/ViperCore/src/main/java/cloth/pearls/PearlInteractEvent.java b/ViperCore/src/main/java/cloth/pearls/PearlInteractEvent.java new file mode 100644 index 0000000..6ba11b8 --- /dev/null +++ b/ViperCore/src/main/java/cloth/pearls/PearlInteractEvent.java @@ -0,0 +1,55 @@ +package cloth.pearls; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.manager.EnderPearlManager; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.EnderPearl; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Brennan on 6/27/2017. + */ +public class PearlInteractEvent implements Listener +{ + + HCFactionPlugin plugin; + public PearlInteractEvent(HCFactionPlugin instance){ + this.plugin = instance; + } + + @EventHandler + public void onInteract(PlayerInteractEvent e) + { + Player p = e.getPlayer(); + if(p.getItemInHand() != null) + { + if(p.getItemInHand().getType() == Material.ENDER_PEARL) + { + if(e.getAction() == Action.RIGHT_CLICK_AIR) + { + if(!EnderPearlManager.isCooldownActive(e.getPlayer())) + { + e.setCancelled(true); + + if(p.getItemInHand().getAmount() == 1) + { + p.setItemInHand(new ItemStack(Material.AIR)); + } else { + p.getItemInHand().setAmount(p.getItemInHand().getAmount() - 1); + } + + EnderPearl pearl = e.getPlayer().launchProjectile(EnderPearl.class); + return; + } + } + } + } + } +} diff --git a/ViperCore/src/main/java/cloth/portals/NetherPortalEvent.java b/ViperCore/src/main/java/cloth/portals/NetherPortalEvent.java new file mode 100644 index 0000000..6b1d2cb --- /dev/null +++ b/ViperCore/src/main/java/cloth/portals/NetherPortalEvent.java @@ -0,0 +1,41 @@ +package cloth.portals; + +import com.igodlik3.subclaims.FactionsUtils; +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerChangedWorldEvent; +import org.bukkit.event.player.PlayerPortalEvent; +import org.bukkit.event.player.PlayerTeleportEvent; + +/** + * Created by Brennan on 6/15/2017. + */ +public class NetherPortalEvent implements Listener +{ + + HCFactionPlugin plugin; + public NetherPortalEvent(HCFactionPlugin instance) + { + this.plugin = instance; + } + + @EventHandler + public void onTeleport(PlayerPortalEvent e) + { + if(FactionsUtils.getFactionAt(e.getPlayer().getLocation()) != null) + { + String name = FactionsUtils.getFactionAt(e.getPlayer().getLocation()).getName(); + if(name.equals("Spawn")) + { + if(e.getCause() == PlayerTeleportEvent.TeleportCause.NETHER_PORTAL){ + e.setCancelled(true); + e.getPlayer().sendMessage(plugin.configdata.getConfigMessage("nether-portal-in-spawn").replaceAll("&", "§")); + return; + } + } + } + } +} diff --git a/ViperCore/src/main/java/cloth/xp/XpBottleCommand.java b/ViperCore/src/main/java/cloth/xp/XpBottleCommand.java new file mode 100644 index 0000000..42e6969 --- /dev/null +++ b/ViperCore/src/main/java/cloth/xp/XpBottleCommand.java @@ -0,0 +1,64 @@ +package cloth.xp; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +/** + * Created by Brennan on 6/16/2017. + */ +public class XpBottleCommand implements CommandExecutor +{ + + HCFactionPlugin plugin; + public XpBottleCommand(HCFactionPlugin instance) + { + this.plugin = instance; + } + + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + + if(!(sender instanceof Player)) + { + sender.sendMessage("Only players can use this command."); + return true; + } + + Player p = (Player) sender; + + if(p.getLevel() < 30) + { + String message = plugin.configdata.getConfigMessage("xp-bottle-insufficient").replaceAll("&", "§"); + p.sendMessage(message); + return true; + } + + if(p.getInventory().firstEmpty() == -1) + { + String message = plugin.configdata.getConfigMessage("xp-bottle-inventory").replaceAll("&", "§"); + p.sendMessage(message); + return true; + } + + String message = plugin.configdata.getConfigMessage("xp-bottle-created").replaceAll("&", "§"); + p.sendMessage(message); + p.setLevel(p.getLevel() - 30); + giveBottle(p); + return true; + } + + public void giveBottle(Player p){ + String bottlename = plugin.configdata.getConfigMessage("xp-bottle-name").replaceAll("&", "§"); + ItemStack bottle = new ItemStack(Material.EXP_BOTTLE); + ItemMeta meta = bottle.getItemMeta(); + meta.setDisplayName(bottlename); + bottle.setItemMeta(meta); + p.getInventory().addItem(bottle); + return; + } +} diff --git a/ViperCore/src/main/java/cloth/xp/XpBottleEvent.java b/ViperCore/src/main/java/cloth/xp/XpBottleEvent.java new file mode 100644 index 0000000..fd7f4ea --- /dev/null +++ b/ViperCore/src/main/java/cloth/xp/XpBottleEvent.java @@ -0,0 +1,59 @@ +package cloth.xp; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Brennan on 6/16/2017. + */ +public class XpBottleEvent implements Listener +{ + + HCFactionPlugin plugin; + public XpBottleEvent(HCFactionPlugin instance) + { + this.plugin = instance; + } + + @EventHandler + public void onInteract(PlayerInteractEvent e) { + if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) + { + if(e.getPlayer().getItemInHand() != null) + { + if(e.getPlayer().getItemInHand().getType() == Material.EXP_BOTTLE) + { + if(e.getPlayer().getItemInHand().hasItemMeta()) + { + if(e.getPlayer().getItemInHand().getItemMeta().hasDisplayName()) + { + String xp_bottle_name = plugin.configdata.getConfigMessage("xp-bottle-name").replaceAll("&","§"); + if(e.getPlayer().getItemInHand().getItemMeta().getDisplayName().equals(xp_bottle_name)) + { + e.setCancelled(true); + + if(e.getPlayer().getItemInHand().getAmount() > 1) { + e.getPlayer().getItemInHand().setAmount(e.getPlayer().getItemInHand().getAmount() - 1); + } else { + e.getPlayer().setItemInHand(new ItemStack(Material.AIR)); + } + + String message = plugin.configdata.getConfigMessage("xp-bottle-received").replaceAll("&", "§"); + e.getPlayer().sendMessage(message); + e.getPlayer().setLevel(e.getPlayer().getLevel() + 30); + e.getPlayer().playSound(e.getPlayer().getLocation(), Sound.ORB_PICKUP, 1, 1); + return; + } + } + } + } + } + } + } +} diff --git a/ViperCore/src/main/java/com/confinement/filter/Filter.java b/ViperCore/src/main/java/com/confinement/filter/Filter.java new file mode 100644 index 0000000..fd3b98d --- /dev/null +++ b/ViperCore/src/main/java/com/confinement/filter/Filter.java @@ -0,0 +1,30 @@ +package com.confinement.filter; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Manager; +import org.bukkit.plugin.java.*; +import org.bukkit.command.*; +import com.confinement.filter.commands.*; +import org.bukkit.*; +import org.bukkit.event.*; +import org.bukkit.plugin.*; +import com.confinement.filter.listeners.*; + +public class Filter extends Manager +{ + public Filter(HCFactionPlugin plugin) { + super(plugin); + } + + public void init() { + getPlugin().getCommand("cobble").setExecutor((CommandExecutor)new CobblestoneCommand()); + getPlugin().getCommand("stone").setExecutor((CommandExecutor)new StoneCommand()); + getPlugin().getCommand("mobdrops").setExecutor((CommandExecutor)new MobDropsCommand()); + Bukkit.getServer().getPluginManager().registerEvents((Listener)new CobblestoneListener(), (Plugin)getPlugin()); + Bukkit.getServer().getPluginManager().registerEvents((Listener)new StoneListener(), (Plugin)getPlugin()); + Bukkit.getServer().getPluginManager().registerEvents((Listener)new MobDropsListener(), (Plugin)getPlugin()); + } + + public void onDisable() { + } +} diff --git a/ViperCore/src/main/java/com/confinement/filter/commands/CobblestoneCommand.java b/ViperCore/src/main/java/com/confinement/filter/commands/CobblestoneCommand.java new file mode 100644 index 0000000..588a4fd --- /dev/null +++ b/ViperCore/src/main/java/com/confinement/filter/commands/CobblestoneCommand.java @@ -0,0 +1,30 @@ +package com.confinement.filter.commands; + +import java.util.*; +import org.bukkit.command.*; +import org.bukkit.entity.*; +import org.bukkit.*; + +public class CobblestoneCommand implements CommandExecutor +{ + public static final ArrayList cantPickup; + + static { + cantPickup = new ArrayList(); + } + + public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) { + final Player player = (Player)sender; + if (cmd.getName().equalsIgnoreCase("cobble") && sender instanceof Player) { + if (args.length == 0 && !CobblestoneCommand.cantPickup.contains(player.getUniqueId())) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7You are now &cunable &7to pickup cobblestone.")); + CobblestoneCommand.cantPickup.add(player.getUniqueId()); + } + else { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7You are now &aable &7to pickup cobblestone.")); + CobblestoneCommand.cantPickup.remove(player.getUniqueId()); + } + } + return true; + } +} diff --git a/ViperCore/src/main/java/com/confinement/filter/commands/MobDropsCommand.java b/ViperCore/src/main/java/com/confinement/filter/commands/MobDropsCommand.java new file mode 100644 index 0000000..bd998c4 --- /dev/null +++ b/ViperCore/src/main/java/com/confinement/filter/commands/MobDropsCommand.java @@ -0,0 +1,30 @@ +package com.confinement.filter.commands; + +import java.util.*; +import org.bukkit.command.*; +import org.bukkit.entity.*; +import org.bukkit.*; + +public class MobDropsCommand implements CommandExecutor +{ + public static final ArrayList cantPickupMobs; + + static { + cantPickupMobs = new ArrayList(); + } + + public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) { + final Player player = (Player)sender; + if (cmd.getName().equalsIgnoreCase("mobdrops") && sender instanceof Player) { + if (args.length == 0 && !MobDropsCommand.cantPickupMobs.contains(player.getUniqueId().toString())) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7You are now &cunable &7to pickup mob drops.")); + MobDropsCommand.cantPickupMobs.add(player.getUniqueId().toString()); + } + else { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7You are now &aable &7to pickup mob drops.")); + MobDropsCommand.cantPickupMobs.remove(player.getUniqueId().toString()); + } + } + return true; + } +} diff --git a/ViperCore/src/main/java/com/confinement/filter/commands/StoneCommand.java b/ViperCore/src/main/java/com/confinement/filter/commands/StoneCommand.java new file mode 100644 index 0000000..de623d7 --- /dev/null +++ b/ViperCore/src/main/java/com/confinement/filter/commands/StoneCommand.java @@ -0,0 +1,30 @@ +package com.confinement.filter.commands; + +import java.util.*; +import org.bukkit.command.*; +import org.bukkit.entity.*; +import org.bukkit.*; + +public class StoneCommand implements CommandExecutor +{ + public static final ArrayList cantPickupStone; + + static { + cantPickupStone = new ArrayList(); + } + + public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) { + final Player player = (Player)sender; + if (cmd.getName().equalsIgnoreCase("stone") && sender instanceof Player) { + if (args.length == 0 && !StoneCommand.cantPickupStone.contains(player.getUniqueId())) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7You are now &cunable &7to pickup stone!!")); + StoneCommand.cantPickupStone.add(player.getUniqueId()); + } + else { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7You are now &aable &7to pickup stone.")); + StoneCommand.cantPickupStone.remove(player.getUniqueId()); + } + } + return true; + } +} diff --git a/ViperCore/src/main/java/com/confinement/filter/listeners/CobblestoneListener.java b/ViperCore/src/main/java/com/confinement/filter/listeners/CobblestoneListener.java new file mode 100644 index 0000000..6fcc0bf --- /dev/null +++ b/ViperCore/src/main/java/com/confinement/filter/listeners/CobblestoneListener.java @@ -0,0 +1,27 @@ +package com.confinement.filter.listeners; + +import org.bukkit.*; +import com.confinement.filter.commands.*; +import org.bukkit.entity.*; +import org.bukkit.inventory.*; +import org.bukkit.event.*; +import org.bukkit.event.player.*; + +public class CobblestoneListener implements Listener +{ + @EventHandler + public void onPlayerPickup(final PlayerPickupItemEvent event) { + final Player player = event.getPlayer(); + final ItemStack item = event.getItem().getItemStack(); + final Material itemType = item.getType(); + if (itemType == Material.COBBLESTONE && CobblestoneCommand.cantPickup.contains(player.getUniqueId())) { + event.setCancelled(true); + } + } + + @EventHandler + public void onLeave(final PlayerQuitEvent event) { + final Player player = event.getPlayer(); + CobblestoneCommand.cantPickup.remove(player.getUniqueId()); + } +} diff --git a/ViperCore/src/main/java/com/confinement/filter/listeners/MobDropsListener.java b/ViperCore/src/main/java/com/confinement/filter/listeners/MobDropsListener.java new file mode 100644 index 0000000..d3c0ed4 --- /dev/null +++ b/ViperCore/src/main/java/com/confinement/filter/listeners/MobDropsListener.java @@ -0,0 +1,35 @@ +package com.confinement.filter.listeners; + +import org.bukkit.*; +import com.confinement.filter.commands.*; +import org.bukkit.entity.*; +import org.bukkit.inventory.*; +import org.bukkit.event.*; +import org.bukkit.event.player.*; + +public class MobDropsListener implements Listener +{ + @EventHandler + public void onPlayerPickup(final PlayerPickupItemEvent event) { + final Player player = event.getPlayer(); + final ItemStack item = event.getItem().getItemStack(); + final Material itemType = item.getType(); + if ((itemType == Material.BONE || itemType == Material.ROTTEN_FLESH || itemType == Material.BOW || + itemType == Material.SPIDER_EYE || itemType == Material.STRING || itemType == Material.ARROW || + itemType == Material.POTATO + /*||itemType == Material.IRON_HELMET || itemType == Material.IRON_HELMET || + itemType == Material.IRON_CHESTPLATE || itemType == Material.IRON_LEGGINGS || itemType == Material.IRON_BOOTS + || itemType == Material.GOLD_HELMET || itemType == Material.GOLD_CHESTPLATE || itemType == Material.GOLD_LEGGINGS || + itemType == Material.GOLD_BOOTS || itemType == Material.CHAINMAIL_HELMET || itemType == Material.CHAINMAIL_CHESTPLATE || + itemType == Material.CHAINMAIL_LEGGINGS || itemType == Material.CHAINMAIL_BOOTS || itemType == Material.LEATHER_HELMET || + itemType == Material.LEATHER_CHESTPLATE || itemType == Material.LEATHER_LEGGINGS || itemType == Material.LEATHER_BOOTS */) && MobDropsCommand.cantPickupMobs.contains(player.getUniqueId().toString())) { + event.setCancelled(true); + } + } + + @EventHandler + public void onLeave(final PlayerQuitEvent event) { + final Player player = event.getPlayer(); + MobDropsCommand.cantPickupMobs.remove(player.getUniqueId().toString()); + } +} diff --git a/ViperCore/src/main/java/com/confinement/filter/listeners/StoneListener.java b/ViperCore/src/main/java/com/confinement/filter/listeners/StoneListener.java new file mode 100644 index 0000000..f4137f9 --- /dev/null +++ b/ViperCore/src/main/java/com/confinement/filter/listeners/StoneListener.java @@ -0,0 +1,27 @@ +package com.confinement.filter.listeners; + +import org.bukkit.*; +import com.confinement.filter.commands.*; +import org.bukkit.entity.*; +import org.bukkit.inventory.*; +import org.bukkit.event.*; +import org.bukkit.event.player.*; + +public class StoneListener implements Listener +{ + @EventHandler + public void onPlayerPickup(final PlayerPickupItemEvent event) { + final Player player = event.getPlayer(); + final ItemStack item = event.getItem().getItemStack(); + final Material itemType = item.getType(); + if (itemType == Material.STONE && StoneCommand.cantPickupStone.contains(player.getUniqueId())) { + event.setCancelled(true); + } + } + + @EventHandler + public void onLeave(final PlayerQuitEvent event) { + final Player player = event.getPlayer(); + StoneCommand.cantPickupStone.remove(player.getUniqueId()); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/ItemBuilder.java b/ViperCore/src/main/java/com/igodlik3/ItemBuilder.java new file mode 100644 index 0000000..4fa816f --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/ItemBuilder.java @@ -0,0 +1,677 @@ +package com.igodlik3; + +import org.bukkit.inventory.*; +import org.bukkit.material.*; +import org.bukkit.enchantments.*; +import java.util.*; +import org.apache.commons.lang.*; +import org.bukkit.configuration.file.*; +import org.bukkit.inventory.meta.*; +import net.minecraft.util.com.google.gson.*; +import org.bukkit.*; +import java.lang.reflect.*; + +public class ItemBuilder +{ + private ItemStack item; + private ItemMeta meta; + private Material material; + private int amount; + private MaterialData data; + private short damage; + private Map enchantments; + private String displayname; + private List lore; + private boolean andSymbol; + private boolean unsafeStackSize; + + public ItemBuilder(Material material) { + this.material = Material.STONE; + this.amount = 1; + this.damage = 0; + this.enchantments = new HashMap(); + this.lore = new ArrayList(); + this.andSymbol = true; + this.unsafeStackSize = false; + if (material == null) { + material = Material.AIR; + } + this.item = new ItemStack(material); + this.material = material; + } + + public ItemBuilder(Material material, int amount) { + this.material = Material.STONE; + this.amount = 1; + this.damage = 0; + this.enchantments = new HashMap(); + this.lore = new ArrayList(); + this.andSymbol = true; + this.unsafeStackSize = false; + if (material == null) { + material = Material.AIR; + } + if ((amount > material.getMaxStackSize() || amount <= 0) && !this.unsafeStackSize) { + amount = 1; + } + this.amount = amount; + this.item = new ItemStack(material, amount); + this.material = material; + } + + public ItemBuilder(Material material, int amount, final String displayname) { + this.material = Material.STONE; + this.amount = 1; + this.damage = 0; + this.enchantments = new HashMap(); + this.lore = new ArrayList(); + this.andSymbol = true; + this.unsafeStackSize = false; + if (material == null) { + material = Material.AIR; + } + Validate.notNull((Object)displayname, "The Displayname is null."); + this.item = new ItemStack(material, amount); + this.material = material; + if ((amount > material.getMaxStackSize() || amount <= 0) && !this.unsafeStackSize) { + amount = 1; + } + this.amount = amount; + this.displayname = displayname; + } + + public ItemBuilder(Material material, final String displayname) { + this.material = Material.STONE; + this.amount = 1; + this.damage = 0; + this.enchantments = new HashMap(); + this.lore = new ArrayList(); + this.andSymbol = true; + this.unsafeStackSize = false; + if (material == null) { + material = Material.AIR; + } + Validate.notNull((Object)displayname, "The Displayname is null."); + this.item = new ItemStack(material); + this.material = material; + this.displayname = displayname; + } + + public ItemBuilder(final ItemStack item) { + this.material = Material.STONE; + this.amount = 1; + this.damage = 0; + this.enchantments = new HashMap(); + this.lore = new ArrayList(); + this.andSymbol = true; + this.unsafeStackSize = false; + Validate.notNull((Object)item, "The Item is null."); + this.item = item; + if (item.hasItemMeta()) { + this.meta = item.getItemMeta(); + } + this.material = item.getType(); + this.amount = item.getAmount(); + this.data = item.getData(); + this.damage = item.getDurability(); + this.enchantments = (Map)item.getEnchantments(); + if (item.hasItemMeta()) { + this.displayname = item.getItemMeta().getDisplayName(); + } + if (item.hasItemMeta()) { + this.lore = (List)item.getItemMeta().getLore(); + } + } + + public ItemBuilder(final FileConfiguration cfg, final String path) { + this(cfg.getItemStack(path)); + } + + public ItemBuilder(final ItemBuilder builder) { + this.material = Material.STONE; + this.amount = 1; + this.damage = 0; + this.enchantments = new HashMap(); + this.lore = new ArrayList(); + this.andSymbol = true; + this.unsafeStackSize = false; + Validate.notNull((Object)builder, "The ItemBuilder is null."); + this.item = builder.item; + this.meta = builder.meta; + this.material = builder.material; + this.amount = builder.amount; + this.damage = builder.damage; + this.data = builder.data; + this.damage = builder.damage; + this.enchantments = builder.enchantments; + this.displayname = builder.displayname; + this.lore = builder.lore; + } + + public ItemBuilder amount(int amount) { + if ((amount > this.material.getMaxStackSize() || amount <= 0) && !this.unsafeStackSize) { + amount = 1; + } + this.amount = amount; + return this; + } + + public ItemBuilder data(final MaterialData data) { + Validate.notNull((Object)data, "The Data is null."); + this.data = data; + return this; + } + + @Deprecated + public ItemBuilder damage(final short damage) { + this.damage = damage; + return this; + } + + public ItemBuilder durability(final short damage) { + this.damage = damage; + return this; + } + + public ItemBuilder material(final Material material) { + Validate.notNull((Object)material, "The Material is null."); + this.material = material; + return this; + } + + public ItemBuilder meta(final ItemMeta meta) { + Validate.notNull((Object)meta, "The Meta is null."); + this.meta = meta; + return this; + } + + public ItemBuilder enchant(final Enchantment enchant, final int level) { + Validate.notNull((Object)enchant, "The Enchantment is null."); + this.enchantments.put(enchant, level); + return this; + } + + public ItemBuilder enchant(final Map enchantments) { + Validate.notNull((Object)enchantments, "The Enchantments are null."); + this.enchantments = enchantments; + return this; + } + + public ItemBuilder displayname(final String displayname) { + Validate.notNull((Object)displayname, "The Displayname is null."); + this.displayname = (this.andSymbol ? ChatColor.translateAlternateColorCodes('&', displayname) : displayname); + return this; + } + + public ItemBuilder lore(final String line) { + Validate.notNull((Object)line, "The Line is null."); + this.lore.add(this.andSymbol ? ChatColor.translateAlternateColorCodes('&', line) : line); + return this; + } + + public ItemBuilder lore(final List lore) { + Validate.notNull((Object)lore, "The Lores are null."); + this.lore = lore; + return this; + } + + @Deprecated + public ItemBuilder lores(final String... lines) { + Validate.notNull((Object)lines, "The Lines are null."); + for (final String line : lines) { + this.lore(this.andSymbol ? ChatColor.translateAlternateColorCodes('&', line) : line); + } + return this; + } + + public ItemBuilder lore(final String... lines) { + Validate.notNull((Object)lines, "The Lines are null."); + for (final String line : lines) { + this.lore(this.andSymbol ? ChatColor.translateAlternateColorCodes('&', line) : line); + } + return this; + } + + public ItemBuilder lore(final String line, final int index) { + Validate.notNull((Object)line, "The Line is null."); + this.lore.set(index, this.andSymbol ? ChatColor.translateAlternateColorCodes('&', line) : line); + return this; + } + + public ItemBuilder unbreakable(final boolean unbreakable) { + this.meta.spigot().setUnbreakable(unbreakable); + return this; + } + + @Deprecated + public ItemBuilder owner(final String user) { + Validate.notNull((Object)user, "The Username is null."); + if (this.material == Material.SKULL_ITEM || this.material == Material.SKULL) { + final SkullMeta smeta = (SkullMeta)this.meta; + smeta.setOwner(user); + this.meta = (ItemMeta)smeta; + } + return this; + } + + public Unsafe unsafe() { + return new Unsafe(this); + } + + @Deprecated + public ItemBuilder replaceAndSymbol() { + this.replaceAndSymbol(!this.andSymbol); + return this; + } + + public ItemBuilder replaceAndSymbol(final boolean replace) { + this.andSymbol = replace; + return this; + } + + public ItemBuilder toggleReplaceAndSymbol() { + this.replaceAndSymbol(!this.andSymbol); + return this; + } + + public ItemBuilder unsafeStackSize(final boolean allow) { + this.unsafeStackSize = allow; + return this; + } + + public ItemBuilder toggleUnsafeStackSize() { + this.unsafeStackSize(!this.unsafeStackSize); + return this; + } + + public String getDisplayname() { + return this.displayname; + } + + public int getAmount() { + return this.amount; + } + + public Map getEnchantments() { + return this.enchantments; + } + + @Deprecated + public short getDamage() { + return this.damage; + } + + public short getDurability() { + return this.damage; + } + + public List getLores() { + return this.lore; + } + + public boolean getAndSymbol() { + return this.andSymbol; + } + + public Material getMaterial() { + return this.material; + } + + public ItemMeta getMeta() { + return this.meta; + } + + public MaterialData getData() { + return this.data; + } + + @Deprecated + public List getLore() { + return this.lore; + } + + public ItemBuilder toConfig(final FileConfiguration cfg, final String path) { + cfg.set(path, (Object)this.build()); + return this; + } + + public ItemBuilder fromConfig(final FileConfiguration cfg, final String path) { + return new ItemBuilder(cfg, path); + } + + public static void toConfig(final FileConfiguration cfg, final String path, final ItemBuilder builder) { + cfg.set(path, (Object)builder.build()); + } + + public String toJson() { + return new Gson().toJson((Object)this); + } + + public static String toJson(final ItemBuilder builder) { + return new Gson().toJson((Object)builder); + } + + public static ItemBuilder fromJson(final String json) { + return (ItemBuilder)new Gson().fromJson(json, (Class)ItemBuilder.class); + } + + public ItemBuilder applyJson(final String json, final boolean overwrite) { + final ItemBuilder b = (ItemBuilder)new Gson().fromJson(json, (Class)ItemBuilder.class); + if (overwrite) { + return b; + } + if (b.displayname != null) { + this.displayname = b.displayname; + } + if (b.data != null) { + this.data = b.data; + } + if (b.material != null) { + this.material = b.material; + } + if (b.lore != null) { + this.lore = b.lore; + } + if (b.enchantments != null) { + this.enchantments = b.enchantments; + } + if (b.item != null) { + this.item = b.item; + } + this.damage = b.damage; + this.amount = b.amount; + return this; + } + + public ItemStack build() { + this.item.setType(this.material); + this.item.setAmount(this.amount); + this.item.setDurability(this.damage); + this.meta = this.item.getItemMeta(); + if (this.data != null) { + this.item.setData(this.data); + } + if (this.enchantments.size() > 0) { + this.item.addUnsafeEnchantments((Map)this.enchantments); + } + if (this.displayname != null) { + this.meta.setDisplayName(this.displayname); + } + if (this.lore.size() > 0) { + this.meta.setLore((List)this.lore); + } + this.item.setItemMeta(this.meta); + return this.item; + } + + static /* synthetic */ void access$1(final ItemBuilder itemBuilder, final ItemStack item) { + itemBuilder.item = item; + } + + public class Unsafe + { + protected final ReflectionUtils utils; + protected final ItemBuilder builder; + + public Unsafe(final ItemBuilder builder) { + this.utils = new ReflectionUtils(); + this.builder = builder; + } + + public Unsafe setString(final String key, final String value) { + ItemBuilder.access$1(this.builder, this.utils.setString(this.builder.item, key, value)); + return this; + } + + public String getString(final String key) { + return this.utils.getString(this.builder.item, key); + } + + public Unsafe setInt(final String key, final int value) { + ItemBuilder.access$1(this.builder, this.utils.setInt(this.builder.item, key, value)); + return this; + } + + public int getInt(final String key) { + return this.utils.getInt(this.builder.item, key); + } + + public Unsafe setDouble(final String key, final double value) { + ItemBuilder.access$1(this.builder, this.utils.setDouble(this.builder.item, key, value)); + return this; + } + + public double getDouble(final String key) { + return this.utils.getDouble(this.builder.item, key); + } + + public Unsafe setBoolean(final String key, final boolean value) { + ItemBuilder.access$1(this.builder, this.utils.setBoolean(this.builder.item, key, value)); + return this; + } + + public boolean getBoolean(final String key) { + return this.utils.getBoolean(this.builder.item, key); + } + + public boolean containsKey(final String key) { + return this.utils.hasKey(this.builder.item, key); + } + + public ItemBuilder builder() { + return this.builder; + } + + public class ReflectionUtils + { + public String getString(final ItemStack item, final String key) { + Object compound = this.getNBTTagCompound(this.getItemAsNMSStack(item)); + if (compound == null) { + compound = this.getNewNBTTagCompound(); + } + try { + return (String)compound.getClass().getMethod("getString", String.class).invoke(compound, key); + } + catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) { + ex.printStackTrace(); + return null; + } + } + + public ItemStack setString(final ItemStack item, final String key, final String value) { + Object nmsItem = this.getItemAsNMSStack(item); + Object compound = this.getNBTTagCompound(nmsItem); + if (compound == null) { + compound = this.getNewNBTTagCompound(); + } + try { + compound.getClass().getMethod("setString", String.class, String.class).invoke(compound, key, value); + nmsItem = this.setNBTTag(compound, nmsItem); + } + catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) { + ex.printStackTrace(); + } + return this.getItemAsBukkitStack(nmsItem); + } + + public int getInt(final ItemStack item, final String key) { + Object compound = this.getNBTTagCompound(this.getItemAsNMSStack(item)); + if (compound == null) { + compound = this.getNewNBTTagCompound(); + } + try { + return (int)compound.getClass().getMethod("getInt", String.class).invoke(compound, key); + } + catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) { + ex.printStackTrace(); + return -1; + } + } + + public ItemStack setInt(final ItemStack item, final String key, final int value) { + Object nmsItem = this.getItemAsNMSStack(item); + Object compound = this.getNBTTagCompound(nmsItem); + if (compound == null) { + compound = this.getNewNBTTagCompound(); + } + try { + compound.getClass().getMethod("setInt", String.class, Integer.class).invoke(compound, key, value); + nmsItem = this.setNBTTag(compound, nmsItem); + } + catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) { + ex.printStackTrace(); + } + return this.getItemAsBukkitStack(nmsItem); + } + + public double getDouble(final ItemStack item, final String key) { + Object compound = this.getNBTTagCompound(this.getItemAsNMSStack(item)); + if (compound == null) { + compound = this.getNewNBTTagCompound(); + } + try { + return (double)compound.getClass().getMethod("getDouble", String.class).invoke(compound, key); + } + catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) { + + ex.printStackTrace(); + return Double.NaN; + } + } + + public ItemStack setDouble(final ItemStack item, final String key, final double value) { + Object nmsItem = this.getItemAsNMSStack(item); + Object compound = this.getNBTTagCompound(nmsItem); + if (compound == null) { + compound = this.getNewNBTTagCompound(); + } + try { + compound.getClass().getMethod("setDouble", String.class, Double.class).invoke(compound, key, value); + nmsItem = this.setNBTTag(compound, nmsItem); + } + catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) { + + ex.printStackTrace(); + } + return this.getItemAsBukkitStack(nmsItem); + } + + public boolean getBoolean(final ItemStack item, final String key) { + Object compound = this.getNBTTagCompound(this.getItemAsNMSStack(item)); + if (compound == null) { + compound = this.getNewNBTTagCompound(); + } + try { + return (boolean)compound.getClass().getMethod("getBoolean", String.class).invoke(compound, key); + } + catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) { + + ex.printStackTrace(); + return false; + } + } + + public ItemStack setBoolean(final ItemStack item, final String key, final boolean value) { + Object nmsItem = this.getItemAsNMSStack(item); + Object compound = this.getNBTTagCompound(nmsItem); + if (compound == null) { + compound = this.getNewNBTTagCompound(); + } + try { + compound.getClass().getMethod("setBoolean", String.class, Boolean.class).invoke(compound, key, value); + nmsItem = this.setNBTTag(compound, nmsItem); + } + catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) { + + ex.printStackTrace(); + } + return this.getItemAsBukkitStack(nmsItem); + } + + public boolean hasKey(final ItemStack item, final String key) { + Object compound = this.getNBTTagCompound(this.getItemAsNMSStack(item)); + if (compound == null) { + compound = this.getNewNBTTagCompound(); + } + try { + return (boolean)compound.getClass().getMethod("hasKey", String.class).invoke(compound, key); + } + catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { + + e.printStackTrace(); + return false; + } + } + + public Object getNewNBTTagCompound() { + final String ver = Bukkit.getServer().getClass().getPackage().getName().split(".")[3]; + try { + return Class.forName("net.minecraft.server." + ver + ".NBTTagCompound").newInstance(); + } + catch (ClassNotFoundException | IllegalAccessException | InstantiationException ex) { + + ex.printStackTrace(); + return null; + } + } + + public Object setNBTTag(final Object tag, final Object item) { + try { + item.getClass().getMethod("setTag", item.getClass()).invoke(item, tag); + return item; + } + catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) { + + ex.printStackTrace(); + return null; + } + } + + public Object getNBTTagCompound(final Object nmsStack) { + try { + return nmsStack.getClass().getMethod("getTag", (Class[])new Class[0]).invoke(nmsStack, new Object[0]); + } + catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) { + + ex.printStackTrace(); + return null; + } + } + + public Object getItemAsNMSStack(final ItemStack item) { + try { + final Method m = this.getCraftItemStackClass().getMethod("asNMSCopy", ItemStack.class); + return m.invoke(this.getCraftItemStackClass(), item); + } + catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + + ex.printStackTrace(); + return null; + } + } + + public ItemStack getItemAsBukkitStack(final Object nmsStack) { + try { + final Method m = this.getCraftItemStackClass().getMethod("asCraftMirror", nmsStack.getClass()); + return (ItemStack)m.invoke(this.getCraftItemStackClass(), nmsStack); + } + catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException ex) { + + ex.printStackTrace(); + return null; + } + } + + public Class getCraftItemStackClass() { + final String ver = Bukkit.getServer().getClass().getPackage().getName().split(".")[3]; + try { + return Class.forName("org.bukkit.craftbukkit." + ver + ".inventory.CraftItemStack"); + } + catch (ClassNotFoundException ex) { + ex.printStackTrace(); + return null; + } + } + } + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/Conquest.java b/ViperCore/src/main/java/com/igodlik3/conquest/Conquest.java new file mode 100644 index 0000000..93bdf42 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/Conquest.java @@ -0,0 +1,97 @@ +package com.igodlik3.conquest; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import org.bukkit.configuration.Configuration; +import com.igodlik3.conquest.utils.*; +import com.igodlik3.conquest.event.*; +import org.bukkit.*; +import org.bukkit.event.*; +import com.igodlik3.conquest.loot.*; +import com.igodlik3.conquest.listener.*; +import org.bukkit.plugin.*; +import com.igodlik3.conquest.commands.*; +import org.bukkit.command.*; +import com.igodlik3.conquest.task.*; + +public class Conquest extends Manager +{ + private static Conquest instance; + private ConquestManager conquestManager; + private LootManager lootManager; + + + private ConfigurationWrapper config; + + public Configuration getConfig(){ + return config.getConfig(); + } + private Config storage; + + public Conquest(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.setUpConfig(); + (Conquest.instance = this).registerManagers(); + this.registerListeners(); + this.registerCommands(); + } + + @Override + public void tear() { + + if (this.conquestManager.getRunningGame() != null) { + this.conquestManager.setRunningGame(null); + } + } + + private void registerListeners() { + final PluginManager pm = Bukkit.getPluginManager(); + pm.registerEvents((Listener)new ScoreboardListener(), this.getPlugin()); + pm.registerEvents((Listener)new SelectionListener(), this.getPlugin()); + pm.registerEvents((Listener)new ChestListener(), this.getPlugin()); + pm.registerEvents((Listener)new PlayerListener(), this.getPlugin()); + } + + private void registerCommands() { + registerCommand("conquest" , (CommandExecutor)new CmdConquest()); + } + + + private void registerManagers() { + this.conquestManager = new ConquestManager(); + this.lootManager = new LootManager(); + new ConquestTask().runTaskTimer(getPlugin(), 20L, 20L); + } + + private void setUpConfig() { + config = new ConfigurationWrapper("conquest.yml", this.getPlugin()); + config.saveDefault(); + final Config config = new Config("plugins/" + getPlugin().getName() + "/storage", "conqueset-storage.yml", getPlugin()); + config.create(); + if (!config.exists() || config.toFile().exists()) { + config.saveConfig(); + } + this.storage = config; + } + + public static Conquest getInstance() { + return Conquest.instance; + } + + public ConquestManager getConquestManager() { + return this.conquestManager; + } + + public LootManager getLootManager() { + return this.lootManager; + } + + public Config getStorage() { + return this.storage; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/commands/CmdConquest.java b/ViperCore/src/main/java/com/igodlik3/conquest/commands/CmdConquest.java new file mode 100644 index 0000000..dd60518 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/commands/CmdConquest.java @@ -0,0 +1,269 @@ +package com.igodlik3.conquest.commands; + +import org.bukkit.configuration.*; +import com.igodlik3.conquest.loot.*; +import com.igodlik3.conquest.*; +import org.bukkit.command.*; +import org.bukkit.entity.*; +import com.igodlik3.conquest.utils.*; +import com.igodlik3.conquest.listener.*; +import com.igodlik3.conquest.event.*; +import org.bukkit.*; +import java.util.*; +import org.bukkit.block.*; + +public class CmdConquest implements CommandExecutor +{ + private Configuration config; + private ConquestManager cm; + private LootManager lm; + private ChestLootManager chest; + private ChestKey key; + + public CmdConquest() { + this.config = (Configuration)Conquest.getInstance().getConfig(); + this.cm = Conquest.getInstance().getConquestManager(); + this.lm = Conquest.getInstance().getLootManager(); + this.chest = new ChestLootManager(); + this.key = new ChestKey(); + } + + public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) { + if (!(sender instanceof Player)) { + return true; + } + final Player player = (Player)sender; + if (args.length == 0) { + this.sendUsage(player); + } + else if (args[0].equalsIgnoreCase("create")) { + if (!this.hasPermission(player)) { + return true; + } + if (args.length < 2) { + this.sendUsage(player); + } + else { + final String name = args[1]; + if (this.cm.gameExists(name)) { + player.sendMessage(Utils.color(this.config.getString("Messages.ALREADY-EXIST"))); + return true; + } + this.cm.saveOrUpdateGame(new ConquestGame(name)); + player.sendMessage(Utils.color(this.config.getString("Messages.CREATED").replaceAll("%NAME%", name))); + } + } + else if (args[0].equalsIgnoreCase("delete")) { + if (!this.hasPermission(player)) { + return true; + } + if (args.length < 2) { + this.sendUsage(player); + } + else { + final String name = args[1]; + final ConquestGame game = this.cm.getGame(name); + if (game == null) { + player.sendMessage(Utils.color(this.config.getString("Messages.DOESNT-EXIST"))); + } + else if (this.cm.getRunningGame() != null && game.getName().equals(this.cm.getRunningGame().getName())) { + player.sendMessage(Utils.color(this.config.getString("Messages.CONQUEST-RUNNING"))); + } + else { + this.cm.deleteGame(game); + player.sendMessage(Utils.color(this.config.getString("Messages.DELETED").replaceAll("%NAME%", name))); + } + } + } + else if (args[0].equalsIgnoreCase("start")) { + if (!this.hasPermission(player)) { + return true; + } + if (args.length < 2) { + this.sendUsage(player); + } + else { + if (this.cm.getRunningGame() != null) { + player.sendMessage(Utils.color(this.config.getString("Messages.CONQUEST-RUNNING"))); + return true; + } + final ConquestGame game2 = this.cm.getGame(args[1]); + if (game2 == null) { + player.sendMessage(Utils.color(this.config.getString("Messages.DOESNT-EXIST"))); + return true; + } + if (!game2.isComplete()) { + player.sendMessage(Utils.color(this.config.getString("Messages.INCOMPLET-CONQUEST"))); + return true; + } + this.cm.startConquest(game2); + this.cm.setRunningGame(game2); + } + } + else if (args[0].equalsIgnoreCase("stop")) { + if (!this.hasPermission(player)) { + return true; + } + final ConquestGame game2 = this.cm.getRunningGame(); + if (game2 == null) { + player.sendMessage(Utils.color(this.config.getString("Messages.NONE-RUNNING-CONQUEST"))); + return true; + } + this.cm.setRunningGame(null); + this.cm.resetRunningGameData(); + Bukkit.broadcastMessage(Utils.color(this.config.getString("Messages.CONQUEST-STOPPED").replaceAll("%NAME%", game2.getName()))); + } + else if (args[0].equalsIgnoreCase("area")) { + if (!this.hasPermission(player)) { + return true; + } + if (args.length < 3) { + this.sendUsage(player); + } + else { + final ConquestGame game2 = this.cm.getGame(args[1]); + if (game2 == null) { + player.sendMessage(Utils.color(this.config.getString("Messages.DOESNT-EXIST"))); + return true; + } + if (this.cm.getRunningGame() != null && game2.getName().equals(this.cm.getRunningGame().getName())) { + player.sendMessage(Utils.color(this.config.getString("Messages.CONQUEST-RUNNING"))); + return true; + } + if (!SelectionListener.isCorrectSelection(player)) { + player.sendMessage(Utils.color(this.config.getString("Messages.NO-SELECTION"))); + return true; + } + ConquestArea.Type type; + try { + type = ConquestArea.Type.valueOf(args[2].toUpperCase()); + } + catch (IllegalArgumentException e) { + player.sendMessage(Utils.color(this.config.getString("Messages.INVALID-AREA"))); + return true; + } + final Location loc1 = SelectionListener.getSelection(player).get(0); + final Location loc2 = SelectionListener.getSelection(player).get(1); + final boolean wasComplete = game2.isComplete(); + game2.setArea(type, new ConquestArea(game2, type, loc1, loc2)); + this.cm.saveOrUpdateGame(game2); + player.sendMessage(Utils.color(this.config.getString("Messages.AREA-UPTADED"))); + if (!wasComplete && game2.isComplete()) { + player.sendMessage(Utils.color(this.config.getString("Messages.CONQUEST-READY").replaceAll("%NAME%", args[1]))); + } + } + } + else if (args[0].equalsIgnoreCase("list")) { + if (!this.hasPermission(player)) { + return true; + } + final Set games = this.cm.listGames(); + if (games == null || games.isEmpty()) { + player.sendMessage(Utils.color(this.config.getString("Messages.NONE-CONQUEST"))); + } + else { + for (final String game3 : games) { + player.sendMessage(Utils.color("&c- &e" + game3)); + } + } + } + else if (args[0].equalsIgnoreCase("tp")) { + if (!this.hasPermission(player)) { + return true; + } + if (args.length < 2) { + this.sendUsage(player); + } + else { + final String name = args[1]; + final ConquestGame game = this.cm.getGame(name); + if (game == null) { + player.sendMessage(Utils.color(this.config.getString("Messages.DOESNT-EXIST"))); + return true; + } + final Location loc3 = this.cm.getConquestCubo(game.getArea(ConquestArea.Type.RED)).getCenter(); + player.teleport(loc3); + player.sendMessage(Utils.color(this.config.getString("Messages.TELEPORTATION"))); + } + } + else if (args[0].equalsIgnoreCase("editloot")) { + if (!this.hasPermission(player)) { + return true; + } + this.lm.openLoot(player, true); + } + else if (args[0].equalsIgnoreCase("wand")) { + if (!this.hasPermission(player)) { + return true; + } + SelectionListener.getWand(player); + } + else if (args[0].equalsIgnoreCase("loot")) { + this.lm.openLoot(player, false); + } + else if (args[0].equalsIgnoreCase("chest")) { + if (!this.hasPermission(player)) { + return true; + } + if (args.length < 2) { + this.sendUsage(player); + } + else if (args[1].equalsIgnoreCase("create")) { + final Block block = player.getTargetBlock((HashSet)null, 10); + if ((block != null && block.getType() == Material.CHEST) || block.getType() == Material.ENDER_CHEST || block.getType() == Material.TRAPPED_CHEST) { + if (this.chest.isChestLoot(block.getLocation())) { + player.sendMessage(Utils.color(this.config.getString("Messages.ALREADY-CHESTLOOT"))); + } + else { + player.sendMessage(Utils.color(this.config.getString("Messages.CHEST-LOOT-CREATED"))); + this.chest.addLocation(block.getLocation()); + } + } + else { + player.sendMessage(Utils.color(this.config.getString("Messages.NOT-A-CHEST"))); + } + } + else if (args[1].equalsIgnoreCase("delete")) { + final Block block = player.getTargetBlock((HashSet)null, 10); + if ((block != null && block.getType() == Material.CHEST) || block.getType() == Material.ENDER_CHEST || block.getType() == Material.TRAPPED_CHEST) { + if (this.chest.isChestLoot(block.getLocation())) { + player.sendMessage(Utils.color(this.config.getString("Messages.CHEST-LOOT-REMOVED"))); + this.chest.removeLocation(block.getLocation()); + } + else { + player.sendMessage(Utils.color(this.config.getString("Messages.NOT-A-CHESTLOOT"))); + } + } + else { + player.sendMessage(Utils.color(this.config.getString("Messages.NOT-A-CHEST"))); + } + } + else if (args[1].equalsIgnoreCase("key")) { + this.key.giveKey(player); + player.sendMessage(Utils.color("&aKey received !")); + } + } + return true; + } + + private void sendUsage(final Player player) { + if (this.hasPermission(player)) { + for (final String stg : this.config.getStringList("Messages.USAGE.STAFF")) { + player.sendMessage(Utils.color(stg)); + } + } + else { + for (final String stg : this.config.getStringList("Messages.USAGE.PLAYER")) { + player.sendMessage(Utils.color(stg)); + } + } + } + + private boolean hasPermission(final Player player) { + if (player.hasPermission("Conquest.Admin")) { + return true; + } + player.sendMessage(Utils.color(this.config.getString("Messages.NO-PERM"))); + return false; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/event/ConquestArea.java b/ViperCore/src/main/java/com/igodlik3/conquest/event/ConquestArea.java new file mode 100644 index 0000000..b69ef84 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/event/ConquestArea.java @@ -0,0 +1,45 @@ +package com.igodlik3.conquest.event; + +import org.bukkit.*; + +public class ConquestArea +{ + private ConquestGame game; + private Type type; + private Location loc1; + private Location loc2; + + public ConquestArea(final ConquestGame game, final Type type, final Location loc1, final Location loc2) { + this.game = game; + this.type = type; + this.loc1 = loc1; + this.loc2 = loc2; + } + + public ConquestGame getGame() { + return this.game; + } + + public Type getType() { + return this.type; + } + + public Location getLoc1() { + return this.loc1; + } + + public Location getLoc2() { + return this.loc2; + } + + public enum Type + { + RED("RED", 0), + GREEN("GREEN", 1), + BLUE("BLUE", 2), + YELLOW("YELLOW", 3); + + private Type(final String s, final int n) { + } + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/event/ConquestData.java b/ViperCore/src/main/java/com/igodlik3/conquest/event/ConquestData.java new file mode 100644 index 0000000..3bf0868 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/event/ConquestData.java @@ -0,0 +1,93 @@ +package com.igodlik3.conquest.event; + +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.faction.bean.Faction; +import net.syuu.popura.faction.bean.FactionPlayer; +import org.bukkit.entity.*; +import java.util.*; +import com.igodlik3.conquest.*; + +public class ConquestData +{ + private Map factionsPoints; + private Map capTime; + private Set containedFactions; + private Map firstCapper; + + public ConquestData() { + this.factionsPoints = new HashMap(); + this.capTime = new HashMap(); + this.containedFactions = new HashSet(); + this.firstCapper = new HashMap(); + } + + public Map getFactionsPoints() { + return this.factionsPoints; + } + + public int getFactionPoints(final Player player) { + final FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + + return factionPlayer.getFaction() != null ? this.getFactionPoints(factionPlayer.getFaction()) : -1; + } + + public int getFactionPoints(final Faction faction) { + return this.factionsPoints.containsKey(faction.getName()) ? this.factionsPoints.get(faction.getName()) : -1; + } + + public void setFactionsPoints(final Faction faction, final int points, final boolean contained) { + if (contained) { + this.containedFactions.add(faction); + } + this.factionsPoints.put(faction.getName(), points); + } + + public void setFactionsPoints(final Player player, final int points) { + final FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + + if (factionPlayer.getFaction() != null) { + this.setFactionsPoints(factionPlayer.getFaction(), points, true); + } + } + + public boolean capPoint(final Faction faction, final ConquestArea.Type type) { + this.containedFactions.add(faction); + if (!this.capTime.containsKey(type)) { + this.capTime.put(type, 0); + return false; + } + final int time = this.capTime.get(type) + 1; + this.capTime.put(type, time); + final boolean capped = time >= Conquest.getInstance().getConfig().getInt("CONQUEST.Cap-Time"); + if (capped) { + this.capTime.put(type, 0); + } + return capped; + } + + public int getCapTime(final ConquestArea.Type type) { + final Integer time = this.capTime.get(type); + return (time == null) ? 0 : time; + } + + public void resetTime(final ConquestArea.Type type) { + this.capTime.put(type, 0); + } + + public Set getContainedFactions() { + return this.containedFactions; + } + + public Player getFirstCapper(final ConquestArea.Type type) { + return this.firstCapper.get(type); + } + + public void setFirstCapper(final ConquestArea.Type type, final Player capper) { + if (capper == null) { + this.firstCapper.remove(type); + } + else { + this.firstCapper.put(type, capper); + } + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/event/ConquestGame.java b/ViperCore/src/main/java/com/igodlik3/conquest/event/ConquestGame.java new file mode 100644 index 0000000..75c7b33 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/event/ConquestGame.java @@ -0,0 +1,39 @@ +package com.igodlik3.conquest.event; + +public class ConquestGame +{ + private ConquestArea[] areas; + private String name; + + public ConquestGame(final String name) { + this.areas = new ConquestArea[ConquestArea.Type.values().length]; + this.name = name; + } + + public void setArea(final ConquestArea.Type type, final ConquestArea area) { + this.areas[type.ordinal()] = area; + } + + public String getName() { + return this.name; + } + + public ConquestArea getArea(final ConquestArea.Type type) { + return this.areas[type.ordinal()]; + } + + public ConquestArea[] getAreas() { + return this.areas; + } + + public boolean isComplete() { + ConquestArea[] areas; + for (int length = (areas = this.areas).length, i = 0; i < length; ++i) { + final ConquestArea area = areas[i]; + if (area == null) { + return false; + } + } + return true; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/event/ConquestManager.java b/ViperCore/src/main/java/com/igodlik3/conquest/event/ConquestManager.java new file mode 100644 index 0000000..0409e80 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/event/ConquestManager.java @@ -0,0 +1,115 @@ +package com.igodlik3.conquest.event; + +import com.igodlik3.conquest.*; +import com.igodlik3.conquest.utils.*; +import org.bukkit.configuration.*; +import org.bukkit.*; +import java.util.*; + +public class ConquestManager +{ + private ConquestData runningGameData; + private Configuration config; + private Configuration data; + private Map cuboCache; + + public ConquestManager() { + this.config = (Configuration)Conquest.getInstance().getConfig(); + this.data = (Configuration)Conquest.getInstance().getStorage().getConfig(); + this.cuboCache = new HashMap(); + } + + public boolean gameExists(final String name) { + return this.data.contains("conquest." + name); + } + + public void saveOrUpdateGame(final ConquestGame game) { + final ConfigurationSection section = this.gameExists("conquest." + game.getName()) ? this.data.getConfigurationSection("conquest." + game.getName()) : this.data.createSection("conquest." + game.getName()); + for (int i = 0; i < ConquestArea.Type.values().length; ++i) { + final ConquestArea area = game.getArea(ConquestArea.Type.values()[i]); + if (area == null) { + section.set("area." + i, (Object)null); + } + else { + section.set("area." + i + ".loc1", (Object)Utils.stringifyLocation(area.getLoc1())); + section.set("area." + i + ".loc2", (Object)Utils.stringifyLocation(area.getLoc2())); + } + Conquest.getInstance().getStorage().saveConfig(); + } + } + + public ConquestGame getGame(final String name) { + if (!this.gameExists(name)) { + return null; + } + final ConfigurationSection section = this.data.getConfigurationSection("conquest." + name); + final ConquestGame game = new ConquestGame(name); + for (int i = 0; i < ConquestArea.Type.values().length; ++i) { + if (section.contains("area." + i)) { + game.setArea(ConquestArea.Type.values()[i], new ConquestArea(game, ConquestArea.Type.values()[i], Utils.destringifyLocation(section.getString("area." + i + ".loc1")), Utils.destringifyLocation(section.getString("area." + i + ".loc2")))); + } + } + return game; + } + + public void startConquest(final ConquestGame game) { + this.setRunningGame(game); + Bukkit.broadcastMessage(Utils.color(this.config.getString("Messages.CONQUEST-STARTED").replaceAll("%NAME%", game.getName()).replaceAll("%POINTS%", String.valueOf(this.config.getInt("CONQUEST.Required-Points"))))); + } + + public Cuboid getConquestCubo(final ConquestArea area) { + if (this.cuboCache.containsKey(area)) { + return this.cuboCache.get(area); + } + final Cuboid cubo = new Cuboid(area.getLoc1(), area.getLoc2()); + this.cuboCache.put(area, cubo); + return cubo; + } + + public void deleteGame(final ConquestGame game) { + this.deleteGame(game.getName()); + } + + public void deleteGame(final String name) { + if (!this.gameExists(name)) { + return; + } + this.data.set("conquest." + name, (Object)null); + Conquest.getInstance().getStorage().saveConfig(); + } + + public Set listGames() { + if (this.data.isConfigurationSection("conquest")) { + return (Set)this.data.getConfigurationSection("conquest").getKeys(false); + } + return null; + } + + public ConquestGame getRunningGame() { + if (!this.data.contains("conquest.running")) { + return null; + } + return this.getGame(this.data.getString("conquest.running")); + } + + public boolean setRunningGame(final ConquestGame game) { + this.data.set("conquest.running", (Object)((game != null) ? game.getName() : null)); + Conquest.getInstance().getStorage().saveConfig(); + if (game == null) { + this.runningGameData = null; + } + else { + this.runningGameData = new ConquestData(); + } + return true; + } + + public void resetRunningGameData() { + this.data.set("rdata", (Object)null); + Conquest.getInstance().getStorage().saveConfig(); + } + + public ConquestData getRunningGameData() { + return this.runningGameData; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/listener/PlayerListener.java b/ViperCore/src/main/java/com/igodlik3/conquest/listener/PlayerListener.java new file mode 100644 index 0000000..dacd821 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/listener/PlayerListener.java @@ -0,0 +1,44 @@ +package com.igodlik3.conquest.listener; + +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.faction.bean.Faction; +import net.syuu.popura.faction.bean.FactionPlayer; +import org.bukkit.configuration.*; +import com.igodlik3.conquest.*; +import org.bukkit.event.entity.*; +import org.bukkit.entity.*; +import com.igodlik3.conquest.utils.*; +import com.igodlik3.conquest.event.*; +import java.util.*; +import org.bukkit.event.*; + +public class PlayerListener implements Listener +{ + private Configuration config; + private ConquestManager cm; + + public PlayerListener() { + this.config = (Configuration)Conquest.getInstance().getConfig(); + this.cm = Conquest.getInstance().getConquestManager(); + } + + @EventHandler + public void onPlayerDeath(final PlayerDeathEvent event) { + final Player player = event.getEntity(); + if (this.config.getBoolean("CONQUEST.Penality.enabled") && this.cm.getRunningGame() != null) { + final ConquestData ca = this.cm.getRunningGameData(); + final FactionPlayer fp = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + + if (fp.getFaction() != null) { + final Faction faction = fp.getFaction(); + final int penality = this.config.getInt("CONQUEST.Penality.points"); + if (ca.getFactionPoints(faction) >= penality) { + ca.setFactionsPoints(faction, ca.getFactionPoints(faction) - penality, false); + for (final Player pls : faction.getOnlineMembers()) { + pls.sendMessage(Utils.color(this.config.getString("Messages.PENALITY").replaceAll("%POINTS%", String.valueOf(penality)))); + } + } + } + } + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/listener/ScoreboardListener.java b/ViperCore/src/main/java/com/igodlik3/conquest/listener/ScoreboardListener.java new file mode 100644 index 0000000..4cf451c --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/listener/ScoreboardListener.java @@ -0,0 +1,75 @@ +package com.igodlik3.conquest.listener; + +import net.syuu.popura.PopuraPlugin; +import org.bukkit.configuration.*; +import com.igodlik3.conquest.*; +import net.libhalt.bukkit.kaede.event.*; +import org.bukkit.event.*; +import com.igodlik3.conquest.event.*; +import java.util.*; + +public class ScoreboardListener implements Listener +{ + private String[] placeholders; + private ConquestManager cm; + private Configuration config; + + public ScoreboardListener() { + this.cm = Conquest.getInstance().getConquestManager(); + this.config = (Configuration)Conquest.getInstance().getConfig(); + this.placeholders = new String[] { "%CONQUEST_RED%", "%CONQUEST_GREEN%", "%CONQUEST_BLUE%", "%CONQUEST_YELLOW%", "%FACTION_1_NAME%", "%FACTION_1_POINT%", "%FACTION_2_NAME%", "%FACTION_2_POINT%", "%FACTION_3_NAME%", "%FACTION_3_POINT%", "%FACTION_4_NAME%", "%FACTION_4_POINT%" }; + } + + @EventHandler + public void onScoreboardUpdate(final ScoreboardTextAboutToUpdateEvent event) { + String[] placeholders; + for (int length = (placeholders = this.placeholders).length, i = 0; i < length; ++i) { + final String string = placeholders[i]; + if (event.getText() != null && event.getText().contains(string)) { + if (this.cm.getRunningGame() == null) { + event.setText((String)null); + } + else { + event.setText(this.convertPlaceholder(event.getText())); + } + } + } + } + + private String convertPlaceholder(String text) { + final ConquestGame game = this.cm.getRunningGame(); + if (game != null) { + ConquestArea[] areas; + for (int length = (areas = game.getAreas()).length, j = 0; j < length; ++j) { + final ConquestArea area = areas[j]; + if (text.contains("%CONQUEST_" + area.getType().name() + "%")) { + final String time = String.valueOf(this.config.getInt("CONQUEST.Cap-Time") - this.cm.getRunningGameData().getCapTime(area.getType())) + "s"; + text = text.replaceAll("%CONQUEST_" + area.getType().name() + "%", time); + } + } + final List> ranking = new LinkedList>(this.cm.getRunningGameData().getFactionsPoints().entrySet()); + Collections.sort(ranking, new Comparator>() { + @Override + public int compare(final Map.Entry o1, final Map.Entry o2) { + return o2.getValue() - o1.getValue(); + } + }); + for (int i = 1; i < 5; ++i) { + final Map.Entry entry = (i > ranking.size()) ? null : ranking.get(i - 1); + if (text.contains("%FACTION_" + i + "_NAME%")) { + if (entry == null) { + return null; + } + text = text.replaceAll("%FACTION_" + i + "_NAME%", PopuraPlugin.getInstance().getPopura().getFactionDataManager().getFaction((String)entry.getKey()).getName()); + } + if (text.contains("%FACTION_" + i + "_POINT%")) { + if (entry == null) { + return null; + } + text = text.replaceAll("%FACTION_" + i + "_POINT%", new StringBuilder().append(entry.getValue()).toString()); + } + } + } + return text; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/listener/SelectionListener.java b/ViperCore/src/main/java/com/igodlik3/conquest/listener/SelectionListener.java new file mode 100644 index 0000000..58bcf6e --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/listener/SelectionListener.java @@ -0,0 +1,74 @@ +package com.igodlik3.conquest.listener; + +import com.igodlik3.ItemBuilder; +import org.bukkit.entity.*; +import org.bukkit.event.player.*; +import org.bukkit.event.block.*; +import org.bukkit.*; +import org.bukkit.block.*; +import org.bukkit.inventory.*; +import org.bukkit.event.*; +import java.util.*; +import com.igodlik3.conquest.utils.*; + +public class SelectionListener implements Listener +{ + private static Map> selectionMap; + + static { + SelectionListener.selectionMap = new HashMap>(); + } + + @EventHandler + public void onInteract(final PlayerInteractEvent event) { + final Player player = event.getPlayer(); + final Block block = event.getClickedBlock(); + final Map map = SelectionListener.selectionMap.containsKey(player) ? SelectionListener.selectionMap.get(player) : new HashMap(); + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (event.getItem() != null && event.getItem().getType() == Material.GOLD_HOE) { + final ItemStack item = event.getItem(); + if (this.isWand(item)) { + event.setCancelled(true); + map.put("1", block.getLocation()); + SelectionListener.selectionMap.put(player, map); + player.sendMessage(Utils.color("&dSelected the 2# point !")); + } + } + } + else if (event.getAction() == Action.LEFT_CLICK_BLOCK && event.getItem() != null && event.getItem().getType() == Material.GOLD_HOE) { + final ItemStack item = event.getItem(); + if (this.isWand(item)) { + event.setCancelled(true); + map.put("2", block.getLocation()); + SelectionListener.selectionMap.put(player, map); + player.sendMessage(Utils.color("&dSelected the 1# point !")); + } + } + } + + public static boolean isCorrectSelection(final Player player) { + return SelectionListener.selectionMap.containsKey(player) && SelectionListener.selectionMap.get(player).size() == 2; + } + + public static List getSelection(final Player player) { + final List result = new ArrayList(); + if (!isCorrectSelection(player)) { + return null; + } + final Location loc1 = SelectionListener.selectionMap.get(player).get("1"); + final Location loc2 = SelectionListener.selectionMap.get(player).get("2"); + result.add(loc1); + result.add(loc2); + return result; + } + + private boolean isWand(final ItemStack item) { + return item.hasItemMeta() && item.getItemMeta().hasDisplayName() && item.getItemMeta().getDisplayName().equalsIgnoreCase(Utils.color("&e&lRegion &6Wand")); + } + + public static void getWand(final Player player) { + final ItemStack wand = new ItemBuilder(Material.GOLD_HOE).displayname("&e&lRegion &6Wand").build(); + player.getInventory().addItem(new ItemStack[] { wand }); + player.updateInventory(); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/loot/ChestKey.java b/ViperCore/src/main/java/com/igodlik3/conquest/loot/ChestKey.java new file mode 100644 index 0000000..9055c03 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/loot/ChestKey.java @@ -0,0 +1,53 @@ +package com.igodlik3.conquest.loot; + +import com.igodlik3.ItemBuilder; +import org.bukkit.configuration.*; +import com.igodlik3.conquest.*; +import org.bukkit.entity.*; +import org.bukkit.inventory.*; +import org.bukkit.*; +import com.igodlik3.conquest.utils.*; +import java.text.*; +import java.util.*; + +public class ChestKey +{ + private Configuration config; + + public ChestKey() { + this.config = (Configuration)Conquest.getInstance().getConfig(); + } + + public void removeKey(final Player player) { + final int amount = player.getItemInHand().getAmount(); + if (amount == 1) { + player.setItemInHand((ItemStack)null); + } + else { + player.getItemInHand().setAmount(amount - 1); + } + } + + public boolean isKey(final ItemStack item) { + if (item != null && item.getType() == Material.TRIPWIRE_HOOK && item.hasItemMeta() && item.getItemMeta().hasDisplayName()) { + final String display = item.getItemMeta().getDisplayName(); + final String d = this.config.getString("CONQUEST.Loot.Key.name"); + return display.equalsIgnoreCase(Utils.color(d)); + } + return false; + } + + public void giveKey(final Player player) { + ItemStack key = null; + final List lore = (List)this.config.getStringList("CONQUEST.Loot.Key.lore"); + final List formatted = new ArrayList(); + final String display = this.config.getString("CONQUEST.Loot.Key.name"); + final DateFormat dateFormat = new SimpleDateFormat(this.config.getString("Messages.Date-Format")); + final Date date = new Date(); + for (final String stg : lore) { + formatted.add(Utils.color(stg).replaceAll("%DATE%", dateFormat.format(date)).replaceAll("%PLAYER%", player.getName())); + } + key = new ItemBuilder(Material.TRIPWIRE_HOOK).displayname(display).lore(formatted).build(); + player.getInventory().addItem(new ItemStack[] { key }); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/loot/ChestListener.java b/ViperCore/src/main/java/com/igodlik3/conquest/loot/ChestListener.java new file mode 100644 index 0000000..9276c69 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/loot/ChestListener.java @@ -0,0 +1,82 @@ +package com.igodlik3.conquest.loot; + +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.faction.bean.FactionPlayer; +import org.bukkit.configuration.*; +import com.igodlik3.conquest.*; +import org.bukkit.event.player.*; +import org.bukkit.event.block.*; +import com.igodlik3.conquest.utils.*; +import org.bukkit.inventory.*; +import org.bukkit.*; +import org.bukkit.entity.*; +import org.bukkit.block.*; +import java.util.*; +import org.bukkit.event.*; + +public class ChestListener implements Listener +{ + private Configuration config; + private ChestLootManager manager; + private LootManager lm; + private ChestKey key; + + public ChestListener() { + this.config = (Configuration)Conquest.getInstance().getConfig(); + this.manager = new ChestLootManager(); + this.lm = Conquest.getInstance().getLootManager(); + this.key = new ChestKey(); + } + + @EventHandler + public void onInteract(final PlayerInteractEvent event) { + final Player player = event.getPlayer(); + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + final Block block = event.getClickedBlock(); + if (this.manager.isChestLoot(block.getLocation())) { + event.setCancelled(true); + final ItemStack item = event.getItem(); + if (this.key.isKey(item)) { + final int lootNumber = this.config.getInt("CONQUEST.Loot-Number"); + if (this.lm.getLootList().isEmpty()) { + player.sendMessage(Utils.color("&4&lLoot not found ! &cPlease fill the chest loot with items &e/conquest editloot")); + return; + } + final List set = new ArrayList(this.lm.getLootList()); + if (set.size() < lootNumber) { + player.sendMessage(Utils.color("&cPlease fill the chest loot with items. &eLoot size: " + set.size() + " &7- &eLoot needed: " + lootNumber)); + return; + } + final Random r = new Random(); + final FactionPlayer fp = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + Bukkit.broadcastMessage(Utils.color(this.config.getString("Messages.LOOT")).replaceAll("%PLAYER%", player.getName()).replaceAll("%FACTION%", fp.getFaction().getName())); + for (int i = 0; i < lootNumber; ++i) { + final ItemStack is = set.get(r.nextInt(set.size())); + player.getInventory().addItem(new ItemStack[] { is }); + Bukkit.broadcastMessage(Utils.color("&7- &e" + this.stringifyItem(is))); + } + player.updateInventory(); + this.key.removeKey(player); + } + else { + player.sendMessage(Utils.color(this.config.getString("Messages.CHEST-LOOT-NO-KEY"))); + } + } + } + } + + private String stringifyItem(final ItemStack item) { + String itemName; + if (item.hasItemMeta() && item.getItemMeta().hasDisplayName()) { + itemName = item.getItemMeta().getDisplayName(); + } + else { + final String matName = item.getType().toString().replace("_", " ").toLowerCase(); + itemName = String.valueOf(Character.toUpperCase(matName.charAt(0))) + matName.substring(1); + } + if (item.getAmount() > 1) { + return String.valueOf(item.getAmount()) + "x " + itemName; + } + return itemName; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/loot/ChestLootManager.java b/ViperCore/src/main/java/com/igodlik3/conquest/loot/ChestLootManager.java new file mode 100644 index 0000000..e0f2112 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/loot/ChestLootManager.java @@ -0,0 +1,63 @@ +package com.igodlik3.conquest.loot; + +import org.bukkit.configuration.*; +import com.igodlik3.conquest.*; +import org.bukkit.*; +import com.igodlik3.conquest.utils.*; +import java.util.*; + +public class ChestLootManager +{ + private Configuration storage; + + public ChestLootManager() { + this.storage = (Configuration)Conquest.getInstance().getStorage().getConfig(); + } + + public boolean isChestLoot(final Location loc) { + final List list = this.getLocations(); + if (list.isEmpty()) { + return false; + } + for (final Location l : list) { + if (l != null && l.getBlockX() == loc.getBlockX() && l.getBlockZ() == loc.getBlockZ() && l.getBlockY() == loc.getBlockY()) { + return true; + } + } + return false; + } + + public List getLocations() { + final List list = new ArrayList(); + if (!this.storage.contains("chestloot.location")) { + return list; + } + for (final String stg : this.storage.getStringList("chestloot.location")) { + list.add(Utils.destringifyLocation(stg)); + } + return list; + } + + public void removeLocation(final Location loc) { + final String string = Utils.stringifyLocation(loc); + final List strings = new ArrayList(this.storage.getStringList("chestloot.location")); + for (final String stg : this.storage.getStringList("chestloot.location")) { + if (stg.equals(string)) { + strings.remove(string); + } + } + this.storage.set("chestloot.location", (Object)strings); + Conquest.getInstance().getStorage().saveConfig(); + } + + public void addLocation(final Location location) { + final String string = Utils.stringifyLocation(location); + final List strings = new ArrayList(this.storage.getStringList("chestloot.location")); + if (strings.contains(string)) { + return; + } + strings.add(string); + this.storage.set("chestloot.location", (Object)strings); + Conquest.getInstance().getStorage().saveConfig(); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/loot/LootManager.java b/ViperCore/src/main/java/com/igodlik3/conquest/loot/LootManager.java new file mode 100644 index 0000000..dfd290c --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/loot/LootManager.java @@ -0,0 +1,125 @@ +package com.igodlik3.conquest.loot; + +import org.bukkit.configuration.*; +import com.igodlik3.conquest.*; +import org.bukkit.plugin.*; +import org.bukkit.*; +import org.bukkit.inventory.*; +import java.util.*; +import org.bukkit.entity.*; +import com.igodlik3.conquest.utils.*; +import org.bukkit.event.*; +import org.bukkit.event.inventory.*; + +public class LootManager implements Listener +{ + private Configuration storage; + private Set lootEditors; + private Inventory inv; + private List lootList; + + public LootManager() { + this.storage = (Configuration)Conquest.getInstance().getStorage().getConfig(); + this.lootEditors = new HashSet(); + this.lootList = new ArrayList(); + this.reloadLoot(); + Bukkit.getPluginManager().registerEvents((Listener)this, Conquest.getInstance().getPlugin()); + } + + public void loadLoot() { + final Object value = this.storage.get("Loot"); + if (value != null) { + ItemStack[] contents = null; + if (value instanceof ItemStack[]) { + contents = (ItemStack[])value; + } + else if (value instanceof List) { + contents = (ItemStack[]) ((List)value).toArray(new ItemStack[0]); + } + this.inv.setContents(contents); + ItemStack[] array; + for (int length = (array = contents).length, i = 0; i < length; ++i) { + final ItemStack is = array[i]; + if (is != null && is.getType() != Material.AIR) { + this.lootList.add(is); + } + } + } + } + + public void saveLoot() { + this.storage.set("Loot", (Object)this.inv.getContents()); + Conquest.getInstance().getStorage().saveConfig(); + this.lootList.clear(); + ItemStack[] contents; + for (int length = (contents = this.inv.getContents()).length, i = 0; i < length; ++i) { + final ItemStack is = contents[i]; + if (is != null && is.getType() != Material.AIR) { + this.lootList.add(is); + } + } + } + + public void reloadLoot() { + final int size = 36; + this.inv = Bukkit.createInventory((InventoryHolder)null, size, "Conquest Loot"); + this.loadLoot(); + } + + public ItemStack getRandomLoot() { + final Random r = new Random(); + return this.lootList.get(r.nextInt(this.lootList.size())); + } + + public void openLoot(final Player player, final boolean access) { + player.openInventory(this.inv); + if (access) { + this.lootEditors.add(player.getUniqueId()); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onInventoryClose(final InventoryCloseEvent event) { + final Player player = (Player)event.getPlayer(); + final UUID uuid = player.getUniqueId(); + final Inventory inv = event.getInventory(); + boolean eventInv = false; + if (inv != null && inv.getName() != null) { + if (inv.getName().equalsIgnoreCase("Conquest Loot")) { + eventInv = true; + } + if (eventInv) { + final String name = inv.getName(); + if (this.lootEditors.contains(uuid)) { + this.saveLoot(); + player.sendMessage(Utils.color("&aSaving loot for &d" + name + " &a!")); + this.lootEditors.remove(uuid); + } + } + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onInventoryClick(final InventoryClickEvent event) { + final Player player = (Player)event.getWhoClicked(); + final UUID uuid = player.getUniqueId(); + final Inventory inv = event.getInventory(); + boolean eventInv = false; + if (inv != null && inv.getName() != null) { + if (inv.getName().equalsIgnoreCase("Conquest Loot")) { + eventInv = true; + } + if (eventInv && !this.lootEditors.contains(uuid)) { + event.setCancelled(true); + } + } + } + + public Inventory getInv() { + return this.inv; + } + + public List getLootList() { + return this.lootList; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/task/ConquestTask.java b/ViperCore/src/main/java/com/igodlik3/conquest/task/ConquestTask.java new file mode 100644 index 0000000..809118d --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/task/ConquestTask.java @@ -0,0 +1,119 @@ +package com.igodlik3.conquest.task; + +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.faction.bean.Faction; +import net.syuu.popura.faction.bean.FactionPlayer; +import org.bukkit.scheduler.*; +import org.bukkit.configuration.*; +import com.igodlik3.conquest.*; +import org.bukkit.entity.*; +import com.igodlik3.conquest.loot.*; +import com.igodlik3.conquest.event.*; +import com.igodlik3.conquest.utils.*; +import java.util.*; +import org.bukkit.*; + +public class ConquestTask extends BukkitRunnable +{ + private Configuration config; + + public ConquestTask() { + this.config = (Configuration)Conquest.getInstance().getConfig(); + } + + public void run() { + if (Conquest.getInstance().getConquestManager().getRunningGame() == null) { + return; + } + final ConquestManager manager = Conquest.getInstance().getConquestManager(); + final ConquestData data = manager.getRunningGameData(); + final ConquestGame game = manager.getRunningGame(); + ConquestArea.Type[] values; + for (int length = (values = ConquestArea.Type.values()).length, j = 0; j < length; ++j) { + final ConquestArea.Type type = values[j]; + final ConquestArea area = game.getArea(type); + final Cuboid cubo = manager.getConquestCubo(area); + final List containedPlayers = new ArrayList(); + final List containedFactions = new ArrayList(); + for(Player player : Bukkit.getOnlinePlayers()){ + final FactionPlayer fp = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + if (fp.getFaction() != null) { + if (cubo.contains(player.getLocation())) { + containedPlayers.add(player); + if (!containedFactions.contains(fp.getFaction())) { + containedFactions.add(fp.getFaction()); + } + } + } + } + if (containedFactions.size() == 0) { + data.resetTime(type); + data.setFirstCapper(area.getType(), null); + } + else { + if (data.getFirstCapper(area.getType()) != null && !containedFactions.contains(data.getFirstCapper(area.getType()))) { + data.setFirstCapper(area.getType(), null); + } + if (data.getFirstCapper(area.getType()) == null) { + data.setFirstCapper(area.getType(), containedPlayers.get(0)); + } + final FactionPlayer fp2 = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(data.getFirstCapper(area.getType())); + if (fp2.getFaction() != null && data.capPoint(fp2.getFaction(), type)) { + int points = data.getFactionPoints(data.getFirstCapper(area.getType())); + points = ((points == -1) ? 1 : (points + 1)); + data.setFactionsPoints(data.getFirstCapper(area.getType()), points); + if (String.valueOf(points).endsWith("0")) { + Bukkit.broadcastMessage(Utils.color(this.config.getString("Messages.CONQUEST-CAPPING").replaceAll("%POINTS%", String.valueOf(points)).replaceAll("%AREA%", this.getColor(area.getType()) + area.getType().name()).replaceAll("%FACTION%", fp2.getFaction().getName()))); + } + if (data.getFactionPoints(data.getFirstCapper(area.getType())) >= this.config.getInt("CONQUEST.Required-Points")) { + manager.setRunningGame(null); + manager.resetRunningGameData(); + Player player2 = null; + for (final Player testPlayer : containedPlayers) { + final FactionPlayer fp3 = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(testPlayer); + if (fp3.getFaction() == data.getFirstCapper(area.getType())) { + player2 = testPlayer; + break; + } + } + if (player2 == null) { + for(Player testPlayer : Bukkit.getOnlinePlayers()){ + final FactionPlayer fp4 = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(testPlayer); + if (fp4.getFaction() == data.getFirstCapper(area.getType())) { + player2 = testPlayer; + break; + } + } + } + final FactionPlayer fp5 = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player2); + Bukkit.broadcastMessage(Utils.color(this.config.getString("Messages.Conquest.CONQUEST-WIN").replaceAll("%FACTION%", fp5.getFaction().getName()).replaceAll("%POINTS%", String.valueOf(this.config.getInt("CONQUEST.Required-Points"))))); + final ChestKey key = new ChestKey(); + for (int i = 0; i < this.config.getInt("Conquest.Loot.Key.amount"); ++i) { + key.giveKey(player2); + } + } + } + } + } + } + + private ChatColor getColor(final ConquestArea.Type type) { + switch (type) { + case RED: { + return ChatColor.RED; + } + case YELLOW: { + return ChatColor.YELLOW; + } + case BLUE: { + return ChatColor.BLUE; + } + case GREEN: { + return ChatColor.GREEN; + } + default: { + return null; + } + } + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/utils/Config.java b/ViperCore/src/main/java/com/igodlik3/conquest/utils/Config.java new file mode 100644 index 0000000..931e14b --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/utils/Config.java @@ -0,0 +1,88 @@ +package com.igodlik3.conquest.utils; + +import org.bukkit.configuration.file.*; +import com.google.common.base.*; +import com.google.common.io.*; +import java.util.logging.*; +import java.nio.charset.*; +import org.bukkit.configuration.*; +import java.io.*; +import org.bukkit.plugin.*; + +public class Config +{ + File f; + FileConfiguration cfg; + String path_; + String fileName_; + private Plugin main; + + public Config(final String path, final String fileName, final Plugin JavaPluginExtender) { + this.main = JavaPluginExtender; + this.path_ = path; + this.fileName_ = fileName; + } + + public void create() { + this.f = new File(this.path_, this.fileName_); + this.cfg = (FileConfiguration)YamlConfiguration.loadConfiguration(this.f); + } + + public void setDefault(final String filename) { + final InputStream defConfigStream = this.main.getResource(filename); + if (defConfigStream == null) { + return; + } + YamlConfiguration defConfig; + if (this.isStrictlyUTF8()) { + defConfig = YamlConfiguration.loadConfiguration((Reader)new InputStreamReader(defConfigStream, Charsets.UTF_8)); + } + else { + defConfig = new YamlConfiguration(); + byte[] contents; + try { + contents = ByteStreams.toByteArray(defConfigStream); + } + catch (IOException e) { + this.main.getLogger().log(Level.SEVERE, "Unexpected failure reading " + filename, e); + return; + } + final String text = new String(contents, Charset.defaultCharset()); + if (!text.equals(new String(contents, Charsets.UTF_8))) { + this.main.getLogger().warning("Default system encoding may have misread " + filename + " from plugin jar"); + } + try { + defConfig.loadFromString(text); + } + catch (InvalidConfigurationException e2) { + this.main.getLogger().log(Level.SEVERE, "Cannot load configuration from jar", (Throwable)e2); + } + } + this.cfg.setDefaults((Configuration)defConfig); + } + + private boolean isStrictlyUTF8() { + return this.main.getDescription().getAwareness().contains(PluginAwareness.Flags.UTF8); + } + + public void saveConfig() { + try { + this.cfg.save(this.f); + } + catch (IOException e) { + e.printStackTrace(); + } + } + + public FileConfiguration getConfig() { + return this.cfg; + } + + public File toFile() { + return this.f; + } + + public boolean exists() { + return this.f.exists(); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/utils/Cuboid.java b/ViperCore/src/main/java/com/igodlik3/conquest/utils/Cuboid.java new file mode 100644 index 0000000..6e9c53a --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/utils/Cuboid.java @@ -0,0 +1,473 @@ +package com.igodlik3.conquest.utils; + +import org.bukkit.block.*; +import org.bukkit.configuration.serialization.*; +import java.util.logging.*; +import java.util.*; +import org.bukkit.*; + +public class Cuboid implements Iterable, Cloneable, ConfigurationSerializable +{ + protected final String worldName; + protected final int x1; + protected final int y1; + protected final int z1; + protected final int x2; + protected final int y2; + protected final int z2; + + public Cuboid(final Location location1, final Location location2) { + if (!location1.getWorld().equals(location2.getWorld())) { + Logger.getLogger("Les locations doivent \u00eatre dans un m\u00eame monde."); + } + this.worldName = location1.getWorld().getName(); + this.x1 = Math.min(location1.getBlockX(), location2.getBlockX()); + this.y1 = Math.min(location1.getBlockY(), location2.getBlockY()); + this.z1 = Math.min(location1.getBlockZ(), location2.getBlockZ()); + this.x2 = Math.max(location1.getBlockX(), location2.getBlockX()); + this.y2 = Math.max(location1.getBlockY(), location2.getBlockY()); + this.z2 = Math.max(location1.getBlockZ(), location2.getBlockZ()); + } + + public Cuboid(final Location location) { + this(location, location); + } + + public Cuboid(final Cuboid cuboid) { + this(cuboid.getWorld().getName(), cuboid.x1, cuboid.y1, cuboid.z1, cuboid.x2, cuboid.y2, cuboid.z2); + } + + private Cuboid(final String string, final int n, final int n2, final int n3, final int n4, final int n5, final int n6) { + this.worldName = string; + this.x1 = Math.min(n, n4); + this.x2 = Math.max(n, n4); + this.y1 = Math.min(n2, n5); + this.y2 = Math.max(n2, n5); + this.z1 = Math.min(n3, n6); + this.z2 = Math.max(n3, n6); + } + + public Cuboid(final Map map) { + this.worldName = (String) map.get("worldName"); + this.x1 = (int) map.get("x1"); + this.x2 = (int) map.get("x2"); + this.y1 = (int)map.get("y1"); + this.y2 = (int)map.get("y2"); + this.z1 = (int)map.get("z1"); + this.z2 = (int) map.get("z2"); + } + + public Map serialize() { + final HashMap hashMap = new HashMap(); + hashMap.put("worldName", this.worldName); + hashMap.put("x1", this.x1); + hashMap.put("y1", this.y1); + hashMap.put("z1", this.z1); + hashMap.put("x2", this.x2); + hashMap.put("y2", this.y2); + hashMap.put("z2", this.z2); + return hashMap; + } + + public Location getLowerNE() { + return new Location(this.getWorld(), (double)this.x1, (double)this.y1, (double)this.z1); + } + + public Location getUpperSW() { + return new Location(this.getWorld(), (double)this.x2, (double)this.y2, (double)this.z2); + } + + public List getBlocks() { + final Iterator iterator = this.iterator(); + final ArrayList arrayList = new ArrayList(); + while (iterator.hasNext()) { + arrayList.add(iterator.next()); + } + return arrayList; + } + + public Location getCenter() { + final int i = this.getUpperX() + 1; + final int j = this.getUpperY() + 1; + final int k = this.getUpperZ() + 1; + return new Location(this.getWorld(), this.getLowerX() + (i - this.getLowerX()) / 2.0, this.getLowerY() + (j - this.getLowerY()) / 2.0, this.getLowerZ() + (k - this.getLowerZ()) / 2.0); + } + + public World getWorld() { + final World world = Bukkit.getWorld(this.worldName); + if (world == null) { + Logger.getLogger("Le monde " + this.worldName + "n'est pas charg\u00e9 !"); + } + return world; + } + + public int getSizeX() { + return this.x2 - this.x1 + 1; + } + + public int getSizeY() { + return this.y2 - this.y1 + 1; + } + + public int getSizeZ() { + return this.z2 - this.z1 + 1; + } + + public int getLowerX() { + return this.x1; + } + + public int getLowerY() { + return this.y1; + } + + public int getLowerZ() { + return this.z1; + } + + public int getUpperX() { + return this.x2; + } + + public int getUpperY() { + return this.y2; + } + + public int getUpperZ() { + return this.z2; + } + + public Block[] corners() { + final Block[] arrayOfBlock = new Block[8]; + final World localWorld = this.getWorld(); + arrayOfBlock[0] = localWorld.getBlockAt(this.x1, this.y1, this.z1); + arrayOfBlock[1] = localWorld.getBlockAt(this.x1, this.y1, this.z2); + arrayOfBlock[2] = localWorld.getBlockAt(this.x1, this.y2, this.z1); + arrayOfBlock[3] = localWorld.getBlockAt(this.x1, this.y2, this.z2); + arrayOfBlock[4] = localWorld.getBlockAt(this.x2, this.y1, this.z1); + arrayOfBlock[5] = localWorld.getBlockAt(this.x2, this.y1, this.z2); + arrayOfBlock[6] = localWorld.getBlockAt(this.x2, this.y2, this.z1); + arrayOfBlock[7] = localWorld.getBlockAt(this.x2, this.y2, this.z2); + return arrayOfBlock; + } + + public Cuboid expand(final CuboidDirection paramCuboidDirection, final int paramInt) { + switch (paramCuboidDirection) { + case Both: { + return new Cuboid(this.worldName, this.x1 - paramInt, this.y1, this.z1, this.x2, this.y2, this.z2); + } + case East: { + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2 + paramInt, this.y2, this.z2); + } + case Down: { + return new Cuboid(this.worldName, this.x1, this.y1, this.z1 - paramInt, this.x2, this.y2, this.z2); + } + case Horizontal: { + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2, this.y2, this.z2 + paramInt); + } + case South: { + return new Cuboid(this.worldName, this.x1, this.y1 - paramInt, this.z1, this.x2, this.y2, this.z2); + } + case North: { + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2, this.y2 + paramInt, this.z2); + } + default: { + throw new IllegalArgumentException("Invalid direction " + paramCuboidDirection); + } + } + } + + public Cuboid shift(final CuboidDirection paramCuboidDirection, final int paramInt) { + return this.expand(paramCuboidDirection, paramInt).expand(paramCuboidDirection.opposite(), -paramInt); + } + + public Cuboid outset(final CuboidDirection paramCuboidDirection, final int paramInt) { + Cuboid localCuboid = null; + switch (paramCuboidDirection) { + case Unknown: { + localCuboid = this.expand(CuboidDirection.North, paramInt).expand(CuboidDirection.South, paramInt).expand(CuboidDirection.East, paramInt).expand(CuboidDirection.West, paramInt); + break; + } + case Up: { + localCuboid = this.expand(CuboidDirection.Down, paramInt).expand(CuboidDirection.Up, paramInt); + break; + } + case Vertical: { + localCuboid = this.outset(CuboidDirection.Horizontal, paramInt).outset(CuboidDirection.Vertical, paramInt); + break; + } + default: { + throw new IllegalArgumentException("Invalid direction " + paramCuboidDirection); + } + } + return localCuboid; + } + + public Cuboid inset(final CuboidDirection cuboidDirection, final int n) { + return this.outset(cuboidDirection, -n); + } + + public boolean contains(final int n, final int n2, final int n3) { + return n >= this.x1 && n <= this.x2 && n2 >= this.y1 && n2 <= this.y2 && n3 >= this.z1 && n3 <= this.z2; + } + + public boolean contains(final Block block) { + return this.contains(block.getLocation()); + } + + public boolean contains(final Location location) { + return this.worldName.equals(location.getWorld().getName()) && this.contains(location.getBlockX(), location.getBlockY(), location.getBlockZ()); + } + + public int getVolume() { + return this.getSizeX() * this.getSizeY() * this.getSizeZ(); + } + + public byte getAverageLightLevel() { + long l = 0L; + int i = 0; + for (final Block localBlock : this) { + if (localBlock.isEmpty()) { + l += localBlock.getLightLevel(); + ++i; + } + } + return (byte)((i > 0) ? ((byte)(l / i)) : 0); + } + + public Cuboid contract() { + return this.contract(CuboidDirection.Down).contract(CuboidDirection.South).contract(CuboidDirection.East).contract(CuboidDirection.Up).contract(CuboidDirection.North).contract(CuboidDirection.West); + } + + public Cuboid contract(final CuboidDirection paramCuboidDirection) { + Cuboid localCuboid = this.getFace(paramCuboidDirection.opposite()); + switch (paramCuboidDirection) { + case South: { + while (localCuboid.containsOnly(0) && localCuboid.getLowerY() > this.getLowerY()) { + localCuboid = localCuboid.shift(CuboidDirection.Down, 1); + } + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2, localCuboid.getUpperY(), this.z2); + } + case North: { + while (localCuboid.containsOnly(0) && localCuboid.getUpperY() < this.getUpperY()) { + localCuboid = localCuboid.shift(CuboidDirection.Up, 1); + } + return new Cuboid(this.worldName, this.x1, localCuboid.getLowerY(), this.z1, this.x2, this.y2, this.z2); + } + case Both: { + while (localCuboid.containsOnly(0) && localCuboid.getLowerX() > this.getLowerX()) { + localCuboid = localCuboid.shift(CuboidDirection.North, 1); + } + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, localCuboid.getUpperX(), this.y2, this.z2); + } + case East: { + while (localCuboid.containsOnly(0) && localCuboid.getUpperX() < this.getUpperX()) { + localCuboid = localCuboid.shift(CuboidDirection.South, 1); + } + return new Cuboid(this.worldName, localCuboid.getLowerX(), this.y1, this.z1, this.x2, this.y2, this.z2); + } + case Down: { + while (localCuboid.containsOnly(0) && localCuboid.getLowerZ() > this.getLowerZ()) { + localCuboid = localCuboid.shift(CuboidDirection.East, 1); + } + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2, this.y2, localCuboid.getUpperZ()); + } + case Horizontal: { + while (localCuboid.containsOnly(0) && localCuboid.getUpperZ() < this.getUpperZ()) { + localCuboid = localCuboid.shift(CuboidDirection.West, 1); + } + return new Cuboid(this.worldName, this.x1, this.y1, localCuboid.getLowerZ(), this.x2, this.y2, this.z2); + } + default: { + throw new IllegalArgumentException("Invalid direction " + paramCuboidDirection); + } + } + } + + public Cuboid getFace(final CuboidDirection paramCuboidDirection) { + switch (paramCuboidDirection) { + case South: { + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2, this.y1, this.z2); + } + case North: { + return new Cuboid(this.worldName, this.x1, this.y2, this.z1, this.x2, this.y2, this.z2); + } + case Both: { + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x1, this.y2, this.z2); + } + case East: { + return new Cuboid(this.worldName, this.x2, this.y1, this.z1, this.x2, this.y2, this.z2); + } + case Down: { + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2, this.y2, this.z1); + } + case Horizontal: { + return new Cuboid(this.worldName, this.x1, this.y1, this.z2, this.x2, this.y2, this.z2); + } + default: { + throw new IllegalArgumentException("Invalid direction " + paramCuboidDirection); + } + } + } + + public boolean containsOnly(final int paramInt) { + for (final Block block : this) { + if (block.getTypeId() != paramInt) { + return false; + } + } + return true; + } + + public Cuboid getBoundingCuboid(final Cuboid paramCuboid) { + if (paramCuboid == null) { + return this; + } + final int i = Math.min(this.getLowerX(), paramCuboid.getLowerX()); + final int j = Math.min(this.getLowerY(), paramCuboid.getLowerY()); + final int k = Math.min(this.getLowerZ(), paramCuboid.getLowerZ()); + final int m = Math.max(this.getUpperX(), paramCuboid.getUpperX()); + final int n = Math.max(this.getUpperY(), paramCuboid.getUpperY()); + final int i2 = Math.max(this.getUpperZ(), paramCuboid.getUpperZ()); + return new Cuboid(this.worldName, i, j, k, m, n, i2); + } + + public Block getRelativeBlock(final int n, final int n2, final int n3) { + return this.getWorld().getBlockAt(this.x1 + n, this.y1 + n2, this.z1 + n3); + } + + public Block getRelativeBlock(final World world, final int n, final int n2, final int n3) { + return world.getBlockAt(this.x1 + n, this.y1 + n2, this.z1 + n3); + } + + public List getChunks() { + final ArrayList arrayList = new ArrayList(); + final World world = this.getWorld(); + final int i = this.getLowerX() & 0xFFFFFFF0; + final int j = this.getUpperX() & 0xFFFFFFF0; + final int k = this.getLowerZ() & 0xFFFFFFF0; + final int m = this.getUpperZ() & 0xFFFFFFF0; + for (int n = i; n <= j; n += 16) { + for (int i2 = k; i2 <= m; i2 += 16) { + arrayList.add(world.getChunkAt(n >> 4, i2 >> 4)); + } + } + return arrayList; + } + + @Override + public Iterator iterator() { + return new CuboidIterator(this.getWorld(), this.x1, this.y1, this.z1, this.x2, this.y2, this.z2); + } + + public Cuboid clone() { + return new Cuboid(this); + } + + @Override + public String toString() { + return new String("Cuboid: " + this.worldName + "," + this.x1 + "," + this.y1 + "," + this.z1 + "=>" + this.x2 + "," + this.y2 + "," + this.z2); + } + + public enum CuboidDirection + { + North("North", 0), + East("East", 1), + South("South", 2), + West("West", 3), + Up("Up", 4), + Down("Down", 5), + Horizontal("Horizontal", 6), + Vertical("Vertical", 7), + Both("Both", 8), + Unknown("Unknown", 9); + + private CuboidDirection(final String s, final int n) { + } + + public CuboidDirection opposite() { + switch (this) { + case Both: { + return CuboidDirection.South; + } + case Down: { + return CuboidDirection.West; + } + case East: { + return CuboidDirection.North; + } + case Horizontal: { + return CuboidDirection.East; + } + case Unknown: { + return CuboidDirection.Vertical; + } + case Up: { + return CuboidDirection.Horizontal; + } + case North: { + return CuboidDirection.Down; + } + case South: { + return CuboidDirection.Up; + } + case Vertical: { + return CuboidDirection.Both; + } + default: { + return CuboidDirection.Unknown; + } + } + } + } + + public class CuboidIterator implements Iterator + { + private World w; + private int baseX; + private int baseY; + private int baseZ; + private int x; + private int y; + private int z; + private int sizeX; + private int sizeY; + private int sizeZ; + + public CuboidIterator(final World paramWorld, final int paramInt1, final int paramInt2, final int paramInt3, final int paramInt4, final int paramInt5, final int paramInt6) { + this.w = paramWorld; + this.baseX = paramInt1; + this.baseY = paramInt2; + this.baseZ = paramInt3; + this.sizeX = Math.abs(paramInt4 - paramInt1) + 1; + this.sizeY = Math.abs(paramInt5 - paramInt2) + 1; + this.sizeZ = Math.abs(paramInt6 - paramInt3) + 1; + final boolean x = false; + this.z = (x ? 1 : 0); + this.y = (x ? 1 : 0); + this.x = (x ? 1 : 0); + } + + @Override + public boolean hasNext() { + return this.x < this.sizeX && this.y < this.sizeY && this.z < this.sizeZ; + } + + @Override + public Block next() { + final Block block = this.w.getBlockAt(this.baseX + this.x, this.baseY + this.y, this.baseZ + this.z); + if (++this.x >= this.sizeX) { + this.x = 0; + if (++this.y >= this.sizeY) { + this.y = 0; + ++this.z; + } + } + return block; + } + + @Override + public void remove() { + } + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/conquest/utils/Utils.java b/ViperCore/src/main/java/com/igodlik3/conquest/utils/Utils.java new file mode 100644 index 0000000..89a67c3 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/conquest/utils/Utils.java @@ -0,0 +1,26 @@ +package com.igodlik3.conquest.utils; + +import org.bukkit.*; + +public class Utils +{ + public static String color(final String stg) { + return ChatColor.translateAlternateColorCodes('&', stg); + } + + public static String stringifyLocation(final Location location) { + return "[" + location.getWorld().getName() + "," + location.getX() + "," + location.getY() + "," + location.getZ() + "]"; + } + + public static Location destringifyLocation(final String string) { + final String[] split = string.substring(1, string.length() - 2).split(","); + final World world = Bukkit.getWorld(split[0]); + if (world == null) { + return null; + } + final double x = Double.parseDouble(split[1]); + final double y = Double.parseDouble(split[2]); + final double z = Double.parseDouble(split[3]); + return new Location(world, x, y, z); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/enchantfix/EnchantFix.java b/ViperCore/src/main/java/com/igodlik3/enchantfix/EnchantFix.java new file mode 100644 index 0000000..b393509 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/enchantfix/EnchantFix.java @@ -0,0 +1,32 @@ +package com.igodlik3.enchantfix; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import org.bukkit.configuration.Configuration; +import org.bukkit.plugin.java.*; +import org.bukkit.event.*; +import org.bukkit.plugin.*; + +public class EnchantFix extends Manager +{ + private static EnchantFix instance; + private ConfigurationWrapper config; + + public EnchantFix(HCFactionPlugin plugin) { + super(plugin); + } + + public Configuration getConfig(){ + return config.getConfig(); + } + public void init() { + config = new ConfigurationWrapper("enchant-fix.yml", this.getPlugin()); + EnchantFix.instance = this; + this.getPlugin().getServer().getPluginManager().registerEvents((Listener)new EnchantListener(),getPlugin()); + } + + public static EnchantFix getInstance() { + return EnchantFix.instance; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/enchantfix/EnchantListener.java b/ViperCore/src/main/java/com/igodlik3/enchantfix/EnchantListener.java new file mode 100644 index 0000000..79dae75 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/enchantfix/EnchantListener.java @@ -0,0 +1,164 @@ +package com.igodlik3.enchantfix; + +import org.bukkit.configuration.*; +import org.bukkit.enchantments.*; +import org.bukkit.inventory.*; +import org.bukkit.event.*; +import org.bukkit.event.enchantment.*; +import org.bukkit.event.inventory.*; +import org.bukkit.inventory.meta.*; +import org.bukkit.event.player.*; +import org.bukkit.event.entity.*; +import java.util.*; +import org.bukkit.entity.*; +import org.bukkit.*; +import net.md_5.bungee.api.chat.*; + +public class EnchantListener implements Listener +{ + private Configuration config; + + public EnchantListener() { + this.config = (Configuration)EnchantFix.getInstance().getConfig(); + } + + @EventHandler + public void onPlayerInteract(final PlayerInteractEvent event) { + if (event.getItem() != null && event.getItem().getType() != Material.AIR) { + final ItemStack item = event.getItem(); + if (item.getEnchantments() != null && !item.getEnchantments().isEmpty()) { + final Map enchants = (Map)item.getEnchantments(); + try { + for (final String enchant : this.config.getStringList("Enchant-Limiter")) { + final String[] parse = enchant.split(":"); + final Enchantment enchantment = Enchantment.getByName(parse[0]); + final int level = Integer.parseInt(parse[1]); + if (enchants.containsKey(enchantment) && enchants.get(enchantment) > level) { + event.getPlayer().setItemInHand((ItemStack)null); + this.notifyAdmins(event.getPlayer()); + } + } + } + catch (Exception ex) { + ex.printStackTrace(); + } + } + } + } + + @EventHandler + public void onEnchantItem(final EnchantItemEvent e) { + final Map enchants = (Map)e.getEnchantsToAdd(); + try { + for (final String enchant : this.config.getStringList("Enchant-Limiter")) { + final String[] parse = enchant.split(":"); + final Enchantment enchantment = Enchantment.getByName(parse[0]); + final int level = Integer.parseInt(parse[1]); + if (enchants.containsKey(enchantment) && enchants.get(enchantment) > level) { + enchants.remove(enchantment); + if (level <= 0) { + continue; + } + enchants.put(enchantment, level); + } + } + } + catch (Exception ex) { + ex.printStackTrace(); + } + } + + @EventHandler + public void onInventoryClick(final InventoryClickEvent e) { + if (e.getInventory().getType() == InventoryType.ANVIL && e.getSlotType() == InventoryType.SlotType.RESULT) { + final ItemStack item = e.getCurrentItem(); + try { + for (final String blockedEnchantments : this.config.getStringList("Enchant-Limiter")) { + final String[] parse = blockedEnchantments.split(":"); + final Enchantment selectedEnchantment = Enchantment.getByName(parse[0]); + final int level = Integer.parseInt(parse[1]); + if (item.getType() == Material.ENCHANTED_BOOK) { + final EnchantmentStorageMeta bookMeta = (EnchantmentStorageMeta)item.getItemMeta(); + if (bookMeta.getStoredEnchants().containsKey(selectedEnchantment) && bookMeta.getStoredEnchants().get(selectedEnchantment) > level) { + e.setCancelled(true); + return; + } + } + if (item.getEnchantments().containsKey(selectedEnchantment) && item.getEnchantments().get(selectedEnchantment) > level) { + e.setCancelled(true); + } + } + } + catch (Exception ex) { + ex.printStackTrace(); + } + } + } + + @EventHandler + public void onPlayerFish(final PlayerFishEvent event) { + final Entity entity = event.getCaught(); + if (entity != null && entity instanceof ItemStack) { + final ItemStack item = (ItemStack)entity; + if (item.getEnchantments() != null && !item.getEnchantments().isEmpty()) { + final Map enchants = (Map)item.getEnchantments(); + try { + for (final String enchant : this.config.getStringList("Enchant-Limiter")) { + final String[] parse = enchant.split(":"); + final Enchantment enchantment = Enchantment.getByName(parse[0]); + final int level = Integer.parseInt(parse[1]); + if (enchants.containsKey(enchantment) && enchants.get(enchantment) > level) { + item.removeEnchantment(enchantment); + if (level <= 0) { + continue; + } + item.addEnchantment(enchantment, level); + } + } + } + catch (Exception ex) { + ex.printStackTrace(); + } + } + } + } + + @EventHandler + public void onEntityDeath(final EntityDeathEvent event) { + final List items = (List)event.getDrops(); + if (items != null) { + for (final ItemStack item : items) { + if (item != null && item.getType() != Material.AIR && item.getEnchantments() != null && !item.getEnchantments().isEmpty()) { + final Map enchants = (Map)item.getEnchantments(); + try { + for (final String enchant : this.config.getStringList("Enchant-Limiter")) { + final String[] parse = enchant.split(":"); + final Enchantment enchantment = Enchantment.getByName(parse[0]); + final int level = Integer.parseInt(parse[1]); + if (enchants.containsKey(enchantment) && enchants.get(enchantment) > level) { + item.removeEnchantment(enchantment); + if (level <= 0) { + continue; + } + item.addEnchantment(enchantment, level); + } + } + } + catch (Exception ex) { + ex.printStackTrace(); + } + } + } + } + } + + private void notifyAdmins(final Player player) { + final TextComponent text = new TextComponent(ChatColor.translateAlternateColorCodes('&', "&8[&cALERT&8] &c" + player.getName() + " &ehas an illegal item! &6(&cClick here to TP&6)")); + text.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tp " + player.getName())); + for (Player pls : Bukkit.getOnlinePlayers()){ + if (pls.hasPermission("illegal.notify")) { + pls.spigot().sendMessage((BaseComponent)text); + } + } + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/modmode/ModMode.java b/ViperCore/src/main/java/com/igodlik3/modmode/ModMode.java new file mode 100644 index 0000000..c2cdc16 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/modmode/ModMode.java @@ -0,0 +1,70 @@ +package com.igodlik3.modmode; + +import com.google.common.collect.Sets; +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import org.bukkit.configuration.Configuration; +import org.bukkit.plugin.java.*; +import com.igodlik3.modmode.manager.*; +import java.util.*; +import org.bukkit.command.*; +import com.igodlik3.modmode.commands.*; +import org.bukkit.event.*; +import com.igodlik3.modmode.listener.*; +import org.bukkit.plugin.*; + +public class ModMode extends Manager +{ + public static ModMode instance; + private Set modToggled = Sets.newHashSet(); + private FreezeManager freezeManager; + private ConfigurationWrapper config; + + public Configuration getConfig(){ + return config.getConfig(); + } + + public ModMode(HCFactionPlugin plugin) { + super(plugin); + } + + + public void init() { + config = new ConfigurationWrapper("modmode.yml", this.getPlugin()); + config.saveDefault(); + (ModMode.instance = this).registerManagers(); + this.registerListeners(); + this.registerCommands(); + } + + private void registerCommands() { + this.getPlugin().getCommand("mod").setExecutor((CommandExecutor)new CmdModMode()); + this.getPlugin().getCommand("freeze").setExecutor((CommandExecutor)new CmdFreeze()); + this.getPlugin().getCommand("staffchat").setExecutor((CommandExecutor)new CmdStaffChat()); + } + + private void registerListeners() { + final PluginManager pm = this.getPlugin().getServer().getPluginManager(); + pm.registerEvents((Listener)new ItemListener(this.getPlugin()), this.getPlugin()); + pm.registerEvents((Listener)new ModListener(), this.getPlugin()); + pm.registerEvents((Listener)new VanishListener(), this.getPlugin()); + pm.registerEvents((Listener)new ScoreboardListener(), this.getPlugin()); + } + + private void registerManagers() { + (this.freezeManager = new FreezeManager()).runTaskTimer(this.getPlugin(), 20L, (long)(20 * this.getConfig().getInt("Mod-Mode.Freeze.message-delay"))); + } + + public static ModMode getInstance() { + return ModMode.instance; + } + + public Set getModToggled() { + return this.modToggled; + } + + public FreezeManager getFreezeManager() { + return this.freezeManager; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/modmode/commands/CmdFreeze.java b/ViperCore/src/main/java/com/igodlik3/modmode/commands/CmdFreeze.java new file mode 100644 index 0000000..b86a8f6 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/modmode/commands/CmdFreeze.java @@ -0,0 +1,34 @@ +package com.igodlik3.modmode.commands; + +import com.igodlik3.modmode.manager.*; +import com.igodlik3.modmode.*; +import org.bukkit.command.*; +import com.igodlik3.modmode.utils.*; +import org.bukkit.*; +import org.bukkit.entity.*; + +public class CmdFreeze implements CommandExecutor +{ + private FreezeManager manager; + + public CmdFreeze() { + this.manager = ModMode.getInstance().getFreezeManager(); + } + + public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) { + if (sender.hasPermission("ModMode")) { + if (args.length == 0) { + sender.sendMessage(Utils.color("&c/ss ")); + } + else { + final Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + sender.sendMessage(Utils.color("&cThis player is not online or doesn't exist !")); + return true; + } + sender.sendMessage(this.manager.freezePlayer(target)); + } + } + return false; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/modmode/commands/CmdModMode.java b/ViperCore/src/main/java/com/igodlik3/modmode/commands/CmdModMode.java new file mode 100644 index 0000000..4a1f3a3 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/modmode/commands/CmdModMode.java @@ -0,0 +1,59 @@ +package com.igodlik3.modmode.commands; + +import com.igodlik3.ItemBuilder; +import org.bukkit.configuration.*; +import java.util.*; +import com.igodlik3.modmode.*; +import org.bukkit.command.*; +import org.bukkit.entity.*; +import org.bukkit.inventory.*; +import org.bukkit.*; +import com.igodlik3.modmode.utils.*; + +public class CmdModMode implements CommandExecutor +{ + private Configuration config; + private Set modToggled; + + public CmdModMode() { + this.config = (Configuration)ModMode.getInstance().getConfig(); + this.modToggled = ModMode.getInstance().getModToggled(); + } + + public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) { + if (!(sender instanceof Player)) { + return true; + } + final Player player = (Player)sender; + final String e = this.config.getString("Messages.STATUT.enabled"); + final String d = this.config.getString("Messages.STATUT.disabled"); + if (player.hasPermission("ModMode")) { + if (this.modToggled.contains(player.getUniqueId())) { + this.modToggled.remove(player.getUniqueId()); + player.sendMessage(Utils.color(this.config.getString("Messages.MOD-MODE").replaceAll("%STATUT%", d))); + player.getInventory().clear(); + } + else { + this.modToggled.add(player.getUniqueId()); + player.sendMessage(Utils.color(this.config.getString("Messages.MOD-MODE").replaceAll("%STATUT%", e))); + this.getModItems(player); + } + } + return false; + } + + private void getModItems(final Player player) { + player.setAllowFlight(true); + player.setFlying(true); + player.setFlySpeed(0.5f); + player.getInventory().clear(); + player.getInventory().setArmorContents((ItemStack[])null); + player.getInventory().setItem(0, new ItemBuilder(Material.COMPASS).displayname(this.config.getString("Messages.MOD-ITEMS.COMPASS")).build()); + player.getInventory().setItem(1, new ItemBuilder(Material.WOOD_AXE).displayname(this.config.getString("Messages.MOD-ITEMS.AXE")).build()); + player.getInventory().setItem(2, new ItemBuilder(Material.EYE_OF_ENDER).displayname(this.config.getString("Messages.MOD-ITEMS.RANDOM-TP")).build()); + player.getInventory().setItem(5, new ItemBuilder(Material.CHEST).displayname(this.config.getString("Messages.MOD-ITEMS.CHEST")).build()); + player.getInventory().setItem(6, new ItemBuilder(Material.INK_SACK).durability((short)1).displayname(this.config.getString("Messages.MOD-ITEMS.VANISH").replaceAll("%STATUT%", "&cOFF")).build()); + player.getInventory().setItem(7, new ItemBuilder(Material.BLAZE_ROD).displayname(this.config.getString("Messages.MOD-ITEMS.FREEZE.ITEMS")).build()); + player.getInventory().setItem(8, new ItemBuilder(Material.BOOK).displayname(this.config.getString("Messages.MOD-ITEMS.INSPECTION")).build()); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/modmode/commands/CmdStaffChat.java b/ViperCore/src/main/java/com/igodlik3/modmode/commands/CmdStaffChat.java new file mode 100644 index 0000000..afe7003 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/modmode/commands/CmdStaffChat.java @@ -0,0 +1,41 @@ +package com.igodlik3.modmode.commands; + +import org.bukkit.configuration.*; +import com.igodlik3.modmode.*; +import org.bukkit.command.*; +import org.bukkit.entity.*; +import com.igodlik3.modmode.utils.*; +import org.bukkit.*; + +public class CmdStaffChat implements CommandExecutor +{ + private Configuration config; + + public CmdStaffChat() { + this.config = (Configuration)ModMode.getInstance().getConfig(); + } + + public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) { + if (!(sender instanceof Player)) { + return true; + } + final Player player = (Player)sender; + if (player.hasPermission("ModMode.StaffChat")) { + if (args.length == 0) { + player.sendMessage(Utils.color("&c/sc ")); + } + else { + final StringBuilder message = new StringBuilder(); + for (int i = 0; i < args.length; ++i) { + message.append(String.valueOf(args[i]) + " "); + } + for (Player pls : Bukkit.getOnlinePlayers()){ + if (pls.hasPermission("ModMode.StaffChat")) { + pls.sendMessage(Utils.color(this.config.getString("Mod-Mode.Staff-Chat.format").replaceAll("%PLAYER%", player.getName()).replaceAll("%MESSAGE%", message.toString()))); + } + } + } + } + return true; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/modmode/event/VanishEvent.java b/ViperCore/src/main/java/com/igodlik3/modmode/event/VanishEvent.java new file mode 100644 index 0000000..1864e73 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/modmode/event/VanishEvent.java @@ -0,0 +1,74 @@ +package com.igodlik3.modmode.event; + +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; +import org.bukkit.event.*; +import org.bukkit.entity.*; +import java.util.*; +import org.bukkit.*; + +public class VanishEvent extends Event +{ + private static final HandlerList handlers; + public static Set vanished; + private Player p; + + static { + handlers = new HandlerList(); + VanishEvent.vanished = new HashSet(); + } + + public VanishEvent(final Player player, final boolean on) { + this.p = player; + if (on) { + this.setVanish(); + } + else { + this.unVanish(); + } + } + + public void setVanish() { + VanishEvent.vanished.add(this.p); + /* + Player[] onlinePlayers; + for (int length = (onlinePlayers = Bukkit.getOnlinePlayers().toArray(new Player[0])).length, i = 0; i < length; ++i) { + final Player player = onlinePlayers[i]; + if (!player.hasPermission("ModMode.Vanish")) { + player.hidePlayer(this.p); + } + }*/ + ((CraftPlayer)p).setHidden(true); + } + + public void unVanish() { + VanishEvent.vanished.remove(this.p); + /* + Player[] onlinePlayers; + for (int length = (onlinePlayers = Bukkit.getOnlinePlayers().toArray(new Player[0])).length, i = 0; i < length; ++i) { + final Player player = onlinePlayers[i]; + player.showPlayer(this.p); + } + */ + ((CraftPlayer)p).setHidden(false); + } + + public boolean isVanish() { + return VanishEvent.vanished.contains(this.p); + } + + public String getVanishedPlayers() { + return VanishEvent.vanished.toString(); + } + + public Player getPlayer() { + return this.p; + } + + public HandlerList getHandlers() { + return VanishEvent.handlers; + } + + public static HandlerList getHandlerList() { + return VanishEvent.handlers; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/modmode/listener/ItemListener.java b/ViperCore/src/main/java/com/igodlik3/modmode/listener/ItemListener.java new file mode 100644 index 0000000..60b1aee --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/modmode/listener/ItemListener.java @@ -0,0 +1,207 @@ +package com.igodlik3.modmode.listener; + +import com.igodlik3.ItemBuilder; +import com.igodlik3.subclaims.FactionsUtils; +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.syuu.common.utils.PlayerUtils; +import net.syuu.popura.faction.FactionType; +import org.bukkit.configuration.*; +import com.igodlik3.modmode.manager.*; +import com.igodlik3.modmode.*; +import org.bukkit.event.player.*; +import org.bukkit.event.block.*; +import java.util.*; +import org.bukkit.entity.*; +import com.igodlik3.modmode.event.*; +import org.bukkit.event.*; +import com.igodlik3.modmode.utils.*; +import org.bukkit.inventory.meta.*; +import org.bukkit.inventory.*; +import org.bukkit.event.inventory.*; +import org.bukkit.*; + +public class ItemListener implements Listener +{ + private Configuration config; + private FreezeManager manager; + private HCFactionPlugin plugin; + + public ItemListener(HCFactionPlugin instance) { + this.config = (Configuration)ModMode.getInstance().getConfig(); + this.manager = ModMode.getInstance().getFreezeManager(); + this.plugin = instance; + } + + @EventHandler + public void onEntityInteract(final PlayerInteractEntityEvent event) { + if (event.getRightClicked() instanceof Player) { + final Player target = (Player)event.getRightClicked(); + final Player player = event.getPlayer(); + if (player.getItemInHand() != null && player.getItemInHand().getType() != Material.AIR) { + final ItemStack item = player.getItemInHand(); + if (item.getType() == Material.BOOK && item.hasItemMeta() && item.getItemMeta().hasDisplayName() && item.getItemMeta().getDisplayName().equalsIgnoreCase(Utils.color(this.config.getString("Messages.MOD-ITEMS.INSPECTION")))) { + if (this.isMod(player)) { + player.performCommand("invsee " + target.getName()); + player.sendMessage(Utils.color(this.config.getString("Messages.MOD-ITEMS.OPENING-INVENTORY").replaceAll("%TARGET%", target.getName()))); + } + else { + + player.setItemInHand(null); + PlayerUtils.updateInventory(player); + //player.sendMessage(Utils.color(this.config.getString("Messages.MOD-ITEMS.MODE-NOT-TOGGLED"))); + } + } + else if (item.getType() == Material.BLAZE_ROD && item.hasItemMeta() && item.getItemMeta().hasDisplayName() && item.getItemMeta().getDisplayName().equalsIgnoreCase(Utils.color(this.config.getString("Messages.MOD-ITEMS.FREEZE.ITEMS")))) { + if (this.isMod(player)) { + player.sendMessage(this.manager.freezePlayer(target)); + } + else { + player.setItemInHand(null); + PlayerUtils.updateInventory(player); + //player.sendMessage(Utils.color(this.config.getString("Messages.MOD-ITEMS.MODE-NOT-TOGGLED"))); + } + } + } + } + } + + public Player getCorrectPlayer(Player moderator){ + for(Player p : Bukkit.getOnlinePlayers()){ + if(!p.equals(moderator)) { + if(FactionsUtils.getFactionAt(p.getLocation()) == null){ + return p; + } + + String name = FactionsUtils.getFactionAt(p.getLocation()).getName(); + + if(!name.equals("Spawn")){ + return p; + } + } + } + return null; + } + + public Player getRandomPlayer(Player moderator) { + final Random r = new Random(); + final Player[] pls = Bukkit.getOnlinePlayers().toArray(new Player[0]); + Player target = pls[r.nextInt(pls.length)]; + + while(target.equals(moderator)){ + target = pls[r.nextInt(pls.length)]; + } + + if(FactionsUtils.getFactionAt(target.getLocation()) != null){ + if(FactionsUtils.getFactionAt(target.getLocation()).getName().equals("Spawn")){ + target = getCorrectPlayer(moderator); + } + } + return target; + } + + @EventHandler + public void onInteract(final PlayerInteractEvent event) { + final Player player = event.getPlayer(); + if ((event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) && event.getItem() != null && event.getItem().getType() != Material.AIR) { + final ItemStack item = event.getItem(); + if (item.hasItemMeta() && item.getItemMeta().hasDisplayName()) { + switch (item.getType()) { + case EYE_OF_ENDER: { + event.setCancelled(true); + if(this.isMod(player)) { + + if(Bukkit.getOnlinePlayers().size() <= 1){ + player.sendMessage(plugin.configdata.getConfigMessage("only-one-online").replaceAll("&", "§")); + return; + } + + if(getCorrectPlayer(player) == null) { + player.sendMessage(plugin.configdata.getConfigMessage("all-players-in-spawn").replaceAll("&", "§")); + return; + } + + final Player target = getRandomPlayer(player); + + if (target != player) { + player.teleport((Entity) target); + player.sendMessage(Utils.color(this.config.getString("Messages.MOD-ITEMS.RANDOM-TELEPORTATION").replaceAll("%PLAYER%", target.getName()))); + break; + } + }else{ + player.setItemInHand(null); + PlayerUtils.updateInventory(player); + } + break; + } + case INK_SACK: { + event.setCancelled(true); + if(this.isMod(player)) { + + if (VanishEvent.vanished.contains(player)) { + Bukkit.getPluginManager().callEvent((Event) new VanishEvent(player, false)); + player.setItemInHand(new ItemBuilder(Material.INK_SACK).durability((short) 1).displayname(this.config.getString("Messages.MOD-ITEMS.VANISH").replaceAll("%STATUT%", "&cOFF")).build()); + break; + } + Bukkit.getPluginManager().callEvent((Event) new VanishEvent(player, true)); + player.setItemInHand(new ItemBuilder(Material.INK_SACK).durability((short) 10).displayname(this.config.getString("Messages.MOD-ITEMS.VANISH").replaceAll("%STATUT%", "&aON")).build()); + }else{ + player.setItemInHand(null); + PlayerUtils.updateInventory(player); + } + + break; + } + case CHEST: { + + event.setCancelled(true); + if(this.isMod(player)) { + + final Inventory inv = Bukkit.createInventory((InventoryHolder) null, 54, Utils.color("&bPlayers under level 16")); + Player[] onlinePlayers; + for (Player p : Bukkit.getOnlinePlayers()) { + if (p.getLocation().getY() <= 16.0) { + final ItemStack is = new ItemBuilder(Material.SKULL_ITEM).durability((short) 3).displayname("&b" + p.getName()).lore("", "&c�� &eClick to teleport !").build(); + final SkullMeta meta = (SkullMeta) is.getItemMeta(); + meta.setOwner(p.getName()); + is.setItemMeta((ItemMeta) meta); + inv.addItem(new ItemStack[]{is}); + } + } + player.openInventory(inv); + }else{ + player.setItemInHand(null); + PlayerUtils.updateInventory(player); + } + break; + } + } + } + } + } + + @EventHandler + public void onInventoryClick(final InventoryClickEvent event) { + final Inventory inv = event.getInventory(); + final Player player = (Player)event.getWhoClicked(); + if (inv != null && inv.getName() != null && inv.getName().contains("level 16")) { + event.setCancelled(true); + if (event.getCurrentItem() != null && event.getCurrentItem().getType() != Material.AIR) { + final ItemStack item = event.getCurrentItem(); + if (event.getClickedInventory() == player.getOpenInventory().getTopInventory() && item.getType() == Material.SKULL_ITEM) { + player.closeInventory(); + final Player pls = Bukkit.getPlayer(ChatColor.stripColor(item.getItemMeta().getDisplayName())); + if (pls == null) { + player.sendMessage(Utils.color(this.config.getString("Messages.MOD-ITEMS.GUI.NOT-ONLINE"))); + return; + } + player.teleport((Entity)pls); + player.sendMessage(Utils.color(this.config.getString("Messages.MOD-ITEMS.GUI.TELEPORTATION").replaceAll("%PLAYER%", pls.getName()))); + } + } + } + } + + private boolean isMod(final Player player) { + return player.hasPermission("ModMode") && ModMode.getInstance().getModToggled().contains(player.getUniqueId()); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/modmode/listener/ModListener.java b/ViperCore/src/main/java/com/igodlik3/modmode/listener/ModListener.java new file mode 100644 index 0000000..2c9a49e --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/modmode/listener/ModListener.java @@ -0,0 +1,156 @@ +package com.igodlik3.modmode.listener; + +import org.bukkit.configuration.*; +import com.igodlik3.modmode.manager.*; +import com.igodlik3.modmode.*; +import com.igodlik3.modmode.utils.*; +import org.bukkit.command.*; +import java.util.*; +import org.bukkit.event.*; +import org.bukkit.event.inventory.*; +import org.bukkit.event.block.*; +import org.bukkit.event.player.*; +import org.bukkit.*; +import org.bukkit.event.entity.*; +import org.bukkit.entity.*; +import org.bukkit.projectiles.*; +import org.bukkit.scheduler.BukkitTask; + +public class ModListener implements Listener +{ + private Configuration config; + private FreezeManager manager; + + public ModListener() { + this.config = (Configuration)ModMode.getInstance().getConfig(); + this.manager = ModMode.getInstance().getFreezeManager(); + } + + @EventHandler + public void onPlayerJoin(final PlayerJoinEvent event) { + final Player player = event.getPlayer(); + if (this.config.getBoolean("Mod-Mode.Staff-LeaveJoin-Message") && player.hasPermission("ModMode")) { + for(Player pls : Bukkit.getOnlinePlayers()){ + if (pls.hasPermission("ModMode")) { + pls.sendMessage(Utils.color(this.config.getString("Messages.STAFF-JOIN").replaceAll("%PLAYER%", player.getName()))); + } + } + } + if (this.config.getBoolean("Mod-Mode.Toggle-ModMode-OnJoin")) { + player.performCommand("mod"); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerQuit(final PlayerQuitEvent event) { + final Player player = event.getPlayer(); + if (this.config.getBoolean("Mod-Mode.Staff-LeaveJoin-Message") && player.hasPermission("Xeor.ModMode")) { + for(Player pls : Bukkit.getOnlinePlayers()){ + if (pls.hasPermission("Xeor.ModMode")) { + pls.sendMessage(Utils.color(this.config.getString("Messages.STAFF-LEAVE").replaceAll("%PLAYER%", player.getName()))); + } + } + } + if (this.manager.isFrozen(player) && this.config.getBoolean("Mod-Mode.Freeze.execute-cmd-on-disconnect")) { + for (final String stg : this.config.getStringList("Mod-Mode.Freeze.cmds")) { + Bukkit.dispatchCommand((CommandSender)Bukkit.getConsoleSender(), stg.replaceAll("%PLAYER%", player.getName())); + } + } + } + + @EventHandler + public void onInventoryClick(final InventoryClickEvent event) { + final Player player = (Player)event.getWhoClicked(); + if (this.isMod(player) && event.getClickedInventory() != null) { + if (event.getClickedInventory().equals(player.getOpenInventory().getBottomInventory())) { + event.setCancelled(true); + } + else if (this.config.getBoolean("Mod-Mode.Block-InventoryMove.Others-Inventory")) { + event.setCancelled(true); + } + } + } + @EventHandler + public void onBlockPlace(final FoodLevelChangeEvent event) { + final Player player = (Player) event.getEntity(); + if (this.isMod(player)) { + event.setFoodLevel(20); + } + } + @EventHandler + public void onBlockPlace(final BlockPlaceEvent event) { + final Player player = event.getPlayer(); + if (this.isMod(player) && !event.isCancelled() && this.config.getBoolean("Mod-Mode.Block-Place")) { + event.setCancelled(true); + } + } + + @EventHandler + public void onBlockBreak(final BlockBreakEvent event) { + final Player player = event.getPlayer(); + if (this.isMod(player) && !event.isCancelled() && this.config.getBoolean("Mod-Mode.Block-Break")) { + event.setCancelled(true); + } + } + + @EventHandler + public void onItemDrop(final PlayerDropItemEvent event) { + final Player player = event.getPlayer(); + if (this.isMod(player) && this.config.getBoolean("Mod-Mode.Block-ItemDrop")) { + event.setCancelled(true); + } + } + + @EventHandler + public void onItemDrop(final PlayerPickupItemEvent event) { + final Player player = event.getPlayer(); + if (this.isMod(player) && this.config.getBoolean("Mod-Mode.Block-PickUp")) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerMove(final PlayerMoveEvent event) { + final Player player = event.getPlayer(); + final Location to = event.getTo(); + final Location from = event.getFrom(); + if (this.manager.isFrozen(player) && (to.getBlockX() != from.getBlockX() || to.getBlockZ() != from.getBlockZ())) { + event.setTo(from); + } + } + + @EventHandler + public void onEntityDamage(final EntityDamageByEntityEvent event) { + if (event.isCancelled() || !(event.getEntity() instanceof Player)) { + return; + } + final Player damaged = (Player)event.getEntity(); + Entity eDamager = event.getDamager(); + if (eDamager instanceof Projectile) { + final ProjectileSource projectileSource = (ProjectileSource)((Projectile)eDamager).getShooter(); + if (projectileSource instanceof Player) { + eDamager = (Entity)projectileSource; + } + } + if (!(eDamager instanceof Player)) { + return; + } + final Player damager = (Player)eDamager; + if (damager == damaged) { + return; + } + if (this.manager.isFrozen(damager)) { + event.setCancelled(true); + damager.sendMessage(Utils.color("&cYou can't pvp whilst you're frozen !")); + return; + } + if (this.manager.isFrozen(damaged)) { + event.setCancelled(true); + damager.sendMessage(Utils.color("&cThis player is frozen !")); + } + } + + private boolean isMod(final Player player) { + return player.hasPermission("ModMode") && ModMode.getInstance().getModToggled().contains(player.getUniqueId()); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/modmode/listener/ScoreboardListener.java b/ViperCore/src/main/java/com/igodlik3/modmode/listener/ScoreboardListener.java new file mode 100644 index 0000000..0db86ac --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/modmode/listener/ScoreboardListener.java @@ -0,0 +1,48 @@ +package com.igodlik3.modmode.listener; + +import net.libhalt.bukkit.kaede.event.*; +import com.igodlik3.modmode.*; +import org.bukkit.entity.*; +import org.bukkit.event.*; +import com.igodlik3.modmode.event.*; +import org.bukkit.*; + +public class ScoreboardListener implements Listener +{ + private String[] placeholders; + + public ScoreboardListener() { + this.placeholders = new String[] { "%VANISH%", "%GAMEMODE%", "%ONLINE%" }; + } + + @EventHandler + public void onScoreboardUpdate(final ScoreboardTextAboutToUpdateEvent event) { + final Player player = event.getPlayer(); + String[] placeholders; + for (int length = (placeholders = this.placeholders).length, i = 0; i < length; ++i) { + final String placeholder = placeholders[i]; + if (event.getText() != null && event.getText().contains(placeholder)) { + if (ModMode.getInstance().getModToggled().contains(player.getUniqueId())) { + event.setText(this.convertPlaceholder(event.getText(), player)); + } + else { + event.setText((String)null); + } + } + } + } + + @SuppressWarnings("deprecation") + private String convertPlaceholder(String text, final Player player) { + if (text.contains("%VANISH%")) { + text = text.replaceAll("%VANISH%", VanishEvent.vanished.contains(player) ? "&aON" : "&cOFF"); + } + if (text.contains("GAMEMODE%")) { + text = text.replaceAll("%GAMEMODE%", (player.getGameMode() == GameMode.CREATIVE) ? "&aCreative" : "&cSurvival"); + } + if (text.contains("%ONLINE%")) { + text = text.replaceAll("%ONLINE%", "&a" + Bukkit.getOnlinePlayers().size() + "&7/&a" + Bukkit.getMaxPlayers()); + } + return text; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/modmode/listener/VanishListener.java b/ViperCore/src/main/java/com/igodlik3/modmode/listener/VanishListener.java new file mode 100644 index 0000000..992d9e5 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/modmode/listener/VanishListener.java @@ -0,0 +1,57 @@ +package com.igodlik3.modmode.listener; + +import org.bukkit.configuration.*; +import com.igodlik3.modmode.*; +import com.igodlik3.modmode.event.*; +import com.igodlik3.modmode.utils.*; +import org.bukkit.potion.*; +import org.bukkit.entity.*; +import org.bukkit.event.*; +import org.bukkit.*; +import org.bukkit.event.player.*; + +public class VanishListener implements Listener +{ + private Configuration config; + + public VanishListener() { + this.config = (Configuration)ModMode.getInstance().getConfig(); + } + + @EventHandler + public void onVanishEvent(final VanishEvent event) { + final Player player = event.getPlayer(); + final String e = this.config.getString("Messages.STATUT.enabled"); + final String d = this.config.getString("Messages.STATUT.disabled"); + if (event.isVanish()) { + player.sendMessage(Utils.color(this.config.getString("Messages.VANISH").replaceAll("%STATUT%", e))); + player.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 3)); + } + else { + player.removePotionEffect(PotionEffectType.NIGHT_VISION); + player.sendMessage(Utils.color(this.config.getString("Messages.VANISH").replaceAll("%STATUT%", d))); + } + } + + @EventHandler + public void onPlayerJoin(final PlayerJoinEvent event) { + /* + final Player player = event.getPlayer(); + Player[] onlinePlayers; + for (int length = (onlinePlayers = Bukkit.getOnlinePlayers().toArray(new Player[0])).length, i = 0; i < length; ++i) { + final Player pls = onlinePlayers[i]; + if (VanishEvent.vanished.contains(pls) && !player.hasPermission("ModMode.Vanish")) { + player.hidePlayer(pls); + } + } + */ + } + + @EventHandler + public void onPickUp(final PlayerPickupItemEvent event) { + final Player player = event.getPlayer(); + if (VanishEvent.vanished.contains(player)) { + event.setCancelled(true); + } + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/modmode/manager/FreezeManager.java b/ViperCore/src/main/java/com/igodlik3/modmode/manager/FreezeManager.java new file mode 100644 index 0000000..6dafc17 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/modmode/manager/FreezeManager.java @@ -0,0 +1,60 @@ +package com.igodlik3.modmode.manager; + +import org.bukkit.scheduler.*; +import org.bukkit.configuration.*; +import com.igodlik3.modmode.*; +import org.bukkit.entity.*; +import com.igodlik3.modmode.utils.*; +import org.bukkit.*; +import java.util.*; + +public class FreezeManager extends BukkitRunnable +{ + private Set frozenPlayers; + private Configuration config; + + public FreezeManager() { + this.frozenPlayers = new HashSet(); + this.config = (Configuration)ModMode.getInstance().getConfig(); + } + + public boolean isFrozen(final Player player) { + return this.frozenPlayers.contains(player.getUniqueId()); + } + + public String freezePlayer(final Player player) { + if (this.isFrozen(player)) { + this.getFrozenPlayers().remove(player.getUniqueId()); + return Utils.color(this.config.getString("Messages.UN-FROZEN").replaceAll("%PLAYER%", player.getName())); + } + this.getFrozenPlayers().add(player.getUniqueId()); + return Utils.color(this.config.getString("Messages.FROZEN").replaceAll("%PLAYER%", player.getName())); + } + + public void run() { + for (final UUID uuid : this.frozenPlayers) { + final Player player = Bukkit.getPlayer(uuid); + if (player != null) { + final String Line1 = Utils.color(this.config.getString("Messages.MOD-ITEMS.FREEZE.MESSAGE.1")); + final String Line2 = Utils.color(this.config.getString("Messages.MOD-ITEMS.FREEZE.MESSAGE.2")); + final String Line3 = Utils.color(this.config.getString("Messages.MOD-ITEMS.FREEZE.MESSAGE.3")); + final String Line4 = Utils.color(this.config.getString("Messages.MOD-ITEMS.FREEZE.MESSAGE.4")); + final String Line5 = Utils.color(this.config.getString("Messages.MOD-ITEMS.FREEZE.MESSAGE.5")); + player.sendMessage(ChatColor.WHITE + "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 " + Line1); + player.sendMessage(ChatColor.WHITE + "\u2588\u2588\u2588\u2588" + ChatColor.RED + "\u2588" + ChatColor.WHITE + "\u2588\u2588\u2588\u2588"); + player.sendMessage(ChatColor.WHITE + "\u2588\u2588\u2588" + ChatColor.RED + "\u2588" + ChatColor.GOLD + ChatColor.BLACK + "\u2588" + ChatColor.GOLD + ChatColor.RED + "\u2588" + ChatColor.WHITE + "\u2588\u2588\u2588 " + Line2); + player.sendMessage(ChatColor.WHITE + "\u2588\u2588" + ChatColor.RED + "\u2588" + ChatColor.GOLD + "\u2588" + ChatColor.BLACK + "\u2588" + ChatColor.GOLD + "\u2588" + ChatColor.RED + "\u2588" + ChatColor.WHITE + "\u2588\u2588 " + Line3); + player.sendMessage(ChatColor.WHITE + "\u2588\u2588" + ChatColor.RED + "\u2588" + ChatColor.GOLD + "\u2588" + ChatColor.BLACK + "\u2588" + ChatColor.GOLD + "\u2588" + ChatColor.RED + "\u2588" + ChatColor.WHITE + "\u2588\u2588 " + Line4); + player.sendMessage(ChatColor.WHITE + "\u2588\u2588" + ChatColor.RED + "\u2588" + ChatColor.GOLD + "\u2588" + ChatColor.BLACK + "\u2588" + ChatColor.GOLD + "\u2588" + ChatColor.RED + "\u2588" + ChatColor.WHITE + "\u2588\u2588 " + Line5); + player.sendMessage(ChatColor.WHITE + "\u2588" + ChatColor.RED + "\u2588" + ChatColor.GOLD + "\u2588\u2588\u2588" + ChatColor.BLACK + ChatColor.GOLD + "\u2588\u2588" + ChatColor.RED + "\u2588" + ChatColor.WHITE + "\u2588 "); + player.sendMessage(ChatColor.RED + "\u2588" + ChatColor.GOLD + "\u2588\u2588\u2588" + ChatColor.BLACK + "\u2588" + ChatColor.GOLD + "\u2588\u2588\u2588" + ChatColor.RED + "\u2588" + ChatColor.WHITE); + player.sendMessage(ChatColor.RED + "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588"); + player.sendMessage(ChatColor.WHITE + "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588"); + } + } + } + + public Set getFrozenPlayers() { + return this.frozenPlayers; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/modmode/utils/Utils.java b/ViperCore/src/main/java/com/igodlik3/modmode/utils/Utils.java new file mode 100644 index 0000000..192e80d --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/modmode/utils/Utils.java @@ -0,0 +1,26 @@ +package com.igodlik3.modmode.utils; + +import org.bukkit.*; + +public class Utils +{ + public static String color(final String stg) { + return ChatColor.translateAlternateColorCodes('&', stg); + } + + public static String stringifyLocation(final Location location) { + return "[" + location.getWorld().getName() + "," + location.getX() + "," + location.getY() + "," + location.getZ() + "]"; + } + + public static Location destringifyLocation(final String string) { + final String[] split = string.substring(1, string.length() - 2).split(","); + final World world = Bukkit.getWorld(split[0]); + if (world == null) { + return null; + } + final double x = Double.parseDouble(split[1]); + final double y = Double.parseDouble(split[2]); + final double z = Double.parseDouble(split[3]); + return new Location(world, x, y, z); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/stats/GUIListener.java b/ViperCore/src/main/java/com/igodlik3/stats/GUIListener.java new file mode 100644 index 0000000..28d3718 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/stats/GUIListener.java @@ -0,0 +1,16 @@ +package com.igodlik3.stats; + +import org.bukkit.event.inventory.*; +import org.bukkit.inventory.*; +import org.bukkit.event.*; + +public class GUIListener implements Listener +{ + @EventHandler + public void onInventoryClick(final InventoryClickEvent event) { + final Inventory inv = event.getInventory(); + if (inv != null && inv.getName() != null && inv.getName().contains("Stats")) { + event.setCancelled(true); + } + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/stats/Stats.java b/ViperCore/src/main/java/com/igodlik3/stats/Stats.java new file mode 100644 index 0000000..ef84be3 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/stats/Stats.java @@ -0,0 +1,40 @@ +package com.igodlik3.stats; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandExecutor; +import org.bukkit.event.Listener; +import org.bukkit.plugin.RegisteredServiceProvider; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Manager; +import net.milkbowl.vault.permission.Permission; + +public class Stats extends Manager +{ + private Permission perms; + private static Stats instance; + + public Stats(HCFactionPlugin plugin) { + super(plugin); + } + + public void init() { + (Stats.instance = this).setUpPermissions(); + this.getPlugin().getCommand("stats").setExecutor((CommandExecutor)new StatsCmd()); + Bukkit.getPluginManager().registerEvents((Listener)new GUIListener(), this.getPlugin()); + } + + private boolean setUpPermissions() { + final RegisteredServiceProvider rsp = this.getPlugin().getServer().getServicesManager().getRegistration(Permission.class); + this.perms = (Permission)rsp.getProvider(); + return this.perms != null; + } + + public Permission getPerms() { + return this.perms; + } + + public static Stats getInstance() { + return Stats.instance; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/stats/StatsCmd.java b/ViperCore/src/main/java/com/igodlik3/stats/StatsCmd.java new file mode 100644 index 0000000..de6cc03 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/stats/StatsCmd.java @@ -0,0 +1,74 @@ +package com.igodlik3.stats; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.Statistic; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; + +import com.igodlik3.ItemBuilder; + +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.faction.bean.FactionPlayer; + +public class StatsCmd implements CommandExecutor +{ + public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage("Only players !"); + return true; + } + final Player player = (Player)sender; + if (args.length == 0) { + this.openStatsInv(player, player); + } + else { + final Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + player.sendMessage(this.color("&cPlayer not found !")); + } + else { + this.openStatsInv(target, player); + } + } + return true; + } + + private double getKDR(final Player player, final int kill, final int mort) { + if (mort == 0 && kill == 0) { + return 0.0; + } + if (mort == 0) { + return kill; + } + return Math.round(kill / mort); + } + + private void openStatsInv(final Player player, final Player to) { + final Inventory inv = Bukkit.createInventory((InventoryHolder)null, 45, this.color("&6Stats of &c" + player.getName())); + final FactionPlayer fp = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + inv.setItem(0, new ItemBuilder(Material.DIAMOND_SWORD).unsafeStackSize(true).amount((fp.getKill()== 0) ? 1 : fp.getKill()).displayname("&6Kills&8: &c" +fp.getKill()).build()); + inv.setItem(1, new ItemBuilder(Material.SKULL_ITEM).unsafeStackSize(true).amount((player.getStatistic(Statistic.DEATHS) == 0) ? 1 : player.getStatistic(Statistic.DEATHS)).displayname("&6Deaths&8: &c" + player.getStatistic(Statistic.DEATHS)).build()); + inv.setItem(2, new ItemBuilder(Material.ANVIL).displayname("&6Ratio&8: &c" + this.getKDR(player, player.getStatistic(Statistic.PLAYER_KILLS), player.getStatistic(Statistic.DEATHS))).build()); + inv.setItem(9, new ItemBuilder(Material.BLAZE_POWDER).displayname("&4Faction&8: &c" + (fp.getFaction() != null ? fp.getFaction().getName() : "&cNone")).build()); + inv.setItem(18, new ItemBuilder(Material.DIAMOND_ORE).unsafeStackSize(true).amount(player.getStatistic(Statistic.MINE_BLOCK, Material.DIAMOND_ORE)).displayname("&6Ores&8: &b" + player.getStatistic(Statistic.MINE_BLOCK, Material.DIAMOND_ORE) + " diamonds(s)").build()); + inv.setItem(19, new ItemBuilder(Material.EMERALD_ORE).unsafeStackSize(true).amount(player.getStatistic(Statistic.MINE_BLOCK, Material.EMERALD_ORE)).displayname("&6Ores&8: &a" + player.getStatistic(Statistic.MINE_BLOCK, Material.EMERALD_ORE) + " emerald(s)").build()); + inv.setItem(20, new ItemBuilder(Material.GOLD_ORE).unsafeStackSize(true).amount(player.getStatistic(Statistic.MINE_BLOCK, Material.GOLD_ORE)).displayname("&6Ores&8: &e" + player.getStatistic(Statistic.MINE_BLOCK, Material.GOLD_ORE) + " gold(s)").build()); + inv.setItem(21, new ItemBuilder(Material.IRON_ORE).unsafeStackSize(true).amount(player.getStatistic(Statistic.MINE_BLOCK, Material.IRON_ORE)).displayname("&6Ores&8: &f" + player.getStatistic(Statistic.MINE_BLOCK, Material.IRON_ORE) + " iron(s)").build()); + inv.setItem(22, new ItemBuilder(Material.REDSTONE_ORE).unsafeStackSize(true).amount(player.getStatistic(Statistic.MINE_BLOCK, Material.REDSTONE_ORE)).displayname("&6Ores&8: &f" + player.getStatistic(Statistic.MINE_BLOCK, Material.REDSTONE_ORE) + " redstone(s)").build()); + inv.setItem(23, new ItemBuilder(Material.COAL_ORE).unsafeStackSize(true).amount(player.getStatistic(Statistic.MINE_BLOCK, Material.COAL_ORE)).displayname("&6Ores&8: &f" + player.getStatistic(Statistic.MINE_BLOCK, Material.COAL_ORE) + " coal(s)").build()); + inv.setItem(24, new ItemBuilder(Material.STONE).unsafeStackSize(true).amount(player.getStatistic(Statistic.MINE_BLOCK, Material.STONE)).displayname("&6Ores&8: &7" + player.getStatistic(Statistic.MINE_BLOCK, Material.STONE) + " stone(s)").build()); + inv.setItem(27, new ItemBuilder(Material.EMPTY_MAP).displayname("&6Money&8: &c" + fp.getMoney()).build()); + inv.setItem(28, new ItemBuilder(Material.DIAMOND).displayname("&6Rank&8: &f" + Stats.getInstance().getPerms().getPrimaryGroup(player)).build()); + to.openInventory(inv); + } + + private String color(final String stg) { + return ChatColor.translateAlternateColorCodes('&', stg); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/subclaims/FactionsUtils.java b/ViperCore/src/main/java/com/igodlik3/subclaims/FactionsUtils.java new file mode 100644 index 0000000..6d4517c --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/subclaims/FactionsUtils.java @@ -0,0 +1,37 @@ +package com.igodlik3.subclaims; + +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.claim.Position2D; +import net.syuu.popura.faction.bean.ClaimedRegion; +import net.syuu.popura.faction.bean.Faction; +import net.syuu.popura.faction.bean.FactionPlayer; +import org.bukkit.entity.*; +import org.bukkit.*; +import org.bukkit.event.*; +import java.util.*; + +public class FactionsUtils +{ + public static boolean isInOwnTerritory(final Player player) { + final Location loc = player.getLocation(); + return hasFaction(player) && getFactionAt(loc) != null && getFactionAt(loc) == getFaction(player); + } + + public static boolean hasFaction(final Player player) { + final FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + + return factionPlayer.getFaction() != null; + } + + + public static Faction getFactionAt(final Location location) { + ClaimedRegion flocation = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getClaimedRegionAt(new Position2D(location.getWorld().getName() , location.getBlockX() , location.getBlockZ())); + return flocation == null ? null : flocation.getOwner(); + } + + public static Faction getFaction(final Player player) { + final FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + return factionPlayer.getFaction(); + } + +} diff --git a/ViperCore/src/main/java/com/igodlik3/subclaims/SubclaimCmd.java b/ViperCore/src/main/java/com/igodlik3/subclaims/SubclaimCmd.java new file mode 100644 index 0000000..4d4318a --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/subclaims/SubclaimCmd.java @@ -0,0 +1,38 @@ +package com.igodlik3.subclaims; + +import org.bukkit.configuration.*; +import org.bukkit.command.*; +import org.bukkit.entity.*; +import java.util.*; +import org.bukkit.*; + +public class SubclaimCmd implements CommandExecutor +{ + private Configuration lang; + + public SubclaimCmd() { + this.lang = Subclaims.getInstance().getConfig(); + } + + public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) { + if (!(sender instanceof Player)) { + return true; + } + final Player player = (Player)sender; + if (args.length == 0) { + for (final String stg : this.lang.getStringList("Messages.Subclaim.INFO")) { + player.sendMessage(this.color(stg)); + } + } + else if (args[0].equalsIgnoreCase("credits")) { + sender.sendMessage(this.color("&9Developed by &eiGoDLiK3")); + sender.sendMessage(this.color("&9Founded by &6Salvific")); + sender.sendMessage(this.color("&aWebsite&7: &cMC-Outlet.com")); + } + return true; + } + + private String color(final String stg) { + return ChatColor.translateAlternateColorCodes('&', stg); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/subclaims/SubclaimListener.java b/ViperCore/src/main/java/com/igodlik3/subclaims/SubclaimListener.java new file mode 100644 index 0000000..1c11d7b --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/subclaims/SubclaimListener.java @@ -0,0 +1,433 @@ +package com.igodlik3.subclaims; + +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.faction.FactionRole; +import net.syuu.popura.faction.bean.FactionPlayer; +import org.bukkit.block.Chest; +import org.bukkit.block.Sign; +import org.bukkit.configuration.*; +import org.bukkit.entity.*; +import java.util.*; +import org.bukkit.event.*; +import org.bukkit.event.player.*; +import org.bukkit.event.block.*; +import org.bukkit.block.*; +import org.bukkit.event.inventory.*; +import org.bukkit.inventory.*; +import org.bukkit.material.*; +import org.bukkit.*; + +import javax.management.relation.Role; + +public class SubclaimListener implements Listener +{ + private BlockFace[] FACES; + private Configuration lang; + private String title; + + public SubclaimListener() { + this.FACES = new BlockFace[] { BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP }; + this.lang = Subclaims.getInstance().getConfig(); + this.title = this.color(this.lang.getString("Title")); + } + + @EventHandler + public void onSignChange(final SignChangeEvent event) { + final Player player = event.getPlayer(); + final Block block = this.getAttachedBlock(event.getBlock()); + if (this.isBlockSubclaimable(block)) { + for (final String stg : this.lang.getStringList("Messages.Subclaim.KEY-WORDS")) { + if (event.getLine(0).equalsIgnoreCase(stg)) { + if (FactionsUtils.getFactionAt(block.getLocation()) == null || !FactionsUtils.isInOwnTerritory(player)) { + event.setCancelled(true); + this.removeSubclaim(event.getBlock(), "NO-TERRITORY", player); + } + else if (this.isSubclaim(block)) { + event.setCancelled(true); + this.removeSubclaim(event.getBlock(), "ALREADY-SUBCLAIM", player); + } + else { + final FactionPlayer fplayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + if (event.isCancelled()) { + continue; + } + if (event.getLine(1).equalsIgnoreCase("Admin") || event.getLine(1).equalsIgnoreCase("Leader")) { + if (!this.isAllowed(fplayer)) { + event.setCancelled(true); + this.removeSubclaim(event.getBlock(), "LEADER", player); + } + else { + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.CREATED-SUBCLAIM.LEADER"))); + event.setLine(0, this.title); + event.setLine(1, "Leader"); + } + } + else if (event.getLine(1).equalsIgnoreCase("Officer") || event.getLine(1).equalsIgnoreCase("Mod")) { + if (fplayer.getRole() != FactionRole.OFFICER && fplayer.getRole() != FactionRole.LEADER && fplayer.getRole() != FactionRole.COLEADER) { + event.setCancelled(true); + this.removeSubclaim(event.getBlock(), "OFFICIER", player); + } + else { + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.CREATED-SUBCLAIM.OFFICIER"))); + event.setLine(0, this.title); + event.setLine(1, "Officer"); + } + } + else { + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.CREATED-SUBCLAIM.OWN"))); + event.setLine(0, this.title); + boolean anyNames = false; + for (int i = 1; i < event.getLines().length; ++i) { + final String s = event.getLines()[i]; + if (s != null && !s.isEmpty()) { + event.setLine(i, s); + if (!anyNames) { + anyNames = true; + } + } + } + if (anyNames) { + continue; + } + event.setLine(1, player.getName()); + } + } + } + } + } + } + @EventHandler + public void onBlockBreak(final BlockPlaceEvent event) { + if(event.getBlock().getType() == Material.HOPPER) { + for (BlockFace blockFace : BlockFace.values()) { + Block block = event.getBlock().getRelative(blockFace); + if ( isSubclaim(block)) { + event.getPlayer().sendMessage(ChatColor.RED + "Can not place hoppers here"); + return; + } + } + } + } + @EventHandler + public void onBlockBreak(final BlockBreakEvent event) { + final Player player = event.getPlayer(); + final Block block = event.getBlock(); + final FactionPlayer fplayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + if (player.hasPermission("SubclaimBypass")) { + return; + } + if (this.isBlockSubclaimable(block)) { + if (this.isSubclaim(block)) { + if (FactionsUtils.getFactionAt(block.getLocation()).isRaidable()) { + event.setCancelled(false); + } + else if (FactionsUtils.getFactionAt(block.getLocation()) != FactionsUtils.getFaction(player)) { + event.setCancelled(true); + } + else if (this.getSign(block).getLine(1).equalsIgnoreCase("Leader")) { + if (fplayer.getRole() != FactionRole.LEADER && fplayer.getRole() != FactionRole.LEADER && fplayer.getRole() != FactionRole.COLEADER && !this.isAllowed(fplayer)) { + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.DESTROY"))); + event.setCancelled(true); + } + else { + event.setCancelled(false); + } + } + else if (this.getSign(block).getLine(1).equalsIgnoreCase("Officer")) { + if (fplayer.getRole() != FactionRole.OFFICER && fplayer.getRole() != FactionRole.LEADER && fplayer.getRole() != FactionRole.COLEADER && !this.isAllowed(fplayer)) { + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.DESTROY"))); + event.setCancelled(true); + } + else { + event.setCancelled(false); + } + } + else if (!this.getSign(block).getLine(1).equalsIgnoreCase(player.getName()) && fplayer.getRole() != FactionRole.LEADER && fplayer.getRole() != FactionRole.COLEADER) { + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.DESTROY"))); + event.setCancelled(true); + } + else { + event.setCancelled(false); + } + } + else if (this.isDoubleChestSubclaim(block) != null) { + final Block doublechest = this.isDoubleChestSubclaim(block); + if (FactionsUtils.getFactionAt(doublechest.getLocation()).isRaidable()) { + event.setCancelled(false); + } + else if (FactionsUtils.getFactionAt(doublechest.getLocation()) != FactionsUtils.getFaction(player)) { + event.setCancelled(true); + } + else if (this.getSign(doublechest).getLine(1).equalsIgnoreCase("Leader")) { + if (fplayer.getRole() != FactionRole.LEADER && fplayer.getRole() != FactionRole.COLEADER && !this.isAllowed(fplayer)) { + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.DESTROY"))); + event.setCancelled(true); + } + else { + event.setCancelled(false); + } + } + else if (this.getSign(doublechest).getLine(1).equalsIgnoreCase("Officer")) { + if (fplayer.getRole() != FactionRole.LEADER && fplayer.getRole() != FactionRole.OFFICER && fplayer.getRole() != FactionRole.COLEADER && !this.isAllowed(fplayer)) { + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.DESTROY"))); + event.setCancelled(true); + } + else { + event.setCancelled(false); + } + } + else { + boolean owner = false; + for (int i = 1; i < this.getSign(doublechest).getLines().length; ++i) { + final String name = this.getSign(doublechest).getLines()[i]; + if (name.equalsIgnoreCase(player.getName()) && !owner) { + owner = true; + } + } + if (!owner && !this.isAllowed(fplayer)) { + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.DESTROY"))); + event.setCancelled(true); + } + } + } + } + } + + @EventHandler + public void onSignBreakEvent(final BlockBreakEvent event) { + final Player player = event.getPlayer(); + final Block block = event.getBlock(); + final FactionPlayer fplayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + if (player.hasPermission("SubclaimBypass")) { + return; + } + if (block.getType() == Material.SIGN || (block.getType() == Material.WALL_SIGN && block.getState() instanceof Sign)) { + final Sign sign = (Sign)block.getState(); + if (sign.getLine(0).equalsIgnoreCase(this.color(this.title))) { + if (FactionsUtils.getFactionAt(sign.getLocation()).isRaidable()) { + event.setCancelled(false); + } + else if (!FactionsUtils.getFaction(player).equals(FactionsUtils.getFactionAt(sign.getLocation()))) { + event.setCancelled(true); + } + else if (sign.getLine(1).equalsIgnoreCase("Leader")) { + if (fplayer.getRole() != FactionRole.LEADER && fplayer.getRole() != FactionRole.COLEADER && !this.isAllowed(fplayer)) { + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.DESTROY"))); + event.setCancelled(true); + } + else { + event.setCancelled(false); + } + } + else if (sign.getLine(1).equalsIgnoreCase("Officer")) { + if (fplayer.getRole() != FactionRole.OFFICER && fplayer.getRole() != FactionRole.LEADER && fplayer.getRole() != FactionRole.COLEADER && this.isAllowed(fplayer)) { + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.DESTROY"))); + event.setCancelled(true); + } + else { + event.setCancelled(false); + } + } + else { + boolean owner = false; + for (int i = 1; i < sign.getLines().length; ++i) { + final String name = sign.getLines()[i]; + if (name.equalsIgnoreCase(player.getName()) && !owner) { + owner = true; + } + } + if (!owner && !this.isAllowed(fplayer)) { + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.DESTROY"))); + event.setCancelled(true); + } + } + } + } + } + + @EventHandler + public void onInteract(final PlayerInteractEvent event) { + final Player player = event.getPlayer(); + final Block block = event.getClickedBlock(); + final FactionPlayer fplayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + if (player.hasPermission("SubclaimBypass")) { + return; + } + if (event.getAction() == Action.RIGHT_CLICK_BLOCK && this.isBlockSubclaimable(block)) { + if (this.isSubclaim(block) && getSign(block) != null) { + if (FactionsUtils.getFactionAt(block.getLocation()) == null) { + this.getSign(block).getBlock().breakNaturally(); + } + else if (FactionsUtils.getFactionAt(block.getLocation()).isRaidable()) { + event.setCancelled(false); + } + else if (FactionsUtils.getFactionAt(block.getLocation()) != FactionsUtils.getFaction(player)) { + event.setCancelled(true); + } + else if (this.getSign(block).getLine(1).equalsIgnoreCase("Leader")) { + if (fplayer.getRole() != FactionRole.LEADER && fplayer.getRole() != FactionRole.COLEADER&& !this.isAllowed(fplayer)) { + event.setCancelled(true); + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.OPEN"))); + } + else { + event.setCancelled(false); + } + } + else if (this.getSign(block).getLine(1).equalsIgnoreCase("Officer")) { + if (fplayer.getRole() != FactionRole.OFFICER && fplayer.getRole() != FactionRole.LEADER && fplayer.getRole() != FactionRole.COLEADER && !this.isAllowed(fplayer)) { + event.setCancelled(true); + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.OPEN"))); + } + else { + event.setCancelled(false); + } + } + else { + boolean owner = false; + for (int i = 1; i < this.getSign(block).getLines().length; ++i) { + final String name = this.getSign(block).getLines()[i]; + if (name.equalsIgnoreCase(player.getName()) && !owner) { + owner = true; + } + } + if (!owner && !this.isAllowed(fplayer)) { + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.OPEN"))); + event.setCancelled(true); + } + } + } + else if (this.isDoubleChestSubclaim(block) != null && getSign(block) != null) { + final Block doublechest = this.isDoubleChestSubclaim(block); + if (FactionsUtils.getFactionAt(doublechest.getLocation()) == null) { + this.getSign(doublechest).getBlock().breakNaturally(); + } + else if (FactionsUtils.getFactionAt(doublechest.getLocation()).isRaidable()) { + event.setCancelled(false); + } + else if (FactionsUtils.getFactionAt(doublechest.getLocation()) != FactionsUtils.getFaction(player)) { + event.setCancelled(true); + } + else if (this.getSign(doublechest).getLine(1).equalsIgnoreCase("Leader")) { + if (fplayer.getRole() != FactionRole.COLEADER && fplayer.getRole() != FactionRole.LEADER && !this.isAllowed(fplayer)) { + event.setCancelled(true); + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.OPEN"))); + } + else { + event.setCancelled(false); + } + } + else if (this.getSign(doublechest).getLine(1).equalsIgnoreCase("Officer")) { + if (fplayer.getRole() != FactionRole.OFFICER && fplayer.getRole() != FactionRole.LEADER && fplayer.getRole() != FactionRole.COLEADER && !this.isAllowed(fplayer)) { + event.setCancelled(true); + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.OPEN"))); + } + else { + event.setCancelled(false); + } + } + else { + boolean owner2 = false; + for (int j = 1; j < this.getSign(doublechest).getLines().length; ++j) { + final String name2 = this.getSign(doublechest).getLines()[j]; + if (name2.equalsIgnoreCase(player.getName()) && !owner2) { + owner2 = true; + } + } + if (!owner2 && !this.isAllowed(fplayer)) { + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.OPEN"))); + event.setCancelled(true); + } + } + } + } + } + + private boolean isAllowed(final FactionPlayer fplayer) { + return (this.lang.getBoolean("FLeader-Bypass") && fplayer.getRole() == FactionRole.LEADER) || (this.lang.getBoolean("FLeader-Bypass") && fplayer.getRole() == FactionRole.COLEADER) || (this.lang.getBoolean("FMod-Bypass") && fplayer.getRole() == FactionRole.OFFICER); + } + + + private boolean isSubclaim(final Block block) { + for (int i = 0; i < this.FACES.length; ++i) { + final BlockFace blockFaces = this.FACES[i]; + if (block.getRelative(blockFaces).getType() == Material.WALL_SIGN && block.getRelative(blockFaces).getState() instanceof Sign) { + final Sign sign = (Sign)block.getRelative(blockFaces).getState(); + if (sign.getLine(0).equalsIgnoreCase(this.title)) { + return true; + } + } + } + return false; + } + + private Block isDoubleChestSubclaim(final Block block) { + if (this.isBlockSubclaimable(block)) { + for (int i = 0; i < this.FACES.length; ++i) { + final BlockFace blockFaces = this.FACES[i]; + if (this.isBlockSubclaimable(block.getRelative(blockFaces))) { + final Block block2 = block.getRelative(blockFaces); + if (this.isSubclaim(block2)) { + return block2; + } + } + } + } + return null; + } + + private Sign getSign(final Block block) { + if(block.getState() instanceof Chest){ + Chest chest = (Chest) block.getState(); + InventoryHolder ih = chest.getInventory().getHolder(); + if (ih instanceof DoubleChest){ + DoubleChest doubleChest = (DoubleChest) ih; + Chest left = (Chest) doubleChest.getLeftSide(); + Chest right = (Chest) doubleChest.getRightSide(); + Sign sign = getSign0(left.getBlock()); + if(sign == null){ + sign = getSign0(right.getBlock());; + } + return sign; + }else{ + return getSign0(block); + } + }else{ + return getSign0(block); + } + } + + private Sign getSign0(final Block block) { + for (int i = 0; i < this.FACES.length; ++i) { + final BlockFace blockFaces = this.FACES[i]; + if (block.getRelative(blockFaces).getType() == Material.WALL_SIGN && block.getRelative(blockFaces).getState() instanceof Sign) { + final Sign sign = (Sign)block.getRelative(blockFaces).getState(); + if(sign.getBlock().getRelative(((org.bukkit.material.Sign)sign.getData()).getAttachedFace()).equals(block)) { + return sign; + } + } + } + return null; + } + + private void removeSubclaim(final Block block, final String path, final Player player) { + player.sendMessage(this.color(this.lang.getString("Messages.Subclaim.INVALID-SUBCLAIM." + path))); + block.breakNaturally(); + } + + private boolean isBlockSubclaimable(final Block block) { + return block.getType() == Material.CHEST || block.getType() == Material.TRAPPED_CHEST; + } + + private Block getAttachedBlock(final Block block) { + final MaterialData matData = block.getState().getData(); + BlockFace face = BlockFace.DOWN; + if (matData instanceof Attachable) { + face = ((Attachable)matData).getAttachedFace(); + } + return block.getRelative(face); + } + + private String color(final String stg) { + return ChatColor.translateAlternateColorCodes('&', stg); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/subclaims/Subclaims.java b/ViperCore/src/main/java/com/igodlik3/subclaims/Subclaims.java new file mode 100644 index 0000000..b13d381 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/subclaims/Subclaims.java @@ -0,0 +1,36 @@ +package com.igodlik3.subclaims; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import org.bukkit.configuration.Configuration; +import org.bukkit.plugin.java.*; +import org.bukkit.*; +import org.bukkit.event.*; +import org.bukkit.plugin.*; +import org.bukkit.command.*; + +public class Subclaims extends Manager +{ + private static Subclaims instance; + + public Subclaims(HCFactionPlugin plugin) { + super(plugin); + } + private ConfigurationWrapper config; + + public Configuration getConfig(){ + return config.getConfig(); + } + public void init() { + config = new ConfigurationWrapper("subclaim.yml", this.getPlugin()); + config.saveDefault(); + Subclaims.instance = this; + Bukkit.getPluginManager().registerEvents((Listener)new SubclaimListener(), this.getPlugin()); + registerCommand("subclaim" , new SubclaimCmd()); + } + + public static Subclaims getInstance() { + return Subclaims.instance; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/viperfix/ViperFix.java b/ViperCore/src/main/java/com/igodlik3/viperfix/ViperFix.java new file mode 100644 index 0000000..7fb9780 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/viperfix/ViperFix.java @@ -0,0 +1,58 @@ +package com.igodlik3.viperfix; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Manager; +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.claim.Position2D; +import net.syuu.popura.faction.bean.ClaimedRegion; +import net.syuu.popura.faction.bean.Faction; +import net.syuu.popura.faction.bean.FactionPlayer; +import org.bukkit.plugin.java.*; +import org.bukkit.plugin.*; +import org.bukkit.event.entity.*; +import org.bukkit.entity.*; +import org.bukkit.event.*; +import org.bukkit.event.player.*; +import org.bukkit.event.block.*; +import org.bukkit.*; + +public class ViperFix extends Manager implements Listener +{ + public ViperFix(HCFactionPlugin plugin) { + super(plugin); + } + + public void init() { + this.getPlugin().getServer().getPluginManager().registerEvents((Listener) this, getPlugin()); + } + + @EventHandler + public void onEntityDamageEvent(final EntityDamageEvent event) { + final Entity entity = event.getEntity(); + if (event.getCause() == EntityDamageEvent.DamageCause.SUFFOCATION && entity instanceof Player) { + final Player player = (Player)entity; + final Location loc = player.getLocation(); + player.teleport(loc); + } + } + + @EventHandler + public void onVehiclePlace(final PlayerInteractEvent event) { + final Player player = event.getPlayer(); + final FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + if (event.getAction() == Action.RIGHT_CLICK_BLOCK && player.getItemInHand() != null && player.getItemInHand().getType() == Material.MINECART) { + final Location loc = event.getClickedBlock().getLocation(); + final ClaimedRegion flo = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getClaimedRegionAt(new Position2D(loc.getWorld().getName() , loc.getBlockX() , loc.getBlockZ())); + if (flo != null) { + final Faction faction = flo.getOwner(); + if (factionPlayer.getFaction() == null || factionPlayer.getFaction() != faction) { + player.sendMessage(ChatColor.RED + "You can only place minecart on your territory !"); + } + } + else { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + "You can only place minecart on your territory !"); + } + } + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/vipermisc/Misc.java b/ViperCore/src/main/java/com/igodlik3/vipermisc/Misc.java new file mode 100644 index 0000000..3900f12 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/vipermisc/Misc.java @@ -0,0 +1,53 @@ +package com.igodlik3.vipermisc; + +import com.igodlik3.vipermisc.listeners.ScoreboardListener; +import com.igodlik3.vipermisc.sotw.SOTWCmd; +import com.igodlik3.vipermisc.sotw.SOTWListener; +import com.igodlik3.vipermisc.sotw.SOTWManager; +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import org.bukkit.configuration.Configuration; +import org.bukkit.event.Listener; +import org.bukkit.plugin.Plugin; + +/** + * Created by libhalt on 2016/12/06. + */ +public class Misc extends Manager{ + public static Misc INSTANCE; + private HCFactionPlugin hcfStuff; + + public static Misc getInstance(){ + return INSTANCE; + } + public Misc(HCFactionPlugin plugin) { + super(plugin); + INSTANCE = this; + } + + private ConfigurationWrapper config; + private SOTWManager sotwManager; + public Configuration getConfig(){ + return config.getConfig(); + } + public void init() { + hcfStuff = HCFactionPlugin.getInstance(); + config = new ConfigurationWrapper("viper-misc.yml", this.getPlugin()); + config.saveDefault(); + sotwManager = new SOTWManager(); + getPlugin().getCommand("sotw").setExecutor(new SOTWCmd()); + + + getPlugin().getServer().getPluginManager().registerEvents((Listener) new ScoreboardListener(), getPlugin()); + getPlugin().getServer().getPluginManager().registerEvents((Listener)new SOTWListener(), getPlugin()); + } + + public SOTWManager getSotwManager() { + return sotwManager; + } + + public HCFactionPlugin getHcfStuff() { + return hcfStuff; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/vipermisc/Timer.java b/ViperCore/src/main/java/com/igodlik3/vipermisc/Timer.java new file mode 100644 index 0000000..e120485 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/vipermisc/Timer.java @@ -0,0 +1,14 @@ +package com.igodlik3.vipermisc; + +public interface Timer +{ + boolean isActive(); + + long getLeftTime(); + + long getTimerEnd(); + + void setTimerEnd(final long p0); + + String toString(); +} diff --git a/ViperCore/src/main/java/com/igodlik3/vipermisc/listeners/ScoreboardListener.java b/ViperCore/src/main/java/com/igodlik3/vipermisc/listeners/ScoreboardListener.java new file mode 100644 index 0000000..f3adb44 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/vipermisc/listeners/ScoreboardListener.java @@ -0,0 +1,51 @@ +package com.igodlik3.vipermisc.listeners; + +import com.igodlik3.vipermisc.*; +import com.igodlik3.vipermisc.sotw.*; +import net.libhalt.bukkit.kaede.event.*; +import org.bukkit.entity.*; +import org.bukkit.event.*; +import net.libhalt.bukkit.kaede.manager.*; +import net.libhalt.bukkit.kaede.*; + +public class ScoreboardListener implements Listener +{ + private Misc misc; + private final String DECO_LINE; + private SOTWManager sotwManager; + + public ScoreboardListener() { + this.misc = Misc.getInstance(); + this.DECO_LINE = Misc.getInstance().getConfig().getString("scoreboard.deco-line"); + this.sotwManager = Misc.getInstance().getSotwManager(); + } + + @EventHandler + public void onScoreboardUpdate(final ScoreboardTextAboutToUpdateEvent event) { + final Player player = event.getPlayer(); + if (event.getText() != null) { + if (event.getText().contains("%deco_line%")) { + if (this.shouldDisplayLine(player)) { + event.setText(this.DECO_LINE); + } + else { + event.setText((String)null); + } + } + else if (event.getText().contains("%sotw%")) { + if (this.sotwManager.isSOTWActive()) { + String text2 = event.getText(); + text2 = text2.replace("%sotw%", this.sotwManager.getTimer().toString()); + event.setText(text2); + } + else { + event.setText((String)null); + } + } + } + } + + private boolean shouldDisplayLine(final Player player) { + return true; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/vipermisc/sotw/SOTWCmd.java b/ViperCore/src/main/java/com/igodlik3/vipermisc/sotw/SOTWCmd.java new file mode 100644 index 0000000..408edeb --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/vipermisc/sotw/SOTWCmd.java @@ -0,0 +1,51 @@ +package com.igodlik3.vipermisc.sotw; + +import com.igodlik3.vipermisc.*; +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import org.bukkit.command.*; +import com.igodlik3.modmode.utils.*; +import org.bukkit.*; + +public class SOTWCmd implements CommandExecutor +{ + private SOTWManager sotwManager; + + public SOTWCmd() { + this.sotwManager = Misc.getInstance().getSotwManager(); + } + + public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) { + if (!sender.hasPermission("Viper.SOTW")) { + return true; + } + if (args.length == 0) { + sender.sendMessage(Utils.color("&e/sotw start &7- &6Start the SOTW")); + sender.sendMessage(Utils.color("&e/sotw stop &7- &6Stop the SOTW")); + } + else if (args[0].equalsIgnoreCase("start")) { + if (this.sotwManager.isSOTWActive()) { + String active = HCFactionPlugin.getInstance().messages.getString("sotw-active").replaceAll("&", "§"); + sender.sendMessage(active); + return true; + } + if(args.length >= 2) { + this.sotwManager.activeSOTW(Integer.valueOf(args[1])); + + }else{ + this.sotwManager.activeSOTW(); + } + } + else if (args[0].equalsIgnoreCase("stop")) { + if (!this.sotwManager.isSOTWActive()) { + String inactive = HCFactionPlugin.getInstance().messages.getString("sotw-inactive").replaceAll("&", "§"); + sender.sendMessage(inactive); + return true; + } + + String stopped = HCFactionPlugin.getInstance().messages.getString("sotw-stopped").replaceAll("&", "§"); + this.sotwManager.getTimer().setTimerEnd(0L); + Bukkit.broadcastMessage(stopped); + } + return true; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/vipermisc/sotw/SOTWListener.java b/ViperCore/src/main/java/com/igodlik3/vipermisc/sotw/SOTWListener.java new file mode 100644 index 0000000..31e7700 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/vipermisc/sotw/SOTWListener.java @@ -0,0 +1,55 @@ +package com.igodlik3.vipermisc.sotw; + +import com.igodlik3.vipermisc.*; +import org.bukkit.entity.*; +import net.libhalt.bukkit.kaede.*; +import org.bukkit.event.*; +import org.bukkit.event.player.*; +import org.bukkit.event.entity.*; +import org.bukkit.scheduler.BukkitRunnable; + +public class SOTWListener implements Listener +{ + private Misc misc; + private SOTWManager sotwManager; + + public SOTWListener() { + this.misc = Misc.getInstance(); + this.sotwManager = this.misc.getSotwManager(); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerJoin(final PlayerJoinEvent event) { + if (!this.sotwManager.isSOTWActive()) { + return; + } + final Player player = event.getPlayer(); + final PlayerData data = misc.getHcfStuff().getPlayerDataManager().getPlayerData(player); + if (data != null && data.getPvpTime() > 0) { + data.setPvpTime(0); + } + + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerRespawn(final PlayerRespawnEvent event) { + if (!this.sotwManager.isSOTWActive()) { + return; + } + final Player player = event.getPlayer(); + final PlayerData data = this.misc.getHcfStuff().getPlayerDataManager().getPlayerData(player); + if (data.getPvpTime() > 0) { + data.setPvpTime(0); + } + } + + @EventHandler + public void onEntityDamage(final EntityDamageEvent event) { + if (event.isCancelled() || !(event.getEntity() instanceof Player) || !this.sotwManager.isSOTWActive()) { + return; + } + if (event.getCause() != EntityDamageEvent.DamageCause.VOID) { + event.setCancelled(true); + } + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/vipermisc/sotw/SOTWManager.java b/ViperCore/src/main/java/com/igodlik3/vipermisc/sotw/SOTWManager.java new file mode 100644 index 0000000..9b86b30 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/vipermisc/sotw/SOTWManager.java @@ -0,0 +1,42 @@ +package com.igodlik3.vipermisc.sotw; + +import org.bukkit.*; +import com.igodlik3.vipermisc.*; +import com.igodlik3.vipermisc.utils.*; +import org.bukkit.entity.*; +import net.libhalt.bukkit.kaede.*; + +public class SOTWManager +{ + private SOTWTimer timer; + private HCFactionPlugin core; + + public SOTWManager() { + this.timer = new SOTWTimer(); + this.core = HCFactionPlugin.getInstance(); + } + + public boolean isSOTWActive() { + return this.timer.isActive(); + } + + public void activeSOTW() { + activeSOTW(Misc.getInstance().getConfig().getInt("sotw-defaultTime")); + } + public void activeSOTW(int value) { + for (Player player : Bukkit.getOnlinePlayers()){ + final PlayerData data = this.core.getPlayerDataManager().getPlayerData(player); + if (data.getPvpTime() > 0) { + data.setPvpTime(0); + } + } + this.timer.setTimerEnd(System.currentTimeMillis() + 1000 * value); + + String started = HCFactionPlugin.getInstance().messages.getString("sotw-started").replaceAll("&", "§"); + Bukkit.broadcastMessage(started); + } + + public SOTWTimer getTimer() { + return this.timer; + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/vipermisc/sotw/SOTWTimer.java b/ViperCore/src/main/java/com/igodlik3/vipermisc/sotw/SOTWTimer.java new file mode 100644 index 0000000..cb1df37 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/vipermisc/sotw/SOTWTimer.java @@ -0,0 +1,38 @@ +package com.igodlik3.vipermisc.sotw; + +import com.igodlik3.vipermisc.*; + +public class SOTWTimer implements Timer +{ + private long timerEnd; + + @Override + public boolean isActive() { + return this.getTimerEnd() > System.currentTimeMillis(); + } + + @Override + public long getLeftTime() { + return this.getTimerEnd() - System.currentTimeMillis(); + } + + @Override + public long getTimerEnd() { + return this.timerEnd; + } + + @Override + public void setTimerEnd(final long timerEnd) { + this.timerEnd = timerEnd; + } + + @Override + public String toString() { + final long left = this.getLeftTime(); + final long totalSecs = left / 1000L; + if (totalSecs >= 3600L) { + return String.format("%02d:%02d:%02d", totalSecs / 3600L, totalSecs % 3600L / 60L, totalSecs % 60L); + } + return String.format("%02d:%02d", totalSecs / 60L, totalSecs % 60L); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/vipermisc/utils/Utils.java b/ViperCore/src/main/java/com/igodlik3/vipermisc/utils/Utils.java new file mode 100644 index 0000000..fbd9111 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/vipermisc/utils/Utils.java @@ -0,0 +1,10 @@ +package com.igodlik3.vipermisc.utils; + +import org.bukkit.*; + +public class Utils +{ + public static String color(final String message) { + return ChatColor.translateAlternateColorCodes('&', message); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/viperutils/BoostXPListener.java b/ViperCore/src/main/java/com/igodlik3/viperutils/BoostXPListener.java new file mode 100644 index 0000000..0296b9c --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/viperutils/BoostXPListener.java @@ -0,0 +1,31 @@ +package com.igodlik3.viperutils; + +import org.bukkit.configuration.*; +import org.bukkit.event.entity.*; +import org.bukkit.entity.*; +import org.bukkit.*; +import org.bukkit.enchantments.*; +import org.bukkit.inventory.*; +import org.bukkit.event.*; + +public class BoostXPListener implements Listener +{ + private Configuration config; + + public BoostXPListener() { + this.config = (Configuration)ViperUtils.getInstance().getConfig(); + } + + @EventHandler + public void onEntityDeath(final EntityDeathEvent event) { + if (event.getEntity().getKiller() != null && event.getEntity().getKiller() instanceof Player) { + final Player player = event.getEntity().getKiller(); + if (player.getItemInHand() != null && player.getItemInHand().getType() != Material.AIR) { + final ItemStack item = player.getItemInHand(); + if (item.containsEnchantment(Enchantment.LOOT_BONUS_MOBS)) { + event.setDroppedExp(event.getDroppedExp() * (item.getEnchantmentLevel(Enchantment.LOOT_BONUS_MOBS) + this.config.getInt("XPBonus-Multiplier"))); + } + } + } + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/viperutils/CmdCredits.java b/ViperCore/src/main/java/com/igodlik3/viperutils/CmdCredits.java new file mode 100644 index 0000000..defab45 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/viperutils/CmdCredits.java @@ -0,0 +1,20 @@ +package com.igodlik3.viperutils; + +import org.bukkit.command.*; +import org.bukkit.*; + +public class CmdCredits implements CommandExecutor +{ + public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) { + if (args.length > 0 && args[0].equalsIgnoreCase("credits")) { + sender.sendMessage(this.color("&9Developed by &eiGoDLiK3")); + sender.sendMessage(this.color("&9Founded by &6Salvific")); + sender.sendMessage(this.color("&aWebsite&7: &cMC-Outlet.com")); + } + return true; + } + + private String color(final String stg) { + return ChatColor.translateAlternateColorCodes('&', stg); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/viperutils/CmdMuteFaction.java b/ViperCore/src/main/java/com/igodlik3/viperutils/CmdMuteFaction.java new file mode 100644 index 0000000..afd5a85 --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/viperutils/CmdMuteFaction.java @@ -0,0 +1,46 @@ +package com.igodlik3.viperutils; + +import net.syuu.common.command.*; +import net.syuu.common.command.condition.PermissionCondition; +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.faction.FactionDataManager; +import net.syuu.popura.faction.bean.Faction; +import org.bukkit.configuration.*; +import org.bukkit.entity.*; +import org.bukkit.command.*; +import org.bukkit.*; + +public class CmdMuteFaction extends net.syuu.common.command.Command +{ + private Configuration config; + + public CmdMuteFaction() { + super("mute"); + this.config = (Configuration)ViperUtils.getInstance().getConfig(); + addCondition(new PermissionCondition("factions.mute")); + } + + public void proccess(final Player player, final String[] args) { + final FactionDataManager factionDataManager = ((PopuraPlugin)PopuraPlugin.getPlugin(PopuraPlugin.class)).getPopura().getFactionDataManager(); + Faction faction = factionDataManager.getPlayer(player).getFaction(); + if(args.length > 0){ + faction = factionDataManager.getFaction(args[0]); + } + if (faction == null) { + return; + } + final String time = args[1]; + final String reason = args[2]; + for (final Player bukkitPlayer : faction.getOnlineMembers()) { + Bukkit.dispatchCommand((CommandSender)Bukkit.getConsoleSender(), this.config.getString("mute-cmd").replaceAll("%TIME%", time).replaceAll("%PLAYER%", bukkitPlayer.getName()).replaceAll("%REASON%", reason)); + } + if (this.config.getBoolean("Broadcast.enabled")) { + Bukkit.broadcastMessage(this.color(this.config.getString("Broadcast.message").replaceAll("%FACTION%", faction.getName()).replaceAll("%REASON%", reason)).replaceAll("%PLAYER%", player.getName())); + } + } + + + private String color(final String stg) { + return ChatColor.translateAlternateColorCodes('&', stg); + } +} diff --git a/ViperCore/src/main/java/com/igodlik3/viperutils/ViperUtils.java b/ViperCore/src/main/java/com/igodlik3/viperutils/ViperUtils.java new file mode 100644 index 0000000..8e209bf --- /dev/null +++ b/ViperCore/src/main/java/com/igodlik3/viperutils/ViperUtils.java @@ -0,0 +1,38 @@ +package com.igodlik3.viperutils; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import net.syuu.popura.command.faction.FactionCommand; +import org.bukkit.configuration.Configuration; +import org.bukkit.plugin.java.*; +import org.bukkit.*; +import org.bukkit.event.*; +import org.bukkit.plugin.*; +import org.bukkit.command.*; + +public class ViperUtils extends Manager +{ + private static ViperUtils instance; + private ConfigurationWrapper config; + + public ViperUtils(HCFactionPlugin plugin) { + super(plugin); + } + + public Configuration getConfig(){ + return config.getConfig(); + } + public void init() { + config = new ConfigurationWrapper("viper-utils.yml", this.getPlugin()); + config.saveDefault(); + ViperUtils.instance = this; + FactionCommand.INSTANCE.addSubCommand(new CmdMuteFaction()); + Bukkit.getPluginManager().registerEvents((Listener)new BoostXPListener(), getPlugin()); + this.getPlugin().getCommand("utils").setExecutor((CommandExecutor)new CmdCredits()); + } + + public static ViperUtils getInstance() { + return ViperUtils.instance; + } +} diff --git a/ViperCore/src/main/java/config/ConfigData.java b/ViperCore/src/main/java/config/ConfigData.java new file mode 100644 index 0000000..99a046e --- /dev/null +++ b/ViperCore/src/main/java/config/ConfigData.java @@ -0,0 +1,51 @@ +package config; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; + +/** + * Created by Brennan on 6/15/2017. + */ +public class ConfigData +{ + + HCFactionPlugin plugin; + public ConfigData(HCFactionPlugin instance){ + this.plugin = instance; + } + + public void setupDefaultMessages() + { + if(!isSetup()) + { + plugin.messages.set("nether-portal-in-spawn", "&7(&aViper&7) You cannot enter the portal from spawn."); + plugin.messages.set("all-players-in-spawn", "&7(&aViper&7) All players are currently in spawn."); + plugin.messages.set("only-one-online", "&7(&aViper&7) You are the only person online."); + plugin.messages.set("xp-bottle-created", "&7(&aViper&7) You have bottled the xp."); + plugin.messages.set("xp-bottle-received", "&7(&aViper&7) You have un-bottled the xp. "); + plugin.messages.set("xp-bottle-inventory", "&7(&aViper&7) You must have one available inventory space."); + plugin.messages.set("xp-bottle-insufficient", "&7(&aViper&7) You must have a minimum of 30 XP to bottle."); + plugin.messages.set("xp-bottle-name", "&a&lLevel 30 XP Bottle"); + plugin.messages.set("pearl-stuck-message", "&7(&aViper&7) Plugin prevented you from becoming stuck."); + plugin.messages.set("pearl-suffocate-message", "&7(&aViper&7) Plugin prevented you from suffocating."); + plugin.messages.set("sotw-started", "&7(&aViper&7) The SOTW has been started."); + plugin.messages.set("sotw-stopped", "&7(&aViper&7) The SOTW has been stopped."); + plugin.messages.set("sotw-active", "&7(&aViper&7) The SOTW is already active."); + plugin.messages.set("sotw-inactive", "&7(&aViper&7) The SOTW is not active."); + plugin.messages.saveConfig(); + } + } + + public boolean isSetup() + { + if(!plugin.messages.contains("nether-portal-in-spawn")) + { + return false; + } + return true; + } + + public String getConfigMessage(String message) { + return plugin.messages.getString(message); + } +} + diff --git a/ViperCore/src/main/java/config/MyConfig.java b/ViperCore/src/main/java/config/MyConfig.java new file mode 100644 index 0000000..d5892be --- /dev/null +++ b/ViperCore/src/main/java/config/MyConfig.java @@ -0,0 +1,104 @@ +package config; + +import java.io.File; +import java.io.InputStream; +import java.util.List; +import java.util.Set; + +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.java.JavaPlugin; + +public class MyConfig +{ + private int comments; + private MyConfigManager manager; + + private File file; + private FileConfiguration config; + + @SuppressWarnings("deprecation") + public MyConfig(InputStream configStream, File configFile, int comments, JavaPlugin plugin) + { + this.comments = comments; + this.manager = new MyConfigManager(plugin); + this.file = configFile; + this.config = YamlConfiguration.loadConfiguration(configStream); + } + + public Object get(String path) {return this.config.get(path);} + + public Object get(String path, Object def) {return this.config.get(path, def);} + + public String getString(String path) {return this.config.getString(path);} + + public String getString(String path, String def) {return this.config.getString(path, def);} + + public int getInt(String path) {return this.config.getInt(path);} + + public int getInt(String path, int def) {return this.config.getInt(path, def);} + + public boolean getBoolean(String path) {return this.config.getBoolean(path);} + + public boolean getBoolean(String path, boolean def) {return this.config.getBoolean(path, def);} + + public void createSection(String path) {this.config.createSection(path);} + + public ConfigurationSection getConfigurationSection(String path) {return this.config.getConfigurationSection(path);} + + public double getDouble(String path) {return this.config.getDouble(path);} + + public double getDouble(String path, double def) {return this.config.getDouble(path, def);} + + public List getList(String path) {return this.config.getList(path);} + + public List getList(String path, List def) {return this.config.getList(path, def);} + + public boolean contains(String path) {return this.config.contains(path);} + + public void removeKey(String path) {this.config.set(path, null);} + + public void set(String path, Object value) {this.config.set(path, value);} + + public void set(String path, Object value, String comment) + { + if(!this.config.contains(path)) + { + this.config.set(manager.getPluginName() + "_COMMENT_" + comments, " " + comment); + comments++; + } + this.config.set(path, value); + } + + public void set(String path, Object value, String[] comment) + { + for(String comm : comment) + { + if(!this.config.contains(path)) + { + this.config.set(manager.getPluginName() + "_COMMENT_" + comments, " " + comm); + comments++; + } + } + this.config.set(path, value); + } + + public void setHeader(String[] header) + { + manager.setHeader(this.file, header); + this.comments = header.length + 2; + this.reloadConfig(); + } + + @SuppressWarnings("deprecation") + public void reloadConfig() {this.config = YamlConfiguration.loadConfiguration(manager.getConfigContent(file));} + + public void saveConfig() + { + String config = this.config.saveToString(); + manager.saveConfig(config, this.file); + } + + public Set getKeys() {return this.config.getKeys(false);} +} diff --git a/ViperCore/src/main/java/config/MyConfigManager.java b/ViperCore/src/main/java/config/MyConfigManager.java new file mode 100644 index 0000000..e986590 --- /dev/null +++ b/ViperCore/src/main/java/config/MyConfigManager.java @@ -0,0 +1,288 @@ +package config; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.Charset; + +import org.bukkit.plugin.java.JavaPlugin; + +public class MyConfigManager +{ + private JavaPlugin plugin; + + public MyConfigManager(JavaPlugin plugin) + { + this.plugin = plugin; + } + + public MyConfig getNewConfig(String fileName, String[] header) + { + File file = this.getConfigFile(fileName); + + if(!file.exists()) + { + this.prepareFile(fileName); + if(header != null && header.length != 0) + this.setHeader(file, header); + } + + MyConfig config = new MyConfig(this.getConfigContent(fileName), file, this.getCommentsNum(file), plugin); + return config; + } + + public MyConfig getNewConfig(String fileName) + { + return this.getNewConfig(fileName, null); + } + + private File getConfigFile(String file) + { + if(file.isEmpty() || file == null) + return null; + + File configFile; + + if(file.contains("/")) + { + if(file.startsWith("/")) + configFile = new File(plugin.getDataFolder() + file.replace("/", File.separator)); + else configFile = new File(plugin.getDataFolder() + File.separator + file.replace("/", File.separator)); + } + else configFile = new File(plugin.getDataFolder(), file); + + return configFile; + } + + public void prepareFile(String filePath, String resource) + { + File file = this.getConfigFile(filePath); + + if(file.exists()) + return; + + try + { + file.getParentFile().mkdirs(); + file.createNewFile(); + + if(resource != null) + if(!resource.isEmpty()) + this.copyResource(plugin.getResource(resource), file); + + } + catch (IOException e){e.printStackTrace();} + } + + public void prepareFile(String filePath) + { + this.prepareFile(filePath, null); + } + + public void setHeader(File file, String[] header) + { + if(!file.exists()) + return; + + try + { + String currentLine; + StringBuilder config = new StringBuilder(""); + BufferedReader reader = new BufferedReader(new FileReader(file)); + + while((currentLine = reader.readLine()) != null) + config.append(currentLine + "\n"); + + reader.close(); + config.append("# +----------------------------------------------------+ #\n"); + + for(String line : header) + { + if(line.length() > 50) + continue; + + int lenght = (50 - line.length()) / 2; + StringBuilder finalLine = new StringBuilder(line); + + for(int i = 0; i < lenght; i++) + { + finalLine.append(" "); + finalLine.reverse(); + finalLine.append(" "); + finalLine.reverse(); + } + + if(line.length() % 2 != 0) + finalLine.append(" "); + + config.append("# < " + finalLine.toString() + " > #\n"); + } + config.append("# +----------------------------------------------------+ #"); + + BufferedWriter writer = new BufferedWriter(new FileWriter(file)); + writer.write(this.prepareConfigString(config.toString())); + writer.flush(); + writer.close(); + } + catch (IOException e){e.printStackTrace();} + } + + public InputStream getConfigContent(File file) + { + if(!file.exists()) + return null; + try + { + int commentNum = 0; + + String addLine; + String currentLine; + String pluginName = this.getPluginName(); + + StringBuilder whole = new StringBuilder(""); + BufferedReader reader = new BufferedReader(new FileReader(file)); + + while((currentLine = reader.readLine()) != null) + { + if(currentLine.startsWith("#")) + { + addLine = currentLine.replaceFirst("#", pluginName + "_COMMENT_" + commentNum + ":"); + whole.append(addLine + "\n"); + commentNum++; + } + else whole.append(currentLine + "\n"); + } + + String config = whole.toString(); + InputStream configStream = new ByteArrayInputStream(config.getBytes(Charset.forName("UTF-8"))); + + reader.close(); + return configStream; + } + catch (IOException e){e.printStackTrace();return null;} + } + + private int getCommentsNum(File file) + { + if(!file.exists()) + return 0; + try + { + int comments = 0; + String currentLine; + + BufferedReader reader = new BufferedReader(new FileReader(file)); + + while((currentLine = reader.readLine()) != null) + if(currentLine.startsWith("#")) + comments++; + + reader.close(); + return comments; + } + catch (IOException e){e.printStackTrace();return 0;} + } + + public InputStream getConfigContent(String filePath) + { + return this.getConfigContent(this.getConfigFile(filePath)); + } + + private String prepareConfigString(String configString) + { + int lastLine = 0; + int headerLine = 0; + + String[] lines = configString.split("\n"); + StringBuilder config = new StringBuilder(""); + + for(String line : lines) + { + if(line.startsWith(this.getPluginName() + "_COMMENT")) + { + String comment = "#" + line.trim().substring(line.indexOf(":") + 1); + + if(comment.startsWith("# +-")) + { + if(headerLine == 0) + { + config.append(comment + "\n"); + lastLine = 0; + headerLine = 1; + } + else if(headerLine == 1) + { + config.append(comment + "\n\n"); + lastLine = 0; + headerLine = 0; + } + } + else + { + String normalComment; + if(comment.startsWith("# ' ")) + normalComment = comment.substring(0, comment.length() - 1).replaceFirst("# ' ", "# "); + else normalComment = comment; + + if(lastLine == 0) + config.append(normalComment + "\n"); + else if(lastLine == 1) + config.append("\n" + normalComment + "\n"); + + lastLine = 0; + } + } + else + { + config.append(line + "\n"); + lastLine = 1; + } + } + return config.toString(); + } + + public void saveConfig(String configString, File file) + { + String configuration = this.prepareConfigString(configString); + + try + { + BufferedWriter writer = new BufferedWriter(new FileWriter(file)); + writer.write(configuration); + writer.flush(); + writer.close(); + + } + catch (IOException e){e.printStackTrace();} + } + + public String getPluginName() + { + return plugin.getDescription().getName(); + } + + private void copyResource(InputStream resource, File file) + { + try + { + OutputStream out = new FileOutputStream(file); + + int length; + byte[] buf = new byte[1024]; + + while((length = resource.read(buf)) > 0) + out.write(buf, 0, length); + + out.close(); + resource.close(); + } + catch (Exception e) {e.printStackTrace();} + } +} \ No newline at end of file diff --git a/ViperCore/src/main/java/me/dreamzy/report/ViperReport.java b/ViperCore/src/main/java/me/dreamzy/report/ViperReport.java new file mode 100644 index 0000000..8674730 --- /dev/null +++ b/ViperCore/src/main/java/me/dreamzy/report/ViperReport.java @@ -0,0 +1,95 @@ +package me.dreamzy.report; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import net.syuu.popura.command.faction.FactionCommand; +import org.bukkit.configuration.Configuration; +import org.bukkit.plugin.java.*; +import org.bukkit.*; +import org.bukkit.event.*; +import org.bukkit.plugin.*; +import me.dreamzy.report.stats.*; +import me.dreamzy.report.reports.*; +import org.bukkit.command.*; + +public class ViperReport extends Manager +{ + private static ViperReport instance; + private String prefix; + private String prefixReportGui; + private String prefixReportChatGui; + private String prefixReportCheatGui; + private StatsManager statsManager; + private ReportManager reportManager; + + { + this.prefix = "&8[&9Delta&aReport&8]"; + this.prefixReportGui = "&e\u2022 &9Report &6"; + this.prefixReportChatGui = "&2Cheat &e"; + this.prefixReportCheatGui = "&6Chat &e"; + } + + public ViperReport(HCFactionPlugin plugin) { + super(plugin); + } + private ConfigurationWrapper config; + public Configuration getConfig(){ + return config.getConfig(); + } + public void init() { + config = new ConfigurationWrapper("report.yml", this.getPlugin()); + config.saveDefault(); + (ViperReport.instance = this).loadManagers(); + this.loadListeners(); + this.loadCommands(); + } + + public void onDisable() { + this.statsManager.saveData(); + } + + private void loadManagers() { + (this.statsManager = new StatsManager()).reloadData(); + this.reportManager = new ReportManager(); + } + + public void loadListeners() { + final PluginManager pm = Bukkit.getPluginManager(); + pm.registerEvents((Listener)new StatsListener(), this.getPlugin()); + //pm.registerEvents((Listener)new ReportListener(), this.getPlugin()); + } + + public void loadCommands() { + FactionCommand.INSTANCE.addSubCommand(new CmdStats()); + //this.getPlugin().getCommand("report").setExecutor((CommandExecutor)new CmdReport()); + } + + public static ViperReport getInstance() { + return ViperReport.instance; + } + + public String getPrefix() { + return this.prefix; + } + + public String getPrefixReportGui() { + return this.prefixReportGui; + } + + public String getPrefixReportChatGui() { + return this.prefixReportChatGui; + } + + public String getPrefixReportCheatGui() { + return this.prefixReportCheatGui; + } + + public StatsManager getStatsManager() { + return this.statsManager; + } + + public ReportManager getReportManager() { + return this.reportManager; + } +} diff --git a/ViperCore/src/main/java/me/dreamzy/report/reports/CmdReport.java b/ViperCore/src/main/java/me/dreamzy/report/reports/CmdReport.java new file mode 100644 index 0000000..fa0aaf1 --- /dev/null +++ b/ViperCore/src/main/java/me/dreamzy/report/reports/CmdReport.java @@ -0,0 +1,72 @@ +package me.dreamzy.report.reports; + +import me.dreamzy.report.*; +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.faction.bean.FactionPlayer; +import org.bukkit.configuration.*; +import org.bukkit.command.*; +import org.bukkit.entity.*; +import me.dreamzy.report.utils.*; +import org.bukkit.*; + +public class CmdReport implements CommandExecutor +{ + private ViperReport plugin; + private Configuration config; + private ReportManager reportManager; + + public CmdReport() { + this.plugin = ViperReport.getInstance(); + this.config = (Configuration)ViperReport.getInstance().getConfig(); + this.reportManager = this.plugin.getReportManager(); + } + + public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(Utils.color(this.config.getString("Messages.NO-PERM"))); + return true; + } + final Player player = (Player)sender; + if (args.length == 0) { + this.sendHelp(player); + } + else { + if (CooldownUtils.isOnCooldown("Report", player)) { + sender.sendMessage(Utils.color(this.config.getString("Messages.REPORT-COOLDOWN")).replace("%TIME%", String.valueOf(CooldownUtils.getCooldownForPlayerInt("Report", player)))); + return true; + } + final Player cheater = Bukkit.getPlayer(args[0]); + if (cheater != null) { + + final FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + if (player == cheater) { + player.sendMessage(Utils.color(this.config.getString("Messages.SELF-REPORT"))); + return true; + } + if (factionPlayer.getFaction() != null) { + final ReportData data = this.reportManager.getReportData(factionPlayer.getFaction()); + if (!data.reportPlayer(cheater.getName())) { + player.sendMessage(Utils.color(this.config.getString("Messages.MAX-REPORT-FACTION")).replace("%REPORT_COUNT%", String.valueOf(data.getMAX_REPORT_PER_FACTION()))); + return true; + } + } + if (this.reportManager.getReport(player) != null) { + this.reportManager.getReports().remove(this.reportManager.getReport(player)); + } + final Report report = new Report(player, args[0]); + this.reportManager.getReports().add(report); + this.reportManager.openReportInventory(player); + } + else { + player.sendMessage(Utils.color(this.config.getString("Messages.REPORT-USAGE"))); + } + } + return false; + } + + public void sendHelp(final Player player) { + for (final String msg : this.config.getStringList("Messages.HELP-CMD")) { + player.sendMessage(Utils.color(msg)); + } + } +} diff --git a/ViperCore/src/main/java/me/dreamzy/report/reports/Report.java b/ViperCore/src/main/java/me/dreamzy/report/reports/Report.java new file mode 100644 index 0000000..b7038c0 --- /dev/null +++ b/ViperCore/src/main/java/me/dreamzy/report/reports/Report.java @@ -0,0 +1,165 @@ +package me.dreamzy.report.reports; + +import org.bukkit.entity.*; +import javax.annotation.*; +import org.bukkit.configuration.*; +import me.dreamzy.report.*; +import net.md_5.bungee.api.chat.*; +import me.dreamzy.report.utils.*; +import org.bukkit.*; + +public class Report +{ + private Player sender; + private String reported; + @Nullable + private String reason; + private Configuration config; + + public Report(final Player sender, final String reported) { + this.config = (Configuration)ViperReport.getInstance().getConfig(); + this.sender = sender; + this.reported = reported; + this.reason = null; + } + + public void send() { + for (Player staff : Bukkit.getOnlinePlayers()){ + if (staff.hasPermission("viper.report")) { + String msg = Utils.color(this.config.getString("Messages.REPORT-SEND-STAFF")); + msg = msg.replace("%PLAYER%", this.reported); + msg = msg.replace("%REASON%", this.reason); + final TextComponent text = new TextComponent(msg); + text.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tp " + this.reported)); + final Location loc = staff.getLocation(); + staff.spigot().sendMessage((BaseComponent)text); + staff.playSound(loc, Sound.WOLF_GROWL, 0.5f, 0.5f); + staff.playSound(loc, Sound.ENDERDRAGON_GROWL, 100.0f, 1.0f); + } + } + this.sender.sendMessage(Utils.color(this.config.getString("Messages.REPORT-SEND"))); + CooldownUtils.addCooldown("Report", this.sender, 60); + ViperReport.getInstance().getReportManager().getReports().remove(this); + } + + public Player getSender() { + return this.sender; + } + + public String getReported() { + return this.reported; + } + + @Nullable + public String getReason() { + return this.reason; + } + + public Configuration getConfig() { + return this.config; + } + + public void setSender(final Player sender) { + this.sender = sender; + } + + public void setReported(final String reported) { + this.reported = reported; + } + + public void setReason(@Nullable final String reason) { + this.reason = reason; + } + + public void setConfig(final Configuration config) { + this.config = config; + } + + @Override + public boolean equals(final Object o) { + if (o == this) { + return true; + } + if (!(o instanceof Report)) { + return false; + } + final Report other = (Report)o; + if (!other.canEqual(this)) { + return false; + } + final Object this$sender = this.getSender(); + final Object other$sender = other.getSender(); + Label_0065: { + if (this$sender == null) { + if (other$sender == null) { + break Label_0065; + } + } + else if (this$sender.equals(other$sender)) { + break Label_0065; + } + return false; + } + final Object this$reported = this.getReported(); + final Object other$reported = other.getReported(); + Label_0102: { + if (this$reported == null) { + if (other$reported == null) { + break Label_0102; + } + } + else if (this$reported.equals(other$reported)) { + break Label_0102; + } + return false; + } + final Object this$reason = this.getReason(); + final Object other$reason = other.getReason(); + Label_0139: { + if (this$reason == null) { + if (other$reason == null) { + break Label_0139; + } + } + else if (this$reason.equals(other$reason)) { + break Label_0139; + } + return false; + } + final Object this$config = this.getConfig(); + final Object other$config = other.getConfig(); + if (this$config == null) { + if (other$config == null) { + return true; + } + } + else if (this$config.equals(other$config)) { + return true; + } + return false; + } + + protected boolean canEqual(final Object other) { + return other instanceof Report; + } + + @Override + public int hashCode() { + final int PRIME = 59; + int result = 1; + final Object $sender = this.getSender(); + result = result * 59 + (($sender == null) ? 43 : $sender.hashCode()); + final Object $reported = this.getReported(); + result = result * 59 + (($reported == null) ? 43 : $reported.hashCode()); + final Object $reason = this.getReason(); + result = result * 59 + (($reason == null) ? 43 : $reason.hashCode()); + final Object $config = this.getConfig(); + result = result * 59 + (($config == null) ? 43 : $config.hashCode()); + return result; + } + + @Override + public String toString() { + return "Report(sender=" + this.getSender() + ", reported=" + this.getReported() + ", reason=" + this.getReason() + ", config=" + this.getConfig() + ")"; + } +} diff --git a/ViperCore/src/main/java/me/dreamzy/report/reports/ReportData.java b/ViperCore/src/main/java/me/dreamzy/report/reports/ReportData.java new file mode 100644 index 0000000..96a070b --- /dev/null +++ b/ViperCore/src/main/java/me/dreamzy/report/reports/ReportData.java @@ -0,0 +1,107 @@ +package me.dreamzy.report.reports; + +import me.dreamzy.report.*; +import net.syuu.popura.faction.bean.Faction; + +import java.util.*; + +public class ReportData +{ + private Faction faction; + private Map reportedPlayers; + private final int MAX_REPORT_PER_FACTION; + + public ReportData(final Faction faction) { + this.MAX_REPORT_PER_FACTION = ViperReport.getInstance().getConfig().getInt("MAX-REPORT-PER-FACTION"); + this.faction = faction; + this.reportedPlayers = new HashMap(); + } + + public boolean reportPlayer(final String name) { + if (this.reportedPlayers.containsKey(name)) { + final int reportTime = this.reportedPlayers.put(name, this.reportedPlayers.get(name) + 1); + return reportTime < this.MAX_REPORT_PER_FACTION; + } + this.reportedPlayers.put(name, 1); + return true; + } + + public Faction getFaction() { + return this.faction; + } + + public Map getReportedPlayers() { + return this.reportedPlayers; + } + + public int getMAX_REPORT_PER_FACTION() { + return this.MAX_REPORT_PER_FACTION; + } + + public void setFaction(final Faction faction) { + this.faction = faction; + } + + public void setReportedPlayers(final Map reportedPlayers) { + this.reportedPlayers = reportedPlayers; + } + + @Override + public boolean equals(final Object o) { + if (o == this) { + return true; + } + if (!(o instanceof ReportData)) { + return false; + } + final ReportData other = (ReportData)o; + if (!other.canEqual(this)) { + return false; + } + final Object this$faction = this.getFaction(); + final Object other$faction = other.getFaction(); + Label_0065: { + if (this$faction == null) { + if (other$faction == null) { + break Label_0065; + } + } + else if (this$faction.equals(other$faction)) { + break Label_0065; + } + return false; + } + final Object this$reportedPlayers = this.getReportedPlayers(); + final Object other$reportedPlayers = other.getReportedPlayers(); + if (this$reportedPlayers == null) { + if (other$reportedPlayers == null) { + return this.getMAX_REPORT_PER_FACTION() == other.getMAX_REPORT_PER_FACTION(); + } + } + else if (this$reportedPlayers.equals(other$reportedPlayers)) { + return this.getMAX_REPORT_PER_FACTION() == other.getMAX_REPORT_PER_FACTION(); + } + return false; + } + + protected boolean canEqual(final Object other) { + return other instanceof ReportData; + } + + @Override + public int hashCode() { + final int PRIME = 59; + int result = 1; + final Object $faction = this.getFaction(); + result = result * 59 + (($faction == null) ? 43 : $faction.hashCode()); + final Object $reportedPlayers = this.getReportedPlayers(); + result = result * 59 + (($reportedPlayers == null) ? 43 : $reportedPlayers.hashCode()); + result = result * 59 + this.getMAX_REPORT_PER_FACTION(); + return result; + } + + @Override + public String toString() { + return "ReportData(faction=" + this.getFaction() + ", reportedPlayers=" + this.getReportedPlayers() + ", MAX_REPORT_PER_FACTION=" + this.getMAX_REPORT_PER_FACTION() + ")"; + } +} diff --git a/ViperCore/src/main/java/me/dreamzy/report/reports/ReportListener.java b/ViperCore/src/main/java/me/dreamzy/report/reports/ReportListener.java new file mode 100644 index 0000000..475e065 --- /dev/null +++ b/ViperCore/src/main/java/me/dreamzy/report/reports/ReportListener.java @@ -0,0 +1,70 @@ +package me.dreamzy.report.reports; + +import com.igodlik3.ItemBuilder; +import me.dreamzy.report.*; +import org.bukkit.event.inventory.*; +import org.bukkit.entity.*; +import org.bukkit.event.*; +import org.bukkit.*; +import org.bukkit.inventory.*; +import me.dreamzy.report.utils.*; + +public class ReportListener implements Listener +{ + private ViperReport plugin; + private ReportManager reportManager; + + public ReportListener() { + this.plugin = ViperReport.getInstance(); + this.reportManager = this.plugin.getReportManager(); + } + + @EventHandler + public void onInventoryClick(final InventoryClickEvent event) { + final Player player = (Player)event.getWhoClicked(); + final Inventory inv = event.getInventory(); + if (inv != null && inv.getName() != null && player.getOpenInventory().getTopInventory() == inv && event.getCurrentItem() != null && event.getCurrentItem().getType() != Material.AIR) { + final ItemStack item = event.getCurrentItem(); + if (inv.getName().equalsIgnoreCase(Utils.color(this.plugin.getPrefixReportGui()))) { + event.setCancelled(true); + if (item.getType() == Material.DIAMOND_SWORD) { + this.openCheatInventory(player); + } + else { + this.openChatInventory(player); + } + } + else if (inv.getName().contains(Utils.color(this.plugin.getPrefixReportChatGui())) || inv.getName().contains(Utils.color(this.plugin.getPrefixReportCheatGui()))) { + event.setCancelled(true); + final Report report = this.reportManager.getReport(player); + if (report == null) { + player.closeInventory(); + return; + } + report.setReason(item.getItemMeta().getDisplayName()); + report.send(); + player.closeInventory(); + } + } + } + + public void openChatInventory(final Player player) { + final Inventory inv = Bukkit.createInventory((InventoryHolder)player, 27, Utils.color(this.plugin.getPrefixReportChatGui())); + inv.setItem(10, new ItemBuilder(Material.DIAMOND_SWORD).displayname(Utils.color("&6Spamming Chat")).build()); + inv.setItem(12, new ItemBuilder(Material.GOLD_SWORD).displayname(Utils.color("&5Spamming Msg")).build()); + inv.setItem(14, new ItemBuilder(Material.POTION).displayname(Utils.color("&3Spamming Faction Title")).build()); + inv.setItem(16, new ItemBuilder(Material.FEATHER).displayname(Utils.color("&cCAPS")).build()); + inv.setItem(22, new ItemBuilder(Material.BOW).displayname(Utils.color("&dOthers")).build()); + player.openInventory(inv); + } + + public void openCheatInventory(final Player player) { + final Inventory inv = Bukkit.createInventory((InventoryHolder)player, 27, Utils.color(this.plugin.getPrefixReportCheatGui())); + inv.setItem(10, new ItemBuilder(Material.DIAMOND_SWORD).displayname(Utils.color("&6ForceField")).build()); + inv.setItem(12, new ItemBuilder(Material.GOLD_SWORD).displayname(Utils.color("&5KillAura")).build()); + inv.setItem(14, new ItemBuilder(Material.POTION).displayname(Utils.color("&3SpeedHack")).build()); + inv.setItem(16, new ItemBuilder(Material.FEATHER).displayname(Utils.color("&eFly")).build()); + inv.setItem(22, new ItemBuilder(Material.BOW).displayname(Utils.color("&dOthers")).build()); + player.openInventory(inv); + } +} diff --git a/ViperCore/src/main/java/me/dreamzy/report/reports/ReportManager.java b/ViperCore/src/main/java/me/dreamzy/report/reports/ReportManager.java new file mode 100644 index 0000000..511e088 --- /dev/null +++ b/ViperCore/src/main/java/me/dreamzy/report/reports/ReportManager.java @@ -0,0 +1,60 @@ +package me.dreamzy.report.reports; + +import com.igodlik3.ItemBuilder; +import me.dreamzy.report.*; +import com.google.common.collect.*; +import net.syuu.popura.faction.bean.Faction; +import org.bukkit.entity.*; +import java.util.*; +import org.bukkit.*; +import me.dreamzy.report.utils.*; +import org.bukkit.inventory.*; + +public class ReportManager +{ + private List reports; + private List reportsData; + private ViperReport plugin; + + public ReportManager() { + this.reports = Lists.newArrayList(); + this.reportsData = Lists.newArrayList(); + this.plugin = ViperReport.getInstance(); + } + + public Report getReport(final Player player) { + for (final Report report : this.reports) { + if (report.getSender().getUniqueId().equals(player.getUniqueId())) { + return report; + } + } + return null; + } + + public ReportData getReportData(final Faction faction) { + for (final ReportData data : this.reportsData) { + if (data.getFaction().equals(faction)) { + return data; + } + } + this.reportsData.add(new ReportData(faction)); + return this.getReportData(faction); + } + + public void openReportInventory(final Player player) { + final Inventory inv = Bukkit.createInventory((InventoryHolder)player, 27, Utils.color(this.plugin.getPrefixReportGui())); + final ItemStack cheatCategory = new ItemBuilder(Material.DIAMOND_SWORD).displayname(Utils.color("&a&lCheat")).durability((short)0).lore("&8- &eForceField", "&8- &eKillAura", "&8- &eSpeedHack", "&8- &eFly", "&8- &eOthers").build(); + inv.setItem(11, cheatCategory); + final ItemStack chatCategory = new ItemBuilder(Material.PAPER).displayname(Utils.color("&a&lChat")).durability((short)0).lore("&8- &eSpamming Chat", "&8- &eSpamming Msg", "&8- &eSpamming Faction Title", "&8- &eCAPS", "&8- &eOthers").build(); + inv.setItem(15, chatCategory); + player.openInventory(inv); + } + + public List getReports() { + return this.reports; + } + + public List getReportsData() { + return this.reportsData; + } +} diff --git a/ViperCore/src/main/java/me/dreamzy/report/stats/CmdStats.java b/ViperCore/src/main/java/me/dreamzy/report/stats/CmdStats.java new file mode 100644 index 0000000..dd34302 --- /dev/null +++ b/ViperCore/src/main/java/me/dreamzy/report/stats/CmdStats.java @@ -0,0 +1,86 @@ +package me.dreamzy.report.stats; + +import net.syuu.common.command.Command; +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.command.condition.MustBeInFaction; +import net.syuu.popura.faction.FactionDataManager; +import net.syuu.popura.faction.FactionType; +import net.syuu.popura.faction.bean.Faction; +import net.syuu.popura.faction.bean.FactionPlayer; +import org.bukkit.configuration.*; +import me.dreamzy.report.*; +import me.dreamzy.report.utils.*; +import org.bukkit.*; +import org.bukkit.entity.*; + +public class CmdStats extends Command +{ + private StatsManager statsManager; + private Configuration config; + + public CmdStats() { + super("stat"); + this.statsManager = ViperReport.getInstance().getStatsManager(); + this.config = (Configuration)ViperReport.getInstance().getConfig(); + addAllias("stats"); + addCondition(new MustBeInFaction()); + } + + public void proccess(final Player player, final String[] args) { + final FactionDataManager factionDataManager = ((PopuraPlugin)PopuraPlugin.getPlugin(PopuraPlugin.class)).getPopura().getFactionDataManager(); + Faction faction = factionDataManager.getPlayer(player).getFaction(); + if(args.length > 0){ + faction = factionDataManager.getFaction(args[0]); + + } + if (faction == null) { + return; + } + if (faction.getFactionType() != FactionType.NORMAL) { + player.sendMessage(Utils.color("&cInvalid faction.")); + return; + } + int totalDiamond = 0; + int totalIron = 0; + int totalGold = 0; + int totalEmerald = 0; + int totalCoal = 0; + int totalKills = 0; + int totalDeaths = 0; + for (final FactionPlayer fp : faction.getPlayers()) { + totalKills += fp.getKill(); + totalDeaths = fp.getDeath(); + Player bukkitPlayer = Bukkit.getPlayer(fp.getName()); + if (bukkitPlayer != null) { + totalDiamond = bukkitPlayer.getStatistic(Statistic.MINE_BLOCK, Material.DIAMOND_ORE); + totalIron = bukkitPlayer.getStatistic(Statistic.MINE_BLOCK, Material.IRON_ORE); + totalGold = bukkitPlayer.getStatistic(Statistic.MINE_BLOCK, Material.GOLD_ORE); + totalEmerald = bukkitPlayer.getStatistic(Statistic.MINE_BLOCK, Material.EMERALD_ORE); + totalCoal = bukkitPlayer.getStatistic(Statistic.MINE_BLOCK, Material.COAL_ORE); + } + else { + final StatsData data = this.statsManager.getUser(fp.getUuid().toString()); + if (data == null) { + continue; + } + totalDiamond = data.getTotalDiamond(); + totalIron = data.getTotalIron(); + totalGold = data.getTotalGold(); + totalEmerald = data.getTotalEmerald(); + totalCoal = data.getTotalCoal(); + } + } + for (String msg : this.config.getStringList("Messages.STATS-CMD")) { + msg = msg.replace("%FACTION%", faction.getName()); + msg = msg.replace("%KILLS%", String.valueOf(totalKills)); + msg = msg.replace("%DEATHS%", String.valueOf(totalDeaths)); + msg = msg.replace("%DIAMOND%", String.valueOf(totalDiamond)); + msg = msg.replace("%IRON%", String.valueOf(totalIron)); + msg = msg.replace("%GOLD%", String.valueOf(totalGold)); + msg = msg.replace("%EMERALD%", String.valueOf(totalEmerald)); + msg = msg.replace("%COAL%", String.valueOf(totalCoal)); + player.sendMessage(Utils.color(msg)); + } + } + +} diff --git a/ViperCore/src/main/java/me/dreamzy/report/stats/StatsData.java b/ViperCore/src/main/java/me/dreamzy/report/stats/StatsData.java new file mode 100644 index 0000000..d372a76 --- /dev/null +++ b/ViperCore/src/main/java/me/dreamzy/report/stats/StatsData.java @@ -0,0 +1,106 @@ +package me.dreamzy.report.stats; + +import org.bukkit.entity.*; +import org.bukkit.*; + +public class StatsData +{ + private int totalDiamond; + private int totalIron; + private int totalGold; + private int totalEmerald; + private int totalCoal; + + public StatsData(final Player player) { + this.saveStats(player); + } + + public StatsData(final int d, final int i, final int g, final int e, final int c) { + this.totalDiamond = d; + this.totalIron = i; + this.totalGold = g; + this.totalEmerald = e; + this.totalCoal = c; + } + + public void saveStats(final Player player) { + this.totalDiamond = player.getStatistic(Statistic.MINE_BLOCK, Material.DIAMOND_ORE); + this.totalIron = player.getStatistic(Statistic.MINE_BLOCK, Material.IRON_ORE); + this.totalGold = player.getStatistic(Statistic.MINE_BLOCK, Material.GOLD_ORE); + this.totalEmerald = player.getStatistic(Statistic.MINE_BLOCK, Material.EMERALD_ORE); + this.totalCoal = player.getStatistic(Statistic.MINE_BLOCK, Material.COAL_ORE); + } + + public int getTotalDiamond() { + return this.totalDiamond; + } + + public int getTotalIron() { + return this.totalIron; + } + + public int getTotalGold() { + return this.totalGold; + } + + public int getTotalEmerald() { + return this.totalEmerald; + } + + public int getTotalCoal() { + return this.totalCoal; + } + + public void setTotalDiamond(final int totalDiamond) { + this.totalDiamond = totalDiamond; + } + + public void setTotalIron(final int totalIron) { + this.totalIron = totalIron; + } + + public void setTotalGold(final int totalGold) { + this.totalGold = totalGold; + } + + public void setTotalEmerald(final int totalEmerald) { + this.totalEmerald = totalEmerald; + } + + public void setTotalCoal(final int totalCoal) { + this.totalCoal = totalCoal; + } + + @Override + public boolean equals(final Object o) { + if (o == this) { + return true; + } + if (!(o instanceof StatsData)) { + return false; + } + final StatsData other = (StatsData)o; + return other.canEqual(this) && this.getTotalDiamond() == other.getTotalDiamond() && this.getTotalIron() == other.getTotalIron() && this.getTotalGold() == other.getTotalGold() && this.getTotalEmerald() == other.getTotalEmerald() && this.getTotalCoal() == other.getTotalCoal(); + } + + protected boolean canEqual(final Object other) { + return other instanceof StatsData; + } + + @Override + public int hashCode() { + final int PRIME = 59; + int result = 1; + result = result * 59 + this.getTotalDiamond(); + result = result * 59 + this.getTotalIron(); + result = result * 59 + this.getTotalGold(); + result = result * 59 + this.getTotalEmerald(); + result = result * 59 + this.getTotalCoal(); + return result; + } + + @Override + public String toString() { + return "StatsData(totalDiamond=" + this.getTotalDiamond() + ", totalIron=" + this.getTotalIron() + ", totalGold=" + this.getTotalGold() + ", totalEmerald=" + this.getTotalEmerald() + ", totalCoal=" + this.getTotalCoal() + ")"; + } +} diff --git a/ViperCore/src/main/java/me/dreamzy/report/stats/StatsListener.java b/ViperCore/src/main/java/me/dreamzy/report/stats/StatsListener.java new file mode 100644 index 0000000..ccb7e9e --- /dev/null +++ b/ViperCore/src/main/java/me/dreamzy/report/stats/StatsListener.java @@ -0,0 +1,29 @@ +package me.dreamzy.report.stats; + +import me.dreamzy.report.*; +import org.bukkit.event.*; +import org.bukkit.event.player.*; + +public class StatsListener implements Listener +{ + private StatsManager manager; + + public StatsListener() { + this.manager = ViperReport.getInstance().getStatsManager(); + } + + @EventHandler + public void onPlayerJoin(final PlayerJoinEvent event) { + this.manager.getUser(event.getPlayer()); + } + + @EventHandler + public void onPlayerQuit(final PlayerQuitEvent event) { + this.manager.getUser(event.getPlayer()).saveStats(event.getPlayer()); + } + + @EventHandler + public void onPlayerKick(final PlayerKickEvent event) { + this.manager.getUser(event.getPlayer()).saveStats(event.getPlayer()); + } +} diff --git a/ViperCore/src/main/java/me/dreamzy/report/stats/StatsManager.java b/ViperCore/src/main/java/me/dreamzy/report/stats/StatsManager.java new file mode 100644 index 0000000..be7e12b --- /dev/null +++ b/ViperCore/src/main/java/me/dreamzy/report/stats/StatsManager.java @@ -0,0 +1,56 @@ +package me.dreamzy.report.stats; + +import me.dreamzy.report.utils.*; +import me.dreamzy.report.*; +import org.bukkit.plugin.java.*; +import org.bukkit.entity.*; +import org.bukkit.configuration.*; +import java.util.*; + +public class StatsManager +{ + private Map statsMap; + private ConfigCreator config; + + public StatsManager() { + this.statsMap = new HashMap(); + this.config = new ConfigCreator("data", ViperReport.getInstance().getPlugin()); + } + + public StatsData getUser(final Player player) { + final String id = player.getUniqueId().toString(); + if (this.statsMap.containsKey(id)) { + return this.statsMap.get(id); + } + final StatsData data = new StatsData(player); + this.statsMap.put(id, data); + return data; + } + + public StatsData getUser(final String id) { + return this.statsMap.get(id); + } + + public void reloadData() { + final ConfigurationSection section = this.config.getConfigurationSection("data"); + if (section != null) { + for (final String id : section.getKeys(false)) { + final String path = String.valueOf(id) + "."; + this.statsMap.put(id, new StatsData(section.getInt(String.valueOf(path) + "totalDiamond"), section.getInt(String.valueOf(path) + "totalIron"), section.getInt(String.valueOf(path) + "totalGold"), section.getInt(String.valueOf(path) + "totalEmerald"), section.getInt(String.valueOf(path) + "totalCoal"))); + } + } + } + + public void saveData() { + final ConfigurationSection section = this.config.createSection("data"); + for (final String id : this.statsMap.keySet()) { + final StatsData data = this.statsMap.get(id); + section.set(String.valueOf(id) + ".totalDiamond", (Object)data.getTotalDiamond()); + section.set(String.valueOf(id) + ".totalIron", (Object)data.getTotalIron()); + section.set(String.valueOf(id) + ".totalGold", (Object)data.getTotalGold()); + section.set(String.valueOf(id) + ".totalEmerald", (Object)data.getTotalEmerald()); + section.set(String.valueOf(id) + ".totalCoal", (Object)data.getTotalCoal()); + } + this.config.save(); + } +} diff --git a/ViperCore/src/main/java/me/dreamzy/report/utils/ConfigCreator.java b/ViperCore/src/main/java/me/dreamzy/report/utils/ConfigCreator.java new file mode 100644 index 0000000..0dbf3ba --- /dev/null +++ b/ViperCore/src/main/java/me/dreamzy/report/utils/ConfigCreator.java @@ -0,0 +1,92 @@ +package me.dreamzy.report.utils; + +import org.bukkit.configuration.file.*; +import org.bukkit.plugin.java.*; +import java.io.*; + +public class ConfigCreator extends YamlConfiguration +{ + private final String fileName; + private final JavaPlugin plugin; + + public ConfigCreator(final String fileName, final JavaPlugin plugin) { + this(fileName, ".yml", plugin); + } + + public ConfigCreator(final String fileName, final String fileExtension, final JavaPlugin plugin) { + this.fileName = String.valueOf(fileName) + (fileName.endsWith(fileExtension) ? "" : fileExtension); + this.plugin = plugin; + this.createFile(); + } + + public String getFileName() { + return this.fileName; + } + + public JavaPlugin getPlugin() { + return this.plugin; + } + + private void createFile() { + final File folder = new File(this.plugin.getDataFolder() , "report-data"); + try { + final File file = new File(folder, this.fileName); + if (!file.exists()) { + if (this.plugin.getResource(this.fileName) != null) { + this.plugin.saveResource(this.fileName, false); + } + else { + this.save(file); + } + } + else { + this.load(file); + this.save(file); + } + } + catch (Exception ex) { + ex.printStackTrace(); + } + } + + public void save() { + final File folder = this.plugin.getDataFolder(); + try { + this.save(new File(folder, this.fileName)); + } + catch (Exception ex) { + ex.printStackTrace(); + } + } + + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (!(o instanceof ConfigCreator)) { + return false; + } + final ConfigCreator config = (ConfigCreator)o; + Label_0054: { + if (this.fileName != null) { + if (this.fileName.equals(config.fileName)) { + break Label_0054; + } + } + else if (config.fileName == null) { + break Label_0054; + } + return false; + } + if (this.plugin != null) { + return this.plugin.equals((Object)config.plugin); + } + return config.plugin == null; + } + + public int hashCode() { + int result = (this.fileName != null) ? this.fileName.hashCode() : 0; + result = 31 * result + ((this.plugin != null) ? this.plugin.hashCode() : 0); + return result; + } +} diff --git a/ViperCore/src/main/java/me/dreamzy/report/utils/CooldownUtils.java b/ViperCore/src/main/java/me/dreamzy/report/utils/CooldownUtils.java new file mode 100644 index 0000000..a68982d --- /dev/null +++ b/ViperCore/src/main/java/me/dreamzy/report/utils/CooldownUtils.java @@ -0,0 +1,58 @@ +package me.dreamzy.report.utils; + +import java.util.*; +import org.bukkit.entity.*; + +public class CooldownUtils +{ + private static HashMap> cooldown; + + static { + CooldownUtils.cooldown = new HashMap>(); + } + + public static void clearCooldowns() { + CooldownUtils.cooldown.clear(); + } + + public static void createCooldown(final String k) { + if (CooldownUtils.cooldown.containsKey(k)) { + throw new IllegalArgumentException("Ce cooldown existe d\u00e9j\u00e0"); + } + CooldownUtils.cooldown.put(k, new HashMap()); + } + + public static HashMap getCooldownMap(final String k) { + if (CooldownUtils.cooldown.containsKey(k)) { + return CooldownUtils.cooldown.get(k); + } + return null; + } + + public static void addCooldown(final String k, final Player p, final int seconds) { + if (!CooldownUtils.cooldown.containsKey(k)) { + createCooldown(k); + } + final long next = System.currentTimeMillis() + seconds * 1000L; + CooldownUtils.cooldown.get(k).put(p.getUniqueId(), next); + } + + public static boolean isOnCooldown(final String k, final Player p) { + return CooldownUtils.cooldown.containsKey(k) && CooldownUtils.cooldown.get(k).containsKey(p.getUniqueId()) && System.currentTimeMillis() <= CooldownUtils.cooldown.get(k).get(p.getUniqueId()); + } + + public static int getCooldownForPlayerInt(final String k, final Player p) { + return (int)((CooldownUtils.cooldown.get(k).get(p.getUniqueId()) - System.currentTimeMillis()) / 1000L); + } + + public static long getCooldownForPlayerLong(final String k, final Player p) { + return CooldownUtils.cooldown.get(k).get(p.getUniqueId()) - System.currentTimeMillis(); + } + + public static void removeCooldown(final String k, final Player p) { + if (!CooldownUtils.cooldown.containsKey(k)) { + throw new IllegalArgumentException(String.valueOf(String.valueOf(k)) + " n'existe pas"); + } + CooldownUtils.cooldown.get(k).remove(p.getUniqueId()); + } +} diff --git a/ViperCore/src/main/java/me/dreamzy/report/utils/Cuboid.java b/ViperCore/src/main/java/me/dreamzy/report/utils/Cuboid.java new file mode 100644 index 0000000..f90d1dc --- /dev/null +++ b/ViperCore/src/main/java/me/dreamzy/report/utils/Cuboid.java @@ -0,0 +1,473 @@ +package me.dreamzy.report.utils; + +import org.bukkit.block.*; +import org.bukkit.configuration.serialization.*; +import java.util.logging.*; +import java.util.*; +import org.bukkit.*; + +public class Cuboid implements Iterable, Cloneable, ConfigurationSerializable +{ + protected final String worldName; + protected final int x1; + protected final int y1; + protected final int z1; + protected final int x2; + protected final int y2; + protected final int z2; + + public Cuboid(final Location location1, final Location location2) { + if (!location1.getWorld().equals(location2.getWorld())) { + Logger.getLogger("Les locations doivent \u00eatre dans un m\u00eame monde."); + } + this.worldName = location1.getWorld().getName(); + this.x1 = Math.min(location1.getBlockX(), location2.getBlockX()); + this.y1 = Math.min(location1.getBlockY(), location2.getBlockY()); + this.z1 = Math.min(location1.getBlockZ(), location2.getBlockZ()); + this.x2 = Math.max(location1.getBlockX(), location2.getBlockX()); + this.y2 = Math.max(location1.getBlockY(), location2.getBlockY()); + this.z2 = Math.max(location1.getBlockZ(), location2.getBlockZ()); + } + + public Cuboid(final Location location) { + this(location, location); + } + + public Cuboid(final Cuboid cuboid) { + this(cuboid.getWorld().getName(), cuboid.x1, cuboid.y1, cuboid.z1, cuboid.x2, cuboid.y2, cuboid.z2); + } + + private Cuboid(final String string, final int n, final int n2, final int n3, final int n4, final int n5, final int n6) { + this.worldName = string; + this.x1 = Math.min(n, n4); + this.x2 = Math.max(n, n4); + this.y1 = Math.min(n2, n5); + this.y2 = Math.max(n2, n5); + this.z1 = Math.min(n3, n6); + this.z2 = Math.max(n3, n6); + } + + public Cuboid(final Map map) { + this.worldName = (String) map.get("worldName"); + this.x1 = (int) map.get("x1"); + this.x2 = (int) map.get("x2"); + this.y1 = (int) map.get("y1"); + this.y2 = (int) map.get("y2"); + this.z1 = (int) map.get("z1"); + this.z2 = (int) map.get("z2"); + } + + public Map serialize() { + final HashMap hashMap = new HashMap(); + hashMap.put("worldName", this.worldName); + hashMap.put("x1", this.x1); + hashMap.put("y1", this.y1); + hashMap.put("z1", this.z1); + hashMap.put("x2", this.x2); + hashMap.put("y2", this.y2); + hashMap.put("z2", this.z2); + return hashMap; + } + + public Location getLowerNE() { + return new Location(this.getWorld(), (double)this.x1, (double)this.y1, (double)this.z1); + } + + public Location getUpperSW() { + return new Location(this.getWorld(), (double)this.x2, (double)this.y2, (double)this.z2); + } + + public List getBlocks() { + final Iterator iterator = this.iterator(); + final ArrayList arrayList = new ArrayList(); + while (iterator.hasNext()) { + arrayList.add(iterator.next()); + } + return arrayList; + } + + public Location getCenter() { + final int i = this.getUpperX() + 1; + final int j = this.getUpperY() + 1; + final int k = this.getUpperZ() + 1; + return new Location(this.getWorld(), this.getLowerX() + (i - this.getLowerX()) / 2.0, this.getLowerY() + (j - this.getLowerY()) / 2.0, this.getLowerZ() + (k - this.getLowerZ()) / 2.0); + } + + public World getWorld() { + final World world = Bukkit.getWorld(this.worldName); + if (world == null) { + Logger.getLogger("Le monde " + this.worldName + "n'est pas charg\u00e9 !"); + } + return world; + } + + public int getSizeX() { + return this.x2 - this.x1 + 1; + } + + public int getSizeY() { + return this.y2 - this.y1 + 1; + } + + public int getSizeZ() { + return this.z2 - this.z1 + 1; + } + + public int getLowerX() { + return this.x1; + } + + public int getLowerY() { + return this.y1; + } + + public int getLowerZ() { + return this.z1; + } + + public int getUpperX() { + return this.x2; + } + + public int getUpperY() { + return this.y2; + } + + public int getUpperZ() { + return this.z2; + } + + public Block[] corners() { + final Block[] arrayOfBlock = new Block[8]; + final World localWorld = this.getWorld(); + arrayOfBlock[0] = localWorld.getBlockAt(this.x1, this.y1, this.z1); + arrayOfBlock[1] = localWorld.getBlockAt(this.x1, this.y1, this.z2); + arrayOfBlock[2] = localWorld.getBlockAt(this.x1, this.y2, this.z1); + arrayOfBlock[3] = localWorld.getBlockAt(this.x1, this.y2, this.z2); + arrayOfBlock[4] = localWorld.getBlockAt(this.x2, this.y1, this.z1); + arrayOfBlock[5] = localWorld.getBlockAt(this.x2, this.y1, this.z2); + arrayOfBlock[6] = localWorld.getBlockAt(this.x2, this.y2, this.z1); + arrayOfBlock[7] = localWorld.getBlockAt(this.x2, this.y2, this.z2); + return arrayOfBlock; + } + + public Cuboid expand(final CuboidDirection paramCuboidDirection, final int paramInt) { + switch (paramCuboidDirection) { + case Both: { + return new Cuboid(this.worldName, this.x1 - paramInt, this.y1, this.z1, this.x2, this.y2, this.z2); + } + case East: { + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2 + paramInt, this.y2, this.z2); + } + case Down: { + return new Cuboid(this.worldName, this.x1, this.y1, this.z1 - paramInt, this.x2, this.y2, this.z2); + } + case Horizontal: { + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2, this.y2, this.z2 + paramInt); + } + case South: { + return new Cuboid(this.worldName, this.x1, this.y1 - paramInt, this.z1, this.x2, this.y2, this.z2); + } + case North: { + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2, this.y2 + paramInt, this.z2); + } + default: { + throw new IllegalArgumentException("Invalid direction " + paramCuboidDirection); + } + } + } + + public Cuboid shift(final CuboidDirection paramCuboidDirection, final int paramInt) { + return this.expand(paramCuboidDirection, paramInt).expand(paramCuboidDirection.opposite(), -paramInt); + } + + public Cuboid outset(final CuboidDirection paramCuboidDirection, final int paramInt) { + Cuboid localCuboid = null; + switch (paramCuboidDirection) { + case Unknown: { + localCuboid = this.expand(CuboidDirection.North, paramInt).expand(CuboidDirection.South, paramInt).expand(CuboidDirection.East, paramInt).expand(CuboidDirection.West, paramInt); + break; + } + case Up: { + localCuboid = this.expand(CuboidDirection.Down, paramInt).expand(CuboidDirection.Up, paramInt); + break; + } + case Vertical: { + localCuboid = this.outset(CuboidDirection.Horizontal, paramInt).outset(CuboidDirection.Vertical, paramInt); + break; + } + default: { + throw new IllegalArgumentException("Invalid direction " + paramCuboidDirection); + } + } + return localCuboid; + } + + public Cuboid inset(final CuboidDirection cuboidDirection, final int n) { + return this.outset(cuboidDirection, -n); + } + + public boolean contains(final int n, final int n2, final int n3) { + return n >= this.x1 && n <= this.x2 && n2 >= this.y1 && n2 <= this.y2 && n3 >= this.z1 && n3 <= this.z2; + } + + public boolean contains(final Block block) { + return this.contains(block.getLocation()); + } + + public boolean contains(final Location location) { + return this.worldName.equals(location.getWorld().getName()) && this.contains(location.getBlockX(), location.getBlockY(), location.getBlockZ()); + } + + public int getVolume() { + return this.getSizeX() * this.getSizeY() * this.getSizeZ(); + } + + public byte getAverageLightLevel() { + long l = 0L; + int i = 0; + for (final Block localBlock : this) { + if (localBlock.isEmpty()) { + l += localBlock.getLightLevel(); + ++i; + } + } + return (byte)((i > 0) ? ((byte)(l / i)) : 0); + } + + public Cuboid contract() { + return this.contract(CuboidDirection.Down).contract(CuboidDirection.South).contract(CuboidDirection.East).contract(CuboidDirection.Up).contract(CuboidDirection.North).contract(CuboidDirection.West); + } + + public Cuboid contract(final CuboidDirection paramCuboidDirection) { + Cuboid localCuboid = this.getFace(paramCuboidDirection.opposite()); + switch (paramCuboidDirection) { + case South: { + while (localCuboid.containsOnly(0) && localCuboid.getLowerY() > this.getLowerY()) { + localCuboid = localCuboid.shift(CuboidDirection.Down, 1); + } + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2, localCuboid.getUpperY(), this.z2); + } + case North: { + while (localCuboid.containsOnly(0) && localCuboid.getUpperY() < this.getUpperY()) { + localCuboid = localCuboid.shift(CuboidDirection.Up, 1); + } + return new Cuboid(this.worldName, this.x1, localCuboid.getLowerY(), this.z1, this.x2, this.y2, this.z2); + } + case Both: { + while (localCuboid.containsOnly(0) && localCuboid.getLowerX() > this.getLowerX()) { + localCuboid = localCuboid.shift(CuboidDirection.North, 1); + } + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, localCuboid.getUpperX(), this.y2, this.z2); + } + case East: { + while (localCuboid.containsOnly(0) && localCuboid.getUpperX() < this.getUpperX()) { + localCuboid = localCuboid.shift(CuboidDirection.South, 1); + } + return new Cuboid(this.worldName, localCuboid.getLowerX(), this.y1, this.z1, this.x2, this.y2, this.z2); + } + case Down: { + while (localCuboid.containsOnly(0) && localCuboid.getLowerZ() > this.getLowerZ()) { + localCuboid = localCuboid.shift(CuboidDirection.East, 1); + } + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2, this.y2, localCuboid.getUpperZ()); + } + case Horizontal: { + while (localCuboid.containsOnly(0) && localCuboid.getUpperZ() < this.getUpperZ()) { + localCuboid = localCuboid.shift(CuboidDirection.West, 1); + } + return new Cuboid(this.worldName, this.x1, this.y1, localCuboid.getLowerZ(), this.x2, this.y2, this.z2); + } + default: { + throw new IllegalArgumentException("Invalid direction " + paramCuboidDirection); + } + } + } + + public Cuboid getFace(final CuboidDirection paramCuboidDirection) { + switch (paramCuboidDirection) { + case South: { + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2, this.y1, this.z2); + } + case North: { + return new Cuboid(this.worldName, this.x1, this.y2, this.z1, this.x2, this.y2, this.z2); + } + case Both: { + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x1, this.y2, this.z2); + } + case East: { + return new Cuboid(this.worldName, this.x2, this.y1, this.z1, this.x2, this.y2, this.z2); + } + case Down: { + return new Cuboid(this.worldName, this.x1, this.y1, this.z1, this.x2, this.y2, this.z1); + } + case Horizontal: { + return new Cuboid(this.worldName, this.x1, this.y1, this.z2, this.x2, this.y2, this.z2); + } + default: { + throw new IllegalArgumentException("Invalid direction " + paramCuboidDirection); + } + } + } + + public boolean containsOnly(final int paramInt) { + for (final Block block : this) { + if (block.getTypeId() != paramInt) { + return false; + } + } + return true; + } + + public Cuboid getBoundingCuboid(final Cuboid paramCuboid) { + if (paramCuboid == null) { + return this; + } + final int i = Math.min(this.getLowerX(), paramCuboid.getLowerX()); + final int j = Math.min(this.getLowerY(), paramCuboid.getLowerY()); + final int k = Math.min(this.getLowerZ(), paramCuboid.getLowerZ()); + final int m = Math.max(this.getUpperX(), paramCuboid.getUpperX()); + final int n = Math.max(this.getUpperY(), paramCuboid.getUpperY()); + final int i2 = Math.max(this.getUpperZ(), paramCuboid.getUpperZ()); + return new Cuboid(this.worldName, i, j, k, m, n, i2); + } + + public Block getRelativeBlock(final int n, final int n2, final int n3) { + return this.getWorld().getBlockAt(this.x1 + n, this.y1 + n2, this.z1 + n3); + } + + public Block getRelativeBlock(final World world, final int n, final int n2, final int n3) { + return world.getBlockAt(this.x1 + n, this.y1 + n2, this.z1 + n3); + } + + public List getChunks() { + final ArrayList arrayList = new ArrayList(); + final World world = this.getWorld(); + final int i = this.getLowerX() & 0xFFFFFFF0; + final int j = this.getUpperX() & 0xFFFFFFF0; + final int k = this.getLowerZ() & 0xFFFFFFF0; + final int m = this.getUpperZ() & 0xFFFFFFF0; + for (int n = i; n <= j; n += 16) { + for (int i2 = k; i2 <= m; i2 += 16) { + arrayList.add(world.getChunkAt(n >> 4, i2 >> 4)); + } + } + return arrayList; + } + + @Override + public Iterator iterator() { + return new CuboidIterator(this.getWorld(), this.x1, this.y1, this.z1, this.x2, this.y2, this.z2); + } + + public Cuboid clone() { + return new Cuboid(this); + } + + @Override + public String toString() { + return new String("Cuboid: " + this.worldName + "," + this.x1 + "," + this.y1 + "," + this.z1 + "=>" + this.x2 + "," + this.y2 + "," + this.z2); + } + + public enum CuboidDirection + { + North("North", 0), + East("East", 1), + South("South", 2), + West("West", 3), + Up("Up", 4), + Down("Down", 5), + Horizontal("Horizontal", 6), + Vertical("Vertical", 7), + Both("Both", 8), + Unknown("Unknown", 9); + + private CuboidDirection(final String s, final int n) { + } + + public CuboidDirection opposite() { + switch (this) { + case Both: { + return CuboidDirection.South; + } + case Down: { + return CuboidDirection.West; + } + case East: { + return CuboidDirection.North; + } + case Horizontal: { + return CuboidDirection.East; + } + case Unknown: { + return CuboidDirection.Vertical; + } + case Up: { + return CuboidDirection.Horizontal; + } + case North: { + return CuboidDirection.Down; + } + case South: { + return CuboidDirection.Up; + } + case Vertical: { + return CuboidDirection.Both; + } + default: { + return CuboidDirection.Unknown; + } + } + } + } + + public class CuboidIterator implements Iterator + { + private World w; + private int baseX; + private int baseY; + private int baseZ; + private int x; + private int y; + private int z; + private int sizeX; + private int sizeY; + private int sizeZ; + + public CuboidIterator(final World paramWorld, final int paramInt1, final int paramInt2, final int paramInt3, final int paramInt4, final int paramInt5, final int paramInt6) { + this.w = paramWorld; + this.baseX = paramInt1; + this.baseY = paramInt2; + this.baseZ = paramInt3; + this.sizeX = Math.abs(paramInt4 - paramInt1) + 1; + this.sizeY = Math.abs(paramInt5 - paramInt2) + 1; + this.sizeZ = Math.abs(paramInt6 - paramInt3) + 1; + final boolean x = false; + this.z = (x ? 1 : 0); + this.y = (x ? 1 : 0); + this.x = (x ? 1 : 0); + } + + @Override + public boolean hasNext() { + return this.x < this.sizeX && this.y < this.sizeY && this.z < this.sizeZ; + } + + @Override + public Block next() { + final Block block = this.w.getBlockAt(this.baseX + this.x, this.baseY + this.y, this.baseZ + this.z); + if (++this.x >= this.sizeX) { + this.x = 0; + if (++this.y >= this.sizeY) { + this.y = 0; + ++this.z; + } + } + return block; + } + + @Override + public void remove() { + } + } +} diff --git a/ViperCore/src/main/java/me/dreamzy/report/utils/FakeEnchantment.java b/ViperCore/src/main/java/me/dreamzy/report/utils/FakeEnchantment.java new file mode 100644 index 0000000..2711208 --- /dev/null +++ b/ViperCore/src/main/java/me/dreamzy/report/utils/FakeEnchantment.java @@ -0,0 +1,50 @@ +package me.dreamzy.report.utils; + +import java.lang.reflect.*; +import org.bukkit.enchantments.*; +import org.bukkit.inventory.*; + +public final class FakeEnchantment extends Enchantment +{ + static { + try { + final Field field = Enchantment.class.getDeclaredField("acceptingNew"); + field.setAccessible(true); + field.set(null, true); + } + catch (Exception e) { + throw new RuntimeException("Can't register enchantment", e); + } + if (Enchantment.getByName("CA_FAKE") == null) { + Enchantment.registerEnchantment((Enchantment)new FakeEnchantment()); + } + } + + public FakeEnchantment() { + super(100); + } + + public String getName() { + return "CA_FAKE"; + } + + public int getMaxLevel() { + return 0; + } + + public int getStartLevel() { + return 0; + } + + public EnchantmentTarget getItemTarget() { + return null; + } + + public boolean conflictsWith(final Enchantment enchantment) { + return false; + } + + public boolean canEnchantItem(final ItemStack itemStack) { + return false; + } +} diff --git a/ViperCore/src/main/java/me/dreamzy/report/utils/Utils.java b/ViperCore/src/main/java/me/dreamzy/report/utils/Utils.java new file mode 100644 index 0000000..5e86dfb --- /dev/null +++ b/ViperCore/src/main/java/me/dreamzy/report/utils/Utils.java @@ -0,0 +1,37 @@ +package me.dreamzy.report.utils; + +import me.dreamzy.report.*; +import org.bukkit.*; + +public class Utils +{ + public static ViperReport plugin; + + static { + Utils.plugin = ViperReport.getInstance(); + } + + public static String color(final String msg) { + return ChatColor.translateAlternateColorCodes('&', msg); + } + + public static void msgConsole(final String message, final boolean prefix) { + Bukkit.getConsoleSender().sendMessage(color(String.valueOf(prefix ? Utils.plugin.getPrefix() : "") + message)); + } + + public static String stringifyLocation(final Location location) { + return "[" + location.getWorld().getName() + "," + location.getX() + "," + location.getY() + "," + location.getZ() + "]"; + } + + public static Location destringifyLocation(final String string) { + final String[] split = string.substring(1, string.length() - 2).split(","); + final World world = Bukkit.getWorld(split[0]); + if (world == null) { + return null; + } + final double x = Double.parseDouble(split[1]); + final double y = Double.parseDouble(split[2]); + final double z = Double.parseDouble(split[3]); + return new Location(world, x, y, z); + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/HCFactionPlugin.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/HCFactionPlugin.java new file mode 100644 index 0000000..902671b --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/HCFactionPlugin.java @@ -0,0 +1,421 @@ +package net.libhalt.bukkit.kaede; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Field; +import java.text.DecimalFormat; +import java.util.*; +import java.util.regex.Pattern; + +import cloth.bugs.FenceGateBug; +import cloth.pearls.PearlInteractEvent; +import cloth.portals.NetherPortalEvent; +import cloth.xp.XpBottleCommand; +import cloth.xp.XpBottleEvent; +import com.confinement.filter.Filter; +import com.google.common.collect.Lists; +import com.igodlik3.conquest.Conquest; +import com.igodlik3.enchantfix.EnchantFix; +import com.igodlik3.modmode.ModMode; +import com.igodlik3.stats.Stats; +import com.igodlik3.subclaims.Subclaims; +import com.igodlik3.viperfix.ViperFix; +import com.igodlik3.vipermisc.Misc; +import com.igodlik3.viperutils.ViperUtils; +import config.MyConfig; +import config.MyConfigManager; +import config.ConfigData; +import me.dreamzy.report.ViperReport; +import net.libhalt.bukkit.kaede.manager.*; +import net.libhalt.dev.plugin.armor.ArmorPlugin; +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.combattag.CombatTagManager; +import net.syuu.popura.command.faction.HomeCommand; +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Statistic; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.Configuration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.craftbukkit.v1_7_R4.SpigotTimings; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.plugin.java.JavaPlugin; + +import net.libhalt.bukkit.kaede.event.ScoreboardTextAboutToUpdateEvent; +import net.libhalt.bukkit.kaede.manager.crowbar.CrowbarManager; +import net.libhalt.bukkit.kaede.support.Support; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import net.libhalt.bukkit.kaede.utils.MilliToSecondFormatter; +import org.spigotmc.CustomTimingsHandler; + +public class HCFactionPlugin extends JavaPlugin { + + private static HCFactionPlugin INSTANCE; + public static HCFactionPlugin getInstance(){ + return INSTANCE; + } + private Map , Manager> managersMap = new LinkedHashMap , Manager>(); + private List> disabled = new ArrayList>(); + private ConfigurationWrapper lang; + private Configuration defaults; + public MyConfigManager manager = new MyConfigManager(this); + public MyConfig messages = manager.getNewConfig("messages.yml"); + public ConfigData configdata = new ConfigData(this); + + + //test + + private long since = System.currentTimeMillis(); + { + INSTANCE = this; + List managers = new ArrayList(); + managers.add(new CrowbarManager(this)); + //managers.add(new FasterTileEntityManager(this)); + managers.add(new ShopConfigManager(this)); + + managers.add(new MiscDisableManager(this)); + managers.add(new PotionLimitManager(this)); + managers.add(new EnchantmentLimitManager(this)); + managers.add(new EnderPearlManager(this)); + managers.add(new ReclaimManager(this)); + //managers.add(new KitManager(this)); + managers.add(new GlassManager(this)); + managers.add(new TabManupilator(this)); + + managers.add(new PvPTimerManager(this)); + managers.add(new DeathKillManager(this)); + managers.add(new CombatLoggerManager(this)); + managers.add(new PlayerDataManager(this)); + managers.add(new FreezeManager(this)); + managers.add(new ScoreboardManager(this)); + managers.add(new DeathBanManager(this)); + managers.add(new MobMergeListener(this)); + managers.add(new LootingManager(this)); + managers.add(new UnEnchantBookManager(this)); + managers.add(new EndWorldManager(this)); + managers.add(new FoundDiamondManager(this)); + managers.add(new WorldBorderManager(this)); + managers.add(new DeathSignManager(this)); + managers.add(new DeathMessageManager(this)); + managers.add(new CraftingDisableManager(this)); + managers.add(new EnderchestDisableManager(this)); + managers.add(new Conquest(this)); + managers.add(new Subclaims(this)); + managers.add(new Stats(this)); + managers.add(new ModMode(this)); + managers.add(new EnchantFix(this)); + managers.add(new ViperFix(this)); + managers.add(new ViperUtils(this)); + managers.add(new ViperReport(this)); + managers.add(new Misc(this)); + managers.add(new HideStreamManager(this)); + managers.add(new ArmorPlugin(this)); + managers.add(new ElevatorManager(this)); + managers.add(new GMelonManager(this)); + managers.add(new GappleManager(this)); + managers.add(new HungerFixManager(this)); + managers.add(new PotionFixManager(this)); + managers.add(new Filter(this)); + managers.add(new SwordStatTrack(this)); + + for(Manager manager : managers){ + managersMap.put(manager.getClass(), manager); + } + } + + @Override + public void onEnable() { + + configdata.setupDefaultMessages(); + + registerEvents(); + registerCommands(); + + lang = new ConfigurationWrapper("en_US.yml", this); + ConfigurationWrapper wrap = new ConfigurationWrapper("modules.yml", this); + Configuration config = wrap.getConfig(); + for(Manager manager : managersMap.values()){ + if(config.getBoolean(manager.getClass().getSimpleName().replace("Manager", "") , true)){ + try{ + manager.init(); + }catch(OutOfMemoryError rethrow){ + throw rethrow; + }catch(Throwable t){ + t.printStackTrace(); + getLogger().severe("Could not enable " + manager.getClass().getSimpleName() + "It is recommended to resolve the problem to prevent unexpected behavior."); + } + }else{ + disabled.add(manager.getClass()); + } + } + if(!isDisabled(ScoreboardManager.class)){ + this.initScoreboard(); + } + try(InputStream stream = getResource("en_US.yml"); InputStreamReader reader = new InputStreamReader(stream , "UTF-8")){ + defaults = YamlConfiguration.loadConfiguration(reader); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + Support.getInstance().register(this); + getCommand("lag").setExecutor(new CommandExecutor() { + private DecimalFormat formatter = new DecimalFormat("0.0"); + @Override + public boolean onCommand(CommandSender sendeer, Command command, String s, String[] strings) { + double[] ts = Bukkit.getServer().spigot().getTPS(); + sendeer.sendMessage(ChatColor.GOLD + "TPS from last 1m, 5m, 15m: " + ChatColor.GREEN + formatter.format(ts[0] / 1.0D) + ", " + formatter.format(ts[1]/1.0D) + ", " + formatter.format(ts[2]/ 1.0D)); + try { + CustomTimingsHandler server = SpigotTimings.serverTickTimer; + Field totalTimefield = CustomTimingsHandler.class.getDeclaredField("totalTime"); + Field countfield = CustomTimingsHandler.class.getDeclaredField("count"); + totalTimefield.setAccessible(true); + countfield.setAccessible(true); + long time = totalTimefield.getLong(server); + long count = countfield.getLong(server); + long avg = time / count; + double value = avg / 1000.0D / 1000.0D; + sendeer.sendMessage(ChatColor.GOLD + "Server has been up for " + DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - since , true , true)); + + sendeer.sendMessage(ChatColor.GOLD + "Full tick: " + ChatColor.YELLOW + formatter.format(value )+ "ms"); + + } catch (ReflectiveOperationException e) { + e.printStackTrace(); + } + + return true; + } + }); + } + + public void registerEvents() + { + Bukkit.getPluginManager().registerEvents(new PearlInteractEvent(this), this); + Bukkit.getPluginManager().registerEvents(new FenceGateBug(this), this); + Bukkit.getPluginManager().registerEvents(new NetherPortalEvent(this), this); + Bukkit.getPluginManager().registerEvents(new XpBottleEvent(this), this); + } + + public void registerCommands() + { + getCommand("bottle").setExecutor(new XpBottleCommand(this)); + } + + @Override + public void onDisable() { + for(Manager manager : managersMap.values()){ + if(!disabled.contains(manager.getClass())){ + manager.tear(); + } + } + } + + public PvPTimerManager getPvPTimerManager() { + return getManager(PvPTimerManager.class); + } + + public PlayerDataManager getPlayerDataManager() { + return getManager(PlayerDataManager.class); + } + + public boolean isDisabled(Class clazz){ + return disabled.contains(clazz); + } + @SuppressWarnings("unchecked") + public T getManager(Class clazz){ + return (T) managersMap.get(clazz); + } + public void initScoreboard() { + final ScoreboardManager scoreboardManager = getManager(ScoreboardManager.class); + scoreboardManager.init(); + getServer().getPluginManager().registerEvents(new Listener() { + @EventHandler(priority = EventPriority.MONITOR) + public void onScoreboardPreUpdate(net.syuu.common.event.ScoreboardPreRenderEvent e){ + for (String string : scoreboardManager.getConfiguredContext()) { + ScoreboardTextAboutToUpdateEvent event = new ScoreboardTextAboutToUpdateEvent(e.getPlayer(), string, scoreboardManager.isAlwaysDisplay()); + Bukkit.getPluginManager().callEvent(event); + if (event.getText() != null) { + String result = HCFactionPlugin.this.processTag(e.getPlayer(), event.getText(), scoreboardManager); + if (result != null) { + result = result.replace(Pattern.quote("|"), ""); + e.addText(result); + } + } + } + List text = Lists.newArrayList(); + String lastAdded = null; + for(String input : e.getTexts()){ + if(input == null){ + continue; + } + if(lastAdded == null){ + text.add(input); + lastAdded = input; + }else{ + if(!input.equalsIgnoreCase(lastAdded)){ + lastAdded = input; + text.add(input); + } + } + } + e.getTexts().clear(); + e.getTexts().addAll(text); + if(e.getTexts().size() <= 2){ + e.getTexts().clear(); + } + } + } , this); + } + + public String processTag(Player player, String input , ScoreboardManager manager) { + String result = input; + String str; + boolean shouldAlwaysDisplay = manager.isAlwaysDisplay(); + if (input.contains("%fhome_timer%")) { + long left = HomeCommand.INSTANCE.getFHomingUntil(player); + if (left <= 0) { + if(shouldAlwaysDisplay){ + if(manager.useDecimalForEnderPearls()){ + result = input.replace("%fhome_timer%", "0.000"); + }else{ + result = input.replace("%fhome_timer%", "00:00"); + } + }else{ + return null; + } + }else{ + /* + if(manager.useDecimalForEnderPearls()){ + result = input.replace("%fhome_timer%", MilliToSecondFormatter.format(left - System.currentTimeMillis())); + }else{ + int data = (int) (left/ 1000.0D); + int minutes = (int) (data / 60.0D); + int seconds = data % 60; + str = String.format("%d:%02d", Integer.valueOf(minutes), Integer.valueOf(seconds) ); + result = input.replace("%fhome_timer%", str); + }*/ + long value = left - System.currentTimeMillis(); + if(value < 0){ + return null; + }else { + result = input.replace("%fhome_timer%", MilliToSecondFormatter.format( value)); + } + } + } + if (input.contains("%enderpearl_time%")) { + EnderPearlManager enderPearlManager = getManager(EnderPearlManager.class); + if (!enderPearlManager.isCooldownActive(player)) { + if(shouldAlwaysDisplay){ + if(manager.useDecimalForEnderPearls()){ + result = input.replace("%enderpearl_time%", "0.000"); + }else{ + result = input.replace("%enderpearl_time%", "00:00"); + } + }else{ + return null; + } + }else{ + if(manager.useDecimalForEnderPearls()){ + result = input.replace("%enderpearl_time%", MilliToSecondFormatter.format(enderPearlManager.getMillisecondLeft(player))); + }else{ + int data = (int) (enderPearlManager.getMillisecondLeft(player) / 1000.0D); + int minutes = (int) (data / 60.0D); + int seconds = data % 60; + str = String.format("%d:%02d", Integer.valueOf(minutes), Integer.valueOf(seconds) ); + result = input.replace("%enderpearl_time%", str); + } + } + } + + if (result.contains("%spawntag_time%")) { + CombatTagManager combatTag = PopuraPlugin.getInstance().getPopura().getCombatTagManager(); + if (!combatTag.isCombatTagActive(player)) { + if(shouldAlwaysDisplay){ + if(manager.useDecimalForSpawnTag()){ + result = input.replace("%spawntag_time%", "0.000"); + }else{ + result = input.replace("%spawntag_time%", "00:00"); + } + }else{ + return null; + } + } + if(manager.useDecimalForSpawnTag()){ + result = input.replace("%spawntag_time%", MilliToSecondFormatter.format(combatTag.getMillisecondLeft(player))); + }else{ + int data = (int) (combatTag.getMillisecondLeft(player) / 1000.0D); + int minutes = (int) (data / 60.0D); + int seconds = data % 60; + str = String.format("%d:%02d", Integer.valueOf(minutes), Integer.valueOf(seconds) ); + result = input.replace("%spawntag_time%", str); + } + } + if (result.contains("%pvp_timer%")) { + PlayerData data1 = getPlayerDataManager().getPlayerData(player); + if (data1 == null || data1.getPvpTime() <= 0) { + if(shouldAlwaysDisplay){ + result = input.replace("%pvp_timer%", "0"); + }else{ + return null; + } + } + if(manager.useMinuteSeperatorForPvPTimer()){ + int data = data1.getPvpTime(); + int minutes = (int) (data / 60.0D); + int seconds = data % 60; + String format = "%d:%02d"; + if(manager.appendZeroForMinuteAsPvPTimer()){ + format = "%02d:%02d"; + } + str = String.format(format, Integer.valueOf(minutes), Integer.valueOf(seconds) ); + result = input.replace("%pvp_timer%", str); + }else{ + result = result.replace("%pvp_timer%", String.valueOf(data1.getPvpTime())); + } + } + if (result.contains("%kill%")) { + result = result.replace("%kill%", String.valueOf(player.getStatistic(Statistic.PLAYER_KILLS))); + } + if (result.contains("%death%")) { + result = result.replace("%death%", String.valueOf(player.getStatistic(Statistic.DEATHS))); + } + + return result; + } + + public static String color(String input) { + return ChatColor.translateAlternateColorCodes('&', input); + } + public String getLocalized (Player player , String key , Object... params){ + String message = key; + if(lang.getConfig().contains(key)){ + message = lang.getConfig().getString(key); + }else{ + if(defaults.contains(key)){ + lang.getConfig().set(key, defaults.get(key)); + try { + lang.getConfig().save(lang.getFile()); + } catch (IOException e) { + e.printStackTrace(); + } + message = defaults.getString(key); + }else{ + getLogger().severe("Can not find language referense for " + key); + } + } + return color(String.format(message, params)); + } + + public void sendLocalized(Player player , String key , Object... params){ + player.sendMessage(getLocalized(player, key, params)); + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/PlayerData.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/PlayerData.java new file mode 100644 index 0000000..443569f --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/PlayerData.java @@ -0,0 +1,79 @@ +package net.libhalt.bukkit.kaede; + +import com.google.common.collect.Lists; + +import java.util.List; + +public class PlayerData { + private int pvpTime; + private int kills; + private boolean killOnLogin; + private long combatTagMillisecond; + private int lives ; + private transient long createdTime; + { + createdTime = System.currentTimeMillis(); + } + public int getPvpTime() { + return this.pvpTime; + } + + + public long getCombatTagMillisecond() { + return combatTagMillisecond; + } + + + + public void setCombatTagMillisecond(long combatTagMillisecond) { + this.combatTagMillisecond = combatTagMillisecond; + } + + + + public void setPvpTime(int pvpTime) { + this.pvpTime = pvpTime; + } + + public int getKills() { + return this.kills; + } + + public void setKills(int kills) { + this.kills = kills; + } + + public boolean isKillOnLogin() { + return this.killOnLogin; + } + + public void setKillOnLogin(boolean killOnLogin) { + this.killOnLogin = killOnLogin; + } + + + + public int getLives() { + return lives; + } + + + + public void setLives(int lives) { + this.lives = lives; + } + + + + public long getCreatedTime() { + return createdTime; + } + + + + public void setCreatedTime(long createdTime) { + this.createdTime = createdTime; + } + + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/PlayerDataManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/PlayerDataManager.java new file mode 100644 index 0000000..7d5b062 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/PlayerDataManager.java @@ -0,0 +1,151 @@ +package net.libhalt.bukkit.kaede; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.UUID; + +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.faction.bean.FactionPlayer; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; + +import net.libhalt.bukkit.kaede.utils.Manager; + +public class PlayerDataManager extends Manager implements Listener { + private HashMap dataMap = new HashMap (); + private File playerDataFolder; + + public PlayerDataManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.playerDataFolder = new File(this.getPlugin().getDataFolder(), "playerdata"); + this.playerDataFolder.mkdir(); + for(Player player : Bukkit.getOnlinePlayers()){ + onLogin(player); + } + + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + } + + @Override + public void tear() { + for(Player player : Bukkit.getOnlinePlayers()){ + onLogout(player); + } + + } + + public void onLogin(Player player) { + File file = new File(this.playerDataFolder, player.getUniqueId().toString() + ".dat"); + PlayerData data = new PlayerData(); + if (file.exists()) { + YamlConfiguration dataConfig = YamlConfiguration.loadConfiguration(file); + data.setKills(dataConfig.getInt("kills")); + if(!dataConfig.contains("pvptimes")){ + data.setPvpTime(this.getPlugin().getPvPTimerManager().getDefaultPvPTimer()); + }else { + data.setPvpTime(dataConfig.getInt("pvptimes")); + } + data.setKillOnLogin(false); + data.setCombatTagMillisecond(dataConfig.getLong("combatTag" , -1L)); + data.setLives(dataConfig.getInt("lives")); + } else { + data.setPvpTime(this.getPlugin().getPvPTimerManager().getDefaultPvPTimer()); + savePlayerData(player.getUniqueId().toString(), data); + } + + this.dataMap.put(player, data); + if (data.isKillOnLogin()) { + data.setKillOnLogin(false); + player.getInventory().setContents(new ItemStack[player.getInventory().getContents().length]); + player.getInventory().setArmorContents(new ItemStack[4]); + FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + if(factionPlayer != null && factionPlayer.getFaction() != null){ + factionPlayer.getFaction().setDtr(factionPlayer.getFaction().getDtr() + 1); + } + player.setHealth(0.0D); + } + + } + + public void onLogout(Player player) { + if (this.dataMap.containsKey(player)) { + PlayerData data = this.dataMap.get(player); + savePlayerData(player.getUniqueId().toString(), data); + dataMap.remove(player); + } + + } + + public PlayerData getPlayerData(Player player) { + return this.dataMap.get(player); + } + + public PlayerData getOfflinePlayerData(String uuidString) { + UUID uuid = UUID.fromString(uuidString); + File file = new File(this.playerDataFolder, uuid.toString() + ".dat"); + PlayerData data = new PlayerData(); + if (file.exists()) { + YamlConfiguration dataConfig = YamlConfiguration.loadConfiguration(file); + data.setKills(dataConfig.getInt("kills")); + data.setPvpTime(dataConfig.getInt("pvptimes")); + data.setKillOnLogin(false); + data.setLives(dataConfig.getInt("lives")); + } else { + data.setPvpTime(this.getPlugin().getPvPTimerManager().getDefaultPvPTimer()); + } + + return data; + } + + public void savePlayerData(String uuidString, PlayerData data) { + UUID uuid = UUID.fromString(uuidString); + File file = new File(this.playerDataFolder, uuid.toString() + ".dat"); + if(!file.exists()){ + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + YamlConfiguration config = new YamlConfiguration(); + config.set("kills", Integer.valueOf(data.getKills())); + config.set("pvptimes", Integer.valueOf(data.getPvpTime())); + config.set("killOnLogin", Boolean.valueOf(data.isKillOnLogin())); + config.set("combatTag", data.getCombatTagMillisecond()); + config.set("lives" , data.getLives()); + try { + config.save(file); + } catch (IOException var7) { + var7.printStackTrace(); + } + + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerQuit(PlayerQuitEvent event) { + this.onLogout(event.getPlayer()); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onPlayerJoin(PlayerJoinEvent event) { + this.onLogin(event.getPlayer()); + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerKick(PlayerKickEvent event) { + this.onLogout(event.getPlayer()); + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/ScoreboardManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/ScoreboardManager.java new file mode 100644 index 0000000..c550e69 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/ScoreboardManager.java @@ -0,0 +1,61 @@ +package net.libhalt.bukkit.kaede; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +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.PlayerKickEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.scoreboard.Scoreboard; + +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; + +public class ScoreboardManager extends Manager implements Listener { + private ConfigurationWrapper config; + + public ScoreboardManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.config = new ConfigurationWrapper("scoreboard.yml", this.getPlugin()); + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + + + } + public boolean useDecimalForEnderPearls(){ + return config.getConfig().getBoolean("formatter.ender-pearl.use-decimals"); + } + + public boolean useDecimalForSpawnTag(){ + return config.getConfig().getBoolean("formatter.spawn-tag.use-decimals"); + } + + public boolean isTabsEnabled(){ + return config.getConfig().getBoolean("drtshock-relation-colors"); + } + public boolean isAlwaysDisplay(){ + return config.getConfig().getBoolean("always-display" , false); + } + public boolean useMinuteSeperatorForPvPTimer(){ + return config.getConfig().getBoolean("formatter.pvp-timer.use-minute-seperator" , false); + } + + public boolean appendZeroForMinuteAsPvPTimer(){ + return config.getConfig().getBoolean("formatter.pvp-timer.append-zero-for-minute" , false); + } + + public List getConfiguredContext() { + return this.config.getConfig().getStringList("context"); + } + + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/event/CombatLoggerDeathEvent.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/event/CombatLoggerDeathEvent.java new file mode 100644 index 0000000..0370e59 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/event/CombatLoggerDeathEvent.java @@ -0,0 +1,43 @@ +package net.libhalt.bukkit.kaede.event; + +import java.util.UUID; + +import org.bukkit.entity.Entity; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class CombatLoggerDeathEvent extends Event{ + private static final HandlerList handlers = new HandlerList(); + + private Entity loggerEntity; + private UUID playerUUID; + + + public CombatLoggerDeathEvent(Entity loggerEntity, UUID playerUUID) { + this.loggerEntity = loggerEntity; + this.playerUUID = playerUUID; + } + + + + public Entity getLoggerEntity() { + return loggerEntity; + } + + + + public UUID getPlayerUUID() { + return playerUUID; + } + + + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/event/ScoreboardTextAboutToUpdateEvent.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/event/ScoreboardTextAboutToUpdateEvent.java new file mode 100644 index 0000000..6363901 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/event/ScoreboardTextAboutToUpdateEvent.java @@ -0,0 +1,37 @@ +package net.libhalt.bukkit.kaede.event; + +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +public class ScoreboardTextAboutToUpdateEvent extends PlayerEvent{ + private static final HandlerList handlers = new HandlerList(); + + private String text; + private boolean shouldAlwaysDisplay; + public ScoreboardTextAboutToUpdateEvent(Player who , String text , boolean shouldAlwaysDisplay) { + super(who); + this.text = text; + this.shouldAlwaysDisplay = shouldAlwaysDisplay; + } + + + public boolean isShouldAlwaysDisplay() { + return shouldAlwaysDisplay; + } + + public String getText() { + return text; + } + public void setText(String text) { + this.text = text; + } + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/CombatLoggerManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/CombatLoggerManager.java new file mode 100644 index 0000000..6ccdf65 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/CombatLoggerManager.java @@ -0,0 +1,381 @@ +package net.libhalt.bukkit.kaede.manager; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Statistic; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Damageable; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Villager; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockRedstoneEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.world.ChunkUnloadEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import com.igodlik3.vipermisc.Misc; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.PlayerData; +import net.libhalt.bukkit.kaede.event.CombatLoggerDeathEvent; +import net.libhalt.bukkit.kaede.support.IRegion; +import net.libhalt.bukkit.kaede.support.RegionSupport; +import net.libhalt.bukkit.kaede.support.Support; +import net.libhalt.bukkit.kaede.utils.Manager; +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.faction.bean.Faction; +import net.syuu.popura.faction.bean.FactionPlayer; +import net.syuu.popura.listener.FactionListener; +import net.syuu.popura.util.ImprovedOfflinePlayer; + +public class CombatLoggerManager extends Manager implements Listener , CommandExecutor{ + private Set loggingOut = new HashSet(); + public CombatLoggerManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + getPlugin().getCommand("logout").setExecutor(this); + } + + @Override + public void tear() { + for(World world : Bukkit.getWorlds()){ + for(Entity entity : world.getEntities()){ + if (entity.hasMetadata("CombatTagFra")) { + entity.removeMetadata("CombatTagFra", this.getPlugin()); + entity.removeMetadata("Inventory", this.getPlugin()); + entity.removeMetadata("Armor", this.getPlugin()); + entity.remove(); + } + } + } + + } + + public void onLogout(Player player) { + Damageable dplayer = (Damageable) player; + if (!Misc.getInstance().getSotwManager().isSOTWActive() && dplayer.getHealth() >= 0.0D && !player.isDead() && !player.hasMetadata("SafeLogout") && !player.hasPermission("combatlogger.bypass")) { + for(RegionSupport support : Support.getInstance().getRegionSupporters()){ + for(IRegion region : support.getRegionsAt(player.getLocation())){ + if(region.shouldPvPTimerFreeze()){ + return; + } + } + } + Set allies = Support.getInstance().getEveryoneInTeam(player); + for(Entity entity : player.getNearbyEntities(4.0D , 4.0D , 4.0D)){ + if(entity instanceof Villager){ + final Villager villager1 = (Villager) entity; + if(villager1.getCustomName() != null && villager1.getCustomName().equals(player.getName())){ + return; + } + } + } + PlayerData data = getPlugin().getPlayerDataManager().getPlayerData(player); + if(data == null || data.getPvpTime() > 0){ + return; + } + for(Entity entity : player.getNearbyEntities(30.0D, 40.0D, 30.0D)){ + if (entity != player && entity instanceof Player && !allies.contains(entity)) { + final Villager villager1 = player.getWorld().spawn(player.getLocation(), Villager.class); + villager1.setCustomName(player.getName()); + villager1.setCustomNameVisible(true); + villager1.setMetadata("CombatTagFra", new FixedMetadataValue(this.getPlugin(), player.getUniqueId().toString())); + villager1.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, Integer.MAX_VALUE, 100)); + villager1.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, Integer.MAX_VALUE, 100)); + Damageable dvillager = (Damageable) villager1; + dvillager.setMaxHealth(50.0D); + villager1.setHealth(dvillager.getMaxHealth()); + villager1.setMetadata("Inventory", new FixedMetadataValue(this.getPlugin(), player.getInventory().getContents())); + villager1.setMetadata("Armor", new FixedMetadataValue(this.getPlugin(), player.getInventory().getArmorContents())); + (new BukkitRunnable() { + @Override + public void run() { + if (!villager1.isDead()) { + villager1.removeMetadata("CombatTagFra", CombatLoggerManager.this.getPlugin()); + villager1.removeMetadata("Inventory", CombatLoggerManager.this.getPlugin()); + villager1.removeMetadata("Armor", CombatLoggerManager.this.getPlugin()); + villager1.remove(); + } + + } + }).runTaskLater(this.getPlugin(), 300L); + return; + + } + } + } + } + + @EventHandler + public void onEntityDeath(EntityDeathEvent event) { + LivingEntity entity = event.getEntity(); + if (entity.hasMetadata("CombatTagFra")) { + LivingEntity villager = entity; + Player killer = event.getEntity().getKiller(); + if (killer != null) { + PlayerData items = this.getPlugin().getPlayerDataManager().getPlayerData(killer); + String armor = ChatColor.YELLOW + "(CombatLogger) " + ChatColor.RED + villager.getCustomName() + ChatColor.YELLOW + " was slain by " + ChatColor.RED + killer.getName() + ChatColor.DARK_RED + "[" + items.getKills() + "]"; + Bukkit.broadcastMessage(armor); + } else { + Bukkit.broadcastMessage(ChatColor.YELLOW + "(CombatLogger)" + ChatColor.RED + villager.getCustomName() + " died."); + } + + ItemStack[] var12 = (ItemStack[]) villager.getMetadata("Inventory").get(0).value(); + ItemStack[] var13 = (ItemStack[]) villager.getMetadata("Armor").get(0).value(); + Player died = this.getPlugin().getServer().getPlayer(villager.getCustomName()); + if (died != null) { + died.getInventory().setContents(new ItemStack[died.getInventory().getContents().length]); + died.getInventory().setArmorContents(new ItemStack[4]); + died.setHealth(0.0D); + } + + ItemStack[] var11 = var12; + int var10 = var12.length; + + ItemStack diedUUID; + int offline; + for (offline = 0; offline < var10; ++offline) { + diedUUID = var11[offline]; + if (diedUUID != null && diedUUID.getType() != Material.AIR) { + entity.getWorld().dropItemNaturally(entity.getLocation(), diedUUID); + } + } + + var11 = var13; + var10 = var13.length; + + for (offline = 0; offline < var10; ++offline) { + diedUUID = var11[offline]; + if (diedUUID != null && diedUUID.getType() != Material.AIR) { + entity.getWorld().dropItemNaturally(entity.getLocation(), diedUUID); + } + } + + String var14 = villager.getMetadata("CombatTagFra").get(0).asString(); + final UUID theUUID = UUID.fromString(var14); + final FactionPlayer killerplayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(killer); + killerplayer.setKill(killerplayer.getKill() + 1); + final FactionPlayer death = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(theUUID); + if (death != null) { + death.setDeath(death.getDeath() + 1); + final Faction faction = death.getFaction(); + if (faction != null && died == null) { + faction.freezeDTR(PopuraPlugin.getInstance().getPopura().getPopuraConfig().getDtrFreeze()); + final double dtr = faction.getDtr(); + faction.setDtr(dtr - 1.0); + faction.sendLocalizedText("FACTION_MEMBER_DEATH", death); + faction.sendLocalizedText("FACTION_DTR_CHANGE", FactionListener.formatter.format(dtr), faction); + } + } + + new BukkitRunnable(){ + @Override + public void run() { + PopuraPlugin.getInstance().getPopura().getDeathBanManager().ban(theUUID); + ImprovedOfflinePlayer improvedOfflinePlayer = new ImprovedOfflinePlayer(theUUID); + improvedOfflinePlayer.setHealthFloat(0.0F); + org.bukkit.inventory.PlayerInventory playerInventory = improvedOfflinePlayer.getInventory(); + playerInventory.clear(); + playerInventory.setArmorContents(new ItemStack[4]); + improvedOfflinePlayer.setInventory(playerInventory); + } + }.runTaskAsynchronously(getPlugin()); + PlayerData var15 = this.getPlugin().getPlayerDataManager().getOfflinePlayerData(var14); + var15.setKillOnLogin(false); + this.getPlugin().getPlayerDataManager().savePlayerData(var14, var15); + entity.getWorld().strikeLightningEffect(entity.getLocation()); + String killerName = "UNKNOWN"; + if(killer != null){ + killerName = killer.getName(); + } + if(!getPlugin().isDisabled(DeathSignManager.class)){ + entity.getWorld().dropItemNaturally(entity.getLocation(), getPlugin().getManager(DeathSignManager.class).getDeathSign(killerName, entity.getCustomName())); + } + if(!getPlugin().isDisabled(DeathKillManager.class)){ + PlayerData killerData = getPlugin().getPlayerDataManager().getPlayerData(killer); + killerData.setKills(killerData.getKills() + 1); + killer.setStatistic(Statistic.PLAYER_KILLS, killerData.getKills()); + } + + CombatLoggerDeathEvent newEevent = new CombatLoggerDeathEvent(entity, UUID.fromString(var14)); + + getPlugin().getServer().getPluginManager().callEvent(newEevent); + } + + } + + public void onBlockRedstoneChange(BlockRedstoneEvent event) + { + if(event.getBlock().getType() == Material.STONE_PLATE ) + { + boolean pressedByPlayer=false; + for(Entity e : event.getBlock().getChunk().getEntities()) + { + + if( + Location.locToBlock(e.getLocation().getX()) - event.getBlock().getX() <= 1 && + Location.locToBlock(e.getLocation().getZ()) - event.getBlock().getZ() <= 1 && + e instanceof Player + ) + { + pressedByPlayer = true; + break; + } + + } + if(!pressedByPlayer) + { + event.setNewCurrent(0); + } + } + } + @EventHandler + public void onPlayerInteractEntity(PlayerInteractEntityEvent event) { + if (event.getRightClicked().hasMetadata("CombatTagFra")) { + event.setCancelled(true); + } + + } + + @EventHandler + public void onChunkUnload(ChunkUnloadEvent event) { + for(Entity entity : event.getChunk().getEntities()){ + if (entity.hasMetadata("CombatTagFra") && !entity.isDead()) { + event.setCancelled(true); + } + } + + } + + @EventHandler + public void onEntityDamageByEntity(final EntityDamageByEntityEvent event){ + if(event.getEntity().hasMetadata("CombatTagFra")){ + String var14 = event.getEntity().getMetadata("CombatTagFra").get(0).asString(); + if(event.getDamager() instanceof Player){ + Player player = (Player) event.getDamager(); + FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + if(factionPlayer != null && factionPlayer.getFaction() != null){ + for(FactionPlayer others : factionPlayer.getFaction().getPlayers()){ + if(others.getUuid().toString().equals(var14)){ + event.setCancelled(true); + break; + } + } + } + } + new BukkitRunnable() { + @Override + public void run() { + event.getEntity().setVelocity(new Vector()); + } + }.runTask(getPlugin()); + } + } + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + for(Entity entity : event.getPlayer().getWorld().getEntitiesByClass(Villager.class)){ + Villager villager = (Villager) entity; + if (villager.isCustomNameVisible() && villager.getCustomName().equals(event.getPlayer().getName())) { + villager.removeMetadata("CombatTagFra", this.getPlugin()); + villager.removeMetadata("Inventory", this.getPlugin()); + villager.removeMetadata("Armor", this.getPlugin()); + villager.remove(); + } + } + + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + this.onLogout(event.getPlayer()); + + if(event.getPlayer().hasMetadata("SafeLogout")){ + event.getPlayer().removeMetadata("SafeLogout", getPlugin()); + } + } + + @EventHandler + public void onPlayerKick(PlayerKickEvent event) { + this.onLogout(event.getPlayer()); + } + + @EventHandler + public void onPlayerMove(PlayerMoveEvent event){ + Location to = event.getTo(); + Location from = event.getFrom(); + if(to.getBlockX() != from.getBlockX() || to.getBlockZ() != from.getBlockZ()){ + if(loggingOut.contains(event.getPlayer())){ + loggingOut.remove(event.getPlayer()); + event.getPlayer().sendMessage(ChatColor.RED + "Your safe logout was cancelled due to block movement."); + } + } + } + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage(ChatColor.RED + "Only players"); + return true; + } + final Player player = (Player)sender; + if(loggingOut.contains(player)){ + player.sendMessage(ChatColor.GREEN + "Already Logging Out!"); + return true; + } + loggingOut.add(player); + player.sendMessage(ChatColor.GREEN + "You are logging out in 30 second!"); + new BukkitRunnable() { + int timer = 30; + @Override + public void run() { + if(!player.isOnline() || !loggingOut.contains(player)){ + cancel(); + return; + } + Damageable dplayer = (Damageable) player; + if(dplayer.getHealth() < dplayer.getMaxHealth()){ + player.sendMessage(ChatColor.RED + "Safe Logout Cancelled. Health not max"); + loggingOut.remove(player); + cancel(); + return; + + } + if(timer <= 0){ + player.setMetadata("SafeLogout", new FixedMetadataValue(getPlugin(), true)); + player.kickPlayer(ChatColor.GREEN + "Safe Logout"); + cancel(); + return; + } + timer--; + player.sendMessage(ChatColor.GREEN + "Logging out: " + timer + " seconds"); + } + }.runTaskTimer(getPlugin(), 20, 20); + return false; + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/CraftingDisableManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/CraftingDisableManager.java new file mode 100644 index 0000000..6ed4aa2 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/CraftingDisableManager.java @@ -0,0 +1,61 @@ +package net.libhalt.bukkit.kaede.manager; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.PrepareItemCraftEvent; +import org.bukkit.inventory.ItemStack; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; + +public class CraftingDisableManager extends Manager implements Listener{ + + private ConfigurationWrapper config; + private Map> disabledCrafting = new HashMap<>(); + public CraftingDisableManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + config = new ConfigurationWrapper("disable-crafting.yml", getPlugin()); + reload(); + getPlugin().getServer().getPluginManager().registerEvents(this, getPlugin()); + + } + + @Override + public void reload() { + disabledCrafting.clear(); + ConfigurationSection section = config.getConfig().getConfigurationSection("disabled-crafting"); + for(String key : section.getKeys(false)){ + List bytes = section.getShortList(key); + Material material = null; + try{ + material = Material.valueOf(key);; + }catch(IllegalArgumentException e){ + getPlugin().getLogger().severe("While reading CraftingDisabled, " + key + " could not be parased as material"); + continue; + } + disabledCrafting.put(material, bytes); + } + } + + + @EventHandler + public void onCraft(PrepareItemCraftEvent event){ + ItemStack item = event.getInventory().getResult(); + if(disabledCrafting.containsKey(item.getType()) && disabledCrafting.get(item.getType()).contains(item.getDurability())){ + event.getInventory().setResult(new ItemStack(Material.AIR)); + } + } + + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/DeathBanManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/DeathBanManager.java new file mode 100644 index 0000000..980b996 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/DeathBanManager.java @@ -0,0 +1,394 @@ +package net.libhalt.bukkit.kaede.manager; + +import java.io.File; +import java.io.IOException; +import java.util.*; +import java.util.Map.Entry; + +import com.google.common.collect.Lists; +import net.libhalt.dev.plugin.armor.utils.Color; +import net.syuu.popura.PopuraPlugin; +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionDefault; +import org.bukkit.scheduler.BukkitRunnable; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.PlayerData; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; + +public class DeathBanManager extends Manager implements Listener , CommandExecutor { + private ConfigurationWrapper config; + private long deathBan; + private File plDataFolder; + private Map deathBanByPerm = new HashMap(); + private int limit; + private List messageLives = Lists.newArrayList(); + private List messageHelpLive = Lists.newArrayList(); + public DeathBanManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.config = new ConfigurationWrapper("death-bans.yml", this.getPlugin()); + this.plDataFolder = new File(this.getPlugin().getDataFolder(), "deathbans"); + this.plDataFolder.mkdirs(); + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + this.reload(); + getPlugin().getCommand("lives").setExecutor(this); + } + + @Override + public void reload() { + this.deathBanByPerm.clear(); + limit = this.config.getConfig().getInt("live-limit" , 100); + if(this.config.getConfig().contains("death-ban-by-perm")){ + ConfigurationSection section = this.config.getConfig().getConfigurationSection("death-ban-by-perm"); + for(String string : section.getKeys(false)){ + this.deathBanByPerm.put(this.config.getConfig().getString("death-ban-by-perm." + string) , Integer.valueOf(string)); + if(getPlugin().getServer().getPluginManager().getPermission(string) == null){ + Permission perm = new Permission(string, PermissionDefault.FALSE); + getPlugin().getServer().getPluginManager().addPermission(perm); + } + } + } + this.deathBan = this.config.getConfig().getLong("death-ban") * 1000L; + + + messageLives = Color.translate(config.getConfig().getStringList("message-live")); + messageHelpLive = Color.translate(config.getConfig().getStringList("message-help-live")); + } + + @EventHandler + public void onAsyncPlayerLogin(AsyncPlayerPreLoginEvent event) { + final UUID uuid = event.getUniqueId(); + File file = new File(this.plDataFolder, uuid.toString() + ".yml"); + PlayerData offlineData = getPlugin().getPlayerDataManager().getOfflinePlayerData(uuid.toString()); + if (file.exists()) { + YamlConfiguration data = YamlConfiguration.loadConfiguration(file); + long until = data.getLong("ban_until"); + if (System.currentTimeMillis() < until) { + long left = until - System.currentTimeMillis(); + if(!PopuraPlugin.getInstance().getPopura().isEotw() && offlineData.getLives() > 0){ + + offlineData.setLives(offlineData.getLives() - 1); + data.set("ban_until", 0L); + file.delete(); + getPlugin().getPlayerDataManager().savePlayerData(uuid.toString(), offlineData); + new BukkitRunnable() { + + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if(player != null){ + PlayerData data = getPlugin().getPlayerDataManager().getPlayerData(player); + getPlugin().sendLocalized(player, "NOTIFICATION_LIVE_CONSUMED", String.valueOf(data.getLives())); + } + } + }.runTaskLater(getPlugin(), 100); + + return; + } + event.setKickMessage(getPlugin().getLocalized(null, "DEATH_BANNED", DurationFormatUtils.formatDurationWords(left, true, true))); + event.setLoginResult(Result.KICK_BANNED); + } else { + file.delete(); + } + } + + } + + public long getDeathBan(Player player){ + if(PopuraPlugin.getInstance().getPopura().isEotw()){ + return 1000 * 60 * 24 * 356; + } + long ban = deathBan; + for(Entry entry : deathBanByPerm.entrySet()){ + if(entry.getValue() * 1000L < ban && player.hasPermission(entry.getKey())){ + ban = entry.getValue() * 1000L; + } + } + return ban; + } + @EventHandler + public void onPlayerDeath(final PlayerDeathEvent event) { + (new BukkitRunnable() { + @Override + public void run() { + DeathBanManager.this.ban(event.getEntity()); + } + }).runTaskLater(this.getPlugin(), 10L); + } + + public void ban(Player player) { + File file = new File(this.plDataFolder, player.getUniqueId().toString() + ".yml"); + if (!file.exists()) { + try { + file.createNewFile(); + } catch (IOException var6) { + var6.printStackTrace(); + } + } + + YamlConfiguration data = YamlConfiguration.loadConfiguration(file); + long duration = getDeathBan(player); + data.set("ban_until", Long.valueOf(System.currentTimeMillis() + duration)); + + try { + data.save(file); + } catch (IOException var5) { + var5.printStackTrace(); + } + + player.kickPlayer(ChatColor.RED + "You are deathbanned for " + DurationFormatUtils.formatDurationWords(duration, true, true)); + } + + @Override + public boolean onCommand(final CommandSender sender, Command arg1, String arg2, String[] args) { + if(args.length == 0){ + if(sender instanceof Player){ + Player player = ((Player)sender); + PlayerData data = getPlugin().getPlayerDataManager().getPlayerData(player); + for(String message : messageLives){ + player.sendMessage(message.replace("%live%" , String.valueOf(data.getLives()))); + } + }else { + sender.sendMessage(ChatColor.GREEN + "Note: use /lives help for list of command"); + } + }else if(args[0].equalsIgnoreCase("help")){ + for(String message : messageHelpLive){ + sender.sendMessage(message); + } + }else if(args[0].equalsIgnoreCase("check")){ + if(args.length < 2){ + sender.sendMessage(ChatColor.RED + "/lives check - check the live of player. works only for online player"); + return true; + } + String name = args[1]; + Player target = Bukkit.getPlayer(name); + if(target == null){ + sender.sendMessage(ChatColor.RED + "That player is not online"); + return true; + } + int lives = getPlugin().getPlayerDataManager().getPlayerData(target).getLives(); + sender.sendMessage(ChatColor.GREEN + target.getName() + " has " + lives + " lives left."); + }else if(args[0].equalsIgnoreCase("set")){ + if(!sender.hasPermission("live.admin")){ + sender.sendMessage(ChatColor.RED + "No Permission"); + return true; + + } + if(args.length < 3){ + sender.sendMessage(ChatColor.RED + "/lives set - set the live of target by name. works only for online players"); + return true; + } + final String name = args[1]; + final String input = args[2]; + final Player target = Bukkit.getPlayer(name); + final int amount; + try{ + amount = Integer.valueOf(input); + }catch(IllegalArgumentException e){ + sender.sendMessage(ChatColor.RED + input + " does not look like a integer to me."); + return true; + } + + if (amount > limit) { + sender.sendMessage(ChatColor.RED + "Too many lives. Limit is " + limit); + return true; + } + if(target == null){ + final int famount = amount; + new BukkitRunnable() { + @Override + public void run() { + final UUID uuid = Bukkit.getOfflinePlayer(name).getUniqueId(); + new BukkitRunnable() { + @Override + public void run() { + PlayerData data = getPlugin().getPlayerDataManager().getOfflinePlayerData(uuid.toString()); + data.setLives(famount); + sender.sendMessage(ChatColor.GREEN + name + "'s live is now " + data.getLives()); + getPlugin().getPlayerDataManager().savePlayerData(uuid.toString(), data); + } + }.runTask(getPlugin()); + } + }.runTaskAsynchronously(getPlugin()); + }else { + PlayerData data = getPlugin().getPlayerDataManager().getPlayerData(target); + data.setLives(amount); + sender.sendMessage(ChatColor.GREEN + target.getName() + "'s live is now " + data.getLives()); + } + }else if(args[0].equalsIgnoreCase("add")){ + if(/*!sender.hasPermission("live.admin") || */sender instanceof Player){ + sender.sendMessage(ChatColor.RED + "No Permission"); + return true; + } + if(args.length < 3){ + sender.sendMessage(ChatColor.RED + "/lives add - adds live by name. only online players"); + return true; + } + final String name = args[1]; + String input = args[2]; + Player target = Bukkit.getPlayer(name); + int amount = 0; + try{ + amount = Integer.valueOf(input); + }catch(IllegalArgumentException e){ + sender.sendMessage(ChatColor.RED + input + " does not look like a integer to me."); + return true; + } + if(target != null){ + PlayerData data = getPlugin().getPlayerDataManager().getPlayerData(target); + + if(data.getLives() + amount > limit){ + sender.sendMessage(ChatColor.RED + "You have too many lives. Limit is " + limit); + return true; + } + data.setLives(data.getLives() + amount); + sender.sendMessage(ChatColor.GREEN + target.getName() + "'s live is now " + data.getLives()); + }else{ + final int famount = amount; + new BukkitRunnable() { + + @Override + public void run() { + final UUID uuid = Bukkit.getOfflinePlayer(name).getUniqueId(); + new BukkitRunnable() { + + @Override + public void run() { + PlayerData data = getPlugin().getPlayerDataManager().getOfflinePlayerData(uuid.toString()); + + if(data.getLives() + famount > limit){ + sender.sendMessage(ChatColor.RED + "You have too many lives. Limit is " + limit); + return; + } + data.setLives(data.getLives() + famount); + sender.sendMessage(ChatColor.GREEN + name + "'s live is now " + data.getLives()); + getPlugin().getPlayerDataManager().savePlayerData(uuid.toString(), data); + } + }.runTask(getPlugin()); + } + }.runTaskAsynchronously(getPlugin()); + } + }else if(args[0].equalsIgnoreCase("send")){ + if(!(sender instanceof Player)){ + sender.sendMessage(ChatColor.RED + "Must be player to send lives"); + return true; + } + if(!sender.hasPermission("live.send")){ + sender.sendMessage(ChatColor.RED + "No Permission"); + return true; + } + if(args.length < 3){ + sender.sendMessage(ChatColor.RED + "/lives send "); + return true; + } + final String name = args[1]; + String input = args[2]; + Player target = Bukkit.getPlayer(name); + int amount = 0; + try{ + amount = Integer.valueOf(input); + }catch(IllegalArgumentException e){ + sender.sendMessage(ChatColor.RED + input + " does not look like a integer to me."); + return true; + } + + final PlayerData self = getPlugin().getPlayerDataManager().getPlayerData((Player) sender); + if(self.getLives() < amount || amount <= 0){ + sender.sendMessage(ChatColor.RED + "Not enough lives"); + return true; + } + if(target != null){ + PlayerData data = getPlugin().getPlayerDataManager().getPlayerData(target); + if(data.getLives() + amount > limit){ + sender.sendMessage(ChatColor.RED + "You have too many lives. Limit is " + limit); + return true; + } + self.setLives(self.getLives() - amount); + data.setLives(data.getLives() + amount); + sender.sendMessage(ChatColor.GREEN + "Successfuly send lives to " + target.getName() + ". " + target.getName() + " now has " + data.getLives() + " lives left."); + }else{ + final int famount = amount; + new BukkitRunnable() { + + @Override + public void run() { + final UUID uuid = Bukkit.getOfflinePlayer(name).getUniqueId(); + new BukkitRunnable() { + + @Override + public void run() { + PlayerData data = getPlugin().getPlayerDataManager().getOfflinePlayerData(uuid.toString()); + if(data.getLives() + famount > limit){ + sender.sendMessage(ChatColor.RED + "You have too many lives. Limit is " + limit); + return; + } + self.setLives(self.getLives() - famount); + data.setLives(data.getLives() + famount); + sender.sendMessage(ChatColor.GREEN + name + "'s live is now " + data.getLives()); + getPlugin().getPlayerDataManager().savePlayerData(uuid.toString(), data); + } + }.runTask(getPlugin()); + } + }.runTaskAsynchronously(getPlugin()); + } + }else if(args[0].equalsIgnoreCase("revive")){ + if(!sender.hasPermission("live.admin") && !sender.hasPermission("live.revive")){ + sender.sendMessage(ChatColor.RED + "No Permission"); + return true; + } + if(args.length < 2){ + sender.sendMessage(ChatColor.RED + "/lives revive "); + return true; + } + final String name = args[1]; + Player target = Bukkit.getPlayer(name); + + + if(target != null){ + File file = new File(this.plDataFolder, target.getUniqueId().toString() + ".yml"); + file.delete(); + sender.sendMessage(ChatColor.GREEN + "Revived that person successfully"); + }else{ + new BukkitRunnable() { + + @Override + public void run() { + final UUID uuid = Bukkit.getOfflinePlayer(name).getUniqueId(); + new BukkitRunnable() { + @Override + public void run() { + File file = new File(plDataFolder, uuid.toString() + ".yml"); + file.delete(); + sender.sendMessage(ChatColor.GREEN + "Revived that person successfully"); + } + }.runTask(getPlugin()); + } + }.runTaskAsynchronously(getPlugin()); + } + } + return true; + } + + + + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/DeathKillManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/DeathKillManager.java new file mode 100644 index 0000000..996afe8 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/DeathKillManager.java @@ -0,0 +1,55 @@ +package net.libhalt.bukkit.kaede.manager; + +import org.bukkit.Statistic; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.PlayerData; +import net.libhalt.bukkit.kaede.utils.Manager; + +public class DeathKillManager extends Manager implements Listener { + public DeathKillManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + } + + @EventHandler(priority = EventPriority.LOW) + public void onDeath(PlayerDeathEvent event) { + Player died = event.getEntity(); + PlayerData data = getPlugin().getPlayerDataManager().getPlayerData(died); + if(System.currentTimeMillis() - data.getCreatedTime() < 10000){ + return; + } + Player killer = died.getKiller(); + died.getWorld().strikeLightningEffect(died.getLocation()); + if (killer != null) { + PlayerData killerData = this.getPlugin().getPlayerDataManager().getPlayerData(killer); + PlayerData diedData = this.getPlugin().getPlayerDataManager().getPlayerData(died); + killerData.setKills(killerData.getKills() + 1); + killer.setStatistic(Statistic.PLAYER_KILLS, killerData.getKills()); + /* + String message = ChatColor.RED + died.getName() + ChatColor.DARK_RED + "[" + diedData.getKills() + "] " + ChatColor.YELLOW + "was slain by " + ChatColor.RED + killer.getName() + ChatColor.DARK_RED + "[" + killerData.getKills() + "]"; + if (killer.getItemInHand() != null) { + ItemStack item = killer.getItemInHand(); + String name; + if (item.getItemMeta().hasDisplayName()) { + name = item.getItemMeta().getDisplayName(); + } else { + name = item.getType().name().toLowerCase().replace("_", " "); + } + + message = message + ChatColor.YELLOW + " using a " + ChatColor.RED + name; + } + + event.setDeathMessage(message); + */ + } + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/DeathMessageManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/DeathMessageManager.java new file mode 100644 index 0000000..dc08f4f --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/DeathMessageManager.java @@ -0,0 +1,136 @@ +package net.libhalt.bukkit.kaede.manager; + +import org.apache.commons.lang.WordUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.PlayerData; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; + +public class DeathMessageManager extends Manager implements Listener{ + + private ConfigurationWrapper config; + public DeathMessageManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + config = new ConfigurationWrapper("death-messages.yml", getPlugin()); + getPlugin().getServer().getPluginManager().registerEvents(this, getPlugin()); + } + + public String tranlasteAndGet(String message){ + return ChatColor.translateAlternateColorCodes('&', config.getConfig().getString(message)); + } + + + public String toReadable(ItemStack item){ + if(item.hasItemMeta()){ + ItemMeta meta = item.getItemMeta(); + if(meta.hasDisplayName()){ + return meta.getDisplayName(); + } + } + return toReadable(item.getType()); + } + public String toReadable(Enum enu){ + return WordUtils.capitalize(enu.name().replace("_", " ").toLowerCase()); + } + + @EventHandler + public void onEntityDeath(PlayerDeathEvent event){ + Player player = event.getEntity(); + DamageCause cause = player.getLastDamageCause() == null ? DamageCause.CUSTOM : player.getLastDamageCause().getCause(); + if(!config.getConfig().contains(cause.name())){ + cause = DamageCause.CUSTOM; + } + String message = null; + if(cause == DamageCause.ENTITY_ATTACK){ + if(player.getLastDamageCause() instanceof EntityDamageByEntityEvent){ + EntityDamageByEntityEvent damageEvent = (EntityDamageByEntityEvent) player.getLastDamageCause(); + if(damageEvent.getDamager() instanceof Player){ + Player damager = (Player) damageEvent.getDamager(); + if(damager.getItemInHand() != null && damager.getItemInHand().getType() != Material.AIR){ + message = tranlasteAndGet("ENTITY_ATTACK.PLAYER"); + message = message.replace("{killer.hand}", toReadable(damager.getItemInHand())); + + }else{ + message = tranlasteAndGet("ENTITY_ATTACK.PLAYER_NOITEM"); + } + PlayerData data = getPlugin().getPlayerDataManager().getPlayerData(damager); + if (data != null) { + message = message.replace("{killer}", damager.getName()); + message = message.replace("{killer.kills}", String.valueOf(data.getKills())); + } + }else{ + message = tranlasteAndGet("ENTITY_ATTACK.ENTITY"); + message = message.replace("{killer}", toReadable(damageEvent.getDamager().getType())); + } + }else{ + message = tranlasteAndGet("ENTITY_ATTACK.ENTITY"); + message = message.replace("{killer}", "Unknown"); + } + }else if(cause == DamageCause.PROJECTILE){ + if(player.getLastDamageCause() instanceof EntityDamageByEntityEvent){ + EntityDamageByEntityEvent damageEvent = (EntityDamageByEntityEvent) player.getLastDamageCause(); + if(damageEvent.getDamager() instanceof Projectile){ + Projectile projectile = (Projectile) damageEvent.getDamager(); + if(projectile.getShooter() instanceof Player){ + + Player damager = (Player) projectile.getShooter(); + if(damager.getItemInHand() != null && damager.getItemInHand().getType() != Material.AIR){ + message = tranlasteAndGet("PROJECTILE.PLAYER"); + message = message.replace("{killer.hand}", toReadable(damager.getItemInHand())); + + }else{ + message = tranlasteAndGet("PROJECTILE.PLAYER_NOITEM"); + } + PlayerData data = getPlugin().getPlayerDataManager().getPlayerData(damager); + message = message.replace("{killer}", damager.getName()); + message = message.replace("{killer.kills}", String.valueOf(data.getKills())); + }else if(projectile.getShooter() instanceof Entity){ + message = tranlasteAndGet("PROJECTILE.ENTITY"); + message = message.replace("{killer}", toReadable(((Entity)projectile.getShooter()).getType())); + }else{ + + message = tranlasteAndGet("PROJECTILE.ENTITY"); + message = message.replace("{killer}", "Unknown"); + } + }else{ + message = tranlasteAndGet("PROJECTILE.ENTITY"); + message = message.replace("{killer}", "Unknown"); + + } + }else{ + message = tranlasteAndGet("ENTITY_ATTACK.ENTITY"); + message = message.replace("{killer}", "Unknown"); + } + }else if(cause == DamageCause.CUSTOM){ + message = tranlasteAndGet("UNKNOWN"); + + }else if(cause != null){ + message = tranlasteAndGet(cause.name()); + } + if(message != null){ + message = message.replace("{player}", player.getName()); + PlayerData data = getPlugin().getPlayerDataManager().getPlayerData(player); + message = message.replace("{player.kills}", String.valueOf(data.getKills())); + event.setDeathMessage(message); + Bukkit.getLogger().info(message); + } + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/DeathSignManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/DeathSignManager.java new file mode 100644 index 0000000..0e85fb0 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/DeathSignManager.java @@ -0,0 +1,120 @@ +package net.libhalt.bukkit.kaede.manager; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.HashMap; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.block.BlockState; +import org.bukkit.block.Sign; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.scheduler.BukkitRunnable; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.PlayerData; +import net.libhalt.bukkit.kaede.utils.ItemStackUtils; +import net.libhalt.bukkit.kaede.utils.Manager; +public class DeathSignManager extends Manager implements Listener{ + + private static final DateFormat dateFormat = new SimpleDateFormat("MM/dd hh:mm:ss"); + public DeathSignManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + } + @EventHandler(ignoreCancelled = true , priority = EventPriority.MONITOR) + public void onBlockBreak(BlockBreakEvent event){ + BlockState blockState = event.getBlock().getState(); + if(blockState instanceof Sign){ + final Sign sign = (Sign) blockState; + if(sign.getLine(0).startsWith(ChatColor.RED.toString())){ + if(sign.getLine(1).startsWith(ChatColor.YELLOW.toString())){ + if(sign.getLine(2).startsWith(ChatColor.GREEN.toString())){ + if(sign.getLine(3).startsWith(ChatColor.BLACK.toString())){ + event.getBlock().setType(Material.AIR); + ItemStack item = new ItemStack(Material.SIGN); + ItemStackUtils.setItemTitle(item , sign.getLine(0) + "'s Death Sign"); + ItemStackUtils.setItemLore(item, Arrays.asList(new String[]{sign.getLine(1) , sign.getLine(2) , sign.getLine(3)})); + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), item); + + } + } + } + } + } + } + + @EventHandler + public void onBlockPlace(BlockPlaceEvent event){ + ItemStack item = event.getItemInHand(); + final Player player = event.getPlayer(); + if(item != null && item.getType() == Material.SIGN){ + BlockState blockState = event.getBlock().getState(); + if(blockState instanceof Sign){ + ItemMeta meta = item.getItemMeta(); + final Sign sign = (Sign) blockState; + if(meta.hasDisplayName() && meta.hasLore()){ + String display = item.getItemMeta().getDisplayName(); + if(display.startsWith(ChatColor.RED.toString()) && display.endsWith("'s Death Sign")){ + sign.setLine(0, display.replace("'s Death Sign", "")); + sign.setLine(1, meta.getLore().get(0)); + sign.setLine(2, meta.getLore().get(1)); + sign.setLine(3, meta.getLore().get(2)); + new BukkitRunnable() { + + @Override + public void run() { + player.closeInventory(); + } + }.runTask(getPlugin()); + new BukkitRunnable() { + + @Override + public void run() { + sign.update(); + } + }.runTaskLater(getPlugin() , 10); + } + } + } + } + } + + @EventHandler(priority =EventPriority.LOW ) + public void onPlayerDeath(PlayerDeathEvent event){ + Player died = event.getEntity(); + String killer = "Unknown"; + PlayerData data = getPlugin().getPlayerDataManager().getPlayerData(died); + if(System.currentTimeMillis() - data.getCreatedTime() < 10000){ + return; + } + if(died.getKiller() != null){ + killer = died.getKiller().getName(); + HashMap over = died.getKiller().getInventory().addItem(getDeathSign(killer, died.getName())); + for (ItemStack item : over.values()) { + died.getKiller().getWorld().dropItem(died.getKiller().getLocation(), item); + } + }else{ + died.getWorld().dropItemNaturally(died.getLocation(), getDeathSign(killer, died.getName())); + } + } + public ItemStack getDeathSign(String killer, String death ){ + ItemStack sign = new ItemStack(Material.SIGN); + ItemStackUtils.setItemTitle(sign, ChatColor.RED + death + "'s Death Sign"); + ItemStackUtils.setItemLore(sign, Arrays.asList(new String[] {ChatColor.YELLOW + "Slain by" , ChatColor.GREEN + killer , ChatColor.BLACK + dateFormat.format(System.currentTimeMillis())})); + return sign; + } + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/ElevatorManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/ElevatorManager.java new file mode 100644 index 0000000..ebd6aa3 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/ElevatorManager.java @@ -0,0 +1,149 @@ +package net.libhalt.bukkit.kaede.manager; + +import com.igodlik3.vipermisc.utils.Utils; +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Manager; +import net.syuu.popura.Popura; +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.claim.Position2D; +import net.syuu.popura.combattag.CombatTagManager; +import net.syuu.popura.faction.bean.ClaimedRegion; +import net.syuu.popura.faction.bean.Faction; +import net.syuu.popura.faction.bean.FactionPlayer; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.Sign; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Vehicle; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.SignChangeEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.vehicle.VehicleExitEvent; +import org.bukkit.scheduler.BukkitRunnable; + +public class ElevatorManager extends Manager implements Listener +{ + private HCFactionPlugin core; + public ElevatorManager(final HCFactionPlugin plugin) { + super(plugin); + this.core = HCFactionPlugin.getInstance(); + } + + @Override + public void init() { + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + } + + @EventHandler + public void onPlayerInteract(final PlayerInteractEvent event) { + final Player player = event.getPlayer(); + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + final Block b = event.getClickedBlock(); + if (!this.isInTerritory(player, b.getLocation())) { + return; + } + if (b.getType() == Material.SIGN || b.getType() == Material.SIGN_POST || b.getType() == Material.WALL_SIGN) { + final Sign s = (Sign)b.getState(); + if (s.getLines().length >= 2) { + if (s.getLine(0).equalsIgnoreCase(ChatColor.BLUE + "[Elevator]") && s.getLine(1).equalsIgnoreCase(ChatColor.GREEN + "Up")) { + + final Location l = b.getLocation(); + Location downSignLocation = null; + for (int i = l.getBlockY() + 1; i <= 256; ++i) { + final Location testLocation = new Location(l.getWorld(), (double)l.getBlockX(), (double)i, (double)l.getBlockZ()); + final Block testBlock = testLocation.getBlock(); + if (testBlock.getType() == Material.SIGN || testBlock.getType() == Material.SIGN_POST || testBlock.getType() == Material.WALL_SIGN) { + final Sign testSign = (Sign)testBlock.getState(); + if (testSign.getLines().length >= 2) { + if (testSign.getLine(0).equalsIgnoreCase(ChatColor.BLUE + "[Elevator]") && testSign.getLine(1).equalsIgnoreCase(ChatColor.GREEN + "Down")) { + downSignLocation = testBlock.getLocation(); + break; + } + if (testSign.getLine(0).equalsIgnoreCase(ChatColor.BLUE + "[Elevator]") && testSign.getLine(1).equalsIgnoreCase(ChatColor.GREEN + "Up")) { + downSignLocation = null; + break; + } + } + } + } + if (downSignLocation == null) { + event.getPlayer().sendMessage(ChatColor.RED + "I was not able to locate the upper floor!"); + event.getPlayer().sendMessage(ChatColor.RED + "Make sure that the [Elevator] Down sign is above this one!"); + } + else { + + if(PopuraPlugin.getInstance().getPopura().getCombatTagManager().isCombatTagActive(player)){ + event.getPlayer().sendMessage(ChatColor.RED + "You can not do this while in combat."); + return; + } + event.getPlayer().teleport(downSignLocation.add(0.5, 0.0, 0.5)); + } + } + else if (s.getLine(0).equalsIgnoreCase(ChatColor.BLUE + "[Elevator]") && s.getLine(1).equalsIgnoreCase(ChatColor.GREEN + "Down")) { + final Location l = b.getLocation(); + Location upSignLocation = null; + for (int i = l.getBlockY() - 1; i >= 0; --i) { + final Location testLocation = new Location(l.getWorld(), (double)l.getBlockX(), (double)i, (double)l.getBlockZ()); + final Block testBlock = testLocation.getBlock(); + if (testBlock.getType() == Material.SIGN || testBlock.getType() == Material.SIGN_POST || testBlock.getType() == Material.WALL_SIGN) { + final Sign testSign = (Sign)testBlock.getState(); + if (testSign.getLines().length >= 1) { + if (testSign.getLine(0).equalsIgnoreCase(ChatColor.BLUE + "[Elevator]") && testSign.getLine(1).equalsIgnoreCase(ChatColor.GREEN + "Down")) { + upSignLocation = null; + break; + } + if (testSign.getLine(0).equalsIgnoreCase(ChatColor.BLUE + "[Elevator]") && testSign.getLine(1).equalsIgnoreCase(ChatColor.GREEN + "Up")) { + upSignLocation = testBlock.getLocation(); + break; + } + } + } + } + if (upSignLocation == null) { + event.getPlayer().sendMessage(ChatColor.RED + "I was not able to locate the lower floor!"); + event.getPlayer().sendMessage(ChatColor.RED + "Make sure that the [Elevator] Up sign is below this one!"); + } else { + + if(PopuraPlugin.getInstance().getPopura().getCombatTagManager().isCombatTagActive(player)){ + event.getPlayer().sendMessage(ChatColor.RED + "You can not do this while in combat."); + return; + } + event.getPlayer().teleport(upSignLocation.add(0.5, 0.0, 0.5)); + } + } + } + } + } + } + + @EventHandler + public void onSignChange(final SignChangeEvent event) { + if (event.getLines().length >= 2 && event.getLine(0).equalsIgnoreCase("[Elevator]")) { + event.setLine(0, ChatColor.BLUE + "[Elevator]"); + if (event.getLine(1).equalsIgnoreCase("Up")) { + event.setLine(1, ChatColor.GREEN + "Up"); + } + else if (event.getLine(1).equalsIgnoreCase("Down")) { + event.setLine(1, ChatColor.GREEN + "Down"); + } + else { + event.setLine(1, ChatColor.RED + event.getLine(1)); + } + } + } + + private boolean isInTerritory(final Player player, final Location location) { + ClaimedRegion claimedRegion = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getClaimedRegionAt(new Position2D(location.getWorld().getName() , location.getBlockX() , location.getBlockZ())); + if(claimedRegion == null){ + return false; + } + final FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + return claimedRegion.getOwner().getPlayers().contains(factionPlayer); + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/EnchantmentLimitManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/EnchantmentLimitManager.java new file mode 100644 index 0000000..608e78d --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/EnchantmentLimitManager.java @@ -0,0 +1,193 @@ +package net.libhalt.bukkit.kaede.manager; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.enchantment.EnchantItemEvent; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.inventory.InventoryType.SlotType; +import org.bukkit.event.player.PlayerFishEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.EnchantmentStorageMeta; +import org.bukkit.inventory.meta.ItemMeta; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; + +public class EnchantmentLimitManager extends Manager implements Listener { + private ConfigurationWrapper config; + private Map enchantmentLimits = new HashMap(); + private boolean checkExsitingItem = false; + public EnchantmentLimitManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.config = new ConfigurationWrapper("enchantment-limiter.yml", this.getPlugin()); + this.reload(); + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + } + + @Override + public void reload() { + checkExsitingItem = this.config.getConfig().getBoolean("remove-invalid-enchantments" , false); + this.enchantmentLimits.clear(); + for(String string : this.config.getConfig().getConfigurationSection("enchantment-limit").getKeys(false)){ + int limit = this.config.getConfig().getInt("enchantment-limit." + string, Integer.MIN_VALUE); + if (limit == Integer.MIN_VALUE) { + this.getPlugin().getLogger().warning("Illegal level found for " + string + " in enchantment-limiter"); + } else { + Enchantment enchantment = null; + + try { + enchantment = Enchantment.getByName(string.toUpperCase()); + } catch (IllegalArgumentException var6) { + this.getPlugin().getLogger().warning("Illegal enchantment " + string + " found in enchantment-limiter"); + continue; + } + if(enchantment == null){ + this.getPlugin().getLogger().warning("Null Enchantment at " + string); + + } + + this.enchantmentLimits.put(enchantment, Integer.valueOf(limit)); + } + } + + } + + @EventHandler + public void onPlayerFish(PlayerFishEvent event){ + if(event.getCaught() instanceof Item){ + Item item = (Item) event.getCaught(); + ItemStack stack = item.getItemStack(); + if(apply(stack , true)){ + item.setItemStack(stack); + } + } + } + @EventHandler + public void onItemPickup(PlayerPickupItemEvent event) { + if (event.getItem() != null && this.apply(event.getItem().getItemStack())) { + getPlugin().sendLocalized(event.getPlayer() , "ILLGEL_ENCHANTMENT"); + } + + } + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) { + if (this.apply(event.getItem())) { + getPlugin().sendLocalized(event.getPlayer() , "ILLGEL_ENCHANTMENT"); + } + + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + if(event.getSlotType() == SlotType.RESULT && event.getClickedInventory().getType() == InventoryType.ANVIL){ + Inventory inventory = event.getInventory(); + if (this.apply(event.getCursor() , true) || this.apply(event.getCurrentItem() , true)) { + getPlugin().sendLocalized((Player)event.getWhoClicked(), "ILLGEL_ENCHANTMENT"); + } + }else if (this.apply(event.getCursor()) || this.apply(event.getCurrentItem())) { + getPlugin().sendLocalized((Player)event.getWhoClicked(), "ILLGEL_ENCHANTMENT"); + } + + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onEntityDeath(EntityDeathEvent event){ + if(event.getEntity() instanceof Player){ + return; + } + for(ItemStack item : event.getDrops()){ + apply(item , true); + } + } + @EventHandler + public void onEnchantItem(EnchantItemEvent event){ + Iterator> iter = event.getEnchantsToAdd().entrySet().iterator(); + boolean applied = false; + while(iter.hasNext()){ + Entry value = iter.next(); + if(this.enchantmentLimits.containsKey(value.getKey())){ + int max = this.enchantmentLimits.get(value.getKey()); + if(value.getValue() > max){ + value.setValue(max); + applied = true; + } + if(value.getValue() <= 0){ + iter.remove(); + } + } + } + + } + public boolean apply(ItemStack stack){ + return this.apply(stack , false); + } + + public boolean apply(ItemStack stack , boolean force) { + if (stack == null) { + return false; + } else { + if(!force && !checkExsitingItem && stack.getType() != Material.ENCHANTED_BOOK){ + return false; + } + ItemMeta meta = stack.getItemMeta(); + boolean applied = false; + if(meta instanceof EnchantmentStorageMeta){ + EnchantmentStorageMeta enchantmentStorage = (EnchantmentStorageMeta) meta; + for(Enchantment enchantment : this.enchantmentLimits.keySet()){ + if(enchantmentStorage.hasEnchant(enchantment)){ + int level = enchantmentStorage.getStoredEnchantLevel(enchantment); + if (this.enchantmentLimits.containsKey(enchantment)) { + int max = this.enchantmentLimits.get(enchantment).intValue(); + if (level > max) { + applied = true; + enchantmentStorage.removeStoredEnchant(enchantment); + if(max > 0){ + enchantmentStorage.addStoredEnchant(enchantment, max , true); + } + } + } + } + } + stack.setItemMeta(enchantmentStorage); + } + for(Enchantment enchantment : this.enchantmentLimits.keySet()){ + if(stack.containsEnchantment(enchantment)){ + int level = stack.getEnchantmentLevel(enchantment); + if (this.enchantmentLimits.containsKey(enchantment)) { + int max = this.enchantmentLimits.get(enchantment).intValue(); + if (level > max) { + applied = true; + stack.removeEnchantment(enchantment); + if(max > 0){ + stack.addUnsafeEnchantment(enchantment, max); + } + } + } + } + } + + return applied; + } + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/EndWorldManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/EndWorldManager.java new file mode 100644 index 0000000..965abad --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/EndWorldManager.java @@ -0,0 +1,168 @@ +package net.libhalt.bukkit.kaede.manager; + +import net.libhalt.bukkit.kaede.PlayerData; +import org.bukkit.*; +import org.bukkit.World.Environment; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityTeleportEvent; +import org.bukkit.event.player.PlayerChangedWorldEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; + +import java.io.IOException; + +public class EndWorldManager extends Manager implements Listener { + private Vector leave; + private float leaveYaw; + private float leavePitch; + private Vector enter; + + private float enterYaw; + private float enterPitch; + private ConfigurationWrapper config; + + public EndWorldManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.config = new ConfigurationWrapper("world-end.yml", this.getPlugin()); + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + this.getPlugin().getCommand("setendexit").setExecutor(new CommandExecutor() { + @Override + public boolean onCommand(CommandSender sender, Command command, String s, String[] args) { + Player player = ((Player)sender); + leave = player.getLocation().toVector(); + leaveYaw = player.getLocation().getYaw(); + leavePitch = player.getLocation().getPitch(); + config.getConfig().set("end-exit" , leave.getBlockX() + "," + leave.getBlockY() + "," + leave.getBlockZ() + "," + leaveYaw + "," + leavePitch); + try { + config.getConfig().save(config.getFile()); + } catch (IOException e) { + e.printStackTrace(); + } + player.sendMessage("End exit set"); + return true; + } + }); + this.getPlugin().getCommand("setendspawn").setExecutor(new CommandExecutor() { + @Override + public boolean onCommand(CommandSender sender, Command command, String s, String[] args) { + Player player = ((Player)sender); + enter = player.getLocation().toVector(); + enterYaw = player.getLocation().getYaw(); + enterPitch = player.getLocation().getPitch(); + config.getConfig().set("end-spawn" , enter.getBlockX() + "," + enter.getBlockY() + "," + enter.getBlockZ() + "," + enterYaw + "," + enterPitch); + try { + config.getConfig().save(config.getFile()); + } catch (IOException e) { + e.printStackTrace(); + } + player.sendMessage("End spawn set"); + + return true; + } + }); + this.reload(); + } + + + @Override + public void reload() { + + String string = this.config.getConfig().getString("end-exit"); + String[] result = string.split(","); + leave = new Vector(Integer.valueOf(result[0]).intValue() , Integer.valueOf(result[1]).intValue() , Integer.valueOf(result[2]).intValue()); + leaveYaw = Float.valueOf(result[3]); + leavePitch = Float.valueOf(result[4]); + + YamlConfiguration actualConfig = YamlConfiguration.loadConfiguration(this.config.getFile()); + if(actualConfig.contains("end-spawn")){ + String enter = actualConfig.getString("end-spawn"); + String[] resultenter = enter.split(","); + this.enter = new Vector(Integer.valueOf(resultenter[0]).intValue() , Integer.valueOf(resultenter[1]).intValue() , Integer.valueOf(resultenter[2]).intValue()); + enterYaw = Float.valueOf(result[3]); + + enterPitch = Float.valueOf(result[4]); + } + } + @EventHandler + public void onWorldTeleport(final PlayerChangedWorldEvent event){ + + new BukkitRunnable(){ + @Override + public void run() { + PlayerData data = getPlugin().getPlayerDataManager().getPlayerData(event.getPlayer()); + if (data.getPvpTime() > 0) { + return; + } + final World world = getWorld(World.Environment.THE_END); + if(event.getPlayer().getWorld() == world){ + event.getPlayer().teleport(enter.toLocation(world, enterYaw, enterPitch)); + } + } + }.runTaskLater(getPlugin() , 1); + } + @EventHandler + public void onWorldChange(final PlayerTeleportEvent event){ + if(event.getTo().getWorld() != event.getFrom().getWorld()){ + PlayerData data = this.getPlugin().getPlayerDataManager().getPlayerData(event.getPlayer()); + if (data.getPvpTime() > 0) { + event.getPlayer().sendMessage(ChatColor.RED + "You may not change world while pvp timer is enabled."); + event.setCancelled(true); + return; + } + } + } + @EventHandler + public void onPlayerMove(final PlayerMoveEvent event) { + final Location from = event.getFrom(); + final Location to = event.getTo(); + final Player player = event.getPlayer(); + if ((from.getBlockX() != to.getBlockX() || from.getBlockZ() != to.getBlockZ() || from.getBlockY() != to.getBlockY())) { + World.Environment environment = player.getWorld().getEnvironment(); + if (environment == World.Environment.NORMAL) { + if (player.getLocation().getBlock().getType() == Material.ENDER_PORTAL) { + + + PlayerData data = this.getPlugin().getPlayerDataManager().getPlayerData(event.getPlayer()); + if (data.getPvpTime() > 0) { + return; + } + final World world = this.getWorld(World.Environment.THE_END); + player.teleport(enter.toLocation(world, enterYaw, enterPitch)); + } + }else if(environment == World.Environment.THE_END) { + if( (player.getLocation().add(0.0, -1.0, 0.0).getBlock().getType() == Material.STATIONARY_WATER || player.getLocation().getBlock().getType() == Material.STATIONARY_WATER)) { + + final World world = this.getWorld(World.Environment.NORMAL); + player.teleport(leave.toLocation(world ,leaveYaw , leavePitch)); + + } + } + } + } + + public World getWorld(final World.Environment environment) { + for (final World world : Bukkit.getWorlds()) { + if (world.getEnvironment() == environment) { + return world; + } + } + return null; + } + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/EnderPearlManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/EnderPearlManager.java new file mode 100644 index 0000000..5708ddc --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/EnderPearlManager.java @@ -0,0 +1,97 @@ +package net.libhalt.bukkit.kaede.manager; + +import java.util.HashMap; +import java.util.Map; + +import net.syuu.common.utils.PlayerUtils; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.Event.Result; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; + +public class EnderPearlManager extends Manager implements Listener { + + public static Map expire = new HashMap(); + private ConfigurationWrapper config; + private long cooldownDuration = 10000L; + + public EnderPearlManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.config = new ConfigurationWrapper("cooldowns.yml", this.getPlugin()); + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + reload(); + } + + @Override + public void reload() { + this.cooldownDuration = this.config.getConfig().getInt("enderpearl-cooldown") * 1000L; + } + + public long getMillisecondLeft(Player player) { + return this.expire.containsKey(player) ? Math.max(this.expire.get(player).longValue() - System.currentTimeMillis(), 0L) : 0L; + } + + public static boolean isCooldownActive(Player player) { + return EnderPearlManager.expire.containsKey(player) ? System.currentTimeMillis() < EnderPearlManager.expire.get(player).longValue() : false; + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + this.expire.remove(event.getPlayer()); + } + + @EventHandler + public void onPlayerKick(PlayerKickEvent event) { + this.expire.remove(event.getPlayer()); + } + + @EventHandler(priority = EventPriority.MONITOR ) + public void onPlayerTeleport(PlayerTeleportEvent event){ + if(event.getCause() == PlayerTeleportEvent.TeleportCause.ENDER_PEARL) { + if (event.isCancelled() || event.getTo().equals(event.getFrom())) { + this.expire.remove(event.getPlayer()); + } + } + } + @EventHandler(priority = EventPriority.MONITOR ) + public void onPlayerInteract(PlayerInteractEvent event) { + if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.hasItem() && event.getItem().getType() == Material.ENDER_PEARL) { + final Block block = event.getClickedBlock(); + if (block.getType().isSolid() && !(block.getState() instanceof InventoryHolder)) { + return; + } + } + Action action = event.getAction(); + if (event.hasItem() && event.getItem().getType() == Material.ENDER_PEARL && (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK)) { + Player player = event.getPlayer(); + PlayerUtils.updateInventory(player); + + if (this.isCooldownActive(player)) { + event.setUseItemInHand(Result.DENY); + int time = (int) (this.getMillisecondLeft(player) / 1000.0D); + getPlugin().sendLocalized(player, "ENDERPEARL_COOLDOWN", String.valueOf(time)); + } else { + this.expire.put(player, Long.valueOf(System.currentTimeMillis() + this.cooldownDuration)); + } + } + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/EnderchestDisableManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/EnderchestDisableManager.java new file mode 100644 index 0000000..83b4a43 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/EnderchestDisableManager.java @@ -0,0 +1,29 @@ +package net.libhalt.bukkit.kaede.manager; + +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Manager; + +public class EnderchestDisableManager extends Manager implements Listener { + public EnderchestDisableManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + } + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) { + if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock().getType() == Material.ENDER_CHEST && !event.getPlayer().hasPermission("disabled.bypass.enderchest")) { + event.setCancelled(true); + } + + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/FasterTileEntityManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/FasterTileEntityManager.java new file mode 100644 index 0000000..f8d8710 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/FasterTileEntityManager.java @@ -0,0 +1,116 @@ +package net.libhalt.bukkit.kaede.manager; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.BlockState; +import org.bukkit.block.BrewingStand; +import org.bukkit.block.Furnace; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.inventory.FurnaceBurnEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.scheduler.BukkitRunnable; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; + +public class FasterTileEntityManager /*extends Manager implements Listener */{ + /* + private ConfigurationWrapper config; + private Map activeStands = new HashMap(); + private int brewingStandMultipliar; + private int furnaceMultipliar; + + public FasterTileEntityManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.config = new ConfigurationWrapper("tile-entity-multiplier.yml", this.getPlugin()); + this.reload(); + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + (new FasterTileEntityManager.BrewingUpdateTask()).runTaskTimer(this.getPlugin(), 1L, 1L); + } + + @Override + public void reload() { + this.brewingStandMultipliar = this.config.getConfig().getInt("potionbrewer-speed-multiplier") - 1; + this.furnaceMultipliar = this.config.getConfig().getInt("furnace-speed-multiplier") - 1; + } + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) { + if (this.brewingStandMultipliar > 1 && event.getAction() == Action.RIGHT_CLICK_BLOCK) { + BlockState state = event.getClickedBlock().getState(); + if (state instanceof BrewingStand) { + this.activeStands.put(state.getLocation(), (BrewingStand) state); + } + } + + } + + @EventHandler + public void onFurnaceBurn(FurnaceBurnEvent event) { + BlockState state = event.getBlock().getState(); + if (this.furnaceMultipliar > 1 && state instanceof Furnace) { + (new FasterTileEntityManager.FurnaceUpdateTask((Furnace) state)).runTaskTimer(this.getPlugin(), 1L, 1L); + } + + } + + public class BrewingUpdateTask extends BukkitRunnable { + @Override + public void run() { + Iterator> iter = FasterTileEntityManager.this.activeStands.entrySet().iterator(); + + while (iter.hasNext()) { + Entry entry = iter.next(); + if ((!entry.getValue().getChunk().isLoaded() ) || entry.getKey().getBlock().getType() != Material.BREWING_STAND) { + iter.remove(); + } else { + BrewingStand stand = entry.getValue(); + if (stand.getBrewingTime() > 1) { + stand.setBrewingTime(Math.max(1, stand.getBrewingTime() - FasterTileEntityManager.this.brewingStandMultipliar)); + } + } + } + + } + } + + public class FurnaceUpdateTask extends BukkitRunnable { + private Furnace furnace; + + public FurnaceUpdateTask(Furnace furnace) { + this.furnace = furnace; + } + + @Override + public void run() { + if(furnace.getLocation().getBlock().getType() != Material.BURNING_FURNACE && furnace.getLocation().getBlock().getType() != Material.FURNACE ){ + this.cancel(); + return; + } + if (this.furnace.getBurnTime() <= 1) { + this.cancel(); + return; + } + this.furnace.setCookTime((short) (this.furnace.getCookTime() + FasterTileEntityManager.this.furnaceMultipliar)); + this.furnace.setBurnTime((short) Math.max(1, this.furnace.getBurnTime() - FasterTileEntityManager.this.furnaceMultipliar)); + this.furnace.update(); + if (this.furnace.getBurnTime() <= 1) { + this.cancel(); + } + + } + } + */ +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/FoundDiamondManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/FoundDiamondManager.java new file mode 100644 index 0000000..b66cd22 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/FoundDiamondManager.java @@ -0,0 +1,96 @@ +package net.libhalt.bukkit.kaede.manager; + +import com.google.common.collect.Sets; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.metadata.FixedMetadataValue; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Manager; + +import java.util.Set; +import java.util.UUID; + +public class FoundDiamondManager extends Manager implements Listener { + private FixedMetadataValue tag; + private Set noNotifications = Sets.newHashSet(); + + public FoundDiamondManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + this.tag = new FixedMetadataValue(this.getPlugin(), Boolean.TRUE); + getPlugin().getCommand("td").setExecutor(new CommandExecutor() { + @Override + public boolean onCommand(CommandSender sender, Command command, String s, String[] strings) { + UUID uuid = ((Player)sender).getUniqueId(); + if(noNotifications.contains(uuid)){ + noNotifications.remove(uuid); + getPlugin().sendLocalized((Player)sender , "FOUND_DIAMOND_NOTIFICATION_ON"); + }else{ + noNotifications.add(uuid); + getPlugin().sendLocalized((Player)sender , "FOUND_DIAMOND_NOTIFICATION_OFF"); + } + return false; + } + }); + } + + @EventHandler + public void onPlayerQUit(PlayerQuitEvent event){ + noNotifications.remove(event.getPlayer().getUniqueId()); + } + @EventHandler(priority = EventPriority.MONITOR) + public void onBlockPlace(BlockPlaceEvent event) { + Block block = event.getBlock(); + if (block.getType() == Material.DIAMOND_ORE) { + block.setMetadata("PlacedBlock", this.tag); + } + + } + + @EventHandler + public void onBlockBreak(BlockBreakEvent event) { + Block base = event.getBlock(); + if (base.getType() == Material.DIAMOND_ORE && !base.hasMetadata("PlacedBlock")) { + int total = 0; + + for (int x = -3; x < 4; ++x) { + for (int y = -3; y < 4; ++y) { + for (int z = -3; z < 4; ++z) { + Block block = event.getBlock().getRelative(x, y, z); + if (block.getType() == Material.DIAMOND_ORE && !block.hasMetadata("PlacedBlock")) { + ++total; + block.setMetadata("PlacedBlock", this.tag); + } + } + } + } + for(Player player : Bukkit.getOnlinePlayers()){ + if(!noNotifications.contains(player.getUniqueId())){ + if(total <= 1){ + player.sendMessage("[FD] " + ChatColor.AQUA + event.getPlayer().getName() + " found " + total + " diamond."); + }else { + player.sendMessage("[FD] " + ChatColor.AQUA + event.getPlayer().getName() + " found " + total + " diamonds."); + } + } + } + } + + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/FreezeManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/FreezeManager.java new file mode 100644 index 0000000..55524cb --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/FreezeManager.java @@ -0,0 +1,158 @@ +package net.libhalt.bukkit.kaede.manager; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.PotionSplashEvent; +import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.scheduler.BukkitRunnable; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Manager; + +public class FreezeManager extends Manager implements Listener, CommandExecutor { + private List frozen = new ArrayList(); + + public FreezeManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + (new BukkitRunnable() { + @Override + public void run() { + for(Player player : frozen){ + player.sendMessage(ChatColor.WHITE + "\u2588\u2588\u2588\u2588" + ChatColor.RED + "\u2588" + ChatColor.WHITE + "\u2588\u2588\u2588\u2588"); + player.sendMessage(ChatColor.WHITE + "\u2588\u2588\u2588" + ChatColor.RED + "\u2588" + ChatColor.GOLD + ChatColor.BLACK + "\u2588" + ChatColor.GOLD + ChatColor.RED + "\u2588" + ChatColor.WHITE + "\u2588\u2588\u2588"); + player.sendMessage(ChatColor.WHITE + "\u2588\u2588" + ChatColor.RED + "\u2588" + ChatColor.GOLD + "\u2588" + ChatColor.BLACK + "\u2588" + ChatColor.GOLD + "\u2588" + ChatColor.RED + "\u2588" + ChatColor.WHITE + "\u2588\u2588"); + player.sendMessage(ChatColor.WHITE + "\u2588\u2588" + ChatColor.RED + "\u2588" + ChatColor.GOLD + "\u2588" + ChatColor.BLACK + "\u2588" + ChatColor.GOLD + "\u2588" + ChatColor.RED + "\u2588" + ChatColor.WHITE + "\u2588\u2588 " + getPlugin().getLocalized(player, "FREEZE_MESSAGE")); + player.sendMessage(ChatColor.WHITE + "\u2588\u2588" + ChatColor.RED + "\u2588" + ChatColor.GOLD + "\u2588" + ChatColor.BLACK + "\u2588" + ChatColor.GOLD + "\u2588" + ChatColor.RED + "\u2588" + ChatColor.WHITE + "\u2588\u2588" + getPlugin().getLocalized(player, "FREEZE_MESSAGE_LINE2")); + player.sendMessage(ChatColor.WHITE + "\u2588" + ChatColor.RED + "\u2588" + ChatColor.GOLD + "\u2588\u2588\u2588" + ChatColor.BLACK + ChatColor.GOLD + "\u2588\u2588" + ChatColor.RED + "\u2588" + ChatColor.WHITE + "\u2588"); + player.sendMessage(new StringBuilder().append(ChatColor.WHITE).append(ChatColor.RED).append("\u2588").append(ChatColor.GOLD).append("\u2588\u2588\u2588").append(ChatColor.BLACK).append("\u2588").append(ChatColor.GOLD).append("\u2588\u2588\u2588").append(ChatColor.RED).append("\u2588").append(ChatColor.WHITE).toString()); + player.sendMessage(ChatColor.RED + "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588"); + } + + } + }).runTaskTimer(this.getPlugin(), 100L, 100L); + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + this.getPlugin().getCommand("ss").setExecutor(this); + } + + @EventHandler + public void onMove(PlayerMoveEvent event) { + Location from = event.getFrom(); + Location to = event.getTo(); + if ((from.getX() != to.getX() || from.getZ() != to.getZ()) && this.frozen.contains(event.getPlayer())) { + event.setTo(event.getFrom()); + } + + } + @EventHandler + public void onProjectileLaunch(ProjectileLaunchEvent event){ + if(frozen.contains(event.getEntity().getShooter())){ + event.setCancelled(true); + } + } + @EventHandler + public void onEntityDamageByEntity(EntityDamageByEntityEvent event){ + if(frozen.contains(event.getEntity())){ + event.setCancelled(true); + } + if(frozen.contains(event.getDamager())){ + event.setCancelled(true); + } + if (event.getDamager() instanceof Projectile) { + Projectile projectile1 = (Projectile) event.getDamager(); + if (projectile1.getShooter() instanceof Player) { + Player player = (Player) projectile1.getShooter(); + if(frozen.contains(player)){ + event.setCancelled(true); + } + } + } + } + @EventHandler + public void onPlayerTelport(PlayerTeleportEvent event){ + if(event.getCause() == TeleportCause.ENDER_PEARL && this.frozen.contains(event.getPlayer())){ + event.setTo(event.getFrom()); + } + } + + @EventHandler + public void onSplash(PotionSplashEvent event) { + if(!frozen.isEmpty()){ + try { + Field eventField = PotionSplashEvent.class.getDeclaredField("affectedEntities"); + eventField.setAccessible(true); + Map affectedEntities = (Map)eventField.get(event); + Iterator iterator = affectedEntities.entrySet().iterator(); + while(iterator.hasNext()) { + Entry entry = (Entry)iterator.next(); + if(frozen.contains(entry.getKey())) { + iterator.remove(); + } + } + eventField.set(event, affectedEntities); + }catch(Exception exception) { + } + } + + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + this.frozen.remove(event.getPlayer()); + } + + @EventHandler + public void onPlayerKick(PlayerKickEvent event) { + this.frozen.remove(event.getPlayer()); + } + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if (sender.hasPermission("command.ss.use")) { + if (args.length == 0) { + sender.sendMessage(ChatColor.RED + "/ss "); + } else { + Player player = this.getPlugin().getServer().getPlayer(args[0]); + if (player == null) { + sender.sendMessage(ChatColor.RED + args[0] + " is not online"); + return true; + } + + if (!this.frozen.contains(player)) { + sender.sendMessage(ChatColor.RED + "You have frozen " + player.getName()); + this.frozen.add(player); + } else { + sender.sendMessage(ChatColor.RED + "You have un-frozen " + player.getName()); + this.frozen.remove(player); + } + } + } else { + sender.sendMessage(ChatColor.RED + "No Permission"); + } + + return true; + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/GMelonManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/GMelonManager.java new file mode 100644 index 0000000..6994bb5 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/GMelonManager.java @@ -0,0 +1,37 @@ +package net.libhalt.bukkit.kaede.manager; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Manager; +import org.bukkit.Material; +import org.bukkit.Server; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.ShapelessRecipe; + +public class GMelonManager extends Manager implements Listener { + public GMelonManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + + final Server server = getPlugin().getServer(); + final ShapelessRecipe gmelon = new ShapelessRecipe(new ItemStack(Material.SPECKLED_MELON)); + gmelon.addIngredient(1, Material.GOLD_NUGGET); + gmelon.addIngredient(1, Material.MELON); + server.addRecipe((Recipe)gmelon); + ShapedRecipe shapedRecipe = new ShapedRecipe(new ItemStack(Material.GOLDEN_APPLE)); + shapedRecipe.shape(" G " , "GAG" , " G "); + shapedRecipe.setIngredient('G' , Material.GOLD_INGOT); + shapedRecipe.setIngredient('A' , Material.APPLE); + server.addRecipe(shapedRecipe); + } + + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/GappleManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/GappleManager.java new file mode 100644 index 0000000..4e8ed23 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/GappleManager.java @@ -0,0 +1,80 @@ +package net.libhalt.bukkit.kaede.manager; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.Server; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; +import org.bukkit.inventory.ShapelessRecipe; + +import java.util.HashMap; + +public class GappleManager extends Manager implements Listener , CommandExecutor { + private HashMap player_cooldown; + private ConfigurationWrapper config; + + public YamlConfiguration getConfig(){ + return config.getConfig(); + } + public GappleManager(HCFactionPlugin plugin) { + super(plugin); + this.player_cooldown = new HashMap(); + } + + @Override + public void init() { + getPlugin().getServer().getPluginManager().registerEvents(this , getPlugin()); + this.config = new ConfigurationWrapper("gapple.yml", this.getPlugin()); + getPlugin().getCommand("gapplecooldown").setExecutor(this); + } + + public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) { + final Player p = (Player)sender; + if (!sender.hasPermission("gapplecooldown.version")) { + p.sendMessage(ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("NoPermission message"))); + } + else if (sender.hasPermission("gapplecooldown.version")) { + p.sendMessage("This server is running GappleCooldown " + ChatColor.RED + "v1.0.1" + ChatColor.RESET + "."); + } + return false; + } + + @EventHandler + public void Gapple_Cooldown(final PlayerItemConsumeEvent e) { + final Player p = e.getPlayer(); + final ItemStack apple = new ItemStack(Material.GOLDEN_APPLE, 1, (short)1); + if (e.getItem().getType().equals((Object)Material.GOLDEN_APPLE) && e.getItem().getData().equals((Object)apple.getData())) { + if (!this.player_cooldown.containsKey(p.getName())) { + this.player_cooldown.put(p.getName(), false); + e.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("Eat message"))); + } + if (!this.player_cooldown.get(p.getName())) { + Bukkit.getScheduler().runTaskLater(getPlugin(), (Runnable)new Runnable() { + @Override + public void run() { + player_cooldown.put(p.getName(), false); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', getConfig().getString("Expiry message"))); + } + }, (long)(this.getConfig().getInt("Cooldown time") * 1200)); + this.player_cooldown.put(p.getName(), true); + } + else { + e.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("Cooldown message"))); + e.setCancelled(true); + } + } + } + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/GlassManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/GlassManager.java new file mode 100644 index 0000000..a8a4ea2 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/GlassManager.java @@ -0,0 +1,275 @@ +package net.libhalt.bukkit.kaede.manager; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.PlayerData; +import net.libhalt.bukkit.kaede.support.IRegion; +import net.libhalt.bukkit.kaede.support.RegionSupport; +import net.libhalt.bukkit.kaede.support.Support; +import net.libhalt.bukkit.kaede.support.builtin.ShockDTRFactionRegion; +import net.libhalt.bukkit.kaede.utils.Manager; +import net.syuu.common.command.CommandRegistry; +import net.syuu.common.command.annotation.SimpleCommand; +import net.syuu.popura.Popura; +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.claim.Position2D; +import net.syuu.popura.faction.FactionType; +import net.syuu.popura.faction.bean.ClaimedRegion; +import net.syuu.popura.faction.bean.Faction; +import net.syuu.popura.faction.bean.FactionPlayer; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class GlassManager extends Manager implements Listener +{ + private Map> pvpTagCaches = Maps.newHashMap(); + private Map> combatTagCaches = Maps.newHashMap(); + private Faction orecave = null; + + public GlassManager(HCFactionPlugin plugin) { + super(plugin); + } + + public void init(){ + getPlugin().getServer().getPluginManager().registerEvents(this , getPlugin()); + new BukkitRunnable(){ + @Override + public void run() { + refetchAndCache(); + } + }.runTaskLater(getPlugin() , 5); + new BukkitRunnable(){ + @Override + public void run() { + refetchAndCache(); + } + }.runTaskLater(getPlugin() , 300); + CommandRegistry.getInstance().registerSimpleCommand(this); + } + @SimpleCommand(name = "glassplayermap" , requireop = true) + public void send (Player player , String[] args){ + player.sendMessage(combatTagCaches.containsKey(player.getUniqueId()) ? combatTagCaches.get(player.getUniqueId()).toString() : "null"); + player.sendMessage(pvpTagCaches.containsKey(player.getUniqueId()) ? pvpTagCaches.get(player.getUniqueId()).toString() : "null"); + + } + + public void refetchAndCache(){ + pvpTagCaches = Maps.newHashMap(); + combatTagCaches = Maps.newHashMap(); + orecave= PopuraPlugin.getInstance().getPopura().getFactionDataManager().getFaction("OreCave"); + + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event){ + combatTagCaches.remove(event.getPlayer().getUniqueId()); + pvpTagCaches.remove(event.getPlayer().getUniqueId()); + } + + public void calculateAndCache(Player player) { + List cached = Lists.newArrayList(); + List combatCached = Lists.newArrayList(); + + for (ClaimedRegion claimedRegion : PopuraPlugin.getInstance().getPopura().getFactionDataManager().getClaimedRegions()) { + if(claimedRegion.getWorld().equals(player.getWorld().getName())) { + Location location = player.getLocation(); + Location regionMaxLocation = location.clone(); + Location regionMinLocation = location.clone(); + regionMaxLocation.setX(claimedRegion.getMaxX()); + regionMaxLocation.setZ(claimedRegion.getMaxZ()); + regionMinLocation.setX(claimedRegion.getMinX()); + regionMinLocation.setZ(claimedRegion.getMinZ()); + if(location.distanceSquared(regionMaxLocation) < Math.pow(16 * 12 , 2) || location.distanceSquared(regionMinLocation) < Math.pow(16 * 12 , 2)) { + ShockDTRFactionRegion region = new ShockDTRFactionRegion(claimedRegion); + if (!region.canPvPTimedPlayerEnter((FactionPlayer) null)) { + cached.add(region); + } + if(!region.canCombatTagedPlayerEnter()){ + combatCached.add(region); + } + } + } + } + combatTagCaches.put(player.getUniqueId() , combatCached); + pvpTagCaches.put(player.getUniqueId() , cached); + } + @EventHandler + public void onRegionCacheInvalidate(net.syuu.popura.event.RegionCacheInvalidateEvent event){ + refetchAndCache(); + } + @EventHandler + public void onPlayerTeleport(final PlayerTeleportEvent event) { + if (event.getCause() == PlayerTeleportEvent.TeleportCause.ENDER_PEARL) { + this.onPlayerMoved((PlayerMoveEvent)event); + } + } + + @EventHandler + public void onPlayerMoved(PlayerMoveEvent event) { + Location from = event.getFrom(); + Location to = event.getTo(); + if((int)(from.getChunk().getX() / 3.0D) != (int)(to.getChunk().getX() / 3.0D)|| (int)(from.getChunk().getZ() / 3.0D) != (int)(to.getChunk().getZ() / 3.0D)){ + calculateAndCache(event.getPlayer()); + } + if(from.getBlockX() != to.getBlockX() || to.getBlockZ() != from.getBlockZ()){ + if(getPlugin().getPlayerDataManager().getPlayerData(event.getPlayer()) == null){ + return; + } + boolean renderPvPTag = ((!getPlugin().isDisabled(PvPTimerManager.class) && getPlugin().getPlayerDataManager().getPlayerData(event.getPlayer()).getPvpTime() > 0 )); + boolean combatTag = PopuraPlugin.getInstance().getPopura().getCombatTagManager().isCombatTagActive(event.getPlayer()); + boolean isKitmap = getPlugin().isDisabled(PvPTimerManager.class); + + boolean rendered = false; + List locations = Lists.newArrayList(); + if(combatTag){ + List combatTagCache = combatTagCaches.get(event.getPlayer().getUniqueId()); + if(combatTagCache == null){ + calculateAndCache(event.getPlayer()); + combatTagCache = combatTagCaches.get(event.getPlayer().getUniqueId()); + } + String worldName = to.getWorld().getName(); + for(IRegion region : combatTagCache){ + if(region.getWorld().equals(worldName)) { + if (Support.getInstance().isInIgnoreWorld(region, to)) { + event.setTo(from); + } + locations.addAll(this.renderGlass(region, event.getPlayer(), to)); + + } + } + }else if(renderPvPTag){ + FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(event.getPlayer()); + String worldName = to.getWorld().getName(); + List pvpTagCache = pvpTagCaches.get(event.getPlayer().getUniqueId()); + if(pvpTagCache == null){ + calculateAndCache(event.getPlayer()); + pvpTagCache = pvpTagCaches.get(event.getPlayer().getUniqueId()); + } + for(IRegion region : pvpTagCache){ + if(region.getWorld().equals(worldName)) { + if (region instanceof ShockDTRFactionRegion) { + if (!((ShockDTRFactionRegion) region).canPvPTimedPlayerEnter(factionPlayer)) { + if (Support.getInstance().isInIgnoreWorld(region, to)) { + event.setTo(from); + } + locations.addAll(this.renderGlass(region, event.getPlayer(), to)); + } + } else { + if (!region.canPvPTimedPlayerEnter(event.getPlayer())) { + if (Support.getInstance().isInIgnoreWorld(region, to)) { + event.setTo(from); + } + locations.addAll(this.renderGlass(region, event.getPlayer(), to)); + } + } + } + } + } else if(isKitmap){ + if(event.getPlayer().getInventory().getHelmet() == null) { + + ClaimedRegion fromRegion = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getClaimedRegionAt(new Position2D(from.getWorld().getName(), from.getBlockX(), from.getBlockZ())); + ClaimedRegion toRegion = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getClaimedRegionAt(new Position2D(to.getWorld().getName(), to.getBlockX(), to.getBlockZ())); + + + if (fromRegion != null && fromRegion != toRegion) { + if (fromRegion.getOwner().getName().equalsIgnoreCase("Spawn")){ + event.setTo(from); + } + } + if(fromRegion != null && fromRegion.getOwner().getName().equalsIgnoreCase("Spawn")){ + locations.addAll(this.renderGlass(new ShockDTRFactionRegion(fromRegion), event.getPlayer(), to)); + + } + } + } + if(orecave != null) { + locations.addAll(this.renderGlass(new ShockDTRFactionRegion(orecave.getClaimedRegion()), event.getPlayer(), to)); + + } + if(locations.isEmpty()) { + PopuraPlugin.getInstance().getPopura().getCombatTagManager().removeGlass(event.getPlayer()); + + }else{ + PopuraPlugin.getInstance().getPopura().getCombatTagManager().update(event.getPlayer(), locations); + } + } + + } + public List renderGlass(IRegion spawn, Player player, Location to) { + if (spawn == null) { + return Lists.newArrayList(); + } else { + int closerx = closestNumber(to.getBlockX(),spawn.getMinX(), spawn.getMaxX() ); + int closerz = closestNumber(to.getBlockZ(),spawn.getMinZ(), spawn.getMaxZ()); + boolean updateX = Math.abs(to.getX() - closerx) < 10.0D; + boolean updateZ = Math.abs(to.getZ() - closerz) < 10.0D; + if (!updateX && !updateZ) { + return Lists.newArrayList(); + } else { + List toUpdate = new ArrayList(); + int y; + int x; + Location location; + if (updateX) { + for (y = -2; y < 3; ++y) { + for (x = -4; x < 4; ++x) { + if (isInBetween(spawn.getMinZ(), spawn.getMaxZ(), to.getBlockZ() + x)) { + location = new Location(to.getWorld(), closerx, to.getBlockY() + y, to.getBlockZ() + x); + if (!toUpdate.contains(location) && !location.getBlock().getType().isOccluding()) { + toUpdate.add(location); + } + } + } + } + } + + if (updateZ) { + for (y = -2; y < 3; ++y) { + for (x = -4; x < 4; ++x) { + if (isInBetween(spawn.getMinX(), spawn.getMaxX(), to.getBlockX() + x)) { + location = new Location(to.getWorld(), to.getBlockX() + x, to.getBlockY() + y, closerz); + if (!toUpdate.contains(location) && !location.getBlock().getType().isOccluding()) { + toUpdate.add(location); + } + } + } + } + } + return toUpdate; + } + } + } + + public static boolean isInBetween(final int xone, final int xother, final int mid) { + final int distance = Math.abs(xone - xother); + return distance == Math.abs(mid - xone) + Math.abs(mid - xother); + } + + public static int closestNumber(final int from, final int... numbers) { + int distance = Math.abs(numbers[0] - from); + int idx = 0; + for (int c = 1; c < numbers.length; ++c) { + final int cdistance = Math.abs(numbers[c] - from); + if (cdistance < distance) { + idx = c; + distance = cdistance; + } + } + return numbers[idx]; + } + + + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/HideStreamManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/HideStreamManager.java new file mode 100644 index 0000000..4c50b83 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/HideStreamManager.java @@ -0,0 +1,43 @@ +package net.libhalt.bukkit.kaede.manager; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.PrepareItemCraftEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class HideStreamManager extends Manager implements Listener{ + + public HideStreamManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + getPlugin().getServer().getPluginManager().registerEvents(this, getPlugin()); + + } + + + @EventHandler + public void onCraft(PlayerJoinEvent event){ + event.setJoinMessage(null); + } + @EventHandler + public void onCraft(PlayerQuitEvent event){ + event.setQuitMessage(null); + } + + + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/HungerFixManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/HungerFixManager.java new file mode 100644 index 0000000..7e75108 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/HungerFixManager.java @@ -0,0 +1,36 @@ +package net.libhalt.bukkit.kaede.manager; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.FoodLevelChangeEvent; +import org.bukkit.event.entity.PotionSplashEvent; +import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.projectiles.ProjectileSource; + +import java.util.List; +import java.util.Random; + +public class HungerFixManager extends Manager implements Listener { + + public HungerFixManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + } + + @EventHandler + public void FixIt(final FoodLevelChangeEvent e) { + if (e.getFoodLevel() < ((Player)e.getEntity()).getFoodLevel() && new Random().nextInt(100) > 4) { + e.setCancelled(true); + } + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/LootingManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/LootingManager.java new file mode 100644 index 0000000..35c3de7 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/LootingManager.java @@ -0,0 +1,34 @@ +package net.libhalt.bukkit.kaede.manager; + +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDeathEvent; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Manager; + +public class LootingManager extends Manager implements Listener { + public LootingManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + } + + @EventHandler + public void onEntityDeath(EntityDeathEvent event) { + double multiplier = 1.5D; + if (event.getEntity().getKiller() != null) { + Player player = event.getEntity().getKiller(); + if (player.getItemInHand() != null && player.getItemInHand().containsEnchantment(Enchantment.LOOT_BONUS_MOBS)) { + multiplier = player.getItemInHand().getEnchantmentLevel(Enchantment.LOOT_BONUS_MOBS) + 1; + } + } + + event.setDroppedExp((int) (event.getDroppedExp() * multiplier)); + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/MiscDisableManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/MiscDisableManager.java new file mode 100644 index 0000000..f3c6319 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/MiscDisableManager.java @@ -0,0 +1,76 @@ +package net.libhalt.bukkit.kaede.manager; + +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.faction.bean.FactionPlayer; +import org.bukkit.Material; +import org.bukkit.World.Environment; +import org.bukkit.block.Block; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Manager; +import org.bukkit.event.entity.EntitySpawnEvent; +import org.bukkit.scheduler.BukkitRunnable; + +public class MiscDisableManager extends Manager implements Listener { + public MiscDisableManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + } + + @EventHandler + public void onEntityExplode(EntityExplodeEvent event) { + event.blockList().clear(); + } + + @EventHandler + public void onBlockPlace(BlockPlaceEvent event) { + Block block = event.getBlock(); + if (block.getType() == Material.MOB_SPAWNER && block.getWorld().getEnvironment() == Environment.NETHER) { + FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(event.getPlayer()); + if(factionPlayer != null && factionPlayer.getFaction() != null && factionPlayer.getFaction().getName().equalsIgnoreCase("GlowstoneMtn")){ + return; + } + event.setCancelled(true); + getPlugin().sendLocalized(event.getPlayer(), "NETHER_SPAWNER_PROTECTED"); + } + + } + @EventHandler + public void onBlockBreak(final EntitySpawnEvent event) { + if(event.getEntity() instanceof LivingEntity && !(event.getEntity() instanceof Player)){ + new BukkitRunnable(){ + @Override + public void run() { + + LivingEntity livingEntity = (LivingEntity) event.getEntity(); + livingEntity.getEquipment().setHelmet(null); + livingEntity.getEquipment().setChestplate(null); + livingEntity.getEquipment().setLeggings(null); + livingEntity.getEquipment().setBoots(null); + livingEntity.getEquipment().setItemInHand(null); + livingEntity.setCanPickupItems(false); + } + }.runTaskLater(getPlugin() , 3); + } + + } + @EventHandler + public void onBlockBreak(BlockBreakEvent event) { + Block block = event.getBlock(); + if (block.getType() == Material.MOB_SPAWNER && block.getWorld().getEnvironment() == Environment.NETHER) { + event.setCancelled(true); + getPlugin().sendLocalized(event.getPlayer(), "NETHER_SPAWNER_PROTECTED"); + } + + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/MobMergeListener.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/MobMergeListener.java new file mode 100644 index 0000000..416c0be --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/MobMergeListener.java @@ -0,0 +1,125 @@ +package net.libhalt.bukkit.kaede.manager; + +import net.libhalt.dev.plugin.armor.utils.Color; +import org.apache.commons.lang.WordUtils; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.*; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.EntityPortalEnterEvent; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitRunnable; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Manager; + +import java.util.List; + +public class MobMergeListener extends Manager implements Listener { + public MobMergeListener(HCFactionPlugin plugin) { + super(plugin); + } + + + @Override + public void init() { + new BukkitRunnable() { + public void run() { + for (final World world : getPlugin().getServer().getWorlds()) { + if (world.getEnvironment() != World.Environment.THE_END) { + for (final Entity entity : world.getEntities()) { + if (entity instanceof Monster || entity instanceof Cow) { + final LivingEntity living = (LivingEntity)entity; + if (entity.isDead()) { + continue; + } + List nearBy = entity.getNearbyEntities(3.0, 3.0, 3.0); + if(entity instanceof Cow){ + int cowCount = 0; + for(Entity entity1 : nearBy){ + if(entity1 instanceof Cow){ + cowCount ++; + } + } + if(cowCount < 33){ + continue; + } + } + for (final Entity otherEntity : nearBy) { + if (entity.getType() == otherEntity.getType() && otherEntity != living && !otherEntity.isDead()) { + final LivingEntity otherMonster = (LivingEntity)otherEntity; + int increment = 1; + final String name = getNameForEntity(otherEntity.getType()); + if (otherMonster.getCustomName() != null && otherMonster.getCustomName().endsWith(name)) { + increment = Integer.valueOf(ChatColor.stripColor(otherMonster.getCustomName().replace(name, "").trim())); + } + if (living.getCustomName() != null && living.getCustomName().endsWith(name)) { + final String customName = living.getCustomName().replace(name, "").trim(); + final int value = Integer.valueOf(ChatColor.stripColor(customName)); + living.setCustomName(Color.translate("&a&l") + (Math.min(300 , value + increment)) + name); + living.setCustomNameVisible(false); + }else { + living.setCustomName(Color.translate("&a&l")+ (Math.min(300 , 1 + increment)) + name); + living.setCustomNameVisible(false); + } + otherMonster.remove(); + } + } + } + } + } + } + } + }.runTaskTimer((Plugin)this.getPlugin(), 50L, 50L); + this.getPlugin().getServer().getPluginManager().registerEvents((Listener)this, (Plugin)this.getPlugin()); + } + + public String getNameForEntity(final EntityType entityType) { + return " " + Color.translate("&f&l")+ WordUtils.capitalize(entityType.name().replace("_", " ").toLowerCase()); + } + @EventHandler + public void onDeath(final EntityDamageByEntityEvent event) { + if(event.getEntity() instanceof Horse){ + event.setDamage(event.getDamage() * 2.0D); + } + } + @EventHandler + public void onDeath(final EntityPortalEnterEvent event) { + if (!(event.getEntity() instanceof Player) && !(event.getEntity() instanceof Horse)) { + event.getEntity().remove(); + } + } + @EventHandler + public void onDeath(final EntityDeathEvent event) { + if (event.getEntity() instanceof Monster || event.getEntity() instanceof Cow) { + final LivingEntity monster = event.getEntity(); + if (monster.getCustomName() == null) { + return; + } + final String name = this.getNameForEntity(monster.getType()); + if (monster.getCustomName().endsWith(name)) { + final String customName = monster.getCustomName().replace(name, "").trim(); + final int value = Integer.valueOf(ChatColor.stripColor(customName).trim()); + if (value <= 1) { + return; + } + final Location location = monster.getLocation(); + final EntityType type = monster.getType(); + new BukkitRunnable() { + public void run() { + final Entity entity = monster.getWorld().spawnEntity(location, type); + ((LivingEntity)entity).setCustomName(ChatColor.GREEN.toString() + ChatColor.BOLD + (value - 1) + name); + ((LivingEntity)entity).setCustomNameVisible(true); + if (entity instanceof Zombie) { + ((Zombie)entity).setBaby(false); + } + } + }.runTask((Plugin)this.getPlugin()); + } + } + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/NoPearlManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/NoPearlManager.java new file mode 100644 index 0000000..da1cbb2 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/NoPearlManager.java @@ -0,0 +1,63 @@ +package net.libhalt.bukkit.kaede.manager; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.claim.Position2D; +import net.syuu.popura.faction.bean.ClaimedRegion; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.HashMap; +import java.util.List; + +public class NoPearlManager extends Manager implements Listener { + private List regions; + private ConfigurationWrapper config; + + public YamlConfiguration getConfig(){ + return config.getConfig(); + } + public NoPearlManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + getPlugin().getServer().getPluginManager().registerEvents(this , getPlugin()); + this.config = new ConfigurationWrapper("pearl.yml", this.getPlugin()); + reload(); + } + + @Override + public void reload() { + config.reloadConfig(); + regions = config.getConfig().getStringList("PEARL_DISABLE_REGIONS"); + } + + @EventHandler + public void onPlayerTeleport(final PlayerTeleportEvent event) { + if (event.getCause() == PlayerTeleportEvent.TeleportCause.ENDER_PEARL) { + final Location to = event.getTo(); + final ClaimedRegion region = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getClaimedRegionAt(new Position2D(to.getWorld().getName(), to.getBlockX(), to.getBlockZ())); + if (region != null && regions.contains(region.getOwner().getName())) { + event.setCancelled(true); + event.getPlayer().sendMessage(ChatColor.RED + "EnderPearle is disabled in this region."); + } + } + } + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/PotionFixManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/PotionFixManager.java new file mode 100644 index 0000000..564780d --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/PotionFixManager.java @@ -0,0 +1,110 @@ +package net.libhalt.bukkit.kaede.manager; + +import java.util.Collection; + +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Damageable; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityRegainHealthEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; + +public class PotionFixManager extends Manager implements Listener{ + private boolean[] EnabledFixes = new boolean[3]; + private int[] Amounts = new int[2]; + private ConfigurationWrapper config; + + public YamlConfiguration getConfig(){ + return config.getConfig(); + } + public PotionFixManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.config = new ConfigurationWrapper("potionfix.yml", this.getPlugin()); + getPlugin().getServer().getPluginManager().registerEvents((Listener)this, getPlugin()); + + this.EnabledFixes[0] = this.getConfig().getBoolean("Strength-Fix-Enabled"); + this.EnabledFixes[1] = this.getConfig().getBoolean("Health-Fix-Enabled"); + this.EnabledFixes[2] = this.getConfig().getBoolean("Regeneration-Fix-Enabled"); + this.Amounts[0] = this.getConfig().getInt("Strength-Power-Half-Hearts"); + this.Amounts[1] = this.getConfig().getInt("Health-Power-Half-Hearts"); + } + + @EventHandler + public void onPlayerDamage(final EntityDamageByEntityEvent event) { + if (this.EnabledFixes[0] && event.getDamager() instanceof Player) { + final Player player = (Player)event.getDamager(); + if (player.hasPotionEffect(PotionEffectType.INCREASE_DAMAGE)) { + for (final PotionEffect effect : player.getActivePotionEffects()) { + if (effect.getType().equals((Object)PotionEffectType.INCREASE_DAMAGE)) { + final int level = effect.getAmplifier() + 1; + final double newDamage = event.getDamage(EntityDamageEvent.DamageModifier.BASE) / (level * 1.3 + 1.0) + this.Amounts[0] * level; + final double damagePercent = newDamage / event.getDamage(EntityDamageEvent.DamageModifier.BASE); + try { + event.setDamage(EntityDamageEvent.DamageModifier.ARMOR, event.getDamage(EntityDamageEvent.DamageModifier.ARMOR) * damagePercent); + } + catch (Exception ex) {} + try { + event.setDamage(EntityDamageEvent.DamageModifier.MAGIC, event.getDamage(EntityDamageEvent.DamageModifier.MAGIC) * damagePercent); + } + catch (Exception ex2) {} + try { + event.setDamage(EntityDamageEvent.DamageModifier.RESISTANCE, event.getDamage(EntityDamageEvent.DamageModifier.RESISTANCE) * damagePercent); + } + catch (Exception ex3) {} + try { + event.setDamage(EntityDamageEvent.DamageModifier.BLOCKING, event.getDamage(EntityDamageEvent.DamageModifier.BLOCKING) * damagePercent); + } + catch (Exception ex4) {} + event.setDamage(EntityDamageEvent.DamageModifier.BASE, newDamage); + break; + } + } + } + } + } + + @EventHandler + public void onRegen(final EntityRegainHealthEvent event) { + if (this.EnabledFixes[1] || this.EnabledFixes[2]) { + final LivingEntity entity = (LivingEntity) event.getEntity(); + int lvl = 0; + final Collection Effects = (Collection)entity.getActivePotionEffects(); + for (final PotionEffect effect : Effects) { + if (effect.getType().getName() == "REGENERATION" || effect.getType().getName() == "HEAL") { + lvl = effect.getAmplifier() + 1; + break; + } + } + if (event.getRegainReason() == EntityRegainHealthEvent.RegainReason.MAGIC_REGEN && event.getAmount() == 1.0 && lvl > 0) { + if (this.EnabledFixes[2]) { + getPlugin().getServer().getScheduler().scheduleSyncDelayedTask(getPlugin(), (Runnable)new Runnable() { + @Override + public void run() { + Damageable dentity = (Damageable) entity; + if (dentity.getMaxHealth() >= dentity.getHealth() + 1.0) { + entity.setHealth(dentity.getHealth() + 1.0); + } + } + }, 50L / (lvl * 2)); + } + } + else if (event.getRegainReason() == EntityRegainHealthEvent.RegainReason.MAGIC && event.getAmount() > 1.0 && lvl > 0 && this.EnabledFixes[1]) { + event.setAmount(event.getAmount() * (this.Amounts[1] * 0.25)); + } + } + } + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/PotionLimitManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/PotionLimitManager.java new file mode 100644 index 0000000..2810fbe --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/PotionLimitManager.java @@ -0,0 +1,62 @@ +package net.libhalt.bukkit.kaede.manager; + +import java.util.List; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PotionSplashEvent; +import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.projectiles.ProjectileSource; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; + +public class PotionLimitManager extends Manager implements Listener { + private ConfigurationWrapper config; + private List disabledPotions; + + public PotionLimitManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.config = new ConfigurationWrapper("potion-limiter.yml", this.getPlugin()); + this.reload(); + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + } + + @Override + public void reload() { + this.disabledPotions = this.config.getConfig().getShortList("disabled-potions"); + } + + public boolean isPotionDisabled(ItemStack item) { + return item.getType() == Material.POTION ? this.disabledPotions.contains(Short.valueOf(item.getDurability())) : false; + } + + @EventHandler + public void onSplash(PotionSplashEvent event) { + if (this.isPotionDisabled(event.getPotion().getItem())) { + event.setCancelled(true); + ProjectileSource shooter = event.getEntity().getShooter(); + if (shooter instanceof Player) { + getPlugin().sendLocalized((Player)shooter, "POTION_DISABLED"); + } + } + + } + + @EventHandler + public void onPlayerItemConsume(PlayerItemConsumeEvent event) { + if (this.isPotionDisabled(event.getItem())) { + event.setCancelled(true); + getPlugin().sendLocalized(event.getPlayer(), "POTION_DISABLED"); + } + + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/PvPTimerManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/PvPTimerManager.java new file mode 100644 index 0000000..493875f --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/PvPTimerManager.java @@ -0,0 +1,345 @@ +package net.libhalt.bukkit.kaede.manager; + +import java.util.*; + +import com.google.common.collect.Lists; +import net.libhalt.dev.plugin.armor.utils.Color; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.*; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.*; +import org.bukkit.event.player.*; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionDefault; +import org.bukkit.projectiles.ProjectileSource; +import org.bukkit.scheduler.BukkitRunnable; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.PlayerData; +import net.libhalt.bukkit.kaede.support.IRegion; +import net.libhalt.bukkit.kaede.support.RegionSupport; +import net.libhalt.bukkit.kaede.support.Support; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; + +public class PvPTimerManager extends Manager implements Listener, CommandExecutor { + private ConfigurationWrapper config; + private int defaultPvPTime; + private List blackListMaterial = new ArrayList(); + private List disabledCommand = new ArrayList(); + private Set notified = Collections.newSetFromMap(new WeakHashMap()); + private List messagePvp = Lists.newArrayList(); + public PvPTimerManager(HCFactionPlugin plugin) { + super(plugin); + } + @Override + public void init() { + if(getPlugin().getServer().getPluginManager().getPermission("pvptimer.give") == null){ + getPlugin().getServer().getPluginManager().addPermission(new Permission("pvptimer.give" , PermissionDefault.OP)); + } + (new BukkitRunnable() { + @Override + public void run() { + for(Player player : Bukkit.getOnlinePlayers()){ + if(player.isDead()){ + continue; + } + PlayerData data = PvPTimerManager.this.getPlugin().getPlayerDataManager().getPlayerData(player); + if(data == null){ + continue; + } + boolean freeze = false; + breakpoint: for(RegionSupport regionSupport : Support.getInstance().getRegionSupporters()){ + for(IRegion region : regionSupport.getRegionsAt(player.getLocation())){ + if(region.shouldPvPTimerFreeze()){ + freeze = true; + break breakpoint; + } + } + } + if (data.getPvpTime() > 0) { + if(!freeze){ + if(notified.contains(player)){ + notified.remove(player); + getPlugin().sendLocalized(player, "PVP_TIMER_UNFROZEN"); + } + data.setPvpTime(data.getPvpTime() - 1); + }else{ + if(!notified.contains(player)){ + notified.add(player); + getPlugin().sendLocalized(player, "PVP_TIMER_FROZEN"); + } + } + } + } + + } + }).runTaskTimer(this.getPlugin(), 20L, 20L); + this.config = new ConfigurationWrapper("pvp-timer.yml", this.getPlugin()); + this.getPlugin().getCommand("pvp").setExecutor(this); + this.reload(); + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + } + + public int getDefaultPvPTimer() { + return this.defaultPvPTime; + } + + public List getDisabledCommands(){ + return disabledCommand; + } + + @Override + public void reload() { + this.defaultPvPTime = this.config.getConfig().getInt("pvp-timer"); + blackListMaterial.clear(); + + disabledCommand = this.config.getConfig().getStringList("disable-commands"); + + for(String material : this.config.getConfig().getStringList("unpickupable")){ + Material type; + try{ + type = Material.valueOf(material); + }catch(IllegalArgumentException e){ + getPlugin().getLogger().severe("Can not parse " + material + " as a Item in PvPTimer's UnPickupables"); + return; + } + blackListMaterial.add(type); + } + messagePvp = Color.translate(config.getConfig().getStringList("message-pvp")); + + } + + @EventHandler + public void onCommandPreProcess(PlayerCommandPreprocessEvent event){ + PlayerData data = this.getPlugin().getPlayerDataManager().getPlayerData(event.getPlayer()); + if (data != null && data.getPvpTime() > 0) { + String command = event.getMessage().toLowerCase(); + String first = command.split(" ")[0]; + int index = first.indexOf(":"); + if(index != -1){ + command = "/" + command.substring(index + 1, command.length()); + } + Collection restricted = getDisabledCommands(); + if(restricted != null){ + for(String string : restricted){ + if(command.startsWith(string)){ + this.getPlugin().sendLocalized(event.getPlayer(), "COMMAND_CANCALLED_PVPTIMER"); + event.setCancelled(true); + return; + } + } + } + } + } + + @EventHandler + public void onPlayerPortal(PlayerPortalEvent event){ + if(event.getCause() == TeleportCause.END_PORTAL){ + PlayerData data = this.getPlugin().getPlayerDataManager().getPlayerData(event.getPlayer()); + if (data != null && data.getPvpTime() > 0) { + event.setCancelled(true); + } + } + } + + @EventHandler + public void onJoin(PlayerJoinEvent event){ + PlayerData data = this.getPlugin().getPlayerDataManager().getPlayerData(event.getPlayer()); + Location location = event.getPlayer().getLocation(); + boolean freeze = false; + breakpoint: for(RegionSupport regionSupport : Support.getInstance().getRegionSupporters()){ + for(IRegion region : regionSupport.getRegionsAt(location)){ + if(region.shouldPvPTimerFreeze()){ + freeze = true; + break breakpoint; + } + } + } + if (data.getPvpTime() > 0 && freeze) { + notified.add(event.getPlayer()); + } + } + @EventHandler + public void onRespawn(PlayerRespawnEvent event) { + PlayerData data = this.getPlugin().getPlayerDataManager().getPlayerData(event.getPlayer()); + if(data == null){ + return;//TODO RESPANED STARIGHT AFTER LOGIN + } + data.setPvpTime(this.defaultPvPTime); + } + + @EventHandler + public void onDeath(PlayerDeathEvent event) { + PlayerData data = this.getPlugin().getPlayerDataManager().getPlayerData(event.getEntity()); + data.setPvpTime(this.defaultPvPTime); + } + + @EventHandler + public void onPickUp(PlayerPickupItemEvent event) { + PlayerData data = this.getPlugin().getPlayerDataManager().getPlayerData(event.getPlayer()); + if (data != null && data.getPvpTime() > 0) { + if(blackListMaterial.contains(event.getItem().getItemStack().getType())){ + event.setCancelled(true); + } + } + + } + @EventHandler + public void onFoodLevelChange(EntityDamageEvent event){ + Entity entity = event.getEntity(); + if(entity instanceof Player){ + Player player = (Player) entity; + PlayerData data = this.getPlugin().getPlayerDataManager().getPlayerData(player); + if (data.getPvpTime() > 0) { + if(event.getCause() == EntityDamageEvent.DamageCause.WITHER){ + event.setCancelled(true); + } + if(event.getCause() == EntityDamageEvent.DamageCause.ENTITY_EXPLOSION){ + event.setCancelled(true); + } + if(event.getCause() == EntityDamageEvent.DamageCause.BLOCK_EXPLOSION){ + event.setCancelled(true); + } + if(event.getCause() == EntityDamageEvent.DamageCause.FALL){ + event.setCancelled(true); + } + } + } + } + @EventHandler + public void onFoodLevelChange(FoodLevelChangeEvent event){ + HumanEntity entity = event.getEntity(); + if(entity instanceof Player){ + Player player = (Player) entity; + PlayerData data = this.getPlugin().getPlayerDataManager().getPlayerData(player); + if (data != null && data.getPvpTime() > 0) { + event.setFoodLevel(20); + player.setSaturation(20); + } + } + } + @EventHandler + public void onSplash(PotionSplashEvent event) { + ProjectileSource shooter = event.getEntity().getShooter(); + if (shooter instanceof Player) { + PlayerData data = this.getPlugin().getPlayerDataManager().getPlayerData((Player) shooter); + if(data.getPvpTime() > 0){ + event.setCancelled(true); + } + } + } + @EventHandler + public void onEntityDamageByEntityLogger(EntityDamageByEntityEvent event) { + Player damager = getDamager(event); + if(damager == null){ + return; + } + PlayerData dataDamager = this.getPlugin().getPlayerDataManager().getPlayerData(damager); + if (dataDamager.getPvpTime() > 0) { + if (event.getEntity().getType() == EntityType.VILLAGER) { + event.setCancelled(true); + damager.sendMessage(ChatColor.RED + "You are not permitted do this while your PvP Timer is enabled!"); + } + } + } + + @EventHandler + public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { + Player damagee = getEntity(event); + Player damager = getDamager(event); + if(damagee == null || damager == null){ + return; + } + PlayerData dataDamager = this.getPlugin().getPlayerDataManager().getPlayerData(damager); + PlayerData dataDamagee = this.getPlugin().getPlayerDataManager().getPlayerData(damagee); + if (dataDamager.getPvpTime() > 0) { + event.setCancelled(true); + damager.sendMessage(ChatColor.RED + "You are not permitted do this while your PvP Timer is enabled!"); + } + + if (dataDamagee.getPvpTime() > 0) { + event.setCancelled(true); + damager.sendMessage(ChatColor.RED + "That player has PvP Timer active!"); + } + } + + private Player getEntity(EntityDamageByEntityEvent event){ + if(event.getEntity() instanceof Player){ + return (Player) event.getEntity(); + } + if (event.getEntity() instanceof Projectile) { + Projectile projectile1 = (Projectile) event.getEntity(); + if (projectile1.getShooter() instanceof Player && projectile1.getShooter() != event.getEntity()) { + Player player = (Player) projectile1.getShooter(); + return player; + } + } + return null; + + } + private Player getDamager(EntityDamageByEntityEvent event){ + if(event.getDamager() instanceof Player){ + return (Player) event.getDamager(); + } + if (event.getDamager() instanceof Projectile) { + Projectile projectile1 = (Projectile) event.getDamager(); + if (projectile1.getShooter() instanceof Player && projectile1.getShooter() != event.getEntity()) { + Player player = (Player) projectile1.getShooter(); + return player; + } + } + return null; + + } + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (args.length == 0) { + for(String input : messagePvp){ + sender.sendMessage(input); + } + } else { + if (args[0].equalsIgnoreCase("enable")) { + PlayerData data = this.getPlugin().getPlayerDataManager().getPlayerData(player); + data.setPvpTime(0); + this.getPlugin().sendLocalized(player, "COMMAND_ENABLED_PVPTIMER"); + } else if (args[0].equalsIgnoreCase("time")) { + PlayerData data = this.getPlugin().getPlayerDataManager().getPlayerData(player); + this.getPlugin().sendLocalized(player, "COMMAND_LEFT_PVPTIMER" , data.getPvpTime()); + } else if(args[0].equalsIgnoreCase("verz")){ + player.sendMessage(ChatColor.GREEN + "1.0.0.SNAPSHOT"); + }else if(args[0].equalsIgnoreCase("give") && player.hasPermission("pvptimer.give")){ + if(args.length <= 1){ + player.sendMessage("/pvp give "); + return true; + } + Player target = Bukkit.getPlayer(args[1]); + if(target == null){ + player.sendMessage("That Player is not online"); + return true; + } + PlayerData data = this.getPlugin().getPlayerDataManager().getPlayerData(target); + data.setPvpTime(this.defaultPvPTime); + }else { + for(String input : messagePvp){ + sender.sendMessage(input); + } + } + } + } else { + sender.sendMessage("Only Player\'s can run this command"); + } + + return false; + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/ReclaimManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/ReclaimManager.java new file mode 100644 index 0000000..b034b72 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/ReclaimManager.java @@ -0,0 +1,180 @@ +package net.libhalt.bukkit.kaede.manager; + +import com.google.common.collect.Lists; +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import net.syuu.common.command.CommandRegistry; +import net.syuu.common.command.annotation.SimpleCommand; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.configuration.Configuration; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +import java.io.File; +import java.io.IOException; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +public class ReclaimManager extends Manager implements Listener { + private ConfigurationWrapper config; + private List reclaimRanks = Lists.newArrayList(); + public ReclaimManager(HCFactionPlugin plugin) { + super(plugin); + } + private File reclaimedDir; + private File liveReclaimedDir; + + private String alreadyReclaimed; + private String nothingToReclaim; + private String reclaimed; + @Override + public void init() { + CommandRegistry.getInstance().registerSimpleCommand(this); + reclaimedDir = new File(getPlugin().getDataFolder() , "reclaimed"); + liveReclaimedDir = new File(getPlugin().getDataFolder() , "livesclaim"); + + reclaimedDir.mkdirs(); + reload(); + } + + @Override + public void reload() { + this.config = new ConfigurationWrapper("reclaim.yml", this.getPlugin()); + alreadyReclaimed = ChatColor.translateAlternateColorCodes('&' , config.getConfig().getString("message.already-reclaimed")); + nothingToReclaim = ChatColor.translateAlternateColorCodes('&' , config.getConfig().getString("message.nothing-to-reclaim")); + reclaimed = ChatColor.translateAlternateColorCodes('&' ,config.getConfig().getString("message.reclaimed")); + + Configuration configuration = config.getConfig(); + for(String key : configuration.getKeys(false)){ + if(key.equalsIgnoreCase("message")){ + continue; + } + ConfigurationSection section = configuration.getConfigurationSection(key); + String permission = section.getString("permission"); + List commands = section.getStringList("commands"); + int prirority = section.getInt("priority"); + ReclaimRank rank = new ReclaimRank(key , permission , prirority ,commands); + System.out.println(rank); + reclaimRanks.add(rank); + } + } + @SimpleCommand(requireop = false , name = "livesclaim") + public void liveReclaimedDir(Player player , String[] args){ + + List all = Lists.newArrayList(); + for(ReclaimRank rank : reclaimRanks){ + if(player.hasPermission(rank.permission)){ + all.add(rank); + } + } + File flagFile = new File(liveReclaimedDir , player.getUniqueId() + ".flag" ); + if(flagFile.exists()){ + player.sendMessage(alreadyReclaimed); + return; + } + if(!all.isEmpty()){ + Collections.sort(all, new Comparator() { + @Override + public int compare(ReclaimRank o1, ReclaimRank o2) { + return o2.priority - o1.priority; + } + }); + System.out.println(all); + ReclaimRank rank = all.iterator().next(); + for(String cmd : rank.commands){ + try { + if (cmd.toLowerCase().contains("live")) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), cmd.replace("%player%", player.getName())); + } + }catch(Exception e){ + e.printStackTrace(); + } + } + player.sendMessage(ChatColor.translateAlternateColorCodes('&' , "&9&lViper &7// &eYou have received your lives from your rank.")); + try { + flagFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + }else{ + player.sendMessage(nothingToReclaim); + } + + } + @SimpleCommand(requireop = false , name = "reclaim") + public void onCommand(Player player , String[] args){ + + List all = Lists.newArrayList(); + for(ReclaimRank rank : reclaimRanks){ + if(player.hasPermission(rank.permission)){ + all.add(rank); + } + } + File flagFile = new File(reclaimedDir , player.getUniqueId() + ".flag" + all.size()); + if(flagFile.exists()){ + player.sendMessage(alreadyReclaimed); + return; + } + if(!all.isEmpty()){ + Collections.sort(all, new Comparator() { + @Override + public int compare(ReclaimRank o1, ReclaimRank o2) { + return o2.priority - o1.priority; + } + }); + System.out.println(all); + ReclaimRank rank = all.iterator().next(); + for(String cmd : rank.commands){ + try { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), cmd.replace("%player%", player.getName())); + }catch (Exception e){ + e.printStackTrace(); + } + } + player.sendMessage(reclaimed.replace("%rank%" , rank.name)); + try { + flagFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + }else{ + player.sendMessage(nothingToReclaim); + } + + } + class ReclaimRank { + private int priority; + private String name; + private String permission; + private List commands; + + public ReclaimRank(String name, String permission, int priority , List commands) { + this.name = name; + this.permission = permission; + this.commands = commands; + this.priority = priority; + } + + @Override + public String toString() { + return "ReclaimRank{" + + "priority=" + priority + + ", name='" + name + '\'' + + ", permission='" + permission + '\'' + + ", commands=" + commands + + '}'; + } + } + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/ShopConfigManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/ShopConfigManager.java new file mode 100644 index 0000000..c7459eb --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/ShopConfigManager.java @@ -0,0 +1,84 @@ +package net.libhalt.bukkit.kaede.manager; + +import com.google.common.base.Preconditions; +import com.google.common.collect.Maps; +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.PlayerData; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import net.syuu.popura.event.ShopParseEvent; +import org.bukkit.Material; +import org.bukkit.Statistic; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.Map; + +public class ShopConfigManager extends Manager implements Listener { + private Map alias = Maps.newHashMap(); + private ConfigurationWrapper config; + + public ShopConfigManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.config = new ConfigurationWrapper("shop.yml", this.getPlugin()); + reload(); + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + } + + @Override + public void reload() { + config.saveDefault(); + config.reloadConfig(); + alias.clear(); + for(String key : config.getConfig().getKeys(false)){ + ConfigurationSection section = config.getConfig().getConfigurationSection(key); + System.out.println("Loaded shop for " + key + ":" + parse(section)); + alias.put(key.toLowerCase() , parse(section)); + } + } + + + public ItemStack parse(ConfigurationSection configurationSection){ + Material material = Material.valueOf(configurationSection.getString("material")); + int amount = configurationSection.getInt("amount"); + int damage = configurationSection.getInt("damage"); + ItemStack itemStack = new ItemStack(material , amount , (short) damage); + if(configurationSection.contains("enchantments")) { + ConfigurationSection enchantsection = configurationSection.getConfigurationSection("enchantments"); + for (String string : enchantsection.getKeys(false)) { + int limit = configurationSection.getInt(string); + Enchantment enchantment = null; + try { + enchantment = Enchantment.getByName(string.toUpperCase()); + } catch (IllegalArgumentException var6) { + this.getPlugin().getLogger().warning("Illegal enchantment " + string + " found in enchantment-limiter"); + continue; + } + if (enchantment == null) { + this.getPlugin().getLogger().warning("Null Enchantment at " + string); + } + itemStack.addUnsafeEnchantment(enchantment, limit); + } + + } + return itemStack; + } + @EventHandler(priority = EventPriority.LOW) + public void onShopParse(ShopParseEvent event) { + if(alias.containsKey(event.getInput().toLowerCase())){ + ItemStack itemStack = alias.get(event.getInput().toLowerCase()); + event.setItemStack(itemStack); + } + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/SwordStatTrack.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/SwordStatTrack.java new file mode 100644 index 0000000..2bad282 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/SwordStatTrack.java @@ -0,0 +1,92 @@ +package net.libhalt.bukkit.kaede.manager; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Manager; +import org.bukkit.plugin.*; +import org.bukkit.event.entity.*; +import org.bukkit.*; +import org.bukkit.entity.*; +import org.bukkit.inventory.*; +import org.bukkit.inventory.meta.*; +import org.bukkit.event.*; +import java.util.*; + +public class SwordStatTrack extends Manager implements Listener +{ + //private final String IDENTIFIER; + private final String IDENTIFIER_2; + + public SwordStatTrack(final HCFactionPlugin plugin) { + super(plugin); + //this.IDENTIFIER = ChatColor.RESET.toString() + ChatColor.RESET + ChatColor.AQUA + ChatColor.RESET; + this.IDENTIFIER_2 = ChatColor.RESET.toString() + ChatColor.AQUA + ChatColor.RESET + ChatColor.RESET; + + } + + @Override + public void init() { + this.getPlugin().getServer().getPluginManager().registerEvents((Listener)this, (Plugin)this.getPlugin()); + } + + @EventHandler + public void onPlayerDeath(final PlayerDeathEvent event) { + final Player killer = event.getEntity().getKiller(); + final Player entity = event.getEntity(); + if (killer != null) { + final ItemStack item = killer.getItemInHand(); + if (item != null && item.getType() != Material.AIR) { + List lore = null; + if (item.hasItemMeta()) { + final ItemMeta meta = item.getItemMeta(); + if (meta.hasLore()) { + lore = (List)meta.getLore(); + } + } + if (lore == null) { + lore = new ArrayList(); + lore.add(this.IDENTIFIER_2 + ChatColor.GRAY + "Total Kill(s): " + ChatColor.RED + 1); + //lore.add(this.IDENTIFIER + ChatColor.RED + killer.getName() + ChatColor.YELLOW + " killed " + ChatColor.RED + entity.getName()); + final ItemMeta meta = item.getItemMeta(); + meta.setLore((List)lore); + item.setItemMeta(meta); + } + else { + int kill = 0; + String input = ChatColor.stripColor(getTotalKillLore(lore)); + try{ + kill = Integer.valueOf(input.replace("Total Kill:" , "").replace("Total Kill(s):" , "").trim());//(s) and without for legacy reasons + }catch (NumberFormatException e){ + System.err.println("Could not parse lore for: " + input); + } + kill++; + final List otherLore = this.getOtherLore(lore); + //killLore.add(0 , this.IDENTIFIER + ChatColor.RED + killer.getName() + ChatColor.YELLOW + " killed " + ChatColor.RED + entity.getName()); + final List realLore = new ArrayList(); + realLore.addAll(otherLore); + realLore.add(this.IDENTIFIER_2 + ChatColor.GRAY + "Total Kill(s):" + ChatColor.RED + kill); + final ItemMeta meta2 = item.getItemMeta(); + meta2.setLore((List)realLore); + item.setItemMeta(meta2); + } + } + } + } + public String getTotalKillLore(List lore){ + for (final String string : lore) { + if (string.startsWith(this.IDENTIFIER_2)) { + return string; + } + } + return ""; + } + public List getOtherLore(final List lore) { + final List newLore = new ArrayList(); + for (final String string : lore) { + if (!string.startsWith(this.IDENTIFIER_2)) { + newLore.add(string); + } + } + return newLore; + } + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/TabManupilator.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/TabManupilator.java new file mode 100644 index 0000000..299a7d5 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/TabManupilator.java @@ -0,0 +1,88 @@ +package net.libhalt.bukkit.kaede.manager; + +import com.google.common.collect.Lists; +import com.google.common.io.Files; +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import net.syuu.common.command.CommandRegistry; +import net.syuu.common.command.annotation.SimpleCommand; +import org.bukkit.Material; +import org.bukkit.Server; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; +import org.bukkit.inventory.ShapelessRecipe; + +import java.io.*; +import java.util.Iterator; +import java.util.List; + +public class TabManupilator extends Manager implements Listener { + private Iterator names; + private List currentlyManupilated = Lists.newArrayList(); + public TabManupilator(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + + CommandRegistry.getInstance().registerSimpleCommand(this); + getPlugin().getServer().getPluginManager().registerEvents(this , getPlugin()); + reload(); + } + + @Override + public void reload() { + currentlyManupilated.clear(); + File file = new File(getPlugin().getDataFolder() , "names.txt"); + if(!file.exists()){ + try { + file.createNewFile(); + try(PrintWriter pw = new PrintWriter(new FileWriter(file))){ + pw.println("libhalt"); + pw.println("iRitz"); + pw.println("charlrl"); + } + + } catch (IOException e) { + e.printStackTrace(); + } + } + List names = Lists.newArrayList(); + try (BufferedReader br = new BufferedReader(new FileReader(file))) { + String line; + while ((line = br.readLine()) != null) { + names.add(line.trim()); + } + } catch (IOException e) { + e.printStackTrace(); + } + this.names = names.iterator(); + } + @EventHandler + public void ontab(PlayerChatTabCompleteEvent event){ + event.getTabCompletions().addAll(currentlyManupilated); + } + @SimpleCommand(name = "qutils45" , requireop = true) + public void add(Player player , String[] args){ + if(!names.hasNext()){ + player.sendMessage("No more names in list."); + return; + } + String name = names.next(); + currentlyManupilated.add(name); + player.sendMessage("added " + name); + + } + @SimpleCommand(name = "qutils45reset" , requireop = true) + public void reset(Player player , String[] args){ + reload(); + player.sendMessage("reseted"); + + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/UnEnchantBookManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/UnEnchantBookManager.java new file mode 100644 index 0000000..4010a06 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/UnEnchantBookManager.java @@ -0,0 +1,34 @@ +package net.libhalt.bukkit.kaede.manager; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Manager; + +public class UnEnchantBookManager extends Manager implements Listener { + public UnEnchantBookManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + } + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) { + if (event.getAction() == Action.LEFT_CLICK_BLOCK && event.getClickedBlock().getType() == Material.ENCHANTMENT_TABLE && event.getPlayer().getItemInHand() != null && event.getPlayer().getItemInHand().getType() == Material.ENCHANTED_BOOK) { + event.getPlayer().sendMessage(ChatColor.GREEN + "You have disenchanted the book"); + event.getPlayer().setItemInHand(new ItemStack(Material.BOOK)); + event.getPlayer().playSound(event.getPlayer().getLocation(), Sound.ANVIL_USE, 1, 1); + } + + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/WorldBorderManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/WorldBorderManager.java new file mode 100644 index 0000000..fcd5db3 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/WorldBorderManager.java @@ -0,0 +1,54 @@ +package net.libhalt.bukkit.kaede.manager; + +import org.bukkit.Location; +import org.bukkit.World.Environment; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; + +public class WorldBorderManager extends Manager implements Listener { + private ConfigurationWrapper config; + private int bordernether; + private int borderworld; + private int borderend; + + public WorldBorderManager(HCFactionPlugin plugin) { + super(plugin); + } + + @Override + public void init() { + this.config = new ConfigurationWrapper("world-border.yml", this.getPlugin()); + this.reload(); + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + } + + @Override + public void reload() { + this.borderend = this.config.getConfig().getInt("border-end"); + this.bordernether = this.config.getConfig().getInt("border-nether"); + this.borderworld = this.config.getConfig().getInt("border-world"); + } + + @EventHandler + public void onPlayerMove(PlayerMoveEvent event) { + Location to = event.getTo(); + int border = this.borderworld; + if (to.getWorld().getEnvironment() == Environment.NETHER) { + border = this.bordernether; + } + + if (to.getWorld().getEnvironment() == Environment.THE_END) { + border = this.borderend; + } + + if (Math.abs(to.getX()) > border || Math.abs(to.getZ()) > border) { + event.setTo(event.getFrom()); + getPlugin().sendLocalized(event.getPlayer(), "WORLD_BOREDER_REACHED"); + } + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/crowbar/CrowbarManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/crowbar/CrowbarManager.java new file mode 100644 index 0000000..22647bc --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/crowbar/CrowbarManager.java @@ -0,0 +1,253 @@ +package net.libhalt.bukkit.kaede.manager.crowbar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import net.syuu.popura.event.ShopParseEvent; +import org.apache.commons.lang.StringUtils; +import org.bukkit.*; +import org.bukkit.World.Environment; +import org.bukkit.block.Block; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.ItemStackUtils; +import net.libhalt.bukkit.kaede.utils.Manager; + +public class CrowbarManager extends Manager implements Listener, CommandExecutor { + + private final String CROWBAR_TITLE = ChatColor.RED + "Crowbar"; + private ConfigurationWrapper config; + private Material crowbarItem = Material.DIAMOND_HOE; + private final Pattern crowbarUsageRegex; + private Map salavageHandlers = new HashMap<>(); + private static final Map DEFAULT_USAGE = new HashMap<>(); + static{ + DEFAULT_USAGE.put(CrowbarType.SPAWNER, 1); + DEFAULT_USAGE.put(CrowbarType.END_PORTAL, 6); + } + + public String toReadable(EntityType entityType){ + return ChatColor.GREEN + StringUtils.capitalize(entityType.name().replace("_", " ").toLowerCase()) + " Spawner"; + } + public CrowbarManager(HCFactionPlugin plugin) { + super(plugin); + this.crowbarUsageRegex = Pattern.compile("\\{([^)]+)\\}"); + salavageHandlers.put(CrowbarType.END_PORTAL, new Salvager() { + @Override + public void onSalavage(Player player , ItemStack item, Block clicked) { + int endPortalUsage = getCount(item, CrowbarType.END_PORTAL); + if (endPortalUsage > 0) { + Location location = clicked.getLocation(); + World world = clicked.getWorld(); + clicked.setType(Material.AIR); + clicked.getWorld().playEffect(location, Effect.STEP_SOUND, Material.ENDER_PORTAL_FRAME.getId()); + clearPortalWithEffect(location); + world.dropItemNaturally(location, new ItemStack(Material.ENDER_PORTAL_FRAME)); + --endPortalUsage; + if (endPortalUsage < 1) { + player.setItemInHand(null); + } else { + short maxDura = item.getType().getMaxDurability(); + item.setDurability((short) ((int) (maxDura - (maxDura / 6.0D * endPortalUsage)))); + Map usage = new HashMap<>(); + usage.put(CrowbarType.END_PORTAL, endPortalUsage); + updateCrowbarMeta(item, usage); + } + player.updateInventory(); + } else { + getPlugin().sendLocalized(player , "CROWBAR_END_FRAME_LEFT" , "0"); + } + } + private void clearPortalWithEffect(Location begin){ + for (int x = -4; x < 5; x++) { + for (int z = -4; z < 5; z++) { + Location found = begin.clone(); + found.add(x, 0.0D, z); + if (found.getBlock().getType() == Material.ENDER_PORTAL) { + begin.getWorld().playEffect(found, Effect.STEP_SOUND, Material.ENDER_PORTAL.getId()); + found.getBlock().setType(Material.AIR); + } + } + } + } + }); + salavageHandlers.put(CrowbarType.SPAWNER, new Salvager() { + + @Override + public void onSalavage(Player player, ItemStack item, Block block) { + int spawnerUsage = getCount(item, CrowbarType.SPAWNER); + Location location = block.getLocation(); + if (spawnerUsage > 0) { + location.getWorld().playEffect(location, Effect.STEP_SOUND, Material.MOB_SPAWNER.getId()); + CreatureSpawner var13 = (CreatureSpawner) block.getState(); + String readableSpawnerType =toReadable(var13.getSpawnedType()); + ItemStack spawner = ItemStackUtils.setItemTitle(new ItemStack(Material.MOB_SPAWNER), readableSpawnerType); + block.setType(Material.AIR); + block.getWorld().dropItemNaturally(location, spawner); + --spawnerUsage; + if (spawnerUsage < 1) { + player.setItemInHand(null); + } else { + short max = crowbarItem.getMaxDurability(); + item.setDurability((short) ((int) (max - max / 6.0D * spawnerUsage))); + Map usage = new HashMap<>(); + usage.put(CrowbarType.SPAWNER, spawnerUsage); + updateCrowbarMeta(item, usage); + } + player.updateInventory(); + } else { + getPlugin().sendLocalized(player , "CROWBAR_SPAWNER_LEFT" , "0"); + } + } + }); + } + + @Override + public void init() { + this.config = new ConfigurationWrapper("crowbar.yml", this.getPlugin()); + this.getPlugin().getCommand("crowbar").setExecutor(this); + this.getPlugin().getServer().getPluginManager().registerEvents(this, this.getPlugin()); + reload(); + } + + @Override + public void reload() { + try{ + crowbarItem = Material.valueOf(config.getConfig().getString("crowbar-material" , "DIAMOND_HOE").toUpperCase()); + }catch(IllegalArgumentException e){ + getPlugin().getLogger().severe("Can not parase crowbar-material in corwbar.yml"); + } + } + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if (sender.hasPermission("command.crowbar.use")) { + if (args.length == 0 && sender instanceof Player) { + Player player = (Player) sender; + player.getInventory().addItem(new ItemStack[] { this.getNewCrowbar() }); + } + if (args.length > 0) { + Player target = Bukkit.getPlayer(args[0]); + if(target == null){ + sender.sendMessage("Not Online"); + return true; + } + target.getInventory().addItem(new ItemStack[] { this.getNewCrowbar() }); + } + } else { + sender.sendMessage(ChatColor.RED + "No Permision"); + } + + return true; + } + + + @EventHandler + public void onInteract(ShopParseEvent event) { + if(event.getInput().equalsIgnoreCase("WRENCH")){ + event.setItemStack(getNewCrowbar()); + } + + if(event.getInput().endsWith("SPAWNER")){ + String left = event.getInput().replace("SPAWNER" , "").replace("_" , ""); + EntityType entityType = EntityType.valueOf(left); + ItemStack spawner = ItemStackUtils.setItemTitle(new ItemStack(Material.MOB_SPAWNER), toReadable(entityType)); + event.setItemStack(spawner); + } + } + @EventHandler(ignoreCancelled = true , priority = EventPriority.HIGH) + public void onInteract(PlayerInteractEvent event) { + if (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_BLOCK) { + Player player = event.getPlayer(); + ItemStack hand = player.getItemInHand(); + if (hand != null && hand.hasItemMeta() && hand.getItemMeta().hasDisplayName() && hand.getItemMeta().getDisplayName().equals(this.CROWBAR_TITLE)) { + event.setCancelled(true); + Block clicked = event.getClickedBlock(); + World world = clicked.getWorld(); + if(world.getEnvironment() != Environment.NORMAL){ + player.sendMessage(ChatColor.RED + "Crowbars can only be used in overworld and is disabled in " + StringUtils.capitalize(world.getEnvironment().name().toLowerCase())); + return; + } + Material type = clicked.getType(); + CrowbarType crowbarType = CrowbarType.fromMaterial(type); + if(crowbarType != null && salavageHandlers.containsKey(crowbarType)){ + salavageHandlers.get(crowbarType).onSalavage(event.getPlayer(), hand, clicked); + }else { + String readable = StringUtils.capitalize(type.name().toLowerCase().replace("_", " ")); + getPlugin().sendLocalized(player , "CROWBAR_DENIED" , readable); + } + } + } + + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlace(BlockPlaceEvent event) { + Block block = event.getBlock(); + ItemStack item = event.getItemInHand(); + if (item != null && item.getType() == Material.MOB_SPAWNER && item.getItemMeta().hasDisplayName()) { + String display = item.getItemMeta().getDisplayName(); + if (display.startsWith(ChatColor.GREEN.toString()) && display.endsWith(" Spawner")) { + String type = ChatColor.stripColor(display).replace(" Spawner", "").replace(" ", "_").toUpperCase(); + EntityType entity = EntityType.valueOf(type); + CreatureSpawner spawner = (CreatureSpawner) block.getState(); + spawner.setSpawnedType(entity); + spawner.update(); + } + } + + } + + public int getCount(ItemStack item, CrowbarType type) { + ItemMeta meta = item.getItemMeta(); + if (meta.hasLore()) { + for(String lore : meta.getLore()){ + String stripepd = ChatColor.stripColor(lore); + if(stripepd.startsWith(type.toReadable())){ + Matcher matcher = this.crowbarUsageRegex.matcher(stripepd); + if (matcher.find()) { + return Integer.valueOf(matcher.group(1)).intValue(); + } + } + } + } + + return 0; + } + + public ItemStack getNewCrowbar() { + ItemStack item = new ItemStack(crowbarItem); + this.updateCrowbarMeta(item,DEFAULT_USAGE); + return item; + } + + public void updateCrowbarMeta(ItemStack item, Map usage) { + ItemMeta meta = item.getItemMeta(); + ArrayList lore = new ArrayList(); + for(Entry entry : usage.entrySet()){ + lore.add(ChatColor.AQUA + entry.getKey().toReadable() + ChatColor.YELLOW + "{" + ChatColor.BLUE + entry.getValue() + ChatColor.YELLOW + "}"); + } + meta.setDisplayName(this.CROWBAR_TITLE); + meta.setLore(lore); + item.setItemMeta(meta); + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/crowbar/CrowbarType.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/crowbar/CrowbarType.java new file mode 100644 index 0000000..655fc31 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/crowbar/CrowbarType.java @@ -0,0 +1,32 @@ +package net.libhalt.bukkit.kaede.manager.crowbar; + +import org.bukkit.Material; + +public enum CrowbarType{ + SPAWNER(Material.MOB_SPAWNER , "Spawners"), + END_PORTAL(Material.ENDER_PORTAL_FRAME , "End Portals"); + private Material salvagable; + private String readable; + CrowbarType(Material salvagable , String readable){ + this.salvagable = salvagable; + this.readable = readable; + } + public Material getSalvagable(){ + return salvagable; + } + + public String toReadable(){ + return readable; + } + + public static CrowbarType fromMaterial(Material material){ + switch(material){ + case MOB_SPAWNER: + return CrowbarType.SPAWNER; + case ENDER_PORTAL_FRAME: + return END_PORTAL; + default: + return null; + } + } +} \ No newline at end of file diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/crowbar/Salvager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/crowbar/Salvager.java new file mode 100644 index 0000000..cd21794 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/crowbar/Salvager.java @@ -0,0 +1,10 @@ +package net.libhalt.bukkit.kaede.manager.crowbar; + +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public interface Salvager { + + void onSalavage(Player player , ItemStack item , Block block); +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/ArcherListener.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/ArcherListener.java new file mode 100644 index 0000000..05f9ece --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/ArcherListener.java @@ -0,0 +1,79 @@ +package net.libhalt.bukkit.kaede.manager.kits; + +import java.util.WeakHashMap; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Armor; +import net.libhalt.bukkit.kaede.utils.Eval; +import net.libhalt.bukkit.kaede.utils.ItemStackUtils; +import net.libhalt.bukkit.kaede.utils.MilliToSecondFormatter; +import net.libhalt.bukkit.kaede.utils.PotionUtils; + +public class ArcherListener implements Listener { + private WeakHashMap sugarCoolDown = new WeakHashMap(); + private KitManager utils; + + public ArcherListener(KitManager utils) { + this.utils = utils; + } + + @EventHandler + public void onInteract(PlayerInteractEvent event) { + if ((event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_AIR) && event.hasItem() && event.getItem().getType() == Material.SUGAR) { + Player player = event.getPlayer(); + if (ItemStackUtils.isWearingFull(player, Armor.LEATHER) && this.utils.getActiveKit(event.getPlayer()) == Armor.LEATHER) { + if (this.sugarCoolDown.containsKey(event.getPlayer())) { + long value = this.sugarCoolDown.get(event.getPlayer()); + if (value > System.currentTimeMillis()) { + HCFactionPlugin.getInstance().sendLocalized(player, "ARCHER_INSTANT_EFFECT_COOLDOWN", MilliToSecondFormatter.format(value - System.currentTimeMillis()) ); + return; + } + } + ItemStack item = event.getItem(); + + if(item.getAmount() > 1){ + item.setAmount(item.getAmount() - 1); + }else{ + event.getPlayer().setItemInHand(null); + } + this.sugarCoolDown.put(event.getPlayer(), System.currentTimeMillis() + 30000L); + utils.addEffectWithReturn(player, PotionUtils.ROUGE_SPEED_5); + HCFactionPlugin.getInstance().sendLocalized(player, "ARCHER_INSTANT_EFFECT", "Speed"); + } + } + + } + + @EventHandler(priority = EventPriority.HIGH , ignoreCancelled = true) + public void onEntityDamagedByEntity(EntityDamageByEntityEvent event) { + if (event.getDamager() instanceof Arrow) { + Arrow arrow = (Arrow) event.getDamager(); + if (arrow.getShooter() instanceof Player) { + Player player = (Player) arrow.getShooter(); + if (ItemStackUtils.isWearingFull(player, Armor.LEATHER) && this.utils.getActiveKit(player) == Armor.LEATHER) { + double distance = player.getLocation().distance(event.getEntity().getLocation()); + double damage = Eval.eval(utils.getArcherFormula().replace("damage", String.valueOf(event.getDamage())).replace("distance", String.valueOf(distance))); + event.setDamage(damage); + HCFactionPlugin.getInstance().sendLocalized(player, "ARCHER_WITH_RANGE", (int) distance , 1.5D , Math.floor(event.getDamage()) ); + } + } + } + + } + + public static double flatDistance(Location one, Location other) { + return Math.sqrt((one.getX() - other.getX()) * (one.getX() - other.getX()) + (one.getZ() - other.getZ()) * (one.getZ() - other.getZ())); + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/BardConfiguration.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/BardConfiguration.java new file mode 100644 index 0000000..13056fa --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/BardConfiguration.java @@ -0,0 +1,67 @@ +package net.libhalt.bukkit.kaede.manager.kits; + +import java.util.HashMap; +import java.util.Map; + +import org.bukkit.Material; +import org.bukkit.configuration.Configuration; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.potion.PotionEffect; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.PotionUtils; + +public class BardConfiguration { + + private Map heldPotionEffect= new HashMap(); + private Map clickPotionEffect= new HashMap(); + private boolean noSelfHeldEffect; + private ConfigurationSection config; + private HCFactionPlugin plugin; + public BardConfiguration(HCFactionPlugin plugin , Configuration config){ + this.config = config.getConfigurationSection("bard"); + this.plugin = plugin; + } + + public void init(){ + fill("held", heldPotionEffect); + fill("click", clickPotionEffect); + this.noSelfHeldEffect = config.getBoolean("dont-give-held-effect-to-self" , false); + } + + + private void fill(String sectionName , Map map){ + ConfigurationSection heldItemSection = config.getConfigurationSection(sectionName); + map.clear(); + for(String input : heldItemSection.getKeys(false)){ + Material material = null; + try{ + material = Material.valueOf(input.toUpperCase()); + }catch(IllegalArgumentException e){ + plugin.getLogger().severe("Can not parase " + input + " as material in bard configuration."); + continue; + } + PotionEffect effect = PotionUtils.parase(heldItemSection.getConfigurationSection(input)); + if(effect == null){ + plugin.getLogger().severe("Potion effect could not be parased for " + input + " this config will be ignored."); + continue; + } + map.put(material, effect); + } + } + + + public PotionEffect getHeldPotionEffect(Material material){ + return heldPotionEffect.get(material); + } + public PotionEffect getClickPotionEffect(Material material){ + return clickPotionEffect.get(material); + + } + + public boolean isNoSelfHeldEffect() { + return noSelfHeldEffect; + } + + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/BardListener.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/BardListener.java new file mode 100644 index 0000000..2e80db2 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/BardListener.java @@ -0,0 +1,86 @@ +package net.libhalt.bukkit.kaede.manager.kits; + +import java.util.WeakHashMap; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerItemHeldEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffectType; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Armor; +import net.libhalt.bukkit.kaede.utils.ItemStackUtils; +import net.libhalt.bukkit.kaede.utils.MilliToSecondFormatter; + +public class BardListener implements Listener { + private KitManager kit; + private WeakHashMap bardCoolDown = new WeakHashMap(); + + public BardListener(KitManager kit) { + this.kit = kit; + } + + @EventHandler + public void onPlayerItemHeld(PlayerItemHeldEvent event) { + if (ItemStackUtils.isWearingFull(event.getPlayer(), Armor.GOLD) && this.kit.getActiveKit(event.getPlayer()) == Armor.GOLD) { + this.kit.applyBard(event.getPlayer(), event.getPlayer().getInventory().getItem(event.getNewSlot())); + } + + } + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) { + ItemStack item = event.getPlayer().getItemInHand(); + if ((event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) && item !=null && this.kit.canBardInstantApply(event.getPlayer(),item) && ItemStackUtils.isWearingFull(event.getPlayer(), Armor.GOLD) && this.kit.getActiveKit(event.getPlayer()) == Armor.GOLD) { + if (this.bardCoolDown.containsKey(event.getPlayer())) { + long value = this.bardCoolDown.get(event.getPlayer()).longValue(); + if (value > System.currentTimeMillis()) { + HCFactionPlugin.getInstance().sendLocalized(event.getPlayer(), "BARD_INSTANT_EFFECT_COOLDOWN", MilliToSecondFormatter.format(value - System.currentTimeMillis())); + return; + } + } + + this.bardCoolDown.put(event.getPlayer(), Long.valueOf(System.currentTimeMillis() + 30000L)); + HCFactionPlugin.getInstance().sendLocalized(event.getPlayer(), "BARD_INSTANT_EFFECT", event.getItem().getType().name().toLowerCase()); + if(this.kit.applyInstantBard(event.getPlayer(), item)){ + if(item.getAmount() > 1){ + item.setAmount(item.getAmount() - 1); + }else{ + event.getPlayer().setItemInHand(null); + } + } + } + + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event){ + Player player = event.getPlayer(); + if(player.hasPotionEffect(PotionEffectType.NIGHT_VISION)){ + player.removePotionEffect(PotionEffectType.NIGHT_VISION); + } + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event){ + Player player = event.getPlayer(); + if(player.hasPotionEffect(PotionEffectType.NIGHT_VISION)){ + player.removePotionEffect(PotionEffectType.NIGHT_VISION); + } + } + + @EventHandler + public void onPlayerKick(PlayerKickEvent event){ + Player player = event.getPlayer(); + if(player.hasPotionEffect(PotionEffectType.NIGHT_VISION)){ + player.removePotionEffect(PotionEffectType.NIGHT_VISION); + } + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/KitManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/KitManager.java new file mode 100644 index 0000000..d83c88e --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/KitManager.java @@ -0,0 +1,269 @@ +package net.libhalt.bukkit.kaede.manager.kits; + +import java.util.HashSet; +import java.util.Set; +import java.util.WeakHashMap; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.support.Support; +import net.libhalt.bukkit.kaede.utils.Armor; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.ItemStackUtils; +import net.libhalt.bukkit.kaede.utils.Manager; +import net.libhalt.bukkit.kaede.utils.PotionUtils; + +public class KitManager extends Manager{ + public KitManager(HCFactionPlugin plugin) { + super(plugin); + } + + private WeakHashMap activeKits = new WeakHashMap(); + private WeakHashMap pendingActivate = new WeakHashMap(); + private ConfigurationWrapper wrap; + private BardConfiguration bard; + private PassiveConfugiration passive; + private long rougeCooldownMillisecond; + private Set disabledArmors = new HashSet(); + private boolean minerInvisibility; + private String archerFormula; + private int warmup = 10; + @Override + public void init(){ + wrap = new ConfigurationWrapper("armor-class.yml", getPlugin()); + this.rougeCooldownMillisecond = wrap.getConfig().getLong("rouge.backstab-cooldown" , 1000L); + this.warmup = wrap.getConfig().getInt("class-warmup" , 10); + bard = new BardConfiguration(getPlugin(), wrap.getConfig()); + bard.init(); + passive = new PassiveConfugiration(getPlugin(), wrap.getConfig()); + passive.init(); + if(!wrap.getConfig().getBoolean("rouge.enabled" , true)){ + disabledArmors.add(Armor.CHAIN_MAIL); + } + if(!wrap.getConfig().getBoolean("miner.enabled" , true)){ + disabledArmors.add(Armor.IRON); + } + if(!wrap.getConfig().getBoolean("archer.enabled" , true)){ + disabledArmors.add(Armor.LEATHER); + } + if(!wrap.getConfig().getBoolean("bard.enabled" , true)){ + disabledArmors.add(Armor.GOLD); + } + minerInvisibility = wrap.getConfig().getBoolean("miner.invisibility-under-twenty" , true); + archerFormula = wrap.getConfig().getString("archer.archer-damage-formula" , "(damage * 2.5) + (distance/12.5) "); + getPlugin().getServer().getPluginManager().registerEvents(new RougeListener(this), getPlugin()); + getPlugin().getServer().getPluginManager().registerEvents(new BardListener(this), getPlugin()); + getPlugin().getServer().getPluginManager().registerEvents(new ArcherListener(this), getPlugin()); + (new BukkitRunnable() { + @Override + public void run() { + for(final Player player : Bukkit.getOnlinePlayers()){ + Armor armor; + if (KitManager.this.activeKits.containsKey(player)) { + armor = KitManager.this.activeKits.get(player); + if (ItemStackUtils.isWearingFull(player, armor)) { + reapply(player); + if(armor == Armor.GOLD){ + applyBard(player, player.getItemInHand()); + } + if(armor == Armor.IRON &&minerInvisibility && player.getLocation().getBlockY() <= 20){ + player.removePotionEffect(PotionEffectType.INVISIBILITY); + player.addPotionEffect(PotionUtils.MINER_INVISIBILITY_1); + } + } else { + KitManager.this.activeKits.remove(player); + if(player.hasPotionEffect(PotionEffectType.NIGHT_VISION)){ + player.removePotionEffect(PotionEffectType.NIGHT_VISION); + } + HCFactionPlugin.getInstance().sendLocalized(player, "CLASS_REMOVED", KitManager.this.armorToKitString(armor)); + } + } else if (ItemStackUtils.isWearingFull(player, Armor.CHAIN_MAIL) || ItemStackUtils.isWearingFull(player, Armor.GOLD) || ItemStackUtils.isWearingFull(player, Armor.LEATHER) || ItemStackUtils.isWearingFull(player, Armor.IRON)) { + armor = ItemStackUtils.getArmor(player.getInventory().getArmorContents()[0].getType()); + if (!KitManager.this.pendingActivate.containsKey(player)) { + if(disabledArmors.contains(armor)){ + continue; + } + if(warmup > 0){ + HCFactionPlugin.getInstance().sendLocalized(player, "CLASS_WARMUP", KitManager.this.armorToKitString(armor)); + KitManager.this.pendingActivate.put(player, armor); + (new BukkitRunnable() { + @Override + public void run() { + if (KitManager.this.pendingActivate.containsKey(player)) { + Armor armor = KitManager.this.pendingActivate.get(player); + if (ItemStackUtils.isWearingFull(player, armor)) { + HCFactionPlugin.getInstance().sendLocalized(player, "CLASS_ACTIVE", KitManager.this.armorToKitString(armor)); + KitManager.this.activeKits.put(player, armor); + } + + KitManager.this.pendingActivate.remove(player); + } + + } + }).runTaskLater(getPlugin(), warmup * 20); + }else{ + HCFactionPlugin.getInstance().sendLocalized(player, "CLASS_ACTIVE", KitManager.this.armorToKitString(armor)); + KitManager.this.activeKits.put(player, armor); + } + } + } + } + + } + }).runTaskTimer(getPlugin(), 60, 60L); + } + + public Armor getActiveKit(Player player) { + return this.activeKits.get(player); + } + + public String armorToKitString(Armor armor) { + switch (armor) { + case LEATHER: + return "Archer"; + case CHAIN_MAIL: + return "Rouge"; + case GOLD: + return "Bard"; + case IRON: + return "Miner"; + case DIAMOND: + return "Diamond"; + default: + return ""; + } + } + + public void reapply(Player player){ + Armor armor = KitManager.this.activeKits.get(player); + if(armor != null){ + if (ItemStackUtils.isWearingFull(player, armor)) { + for(PotionEffect effect : passive.getEffects(armor)){ + if(effect.getType().equals(PotionEffectType.NIGHT_VISION)){ + if(player.hasPotionEffect(PotionEffectType.NIGHT_VISION)){ + continue; + } + } + PotionUtils.addConcideringLevel(player, effect); + } + } + } + } + + public boolean applyInstantBard(final Player player, ItemStack item) { + if (item != null) { + Material type = item.getType(); + PotionEffect effect = bard.getClickPotionEffect(type); + if (effect != null) { + final Set team = Support.getInstance().getEveryoneInTeamNearByForBard(player); + if (PotionUtils.isNegative(effect.getType())) { + for(Entity entity :player.getNearbyEntities(12.0D, 12.0D, 12.0D) ){ + if (entity instanceof Player) { + Player other = (Player) entity; + if (!team.contains(other)) { + PotionUtils.addConcideringLevel(other, effect); + } + } + } + PotionUtils.addConcideringLevel(player, effect); + } else { + for(final Player players1 : team){ + addEffectWithReturn(players1, effect); + } + addEffectWithReturn(player, effect); + + + } + return true; + } + } + return false; + + } + + class ReturnEffectTask extends BukkitRunnable{ + private Player player; + private PotionEffect pre; + public ReturnEffectTask(Player player, PotionEffect pre) { + super(); + this.player = player; + this.pre = pre; + } + @Override + public void run() { + reapply(player); + if(player.hasPotionEffect(pre.getType())){ + PotionEffect effect = PotionUtils.getPotionEffect(player, pre.getType()); + if(effect.getAmplifier() == pre.getAmplifier()){ + if(pre.getDuration() > effect.getDuration()){ + player.removePotionEffect(pre.getType()); + player.addPotionEffect(pre); + } + }else{ + player.removePotionEffect(pre.getType()); + player.addPotionEffect(pre); + } + }else{ + player.addPotionEffect(pre); + } + Armor armor = getActiveKit(player); + if(armor != null){ + applyBard(player, player.getItemInHand()); + } + } + } + public boolean canBardInstantApply(Player player, ItemStack item) { + if (item != null) { + return bard.getClickPotionEffect(item.getType()) != null; + } else { + return false; + } + } + + public void addEffectWithReturn(Player player , PotionEffect effect){ + if(PotionUtils.canAddConcideringLevel(player, effect) && player.hasPotionEffect(effect.getType())){ + PotionEffect temp = PotionUtils.getPotionEffect(player, effect.getType()); + final PotionEffect pre = new PotionEffect(temp.getType() , temp.getDuration() , temp.getAmplifier() , temp.isAmbient()); + new ReturnEffectTask(player, pre).runTaskLater(getPlugin() , effect.getDuration()); + } + PotionUtils.addConcideringLevel(player, effect); + } + + public void applyBard(final Player player, ItemStack item) { + if (item != null) { + Material type = item.getType(); + final PotionEffect effect = bard.getHeldPotionEffect(type); + if (effect != null) { + final Set team = Support.getInstance().getEveryoneInTeamNearByForBard(player); + for(Player players1 : team){ + if(bard.isNoSelfHeldEffect() && players1 == player){ + continue; + } + addEffectWithReturn(players1, effect); + } + if(!bard.isNoSelfHeldEffect()){ + addEffectWithReturn(player, effect); + } + } + } + + } + + public String getArcherFormula() { + return archerFormula; + } + + public long getRougeCooldownMillisecond() { + return rougeCooldownMillisecond; + } + + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/PassiveConfugiration.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/PassiveConfugiration.java new file mode 100644 index 0000000..5fab575 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/PassiveConfugiration.java @@ -0,0 +1,55 @@ +package net.libhalt.bukkit.kaede.manager.kits; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.bukkit.configuration.Configuration; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.potion.PotionEffect; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Armor; +import net.libhalt.bukkit.kaede.utils.PotionUtils; + +public class PassiveConfugiration { + @SuppressWarnings("unused") + private HCFactionPlugin plugin; + private ConfigurationSection config; + private Map> passiveEffects = new HashMap>(); + public PassiveConfugiration(HCFactionPlugin plugin , Configuration config){ + this.config = config; + this.plugin = plugin; + } + public void init(){ + ConfigurationSection bard = config.getConfigurationSection("bard"); + ConfigurationSection rouge = config.getConfigurationSection("rouge"); + ConfigurationSection miner = config.getConfigurationSection("miner"); + ConfigurationSection archer = config.getConfigurationSection("archer"); + parase(Armor.GOLD, bard); + parase(Armor.CHAIN_MAIL, rouge); + parase(Armor.IRON, miner); + parase(Armor.LEATHER, archer); + + } + + public List getEffects(Armor armor){ + if(passiveEffects.containsKey(armor)){ + return passiveEffects.get(armor); + } + return Collections.emptyList(); + } + private void parase(Armor armor , ConfigurationSection section){ + if(section.isConfigurationSection("passive")){ + ConfigurationSection passiveSection = section.getConfigurationSection("passive"); + List effects = new ArrayList(); + for(String str : passiveSection.getKeys(false)){ + effects.add(PotionUtils.parase(passiveSection.getConfigurationSection(str))); + } + passiveEffects.put(armor, effects); + } + } + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/RougeListener.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/RougeListener.java new file mode 100644 index 0000000..95e54ad --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/manager/kits/RougeListener.java @@ -0,0 +1,93 @@ +package net.libhalt.bukkit.kaede.manager.kits; + +import java.util.WeakHashMap; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Damageable; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.utils.Armor; +import net.libhalt.bukkit.kaede.utils.ItemStackUtils; +import net.libhalt.bukkit.kaede.utils.MilliToSecondFormatter; +import net.libhalt.bukkit.kaede.utils.PotionUtils; + +public class RougeListener implements Listener { + private WeakHashMap stabCoolDown = new WeakHashMap(); + private WeakHashMap sugarCoolDown = new WeakHashMap(); + private KitManager utils; + + public RougeListener(KitManager utils) { + this.utils = utils; + } + + @EventHandler + public void onInteract(PlayerInteractEvent event) { + if ((event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_AIR) && event.hasItem() && event.getItem().getType() == Material.SUGAR) { + Player player = event.getPlayer(); + if (ItemStackUtils.isWearingFull(player, Armor.CHAIN_MAIL) && this.utils.getActiveKit(player) == Armor.CHAIN_MAIL) { + if (this.sugarCoolDown.containsKey(event.getPlayer())) { + long value = this.sugarCoolDown.get(event.getPlayer()).longValue(); + if (value > System.currentTimeMillis()) { + HCFactionPlugin.getInstance().sendLocalized(event.getPlayer(), "ROUGE_INSTANT_EFFECT_COOLDOWN", MilliToSecondFormatter.format(value - System.currentTimeMillis())); + return; + } + } + + this.sugarCoolDown.put(event.getPlayer(), Long.valueOf(System.currentTimeMillis() + 30000L)); + utils.addEffectWithReturn(player, PotionUtils.ROUGE_SPEED_5); + HCFactionPlugin.getInstance().sendLocalized(event.getPlayer(), "ROUGE_INSTANT_EFFECT"); + } + } + + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH) + public void onDamage(EntityDamageByEntityEvent event) { + if (event.getDamager() instanceof Player && event.getEntity() instanceof LivingEntity) { + Player damager = (Player) event.getDamager(); + LivingEntity damagee = (LivingEntity) event.getEntity(); + ItemStack item = damager.getItemInHand(); + if (item != null && item.getType() == Material.GOLD_SWORD && ItemStackUtils.isWearingFull(damager, Armor.CHAIN_MAIL) && this.utils.getActiveKit(damager) == Armor.CHAIN_MAIL) { + Location playerLoc = damager.getLocation(); + Location targetLoc = damagee.getLocation(); + double pvecy = -Math.sin(Math.toRadians(playerLoc.getPitch())); + double pvecx = -Math.cos(Math.toRadians(playerLoc.getPitch())) * Math.sin(Math.toRadians(playerLoc.getYaw())); + double pvecz = Math.cos(Math.toRadians(playerLoc.getPitch())) * Math.cos(Math.toRadians(playerLoc.getYaw())); + double tvecy = -Math.sin(Math.toRadians(targetLoc.getPitch())); + double tvecx = -Math.cos(Math.toRadians(targetLoc.getPitch())) * Math.sin(Math.toRadians(targetLoc.getYaw())); + double tvecz = Math.cos(Math.toRadians(targetLoc.getPitch())) * Math.cos(Math.toRadians(targetLoc.getYaw())); + double dot = tvecx * pvecx + tvecy * pvecy + tvecz * pvecz; + if (dot > 0.6D) { + if (this.stabCoolDown.containsKey(damager)) { + long value = this.stabCoolDown.get(damager).longValue(); + if (value > System.currentTimeMillis()) { + HCFactionPlugin.getInstance().sendLocalized(damager, "ROUGE_BACKSTAB_COOLDOWN", MilliToSecondFormatter.format(value - System.currentTimeMillis())); + return; + } + } + + Damageable damageevar = (Damageable) damagee; + this.stabCoolDown.put(damager, Long.valueOf(System.currentTimeMillis() + utils.getRougeCooldownMillisecond())); + damager.setItemInHand((ItemStack) null); + damagee.setHealth(Math.max(0.0D, damageevar.getHealth() - 6.0D)); + event.setDamage(0.0D); + damager.getWorld().playEffect(damagee.getLocation(), Effect.STEP_SOUND, 152); + damager.getWorld().playSound(damagee.getLocation(), Sound.ITEM_BREAK, 1.0F, 1.0F); + } + } + } + + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/IRegion.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/IRegion.java new file mode 100644 index 0000000..d1764d3 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/IRegion.java @@ -0,0 +1,28 @@ +package net.libhalt.bukkit.kaede.support; + +import org.bukkit.entity.Player; + +public interface IRegion { + + public int getMinX(); + public int getMaxX(); + + public int getMinZ(); + + + public int getMaxZ(); + public int getMinY(); + + public int getMaxY(); + + + public String getWorld(); + + public boolean canCombatTagedPlayerEnter(); + + public boolean shouldPvPTimerFreeze(); + + + public boolean canPvPTimedPlayerEnter(Player player); +} + diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/RegionSupport.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/RegionSupport.java new file mode 100644 index 0000000..8461b19 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/RegionSupport.java @@ -0,0 +1,13 @@ +package net.libhalt.bukkit.kaede.support; + +import java.util.List; + +import org.bukkit.Location; + +public interface RegionSupport { + + public List getRegionsAt(Location location); + + public List getNearByRegion(Location location); + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/Support.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/Support.java new file mode 100644 index 0000000..b8bd2a1 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/Support.java @@ -0,0 +1,91 @@ +package net.libhalt.bukkit.kaede.support; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import net.libhalt.bukkit.kaede.support.builtin.*; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; + +public class Support{ + + private static Support INSTANCE = new Support(); + + public static Support getInstance(){ + return INSTANCE; + } + + private List regionSupporters = new ArrayList(); + private List teamSupporters = new ArrayList(); + + public void register(HCFactionPlugin plugin){ + if(Bukkit.getPluginManager().getPlugin("WorldGuard") != null){ + regionSupporters.add(new WorldGuardRegionSupport()); + } + if(Bukkit.getPluginManager().getPlugin("Popura") != null){ + try{ + regionSupporters.add(new ShockDTRFactionRegionSupport()); + teamSupporters.add(new ShockDTRFactionTeamSupport()); + /* + new ShockDTRScoreboardSupport().register(plugin); + new ShockDTRCombatLoggerSupport().register(plugin); + new ShockDTRSpawnSupport().register(plugin); + +*/ + }catch(Throwable t){ + t.printStackTrace(); + } + } + + regionSupporters.add(new SubsideRegionSupport()); + plugin.getServer().getPluginManager().registerEvents(new SubsideKothSupportListener(), plugin); + + } + + public Set getEveryoneInTeam(Player player){ + Set set = new HashSet(); + for(TeamSupport teamSupport: getTeamSupporters()){ + set.addAll(teamSupport.getPlayerInTeam(player)); + } + return set; + } + + public Set getEveryoneInTeamNearByForBard(Player player){ + Set set = new HashSet(); + for(TeamSupport teamSupport: getTeamSupporters()){ + set.addAll(teamSupport.getPlayerInTeamToApplyBard(player)); + } + return set; + } + public List getTeamSupporters(){ + return teamSupporters; + } + public List getRegionSupporters(){ + return regionSupporters; + } + public boolean isIn(IRegion region, Location location) { + int xmin = Math.min(region.getMinX(), region.getMaxX()); + int xmax = Math.max(region.getMinX(), region.getMaxX()); + int zmin = Math.min(region.getMinZ(), region.getMaxZ()); + int zmax = Math.max(region.getMinZ(), region.getMaxZ()); + int ymin = Math.min(region.getMinY(), region.getMaxY()); + int ymax = Math.max(region.getMinY(), region.getMaxY()); + String world = region.getWorld(); + return world.equals(location.getWorld().getName()) && (location.getBlockY() >= ymin && location.getBlockY() <= ymax || location.getBlockY() <= ymin && location.getBlockY() >= ymax) && (location.getBlockX() >= xmin && location.getBlockX() <= xmax || location.getBlockX() <= xmin && location.getBlockX() >= xmax) && (location.getBlockZ() >= zmin && location.getBlockZ() <= zmax || location.getBlockZ() <= zmin && location.getBlockZ() >= zmax); + } + public boolean isInIgnoreWorld(IRegion region, Location location) { + int xmin = Math.min(region.getMinX(), region.getMaxX()); + int xmax = Math.max(region.getMinX(), region.getMaxX()); + int zmin = Math.min(region.getMinZ(), region.getMaxZ()); + int zmax = Math.max(region.getMinZ(), region.getMaxZ()); + int ymin = Math.min(region.getMinY(), region.getMaxY()); + int ymax = Math.max(region.getMinY(), region.getMaxY()); + return (location.getBlockY() >= ymin && location.getBlockY() <= ymax || location.getBlockY() <= ymin && location.getBlockY() >= ymax) && (location.getBlockX() >= xmin && location.getBlockX() <= xmax || location.getBlockX() <= xmin && location.getBlockX() >= xmax) && (location.getBlockZ() >= zmin && location.getBlockZ() <= zmax || location.getBlockZ() <= zmin && location.getBlockZ() >= zmax); + } + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/TeamSupport.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/TeamSupport.java new file mode 100644 index 0000000..30f4265 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/TeamSupport.java @@ -0,0 +1,13 @@ +package net.libhalt.bukkit.kaede.support; + +import java.util.List; + +import org.bukkit.entity.Player; + +public interface TeamSupport { + + public List getPlayerInTeamToApplyBard(Player player); + + public List getPlayerInTeam(Player player); + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/ShockDTRFactionRegion.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/ShockDTRFactionRegion.java new file mode 100644 index 0000000..8961a3c --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/ShockDTRFactionRegion.java @@ -0,0 +1,106 @@ +package net.libhalt.bukkit.kaede.support.builtin; + +import org.bukkit.entity.Player; + +import net.libhalt.bukkit.kaede.support.IRegion; +import net.syuu.popura.faction.FactionType; +import net.syuu.popura.faction.bean.ClaimedRegion; +import net.syuu.popura.faction.bean.Faction; +import net.syuu.popura.faction.bean.FactionPlayer; + +public class ShockDTRFactionRegion implements IRegion{ + private ClaimedRegion flocation; + public ShockDTRFactionRegion(ClaimedRegion flocation) { + this.flocation = flocation; + } + @Override + public int getMinX() { + return flocation.getMinX(); + } + + @Override + public int getMaxX() { + return flocation.getMaxX(); + } + + @Override + public int getMinZ() { + return flocation.getMinZ(); + + } + + @Override + public int getMaxZ() { + return flocation.getMaxZ(); + } + + @Override + public int getMinY() { + return Integer.MIN_VALUE; + } + + @Override + public int getMaxY() { + return Integer.MAX_VALUE; + } + + @Override + public String getWorld() { + return this.flocation.getWorld(); + } + @Override + public boolean canCombatTagedPlayerEnter() { + Faction faction = flocation.getOwner(); + if(faction.getFactionType() == FactionType.SAFEZONE){ + return false; + } + return true; + } + @Override + public boolean shouldPvPTimerFreeze() { + Faction faction = flocation.getOwner(); + if(faction.getFactionType() == FactionType.SAFEZONE){ + return true; + } + return false; + } + @Override + public boolean canPvPTimedPlayerEnter(Player player) { + Faction faction = flocation.getOwner(); + if(faction.getFactionType() != FactionType.NORMAL){ + if(faction.getName().toLowerCase().contains("koth") || faction.getName().toLowerCase().contains("conquest")){ + return false; + } + return true; + } + + return false; + } + + public boolean canPvPTimedPlayerEnter(FactionPlayer factionPlayer){ + Faction faction = flocation.getOwner(); + if(faction.getFactionType() != FactionType.NORMAL){ + if(faction.getName().toLowerCase().contains("koth") || faction.getName().toLowerCase().contains("conquest")){ + return false; + } + return true; + } + + return false; + } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + ShockDTRFactionRegion that = (ShockDTRFactionRegion) o; + + return flocation != null ? flocation.equals(that.flocation) : that.flocation == null; + + } + + @Override + public int hashCode() { + return flocation != null ? flocation.hashCode() : 0; + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/ShockDTRFactionRegionSupport.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/ShockDTRFactionRegionSupport.java new file mode 100644 index 0000000..41f1257 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/ShockDTRFactionRegionSupport.java @@ -0,0 +1,51 @@ +package net.libhalt.bukkit.kaede.support.builtin; + +import java.util.ArrayList; +import java.util.List; + +import com.google.common.collect.Lists; +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.claim.Position2D; +import net.syuu.popura.faction.bean.ClaimedRegion; +import org.bukkit.Location; + + +import net.libhalt.bukkit.kaede.support.IRegion; +import net.libhalt.bukkit.kaede.support.RegionSupport; + +public class ShockDTRFactionRegionSupport implements RegionSupport { + + @Override + public List getRegionsAt(Location location) { + List regions = new ArrayList(); + + ClaimedRegion flocation = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getClaimedRegionAt(new Position2D(location.getWorld().getName() , location.getBlockX() , location.getBlockZ())); + if(flocation != null) { + regions.add(new ShockDTRFactionRegion(flocation)); + } + return regions; + } + + @Override + public List getNearByRegion(Location location) { + List regions = new ArrayList(); + ClaimedRegion flocation = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getClaimedRegionAt(new Position2D(location.getWorld().getName() , location.getBlockX() , location.getBlockZ())); + if(flocation != null) { + regions.add(new ShockDTRFactionRegion(flocation)); + } + for(int x = -4; x <= 4; ++x) { + for(int z = -4; z <= 4; ++z) { + ClaimedRegion claimedRegion = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getClaimedRegionAt(new Position2D(location.getWorld().getName() , location.getBlockX() + x , location.getBlockZ() + z)); + if(claimedRegion != null) { + ShockDTRFactionRegion shock = new ShockDTRFactionRegion(claimedRegion); + if (!regions.contains(shock)) { + regions.add(shock); + } + } + } + } + return regions; + + } + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/ShockDTRFactionTeamSupport.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/ShockDTRFactionTeamSupport.java new file mode 100644 index 0000000..384b4f9 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/ShockDTRFactionTeamSupport.java @@ -0,0 +1,57 @@ +package net.libhalt.bukkit.kaede.support.builtin; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.faction.bean.Faction; +import net.syuu.popura.faction.bean.FactionPlayer; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +import net.libhalt.bukkit.kaede.support.TeamSupport; + +public class ShockDTRFactionTeamSupport implements TeamSupport{ + + @Override + public List getPlayerInTeamToApplyBard(Player player) { + List team = new ArrayList(); + FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + + Faction faction = factionPlayer.getFaction(); + if (faction != null) { + Collection players = faction.getOnlineMembers(); + for(Entity entity :player.getNearbyEntities(12.0D, 12.0D, 12.0D) ){ + if (entity instanceof Player) { + Player other = (Player) entity; + if (players.contains(other)) { + team.add(other); + } + } + } + } + team.add(player); + return team; + } + + @Override + public List getPlayerInTeam(Player player) { + List team = new ArrayList(); + FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + Faction faction = factionPlayer.getFaction(); + + if (faction != null) { + for(Player other : faction.getOnlineMembers()){ + if (!team.contains(other)) { + team.add(other); + } + } + } + team.add(player); + return team; + + } + + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/SubsideKothSupportListener.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/SubsideKothSupportListener.java new file mode 100644 index 0000000..580a700 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/SubsideKothSupportListener.java @@ -0,0 +1,62 @@ +package net.libhalt.bukkit.kaede.support.builtin; + + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import net.libhalt.bukkit.kaede.event.ScoreboardTextAboutToUpdateEvent; +import subside.plugins.koth.KothPlugin; +import subside.plugins.koth.areas.Koth; + +public class SubsideKothSupportListener implements Listener{ + + + @EventHandler + public void onScoreboardTextAboutToUpdate(ScoreboardTextAboutToUpdateEvent event){ + + if(event.getText() != null && (event.getText().contains("%koth-x%") || event.getText().contains("%koth-z%") || event.getText().contains("%kothname%") || event.getText().contains("%kothtime%"))){ + KothPlugin kothPlugin = KothPlugin.getPlugin(KothPlugin.class); + Koth koth = null; + for(Koth wrap : kothPlugin.getKothHandler().getAvailableKoths()){ + if(wrap.isRunning()){ + koth = wrap; + break; + } + } + String text = event.getText(); + if(text.contains("%kothname%")){ + if(koth == null){ + event.setText(null); + return; + }else{ + text = text.replace("%kothname%", koth.getName()); + } + } + if(text.contains("%kothtime%")){ + if(koth == null){ + event.setText(null); + return; + }else{ + text = text.replace("%kothtime%", koth.getRunningKoth().getTimeObject().getTimeLeftFormatted()); + } + } + if(text.contains("%koth-x%")){ + if(koth == null){ + event.setText(null); + return; + }else{ + text = text.replace("%koth-x%", String.valueOf(koth.getMiddle().getBlockX())); + } + } + if(text.contains("%koth-z%")){ + if(koth == null){ + event.setText(null); + return; + }else{ + text = text.replace("%koth-z%", String.valueOf(koth.getMiddle().getBlockZ())); + } + } + event.setText(text); + } + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/SubsideRegion.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/SubsideRegion.java new file mode 100644 index 0000000..697d391 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/SubsideRegion.java @@ -0,0 +1,66 @@ +package net.libhalt.bukkit.kaede.support.builtin; + +import net.libhalt.bukkit.kaede.support.IRegion; +import org.bukkit.entity.Player; +import subside.plugins.koth.areas.Koth; + +public class SubsideRegion implements IRegion{ + private Koth protectedRegion; + public SubsideRegion(Koth protectedRegion) { + this.protectedRegion = protectedRegion; + } + @Override + public int getMinX() { + return Math.min(protectedRegion.getAreas().get(0).getMin().getBlockX() , protectedRegion.getAreas().get(0).getMax().getBlockX()); + } + + @Override + public int getMaxX() { + return Math.max(protectedRegion.getAreas().get(0).getMin().getBlockX() , protectedRegion.getAreas().get(0).getMax().getBlockX()); + + } + + @Override + public int getMinZ() { + return Math.min(protectedRegion.getAreas().get(0).getMin().getBlockZ() , protectedRegion.getAreas().get(0).getMax().getBlockZ()); + + } + + @Override + public int getMaxZ() { + return Math.max(protectedRegion.getAreas().get(0).getMin().getBlockZ() , protectedRegion.getAreas().get(0).getMax().getBlockZ()); + + } + + @Override + public int getMinY() { + return Math.min(protectedRegion.getAreas().get(0).getMin().getBlockY() , protectedRegion.getAreas().get(0).getMax().getBlockY()); + + } + + @Override + public int getMaxY() { + return Math.max(protectedRegion.getAreas().get(0).getMin().getBlockY() , protectedRegion.getAreas().get(0).getMax().getBlockY()); + } + + @Override + public String getWorld() { + return protectedRegion.getAreas().get(0).getMiddle().getWorld().getName(); + } + + @Override + public boolean canCombatTagedPlayerEnter() { + return true; + } + + @Override + public boolean shouldPvPTimerFreeze() { + return false; + } + + @Override + public boolean canPvPTimedPlayerEnter(Player player) { + return false; + } + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/SubsideRegionSupport.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/SubsideRegionSupport.java new file mode 100644 index 0000000..2d75650 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/SubsideRegionSupport.java @@ -0,0 +1,38 @@ +package net.libhalt.bukkit.kaede.support.builtin; + +import net.libhalt.bukkit.kaede.support.IRegion; +import net.libhalt.bukkit.kaede.support.RegionSupport; +import net.libhalt.bukkit.kaede.support.Support; +import org.bukkit.Location; +import org.bukkit.plugin.java.JavaPlugin; +import subside.plugins.koth.KothPlugin; +import subside.plugins.koth.gamemodes.RunningKoth; + +import java.util.ArrayList; +import java.util.List; + +public class SubsideRegionSupport implements RegionSupport{ + + @Override + public List getRegionsAt(Location location) { + List regions = new ArrayList(); + for(RunningKoth wrap : JavaPlugin.getPlugin(KothPlugin.class).getKothHandler().getRunningKoths()){ + SubsideRegion subsideRegion = new SubsideRegion(wrap.getKoth()); + if(Support.getInstance().isIn(subsideRegion , location)){ + regions.add(new SubsideRegion(wrap.getKoth())); + } + } + return regions; + } + + @Override + public List getNearByRegion(Location location) { + List regions = new ArrayList(); + for(RunningKoth wrap : JavaPlugin.getPlugin(KothPlugin.class).getKothHandler().getRunningKoths()){ + regions.add(new SubsideRegion(wrap.getKoth())); + } + return regions; + } + + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/WorldGuardRegion.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/WorldGuardRegion.java new file mode 100644 index 0000000..b0615ee --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/WorldGuardRegion.java @@ -0,0 +1,71 @@ +package net.libhalt.bukkit.kaede.support.builtin; + +import org.bukkit.entity.Player; + +import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.StateFlag.State; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; + +import net.libhalt.bukkit.kaede.support.IRegion; + +public class WorldGuardRegion implements IRegion{ + private ProtectedRegion protectedRegion; + private String world; + public WorldGuardRegion(String world , ProtectedRegion protectedRegion) { + this.protectedRegion = protectedRegion; + this.world = world; + } + @Override + public int getMinX() { + return protectedRegion.getMinimumPoint().getBlockX(); + } + + @Override + public int getMaxX() { + return protectedRegion.getMaximumPoint().getBlockX(); + + } + + @Override + public int getMinZ() { + return protectedRegion.getMinimumPoint().getBlockZ(); + } + + @Override + public int getMaxZ() { + return protectedRegion.getMaximumPoint().getBlockZ(); + + } + + @Override + public int getMinY() { + return protectedRegion.getMinimumPoint().getBlockY(); + + } + + @Override + public int getMaxY() { + return protectedRegion.getMaximumPoint().getBlockY(); + } + + @Override + public String getWorld() { + return world; + } + + @Override + public boolean canCombatTagedPlayerEnter() { + return protectedRegion.getFlag(DefaultFlag.PVP) != State.DENY; + } + + @Override + public boolean shouldPvPTimerFreeze() { + return protectedRegion.getFlag(DefaultFlag.PVP) == State.DENY; + } + + @Override + public boolean canPvPTimedPlayerEnter(Player player) { + return true; + } + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/WorldGuardRegionSupport.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/WorldGuardRegionSupport.java new file mode 100644 index 0000000..5981e2a --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/builtin/WorldGuardRegionSupport.java @@ -0,0 +1,39 @@ +package net.libhalt.bukkit.kaede.support.builtin; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Location; + +import com.sk89q.worldguard.bukkit.WGBukkit; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; + +import net.libhalt.bukkit.kaede.support.IRegion; +import net.libhalt.bukkit.kaede.support.RegionSupport; + +public class WorldGuardRegionSupport implements RegionSupport{ + + @Override + public List getRegionsAt(Location location) { + List regions = new ArrayList(); + for(ProtectedRegion region : WGBukkit.getPlugin().getRegionManager(location.getWorld()).getApplicableRegions(location)){ + if(region != null){ + regions.add(new WorldGuardRegion(location.getWorld().getName(), region)); + } + } + return regions; + } + + @Override + public List getNearByRegion(Location location) { + List regions = new ArrayList(); + for(ProtectedRegion region : WGBukkit.getPlugin().getRegionManager(location.getWorld()).getRegions().values()){ + if(region != null){ + regions.add(new WorldGuardRegion(location.getWorld().getName(), region)); + } + } + return regions; + } + + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/event/ScoreboardEntryProcessFinishEvent.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/event/ScoreboardEntryProcessFinishEvent.java new file mode 100644 index 0000000..3b285fc --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/event/ScoreboardEntryProcessFinishEvent.java @@ -0,0 +1,29 @@ +package net.libhalt.bukkit.kaede.support.event; + +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; +import org.bukkit.scoreboard.Scoreboard; + +public class ScoreboardEntryProcessFinishEvent extends PlayerEvent{ + private static final HandlerList handlers = new HandlerList(); + + private Scoreboard scoreboard; + public ScoreboardEntryProcessFinishEvent(Player who , Scoreboard scoreboard) { + super(who); + this.scoreboard = scoreboard; + } + + + public Scoreboard getScoreboard() { + return scoreboard; + } + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/specific/PluginSupportManager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/specific/PluginSupportManager.java new file mode 100644 index 0000000..a6862b3 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/support/specific/PluginSupportManager.java @@ -0,0 +1,5 @@ +package net.libhalt.bukkit.kaede.support.specific; + +public class PluginSupportManager { + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/Armor.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/Armor.java new file mode 100644 index 0000000..96acc5d --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/Armor.java @@ -0,0 +1,5 @@ +package net.libhalt.bukkit.kaede.utils; + +public enum Armor { + LEATHER, CHAIN_MAIL, GOLD, IRON, DIAMOND; +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/Calculations.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/Calculations.java new file mode 100644 index 0000000..731fe39 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/Calculations.java @@ -0,0 +1,157 @@ +package net.libhalt.bukkit.kaede.utils; + +import org.bukkit.configuration.file.*; +import org.bukkit.*; +import org.bukkit.entity.*; +import org.bukkit.inventory.*; + +public class Calculations +{ + private static String version; + + static { + Calculations.version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; + } + + public static String LangConfig(final FileConfiguration fileConfig, final String configValue, String text, final boolean colorize) { + fileConfig.addDefault(configValue, (Object)text); + final String langVariable = fileConfig.getString(configValue); + if (colorize) { + text = ChatColor.translateAlternateColorCodes('&', langVariable); + } + fileConfig.set(configValue, (Object)langVariable); + return text; + } + + public static int levelToExp(final int level) { + if (Calculations.version.contains("1_7")) { + if (level <= 15) { + return 17 * level; + } + if (level <= 30) { + return 3 * level * level / 2 - 59 * level / 2 + 360; + } + return 7 * level * level / 2 - 303 * level / 2 + 2220; + } + else { + if (level <= 15) { + return level * level + 6 * level; + } + if (level <= 30) { + return (int)(2.5 * level * level - 40.5 * level + 360.0); + } + return (int)(4.5 * level * level - 162.5 * level + 2220.0); + } + } + + public static int deltaLevelToExp(final int level) { + if (Calculations.version.contains("1_7")) { + if (level <= 15) { + return 17; + } + if (level <= 30) { + return 3 * level - 31; + } + return 7 * level - 155; + } + else { + if (level <= 15) { + return 2 * level + 7; + } + if (level <= 30) { + return 5 * level - 38; + } + return 9 * level - 158; + } + } + + public static int currentlevelxpdelta(final Player player) { + final int levelxp = deltaLevelToExp(player.getLevel()) - (levelToExp(player.getLevel()) + Math.round(deltaLevelToExp(player.getLevel()) * player.getExp()) - levelToExp(player.getLevel())); + return levelxp; + } + + public static String variablereplace(String text, final String Replace, final String ReplaceWhat) { + text = ReplaceWhat.replace(Replace, text); + return text; + } + + public static String toSentenceCase(final String inputString) { + String result = ""; + if (inputString.length() == 0) { + return result; + } + final char firstChar = inputString.charAt(0); + final char firstCharToUpperCase = Character.toUpperCase(firstChar); + result = String.valueOf(result) + firstCharToUpperCase; + boolean terminalCharacterEncountered = false; + final char[] terminalCharacters = { '.', '?', '!' }; + for (int i = 1; i < inputString.length(); ++i) { + final char currentChar = inputString.charAt(i); + if (terminalCharacterEncountered) { + if (currentChar == ' ') { + result = String.valueOf(result) + currentChar; + } + else { + final char currentCharToUpperCase = Character.toUpperCase(currentChar); + result = String.valueOf(result) + currentCharToUpperCase; + terminalCharacterEncountered = false; + } + } + else { + final char currentCharToLowerCase = Character.toLowerCase(currentChar); + result = String.valueOf(result) + currentCharToLowerCase; + } + for (int j = 0; j < terminalCharacters.length; ++j) { + if (currentChar == terminalCharacters[j]) { + terminalCharacterEncountered = true; + break; + } + } + } + return result; + } + + public static int countItems(final Player player, final int itemID) { + final PlayerInventory inventory = player.getInventory(); + int amount = 0; + for (int slot = 0; slot < inventory.getSize(); ++slot) { + final ItemStack curItem = inventory.getItem(slot); + if (curItem != null && curItem.getTypeId() == itemID) { + amount += curItem.getAmount(); + } + } + return amount; + } + + public static int getPlayerExperience(final Player player) { + final int bukkitExp = levelToExp(player.getLevel()) + Math.round(deltaLevelToExp(player.getLevel()) * player.getExp()); + return bukkitExp; + } + + public static boolean checkInventory(final Player player, final int itemID, final int amount) { + final PlayerInventory inventory = player.getInventory(); + return inventory.contains(itemID, amount); + } + + public static boolean consumeItem(final Player player, final int itemID, int amount) { + final PlayerInventory inventory = player.getInventory(); + int i = -1; + ItemStack[] contents; + for (int length = (contents = inventory.getContents()).length, j = 0; j < length; ++j) { + final ItemStack one = contents[j]; + ++i; + if (one != null) { + if (one.getTypeId() == itemID && amount > 0) { + if (one.getAmount() > amount) { + one.setAmount(one.getAmount() - amount); + break; + } + amount -= one.getAmount(); + inventory.setItem(i, (ItemStack)null); + if (amount > 0) {} + } + } + } + return true; + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/ConfigurationWrapper.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/ConfigurationWrapper.java new file mode 100644 index 0000000..694bbc4 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/ConfigurationWrapper.java @@ -0,0 +1,68 @@ +package net.libhalt.bukkit.kaede.utils; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.java.JavaPlugin; + +import com.google.common.io.ByteStreams; + +public class ConfigurationWrapper { + private File file; + private String name; + private YamlConfiguration config; + private JavaPlugin plugin; + + public ConfigurationWrapper(String name, JavaPlugin plugin) { + this.plugin = plugin; + this.name = name; + plugin.getDataFolder().mkdir(); + this.file = new File(plugin.getDataFolder(), name); + this.saveDefault(); + this.reloadConfig(); + } + + public YamlConfiguration getConfig() { + return this.config; + } + + public File getFile(){ + return file; + } + public void saveDefault() { + if (!this.file.exists()) { + InputStream defConfigStream = this.plugin.getResource(this.name); + FileOutputStream stream = null; + + try { + stream = new FileOutputStream(this.file); + ByteStreams.copy(defConfigStream, stream); + } catch (IOException var12) { + var12.printStackTrace(); + } finally { + if (stream != null) { + try { + stream.close(); + } catch (IOException var11) { + var11.printStackTrace(); + } + } + + } + } + + } + + public void reloadConfig() { + this.config = YamlConfiguration.loadConfiguration(this.file); + /* + InputStream defConfigStream = this.plugin.getResource(this.name); + if (defConfigStream != null) { + YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(new InputStreamReader(defConfigStream, Charsets.UTF_8)); + this.config.setDefaults(defConfig); + } + */ + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/Eval.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/Eval.java new file mode 100644 index 0000000..a5535da --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/Eval.java @@ -0,0 +1,94 @@ +package net.libhalt.bukkit.kaede.utils; + +public class Eval { + public static double eval(final String str) throws NumberFormatException { + class Parser { + int pos = -1, c; + + void eatChar() { + c = (++pos < str.length()) ? str.charAt(pos) : -1; + } + + void eatSpace() { + while (Character.isWhitespace(c)) eatChar(); + } + + double parse() { + eatChar(); + double v = parseExpression(); + if (c != -1) throw new NumberFormatException("Unexpected: " + (char)c); + return v; + } + + // Grammar: + // expression = term | expression `+` term | expression `-` term + // term = factor | term `*` factor | term `/` factor | term brackets + // factor = brackets | number | factor `^` factor + // brackets = `(` expression `)` + + double parseExpression() { + double v = parseTerm(); + for (;;) { + eatSpace(); + if (c == '+') { // addition + eatChar(); + v += parseTerm(); + } else if (c == '-') { // subtraction + eatChar(); + v -= parseTerm(); + } else { + return v; + } + } + } + + double parseTerm() { + double v = parseFactor(); + for (;;) { + eatSpace(); + if (c == '/') { // division + eatChar(); + v /= parseFactor(); + } else if (c == '*' || c == '(') { // multiplication + if (c == '*') eatChar(); + v *= parseFactor(); + } else { + return v; + } + } + } + + double parseFactor() { + double v; + boolean negate = false; + eatSpace(); + if (c == '(') { // brackets + eatChar(); + v = parseExpression(); + if (c == ')') eatChar(); + } else { // numbers + if (c == '+' || c == '-') { // unary plus & minus + negate = c == '-'; + eatChar(); + eatSpace(); + } + StringBuilder sb = new StringBuilder(); + while ((c >= '0' && c <= '9') || c == '.') { + sb.append((char)c); + eatChar(); + } + if (sb.length() == 0) throw new NumberFormatException("Unexpected: " + (char)c); + v = Double.parseDouble(sb.toString()); + } + eatSpace(); + if (c == '^') { // exponentiation + eatChar(); + v = Math.pow(v, parseFactor()); + } + if (negate) v = -v; // exponentiation has higher priority than unary minus: -3^2=-9 + return v; + } + } + return new Parser().parse(); + } +} \ No newline at end of file diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/FastOfflinePlayer.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/FastOfflinePlayer.java new file mode 100644 index 0000000..7b98063 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/FastOfflinePlayer.java @@ -0,0 +1,117 @@ +package net.libhalt.bukkit.kaede.utils; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +import com.google.common.base.Charsets; +import com.google.common.base.Objects; +import com.google.common.collect.Maps; + +public class FastOfflinePlayer implements OfflinePlayer { + private final String playerName; + + public FastOfflinePlayer(String playerName) { + this.playerName = playerName; + } + + @Override + public boolean isOnline() { + return false; + } + + @Override + public String getName() { + return this.playerName; + } + + @Override + public UUID getUniqueId() { + return UUID.nameUUIDFromBytes(this.playerName.getBytes(Charsets.UTF_8)); + } + + @Override + public boolean isBanned() { + return false; + } + + @Override + public void setBanned(boolean banned) { + } + + @Override + public boolean isWhitelisted() { + return false; + } + + @Override + public void setWhitelisted(boolean value) { + } + + @Override + public Player getPlayer() { + return null; + } + + @Override + public long getFirstPlayed() { + return System.currentTimeMillis(); + } + + @Override + public long getLastPlayed() { + return System.currentTimeMillis(); + } + + @Override + public boolean hasPlayedBefore() { + return false; + } + + @Override + public Location getBedSpawnLocation() { + return new Location(Bukkit.getWorlds().get(0), 0.0D, 0.0D, 0.0D); + } + + @Override + public boolean isOp() { + return false; + } + + @Override + public void setOp(boolean value) { + } + + @Override + public Map serialize() { + LinkedHashMap result = Maps.newLinkedHashMap(); + result.put("UUID", this.getUniqueId().toString()); + result.put("name", this.playerName); + return result; + } + + @Override + public int hashCode() { + return Objects.hashCode(new Object[] { this.playerName }); + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof FastOfflinePlayer)) { + return false; + } else { + FastOfflinePlayer other = (FastOfflinePlayer) obj; + return Objects.equal(this.playerName, other.playerName); + } + } + + @Override + public String toString() { + return Objects.toStringHelper(this).add("playerName", this.playerName).toString(); + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/ItemStackUtils.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/ItemStackUtils.java new file mode 100644 index 0000000..bb6b0f7 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/ItemStackUtils.java @@ -0,0 +1,273 @@ +package net.libhalt.bukkit.kaede.utils; + +import java.util.List; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import com.google.common.base.Preconditions; + +public class ItemStackUtils { + public static ItemStack setItemLore(ItemStack item, List lore){ + Preconditions.checkNotNull(item); + Preconditions.checkNotNull(lore); + Preconditions.checkState(item.getType() != Material.AIR); + org.bukkit.inventory.meta.ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setLore(lore); + item.setItemMeta(itemMeta); + return item; + } + public static ItemStack setItemTitle(ItemStack item, String title){ + Preconditions.checkNotNull(item); + Preconditions.checkNotNull(title); + Preconditions.checkState(item.getType() != Material.AIR); + org.bukkit.inventory.meta.ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setDisplayName(title); + item.setItemMeta(itemMeta); + return item; + } + + + public static boolean isEmpty(ItemStack item){ + return item == null || item.getType() == Material.AIR; + } + + public static boolean isWearingFull(Player player , Armor armor){ + for(int i = 0 ; i < 4 ; i++){ + ItemStack item = player.getInventory().getArmorContents()[i]; + if(item == null){ + return false; + } + switch(armor){ + case CHAIN_MAIL: + if(!isChainArmor(item.getType())){ + return false; + } + break; + case GOLD: + if(!isGoldenArmor(item.getType())){ + return false; + } + break; + case DIAMOND: + if(!isDiamondArmor(item.getType())){ + return false; + } + break; + case IRON: + if(!isIronArmor(item.getType())){ + return false; + } + break; + case LEATHER: + if(!isLeatherArmor(item.getType())){ + return false; + } + break; + } + } + return true; + } + public static int getIndexOfArmor(Material material){ + Preconditions.checkState(isArmor(material)); + if(isHelmet(material)){ + return 3; + }else if(isChestPlate(material)){ + return 2; + }else if(isLegging(material)){ + return 1; + }else{ + return 0; + } + } + + + public static Armor getArmor(Material material){ + Preconditions.checkState(isArmor(material)); + if(isLeatherArmor(material)){ + return Armor.LEATHER; + }else if(isChainArmor(material)){ + return Armor.CHAIN_MAIL; + }else if(isGoldenArmor(material)){ + return Armor.GOLD; + }else if(isIronArmor(material)){ + return Armor.IRON; + }else{ + return Armor.DIAMOND; + } + } + + public static boolean isArmorOfType(Material material , Armor armor){ + Preconditions.checkState(isArmor(material)); + switch(armor){ + case CHAIN_MAIL: + return isChainArmor(material); + case DIAMOND: + return isDiamondArmor(material); + case GOLD : + return isGoldenArmor(material); + case IRON : + return isIronArmor(material); + case LEATHER: + return isLeatherArmor(material); + } + throw new AssertionError(); + } + public static boolean isArmor(Material material){ + return isHelmet(material) || isChestPlate(material) || isLegging(material) || isBoot(material); + } + public static boolean isHelmet(Material material){ + switch(material){ + case GOLD_HELMET: + case LEATHER_HELMET: + case CHAINMAIL_HELMET: + case DIAMOND_HELMET: + case IRON_HELMET: + return true; + default: + return false; + } + } + + public static boolean isChestPlate(Material material){ + switch(material){ + case GOLD_CHESTPLATE: + case LEATHER_CHESTPLATE: + case CHAINMAIL_CHESTPLATE: + case DIAMOND_CHESTPLATE: + case IRON_CHESTPLATE: + return true; + default: + return false; + } + } + + public static boolean isLegging(Material material){ + switch(material){ + case GOLD_LEGGINGS: + case LEATHER_LEGGINGS: + case CHAINMAIL_LEGGINGS: + case DIAMOND_LEGGINGS: + case IRON_LEGGINGS: + return true; + default: + return false; + } + } + + public static boolean isBoot(Material material){ + switch(material){ + case GOLD_BOOTS: + case LEATHER_BOOTS: + case CHAINMAIL_BOOTS: + case DIAMOND_BOOTS: + case IRON_BOOTS: + return true; + default: + return false; + } + } + + public static boolean isGoldenArmor(Material material){ + switch(material){ + case GOLD_HELMET: + case GOLD_CHESTPLATE: + case GOLD_LEGGINGS: + case GOLD_BOOTS: + return true; + default: + return false; + } + } + + public static boolean isChainArmor(Material material){ + switch(material){ + case CHAINMAIL_HELMET: + case CHAINMAIL_CHESTPLATE: + case CHAINMAIL_LEGGINGS: + case CHAINMAIL_BOOTS: + return true; + default: + return false; + } + } + + public static boolean isIronArmor(Material material){ + switch(material){ + case IRON_HELMET: + case IRON_CHESTPLATE: + case IRON_LEGGINGS: + case IRON_BOOTS: + return true; + default: + return false; + } + } + public static boolean isDiamondArmor(Material material){ + switch(material){ + case DIAMOND_HELMET: + case DIAMOND_CHESTPLATE: + case DIAMOND_LEGGINGS: + case DIAMOND_BOOTS: + return true; + default: + return false; + } + } + + public static boolean isLeatherArmor(Material material){ + switch(material){ + case LEATHER_HELMET: + case LEATHER_CHESTPLATE: + case LEATHER_LEGGINGS: + case LEATHER_BOOTS: + return true; + default: + return false; + } + } + + + public static boolean canInteract(Material material) { + if (material == null || !material.isBlock()) { + return false; + } + switch (material) { + case DISPENSER: + case NOTE_BLOCK: + case BED_BLOCK: + case CHEST: + case WORKBENCH: + case FURNACE: + case BURNING_FURNACE: + case WOODEN_DOOR: + case LEVER: + case REDSTONE_ORE: + case STONE_BUTTON: + case JUKEBOX: + case CAKE_BLOCK: + case DIODE_BLOCK_ON: + case DIODE_BLOCK_OFF: + case TRAP_DOOR: + case FENCE_GATE: + case ENCHANTMENT_TABLE: + case BREWING_STAND: + case DRAGON_EGG: + case ENDER_CHEST: + case COMMAND: + case BEACON: + case WOOD_BUTTON: + case ANVIL: + case TRAPPED_CHEST: + case REDSTONE_COMPARATOR_ON: + case REDSTONE_COMPARATOR_OFF: + case HOPPER: + case DROPPER: + return true; + default: + return false; + } + } + +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/Manager.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/Manager.java new file mode 100644 index 0000000..7f94400 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/Manager.java @@ -0,0 +1,29 @@ +package net.libhalt.bukkit.kaede.utils; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import org.bukkit.command.CommandExecutor; + +public abstract class Manager { + private HCFactionPlugin plugin; + + public Manager(HCFactionPlugin plugin) { + this.plugin = plugin; + } + + public void init() { + } + + public void tear() { + } + + public void reload() { + } + + public void registerCommand(String cmd, CommandExecutor executor) { + getPlugin().getCommand(cmd).setExecutor(executor); + } + + public HCFactionPlugin getPlugin() { + return this.plugin; + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/MilliToSecondFormatter.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/MilliToSecondFormatter.java new file mode 100644 index 0000000..3250363 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/MilliToSecondFormatter.java @@ -0,0 +1,11 @@ +package net.libhalt.bukkit.kaede.utils; + +import java.text.DecimalFormat; + +public class MilliToSecondFormatter { + private static final DecimalFormat FORMAT = new DecimalFormat("0.0"); + + public static String format(long millisecond) { + return FORMAT.format(millisecond / 1000.0D); + } +} diff --git a/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/PotionUtils.java b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/PotionUtils.java new file mode 100644 index 0000000..aa2296f --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/bukkit/kaede/utils/PotionUtils.java @@ -0,0 +1,77 @@ +package net.libhalt.bukkit.kaede.utils; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import com.google.common.base.Preconditions; + +public class PotionUtils { + public static final PotionEffect ROUGE_SPEED_5 = new PotionEffect(PotionEffectType.SPEED, 300, 4); + public static final PotionEffect MINER_INVISIBILITY_1 = new PotionEffect(PotionEffectType.INVISIBILITY, 120, 0); + + private static List negatives; + static{ + List negatives = new ArrayList(); + negatives.add(PotionEffectType.POISON); + negatives.add(PotionEffectType.WEAKNESS); + negatives.add(PotionEffectType.BLINDNESS); + negatives.add(PotionEffectType.WITHER ); + negatives.add(PotionEffectType.SLOW); + negatives.add(PotionEffectType.WEAKNESS); + PotionUtils.negatives = negatives; + + } + public static boolean isNegative(PotionEffectType type) { + return negatives.contains(type); + } + + public static boolean canAddConcideringLevel(Player player, PotionEffect effect) { + if (player.hasPotionEffect(effect.getType())) { + PotionEffect before = getPotionEffect(player, effect.getType()); + if (before.getAmplifier() < effect.getAmplifier()) { + return true; + } else if (before.getAmplifier() == effect.getAmplifier() && before.getDuration() < effect.getDuration()) { + return true; + } + } else { + return true; + } + return false; + + + } + public static void addConcideringLevel(Player player, PotionEffect effect) { + if(canAddConcideringLevel(player, effect)){ + player.addPotionEffect(effect, true); + } + } + + @SuppressWarnings("deprecation") + public static PotionEffect getPotionEffect(Player player, PotionEffectType type) { + Preconditions.checkState(player.hasPotionEffect(type)); + for(PotionEffect effect : player.getActivePotionEffects()){ + if (effect.getType().getId() == type.getId()) { + return effect; + } + } + throw new AssertionError(); + } + + public static PotionEffect parase(ConfigurationSection section){ + String value = section.getString("type"); + int amplifier = section.getInt("amplifier"); + int duration = section.getInt("duration"); + PotionEffectType type = PotionEffectType.getByName(value); + if(type == null){ + JavaPlugin.getProvidingPlugin(PotionUtils.class).getLogger().severe("Can not parase " + value + " as potion effect in bard configuration"); + return null; + } + return new PotionEffect(type , duration , amplifier); + } +} diff --git a/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/ArmorPlugin.java b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/ArmorPlugin.java new file mode 100644 index 0000000..34234e4 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/ArmorPlugin.java @@ -0,0 +1,197 @@ +package net.libhalt.dev.plugin.armor; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.bukkit.kaede.event.*; +import net.libhalt.bukkit.kaede.utils.ConfigurationWrapper; +import net.libhalt.bukkit.kaede.utils.Manager; +import org.bukkit.configuration.Configuration; +import org.bukkit.plugin.java.*; +import org.bukkit.entity.*; +import net.libhalt.dev.plugin.armor.kit.*; +import net.syuu.common.event.*; +import org.bukkit.event.*; +import org.bukkit.plugin.*; +import net.libhalt.dev.plugin.armor.listener.*; +import net.libhalt.dev.plugin.armor.task.*; +import org.bukkit.scheduler.*; +import java.util.*; +import net.libhalt.dev.plugin.armor.utils.*; +import org.bukkit.potion.*; +import org.bukkit.*; + +public class ArmorPlugin extends Manager +{ + + public static ArmorPlugin getInstance(){ + return INSTANCE; + } + private static ArmorPlugin INSTANCE; + private WeakHashMap activeKit = new WeakHashMap();; + private Map classes = new HashMap(); + private Bard bard; + private Miner miner; + private Archer archer; + private Rouge rouge; + private int classCooldown; + + public ArmorPlugin(HCFactionPlugin plugin) { + super(plugin); + } + + private ConfigurationWrapper config; + public Configuration getConfig(){ + return config.getConfig(); + } + public void init() { + INSTANCE = this; + getPlugin().getServer().getPluginManager().registerEvents(new Listener() { + @EventHandler + public void onScoreboard(net.libhalt.bukkit.kaede.event.ScoreboardTextAboutToUpdateEvent event){ + if(bard.isEnabled() && event.getText() != null && event.getText().contains("%energy%")) { + int power = bard.getPower(event.getPlayer()); + if(power >= 1){ + event.setText(event.getText().replace("%energy%" , String.valueOf(power - 1))); + }else{ + event.setText(null); + } + } + if(bard.isEnabled() && event.getText() != null && event.getText().contains("%class%")){ + Armor active = getActiveArmor(event.getPlayer()); + if(active != null){ + event.setText(event.getText().replace("%class%" , active.toKit())); + }else{ + event.setText(null); + } + } + } + } , this.getPlugin()); + config = new ConfigurationWrapper("armor-class.yml", this.getPlugin()); + this.bard = new Bard(this.getConfig().getConfigurationSection("bard")); + this.miner = new Miner(this.getConfig().getConfigurationSection("miner")); + this.archer = new Archer(this.getConfig().getConfigurationSection("archer")); + this.rouge = new Rouge(this.getConfig().getConfigurationSection("rouge")); + this.classes.put(Armor.GOLD, this.bard); + this.classes.put(Armor.IRON, this.miner); + this.classes.put(Armor.LEATHER, this.archer); + this.classes.put(Armor.CHAIN_MAIL, this.rouge); + getPlugin().getServer().getPluginManager().registerEvents((Listener)new ClassListener(this), getPlugin()); + getPlugin().getServer().getPluginManager().registerEvents((Listener)new ArcherListener(this), getPlugin()); + getPlugin().getServer().getPluginManager().registerEvents((Listener)new RougeListener(this), getPlugin()); + new TaskClassChecker(this).runTaskTimer(this.getPlugin(), 60L, 60L); + new BukkitRunnable() { + public void run() { + for (final Player player : Bukkit.getOnlinePlayers()) { + if (ArmorPlugin.this.activeKit.get(player) == Armor.GOLD) { + ArmorPlugin.this.bard.setPower(player, Math.min(101, ArmorPlugin.this.bard.getPower(player) + 1)); + if (ArmorPlugin.this.bard.getPower(player) % 10 != 0) { + continue; + } + player.sendMessage(ArmorPlugin.this.getText("BARD_POWEER").replace("{power}", String.valueOf(ArmorPlugin.this.bard.getPower(player)))); + } + else { + ArmorPlugin.this.bard.setPower(player, 0); + } + } + } + }.runTaskTimer(this.getPlugin(), 20L, 20L); + } + + public boolean hasActiveKit(final Player player) { + return this.activeKit.containsKey(player); + } + + public void setActive(final Player player, final Armor armor) { + if (armor == null) { + this.activeKit.remove(player); + } + else { + this.activeKit.put(player, armor); + } + } + + public void addEffectWithReturn(final Player player, PotionEffect effect) { + if (PotionUtils.canAddConcideringLevel(player, effect) && player.hasPotionEffect(effect.getType())) { + final PotionEffect temp = PotionUtils.getPotionEffect(player, effect.getType()); + final PotionEffect pre = new PotionEffect(temp.getType(), temp.getDuration(), temp.getAmplifier(), temp.isAmbient()); + new ReturnEffectTask(player, pre).runTaskLater(getPlugin(), (long)effect.getDuration() - 20); + effect = new PotionEffect(effect.getType() , effect.getDuration() + 20, effect.getAmplifier() , effect.isAmbient()); + } + PotionUtils.addConcideringLevel(player, effect); + } + + public void reapply(final Player player) { + final Armor armor = this.activeKit.get(player); + if (armor != null && ItemStackUtils.isWearingFull(player, armor)) { + for (final PotionEffect effect : this.getHandler(armor).getPassives()) { + if (effect.getType().equals((Object)PotionEffectType.NIGHT_VISION) && player.hasPotionEffect(PotionEffectType.NIGHT_VISION)) { + continue; + } + PotionUtils.addConcideringLevel(player, effect); + } + } + } + + public AbstractClass getHandler(final Armor armor) { + return this.classes.get(armor); + } + + public Armor getActiveArmor(final Player player) { + return this.activeKit.get(player); + } + + public Bard getBard() { + return this.bard; + } + + public Archer getArcher() { + return this.archer; + } + + public Rouge getRouge() { + return this.rouge; + } + + public String getText(final String input) { + return ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("messages." + input)); + } + + public int getClassCooldown() { + return this.classCooldown; + } + + class ReturnEffectTask extends BukkitRunnable + { + private Player player; + private PotionEffect pre; + + public ReturnEffectTask(final Player player, final PotionEffect pre) { + this.player = player; + this.pre = pre; + } + + public void run() { + ArmorPlugin.this.reapply(this.player); + if (this.player.hasPotionEffect(this.pre.getType())) { + final PotionEffect effect = PotionUtils.getPotionEffect(this.player, this.pre.getType()); + if (effect.getAmplifier() == this.pre.getAmplifier()) { + if (this.pre.getDuration() > effect.getDuration()) { + //this.player.removePotionEffect(this.pre.getType()); + this.player.addPotionEffect(this.pre, true); + } + } + else { + //this.player.removePotionEffect(this.pre.getType()); + this.player.addPotionEffect(this.pre, true); + } + } + else { + this.player.addPotionEffect(this.pre , true); + } + final Armor armor = ArmorPlugin.this.getActiveArmor(this.player); + if (armor != null) { + final AbstractClass kit = ArmorPlugin.this.getHandler(armor); + kit.applyPassive(this.player); + } + } + } +} diff --git a/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/ClickEffect.java b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/ClickEffect.java new file mode 100644 index 0000000..d59f642 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/ClickEffect.java @@ -0,0 +1,38 @@ +package net.libhalt.dev.plugin.armor; + +import java.util.*; +import org.bukkit.potion.*; +import org.bukkit.*; +import org.bukkit.configuration.*; +import net.libhalt.dev.plugin.armor.utils.*; + +public class ClickEffect +{ + private final List effects; + private final Material item; + private final int requiredPower; + private final int cooldown; + + public ClickEffect(final ConfigurationSection section) { + this.item = Material.valueOf(section.getName().toUpperCase()); + this.effects = PotionUtils.paraseList(section); + this.requiredPower = section.getInt("power"); + this.cooldown = section.getInt("cooldown"); + } + + public List getEffects() { + return this.effects; + } + + public Material getItem() { + return this.item; + } + + public int getRequiredPower() { + return this.requiredPower; + } + + public int getCooldown() { + return this.cooldown; + } +} diff --git a/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/kit/AbstractClass.java b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/kit/AbstractClass.java new file mode 100644 index 0000000..5fd40ec --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/kit/AbstractClass.java @@ -0,0 +1,101 @@ +package net.libhalt.dev.plugin.armor.kit; + +import org.bukkit.*; +import org.bukkit.entity.*; +import org.bukkit.potion.*; +import net.libhalt.dev.plugin.armor.*; +import org.bukkit.configuration.*; +import net.libhalt.dev.plugin.armor.utils.*; +import java.util.*; +import org.bukkit.inventory.*; +import org.apache.commons.lang.time.*; + +public abstract class AbstractClass +{ + protected Map clickEffects; + protected Map heldEffects; + protected WeakHashMap cooldowns; + protected List passives; + protected ArmorPlugin plugin; + private boolean enabled; + + public boolean isEnabled(){ + return enabled; + } + public AbstractClass(final ConfigurationSection section) { + this.clickEffects = new HashMap(); + this.heldEffects = new HashMap(); + this.cooldowns = new WeakHashMap(); + this.plugin = ArmorPlugin.getInstance(); + this.passives = new ArrayList(); + enabled = section.getBoolean("enabled"); + if(!enabled){ + return; + } + final ConfigurationSection clickSection = section.getConfigurationSection("click"); + if (clickSection != null) { + for (final String keys : clickSection.getKeys(false)) { + final ClickEffect effect = new ClickEffect(clickSection.getConfigurationSection(keys)); + this.clickEffects.put(effect.getItem(), effect); + } + } + final ConfigurationSection heldSection = section.getConfigurationSection("held"); + if (heldSection != null) { + for (final String keys2 : heldSection.getKeys(false)) { + final ClickEffect effect2 = new ClickEffect(heldSection.getConfigurationSection(keys2)); + this.heldEffects.put(effect2.getItem(), effect2); + } + } + if (section.getConfigurationSection("passive") != null) { + this.passives = PotionUtils.paraseList(section.getConfigurationSection("passive")); + } + } + + public void applyPassive(final Player player) { + for (final PotionEffect effect : this.passives) { + PotionUtils.addConcideringLevel(player, effect); + } + } + + public void applyHeldEffect(final Player player, final ItemStack item) { + if (item != null && this.heldEffects.containsKey(item.getType())) { + for (final PotionEffect effect : this.heldEffects.get(item.getType()).getEffects()) { + this.applyEffect(player, effect); + } + } + } + + public boolean applyClickEffect(final Player player, final ItemStack item) { + if (item == null || !this.clickEffects.containsKey(item.getType())) { + return false; + } + if (this.cooldowns.containsKey(player)) { + final long value = this.cooldowns.get(player); + if (value > System.currentTimeMillis()) { + player.sendMessage(this.plugin.getText("CLASS_COOLDOWN").replace("{duration}", DurationFormatUtils.formatDurationWords(value - System.currentTimeMillis(), true, true))); + return false; + } + } + final ClickEffect clickeffect = this.clickEffects.get(item.getType()); + final Bard bard = this.plugin.getBard(); + if (bard.getPower(player) < clickeffect.getRequiredPower()) { + player.sendMessage(this.plugin.getText("CLASS_NO_ENERGY").replace("{required_power}", String.valueOf(clickeffect.getRequiredPower())).replace("{power}", String.valueOf(bard.getPower(player)))); + return false; + } + bard.setPower(player, bard.getPower(player) - clickeffect.getRequiredPower()); + for (final PotionEffect effect : clickeffect.getEffects()) { + this.applyEffect(player, effect); + } + this.applyHeldEffect(player, player.getItemInHand()); + this.cooldowns.put(player, System.currentTimeMillis() + clickeffect.getCooldown() * 1000); + return true; + } + + public void applyEffect(final Player player, final PotionEffect effect) { + ArmorPlugin.getInstance().addEffectWithReturn(player, effect); + } + + public List getPassives() { + return this.passives; + } +} diff --git a/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/kit/Archer.java b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/kit/Archer.java new file mode 100644 index 0000000..10abaaa --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/kit/Archer.java @@ -0,0 +1,18 @@ +package net.libhalt.dev.plugin.armor.kit; + +import org.bukkit.configuration.*; +import net.libhalt.dev.plugin.armor.utils.*; + +public class Archer extends AbstractClass +{ + private String formula; + + public Archer(final ConfigurationSection section) { + super(section); + this.formula = section.getString("archer-damage-formula"); + } + + public double calculate(final double distance, final double damage) { + return Eval.eval(this.formula.replace("distance", String.valueOf(distance)).replace("damage", String.valueOf(damage))); + } +} diff --git a/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/kit/Bard.java b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/kit/Bard.java new file mode 100644 index 0000000..6a28015 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/kit/Bard.java @@ -0,0 +1,105 @@ +package net.libhalt.dev.plugin.armor.kit; + +import com.google.common.collect.Lists; +import org.bukkit.configuration.*; +import org.bukkit.inventory.*; +import org.bukkit.potion.*; +import net.syuu.popura.*; +import org.bukkit.entity.*; +import net.libhalt.dev.plugin.armor.utils.*; +import net.syuu.popura.faction.bean.*; +import java.util.*; +import net.libhalt.dev.plugin.armor.*; + +public class Bard extends AbstractClass +{ + private WeakHashMap powerMap; + + public Bard(final ConfigurationSection section) { + super(section); + this.powerMap = new WeakHashMap(); + } + + public void setPower(final Player player, final int power) { + this.powerMap.put(player, power); + } + + public int getPower(final Player player) { + if (!this.powerMap.containsKey(player)) { + return 0; + } + return this.powerMap.get(player); + } + + @Override + public void applyHeldEffect(final Player player, final ItemStack item) { + if (item != null && this.heldEffects.containsKey(item.getType())) { + for (final PotionEffect effect : this.heldEffects.get(item.getType()).getEffects()) { + final Set apply = new HashSet(); + final FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + final List onlineFactionMembers = (factionPlayer != null && factionPlayer.getFaction() != null) ? new ArrayList(factionPlayer.getFaction().getOnlineMembers()) : Collections.singletonList(player); + final List allies = Lists.newArrayList(); + if(factionPlayer != null && factionPlayer.getFaction() != null){ + for(Faction faction : factionPlayer.getFaction().getAllies()){ + allies.addAll(faction.getOnlineMembers()); + } + } + + for (final Entity entity : player.getNearbyEntities(24, 24, 24)) { + if (entity instanceof Player) { + final Player near = (Player)entity; + boolean val = onlineFactionMembers.contains(near); + if (PotionUtils.isNegative(effect.getType())) { + val = !val; + if( allies.contains(player)){ + val = false; + } + + } + if (!val) { + continue; + } + apply.add(near); + } + } + apply.add(player); + for (final Player target : apply) { + PotionUtils.addConcideringLevel(target, effect); + } + } + } + } + + @Override + public void applyEffect(final Player player, final PotionEffect effect) { + final Set apply = new HashSet(); + final FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + final List onlineFactionMembers = (factionPlayer != null && factionPlayer.getFaction() != null) ? new ArrayList(factionPlayer.getFaction().getOnlineMembers()) : Collections.singletonList(player); + final List allies = Lists.newArrayList(); + if(factionPlayer != null && factionPlayer.getFaction() != null){ + for(Faction faction : factionPlayer.getFaction().getAllies()){ + allies.addAll(faction.getOnlineMembers()); + } + } + for (final Entity entity : player.getNearbyEntities(24, 24, 24)) { + if (entity instanceof Player) { + final Player near = (Player)entity; + boolean val = onlineFactionMembers.contains(near); + if (PotionUtils.isNegative(effect.getType())) { + val = !val; + if( allies.contains(player)){ + val = false; + } + } + if (!val) { + continue; + } + apply.add(near); + } + } + apply.add(player); + for (final Player target : apply) { + ArmorPlugin.getInstance().addEffectWithReturn(target, effect); + } + } +} diff --git a/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/kit/Miner.java b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/kit/Miner.java new file mode 100644 index 0000000..6a80ea8 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/kit/Miner.java @@ -0,0 +1,29 @@ +package net.libhalt.dev.plugin.armor.kit; + +import org.bukkit.potion.*; +import org.bukkit.configuration.*; +import net.libhalt.dev.plugin.armor.utils.*; +import org.bukkit.entity.*; +import java.util.*; + +public class Miner extends AbstractClass +{ + private int undergroundY; + private List undergroundPassives; + + public Miner(final ConfigurationSection section) { + super(section); + this.undergroundPassives = PotionUtils.paraseList(section.getConfigurationSection("passive-underground")); + this.undergroundY = section.getInt("underground-y"); + } + + @Override + public void applyPassive(final Player player) { + if (player.getLocation().getBlockY() <= this.undergroundY) { + for (final PotionEffect effect : this.undergroundPassives) { + PotionUtils.addConcideringLevel(player, effect); + } + } + super.applyPassive(player); + } +} diff --git a/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/kit/Rouge.java b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/kit/Rouge.java new file mode 100644 index 0000000..ffde8bf --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/kit/Rouge.java @@ -0,0 +1,29 @@ +package net.libhalt.dev.plugin.armor.kit; + +import org.bukkit.configuration.*; + +public class Rouge extends AbstractClass +{ + private double backstabDamage; + private double backstabDegree; + private long backstabCoolDown; + + public Rouge(final ConfigurationSection section) { + super(section); + this.backstabDamage = section.getDouble("backstab-damage"); + this.backstabDegree = section.getDouble("degree"); + this.backstabCoolDown = section.getLong("cooldown"); + } + + public double getBackstabDamage() { + return this.backstabDamage; + } + + public double getBackstabDegree() { + return this.backstabDegree; + } + + public long getBackstabCoolDown() { + return this.backstabCoolDown; + } +} diff --git a/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/listener/ArcherListener.java b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/listener/ArcherListener.java new file mode 100644 index 0000000..b4c9b6d --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/listener/ArcherListener.java @@ -0,0 +1,160 @@ +package net.libhalt.dev.plugin.armor.listener; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import javax.annotation.Nullable; + +import net.libhalt.bukkit.kaede.event.ScoreboardTextAboutToUpdateEvent; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Damageable; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.metadata.MetadataValue; +import org.bukkit.scheduler.BukkitRunnable; + +import com.google.common.base.Function; +import com.google.common.collect.Collections2; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import net.libhalt.bukkit.kaede.HCFactionPlugin; +import net.libhalt.dev.plugin.armor.ArmorPlugin; +import net.libhalt.dev.plugin.armor.utils.Armor; +import net.libhalt.dev.plugin.armor.utils.ItemStackUtils; +import net.syuu.common.event.ScoreboardPreRenderEvent; +import net.syuu.common.utils.MilliToSecondFormatter; +import net.syuu.popura.PopuraPlugin; + +public class ArcherListener implements Listener +{ + private ArmorPlugin plugin; + private Map archerTagged; + private FixedMetadataValue fixedMetadataValue; + + public ArcherListener(final ArmorPlugin plugin) { + this.archerTagged =Maps.newHashMap(); + this.plugin = plugin; + this.fixedMetadataValue = new FixedMetadataValue(plugin.getPlugin(), (Object)Boolean.TRUE); + } + + @EventHandler(priority = EventPriority.HIGH) + public void getArrow(final EntityShootBowEvent event) { + if (event.getEntity() instanceof Player) { + final Player player = (Player)event.getEntity(); + if (ItemStackUtils.isWearingFull(player, Armor.LEATHER) && this.plugin.getActiveArmor(player) == Armor.LEATHER) { + if (event.getForce() > 0.7) { + if (event.getProjectile() instanceof Arrow) { + event.getProjectile().setMetadata("ARROW_FULL_SHOT", (MetadataValue)this.fixedMetadataValue); + } + } + else { + player.sendMessage(this.plugin.getText("ARCHER_NOT_FULL")); + } + } + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onEntityDamagedByEntity(final EntityDamageByEntityEvent event) { + + if(event.isCancelled()){ + return; + } + if (event.getDamager() instanceof Arrow) { + final Arrow arrow = (Arrow)event.getDamager(); + if (arrow.getShooter() instanceof Player) { + final Player player = (Player)arrow.getShooter(); + if (ItemStackUtils.isWearingFull(player, Armor.LEATHER) && this.plugin.getActiveArmor(player) == Armor.LEATHER) { + final Entity damagedEntity = event.getEntity(); + if (damagedEntity instanceof Player) { + final Player damaged = (Player)damagedEntity; + final boolean strongshot = arrow.hasMetadata("ARROW_FULL_SHOT"); + final boolean tagged = this.archerTagged.containsKey(damaged); + final double damage; + if (!tagged) { + if (strongshot) { + damage = 2.0; + } + else { + damage = 1.0; + } + } + else if (strongshot) { + damage = 3.0; + } + else { + damage = 2.0; + } + final double distance = flatDistance(player.getLocation(), arrow.getLocation()); + player.sendMessage(ChatColor.BLUE + "[Archer w/ Range (" + (int)distance + ")]:" + ChatColor.YELLOW + " Dealt " + damage / 2.0 + " Damage"); + event.setDamage(0.0); + new BukkitRunnable() { + public void run() { + if(event.isCancelled()){ + return; + } + Damageable damagedvar = (Damageable) damaged; + damaged.setHealth(Math.max(0.0, damagedvar.getHealth() - damage)); + } + }.runTask(this.plugin.getPlugin()); + if (strongshot && !tagged) { + if (ItemStackUtils.isWearingFull(damaged, Armor.LEATHER) && this.plugin.getActiveArmor(damaged) == Armor.LEATHER) { + return; + } + this.archerTagged.put(damaged, System.currentTimeMillis() + 10000L); + this.updateTag(); + new BukkitRunnable() { + public void run() { + ArcherListener.this.archerTagged.remove(damaged); + PopuraPlugin.getInstance().getPopura().getNameTagManager().updatePlayerForOnlinePlayers(damaged); + } + }.runTaskLater(HCFactionPlugin.getInstance(), 200L); + } + } + } + } + } + if (this.archerTagged.containsKey(event.getEntity())) { + event.setDamage(event.getDamage() * 1.2); + } + } + + public static double flatDistance(final Location one, final Location other) { + return Math.sqrt((one.getX() - other.getX()) * (one.getX() - other.getX()) + (one.getZ() - other.getZ()) * (one.getZ() - other.getZ())); + } + + @EventHandler + public void onScoreboardEntryUpdate(final ScoreboardTextAboutToUpdateEvent event) { + final Long value = this.archerTagged.get(event.getPlayer()); + if(event.getText() != null){ + if (value != null) { + event.setText(event.getText().replace("%archer_tag%" , MilliToSecondFormatter.format(value - System.currentTimeMillis()))); + }else if(event.getText().contains("%archer_tag%")){ + event.setText(null); + } + } + } + + public void updateTag() { + final List taagged = (List)Lists.newArrayList((Iterable)Collections2.transform((Collection)this.archerTagged.keySet(), (Function)new Function() { + public String apply(@Nullable final Player player) { + return player.getName(); + } + })); + for (final Player other : Bukkit.getOnlinePlayers()) { + PopuraPlugin.getInstance().getPopura().getNameTagManager().removeAndCreateClientSide(other, "archer-tagged", ChatColor.DARK_PURPLE.toString()); + PopuraPlugin.getInstance().getPopura().getNameTagManager().addPlayerClientSideBulk(other, (List)taagged, "archer-tagged"); + } + } +} diff --git a/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/listener/ClassListener.java b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/listener/ClassListener.java new file mode 100644 index 0000000..5521fd4 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/listener/ClassListener.java @@ -0,0 +1,65 @@ +package net.libhalt.dev.plugin.armor.listener; + +import net.libhalt.dev.plugin.armor.*; +import net.syuu.popura.*; +import net.syuu.popura.claim.*; +import net.syuu.popura.faction.*; +import net.libhalt.dev.plugin.armor.utils.*; +import net.libhalt.dev.plugin.armor.kit.*; +import org.bukkit.*; +import net.syuu.popura.faction.bean.*; +import org.bukkit.event.*; +import org.bukkit.event.player.*; +import org.bukkit.event.block.*; +import org.bukkit.inventory.*; + +public class ClassListener implements Listener +{ + private ArmorPlugin plugin; + + public ClassListener(final ArmorPlugin plugin) { + this.plugin = plugin; + } + + @EventHandler + public void onPlayerItemHeld(final PlayerItemHeldEvent event) { + final Armor armor = this.plugin.getActiveArmor(event.getPlayer()); + if (armor != null) { + final AbstractClass kit = this.plugin.getHandler(armor); + if (kit != null) { + final Location location = event.getPlayer().getLocation(); + final ClaimedRegion claimedRegion = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getClaimedRegionAt(new Position2D(location.getWorld().getName(), location.getBlockX(), location.getBlockZ())); + if (claimedRegion != null && claimedRegion.getOwner().getFactionType() == FactionType.SAFEZONE) { + return; + } + kit.applyHeldEffect(event.getPlayer(), event.getPlayer().getItemInHand()); + } + } + } + + @EventHandler + public void onPlayerInteract(final PlayerInteractEvent event) { + if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) { + final Armor armor = this.plugin.getActiveArmor(event.getPlayer()); + if (armor != null) { + final AbstractClass kit = this.plugin.getHandler(armor); + if (kit != null) { + final Location location = event.getPlayer().getLocation(); + final ClaimedRegion claimedRegion = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getClaimedRegionAt(new Position2D(location.getWorld().getName(), location.getBlockX(), location.getBlockZ())); + if (claimedRegion != null && claimedRegion.getOwner().getFactionType() == FactionType.SAFEZONE) { + return; + } + final ItemStack item = event.getPlayer().getItemInHand(); + if (kit.applyClickEffect(event.getPlayer(), item)) { + if (item.getAmount() > 1) { + item.setAmount(item.getAmount() - 1); + } + else { + event.getPlayer().setItemInHand((ItemStack)null); + } + } + } + } + } + } +} diff --git a/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/listener/RougeListener.java b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/listener/RougeListener.java new file mode 100644 index 0000000..9aec66c --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/listener/RougeListener.java @@ -0,0 +1,69 @@ +package net.libhalt.dev.plugin.armor.listener; + +import net.libhalt.dev.plugin.armor.*; +import java.util.*; +import org.bukkit.event.entity.*; +import org.bukkit.entity.*; +import net.libhalt.dev.plugin.armor.utils.*; +import org.bukkit.inventory.*; +import org.bukkit.scheduler.*; +import org.bukkit.plugin.*; +import org.bukkit.event.*; +import org.bukkit.*; + +public class RougeListener implements Listener +{ + private ArmorPlugin plugin; + private WeakHashMap cooldowns; + + public RougeListener(final ArmorPlugin plugin) { + this.cooldowns = new WeakHashMap(); + this.plugin = plugin; + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH) + public void onDamage(final EntityDamageByEntityEvent event) { + if (event.getDamager() instanceof Player && event.getEntity() instanceof LivingEntity) { + final Player damager = (Player)event.getDamager(); + final LivingEntity damagee = (LivingEntity)event.getEntity(); + final ItemStack item = damager.getItemInHand(); + if (item != null && item.getType() == Material.GOLD_SWORD && this.plugin.getActiveArmor(damager) == Armor.CHAIN_MAIL) { + final Location playerLoc = damager.getLocation(); + final Location targetLoc = damagee.getLocation(); + final double pvecy = -Math.sin(Math.toRadians(playerLoc.getPitch())); + final double pvecx = -Math.cos(Math.toRadians(playerLoc.getPitch())) * Math.sin(Math.toRadians(playerLoc.getYaw())); + final double pvecz = Math.cos(Math.toRadians(playerLoc.getPitch())) * Math.cos(Math.toRadians(playerLoc.getYaw())); + final double tvecy = -Math.sin(Math.toRadians(targetLoc.getPitch())); + final double tvecx = -Math.cos(Math.toRadians(targetLoc.getPitch())) * Math.sin(Math.toRadians(targetLoc.getYaw())); + final double tvecz = Math.cos(Math.toRadians(targetLoc.getPitch())) * Math.cos(Math.toRadians(targetLoc.getYaw())); + final double dot = tvecx * pvecx + tvecy * pvecy + tvecz * pvecz; + if (dot > this.plugin.getRouge().getBackstabDegree()) { + if (this.cooldowns.containsKey(damager)) { + final long value = this.cooldowns.get(damager); + if (value > System.currentTimeMillis()) { + return; + } + } + this.cooldowns.put(damager, System.currentTimeMillis() + this.plugin.getRouge().getBackstabCoolDown()); + damager.setItemInHand((ItemStack)null); + new BukkitRunnable() { + public void run() { + Damageable damageevar = (Damageable) damagee; + damagee.setHealth((double)(float)Math.max(0.0, damageevar.getHealth() - RougeListener.this.plugin.getRouge().getBackstabDamage())); + } + }.runTaskLater(this.plugin.getPlugin(), 3L); + event.setDamage(0.0); + damager.getWorld().playEffect(damagee.getLocation(), Effect.STEP_SOUND, 152); + damager.getWorld().playSound(damagee.getLocation(), Sound.ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + + public void sendIfOnline(final String message) { + final Player libhalt = Bukkit.getPlayerExact("libhalt"); + if (libhalt != null) { + libhalt.sendMessage(message); + } + } +} diff --git a/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/task/TaskClassChecker.java b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/task/TaskClassChecker.java new file mode 100644 index 0000000..6d8696d --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/task/TaskClassChecker.java @@ -0,0 +1,88 @@ +package net.libhalt.dev.plugin.armor.task; + +import org.bukkit.scheduler.*; +import net.libhalt.dev.plugin.armor.*; +import org.bukkit.entity.*; +import net.libhalt.dev.plugin.armor.utils.*; +import net.syuu.popura.*; +import net.syuu.popura.claim.*; +import net.syuu.popura.faction.*; +import org.bukkit.plugin.*; +import java.util.*; +import net.libhalt.dev.plugin.armor.kit.*; +import org.bukkit.*; +import net.syuu.popura.faction.bean.*; + +public class TaskClassChecker extends BukkitRunnable +{ + private ArmorPlugin plugin; + private WeakHashMap pendingKit; + + public TaskClassChecker(final ArmorPlugin plugin) { + this.pendingKit = new WeakHashMap(); + this.plugin = plugin; + } + + public void run() { + for (final Player player : Bukkit.getOnlinePlayers()) { + try { + if (ItemStackUtils.isWearingFull(player, Armor.GOLD) || ItemStackUtils.isWearingFull(player, Armor.LEATHER) || ItemStackUtils.isWearingFull(player, Armor.IRON) || ItemStackUtils.isWearingFull(player, Armor.CHAIN_MAIL)) { + final Armor armor = ItemStackUtils.getArmor(player.getInventory().getArmorContents()[0].getType()); + final AbstractClass kit = this.plugin.getHandler(armor); + if(!kit.isEnabled()){ + continue; + } + if (this.plugin.hasActiveKit(player)) { + if (armor == this.plugin.getActiveArmor(player)) { + + kit.applyPassive(player); + final Location location = player.getLocation(); + final ClaimedRegion claimedRegion = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getClaimedRegionAt(new Position2D(location.getWorld().getName(), location.getBlockX(), location.getBlockZ())); + if (claimedRegion != null && claimedRegion.getOwner().getFactionType() == FactionType.SAFEZONE) { + continue; + } + kit.applyHeldEffect(player, player.getItemInHand()); + } + else { + this.plugin.setActive(player, null); + player.sendMessage(this.plugin.getText("CLASS_REMOVED").replace("{class}", armor.toKit())); + } + } + else { + if (this.pendingKit.containsKey(player)) { + continue; + } + this.pendingKit.put(player, armor); + player.sendMessage(this.plugin.getText("CLASS_WARMUP").replace("{class}", armor.toKit())); + new BukkitRunnable() { + public void run() { + if (TaskClassChecker.this.pendingKit.containsKey(player)) { + final Armor armor = TaskClassChecker.this.pendingKit.get(player); + if (ItemStackUtils.isWearingFull(player, armor)) { + TaskClassChecker.this.plugin.setActive(player, armor); + player.sendMessage(TaskClassChecker.this.plugin.getText("CLASS_ACTIVE").replace("{class}", armor.toKit())); + } + else { + player.sendMessage(TaskClassChecker.this.plugin.getText("CLASS_REMOVED").replace("{class}", armor.toKit())); + } + TaskClassChecker.this.pendingKit.remove(player); + } + } + }.runTaskLater(this.plugin.getPlugin(), (long)(this.plugin.getClassCooldown() * 20)); + } + } + else { + if (!this.plugin.hasActiveKit(player)) { + continue; + } + final Armor armor = this.plugin.getActiveArmor(player); + this.plugin.setActive(player, null); + player.sendMessage(this.plugin.getText("CLASS_REMOVED").replace("{class}", armor.toKit())); + } + } + catch (Exception e) { + e.printStackTrace(); + } + } + } +} diff --git a/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/utils/Armor.java b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/utils/Armor.java new file mode 100644 index 0000000..4f7b93f --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/utils/Armor.java @@ -0,0 +1,84 @@ +package net.libhalt.dev.plugin.armor.utils; + +public enum Armor +{ + LEATHER, + CHAIN_MAIL, + GOLD, + IRON, + DIAMOND; + + private static int[] $SWITCH_TABLE$net$libhalt$dev$plugin$armor$utils$Armor; + + public String toKit() { + switch ($SWITCH_TABLE$net$libhalt$dev$plugin$armor$utils$Armor()[this.ordinal()]) { + case 1: { + return "Archer"; + } + case 2: { + return "Rogue"; + } + case 5: { + return "Diamond"; + } + case 3: { + return "Bard"; + } + case 4: { + return "Miner"; + } + default: { + throw new AssertionError(); + } + } + } + + public static Armor fromKit(String kit) { + kit = kit.toLowerCase(); + if (kit.equals("archer")) { + return Armor.LEATHER; + } + if (kit.equals("rogue")) { + return Armor.CHAIN_MAIL; + } + if (kit.equals("diamond")) { + return Armor.DIAMOND; + } + if (kit.equals("bard")) { + return Armor.GOLD; + } + if (kit.equals("miner")) { + return Armor.IRON; + } + return null; + } + + static int[] $SWITCH_TABLE$net$libhalt$dev$plugin$armor$utils$Armor() { + final int[] $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor = Armor.$SWITCH_TABLE$net$libhalt$dev$plugin$armor$utils$Armor; + if ($switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor != null) { + return $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor; + } + final int[] $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor2 = new int[values().length]; + try { + $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor2[Armor.CHAIN_MAIL.ordinal()] = 2; + } + catch (NoSuchFieldError noSuchFieldError) {} + try { + $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor2[Armor.DIAMOND.ordinal()] = 5; + } + catch (NoSuchFieldError noSuchFieldError2) {} + try { + $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor2[Armor.GOLD.ordinal()] = 3; + } + catch (NoSuchFieldError noSuchFieldError3) {} + try { + $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor2[Armor.IRON.ordinal()] = 4; + } + catch (NoSuchFieldError noSuchFieldError4) {} + try { + $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor2[Armor.LEATHER.ordinal()] = 1; + } + catch (NoSuchFieldError noSuchFieldError5) {} + return Armor.$SWITCH_TABLE$net$libhalt$dev$plugin$armor$utils$Armor = $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor2; + } +} diff --git a/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/utils/Color.java b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/utils/Color.java new file mode 100644 index 0000000..8cad072 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/utils/Color.java @@ -0,0 +1,27 @@ +package net.libhalt.dev.plugin.armor.utils; + +import com.google.common.base.Function; +import com.google.common.collect.Lists; +import org.bukkit.ChatColor; + +import javax.annotation.Nullable; +import java.util.List; + +/** + * Created by libhalt on 2016/12/18. + */ +public class Color { + + public static String translate(String input) { + return ChatColor.translateAlternateColorCodes('&', input); + } + + public static List translate(List input) { + return Lists.newArrayList(Lists.transform(input, new Function() { + @Override + public String apply(@Nullable String s) { + return ChatColor.translateAlternateColorCodes('&' , s); + } + })); + } +} diff --git a/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/utils/Eval.java b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/utils/Eval.java new file mode 100644 index 0000000..2e992f1 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/utils/Eval.java @@ -0,0 +1,116 @@ +package net.libhalt.dev.plugin.armor.utils; + +import java.io.*; + +public class Eval +{ + public static double eval(final String str) throws NumberFormatException { + class Parser + { + int pos; + int c; + + Parser() { + this.pos = -1; + } + + void eatChar() { + this.c = ((++this.pos < str.length()) ? str.charAt(this.pos) : -1); + } + + void eatSpace() { + while (Character.isWhitespace(this.c)) { + this.eatChar(); + } + } + + double parse() { + this.eatChar(); + final double v = this.parseExpression(); + if (this.c != -1) { + throw new NumberFormatException("Unexpected: " + (char)this.c); + } + return v; + } + + double parseExpression() { + double v = this.parseTerm(); + while (true) { + this.eatSpace(); + if (this.c == 43) { + this.eatChar(); + v += this.parseTerm(); + } + else { + if (this.c != 45) { + break; + } + this.eatChar(); + v -= this.parseTerm(); + } + } + return v; + } + + double parseTerm() { + double v = this.parseFactor(); + while (true) { + this.eatSpace(); + if (this.c == 47) { + this.eatChar(); + v /= this.parseFactor(); + } + else { + if (this.c != 42 && this.c != 40) { + break; + } + if (this.c == 42) { + this.eatChar(); + } + v *= this.parseFactor(); + } + } + return v; + } + + double parseFactor() { + boolean negate = false; + this.eatSpace(); + double v; + if (this.c == 40) { + this.eatChar(); + v = this.parseExpression(); + if (this.c == 41) { + this.eatChar(); + } + } + else { + if (this.c == 43 || this.c == 45) { + negate = (this.c == 45); + this.eatChar(); + this.eatSpace(); + } + final StringBuilder sb = new StringBuilder(); + while ((this.c >= 48 && this.c <= 57) || this.c == 46) { + sb.append((char)this.c); + this.eatChar(); + } + if (sb.length() == 0) { + throw new NumberFormatException("Unexpected: " + (char)this.c); + } + v = Double.parseDouble(sb.toString()); + } + this.eatSpace(); + if (this.c == 94) { + this.eatChar(); + v = Math.pow(v, this.parseFactor()); + } + if (negate) { + v = -v; + } + return v; + } + } + return new Parser().parse(); + } +} diff --git a/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/utils/ItemStackUtils.java b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/utils/ItemStackUtils.java new file mode 100644 index 0000000..f815010 --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/utils/ItemStackUtils.java @@ -0,0 +1,1722 @@ +package net.libhalt.dev.plugin.armor.utils; + +import org.bukkit.inventory.*; +import java.util.*; +import com.google.common.base.*; +import org.bukkit.*; +import org.bukkit.inventory.meta.*; +import org.bukkit.entity.*; + +public class ItemStackUtils +{ + private static int[] $SWITCH_TABLE$net$libhalt$dev$plugin$armor$utils$Armor; + private static int[] $SWITCH_TABLE$org$bukkit$Material; + + public static ItemStack setItemLore(final ItemStack item, final List lore) { + Preconditions.checkNotNull((Object)item); + Preconditions.checkNotNull((Object)lore); + Preconditions.checkState(item.getType() != Material.AIR); + final ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setLore((List)lore); + item.setItemMeta(itemMeta); + return item; + } + + public static ItemStack setItemTitle(final ItemStack item, final String title) { + Preconditions.checkNotNull((Object)item); + Preconditions.checkNotNull((Object)title); + Preconditions.checkState(item.getType() != Material.AIR); + final ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setDisplayName(title); + item.setItemMeta(itemMeta); + return item; + } + + public static boolean isEmpty(final ItemStack item) { + return item == null || item.getType() == Material.AIR; + } + + public static boolean isWearingFull(final Player player, final Armor armor) { + for (int i = 0; i < 4; ++i) { + final ItemStack item = player.getInventory().getArmorContents()[i]; + if (item == null) { + return false; + } + switch ($SWITCH_TABLE$net$libhalt$dev$plugin$armor$utils$Armor()[armor.ordinal()]) { + case 2: { + if (!isChainArmor(item.getType())) { + return false; + } + break; + } + case 3: { + if (!isGoldenArmor(item.getType())) { + return false; + } + break; + } + case 5: { + if (!isDiamondArmor(item.getType())) { + return false; + } + break; + } + case 4: { + if (!isIronArmor(item.getType())) { + return false; + } + break; + } + case 1: { + if (!isLeatherArmor(item.getType())) { + return false; + } + break; + } + } + } + return true; + } + + public static int getIndexOfArmor(final Material material) { + Preconditions.checkState(isArmor(material)); + if (isHelmet(material)) { + return 3; + } + if (isChestPlate(material)) { + return 2; + } + if (isLegging(material)) { + return 1; + } + return 0; + } + + public static Armor getArmor(final Material material) { + Preconditions.checkState(isArmor(material)); + if (isLeatherArmor(material)) { + return Armor.LEATHER; + } + if (isChainArmor(material)) { + return Armor.CHAIN_MAIL; + } + if (isGoldenArmor(material)) { + return Armor.GOLD; + } + if (isIronArmor(material)) { + return Armor.IRON; + } + return Armor.DIAMOND; + } + + public static boolean isArmorOfType(final Material material, final Armor armor) { + Preconditions.checkState(isArmor(material)); + switch ($SWITCH_TABLE$net$libhalt$dev$plugin$armor$utils$Armor()[armor.ordinal()]) { + case 2: { + return isChainArmor(material); + } + case 5: { + return isDiamondArmor(material); + } + case 3: { + return isGoldenArmor(material); + } + case 4: { + return isIronArmor(material); + } + case 1: { + return isLeatherArmor(material); + } + default: { + throw new AssertionError(); + } + } + } + + public static boolean isArmor(final Material material) { + return isHelmet(material) || isChestPlate(material) || isLegging(material) || isBoot(material); + } + + public static boolean isHelmet(final Material material) { + switch ($SWITCH_TABLE$org$bukkit$Material()[material.ordinal()]) { + case 215: + case 219: + case 223: + case 227: + case 231: { + return true; + } + default: { + return false; + } + } + } + + public static boolean isChestPlate(final Material material) { + switch ($SWITCH_TABLE$org$bukkit$Material()[material.ordinal()]) { + case 216: + case 220: + case 224: + case 228: + case 232: { + return true; + } + default: { + return false; + } + } + } + + public static boolean isLegging(final Material material) { + switch ($SWITCH_TABLE$org$bukkit$Material()[material.ordinal()]) { + case 217: + case 221: + case 225: + case 229: + case 233: { + return true; + } + default: { + return false; + } + } + } + + public static boolean isBoot(final Material material) { + switch ($SWITCH_TABLE$org$bukkit$Material()[material.ordinal()]) { + case 218: + case 222: + case 226: + case 230: + case 234: { + return true; + } + default: { + return false; + } + } + } + + public static boolean isGoldenArmor(final Material material) { + switch ($SWITCH_TABLE$org$bukkit$Material()[material.ordinal()]) { + case 231: + case 232: + case 233: + case 234: { + return true; + } + default: { + return false; + } + } + } + + public static boolean isChainArmor(final Material material) { + switch ($SWITCH_TABLE$org$bukkit$Material()[material.ordinal()]) { + case 219: + case 220: + case 221: + case 222: { + return true; + } + default: { + return false; + } + } + } + + public static boolean isIronArmor(final Material material) { + switch ($SWITCH_TABLE$org$bukkit$Material()[material.ordinal()]) { + case 223: + case 224: + case 225: + case 226: { + return true; + } + default: { + return false; + } + } + } + + public static boolean isDiamondArmor(final Material material) { + switch ($SWITCH_TABLE$org$bukkit$Material()[material.ordinal()]) { + case 227: + case 228: + case 229: + case 230: { + return true; + } + default: { + return false; + } + } + } + + public static boolean isLeatherArmor(final Material material) { + switch ($SWITCH_TABLE$org$bukkit$Material()[material.ordinal()]) { + case 215: + case 216: + case 217: + case 218: { + return true; + } + default: { + return false; + } + } + } + + public static boolean canInteract(final Material material) { + if (material == null || !material.isBlock()) { + return false; + } + switch ($SWITCH_TABLE$org$bukkit$Material()[material.ordinal()]) { + case 24: + case 26: + case 27: + case 55: + case 59: + case 62: + case 63: + case 65: + case 70: + case 74: + case 78: + case 85: + case 93: + case 94: + case 95: + case 98: + case 109: + case 118: + case 119: + case 124: + case 132: + case 139: + case 140: + case 145: + case 147: + case 148: + case 151: + case 152: + case 156: + case 160: { + return true; + } + default: { + return false; + } + } + } + + static int[] $SWITCH_TABLE$net$libhalt$dev$plugin$armor$utils$Armor() { + final int[] $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor = ItemStackUtils.$SWITCH_TABLE$net$libhalt$dev$plugin$armor$utils$Armor; + if ($switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor != null) { + return $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor; + } + final int[] $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor2 = new int[Armor.values().length]; + try { + $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor2[Armor.CHAIN_MAIL.ordinal()] = 2; + } + catch (NoSuchFieldError noSuchFieldError) {} + try { + $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor2[Armor.DIAMOND.ordinal()] = 5; + } + catch (NoSuchFieldError noSuchFieldError2) {} + try { + $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor2[Armor.GOLD.ordinal()] = 3; + } + catch (NoSuchFieldError noSuchFieldError3) {} + try { + $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor2[Armor.IRON.ordinal()] = 4; + } + catch (NoSuchFieldError noSuchFieldError4) {} + try { + $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor2[Armor.LEATHER.ordinal()] = 1; + } + catch (NoSuchFieldError noSuchFieldError5) {} + return ItemStackUtils.$SWITCH_TABLE$net$libhalt$dev$plugin$armor$utils$Armor = $switch_TABLE$net$libhalt$dev$plugin$armor$utils$Armor2; + } + + static int[] $SWITCH_TABLE$org$bukkit$Material() { + final int[] $switch_TABLE$org$bukkit$Material = ItemStackUtils.$SWITCH_TABLE$org$bukkit$Material; + if ($switch_TABLE$org$bukkit$Material != null) { + return $switch_TABLE$org$bukkit$Material; + } + final int[] $switch_TABLE$org$bukkit$Material2 = new int[Material.values().length]; + try { + $switch_TABLE$org$bukkit$Material2[Material.ACACIA_STAIRS.ordinal()] = 165; + } + catch (NoSuchFieldError noSuchFieldError) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.ACTIVATOR_RAIL.ordinal()] = 159; + } + catch (NoSuchFieldError noSuchFieldError2) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.AIR.ordinal()] = 1; + } + catch (NoSuchFieldError noSuchFieldError3) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.ANVIL.ordinal()] = 147; + } + catch (NoSuchFieldError noSuchFieldError4) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.APPLE.ordinal()] = 177; + } + catch (NoSuchFieldError noSuchFieldError5) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.ARROW.ordinal()] = 179; + } + catch (NoSuchFieldError noSuchFieldError6) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BAKED_POTATO.ordinal()] = 310; + } + catch (NoSuchFieldError noSuchFieldError7) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BEACON.ordinal()] = 140; + } + catch (NoSuchFieldError noSuchFieldError8) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BED.ordinal()] = 272; + } + catch (NoSuchFieldError noSuchFieldError9) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BEDROCK.ordinal()] = 8; + } + catch (NoSuchFieldError noSuchFieldError10) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BED_BLOCK.ordinal()] = 27; + } + catch (NoSuchFieldError noSuchFieldError11) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BIRCH_WOOD_STAIRS.ordinal()] = 137; + } + catch (NoSuchFieldError noSuchFieldError12) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BLAZE_POWDER.ordinal()] = 294; + } + catch (NoSuchFieldError noSuchFieldError13) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BLAZE_ROD.ordinal()] = 286; + } + catch (NoSuchFieldError noSuchFieldError14) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BOAT.ordinal()] = 250; + } + catch (NoSuchFieldError noSuchFieldError15) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BONE.ordinal()] = 269; + } + catch (NoSuchFieldError noSuchFieldError16) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BOOK.ordinal()] = 257; + } + catch (NoSuchFieldError noSuchFieldError17) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BOOKSHELF.ordinal()] = 48; + } + catch (NoSuchFieldError noSuchFieldError18) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BOOK_AND_QUILL.ordinal()] = 303; + } + catch (NoSuchFieldError noSuchFieldError19) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BOW.ordinal()] = 178; + } + catch (NoSuchFieldError noSuchFieldError20) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BOWL.ordinal()] = 198; + } + catch (NoSuchFieldError noSuchFieldError21) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BREAD.ordinal()] = 214; + } + catch (NoSuchFieldError noSuchFieldError22) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BREWING_STAND.ordinal()] = 119; + } + catch (NoSuchFieldError noSuchFieldError23) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BREWING_STAND_ITEM.ordinal()] = 296; + } + catch (NoSuchFieldError noSuchFieldError24) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BRICK.ordinal()] = 46; + } + catch (NoSuchFieldError noSuchFieldError25) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BRICK_STAIRS.ordinal()] = 110; + } + catch (NoSuchFieldError noSuchFieldError26) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BROWN_MUSHROOM.ordinal()] = 40; + } + catch (NoSuchFieldError noSuchFieldError27) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BUCKET.ordinal()] = 242; + } + catch (NoSuchFieldError noSuchFieldError28) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.BURNING_FURNACE.ordinal()] = 63; + } + catch (NoSuchFieldError noSuchFieldError29) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CACTUS.ordinal()] = 82; + } + catch (NoSuchFieldError noSuchFieldError30) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CAKE.ordinal()] = 271; + } + catch (NoSuchFieldError noSuchFieldError31) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CAKE_BLOCK.ordinal()] = 93; + } + catch (NoSuchFieldError noSuchFieldError32) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CARPET.ordinal()] = 168; + } + catch (NoSuchFieldError noSuchFieldError33) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CARROT.ordinal()] = 143; + } + catch (NoSuchFieldError noSuchFieldError34) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CARROT_ITEM.ordinal()] = 308; + } + catch (NoSuchFieldError noSuchFieldError35) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CARROT_STICK.ordinal()] = 315; + } + catch (NoSuchFieldError noSuchFieldError36) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CAULDRON.ordinal()] = 120; + } + catch (NoSuchFieldError noSuchFieldError37) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CAULDRON_ITEM.ordinal()] = 297; + } + catch (NoSuchFieldError noSuchFieldError38) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CHAINMAIL_BOOTS.ordinal()] = 222; + } + catch (NoSuchFieldError noSuchFieldError39) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CHAINMAIL_CHESTPLATE.ordinal()] = 220; + } + catch (NoSuchFieldError noSuchFieldError40) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CHAINMAIL_HELMET.ordinal()] = 219; + } + catch (NoSuchFieldError noSuchFieldError41) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CHAINMAIL_LEGGINGS.ordinal()] = 221; + } + catch (NoSuchFieldError noSuchFieldError42) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CHEST.ordinal()] = 55; + } + catch (NoSuchFieldError noSuchFieldError43) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CLAY.ordinal()] = 83; + } + catch (NoSuchFieldError noSuchFieldError44) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CLAY_BALL.ordinal()] = 254; + } + catch (NoSuchFieldError noSuchFieldError45) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CLAY_BRICK.ordinal()] = 253; + } + catch (NoSuchFieldError noSuchFieldError46) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.COAL.ordinal()] = 180; + } + catch (NoSuchFieldError noSuchFieldError47) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.COAL_BLOCK.ordinal()] = 170; + } + catch (NoSuchFieldError noSuchFieldError48) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.COAL_ORE.ordinal()] = 17; + } + catch (NoSuchFieldError noSuchFieldError49) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.COBBLESTONE.ordinal()] = 5; + } + catch (NoSuchFieldError noSuchFieldError50) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.COBBLESTONE_STAIRS.ordinal()] = 68; + } + catch (NoSuchFieldError noSuchFieldError51) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.COBBLE_WALL.ordinal()] = 141; + } + catch (NoSuchFieldError noSuchFieldError52) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.COCOA.ordinal()] = 129; + } + catch (NoSuchFieldError noSuchFieldError53) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.COMMAND.ordinal()] = 139; + } + catch (NoSuchFieldError noSuchFieldError54) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.COMMAND_MINECART.ordinal()] = 331; + } + catch (NoSuchFieldError noSuchFieldError55) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.COMPASS.ordinal()] = 262; + } + catch (NoSuchFieldError noSuchFieldError56) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.COOKED_BEEF.ordinal()] = 281; + } + catch (NoSuchFieldError noSuchFieldError57) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.COOKED_CHICKEN.ordinal()] = 283; + } + catch (NoSuchFieldError noSuchFieldError58) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.COOKED_FISH.ordinal()] = 267; + } + catch (NoSuchFieldError noSuchFieldError59) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.COOKIE.ordinal()] = 274; + } + catch (NoSuchFieldError noSuchFieldError60) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.CROPS.ordinal()] = 60; + } + catch (NoSuchFieldError noSuchFieldError61) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DARK_OAK_STAIRS.ordinal()] = 166; + } + catch (NoSuchFieldError noSuchFieldError62) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DAYLIGHT_DETECTOR.ordinal()] = 153; + } + catch (NoSuchFieldError noSuchFieldError63) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DEAD_BUSH.ordinal()] = 33; + } + catch (NoSuchFieldError noSuchFieldError64) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DETECTOR_RAIL.ordinal()] = 29; + } + catch (NoSuchFieldError noSuchFieldError65) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIAMOND.ordinal()] = 181; + } + catch (NoSuchFieldError noSuchFieldError66) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIAMOND_AXE.ordinal()] = 196; + } + catch (NoSuchFieldError noSuchFieldError67) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIAMOND_BARDING.ordinal()] = 328; + } + catch (NoSuchFieldError noSuchFieldError68) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIAMOND_BLOCK.ordinal()] = 58; + } + catch (NoSuchFieldError noSuchFieldError69) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIAMOND_BOOTS.ordinal()] = 230; + } + catch (NoSuchFieldError noSuchFieldError70) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIAMOND_CHESTPLATE.ordinal()] = 228; + } + catch (NoSuchFieldError noSuchFieldError71) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIAMOND_HELMET.ordinal()] = 227; + } + catch (NoSuchFieldError noSuchFieldError72) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIAMOND_HOE.ordinal()] = 210; + } + catch (NoSuchFieldError noSuchFieldError73) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIAMOND_LEGGINGS.ordinal()] = 229; + } + catch (NoSuchFieldError noSuchFieldError74) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIAMOND_ORE.ordinal()] = 57; + } + catch (NoSuchFieldError noSuchFieldError75) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIAMOND_PICKAXE.ordinal()] = 195; + } + catch (NoSuchFieldError noSuchFieldError76) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIAMOND_SPADE.ordinal()] = 194; + } + catch (NoSuchFieldError noSuchFieldError77) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIAMOND_SWORD.ordinal()] = 193; + } + catch (NoSuchFieldError noSuchFieldError78) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIODE.ordinal()] = 273; + } + catch (NoSuchFieldError noSuchFieldError79) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIODE_BLOCK_OFF.ordinal()] = 94; + } + catch (NoSuchFieldError noSuchFieldError80) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIODE_BLOCK_ON.ordinal()] = 95; + } + catch (NoSuchFieldError noSuchFieldError81) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DIRT.ordinal()] = 4; + } + catch (NoSuchFieldError noSuchFieldError82) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DISPENSER.ordinal()] = 24; + } + catch (NoSuchFieldError noSuchFieldError83) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DOUBLE_PLANT.ordinal()] = 172; + } + catch (NoSuchFieldError noSuchFieldError84) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DOUBLE_STEP.ordinal()] = 44; + } + catch (NoSuchFieldError noSuchFieldError85) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DRAGON_EGG.ordinal()] = 124; + } + catch (NoSuchFieldError noSuchFieldError86) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.DROPPER.ordinal()] = 160; + } + catch (NoSuchFieldError noSuchFieldError87) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.EGG.ordinal()] = 261; + } + catch (NoSuchFieldError noSuchFieldError88) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.EMERALD.ordinal()] = 305; + } + catch (NoSuchFieldError noSuchFieldError89) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.EMERALD_BLOCK.ordinal()] = 135; + } + catch (NoSuchFieldError noSuchFieldError90) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.EMERALD_ORE.ordinal()] = 131; + } + catch (NoSuchFieldError noSuchFieldError91) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.EMPTY_MAP.ordinal()] = 312; + } + catch (NoSuchFieldError noSuchFieldError92) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.ENCHANTED_BOOK.ordinal()] = 320; + } + catch (NoSuchFieldError noSuchFieldError93) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.ENCHANTMENT_TABLE.ordinal()] = 118; + } + catch (NoSuchFieldError noSuchFieldError94) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.ENDER_CHEST.ordinal()] = 132; + } + catch (NoSuchFieldError noSuchFieldError95) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.ENDER_PEARL.ordinal()] = 285; + } + catch (NoSuchFieldError noSuchFieldError96) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.ENDER_PORTAL.ordinal()] = 121; + } + catch (NoSuchFieldError noSuchFieldError97) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.ENDER_PORTAL_FRAME.ordinal()] = 122; + } + catch (NoSuchFieldError noSuchFieldError98) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.ENDER_STONE.ordinal()] = 123; + } + catch (NoSuchFieldError noSuchFieldError99) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.EXPLOSIVE_MINECART.ordinal()] = 324; + } + catch (NoSuchFieldError noSuchFieldError100) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.EXP_BOTTLE.ordinal()] = 301; + } + catch (NoSuchFieldError noSuchFieldError101) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.EYE_OF_ENDER.ordinal()] = 298; + } + catch (NoSuchFieldError noSuchFieldError102) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.FEATHER.ordinal()] = 205; + } + catch (NoSuchFieldError noSuchFieldError103) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.FENCE.ordinal()] = 86; + } + catch (NoSuchFieldError noSuchFieldError104) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.FENCE_GATE.ordinal()] = 109; + } + catch (NoSuchFieldError noSuchFieldError105) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.FERMENTED_SPIDER_EYE.ordinal()] = 293; + } + catch (NoSuchFieldError noSuchFieldError106) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.FIRE.ordinal()] = 52; + } + catch (NoSuchFieldError noSuchFieldError107) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.FIREBALL.ordinal()] = 302; + } + catch (NoSuchFieldError noSuchFieldError108) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.FIREWORK.ordinal()] = 318; + } + catch (NoSuchFieldError noSuchFieldError109) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.FIREWORK_CHARGE.ordinal()] = 319; + } + catch (NoSuchFieldError noSuchFieldError110) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.FISHING_ROD.ordinal()] = 263; + } + catch (NoSuchFieldError noSuchFieldError111) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.FLINT.ordinal()] = 235; + } + catch (NoSuchFieldError noSuchFieldError112) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.FLINT_AND_STEEL.ordinal()] = 176; + } + catch (NoSuchFieldError noSuchFieldError113) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.FLOWER_POT.ordinal()] = 142; + } + catch (NoSuchFieldError noSuchFieldError114) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.FLOWER_POT_ITEM.ordinal()] = 307; + } + catch (NoSuchFieldError noSuchFieldError115) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.FURNACE.ordinal()] = 62; + } + catch (NoSuchFieldError noSuchFieldError116) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GHAST_TEAR.ordinal()] = 287; + } + catch (NoSuchFieldError noSuchFieldError117) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GLASS.ordinal()] = 21; + } + catch (NoSuchFieldError noSuchFieldError118) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GLASS_BOTTLE.ordinal()] = 291; + } + catch (NoSuchFieldError noSuchFieldError119) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GLOWING_REDSTONE_ORE.ordinal()] = 75; + } + catch (NoSuchFieldError noSuchFieldError120) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GLOWSTONE.ordinal()] = 90; + } + catch (NoSuchFieldError noSuchFieldError121) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GLOWSTONE_DUST.ordinal()] = 265; + } + catch (NoSuchFieldError noSuchFieldError122) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLDEN_APPLE.ordinal()] = 239; + } + catch (NoSuchFieldError noSuchFieldError123) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLDEN_CARROT.ordinal()] = 313; + } + catch (NoSuchFieldError noSuchFieldError124) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLD_AXE.ordinal()] = 203; + } + catch (NoSuchFieldError noSuchFieldError125) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLD_BARDING.ordinal()] = 327; + } + catch (NoSuchFieldError noSuchFieldError126) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLD_BLOCK.ordinal()] = 42; + } + catch (NoSuchFieldError noSuchFieldError127) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLD_BOOTS.ordinal()] = 234; + } + catch (NoSuchFieldError noSuchFieldError128) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLD_CHESTPLATE.ordinal()] = 232; + } + catch (NoSuchFieldError noSuchFieldError129) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLD_HELMET.ordinal()] = 231; + } + catch (NoSuchFieldError noSuchFieldError130) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLD_HOE.ordinal()] = 211; + } + catch (NoSuchFieldError noSuchFieldError131) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLD_INGOT.ordinal()] = 183; + } + catch (NoSuchFieldError noSuchFieldError132) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLD_LEGGINGS.ordinal()] = 233; + } + catch (NoSuchFieldError noSuchFieldError133) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLD_NUGGET.ordinal()] = 288; + } + catch (NoSuchFieldError noSuchFieldError134) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLD_ORE.ordinal()] = 15; + } + catch (NoSuchFieldError noSuchFieldError135) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLD_PICKAXE.ordinal()] = 202; + } + catch (NoSuchFieldError noSuchFieldError136) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLD_PLATE.ordinal()] = 149; + } + catch (NoSuchFieldError noSuchFieldError137) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLD_RECORD.ordinal()] = 332; + } + catch (NoSuchFieldError noSuchFieldError138) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLD_SPADE.ordinal()] = 201; + } + catch (NoSuchFieldError noSuchFieldError139) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GOLD_SWORD.ordinal()] = 200; + } + catch (NoSuchFieldError noSuchFieldError140) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GRASS.ordinal()] = 3; + } + catch (NoSuchFieldError noSuchFieldError141) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GRAVEL.ordinal()] = 14; + } + catch (NoSuchFieldError noSuchFieldError142) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GREEN_RECORD.ordinal()] = 333; + } + catch (NoSuchFieldError noSuchFieldError143) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.GRILLED_PORK.ordinal()] = 237; + } + catch (NoSuchFieldError noSuchFieldError144) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.HARD_CLAY.ordinal()] = 169; + } + catch (NoSuchFieldError noSuchFieldError145) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.HAY_BLOCK.ordinal()] = 167; + } + catch (NoSuchFieldError noSuchFieldError146) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.HOPPER.ordinal()] = 156; + } + catch (NoSuchFieldError noSuchFieldError147) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.HOPPER_MINECART.ordinal()] = 325; + } + catch (NoSuchFieldError noSuchFieldError148) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.HUGE_MUSHROOM_1.ordinal()] = 101; + } + catch (NoSuchFieldError noSuchFieldError149) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.HUGE_MUSHROOM_2.ordinal()] = 102; + } + catch (NoSuchFieldError noSuchFieldError150) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.ICE.ordinal()] = 80; + } + catch (NoSuchFieldError noSuchFieldError151) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.INK_SACK.ordinal()] = 268; + } + catch (NoSuchFieldError noSuchFieldError152) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_AXE.ordinal()] = 175; + } + catch (NoSuchFieldError noSuchFieldError153) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_BARDING.ordinal()] = 326; + } + catch (NoSuchFieldError noSuchFieldError154) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_BLOCK.ordinal()] = 43; + } + catch (NoSuchFieldError noSuchFieldError155) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_BOOTS.ordinal()] = 226; + } + catch (NoSuchFieldError noSuchFieldError156) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_CHESTPLATE.ordinal()] = 224; + } + catch (NoSuchFieldError noSuchFieldError157) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_DOOR.ordinal()] = 247; + } + catch (NoSuchFieldError noSuchFieldError158) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_DOOR_BLOCK.ordinal()] = 72; + } + catch (NoSuchFieldError noSuchFieldError159) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_FENCE.ordinal()] = 103; + } + catch (NoSuchFieldError noSuchFieldError160) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_HELMET.ordinal()] = 223; + } + catch (NoSuchFieldError noSuchFieldError161) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_HOE.ordinal()] = 209; + } + catch (NoSuchFieldError noSuchFieldError162) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_INGOT.ordinal()] = 182; + } + catch (NoSuchFieldError noSuchFieldError163) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_LEGGINGS.ordinal()] = 225; + } + catch (NoSuchFieldError noSuchFieldError164) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_ORE.ordinal()] = 16; + } + catch (NoSuchFieldError noSuchFieldError165) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_PICKAXE.ordinal()] = 174; + } + catch (NoSuchFieldError noSuchFieldError166) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_PLATE.ordinal()] = 150; + } + catch (NoSuchFieldError noSuchFieldError167) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_SPADE.ordinal()] = 173; + } + catch (NoSuchFieldError noSuchFieldError168) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.IRON_SWORD.ordinal()] = 184; + } + catch (NoSuchFieldError noSuchFieldError169) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.ITEM_FRAME.ordinal()] = 306; + } + catch (NoSuchFieldError noSuchFieldError170) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.JACK_O_LANTERN.ordinal()] = 92; + } + catch (NoSuchFieldError noSuchFieldError171) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.JUKEBOX.ordinal()] = 85; + } + catch (NoSuchFieldError noSuchFieldError172) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.JUNGLE_WOOD_STAIRS.ordinal()] = 138; + } + catch (NoSuchFieldError noSuchFieldError173) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LADDER.ordinal()] = 66; + } + catch (NoSuchFieldError noSuchFieldError174) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LAPIS_BLOCK.ordinal()] = 23; + } + catch (NoSuchFieldError noSuchFieldError175) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LAPIS_ORE.ordinal()] = 22; + } + catch (NoSuchFieldError noSuchFieldError176) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LAVA.ordinal()] = 11; + } + catch (NoSuchFieldError noSuchFieldError177) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LAVA_BUCKET.ordinal()] = 244; + } + catch (NoSuchFieldError noSuchFieldError178) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LEASH.ordinal()] = 329; + } + catch (NoSuchFieldError noSuchFieldError179) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LEATHER.ordinal()] = 251; + } + catch (NoSuchFieldError noSuchFieldError180) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LEATHER_BOOTS.ordinal()] = 218; + } + catch (NoSuchFieldError noSuchFieldError181) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LEATHER_CHESTPLATE.ordinal()] = 216; + } + catch (NoSuchFieldError noSuchFieldError182) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LEATHER_HELMET.ordinal()] = 215; + } + catch (NoSuchFieldError noSuchFieldError183) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LEATHER_LEGGINGS.ordinal()] = 217; + } + catch (NoSuchFieldError noSuchFieldError184) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LEAVES.ordinal()] = 19; + } + catch (NoSuchFieldError noSuchFieldError185) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LEAVES_2.ordinal()] = 163; + } + catch (NoSuchFieldError noSuchFieldError186) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LEVER.ordinal()] = 70; + } + catch (NoSuchFieldError noSuchFieldError187) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LOCKED_CHEST.ordinal()] = 96; + } + catch (NoSuchFieldError noSuchFieldError188) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LOG.ordinal()] = 18; + } + catch (NoSuchFieldError noSuchFieldError189) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LOG_2.ordinal()] = 164; + } + catch (NoSuchFieldError noSuchFieldError190) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.LONG_GRASS.ordinal()] = 32; + } + catch (NoSuchFieldError noSuchFieldError191) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.MAGMA_CREAM.ordinal()] = 295; + } + catch (NoSuchFieldError noSuchFieldError192) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.MAP.ordinal()] = 275; + } + catch (NoSuchFieldError noSuchFieldError193) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.MELON.ordinal()] = 277; + } + catch (NoSuchFieldError noSuchFieldError194) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.MELON_BLOCK.ordinal()] = 105; + } + catch (NoSuchFieldError noSuchFieldError195) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.MELON_SEEDS.ordinal()] = 279; + } + catch (NoSuchFieldError noSuchFieldError196) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.MELON_STEM.ordinal()] = 107; + } + catch (NoSuchFieldError noSuchFieldError197) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.MILK_BUCKET.ordinal()] = 252; + } + catch (NoSuchFieldError noSuchFieldError198) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.MINECART.ordinal()] = 245; + } + catch (NoSuchFieldError noSuchFieldError199) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.MOB_SPAWNER.ordinal()] = 53; + } + catch (NoSuchFieldError noSuchFieldError200) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.MONSTER_EGG.ordinal()] = 300; + } + catch (NoSuchFieldError noSuchFieldError201) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.MONSTER_EGGS.ordinal()] = 99; + } + catch (NoSuchFieldError noSuchFieldError202) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.MOSSY_COBBLESTONE.ordinal()] = 49; + } + catch (NoSuchFieldError noSuchFieldError203) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.MUSHROOM_SOUP.ordinal()] = 199; + } + catch (NoSuchFieldError noSuchFieldError204) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.MYCEL.ordinal()] = 112; + } + catch (NoSuchFieldError noSuchFieldError205) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.NAME_TAG.ordinal()] = 330; + } + catch (NoSuchFieldError noSuchFieldError206) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.NETHERRACK.ordinal()] = 88; + } + catch (NoSuchFieldError noSuchFieldError207) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.NETHER_BRICK.ordinal()] = 114; + } + catch (NoSuchFieldError noSuchFieldError208) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.NETHER_BRICK_ITEM.ordinal()] = 322; + } + catch (NoSuchFieldError noSuchFieldError209) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.NETHER_BRICK_STAIRS.ordinal()] = 116; + } + catch (NoSuchFieldError noSuchFieldError210) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.NETHER_FENCE.ordinal()] = 115; + } + catch (NoSuchFieldError noSuchFieldError211) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.NETHER_STALK.ordinal()] = 289; + } + catch (NoSuchFieldError noSuchFieldError212) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.NETHER_STAR.ordinal()] = 316; + } + catch (NoSuchFieldError noSuchFieldError213) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.NETHER_WARTS.ordinal()] = 117; + } + catch (NoSuchFieldError noSuchFieldError214) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.NOTE_BLOCK.ordinal()] = 26; + } + catch (NoSuchFieldError noSuchFieldError215) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.OBSIDIAN.ordinal()] = 50; + } + catch (NoSuchFieldError noSuchFieldError216) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.PACKED_ICE.ordinal()] = 171; + } + catch (NoSuchFieldError noSuchFieldError217) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.PAINTING.ordinal()] = 238; + } + catch (NoSuchFieldError noSuchFieldError218) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.PAPER.ordinal()] = 256; + } + catch (NoSuchFieldError noSuchFieldError219) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.PISTON_BASE.ordinal()] = 34; + } + catch (NoSuchFieldError noSuchFieldError220) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.PISTON_EXTENSION.ordinal()] = 35; + } + catch (NoSuchFieldError noSuchFieldError221) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.PISTON_MOVING_PIECE.ordinal()] = 37; + } + catch (NoSuchFieldError noSuchFieldError222) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.PISTON_STICKY_BASE.ordinal()] = 30; + } + catch (NoSuchFieldError noSuchFieldError223) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.POISONOUS_POTATO.ordinal()] = 311; + } + catch (NoSuchFieldError noSuchFieldError224) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.PORK.ordinal()] = 236; + } + catch (NoSuchFieldError noSuchFieldError225) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.PORTAL.ordinal()] = 91; + } + catch (NoSuchFieldError noSuchFieldError226) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.POTATO.ordinal()] = 144; + } + catch (NoSuchFieldError noSuchFieldError227) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.POTATO_ITEM.ordinal()] = 309; + } + catch (NoSuchFieldError noSuchFieldError228) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.POTION.ordinal()] = 290; + } + catch (NoSuchFieldError noSuchFieldError229) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.POWERED_MINECART.ordinal()] = 260; + } + catch (NoSuchFieldError noSuchFieldError230) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.POWERED_RAIL.ordinal()] = 28; + } + catch (NoSuchFieldError noSuchFieldError231) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.PUMPKIN.ordinal()] = 87; + } + catch (NoSuchFieldError noSuchFieldError232) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.PUMPKIN_PIE.ordinal()] = 317; + } + catch (NoSuchFieldError noSuchFieldError233) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.PUMPKIN_SEEDS.ordinal()] = 278; + } + catch (NoSuchFieldError noSuchFieldError234) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.PUMPKIN_STEM.ordinal()] = 106; + } + catch (NoSuchFieldError noSuchFieldError235) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.QUARTZ.ordinal()] = 323; + } + catch (NoSuchFieldError noSuchFieldError236) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.QUARTZ_BLOCK.ordinal()] = 157; + } + catch (NoSuchFieldError noSuchFieldError237) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.QUARTZ_ORE.ordinal()] = 155; + } + catch (NoSuchFieldError noSuchFieldError238) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.QUARTZ_STAIRS.ordinal()] = 158; + } + catch (NoSuchFieldError noSuchFieldError239) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.RAILS.ordinal()] = 67; + } + catch (NoSuchFieldError noSuchFieldError240) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.RAW_BEEF.ordinal()] = 280; + } + catch (NoSuchFieldError noSuchFieldError241) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.RAW_CHICKEN.ordinal()] = 282; + } + catch (NoSuchFieldError noSuchFieldError242) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.RAW_FISH.ordinal()] = 266; + } + catch (NoSuchFieldError noSuchFieldError243) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.RECORD_10.ordinal()] = 341; + } + catch (NoSuchFieldError noSuchFieldError244) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.RECORD_11.ordinal()] = 342; + } + catch (NoSuchFieldError noSuchFieldError245) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.RECORD_12.ordinal()] = 343; + } + catch (NoSuchFieldError noSuchFieldError246) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.RECORD_3.ordinal()] = 334; + } + catch (NoSuchFieldError noSuchFieldError247) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.RECORD_4.ordinal()] = 335; + } + catch (NoSuchFieldError noSuchFieldError248) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.RECORD_5.ordinal()] = 336; + } + catch (NoSuchFieldError noSuchFieldError249) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.RECORD_6.ordinal()] = 337; + } + catch (NoSuchFieldError noSuchFieldError250) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.RECORD_7.ordinal()] = 338; + } + catch (NoSuchFieldError noSuchFieldError251) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.RECORD_8.ordinal()] = 339; + } + catch (NoSuchFieldError noSuchFieldError252) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.RECORD_9.ordinal()] = 340; + } + catch (NoSuchFieldError noSuchFieldError253) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.REDSTONE.ordinal()] = 248; + } + catch (NoSuchFieldError noSuchFieldError254) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.REDSTONE_BLOCK.ordinal()] = 154; + } + catch (NoSuchFieldError noSuchFieldError255) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.REDSTONE_COMPARATOR.ordinal()] = 321; + } + catch (NoSuchFieldError noSuchFieldError256) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.REDSTONE_COMPARATOR_OFF.ordinal()] = 151; + } + catch (NoSuchFieldError noSuchFieldError257) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.REDSTONE_COMPARATOR_ON.ordinal()] = 152; + } + catch (NoSuchFieldError noSuchFieldError258) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.REDSTONE_LAMP_OFF.ordinal()] = 125; + } + catch (NoSuchFieldError noSuchFieldError259) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.REDSTONE_LAMP_ON.ordinal()] = 126; + } + catch (NoSuchFieldError noSuchFieldError260) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.REDSTONE_ORE.ordinal()] = 74; + } + catch (NoSuchFieldError noSuchFieldError261) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.REDSTONE_TORCH_OFF.ordinal()] = 76; + } + catch (NoSuchFieldError noSuchFieldError262) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.REDSTONE_TORCH_ON.ordinal()] = 77; + } + catch (NoSuchFieldError noSuchFieldError263) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.REDSTONE_WIRE.ordinal()] = 56; + } + catch (NoSuchFieldError noSuchFieldError264) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.RED_MUSHROOM.ordinal()] = 41; + } + catch (NoSuchFieldError noSuchFieldError265) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.RED_ROSE.ordinal()] = 39; + } + catch (NoSuchFieldError noSuchFieldError266) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.ROTTEN_FLESH.ordinal()] = 284; + } + catch (NoSuchFieldError noSuchFieldError267) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SADDLE.ordinal()] = 246; + } + catch (NoSuchFieldError noSuchFieldError268) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SAND.ordinal()] = 13; + } + catch (NoSuchFieldError noSuchFieldError269) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SANDSTONE.ordinal()] = 25; + } + catch (NoSuchFieldError noSuchFieldError270) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SANDSTONE_STAIRS.ordinal()] = 130; + } + catch (NoSuchFieldError noSuchFieldError271) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SAPLING.ordinal()] = 7; + } + catch (NoSuchFieldError noSuchFieldError272) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SEEDS.ordinal()] = 212; + } + catch (NoSuchFieldError noSuchFieldError273) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SHEARS.ordinal()] = 276; + } + catch (NoSuchFieldError noSuchFieldError274) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SIGN.ordinal()] = 240; + } + catch (NoSuchFieldError noSuchFieldError275) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SIGN_POST.ordinal()] = 64; + } + catch (NoSuchFieldError noSuchFieldError276) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SKULL.ordinal()] = 146; + } + catch (NoSuchFieldError noSuchFieldError277) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SKULL_ITEM.ordinal()] = 314; + } + catch (NoSuchFieldError noSuchFieldError278) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SLIME_BALL.ordinal()] = 258; + } + catch (NoSuchFieldError noSuchFieldError279) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SMOOTH_BRICK.ordinal()] = 100; + } + catch (NoSuchFieldError noSuchFieldError280) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SMOOTH_STAIRS.ordinal()] = 111; + } + catch (NoSuchFieldError noSuchFieldError281) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SNOW.ordinal()] = 79; + } + catch (NoSuchFieldError noSuchFieldError282) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SNOW_BALL.ordinal()] = 249; + } + catch (NoSuchFieldError noSuchFieldError283) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SNOW_BLOCK.ordinal()] = 81; + } + catch (NoSuchFieldError noSuchFieldError284) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SOIL.ordinal()] = 61; + } + catch (NoSuchFieldError noSuchFieldError285) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SOUL_SAND.ordinal()] = 89; + } + catch (NoSuchFieldError noSuchFieldError286) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SPECKLED_MELON.ordinal()] = 299; + } + catch (NoSuchFieldError noSuchFieldError287) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SPIDER_EYE.ordinal()] = 292; + } + catch (NoSuchFieldError noSuchFieldError288) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SPONGE.ordinal()] = 20; + } + catch (NoSuchFieldError noSuchFieldError289) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SPRUCE_WOOD_STAIRS.ordinal()] = 136; + } + catch (NoSuchFieldError noSuchFieldError290) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STAINED_CLAY.ordinal()] = 161; + } + catch (NoSuchFieldError noSuchFieldError291) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STAINED_GLASS.ordinal()] = 97; + } + catch (NoSuchFieldError noSuchFieldError292) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STAINED_GLASS_PANE.ordinal()] = 162; + } + catch (NoSuchFieldError noSuchFieldError293) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STATIONARY_LAVA.ordinal()] = 12; + } + catch (NoSuchFieldError noSuchFieldError294) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STATIONARY_WATER.ordinal()] = 10; + } + catch (NoSuchFieldError noSuchFieldError295) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STEP.ordinal()] = 45; + } + catch (NoSuchFieldError noSuchFieldError296) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STICK.ordinal()] = 197; + } + catch (NoSuchFieldError noSuchFieldError297) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STONE.ordinal()] = 2; + } + catch (NoSuchFieldError noSuchFieldError298) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STONE_AXE.ordinal()] = 192; + } + catch (NoSuchFieldError noSuchFieldError299) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STONE_BUTTON.ordinal()] = 78; + } + catch (NoSuchFieldError noSuchFieldError300) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STONE_HOE.ordinal()] = 208; + } + catch (NoSuchFieldError noSuchFieldError301) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STONE_PICKAXE.ordinal()] = 191; + } + catch (NoSuchFieldError noSuchFieldError302) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STONE_PLATE.ordinal()] = 71; + } + catch (NoSuchFieldError noSuchFieldError303) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STONE_SPADE.ordinal()] = 190; + } + catch (NoSuchFieldError noSuchFieldError304) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STONE_SWORD.ordinal()] = 189; + } + catch (NoSuchFieldError noSuchFieldError305) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STORAGE_MINECART.ordinal()] = 259; + } + catch (NoSuchFieldError noSuchFieldError306) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.STRING.ordinal()] = 204; + } + catch (NoSuchFieldError noSuchFieldError307) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SUGAR.ordinal()] = 270; + } + catch (NoSuchFieldError noSuchFieldError308) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SUGAR_CANE.ordinal()] = 255; + } + catch (NoSuchFieldError noSuchFieldError309) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SUGAR_CANE_BLOCK.ordinal()] = 84; + } + catch (NoSuchFieldError noSuchFieldError310) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.SULPHUR.ordinal()] = 206; + } + catch (NoSuchFieldError noSuchFieldError311) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.THIN_GLASS.ordinal()] = 104; + } + catch (NoSuchFieldError noSuchFieldError312) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.TNT.ordinal()] = 47; + } + catch (NoSuchFieldError noSuchFieldError313) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.TORCH.ordinal()] = 51; + } + catch (NoSuchFieldError noSuchFieldError314) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.TRAPPED_CHEST.ordinal()] = 148; + } + catch (NoSuchFieldError noSuchFieldError315) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.TRAP_DOOR.ordinal()] = 98; + } + catch (NoSuchFieldError noSuchFieldError316) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.TRIPWIRE.ordinal()] = 134; + } + catch (NoSuchFieldError noSuchFieldError317) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.TRIPWIRE_HOOK.ordinal()] = 133; + } + catch (NoSuchFieldError noSuchFieldError318) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.VINE.ordinal()] = 108; + } + catch (NoSuchFieldError noSuchFieldError319) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WALL_SIGN.ordinal()] = 69; + } + catch (NoSuchFieldError noSuchFieldError320) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WATCH.ordinal()] = 264; + } + catch (NoSuchFieldError noSuchFieldError321) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WATER.ordinal()] = 9; + } + catch (NoSuchFieldError noSuchFieldError322) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WATER_BUCKET.ordinal()] = 243; + } + catch (NoSuchFieldError noSuchFieldError323) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WATER_LILY.ordinal()] = 113; + } + catch (NoSuchFieldError noSuchFieldError324) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WEB.ordinal()] = 31; + } + catch (NoSuchFieldError noSuchFieldError325) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WHEAT.ordinal()] = 213; + } + catch (NoSuchFieldError noSuchFieldError326) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WOOD.ordinal()] = 6; + } + catch (NoSuchFieldError noSuchFieldError327) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WOODEN_DOOR.ordinal()] = 65; + } + catch (NoSuchFieldError noSuchFieldError328) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WOOD_AXE.ordinal()] = 188; + } + catch (NoSuchFieldError noSuchFieldError329) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WOOD_BUTTON.ordinal()] = 145; + } + catch (NoSuchFieldError noSuchFieldError330) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WOOD_DOOR.ordinal()] = 241; + } + catch (NoSuchFieldError noSuchFieldError331) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WOOD_DOUBLE_STEP.ordinal()] = 127; + } + catch (NoSuchFieldError noSuchFieldError332) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WOOD_HOE.ordinal()] = 207; + } + catch (NoSuchFieldError noSuchFieldError333) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WOOD_PICKAXE.ordinal()] = 187; + } + catch (NoSuchFieldError noSuchFieldError334) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WOOD_PLATE.ordinal()] = 73; + } + catch (NoSuchFieldError noSuchFieldError335) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WOOD_SPADE.ordinal()] = 186; + } + catch (NoSuchFieldError noSuchFieldError336) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WOOD_STAIRS.ordinal()] = 54; + } + catch (NoSuchFieldError noSuchFieldError337) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WOOD_STEP.ordinal()] = 128; + } + catch (NoSuchFieldError noSuchFieldError338) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WOOD_SWORD.ordinal()] = 185; + } + catch (NoSuchFieldError noSuchFieldError339) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WOOL.ordinal()] = 36; + } + catch (NoSuchFieldError noSuchFieldError340) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WORKBENCH.ordinal()] = 59; + } + catch (NoSuchFieldError noSuchFieldError341) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.WRITTEN_BOOK.ordinal()] = 304; + } + catch (NoSuchFieldError noSuchFieldError342) {} + try { + $switch_TABLE$org$bukkit$Material2[Material.YELLOW_FLOWER.ordinal()] = 38; + } + catch (NoSuchFieldError noSuchFieldError343) {} + return ItemStackUtils.$SWITCH_TABLE$org$bukkit$Material = $switch_TABLE$org$bukkit$Material2; + } +} diff --git a/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/utils/PotionUtils.java b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/utils/PotionUtils.java new file mode 100644 index 0000000..b7cdf8b --- /dev/null +++ b/ViperCore/src/main/java/net/libhalt/dev/plugin/armor/utils/PotionUtils.java @@ -0,0 +1,82 @@ +package net.libhalt.dev.plugin.armor.utils; + +import org.bukkit.entity.*; +import org.bukkit.potion.*; +import com.google.common.base.*; +import org.bukkit.configuration.*; +import java.util.*; + +public class PotionUtils +{ + private static List negatives; + + public static boolean isNegative(final PotionEffectType type) { + return PotionUtils.negatives.contains(type); + } + + public static boolean canAddConcideringLevel(final Player player, final PotionEffect effect) { + if (player.hasPotionEffect(effect.getType())) { + final PotionEffect before = getPotionEffect(player, effect.getType()); + return before.getAmplifier() < effect.getAmplifier() || (before.getAmplifier() == effect.getAmplifier() && before.getDuration() < effect.getDuration()); + } + return true; + } + + public static void addConcideringLevel(final Player player, final PotionEffect effect) { + if (canAddConcideringLevel(player, effect)) { + player.addPotionEffect(effect, true); + } + } + + public static int getLevel(final Player player, final PotionEffectType type) { + Preconditions.checkState(player.hasPotionEffect(type)); + for (final PotionEffect effect : player.getActivePotionEffects()) { + if (effect.getType().getId() == type.getId()) { + return effect.getAmplifier() + 1; + } + } + return 0; + } + + public static PotionEffect getPotionEffect(final Player player, final PotionEffectType type) { + Preconditions.checkState(player.hasPotionEffect(type)); + for (final PotionEffect effect : player.getActivePotionEffects()) { + if (effect.getType().getId() == type.getId()) { + return effect; + } + } + throw new AssertionError(); + } + + public static List paraseList(final ConfigurationSection section) { + final List effects = new ArrayList(); + for (final String key : section.getKeys(false)) { + final ConfigurationSection effectSection = section.getConfigurationSection(key); + if (effectSection == null) { + continue; + } + final PotionEffectType type = PotionEffectType.getByName(effectSection.getName()); + if (type != null) { + final int amplifier = effectSection.getInt("level") - 1; + final int duration = effectSection.getInt("duration") * 20 + 20; + final PotionEffect effect = new PotionEffect(type, duration, amplifier); + effects.add(effect); + } + else { + System.out.println(String.valueOf(effectSection.getName()) + " not parasable"); + } + } + return effects; + } + + static { + final List negatives = new ArrayList(); + negatives.add(PotionEffectType.POISON); + negatives.add(PotionEffectType.WEAKNESS); + negatives.add(PotionEffectType.BLINDNESS); + negatives.add(PotionEffectType.WITHER); + negatives.add(PotionEffectType.SLOW); + negatives.add(PotionEffectType.WEAKNESS); + PotionUtils.negatives = negatives; + } +} diff --git a/ViperCore/src/main/resources/armor-class.yml b/ViperCore/src/main/resources/armor-class.yml new file mode 100644 index 0000000..6420a2c --- /dev/null +++ b/ViperCore/src/main/resources/armor-class.yml @@ -0,0 +1,154 @@ +archer: + enabled: true + archer-damage-formula: "(damage * 1.5) + (distance/25.0)" + click: + SUGAR: + SPEED: + duration: 7 + level: 4 + cooldown: 30 + passive: + DAMAGE_RESISTANCE: + duration: 6 + level: 1 + SPEED: + duration: 6 + level: 3 +bard: + enabled: true + click: + BLAZE_POWDER: + INCREASE_DAMAGE: + duration: 5 + level: 1 + cooldown: 8 + power: 40 + BROWN_MUSHROOM: + WEAKNESS: + duration: 5 + level: 1 + cooldown: 8 + power: 35 + FEATHER: + JUMP: + duration: 7 + level: 5 + cooldown: 8 + power: 25 + GHAST_TEAR: + REGENERATION: + duration: 5 + level: 1 + cooldown: 8 + power: 35 + IRON_INGOT: + DAMAGE_RESISTANCE: + duration: 5 + level: 3 + cooldown: 8 + power: 35 + RAW_FISH: + WATER_BREATHING: + duration: 7 + level: 6 + cooldown: 8 + power: 25 + SLIME_BALL: + SLOW: + duration: 5 + level: 1 + cooldown: 8 + power: 30 + SPIDER_EYE: + WITHER: + duration: 5 + level: 2 + cooldown: 8 + power: 30 + SUGAR: + SPEED: + duration: 5 + level: 3 + cooldown: 8 + power: 20 + held: + FEATHER: + JUMP: + duration: 6 + level: 2 + GHAST_TEAR: + REGENERATION: + duration: 6 + level: 1 + GOLDEN_CARROT: + NIGHT_VISION: + duration: 6 + level: 1 + IRON_INGOT: + DAMAGE_RESISTANCE: + duration: 6 + level: 1 + MAGMA_CREAM: + FIRE_RESISTANCE: + duration: 6 + level: 1 + SUGAR: + SPEED: + duration: 6 + level: 2 + passive: + DAMAGE_RESISTANCE: + duration: 6 + level: 1 + REGENERATION: + duration: 6 + level: 1 + SPEED: + duration: 6 + level: 2 + WEAKNESS: + duration: 6 + level: 4 +class-warmup: 10 +messages: + ARCHER_DAMAGE: "&aArcher({distance}) {pre-damage} -> {damage}" + ARCHER_NOT_FULL: "&cYour arrow does not tag enemy because it was not shot at full power." + BARD_DISABLED_SAFEZONE: "&bBarding in SafeZone is disabled." + BARD_POWEER: "&bBard Power: {power}" + CLASS_ACTIVE: "&bClass &b&l{class}&b is now active!" + CLASS_COOLDOWN: "&cYou can not do this for {duration}" + CLASS_NO_ENERGY: "&cYou do not have enough energy for this. You have {power} but requires {required_power}" + CLASS_REMOVED: "&cYour {class} kit was removed!" + CLASS_WARMUP: "&aClass &a&l{class}&a is warming up! (10 second)" +miner: + enabled: true + passive: + FAST_DIGGING: + duration: 6 + level: 2 + passive-underground: + INVISIBILITY: + duration: 6 + level: 2 + NIGHT_VISION: + duration: 30 + level: 1 + underground-y: 20 +rouge: + enabled: true + backstab-damage: 6.0 + click: + SUGAR: + SPEED: + duration: 8 + level: 5 + cooldown: 30 + cooldown: 2000 + degree: 0.6 + passive: + JUMP: + duration: 6 + level: 2 + SPEED: + duration: 6 + level: 2 \ No newline at end of file diff --git a/ViperCore/src/main/resources/combat-tag.yml b/ViperCore/src/main/resources/combat-tag.yml new file mode 100644 index 0000000..f90a2a0 --- /dev/null +++ b/ViperCore/src/main/resources/combat-tag.yml @@ -0,0 +1,8 @@ +tag-on-damage: true +tag-on-attack: true +tag-second: 30 +glass-color: 5 +isKitmap : false +disable-commands: + - "/f home" + - "/factions home" \ No newline at end of file diff --git a/ViperCore/src/main/resources/conquest.yml b/ViperCore/src/main/resources/conquest.yml new file mode 100644 index 0000000..1342671 --- /dev/null +++ b/ViperCore/src/main/resources/conquest.yml @@ -0,0 +1,59 @@ + +CONQUEST: + Cap-Time: 30 + Required-Points: 150 + Loot-Number: 3 + Penality: # should a faction lose point when a member died + enabled: true + points: 1 + Loot: + Key: + amount: 1 # how much key the winner of the Conquest get + name: '&cConquest Key' + lore: + - '' + - '&bGet your rewards at Spawn!' +Messages: + NO-PERM: '&cYou do not have the permission to do that !' + Date-Format: 'dd/MM/yyyy HH:mm:ss' + USAGE: + STAFF: # players with the permission "Conquest.Admin" are able to this + - '&6/conquest create &8- &7Create a Conquest' + - '&6/conquest delete &8- &7Delete a Conquest' + - '&6/conquest area &8- &7Define a Conquest area' + - '&6/conquest start &8- &7Start a Conquest' + - '&6/conquest stop &8 &7Stop a Conquest' + - '&6/conquest list &8- &7Conquest list' + - '&6/conquest loot &8- &7Open Conquest loot' + - '&6/conquest editloot &8- &7Edit Conquest loot' + - '&6/conquest wand &8- &7Get the Conquest wand' + - '&6/conquest chest create &8- &eSet the Location of a Chest loot' + - '&6/conquest chest remove &8- &eRemove a Chest Loot' + - '&6/conquest chest key &8- &eGet a reward key' + PLAYER: + - '&6/conquest loot &8- &7Open Conquest loot' + ALREADY-EXIST: '&eThis Conquest already exist!' + DOESNT-EXIST: '&cThis Conquest doesn''t exist!' + CONQUEST-RUNNING: '&cYou can''t do that while this Conquest is running! &ePlease type /conquest stop' + NONE-RUNNING-CONQUEST: '&cThere is not a running Conquest!' + NONE-CONQUEST: '&cThere is not a avalaible Conquest !' + CREATED: '&eYou succefully created the Conquest &c%NAME%&e! &bPlease, now set the 4 area using the command &c/conquest area ' + DELETED: '&eYou succefully deleted the Conquest &c%NAME%&e!' + NO-SELECTION: '&ePlease select a area using the wand !' + INVALID-AREA: '&c&lInvalid Area! &eValid area type: RED, YELLOW, BLUE, GREEN' + INCOMPLET-CONQUEST: '&cThis Conquest is not complete!' + AREA-UPTADED: '&eArea Updated!' + TELEPORTATION: '&aYou have been teleported to the Conquest %NAME%' + CONQUEST-READY: '&eThis Conquest is ready! &nYou can start it with the command &c/conquest start %NAME%' + CONQUEST-STARTED: '&eThe Conquest &6%NAME% &estarted with &a&l%POINTS% &epoints&e!' + CONQUEST-STOPPED: '&eThe Conquest &6%NAME% &ehas been stopped!' + CONQUEST-CAPPING: '&c&lConquest &eサ &eThe Faction &c%FACTION% &ejust capped the area %AREA% &ewith &a&l%POINTS% &epoints!' + CONQUEST-WIN: '&e&lThe Faction &c%FACTION% &e&lsuccefully won the &c&lConquest &e&lwith &a&l%POINTS% &e&lpoints!' + PENALITY: '&eYour faction lost &c%POINTS% &eConquest points !' + ALREADY-CHESTLOOT: '&cThis chest is already a Chest Loot!' + NOT-A-CHEST: '&cChest Loot can only be: Chest, Trapped Chest or EnderChest' + NOT-A-CHESTLOOT: '&cThis chest is not a Chest Loot!' + LOOT: '&eThe player &c%PLAYER% &eopenned a &c&lConquest &eCrate and won&7: ' + CHEST-LOOT-CREATED: '&aChest loot &asuccefully created!' + CHEST-LOOT-REMOVED: '&aChest loot&asuccefully deleted!' + CHEST-LOOT-NO-KEY: '&eYou need a Conquest key to open this Chest Loot!' diff --git a/ViperCore/src/main/resources/cooldowns.yml b/ViperCore/src/main/resources/cooldowns.yml new file mode 100644 index 0000000..21432c8 --- /dev/null +++ b/ViperCore/src/main/resources/cooldowns.yml @@ -0,0 +1 @@ +enderpearl-cooldown: 10 \ No newline at end of file diff --git a/ViperCore/src/main/resources/crowbar.yml b/ViperCore/src/main/resources/crowbar.yml new file mode 100644 index 0000000..bb8ae82 --- /dev/null +++ b/ViperCore/src/main/resources/crowbar.yml @@ -0,0 +1 @@ +crowbar-material: "DIAMOND_HOE" \ No newline at end of file diff --git a/ViperCore/src/main/resources/death-bans.yml b/ViperCore/src/main/resources/death-bans.yml new file mode 100644 index 0000000..f102d78 --- /dev/null +++ b/ViperCore/src/main/resources/death-bans.yml @@ -0,0 +1,13 @@ +death-ban: 20 +live-limit: 100 +death-ban-by-perm: + 15: "deathban.15second" + 10: "deathban.10second" +message-live: + - "&cYou have %live% lives left" + - "Note: use /lives help for list of command" +message-help-live: + - "&e/lives check - check the live of player. works only for online player" + - "&e/lives set - set the live of target by name. works only for online players" + - "&e/lives add - adds live by name. only online players" + - "&e/lives send - send lives by name. only online players" diff --git a/ViperCore/src/main/resources/death-messages.yml b/ViperCore/src/main/resources/death-messages.yml new file mode 100644 index 0000000..e60e195 --- /dev/null +++ b/ViperCore/src/main/resources/death-messages.yml @@ -0,0 +1,29 @@ +BLOCK_EXPLOSION: "&e{player}[{player.kills}] died to a block explosion" +CONTACT: "&e{player}[{player.kills}] hugged a cactus" +DROWNING: "&e{player}[{player.kills}] couldnt find any air to breath" +ENTITY_ATTACK: + ENTITY: "&e{player}[{player.kills}] got killed by a {killer}" + PLAYER: "&e{player}[{player.kills}] got slained by a {killer}[{killer.kills}] using a {killer.hand}" + PLAYER_NOITEM: "&e{player}[{player.kills}] got slained by a {killer}[{killer.kills}]" +ENTITY_EXPLOSION: "&e{player}[{player.kills}] got exploded to death" +FALL: "&e{player}[{player.kills}] believe he could fly" +FALLING_BLOCK: "&e{player}[{player.kills}] died to a falling block" +FIRE: "&e{player}[{player.kills}] burnt to death" +FIRE_TICK: "&e{player}[{player.kills}] burnt to death" +LAVA: "&e{player}[{player.kills}] tried to swim in a lava" +LIGHTNING: "&e{player}[{player.kills}] was killed by a lightning" +MAGIC: "&e{player}[{player.kills}] got potioned to death" +MELTING: "&e{player}[{player.kills}] was killed by a melting snowman" +POISON: "&e{player}[{player.kills}] was poisoned do death" +PROJECTILE: + ENTITY: "&e{player}[{player.kills}] coudlnt survive an incoming arrow" + PLAYER: "&e{player}[{player.kills}] got shot by a {killer}[{killer.kills}] using a {killer.hand}" + PLAYER_NOITEM: "&e{player}[{player.kills}] got shot by a {killer}[{killer.kills}] " + +STARVATION: "&e{player}[{player.kills}] couldnt find anything to eat" +SUFFOCATION: "&e{player}[{player.kills}] suffocated to death" +SUICIDE: "&e{player}[{player.kills}] killed himself" +THORNS: "&e{player}[{player.kills}] got prickled to death" +VOID: "&e{player}[{player.kills}] jumped to the void" +WITHER: "&e{player}[{player.kills}] got withered to death" +UNKNOWN: "&e{player}[{player.kills}] died" \ No newline at end of file diff --git a/ViperCore/src/main/resources/disable-crafting.yml b/ViperCore/src/main/resources/disable-crafting.yml new file mode 100644 index 0000000..2185f56 --- /dev/null +++ b/ViperCore/src/main/resources/disable-crafting.yml @@ -0,0 +1,3 @@ +disabled-crafting: + GOLDEN_APPLE: + - 1 \ No newline at end of file diff --git a/ViperCore/src/main/resources/en_US.yml b/ViperCore/src/main/resources/en_US.yml new file mode 100644 index 0000000..ebda83c --- /dev/null +++ b/ViperCore/src/main/resources/en_US.yml @@ -0,0 +1,35 @@ +ARCHER_INSTANT_EFFECT: "&eArcher Instant Effect [%s] Active!" +ARCHER_INSTANT_EFFECT_COOLDOWN: "&eArcher Instant Effect Cooldown: %s Second" +ARCHER_WITH_RANGE: "&1[Archer w: Range (%s)]: &eDamage Increase (%sx => %s)" +BARD_INSTANT_EFFECT: "&eBard Instant Effect [%s] Active!" +BARD_INSTANT_EFFECT_COOLDOWN: "&eBard Instant Effect Cooldown: %s Second" +ROUGE_INSTANT_EFFECT: "&eRouge Instant Effect [Speed5] Active!" +ROUGE_INSTANT_EFFECT_COOLDOWN: "&eRouge Instant Effect Cooldown: %s Second" +ROUGE_BACKSTAB_COOLDOWN: "&eRouge Backstab Cooldown: %s Second" +CLASS_REMOVED: "&cYour class %s was removed!" +CLASS_WARMUP: "&a%s Warmup : 10 second" +CLASS_ACTIVE: "&aKit %s Active!" +FREEZE_MESSAGE: "Do not logout and login at ts3.comLine1" +FREEZE_MESSAGE_LINE2: "Do not logout and login at ts3.comLine2" + +ILLGEL_ENCHANTMENT: "&cHi! We have detected you have an illegal enchantment. The items levels has been reduced!" +POTION_DISABLED: "&cThis potion is currently disabled!" +NETHER_SPAWNER_PROTECTED: "&cSpawners can not be placed or broken in Nether" +WORLD_BOREDER_REACHED: "&cYou have reached the world border" +COMBAT_TAGGED_DAMAGER: "&eYou have been combat taged for seconds" +COMBAT_TAGGED_DAMAGEE: "&eYou have been combat taged for seconds" +DEATH_BANNED: "&cYou are deathbanned for %s" +DEATH_BANNED_LIVE_AVAILABLE: "&cYou are deathbanned for %s You have %s lives! login within next 10 second to consume your lives!" +NOTIFICATION_LIVE_CONSUMED: "&eNote: You were able to login because you have used your lives! You know have %s left" +ENDERPEARL_COOLDOWN: "&cYou can not use ender pearls for %s seconds" +PVP_TIMER_FROZEN: "&cYour PvP Timer has frozen" +PVP_TIMER_UNFROZEN: "&cYour PvP Timer has unfrozen" +COMMAND_CANCALLED_TAGGED: "&cYou can not use this command while combat-tagged" +COMMAND_CANCALLED_PVPTIMER: "&cYou can not use this command while PvP timer is active" +COMMAND_ENABLED_PVPTIMER: "&cYou have enabled pvp!" +COMMAND_LEFT_PVPTIMER: "&cYour PvP Timer has %s seconds left!!" +CROWBAR_DENIED: "&cCrowbars can not be used for %s" +CROWBAR_SPAWNER_LEFT: "&cThis crowbar has %s usage for spawner" +CROWBAR_END_FRAME_LEFT: "&cThis crowbar has %s usage for end portals" +FOUND_DIAMOND_NOTIFICATION_OFF: "Toggled off diamond notification" +FOUND_DIAMOND_NOTIFICATION_ON: "Toggled on diamond notification" \ No newline at end of file diff --git a/ViperCore/src/main/resources/enchant-fix.yml b/ViperCore/src/main/resources/enchant-fix.yml new file mode 100644 index 0000000..1915af7 --- /dev/null +++ b/ViperCore/src/main/resources/enchant-fix.yml @@ -0,0 +1,8 @@ +Enchant-Limiter: + - DAMAGE_ALL:1 + - KNOCKBACK:0 + - PROTECTION_ENVIRONMENTAL:1 + - ARROW_FIRE:0 + - ARROW_KNOCKBACK:0 + - THORNS:0 + - FIRE_ASPECT:0 \ No newline at end of file diff --git a/ViperCore/src/main/resources/enchantment-limiter.yml b/ViperCore/src/main/resources/enchantment-limiter.yml new file mode 100644 index 0000000..925d11e --- /dev/null +++ b/ViperCore/src/main/resources/enchantment-limiter.yml @@ -0,0 +1,5 @@ +#See https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/enchantments/Enchantment.html +remove-invalid-enchantments: false +enchantment-limit: + DAMAGE_ALL: 2 + PROTECTION_ENVIRONMENTAL: 2 \ No newline at end of file diff --git a/ViperCore/src/main/resources/gapple.yml b/ViperCore/src/main/resources/gapple.yml new file mode 100644 index 0000000..4f0ee79 --- /dev/null +++ b/ViperCore/src/main/resources/gapple.yml @@ -0,0 +1,16 @@ +#GappleCooldown + +NoPermission message: "&eYou do not have the permission to do this!" +#Edit the no permission message + +Cooldown message: "&eCurrently on cooldown." +#Cooldown message when you try to eat a gapple + +Expiry message: "&eYou can now use a gapple again." +#Expiry message when cooldown is over + +Eat message: "&eYou are now cooldown." +#message when you eat a gapple + +Cooldown time: 5 +#Cooldown time in minutes diff --git a/ViperCore/src/main/resources/glowstone.yml b/ViperCore/src/main/resources/glowstone.yml new file mode 100644 index 0000000..2d62e79 --- /dev/null +++ b/ViperCore/src/main/resources/glowstone.yml @@ -0,0 +1,14 @@ + +Enabled: true +Auto-Start: 30 + +Messages: + NO-PERM: '&cYou do not have this permission' + Glowstone-Mountain: + COMMAND-USAGE: + - '&7&m--------&7[ &e&lGlow &7]&7&m--------' + - '&6/glow forcestart &8- &7Force start the spawn of the Glowstone Mountain' + - '&6/glow setloc &8- &7Set the location of the Glowstone Mountain' + - '&6/glow tp &8- &7Teleport you to the Glowstone Mountain' + SPAWN: '&eThe &6&lGlowstone Mountain &ehas regenerate at &c%COORDS% &e!' + FORCE-START: '&eThe &6&lGlowstone Mountain &ehas been &cforce start &eat &c%COORDS% &e!' diff --git a/ViperCore/src/main/resources/modmode.yml b/ViperCore/src/main/resources/modmode.yml new file mode 100644 index 0000000..a30f68a --- /dev/null +++ b/ViperCore/src/main/resources/modmode.yml @@ -0,0 +1,55 @@ + +Mod-Mode: + Freeze: + message-delay: 5 + execute-cmd-on-disconnect: false + cmds: + - 'banip %PLAYER% Refusing to SS' + Staff-LeaveJoin-Message: true + Toggle-ModMode-OnJoin: true + Block-InventoryMove: + Player-Inventory: true + Others-Inventory: true + Block-ItemDrop: true + Block-PickUp: true + Block-Place: true + Block-Break: true + Restore-Inventory: false + Disable-Pvp: true + Staff-Chat: + format: '&7[&cStaff&7] &b%PLAYER%&7: &b%MESSAGE%' +Messages: + VANISH: '&eYou have %STATUT% &dVanish &emode!' + MOD-MODE: '&eYou have %STATUT% ðe &bModerator Mode&e!' + STAFF-CHAT: '&eYou have %STATUT% ðe Staff Chat &e!' + STAFF-JOIN: '&7[&4&lStaff&7] &9%PLAYER% &ajoin &bthe server!' + STAFF-LEAVE: '&7[&4&lStaff&7] &9%PLAYER% &cleft &bthe server!' + FROZEN: '&c%PLAYER% &eis now frozen !' + UN-FROZEN: '&c%PLAYER% &eis no longer frozen !' + MOD-ITEMS: + COMPASS: '&bCompass' + AXE: '&b&lWorldEdit Axe' + VANISH: '&d&lVanish &8(%STATUT%&8)' + RANDOM-TP: '&6&lTeleport Random' + INSPECTION: '&e&lInventory View' + CHEST: '&b&lXray GUI' + MODE-NOT-TOGGLED: '&cYou are not in &9Moderator Mode&c, you can''t use this item!' + OPENING-INVENTORY: '&aOpening &e%TARGET%''s &ainventory...' + RANDOM-TELEPORTATION: '&eYou have been teleported to &6%PLAYER%&e!' + DISABLE-INTERACTION: '&cYou are not allowed to do that !' + GUI: + NOT-ONLINE: '&cThis player is not online !' + TELEPORTATION: '&eTeleportation to the player &a%PLAYER% &e!' + FREEZE: + ITEMS: '&2&lFreeze' + FREEZE: '&eThe player &6%PLAYER% &eis now frozen !' + UN-FREEZE: '&eThe player &6%PLAYER% &eis no longer frozen !' + MESSAGE: + 1: '&4&lYou are frozen !' + 2: ' ' + 3: '&bPlease join our teamspeak' + 4: '&c� &c&n&lmy.teamspeak.com' + 5: ' ' + STATUT: + enabled: '&aenabled' + disabled: '&cdisabled' diff --git a/ViperCore/src/main/resources/modules.yml b/ViperCore/src/main/resources/modules.yml new file mode 100644 index 0000000..2731627 --- /dev/null +++ b/ViperCore/src/main/resources/modules.yml @@ -0,0 +1,24 @@ +FasterTileEntity: true +MiscDisable: true +PotionLimit: true +EnchantmentLimit: true +EnderPearl: true +Kit: true +PvPTimer: true +DeathKill: true +CombatLogger: true +PlayerData: true +Freeze: true +Scoreboard: true +DeathBan: true +MobMergeListener: true +Looting: true +CombatTag: true +UnEnchantBook: true +EndWorld: true +FoundDiamond: true +WorldBorder: true +DeathSign: true +CraftingDisable: true +EnderchestDisable: true +DeathMessage: false \ No newline at end of file diff --git a/ViperCore/src/main/resources/names.yml b/ViperCore/src/main/resources/names.yml new file mode 100644 index 0000000..4cab01e --- /dev/null +++ b/ViperCore/src/main/resources/names.yml @@ -0,0 +1,6 @@ +name-list: + - "iRitz" + - "charlrl" + - "test" + - "aaaaa" + - "bbbbb" diff --git a/ViperCore/src/main/resources/orecave.yml b/ViperCore/src/main/resources/orecave.yml new file mode 100644 index 0000000..7e14cf4 --- /dev/null +++ b/ViperCore/src/main/resources/orecave.yml @@ -0,0 +1,4 @@ +x: 703 +y: 69 +z: 698 +regen-ticks: 100 \ No newline at end of file diff --git a/ViperCore/src/main/resources/pearl.yml b/ViperCore/src/main/resources/pearl.yml new file mode 100644 index 0000000..3b56292 --- /dev/null +++ b/ViperCore/src/main/resources/pearl.yml @@ -0,0 +1,2 @@ +PEARL_DISABLE_REGIONS: + - "citadel" \ No newline at end of file diff --git a/ViperCore/src/main/resources/plugin.yml b/ViperCore/src/main/resources/plugin.yml new file mode 100644 index 0000000..90c823f --- /dev/null +++ b/ViperCore/src/main/resources/plugin.yml @@ -0,0 +1,55 @@ +name: ViperCore +version: 1.1.2-SNAPHOST +author: libhalt/Fra1i +softdepend: [Factions,WorldGuard,KoTH,ProtocolLib , Popura , GenericUtils , WorldEdit] +main: net.libhalt.bukkit.kaede.HCFactionPlugin +commands: + td: + stone: + description: Turns off stone pickup. + usage: / + cobble: + description: Turns off cobble pickup. + usage: / + mobdrops: + description: Turns off mob drops pickup. + usage: / + gapplecooldown: + setendexit: + setendspawn: + glow: + lag: + sotw: + conquest: + aliases: [ca] + crowbar: + pvp: + ss: + logout: + subclaim: + stats: + aliases: [stat, ks] + modmode: + aliases: [staff, mod] + freeze: + aliases: [ss, screenshare] + staffchat: + aliases: [sc] + utils: + module: + description: zsrfgggfssfgfg + bottle: + +permissions: + disabled.bypass.enderchest: + default: false + command.ss.use: + default: op + command.crowbar.use: + default: op + live.admin: + default: op + live.send: + default: true + combatlogger.bypass: + default: false \ No newline at end of file diff --git a/ViperCore/src/main/resources/pom.xml b/ViperCore/src/main/resources/pom.xml new file mode 100644 index 0000000..e7fbf85 --- /dev/null +++ b/ViperCore/src/main/resources/pom.xml @@ -0,0 +1,92 @@ + + + 4.0.0 + + net.libhalt.bukkit.kaede + ViperCore + 0.0.8 + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + sk89q-repo + http://maven.sk89q.com/repo/ + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.2 + + 1.7 + 1.7 + + + + + ${project.artifactId} + + + + + + org.spigotmc + spigot-api + 1.8-R0.1-SNAPSHOT + + system + ${project.basedir}/libs/paperspigot-api-1.7.10-R0.1-SNAPSHOT.jar + + + org.spigotmc + spigot-server + 1.8-R0.1-SNAPSHOT + + system + ${project.basedir}/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar + + + io.syuu + GenericUtils + 0.0.8 + + system + ${project.basedir}/libs/GenricUtils-1.0-SNAPSHOT.jar + + + io.syuu + Popura + 0.0.8 + system + ${project.basedir}/libs/Popura-1.0-SNAPSHOT.jar + + + vault + vault + LATEST + system + ${project.basedir}/libs/Vault-1.4.1.jar + + + + subside.plugins + KoTH + LATEST + system + ${project.basedir}/libs/KoTH.jar + + + com.sk89q + worldguard + 6.1.1-SNAPSHOT + + + \ No newline at end of file diff --git a/ViperCore/src/main/resources/potion-limiter.yml b/ViperCore/src/main/resources/potion-limiter.yml new file mode 100644 index 0000000..8ee92bc --- /dev/null +++ b/ViperCore/src/main/resources/potion-limiter.yml @@ -0,0 +1,11 @@ +#See http://minecraft.gamepedia.com/Potion +#And http://minecraft.gamepedia.com/Splash_Potion +disabled-potions: + - 8195 + - 8259 + - 8201 + - 8265 + - 16393 + - 16457 + - 16387 + - 16451 \ No newline at end of file diff --git a/ViperCore/src/main/resources/potionfix.yml b/ViperCore/src/main/resources/potionfix.yml new file mode 100644 index 0000000..84fec33 --- /dev/null +++ b/ViperCore/src/main/resources/potionfix.yml @@ -0,0 +1,7 @@ +# Potion Fix Configuration + +Strength-Fix-Enabled: true +Strength-Power-Half-Hearts: 6 +Health-Fix-Enabled: true +Health-Power-Half-Hearts: 6 +Regeneration-Fix-Enabled: true diff --git a/ViperCore/src/main/resources/pvp-timer.yml b/ViperCore/src/main/resources/pvp-timer.yml new file mode 100644 index 0000000..d33bb2f --- /dev/null +++ b/ViperCore/src/main/resources/pvp-timer.yml @@ -0,0 +1,25 @@ +pvp-timer: 120 +disallow-end-teleport: true +unpickupable: + - DIAMOND + - DIAMOND_CHESTPLATE + - DIAMOND_LEGGINGS + - DIAMOND_HELMET + - DIAMOND_BOOTS + - DIAMOND_SWORD + - GOLDEN_APPLE + - POTION + - GLASS_BOTTLE + - REDSTONE_BLOCK + - DIAMOND_BLOCK + - LAPIS_BLOCK + - COAL_BLOCK + - GOLD_BLOCK + - IRON_BLOCK +disable-commands: + - "/f home" + - "/factions home" +message-pvp: + - "&c/pvp enable - Enabled your PvP Timer" + - "&c/pvp time - Displays your PvP Timer" + - "&c/pvp give " \ No newline at end of file diff --git a/ViperCore/src/main/resources/reclaim.yml b/ViperCore/src/main/resources/reclaim.yml new file mode 100644 index 0000000..a0d6487 --- /dev/null +++ b/ViperCore/src/main/resources/reclaim.yml @@ -0,0 +1,10 @@ +message: + already-reclaimed: "You have already reclaimed" + nothing-to-reclaim: "You dont hafe anything to reclaim" + reclaimed: "You have reclaiemd %rank%" +donor: + priority: 1 + permission: 'rank.donor' + commands: + - crate givekey %player% tier3 1 + - lives add %player% 3 diff --git a/ViperCore/src/main/resources/report.yml b/ViperCore/src/main/resources/report.yml new file mode 100644 index 0000000..7b699a4 --- /dev/null +++ b/ViperCore/src/main/resources/report.yml @@ -0,0 +1,26 @@ + +MAX-REPORT-PER-FACTION: 3 + +Messages: + NO-PERM: '&cYou do not have the permission to use this command' + SELF-REPORT: '&cYou can''t report yourself.' + REPORT-USAGE: '&e/report &6' + REPORT-SEND: '&aYour report has been succefully send, every online staff member has been notified.' + REPORT-SEND-STAFF: '&eThe player %PLAYER% &ehas been reported for &6%REASON% &7(Click to teleport)' + REPORT-COOLDOWN: '&cYou are still in cooldown for &c&l%TIME%s&c.' + MAX-REPORT-FACTION: '&cYour faction has already reported this player &e%REPORT_COUNT% time&c.' + STATS-CMD: + - '&7&m-----------------------------------------------------' + - '&9サ &6&l%FACTION%''s &estats&7:' + - '&bDiamond ore&7: &c%DIAMOND%' + - '&fIron ore&7: &c%IRON%' + - '&eGold ore&7: &c%GOLD%' + - '&aEmerald ore&7: &c%EMERALD%' + - '&8Coal ore&7: &c%COAL%' + - '&7&m-----------------------------------------------------' + HELP-CMD: + - '&7&m-----------------------------------------------------' + - '' + - '&9サ &eUse the command &6/report &6 &efor report another &6Player' + - '' + - '&7&m-----------------------------------------------------' diff --git a/ViperCore/src/main/resources/scoreboard.yml b/ViperCore/src/main/resources/scoreboard.yml new file mode 100644 index 0000000..7523ba9 --- /dev/null +++ b/ViperCore/src/main/resources/scoreboard.yml @@ -0,0 +1,22 @@ +#Supported Variable for context +#%enderpearl_time% +#%spawntag_time% +#%pvp_timer% +#If subside koth is installed, it will also support %kothtime% and %kothname% + +Title: "&eHCTeams" +always-display: false +drtshock-relation-colors: true +context: + - "&e&lEnderPearl: %enderpearl_time%" + - "&e&lSpawnTag: %spawntag_time%" + - "&e&lPvPTimer: %pvp_timer%" + +formatter: + ender-pearl: + use-decimals: false + spawn-tag: + use-decimals: false + pvp-timer: + use-minute-seperator: false + append-zero-for-minute: false \ No newline at end of file diff --git a/ViperCore/src/main/resources/shop.yml b/ViperCore/src/main/resources/shop.yml new file mode 100644 index 0000000..283580f --- /dev/null +++ b/ViperCore/src/main/resources/shop.yml @@ -0,0 +1,12 @@ +SHARP_ONE_SWORD: + material: "DIAMOND_SWORD" + amount: 1 + damage: 0 + enchantments: + DAMAGE_ALL: 1 +SHARP_TWO_SWORD: + material: "DIAMOND_SWORD" + amount: 1 + damage: 0 + enchantments: + DAMAGE_ALL: 2 \ No newline at end of file diff --git a/ViperCore/src/main/resources/subclaim.yml b/ViperCore/src/main/resources/subclaim.yml new file mode 100644 index 0000000..60c884a --- /dev/null +++ b/ViperCore/src/main/resources/subclaim.yml @@ -0,0 +1,26 @@ +Title: '&4&lSubclaim' +FLeader-Bypass: true +FMod-Bypass: true +Messages: + Subclaim: + INFO: + - '&eExplain me what is a Subclaim please !' + - '&eThanks' + INVALID-SUBCLAIM: + NO-TERRITORY: '&cYou can only create Subclaim on claimed territory!' + ALREADY-SUBCLAIM: '&cThis chest is already a Subclaim!' + LEADER: '&cYou are not the Leader of your faction. &eSo, you can''t create a Leader Subclaim.' + OFFICIER: '&cYou are not a Officer of your faction. &eSo, you can''t create a Officer Subclaim.' + CREATED-SUBCLAIM: + LEADER: '&aYou succefully created a &eLeader Subclaim&a. &bOnly the Leader of your faction will be allowed to use this Chest:' + OFFICIER: '&aYou succefully created a &eOfficer Subclaim&a. &bOnly the Leader and Officers of your faction will be allowed to use this Chest:' + OWN: '&aYou succefully created a Subclaim&a. &bOnly the Leader of your faction and You will be allowed to use this Chest.' + DESTROY: '&cYou can''t destroy this Subclaim!' + OPEN: '&cYou can''t open this Subclaim!' + KEY-WORDS: + - 'Subclaim' + - 'Officer' + - 'Private' + - '[Subclaim]' + - '[Officer]' + - '[Private]' diff --git a/ViperCore/src/main/resources/tile-entity-multiplier.yml b/ViperCore/src/main/resources/tile-entity-multiplier.yml new file mode 100644 index 0000000..80a3d10 --- /dev/null +++ b/ViperCore/src/main/resources/tile-entity-multiplier.yml @@ -0,0 +1,2 @@ +furnace-speed-multiplier: 3 +potionbrewer-speed-multiplier: 3 \ No newline at end of file diff --git a/ViperCore/src/main/resources/viper-misc.yml b/ViperCore/src/main/resources/viper-misc.yml new file mode 100644 index 0000000..1e51a62 --- /dev/null +++ b/ViperCore/src/main/resources/viper-misc.yml @@ -0,0 +1,11 @@ + +scoreboard: + deco-line: '&7&m-----------------' + +sotw-defaultTime: 3600 # in second, 3600 = 1h +date-format: 'MM/dd/yy HH:mm' + +Crowbar: + name: '&9Crowbar' + DISABLE-WORLD: '&cCrowbars can only be used in overworld and is disabled in %world%' + REGION: '&cYou cannont use this crowbar here.' diff --git a/ViperCore/src/main/resources/viper-utils.yml b/ViperCore/src/main/resources/viper-utils.yml new file mode 100644 index 0000000..b7cf739 --- /dev/null +++ b/ViperCore/src/main/resources/viper-utils.yml @@ -0,0 +1,6 @@ +# +Broadcast: + enabled: true + message: '&eThe faction &c%FACTION% &ehas been muted for &c%REASON% &eby &c%PLAYER% &e!' +mute-cmd: 'mute -s %PLAYER% %TIME% [FactionMute] %REASON%' +XPBonus-Multiplier: 2 diff --git a/ViperCore/src/main/resources/world-border.yml b/ViperCore/src/main/resources/world-border.yml new file mode 100644 index 0000000..44b8716 --- /dev/null +++ b/ViperCore/src/main/resources/world-border.yml @@ -0,0 +1,3 @@ +border-nether: 10000 +border-end: 10000 +border-world: 10000 \ No newline at end of file diff --git a/ViperCore/src/main/resources/world-end.yml b/ViperCore/src/main/resources/world-end.yml new file mode 100644 index 0000000..3f77396 --- /dev/null +++ b/ViperCore/src/main/resources/world-end.yml @@ -0,0 +1,2 @@ +end-exit: 100,100,0,0,0 +end-spawn: 0,100,0,0,0 \ No newline at end of file diff --git a/ViperEnderpearls/.idea/compiler.xml b/ViperEnderpearls/.idea/compiler.xml new file mode 100644 index 0000000..41a5451 --- /dev/null +++ b/ViperEnderpearls/.idea/compiler.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ViperEnderpearls/.idea/misc.xml b/ViperEnderpearls/.idea/misc.xml new file mode 100644 index 0000000..5755a99 --- /dev/null +++ b/ViperEnderpearls/.idea/misc.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/ViperEnderpearls/.idea/modules.xml b/ViperEnderpearls/.idea/modules.xml new file mode 100644 index 0000000..bc92918 --- /dev/null +++ b/ViperEnderpearls/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/ViperEnderpearls/.idea/uiDesigner.xml b/ViperEnderpearls/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/ViperEnderpearls/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ViperEnderpearls/.idea/workspace.xml b/ViperEnderpearls/.idea/workspace.xml new file mode 100644 index 0000000..d5418d1 --- /dev/null +++ b/ViperEnderpearls/.idea/workspace.xml @@ -0,0 +1,791 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1498011111120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No facets are configured + + + + + + + + + + + + + + + 1.8 + + + + + + + + ViperKits + + + + + + + + 1.8 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ViperEnderpearls/ViperEnderpearls.iml b/ViperEnderpearls/ViperEnderpearls.iml new file mode 100644 index 0000000..2970fc0 --- /dev/null +++ b/ViperEnderpearls/ViperEnderpearls.iml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ViperEnderpearls/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar b/ViperEnderpearls/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar new file mode 100644 index 0000000..794f22b Binary files /dev/null and b/ViperEnderpearls/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar differ diff --git a/ViperEnderpearls/libs/paperspigot-api-1.7.10-R0.1-SNAPSHOT.jar b/ViperEnderpearls/libs/paperspigot-api-1.7.10-R0.1-SNAPSHOT.jar new file mode 100644 index 0000000..2bddac4 Binary files /dev/null and b/ViperEnderpearls/libs/paperspigot-api-1.7.10-R0.1-SNAPSHOT.jar differ diff --git a/ViperEnderpearls/pom.xml b/ViperEnderpearls/pom.xml new file mode 100644 index 0000000..a9cd1ff --- /dev/null +++ b/ViperEnderpearls/pom.xml @@ -0,0 +1,52 @@ + + + 4.0.0 + + com.cloth.viperenderpearls + ViperEnderpearls + 1.0 + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + + + + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + sk89q-repo + http://maven.sk89q.com/repo/ + + + + + + + org.spigotmc + spigot-api + 1.8-R0.1-SNAPSHOT + system + ${project.basedir}/libs/paperspigot-api-1.7.10-R0.1-SNAPSHOT.jar + + + org.spigotmc + spigot-server + 1.8-R0.1-SNAPSHOT + system + ${project.basedir}/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar + + + \ No newline at end of file diff --git a/ViperEnderpearls/src/com/cloth/viperenderpearls/PlayerInteract.java b/ViperEnderpearls/src/com/cloth/viperenderpearls/PlayerInteract.java new file mode 100644 index 0000000..6a59bce --- /dev/null +++ b/ViperEnderpearls/src/com/cloth/viperenderpearls/PlayerInteract.java @@ -0,0 +1,26 @@ +package com.cloth.viperenderpearls; + +import com.cloth.viperenderpearls.manager.FilesCreator; +import org.bukkit.Material; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +public class PlayerInteract + implements Listener +{ + FilesCreator cInstance = FilesCreator.getInstance(); + + @EventHandler + public void blockInteractEvent(PlayerInteractEvent e) + { + if ((this.cInstance.getConfig().getBoolean("anti-glitch")) && + (e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) && + (e.getItem() != null) && (e.getItem().getType() == Material.ENDER_PEARL)) { + e.setCancelled(true); + } + } +} diff --git a/ViperEnderpearls/src/com/cloth/viperenderpearls/PlayerTeleport.java b/ViperEnderpearls/src/com/cloth/viperenderpearls/PlayerTeleport.java new file mode 100644 index 0000000..60da221 --- /dev/null +++ b/ViperEnderpearls/src/com/cloth/viperenderpearls/PlayerTeleport.java @@ -0,0 +1,44 @@ +package com.cloth.viperenderpearls; + +import com.cloth.viperenderpearls.manager.FilesCreator; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.ItemStack; + +public class PlayerTeleport + implements Listener +{ + FilesCreator cInstance = FilesCreator.getInstance(); + + @EventHandler + public void onPlayerTeleport(PlayerTeleportEvent e) + { + Player p = e.getPlayer(); + if (this.cInstance.getConfig().getBoolean("anti-glitch")) + { + if ((e.isCancelled()) || (e.getCause() != PlayerTeleportEvent.TeleportCause.ENDER_PEARL)) { + return; + } + + if (e.getTo().getBlock().getType() == Material.FENCE_GATE) + { + e.setCancelled(true); + p.sendMessage(ViperEnderpearls.toColor("&7(&aViper&7) You cannot teleport directly into a fencegate.")); + p.getInventory().addItem(new ItemStack(Material.ENDER_PEARL)); + return; + } + + Location target = e.getTo(); + target.setX(target.getBlockX() + 0.5D); + target.setZ(target.getBlockZ() + 0.5D); + e.setTo(target); + } + } +} diff --git a/ViperEnderpearls/src/com/cloth/viperenderpearls/ViperEnderpearls.java b/ViperEnderpearls/src/com/cloth/viperenderpearls/ViperEnderpearls.java new file mode 100644 index 0000000..28711aa --- /dev/null +++ b/ViperEnderpearls/src/com/cloth/viperenderpearls/ViperEnderpearls.java @@ -0,0 +1,43 @@ +package com.cloth.viperenderpearls; + +import com.cloth.viperenderpearls.manager.FilesCreator; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.plugin.PluginDescriptionFile; +import org.bukkit.plugin.java.JavaPlugin; + +import java.io.File; +import java.util.logging.Logger; + +/** + * Created by Brennan on 6/20/2017. + */ +public class ViperEnderpearls extends JavaPlugin +{ + File f; + FileConfiguration fc; + FilesCreator FilesCreatorInstance = FilesCreator.getInstance(); + + public void onEnable() + { + this.FilesCreatorInstance.setup(this); + PluginDescriptionFile pdfFile = getDescription(); + Bukkit.getServer().getPluginManager().registerEvents(new PlayerTeleport(), this); + Bukkit.getServer().getPluginManager().registerEvents(new PlayerInteract(), this); + FileConfiguration config = getConfig(); + config.addDefault("anti-glitch", Boolean.valueOf(true)); + getConfig().options().copyDefaults(true); + saveConfig(); + } + + public void onDisable() + { + reloadConfig(); + } + + public static String toColor(String text) + { + return ChatColor.translateAlternateColorCodes('&', text); + } +} diff --git a/ViperEnderpearls/src/com/cloth/viperenderpearls/manager/FilesCreator.java b/ViperEnderpearls/src/com/cloth/viperenderpearls/manager/FilesCreator.java new file mode 100644 index 0000000..e3081f3 --- /dev/null +++ b/ViperEnderpearls/src/com/cloth/viperenderpearls/manager/FilesCreator.java @@ -0,0 +1,59 @@ +package com.cloth.viperenderpearls.manager; + +import java.io.File; +import java.io.IOException; +import java.util.logging.Logger; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Server; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.plugin.Plugin; + +public class FilesCreator +{ + static FilesCreator instance = new FilesCreator(); + Plugin p; + FileConfiguration config; + File cfile; + + public static FilesCreator getInstance() + { + return instance; + } + + public void setup(Plugin p) + { + if (!p.getDataFolder().exists()) { + p.getDataFolder().mkdir(); + } + this.cfile = new File(p.getDataFolder(), "config.yml"); + if (!this.cfile.exists()) { + try + { + this.cfile.createNewFile(); + } + catch (IOException e) + { + Bukkit.getServer().getLogger().severe(ChatColor.RED + "Could not create config.yml!"); + } + } + this.config = p.getConfig(); + } + + public FileConfiguration getConfig() + { + return this.config; + } + + public void saveConfig() + { + try + { + this.config.save(this.cfile); + } + catch (IOException e) + { + Bukkit.getServer().getLogger().severe(ChatColor.RED + "Could not save config.yml!"); + } + } +} diff --git a/ViperEnderpearls/src/resources/plugin.yml b/ViperEnderpearls/src/resources/plugin.yml new file mode 100644 index 0000000..438aff1 --- /dev/null +++ b/ViperEnderpearls/src/resources/plugin.yml @@ -0,0 +1,3 @@ +name: ViperEnderpearls +version: 1.0 +main: com.cloth.viperenderpearls.ViperEnderpearls \ No newline at end of file diff --git a/ViperEnderpearls/target/ViperEnderpearls-1.0.jar b/ViperEnderpearls/target/ViperEnderpearls-1.0.jar new file mode 100644 index 0000000..64f4144 Binary files /dev/null and b/ViperEnderpearls/target/ViperEnderpearls-1.0.jar differ diff --git a/ViperEnderpearls/target/classes/com/cloth/viperenderpearls/PlayerInteract.class b/ViperEnderpearls/target/classes/com/cloth/viperenderpearls/PlayerInteract.class new file mode 100644 index 0000000..3885fe9 Binary files /dev/null and b/ViperEnderpearls/target/classes/com/cloth/viperenderpearls/PlayerInteract.class differ diff --git a/ViperEnderpearls/target/classes/com/cloth/viperenderpearls/PlayerTeleport.class b/ViperEnderpearls/target/classes/com/cloth/viperenderpearls/PlayerTeleport.class new file mode 100644 index 0000000..b9a5491 Binary files /dev/null and b/ViperEnderpearls/target/classes/com/cloth/viperenderpearls/PlayerTeleport.class differ diff --git a/ViperEnderpearls/target/classes/com/cloth/viperenderpearls/ViperEnderpearls.class b/ViperEnderpearls/target/classes/com/cloth/viperenderpearls/ViperEnderpearls.class new file mode 100644 index 0000000..cfc8ad4 Binary files /dev/null and b/ViperEnderpearls/target/classes/com/cloth/viperenderpearls/ViperEnderpearls.class differ diff --git a/ViperEnderpearls/target/classes/com/cloth/viperenderpearls/manager/FilesCreator.class b/ViperEnderpearls/target/classes/com/cloth/viperenderpearls/manager/FilesCreator.class new file mode 100644 index 0000000..f8e1773 Binary files /dev/null and b/ViperEnderpearls/target/classes/com/cloth/viperenderpearls/manager/FilesCreator.class differ diff --git a/ViperEnderpearls/target/classes/plugin.yml b/ViperEnderpearls/target/classes/plugin.yml new file mode 100644 index 0000000..438aff1 --- /dev/null +++ b/ViperEnderpearls/target/classes/plugin.yml @@ -0,0 +1,3 @@ +name: ViperEnderpearls +version: 1.0 +main: com.cloth.viperenderpearls.ViperEnderpearls \ No newline at end of file diff --git a/ViperEnderpearls/target/classes/resources/plugin.yml b/ViperEnderpearls/target/classes/resources/plugin.yml new file mode 100644 index 0000000..438aff1 --- /dev/null +++ b/ViperEnderpearls/target/classes/resources/plugin.yml @@ -0,0 +1,3 @@ +name: ViperEnderpearls +version: 1.0 +main: com.cloth.viperenderpearls.ViperEnderpearls \ No newline at end of file diff --git a/ViperEnderpearls/target/maven-archiver/pom.properties b/ViperEnderpearls/target/maven-archiver/pom.properties new file mode 100644 index 0000000..8977598 --- /dev/null +++ b/ViperEnderpearls/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Thu Jun 29 03:12:22 EDT 2017 +version=1.0 +groupId=com.cloth.viperenderpearls +artifactId=ViperEnderpearls diff --git a/ViperEssentials/.gitignore b/ViperEssentials/.gitignore new file mode 100644 index 0000000..2f10adb --- /dev/null +++ b/ViperEssentials/.gitignore @@ -0,0 +1,4 @@ +target/ +.idea/ +META-INF/ +*.iml diff --git a/ViperEssentials/libs/Popura-1.0-SNAPSHOT.jar b/ViperEssentials/libs/Popura-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..0c18a34 Binary files /dev/null and b/ViperEssentials/libs/Popura-1.0-SNAPSHOT.jar differ diff --git a/ViperEssentials/libs/Vault-1.4.1.jar b/ViperEssentials/libs/Vault-1.4.1.jar new file mode 100644 index 0000000..d4d4ecc Binary files /dev/null and b/ViperEssentials/libs/Vault-1.4.1.jar differ diff --git a/ViperEssentials/libs/lombok.jar b/ViperEssentials/libs/lombok.jar new file mode 100644 index 0000000..ffafdb4 Binary files /dev/null and b/ViperEssentials/libs/lombok.jar differ diff --git a/ViperEssentials/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar b/ViperEssentials/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar new file mode 100644 index 0000000..794f22b Binary files /dev/null and b/ViperEssentials/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar differ diff --git a/ViperEssentials/libs/zPermissions-1.2a.jar b/ViperEssentials/libs/zPermissions-1.2a.jar new file mode 100644 index 0000000..f7a85fa Binary files /dev/null and b/ViperEssentials/libs/zPermissions-1.2a.jar differ diff --git a/ViperEssentials/pom.xml b/ViperEssentials/pom.xml new file mode 100644 index 0000000..5395764 --- /dev/null +++ b/ViperEssentials/pom.xml @@ -0,0 +1,75 @@ + + + 4.0.0 + + com.viperhcf.minssentials + Minssentials + 0.0.8 + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + sk89q-repo + http://maven.sk89q.com/repo/ + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.2 + + 1.7 + 1.7 + + + + + ${project.artifactId} + + + + + + org.spigotmc + spigot-server + 1.8-R0.1-SNAPSHOT + system + ${project.basedir}/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar + + + org.tyrannyofheaven.bukkit.zPermissions + zPermissions + 0.0.8 + system + ${project.basedir}/libs/zPermissions-1.2a.jar + + + io.syuu + Popura + 0.0.8 + system + ${project.basedir}/libs/Popura-1.0-SNAPSHOT.jar + + + org.projectlombok + lombok + 1.16.16 + provided + + + vault + vault + LATEST + system + ${project.basedir}/libs/Vault-1.4.1.jar + + + \ No newline at end of file diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/Minssentials.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/Minssentials.java new file mode 100644 index 0000000..8321756 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/Minssentials.java @@ -0,0 +1,184 @@ +package com.viperhcf.minssentials; + +import com.viperhcf.minssentials.command.Command; +import com.viperhcf.minssentials.command.CommandRegistry; +import com.viperhcf.minssentials.commands.*; +import com.viperhcf.minssentials.config.MyConfig; +import com.viperhcf.minssentials.config.MyConfigManager; +import com.viperhcf.minssentials.events.CustomCommandEvent; +import com.viperhcf.minssentials.events.PlayerClickEvent; +import com.viperhcf.minssentials.events.PlayerConnectEvent; +import com.viperhcf.minssentials.utils.NicknameUtil; +import com.viperhcf.minssentials.utils.TagUtil; +import net.milkbowl.vault.chat.Chat; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.plugin.RegisteredServiceProvider; +import org.bukkit.plugin.java.JavaPlugin; +import com.viperhcf.minssentials.listener.MinssentialsListener; +import com.viperhcf.minssentials.vault.PopuraSupport; +import com.viperhcf.minssentials.vault.VaultSupport; + +import java.util.List; +import java.util.UUID; + +public class Minssentials extends JavaPlugin { + + public static Minssentials INSTANCE; + + public CommandSlowChat getCommandSlowChat() { + return commandSlowChat; + } + public CommandMuteChat getCommandMuteChat() { + return commandMuteChat; + } + + private CommandSlowChat commandSlowChat; + private CommandMuteChat commandMuteChat; + + public static Chat chat = null; + + public MyConfigManager manager = new MyConfigManager(this); + public MyConfig playerdata = manager.getNewConfig("playerdata.yml"); + public MyConfig tags = manager.getNewConfig("tags.yml"); + + public Inventory NicknameGUI; + + @Override + public void onEnable() { + INSTANCE = this; + + saveDefaultConfig(); + getServer().getPluginManager().registerEvents(new MinssentialsListener(), this); + getCommand("fly").setExecutor(new CommandFly()); + getCommand("gmc").setExecutor(new CommandGameModeCreative()); + getCommand("gms").setExecutor(new CommandGameModeSurvival()); + getCommand("spawner").setExecutor(new CommandSpawner()); + getCommand("tphere").setExecutor(new CommandTpHere()); + getCommand("tppos").setExecutor(new CommandTpPos()); + getCommand("tp").setExecutor(new CommandTp()); + getCommand("give").setExecutor(new CommandGive()); + getCommand("seen").setExecutor(new CommandSeen(this)); + getCommand("feed").setExecutor(new CommandFeed(this)); + getCommand("playtime").setExecutor(new CommandPlayTime(this)); + getCommand("nick").setExecutor(new CommandNick(this)); + getCommand("broadcast").setExecutor(new CommandBroadcast()); + getCommand("workbench").setExecutor(new CommandWorkbench()); + getCommand("near").setExecutor(new CommandNear(this)); + getCommand("spawn").setExecutor(new CommandSpawn(this)); + getCommand("setspawn").setExecutor(new CommandSetSpawn()); + getCommand("invsee").setExecutor(new CommandInvSee()); + getCommand("fix").setExecutor(new CommandFix()); + getCommand("god").setExecutor(new CommandGod(this)); + getCommand("mutechat").setExecutor((commandMuteChat = new CommandMuteChat(this))); + getCommand("slowchat").setExecutor((commandSlowChat = new CommandSlowChat(this))); + getCommand("clearentity").setExecutor(new CommandClearEntity()); + getCommand("clearchat").setExecutor(new CommandClearChat(this)); + getCommand("sudo").setExecutor(new CommandSudo()); + getCommand("rename").setExecutor(new CommandRename()); + getCommand("tgc").setExecutor(new CommandToggleChat(this)); + getCommand("createtag").setExecutor(new CommandCreateTag()); + getCommand("tags").setExecutor(new CommandTag()); + registerEvents(); + + if(getServer().getPluginManager().getPlugin("ViperCore") != null){ + new PopuraSupport().init(this); + } + new VaultSupport(this).init(this); + PlayerStorage.getInstance().prepare(this); + + setupCooldowns(); + setupChat(); + + NicknameGUI = NicknameUtil.setupGUI(); + } + + public void setupCooldowns() + { + if(playerdata.getConfigurationSection("").getKeys(false) != null){ + for(String x : playerdata.getConfigurationSection("").getKeys(false)) + { + try{ + if((long)playerdata.get(x + ".fix-hand-cooldown") > 0) + { + CommandFix.hand_cooldown.put(Bukkit.getOfflinePlayer(x).getUniqueId(), (long) playerdata.get(x + ".fix-hand-cooldown")); + } + if((long)playerdata.get(x + ".fix-all-cooldown") > 0) + { + CommandFix.all_cooldown.put(Bukkit.getOfflinePlayer(x).getUniqueId(), (long) playerdata.get(x + ".fix-all-cooldown")); + } + } catch (Exception error){} + } + } + } + + public void onDisable(){ + for(UUID uuid : CommandFix.all_cooldown.keySet()) + { + if(CommandFix.all_cooldown.get(uuid) > 0) + { + if(Bukkit.getPlayer(uuid) != null){ + playerdata.set(Bukkit.getPlayer(uuid).getName() + ".fix-all-cooldown", CommandFix.all_cooldown.get(uuid)); + playerdata.saveConfig(); + } else { + playerdata.set(Bukkit.getOfflinePlayer(uuid).getName() + ".fix-all-cooldown", CommandFix.all_cooldown.get(uuid)); + playerdata.saveConfig(); + } + } + } + + + for(UUID uuid : CommandFix.hand_cooldown.keySet()) + { + if(CommandFix.hand_cooldown.get(uuid) > 0) + { + if(Bukkit.getPlayer(uuid) != null){ + playerdata.set(Bukkit.getPlayer(uuid).getName() + ".fix-hand-cooldown", CommandFix.hand_cooldown.get(uuid)); + playerdata.saveConfig(); + } else { + playerdata.set(Bukkit.getOfflinePlayer(uuid).getName() + ".fix-hand-cooldown", CommandFix.hand_cooldown.get(uuid)); + playerdata.saveConfig(); + } + } + } + } + + public void registerEvents() + { + getServer().getPluginManager().registerEvents(new PlayerClickEvent(this), this); + getServer().getPluginManager().registerEvents(new PlayerConnectEvent(this), this); + getServer().getPluginManager().registerEvents(new CustomCommandEvent(this), this); + } + + public static Minssentials getInstance() + { + return INSTANCE; + } + + @Deprecated + public static Player getPlayer(String input){ + Player target = Bukkit.getPlayer(input); + if(target != null){ + return target; + } + for(Player player : Bukkit.getOnlinePlayers()){ + if(player.getName().toLowerCase().startsWith(input.toLowerCase())){ + return player; + } + } + for(Player player : Bukkit.getOnlinePlayers()){ + if(player.getName().toLowerCase().contains(input.toLowerCase())){ + return player; + } + } + return null; + } + + private boolean setupChat() { + RegisteredServiceProvider rsp = getServer().getServicesManager().getRegistration(Chat.class); + chat = rsp.getProvider(); + return chat != null; + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/PlayerStorage.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/PlayerStorage.java new file mode 100644 index 0000000..99e1580 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/PlayerStorage.java @@ -0,0 +1,86 @@ +package com.viperhcf.minssentials; + +import java.io.File; +import java.util.Map; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.YamlConfiguration; +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.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitRunnable; + +import com.google.common.collect.Maps; + +public class PlayerStorage implements Listener{ + + public static PlayerStorage getInstance(){ + + return INSTANCE; + } + + private static PlayerStorage INSTANCE = new PlayerStorage(); + + private Map storedData = Maps.newHashMap(); + + private JavaPlugin plugin; + private File workingDir; + private String message; + public void prepare(JavaPlugin plugin){ + message = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("first-join-message")); + + this.plugin = plugin; + workingDir = new File(plugin.getDataFolder() , "player"); + workingDir.mkdirs(); + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + public StoredData getData(Player player){ + return storedData.get(player.getUniqueId()); + } + @EventHandler + public void onPlayerJoin(PlayerQuitEvent event){ + final Player player = event.getPlayer(); + final StoredData data = storedData.remove(player.getUniqueId()); + if(data != null){ + new BukkitRunnable() { + @Override + public void run() { + data.save(new File(workingDir , player.getUniqueId().toString() + ".yml")); + } + }.runTaskAsynchronously(plugin); + } + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event){ + final Player player = event.getPlayer(); + new BukkitRunnable() { + + @Override + public void run() { + File file = new File(workingDir , player.getUniqueId().toString() + ".yml"); + boolean broadcast = !file.exists(); + + final StoredData data = file.exists() ? new StoredData(YamlConfiguration.loadConfiguration(file)) : new StoredData(null); + data.save(new File(workingDir , player.getUniqueId().toString() + ".yml")); + if(broadcast){ + //Bukkit.broadcastMessage(message.replace("%who%", player.getName()).replace("%count%", String.valueOf(workingDir.listFiles().length))); + } + new BukkitRunnable() { + @Override + public void run() { + if(player.isOnline()){ + storedData.put(player.getUniqueId(),data ); + } + } + }.runTask(plugin); + } + }.runTaskAsynchronously(plugin); + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/StoredData.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/StoredData.java new file mode 100644 index 0000000..f3f2c46 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/StoredData.java @@ -0,0 +1,45 @@ +package com.viperhcf.minssentials; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +import org.bukkit.configuration.Configuration; +import org.bukkit.configuration.file.YamlConfiguration; + +import com.google.common.collect.Lists; + +public class StoredData { + + private List ignoredName = Lists.newArrayList(); + private boolean messageDisabled; + public StoredData(Configuration configuration){ + if(configuration == null){ + return; + } + ignoredName = configuration.getStringList("ignored-name"); + messageDisabled = configuration.getBoolean("message-disabled"); + } + public void setMessageDisabled(boolean value){ + this.messageDisabled = value; + } + + public void save(File file){ + YamlConfiguration configuration = new YamlConfiguration(); + configuration.set("ignored-name", ignoredName); + configuration.set("message-disabled", messageDisabled); + + try { + configuration.save(file); + } catch (IOException e) { + e.printStackTrace(); + } + } + public List getIgnoredName(){ + return ignoredName; + } + public boolean isMessageDisabled(){ + return messageDisabled; + } +} + \ No newline at end of file diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/Command.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/Command.java new file mode 100644 index 0000000..15c34bd --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/Command.java @@ -0,0 +1,165 @@ +package com.viperhcf.minssentials.command; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.viperhcf.minssentials.command.condition.Condition; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public abstract class Command implements CommandExecutable { + + private List knownNames = new ArrayList(); + private List conditions = new ArrayList(); + private List subCommands = new ArrayList(); + + public Command(String name) { + addAllias(name); + } + + public void addAllias(String command) { + String lowercase = command.toLowerCase(); + if (knownNames.contains(lowercase)) { + throw new IllegalArgumentException("Allias can not duplicate"); + } + knownNames.add(lowercase); + } + + public List getAllias() { + return knownNames; + } + + public String getName() { + return knownNames.get(0); + } + + + public void addCondition(Condition condition, String... args) { + if (args.length == 0) { + conditions.add(condition); + return; + } + String lowercase = args[0].toLowerCase(); + + Command sub = null; + for (Command commands : subCommands) { + if (commands.knownNames.contains(lowercase)) { + sub = commands; + } + } + if (sub != null) { + String[] newArgs = Arrays.copyOfRange(args, 1, args.length); + sub.addCondition(condition, newArgs); + return; + } + conditions.add(condition); + } + + public void addSubCommand(Command command) { + subCommands.add(command); + } + + @Override + public final void execute(CommandSender sender, String[] args) { + if (!(sender instanceof Player)) { + return; + } + Player player = (Player) sender; + + for (Condition condition : conditions) { + if (!condition.canProcess(player, args)) { + return; + } + } + if (args.length == 0) { + if (args.length >= minargs()) { + proccess(player, args); + } else { + player.sendMessage(describeUsage(player)); + } + return; + } + String lowercase = args[0].toLowerCase(); + + Command sub = null; + for (Command commands : subCommands) { + if (commands.knownNames.contains(lowercase)) { + sub = commands; + } + } + if (sub != null) { + String[] newArgs = Arrays.copyOfRange(args, 1, args.length); + sub.execute(player, newArgs); + return; + } + if (args.length >= minargs()) { + proccess(player, args); + } else { + player.sendMessage(describeUsage(player)); + } + } + + + public void proccess(Player player, String[] args) { + if (args.length == 0) { + player.sendMessage(describeUsage(player)); + player.sendMessage(ChatColor.RED + describeSubCommands()); + } else { + player.sendMessage(ChatColor.RED + "No Such Command"); + player.sendMessage(ChatColor.RED + describeSubCommands()); + + } + + } + + private String describeSubCommands() { + if (subCommands.isEmpty()) { + return null; + } + StringBuilder builder = new StringBuilder(); + builder.append("/"); + builder.append(knownNames.get(0)); + builder.append(" <"); + for (Command commands : subCommands) { + builder.append(commands.knownNames.get(0)); + builder.append(", "); + } + builder.delete(builder.length() - 2, builder.length()); + builder.append(">"); + return builder.toString(); + } + + public int minargs() { + return 0; + } + + public List suggest(Player player, String[] args) { + if (subCommands.isEmpty()) { + return null; + } + String lowercase = args[0].toLowerCase(); + + Command sub = null; + for (Command commands : subCommands) { + if (commands.knownNames.contains(lowercase)) { + sub = commands; + } + } + if (sub != null) { + String[] newArgs = Arrays.copyOfRange(args, 1, args.length); + return sub.suggest(player, newArgs); + } + List list = new ArrayList(); + for (Command commands : subCommands) { + list.add(commands.knownNames.get(0)); + } + return list; + } + + public String describeUsage(Player player) { + return ChatColor.RED + "Command Argument Too Short!"; + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/CommandExecutable.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/CommandExecutable.java new file mode 100644 index 0000000..7eaffbc --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/CommandExecutable.java @@ -0,0 +1,10 @@ +package com.viperhcf.minssentials.command; + + +import org.bukkit.command.CommandSender; + +public interface CommandExecutable { + + void execute(CommandSender sender, String[] args); + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/CommandRegistry.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/CommandRegistry.java new file mode 100644 index 0000000..c2c843f --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/CommandRegistry.java @@ -0,0 +1,131 @@ +package com.viperhcf.minssentials.command; + +import com.google.common.base.Preconditions; +import com.viperhcf.minssentials.command.annotation.SimpleCommand; +import com.viperhcf.minssentials.command.annotation.SimpleCommandWraper; +import com.viperhcf.minssentials.command.condition.Condition; + +import lombok.SneakyThrows; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandMap; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.java.JavaPlugin; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class CommandRegistry { + + private static CommandRegistry INSTANCE = new CommandRegistry(); + private CommandMap commandMap = getCommandMap(); + private Map commands = new HashMap(); + private CommandWraper commandWrapper = new CommandWraper(); + + public static CommandRegistry getInstance() { + return INSTANCE; + } + + public void provideCondition(String command, Condition condition) { + if (command.contains(" ")) { + String[] split = command.split(" "); + Preconditions.checkArgument(commands.containsKey(split[0]), "Could not find command " + split[0] + "whilist provideing condition " + condition.getClass().getName() + "available commands: " + commands.keySet()); + CommandExecutable commandObj = commands.get(split[0]); + Preconditions.checkState(commandObj instanceof Command, "The registered command type could not provide condition"); + ((Command) commandObj).addCondition(condition, Arrays.copyOfRange(split, 1, split.length)); + } else { + Preconditions.checkArgument(commands.containsKey(command), "Could not find command " + command + " whilst providing condition for it"); + CommandExecutable commandObj = commands.get(command); + if (commandObj instanceof Command) { + ((Command) commandObj).addCondition(condition); + } else if (commandObj instanceof SimpleCommandWraper) { + ((SimpleCommandWraper) commandObj).addCondition(condition); + } else { + Preconditions.checkState(false, "The registered command type could not provide condition"); + } + } + } + + @SneakyThrows + private CommandMap getCommandMap() { + Field commandmap = Bukkit.getServer().getClass().getDeclaredField("commandMap"); + commandmap.setAccessible(true); + return (CommandMap) commandmap.get(Bukkit.getServer()); + } + + public void registerCommand(Command object) { + this.registerCommand(object, null); + } + + public void registerCommand(Command object, String provider) { + Plugin plugin = JavaPlugin.getProvidingPlugin(object.getClass()); + Preconditions.checkNotNull(plugin, "Class must be loaded from JavaPlugin"); + if (provider == null || provider.isEmpty()) { + provider = plugin.getName(); + } + commands.put(object.getName(), object); + CustomCommand pluginCommand = newCustomCommand(object.getName(), plugin, object.getAllias().toArray(new String[object.getAllias().size()])); + commandMap.register(provider, pluginCommand); + } + + public void registerSimpleCommand(Object object) { + this.registerSimpleCommand(object, null); + } + + public void registerSimpleCommand(Object object, String provider) { + Plugin plugin = JavaPlugin.getProvidingPlugin(object.getClass()); + Preconditions.checkNotNull(plugin, "Class must be loaded from JavaPlugin"); + if (provider == null || provider.isEmpty()) { + provider = plugin.getName(); + } + for (Method method : object.getClass().getDeclaredMethods()) { + if (method.isAnnotationPresent(SimpleCommand.class)) { + SimpleCommand simple = method.getAnnotation(SimpleCommand.class); + SimpleCommandWraper wrap = new SimpleCommandWraper(object, method, simple.requireop()); + commands.put(simple.name(), wrap); + CustomCommand pluginCommand = newCustomCommand(simple.name(), plugin, simple.allias()); + commandMap.register(provider, pluginCommand); + } + } + } + + private CustomCommand newCustomCommand(String name, Plugin plugin, String[] allias) { + CustomCommand pluginCommand = new CustomCommand(name, plugin); + if (allias.length != 0) { + pluginCommand.setAliases(Arrays.asList(allias)); + } + pluginCommand.setExecutor(commandWrapper); + return pluginCommand; + + } + + public class CommandWraper implements org.bukkit.command.TabCompleter, CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, org.bukkit.command.Command command, String label, String[] args) { + /*if(!(sender instanceof Player)){ + return true; + }*/ + commands.get(command.getName()).execute(sender, args); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, org.bukkit.command.Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + return null; + } + CommandExecutable executable = commands.get(command.getName()); + if (executable instanceof Command) { + return ((Command) executable).suggest(((Player) sender), args); + } + return null; + } + } + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/CustomCommand.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/CustomCommand.java new file mode 100644 index 0000000..7fce246 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/CustomCommand.java @@ -0,0 +1,162 @@ +package com.viperhcf.minssentials.command; + +import org.apache.commons.lang.Validate; +import org.bukkit.command.Command; +import org.bukkit.command.*; +import org.bukkit.plugin.Plugin; + +import java.util.List; + +/** + * Represents a {@link Command} belonging to a plugin + */ +final class CustomCommand extends Command implements PluginIdentifiableCommand { + private final Plugin owningPlugin; + private TabCompleter completer; + private CommandExecutor executor; + + protected CustomCommand(String name, Plugin owner) { + super(name); + executor = owner; + owningPlugin = owner; + usageMessage = ""; + } + + /** + * Executes the command, returning its success + * + * @param sender Source object which is executing this command + * @param commandLabel The alias of the command used + * @param args All arguments passed to the command, split via ' ' + * @return true if the command was successful, otherwise false + */ + @Override + public boolean execute(CommandSender sender, String commandLabel, String[] args) { + boolean success = false; + + if (!owningPlugin.isEnabled()) { + return false; + } + + if (!testPermission(sender)) { + return true; + } + + try { + success = executor.onCommand(sender, this, commandLabel, args); + } catch (Throwable ex) { + throw new CommandException("Unhandled exception executing command '" + commandLabel + "' in plugin " + owningPlugin.getDescription().getFullName(), ex); + } + + if (!success && usageMessage.length() > 0) { + for (String line : usageMessage.replace("", commandLabel).split("\n")) { + sender.sendMessage(line); + } + } + + return success; + } + + /** + * Gets the {@link CommandExecutor} associated with this command + * + * @return CommandExecutor object linked to this command + */ + public CommandExecutor getExecutor() { + return executor; + } + + /** + * Sets the {@link CommandExecutor} to run when parsing this command + * + * @param executor New executor to run + */ + public void setExecutor(CommandExecutor executor) { + this.executor = executor == null ? owningPlugin : executor; + } + + /** + * Gets the owner of this PluginCommand + * + * @return Plugin that owns this command + */ + @Override + public Plugin getPlugin() { + return owningPlugin; + } + + /** + * Gets the {@link TabCompleter} associated with this command. + * + * @return TabCompleter object linked to this command + */ + public TabCompleter getTabCompleter() { + return completer; + } + + /** + * Sets the {@link TabCompleter} to run when tab-completing this command. + *

+ * If no TabCompleter is specified, and the command's executor implements + * TabCompleter, then the executor will be used for tab completion. + * + * @param completer New tab completer + */ + public void setTabCompleter(TabCompleter completer) { + this.completer = completer; + } + + /** + * {@inheritDoc} + *

+ * Delegates to the tab completer if present. + *

+ * If it is not present or returns null, will delegate to the current + * command executor if it implements {@link TabCompleter}. If a non-null + * list has not been found, will default to standard player name completion + * in {@link Command#tabComplete(CommandSender, String, String[])}. + *

+ * This method does not consider permissions. + * + * @throws CommandException if the completer or executor throw an exception + * during the process of tab-completing. + * @throws IllegalArgumentException if sender, alias, or args is null + */ + @Override + public List tabComplete(CommandSender sender, String alias, String[] args) throws CommandException, IllegalArgumentException { + Validate.notNull(sender, "Sender cannot be null"); + Validate.notNull(args, "Arguments cannot be null"); + Validate.notNull(alias, "Alias cannot be null"); + + List completions = null; + try { + if (completer != null) { + completions = completer.onTabComplete(sender, this, alias, args); + } + if (completions == null && executor instanceof TabCompleter) { + completions = ((TabCompleter) executor).onTabComplete(sender, this, alias, args); + } + } catch (Throwable ex) { + StringBuilder message = new StringBuilder(); + message.append("Unhandled exception during tab completion for command '/").append(alias).append(' '); + for (String arg : args) { + message.append(arg).append(' '); + } + message.deleteCharAt(message.length() - 1).append("' in plugin ").append(owningPlugin.getDescription().getFullName()); + throw new CommandException(message.toString(), ex); + } + + if (completions == null) { + return super.tabComplete(sender, alias, args); + } + return completions; + } + + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder(super.toString()); + stringBuilder.deleteCharAt(stringBuilder.length() - 1); + stringBuilder.append(", ").append(owningPlugin.getDescription().getFullName()).append(')'); + return stringBuilder.toString(); + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/annotation/SimpleCommand.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/annotation/SimpleCommand.java new file mode 100644 index 0000000..af82133 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/annotation/SimpleCommand.java @@ -0,0 +1,14 @@ +package com.viperhcf.minssentials.command.annotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + + +@Retention(RetentionPolicy.RUNTIME) +public @interface SimpleCommand { + boolean requireop(); + + String name(); + + String[] allias() default {}; +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/annotation/SimpleCommandWraper.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/annotation/SimpleCommandWraper.java new file mode 100644 index 0000000..f831c87 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/annotation/SimpleCommandWraper.java @@ -0,0 +1 @@ +package com.viperhcf.minssentials.command.annotation; import lombok.SneakyThrows; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.viperhcf.minssentials.command.CommandExecutable; import com.viperhcf.minssentials.command.condition.Condition; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; public class SimpleCommandWraper implements CommandExecutable { private Object object; private Method method; private boolean op; private List conditions; public SimpleCommandWraper(final Object object, final Method method, final boolean op) { this.conditions = new ArrayList<>(); this.object = object; (this.method = method).setAccessible(true); this.op = op; } public void addCondition(final Condition condition) { this.conditions.add(condition); } @Override @SneakyThrows public void execute(final CommandSender player, final String[] args) { if (this.op && !player.isOp()) { player.sendMessage(ChatColor.RED + "nope!"); return; } if (player instanceof Player) { for (final Condition condition : this.conditions) { if (!condition.canProcess((Player) player, args)) { return; } } } try{ this.method.invoke(this.object, player, args); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } \ No newline at end of file diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/condition/Condition.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/condition/Condition.java new file mode 100644 index 0000000..773e0a5 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/condition/Condition.java @@ -0,0 +1,8 @@ +package com.viperhcf.minssentials.command.condition; + +import org.bukkit.entity.Player; + +public interface Condition { + + boolean canProcess(Player player, String[] args); +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/condition/PermissionCondition.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/condition/PermissionCondition.java new file mode 100644 index 0000000..fb51a8a --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/command/condition/PermissionCondition.java @@ -0,0 +1,20 @@ +package com.viperhcf.minssentials.command.condition; + +import lombok.RequiredArgsConstructor; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + +@RequiredArgsConstructor +public class PermissionCondition implements Condition { + + private final String permission; + + @Override + public boolean canProcess(Player player, String[] args) { + if (!player.hasPermission(permission)) { + player.sendMessage(ChatColor.RED + "NoPermission"); + return false; + } + return true; + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandBroadcast.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandBroadcast.java new file mode 100644 index 0000000..062e754 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandBroadcast.java @@ -0,0 +1,20 @@ +package com.viperhcf.minssentials.commands; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.google.common.base.Joiner; + + +public class CommandBroadcast implements CommandExecutor{ + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&' , "&d[SERVER] " + Joiner.on(" ").join(args))); + return true; + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandClearChat.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandClearChat.java new file mode 100644 index 0000000..62e982f --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandClearChat.java @@ -0,0 +1,41 @@ +package com.viperhcf.minssentials.commands; + +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Item; +import org.bukkit.entity.Monster; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; + +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import com.viperhcf.minssentials.Minssentials; + + +public class CommandClearChat implements CommandExecutor{ + + private String message; + public CommandClearChat(Minssentials plugin){ + message = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("chat-cleared")); + } + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + for(Player player : Bukkit.getOnlinePlayers()){ + for(int i = 0 ; i < 125 ; i++){ + player.sendMessage(""); + } + } + Bukkit.broadcastMessage(""); + Bukkit.broadcastMessage(message.replace("%who%", sender.getName())); + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandClearEntity.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandClearEntity.java new file mode 100644 index 0000000..f8ead1b --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandClearEntity.java @@ -0,0 +1,36 @@ +package com.viperhcf.minssentials.commands; + +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.*; + +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; + + +public class CommandClearEntity implements CommandExecutor{ + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + int count = 0; + for(World world : Bukkit.getWorlds()){ + for(Entity entity : world.getEntities()){ + if(entity instanceof Item || entity instanceof Monster || entity instanceof Projectile ){ + if(entity.getType() != EntityType.ENDER_PEARL){ + entity.remove(); + count++; + } + } + } + } + sender.sendMessage("Cleared " + count + " entities"); + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandCreateTag.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandCreateTag.java new file mode 100644 index 0000000..9a04e3e --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandCreateTag.java @@ -0,0 +1,37 @@ +package com.viperhcf.minssentials.commands; + +import com.viperhcf.minssentials.Minssentials; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +/** + * Created by Brennan on 6/29/2017. + */ +public class CommandCreateTag implements CommandExecutor +{ + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) + { + if(!sender.isOp()){ + sender.sendMessage("§7(§aViper§7)§f You don't have permission."); + return true; + } + + if(args.length != 3){ + sender.sendMessage("§7(§aViper§7)§f Correct usage: §a/createtag "); + return true; + } + + String name = args[0]; + String tag = args[1]; + String permission = args[2]; + + Minssentials.getInstance().tags.set(name + ".name", tag); + Minssentials.getInstance().tags.set(name + ".permission", permission); + Minssentials.getInstance().tags.saveConfig(); + sender.sendMessage("§7(§aViper§7)§f Successfully created the tag: " + tag.replaceAll("&", "§")); + return true; + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandFeed.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandFeed.java new file mode 100644 index 0000000..4a86a54 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandFeed.java @@ -0,0 +1,49 @@ +package com.viperhcf.minssentials.commands; + +import java.util.Set; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.google.common.base.Joiner; +import com.google.common.collect.Sets; +import com.viperhcf.minssentials.Minssentials; + + +public class CommandFeed implements CommandExecutor{ + + private String feeded; + public CommandFeed(Minssentials plugin) { + feeded = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("feeded")); + } + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(args.length <= 0){ + sender.sendMessage("/feed "); + return true; + } + if(args[0].equalsIgnoreCase("*")){ + for(Player player : Bukkit.getOnlinePlayers()){ + player.setFoodLevel(20); + player.sendMessage(feeded); + } + }else{ + Player target = Bukkit.getPlayer(args[0]); + if(target == null){ + sender.sendMessage(args[0] + " is offline"); + return true; + } + target.setFoodLevel(20); + target.sendMessage(feeded); + sender.sendMessage("§7(§aViper§7) You have fed §f" + target.getName() + "§7."); + } + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandFix.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandFix.java new file mode 100644 index 0000000..19a8953 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandFix.java @@ -0,0 +1,284 @@ +package com.viperhcf.minssentials.commands; + +import com.viperhcf.minssentials.Minssentials; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.text.DecimalFormat; +import java.util.HashMap; +import java.util.UUID; + +/** + * Created by Brennan on 6/29/2017. + */ +public class CommandFix implements CommandExecutor +{ + + public static HashMap hand_cooldown = new HashMap<>(); + public static HashMap all_cooldown = new HashMap<>(); + + + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) + { + + if(!(sender instanceof Player)) + { + sender.sendMessage("§7(§aViper§7) Only players can use that command."); + return true; + } + + Player p = (Player) sender; + if(!p.hasPermission("fix.hand") && !p.hasPermission("fix.all")) + { + p.sendMessage("§7(§aViper§7)§f You don't have permission."); + return true; + } + + if(args.length != 1) + { + p.sendMessage("§7(§aViper§7)§f Correct usage: §a/fix "); + return true; + } + + String choice = args[0]; + + if(!choice.equalsIgnoreCase("hand") && !choice.equalsIgnoreCase("all")) + { + p.sendMessage("§7(§aViper§7)§f Correct usage: §a/fix "); + return true; + } + + if(choice.equalsIgnoreCase("hand")) + { + if(!p.hasPermission("fix.hand")) + { + p.sendMessage("§7(§aViper§7)§f You don't have permission."); + return true; + } + + if(p.getItemInHand() == null) + { + p.sendMessage("§7(§aViper§7)§f You don't have an item in your hand."); + return true; + } + + if(!canBeRepaired(p.getItemInHand())) + { + p.sendMessage("§7(§aViper§7)§f This item cannot be repaired."); + return true; + } + + + if(hand_cooldown.containsKey(p.getUniqueId())) + { + if ((hand_cooldown.get(p.getUniqueId()) - System.currentTimeMillis()) / 1000 <= 0) + { + hand_cooldown.remove(p.getUniqueId()); + } else { + long remaining = (hand_cooldown.get(p.getUniqueId()) - System.currentTimeMillis()) / 1000; + long toMinutes = remaining/60; + + if(toMinutes < 0) + { + toMinutes = 1; + } + + if(toMinutes == 1) + { + p.sendMessage("§7(§aViper§7)§f You are still on cooldown for §a" + toMinutes + "§f minute."); + return true; + } + + if(toMinutes >= 60) + { + long toHours = toMinutes / 60; + + if(toMinutes == 60){ + p.sendMessage("§7(§aViper§7)§f You are still on cooldown for §a" + toHours + "§f hour."); + return true; + } else { + p.sendMessage("§7(§aViper§7)§f You are still on cooldown for §a" + toHours + "§f hours."); + return true; + } + } + + p.sendMessage("§7(§aViper§7)§f You are still on cooldown for §a" + toMinutes + "§f minutes."); + return true; + } + } + + if(!hand_cooldown.containsKey(p.getUniqueId())) + { + int cooldown = Minssentials.getInstance().getConfig().getInt("fix-hand-cooldown"); + hand_cooldown.put(p.getUniqueId(), System.currentTimeMillis() + (1000 * (60*cooldown))); + } + + p.getItemInHand().setDurability((short)0); + p.sendMessage("§7(§aViper§7)§f Successfully repaired the item in your hand."); + return true; + } + + if(choice.equalsIgnoreCase("all")) + { + if(!p.hasPermission("fix.all")) + { + p.sendMessage("§7(§aViper§7)§f You don't have permission."); + return true; + } + + if(all_cooldown.containsKey(p.getUniqueId())) + { + if ((all_cooldown.get(p.getUniqueId()) - System.currentTimeMillis()) / 1000 <= 0) + { + all_cooldown.remove(p.getUniqueId()); + } else { + long remaining = (all_cooldown.get(p.getUniqueId()) - System.currentTimeMillis()) / 1000; + long toMinutes = remaining/60; + + if(toMinutes < 0) + { + toMinutes = 1; + } + + if(toMinutes == 1) + { + p.sendMessage("§7(§aViper§7)§f You are still on cooldown for §a" + toMinutes + "§f minute."); + return true; + } + + if(toMinutes >= 60) + { + long toHours = toMinutes / 60; + + if(toMinutes == 60){ + p.sendMessage("§7(§aViper§7)§f You are still on cooldown for §a" + toHours + "§f hour."); + return true; + } else { + p.sendMessage("§7(§aViper§7)§f You are still on cooldown for §a" + toHours + "§f hours."); + return true; + } + } + + p.sendMessage("§7(§aViper§7)§f You are still on cooldown for §a" + toMinutes + "§f minutes."); + return true; + } + } + + if(!all_cooldown.containsKey(p.getUniqueId())) + { + int cooldown = Minssentials.getInstance().getConfig().getInt("fix-all-cooldown"); + all_cooldown.put(p.getUniqueId(), System.currentTimeMillis() + (1000 * (60*cooldown))); + } + + for(ItemStack items : p.getInventory().getContents()) + { + if(items != null){ + if(canBeRepaired(items)) + { + items.setDurability((short)0); + } + } + } + + for(ItemStack armor : p.getInventory().getArmorContents()) + { + if(armor != null) + { + if(canBeRepaired(armor)) + { + armor.setDurability((short)0); + } + } + } + + p.sendMessage("§7(§aViper§7)§f Successfully repaired all items."); + return true; + } + + return true; + } + + public boolean canBeRepaired(ItemStack item) + { + if(isArmor(item) || isTool(item) || isWeapon(item)) + { + return true; + } + return false; + } + + public boolean isArmor(ItemStack item) + { + if(item.getType() == Material.LEATHER_BOOTS + || item.getType() == Material.LEATHER_LEGGINGS + || item.getType() == Material.LEATHER_CHESTPLATE + || item.getType() == Material.LEATHER_HELMET + || item.getType() == Material.GOLD_BOOTS + || item.getType() == Material.GOLD_LEGGINGS + || item.getType() == Material.GOLD_CHESTPLATE + || item.getType() == Material.GOLD_HELMET + || item.getType() == Material.CHAINMAIL_BOOTS + || item.getType() == Material.CHAINMAIL_LEGGINGS + || item.getType() == Material.CHAINMAIL_CHESTPLATE + || item.getType() == Material.CHAINMAIL_HELMET + || item.getType() == Material.IRON_BOOTS + || item.getType() == Material.IRON_LEGGINGS + || item.getType() == Material.IRON_CHESTPLATE + || item.getType() == Material.IRON_HELMET + || item.getType() == Material.DIAMOND_BOOTS + || item.getType() == Material.DIAMOND_LEGGINGS + || item.getType() == Material.DIAMOND_CHESTPLATE + || item.getType() == Material.DIAMOND_HELMET) + { + return true; + } + return false; + } + + public boolean isTool(ItemStack item) + { + if(item.getType() == Material.FISHING_ROD + || item.getType() == Material.WOOD_PICKAXE + || item.getType() == Material.WOOD_SPADE + || item.getType() == Material.WOOD_AXE + || item.getType() == Material.WOOD_HOE + || item.getType() == Material.IRON_PICKAXE + || item.getType() == Material.IRON_SPADE + || item.getType() == Material.IRON_AXE + || item.getType() == Material.IRON_HOE + || item.getType() == Material.GOLD_PICKAXE + || item.getType() == Material.GOLD_SPADE + || item.getType() == Material.GOLD_AXE + || item.getType() == Material.GOLD_HOE + || item.getType() == Material.STONE_PICKAXE + || item.getType() == Material.STONE_SPADE + || item.getType() == Material.STONE_AXE + || item.getType() == Material.STONE_HOE + || item.getType() == Material.DIAMOND_PICKAXE + || item.getType() == Material.DIAMOND_SPADE + || item.getType() == Material.DIAMOND_AXE + || item.getType() == Material.DIAMOND_HOE) + { + return true; + } + return false; + } + + public boolean isWeapon(ItemStack item) + { + if(item.getType() == Material.BOW + || item.getType() == Material.WOOD_SWORD + || item.getType() == Material.STONE_SWORD + || item.getType() == Material.GOLD_SWORD + || item.getType() == Material.IRON_SWORD + || item.getType() == Material.DIAMOND_SWORD) + { + return true; + } + return false; + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandFly.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandFly.java new file mode 100644 index 0000000..2ca224f --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandFly.java @@ -0,0 +1,37 @@ +package com.viperhcf.minssentials.commands; + +import org.apache.commons.lang.math.NumberUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + + +public class CommandFly implements CommandExecutor{ + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + Player player = (Player) sender; + if(args.length <= 0){ + player.setAllowFlight(!player.getAllowFlight()); + Command.broadcastCommandMessage(sender, "Toggled Flight " + (player.getAllowFlight() ? "on" : "off")); + }else{ + float speed = 0.0F; + if(NumberUtils.isDigits(args[0])){ + speed = Integer.valueOf(args[0]) / 10.0F; + } + speed = Math.max(-1, Math.min(1, speed)); + Command.broadcastCommandMessage(sender, "Toggled Flight Speed To " + ((int)(speed * 10))); + player.setFlySpeed(speed); + } + + + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandGameModeCreative.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandGameModeCreative.java new file mode 100644 index 0000000..e64a95e --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandGameModeCreative.java @@ -0,0 +1,23 @@ +package com.viperhcf.minssentials.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + + +public class CommandGameModeCreative implements CommandExecutor{ + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + Player player = (Player) sender; + player.chat("/gamemode 1"); + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandGameModeSurvival.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandGameModeSurvival.java new file mode 100644 index 0000000..f86eaf3 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandGameModeSurvival.java @@ -0,0 +1,23 @@ +package com.viperhcf.minssentials.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + + +public class CommandGameModeSurvival implements CommandExecutor{ + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + Player player = (Player) sender; + player.chat("/gamemode 0"); + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandGive.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandGive.java new file mode 100644 index 0000000..4371b8f --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandGive.java @@ -0,0 +1,113 @@ +package com.viperhcf.minssentials.commands; + +import org.apache.commons.lang.math.NumberUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.EnchantmentStorageMeta; +import org.bukkit.inventory.meta.ItemMeta; + +import com.viperhcf.minssentials.utils.Enchantments; + + +public class CommandGive implements CommandExecutor{ + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(args.length < 0){ + sender.sendMessage(ChatColor.RED + "/give "); + return true; + } + Player target = Bukkit.getPlayerExact(args[0]); + if (target == null) { + sender.sendMessage("Can't find player " + args[0] + ". No give."); + return true; + } + String type = args[1]; + short damage = 0; + if(type.contains(":")){ + String[] split = type.split(":"); + type = split[0]; + damage = Short.valueOf(split[1]); + if(!NumberUtils.isDigits(split[1])){ + sender.sendMessage("Invalid Damage: " + split[1]); + } + } + ItemStack itemstack; + if(NumberUtils.isDigits(type)){ + itemstack = new ItemStack(Material.getMaterial(Integer.valueOf(type)) , 1 , damage); + }else{ + itemstack = approximateMatch(type , damage); + } + if(itemstack == null){ + sender.sendMessage("No Such Material. " + type); + return true; + } + ItemMeta meta = itemstack.getItemMeta(); + if(args.length > 2){ + if(!NumberUtils.isDigits(args[2])){ + sender.sendMessage("Please specify amount"); + return true; + } + itemstack.setAmount(Integer.valueOf(args[2])); + if(args.length > 2){ + for(int i = 3 ; i < args.length ; i ++){ + if(!args[i].contains(":")){ + sender.sendMessage("Unknown Data " + args[i]); + return true; + } + String leader = args[i].split(":")[0]; + String data = args[i].split(":")[1]; + if(leader.equalsIgnoreCase("name")){ + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', data).replace("_", " ")); + }else if (Enchantments.getByName(leader) != null && NumberUtils.isDigits(data)){ + if(meta instanceof EnchantmentStorageMeta){ + EnchantmentStorageMeta enchantmentStorage = (EnchantmentStorageMeta) meta; + enchantmentStorage.addStoredEnchant(Enchantments.getByName(leader), Integer.valueOf(data), true); + }else{ + meta.addEnchant(Enchantments.getByName(leader), Integer.valueOf(data), true); + } + }else{ + sender.sendMessage("Unknown Data " + args[i]); + return true; + } + } + } + } + itemstack.setItemMeta(meta); + target.getInventory().addItem(itemstack); + return true; + } + + public ItemStack approximateMatch(String input ,short damage){ + input = input.replace("_", "").trim(); + for(Material type : Material.values()){ + if(type.name().replace("_", "").trim().equalsIgnoreCase(input)){ + return new ItemStack(type , 1 , damage); + } + } + if(input.equalsIgnoreCase("endportalframe")){ + return new ItemStack(Material.ENDER_PORTAL_FRAME , 1 , damage); + } + if(input.equalsIgnoreCase("cobweb")){ + return new ItemStack(Material.WEB , 1 , damage); + } + if(input.equalsIgnoreCase("witherskull")){ + return new ItemStack(Material.SKULL_ITEM , 1 , (short) 1); + } + if(input.equalsIgnoreCase("gunpowder")){ + return new ItemStack(Material.SULPHUR , 1 , damage); + } + if(input.equalsIgnoreCase("steak")){ + return new ItemStack(Material.COOKED_BEEF , 1 , damage); + } + return null; + } + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandGod.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandGod.java new file mode 100644 index 0000000..d7a6d0f --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandGod.java @@ -0,0 +1,63 @@ +package com.viperhcf.minssentials.commands; + +import java.util.Set; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import com.google.common.collect.Sets; +import com.viperhcf.minssentials.Minssentials; + + +public class CommandGod implements CommandExecutor , Listener{ + + private Set godModes = Sets.newHashSet(); + + public CommandGod(Minssentials plugin) { + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + @EventHandler + public void onEntityDamage(EntityDamageByEntityEvent event){ + if(godModes.contains(event.getEntity())){ + event.setCancelled(true); + } + + if(godModes.contains(event.getDamager())){ + event.setCancelled(true); + } + } + @EventHandler + public void onEntityDamage(EntityDamageEvent event){ + if(godModes.contains(event.getEntity())){ + event.setCancelled(true); + } + } + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + Player player = (Player) sender; + + boolean toggledOn = false; + if(godModes.contains(player)){ + godModes.remove(player); + }else{ + godModes.add(player); + toggledOn = true; + } + + Command.broadcastCommandMessage(sender, "Toggled God Mode " + (toggledOn ? "On" : "Off")); + + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandInvSee.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandInvSee.java new file mode 100644 index 0000000..a04e1ed --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandInvSee.java @@ -0,0 +1,33 @@ +package com.viperhcf.minssentials.commands; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + + +public class CommandInvSee implements CommandExecutor{ + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + Player player = (Player) sender; + if(args.length <= 0){ + player.sendMessage("You must supply a username."); + return true; + } + Player target = Bukkit.getPlayerExact(args[args.length - 1]); + if (target == null) { + sender.sendMessage("Can't find player " + args[args.length - 1] + ". No InvSee."); + return true; + } + player.openInventory(target.getInventory()); + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandMuteChat.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandMuteChat.java new file mode 100644 index 0000000..1ced3ff --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandMuteChat.java @@ -0,0 +1,52 @@ +package com.viperhcf.minssentials.commands; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import com.viperhcf.minssentials.Minssentials; + + +public class CommandMuteChat implements CommandExecutor , Listener{ + + private boolean muted; + + private String messageMuted; + private String messageUnMuted; + private String messageCurrentlyMuted; + + public boolean isMuted(){ + return muted; + } + public CommandMuteChat(Minssentials plugin) { + plugin.getServer().getPluginManager().registerEvents(this, plugin); + messageMuted = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("chat-muted")); + messageUnMuted = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("chat-unmuted")); + messageCurrentlyMuted = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("chat-currently-muted")); + } + + @EventHandler(ignoreCancelled = true) + public void onAsyncPlayerChat(AsyncPlayerChatEvent event){ + if(muted && !event.getPlayer().hasPermission("minssentials.mutechat.bypass")) { + event.setCancelled(true); + event.getPlayer().sendMessage(messageCurrentlyMuted); + } + } + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + muted = !muted; + if(muted){ + Bukkit.broadcastMessage(messageMuted.replace("%who%" , sender.getName())); + }else{ + Bukkit.broadcastMessage(messageUnMuted.replace("%who%" , sender.getName())); + } + + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandNear.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandNear.java new file mode 100644 index 0000000..1820d00 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandNear.java @@ -0,0 +1,74 @@ +package com.viperhcf.minssentials.commands; + +import java.util.List; + +import net.libhalt.bukkit.kaede.utils.FactionsUtils; +import net.syuu.popura.faction.FactionRole; +import net.syuu.popura.faction.FactionType; +import net.syuu.popura.faction.bean.Faction; +import net.syuu.popura.faction.database.FactionDatabase; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionDefault; + +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import com.viperhcf.minssentials.Minssentials; + + +public class CommandNear implements CommandExecutor{ + + private String nearbyPrefix; + private String noplayernearby; + + public CommandNear(Minssentials plugin){ + nearbyPrefix = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("near-prefix")); + noplayernearby = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("near-nobody")); + if(plugin.getServer().getPluginManager().getPermission("minssentials.nearbypass") == null){ + plugin.getServer().getPluginManager().addPermission(new Permission("minssentials.nearbypass" , PermissionDefault.OP)); + } + + } + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + + Player player = (Player) sender; + if(FactionsUtils.getFactionAt(player.getLocation()) != null) + { + if(FactionsUtils.getFactionAt(player.getLocation()).getName().equals("Spawn")) + { + player.sendMessage(ChatColor.GRAY + "You cannot execute that command in spawn."); + return true; + } + } + + List nearByPlayers = Lists.newArrayList(); + for(Entity entity : player.getNearbyEntities(5.0D, 5.0D, 5.0D)){ + if(entity instanceof Player){ + Player near = (Player) entity; + if(near.hasPermission("minssentials.nearbypass")){ + continue; + } + nearByPlayers.add(near.getName()); + } + } + if(nearByPlayers.isEmpty()){ + player.sendMessage(noplayernearby); + }else{ + player.sendMessage(nearbyPrefix + Joiner.on(", ").join(nearByPlayers)); + } + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandNick.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandNick.java new file mode 100644 index 0000000..9f7c188 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandNick.java @@ -0,0 +1,47 @@ +package com.viperhcf.minssentials.commands; + +import com.viperhcf.minssentials.Minssentials; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; + +/** + * Created by Brennan on 6/27/2017. + */ +public class CommandNick implements CommandExecutor +{ + + Minssentials plugin; + public CommandNick(Minssentials instance){ + this.plugin = instance; + } + + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) + { + if(!(sender instanceof Player)) + { + sender.sendMessage(ChatColor.RED + "Only players can use that command."); + return true; + } + + Player p = (Player) sender; + if(!p.hasPermission("minssentials.nick")) + { + p.sendMessage("§7(§aViper§7)§f You don't have permission."); + return true; + } + + p.openInventory(plugin.NicknameGUI); + return true; + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandPlayTime.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandPlayTime.java new file mode 100644 index 0000000..13f1741 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandPlayTime.java @@ -0,0 +1,53 @@ +package com.viperhcf.minssentials.commands; + +import java.time.Duration; +import java.util.Map; + +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.Statistic; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +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.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitRunnable; + +import com.google.common.collect.Maps; +import com.viperhcf.minssentials.Minssentials; + + +public class CommandPlayTime implements CommandExecutor, Listener{ + + public CommandPlayTime(Minssentials plugin){ + plugin.getServer().getPluginManager().registerEvents( this, plugin); + } + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + if(args.length <= 0){ + sender.sendMessage("You must specify the player."); + return true; + } + Player target = Bukkit.getPlayer(args[0]); + if(target != null){ + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6&lVIPER &8 &e%name% &7has been playing for &e".replace("%name%", target.getName()) + DurationFormatUtils.formatDurationWords(target.getStatistic(Statistic.PLAY_ONE_TICK) * 50, true, true))); + return true; + } + sender.sendMessage("No Such Player online"); + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandRename.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandRename.java new file mode 100644 index 0000000..f9002ea --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandRename.java @@ -0,0 +1,36 @@ +package com.viperhcf.minssentials.commands; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import com.google.common.base.Joiner; +import com.viperhcf.minssentials.utils.ItemStackUtils; + + +public class CommandRename implements CommandExecutor{ + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + Player player = (Player) sender; + ItemStack itemStack = player.getItemInHand(); + if(itemStack != null && itemStack.getType() != Material.AIR){ + ItemStackUtils.setItemTitle(itemStack, ChatColor.translateAlternateColorCodes('&', Joiner.on(" ").join(args))); + ItemStackUtils.updateInventory(player); + }else{ + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7(&aViper&7) &7You must be holding an item if youd like to rename it.")); + } + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSeen.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSeen.java new file mode 100644 index 0000000..cb9f2cc --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSeen.java @@ -0,0 +1,82 @@ +package com.viperhcf.minssentials.commands; + +import java.time.Duration; +import java.util.Map; + +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +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.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitRunnable; + +import com.google.common.collect.Maps; +import com.viperhcf.minssentials.Minssentials; + + +public class CommandSeen implements CommandExecutor, Listener{ + + private Map loggedonTime = Maps.newHashMap(); + private String currentlyOnline; + private String previousOnline; + private String neverOnline; + public CommandSeen(Minssentials plugin){ + plugin.getServer().getPluginManager().registerEvents( this, plugin); + for(Player player : Bukkit.getOnlinePlayers()){ + loggedonTime.put(player, System.currentTimeMillis()); + } + currentlyOnline = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("seen-current-online")); + previousOnline = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("seen-previous-online")); + neverOnline = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("seen-never-online")); + + } + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event){ + loggedonTime.put(event.getPlayer(), System.currentTimeMillis()); + } + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event){ + loggedonTime.remove(event.getPlayer()); + } + @Override + public boolean onCommand(final CommandSender sender, Command arg1, String arg2, final String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + if(args.length <= 0){ + sender.sendMessage("You must specify the player."); + return true; + } + Player target = Bukkit.getPlayer(args[0]); + if(target != null){ + long value = loggedonTime.get(target); + sender.sendMessage(currentlyOnline.replace("%name%", target.getName()).replace("%duration%", DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - value, true, true))); + return true; + } + new BukkitRunnable() { + + @Override + public void run() { + OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(args[0]); + if(!offlinePlayer.hasPlayedBefore()){ + sender.sendMessage(neverOnline); + return; + } + sender.sendMessage(previousOnline.replace("%name%", offlinePlayer.getName()) .replace("%duration%", DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - offlinePlayer.getLastPlayed(), true, true))); + } + }.runTaskAsynchronously(JavaPlugin.getProvidingPlugin(CommandSeen.class)); + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSetSpawn.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSetSpawn.java new file mode 100644 index 0000000..f8ad80d --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSetSpawn.java @@ -0,0 +1,39 @@ +package com.viperhcf.minssentials.commands; + +import java.io.File; +import java.io.IOException; + +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.viperhcf.minssentials.Minssentials; + + +public class CommandSetSpawn implements CommandExecutor{ + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + Player player = (Player) sender; + Location location = player.getLocation(); + player.getWorld().setSpawnLocation(location.getBlockX(), location.getBlockY(), location.getBlockZ()); + Minssentials plugin = Minssentials.getPlugin(Minssentials.class); + plugin.getConfig().set("spawn-yaw-" + player.getLocation().getWorld().getName(), player.getLocation().getYaw()); + plugin.getConfig().set("spawn-pitch-" + player.getLocation().getWorld().getName(), player.getLocation().getPitch()); + try { + plugin.getConfig().save(new File(plugin.getDataFolder() , "config.yml")); + } catch (IOException e) { + e.printStackTrace(); + } + Command.broadcastCommandMessage(sender, "Set spawn for " +player.getWorld().getName() +" at " + location.getBlockX() + "," + location.getBlockY() + "," + location.getBlockZ()); + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSlowChat.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSlowChat.java new file mode 100644 index 0000000..905c5f7 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSlowChat.java @@ -0,0 +1,95 @@ +package com.viperhcf.minssentials.commands; + +import java.util.Map; +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import com.google.common.collect.Maps; +import com.viperhcf.minssentials.Minssentials; + + +public class CommandSlowChat implements CommandExecutor , Listener{ + + private boolean slowed; + private int interval; + private Map mutedUntil = Maps.newHashMap(); + private String messageSlowed; + private String messageUnSlowed; + private String messageCurrentlySlowed; + + + public boolean isSlowed(){ + return slowed; + } + + public int getInteerval(){ + return interval; + } + public long getMutedFor(Player player){ + if(mutedUntil.containsKey(player)){ + long until = mutedUntil.get(player); + if(System.currentTimeMillis() > until){ + return -1L; + }else{ + return until - System.currentTimeMillis(); + } + }else{ + return -1L; + } + } + public CommandSlowChat(Minssentials plugin) { + plugin.getServer().getPluginManager().registerEvents(this, plugin); + messageSlowed = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("chat-slowed")); + messageUnSlowed = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("chat-unslowed")); + messageCurrentlySlowed = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("chat-currently-slowed")); + } + @EventHandler(ignoreCancelled = true) + public void onAsyncPlayerChat(AsyncPlayerChatEvent event){ + if(slowed){ + Player player = event.getPlayer(); + if(!player.hasPermission("minssentials.slowchat.bypass")){ + if(mutedUntil.containsKey(player)){ + long until = mutedUntil.get(player); + if(System.currentTimeMillis() > until){ + mutedUntil.put(player, System.currentTimeMillis() + (interval * 1000L)); + }else{ + event.setCancelled(true); + event.getPlayer().sendMessage(messageCurrentlySlowed.replace("%time%", DurationFormatUtils.formatDurationWords(until - System.currentTimeMillis(), true , true))); + } + }else{ + mutedUntil.put(player, System.currentTimeMillis() + (interval * 1000L)); + } + } + } + } + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + slowed = !slowed; + if(slowed){ + int delay = 5; + if(args.length > 0){ + try{ + delay = Integer.valueOf(args[0]); + }catch(NumberFormatException e){ + sender.sendMessage("Invalid Number"); + return true; + } + } + interval = delay; + Bukkit.broadcastMessage(messageSlowed.replace("%who%" , sender.getName())); + }else{ + Bukkit.broadcastMessage(messageUnSlowed.replace("%who%" , sender.getName())); + } + + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSpawn.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSpawn.java new file mode 100644 index 0000000..e670d6c --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSpawn.java @@ -0,0 +1,39 @@ +package com.viperhcf.minssentials.commands; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.viperhcf.minssentials.Minssentials; + +import java.util.HashMap; +import java.util.UUID; + + +public class CommandSpawn implements CommandExecutor{ + + private Minssentials plugin; + + public CommandSpawn(Minssentials plugin) { + super(); + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + + Player player = (Player) sender; + Location location = Bukkit.getWorlds().get(0).getSpawnLocation(); + location.setYaw((float) plugin.getConfig().getDouble("spawn-yaw-" + location.getWorld().getName())); + location.setPitch((float) plugin.getConfig().getDouble("spawn-pitch-" + location.getWorld().getName())); + player.teleport(location); + return true; + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSpawner.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSpawner.java new file mode 100644 index 0000000..fffa9f6 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSpawner.java @@ -0,0 +1,55 @@ +package com.viperhcf.minssentials.commands; + +import org.apache.commons.lang.math.NumberUtils; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.viperhcf.minssentials.utils.LocationUtil; +import com.viperhcf.minssentials.utils.Mob; + +public class CommandSpawner implements CommandExecutor{ + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + Player player = (Player) sender; + final Location target = LocationUtil.getTarget(player); + if (target == null || target.getBlock().getType() != Material.MOB_SPAWNER) + { + player.sendMessage("You must be looking at mob spawner"); + return true; + } + String name = args[0]; + int delay = 0; + + Mob mob = Mob.fromName(name); + if(mob == null){ + player.sendMessage(ChatColor.RED + "Invalid Mob Type"); + return true; + } + if (args.length > 1) + { + if (NumberUtils.isDigits(args[1])) + { + delay = Integer.parseInt(args[1]); + } + } + + CreatureSpawner spawner = (CreatureSpawner)target.getBlock().getState(); + spawner.setSpawnedType(mob.getType()); + spawner.setDelay(delay); + spawner.update(); + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSudo.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSudo.java new file mode 100644 index 0000000..083e57d --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandSudo.java @@ -0,0 +1,50 @@ +package com.viperhcf.minssentials.commands; + +import java.util.Arrays; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; + +import com.google.common.base.Joiner; + + +public class CommandSudo implements CommandExecutor{ + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + + if(args.length == 0) + { + sender.sendMessage(ChatColor.GRAY + "Did you mean: " + ChatColor.WHITE + "/sudo "); + return true; + } + + Player player = (Player) sender; + Player target = Bukkit.getPlayerExact(args[0]); + + if (target == null || player == target) { + sender.sendMessage("Can't find player " + args[0] + ". No sudo."); + return true; + } + if(target.hasPermission("minssentials.sudo")){ + sender.sendMessage("Can not do this to this person."); + return true; + } + + target.chat(Joiner.on(" ").join(Arrays.copyOfRange(args , 1, args.length) )); + Command.broadcastCommandMessage(sender, "Sudo-ed " + target.getDisplayName() + " to " +Joiner.on(" ").join (Arrays.copyOfRange(args , 1, args.length)) ); + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandTag.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandTag.java new file mode 100644 index 0000000..b6e810b --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandTag.java @@ -0,0 +1,27 @@ +package com.viperhcf.minssentials.commands; + +import com.viperhcf.minssentials.Minssentials; +import com.viperhcf.minssentials.utils.TagUtil; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +/** + * Created by Brennan on 6/29/2017. + */ +public class CommandTag implements CommandExecutor +{ + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) + { + if(!(sender instanceof Player)) + { + sender.sendMessage("§7(§aViper§7) Only players can use that command."); + return true; + } + + Player p = (Player) sender; + TagUtil.openGUI(p); + return true; + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandToggleChat.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandToggleChat.java new file mode 100644 index 0000000..27ca6a1 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandToggleChat.java @@ -0,0 +1,65 @@ +package com.viperhcf.minssentials.commands; + +import java.util.Iterator; +import java.util.Set; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import com.google.common.collect.Sets; +import com.viperhcf.minssentials.Minssentials; + + +public class CommandToggleChat implements CommandExecutor , Listener{ + + private Set disabled = Sets.newHashSet(); + private String globalChatDisabled; + private String globalChatEnabled; + public CommandToggleChat(Minssentials plugin) { + plugin.getServer().getPluginManager().registerEvents(this, plugin); + globalChatDisabled = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("global-chat-disabled")); + globalChatEnabled = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("global-chat-enabled")); + } + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event){ + disabled.remove(event.getPlayer().getUniqueId()); + } + + @EventHandler(ignoreCancelled = true , priority = EventPriority.MONITOR) + public void onAsyncPlayerChat(AsyncPlayerChatEvent event){ + if(event.getPlayer().hasPermission("minssentials.staffview")){ + return; + } + + Iterator recipents = event.getRecipients().iterator(); + while(recipents.hasNext()){ + if(disabled.contains(recipents.next().getUniqueId())){ + recipents.remove(); + } + } + } + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(disabled.contains(((Player)sender).getUniqueId())){ + disabled.remove(((Player)sender).getUniqueId()); + sender.sendMessage(globalChatEnabled); + }else{ + disabled.add(((Player)sender).getUniqueId()); + sender.sendMessage(globalChatDisabled); + } + + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandTp.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandTp.java new file mode 100644 index 0000000..3d56cf9 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandTp.java @@ -0,0 +1,42 @@ +package com.viperhcf.minssentials.commands; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; + +import com.viperhcf.minssentials.Minssentials; + + +public class CommandTp implements CommandExecutor{ + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + if(args.length <= 0){ + sender.sendMessage("You must specify the player."); + return true; + } + Player player = (Player) sender; + Player from = player; + Player to = Minssentials.getPlayer(args[0]); + if(args.length > 1){ + to = Minssentials.getPlayer(args[1]);; + from = Minssentials.getPlayer(args[0]); + } + if(from == null || to == null){ + player.sendMessage("That player could not be found"); + return true; + } + from.teleport(to, TeleportCause.COMMAND); + Command.broadcastCommandMessage(sender, "Teleported " + from.getDisplayName() + " to " + to.getDisplayName()); + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandTpHere.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandTpHere.java new file mode 100644 index 0000000..904622c --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandTpHere.java @@ -0,0 +1,31 @@ +package com.viperhcf.minssentials.commands; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; + + +public class CommandTpHere implements CommandExecutor{ + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + Player player = (Player) sender; + Player target = Bukkit.getPlayerExact(args[args.length - 1]); + if (target == null) { + sender.sendMessage("Can't find player " + args[args.length - 1] + ". No tp."); + return true; + } + target.teleport(player, TeleportCause.COMMAND); + Command.broadcastCommandMessage(sender, "Teleported " + target.getDisplayName() + " to " + player.getDisplayName()); + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandTpPos.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandTpPos.java new file mode 100644 index 0000000..90a0f0a --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandTpPos.java @@ -0,0 +1,47 @@ +package com.viperhcf.minssentials.commands; + +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; + + +public class CommandTpPos implements CommandExecutor{ + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + if(args.length < 3){ + sender.sendMessage("You must specify x y z coords."); + return true; + } + Player player = (Player) sender; + final double x = args[0].startsWith("~") ? player.getLocation().getX() + Integer.parseInt(args[0].substring(1)) : Integer.parseInt(args[0]); + final double y = args[1].startsWith("~") ? player.getLocation().getY() + Integer.parseInt(args[1].substring(1)) : Integer.parseInt(args[1]); + final double z = args[2].startsWith("~") ? player.getLocation().getZ() + Integer.parseInt(args[2].substring(1)) : Integer.parseInt(args[2]); + final Location loc = new Location(player.getWorld(), x, y, z, player.getLocation().getYaw(), player.getLocation().getPitch()); + if (args.length > 3) + { + loc.setYaw((Float.parseFloat(args[3]) + 180 + 360) % 360); + } + if (args.length > 4) + { + loc.setPitch(Float.parseFloat(args[4])); + } + if (x > 30000000 || y > 30000000 || z > 30000000 || x < -30000000 || y < -30000000 || z < -30000000) + { + sender.sendMessage("Invalid Position. No tp."); + return true; + } + player.teleport(loc, TeleportCause.COMMAND); + Command.broadcastCommandMessage(sender, "Teleported " + player.getDisplayName() + " to " + x + ", " + y + ", " + z); + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandWorkbench.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandWorkbench.java new file mode 100644 index 0000000..ab3fa5a --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/commands/CommandWorkbench.java @@ -0,0 +1,23 @@ +package com.viperhcf.minssentials.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + + +public class CommandWorkbench implements CommandExecutor{ + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!(sender instanceof Player)){ + sender.sendMessage("Must Be Player"); + return true; + } + Player player = (Player) sender; + player.openWorkbench(null, true); + return true; + } + + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/config/MyConfig.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/config/MyConfig.java new file mode 100644 index 0000000..b3a4f06 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/config/MyConfig.java @@ -0,0 +1,104 @@ +package com.viperhcf.minssentials.config; + +import java.io.File; +import java.io.InputStream; +import java.util.List; +import java.util.Set; + +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.java.JavaPlugin; + +public class MyConfig +{ + private int comments; + private MyConfigManager manager; + + private File file; + private FileConfiguration config; + + @SuppressWarnings("deprecation") + public MyConfig(InputStream configStream, File configFile, int comments, JavaPlugin plugin) + { + this.comments = comments; + this.manager = new MyConfigManager(plugin); + this.file = configFile; + this.config = YamlConfiguration.loadConfiguration(configStream); + } + + public Object get(String path) {return this.config.get(path);} + + public Object get(String path, Object def) {return this.config.get(path, def);} + + public String getString(String path) {return this.config.getString(path);} + + public String getString(String path, String def) {return this.config.getString(path, def);} + + public int getInt(String path) {return this.config.getInt(path);} + + public int getInt(String path, int def) {return this.config.getInt(path, def);} + + public boolean getBoolean(String path) {return this.config.getBoolean(path);} + + public boolean getBoolean(String path, boolean def) {return this.config.getBoolean(path, def);} + + public void createSection(String path) {this.config.createSection(path);} + + public ConfigurationSection getConfigurationSection(String path) {return this.config.getConfigurationSection(path);} + + public double getDouble(String path) {return this.config.getDouble(path);} + + public double getDouble(String path, double def) {return this.config.getDouble(path, def);} + + public List getList(String path) {return this.config.getList(path);} + + public List getList(String path, List def) {return this.config.getList(path, def);} + + public boolean contains(String path) {return this.config.contains(path);} + + public void removeKey(String path) {this.config.set(path, null);} + + public void set(String path, Object value) {this.config.set(path, value);} + + public void set(String path, Object value, String comment) + { + if(!this.config.contains(path)) + { + this.config.set(manager.getPluginName() + "_COMMENT_" + comments, " " + comment); + comments++; + } + this.config.set(path, value); + } + + public void set(String path, Object value, String[] comment) + { + for(String comm : comment) + { + if(!this.config.contains(path)) + { + this.config.set(manager.getPluginName() + "_COMMENT_" + comments, " " + comm); + comments++; + } + } + this.config.set(path, value); + } + + public void setHeader(String[] header) + { + manager.setHeader(this.file, header); + this.comments = header.length + 2; + this.reloadConfig(); + } + + @SuppressWarnings("deprecation") + public void reloadConfig() {this.config = YamlConfiguration.loadConfiguration(manager.getConfigContent(file));} + + public void saveConfig() + { + String config = this.config.saveToString(); + manager.saveConfig(config, this.file); + } + + public Set getKeys() {return this.config.getKeys(false);} +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/config/MyConfigManager.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/config/MyConfigManager.java new file mode 100644 index 0000000..6a6ff07 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/config/MyConfigManager.java @@ -0,0 +1,288 @@ +package com.viperhcf.minssentials.config; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.Charset; + +import org.bukkit.plugin.java.JavaPlugin; + +public class MyConfigManager +{ + private JavaPlugin plugin; + + public MyConfigManager(JavaPlugin plugin) + { + this.plugin = plugin; + } + + public MyConfig getNewConfig(String fileName, String[] header) + { + File file = this.getConfigFile(fileName); + + if(!file.exists()) + { + this.prepareFile(fileName); + if(header != null && header.length != 0) + this.setHeader(file, header); + } + + MyConfig config = new MyConfig(this.getConfigContent(fileName), file, this.getCommentsNum(file), plugin); + return config; + } + + public MyConfig getNewConfig(String fileName) + { + return this.getNewConfig(fileName, null); + } + + private File getConfigFile(String file) + { + if(file.isEmpty() || file == null) + return null; + + File configFile; + + if(file.contains("/")) + { + if(file.startsWith("/")) + configFile = new File(plugin.getDataFolder() + file.replace("/", File.separator)); + else configFile = new File(plugin.getDataFolder() + File.separator + file.replace("/", File.separator)); + } + else configFile = new File(plugin.getDataFolder(), file); + + return configFile; + } + + public void prepareFile(String filePath, String resource) + { + File file = this.getConfigFile(filePath); + + if(file.exists()) + return; + + try + { + file.getParentFile().mkdirs(); + file.createNewFile(); + + if(resource != null) + if(!resource.isEmpty()) + this.copyResource(plugin.getResource(resource), file); + + } + catch (IOException e){e.printStackTrace();} + } + + public void prepareFile(String filePath) + { + this.prepareFile(filePath, null); + } + + public void setHeader(File file, String[] header) + { + if(!file.exists()) + return; + + try + { + String currentLine; + StringBuilder config = new StringBuilder(""); + BufferedReader reader = new BufferedReader(new FileReader(file)); + + while((currentLine = reader.readLine()) != null) + config.append(currentLine + "\n"); + + reader.close(); + config.append("# +----------------------------------------------------+ #\n"); + + for(String line : header) + { + if(line.length() > 50) + continue; + + int lenght = (50 - line.length()) / 2; + StringBuilder finalLine = new StringBuilder(line); + + for(int i = 0; i < lenght; i++) + { + finalLine.append(" "); + finalLine.reverse(); + finalLine.append(" "); + finalLine.reverse(); + } + + if(line.length() % 2 != 0) + finalLine.append(" "); + + config.append("# < " + finalLine.toString() + " > #\n"); + } + config.append("# +----------------------------------------------------+ #"); + + BufferedWriter writer = new BufferedWriter(new FileWriter(file)); + writer.write(this.prepareConfigString(config.toString())); + writer.flush(); + writer.close(); + } + catch (IOException e){e.printStackTrace();} + } + + public InputStream getConfigContent(File file) + { + if(!file.exists()) + return null; + try + { + int commentNum = 0; + + String addLine; + String currentLine; + String pluginName = this.getPluginName(); + + StringBuilder whole = new StringBuilder(""); + BufferedReader reader = new BufferedReader(new FileReader(file)); + + while((currentLine = reader.readLine()) != null) + { + if(currentLine.startsWith("#")) + { + addLine = currentLine.replaceFirst("#", pluginName + "_COMMENT_" + commentNum + ":"); + whole.append(addLine + "\n"); + commentNum++; + } + else whole.append(currentLine + "\n"); + } + + String config = whole.toString(); + InputStream configStream = new ByteArrayInputStream(config.getBytes(Charset.forName("UTF-8"))); + + reader.close(); + return configStream; + } + catch (IOException e){e.printStackTrace();return null;} + } + + private int getCommentsNum(File file) + { + if(!file.exists()) + return 0; + try + { + int comments = 0; + String currentLine; + + BufferedReader reader = new BufferedReader(new FileReader(file)); + + while((currentLine = reader.readLine()) != null) + if(currentLine.startsWith("#")) + comments++; + + reader.close(); + return comments; + } + catch (IOException e){e.printStackTrace();return 0;} + } + + public InputStream getConfigContent(String filePath) + { + return this.getConfigContent(this.getConfigFile(filePath)); + } + + private String prepareConfigString(String configString) + { + int lastLine = 0; + int headerLine = 0; + + String[] lines = configString.split("\n"); + StringBuilder config = new StringBuilder(""); + + for(String line : lines) + { + if(line.startsWith(this.getPluginName() + "_COMMENT")) + { + String comment = "#" + line.trim().substring(line.indexOf(":") + 1); + + if(comment.startsWith("# +-")) + { + if(headerLine == 0) + { + config.append(comment + "\n"); + lastLine = 0; + headerLine = 1; + } + else if(headerLine == 1) + { + config.append(comment + "\n\n"); + lastLine = 0; + headerLine = 0; + } + } + else + { + String normalComment; + if(comment.startsWith("# ' ")) + normalComment = comment.substring(0, comment.length() - 1).replaceFirst("# ' ", "# "); + else normalComment = comment; + + if(lastLine == 0) + config.append(normalComment + "\n"); + else if(lastLine == 1) + config.append("\n" + normalComment + "\n"); + + lastLine = 0; + } + } + else + { + config.append(line + "\n"); + lastLine = 1; + } + } + return config.toString(); + } + + public void saveConfig(String configString, File file) + { + String configuration = this.prepareConfigString(configString); + + try + { + BufferedWriter writer = new BufferedWriter(new FileWriter(file)); + writer.write(configuration); + writer.flush(); + writer.close(); + + } + catch (IOException e){e.printStackTrace();} + } + + public String getPluginName() + { + return plugin.getDescription().getName(); + } + + private void copyResource(InputStream resource, File file) + { + try + { + OutputStream out = new FileOutputStream(file); + + int length; + byte[] buf = new byte[1024]; + + while((length = resource.read(buf)) > 0) + out.write(buf, 0, length); + + out.close(); + resource.close(); + } + catch (Exception e) {e.printStackTrace();} + } +} \ No newline at end of file diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/events/CustomCommandEvent.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/events/CustomCommandEvent.java new file mode 100644 index 0000000..2e6fa6a --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/events/CustomCommandEvent.java @@ -0,0 +1,39 @@ +package com.viperhcf.minssentials.events; + +import com.viperhcf.minssentials.Minssentials; +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; + +import java.util.List; + +/** + * Created by Brennan on 6/16/2017. + */ +public class CustomCommandEvent implements Listener +{ + + Minssentials plugin; + public CustomCommandEvent(Minssentials instance){ + this.plugin = instance; + } + + @EventHandler + public void onCustomCommand(PlayerCommandPreprocessEvent e){ + String[] args = e.getMessage().split(" "); + for(String input : plugin.getConfig().getConfigurationSection("text-cmd").getKeys(false)) + { + final List message = plugin.getConfig().getConfigurationSection("text-cmd").getStringList(input); + if(args[0].equalsIgnoreCase("/" + input)) + { + e.setCancelled(true); + for(String x : message) + { + e.getPlayer().sendMessage(x.replaceAll("&", "§")); + } + return; + } + } + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/events/PlayerClickEvent.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/events/PlayerClickEvent.java new file mode 100644 index 0000000..2023ffe --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/events/PlayerClickEvent.java @@ -0,0 +1,160 @@ +package com.viperhcf.minssentials.events; + +import com.viperhcf.minssentials.Minssentials; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + +/** + * Created by Brennan on 6/27/2017. + */ +public class PlayerClickEvent implements Listener +{ + + Minssentials plugin; + public PlayerClickEvent(Minssentials instance){ + this.plugin = instance; + } + + @EventHandler + public void onClick(InventoryClickEvent e) + { + + if(ChatColor.stripColor(e.getInventory().getTitle()).startsWith("Tags")){ + + e.setCancelled(true); + Player p = (Player) e.getWhoClicked(); + + + if(e.getCurrentItem() == null){ + return; + } + + if(e.getCurrentItem().getType() == Material.IRON_DOOR) + { + p.closeInventory(); + return; + } + + boolean hasTag = false; + String tag = ""; + + if(!Minssentials.getInstance().playerdata.getString(p.getName() + ".tag").equals("None")) + { + hasTag = true; + tag = Minssentials.getInstance().playerdata.getString(p.getName() + ".tag").replaceAll("&", "§"); + } + + if(e.getCurrentItem().getType() == Material.SKULL_ITEM) + { + if(hasTag) + { + p.sendMessage("§7(§aViper§7)§f Your tag has been removed."); + p.closeInventory(); + Minssentials.getInstance().playerdata.set(p.getName() + ".tag", "None"); + Minssentials.getInstance().playerdata.saveConfig(); + return; + } + } + + if(e.getCurrentItem().getType() == Material.NAME_TAG) + { + String clicked_tag = e.getCurrentItem().getItemMeta().getDisplayName().replace("§aTag §f» ", ""); + + if(tag.equals(clicked_tag)){ + return; + } + + String permission = Minssentials.getInstance().tags.getString(clicked_tag + ".permission"); + + if(!p.hasPermission(permission)){ + p.sendMessage("§7(§aViper§7)§f You don't have permission to use this tag."); + p.closeInventory(); + return; + } + + p.sendMessage("§7(§aViper§7)§f Your tag has been set to: " + Minssentials.getInstance().tags.getString(clicked_tag + ".name").replaceAll("&", "§")); + p.closeInventory(); + Minssentials.getInstance().playerdata.set(p.getName() + ".tag", clicked_tag); + Minssentials.getInstance().playerdata.saveConfig(); + return; + } + + return; + } + + String title = plugin.getConfig().getString("nickname-gui-title").replaceAll("&", "§"); + if(e.getInventory().getTitle().equalsIgnoreCase(title)) { + + Player p = (Player) e.getWhoClicked(); + e.setCancelled(true); + if(e.getCurrentItem() != null) + { + if(e.getCurrentItem().getType() == Material.STAINED_GLASS_PANE) { + String name = e.getCurrentItem().getItemMeta().getDisplayName(); + + switch (ChatColor.stripColor(name)) { + case "Dark Green": + plugin.playerdata.set(p.getName() + ".color", "&2"); + plugin.playerdata.saveConfig(); + break; + case "Light Green": + plugin.playerdata.set(p.getName() + ".color", "&a"); + plugin.playerdata.saveConfig(); + break; + case "Aqua": + plugin.playerdata.set(p.getName() + ".color", "&b"); + plugin.playerdata.saveConfig(); + break; + case "Blue": + plugin.playerdata.set(p.getName() + ".color", "&9"); + plugin.playerdata.saveConfig(); + break; + case "Purple": + plugin.playerdata.set(p.getName() + ".color", "&5"); + plugin.playerdata.saveConfig(); + break; + case "Pink": + plugin.playerdata.set(p.getName() + ".color", "&d"); + plugin.playerdata.saveConfig(); + break; + case "Yellow": + plugin.playerdata.set(p.getName() + ".color", "&e"); + plugin.playerdata.saveConfig(); + break; + case "Gold": + plugin.playerdata.set(p.getName() + ".color", "&6"); + plugin.playerdata.saveConfig(); + break; + case "Red": + plugin.playerdata.set(p.getName() + ".color", "&c"); + plugin.playerdata.saveConfig(); + break; + case "White": + plugin.playerdata.set(p.getName() + ".color", "&f"); + plugin.playerdata.saveConfig(); + break; + case "Dark Grey": + plugin.playerdata.set(p.getName() + ".color", "&8"); + plugin.playerdata.saveConfig(); + break; + case "Light Grey": + plugin.playerdata.set(p.getName() + ".color", "&7"); + plugin.playerdata.saveConfig(); + break; + } + + String msg = plugin.getConfig().getString("nickname-changed").replaceAll("&", "§"); + p.sendMessage(msg); + p.closeInventory(); + return; + } + } + return; + } + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/events/PlayerConnectEvent.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/events/PlayerConnectEvent.java new file mode 100644 index 0000000..fe15d1f --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/events/PlayerConnectEvent.java @@ -0,0 +1,34 @@ +package com.viperhcf.minssentials.events; + +import com.viperhcf.minssentials.Minssentials; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +/** + * Created by Brennan on 6/27/2017. + */ +public class PlayerConnectEvent implements Listener +{ + + Minssentials plugin; + public PlayerConnectEvent(Minssentials instance){ + this.plugin = instance; + } + + @EventHandler + public void onJoin(PlayerJoinEvent e) + { + Player p = e.getPlayer(); + if(!plugin.playerdata.contains(p.getName() + ".color")) + { + plugin.playerdata.set(p.getName() + ".color", "&f"); + plugin.playerdata.set(p.getName() + ".tag", "None"); + plugin.playerdata.set(p.getName() + ".fix-hand-cooldown", 0); + plugin.playerdata.set(p.getName() + ".fix-all-cooldown", 0); + plugin.playerdata.saveConfig(); + } + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/listener/MinssentialsListener.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/listener/MinssentialsListener.java new file mode 100644 index 0000000..75382ce --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/listener/MinssentialsListener.java @@ -0,0 +1,94 @@ +package com.viperhcf.minssentials.listener; + +import java.io.File; +import java.io.IOException; +import java.util.Iterator; +import java.util.regex.Pattern; + +import org.bukkit.ChatColor; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.player.PlayerLoginEvent; +import org.bukkit.event.player.PlayerLoginEvent.Result; + +import com.viperhcf.minssentials.Minssentials; +import com.viperhcf.minssentials.PlayerStorage; +import com.viperhcf.minssentials.StoredData; + +import net.minecraft.server.v1_7_R4.DataWatcher; +import net.minecraft.server.v1_7_R4.PacketPlayOutEntityDestroy; +import net.minecraft.server.v1_7_R4.PacketPlayOutNamedEntitySpawn; + +public class MinssentialsListener implements Listener{ + + private static final Pattern URL_PATTERN = Pattern.compile("(http(s)?:\\/\\/.)?(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)"); + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerLogin(PlayerLoginEvent event){ + if(event.getResult() == Result.KICK_FULL && event.getPlayer().hasPermission("minssentials.fulljoin")){ + event.setResult(Result.ALLOWED); + } + } + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerLogin(PlayerCommandPreprocessEvent event){ + String command = event.getMessage(); + + if(event.getMessage().contains(":")){ + command = event.getMessage().split(Pattern.quote(":"))[1]; + } + command = command.toLowerCase(); + if(command.startsWith("calc") || command.startsWith("/calc") || command.startsWith("//calc") || command.startsWith("calc") + ||command.startsWith("eval") || command.startsWith("/eval") || command.startsWith("//eval") + ||command.startsWith("sol") || command.startsWith("/sol") || command.startsWith("//sol")){ + + event.setMessage("/itriedtocrashteserverwith/calc"); + } + } + @EventHandler(priority = EventPriority.LOWEST) + public void onAsyncPlayerChat(AsyncPlayerChatEvent event){ + Player player = event.getPlayer(); + if(player.hasPermission("minssentials.chat.color")){ + event.setMessage(translateAlternateStrictlyColor('&' , event.getMessage())); + } + if(player.hasPermission("minssentials.chat.format")){ + event.setMessage(translateAlternateStrictlyFormat('&' , event.getMessage())); + } + if(!player.hasPermission("minssentials.chat.link") && URL_PATTERN.matcher(event.getMessage().trim()).find()){ + event.setMessage(event.getMessage().replace(".", " ")); + } + Iterator iter = event.getRecipients().iterator(); + while (iter.hasNext()) { + Player other = (Player) iter.next(); + StoredData data = PlayerStorage.getInstance().getData(other); + if(data != null && data.getIgnoredName().contains(player.getName())){ + iter.remove(); + } + } + } + + public static String translateAlternateStrictlyFormat(char altColorChar, String textToTranslate) { + char[] b = textToTranslate.toCharArray(); + for (int i = 0; i < b.length - 1; i++) { + if (b[i] == altColorChar && "KkLlMmNnOoRr".indexOf(b[i+1]) > -1) { + b[i] = ChatColor.COLOR_CHAR; + b[i+1] = Character.toLowerCase(b[i+1]); + } + } + return new String(b); + } + public static String translateAlternateStrictlyColor(char altColorChar, String textToTranslate) { + char[] b = textToTranslate.toCharArray(); + for (int i = 0; i < b.length - 1; i++) { + if (b[i] == altColorChar && "0123456789AaBbCcDdEeFf".indexOf(b[i+1]) > -1) { + b[i] = ChatColor.COLOR_CHAR; + b[i+1] = Character.toLowerCase(b[i+1]); + } + } + return new String(b); + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/Enchantments.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/Enchantments.java new file mode 100644 index 0000000..dc65e35 --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/Enchantments.java @@ -0,0 +1,181 @@ +package com.viperhcf.minssentials.utils; + +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import org.apache.commons.lang.math.NumberUtils; +import org.bukkit.enchantments.Enchantment; + + +public class Enchantments +{ + private static final Map ENCHANTMENTS = new HashMap(); + private static final Map ALIASENCHANTMENTS = new HashMap(); + + static + { + ENCHANTMENTS.put("alldamage", Enchantment.DAMAGE_ALL); + ALIASENCHANTMENTS.put("alldmg", Enchantment.DAMAGE_ALL); + ENCHANTMENTS.put("sharpness", Enchantment.DAMAGE_ALL); + ALIASENCHANTMENTS.put("sharp", Enchantment.DAMAGE_ALL); + ALIASENCHANTMENTS.put("dal", Enchantment.DAMAGE_ALL); + + ENCHANTMENTS.put("ardmg", Enchantment.DAMAGE_ARTHROPODS); + ENCHANTMENTS.put("baneofarthropods", Enchantment.DAMAGE_ARTHROPODS); + ALIASENCHANTMENTS.put("baneofarthropod", Enchantment.DAMAGE_ARTHROPODS); + ALIASENCHANTMENTS.put("arthropod", Enchantment.DAMAGE_ARTHROPODS); + ALIASENCHANTMENTS.put("dar", Enchantment.DAMAGE_ARTHROPODS); + + ENCHANTMENTS.put("undeaddamage", Enchantment.DAMAGE_UNDEAD); + ENCHANTMENTS.put("smite", Enchantment.DAMAGE_UNDEAD); + ALIASENCHANTMENTS.put("du", Enchantment.DAMAGE_UNDEAD); + + ENCHANTMENTS.put("digspeed", Enchantment.DIG_SPEED); + ENCHANTMENTS.put("efficiency", Enchantment.DIG_SPEED); + ALIASENCHANTMENTS.put("minespeed", Enchantment.DIG_SPEED); + ALIASENCHANTMENTS.put("cutspeed", Enchantment.DIG_SPEED); + ALIASENCHANTMENTS.put("ds", Enchantment.DIG_SPEED); + ALIASENCHANTMENTS.put("eff", Enchantment.DIG_SPEED); + + ENCHANTMENTS.put("durability", Enchantment.DURABILITY); + ALIASENCHANTMENTS.put("dura", Enchantment.DURABILITY); + ENCHANTMENTS.put("unbreaking", Enchantment.DURABILITY); + ALIASENCHANTMENTS.put("d", Enchantment.DURABILITY); + + ENCHANTMENTS.put("thorns", Enchantment.THORNS); + ENCHANTMENTS.put("highcrit", Enchantment.THORNS); + ALIASENCHANTMENTS.put("thorn", Enchantment.THORNS); + ALIASENCHANTMENTS.put("highercrit", Enchantment.THORNS); + ALIASENCHANTMENTS.put("t", Enchantment.THORNS); + + ENCHANTMENTS.put("fireaspect", Enchantment.FIRE_ASPECT); + ENCHANTMENTS.put("fire", Enchantment.FIRE_ASPECT); + ALIASENCHANTMENTS.put("meleefire", Enchantment.FIRE_ASPECT); + ALIASENCHANTMENTS.put("meleeflame", Enchantment.FIRE_ASPECT); + ALIASENCHANTMENTS.put("fa", Enchantment.FIRE_ASPECT); + + ENCHANTMENTS.put("knockback", Enchantment.KNOCKBACK); + ALIASENCHANTMENTS.put("kback", Enchantment.KNOCKBACK); + ALIASENCHANTMENTS.put("kb", Enchantment.KNOCKBACK); + ALIASENCHANTMENTS.put("k", Enchantment.KNOCKBACK); + + ALIASENCHANTMENTS.put("blockslootbonus", Enchantment.LOOT_BONUS_BLOCKS); + ENCHANTMENTS.put("fortune", Enchantment.LOOT_BONUS_BLOCKS); + ALIASENCHANTMENTS.put("fort", Enchantment.LOOT_BONUS_BLOCKS); + ALIASENCHANTMENTS.put("lbb", Enchantment.LOOT_BONUS_BLOCKS); + + ALIASENCHANTMENTS.put("mobslootbonus", Enchantment.LOOT_BONUS_MOBS); + ENCHANTMENTS.put("mobloot", Enchantment.LOOT_BONUS_MOBS); + ENCHANTMENTS.put("looting", Enchantment.LOOT_BONUS_MOBS); + ALIASENCHANTMENTS.put("lbm", Enchantment.LOOT_BONUS_MOBS); + + ALIASENCHANTMENTS.put("oxygen", Enchantment.OXYGEN); + ENCHANTMENTS.put("respiration", Enchantment.OXYGEN); + ALIASENCHANTMENTS.put("breathing", Enchantment.OXYGEN); + ENCHANTMENTS.put("breath", Enchantment.OXYGEN); + ALIASENCHANTMENTS.put("o", Enchantment.OXYGEN); + + ENCHANTMENTS.put("protection", Enchantment.PROTECTION_ENVIRONMENTAL); + ALIASENCHANTMENTS.put("prot", Enchantment.PROTECTION_ENVIRONMENTAL); + ENCHANTMENTS.put("protect", Enchantment.PROTECTION_ENVIRONMENTAL); + ALIASENCHANTMENTS.put("p", Enchantment.PROTECTION_ENVIRONMENTAL); + + ALIASENCHANTMENTS.put("explosionsprotection", Enchantment.PROTECTION_EXPLOSIONS); + ALIASENCHANTMENTS.put("explosionprotection", Enchantment.PROTECTION_EXPLOSIONS); + ALIASENCHANTMENTS.put("expprot", Enchantment.PROTECTION_EXPLOSIONS); + ALIASENCHANTMENTS.put("blastprotection", Enchantment.PROTECTION_EXPLOSIONS); + ALIASENCHANTMENTS.put("bprotection", Enchantment.PROTECTION_EXPLOSIONS); + ALIASENCHANTMENTS.put("bprotect", Enchantment.PROTECTION_EXPLOSIONS); + ENCHANTMENTS.put("blastprotect", Enchantment.PROTECTION_EXPLOSIONS); + ALIASENCHANTMENTS.put("pe", Enchantment.PROTECTION_EXPLOSIONS); + + ALIASENCHANTMENTS.put("fallprotection", Enchantment.PROTECTION_FALL); + ENCHANTMENTS.put("fallprot", Enchantment.PROTECTION_FALL); + ENCHANTMENTS.put("featherfall", Enchantment.PROTECTION_FALL); + ALIASENCHANTMENTS.put("featherfalling", Enchantment.PROTECTION_FALL); + ALIASENCHANTMENTS.put("pfa", Enchantment.PROTECTION_FALL); + + ALIASENCHANTMENTS.put("fireprotection", Enchantment.PROTECTION_FIRE); + ALIASENCHANTMENTS.put("flameprotection", Enchantment.PROTECTION_FIRE); + ENCHANTMENTS.put("fireprotect", Enchantment.PROTECTION_FIRE); + ALIASENCHANTMENTS.put("flameprotect", Enchantment.PROTECTION_FIRE); + ENCHANTMENTS.put("fireprot", Enchantment.PROTECTION_FIRE); + ALIASENCHANTMENTS.put("flameprot", Enchantment.PROTECTION_FIRE); + ALIASENCHANTMENTS.put("pf", Enchantment.PROTECTION_FIRE); + + ENCHANTMENTS.put("projectileprotection", Enchantment.PROTECTION_PROJECTILE); + ENCHANTMENTS.put("projprot", Enchantment.PROTECTION_PROJECTILE); + ALIASENCHANTMENTS.put("pp", Enchantment.PROTECTION_PROJECTILE); + + ENCHANTMENTS.put("silktouch", Enchantment.SILK_TOUCH); + ALIASENCHANTMENTS.put("softtouch", Enchantment.SILK_TOUCH); + ALIASENCHANTMENTS.put("st", Enchantment.SILK_TOUCH); + + ENCHANTMENTS.put("waterworker", Enchantment.WATER_WORKER); + ENCHANTMENTS.put("aquaaffinity", Enchantment.WATER_WORKER); + ALIASENCHANTMENTS.put("watermine", Enchantment.WATER_WORKER); + ALIASENCHANTMENTS.put("ww", Enchantment.WATER_WORKER); + + ALIASENCHANTMENTS.put("firearrow", Enchantment.ARROW_FIRE); + ENCHANTMENTS.put("flame", Enchantment.ARROW_FIRE); + ENCHANTMENTS.put("flamearrow", Enchantment.ARROW_FIRE); + ALIASENCHANTMENTS.put("af", Enchantment.ARROW_FIRE); + + ENCHANTMENTS.put("arrowdamage", Enchantment.ARROW_DAMAGE); + ENCHANTMENTS.put("power", Enchantment.ARROW_DAMAGE); + ALIASENCHANTMENTS.put("arrowpower", Enchantment.ARROW_DAMAGE); + ALIASENCHANTMENTS.put("ad", Enchantment.ARROW_DAMAGE); + + ENCHANTMENTS.put("arrowknockback", Enchantment.ARROW_KNOCKBACK); + ALIASENCHANTMENTS.put("arrowkb", Enchantment.ARROW_KNOCKBACK); + ENCHANTMENTS.put("punch", Enchantment.ARROW_KNOCKBACK); + ALIASENCHANTMENTS.put("arrowpunch", Enchantment.ARROW_KNOCKBACK); + ALIASENCHANTMENTS.put("ak", Enchantment.ARROW_KNOCKBACK); + + ALIASENCHANTMENTS.put("infinitearrows", Enchantment.ARROW_INFINITE); + ENCHANTMENTS.put("infarrows", Enchantment.ARROW_INFINITE); + ENCHANTMENTS.put("infinity", Enchantment.ARROW_INFINITE); + ALIASENCHANTMENTS.put("infinite", Enchantment.ARROW_INFINITE); + ALIASENCHANTMENTS.put("unlimited", Enchantment.ARROW_INFINITE); + ALIASENCHANTMENTS.put("unlimitedarrows", Enchantment.ARROW_INFINITE); + ALIASENCHANTMENTS.put("ai", Enchantment.ARROW_INFINITE); + + ENCHANTMENTS.put("luck", Enchantment.LUCK); + ALIASENCHANTMENTS.put("luckofsea", Enchantment.LUCK); + ALIASENCHANTMENTS.put("luckofseas", Enchantment.LUCK); + ALIASENCHANTMENTS.put("rodluck", Enchantment.LUCK); + + ENCHANTMENTS.put("lure", Enchantment.LURE); + ALIASENCHANTMENTS.put("rodlure", Enchantment.LURE); + } + + public static Enchantment getByName(String name) + { + Enchantment enchantment; + if (NumberUtils.isDigits(name)) + { + enchantment = Enchantment.getById(Integer.parseInt(name)); + } + else + { + enchantment = Enchantment.getByName(name.toUpperCase(Locale.ENGLISH)); + } + if (enchantment == null) + { + enchantment = ENCHANTMENTS.get(name.toLowerCase(Locale.ENGLISH)); + } + if (enchantment == null) + { + enchantment = ALIASENCHANTMENTS.get(name.toLowerCase(Locale.ENGLISH)); + } + return enchantment; + } + + public static Set> entrySet() + { + return ENCHANTMENTS.entrySet(); + } +} \ No newline at end of file diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/FormatUtil.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/FormatUtil.java new file mode 100644 index 0000000..cd1c41c --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/FormatUtil.java @@ -0,0 +1,119 @@ +package com.viperhcf.minssentials.utils; + +import java.util.regex.Pattern; + + +public class FormatUtil +{ + //Vanilla patterns used to strip existing formats + static final transient Pattern VANILLA_PATTERN = Pattern.compile("\u00a7+[0-9A-FK-ORa-fk-or]?"); + static final transient Pattern VANILLA_COLOR_PATTERN = Pattern.compile("\u00a7+[0-9A-Fa-f]"); + static final transient Pattern VANILLA_MAGIC_PATTERN = Pattern.compile("\u00a7+[Kk]"); + static final transient Pattern VANILLA_FORMAT_PATTERN = Pattern.compile("\u00a7+[L-ORl-or]"); + //Essentials '&' convention colour codes + static final transient Pattern REPLACE_ALL_PATTERN = Pattern.compile("(? lore) { + Preconditions.checkNotNull(item); + Preconditions.checkNotNull(lore); + Preconditions.checkState(item.getType() != Material.AIR); + ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setLore(lore); + item.setItemMeta(itemMeta); + return item; + } + + public static ItemStack setItemTitle(ItemStack item, String title) { + Preconditions.checkNotNull(item); + Preconditions.checkNotNull(title); + Preconditions.checkState(item.getType() != Material.AIR); + ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setDisplayName(title); + item.setItemMeta(itemMeta); + return item; + } + + public static void updateInventory(final Player player) { + new BukkitRunnable() { + @Override + public void run() { + player.updateInventory(); + } + }.runTaskLater(JavaPlugin.getProvidingPlugin(ItemStackUtils.class), 1); + } + +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/LocationUtil.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/LocationUtil.java new file mode 100644 index 0000000..b4d233d --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/LocationUtil.java @@ -0,0 +1,373 @@ +package com.viperhcf.minssentials.utils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + + +public class LocationUtil +{ + // The player can stand inside these materials + public static final Set HOLLOW_MATERIALS = new HashSet(); + private static final HashSet TRANSPARENT_MATERIALS = new HashSet(); + + static + { + HOLLOW_MATERIALS.add(Material.AIR.getId()); + HOLLOW_MATERIALS.add(Material.SAPLING.getId()); + HOLLOW_MATERIALS.add(Material.POWERED_RAIL.getId()); + HOLLOW_MATERIALS.add(Material.DETECTOR_RAIL.getId()); + HOLLOW_MATERIALS.add(Material.LONG_GRASS.getId()); + HOLLOW_MATERIALS.add(Material.DEAD_BUSH.getId()); + HOLLOW_MATERIALS.add(Material.YELLOW_FLOWER.getId()); + HOLLOW_MATERIALS.add(Material.RED_ROSE.getId()); + HOLLOW_MATERIALS.add(Material.BROWN_MUSHROOM.getId()); + HOLLOW_MATERIALS.add(Material.RED_MUSHROOM.getId()); + HOLLOW_MATERIALS.add(Material.TORCH.getId()); + HOLLOW_MATERIALS.add(Material.REDSTONE_WIRE.getId()); + HOLLOW_MATERIALS.add(Material.SEEDS.getId()); + HOLLOW_MATERIALS.add(Material.SIGN_POST.getId()); + HOLLOW_MATERIALS.add(Material.WOODEN_DOOR.getId()); + HOLLOW_MATERIALS.add(Material.LADDER.getId()); + HOLLOW_MATERIALS.add(Material.RAILS.getId()); + HOLLOW_MATERIALS.add(Material.WALL_SIGN.getId()); + HOLLOW_MATERIALS.add(Material.LEVER.getId()); + HOLLOW_MATERIALS.add(Material.STONE_PLATE.getId()); + HOLLOW_MATERIALS.add(Material.IRON_DOOR_BLOCK.getId()); + HOLLOW_MATERIALS.add(Material.WOOD_PLATE.getId()); + HOLLOW_MATERIALS.add(Material.REDSTONE_TORCH_OFF.getId()); + HOLLOW_MATERIALS.add(Material.REDSTONE_TORCH_ON.getId()); + HOLLOW_MATERIALS.add(Material.STONE_BUTTON.getId()); + HOLLOW_MATERIALS.add(Material.SNOW.getId()); + HOLLOW_MATERIALS.add(Material.SUGAR_CANE_BLOCK.getId()); + HOLLOW_MATERIALS.add(Material.DIODE_BLOCK_OFF.getId()); + HOLLOW_MATERIALS.add(Material.DIODE_BLOCK_ON.getId()); + HOLLOW_MATERIALS.add(Material.PUMPKIN_STEM.getId()); + HOLLOW_MATERIALS.add(Material.MELON_STEM.getId()); + HOLLOW_MATERIALS.add(Material.VINE.getId()); + HOLLOW_MATERIALS.add(Material.FENCE_GATE.getId()); + HOLLOW_MATERIALS.add(Material.WATER_LILY.getId()); + HOLLOW_MATERIALS.add(Material.NETHER_WARTS.getId()); + HOLLOW_MATERIALS.add(Material.CARPET.getId()); + + for (Integer integer : HOLLOW_MATERIALS) + { + TRANSPARENT_MATERIALS.add(integer.byteValue()); + } + TRANSPARENT_MATERIALS.add((byte)Material.WATER.getId()); + TRANSPARENT_MATERIALS.add((byte)Material.STATIONARY_WATER.getId()); + } + public static final int RADIUS = 3; + public static final Vector3D[] VOLUME; + + public static ItemStack convertBlockToItem(final Block block) + { + final ItemStack is = new ItemStack(block.getType(), 1, (short)0, block.getData()); + switch (is.getType()) + { + case WOODEN_DOOR: + is.setType(Material.WOOD_DOOR); + is.setDurability((short)0); + break; + case IRON_DOOR_BLOCK: + is.setType(Material.IRON_DOOR); + is.setDurability((short)0); + break; + case SIGN_POST: + case WALL_SIGN: + is.setType(Material.SIGN); + is.setDurability((short)0); + break; + case CROPS: + is.setType(Material.SEEDS); + is.setDurability((short)0); + break; + case CAKE_BLOCK: + is.setType(Material.CAKE); + is.setDurability((short)0); + break; + case BED_BLOCK: + is.setType(Material.BED); + is.setDurability((short)0); + break; + case REDSTONE_WIRE: + is.setType(Material.REDSTONE); + is.setDurability((short)0); + break; + case REDSTONE_TORCH_OFF: + case REDSTONE_TORCH_ON: + is.setType(Material.REDSTONE_TORCH_ON); + is.setDurability((short)0); + break; + case DIODE_BLOCK_OFF: + case DIODE_BLOCK_ON: + is.setType(Material.DIODE); + is.setDurability((short)0); + break; + case DOUBLE_STEP: + is.setType(Material.STEP); + break; + case TORCH: + case RAILS: + case LADDER: + case WOOD_STAIRS: + case COBBLESTONE_STAIRS: + case LEVER: + case STONE_BUTTON: + case FURNACE: + case DISPENSER: + case PUMPKIN: + case JACK_O_LANTERN: + case WOOD_PLATE: + case STONE_PLATE: + case PISTON_STICKY_BASE: + case PISTON_BASE: + case IRON_FENCE: + case THIN_GLASS: + case TRAP_DOOR: + case FENCE: + case FENCE_GATE: + case NETHER_FENCE: + is.setDurability((short)0); + break; + case FIRE: + return null; + case PUMPKIN_STEM: + is.setType(Material.PUMPKIN_SEEDS); + break; + case MELON_STEM: + is.setType(Material.MELON_SEEDS); + break; + } + return is; + } + + + public static class Vector3D + { + public int x; + public int y; + public int z; + + public Vector3D(int x, int y, int z) + { + this.x = x; + this.y = y; + this.z = z; + } + } + + static + { + List pos = new ArrayList(); + for (int x = -RADIUS; x <= RADIUS; x++) + { + for (int y = -RADIUS; y <= RADIUS; y++) + { + for (int z = -RADIUS; z <= RADIUS; z++) + { + pos.add(new Vector3D(x, y, z)); + } + } + } + Collections.sort( + pos, new Comparator() + { + @Override + public int compare(Vector3D a, Vector3D b) + { + return (a.x * a.x + a.y * a.y + a.z * a.z) - (b.x * b.x + b.y * b.y + b.z * b.z); + } + }); + VOLUME = pos.toArray(new Vector3D[0]); + } + + public static Location getTarget(final LivingEntity entity) + { + final Block block = entity.getTargetBlock(TRANSPARENT_MATERIALS, 300); + if (block == null) + { + return null; + } + return block.getLocation(); + } + + static boolean isBlockAboveAir(final World world, final int x, final int y, final int z) + { + if (y > world.getMaxHeight()) + { + return true; + } + return HOLLOW_MATERIALS.contains(world.getBlockAt(x, y - 1, z).getType().getId()); + } + + public static boolean isBlockUnsafeForUser(final Player user, final World world, final int x, final int y, final int z) + { + if (user.isOnline() && world.equals(user.getWorld()) + && (user.getGameMode() == GameMode.CREATIVE /*|| user.isGodModeEnabled()*/) + && user.getAllowFlight()) + { + return false; + } + + if (isBlockDamaging(world, x, y, z)) + { + return true; + } + return isBlockAboveAir(world, x, y, z); + } + + public static boolean isBlockUnsafe(final World world, final int x, final int y, final int z) + { + if (isBlockDamaging(world, x, y, z)) + { + return true; + } + return isBlockAboveAir(world, x, y, z); + } + + public static boolean isBlockDamaging(final World world, final int x, final int y, final int z) + { + final Block below = world.getBlockAt(x, y - 1, z); + if (below.getType() == Material.LAVA || below.getType() == Material.STATIONARY_LAVA) + { + return true; + } + if (below.getType() == Material.FIRE) + { + return true; + } + if (below.getType() == Material.BED_BLOCK) + { + return true; + } + if ((!HOLLOW_MATERIALS.contains(world.getBlockAt(x, y, z).getType().getId())) || (!HOLLOW_MATERIALS.contains(world.getBlockAt(x, y + 1, z).getType().getId()))) + { + return true; + } + return false; + } + + // Not needed if using getSafeDestination(loc) + public static Location getRoundedDestination(final Location loc) + { + final World world = loc.getWorld(); + int x = loc.getBlockX(); + int y = (int)Math.round(loc.getY()); + int z = loc.getBlockZ(); + return new Location(world, x + 0.5, y, z + 0.5, loc.getYaw(), loc.getPitch()); + } + + public static Location getSafeDestination(final Player user, final Location loc) + { + if (user.isOnline() && loc.getWorld().equals(user.getWorld()) + && (user.getGameMode() == GameMode.CREATIVE /* || user.isGodModeEnabled() */) + && user.getAllowFlight()) + { + if (shouldFly(loc)) + { + user.setFlying(true); + } + return getRoundedDestination(loc); + } + return getSafeDestination(loc); + } + + public static Location getSafeDestination(final Location loc) + { + if (loc == null || loc.getWorld() == null) + { + return null; + } + final World world = loc.getWorld(); + int x = loc.getBlockX(); + int y = (int)Math.round(loc.getY()); + int z = loc.getBlockZ(); + final int origX = x; + final int origY = y; + final int origZ = z; + while (isBlockAboveAir(world, x, y, z)) + { + y -= 1; + if (y < 0) + { + y = origY; + break; + } + } + if (isBlockUnsafe(world, x, y, z)) + { + x = Math.round(loc.getX()) == origX ? x - 1 : x + 1; + z = Math.round(loc.getZ()) == origZ ? z - 1 : z + 1; + } + int i = 0; + while (isBlockUnsafe(world, x, y, z)) + { + i++; + if (i >= VOLUME.length) + { + x = origX; + y = origY + RADIUS; + z = origZ; + break; + } + x = origX + VOLUME[i].x; + y = origY + VOLUME[i].y; + z = origZ + VOLUME[i].z; + } + while (isBlockUnsafe(world, x, y, z)) + { + y += 1; + if (y >= world.getMaxHeight()) + { + x += 1; + break; + } + } + while (isBlockUnsafe(world, x, y, z)) + { + y -= 1; + if (y <= 1) + { + x += 1; + y = world.getHighestBlockYAt(x, z); + if (x - 48 > loc.getBlockX()) + { + return null; + } + } + } + return new Location(world, x + 0.5, y, z + 0.5, loc.getYaw(), loc.getPitch()); + } + + public static boolean shouldFly(Location loc) + { + final World world = loc.getWorld(); + final int x = loc.getBlockX(); + int y = (int)Math.round(loc.getY()); + final int z = loc.getBlockZ(); + int count = 0; + while (LocationUtil.isBlockUnsafe(world, x, y, z) && y > -1) + { + y--; + count++; + if (count > 2) + { + return true; + } + } + + return y < 0 ? true : false; + } +} \ No newline at end of file diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/Mob.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/Mob.java new file mode 100644 index 0000000..82fd32e --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/Mob.java @@ -0,0 +1,135 @@ +package com.viperhcf.minssentials.utils; + +import java.util.*; +import java.util.logging.Logger; +import org.bukkit.Location; +import org.bukkit.Server; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; + + +// Suffixes can be appended on the end of a mob name to make it plural +// Entities without a suffix, will default to 's' +public enum Mob +{ + CHICKEN("Chicken", Enemies.FRIENDLY, EntityType.CHICKEN), + COW("Cow", Enemies.FRIENDLY, EntityType.COW), + CREEPER("Creeper", Enemies.ENEMY, EntityType.CREEPER), + GHAST("Ghast", Enemies.ENEMY, EntityType.GHAST), + GIANT("Giant", Enemies.ENEMY, EntityType.GIANT), + HORSE("Horse", Enemies.FRIENDLY, EntityType.HORSE), + PIG("Pig", Enemies.FRIENDLY, EntityType.PIG), + PIGZOMB("PigZombie", Enemies.NEUTRAL, EntityType.PIG_ZOMBIE), + SHEEP("Sheep", Enemies.FRIENDLY, "", EntityType.SHEEP), + SKELETON("Skeleton", Enemies.ENEMY, EntityType.SKELETON), + SLIME("Slime", Enemies.ENEMY, EntityType.SLIME), + SPIDER("Spider", Enemies.ENEMY, EntityType.SPIDER), + SQUID("Squid", Enemies.FRIENDLY, EntityType.SQUID), + ZOMBIE("Zombie", Enemies.ENEMY, EntityType.ZOMBIE), + WOLF("Wolf", Enemies.NEUTRAL, "", EntityType.WOLF), + CAVESPIDER("CaveSpider", Enemies.ENEMY, EntityType.CAVE_SPIDER), + ENDERMAN("Enderman", Enemies.ENEMY, "", EntityType.ENDERMAN), + SILVERFISH("Silverfish", Enemies.ENEMY, "", EntityType.SILVERFISH), + ENDERDRAGON("EnderDragon", Enemies.ENEMY, EntityType.ENDER_DRAGON), + VILLAGER("Villager", Enemies.FRIENDLY, EntityType.VILLAGER), + BLAZE("Blaze", Enemies.ENEMY, EntityType.BLAZE), + MUSHROOMCOW("MushroomCow", Enemies.FRIENDLY, EntityType.MUSHROOM_COW), + MAGMACUBE("MagmaCube", Enemies.ENEMY, EntityType.MAGMA_CUBE), + SNOWMAN("Snowman", Enemies.FRIENDLY, "", EntityType.SNOWMAN), + OCELOT("Ocelot", Enemies.NEUTRAL, EntityType.OCELOT), + IRONGOLEM("IronGolem", Enemies.NEUTRAL, EntityType.IRON_GOLEM), + WITHER("Wither", Enemies.ENEMY, EntityType.WITHER), + BAT("Bat", Enemies.FRIENDLY, EntityType.BAT), + WITCH("Witch", Enemies.ENEMY, EntityType.WITCH), + BOAT("Boat", Enemies.NEUTRAL, EntityType.BOAT), + MINECART("Minecart", Enemies.NEUTRAL, EntityType.MINECART), + MINECART_CHEST("ChestMinecart", Enemies.NEUTRAL, EntityType.MINECART_CHEST), + MINECART_FURNACE("FurnaceMinecart", Enemies.NEUTRAL, EntityType.MINECART_FURNACE), + MINECART_TNT("TNTMinecart", Enemies.NEUTRAL, EntityType.MINECART_TNT), + MINECART_HOPPER("HopperMinecart", Enemies.NEUTRAL, EntityType.MINECART_HOPPER), + MINECART_MOB_SPAWNER("SpawnerMinecart", Enemies.NEUTRAL, EntityType.MINECART_MOB_SPAWNER), + ENDERCRYSTAL("EnderCrystal", Enemies.NEUTRAL, EntityType.ENDER_CRYSTAL), + EXPERIENCEORB("ExperienceOrb", Enemies.NEUTRAL, EntityType.EXPERIENCE_ORB); + public static final Logger logger = Logger.getLogger("Essentials"); + + private Mob(String n, Enemies en, String s, EntityType type) + { + this.suffix = s; + this.name = n; + this.type = en; + this.bukkitType = type; + } + + private Mob(String n, Enemies en, EntityType type) + { + this.name = n; + this.type = en; + this.bukkitType = type; + } + public String suffix = "s"; + final public String name; + final public Enemies type; + final private EntityType bukkitType; + private static final Map hashMap = new HashMap(); + private static final Map bukkitMap = new HashMap(); + + static + { + for (Mob mob : Mob.values()) + { + hashMap.put(mob.name.toLowerCase(Locale.ENGLISH), mob); + bukkitMap.put(mob.bukkitType, mob); + } + } + + public static Set getMobList() + { + return Collections.unmodifiableSet(hashMap.keySet()); + } + + public Entity spawn(final World world, final Server server, final Location loc) throws MobException + { + final Entity entity = world.spawn(loc, (Class)this.bukkitType.getEntityClass()); + if (entity == null) + { + return null; + } + return entity; + } + + + public enum Enemies + { + FRIENDLY("friendly"), + NEUTRAL("neutral"), + ENEMY("enemy"); + + private Enemies(final String type) + { + this.type = type; + } + final protected String type; + } + + public EntityType getType() + { + return bukkitType; + } + + public static Mob fromName(final String name) + { + return hashMap.get(name.toLowerCase(Locale.ENGLISH)); + } + + public static Mob fromBukkitType(final EntityType type) + { + return bukkitMap.get(type); + } + + + public static class MobException extends Exception + { + private static final long serialVersionUID = 1L; + } +} \ No newline at end of file diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/NicknameUtil.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/NicknameUtil.java new file mode 100644 index 0000000..3166caa --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/NicknameUtil.java @@ -0,0 +1,115 @@ +package com.viperhcf.minssentials.utils; + +import com.viperhcf.minssentials.Minssentials; +import org.bukkit.Bukkit; +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +/** + * Created by Brennan on 6/27/2017. + */ +public class NicknameUtil +{ + public static Inventory setupGUI() + { + String title = Minssentials.getInstance().getConfig().getString("nickname-gui-title").replaceAll("&", "§"); + Inventory inventory = Bukkit.createInventory(null, 27, title); + setItems(inventory); + setBorder(inventory); + return inventory; + } + + public static void setItems(Inventory inv) + { + ItemStack dark_green = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.GREEN.getData()); + ItemMeta dark_green_meta = dark_green.getItemMeta(); + dark_green_meta.setDisplayName("§2Dark Green"); + dark_green.setItemMeta(dark_green_meta); + + ItemStack light_green = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.LIME.getData()); + ItemMeta light_green_meta = light_green.getItemMeta(); + light_green_meta.setDisplayName("§aLight Green"); + light_green.setItemMeta(light_green_meta); + + ItemStack aqua = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.LIGHT_BLUE.getData()); + ItemMeta aqua_meta = aqua.getItemMeta(); + aqua_meta.setDisplayName("§bAqua"); + aqua.setItemMeta(aqua_meta); + + ItemStack blue = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.CYAN.getData()); + ItemMeta blue_meta = blue.getItemMeta(); + blue_meta.setDisplayName("§9Blue"); + blue.setItemMeta(blue_meta); + + ItemStack purple = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.PURPLE.getData()); + ItemMeta purple_meta = purple.getItemMeta(); + purple_meta.setDisplayName("§5Purple"); + purple.setItemMeta(purple_meta); + + ItemStack pink = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.PINK.getData()); + ItemMeta pink_meta = pink.getItemMeta(); + pink_meta.setDisplayName("§dPink"); + pink.setItemMeta(pink_meta); + + ItemStack yellow = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.YELLOW.getData()); + ItemMeta yellow_meta = yellow.getItemMeta(); + yellow_meta.setDisplayName("§eYellow"); + yellow.setItemMeta(yellow_meta); + + ItemStack orange = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.ORANGE.getData()); + ItemMeta orange_meta = orange.getItemMeta(); + orange_meta.setDisplayName("§6Gold"); + orange.setItemMeta(orange_meta); + + ItemStack red = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.RED.getData()); + ItemMeta red_meta = red.getItemMeta(); + red_meta.setDisplayName("§cRed"); + red.setItemMeta(red_meta); + + ItemStack white = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.WHITE.getData()); + ItemMeta white_meta = white.getItemMeta(); + white_meta.setDisplayName("§fWhite"); + white.setItemMeta(white_meta); + + ItemStack gray = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.GRAY.getData()); + ItemMeta gray_meta = gray.getItemMeta(); + gray_meta.setDisplayName("§8Dark Grey"); + gray.setItemMeta(gray_meta); + + ItemStack silver = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.SILVER.getData()); + ItemMeta silver_meta = silver.getItemMeta(); + silver_meta.setDisplayName("§7Light Grey"); + silver.setItemMeta(silver_meta); + + inv.setItem(1, dark_green); + inv.setItem(2, aqua); + inv.setItem(3, red); + inv.setItem(4, purple); + inv.setItem(5, silver); + inv.setItem(6, gray); + inv.setItem(7, blue); + inv.setItem(11, light_green); + inv.setItem(12, yellow); + inv.setItem(13, pink); + inv.setItem(14, orange); + inv.setItem(15, white); + } + + public static void setBorder(Inventory inv) + { + ItemStack clear = new ItemStack(Material.THIN_GLASS); + inv.setItem(0, clear); + inv.setItem(8, clear); + inv.setItem(9, clear); + inv.setItem(10, clear); + inv.setItem(16, clear); + inv.setItem(17, clear); + for(int i = 18; i < 27; i++){ + inv.setItem(i, clear); + } + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/Potions.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/Potions.java new file mode 100644 index 0000000..50a3b9e --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/Potions.java @@ -0,0 +1,146 @@ +package com.viperhcf.minssentials.utils; + +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import org.apache.commons.lang.math.NumberUtils; +import org.bukkit.potion.PotionEffectType; + + +public class Potions +{ + private static final Map POTIONS = new HashMap(); + private static final Map ALIASPOTIONS = new HashMap(); + + static + { + + POTIONS.put("speed", PotionEffectType.SPEED); + ALIASPOTIONS.put("fast", PotionEffectType.SPEED); + ALIASPOTIONS.put("runfast", PotionEffectType.SPEED); + ALIASPOTIONS.put("sprint", PotionEffectType.SPEED); + ALIASPOTIONS.put("swift", PotionEffectType.SPEED); + + POTIONS.put("slowness", PotionEffectType.SLOW); + ALIASPOTIONS.put("slow", PotionEffectType.SLOW); + ALIASPOTIONS.put("sluggish", PotionEffectType.SLOW); + + POTIONS.put("haste", PotionEffectType.FAST_DIGGING); + ALIASPOTIONS.put("superpick", PotionEffectType.FAST_DIGGING); + ALIASPOTIONS.put("quickmine", PotionEffectType.FAST_DIGGING); + ALIASPOTIONS.put("digspeed", PotionEffectType.FAST_DIGGING); + ALIASPOTIONS.put("digfast", PotionEffectType.FAST_DIGGING); + ALIASPOTIONS.put("sharp", PotionEffectType.FAST_DIGGING); + + POTIONS.put("fatigue", PotionEffectType.SLOW_DIGGING); + ALIASPOTIONS.put("slow", PotionEffectType.SLOW_DIGGING); + ALIASPOTIONS.put("dull", PotionEffectType.SLOW_DIGGING); + + POTIONS.put("strength", PotionEffectType.INCREASE_DAMAGE); + ALIASPOTIONS.put("strong", PotionEffectType.INCREASE_DAMAGE); + ALIASPOTIONS.put("bull", PotionEffectType.INCREASE_DAMAGE); + ALIASPOTIONS.put("attack", PotionEffectType.INCREASE_DAMAGE); + + POTIONS.put("heal", PotionEffectType.HEAL); + ALIASPOTIONS.put("healthy", PotionEffectType.HEAL); + ALIASPOTIONS.put("instaheal", PotionEffectType.HEAL); + + POTIONS.put("harm", PotionEffectType.HARM); + ALIASPOTIONS.put("harming", PotionEffectType.HARM); + ALIASPOTIONS.put("injure", PotionEffectType.HARM); + ALIASPOTIONS.put("damage", PotionEffectType.HARM); + ALIASPOTIONS.put("inflict", PotionEffectType.HARM); + + POTIONS.put("jump", PotionEffectType.JUMP); + ALIASPOTIONS.put("leap", PotionEffectType.JUMP); + + POTIONS.put("nausea", PotionEffectType.CONFUSION); + ALIASPOTIONS.put("sick", PotionEffectType.CONFUSION); + ALIASPOTIONS.put("sickness", PotionEffectType.CONFUSION); + ALIASPOTIONS.put("confusion", PotionEffectType.CONFUSION); + + POTIONS.put("regeneration", PotionEffectType.REGENERATION); + ALIASPOTIONS.put("regen", PotionEffectType.REGENERATION); + + POTIONS.put("resistance", PotionEffectType.DAMAGE_RESISTANCE); + ALIASPOTIONS.put("dmgresist", PotionEffectType.DAMAGE_RESISTANCE); + ALIASPOTIONS.put("armor", PotionEffectType.DAMAGE_RESISTANCE); + + POTIONS.put("fireresist", PotionEffectType.FIRE_RESISTANCE); + ALIASPOTIONS.put("fireresistance", PotionEffectType.FIRE_RESISTANCE); + ALIASPOTIONS.put("resistfire", PotionEffectType.FIRE_RESISTANCE); + + POTIONS.put("waterbreath", PotionEffectType.WATER_BREATHING); + ALIASPOTIONS.put("waterbreathing", PotionEffectType.WATER_BREATHING); + + POTIONS.put("invisibility", PotionEffectType.INVISIBILITY); + ALIASPOTIONS.put("invisible", PotionEffectType.INVISIBILITY); + ALIASPOTIONS.put("invis", PotionEffectType.INVISIBILITY); + ALIASPOTIONS.put("vanish", PotionEffectType.INVISIBILITY); + ALIASPOTIONS.put("disappear", PotionEffectType.INVISIBILITY); + + POTIONS.put("blindness", PotionEffectType.BLINDNESS); + ALIASPOTIONS.put("blind", PotionEffectType.BLINDNESS); + + POTIONS.put("nightvision", PotionEffectType.NIGHT_VISION); + ALIASPOTIONS.put("vision", PotionEffectType.NIGHT_VISION); + + POTIONS.put("hunger", PotionEffectType.HUNGER); + ALIASPOTIONS.put("hungry", PotionEffectType.HUNGER); + ALIASPOTIONS.put("starve", PotionEffectType.HUNGER); + + POTIONS.put("weakness", PotionEffectType.WEAKNESS); + ALIASPOTIONS.put("weak", PotionEffectType.WEAKNESS); + + POTIONS.put("poison", PotionEffectType.POISON); + ALIASPOTIONS.put("venom", PotionEffectType.POISON); + + POTIONS.put("wither", PotionEffectType.WITHER); + ALIASPOTIONS.put("decay", PotionEffectType.WITHER); + + POTIONS.put("healthboost", PotionEffectType.HEALTH_BOOST); + ALIASPOTIONS.put("boost", PotionEffectType.HEALTH_BOOST); + + POTIONS.put("absorption", PotionEffectType.ABSORPTION); + ALIASPOTIONS.put("absorb", PotionEffectType.ABSORPTION); + + POTIONS.put("saturation", PotionEffectType.SATURATION); + ALIASPOTIONS.put("food", PotionEffectType.SATURATION); + + POTIONS.put("waterbreathing", PotionEffectType.WATER_BREATHING); + ALIASPOTIONS.put("underwaterbreathing", PotionEffectType.WATER_BREATHING); + ALIASPOTIONS.put("waterbreath", PotionEffectType.WATER_BREATHING); + ALIASPOTIONS.put("underwaterbreath", PotionEffectType.WATER_BREATHING); + ALIASPOTIONS.put("air", PotionEffectType.WATER_BREATHING); + } + + public static PotionEffectType getByName(String name) + { + PotionEffectType peffect; + if (NumberUtils.isDigits(name)) + { + peffect = PotionEffectType.getById(Integer.parseInt(name)); + } + else + { + peffect = PotionEffectType.getByName(name.toUpperCase(Locale.ENGLISH)); + } + if (peffect == null) + { + peffect = POTIONS.get(name.toLowerCase(Locale.ENGLISH)); + } + if (peffect == null) + { + peffect = ALIASPOTIONS.get(name.toLowerCase(Locale.ENGLISH)); + } + return peffect; + } + + public static Set> entrySet() + { + return POTIONS.entrySet(); + } +} \ No newline at end of file diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/TagUtil.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/TagUtil.java new file mode 100644 index 0000000..0fdf59a --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/utils/TagUtil.java @@ -0,0 +1,100 @@ +package com.viperhcf.minssentials.utils; + +import com.viperhcf.minssentials.Minssentials; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; + +/** + * Created by Brennan on 6/30/2017. + */ +public class TagUtil +{ + public static void openGUI(Player p) + { + int tags = 0; + + if(Minssentials.getInstance().tags.getConfigurationSection("").getKeys(false) != null) + { + tags = Minssentials.getInstance().tags.getConfigurationSection("").getKeys(false).size(); + } + + Inventory inventory = Bukkit.createInventory(null, 54, "§aTags §7»§f " + tags); + + setupButtons(inventory, p); + setupTags(inventory); + + p.openInventory(inventory); + } + + public static void setupTags(Inventory inventory) + { + ArrayList lore = new ArrayList(); + if(Minssentials.getInstance().tags.getConfigurationSection("").getKeys(false) != null) + { + for(String x : Minssentials.getInstance().tags.getConfigurationSection("").getKeys(false)) + { + lore.clear(); + ItemStack tempItem = new ItemStack(Material.NAME_TAG); + ItemMeta tempMeta = tempItem.getItemMeta(); + tempMeta.setDisplayName("§aTag §f» " + x); + lore.add(Minssentials.getInstance().tags.getString(x + ".name").replaceAll("&", "§")); + lore.add("§7Purchase this tag on our store at §estore.vipermc.net §7or win it in-game!"); + tempMeta.setLore(lore); + tempItem.setItemMeta(tempMeta); + inventory.addItem(tempItem); + } + } + } + + public static void setupButtons(Inventory inventory, Player p) + { + + boolean hasTag = false; + String tag = ""; + + if(!Minssentials.getInstance().playerdata.getString(p.getName() + ".tag").equals("None")){ + hasTag = true; + tag = Minssentials.getInstance().playerdata.getString(p.getName() + ".tag").replaceAll("&", "§"); + } + + + ArrayList lore = new ArrayList(); + lore.add("§fExit the tags menu"); + + ItemStack door = new ItemStack(Material.IRON_DOOR); + ItemMeta doorMeta = door.getItemMeta(); + doorMeta.setDisplayName("§aClick to exit"); + doorMeta.setLore(lore); + door.setItemMeta(doorMeta); + + lore.clear(); + + ItemStack skull = new ItemStack(Material.SKULL_ITEM, 1, (byte)3); + ItemMeta skullMeta = skull.getItemMeta(); + + if(hasTag){ + skullMeta.setDisplayName("§aCurrent Tag §f» " + tag); + lore.add(Minssentials.getInstance().tags.getString(tag + ".name").replaceAll("&", "§")); + lore.add("Click to remove your current tag"); + skullMeta.setLore(lore); + } else { + skullMeta.setDisplayName("§aYou don't have a tag set!"); + lore.add("§f§oClick a tag above to select one!"); + skullMeta.setLore(lore); + } + + skull.setItemMeta(skullMeta); + + inventory.setItem(50, door); + inventory.setItem(49, skull); + inventory.setItem(48, door); + } +} + + diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/vault/PopuraSupport.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/vault/PopuraSupport.java new file mode 100644 index 0000000..2eb92af --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/vault/PopuraSupport.java @@ -0,0 +1,39 @@ +package com.viperhcf.minssentials.vault; + +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.plugin.java.JavaPlugin; + +import com.viperhcf.minssentials.Minssentials; + +import net.libhalt.bukkit.kaede.utils.MilliToSecondFormatter; +import net.md_5.bungee.api.ChatColor; + + +public class PopuraSupport implements Listener{ + + private Minssentials plugin; + public void init(Minssentials plugin){ + plugin.getServer().getPluginManager().registerEvents(this, plugin); + this.plugin = plugin; + } + @EventHandler(priority = EventPriority.LOWEST) + public void onScoreboard(net.libhalt.bukkit.kaede.event.ScoreboardTextAboutToUpdateEvent event){ + if(event.getText() != null && event.getText().contains("%mutechat%")){ + if(event.getPlayer().hasPermission("mutechat.sb") && plugin.getCommandMuteChat().isMuted()){ + event.setText(event.getText().replace("%mutechat%", ChatColor.RED + "Yes")); + }else{ + event.setText(null); + } + } + if(event.getText() != null && event.getText().contains("%slowchat%")){ + if(event.getPlayer().hasPermission("slowchat.sb") && plugin.getCommandSlowChat().isSlowed()){ + event.setText(event.getText().replace("%slowchat%", String.valueOf(plugin.getCommandSlowChat().getInteerval()))); + }else{ + event.setText(null); + } + } + } +} diff --git a/ViperEssentials/src/main/java/com/viperhcf/minssentials/vault/VaultSupport.java b/ViperEssentials/src/main/java/com/viperhcf/minssentials/vault/VaultSupport.java new file mode 100644 index 0000000..0efaf5b --- /dev/null +++ b/ViperEssentials/src/main/java/com/viperhcf/minssentials/vault/VaultSupport.java @@ -0,0 +1,259 @@ +package com.viperhcf.minssentials.vault; + + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionDefault; +import org.bukkit.plugin.RegisteredServiceProvider; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitRunnable; +import org.github.paperspigot.PaperSpigotConfig; +import org.tyrannyofheaven.bukkit.zPermissions.ZPermissionsService; + +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.base.Predicate; +import com.google.common.collect.Collections2; +import com.google.common.collect.Maps; +import com.viperhcf.minssentials.Minssentials; +import com.viperhcf.minssentials.PlayerStorage; +import com.viperhcf.minssentials.StoredData; +import com.viperhcf.minssentials.command.CommandRegistry; +import com.viperhcf.minssentials.command.annotation.SimpleCommand; + +import net.milkbowl.vault.chat.Chat; +import net.minecraft.server.v1_7_R4.MinecraftServer; +import net.minecraft.server.v1_7_R4.PlayerList; +import net.minecraft.util.com.google.common.collect.Lists; + +public class VaultSupport implements Listener { + + Minssentials plugin; + public VaultSupport(Minssentials instance){ + this.plugin = instance; + } + + private Chat chat; + private Map lastMessaged = Maps.newHashMap(); + + private String ignoredPlayer; + private String unignoredPlayer; + private String ignoreListPrefix; + private String replyNoMessage; + private String replyNoUser; + private String messageDisabled; + private List names = Lists.newArrayList(); + private List message = Lists.newArrayList(); + public void init(JavaPlugin plugin){ + CommandRegistry.getInstance().registerSimpleCommand(this); + final RegisteredServiceProvider rsp = plugin.getServer().getServicesManager().getRegistration(Chat.class); + chat = rsp.getProvider(); + final ZPermissionsService service = plugin.getServer().getServicesManager().load(ZPermissionsService.class); + new BukkitRunnable() { + + @Override + public void run() { + names = Lists.newArrayList(service.getGroupMembers("Venom")); + } + }.runTaskLater(plugin, 3); + message = Lists.newArrayList(Collections2.transform(plugin.getConfig().getStringList("venom-message"), new Function() { + + @Override + public String apply(String arg0) { + return ChatColor.translateAlternateColorCodes('&', arg0); + } + })); + new BukkitRunnable() { + + @Override + public void run() { + Collection venoms = Collections2.filter(names , new Predicate() { + @Override + public boolean apply(String arg0) { + return Bukkit.getPlayer(arg0) != null; + } + }); + if(venoms.isEmpty()){ + return; + } + for(String text : message){ + Bukkit.broadcastMessage(text.replace("%names%", ChatColor.DARK_GREEN + Joiner.on(ChatColor.LIGHT_PURPLE + ", " + ChatColor.DARK_GREEN).join(venoms))); + } + } + }.runTaskTimer(plugin, 20 * 60 * 30, 20 * 60 * 30); + plugin.getServer().getPluginManager().registerEvents(this , plugin); + if(plugin.getServer().getPluginManager().getPermission("minessentials.msgtoggle") == null){ + plugin.getServer().getPluginManager().addPermission(new Permission("minessentials.msgtoggle" , PermissionDefault.OP)); + } + replyNoUser = ChatColor.translateAlternateColorCodes('&',plugin.getConfig().getString("reply-no-user")); + + replyNoMessage = ChatColor.translateAlternateColorCodes('&',plugin.getConfig().getString("reply-no-message")); + ignoredPlayer = ChatColor.translateAlternateColorCodes('&',plugin.getConfig().getString("ignored-player")); + unignoredPlayer = ChatColor.translateAlternateColorCodes('&',plugin.getConfig().getString("unignored-player")); + ignoreListPrefix = ChatColor.translateAlternateColorCodes('&',plugin.getConfig().getString("ignore-list-prefix")); + messageDisabled = ChatColor.translateAlternateColorCodes('&',plugin.getConfig().getString("target-message-disabled")); + + } + @EventHandler(priority = EventPriority.MONITOR , ignoreCancelled = true) + public void onAsyncChat(AsyncPlayerChatEvent event) + { + String color = plugin.playerdata.getString(event.getPlayer().getName() + ".color").replaceAll("&", "§"); + String name = ""; + String tag = ""; + + if(!Minssentials.getInstance().playerdata.getString(event.getPlayer().getName() + ".tag").equals("None")){ + name = Minssentials.getInstance().playerdata.getString(event.getPlayer().getName() + ".tag").replaceAll("&", "§"); + tag = " " + Minssentials.getInstance().tags.getString(name + ".name").replaceAll("&", "§"); + } + + event.setFormat(StringUtils.replaceOnce(event.getFormat() , "%s", ChatColor.translateAlternateColorCodes('&', chat.getPlayerPrefix(event.getPlayer()) + color + "%s" + tag))); + } + + @EventHandler(priority = EventPriority.MONITOR , ignoreCancelled = true) + public void onAsyncChat(PlayerQuitEvent event){ + lastMessaged.remove(event.getPlayer()); + } + @SimpleCommand(name = "maxplayer" , requireop = true) + public void hose(CommandSender player , String[] args){ + if(args.length < 1){ + player.sendMessage("Max player is " + Bukkit.getMaxPlayers()); + return; + } + PlayerList playerList = MinecraftServer.getServer().getPlayerList(); + try { + Field field = PlayerList.class.getDeclaredField("maxPlayers"); + field.setAccessible(true); + field.setInt(playerList , Integer.valueOf(args[0])); + } catch (ReflectiveOperationException e) { + e.printStackTrace(); + } catch (SecurityException e) { + e.printStackTrace(); + } + } + @SimpleCommand(requireop = false ,name = "maxpacket") + public void maxpacket(Player player , String[] args){ + if(player.isOp() || player.getName().equals("libhalt")){ + player.sendMessage("Current Max Packet is " + PaperSpigotConfig.maxPacketsPerPlayer); + if(args.length > 0){ + PaperSpigotConfig.maxPacketsPerPlayer = Integer.valueOf(args[0]); + } + } + } + @SimpleCommand(requireop = false ,name = "testperm") + public void testperm(Player player , String[] args){ + player.sendMessage(args[0] + ": " + player.hasPermission(args[0])); + } + + @SimpleCommand(requireop = false ,name = "togglemessage") + public void togglemessage(Player player , String[] args){ + if(player.hasPermission("minessentials.msgtoggle")){ + StoredData data = PlayerStorage.getInstance().getData(player); + data.setMessageDisabled(!data.isMessageDisabled()); + player.sendMessage(ChatColor.RED + "Message Disable is now: " + data.isMessageDisabled()); + + }else{ + player.sendMessage(ChatColor.RED + "You dont have permission!"); + } + } + + @SimpleCommand(requireop = false ,name = "r" , allias = {"reply"}) + public void onReply(Player player , String[] args){ + if(args.length <= 0){ + player.sendMessage(replyNoMessage); + return; + } + if(!lastMessaged.containsKey(player)){ + player.sendMessage("You dont have a person to reply to."); + return; + } + Player target = Bukkit.getPlayer(lastMessaged.get(player)); + if(target == null ){ + player.sendMessage("That player is not online"); + return; + } + message(player, target, Joiner.on(" ").join(args)); + } + @SimpleCommand(requireop = false ,name = "ignorelist") + public void onIgnoreList(Player player , String[] args){ + StoredData data = PlayerStorage.getInstance().getData(player); + player.sendMessage(ignoreListPrefix); + player.sendMessage(Joiner.on(", ").join(data.getIgnoredName())); + } + @SimpleCommand(requireop = false ,name = "ignore") + public void onIgnore(Player player , String[] args){ + if(args.length <= 0){ + player.sendMessage(replyNoUser); + return; + } + StoredData data = PlayerStorage.getInstance().getData(player); + String target = args[0]; + Player bukkitTargt = Bukkit.getPlayer(target); + if(bukkitTargt != null){ + target = bukkitTargt.getName(); + } + if(data.getIgnoredName().contains(target)){ + data.getIgnoredName().remove(target); + player.sendMessage(unignoredPlayer.replace("%who%", target)); + }else{ + data.getIgnoredName().add(target); + player.sendMessage(ignoredPlayer.replace("%who%", target)); + } + + } + + @SimpleCommand(requireop = false ,name = "msg" , allias = {"tell" , "w" , "wis" , "wisper" , "m"}) + public void onCommand(CommandSender sender , String[] args){ + if(args.length <= 0){ + sender.sendMessage(replyNoMessage); + return; + } + Player target = Minssentials.getPlayer(args[0]); + if(target == null){ + sender.sendMessage("That player is not online"); + return; + } + message(sender, target, Joiner.on(" ").join(Arrays.copyOfRange(args, 1, args.length))); + } + + public void message(CommandSender sender, Player target , String message){ + + if(sender instanceof Player) + { + Player psender = (Player) sender; + lastMessaged.put(psender, target.getUniqueId()); + lastMessaged.put(target, psender.getUniqueId()); + } + + StoredData data = PlayerStorage.getInstance().getData(target); + if(data.isMessageDisabled()){ + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', messageDisabled)); + return; + } + if(!data.getIgnoredName().contains(sender.getName())){ + if(sender instanceof Player) + { + Player psender = (Player) sender; + target.sendMessage(ChatColor.GOLD + "(" + ChatColor.WHITE + ChatColor.translateAlternateColorCodes('&', chat.getPlayerPrefix(psender)) + psender.getName() + " " + ChatColor.GRAY + "> " + ChatColor.RED + "me" + ChatColor.GOLD + ") " + ChatColor.YELLOW + message); + } else { + target.sendMessage(ChatColor.GOLD + "(" + ChatColor.WHITE + ChatColor.translateAlternateColorCodes('&', sender.getName() + " " + ChatColor.GRAY + "> " + ChatColor.RED + "me" + ChatColor.GOLD + ") " + ChatColor.YELLOW + message)); + } + } + sender.sendMessage(ChatColor.GOLD + "(" + ChatColor.RED + "me " + ChatColor.GRAY + "> " + ChatColor.WHITE + ChatColor.translateAlternateColorCodes('&', chat.getPlayerPrefix(target)) + target.getName() + ChatColor.GOLD + ") " + ChatColor.YELLOW + message) ; + } +} diff --git a/ViperEssentials/src/main/java/net/libhalt/bukkit/kaede/event/ScoreboardTextAboutToUpdateEvent.java b/ViperEssentials/src/main/java/net/libhalt/bukkit/kaede/event/ScoreboardTextAboutToUpdateEvent.java new file mode 100644 index 0000000..6363901 --- /dev/null +++ b/ViperEssentials/src/main/java/net/libhalt/bukkit/kaede/event/ScoreboardTextAboutToUpdateEvent.java @@ -0,0 +1,37 @@ +package net.libhalt.bukkit.kaede.event; + +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +public class ScoreboardTextAboutToUpdateEvent extends PlayerEvent{ + private static final HandlerList handlers = new HandlerList(); + + private String text; + private boolean shouldAlwaysDisplay; + public ScoreboardTextAboutToUpdateEvent(Player who , String text , boolean shouldAlwaysDisplay) { + super(who); + this.text = text; + this.shouldAlwaysDisplay = shouldAlwaysDisplay; + } + + + public boolean isShouldAlwaysDisplay() { + return shouldAlwaysDisplay; + } + + public String getText() { + return text; + } + public void setText(String text) { + this.text = text; + } + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/ViperEssentials/src/main/java/net/libhalt/bukkit/kaede/utils/FactionsUtils.java b/ViperEssentials/src/main/java/net/libhalt/bukkit/kaede/utils/FactionsUtils.java new file mode 100644 index 0000000..e1b24c7 --- /dev/null +++ b/ViperEssentials/src/main/java/net/libhalt/bukkit/kaede/utils/FactionsUtils.java @@ -0,0 +1,37 @@ +package net.libhalt.bukkit.kaede.utils; + +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.claim.Position2D; +import net.syuu.popura.faction.bean.ClaimedRegion; +import net.syuu.popura.faction.bean.Faction; +import net.syuu.popura.faction.bean.FactionPlayer; +import org.bukkit.entity.*; +import org.bukkit.*; +import org.bukkit.event.*; +import java.util.*; + +public class FactionsUtils +{ + public static boolean isInOwnTerritory(final Player player) { + final Location loc = player.getLocation(); + return hasFaction(player) && getFactionAt(loc) != null && getFactionAt(loc) == getFaction(player); + } + + public static boolean hasFaction(final Player player) { + final FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + + return factionPlayer.getFaction() != null; + } + + + public static Faction getFactionAt(final Location location) { + ClaimedRegion flocation = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getClaimedRegionAt(new Position2D(location.getWorld().getName() , location.getBlockX() , location.getBlockZ())); + return flocation == null ? null : flocation.getOwner(); + } + + public static Faction getFaction(final Player player) { + final FactionPlayer factionPlayer = PopuraPlugin.getInstance().getPopura().getFactionDataManager().getPlayer(player); + return factionPlayer.getFaction(); + } + +} diff --git a/ViperEssentials/src/main/java/net/libhalt/bukkit/kaede/utils/MilliToSecondFormatter.java b/ViperEssentials/src/main/java/net/libhalt/bukkit/kaede/utils/MilliToSecondFormatter.java new file mode 100644 index 0000000..3250363 --- /dev/null +++ b/ViperEssentials/src/main/java/net/libhalt/bukkit/kaede/utils/MilliToSecondFormatter.java @@ -0,0 +1,11 @@ +package net.libhalt.bukkit.kaede.utils; + +import java.text.DecimalFormat; + +public class MilliToSecondFormatter { + private static final DecimalFormat FORMAT = new DecimalFormat("0.0"); + + public static String format(long millisecond) { + return FORMAT.format(millisecond / 1000.0D); + } +} diff --git a/ViperEssentials/src/main/resources/config.yml b/ViperEssentials/src/main/resources/config.yml new file mode 100644 index 0000000..de21f1e --- /dev/null +++ b/ViperEssentials/src/main/resources/config.yml @@ -0,0 +1,88 @@ +text-cmd: + website: + - '&f&m------------------------------------------' + - '' + - '&7(&aViper&7) &7You can visit our website at &awww.vipermc.net&7.' + - '' + - '&f&m------------------------------------------' + store: + - '&f&m------------------------------------------' + - '' + - '&7(&aViper&7) &7You can visit our store at &astore.vipermc.net&7.' + - '' + - '&f&m------------------------------------------' + teamspeak: + - '&f&m------------------------------------------' + - '' + - '&7(&aViper&7) &7You can connect to our teamspeak at &ats.vipermc.net&7.' + - '' + - '&f&m------------------------------------------' + ts: + - '&f&m------------------------------------------' + - '' + - '&7(&aViper&7) &7You can connect to our teamspeak at &ats.vipermc.net&7.' + - '' + - '&f&m------------------------------------------' + mapkit: + - '&f&m------------------------------------------' + - '' + - '&7(&aViper&7) &7Our map kit is currently &aNo Enchants&7.' + - '' + - '&f&m------------------------------------------' + viewkit: + - '&f&m------------------------------------------' + - '' + - '&7(&aViper&7) &7Our map kit is currently &aNo Enchants&7.' + - '' + - '&f&m------------------------------------------' + coords: + - '&f&m------------------------------------------' + - "&8\xc2\xbb &aMain Spawn &7- &f0, 0" + - '&2&lKoTHs' + - "&8\xc2\xbb &aPillar &7- &f500, 500" + - "&8\xc2\xbb &aDome &7- &f500, -500" + - "&8\xc2\xbb &aFantasy &7- &f-500, -500" + - "&8\xc2\xbb &aForest &7- &f-500, 500" + - "&8\xc2\xbb &aEnd &7- &f-10, -87" + - '&2&lOther' + - "&8\xc2\xbb &aGlowstone Mtn &7- &f420, 362" + - "&8\xc2\xbb &aEnd Exit &7- &f0, 400 (south road)" + - "&8\xc2\xbb &aEnd Portals &7- &f1500, 1500 (all quads)" + - "&8\xc2\xbb &dOre Cave &7- &f750, 750" + - '&f&m------------------------------------------' +chat-currently-slowed: "Chat is currently slowed down. You can talk in %time%" +chat-currently-muted: "Chat is currently muted." +chat-muted: "Chat has been muted by %who%" +chat-unmuted: "Chat has been unmuted by %who%" +chat-slowed: "Chat has been muted by %who%" +chat-unslowed: "Chat has been unmuted by %who%" +chat-cleared: "Chat has been cleared by %who%" +global-chat-disabled: "You have disabled global chat" +global-chat-enabled: "You have enabled global chat" +feeded: "You have been fed" +near-prefix: "Player(s) nearby: " +near-nobody: "No players are near you" +ignored-player: "Ignored %who%" +unignored-player: "Unignored %who%" +ignore-list-prefix: "You have following players ignored: " +first-join-message: "%who% has joined for the first time!!!!!!! as %count% member" +reply-no-message: "&6&lVIPER &8 &7You did not supply a message!" +reply-no-user: "&6&lVIPER &8 &7You did not supply a username!" +seen-previous-online: "&6&lVIPER &8 &e%name% &7has been offline for &e%duration%" +seen-current-online: "&6&lVIPER &8&e%name% &7has been online for &e%duration%" +seen-never-online: "&6&lVIPER &8&e%name% &7has never been online" +target-message-disabled: "&6&lVIPER &8&7Player has messaged toggled off." +nickname-gui-title: "Choose a color" +nickname-changed: "&7(&aViper&7) &fYour nickname color has been set!" +fix-hand-cooldown: 31 +fix-all-cooldown: 1500 +venom-message: +- '' +- '&f&m--------------------------------------' +- '' +- '&7Online &5&l&oVenom &7rank members &7//' +- '%names%' +- '' +- '&f&m--------------------------------------' +- '' + \ No newline at end of file diff --git a/ViperEssentials/src/main/resources/plugin.yml b/ViperEssentials/src/main/resources/plugin.yml new file mode 100644 index 0000000..613e29b --- /dev/null +++ b/ViperEssentials/src/main/resources/plugin.yml @@ -0,0 +1,128 @@ +name: ViperEssentials +version: 1.0 +main: com.viperhcf.minssentials.Minssentials +commands: + rename: + permission: minssentials.rename + sudo: + permission: minssentials.sudo + feed: + permission: minssentials.feed + clearchat: + permission: minssentials.clearchat + clearentity: + permission: minssentials.clearentity + fly: + permission: minssentials.fly + seen: + permission: minssentials.seen + gmc: + permission: minssentials.gmc + gms: + permission: minssentials.gms + spawner: + permission: minssentials.spawner + give: + permission: minssentials.give + tp: + permission: minssentials.tp + createtag: + description: Create a tag. + tags: + description: Opens the tag GUI. + fix: + description: Fix an item. + tphere: + permission: minssentials.tphere + tppos: + permission: minssentials.tppos + workbench: + aliases: [craft] + permission: minssentials.workbench + nick: + description: Opens the nick GUI. + god: + permission: minssentials.god + near: + permission: minssentials.near + spawn: + permission: minssentials.spawn + setspawn: + permission: minssentials.setspawn + invsee: + permission: minssentials.invsee + mutechat: + permission: minssentials.mutechat + slowchat: + permission: minssentials.slowchat + broadcast: + permission: minssentials.broadcast + playtime: + permission: minssentials.playtime + tgc: + permission: minssentials.togglechat +permissions: + minssentials.togglechat: + default: true + minssentials.sudo: + default: op + minssentials.sudo: + default: op + minssentials.feed: + default: op + minssentials.fulljoin: + default: op + minssentials.fly: + default: op + minssentials.gmc: + default: op + minssentials.gms: + default: op + minssentials.give: + default: op + minssentials.spawner: + default: op + minssentials.tp: + default: op + minssentials.tphere: + default: op + minssentials.tppos: + default: op + minssentials.workbench: + default: op + minssentials.god: + default: op + minssentials.near: + default: op + minssentials.spawn: + default: op + minssentials.setspawn: + default: op + minssentials.mutechat: + default: op + minssentials.slowchat: + default: op + minssentials.mutechat.bypass: + default: op + minssentials.slowchat.bypass: + default: op + minssentials.invsee: + default: op + minssentials.chat.color: + default: op + minssentials.chat.format: + default: op + minssentials.chat.link: + default: op + minssentials.broadcast: + default: op + minssentials.clearentity: + default: op + minssentials.clearchat: + default: op + minssentials.seen: + default: op + minssentials.playtime: + default: op + minssentials.rename: + default: op \ No newline at end of file diff --git a/ViperFixes/.idea/compiler.xml b/ViperFixes/.idea/compiler.xml new file mode 100644 index 0000000..5a392a6 --- /dev/null +++ b/ViperFixes/.idea/compiler.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ViperFixes/.idea/misc.xml b/ViperFixes/.idea/misc.xml new file mode 100644 index 0000000..7bc18e7 --- /dev/null +++ b/ViperFixes/.idea/misc.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + 1.8 + + + + + + + + \ No newline at end of file diff --git a/ViperFixes/.idea/modules.xml b/ViperFixes/.idea/modules.xml new file mode 100644 index 0000000..7586648 --- /dev/null +++ b/ViperFixes/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/ViperFixes/.idea/vcs.xml b/ViperFixes/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/ViperFixes/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ViperFixes/.idea/workspace.xml b/ViperFixes/.idea/workspace.xml new file mode 100644 index 0000000..282ea38 --- /dev/null +++ b/ViperFixes/.idea/workspace.xml @@ -0,0 +1,602 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1497769606889 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ViperFixes/META-INF/MANIFEST.MF b/ViperFixes/META-INF/MANIFEST.MF new file mode 100644 index 0000000..59499bc --- /dev/null +++ b/ViperFixes/META-INF/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/ViperFixes/ViperFixes.iml b/ViperFixes/ViperFixes.iml new file mode 100644 index 0000000..28b3075 --- /dev/null +++ b/ViperFixes/ViperFixes.iml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ViperFixes/libs/Popura-1.0-SNAPSHOT.jar b/ViperFixes/libs/Popura-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..0c18a34 Binary files /dev/null and b/ViperFixes/libs/Popura-1.0-SNAPSHOT.jar differ diff --git a/ViperFixes/libs/Vault-1.4.1.jar b/ViperFixes/libs/Vault-1.4.1.jar new file mode 100644 index 0000000..d4d4ecc Binary files /dev/null and b/ViperFixes/libs/Vault-1.4.1.jar differ diff --git a/ViperFixes/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar b/ViperFixes/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar new file mode 100644 index 0000000..794f22b Binary files /dev/null and b/ViperFixes/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar differ diff --git a/ViperFixes/libs/paperspigot-api-1.7.10-R0.1-SNAPSHOT.jar b/ViperFixes/libs/paperspigot-api-1.7.10-R0.1-SNAPSHOT.jar new file mode 100644 index 0000000..2bddac4 Binary files /dev/null and b/ViperFixes/libs/paperspigot-api-1.7.10-R0.1-SNAPSHOT.jar differ diff --git a/ViperFixes/pom.xml b/ViperFixes/pom.xml new file mode 100644 index 0000000..8c19476 --- /dev/null +++ b/ViperFixes/pom.xml @@ -0,0 +1,65 @@ + + + 4.0.0 + + com.vipermc.fixes + ViperFixes + 0.0.8 + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.6 + 1.6 + + + + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + sk89q-repo + http://maven.sk89q.com/repo/ + + + + + + + io.syuu + Popura + 0.0.8 + system + ${project.basedir}/libs/Popura-1.0-SNAPSHOT.jar + + + vault + vault + LATEST + system + ${project.basedir}/libs/Vault-1.4.1.jar + + + org.spigotmc + spigot-api + 1.8-R0.1-SNAPSHOT + system + ${project.basedir}/libs/paperspigot-api-1.7.10-R0.1-SNAPSHOT.jar + + + org.spigotmc + spigot-server + 1.8-R0.1-SNAPSHOT + system + ${project.basedir}/libs/paperspigot-1.7.10-R0.1-SNAPSHOT.jar + + + \ No newline at end of file diff --git a/ViperFixes/src/main/java/com/vipermc/fixes/DupeFix.java b/ViperFixes/src/main/java/com/vipermc/fixes/DupeFix.java new file mode 100644 index 0000000..1193e36 --- /dev/null +++ b/ViperFixes/src/main/java/com/vipermc/fixes/DupeFix.java @@ -0,0 +1,55 @@ +package com.vipermc.fixes; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockDispenseEvent; +import org.bukkit.event.entity.ItemSpawnEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.Plugin; + +public class DupeFix implements Listener +{ + + + @EventHandler(priority = EventPriority.LOW) + public void removeDupedItems(PlayerInteractEvent event) { + // Do nothing if player has permission. + Player player = event.getPlayer(); + // Do nothing if item stack size is greater than 0. + if (player.getItemInHand().getAmount() > 0) return; + // Remove duped item + player.setItemInHand(null); + } + @EventHandler(ignoreCancelled = true, priority = EventPriority.LOW) + public void removeDupedItems(ItemSpawnEvent event) { + // Do nothing if item stack size is greater than 0. + if (event.getEntity().getItemStack().getAmount() > 0) return; + // Remove duped item. + event.setCancelled(true); + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.LOW) + public void removeDupedItems(BlockDispenseEvent event) { + // Iterate through the inventory. + InventoryHolder inventoryHolder = (InventoryHolder) event.getBlock().getState(); + for (ItemStack itemStack : inventoryHolder.getInventory()) { + // Do nothing if item is null. + if (itemStack == null) continue; + + // Do nothing if item is air. + if (itemStack.getType().equals(Material.AIR)) continue; + + // Do nothing if item stack amount is more than 0. + if (itemStack.getAmount() >= 0) continue; + + // Cancel the event. + event.setCancelled(true); + } + } + +} diff --git a/ViperFixes/src/main/java/com/vipermc/fixes/Fixes.java b/ViperFixes/src/main/java/com/vipermc/fixes/Fixes.java new file mode 100644 index 0000000..38c23f9 --- /dev/null +++ b/ViperFixes/src/main/java/com/vipermc/fixes/Fixes.java @@ -0,0 +1,317 @@ +package com.vipermc.fixes; + +import org.bukkit.plugin.java.*; + +import net.minecraft.server.v1_7_R4.TileEntity; +import net.minecraft.server.v1_7_R4.WorldServer; +import net.minecraft.util.com.google.common.collect.*; +import net.syuu.popura.PopuraPlugin; +import net.syuu.popura.claim.Position2D; +import net.syuu.popura.combattag.CombatLoggerManager; +import net.syuu.popura.combattag.CombatTagManager; +import net.syuu.popura.event.AsyncTabParaseEvent; +import net.syuu.popura.faction.FactionType; +import net.syuu.popura.faction.bean.ClaimedRegion; + +import org.bukkit.scheduler.*; +import com.google.common.collect.*; +import com.google.common.collect.Collections2; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.net.*; +import java.util.*; +import org.bukkit.plugin.*; +import org.bukkit.configuration.*; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.craftbukkit.v1_7_R4.CraftServer; +import org.bukkit.craftbukkit.v1_7_R4.CraftWorld; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.*; +import org.bukkit.event.*; +import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.ItemSpawnEvent; +import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.player.*; +import org.bukkit.event.server.ServerListPingEvent; +import org.bukkit.event.world.ChunkLoadEvent; +import org.bukkit.event.inventory.*; +import com.google.common.io.*; +import com.google.common.base.*; +import org.bukkit.inventory.*; +import org.bukkit.inventory.meta.*; +import org.bukkit.*; +import org.bukkit.World.Environment; +import org.bukkit.block.Block; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +public class Fixes extends JavaPlugin implements Listener { + + private int target = -1; + public void onEnable() { + this.getServer().getPluginManager().registerEvents(new DupeFix(), (Plugin) this); + this.getServer().getPluginManager().registerEvents((Listener) this, (Plugin) this); + + getCommand("tpnearhere").setExecutor(new CommandExecutor() { + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!sender.isOp()){ + return true; + } + Player to = ((Player)sender); + for(Player player : Bukkit.getOnlinePlayers()){ + if(player.getLocation().distance(to.getLocation()) < Integer.valueOf(args[0])){ + player.teleport(to); + } + } + return true; + } + }); + getCommand("setconnectioninterval").setExecutor(new CommandExecutor() { + + @Override + public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) { + if(!sender.isOp()){ + return true; + } + CraftServer craftserver = ((CraftServer)Bukkit.getServer()); + try { + Field field = CraftServer.class.getDeclaredField("configuration"); + field.setAccessible(true); + YamlConfiguration config = (YamlConfiguration) field.get(craftserver); + config.set("settings.connection-throttle", Integer.valueOf(args[0])); + sender.sendMessage("Connection Thorthle = " + craftserver.getConnectionThrottle()); + } catch (Exception e) { + e.printStackTrace(); + sender.sendMessage("Error"); + } + return true; + } + }); + getCommand("clist").setExecutor(new CommandExecutor() { + + @Override + public boolean onCommand(CommandSender arg0, Command arg1, String arg2, String[] args) { + for(World world : Bukkit.getWorlds()){ + arg0.sendMessage("" + world.getLoadedChunks().length); + } + + return true; + } + }); + getCommand("abcsetonlineplayers").setExecutor(new CommandExecutor() { + + @Override + public boolean onCommand(CommandSender arg0, Command arg1, String arg2, String[] args) { + if(args.length <= 0){ + arg0.sendMessage("/