Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.whitebeef.antirelog;
- import java.io.File;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.logging.Logger;
- import org.bukkit.Bukkit;
- import org.bukkit.ChatColor;
- import org.bukkit.GameMode;
- import org.bukkit.Location;
- import org.bukkit.Material;
- import org.bukkit.World;
- import org.bukkit.configuration.file.FileConfiguration;
- import org.bukkit.configuration.file.YamlConfiguration;
- import org.bukkit.entity.AreaEffectCloud;
- import org.bukkit.entity.Entity;
- import org.bukkit.entity.EntityType;
- import org.bukkit.entity.LivingEntity;
- import org.bukkit.entity.Player;
- import org.bukkit.entity.Projectile;
- import org.bukkit.entity.TNTPrimed;
- import org.bukkit.entity.Zombie;
- 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.PlayerDeathEvent;
- import org.bukkit.event.player.PlayerJoinEvent;
- import org.bukkit.event.player.PlayerQuitEvent;
- import org.bukkit.inventory.Inventory;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.inventory.meta.SkullMeta;
- import org.bukkit.plugin.PluginBase;
- import org.bukkit.plugin.java.JavaPlugin;
- import net.md_5.bungee.api.ChatMessageType;
- import net.md_5.bungee.api.chat.TextComponent;
- public class Main extends JavaPlugin implements Listener, Runnable {
- Logger log = Logger.getLogger("Minecraft");
- public long seconds = 30;
- boolean hideQuit = false;
- boolean PlayerDeath = false;
- public static Main plugin;
- ArrayList<String> livingPlayers = new ArrayList<String>();
- Map<String, String> mobs = new HashMap<String, String>();
- Map<String, Inventory> inv = new HashMap<String, Inventory>();
- public static PluginBase getInstance() {
- return plugin;
- }
- public void onEnable() {
- File players = new File(getDataFolder() + File.separator + "players.yml");
- FileConfiguration users = YamlConfiguration.loadConfiguration(players);
- Bukkit.getPluginManager().registerEvents(this, this);
- Bukkit.getScheduler().scheduleSyncRepeatingTask(this, this, 0, 20);
- if (!players.exists()) {
- try {
- players.createNewFile();
- users.createSection("allusers");
- users.createSection("users");
- log.info("[AntiRelog]: Creating new players.yml");
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- try {
- users.save(players);
- } catch (IOException e) {
- e.printStackTrace();
- }
- log.info("[AntiRelog]: Successful load!");
- }
- public void onDisable() {
- File players = new File(getDataFolder() + File.separator + "players.yml");
- FileConfiguration users = YamlConfiguration.loadConfiguration(players);
- List<String> list = users.getStringList("allusers");
- for (int i = 0; i < list.size(); i++) {
- users.set("users." + list.get(i) + ".startpvp", 0);
- }
- try {
- users.save(players);
- } catch (IOException e) {
- e.printStackTrace();
- }
- log.info("[AntiRelog]: Successful unload!");
- }
- @EventHandler
- public void onPlayerJoin(PlayerJoinEvent p) {
- boolean playerIsKicked = false;
- p.getPlayer().setCanPickupItems(false);
- File players = new File(getDataFolder() + File.separator + "players.yml");
- FileConfiguration users = YamlConfiguration.loadConfiguration(players);
- List<String> list = users.getStringList("allusers");
- if (!list.contains(p.getPlayer().getName())) {
- list.add(p.getPlayer().getName());
- users.set("allusers", list);
- users.createSection("users." + p.getPlayer().getName());
- users.createSection("users." + p.getPlayer().getName() + ".quit");
- users.createSection("users." + p.getPlayer().getName() + ".startpvp");
- users.createSection("users." + p.getPlayer().getName() + ".spawnZombie");
- users.set("users." + p.getPlayer().getName() + ".join", seconds);
- users.set("users." + p.getPlayer().getName() + ".spawnZombie", false);
- } else {
- users.set("users." + p.getPlayer().getName() + ".join", seconds);
- if ((users.getLong("users." + p.getPlayer().getName() + ".join")
- - users.getLong("users." + p.getPlayer().getName() + ".quit")) < 10
- && (users.getLong("users." + p.getPlayer().getName() + ".join")
- - users.getLong("users." + p.getPlayer().getName() + ".quit")) >= 1) {
- if (!p.getPlayer().hasPermission("arp.admin")) {
- hideQuit = true;
- p.getPlayer()
- .kickPlayer("&cАнтирелог кикнул вас! Заходите через ".replace('&', '§')
- + (10 - (users.getLong("users." + p.getPlayer().getName() + ".join")
- - users.getLong("users." + p.getPlayer().getName() + ".quit")))
- + " секунд(ы).");
- playerIsKicked = true;
- if (p.getPlayer().isDead())
- hideQuit = false;
- }
- }
- }
- try {
- users.save(players);
- } catch (IOException e) {
- e.printStackTrace();
- }
- boolean find = false;
- if (!playerIsKicked)
- if (livingPlayers.size() > 0)
- if (livingPlayers.contains(p.getPlayer().getName())) {
- for (World world : Bukkit.getWorlds()) {
- for (Entity e : world.getEntities()) {
- if (e.getUniqueId().toString().equals(mobs.get(p.getPlayer().getName()))) {
- if (e.getType() == EntityType.ZOMBIE) {
- Zombie zombie = (Zombie) e;
- Player player = p.getPlayer();
- player.setHealth(zombie.getHealth());
- player.teleport(zombie);
- zombie.remove();
- find = true;
- }
- }
- }
- }
- if (!find) {
- Player player = p.getPlayer();
- PlayerDeath = true;
- player.setHealth(0);
- }
- }
- if (!playerIsKicked) {
- users.set("users." + p.getPlayer().getName() + ".spawnZombie", false);
- livingPlayers.remove(p.getPlayer().getName());
- }
- try {
- users.save(players);
- } catch (IOException e) {
- e.printStackTrace();
- }
- p.getPlayer().setCanPickupItems(true);
- ;
- }
- @EventHandler
- public void onPlayerDeath(PlayerDeathEvent e) {
- if (PlayerDeath) {
- e.setDeathMessage("");
- e.getDrops().clear();
- }
- PlayerDeath = false;
- }
- @EventHandler
- public void onPlayerQuit(PlayerQuitEvent e) {
- File players = new File(getDataFolder() + File.separator + "players.yml");
- FileConfiguration users = YamlConfiguration.loadConfiguration(players);
- users.set("users." + e.getPlayer().getName() + ".quit", seconds);
- try {
- users.save(players);
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- if (hideQuit) {
- e.setQuitMessage("");
- }
- Player p = e.getPlayer();
- if (!(boolean) users.get("users." + p.getPlayer().getName() + ".spawnZombie") && isInPvP(p)
- && p.getGameMode() != GameMode.SPECTATOR && !p.isDead()) {
- Location loc = p.getLocation();
- World world = p.getWorld();
- Zombie zombie = (Zombie) world.spawnEntity(loc, EntityType.ZOMBIE);
- zombie.setAI(false);
- zombie.setGravity(true);
- zombie.setCanPickupItems(false);
- zombie.setGliding(true);
- zombie.setHealth(p.getHealth());
- zombie.setCustomName(p.getName());
- zombie.getEquipment().setItemInOffHand(new ItemStack(p.getEquipment().getItemInOffHand()));
- zombie.getEquipment().setItemInMainHand(new ItemStack(p.getEquipment().getItemInMainHand()));
- zombie.getEquipment().setArmorContents(p.getEquipment().getArmorContents());
- zombie.getEquipment().setItemInMainHandDropChance(0f);
- zombie.getEquipment().setItemInOffHandDropChance(0f);
- inv.put(p.getName() + "", p.getInventory());
- log.info("Игрок " + p.getName() + " вышел из игры во время пвп! Создание зомби с уникальным id "
- + zombie.getUniqueId());
- for (int i = 0; i < 36; i++) {
- p.getInventory().getItem(i);
- }
- zombie.setBaby(false);
- mobs.put(p.getName(), zombie.getUniqueId() + "");
- users.set("users." + p.getPlayer().getName() + ".spawnZombie", true);
- livingPlayers.add(p.getName());
- }
- hideQuit = false;
- try {
- users.save(players);
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- @Override
- public void run() {
- seconds++;
- for (Player player : Bukkit.getOnlinePlayers()) {
- if (isInPvP(player))
- sendAction(player, "&cВы в пвп! Время выхода: " + getTimeRemainingInPvP(player));
- if (getTimeRemainingInPvP(player) == 0) {
- pvpStopped(player);
- }
- }
- }
- @SuppressWarnings("deprecation")
- @EventHandler
- public void mobDeath(EntityDeathEvent e) {
- File players = new File(getDataFolder() + File.separator + "players.yml");
- FileConfiguration users = YamlConfiguration.loadConfiguration(players);
- if (e.getEntityType().equals(EntityType.ZOMBIE)) {
- if (!mobs.containsValue(e.getEntity().getUniqueId() + ""))
- return;
- e.getDrops().clear();
- e.setDroppedExp(0);
- LivingEntity entity = e.getEntity();
- Zombie zombie = (Zombie) entity;
- for (int i = 0; i < 41; i++) {
- if (inv.get(entity.getCustomName().toString()).getItem(i) != null)
- entity.getLocation().getWorld().dropItem(entity.getLocation(),
- new ItemStack((ItemStack) inv.get(entity.getCustomName().toString()).getItem(i)));
- }
- SkullMeta skull = (SkullMeta) Bukkit.getItemFactory().getItemMeta(Material.PLAYER_HEAD);
- skull.setOwner(entity.getName());
- ItemStack sk = new ItemStack(Material.PLAYER_HEAD, 1);
- sk.setItemMeta(skull);
- entity.getLocation().getWorld().dropItem(entity.getLocation(), sk);
- Player damager = getDamager(entity.getKiller());
- for (Player p : Bukkit.getOnlinePlayers()) {
- if (damager != null) {
- p.sendMessage(ChatColor.RED + "Игрок " + ChatColor.DARK_RED + zombie.getCustomName() + ChatColor.RED
- + " умер во время лива от игрока " + ChatColor.DARK_RED + damager.getName() + ChatColor.RED
- + "!");
- } else {
- p.sendMessage(ChatColor.RED + "Игрок " + ChatColor.DARK_RED + zombie.getCustomName() + ChatColor.RED
- + " умер во время лива!");
- }
- users.set("users." + zombie.getCustomName() + ".startpvp", 0);
- try {
- users.save(players);
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- }
- }
- @EventHandler
- public void onDamageByEntity(EntityDamageByEntityEvent e) {
- File players = new File(getDataFolder() + File.separator + "players.yml");
- FileConfiguration users = YamlConfiguration.loadConfiguration(players);
- if (!e.getEntity().getType().equals(EntityType.PLAYER) || !e.getDamager().getType().equals(EntityType.PLAYER)) {
- if (getDamager(e.getDamager()) == null || e.getEntityType() != EntityType.PLAYER)
- return;
- Player target = (Player) e.getEntity();
- Player damager = getDamager(e.getDamager());
- tryStartPvP(target);
- tryStartPvP(damager);
- users.set("users." + damager.getName() + ".startpvp", seconds);
- users.set("users." + target.getName() + ".startpvp", seconds);
- try {
- users.save(players);
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- return;
- }
- Player target = (Player) e.getEntity();
- Player damager = getDamager(e.getDamager());
- users.set("users." + damager.getName() + ".startpvp", seconds);
- users.set("users." + target.getName() + ".startpvp", seconds);
- tryStartPvP(target);
- tryStartPvP(damager);
- try {
- users.save(players);
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- private Player getDamager(Entity damager) {
- if (damager instanceof Player)
- return (Player) damager;
- if (damager instanceof Projectile) {
- Projectile proj = (Projectile) damager;
- if (proj.getShooter() instanceof Player)
- return (Player) proj.getShooter();
- } else {
- if (damager instanceof TNTPrimed) {
- TNTPrimed tntPrimed = (TNTPrimed) damager;
- try {
- if (tntPrimed.getSource().getType() != EntityType.PLAYER)
- return null;
- } catch (NullPointerException e) {
- return null;
- }
- return getDamager(tntPrimed.getSource());
- }
- if (damager instanceof AreaEffectCloud) {
- AreaEffectCloud aec = (AreaEffectCloud) damager;
- if (aec.getSource() instanceof Player)
- return (Player) aec.getSource();
- }
- }
- return null;
- }
- public boolean isInPvP(Player player) {
- File players = new File(getDataFolder() + File.separator + "players.yml");
- FileConfiguration users = YamlConfiguration.loadConfiguration(players);
- if (seconds - users.getLong("users." + player.getName() + ".startpvp") <= 30 && seconds > 30
- && seconds - users.getLong("users." + player.getName() + ".startpvp") > 0)
- return true;
- return false;
- }
- public long getTimeRemainingInPvP(Player player) {
- File players = new File(getDataFolder() + File.separator + "players.yml");
- FileConfiguration users = YamlConfiguration.loadConfiguration(players);
- if (isInPvP(player))
- return 30 - (seconds - users.getLong("users." + player.getName() + ".startpvp"));
- return -1L;
- }
- private void tryStartPvP(Player player) {
- File players = new File(getDataFolder() + File.separator + "players.yml");
- FileConfiguration users = YamlConfiguration.loadConfiguration(players);
- if (seconds < 30) {
- player.sendMessage(ChatColor.GREEN + "Временное перемирие " + (31 - seconds) + " секунд");
- return;
- }
- if (!isInPvP(player)) {
- String message = "&cВы начали ПВП! Если вы выйдете, то ваш игрок останется в сети!".replace('&', '§');
- if (!message.isEmpty())
- player.sendMessage(message);
- sendTitles(player, true);
- users.set("users." + player.getName() + ".startpvp", seconds);
- try {
- users.save(players);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- public void pvpStopped(Player player) {
- String message = "&aВы вышли из режима ПВП! Вы снова можете выйти!".replace('&', '§');
- if (!message.isEmpty())
- player.sendMessage(message);
- sendAction(player, "&aВы вышли из режима PvP!");
- }
- private void sendTitles(Player player, boolean isPvpStarted) {
- String title = isPvpStarted ? "&c&lPvP".replace('&', '§') : "".replace('&', '§');
- String subtitle = isPvpStarted ? "".replace('&', '§') : "".replace('&', '§');
- if (title == null && subtitle == null)
- return;
- player.sendTitle(title, subtitle, 10, 30, 10);
- }
- public void sendAction(Player player, String msg) {
- player.spigot().sendMessage(ChatMessageType.ACTION_BAR,
- TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', msg)));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement